From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 21 20:51:04 2022 Received: (at submit) by debbugs.gnu.org; 22 Nov 2022 01:51:04 +0000 Received: from localhost ([127.0.0.1]:49248 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxIRD-0007bJ-9V for submit@debbugs.gnu.org; Mon, 21 Nov 2022 20:51:04 -0500 Received: from lists.gnu.org ([209.51.188.17]:39716) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxIRA-0007au-W4 for submit@debbugs.gnu.org; Mon, 21 Nov 2022 20:51:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oxIRA-0005yq-Mq for bug-gnu-emacs@gnu.org; Mon, 21 Nov 2022 20:51:00 -0500 Received: from sonic304-22.consmr.mail.ne1.yahoo.com ([66.163.191.148]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oxIR8-0004X3-AU for bug-gnu-emacs@gnu.org; Mon, 21 Nov 2022 20:51:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669081856; bh=0HpSLWwddf74poIYt41np/mmoJ142x9gwnYnf90++WU=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=QZub2adF04BfHndQmPlqd5Zk0krLSIztXjtYl++XUxbK9NvfOvycF88sZWztKlSHsg1MxADqU0lqOdbMec4ROQO55KOTGQLo9fMUB5+CERALXHeEkDSVGJlBLWU1T9llG3w9UUA70vJMwoEiKEDN93gOQzmNrV+l6lYrI4fQyL3m+/RtFQJMEPnfptEpyMtfckc6VpOdFxxUpPMdQTDKrYE4oIh/Jelfl0h3S6TLUr4lc7w3jUfzzsF87NdOA9f/v2ecvooDKfemuvIB0X0ZwDTCXVEqlJ++8lJlbrIcw/xQ0WwwR940FIf1vtSQTNip3z9NUxJvlgUuKLfaFpk5TQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669081856; bh=9Gwx9744hkGuck7XhqcL2p15w9YKmY0g6wn+olGgNhy=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=oFj28620ZouD9WB2Ij4qyhaeXJwTehUF4PqlIq0tYsOeinbDLry+7xZId19a4PPnaKJ+oXdHEu69wc2TGQ5b4xjjFgE/hV+Xy4DvnWwy7xTbyeIN+1bXgoFV7x5YrnPa5s1grpRc7PnxyCHtsjuG9kpXjyoxzF4FTGb2k4l3Bx6AkmAXeM+t08G8zS7KC4MofGrEU+9nSDXufSMp1e9Q3619cRF+qaICNfGhSQXSxcMu6HSHrynEVv4cHoLffpApongP/aJPB/EUSx8SKl+CjpC45iDSqv9og+0s4q+6lnx2iC+8PcyuAHK1MaSa13zZO5RorOBvJYtVui3QoVHtoQ== X-YMail-OSG: fNEDXcsVM1km2Cw3we3bQ5FwsyLWT0rRrWpKmZCStmQ.TUylSP8x_wtjAqlprtx 8oVv0rxkCP62jYitXyv4RfNXmaQlVgG39M9AphhGUUkeY581uBWqx6NKrokqFdFhNVUmBhknlClL 9i8rrPKa5_DQ80JisGiXcPIQo2S6V2t70XIezsmzvC9CEfqv3dBBdV9TrrdQUzx_XvzVgHIRA.L4 hiMThxVBorNmk5IEpgBMPdelZAiQ.dvl9DkKrxqjuRR.0O.uqUzd0jb69bG2R_p2L_2ETzrdIwRr xq_96GVjbA8jQVGh0rwpAdSqC0iXluTDdvEfSqYPKRq_RYLCHDxNpqHWG6yEpJeoAvuyUTqVBIdp unvutStsGdtqP7Kxa2PH02mqCKtjCjiNYc4lvFTBYOKeTjgNiia05KDfPF7UAjnhP7smNNTE9uAn .3HpqIafifCUvqQy3yhtzxRjDA4Eecc3Q0xYPXvr7jqbe.u7TlY5l3xIzRGDiPlOA5UZFvGTNOXF YmAjO3mQz_wKbRQx5PmGUi9C2I_ZjPaqfNhpmkCuWbUUTl3VYS9NJrSotbQFnZ9g1t2ONFRXmJSR jcniFbUH1UM6iEZyThJbhPjUFEmHFVwqkNGMp9qkL4xev09OOzoSrsMgX8xjlTgZ_S9W3XCMpde6 lOUEJP029zEStInZCh7ErmZpp2wBovO42ut0mSxPD2cto7BfujMZ9nmMWXM0mFFpR9AYw7ZqMXdA Ktz0_.KFJnPqNiEgwvRYjJ5y_ddIpvJFwBro7tppgwrTs4SC4BPtaeIK8DttUUSJw6edO8ksDn90 UoZsoX2nsjtZBaWi0vNHcxfwu6xpFOeSkKluhV0UQZ8LO1_7ZSv2qh5YRv25XBl368UCPyAFeSxZ 3xjMTlP2O6vSLYFUZ0ZPRWB0qo8xdd1LPERV.qeWZQ54dv_dicmpxoWuJNcKWpNHAEVieiAv1IEb 62fy6RRE_d30XV99kSfpvAb4TxwwHCRcplfogpSRzVeN4vF57UBh0plQFlUdEoNSFIcy3kB9XGQ5 G3.sGtZh2Pt3yYPmXKHZELSr4DuVG0QT5JOG9wm_KaR5O5J6OnP_28yP4jG7DnK1Q5DJQ9IfNiPG gSKxdYQ4tsA5o7KDxflkAxbDDwMOonYiPOKtYe9lI9Nx4oSqv2faxengylHT_eewloOkuDAlMod7 xLRg_s60oyujw.tuzK_AylB2W5FBt_LjJRiVNpb8obZR5MNASeGn0RMhs4vTfdmiCu9PvnXpYEV5 Mxu75ncdi9i1RJP2nbq9KvGsrFNMjxAnH9EDaU.IWluYZeg2nYiPS703F3tuz7X6eABOK1xvcIrr jHk3U18UynFeKZU5kuEzu5muyLML.tHKOxS3AZPQX7Sc_DRCbjmHVLYdiAeZSHcfFyZoQqyRxMSX Mhpfg1PK28HfzKij.97cVaS6u19Qh_5CQZeBXswBwNvQQMKv58z_cUalvWGurCux6VapnSaQHNIx 19PEmBKTW198555MbeRwJEJKR4PIF9sWDkoymMCRYPdSz2Zw8ayaBKxaOfUZEYn0ViKYDl8rv3.d jDxgT1L6B5O8Db89NJptaYf_7wEwsFLg_gDdDohzaobySiKFhhykrclJRtKeGaE_vVB5p_nIuyqu QRWlK3QRGkfAAIz8_739FZAfKdoY5HXEMK4Fi6NmSKcHRpiW68u_q2hFHdnd1Esv2knG_9MJb6oc co_Sr95_JDghPtvrDZkAwaQICkpzixwiKCJHf3B3SMEZmRjLYOWgnQBWNKdhyNdYIyqwWWzMVvo6 SYzccLuX6dJLk4_9BDQJ0ctnTyMmvs49tEE3QMIhppjB4oSUZ0gNaCeZQCQozwCP7F382rtNa4oN 44e33QgYqYb189J_PlXFB_bi4IvgKTiHO0H48xcWUdR7BWqLhD4NsxuP5Cr3uYRBma3Y4uaQiznI hMIkkyAktdTnC6gSxB8_pinq3z.cvtVO8XugSf8rr0L7nCUQolFDRo7CLitRI293DTatHRYeqkWC cg3e9c3ep3ZwqSNzdwwptqXd2eugE.f3uCROlzlnpPCnp3f3zZaYHSK0.QFWwWCXuXr8Y8_CdVmA EABpzJEvD5rp2AyJY935_mN3UN0Ijlb7LGJHopoKvqwYbPabzSTowcLaZhamb5OzKnZorzJ.tO5P t2wZZTYJJOHw0LmpM6pS5Yk.y_Gjy0PwTiVejLn.u89tzHu74Op0_nE1ty3pDsSbMzJ8NHeQjCgK y62kOXD5JG0frK5KjDhbdxcvmfN9a57x082R4jWWHodIokW6r0wLoloI9Ig-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic304.consmr.mail.ne1.yahoo.com with HTTP; Tue, 22 Nov 2022 01:50:56 +0000 Received: by hermes--production-sg3-6c8895b545-lgf2t (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0c3ffce398a4b18a230799e0f57208dd; Tue, 22 Nov 2022 01:50:49 +0000 (UTC) From: Po Lu To: bug-gnu-emacs@gnu.org Subject: 29.0.50; c-ts-mode cannot fontify after macros are encountered Date: Tue, 22 Nov 2022 09:50:44 +0800 Message-ID: <87k03n4v0r.fsf@yahoo.com> MIME-Version: 1.0 Content-Type: text/plain References: <87k03n4v0r.fsf.ref@yahoo.com> X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 11382 Received-SPF: pass client-ip=66.163.191.148; envelope-from=luangruo@yahoo.com; helo=sonic304-22.consmr.mail.ne1.yahoo.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -0.6 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.6 (-) Insert the following code in a buffer, and enable c-ts-mode. #define CheckExtension(name) \ if (!name) \ { \ if (display) \ eglTerminate (display); \ fprintf (stderr, "Missing: egl%s\n", #name + 1); \ return False; \ } #define CheckExtensionGl(name) \ if (!name) \ { \ /* If the context remains current, then nothing \ will get released upon eglTerminate. */ \ eglMakeCurrent (display, EGL_NO_SURFACE, \ EGL_NO_SURFACE, EGL_NO_CONTEXT); \ eglTerminate (display); \ fprintf (stderr, "Missing: gl%s\n", #name + 1); \ return False; \ } #define LoadProc(name, ext, extname) \ if (HaveEglExtension (extname)) \ I##name \ = (void *) eglGetProcAddress ("egl" #name ext) #define LoadProcGl(name, ext, extname) \ if (HaveGlExtension (extname)) \ I##name \ = (void *) eglGetProcAddress ("gl" #name ext) #define CheckGlExtension(name) \ if (!HaveGlExtension (name)) \ { \ fprintf (stderr, "Missing %s\n", name); \ \ eglMakeCurrent (display, EGL_NO_SURFACE, \ EGL_NO_SURFACE, \ EGL_NO_CONTEXT); \ eglTerminate (display); \ return False; \ } There will be no fontification of types or string constants inside the macro bodies. CC Mode works fine. Now, insert the following code below the macro definition: static Visual * FindVisual (VisualID visual, int *depth) { XVisualInfo vinfo, *visuals; Visual *value; int nvisuals; const char *override; } visual, depth, visuals, value and override are not fontified as identifiers. Line feed characters below the macros are also fontfied as "errors". Within the following code: static BufferActivityRecord * FindBufferActivityRecord (PictureBuffer *buffer, PictureTarget *target) { BufferActivityRecord *record; /* Look through the global activity list for a record matching the given values. */ record = all_activity.global_next; while (record != &all_activity) { if (record->buffer == buffer && record->target == target) return record; record = record->global_next; } return NULL; } "record" is fontified as an identifier, but not within the condition in the while loop. Within the following code: static void compare_single_row_8bpc4 (unsigned char *data, unsigned char *xdata, size_t size, struct image_difference_statistics *statistics) { unsigned char channel_a, channel_b; int diff; size_t i; for (i = 0; i < size; ++i) { channel_a = data[i]; channel_b = xdata[i]; diff = (int) channel_b - (int) channel_a; statistics->min_diff = MIN (statistics->min_diff, diff); statistics->max_diff = MAX (statistics->max_diff, diff); } } the "i" in "size_t i" is fontified as an identifier the first time, but not in future appearances in the function. Within src/xterm.c, every appearance of ATOM_REFS_INIT is fontified in the error face. Also, inside `xm_setup_dnd_targets', xm_targets_table_header header; xm_targets_table_rec **recs UNINIT; xm_byte_order byteorder; "recs" is fontified in the error face. recs = xmalloc (sizeof *recs); recs[0] = xmalloc (FLEXSIZEOF (struct xm_targets_table_rec, targets, ntargets * 4)); recs[0]->n_targets = ntargets; "struct" is fontified in the error face. Within x_sync_note_frame_times: #ifdef FRAME_DEBUG uint_fast64_t last_frame_ms = output->last_frame_time / 1000; fprintf (stderr, "Drawing the last frame took: %"PRIuFAST64" ms (%"PRIuFAST64")\n", last_frame_ms, time); #endif "PRIuFAST64" is fontified in the error face. Within x_dnd_begin_drag_and_drop: if (x_dnd_movement_frame /* FIXME: how come this can end up with movement frames from other displays on GTK builds? */ && (FRAME_X_DISPLAY (x_dnd_movement_frame) == FRAME_X_DISPLAY (f)) /* If both those variables are false, then F is no longer protected from deletion by Lisp code. This can only happen during the final iteration of the DND event loop. */ && (x_dnd_in_progress || x_dnd_waiting_for_finish)) { XSETFRAME (frame_object, x_dnd_movement_frame); is fontified incorrectly: the "if" is not fontified at all, and the last three lines show up in the error faces. In addition: Lisp_Object x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction, Lisp_Object return_frame, Atom *ask_action_list, const char **ask_action_names, size_t n_ask_actions, bool allow_current_frame, Atom *target_atoms, int ntargets, Lisp_Object selection_target_list, bool follow_tooltip) "Lisp_Object" and "x_dnd_begin_drag_and_drop" are not fontified at all. Here: /* Select for input extension events used by scroll bars. This will result in the corresponding core events not being generated for SCROLL_BAR. */ MAYBE_UNUSED static void xi_select_scroll_bar_events (struct x_display_info *dpyinfo, Window scroll_bar) "void" is fontified in the error face. Here, in handle_one_xevent: #ifdef HAVE_XINPUT2 if (event->type != GenericEvent) #endif any = x_any_window_to_frame (dpyinfo, event->xany.window); #ifdef HAVE_XINPUT2 else any = NULL; #endif the "else" is fontified as a type. static int handle_one_xevent (struct x_display_info *dpyinfo, #ifndef HAVE_XINPUT2 const XEvent *event, #else XEvent *event, #endif int *finish, struct input_event *hold_quit) the "const XEvent *" is fontified in the error face. Here: case GraphicsExpose: /* This occurs when an XCopyArea's source area was obscured or not available. */ f = x_window_to_frame (dpyinfo, event->xgraphicsexpose.drawable); if (f) { expose_frame (f, event->xgraphicsexpose.x, event->xgraphicsexpose.y, event->xgraphicsexpose.width, event->xgraphicsexpose.height); #ifndef USE_TOOLKIT_SCROLL_BARS x_scroll_bar_handle_exposure (f, (XEvent *) event); #endif #ifdef USE_GTK x_clear_under_internal_border (f); #endif #ifdef HAVE_XDBE show_back_buffer (f); #endif } #ifdef USE_X_TOOLKIT else goto OTHER; #endif /* USE_X_TOOLKIT */ break; "goto OTHER" is fontified in the error face, and "else" as a type. Here: #ifdef HAVE_XINPUT2 if (event->xkey.time == pending_keystroke_time) { source = xi_device_from_id (dpyinfo, dpyinfo->pending_keystroke_source); if (source) inev.ie.device = source->name; } #endif "inev" is fontified in the error face. Here: #ifdef USE_GTK /* See comment in EnterNotify above */ else if (dpyinfo->last_mouse_glyph_frame) x_note_mouse_movement (dpyinfo->last_mouse_glyph_frame, &event->xmotion, Qnil); #endif "else" and "dpyinfo" are fontified as types. #ifdef USE_MOTIF Widget widget; widget = XtWindowToWidget (dpyinfo->display, event->xbutton.window); if (widget && XmIsCascadeButton (widget) && XtIsSensitive (widget)) { #endif if (!f->output_data.x->saved_menu_event) f->output_data.x->saved_menu_event = xmalloc (sizeof *event); *f->output_data.x->saved_menu_event = *event; inev.ie.kind = MENU_BAR_ACTIVATE_EVENT; XSETFRAME (inev.ie.frame_or_window, f); *finish = X_EVENT_DROP; #ifdef USE_MOTIF } #endif here, the last closing brace is fontified in the error face. Here: static void NO_INLINE x_error_quitter (Display *display, XErrorEvent *event) { char buf[256], buf1[400 + INT_STRLEN_BOUND (int) + INT_STRLEN_BOUND (unsigned long)]; "NO_INLINE" and "unsigned long" are fontified in the error face. CC mode fontifies all of the examples above fine, and they are not even pre-standard C. Would someone please fix c-ts-mode to fontify them correctly as well? In GNU Emacs 29.0.50 (build 238, x86_64-pc-linux-gnu) of 2022-11-22 built on trinity Repository revision: aeadba1418d8fc18f17b4ae415cde35e9e272e7a Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101099 System Description: Fedora Linux 37 (Workstation Edition) Configured using: 'configure --with-x --with-x-toolkit=no --without-cairo --with-dumping=unexec --cache-file=/tmp/ccache' Configured features: ACL DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY OLDXMENU PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TREE_SITTER UNEXEC WEBP X11 XDBE XFT XIM XINPUT2 XPM ZLIB Important settings: value of $LANG: en_GB.utf8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: C/*l Minor modes in effect: tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t abbrev-mode: t Load-path shadows: None found. Features: (shadow sort emacsbug mail-extr message sendmail mailcap yank-media puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader reporter find-dired ffap url-parse auth-source eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars thingatpt files-x grep compile text-property-search comint ansi-osc ansi-color ring c-ts-mode rx treesit cl-seq vc-dispatcher vc-svn cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs misearch multi-isearch dired-aux cl-loaddefs cl-lib dired dired-loaddefs rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 171735 10469) (symbols 48 26041 14) (strings 32 45784 1739) (string-bytes 1 1373049) (vectors 16 26115) (vector-slots 8 653341 15564) (floats 8 75 179) (intervals 56 3663 0) (buffers 992 18)) From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 22 15:11:28 2022 Received: (at 59468) by debbugs.gnu.org; 22 Nov 2022 20:11:28 +0000 Received: from localhost ([127.0.0.1]:52605 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxZc7-00016R-Am for submit@debbugs.gnu.org; Tue, 22 Nov 2022 15:11:27 -0500 Received: from mail-pg1-f181.google.com ([209.85.215.181]:44706) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxZc5-00016D-5n for 59468@debbugs.gnu.org; Tue, 22 Nov 2022 15:11:25 -0500 Received: by mail-pg1-f181.google.com with SMTP id q1so14964759pgl.11 for <59468@debbugs.gnu.org>; Tue, 22 Nov 2022 12:11:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:from:to:cc:subject:date:message-id :reply-to; bh=6YJTpzz8DtGYoeGniJ76Pva3bRvvhebLhEnrJou1+vQ=; b=bSehFa92FraTBYhXG82FD0s3UqoMd2k5Go84iMUCuj/+SXk4sUCwgXA5swRg9qODHa Y6ykxcdtpvaYmaGeupD9myFHdwJwghuDYrA8seGckSFFW0gkhl+3CqTtkLIQVPsxDLDQ 8sjpgIiuHc2Nftm4qrrNiSzHxpZsSVh1ieJEZIJAraZXIsUMgAVbUT6O4oSdk4DEfcHA rvA0fQcaia2xWrAf7RNyvT5i1kK/C/uFBdWpqXQuPl0j+jjFtNfna31SDBnlwaCRsGFo YREZRCxGGtO6cHJQ3DZOHEmTe3XU78jppQfrum5niv5rCdaw8CIOIEYQ13sSNUOEWCAh Q0QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6YJTpzz8DtGYoeGniJ76Pva3bRvvhebLhEnrJou1+vQ=; b=UCGc72lO81LQcRLarQV431R/V/2+xSa0jHIhViDmVqwyMHT7Ahhv1vfCi5i8LILzwg H7fYs+UYhtk2Bi3lF4VELMpwcbNkG1VE2E4XV3rZi/sUwxTMmLcg2hCC87a6czTpB8am +qNQp2eFPKmYb6YTB1L+eTC6v/R8qOn0wYhl/4F0ZXwfzX56Yhtm1aVUCZQErxeFjBW9 OAbK9pfv+K4XEDGzLMDamZUFwfFRxcR1i+jROemateAciFVFX9AHqVuNRfeOZhMWZOJL UZWDGuBECxEqo7yBtrbmnLuWKVs2tgDVyimAJZ8/2x2/MYMlDkgSg8tZeQ5/ueMi5Mq5 2YXQ== X-Gm-Message-State: ANoB5pm+iRcnoKVE3H1f8Hhl1zFWH4mBm4cvm6e5uyc1x1QKMYmVr5K9 UitES2xbZ0ietm3ypQV/68U= X-Google-Smtp-Source: AA0mqf7GzdkQqhtWRiXu1HxK09T7KftSZ3tTyXOacvvFQI3NPHpBh0aHujcHAeVunnq1gFZf1Cd3+w== X-Received: by 2002:a05:6a00:16c6:b0:573:65d4:a104 with SMTP id l6-20020a056a0016c600b0057365d4a104mr16465136pfc.85.1669147878963; Tue, 22 Nov 2022 12:11:18 -0800 (PST) Received: from smtpclient.apple (cpe-172-117-161-177.socal.res.rr.com. [172.117.161.177]) by smtp.gmail.com with ESMTPSA id c10-20020a630d0a000000b0047702d44861sm9490494pgl.18.2022.11.22.12.11.18 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Nov 2022 12:11:18 -0800 (PST) From: Yuan Fu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered Message-Id: Date: Tue, 22 Nov 2022 12:11:17 -0800 To: Po Lu X-Mailer: Apple Mail (2.3696.120.41.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Po Lu writes: > Insert the following code in a buffer, and enable c-ts-mode. > > #define CheckExtension(name) \ > if (!name) \ > { \ > if (display) \ > eglTerminate (display); \ > fprintf (stderr, "Missing: egl%s\n", #name + 1); \ > return False; \ > } > > #define CheckExtensionGl(name) \ > if (!name) \ > { \ > /* If the context remains current, then nothing \ > will get released upon eglTerminate. */ \ > eglMakeCurrent (display, EGL_NO_SURFACE, \ > EGL_NO_SURFACE, EGL_NO_CONTEXT); \ > eglTerminate (display); \ > fprintf (stderr, "Missing: gl%s\n", #name + 1); \ > return False; \ > } > > #define LoadProc(name, ext, extname) \ > if (HaveEglExtension (extname)) \ > I##name \ > =3D (void *) eglGetProcAddress ("egl" #name ext) > > #define LoadProcGl(name, ext, extname) \ > if (HaveGlExtension (extname)) \ > I##name \ > =3D (void *) eglGetProcAddress ("gl" #name ext) > > #define CheckGlExtension(name) \ > if (!HaveGlExtension (name)) \ > { \ > fprintf (stderr, "Missing %s\n", name); \ > \ > eglMakeCurrent (display, EGL_NO_SURFACE, \ > EGL_NO_SURFACE, \ > EGL_NO_CONTEXT); \ > eglTerminate (display); \ > return False; \ > } > > There will be no fontification of types or string constants inside the > macro bodies. CC Mode works fine. > > Now, insert the following code below the macro definition: > > static Visual * > FindVisual (VisualID visual, int *depth) > { > XVisualInfo vinfo, *visuals; > Visual *value; > int nvisuals; > const char *override; > } > > visual, depth, visuals, value and override are not fontified as > identifiers. Line feed characters below the macros are also fontfied = as > "errors". > > Within the following code: > > static BufferActivityRecord * > FindBufferActivityRecord (PictureBuffer *buffer, PictureTarget = *target) > { > BufferActivityRecord *record; > > /* Look through the global activity list for a record matching > the given values. */ > record =3D all_activity.global_next; > while (record !=3D &all_activity) > { > if (record->buffer =3D=3D buffer > && record->target =3D=3D target) > return record; > > record =3D record->global_next; > } > > return NULL; > } > > "record" is fontified as an identifier, but not within the condition = in > the while loop. > > Within the following code: > > static void > compare_single_row_8bpc4 (unsigned char *data, unsigned char *xdata, > size_t size, > struct image_difference_statistics = *statistics) > { > unsigned char channel_a, channel_b; > int diff; > size_t i; > > for (i =3D 0; i < size; ++i) > { > channel_a =3D data[i]; > channel_b =3D xdata[i]; > > diff =3D (int) channel_b - (int) channel_a; > statistics->min_diff =3D MIN (statistics->min_diff, > diff); > statistics->max_diff =3D MAX (statistics->max_diff, > diff); > } > } > > the "i" in "size_t i" is fontified as an identifier the first time, = but > not in future appearances in the function. > > Within src/xterm.c, every appearance of ATOM_REFS_INIT is fontified in > the error face. Also, inside `xm_setup_dnd_targets', > > xm_targets_table_header header; > xm_targets_table_rec **recs UNINIT; > xm_byte_order byteorder; > > "recs" is fontified in the error face. > > recs =3D xmalloc (sizeof *recs); > recs[0] =3D xmalloc (FLEXSIZEOF (struct = xm_targets_table_rec, > targets, ntargets * 4)); > > recs[0]->n_targets =3D ntargets; > > "struct" is fontified in the error face. Within > x_sync_note_frame_times: > > #ifdef FRAME_DEBUG > uint_fast64_t last_frame_ms =3D output->last_frame_time / 1000; > fprintf (stderr, > "Drawing the last frame took: %"PRIuFAST64" ms = (%"PRIuFAST64")\n", > last_frame_ms, time); > #endif > > "PRIuFAST64" is fontified in the error face. Within > x_dnd_begin_drag_and_drop: > > if (x_dnd_movement_frame > /* FIXME: how come this can end up with movement frames > from other displays on GTK builds? */ > && (FRAME_X_DISPLAY (x_dnd_movement_frame) > =3D=3D FRAME_X_DISPLAY (f)) > /* If both those variables are false, then F is no > longer protected from deletion by Lisp code. This > can only happen during the final iteration of the DND > event loop. */ > && (x_dnd_in_progress || x_dnd_waiting_for_finish)) > { > XSETFRAME (frame_object, x_dnd_movement_frame); > > is fontified incorrectly: the "if" is not fontified at all, and the = last > three lines show up in the error faces. > > In addition: > > Lisp_Object > x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction, > Lisp_Object return_frame, Atom = *ask_action_list, > const char **ask_action_names, size_t = n_ask_actions, > bool allow_current_frame, Atom *target_atoms, > int ntargets, Lisp_Object = selection_target_list, > bool follow_tooltip) > > "Lisp_Object" and "x_dnd_begin_drag_and_drop" are not fontified at = all. > > Here: > > /* Select for input extension events used by scroll bars. This will > result in the corresponding core events not being generated for > SCROLL_BAR. */ > > MAYBE_UNUSED static void > xi_select_scroll_bar_events (struct x_display_info *dpyinfo, > Window scroll_bar) > > "void" is fontified in the error face. > > Here, in handle_one_xevent: > > #ifdef HAVE_XINPUT2 > if (event->type !=3D GenericEvent) > #endif > any =3D x_any_window_to_frame (dpyinfo, event->xany.window); > #ifdef HAVE_XINPUT2 > else > any =3D NULL; > #endif > > the "else" is fontified as a type. > > static int > handle_one_xevent (struct x_display_info *dpyinfo, > #ifndef HAVE_XINPUT2 > const XEvent *event, > #else > XEvent *event, > #endif > int *finish, struct input_event *hold_quit) > > the "const XEvent *" is fontified in the error face. > > Here: > > case GraphicsExpose: /* This occurs when an XCopyArea's > source area was obscured or not > available. */ > f =3D x_window_to_frame (dpyinfo, = event->xgraphicsexpose.drawable); > if (f) > { > expose_frame (f, event->xgraphicsexpose.x, > event->xgraphicsexpose.y, > event->xgraphicsexpose.width, > event->xgraphicsexpose.height); > #ifndef USE_TOOLKIT_SCROLL_BARS > x_scroll_bar_handle_exposure (f, (XEvent *) event); > #endif > #ifdef USE_GTK > x_clear_under_internal_border (f); > #endif > #ifdef HAVE_XDBE > show_back_buffer (f); > #endif > } > #ifdef USE_X_TOOLKIT > else > goto OTHER; > #endif /* USE_X_TOOLKIT */ > break; > > "goto OTHER" is fontified in the error face, and "else" as a type. > > Here: > > #ifdef HAVE_XINPUT2 > if (event->xkey.time =3D=3D pending_keystroke_time) > { > source =3D xi_device_from_id (dpyinfo, > = dpyinfo->pending_keystroke_source); > > if (source) > inev.ie.device =3D source->name; > } > #endif > > "inev" is fontified in the error face. > > Here: > > #ifdef USE_GTK > /* See comment in EnterNotify above */ > else if (dpyinfo->last_mouse_glyph_frame) > x_note_mouse_movement (dpyinfo->last_mouse_glyph_frame, > &event->xmotion, Qnil); > #endif > > "else" and "dpyinfo" are fontified as types. > > #ifdef USE_MOTIF > Widget widget; > > widget =3D XtWindowToWidget (dpyinfo->display, > event->xbutton.window); > > if (widget && XmIsCascadeButton (widget) > && XtIsSensitive (widget)) > { > #endif > if (!f->output_data.x->saved_menu_event) > f->output_data.x->saved_menu_event =3D xmalloc (sizeof = *event); > *f->output_data.x->saved_menu_event =3D *event; > inev.ie.kind =3D MENU_BAR_ACTIVATE_EVENT; > XSETFRAME (inev.ie.frame_or_window, f); > *finish =3D X_EVENT_DROP; > #ifdef USE_MOTIF > } > #endif > > here, the last closing brace is fontified in the error face. > > Here: > > static void NO_INLINE > x_error_quitter (Display *display, XErrorEvent *event) > { > char buf[256], buf1[400 + INT_STRLEN_BOUND (int) > + INT_STRLEN_BOUND (unsigned long)]; > > "NO_INLINE" and "unsigned long" are fontified in the error face. > > CC mode fontifies all of the examples above fine, and they are not = even > pre-standard C. Would someone please fix c-ts-mode to fontify them > correctly as well? > Thanks for these reports! Buuuuut as we=E2=80=99ve seen, tree-sitter = really doesn=E2=80=99t handle macros that well. I=E2=80=99ll see what I can do = when I find the time, but there really isn=E2=80=99t any good solutions to this (right = now, that I can think of). I=E2=80=99m not even sure the author of tree-sitter-c = would accept changes that try to parse macros: he has made it clear that the purpose of tree-sitter-c is to support post-processed C and leave macros and preprocessor to error-recovery. Yuan From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 22 19:41:29 2022 Received: (at 59468) by debbugs.gnu.org; 23 Nov 2022 00:41:29 +0000 Received: from localhost ([127.0.0.1]:52902 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxdpR-0004FX-7s for submit@debbugs.gnu.org; Tue, 22 Nov 2022 19:41:29 -0500 Received: from sonic312-25.consmr.mail.ne1.yahoo.com ([66.163.191.206]:38775) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxdpO-0004FI-5y for 59468@debbugs.gnu.org; Tue, 22 Nov 2022 19:41:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669164080; bh=3e0uLBGABHeFRUUdP43gRdC7X1x3/sZo90m9PfaIFJA=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=b5SyDeBtGtQiE2J1uyMx4eVnLEqkyY5tNyIdI1TKfDdcGaNS6mFwKhJaQzGhfLdTIfackDCHVch1/dJJSKG+rakAue5oreVc5e5yDOSmVV//GqMxTORVu0hiA8tdJtklO7D2VhxngJ1MDWJ/1b2QU+lYku+4xX9EMnB1475B4Kduytkx8JRda5gxfRvsD6YfM+NSEI5WPeKnOqH4GUA7fLYNa3KTX2QYmaf1Mrohelt4tw+NhPeJRLIOdoOPskO0Y2X8w9IQxoez2vpDmoPM11qe+JmlbqW1QrzdDVr+QIq5Hz9Hq6B9h3xkQE0YtoAJ5DZcFw1m/l3S7rZn1CnBQA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669164080; bh=iTHMgMxpGoMT+1adetYr/PrtIzsBvVGGSfBg1+Dmq6i=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=NUvv+u2trMWfCHUrSQ+8Jqw+aFMAR+S7urJ13wKZA/SYUYshy4GHnFiLoZKrnRJKnw0ZLXHVldQdUiDJ1QotEC94+ol+QXalmEfc3yya03dsR8ON+DvpUhI+nDyEKTRsIDWm9bHpmM+uPID/E4cdgTPCVFiutOCoe2fUmHk819OuuNpbkEOeiDDRPqx8xe5EfG8qXkeZj9T49ZsI3T3k41lnfWG26DqgKTOIX0gmbnr+HlyZpMHcyCl00kKUQ+7aokw6jt6F02b59zEww55HF0IIrI3+eAxfRqmmwlkqe5yHQzqdlT9w76QhXJYjf5ZXCTDdEZRc4GmEUId4rVGGSA== X-YMail-OSG: NC6vSw0VM1n2Q0w1nZcHmLgwZkREdxU1yTies1zUfhAZ3HBOgTC3wA_T0qAG7Ps 1E3OdRv_oJjxjvR8bhM0b1Vbr5CIr7rK8XvGFDwKNXtAkdoDDt8oSVmgHFeHIIgRwmi..U7LPH3j KkIMh9ooB7whR_Tn1Pky6hoTWhx1INFSkSOMZNBgyNO3wxNwOhyTtIwryGty_YSAiGZWL9yAaQ6D hfp2MCwhoLzpsxSAZ3or3AerpgR9XutGCocm33iuSvOaA6ujVpzKAYqi4neqRiKN5_66TxHYVahu .5Xhu663_p0YlS5Kz0k.KImjeqoP1sTDP6flLkAZ45RQ1NYnZZeI_u4USmQ4bcyyny1ibybn7KmZ iV0UzL3UAVONFuoVjsHAZCiZyOlHsFYDTL8Ibz4P0i3N_f9Qn3kLTeHfEpZDK0EFOrMS7eSjGlOI mpX1BiVdD8Bw6GwsusJBzCFH.45dCQ1HRv3umAux5ac0IGiO.egq84SPFppHuxqN9sszywK2l9q8 9Xe8V9Z.5G0MwoM077RdNUSZsvkyavxerX9gjcX8x41T1Z.AkNJZtwJuW0aqmWSIVMnxc5EdP5Go VajHJIaYLuJjcP6KUANExm3J8lnbLk3KXu6EgezawmI33gaADkk4Ex3LdoQ_jri62q1MC9y3hjBM qNRHZpuvKTsHqjeC7xkx2RTIYYghDlc7qxctcfU8HzTa1ozyoC80Na0J4t3XtROA.OLegPhRHOpt htftXqNd5YqbbR0kLrhEGcjxbx9B28x4Kbr4G7WAk02vahCtSeYPouuohDXbMHTPC23ICHxYcUID mgIISsW7NmXqpafJM0gtdkMFGo9reW7NdBQ5.RRDt6taabRqc9GxDr0JOC15ukzykMY4msbnTqE2 8KNOXJzBenlUCzmPviUMA4fnD30LGlX143U.d92qbsirj9j5v.nDGLrvpvdSXd5YZ0jJA5HCOnrv P7arR9N3i0_kJPC3gl.hdfhy.P_mnvTjYtTsy5WvRqnfhMf4c83lt.l1NVY7v.q8v4zWaz7bH2i. RxbX8PRRzeWNzztOG8WiClr1IbP8UMrVbjxBCgcIqLb4vb_upJINXtyOgV_0RaISh5AHvCjySzQc mqNPULsIJ1Yu2DynhQs5G8eqfscNVAHXKAKHixc9Wkm.FqJj.uMQGKXxfjjeXvr1obiZIk_2X8HJ rzGw6.Va3J23XeKdM4042iIgwPt0GuzDQFfz86BxwaE87JU7CWnpXbjxrlYjL5V9kcZioCawjqUM E8zW_tpWUeNMaieiTOrqLWRiP6qvuTHkW3NBC07JvrUulvIt9PzthKKI.N9LKcp.Jf1fvsCSUCf7 xqdlaMKL0AkGdSVDROPlFBw8csn_XzmJfXLG9SMoo4bvqq5K4hMTsrF._ixtgJgJErUbWl..bGQ. IDgR1hxrAQxzCFKUhrmPd3fo51vNizUoViv0HR0eCCvHL5C1vTDOAyv.J6onSPu5KJMXrtHLVjj4 g0E_aWosliFHnG07Tx71qE4jb6oInWSZUkpDSGoNZbQtW5ng5O5OeJCXlv6o8_B9xwKTeTgDJDjD vK8RXDoQpce1ag2DQqcFX58SqfKUZ.E0mnKTYEQAcywozTbViYt6DRbZXEfNzqCT9jnr6Ep7CyBn i_AFav9sumiTIDDHe32LXLQMGoKnTJAhU4rqDfOkdyMvGzk4KUJr93tvZ9pmOliwQVs5wB_5_oGq PxAvNj_jloD57xCxZi3PBMChnIEcJAQpC3rWGPuv__6oWIYQlmQBAjI5RZqTl__yFuY0u94Q9pwK mO4oUU6EEtisChb_b26elaKSkefUSql0bbD0jCzRLWBA64l9uAxa3aAw8aGdQjytRD3Ay9m6CvzJ rAUpU6wADS1IRshn_BuKB_hVYF76RXWz84tIJGYvIuvep3vSKmi9PEtMOM7.6kyB_XqkylKy_aXE tKzTkUKb3iLi8jf7HVza.xcF8FZ8YdZJnVK27FbVAANyuc2Jhxyk8oiiuKXdImFQjBhgu3Ev..Vq XriRIjYk7R79riJ7jyVGUj_9izWIQPi6yWZq8v4BSD811YVZtroN4SliY1TtCG1Kp7OfXpH0Aff5 Q1LETIJ6QoKxJJqx_VCGPTldZMVcE46Co2FLAKEAtIIr6zFvoxOIyJ_SqgFb3TAoxbYqWdohDXAd Vyl02nGW24R5Tgux3gZsE384YUbJ7RFPe5.qvWIMYkJ26PGYPR6os7gZivcOP4xOqLdhNk9SnKpP VRxq.D89631tNLIWGNWus9ttob2xBlVDyH1cTyCb0hcUMHrfaHFyejNxGxTKxDWu1XFc- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ne1.yahoo.com with HTTP; Wed, 23 Nov 2022 00:41:20 +0000 Received: by hermes--production-sg3-6c8895b545-qz6cd (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 0b5663796c76e8615caac7ef2db72a74; Wed, 23 Nov 2022 00:41:13 +0000 (UTC) From: Po Lu To: Yuan Fu Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered In-Reply-To: (Yuan Fu's message of "Tue, 22 Nov 2022 12:11:17 -0800") References: Date: Wed, 23 Nov 2022 08:41:08 +0800 Message-ID: <87r0xu33kr.fsf@yahoo.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 747 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Yuan Fu writes: > Thanks for these reports! Buuuuut as we=E2=80=99ve seen, tree-sitter real= ly > doesn=E2=80=99t handle macros that well. I=E2=80=99ll see what I can do w= hen I find the > time, but there really isn=E2=80=99t any good solutions to this (right no= w, that > I can think of). I=E2=80=99m not even sure the author of tree-sitter-c wo= uld > accept changes that try to parse macros: he has made it clear that the > purpose of tree-sitter-c is to support post-processed C and leave macros > and preprocessor to error-recovery. Thanks, and too bad. However, one cannot help but wonder how he is supposed to write only "post-processed" C. I think that attitude of the tree-sitter-c developer is extremely nasty. From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 22 22:30:46 2022 Received: (at 59468) by debbugs.gnu.org; 23 Nov 2022 03:30:46 +0000 Received: from localhost ([127.0.0.1]:53067 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxgTG-0008K7-6B for submit@debbugs.gnu.org; Tue, 22 Nov 2022 22:30:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34726) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxgTC-0008Js-Oo for 59468@debbugs.gnu.org; Tue, 22 Nov 2022 22:30:45 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oxgT7-0004ZV-G8; Tue, 22 Nov 2022 22:30:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=JtFf9hT6B3jElia6FOjVnwm25HtrnUtNwGFfo2cxDNw=; b=rhMxmXoQKAdOJqC+BOAJ BDdfG1avXm33tg+TmowqtdJZlOGmfYadVfM1tb0FE3JtgaUJLFoqyqRiK4ZJDqcrpgSSssAj/L/Xq s8c7m3voBrinZkNefPxRuC/g370FD9LYJFsMIwz0xl1ls+y92vWkXFQ9T+03g4S1Fkswdr//goEab 3Drdi46pz4LdYb0OqP8iXLYuFoPKpBTisiXVpRpJWUaDT1lzKNzBxovx/cDkYN9W5RJJv4LcjASH7 tOyF34YRetF3c4/aFEnpaI4YMjhvyOPydxaun1gTBVJJCbuQc5hSm3EPJFmK0VWhvTqIz4xG6IAps PUoK72uhuC2ohg==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oxgT6-0001xY-VK; Tue, 22 Nov 2022 22:30:37 -0500 Date: Wed, 23 Nov 2022 05:30:53 +0200 Message-Id: <83tu2qz6s2.fsf@gnu.org> From: Eli Zaretskii To: Yuan Fu In-Reply-To: (message from Yuan Fu on Tue, 22 Nov 2022 12:11:17 -0800) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered References: <87k03n4v0r.fsf@yahoo.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59468 Cc: luangruo@yahoo.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 59468@debbugs.gnu.org > From: Yuan Fu > Date: Tue, 22 Nov 2022 12:11:17 -0800 > > I’m not even sure the author of tree-sitter-c would accept changes that > try to parse macros: he has made it clear that the purpose of > tree-sitter-c is to support post-processed C and leave macros and > preprocessor to error-recovery. What do you mean by "error-recovery"? Is it possible to do something on our end for processing the error nodes, which would remedy the issue with macros? Or maybe some other way of handling the macros by ourselves? From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 22 23:13:59 2022 Received: (at 59468) by debbugs.gnu.org; 23 Nov 2022 04:13:59 +0000 Received: from localhost ([127.0.0.1]:53158 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxh95-0000zn-6H for submit@debbugs.gnu.org; Tue, 22 Nov 2022 23:13:59 -0500 Received: from mail-pf1-f173.google.com ([209.85.210.173]:39656) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxh92-0000za-OH for 59468@debbugs.gnu.org; Tue, 22 Nov 2022 23:13:57 -0500 Received: by mail-pf1-f173.google.com with SMTP id 140so16262163pfz.6 for <59468@debbugs.gnu.org>; Tue, 22 Nov 2022 20:13:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=jEAB10/DKLENHxNC/ZYqqxScUkL3MNdWGFXidlSaScA=; b=bl6sW414Nrb6GgVhqPL62GwvRowZDgX8HMxtYu4h68SkmS1sqfOWREbQG0BQog/vPG H8QdAWO52hRXieC4CEkGXM7zslpzFhinvjhdAmI8XbBu+kRMp3reNU2pxZ5M7CSjm8jU 9EcoGpuiHZbiq/yhe7bxQJ+nqCaCmhtuaUmsH7vBLuogsTvL+avjtvV3TefAXIfvFt2X XqeKrVlJjWjXllhVLXknpBoXZ+nFmDgCgxwXFIg/HJVP1OEqOV4W4YWzLLnnNBs6piq+ d2tpnRj7047OnprGn6Q9AZVI0T+7oh/89Ss4649xzdCE70FNVFQXeV5z4q76BFxlSS/Z MJCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jEAB10/DKLENHxNC/ZYqqxScUkL3MNdWGFXidlSaScA=; b=t4CvK07kY1VoMW8xGujPZuGjQgmX8W1gyJkFQ0aoNCkn1k/169di4QAep0qptrgIbI 1mt4TsSXZI1Ery+ql1Vj38YV+rUip0/+d1MZGLBiT56UIcptkOoXFcBA2O0wxZ4dO/gH MhBdjeP4Qr4jk4Vw5VYWQQeIJr/XjEuaNhwQL3Oh0F17eIl5L653qz811KdXcyxB+whd N6MFV5exRInd+pqzZIx9x9mvbWdb2RyCWfUN4qKgmtD8JtiCAYgczwhpeLbaeb4ukJ3n LAw5MK+3JFc4/NRFJc6YqJGJyHybR8bmTP9nRl6pml0pWws5zxpUr9WwsofyviKMniGh 12bg== X-Gm-Message-State: ANoB5plCH0CkSlFWS3aWDuhBKYgK3tVHyunGrt487I5eHe6gsLlNo3Jd uZXSR8NHGi0p2YVd7+ts5J0= X-Google-Smtp-Source: AA0mqf7fchbxKRC3tNmCEdRJi5tf6ONzXgdJs6C5ztbwCHml98tSOBmYkgcLLbFGaXwkaM+PSLIO5A== X-Received: by 2002:a63:5b47:0:b0:437:e9f3:8add with SMTP id l7-20020a635b47000000b00437e9f38addmr6697362pgm.438.1669176830859; Tue, 22 Nov 2022 20:13:50 -0800 (PST) Received: from smtpclient.apple (cpe-172-117-161-177.socal.res.rr.com. [172.117.161.177]) by smtp.gmail.com with ESMTPSA id g197-20020a6252ce000000b0056e0ff577edsm11463037pfb.43.2022.11.22.20.13.49 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Nov 2022 20:13:50 -0800 (PST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered From: Yuan Fu In-Reply-To: <83tu2qz6s2.fsf@gnu.org> Date: Tue, 22 Nov 2022 20:13:49 -0800 Content-Transfer-Encoding: quoted-printable Message-Id: <928B0F3C-4C8C-49EF-AB27-D49BF5E27607@gmail.com> References: <87k03n4v0r.fsf@yahoo.com> <83tu2qz6s2.fsf@gnu.org> To: Eli Zaretskii X-Mailer: Apple Mail (2.3696.120.41.1.1) X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: luangruo@yahoo.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > On Nov 22, 2022, at 7:30 PM, Eli Zaretskii wrote: >=20 >> Cc: 59468@debbugs.gnu.org >> From: Yuan Fu >> Date: Tue, 22 Nov 2022 12:11:17 -0800 >>=20 >> I=E2=80=99m not even sure the author of tree-sitter-c would accept = changes that >> try to parse macros: he has made it clear that the purpose of >> tree-sitter-c is to support post-processed C and leave macros and >> preprocessor to error-recovery. >=20 > What do you mean by "error-recovery"? Basically if tree-sitter encounters something that doesn=E2=80=99t = comply to the grammar, it tries to skip a number of tokens, and parse = the rest of the file normally. This way any error is localized and the = rest of the file can still be parsed. It could also insert =E2=80=9Cmissin= g nodes=E2=80=9D to the tree (eg, a missing parentheses) if that works = better than skipping tokens. Those tokens that are skipped are put under = an ERROR node, to indicated that they are skipped and normally = shouldn=E2=80=99t be there in well-formed text. > Is it possible to do something on our end for processing the error = nodes, > which would remedy the issue with macros? Or maybe some other way of > handling the macros by ourselves? For each of the ERROR nodes, we can look at the skipped tokens inside, = and look around with some regex searching. That would take some = non-trivial effort, I imagine. Yuan= From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 23 02:36:49 2022 Received: (at 59468) by debbugs.gnu.org; 23 Nov 2022 07:36:49 +0000 Received: from localhost ([127.0.0.1]:53325 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxkJN-00067m-65 for submit@debbugs.gnu.org; Wed, 23 Nov 2022 02:36:49 -0500 Received: from sonic304-20.consmr.mail.ne1.yahoo.com ([66.163.191.146]:38757) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxkJH-00067Q-8V for 59468@debbugs.gnu.org; Wed, 23 Nov 2022 02:36:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669188996; bh=OI4EwO2jF9c6YVAvFOh9+ak5v7oZEMagpefIKEqtagQ=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=h3cAb6gZKjVgk2tbsbMIRCvzqLbaTXamn91FDMVazXvfWBrb+QfttR6Q+be/mOHmdHXv3fChSoCAcIUgnIHTKTB0QNhxQkzVoNEBfOYVpSwlotBt73zpiouX81ix4KPpXlmrY7zhWSF8eRnQjRNALeQMo51lXhtMx4LaGJp09gJHGhk7g2s+A/DpMHODxS/gPXBO2O3bVpMEcLIaM52igJlHNjOMfHC4oipJDEW4VQVnvzyhnkuhHoKngy3/y1bLZDlxhrz7FO1JdKoIaAZlqFD/lJJIvDVZHV9kdgoy/KCX6JSVoUJ6e4mg0sVwcfCQbzfJSXRDcHfIjmM/DOHMNQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669188996; bh=loWquqtzFThoBr2QaNxG7mC0Ecgr3Eo6LCFrthOUee7=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=ldvl/ZgujgrbDxp3IJa1KsIAz9WrIl28EBHKtoVcA7SHSVuuaKou6ob7FJsTdGjBB6VMMev2ZEifxQyH5UrNLAzgoGc/1O3O6DqesP8HTlTNgNyQ5Rb9eKW+06D6eBsxfkQC27R4ajC7dpLf3iZ7uJIm8gnTCgweot48CMrOHTuE8iRergFmHL6ZSCbU4S3cHPOL+sfGWfePin28zsSVTH4BOwSmcuBQwa1eRX1GsiQsppseCVxOC1NyfwPijS+4dF83qF/HE70+vwKijG/GXeUiX1YgCpuuedgBLUmAaOF8iP5WIvuwxOUn1llP794DkE8ilXy1f/j9tLXsGf5QYA== X-YMail-OSG: SlYafyYVM1mM8idrUY9P8MWl8LJDMmh1rbwD0ZpW.MlHJXaf3xL2hmH2usqNPYn 3kWv1lz2v1bq3rJoyQev_yt5H_rybIv5kpI7CRXlfAONG.Acn81XZVHoCjkAhXywLp5keR1PdmLc E850pOegQ1.qYE0_GNrgO_MYv3jWZTVrH6iIOHC6sERN0mf.QSMZpscGgBDhkKcuDpGPDhoePdqW z1EfLIyf3cuytyzLicW.spImlAJdRvEeTAesXLjOMiAg0Il9ozuOipok0OwDw8HErMu7JYPKwZ2T 4RMRzm8KrOsJ.8ckI.vVdW4QEHT4k5tgz7jr8Wu5uUWf1g8q8PYlnOJu4iIl0ScrkfXK663aQRnL 1YDmarsYwANY.A0CkutsiaWn8g1xwOPI0W_Xrcu0s_ONJQTSC058yi66LuqoxRuxLsOfQKhuoF8_ ZvdcSnl.tvUf93q1wlKEiydWQS_At_lJfVQSyAjoXyZSYd1WPxS2NH9z8NN3eZQ4ylCVaO0A3suy pwwcU8WXF4qFfiBp76JlQb24v82Hn14AohNoiY84tzAaXjJEPBpVB1ipyiZ2ru5nC9tkKbSsayO0 obfhCtAhgeTZGw241fEaBGKTnG1mVPNMrSpTaGIWM3WGHAtxEmbOv1ypwr9yr8844OG.xRVy7nls qFOA1.IV_h8YPSF.HBjfqQzIBJp2xMRuBqP3UTcHfIW8n9VuL_e.GBVzXPb5d_ktojVMPVt.djFo slA7uyc4aPnGsXlVy4NnRumgCyx093JU4osr1yXM3_6DnIXwloBXZOIzelj7D2pteV4YqorAk0GA FdEe8owVqL9vHDDebW65iOpr_ulAqdDSwSN6QgFiCPSGP2HhsSGcBESCgDZTMZY6VXjV.dr.686e OyYvB0EBE8Eg1tM9Nvj0Efe5vDnZyypU4.ZhAIRv_U_rqgiw3Ogu6vB0qlzFoLRd9.YaZoVvoYUF rKrDdtrFT9._Rnkm5tvN9_W5r3NjaFx76ucDWEQgXm4auUbAgqF40nJbN05U_cRpuTHh6c4bz601 5b1c7_5r5iYOUjxXmvsxFkhC6GqeD3HAxmtvpx7LlYfnxdwnAL54fHvg_TIE2ssYHFRkg9Gkh_0W vioyU14lO_6pGnj3CYD0zqIRvjv4rNu8l16jyxEM8UMpPFHuPJ3S_FUS8LRAW2u0bmERjo2UkuTQ YFSF88aya4YLL_U3LsNA4lMw7JUp_l5DGOGqIC6rv3qHATIvNzDCpkLH.iLHtnUpR6lbz_mE3uyg 5rQoHuTbOUGhFLaGHEgiBFeSZdYY945GtkO4.R65O8ao8eY0rTtkL13CAmcWdjvkXHzJ3oV80ldq z4Ont2tFnZzFvIcfLnnMmwPGKOfJaiQfkoSXQosZ5WEplLA.Nr_2ykJpzN5b7pshTZMs4VZjIcr5 669UONsWhk6rCY9vVomPN61HUDt5b6de2oXoWTf9Cz3bMxzeYyU2H6Iq83NIQI0OPLhfQbnN6JrB Ppq5XLpbehk2JzciE9U4lVtHpLR5QTs77TvO5ros_VEAoMNpEmpleMIGa4rSePLG4GggdOhLL8OL Cgk2mex2L2__0xl0_GSbRoQKVI0pV4qZ3sglFAtvtCvs0_GtSxl8sjkKCA4N3C7tIJYcH0a2vajX gCq3tA3v7knUcmVm2IwfTcnQSMXRZbV0pZ.l7LXUk_yTIt0EIV4S4305b4KxrBt7yHBr8yGLFbYT NJO7b2R4eUNoY8L.NiZ83wJxBcqDlXMa0R5a2nC1Mzj2ss32UjKcTOgERAWwG.RVJyWyGH4ywyiH Sg9LIGABte4px_gWjiuKwJD4jODnA9OXNCSn9wjGnG5l6ATNH0ZRUdc1nweR2n5T4Blueys5Ktct dekKLeAyTsK1gAycR930B8_7cIyMlD3Wg1ajFof7pul3Lfb_JIKIQAL.VStn8pPZOMgsEjdjP_4o aUuwql5zKjKpd8FukhrY2QfeegyJhbbqVF4W9VRyuZKs02ydXmDfenLmezOJ0YHDvSdmdW8zCyzd lWy31gGbCqqbBm9oBG9RnKvio6Fmo1CctiIS195oII52Ap7KIQTV8k.AbXP2G_UTvuYdlwnK77Mg HjIk32z_QcV.S14icS3nbr9GXFUtWLs4R1Hu4aYtbP6N0wDPH2F3RsRgbNRKkZnutk89NdTg2oJI QruGulyj8UI_9lOFm24W794Cf_EtSJRKAg6up5GtwxyQSind5auEGoVahNvXHtIP5DjN0mJADenu ewWcmcSjjh5cptkwbtWGCLtRXgBQF0RmWPts782cwInNJe7UrAiz3v9tiEO7Gpr.q572MKJg- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic304.consmr.mail.ne1.yahoo.com with HTTP; Wed, 23 Nov 2022 07:36:36 +0000 Received: by hermes--production-sg3-6c8895b545-fzfcs (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 4a506d95a71d06f6052506f820fe0e8c; Wed, 23 Nov 2022 07:36:29 +0000 (UTC) From: Po Lu To: Yuan Fu Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered In-Reply-To: <928B0F3C-4C8C-49EF-AB27-D49BF5E27607@gmail.com> (Yuan Fu's message of "Tue, 22 Nov 2022 20:13:49 -0800") References: <87k03n4v0r.fsf@yahoo.com> <83tu2qz6s2.fsf@gnu.org> <928B0F3C-4C8C-49EF-AB27-D49BF5E27607@gmail.com> Date: Wed, 23 Nov 2022 15:36:21 +0800 Message-ID: <877czm2kcq.fsf@yahoo.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 274 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: Eli Zaretskii , 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Yuan Fu writes: > For each of the ERROR nodes, we can look at the skipped tokens inside, > and look around with some regex searching. ^^^^^^^^^^^^^^^ I thought that is the sort of thing we aim to avoid by using tree-sitter. From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 23 03:28:30 2022 Received: (at 59468) by debbugs.gnu.org; 23 Nov 2022 08:28:30 +0000 Received: from localhost ([127.0.0.1]:53441 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxl7N-0007RG-CZ for submit@debbugs.gnu.org; Wed, 23 Nov 2022 03:28:29 -0500 Received: from mx0b-0016e101.pphosted.com ([148.163.141.31]:11762) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxeY2-0005MF-9b for 59468@debbugs.gnu.org; Tue, 22 Nov 2022 20:27:35 -0500 Received: from pps.filterd (m0151358.ppops.net [127.0.0.1]) by mx0b-0016e101.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2AN1PEpk016593 for <59468@debbugs.gnu.org>; Tue, 22 Nov 2022 17:27:33 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ucsd.edu; h=from : content-type : content-transfer-encoding : mime-version : subject : message-id : date : cc : to; s=campus; bh=sCV1XXSD8sbzxDLzSFOGnX5mLIAqNi8yMLTKD8y1udw=; b=EGof4xm7MGmXH5bw7MUGq5aIHBRAJr9zF58zr6p3IPcafoW5GkutQHyzeglW88mf3AwL 33hj39EHC/hghrO4NfITSDe2+sXq9LWAsE7JvEYGlD2WWthcKYOmjK/l5/pAiL43uAUv mNcXDRr1Rakn1QaRF5zecISn5tRmhT3GqW6y07VvtA6MS6/9NMD3Ql3tivRLBzbEIlur BUXn2a9xkhjmKKqX1L7CyVhFWkjjf11TgBFoK+MUq2vlv48w3rYeAGDCELjc+sZhfNcP FeEhZpvN7JBSS48duhIdpCo5TP8V7cLH9Lcq+2M70yY3q5VtnSLR039+jejJxJxvEMVv NA== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0b-0016e101.pphosted.com (PPS) with ESMTPS id 3kyfxykcgh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for <59468@debbugs.gnu.org>; Tue, 22 Nov 2022 17:27:33 -0800 Received: by mail-pg1-f198.google.com with SMTP id f22-20020a635556000000b0046fd05d55cdso9262181pgm.1 for <59468@debbugs.gnu.org>; Tue, 22 Nov 2022 17:27:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ucsd.edu; s=google; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:from:to:cc:subject:date:message-id :reply-to; bh=sCV1XXSD8sbzxDLzSFOGnX5mLIAqNi8yMLTKD8y1udw=; b=X9J4J6ktuGofUK0jiKR7G+9rMcROKGPZUqZaodbvWqDqa06ZxNTqV2QCC36NTJKLk0 /9cXAj9RkWcYj/duvO6z68hjl73+/gxV+ppkX6WGbsU68i4Tyk96ophqB0aQbGMuHDVC coV6SOu1zghXuHhm/dIoW5+4c4530AMk43u5Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sCV1XXSD8sbzxDLzSFOGnX5mLIAqNi8yMLTKD8y1udw=; b=mKpXFx8/qFMn6OC4BhK4eoCd8faBSAhdy/J7RhkToG/zqeKg/iKw4QaEagSDmp+cl6 84brU6liVyqT0MEutbSIjdjR1ttkG604ajQHXv81ALJVZuikntjjRmmOfGpUdIuZqIUd fU2KUyuEhod/iBDPzPXnE/WMy6kFDHig+XZKOaq9SR+l2iv1MIVbnwDn62clt9onK7S3 S/FTbpHrKn/ogFuJfy3lrxW3kk8YGKc8trL56a1ibgz9Qh3ojEcMdgkce4y0wnWATNqf F1QK0z1cgQdB1D720g27JxNNDIBeZ0nCx7VDyPEQTWnj9e+ewgiyqBe+6UzwWaaq7GZp wIsA== X-Gm-Message-State: ANoB5plXF5vWLVSU1I9l1V3yS5cMYVdoTnvpbzjcY+cKcN0HX/YjesS5 vJmCUtvsOcV1mBt3zEi2RP2JshsiuCw2DFsB7b9fCweXhLL8nSaUmav62so8zNFG640cbEPhfMc hkWfDeKVilScpzA== X-Received: by 2002:a62:e80b:0:b0:56e:ad31:b98b with SMTP id c11-20020a62e80b000000b0056ead31b98bmr10886935pfi.40.1669166852238; Tue, 22 Nov 2022 17:27:32 -0800 (PST) X-Google-Smtp-Source: AA0mqf5Uvsv4X6jmlKWhLViZD+DLNnsChaCiEa/ScnH3f9YJ00+no8g3METviF6u4cEwRHSnQ9luyg== X-Received: by 2002:a62:e80b:0:b0:56e:ad31:b98b with SMTP id c11-20020a62e80b000000b0056ead31b98bmr10886918pfi.40.1669166851923; Tue, 22 Nov 2022 17:27:31 -0800 (PST) Received: from smtpclient.apple (cpe-172-117-161-177.socal.res.rr.com. [172.117.161.177]) by smtp.gmail.com with ESMTPSA id t3-20020a625f03000000b0056c3d3f5a8dsm11282807pfb.56.2022.11.22.17.27.31 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Nov 2022 17:27:31 -0800 (PST) From: Yuan Fu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered Message-Id: <88869BE5-43B6-47AE-841E-A726119EDC5E@ucsd.edu> Date: Tue, 22 Nov 2022 17:27:30 -0800 To: Po Lu X-Mailer: Apple Mail (2.3696.120.41.1.1) X-campus_gsuite: gsuite_33445511 X-Proofpoint-ORIG-GUID: yMBCSb7ebxQXoPcNhBfqL_h7LbhHHs_Z X-Proofpoint-GUID: yMBCSb7ebxQXoPcNhBfqL_h7LbhHHs_Z pp_allow_relay: proofpoint_allowed X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-22_13,2022-11-18_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 clxscore=1011 adultscore=0 priorityscore=1501 mlxlogscore=474 spamscore=0 malwarescore=0 impostorscore=0 bulkscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211230009 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 59468 X-Mailman-Approved-At: Wed, 23 Nov 2022 03:28:22 -0500 Cc: 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Po Lu writes: > Yuan Fu writes: > >> Thanks for these reports! Buuuuut as we=E2=80=99ve seen, tree-sitter = really >> doesn=E2=80=99t handle macros that well. I=E2=80=99ll see what I can = do when I find the >> time, but there really isn=E2=80=99t any good solutions to this = (right now, that >> I can think of). I=E2=80=99m not even sure the author of = tree-sitter-c would > > Thanks, and too bad. However, one cannot help but wonder how he is > supposed to write only "post-processed" C. I think the idea is that most macros are defined like functions, so they are just parsed as function invocations. Other things can be handled by tree-sitter=E2=80=99s error recovery to some degree. Not saying this is = correct, but that=E2=80=99s probably the idea. >> accept changes that try to parse macros: he has made it clear that = the >> purpose of tree-sitter-c is to support post-processed C and leave = macros >> and preprocessor to error-recovery. > > I think that attitude of the > tree-sitter-c developer is extremely nasty. For the record, because I don=E2=80=99t want to put words into = tree-sitter=E2=80=99s author=E2=80=99s mouth, I came up with this observation from [1], and I = could be wrong. Also, I think it=E2=80=99s more about the limitation of = parser-base approach than about policy. [1]: https://github.com/tree-sitter/tree-sitter-c/issues/7 Yuan From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 23 07:43:15 2022 Received: (at 59468) by debbugs.gnu.org; 23 Nov 2022 12:43:15 +0000 Received: from localhost ([127.0.0.1]:54072 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxp5v-0004B4-7Z for submit@debbugs.gnu.org; Wed, 23 Nov 2022 07:43:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35060) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxp5s-0004Aq-Fp for 59468@debbugs.gnu.org; Wed, 23 Nov 2022 07:43:13 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oxp5n-00085n-84; Wed, 23 Nov 2022 07:43:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=JDUoieEXT8Qqrkv+tGWvXwXNQRg1i56pb2ri01b5Giw=; b=Fc7Cp2eYkUUu XlMD/qNGE9SiT8uUCC2TeFWBbKmp+0DrhWAOitloHgg9v30NzYAftvkYv9/x18GtoF5+tVVEhh7Ra OXM7+RBxKfbjFyZCEnyoGyTFo4Bk/7JM6fB6/sxDjkD815i92RsivACBGuglM4iN8vx9Qn9Gv3kFl 12X6u6HqJERhb0zXSIOH67y4IFrL9OB1HokHqA5xbtGpSvBS6CqrZq2YGz8GgePYc28F2h7gU/kEE 5sn/7a+OmqUH90XbN0FwVQQ/+pjnitNdk22Km7Ae22I/YFYNE0GTJYYS2bYUuWNeCZ05hCikM8sJk +s9+htP6JQFq0qUz2Bio7Q==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oxp5m-0000Dm-Li; Wed, 23 Nov 2022 07:43:07 -0500 Date: Wed, 23 Nov 2022 14:43:23 +0200 Message-Id: <83mt8hzvro.fsf@gnu.org> From: Eli Zaretskii To: Yuan Fu In-Reply-To: <928B0F3C-4C8C-49EF-AB27-D49BF5E27607@gmail.com> (message from Yuan Fu on Tue, 22 Nov 2022 20:13:49 -0800) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered References: <87k03n4v0r.fsf@yahoo.com> <83tu2qz6s2.fsf@gnu.org> <928B0F3C-4C8C-49EF-AB27-D49BF5E27607@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59468 Cc: luangruo@yahoo.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Yuan Fu > Date: Tue, 22 Nov 2022 20:13:49 -0800 > Cc: luangruo@yahoo.com, > 59468@debbugs.gnu.org > > > Is it possible to do something on our end for processing the error nodes, > > which would remedy the issue with macros? Or maybe some other way of > > handling the macros by ourselves? > > For each of the ERROR nodes, we can look at the skipped tokens inside, and look around with some regex searching. That would take some non-trivial effort, I imagine. If nothing better comes up, maybe this is what we should do. For fontifications, perhaps using some small subset of CC Mode for level-2 fontifications should be relatively easy? From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 23 07:53:59 2022 Received: (at 59468) by debbugs.gnu.org; 23 Nov 2022 12:53:59 +0000 Received: from localhost ([127.0.0.1]:54118 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxpGJ-0004W8-4I for submit@debbugs.gnu.org; Wed, 23 Nov 2022 07:53:59 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57500) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxpG5-0004Vd-UH for 59468@debbugs.gnu.org; Wed, 23 Nov 2022 07:53:58 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oxpG0-00044q-JN; Wed, 23 Nov 2022 07:53:40 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=aqVq1Xhmnho6oBe+ysjr+Kr39hT7Z35yFx5yhyV0g10=; b=Dy/yqOxiPne1 zD8PyGfHHPBzfqODidjVVUwB02R+vzJniR2Un9Vgb4ayDdVykcdOb2RVa3WgD4uqox1MUhOd3gbSw rpeShpS1bcU40HBDFQ8Af3BH5gs+7WvFoJ5dqo6PAdwS8tJ6lkAOnbBPqcVvtGIDUv6FDC27aq9cl f9oElXF8/1i4HqF6L9e8bTpTOztBcT9U9nMUa6NHhaXCNPZCCQMJtGHWXQ9EXkeO7kAfCjsTtk6ag +y7XH6KNpNf0Clqks+Fff54UaOsLd7VtHIIQHA4X9b38DGPapibbpektPeIE+vOlMNCnV2kE7U5eu /oXYRBeodC0LlLqDaMOdxA==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oxpG0-0001Ws-2b; Wed, 23 Nov 2022 07:53:40 -0500 Date: Wed, 23 Nov 2022 14:53:56 +0200 Message-Id: <83k03lzva3.fsf@gnu.org> From: Eli Zaretskii To: Po Lu In-Reply-To: <877czm2kcq.fsf@yahoo.com> (message from Po Lu on Wed, 23 Nov 2022 15:36:21 +0800) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered References: <87k03n4v0r.fsf@yahoo.com> <83tu2qz6s2.fsf@gnu.org> <928B0F3C-4C8C-49EF-AB27-D49BF5E27607@gmail.com> <877czm2kcq.fsf@yahoo.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59468 Cc: casouri@gmail.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Po Lu > Cc: Eli Zaretskii , 59468@debbugs.gnu.org > Date: Wed, 23 Nov 2022 15:36:21 +0800 > > Yuan Fu writes: > > > For each of the ERROR nodes, we can look at the skipped tokens inside, > > and look around with some regex searching. > ^^^^^^^^^^^^^^^ > > I thought that is the sort of thing we aim to avoid by using > tree-sitter. Would you rather do nothing about these error nodes? If they happen too frequently, then it would be a real problem for the language(s) where that happens. But if they happen relatively infrequently, then falling back on regexps could be an okay solution, IMO. From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 23 19:03:54 2022 Received: (at 59468) by debbugs.gnu.org; 24 Nov 2022 00:03:54 +0000 Received: from localhost ([127.0.0.1]:56662 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxzib-0006a5-Fz for submit@debbugs.gnu.org; Wed, 23 Nov 2022 19:03:54 -0500 Received: from mail-pl1-f172.google.com ([209.85.214.172]:46843) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oxziW-0006Zp-TI for 59468@debbugs.gnu.org; Wed, 23 Nov 2022 19:03:52 -0500 Received: by mail-pl1-f172.google.com with SMTP id jn7so16186737plb.13 for <59468@debbugs.gnu.org>; Wed, 23 Nov 2022 16:03:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:from:to:cc:subject:date:message-id :reply-to; bh=JyLkpSumc2JEijw1+Nf+p/raMMAHNklTdZwJqE1YZUM=; b=SKtf4rrseO5+Bt1gqX2fTjhxQFefYH3970GMAD9tf/uRWjNo0N1TWEIW8qK5NIt9f/ oZSe42alBHAOGzGSAt5eogrVj1y9G0nJQudummlXOkuLiVTHYTlZZYjg6Jh7vLTBZtx2 CPu8nDVAsMZ0nJEFJK+VVzD/9ZdFKjJd7FUhkP8nnTfYbBESI5T2H1vd+SBCSk9Z5saP 3bXfy9PHuVWELXcsfJf2vEYfVOvo87UZO9F3Fzngv0vhs4rtuDrKPfvxRxdhBMNgddMS +dkYRcz8jY6t1yKzZmIa0BpADeANMqPee1CiqMPXkzE3T3/4tCnN9N+p9efIpAxuXHdE OP0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JyLkpSumc2JEijw1+Nf+p/raMMAHNklTdZwJqE1YZUM=; b=o0sH3nRn+5epNahPrR8Fdxj/nFP2yMxwFs7cUlPjqt5TTa2ok4zc8QVWyEQED3t2NI juFfKrJsK0xqtA0adMziu89y2sp12jd28p8PAVQ0ymQe4wgL2iq/h9la8mQXdQipFAm4 LDFtVxWmrcT04w5+WsCLcaikeVX/P3yYjHvF4WvhbUydWOej9Fe7etTeBblcSEPmyveT WOi+0OcnvtiCI9ui9DjEuwbuU1wTt3Xlia/AD+VDrxU0gDjOCp3+/Vp/n+6XBe5UvuMn gN0X8s4vE5cE08f0r/m4vGiJSpvR2DZH/jx93/nTN8HgKGdnFW21uoSuQSokuTGRagqD tYCQ== X-Gm-Message-State: ANoB5pnz2xRVWyHq/Qx4NLoOEH4uyK+bV/EQqqmud7tI43AFIPbVU7bJ hRj+/Cg5sRWfLBIfYTCsg5E= X-Google-Smtp-Source: AA0mqf7DYr+SRE7DvN2UxywboA6+MSFhuqzJNO/jZ+dHu6zLZW6XXlWQrRmC/da7PX4XsTCf4+xDgg== X-Received: by 2002:a17:902:6943:b0:188:ab16:2393 with SMTP id k3-20020a170902694300b00188ab162393mr14203000plt.87.1669248222833; Wed, 23 Nov 2022 16:03:42 -0800 (PST) Received: from smtpclient.apple (cpe-172-117-161-177.socal.res.rr.com. [172.117.161.177]) by smtp.gmail.com with ESMTPSA id b20-20020a63d814000000b004769983b52csm11135138pgh.19.2022.11.23.16.03.42 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 23 Nov 2022 16:03:42 -0800 (PST) From: Yuan Fu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered Message-Id: Date: Wed, 23 Nov 2022 16:03:40 -0800 To: Po Lu X-Mailer: Apple Mail (2.3696.120.41.1.1) X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Po Lu writes: Ok, I had a look at each of these cases, comments: > Insert the following code in a buffer, and enable c-ts-mode. > > #define CheckExtension(name) \ > if (!name) \ > { \ > if (display) \ > eglTerminate (display); \ > fprintf (stderr, "Missing: egl%s\n", #name + 1); \ > return False; \ > } > > #define CheckExtensionGl(name) \ > if (!name) \ > { \ > /* If the context remains current, then nothing \ > will get released upon eglTerminate. */ \ > eglMakeCurrent (display, EGL_NO_SURFACE, \ > EGL_NO_SURFACE, EGL_NO_CONTEXT); \ > eglTerminate (display); \ > fprintf (stderr, "Missing: gl%s\n", #name + 1); \ > return False; \ > } > > #define LoadProc(name, ext, extname) \ > if (HaveEglExtension (extname)) \ > I##name \ > =3D (void *) eglGetProcAddress ("egl" #name ext) > > #define LoadProcGl(name, ext, extname) \ > if (HaveGlExtension (extname)) \ > I##name \ > =3D (void *) eglGetProcAddress ("gl" #name ext) > > #define CheckGlExtension(name) \ > if (!HaveGlExtension (name)) \ > { \ > fprintf (stderr, "Missing %s\n", name); \ > \ > eglMakeCurrent (display, EGL_NO_SURFACE, \ > EGL_NO_SURFACE, \ > EGL_NO_CONTEXT); \ > eglTerminate (display); \ > return False; \ > } > > There will be no fontification of types or string constants inside the > macro bodies. CC Mode works fine. Tree-sitter right now doesn=E2=80=99t parse the content of macro bodies. = I think it should be reasonable for tree-sitter-c to parse them. In the meantime I=E2=80=99ll see if I can trick tree-sitter to parse it as normal C = source. > Now, insert the following code below the macro definition: > > static Visual * > FindVisual (VisualID visual, int *depth) > { > XVisualInfo vinfo, *visuals; > Visual *value; > int nvisuals; > const char *override; > } > > visual, depth, visuals, value and override are not fontified as > identifiers. Line feed characters below the macros are also fontfied = as > "errors". That should fixed by a recent change. > Within the following code: > > static BufferActivityRecord * > FindBufferActivityRecord (PictureBuffer *buffer, PictureTarget = *target) > { > BufferActivityRecord *record; > > /* Look through the global activity list for a record matching > the given values. */ > record =3D all_activity.global_next; > while (record !=3D &all_activity) > { > if (record->buffer =3D=3D buffer > && record->target =3D=3D target) > return record; > > record =3D record->global_next; > } > > return NULL; > } > > "record" is fontified as an identifier, but not within the condition = in > the while loop. That=E2=80=99s expected, since the font-lock rule is to fontify LHS of assignments (the first record), but not all appearances of identifiers. Now we have font-lock rules that fontifies all occurrences of functions and variables. I personally don=E2=80=99t find them useful, but if = someone wants it it=E2=80=99s there. > > Within the following code: > > static void > compare_single_row_8bpc4 (unsigned char *data, unsigned char *xdata, > size_t size, > struct image_difference_statistics = *statistics) > { > unsigned char channel_a, channel_b; > int diff; > size_t i; > > for (i =3D 0; i < size; ++i) > { > channel_a =3D data[i]; > channel_b =3D xdata[i]; > > diff =3D (int) channel_b - (int) channel_a; > statistics->min_diff =3D MIN (statistics->min_diff, > diff); > statistics->max_diff =3D MAX (statistics->max_diff, > diff); > } > } > > the "i" in "size_t i" is fontified as an identifier the first time, = but > not in future appearances in the function. In the first appearance, i is a declaration, so it=E2=80=99s fontified. = Like the previous case, not all i are declaration or assignment, so they are not all fontified. And now you can enable the "variable" feture to fontify all of them. > > Within src/xterm.c, every appearance of ATOM_REFS_INIT is fontified in > the error face. Also, inside `xm_setup_dnd_targets', > > xm_targets_table_header header; > xm_targets_table_rec **recs UNINIT; > xm_byte_order byteorder; I think tree-sitter isn=E2=80=99t expecting another identifier (UNINIT) = after recs. Here if we don=E2=80=99t enable highlighting errors recs would be highlighted fine, as an identifier. > > "recs" is fontified in the error face. > > recs =3D xmalloc (sizeof *recs); > recs[0] =3D xmalloc (FLEXSIZEOF (struct = xm_targets_table_rec, > targets, ntargets * 4)); > > recs[0]->n_targets =3D ntargets; > > "struct" is fontified in the error face. Within > x_sync_note_frame_times: Tree-sitter thinks FLEXSIZEOF is a function call and struct xm_targets_table_rec is an argument. We can add a heuristic here: (ERROR (identifier)) is either type or struct/enum keyword. I should be able to fix that. > #ifdef FRAME_DEBUG > uint_fast64_t last_frame_ms =3D output->last_frame_time / 1000; > fprintf (stderr, > "Drawing the last frame took: %"PRIuFAST64" ms = (%"PRIuFAST64")\n", > last_frame_ms, time); > #endif > > "PRIuFAST64" is fontified in the error face. Is this valid C? If it it, we should report to tree-sitter-c. If not, we can add a heuristic. Within > x_dnd_begin_drag_and_drop: > > if (x_dnd_movement_frame > /* FIXME: how come this can end up with movement frames > from other displays on GTK builds? */ > && (FRAME_X_DISPLAY (x_dnd_movement_frame) > =3D=3D FRAME_X_DISPLAY (f)) > /* If both those variables are false, then F is no > longer protected from deletion by Lisp code. This > can only happen during the final iteration of the DND > event loop. */ > && (x_dnd_in_progress || x_dnd_waiting_for_finish)) > { > XSETFRAME (frame_object, x_dnd_movement_frame); > > is fontified incorrectly: the "if" is not fontified at all, and the = last > three lines show up in the error faces. It fontifies fine here. I guess it=E2=80=99s fixes by some changes I = made, although I don=E2=80=99t recall making changes related to if statements. > In addition: > > Lisp_Object > x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction, > Lisp_Object return_frame, Atom = *ask_action_list, > const char **ask_action_names, size_t = n_ask_actions, > bool allow_current_frame, Atom *target_atoms, > int ntargets, Lisp_Object = selection_target_list, > bool follow_tooltip) > > "Lisp_Object" and "x_dnd_begin_drag_and_drop" are not fontified at = all. They are fontified fine here. > Here: > > /* Select for input extension events used by scroll bars. This will > result in the corresponding core events not being generated for > SCROLL_BAR. */ > > MAYBE_UNUSED static void > xi_select_scroll_bar_events (struct x_display_info *dpyinfo, > Window scroll_bar) > > "void" is fontified in the error face. I=E2=80=99ll try to come up with a heuristic. > Here, in handle_one_xevent: > > #ifdef HAVE_XINPUT2 > if (event->type !=3D GenericEvent) > #endif > any =3D x_any_window_to_frame (dpyinfo, event->xany.window); > #ifdef HAVE_XINPUT2 > else > any =3D NULL; > #endif > > the "else" is fontified as a type. The "else" is separated from the "if" in the parse tree by the preprocessor directive, I=E2=80=99ll report this to tree-sitter-c and = see if they can do anything. > > static int > handle_one_xevent (struct x_display_info *dpyinfo, > #ifndef HAVE_XINPUT2 > const XEvent *event, > #else > XEvent *event, > #endif > int *finish, struct input_event *hold_quit) > > the "const XEvent *" is fontified in the error face. Similar to the previous case. There could be better ways to handle ifdef=E2=80=99s in tree-sitter-c, I don=E2=80=99t know if they are easy = to implement. > Here: > > case GraphicsExpose: /* This occurs when an XCopyArea's > source area was obscured or not > available. */ > f =3D x_window_to_frame (dpyinfo, = event->xgraphicsexpose.drawable); > if (f) > { > expose_frame (f, event->xgraphicsexpose.x, > event->xgraphicsexpose.y, > event->xgraphicsexpose.width, > event->xgraphicsexpose.height); > #ifndef USE_TOOLKIT_SCROLL_BARS > x_scroll_bar_handle_exposure (f, (XEvent *) event); > #endif > #ifdef USE_GTK > x_clear_under_internal_border (f); > #endif > #ifdef HAVE_XDBE > show_back_buffer (f); > #endif > } > #ifdef USE_X_TOOLKIT > else > goto OTHER; > #endif /* USE_X_TOOLKIT */ > break; > > "goto OTHER" is fontified in the error face, and "else" as a type. Same as above. > Here: > > #ifdef HAVE_XINPUT2 > if (event->xkey.time =3D=3D pending_keystroke_time) > { > source =3D xi_device_from_id (dpyinfo, > = dpyinfo->pending_keystroke_source); > > if (source) > inev.ie.device =3D source->name; > } > #endif > > "inev" is fontified in the error face. Fontifies fine here, should be fixed. > Here: > > #ifdef USE_GTK > /* See comment in EnterNotify above */ > else if (dpyinfo->last_mouse_glyph_frame) > x_note_mouse_movement (dpyinfo->last_mouse_glyph_frame, > &event->xmotion, Qnil); > #endif > > "else" and "dpyinfo" are fontified as types. Same. > #ifdef USE_MOTIF > Widget widget; > > widget =3D XtWindowToWidget (dpyinfo->display, > event->xbutton.window); > > if (widget && XmIsCascadeButton (widget) > && XtIsSensitive (widget)) > { > #endif > if (!f->output_data.x->saved_menu_event) > f->output_data.x->saved_menu_event =3D xmalloc (sizeof = *event); > *f->output_data.x->saved_menu_event =3D *event; > inev.ie.kind =3D MENU_BAR_ACTIVATE_EVENT; > XSETFRAME (inev.ie.frame_or_window, f); > *finish =3D X_EVENT_DROP; > #ifdef USE_MOTIF > } > #endif > > here, the last closing brace is fontified in the error face. Still, blame #ifdef. I don=E2=80=99t have good ideas for these. > Here: > > static void NO_INLINE > x_error_quitter (Display *display, XErrorEvent *event) > { > char buf[256], buf1[400 + INT_STRLEN_BOUND (int) > + INT_STRLEN_BOUND (unsigned long)]; > > "NO_INLINE" and "unsigned long" are fontified in the error face. I=E2=80=99ll try heuristics. Yuan From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 23 19:36:37 2022 Received: (at 59468) by debbugs.gnu.org; 24 Nov 2022 00:36:37 +0000 Received: from localhost ([127.0.0.1]:56695 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy0EG-0007Pf-B2 for submit@debbugs.gnu.org; Wed, 23 Nov 2022 19:36:36 -0500 Received: from sonic303-22.consmr.mail.ne1.yahoo.com ([66.163.188.148]:44833) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy0ED-0007PO-1m for 59468@debbugs.gnu.org; Wed, 23 Nov 2022 19:36:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669250187; bh=p1C2+YxmMKmUqkFEvogbBWi8vN2K33mzBPSU+DgzN88=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=VPrDTUWPlRvLJS5QavvNAAxeKcLIGVXKL8rVXeF8B5wufLhnjdlXecHVYhFQy5pnoXnj0Q5NP9aCb9qksTGOkXgn8v3wZGO2PmxOeOkmSD+1BkRF9KhHHsJB1bAEtV1seG2vsFjuT++PyD8qCK99bnIJ711FjqygBl8JLiPsDBM4ejMy5BzrSBN4S2vRPW6U70Sf3Jg7T8XAG0Zele9M2mRtRKM4b4DCB/bxzUrhZsE0DdM/5UcMBvEWf8v5j2ym6Djoao/+DE/0orlqL8b4uyc5FxWeqtX27wVLw2b4auJIPl8i4lv6JbQQXwaDrgipdEDFf2imPqO8/6Y+q4+PIw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669250187; bh=slDDy4BgClYmO2VxjMsR/ckbcr5TI9OpwQFAv2ZcVsl=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=AM3Fbt+o4QzQMgO5pA0Er1GLrz1VxhIxPgEZ14rFjKPpcda38fudvhhc33iF8JvxY7DwmaMyVTu4c+BfYZql58Y45A+BsWlwAdLF5xjVnadxsBy6tKUkWIc0+A7V/4CQYWE5DWw4f69wrz0SAzGoBWS8Mu7TYR4YDmdez9rsD8byyyrAWKQhARu1TyFyjGONOQKowm3m5IKwzSaxkxzVZZ5otKYMBVyzBhB2YhrZWIwczOsx+AGyp404vEsgBMylFrdK1H7x1Wh2C/CxOaGiG+A7EPviH8FHhZl0MKdOsERHd8IymjEJypLboz7uH838pt3yTmXlkIR0tHjAahrdPg== X-YMail-OSG: lnj7kJkVM1nf254IaTHLcFoblJOLc0zzuZ8Mhk6HD011PZt60VH4FVdws8cMABG kWvu0FBBgLgSUyuTEc9_12IZxHl2NkyUai.nuEpgsmYY5MQauVvaEpS3Hs_emnT7l_WiPl5EJTEu DgNjr7X0_d7F48PwOENeKt4LBMsr7Hidom9qKk.xEOUoOgx79fInfAf6ERrse_wPGUv4e7K_t5gX 2I_8Ah0cXeCpHoJhXy_yZwZJQ0Xdn8jBXVccFQooDDPWHWJIHHDdoUz4C2qyDcJXulLlNHk_LwE. KMG0HaV0pslotkoTWDdSI7bkOhU0Vr4.1Q7XnUeawvoGNRfCch.01mShzORtMzRYAvTyTiD__kRu ANKBHZFEFf2FRAZ6B80IqcJMypsbHhYs_JQWA4Y22dW4NBxssIHViI67aeY0DiAnARg3yCu7zPbU _0IDw9Bw3MK7hTGT9nN78ImgyKPpPU.nwRqVgvLsnroKZxN1HRD0m33_kHe98FS.kwJi2xEHHcFR ogDuBYF8nNp8UUNv2x2YDArn5xvawGMzg3DoCsgsrK3x1Vkb6o4BZgKNNWfLoy0rYRaIc7hBPjAv PaN0e04VHIW7iGjqhwX8oUbu.K1vL13xOmlFRT6hKNgu1K7B.aPmaZlIWbfbX7TowemzvA3LOApn rGDAX0EClq8RziynYrPTsAD..DgV9fWlzSgOQRpGf8y1ro6.SadHZkJJhCUf9k2oGcZIqZNInRR6 lQyrk5Ry3iJ0J2Hcz9dcsYmI634eAHBiykPiKuls2V56Wr81bz45xwg5bBHLr.KcKW3S1yNnwYBm FlLRW6qoD.dAXimPKlzvisPEWCNYJadwpWEdmC_Bj7njXwk.AeYISYshY.OY.KVte_yFnQY8yICJ qWXBJH8fonTi0JTcDOz7iv7WCUz0UBmH2HcFhk6SBRvN5.Q_0.tYlMJHCLoZASBY_4hU7JU7Gtca uKEEueE2tbvQbr_UAaQCgP8LBpH6KDUllt0F3Epqao.s5uaD8DS.80tIefiI8ah4sxJTxclR0jmO UVmbkIEJ0DGTsur_9tUsIRNJyqIXRydixM8qL4OMfSq1WR60DqnMk_Ki07.s6HTgswMI4lXNzVcD fETWVd66rJGnT79FrtqzjX.KVUO9S._00O9460S6nmWmWlggSBcnPp7jxJMo1TJ1h4CdkP3g_fQc mQQfgThHWEDiyl4PGzaWTsTHegccSY3PiKbVCTJeZZi_0PbSlvZMAa2wu7ysA.6dzWyHZwM6B3Wi VR1zbTrtkp3E6L14zKM2Qv3OObQQM5FHoOUhg92809s34.s5ec84SsBxZFR8ab1LH3yZ6B1geHfn 5OnpzLF2jcpcL77agUcgrfMZI1RRk.z5Q7YMjRs2HLxCZ0O7NVUSCs1nLG5MVVFpRtASuB.X6E2a .iSPb99q2KYte4W2SHMmJz9LDZJGphaCvZXNh6R7LNZ5CFhPmcLTIpYn019pJSaDweAfKxJkhpGZ iTvJ3k_qvzIMHhz7npDcP4Rmplu_3P.N6ZFDTvjaqs3qHYg1oPTROrVNaHi3EPDOg1ZaxzKOKKEU Lic2Q6B.eQAy9ccEhHIU4IAByNdwaMzDjtZ1LpzbQIIn04yP50AYO2vOorIPrQ2GBtVo4L.0mVfl C3zRRNDuJ4JlB27UJkFTOvNyOP5jXWWC40ZNBzSYZDX4a6wQV4GarmG85aON9If2Gbp9kM5gzbvS PYxMljH3FxByi4bPK.4xD_xH1ZpfeD6bMFwz5zZq5tr9D_5CcgOcIb5AbcrOMrbqI42ZV3LqTdFG 9ZaIOofVt7M6_wdrYpvDULgXJG462fP9tjBPw_6rlUnNJKvlwrbBdb.opDfv_Ekr0CzZtsp1hEWk I6FR_uiiWlhyW0.heVotE48c2sB._uHoteCBGNvvabjCLVPjkwbeZblA6pLHlZulVB7qybrmKc_S _j42BIE.NzHJFWOLuxWuP8J.le_Jk2jbW6axqGvdcwtz4o9eHpY7_s0nOUFDw710RqlTNCsGkcDl 8o9FqgST1hqAyAadgJPiC0mpsAqmNUAMfUQ93F6tqfhf0yBDFaSdurZjt7HahAMdUJuJmC4mtTt3 TWIVyzJ.1iS1hO4gkhOFhPTdIYn3PpW0GoUMMfbpxgLPJ48OETEOtW4VTupWDVuqIMip8xrjTJkl ICXJkBSE0b0S2hMh1yGR0swgZYSEjhOIdqF9u8hcGtZTV9gMR2Ti_Xn2iWclhqS8_8wMB9VCz6gN T7vx2vyaPNExiEje_WaqhmqPbt_eYfQFUC.7WLEzI.Nxq6.tXP46BPZ3XLrxdXKPnxg-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ne1.yahoo.com with HTTP; Thu, 24 Nov 2022 00:36:27 +0000 Received: by hermes--production-sg3-6c8895b545-pb7wm (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 454bde5c3b64741397e6e04d3feec55a; Thu, 24 Nov 2022 00:36:19 +0000 (UTC) From: Po Lu To: Yuan Fu Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered In-Reply-To: (Yuan Fu's message of "Wed, 23 Nov 2022 16:03:40 -0800") References: Date: Thu, 24 Nov 2022 08:36:13 +0800 Message-ID: <87v8n5194y.fsf@yahoo.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 9084 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Yuan Fu writes: > Po Lu writes: > > Ok, I had a look at each of these cases, comments: > >> Insert the following code in a buffer, and enable c-ts-mode. >> >> #define CheckExtension(name) \ >> if (!name) \ >> { \ >> if (display) \ >> eglTerminate (display); \ >> fprintf (stderr, "Missing: egl%s\n", #name + 1); \ >> return False; \ >> } >> >> #define CheckExtensionGl(name) \ >> if (!name) \ >> { \ >> /* If the context remains current, then nothing \ >> will get released upon eglTerminate. */ \ >> eglMakeCurrent (display, EGL_NO_SURFACE, \ >> EGL_NO_SURFACE, EGL_NO_CONTEXT); \ >> eglTerminate (display); \ >> fprintf (stderr, "Missing: gl%s\n", #name + 1); \ >> return False; \ >> } >> >> #define LoadProc(name, ext, extname) \ >> if (HaveEglExtension (extname)) \ >> I##name \ >> =3D (void *) eglGetProcAddress ("egl" #name ext) >> >> #define LoadProcGl(name, ext, extname) \ >> if (HaveGlExtension (extname)) \ >> I##name \ >> =3D (void *) eglGetProcAddress ("gl" #name ext) >> >> #define CheckGlExtension(name) \ >> if (!HaveGlExtension (name)) \ >> { \ >> fprintf (stderr, "Missing %s\n", name); \ >> \ >> eglMakeCurrent (display, EGL_NO_SURFACE, \ >> EGL_NO_SURFACE, \ >> EGL_NO_CONTEXT); \ >> eglTerminate (display); \ >> return False; \ >> } >> >> There will be no fontification of types or string constants inside the >> macro bodies. CC Mode works fine. > > Tree-sitter right now doesn=E2=80=99t parse the content of macro bodies. = I think > it should be reasonable for tree-sitter-c to parse them. In the meantime > I=E2=80=99ll see if I can trick tree-sitter to parse it as normal C sourc= e. > > >> Now, insert the following code below the macro definition: >> >> static Visual * >> FindVisual (VisualID visual, int *depth) >> { >> XVisualInfo vinfo, *visuals; >> Visual *value; >> int nvisuals; >> const char *override; >> } >> >> visual, depth, visuals, value and override are not fontified as >> identifiers. Line feed characters below the macros are also fontfied as >> "errors". > > That should fixed by a recent change. > >> Within the following code: >> >> static BufferActivityRecord * >> FindBufferActivityRecord (PictureBuffer *buffer, PictureTarget *target) >> { >> BufferActivityRecord *record; >> >> /* Look through the global activity list for a record matching >> the given values. */ >> record =3D all_activity.global_next; >> while (record !=3D &all_activity) >> { >> if (record->buffer =3D=3D buffer >> && record->target =3D=3D target) >> return record; >> >> record =3D record->global_next; >> } >> >> return NULL; >> } >> >> "record" is fontified as an identifier, but not within the condition in >> the while loop. > > That=E2=80=99s expected, since the font-lock rule is to fontify LHS of > assignments (the first record), but not all appearances of identifiers. > Now we have font-lock rules that fontifies all occurrences of functions > and variables. I personally don=E2=80=99t find them useful, but if someon= e wants > it it=E2=80=99s there. > >> >> Within the following code: >> >> static void >> compare_single_row_8bpc4 (unsigned char *data, unsigned char *xdata, >> size_t size, >> struct image_difference_statistics *statistics) >> { >> unsigned char channel_a, channel_b; >> int diff; >> size_t i; >> >> for (i =3D 0; i < size; ++i) >> { >> channel_a =3D data[i]; >> channel_b =3D xdata[i]; >> >> diff =3D (int) channel_b - (int) channel_a; >> statistics->min_diff =3D MIN (statistics->min_diff, >> diff); >> statistics->max_diff =3D MAX (statistics->max_diff, >> diff); >> } >> } >> >> the "i" in "size_t i" is fontified as an identifier the first time, but >> not in future appearances in the function. > > In the first appearance, i is a declaration, so it=E2=80=99s fontified. L= ike the > previous case, not all i are declaration or assignment, so they are not > all fontified. And now you can enable the "variable" feture to fontify > all of them. > >> >> Within src/xterm.c, every appearance of ATOM_REFS_INIT is fontified in >> the error face. Also, inside `xm_setup_dnd_targets', >> >> xm_targets_table_header header; >> xm_targets_table_rec **recs UNINIT; >> xm_byte_order byteorder; > > I think tree-sitter isn=E2=80=99t expecting another identifier (UNINIT) a= fter > recs. Here if we don=E2=80=99t enable highlighting errors recs would be > highlighted fine, as an identifier. > >> >> "recs" is fontified in the error face. >> >> recs =3D xmalloc (sizeof *recs); >> recs[0] =3D xmalloc (FLEXSIZEOF (struct xm_targets_table_rec, >> targets, ntargets * 4)); >> >> recs[0]->n_targets =3D ntargets; >> >> "struct" is fontified in the error face. Within >> x_sync_note_frame_times: > > Tree-sitter thinks FLEXSIZEOF is a function call and struct > xm_targets_table_rec is an argument. We can add a heuristic here: > (ERROR (identifier)) is either type or struct/enum keyword. I should be > able to fix that. > >> #ifdef FRAME_DEBUG >> uint_fast64_t last_frame_ms =3D output->last_frame_time / 1000; >> fprintf (stderr, >> "Drawing the last frame took: %"PRIuFAST64" ms (%"PRIuFAST64")\n", >> last_frame_ms, time); >> #endif >> >> "PRIuFAST64" is fontified in the error face. > Is this valid C? If it it, we should report to tree-sitter-c. If not, we > can add a heuristic. This is valid C. PRIuFAST64 is a standard macro containing the format specifier for a uint_fast64_t. > It fontifies fine here. I guess it=E2=80=99s fixes by some changes I made, > although I don=E2=80=99t recall making changes related to if statements. Maybe you scrolled up the file instead of down? That sometimes matters. > The "else" is separated from the "if" in the parse tree by the > preprocessor directive, I=E2=80=99ll report this to tree-sitter-c and see= if > they can do anything. > >> >> static int >> handle_one_xevent (struct x_display_info *dpyinfo, >> #ifndef HAVE_XINPUT2 >> const XEvent *event, >> #else >> XEvent *event, >> #endif >> int *finish, struct input_event *hold_quit) >> >> the "const XEvent *" is fontified in the error face. > > Similar to the previous case. There could be better ways to handle > ifdef=E2=80=99s in tree-sitter-c, I don=E2=80=99t know if they are easy t= o implement. > > >> Here: >> >> case GraphicsExpose: /* This occurs when an XCopyArea's >> source area was obscured or not >> available. */ >> f =3D x_window_to_frame (dpyinfo, event->xgraphicsexpose.drawable); >> if (f) >> { >> expose_frame (f, event->xgraphicsexpose.x, >> event->xgraphicsexpose.y, >> event->xgraphicsexpose.width, >> event->xgraphicsexpose.height); >> #ifndef USE_TOOLKIT_SCROLL_BARS >> x_scroll_bar_handle_exposure (f, (XEvent *) event); >> #endif >> #ifdef USE_GTK >> x_clear_under_internal_border (f); >> #endif >> #ifdef HAVE_XDBE >> show_back_buffer (f); >> #endif >> } >> #ifdef USE_X_TOOLKIT >> else >> goto OTHER; >> #endif /* USE_X_TOOLKIT */ >> break; >> >> "goto OTHER" is fontified in the error face, and "else" as a type. > > Same as above. > >> Here: >> >> #ifdef HAVE_XINPUT2 >> if (event->xkey.time =3D=3D pending_keystroke_time) >> { >> source =3D xi_device_from_id (dpyinfo, >> dpyinfo->pending_keystroke_source); >> >> if (source) >> inev.ie.device =3D source->name; >> } >> #endif >> >> "inev" is fontified in the error face. > > Fontifies fine here, should be fixed. > >> Here: >> >> #ifdef USE_GTK >> /* See comment in EnterNotify above */ >> else if (dpyinfo->last_mouse_glyph_frame) >> x_note_mouse_movement (dpyinfo->last_mouse_glyph_frame, >> &event->xmotion, Qnil); >> #endif >> >> "else" and "dpyinfo" are fontified as types. > > Same. > >> #ifdef USE_MOTIF >> Widget widget; >> >> widget =3D XtWindowToWidget (dpyinfo->display, >> event->xbutton.window); >> >> if (widget && XmIsCascadeButton (widget) >> && XtIsSensitive (widget)) >> { >> #endif >> if (!f->output_data.x->saved_menu_event) >> f->output_data.x->saved_menu_event =3D xmalloc (sizeof *event); >> *f->output_data.x->saved_menu_event =3D *event; >> inev.ie.kind =3D MENU_BAR_ACTIVATE_EVENT; >> XSETFRAME (inev.ie.frame_or_window, f); >> *finish =3D X_EVENT_DROP; >> #ifdef USE_MOTIF >> } >> #endif >> >> here, the last closing brace is fontified in the error face. > > Still, blame #ifdef. I don=E2=80=99t have good ideas for these. Can't #ifdef simply not be passed to tree-sitter, if it is so bad at understanding them? From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 24 04:19:27 2022 Received: (at 59468) by debbugs.gnu.org; 24 Nov 2022 09:19:28 +0000 Received: from localhost ([127.0.0.1]:57255 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy8OF-0004bg-JY for submit@debbugs.gnu.org; Thu, 24 Nov 2022 04:19:27 -0500 Received: from eggs.gnu.org ([209.51.188.92]:56760) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy8OD-0004bT-JR for 59468@debbugs.gnu.org; Thu, 24 Nov 2022 04:19:26 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oy8O8-0008O7-C3; Thu, 24 Nov 2022 04:19:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=1+cgAjwqlMbnAVFUsi4AOmYn1aUJTkBOsrHA3KMHhCc=; b=VoWJNb7pUUcBp7tGEaxM GV9SyawjcisvSTZzboo9fHnECB3TX7iEZcUytzlVaOJZkBi7EdwWSAEW3cnsINNzHhK+HrBeCQaD0 1x8gK4YTKjcY87umXPYnxWheg3sjBOF+ahQglGEf37eVq35l0upqjAjltGw4qO+4IwL/XlhxQeVH7 UBT6jrltXvTR0JwOHzObdjN3JEckStOAW7+tqz0tVdO5DdcmuDHzaAAyn6xdGti+CQ0o9bxs83Aak iNXHVNpCt1FFRdhflC8SjfFLZ2cmO0s95/P7rRoBfj7s43npa4g3wxUBGppBbtX4uhyZlAihW7EdY 4MQ66klvRPLnFw==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oy8Np-0004Ny-Pf; Thu, 24 Nov 2022 04:19:17 -0500 Date: Thu, 24 Nov 2022 11:19:21 +0200 Message-Id: <8335a8yajq.fsf@gnu.org> From: Eli Zaretskii To: Po Lu In-Reply-To: <87v8n5194y.fsf@yahoo.com> (bug-gnu-emacs@gnu.org) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered References: <87v8n5194y.fsf@yahoo.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59468 Cc: casouri@gmail.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 59468@debbugs.gnu.org > Date: Thu, 24 Nov 2022 08:36:13 +0800 > From: Po Lu via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" > > >> #ifdef FRAME_DEBUG > >> uint_fast64_t last_frame_ms = output->last_frame_time / 1000; > >> fprintf (stderr, > >> "Drawing the last frame took: %"PRIuFAST64" ms (%"PRIuFAST64")\n", > >> last_frame_ms, time); > >> #endif > >> > >> "PRIuFAST64" is fontified in the error face. > > > Is this valid C? If it it, we should report to tree-sitter-c. If not, we > > can add a heuristic. > > This is valid C. PRIuFAST64 is a standard macro containing the format > specifier for a uint_fast64_t. > > > It fontifies fine here. I guess it’s fixes by some changes I made, > > although I don’t recall making changes related to if statements. > > Maybe you scrolled up the file instead of down? That sometimes matters. I don't see an error, either. I did scroll from above. From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 24 05:36:22 2022 Received: (at 59468) by debbugs.gnu.org; 24 Nov 2022 10:36:22 +0000 Received: from localhost ([127.0.0.1]:57395 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy9af-0006Wm-V2 for submit@debbugs.gnu.org; Thu, 24 Nov 2022 05:36:22 -0500 Received: from sonic306-20.consmr.mail.ne1.yahoo.com ([66.163.189.82]:41797) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy9ae-0006WY-2f for 59468@debbugs.gnu.org; Thu, 24 Nov 2022 05:36:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669286174; bh=bY73Iohp1gPD5xBmn68d6uV3QIu8g+EbM6yF6xdX3kw=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=RayTr9aAzQm3GWNtEQfIbS4hZg9ECuebC80kIDWerX5SwUDAov11F5DjFkez0WxirBIROI5dRoTJ3lvHpEErEf6FkP1nhksnfyJeVg2WgIaRoFv+qRcZl7uRp9q/0FhpY0x1mnivzmKkF+uy18wKEH3ByYAZc//h2IOCkXnIcLexDzQ0RYrcgsJepcEH5HhMW+IZMP3Es0Bh2aEMHFVGCxmBgRN/9gCp7Fj1jv6UQpZY76wzEM9OzGPRyBW6XalfJS6imTh99YRT7Mlkjz8DHpD86KaNlyU6aef2bYEx21rCKNrEHqz0hnkirgBiI/tIqdEgkyxd3mU9gRpeMK0y1w== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669286174; bh=oyM666MxbHha3mLZqgiwXohKV5SSZBfv14XrbsiH7kx=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=F6QuUKDdWBxk0P7ew+8RIhvadj4UvBlpRhShwgj7gROGUOCYac66F55idbKw2wk+W2ZTnNQENMaGDzZqWGT91in1HAUOd0iLssjuhOnV/qFEzgG+1zTQoSx4ZgQUDikC/n0k9L6rnwA5iV0nghoT7EZE8STELwJ7RkkDKKEu9LXROtBl9suWdVu1Erqm4EjizMsLSPTVsYMsS8To5b8id9acuIWH90fIzfJUIVjTVnQuFtR/FGjA0ysv9PBp/m6H8szd4a3MzDlAogy/4Bm7MyY2ioxXhv1ujRsEvV9YUhtSbrizssxw0WG7t5+m7MUVuskZ0IFsgtHbrfSN5V/BSQ== X-YMail-OSG: 0aL.i0AVM1k3KTUCLuOBUg.ZLN4HEuxcwnD5R3g4nZId_edTYXnzjIH.7FgwoHU ue6i42gu7UOm3f9DGicDZAAmNGjjjavxnfzXnHtaLHRBkkKRWgYl90b5S29qIXCJ_FUlE0pCXavd ajWOQTzVtOjN.ZGKbf7FN5DR8uwDUOelI.SDZTJcFTN.aqrrMKTBVFcyoK1PGDTaDz2lg4ME.U1I GzVg5D.lqZB1sa5SKIq4gNBfkw8Otki_V0Fk5HYePyDoFaQHC1JkHkkpbtVnJfwoxifIpWbu_Cpa 80DZ7yjLy2tMmOiFQB0cZrqIEiJ5lTPUJaVICEF5W.UCJH._q5VKziWKbWJBuN_7G9vPlHf84cHy mvHlVIV5awAP0MY0kuLNWt2w0NquSx1kSnij_ESptsgH202.U3.XuReEIAk7sFkw607t4OwfbxYd ttHlfesCNRKxN7nPfWqpfYdRvFYlw1vMXLVspU54U3.hylrQQ9d45UvPUO8nb1feI9MBF10yPU8O gO_GPsuNhAfCOFU8mj_Wicv.1Y.EYX2rPVGsyO4hQG.nUOepNR8DqqzEEj_IF_koxu2YGuS5YbKv WU7rRTIxVBGuosz28W28rEuztWgVWvZQL9rbvaqhRJ14xLYDpN3aT0izYuiEdkz53jjP4tyWIa55 H_nTyo1ujUt5ZV_p7SupKFbdwfhrQgYr1nTEEhWK4hkLQMpAZx8ko4J0jsmmJNvSVUVK5gQVUhef maFJFG_MvhLO1SCCoNbhI6_rVsOchZpNli92kZcZwyda16G96vAz7XElUTUuI5W9yz21IxuIHglu PtQRyPLoZBEy0eIfp5Nv6zp5s5Wiev9rE_3.Ewr52wFB0GQyzmySX8DRIA3RbF2WzLA4wmm7gL5O 2Ri4buccYKtJVmR9QR.Z6X_TqzOY6YUqvagiX4a0D.kHoRq0d6zwq0z1tu9jE_XawWLcI0mnO6zg 50rXMsSesD_0lXzoPdwYc5MxuzylweZonpK9yebfty5g7BypV1HIF6jcfJin239PetzYeyFxPHMP ozUOBeU9QMguQrs0B4EgUmAdlavTA94M8ebZ8WX0sMKNJ0dBeowrWAaU.3Z6zDRN7ItlSBWrUKbl Rdm22v3voCMfm_C.xQ8VufVZ1AEnusbPSj3Jq03awKdH8i4OTeS1YGnLcmDHdE.AS7rFqEToWVRO _veE0TFX2B2LxHPlgB4.3hlVGOJ9RO9PvBf0WSEPssWPSkNmQc2EgB4V0mz0V9_sZRYojXJg7Yon vpGVunP7skfYbY1x4RBVSPdUIRw0QPPg4r3Fzbd0f78EeFooHU.oG4k9IGXX6viYPvVjh3MTQXF4 OyR3J910eLV6MMHVy_ByDUpgwx4ehUoeghcXhrQf4O_peHdiSdQs9HGewdhJhwVhyL4e.jYicrpw XUnRVaaYdMl12n8JQNILEIY48pjzzzrxjxomASNjm7m8XZaGKJMx.34pA7bSOiFS4c6w5ZkrevRb m2GwiWoheOSJ23_tKR8.VM4zkNST5XkRcL4Im7QG7OyjhCVsJMgD4ZnHD6aB7_Oq33F7uGyjrtw3 e2DExt0YT38DjOgOzKjUIPdu8xakTy.xuGrPTv7wdj7vroucz6Rnee8OT5hFvv9IpYA87i_p6k4t Scc3XIfd3N7W2opwhrBTc.hTpk8DGkLy0sA0zJ6tDDSfJYY1EZ7VczEGDgiWpRK7wzz8vCNf2m6t 3JyJY4BpgFCS9FEBsBSlmar80qqKL4SEDdHzSNFCulHKxl2AMZyddWDNNOvuSbaRs_ImInk.L_lH Tu03uXsWPYpXFiiChLxZBxYtqSwqp.NtdyQ7p4EjF2usvQTwlR506PbQJDUylyASdkgWM2C_8Q3S jC5UnjTtdPx9IDSiNEZwfIFtNhsjEAcAJk..hZKUf8hIAsSLyRUIO6_1qezTlARURLnHxj6YM7sS jBLzJq7V7zTQmNVItrBjTiKGsxFG6myuNrNj8ku3ETqNx3YyTb_apIYVouM19qCo8krTknN5bj5q QU9jWXraWLTPfzRIcn_TjZMWbtYD6JFnMGjWVhJhkRUybqgJUR03MbKs4aPy7X3OJzcOifOyYyDo 4aFpoJCy4wNCqLYC2kDiOYHtUforJnUW8ee0w11EQeVQplcRZxQpASCDOjzjq0Aik9UOZsnK8tu1 nzYajEsfTOLqBXP4segxO0KPBgnpdz42no4rhmCzs_xHUIieXIYSPaO6zeqj3YyHN0NsCp94EWAv bYQRzrGODYIJxFhDcjYLDoEEFOqTDTR9T6Pj8eSin6gkpufvQ0UEw618yV2KzZna6rSg8 X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.ne1.yahoo.com with HTTP; Thu, 24 Nov 2022 10:36:14 +0000 Received: by hermes--production-sg3-6c8895b545-nh2c9 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID ba0df2715bacdcef6680d4907a1c21fe; Thu, 24 Nov 2022 10:36:11 +0000 (UTC) From: Po Lu To: Eli Zaretskii Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered In-Reply-To: <8335a8yajq.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 24 Nov 2022 11:19:21 +0200") References: <87v8n5194y.fsf@yahoo.com> <8335a8yajq.fsf@gnu.org> Date: Thu, 24 Nov 2022 18:36:06 +0800 Message-ID: <8735a81vxl.fsf@yahoo.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 1156 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: casouri@gmail.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> Cc: 59468@debbugs.gnu.org >> Date: Thu, 24 Nov 2022 08:36:13 +0800 >> From: Po Lu via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" >>=20 >> >> #ifdef FRAME_DEBUG >> >> uint_fast64_t last_frame_ms =3D output->last_frame_time / 1000; >> >> fprintf (stderr, >> >> "Drawing the last frame took: %"PRIuFAST64" ms (%"PRIuFAST64")\n", >> >> last_frame_ms, time); >> >> #endif >> >> >> >> "PRIuFAST64" is fontified in the error face. >>=20 >> > Is this valid C? If it it, we should report to tree-sitter-c. If not, = we >> > can add a heuristic. >>=20 >> This is valid C. PRIuFAST64 is a standard macro containing the format >> specifier for a uint_fast64_t. >>=20 >> > It fontifies fine here. I guess it=E2=80=99s fixes by some changes I m= ade, >> > although I don=E2=80=99t recall making changes related to if statement= s. >>=20 >> Maybe you scrolled up the file instead of down? That sometimes matters. > > I don't see an error, either. I did scroll from above. Try going to the end and scrolling up using M-v. That makes the error(s) show up for me. From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 24 05:55:21 2022 Received: (at 59468) by debbugs.gnu.org; 24 Nov 2022 10:55:22 +0000 Received: from localhost ([127.0.0.1]:57469 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy9t3-00072f-Kr for submit@debbugs.gnu.org; Thu, 24 Nov 2022 05:55:21 -0500 Received: from eggs.gnu.org ([209.51.188.92]:44406) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oy9t1-00072Q-6u for 59468@debbugs.gnu.org; Thu, 24 Nov 2022 05:55:20 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oy9sv-0008P6-Vx; Thu, 24 Nov 2022 05:55:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=wyDAq/t7/+HOceQNa35oKLGeFm2cVQRRVqFXu2Woxco=; b=EBNDHzuB4fb1Vhl2ppVF wohksC9sOEAho/W+GEemW0cWx9iZD56R9GjjkfilK/fDOv+ZtAFas6JMgUxGJx35sGbL3TV2VAbx6 Y/E0wTV0CYuka7sJA/tKEH775i6PT7qn6dxmnN28RJmBZ3GhPewXOZMjn+xJaU/hmB9J4sp2WdyvG +2ib5jF/03coT0I2a0k4PhkrY0m8Jd+OwODU5fhg58XIhdPltC5vbBrrPgImnDQzyQzJMBYM7O0Yl Lkyn3R9UUJfyGQ2XMIICT8uwT847ownIs3NEqW0I5aK+XaA9NwybqAfGResmDrpFMfDbJKpYA7o/p c/tsPbZAYF8uxQ==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oy9sq-0000a1-1x; Thu, 24 Nov 2022 05:55:13 -0500 Date: Thu, 24 Nov 2022 12:55:25 +0200 Message-Id: <83sfi8wrj6.fsf@gnu.org> From: Eli Zaretskii To: Po Lu In-Reply-To: <8735a81vxl.fsf@yahoo.com> (message from Po Lu on Thu, 24 Nov 2022 18:36:06 +0800) Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered References: <87v8n5194y.fsf@yahoo.com> <8335a8yajq.fsf@gnu.org> <8735a81vxl.fsf@yahoo.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 59468 Cc: casouri@gmail.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Po Lu > Cc: casouri@gmail.com, 59468@debbugs.gnu.org > Date: Thu, 24 Nov 2022 18:36:06 +0800 > > Eli Zaretskii writes: > > >> Cc: 59468@debbugs.gnu.org > >> Date: Thu, 24 Nov 2022 08:36:13 +0800 > >> From: Po Lu via "Bug reports for GNU Emacs, > >> the Swiss army knife of text editors" > >> > >> >> #ifdef FRAME_DEBUG > >> >> uint_fast64_t last_frame_ms = output->last_frame_time / 1000; > >> >> fprintf (stderr, > >> >> "Drawing the last frame took: %"PRIuFAST64" ms (%"PRIuFAST64")\n", > >> >> last_frame_ms, time); > >> >> #endif > >> >> > >> >> "PRIuFAST64" is fontified in the error face. > >> > >> > Is this valid C? If it it, we should report to tree-sitter-c. If not, we > >> > can add a heuristic. > >> > >> This is valid C. PRIuFAST64 is a standard macro containing the format > >> specifier for a uint_fast64_t. > >> > >> > It fontifies fine here. I guess it’s fixes by some changes I made, > >> > although I don’t recall making changes related to if statements. > >> > >> Maybe you scrolled up the file instead of down? That sometimes matters. > > > > I don't see an error, either. I did scroll from above. > > Try going to the end and scrolling up using M-v. That makes the > error(s) show up for me. Still no cigar. Are you using the latest master? From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 24 07:13:13 2022 Received: (at 59468) by debbugs.gnu.org; 24 Nov 2022 12:13:13 +0000 Received: from localhost ([127.0.0.1]:57634 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oyB6P-0000of-7b for submit@debbugs.gnu.org; Thu, 24 Nov 2022 07:13:13 -0500 Received: from sonic309-20.consmr.mail.ne1.yahoo.com ([66.163.184.146]:39139) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oyB6M-0000oR-Vb for 59468@debbugs.gnu.org; Thu, 24 Nov 2022 07:13:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669291983; bh=8aDjVkFM/JKgFstEQzXPtww9LRXw2jCVfcVJWXDjGvs=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=ZR4BOUDg6KYEg/91i3loGjRGIdlkigqLRUv5nO+gyrpRsNfsrRWq1mgwH4jEDhLrpDB5lZkuoqeD26HUxGp410gLuKZeG3K9F3O/OV4DuyQ8ncOP6qoMBdKA6im0OHqcbN7sxfjVm+1sX8oTOqnG4Nh1GGA/aR/0/fYHLsJeJLbl41pLY45Zlmbeq2+LDgzWOqJghycvxO2ps8YOzqF04I2paY0hNVhgukP2hDtJYQh2Ojjw/cfN2FpwQe9r13bDOhG4SbLjbHDBehqYx+i4fegFOiZ+nWnR++xpBjgN2eytG3jiXV3GMB+Wy/gMc+eMFvfE5rzot+NYcdtk2a9c5Q== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669291983; bh=qFto0jKbeh0LE3D/tvvjQrZNj8n8G21Ie/4nr2dVWwf=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=MJp3/o94ppNfAE8zTb+McfdblAPrLxZQw2zXmhkQyAnnAD7kaoP6djv6PDe0uP1hMn8wVjQhxBr5KMSseeGt134crTfL0kUvkesFprNrNyM2t5Uh+1mWJE4Qe3qeX13+clppj8p+Ca+w9Avdk9lONVw4DGh7PYGrw6YtNwuwzhI8DqPrGV/QNW7jfjM305uNS9xU5EWYMpX4gAiy4gwI8rU4DelgNJRRjEB9h5e6Hsv6vXF9aMYdm4KIBdX/049eVpmngTHNdrel0NHSdZLmoXAUAW4s9dLb8u/mhleDQbfVuPZGVR0p1JPZwqWWfMm7PQxQGF2GnE2rAyXFFP3vpA== X-YMail-OSG: iQlYNR8VM1lRnsjIJuHobzLR5ZJ1Nqs0eH_9X9ngkcpAqyzN7hQebi4CPKxT3BH m24Py8I0SUZZzdO3lGMvHdarb9jII9UmigWWyAA9ishPsnteT1RmN9m0PJvG1kqwV8cOJthUx_CX iqydLKKc.78ekJRz4mU01FZima02pgih8zoBFgfezs_rB2ZLvGSjcIdJ8FiJnjphiS04WecikNzt zu6zwcP6IoOtuI5b2tp3cg1hdFzi96g7Xryqajd0urO4BLXHhEBdVFU4z_coZzznN3r.AAK_k9fl BwXYg3TF3mm2Qct_8FC66Mhg5LHhivdMbGw4RnJ2vehXTPp9D3vK724uINHL5m5H.K4xHAkkiSYp lS1hFRpyF2NQ7bKB7Dd7on86c.qtH00aoOXKI7F4t7JWhLayu_Pc_mOysDJwk9KjFiO9duWJ0Phe pcxhZ3zuvZHuCtlu6y9RAOIAVXcUPun8RgkiOiMp2z7qWCcR2p8J8mgrJGKNU3C80eA_ulSHiY0u 0iK0Kvs2STONYDVga3zP__MhPAvTiEnM5uL5URWoWanygkA29hNT_Gf_c_AR3O0IGDXVwguvAFHA t9ks5JuUDq8Nfv2_TCURZ9CZDh6Bz6A9rm0SO.8aQaeZ5NZsuzj58h_MuJm6mzAv9BdXAOFrT61m 6U0Vskz5KRo4lI0J7Oj_sH8JZDz6PMLaMoYhau4wLr.jkvdvGIIpxoGqT6U_KXRHNWoAzYbk86oS KNfJvpLwNCGMJf5sj7skbDkRIl2oQhAJO9CG2P6YUgbZ_28mJTfyGhu6Agh_rByTHOyBT.zicq0v S9xXkhnKAfE7CYWkLFiRHC_6VgLTjj2eBsXUeBpGwD2btRBbEbojmJq8UJTzr7TFwKJwyxmyum6p BWBoK7SAeFZ9is8dZSP9xbkmY4IsVbEahJLsa6NmJCnWoKnDIYjbjoQH60tjDSm0L5W1bpTZECCX ojkXbmhLzk73UZQ7j4w3PvK2lwpMKTf.8Gp6ZAd1KDjfsBB_wYmMG994ZKGo.gVsiNs8l16OKXzj Ps166bSo4W16TVvUZ9HurWHabRzbQi5QF4iLzS8CjCA80LiIYWPIwvag1xfxqV8TtUvy5GgoOcJc Fivwy7Qts6vUYm9IogXz0LA7AWGF31igXNVcm1guNtSyxz.3cLLXMiIJ1eVnaMFQAzfTSqTAk3Lh 6ck3MrgyalYJyr8j1vTeXdwzzV4MuvIU6_efM1WmmpgWaYTtHZy_PcbngpCJEIs9.bLIpOtEVZDP WxIRelsh_BXdic4nowqoenTwK4xdwW0JuyFNss8xj6KwNCY0yxuQif8lJtLpk0hnbaDhsqKoOfzI 3I5eG7ioJ5xuFfRohjZQDgrJjjY.xj4qM0xX544y7ORnYNzZd0zd6MR8NRVHX4Jc9XzIFUq_GUK5 WcYZwebkKbXz6bfEbQbcpL3MiUmBeBGU7cWl_hSLee7Xl8LMhm5qlmWZkRKjay9geKAzywl3Gxl8 jCilEgIebu.Ov8tWxu6nmYBkoh0grka8M3j0tDUfFP_emHKFBZly0jjPCjwVsyD5It4nmN2C_gsL NatTJx8AAk6UYb6YcbxPqtJro82Ccyzlkw8jYA2ASDmHMPFfR7ofLMMgaIiyIx7wxWhmzMhI7xAy N08DzhrdsGM1jDh5CVvBK8XGD4.Fzo0qLdRo4ez_gxpYngbmyTdpTqjLYEeShcMGlL_m_c5h8yxh 8K9_PniOvrA_9wfBIZ1O02RkQuvrcJR4KgnzV2o5PupU7ux6AfZTZGZ1S16cGBJt6j5DCvr70p2Q pYLLlh3TLeZKdWNFJ_Ayktjs9XxtVGbqg2EjeysQM05pnBBOBJ1UUYOtdmwhE8msLqe_rvSCWbwp 1q6OMbfEAsREeMC5yKh4AKd8wxVDhG8b0eFoBuJbQKz9NPZw3rH9WWfiv4g6vdzEjc.nYsMkLhCh mixN.C.zpVhRfLSt.kCguRs5bCAuKoAU11GPBWozpUeppFF0_098w.J5JhcdeNElfz2VFxqLBhTj lHlVaOwwAozGzsOa2Jlk3rG50Y6xrKZAGj8auYbv_hSQCfP6SqpBH6PnKlipfOqynX75ar6QzmUT n5LBq2RsKAWJ7o67G0C9_6g2aiPj8UYZ1Jw.VzFS7ipJyvNLtJ4XGm5SRdaTEVDS0DDPt3WNFsSR KQulDHNOJmZKRYfdVPIqZInMpKBYetizz.ct8WkXZNUKmjv7JRA4StiiIZ.cPtlhCZtTlalYi8z1 f5rM9VpzFkk4dxBltW8jXMvGizfm3clMkcBLClCJ8cuVPHyt0YkTit4S1OydD.J58vQoUYg-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.ne1.yahoo.com with HTTP; Thu, 24 Nov 2022 12:13:03 +0000 Received: by hermes--production-sg3-6c8895b545-fzfcs (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID cc71fabe2e9b69549fd1ee3e9aa85359; Thu, 24 Nov 2022 12:12:59 +0000 (UTC) From: Po Lu To: Eli Zaretskii Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered In-Reply-To: <83sfi8wrj6.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 24 Nov 2022 12:55:25 +0200") References: <87v8n5194y.fsf@yahoo.com> <8335a8yajq.fsf@gnu.org> <8735a81vxl.fsf@yahoo.com> <83sfi8wrj6.fsf@gnu.org> Date: Thu, 24 Nov 2022 20:12:52 +0800 Message-ID: <87tu2ozh2z.fsf@yahoo.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 203 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59468 Cc: casouri@gmail.com, 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: > Still no cigar. > > Are you using the latest master? Yes. However, that specific problem (with x_dnd_begin_drag_and_drop) went away after I deleted treesit.elc. From debbugs-submit-bounces@debbugs.gnu.org Fri Nov 25 21:40:17 2022 Received: (at 59468) by debbugs.gnu.org; 26 Nov 2022 02:40:17 +0000 Received: from localhost ([127.0.0.1]:37547 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oyl73-0005DX-1A for submit@debbugs.gnu.org; Fri, 25 Nov 2022 21:40:17 -0500 Received: from sonic305-22.consmr.mail.ne1.yahoo.com ([66.163.185.148]:46409) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oyl71-0005DD-9a for 59468@debbugs.gnu.org; Fri, 25 Nov 2022 21:40:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669430407; bh=93QcRixManIqXBUN1Z1dH0vrYgZ58nLCemthpxYHo0s=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=VvHofc3yAlvB3m9e4qAo7R8yVz/bYi1y03zJC4HgchruYwmVa2R4FzU9vdT75/L9hD+J4751IjiUqQvZUfCBbMPtsi3YKA7EvTGyzt8smhD9HJaUpu5y49OdXwV5UvQFZijT3tlef+6ZYCldQiafLd7Yo6YRPziOolTIfsJtv2UH81hFi1NFJYo2VnXIyCEhoG66xd8D7Vrv7oJ59SZeGMZVtiza3vwcwcTRcCP+v0cz8VCVjZV3LvPjVqXClBNPJDXXjAtKImuY7X0SoynVYlEV0V37rUxvvMzSvpa36tyCunXAew5eVN23qY+z2y7iYkpSXbfp26BQoxNOZ5Bdfw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669430407; bh=bIfGmwWj4zGtclf/4375ze4Xx6eP/8/aGVmgJsvmAe9=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=m1I5PY8fSjr/2ZExG/BqQ1mJpAucUmtknZ+skTZA15ya9Jux8rxNRC1yWpPkE4XX93N/4lLM/2QRMNd7dsVDa1dz/ZtGRWU2ymo/9m5EUr/tCJNUmZvBU3DtTMmYE7z3bfesBzPrXZLRC0bUI69IJcCnmy1FhwD96Nzgk8O0aZ84Ya//V75Nk0s1jftjwk6mOknlKJATU4fiQxSBogfW2yLvP2sDvRgvwmq5ho7dSoDHrb8/r0xgC7zUvxfkQOakyFTRK2YSJAqzKpRBJ6brlrfxNscADvucHFeXUsRgOqlVsSmn6qSEMLcvHGVI8bcQJyX6qjA0THYgAyY3iYDecg== X-YMail-OSG: KsEvo5IVM1mB8SOul4aATLrZgLLcoVMx1YLbRKyTD20KKpMHx2AE99CrvO7MS.x GJQNOZcBfysf3fIVOQCl.kfuEmLS.vrVUiZjNNa27SuBHufnBMvyj7aCopFnMnqMl7RJh1ZchUbZ p3.d67iE2O0KalmGBtopYEyqhV3aiKqd5FBRwtO_oSDn8l3k3SDe71AWmoZwyXkLBDQ1CsBqoHZl ep74gEUUazEQ.74elpzVW.b_TkiBuC40Ovws7vmMAkHw33TAEEIQhbnOFjYKiZWn4wGl7Wwm7Dt9 dAjwL4BLYksy7wLvgIk7qXGFUJ80jR.m38Uu_g5.JEumussfckQrctxlKg.eCxsHih3j6pw.CliH 6AL_vxXVGi0zYxSLfAItYbm0LlT2H968pkyjfJdzz4M21MfpRyU3Ljic2EYO.U7dvfgSSIn5V7Z_ jfw9bJYQ5RdzJqIYdQG.pYqgkf8Jq8Ue.arHhGA9QCeHVv1nI83xvXMuWrnwEUv37tkucT81kWgZ 0JISPsNk4Fky.f14EibI7JBNnqhLde1pdw8BW2geIcAL80bHNb8TgQ59rRF55OHVg6XScJ_YscHu ki0x6sYaycIoYgyJ2UuEHZZDyRARVmUbPQEZw1a31EYhGWRKQBsg5ySCS3zvbO4XSSztpS0xXgqS zQWUuDhrbBc9zFgZ5dtlIY5BP3ZtEgNJMo8b4.ymRoKa0oYsbWqRg7EFcouDcdGNlj5LF72iJ5hH iNoh9WDCelyf_hhVq86Td9YxVb.jCINRYnSbqYwTBAbmLBIx5yQpDud3lCziOX9A_GVkeO6ktQ9k Ggn2FDqmNmzGzrEqXecsqO9yv9phGGaiyu8Z8xUiCJnptNCboo2nmU6ojcmdvIM0m4R2KIGJopcR 2KQPOGmzzw4N8sUx_Rra6Z.Aaw0fTdM_xdHyBEJBGdlJ6DY_li60ZvJyx_hTswLuBnY2OEVEO44z ku3JeWUT2E.vwggBiXx6MLCQTYW1THTtJhZUckTQy4t.80iT4UwJcpYDMTVLNL4pqTj9I5TI_lBW bnTCpIWp54E7g7iPwumDtVU6qsvQe6YIwRWyGejCM46QtS6EoFdPFiUcBcO31SVjyP6wvC0IhmQb T0_06IykpDYZqU1S6hDt7gbkDZRKKmVR62ugArPLqehnvxJrLkz0dvPXQ0XmyybzOVG8cal3Eyv7 9PTfJJL_rrhOtRyo.UTJA.H86oej1HmoAfi7o60b0vvuP1ZQnWYhzIp9hn6OwJsLAyXgFjBc2stb m9peSlazugIMPVGH06eoZ64XJ379wcdLPGhQL69MnaQCzJ3QMbgjoreNMM_0WH3KaR5DYzPSTJek DQ5LVbm.gRqiVRCD2qC5C4PRRuzfnUCr0arii8LqSWLRlQ0Qy5m8dWJbSNW2J.ozFmw0OmH0.Mie CTbXZUeZsQkstlXmpALI_MqeVUoFJ8p56DrZSYSPBiDVXzZTQlSvdXJR1.QDnHls2PlCOtEcQjU9 QNkX4veeM6Pz6WXhyeQCC5Ysrdw2bWbI.R4YDscViCQ4UOCJOwTPNUsPz6UTw9G8sh90LFE3DCM2 T90h7jlXj.WcxOz_r44T6bDg2qSIl.P0yki8XFj1tSb9lsFaI2S2LTtiCVTLX7KyspWFBkspSUw6 rz3Jod2CJX1XadQIdXdv6iY54WbZ0tnvJZNnGK8yLYd_bXWEj3svG0vmDYub5RLdTF1ImYPH82cU tMAWe9ziVkLX1ORbZrBbefpntMbOgLMgnz_nq1V1ghy_YJ62xhEM6ZvhU53Lzfwq.Uc5LWKQWjav VpwExe.N4mWk2IDsBv9Mh.7Zt0ph9yb1eRiUTbs_tCxwNsKoQb2sXQJdE7lW2AUjiJTVRb490hbR F5qxDPwA5UYAF7zpU6Sx_yQ_f7Xhr_0XjZSSJxtWJZHwszmeK00IGPqqHdhmrEPQrbDl_GHP_yH1 DfSOJ3xuoVpHW2hHKJIYU6gRZZj3eXva9sdOped1s_ZzEkfQ5tRC.6Tt8QuphFcR3KT9IftOg7Oo sYHns3zJ6qIjlUHeuGENDzcfVALYunTQwmUeg0nIck5nGfMQB7d5cYmJ28D4ghM.gpn5eo_gFjhB 7geNUhpnSrHwcgRQKHll29vk3xKizVMWmW9Ht8jZh12pEghnBqvJo9zzGIO7maPAzptZPNuRutha .qGzxG4odojjBG9UsucOnOJ1i.MlbR2x216yRuFaNzh507ezQ6vBq5CS26.WTZMRjRSw0UnZBjFB 3eHNoPW63Eztt1ttF.qAEJXBNlIG94Vs0ZgdXGGvtmN8vlApXIe5ypFP1uNNYyWsNqjgidUSpiw- - X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.ne1.yahoo.com with HTTP; Sat, 26 Nov 2022 02:40:07 +0000 Received: by hermes--production-sg3-6c8895b545-66t5n (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 95a3806dab90d1a6a068bf4760a23b24; Sat, 26 Nov 2022 02:39:59 +0000 (UTC) From: Po Lu To: Yuan Fu Subject: Re: bug#59468: 29.0.50; c-ts-mode cannot fontify after macros are encountered In-Reply-To: (Yuan Fu's message of "Wed, 23 Nov 2022 16:03:40 -0800") References: Date: Sat, 26 Nov 2022 10:39:52 +0800 Message-ID: <877czixwuf.fsf@yahoo.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 146392 X-Debbugs-Envelope-To: 59468 Cc: 59468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Yuan Fu writes: > Within >> x_dnd_begin_drag_and_drop: >> >> if (x_dnd_movement_frame >> /* FIXME: how come this can end up with movement frames >> from other displays on GTK builds? */ >> && (FRAME_X_DISPLAY (x_dnd_movement_frame) >> =3D=3D FRAME_X_DISPLAY (f)) >> /* If both those variables are false, then F is no >> longer protected from deletion by Lisp code. This >> can only happen during the final iteration of the DND >> event loop. */ >> && (x_dnd_in_progress || x_dnd_waiting_for_finish)) >> { >> XSETFRAME (frame_object, x_dnd_movement_frame); >> >> is fontified incorrectly: the "if" is not fontified at all, and the last >> three lines show up in the error faces. > > It fontifies fine here. I guess it=E2=80=99s fixes by some changes I made, > although I don=E2=80=99t recall making changes related to if statements. Ok, so with a fresh build from master it turns out that this still isn't fixed. --=-=-= Content-Type: image/png Content-Disposition: inline; filename="Screenshot from 2022-11-26 10-31-22.png" Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: text/plain >> In addition: >> >> Lisp_Object >> x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction, >> Lisp_Object return_frame, Atom *ask_action_list, >> const char **ask_action_names, size_t n_ask_actions, >> bool allow_current_frame, Atom *target_atoms, >> int ntargets, Lisp_Object selection_target_list, >> bool follow_tooltip) >> >> "Lisp_Object" and "x_dnd_begin_drag_and_drop" are not fontified at all. > > They are fontified fine here. This appeared to be fixed, but it turns out that it was not actually fixed. "Lisp_Object" is fontified as an identifier, despite it being a type, and "x_dnd_begin_drag_and_drop" is fontified as an identifier, not a function name. --=-=-= Content-Type: image/png Content-Disposition: inline; filename="Screenshot from 2022-11-26 10-33-09.png" Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: text/plain Also, the end of x_dnd_begin_drag_and_drop is now fontified as an error: --=-=-= Content-Type: image/png Content-Disposition: attachment; filename="Screenshot from 2022-11-26 10-37-33.png" Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAj4AAADPCAYAAAD1Y9s5AAAABHNCSVQICAgIfAhkiAAAABl0RVh0 U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAqdEVYdENyZWF0aW9uIFRpbWUAU2F0IDI2 IE5vdiAyMDIyIDEwOjM3OjMzIENTVCJEwjsAACAASURBVHic7N13eBTV+sDx7+xueiGNBAKhhiZF qlJEpKiIwJWqiFdUvCgqeuGHWBAVEK4FRVAR5Yp6raiIKEiXJgiiIBAIJSShJSEhCdn0LXN+fyRI gCS7IRtK9v08T54HdmdOmzNn3j1zdlYDFGVQSqFpGmazuaxNAAgICCj3fVHN2eGN7nBkGszvc4XL UrCT6bc+yumXVvB2n1C0v9/IY/esfzA6bjyr3+9HiFbG/oXreaLtPLpt/5YRgZenyEIIIS4fg1KK sv5E9WDdCm3CIDj4gr/asDjPhRldDV3Guz2Tv5mK6f3XWJd97mVrzDxmxtzHl3PKCXrII2b+6/za dRR9JZYXQohqSVMOIhyZ8REOnZ3xmQrzb73Shbl0eWufYejnjZn57hja+l/p0gghhKgKEvgIIYQQ wm0YrnQBhBBCCCEuFwl8hBBCCOE2JPARQgghhNuQwEcIIYQQbkMCHyGEEEK4DQl8hBBCCOE2JPAR QgghhNuQwEcIIYQQbkMCHyGEEEK4DQl8hBBCCOE2JPARQgghhNuQwEcIIYQQbkMCHyGEEEK4DQl8 hBBCCOE2JPARQgghhNuQwEcIIYQQbkMCHyGEEEK4DQl8hBBCCOE2JPARQgghhNuQwEcIIYQQbkMC HxdT6kqXoArY4Y2u8Ogax5tat0OnKHhuc+Wy3D8DGo0DawX30y9H+xce4osps/k1+2ymx4h5/jZ+ 213R0lY3ymH/1w+/z7Ixw9gZa3FpztbYhbww93eyquP5J4RwKQl8XEjtK2D5Qxby3XjwNdaBfwyB LlGXP2/bLuh0J5yqyvbXk/hm9D18HtKL9gFVmM81SCW8x/KZi8vt/1pIK+p17kXNUJNL8/Zo0pvW fz7GsLdjcG1IJYSobiTwcSF1RlHoxkEPgKEuvPA2DGxQuXQ0reL76BmQUaXtr5O0aDzT88ez4Knr 8a3KrK5BKueMw/6vhXanzUNjiQp38dBjqs/d8+bS7uvHmR3j7jNvQojyuPZj1zVMnShk9Xi4YZaR Y28XkrjFjrW5F30+9iLICFh1Ts4r4K+f7Fh0DZ8bPOk02ZPQAFCnrGx9uIDUVEWu2crymwvRAK2R J70WehFkt7Kxo4Vaa/1oFl6UX8abOWzI8+auKSYMjvJHJ2ZEPjzjhfqkgLjfdGx1Pejwtg+NGjhR uUIYHgG9YuHR2kUv7ZoCw3Ng/2zwsMMbPYFXwToXPlkPeQ3gtc9hZJNzyWTthNGvwOqDENIF5nwI t9QE7DD7Tph7sLhuKTB+G7x8ffGOTqSvp8Pb42DOevBuDAPqAaHOHTs9CR4eAFuS4dgZ6NQIjICp GSxdDtcZQWXCh8/A26sgxwO6PgRvPQ11PJzLo6geMSx48whDF46g7kXXbQPW+K/Z+t33nEzKxqvp cG4Y+zC1Ag2AwpKwnJgfl5J05Dh5WTb8bnicrg8PItiraG+VvoldH87jWEo+SvfAp+HNtBjxKPVr exZtYEvm5Pdv8Nevh7AoT3xajKDTA0MJ9b2ECPEijsuHyuXMlg/YuXQd6Rm5EHAdDYc/Q7uu9TFk LGfrf/5LamYyubmrWf7YgqL+HzmSXpP/SRBH2D/jKWKTbICVwsxgrnt1EW0bGM8VIWc/hz6fxf5d x7Cawgnv9SSd7uqMr5GiW4kvToV/jkYt/4C4mHhs4b3o8NSLNKpdIg2/Lkx4NJBus9fwxEf98Luw mua1jO96N4ubvcnmbx+gvnzsE8I9KQcAZTaby/2rDvTjBWrFzdlqxZActXO5TeXmKVWYoSt70bsq 5RWz+u7hQpWRo5Sy6yr5lWy1+FmrspRIw/Zzrvryn4UqT78g8UKL2tA6Rx04de6l9FnZavE0a3H6 DvK32dXeQVnq6wF56tAeXdmsdpXwb7Na9IxV2ZypXIFSw2oo9X7SuZd2vqBU9L9VUfltSr3eWanw Dkot+EOpAotS39ynVO3RSuWVeL/O7UqtO6GUXqDUFyOUqjdaqawL87IoNa6RUi/9VbJhHKRvV+qj O5VqOkqpw3lKWVKUeqWXUvWeUOe1r8NqfqdU0G1KpVzY/nalPh6g1HX/UiqxQClbmlIvdlOq0/SK pW+Pm6W6t52s/rRe+MZRtffZjuqbaQtUUnqBUpbj6shbfdW3720qTt+ucnd8omJ2xKkCm1Iq/6CK eamnWvHTMaUXN1rS/D5q6Wd7lFUppfRsdeaPVepU5tnekadSPr5Lffefr1VGnq6UnqGSPx6uFr// a4XKX07NHJTPrrLXPq4WPTZRHTySpXRlV5bja1TsliN/91+llLL99rT6cup3F/f/kmw71Paxw9Su hBI9V09Wh2f2VD+8v05lW5TSs3aqXc/fopZ9G1uUvv2o2vtsV/X101PUobh0ZbOdUglv364Wvffr Rf1fT/5A3d74cbW+lIbRUz5VA2sYlGfbqeqvC4+hEMJtyGeeElSqIniCL+36GfH1Ac9greheYJ6N Q0s0mj3vSbAfYNCIGO2J/1Yr6bbLkD+AphE1wYcmrTWMJgNRdxjRE3TydRdlrkH/6fBwB/DygAFD wHIYUvUS7/8f9KoDmhcMfwp8V8J2ZxdUlJO+fhw+3QxPvwbRPuARAYN6Fc3auIJ+DBZugokzoL4X GMPg2Rch5X+wowJ3RWwJcRyv25j6pRVMC6buwFHUDvECj7o07H8bpl3rSbMBGPDtOIqWHRvjaUkh MzENz/AanIk7TFHzGvAKCaVg33IS9x2jUPenRofbCA8qPvoFWzm0yZdm9w8j2EcDLZiIgYPx37OR dHtlW8eJ8unxHFkZQ8S9k2naKBANAx51+9C8ayOX3CtXaeuI29+Clvf2xN8DtMB2tB7ek/wNyzh9 tn6aN1H3TKZJ4xCMxnCiurRFT068aD2RFtKQ+tYEjpSyylmLuJ+vYg8St/EFrpe5biHclpz+JWiB Jup2uvjWgcrUyc3RSXk4m7iSbwd7gAvXlJSV/9/vlzhampeGwaZc+i0mjxLpG7zB0wqWMtI3hEJw DpgrEHiVlb49CZJDoEnIpZXbEXsynAqGRkHnXvNsCHVSIdkOOHu7y27DbvLAw5m7SwHBeBYkYVVn y7CGvz75jFQ9itDoJvgpE3ZLYXH3MRIy+B16BH5M7BeP8sdJnRrth9Bm5IPUCTOhslPIzUsg5T+D zu9/gT1d1v/KLZ9+itzMcIKiAl2T2QVU5iny/aMI8DtXOUN4PXyz9hcF9kYAI5rxXJileXhjsFuL +n/JNtFMeJjs2Mv4QOJbO1rWZgnh5iTwcYIWZMDH10DUQn9a1i9nQy8No5WLB2PAYAJ74bn/67bL uwraywMKCs7931rJ9Z+F8XAiAiJdMC1jCIKgLEjOA2pUIiFv8LIUB2sl2t9YC8LPQKIZehSvG7Ie g+QwqFWB8hsjo4g4dYIkOwQ62E8/dYy8oNr4GgA9kdh35lIw6FP6dgpBAywb/mTP7yUTr0nE7ZOI uH0SKieOxM+fZtOHNRn03F14+4fj4xNN1ORPaFmrCiZpHZVPC8U38DRZSblQr5yvsnl4YrQVUtFJ SC24Jt65v5OTp4gIKDpw+ukT5AfWxKei1c1LIskSSb8gV6x9EkJUR3Kryxl+JpoOUMS+YiHDXPSS ftpOSuz5wYuhkYGAI1ZOJhVvk6uwAxgNBNaxc3Kdjl1X5KwrYOfSyxj4mKBpPfj5JyjQIeEneO5L KnaBUrB9KRzJB/0MzJ4JYfdAh4osDi6DsQn0qwdzZkGGDrmHYM4iqOhdHFNTaHwAVh4r+r81GwoA Q314oCu8+SKctIKeCbOmQ+h90KkC5Tc27UGX9LWsPVlKy6kcTu/YTLZFoXJj2L94PV7d7iDUCKgs CrI1TN6eaOjYktaxd+3uc+2vnyBh0QccPZGDAjT/+oRFhWGw24tmXHy60LRbBrGffE1GbtFe+pkY UhLN55ehcBvTukRSp9eb7K1IYOuofMamNOrdkKQvXiX+RB6gsKduZf9Pv553q8kQGU3Aya2cLLq/ h56f69Qx1Gr2IbrZPvZ9vZk8O6icvez7dh1eN/cnrIKBdfaG1fzVsSc3eJXy5qW2jxCiWpEZH6do 1J7sR+cPCtg2tBCL0jDUMBD1mDcRLbS/Jxe0+p60v9/Gb0PM7PXVMEV40PlTbyK8jDR7xpNTk3P4 Zq5G0ABvbpxgYlPsZSq+ER55FTY+CpHToeXdMHcajNxdgTRM0DESnugCe09Dy3th8WTwdEX5TPDM Ijj9CLSuB7Xbwb/vgfXJFUvGGA2vPgFjusIMfwiIhHkrobs3PPQZFD4NvZtAgQd0vB+WPlvB8nt1 Y8yDBYyau4UHZnXH/7zM6xMavIPtz80i0+xBUPcp9BzaouiThbE1LUZ2Y/P8wSzxrolv3e4079Ub 3z+L99WCCKprZ9/Cx4jJKUC329GCbuCG0f3x0QD8qT3qQzr/MJttk7/Eojww+DUkavBEIhoEnn+n xwCZvy1l3cnxtG7g5OcaR+XDQGC/WfTU32TXrMHszNcwBTWn3qCnzrvtp9UaTPt+f/Db87ex1zsA U8jtdJ7yGBGOgkutNk2emov+6RusfvwV7MYQQm+ZQa/BLSr2yUxP5Iv5u+k74V3CypjwuaT2EUJU K5pS5T9rVdM0zGZzeZsQECBPchNuomAn0299lNMvreDtPqEX3tG88grX80TbeXTb/i0jqmZJzlUq j92z/sHouPGsfr8fIWUdGLdtHyHEWfKRR1z1rFuhTRgEB1/wVxsW513mwni3Z/I3UzG9/xrrsh1v fnnlETP/dX7tOoq+bvZZxBozj5kx9/HlnHKCHjduHyHEOTLjI0Q1kbf2GYZ+3piZ746hrb/j7d2N tI8QAiTwEUIIIYQbkVtdQgghhHAbEvgIIYQQwm1I4COEEEIItyGBjxBCCCHcRjUJfHL4dfa/ePCf g7mt31N8f8JVv9wphBBCiOqkmn2ry07MK90YH/Qtq56Iqi5RnRBCCCFcpNrFBp6enmjaVfc8XSGE EEJcBapd4FOQX4hfgH/1q5gQQgghKq2axQcaIbVCOb5tI0fMVi7j758LIYQQ4hpQzQIfA3X+8Rjd /pjAgP4PsWCf/UoXSAghhBBXEdOVLoBr2Tn06avEjFxHzFMNqltUJ4QQQohKqnaxgdViw79GILK8 WQghhBAXqnaBj5e3J3nZObK+RwghhBAXqXaBT0F+IZrReKWLIYQQQoirUDVZ45PDlrmT+GTnKY6e 6szYBbWrX0QnhBBCiEqrZk9uFkIIIYQom0yMCCGEEMJtSOAjhBBCCLchgY8QQggh3IYEPkIIIYRw GxL4CCGEEMJtSOAjhBBCCLchgY8QQggh3IYEPkIIIYRwGxL4CCGEEMJtSOAjhBBCCLchgY8QQggh 3IYEPkIIIYRwGxL4CCGEEMJtSOAjhBBCCLchgY8QQggh3IYEPkIIIYRwGxL4CCGEEMJtSOAjhBBC CLchgY8QQggh3IYEPkIIIYRwGxL4CCGEEMJtVLvAR6krXYIqYIc3usKjaxxvat0OnaLguc2Vy3L/ DGg0DqwV3E+/HO1feIgvpszm1+yzmR4j5vnb+G13RUtb/eiH32fZmGHsjLWcezF3DVvG9WXx2Fv5 ekTvUtvJGruQF+b+TlZ1PH+EEKKEahX4qH0FLH/IQr4bD97GOvCPIdAl6vLnbdsFne6EU1XZ/noS 34y+h89DetE+oArzudwsicQvfISl/7qZb54Yxa/LY7BcQjtqIa2o17kXNUNN5170u5Vu76xkyHsf 0aqhsdT9PJr0pvWfjzHs7RgspW4hhBDVQ/UKfM4oCt046AEw1IUX3oaBDSqXjqZVfB89AzKqtP11 khaNZ3r+eBY8dT2+VZnV5aQyOfr+I+xM68lNb61h0PP3Ylw7jvUrjlLR5tRCu9PmobFEhVfw1DbV 5+55c2n39ePMjpGZMyFE9XXVBD7qRCGrhhWSedTG7vG5LL3BzHf3F3LGXryBVefknDyW98lmSa8c Vj5rIb34Voc6ZWXLgGyWTrCSu72A5Tdns7h7Nt+PKt7fYmVjm1wOpp7LL+PNHL6fbkN3Jn+7Tszw XGL+tLF3XA5LOpr59q584hOdrFwhDA+C+cnnXto1BZqML76VZIc3boY3tsLMe6BpBNS9Eb44fH4y WTthdA+IqgXXD4INacVv2GF2X2jYsOivhg+8vLvEjk6kr6fDW/dC/drQ7Cb4KMbJugF6EjzUAVr/ E45thE6NisrRpC/sLz5+KhM+GAMt6kNUNNw9E05W9Ppqj2HBm0cY+tII6l7Ucw1Y479m65RBfDu6 Dz++9iEp5r+PLpaEZeyc8y+WPdmXb0b1Yfl7S8gsPLe3St/Ezv/cww9P/YMl44ay8q25HE0uMfdh S+bkNxNY/mR/lowbzMp535Ke55ooT6X9TOyfUbR6aDihAV54RN5OxxFdyVqxmNN2im7lvTCamINb 2fvWKJY81J1vn32J+OTixtWPsH96fxaP7cvisb358p6h/JVoLzfPUvl1YcKjgSyYvYbc0t43r2V8 q1DqDfmEo3ppGwghxNXvqgl8AFSqle3/V4h+qze3bgxk4BxPAo0AilOv57ItxkTXpQEMWutH2wAL G2fasAJahAfdfgpg4MsmPDp5c+emAIZsDmDwp14ElT6zX8H8AZudfVOteI/xY+A2fzo1tPHHfBuX cHkpnRVmPQnhT8PeEzC7KTz9GuT/XTjYvB5GfgnHjsIzPjDqOTADGGH8SkhIgIRDMCqygunr8Mko +MAT1sVDzGIIPoXTdTNEwsI/Yc87ENgddsQXleXwSrjOWJT+p6NgLrDyECRug+Y/w6DXKraGSE9c wzp7XwZcZ7r4TZXOqZhCGo7/mmHzP6GV5xJ+/XxLcfoKW3o6Xt2e5dbZKxn+wTwapL3D9jXHi2dU rKR8N50TUZPpP2cpg+Z+QpcezfHxOZtPPqc+f4xt8TfS9bWfGDT3I9r6fsfG/22t8Bqo0usVw5ma HQgPOXc6ejTvQEjmPtIziyMM+wH2fbQS73/MZuCCxXSqvZ0/lmwrOkaGxlw3ZRlD3l/JkHdfIzrk Uk9rjfA7BhC98Wd2lFIxlZ9E/IkznIo/xhkJfIQQ16irLPBRBE/wpV0/I74+4BmsFRUwz8ahJRrN nvck2A8waESM9sR/q5V022XIH0DTiJrgQ5PWGkaTgag7jOgJOvmuugBo0H86PNwBvDxgwBCwHIZU vcT7/we96oDmBcOfAt+VsN3ZBRnlpK8fh083FwVC0T7gEQGDekEFYsZy6cdg4SaYOAPqe4ExDJ59 EVL+R6kX2LLYEuI4Xrcx9UsrmBZM3YGjqB3iBR51adj/Nky71pNmAzDg23EULTs2xtOSQmZiGp7h NTgTd7h4xs+AV0goBfuWk7jvGIW6PzU63EZ4UPHRL9jKoU2+NLt/GME+GmjBRAwcjP+ejaRXOvJV 2POy0f2C8Cp5NvoE42XMwZJ3tn7eRN0zmSaNQzAaw4nq0hY9OdHl69m0kIbUtyZwpJRVzlrE/XwV e5C4jS9wfSmxpxBCXAuuquFLCzRRt9PFi0tUpk5ujk7Kw9nElXw72IMKL4K4hPz/fr9Ea2leGgab cum3mDxKpG/wBk8rZS5wNYRCcA6YKxB4lZW+PQmSQ6BJyKWV2xF7MpwKhkZB517zbAh1UiHZDng4 m5ANu8kDD2fWHwUE41mQhFWdLcMa/vrkM1L1KEKjm+CnTNgthcXdx0jI4HfoEfgxsV88yh8ndWq0 H0KbkQ9SJ8yEyk4hNy+BlP8MOr//BfZ0Qf/TMPr4YcjLwqLA72z6+WcotPvh8fdCJiOa8VxkpHl4 Y7Bbi/rfJazHKrs4JjxMduxlfKDwrR1dfdZWCSHc0lUV+JRFCzLg42sgaqE/LeuXs6GXhtFKqRcD gwnsJdZ06LbLuwraywMKCs7931rJeySF8XAiAiJdMC1jCIKgLEjOA2pUIiFv8LIUB2sl2t9YC8LP QKIZeoQWvWY9BslhUKsC5TdGRhFx6gRJds7dgiyDfuoYeUG18TUAeiKx78ylYNCn9O0UggZYNvzJ nt9LJl6TiNsnEXH7JFROHImfP82mD2sy6Lm78PYPx8cnmqjJn9CylusnSQ0NWlEj7TdOZymCg4sa znZkD2dCWtM22IX5aRqa5qDf5yWRZImkX5AroykhhLh6XFW3usrkZ6LpAEXsKxYyzEUv6aftpMSe P4gbGhkIOGLlZFLxNrmqaA2E0UBgHTsn1+nYdUXOugJ2Lr2MgY8JmtaDn3+CAh0SfoLnvoQK3SVT sH0pHMkH/QzMnglh90AHZ2dLymFsAv3qwZxZkKFD7iGYs8j5NT5nmZpC4wOw8ljR/63ZUAAY6sMD XeHNF4sWNOuZMGs6hN4HnSpQfmPTHnRJX8vak6W0nMrh9I7NZFsUKjeG/YvX49XtDkKNgMqiIFvD 5O2Jho4taR171+4+1/76CRIWfcDREzkoQPOvT1hUGAa7vWhCx6cLTbtlEPvJ12TkFu2ln4khJdF8 fhkKtzGtSyR1er3J3goEtlp4X5q3iWPfok3k2YG83ez7bjP+tw0qKr+raCH4hxaScTgRO3asObkX TVhlb1jNXx17coNXKftfYv2EEOJqck3M+IBG7cl+dP6ggG1DC7EoDUMNA1GPeRPRQvt7ckGr70n7 +238NsTMXl8NU4QHnT/1JsLLSLNnPDk1OYdv5moEDfDmxgkmNsVepuIb4ZFXYeOjEDkdWt4Nc6fB yN2Od/2bCTpGwhNdYO9paHkvLJ4Mnq4onwmeWQSnH4HW9aB2O/j3PbA+2fGuJRmj4dUnYExXmOEP AZEwbyV094aHPoPCp6F3EyjwgI73w9JnK1h+r26MebCAUXO38MCs7vifl3l9QoN3sP25WWSaPQjq PoWeQ1sURfbG1rQY2Y3N8wezxLsmvnW707xXb3z/LN5XCyKorp19Cx8jJqcA3W5HC7qBG0b3x0cD 8Kf2qA/p/MNstk3+EovywODXkKjBE4loEHje5KJmgMzflrLu5HhaN3Dyc4VWk4aPvUXB/GksHzMN hT+hfV6mx50NXHoXC/yoO/hxEuaM5ftVBkzRD9P76eEEni2mnsgX83fTd8K7hJWR8SXVTwghriKa UuU/61jTNMxmc3mbEBBQnZ4kJ65qBTuZfuujnH5pBW/3CXVxYOAChet5ou08um3/lhGBFd1ZJ++X p1i+Ioquz/2bOiEuCWudlMfuWf9gdNx4Vr/fj5CyGrZS9RNCiCtPPrIJh6xboU0YBAdf8FcbFuc5 3t+lvNsz+ZupmN5/jXXZjje/vPKImf86v3YdRd9L+ixgwLfndHrcnMFfk/vyzaMTOJx+eb43bo2Z x8yY+/hyTjlBT6XrJ4QQV57M+AjhInlrn2Ho542Z+e4Y2vo73v5aU93rJ4RwDxL4CCGEEMJtuGRx c8+j5a/S3dCgbbnvO4i9hBBCCCFc4rJ9q6us4Ea7lF/DFEIIIYS4BLK4WQghhBBuw0WBj4Wu429i XXRXltw6jpE7cq6+rxkLIYQQwu25KPDx5Lc3N3DnppfYkb2Ff36wAfnShxBCCCGuNi671aUMJgoi mpEYYcCYk4v35Xn8iBBCCCGE01y8xseO0Qa6ny/5snpICCGEEFcZ14Ynyo7RDsrHB4tLExZCCCGE qDzXBj7GUE5FeuKx4weGbjhEWK7c7xJCCCHE1cO1gY8Wwsaxo4ix/cbDD4zk+cVp8n15IYQQQlw1 XPsAQz2FvrM+4rrQIbz43RNsaxCIzPkIIYQQ4mrh2sBHZRNg1rE37sCOhoHYXJq4EEIIIUTluPhO lAc2DzDkZOMnP78lhBBCiKuMCwMfhSnrJLUydTAY5RaXEEIIIa46LrrVZaHr+F5M/8lGdtQNLHr4 FrLkNyuEEEIIcZXRVFk/m352A03DbDaXm8jAjPhy39/QoG25v87uoAhCCCGEEC7h2sXN5dA0mQIS QgghxJXlkhmfgIAAlxZKCCGEEKIqyPMFhRBCCOE2JPARQgghhNuQwEcIIYQQbkMCHyGEEEK4DQl8 hBBCCOE2JPARQgghhNuQwEcIIYQQbkMCHyGEEEK4DQl8hBBCCOE2JPARQgghhNuQwEcIIYQQbkMC HyGEEEK4DQl8hBBCCOE2JPARQgghhNuQwEcIIYQQbkMCHyGEEEK4DQl8hBBCCOE2JPARQgghhNuQ wEcIIYQQbsN0uTO07d/KhCmHaffSfTzYxnjR+/bkg3wwczNbkzRqhNeg44MDeOAGL7TztlIc+98X vJTRgwX/jqpQJZxLXwghhBDVkUsDH/uBLbzxezMm3efJsul/UP/5Xlzvcf42xpq16NIDGoaXMtmk CvltwXri2g9iwdwIfJSVfKuH64KSS03fuo5ND39G2BsLua643PZtk/jm57YMnHovfmcTsO/hz38/ yOFGrzF4fB88i1+27ZjM94vqcdvrjxB0ttq5K9nwxGJqz/qAZqGK058PZsXy03h4nwsGjS0m0P/p u/BxVEDrXv6cNIG8u7+le+cgwM6ZJaNYd+wB+j/ZBy9OcejVe9l5yIqeb8ZuDMDD04T/rXPod28b DLat/PbIU6Tf8RV3Do1GA+y/P8e3a25k0PN34aXlkfB6D7bEhuDjrYEOpojONB81kWaN/UttH33X yyxe0pR+U+9BX/EYK77djw4l8tdAC6fJ01/ToYURy+Gv+f3jz0lOs2Dwi6b+Pc/RrnM9Lg6NhRBC iEvn2sAn1Qzh/mj6aVL1QDqUctXSajZixJONSk9AN5Nw1JtWw2oWXew1D3y8St9Uu5RoqALpXwqV sIGUOgOoc3w9Kfl9qOdT9LqpZQ8iMr4gKe1fBEUUBQa2A1tJq9OdDiEGwA4Y8LvtXe56sF3F7z96 tKLV3R356fuvyej0KCH5G4lZ40GLF3rhpQFE0PS5dTTFwtHZPYltuojb74w8P+Az+ZG3+X+cuGMq UX6lNa4Hte5bRJ/eQaByObPyAzkoiwAAIABJREFUWVbP/YjQt54irNzCGQjoN5/h/YCy8rcd4ODS GGo++DldmwRhT/iYX155mUMN/0uLCLkbK4QQwnVcFPjoHPr6Rz5YlsQpk5lnf87n+FGdw/ODmTK2 Mf4qnSWTlrD0mAJsZGf4Mmj+P7kv+uxFzc7O97/iwy15pCfnoiZ/xCYTGOu156XXO1DPAMqcxJK3 f2Hpzhw86tSjc4QNAksUwWrmj8838Nm6VHKViZA27RjzxPVE+zmXfuXZydjxG94dXqfBoSc5ti+f eh2LIx+fG6jbdAYJezK47tYwwEr67p34thuFv0umszS8bhhLy5/HsGfrYNqmLSS941N0jqxAxbQ2 NGwdy75fjlN3QD0H2/pRo1NXany5HbMFwirbi0zNaT1xxt//NTQYQIN6/yPtuA0iPMvZUQghhKgY FwU+BpreM5AH05dzcGB/Buk7eHVFHSY9WqcoAy2UQbMeZhCA7Tjv37f+gv2NtB97H/PHpPDJQ6vQ Jv+TUU1LXLT1bNbM+IGfa/TiP4uaE557gu+m/Yj+d+BjJebDxbxzoh1TPxxIA+88dr+/mJnzAnnv 6Yb4OErfFexxHN/lR+TEOkT4RvPH739i63hTcf1rENmhBX/+9QeWPn3x1I+QvN+HyMcauO42nqEe TUb04dC8CWwxhNHqpQ4VO7jKTo2bB5Lx3mek3DaZ8PK21bNI37SOrMjOhHhRNGHlSrYTmE/XJiD8 si9BE0IIUc258MpiJzNTIzhEQz+UCyF+LlufoVIPs3ZPOEO/aE6kF+BVh67tA1mVUbxBfiI/r/ak /7vX08AXwJc2w1tTa1w8h2wNud4VtbTtZuf/dWf32UjFVoA9uu25Mp7cyElTF24KM+Dp3Z0aX/1C quUmIj0BNLzb9aDGt1tItfSlTuZ2kq2d6Vi/ZAvp5K56jEXriwMyUxvav/4ezcKcD9BM0b2ItH/B 4ahXqBtc0cCuED3kH7Rseh/7NqUQXoMLgjIrKZ/fzeLvNMCEV6Pb6Tz+/qI1Sy4NfOyY17zP8ah7 6Rslt7mEEEK4lmsCHz2dla+u5fsdmXi88C2rs9I5akvjvZC+PN4nsNKzGvZ0MxkBIdQJLP19lZVN Wm4Ge5/7mDUl36gRjaYqmflZputpf9Hi5rNv6pj/WE/msVTWjVsCWChMB9+DhUS2LlpEpIV0o07Y FyQdKST05HYKWj9AyHmRoQG/2+dd2hqf4jLkbf6EpIZDiEz4goPHbqdN/YoeXn/qDBzI7tlfcvpe b4znHbgSa3wuYkDTdJR+7hWl21EVXoilsOx/h80rgmj38p34ylfthBBCuJhrAh9DKH0n3cSJ6Un0 fakj6qtlrGlzJw+1ds0ndoO/D365KWQUUmqJtUB/QnxC6fzaCIbUuQJXS/0Ex/+0ct3U1bRvbAR0 cn4azerf92Jv3bFo5stQl7rtA9m8Zw9hJ48R0fN6135jKX87e5Zk0GjSLBrsGcuqr5YT/cw/Khw8 aHWH0jLqAQ7EtMbk7L6GGnj5ppObqUMtA6CwpJ9C9++Gp9P5K6yHP2LDvBjqj3+HhqEy2yOEEML1 XHd1seWQqfkRbNDJSIeQUNcFIIa6DekUcZwfvkoiW1cUHD/ID79k8PcEg28D+vbK58d3d3Ekp2iK x5aRwp64Alw14VMelbaBExntqF3vbChjwK91Jzx2/UK67e9aUKNdZ9j5IYcT21C3hQu/ToaNzJ/f Jan5v2hW15OAPmOpd3IBe/bkVDwpLYh6A3uTveVXLM42nrE5ddvYOPrjD2QV6uiZ24hZfYCwdu2d jKwVlkMf8cucrdR68m1aNfapeLmFEEIIJ7hsjY86k4s1KBQvbGRkGggJceHMizGc4S/3xjzrZ8YO g5AmTbmrdxR70s9u4Em7J4byxJebePexXeQoIx4BIXS+7xZaRXtX8cMJdXL/2IC52UhqlnhmkRbV mQj1MseOTCC8WVEzaw1upnbuxxxqMJNa3qWks/oJvtl0bh7IEDGC3jPGEupgakhl/MyuVV40n9a9 aIbFqz2tBjdk2Vdf0azVvwg2lHyOTy72P+5m0XclnuNzQXqGRvfQvNHXbNNLy600vkTeN4tWC19l 7aOzsZoiCO81ky49w51r+9x1bPvPu6TaQ8mZNZBYqw0FGKKfoN/zw130zTchhBACNKVUuZ/rNU3D bDaXm0hAQIBLCyWEEEIIURXk+8LXAP3gHJb95xtyL5yB8biFrvNmUN+Vd82EEEKIakxmfIQQQgjh NuSrM0IIIYRwGxL4CCGEEMJtSOAjhBBCCLchgY8QQggh3IYEPkIIIYRwGxL4CCGEEMJtSOAjhBBC CLchgY8QQggh3IYEPkIIIYRwGxL4CCGEEMJtSOAjhBBCCLchgY8QQggh3IYEPkIIIYRwGxL4CCGE EMJtSOAjhBBCCLchgY8QQggh3IYEPkIIIYRwGxL4CCGEEMJtSOAjhBBCCLchgY8QQggh3IYEPkII IYRwG1UU+ChsCX+QebygapIvh/7XXDZ360/sDstlz9sxhVKlvGxP5MjQm9jzq7XKS3Bl26eM+rtN /le6/ate9ayflVOTOrP1k5NUSfe5jOe/c+xkvzeIdVO3o1dwT3X8Z/aO6MWabn3YOPRBYjeZq6SE VePKjw+X5KrrP2W5etq3agIfPZkTL08lJdPkujTzDnB86ijWd2nPyi63s2XcLJLj8y/aTKvVhlp9 byW4tgvzdhG1fzabR39N4RU8+Feyfa50/a90/nB1909XqO71E+VQZlLefIWsLnPp+etaeix6jyY3 BF7pUjntahgfqrOrqX2rZHRSics4mdOXNi1dlbyNzLnjOJD0IJ3XLMRfSyXz589IizNTq5EPWokt tVq30GTKLS7K17XUmUysKrLsDbSy33KVK9k+DutfzfOHq7t/ukJ1r5+70C5lLNJPYj4SSOiDLTBp gNEXk9HVJas6V8P4UCmX4fpRGVdT+1ZB4GMn+8ef0e58B/+LOr1O3qdPc7Tla7ToWJGsC8k7loZ3 u874+xvRqE3IsEmE/J1lHPEPjyEh3g5YsKSF0GjxjzRrUVwAeyJHRj4Pk8aif/IOx7cdwV73Vq57 awZ1GhRvo3LJXvYOBxas4kxqLtRoRZ0np9D8zoZF02LWJFLfn8HBZbFYdS+8O91Py+fvoUaA496m Ti1l97/mkZGWRL55BZtveR8N0BqNotN/HyIAQPPEkLWVw0++V3r5KpF/pdvHnsiReydSOOx2LN8t 5nSiGY/r76XlzMcICzWAZQV/3vAlYav/R/1wDbCT9dZA/sybyi0vdERzVH9nBsfy6q+nkvTv4cQ1 eoeb/t0agzpN0r+HkdBqAV3+Fe1c/uWl70T/USnrOTjlbZKP5aN0D7xa9KLRhHHUbuDpuP0BsmI4 +vpM4jclYjNFEDJsIi3HdMPb5MTxcdwDse5fypH/LiY15igF6TZ8bh3P9S8OI9AXx+V3Rf3yYjk2 bTqJ+85gORZHvi0Qn7AQak1bTqubTlaufV1Q/wpRmaTNeIB9Z8Zw42t34uOg/6gDc9n8RBatfp5C yNniZixhx+AtRC2bRS0fAAO2fZ+x+71vSI0349luJK1mjiU0pHhSvrz+4czxPfEx2yYU0nJWU1Lm LCRpSyy25k9w40cPEmAEdWYnCS9PI35bKoZ6XakVWQjBzjaIhbRX72bfutMUHE+Dsb1I8rjg/Cq3 /JQ//joYXwxUrn84HJ+dKb8j5Y7fTvRPR9cnR9ePcujbXmbjRx5E5CznRHp3WkyM4sTUj8ltOo4b FjxAoKly44dT7evg+uao/1aYcgBQZrO53L/zWP5U+/o9pBJT7CVetKrC1ExlVzZlfneU2r3RopQt WxWcznWUfTFdFayaqNa27a1+f+sndSbDVvam1m1qb4/+6sD+EtvYElTckLZq1cBJ6uje08puTVEn J9ysVj+7URVtZVe5i0arVbeMU4kxZ5Su7Mp6eIVKWHZYFdUiV52ecZtaM+YzlZWjK2VPV2kzBqh1 z29UVidroJRS9hXj1IpRX6kC/YI3bAkqbkhrtbL/02WUzzX5X3L72BJU3JDr1OoH5qm0lAKlCo+p E0/1UGueWV+Uf+HP6o/r71OJp85WzKbOvNlPrZu+Q5XsBWXW3yHH9ddP/aT+6DFYHdpXoCzrn1O/ DH1PZVnOT6Xs/B2k77D/WFTq5K5qw+u7iv5vz1bZvyxX6Wn2CzMqvf3tSerYv25U659frfIKldIz dqgDw25Qm97dV9R+DvN3xK7y1y5QcWsPK4tVKZUbq+JG3qi2LDyqdKfKX8n6KZvKeru/WvfcelWo K2U//pXa3nOcOplZfCBc2b6XVH9HLCrl6RvVlo9PKF3PVhnv3K3WPfSZMhecfd9B/7GfUAn/7KF2 rcsp3l5XBd88rNY95+D8erb4/HLUP5yon358odrSY6jaMvQhFbt8t8rPsypLprlof3uSOjq6o1o3 8SeVk68re9p2dWhkJ7Xm5W3K2RZWSill26Ni+/ZTsTEX9Eonyl/u+OtwfKls/yguZlnjg8PyO+Jo /HJ0/By0j8Prh4N6//aSWt3mbnV4/2mV8vQNasU981VW+ia1u8cdxceysuOHg/Z1Znwvr/9eApev 8bFvX0Jqg4HUDi+RtMrC/N3LbBv+EPtWHuD0/MfYOvL/iNt+2snFghpet73KTf8djc+et9h6c2+2 TVuCObciNwt9iJgwjXqtQjGYIqjVtz16YgIWHbDHceLzPYROnEb9ljXQMGCK7kuDO6OLoum8Xzn6 gz8Nnh1BoJ8GhhBCRw/Hd8svnLFVoAjl8qfWxOmll++y5F9O+wAQTMTohwmL8ALPKCIfuAPjpjVk Xo71dE7UXwvvR8sJkRx/cRK7Zx2izsujCfRwXfrlt48Br1phFG5fStL2RKy6P/49+xES5tzppZJW cez3ljT+vz74eIIW3JHocX0o/P4HJ/N3xIB374dp3DsaU0Ey5thUPKKCMO85WHz+OSp/5eoHFnIO nSDgxo54amCo3ZHg4HjMJ0sWvura13H9nVVA9udP8seqtrSdM5IAr+KXHfUfQyR17m5DxuK1WBSg p5Ly81HCB97IuQ+rpZxfG4vOL8f9w7n6qbQMAifMoXm/Nnj7mPAICiiaLUlezYkdrYh+5k78vDUM YR2o1aWOy+6cOCy/o/HXocr2j0qW3xGH44uD4+dU+5Rz/XCCoXEPajUNwqdOLfxv6k1Ajdr4BOdi zVaOy1fZ9nfy+lZW/70ULr7VlUPaD79T465n8Dxv4U0oYWPfJnTgV2wftgcrLeiweAI1nJml/psR rw4jaPXxcJodWMnhl6ey7VkPesztj5dTZ6gBzViimby8MVgt6ArQU8hPiyCgSUCpe6rMJPJzjpA+ 5g6Ol8wrpA+ayxZqlV2+K51/qYJD8Mg7iU2nyu8tO1d/A959hhH66sMktX6NNtd5lZLSJaavFaVf dvsYCXx0AR2DPyT+jQfYn6Dw7zGcJhMfITzS8Smm0lIorFEP38BzmRuiGuCdvpdCO8VnaQWPzwX0 xBUcnLmQDFt9gq5vhrduQhUUoAMGh+WvXP3Ai6Du7Tnww9ecuXkE3jHfkpLXiRYNS85RV137Oq6/ M+wUrHyBPzLz8SyIxXxaJ6T4Xr7j/qnh0XsENefMJyl5APW11SSn9KRph3L6aInzy5n+4VT9AjsS 3tH/oqxUahIFQQ3wC6qaE9lh+Q3lj7+OVb5/VKr8DrJwZvwq9/g5uD4Vl6hS48PftNL/Xbnxo3xO X9/K6L+XwrWBT+Y6TsTcQP3ppRROnSF13o94v/wDTWMmc+j743S8J+oSrplGPJrfSYspB0kdsw2z rT81nf1kXxZDGN4haeTE50LTi7+FoAVF4O3bhFofLaJxvUp8ivDywmAp7owVqLjL8nch/WgiBaG1 8TYCugcGkwV74bmKKVspH4WqtP4FnPngbc70HEfkHws4/PuttLzxgn5YRv4O07c7UUhTOCEjXyBk 5AuoM4dIeuNJdr4YQc8FQx0G5lpYOF7m38jLUYQWX3xU0nEKgiPwcsXiUHs88U+/SeEji+jaJxQN sH7/O4fXVKD8lagfaHjUa4SvIZ5j057BFtiaJvPvJ6wi62sqk78z9XdIJz85grZfvE7wlsf4bcrn hH0yCn+jk/3T+wbq93+NvT/GE+67BsutkwguZ9zSjyVSEBaJt9GJ/lHJ+mkBQXhk76UgH7jU2KO8 9B2VXyt//AUnxpdK9c9iZY0PlTw/HY8vDo6fg+tTlXPF+AGXPv5WARfmolOwaim5N99FqE8pb5v3 khP9f7S6tT4h416mVuZf5Dv7kIiCXRy4915ilvxFfo4dLKdIX74Fa9NWpSygvgTGZtQd1oi0N6dx Ii4PUNhPbCJ+4cair975dade/wwSZnxOlrmo0PrpPaTHZlUoG61hU/ziN5GaVHTS6rm5zj0nw0X5 V042mat/ITdfobJ2Ef/+GjwGDKSGCTDWwy8yjtRfEtH1PPLWvUHsj2kX3Uaoyvrb985n78oWtJj0 ONe9eCOpL84izXx+CcrMv7Ltaz/OyTnvkhyXjQK0oIYENa2JZrc5dStFq9OXqPZ7iZ+9gQIbqKy/ OPLuKjzvuosgV3w0UVlYzmgYfb3Q0LEnrObwol3n2t5R+StZP7CQ/t0qPAZPos3sd2k/9RFq1S9t kChDZfN3VH+nmAh64P+IrOuJ79CXiPZcyN7/HalA/zESMGQIxp/nc3hVHrX6t7gg9s8mc+0GcgsU yryb+PfX4tl/ADVMTvSPStZPa9iD8MhtJCzYiVXXsSesJGH5EZc9s8hh+R2Nv47Gl0r3z7PtUPr4 UOnz01H/cHT8HLVPVavs+FGsysbfS+C6GR/9JEk/ZlDrhbalR1M1utP4weJ/e0QTNTba+bS929Dg qds49N9X2PZGAoUqEL+OQ2n76jB8XBK6GfG7/1066f/hwON3cCBPwxjWgtqPPF30tUz8qfn8p7T5 8HX2DvsUKx4YAhsTMfZ5QlrUcHryQqs/nBb/3M7uYTdx2DcQU0Q/2nz8b0IcHgXX5F85AXibthEz 7D+YMzwJGDiDTo+3LDrWxibUnzSC9BeGsfqdGgT0H0+r8V3ZGXt+CmXW3+FdKQf1L9hL3IvLCJj0 LeE1DND1/2hz8zD2vLaJm17pgYfmKP9Ktq8hiIBoG0deeYi4zAJ0ux2tZhdaTRmEtzMHxxBJvTc/ QH91Jr/1moLdFErQ4Fnc8GhL13wyMbWh4cTu7HyhL7/4RuATfQsNht1Oynony1/Z+uFJSL8b2ftE d1b9JwSTSUPzCcWv0920eHY4gY6Of2Xzd1R/p2hoWvHRMEZR7+VHSRk5hcTu/6NRtHP9R4scQL0G b7Pr5KPc0viCT2zGhgSFbyNm6Izi8+sVOp49vxz1j8rWz3gd0XNfxvLCRDbcBF4t+9Kof2dOp1Wk fcrhsH87GH8djS+V7p9Fyh4fKnt+OugfDo+fo+tTFavs+FGsysbfS6ApVf6zFDVNw2wu/+mbAQEB qMPvsWWyibZfPeKaWRhx9bAncuTuf5I7/hfadKvsfUXhdqz7OPTQXEwvvU2jaB9AoWf+wcH7H6dw wq+07VmhxX7XsAJOTx3I4YYL6Xx/3av9sStCVFsuutVlI2vpSkz9++MnQU81paia5/WLas+STO5x M9ZTaVgtdvScU2RvXUOGpQs1r3OXJzwrbDELOfRraxoMdN03poQQFeeiUcdE0MSf6OyaxIQQ1Ylf b1q9k8WRz19l57wz6L5h+DbvSvP/PU1oxNWxWL9KmVfw110zSPdrQ/2ZM6ldRd+eEkI4x2W3uoQQ QgghrnZu8HFLCCGEEKKIBD5CCCGEcBsS+AghhBDCbVyjgY+d7PcGsW7q9go+hMwx/a+5bO7Wn9gd Fhen7AqKUldk2RM5MvQm9vx6OX44q3Ku7vYtg3kFf/Xpwboe3VjZsss10c5ClK3qxs8q4bLxrYzx 85px7Y//V4trNPCpOlqtNtTqeyvBta++r9mq/bPZPPrry/O0zipyNbdvmQLvoO3ajfT+5QuatJDn NZRGnf6TY3Ne5Pc7O7Ji9HdFP8Z5GfcXwpFrffy81st/NbmGrj7n06roG6FarVtoMuWWqkm8ktSZ TKwqsuwNroFvyV7N7SsunWYKxKflzdTJ2Uf6kcu/v6iYqho/r2YOx8+rXHUY/68W10zgo87sJOHl acRvS8VQryu1IgshuMQG1iRS35/BwWWxWHUvvDvdT8vn76FGgIY6/B6/PnKa61a8RGjx4/HVqa/Y PiKGxstnUNMzjviHx5AQbwcsWNJCaLT4R5qV/HSvcsle9g4HFqziTGou1GhFnSen0PzOhkXTZuXk X+m6n1rK7n/NIyMtiXzzCjbf8j4aoDUaRaf/PlT0u4KaJ4asrRx+8j2ObzuCve6tXPfWDOo0MDps HwB14mO2TSik5aympMxZSNKWWGzNn+DGjx4kwFjJ+tkdt69KWc/BKW+TfCwfpXvg1aIXjSaMo3YD J57qa0/kyMjnYdJY9E/eKb3+WTEcfX0m8ZsSsZkiCBk2kZZjuuHtqjOgvPSdKV9eLMemTSdx3xks x+LItwXiExZCrWnLadXDo/LHr1wK6/6lHPnvYlJjjlKQbsPn1vFc/+IwAp39IdGgJtTs0wRb7rdo ZQUuOVvYN/RJkhs9T7d3h5z/czPO7F9uFRycnw6Ov6P2q+z5UW7/tidy5N6JFA67Hct3izmdaMbj +ntpOfMxwkKLG6mS/asy46dT/bfKx0cDtn2fsfu9b0iNN+PZbiStZo4lNMTgsPzljp8f9CBlxGgK J62l1Y0mlN2KwoTBCJZvH2bz3tH0nNYVg6PyV7b9yuval2H8dzvKAUCZzeZy/6qcPUkdHd1RrZv4 k8rJ15U9bbs6NLKTWvPyNmVXSimVq07PuE2tGfOZysrRlbKnq7QZA9S65zcqq1JK2Y+pIyN6qN2b 8s4mqHI/vlf9Mv334v1LsG5Te3v0Vwf220oWQOUuGq1W3TJOJcacUbqyK+vhFSph2WHn8ndVM6wY p1aM+koV6Be8YUtQcUNaq5X9n1ZH955WdmuKOjnhZrX62Y3K5mT59OML1ZYeQ9WWoQ+p2OW7VX6e VVkyza6vX6nta1Gpk7uqDa/vKiqvPVtl/7JcpadddHRKZ0tQcUPaqlUDJ5Vef3uSOvavG9X651er vEKl9Iwd6sCwG9Smd/ddfPwd5tNN7d5sOf91R+k7Kp+yqay3+6t1z61XhbpS9uNfqe09x6mTmWcP dGWPnyN2lb92gYpbe1hZrEqp3FgVN/JGtWXhUXVhV3PE+sMYteLBb1VhaTumfa9+vz5aLes/V2XZ Snnf0f7llL/c89OJ4++o/Sp3fjjo37YEFTfkOrX6gXkqLaVAqcJj6sRTPdSaZ9YXj1+V7F+VHT8d 9t8qHh/Lap9ni9vHyfRLHz8L1alnu6qt/0tWup6mEh9oqVa/sEXZlVWdntpLbfsqzYn0K9t+zqnK 8d/dXBNrfFTyak7saEX0M3fi561hCOtArS4lHvue9ytHf/CnwbMjCPTTwBBC6Ojh+G75hTM2wFCX yLsak/bTVmwA9qMkLc+i9j/aObfIyR7Hic/3EDpxGvVb1kDDgCm6Lw3ujC7a31H+l4U/tSZOp16r UAymCGr1bY+emIBFd758Ki2DwAlzaN6vDd4+JjyCAi5T/Qx41QqjcPtSkrYnYtX98e/Zj5CwinRP HyImTCu1/ippFcd+b0nj/+uDjydowR2JHteHwu9/cEn5nUu/7PKBhZxDJwi4sSOeGhhqdyQ4OB7z yeKlp5U9fg4Z8O79MI17R2MqSMYcm4pHVBDmPQdd+yslYYNov3otvb56nEBXLpVycH46e/wdtd+l nx/O9O9gIkY/TFiEF3hGEfnAHRg3rSHTWvn+Venx00H6l2d8LKV9Nha1T+XS9yCwVWNyD8ShCvdy pjAar31/kmNLJ/uIJ4HNgx2nX9n2c4nKj//u5Jq41aVSkygIaoBfGY96V5lJ5OccIX3MHRwvuUlI HzQFoOF92yCC5i8jLbs3tZKXk2y/g7bO/k6QnkJ+WgQBTUp/QrXj/C8HA5qxxEDq5Y3BakFXFShf YEfCO/pflHLV189I4KML6Bj8IfFvPMD+BIV/j+E0mfgI4ZHOdtFy6p+WQmGNevgGniu8IaoB3ul7 KbRT6bPAufTLLh94EdS9PQd++JozN4/AO+ZbUvI60aJh8W2KSh4/Z+iJKzg4cyEZtvoEXd8Mb92E KihAx7XfgDCG18fHhekBjs9PZ4+/o/a75PPjEvp3cAgeeSex6ZXvX5UeP7Xy078i42PJ9qlU+hqe LZpjXH6Y/IOZ5DW4nbCYHWSmtsV8rDGh0UaH6Ve6/VzCBeO/G7kmAh8tIAiP7L0U5AOlnFtaUATe vk2o9dEiGtcrY5gO6kXdTnM4sTEd37g1GO98x/lfkTeE4R2SRk58LjQNvLT8XcHLC4Ol+GSpwK3Z ypbvstTPFE7IyBcIGfkC6swhkt54kp0vRtBzwVC8KnkbWgsLx8v8G3k5itDiwV8lHacgOAKvisw8 aAYwXPyV0sqnr+FRrxG+hniOTXsGW2Brmsy/n7Di9TVV3v72eOKffpPCRxbRtU8oGmD9/ncOr3F9 VnrGSSzetfH2dWE9HJ2frjr+ZXDq+JTXv0vZXD+aSEFobbyNlS9/pcdPu4MMrsD4qB9LpCAssqh9 nE2/jPHTEN2KgBO/kr4zA1O7qYRYF5Pyy37yQ1rQ0Ac0zUH6lW0/Z12h8b86uiZaQWvYg/DIbSQs 2IlV17EnrCRh+ZFz0/B+3anXP4OEGZ+TZS6aO9RP7yE9NqtEKr7UHHwTOcv+y/FNIdS5s67zfcfY jLrDGpH25jROxOUBCvuJTcQv3Fj01UKn8gcsuzg0tAtrRv4X8yVMMWoNm+IXv4nUpKKd9dxc557D 4Wz5qmp/R+zHOTnnXZLnMMDbAAAPaklEQVTjslGAFtSQoKY10ew2l9xq0er0Jar9XuJnb6DABirr L468uwrPu+4iqCKhvyEU31qFmPfEo2Pn/9s78+goynQPP9Xd2feFJIQlBCISiZFRFhG4AcQRMHAU icgwKqKj4DbKANfLhREcg47KqICgMuKGznHO1Tt6FSQQNkXDqCAECJgVCSFmT4ckne6u+u4fJBA1 3VVJd2cx9ZzDOZx0f+/3fu/yq+pa7bX1F/x12b6Vyv/ZgdesZSS/sIGrV99PTFyr4yKejr+oxVoj YfT3QUJBLswg9/3D7n/GS+VHfDtlIplzN2F218YAVPvTbfl3hFp+NNV3HdUZu6lvFIjawxRs2onX jJmEmFz33z366QR36aNT6qjetZd6i0CYj1CwaRfeqTMIMWm371A/A4YRHFlAye56gpOiCbsmDvO2 fViGJOJv1GDf0/2p5r8aneRfT6JHHPHBeAUJ61ZhXbGEvePBZ/hUBqdeS0V5yxcC6bP8LZJfe5bs tLew4YUheAjRi5YTnhhycQfHcM0solfNoWhgOpPa9VZoIwF3bmCU8jQnH5zGyQYJY2Qife9fiknS Pj8AEtgO76KidAHB/du33ynF3UbiHQc5kjaeXP9gTNHTSX7jUcJVs9gO/zwyXgVDKEEJdvKfWkBe tQVFlpH6jCVp5S34uuOmA0MsA9e+ivLMGr6avBLZFEHorOcZvXB4O/f8A4he9ChnF99N5rsGjFc+ wJiNvyPA6Kp9b8KnjyH7oQnseDock0lC8osgYNQcEh+/jWB/D8fflEz8kgkcWjGV3f7R+CVMZFDa jZTu0TheVFC8+HZOHbIhGiqxN37L/onrMfSfy8i3F166nsc7DL/IQLxj+jT3TTvHO0SlPyV35d8R KvnRVN9B+JqyOJb2NOYqb4JmpjPqwWb/XK1fN+mnkwncp48Op4gnNCqLY7PTm+PzFCNb4qPRvkP9 9IkjZEgR3++ZRHy8CW/DCMSqjXj/dqhG+x7uTzX/Pa7/vz70t7N3NtYsslO3Ev7hBvp17HIMnV8b tuN8v2AdpideZHCCHyBQqr/h1J0P0rT4C0ZM0nBLv07PRS4if84d1D+2m+RxXl3tjY7Or54ecarr 10Mjde+9StXVs4gK6GpfdLoN1nPUnzFj+7Ecm1VGOf8jdV/upMo6lj5aL8DX6eEI3HsLnY6OjiN0 Ve1E5APrOHH8Rn6zejJevfH4ok7bBFxP0vpa8rc+w6GNNSj+kfgPu45hby8lol2nZHV0dHR01NBP deno6Ojo6Oj0GvSfkzo6Ojo6Ojq9Bn3HR0dHR0dHR6fXoO/46Ojo6Ojo6PQaeseOj3k7301JITNl HJ8NH8vRL2wemuiXT/XtGDJ1L99C5uqD7X6InDizjey5k9k5bgr7Zt9Nzn7n12f9Oulo/BzkTy4i f/Z4D9ZNKw96eP56uv/Kd+v4fFwqOV9bu9ALx/Xrmn8d1KdO0091nNeXu/S3o3SVftj4cdm1fPnm Wc/cGNiJ+qeNjm8fW+gdd3UFT2PErmnNz8v4PfUemkaceIHPn49lzOu3u/yahY45YKZ07VPUjn2N Se8lYVIasNv8u8CRnomePxfp6f4DUkwyMVMFQX27pzS64l+H67uT9FMVlfrq6v7t6vl1tNM7jvh0 EqKmGpubdrmljjSOchZzfjARKYkXnphq9Mfk6x5/ehodiZ9q/jwtZj09fz3df0CKmchlK/9ITDuf qu52PxzUmiv+uVOfugSV+urq9XW5fvQiOrR9bEX3/FnTBqJ0D6dWvsi5HxoRihc+iZMZvPhh+g5q fqqtrYSyTemc+iQHm+KD76g7Gb78dkKCNEZIbbyop+6T9ZzcvIOasnoISaLfIysZdlM80o8fceQP G6kqL6HRvJ3PJ25CAqTBdzHq7wsIMqrbFzWHKFz1JAVZZRgGXkdMbBOEaY2OlfJn5nA8swLLmXJY NJkSr5/OL4rfIGtxE8OfH0rpS1soOZCDfdhDjHn9boKMAtuJj8j/+weUHTuNpdKO3w2PcdWf0wj2 ByVrFfte9yL6/KcUV04gcckAile/Qf3Qhxm9eT7BJlfj73x+5CLy5y2HZYtQ3lzPmax85P43cMXf 0uk3yOhy/IRa/gAkbwy1X5L7yMttzu/a+tXzR+0xTj+7hoL9RdhN0YSnLWH4fePwbelgJ/VpsG7n 29HvEZnxNnFREiBT+7eZfNuwmokrRmJAQ3+56H+3rj85j4J776OwQAasWMvDGfzBx1yeeCG3avMH fuO6f07rV8U/tf5RrW8N+uQMcXIdnz9US9K2lYS3lEvV//L1rAMM+OR5YlSfUK/S/yr1FVjhBv11 Wp8q3ne5fvzcoWrK0+dzvOY+xvz1JvxU1q+aPz8AA/bj73Dk5X9SVmDG+zfzSFqziIjw5h1wp/qk ll/1+Lu2fWwrRioAwmw2O/3neayi7L+vE3ufPSzsQggh14m63Z+KynK5+fN6UZH+W7HzvndE7XlF CLlSlKfPEJnL9wlbazP2QpF36zhx5HPrz+yrjZdF/fv3iB0THxZFx2qEImRhy90uCj/JFXIrK/L2 h8X2u/4hLMrP/VexL5eI0/eMFJlL/k+cb1SEXH5QfD9vlNi5Kusn9lWxHxU5U6eLnGP2X3yknNki DqTMFgdmLxA5nx4RjQ02Ya02N9uXReOuzSJvV66w2oQQ9Tkib94YcWDLaaEIIeSvnhAZyXNE7okK Ubp0tNh++yuitnK/OJIyrXkujfF3iPP5L+RthNgxc5k4nV0hZFupOLv4P0TG4/ua68E98XOYP3uh yLv1SvFZ6tK253d5/S3zOMifXCJ++MMYsWd5hmhoEkKp+lqcTBst9m84fjF/TuuzaZv45qrfi6If WxZmFzVrp4vMv3zdPF6tv1z0X3T3+muFLUtkp6SKkycurUFtfpf9a0/9tuGfav+0fKuj+tSCI/2U i0XhHSnicOb55j8owvLPe0Xmf7X0hxra/HdWX66uz3l9aqPr9MMqSpeOEQfeKBaKUieq1s8RmQve EWaLxvWr5c9eKPJuvUJkzN8oykstQjT9IIr/mCJ2Pr7nYv2q6ZNafp3G313bx1b0kFNdBnxiImk6 +BElB4uwKYEETppOeGSz+w1fcPpfgQx6fC7BARIYwom45zb8D+ymRstb0NXGy3kUbz1KxJIniRse goQBU8JUBt2UoO1coYp9cS6D4q+TSPjPmwjwlTBEXkPM2H5uPzIqyqsIXvwSw6Yn4+tnwis0qNl/ A77X38uQ6xMwWc5hzinDa0Ao5qOnLl4sZxiSQszQUPz6xRA4/nqCQvriF1aPrU64Hn8N84Mf0Yuf ZGBSBAZTNDFTr0YpKsSqdFb8AolZ8pc253d9/c4RJTv44d/DGfKnKfh5gxQ2koSHp9D04b/cU59q /eUmum/9qeN0fhf9c71+tfSPE1yNnyGWfnOSqfpgF1YBKGWUbjtN1MwxqL5f1h3+q6FxfY7r0x10 hn5YqNv6CN/sGMGIl+YR5KNx/ZryF0b0PfcSGe0D3gOInT8N476dVNs06JPG/DqKvyf0vYec6jIS vHAzI8Neo+C5+ZwoFASm3MZlS+4nKtaEqC6h8Xw+lfdN40zraIRPQdLQOarjRSmN5dEEXdaxJ1Sr 2RdlJVhCBxEQ6uGTwMEjiRrZ9nFnpWg7p9ZsocoeR+hVl+OrmBAWCwo/uxBM+uX/XY2/tvkNSMZW nvj4YrBZUTotfk7md8P6nSHKS2kKGYh/8CXjhgGD8K3MpkkGDK7Vp1p/uY1uXH+aaWN+tc87o/81 x68NXI+fhNf1c+nz0iuUnJtBnJTBudJJDL3GR32oG/xXQ/P6nNSn63haP2Qsn63gm+pGvC05mCsU wgObLwNQtd+B/IWF49VwFruiQZ9MGvPrIP6e0PcesuMDmKIIn7eC8HkrEDXfU/LcIxz6czSTNs/G JzQaX//LiHn9fYYMdNImkgEMv7zlUFIbL0fiG17O+YJ6GBrs2L6PDwbrhWJuLYBq9kVQKF512Vga ga54+4dcQMHStTTd/z7XTYlAAmwf/pvcndqGq8bP0/O7K34O8qc6v6vrV7MfGYWP+Ssazgsimptf lJzBEhaNjxGQ1OrTC4PJitx0aWHC/rOfks76y9MXZXZ1/XkYj/e/1vh1UJ8ufbFt/QTAdzRxqX8l ++MCovx3Yr1hGWFaXzTvYv4v4ur6XKVL9UOh8Vw0I959lrADD/DVyq1EvnkXgUaN9tuZP+WHIiyR sfgaNehTd9H3VnQ/lWgL+QxnX9rAubw6BCCFxhM6tA+SbL9wqCxgAgNTqyhM30qt+cKd/UrFUSpz an9qxxCBf0wT5qMFKMjYa+u1jTdeTv+0wZSvfZLivAZAIBfvp2DLPppaiYAUP5SAgv2UlVzYqCj1 9ReeM6BiX4pPISo2i8LNh7ApCnLhZxR+mt95L2sWtVhrJIz+PkgoyIUZ5L5/WPszErTG30Pzuyt+ DvOnhqvrV/Or31QGXJ1NwQt7sdhB1H5H/oYdeN98M6Em1OvTOJCA2DzKdhehKA00ZD5Hzsfll+Kj 1l+epqvrz9N4uv81xq+j+nQRR/oJgJGgW2/FuO0Vcnc0EJOaqH3b72r+3bU+F+la/TAROv9PxPb3 xn/2EyR4byH77fx2rF8tf3VU79pLvUUgzEco2LQL79QZhJg06FM30fefRqsnYAglKMFO/lMLyKu2 oMgyUp+xJK28BV8JIJA+y98i+bVnyU57CxteGIKHEL1oOeGJIa0SGED0okc5u/huMt81YLzyAcZs /B0BRrXxRgLu3MAo5WlOPjiNkw0SxshE+t6/9MJtlc1IcbeReMdBjqSNJ9c/GFP0dJLfeJRwHxX7 xitIWLcK64ol7B0PPsOnMjj1WirKOym+pmTil0zg0Iqp7PaPxi9hIoPSbqR0j1YDWuPvofndFD+H +VPtEhfXr4YhloFrX0V5Zg1fTV6JbIogdNbzjF44vPmXi0p9Gi8jbtlcKlekkbE+hKDUx0h67DoO 5bTYV+svD9PV9edxPNz/GuPXYX26aMGRfjbbj53BwEEvcvjsQiYO0XZ1T3v8V8P19blG1+qHhCQ1 H8cwDmDgqoWUzltJ0YS3GZygzb7T/BnjCY3K4tjsdMxV3gTNfIqRDzbrj5o+dRN9/0m0hNDfzq6j o6Oj4yoWKlbPJDd+C9fe2b8b7HDqtI/ek7+ecapLR0dHR6cbI7Af28L3X1zJoJnuvyNVx9P0rvz1 jFNdOjo6OjrdE/N2vrs5ncqAZOLWrKGvp+9O1XEvvTB//w9zG/4zg2rNfgAAAABJRU5ErkJggg== --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable >> Here: >> >> /* Select for input extension events used by scroll bars. This will >> result in the corresponding core events not being generated for >> SCROLL_BAR. */ >> >> MAYBE_UNUSED static void >> xi_select_scroll_bar_events (struct x_display_info *dpyinfo, >> Window scroll_bar) >> >> "void" is fontified in the error face. > > I=E2=80=99ll try to come up with a heuristic. Now, MAYBE_UNUSED is fontified as a type, and void as an identifier. :( >> #ifdef USE_GTK >> /* See comment in EnterNotify above */ >> else if (dpyinfo->last_mouse_glyph_frame) >> x_note_mouse_movement (dpyinfo->last_mouse_glyph_frame, >> &event->xmotion, Qnil); >> #endif >> >> "else" and "dpyinfo" are fontified as types. > > Same. This seemed to work for a while, but it's broken again. --=-=-= Content-Type: image/png Content-Disposition: inline; filename="Screenshot from 2022-11-26 10-34-25.png" Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: text/plain Also, here's a new problem: char buf[256], buf1[400 + INT_STRLEN_BOUND (int) + INT_STRLEN_BOUND (unsigned long)]; "int" and "unsigned long" are fontified as identifiers, not types! --=-=-=--