* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line @ 2022-07-30 13:05 Alan Mackenzie 2022-07-30 14:14 ` Eli Zaretskii 0 siblings, 1 reply; 9+ messages in thread From: Alan Mackenzie @ 2022-07-30 13:05 UTC (permalink / raw) To: 56841; +Cc: Bill Sacks Hello, Emacs. This is (a version of) a bug reported by Bill Sacks <sacks@ucar.edu> in the correspondence for bug #56818. I am separating it from that bug, since it is a distinct bug, despite having similar symptoms. In Emacs-28: 1. Start emacs -Q. 2. Insert the following file in C Mode: void myfunc( ) { } 3. In line 2 (the first blank line) type "<TAB>int somevar". 4. Note that somevar is not fontified. This is a bug, given that the arglist to myfunc is terminated with a ) on line 3. 5. Do something (e.g. typing M-x) to cause a redisplay. somevar gets its correct face. 6. Note that any insertion or deletion in L2 causes somevar to lose its fontification. This is a bug. 7. (After 6). Move point onto somevar and do C-u C-x =. This shows that the face text property is set on the character despite the face not appearing on the screen. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-07-30 13:05 bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line Alan Mackenzie @ 2022-07-30 14:14 ` Eli Zaretskii 2022-07-30 14:27 ` Alan Mackenzie 2022-08-02 19:30 ` Alan Mackenzie 0 siblings, 2 replies; 9+ messages in thread From: Eli Zaretskii @ 2022-07-30 14:14 UTC (permalink / raw) To: Alan Mackenzie; +Cc: 56841, sacks > Cc: Bill Sacks <sacks@ucar.edu> > Date: Sat, 30 Jul 2022 13:05:24 +0000 > From: Alan Mackenzie <acm@muc.de> > > 1. Start emacs -Q. > 2. Insert the following file in C Mode: > > void myfunc( > > ) { > > } > > 3. In line 2 (the first blank line) type "<TAB>int somevar". > 4. Note that somevar is not fontified. This is a bug, given that the > arglist to myfunc is terminated with a ) on line 3. > 5. Do something (e.g. typing M-x) to cause a redisplay. somevar gets > its correct face. > 6. Note that any insertion or deletion in L2 causes somevar to lose its > fontification. This is a bug. > 7. (After 6). Move point onto somevar and do C-u C-x =. This shows > that the face text property is set on the character despite the face > not appearing on the screen. Are you saying this is not a bug in CC mode but somewhere else? Or are you saying that you don't yet know what is the culprit and will investigate? ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-07-30 14:14 ` Eli Zaretskii @ 2022-07-30 14:27 ` Alan Mackenzie 2022-07-30 15:10 ` Eli Zaretskii 2022-08-02 19:30 ` Alan Mackenzie 1 sibling, 1 reply; 9+ messages in thread From: Alan Mackenzie @ 2022-07-30 14:27 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 56841, sacks, acm Hello, Eli. On Sat, Jul 30, 2022 at 17:14:43 +0300, Eli Zaretskii wrote: > > Cc: Bill Sacks <sacks@ucar.edu> > > Date: Sat, 30 Jul 2022 13:05:24 +0000 > > From: Alan Mackenzie <acm@muc.de> > > 1. Start emacs -Q. > > 2. Insert the following file in C Mode: > > void myfunc( > > ) { > > } > > 3. In line 2 (the first blank line) type "<TAB>int somevar". > > 4. Note that somevar is not fontified. This is a bug, given that the > > arglist to myfunc is terminated with a ) on line 3. > > 5. Do something (e.g. typing M-x) to cause a redisplay. somevar gets > > its correct face. > > 6. Note that any insertion or deletion in L2 causes somevar to lose its > > fontification. This is a bug. > > 7. (After 6). Move point onto somevar and do C-u C-x =. This shows > > that the face text property is set on the character despite the face > > not appearing on the screen. > Are you saying this is not a bug in CC mode but somewhere else? Or > are you saying that you don't yet know what is the culprit and will > investigate? It is most definitely a bug in CC Mode, and I'm looking at it at the moment. My feeling right now is that the fix will be too involved to go into the release branch. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-07-30 14:27 ` Alan Mackenzie @ 2022-07-30 15:10 ` Eli Zaretskii 2022-07-31 15:48 ` Alan Mackenzie 0 siblings, 1 reply; 9+ messages in thread From: Eli Zaretskii @ 2022-07-30 15:10 UTC (permalink / raw) To: Alan Mackenzie; +Cc: 56841, sacks > Date: Sat, 30 Jul 2022 14:27:53 +0000 > Cc: 56841@debbugs.gnu.org, sacks@ucar.edu, acm@muc.de > From: Alan Mackenzie <acm@muc.de> > > > Are you saying this is not a bug in CC mode but somewhere else? Or > > are you saying that you don't yet know what is the culprit and will > > investigate? > > It is most definitely a bug in CC Mode, and I'm looking at it at the > moment. Thanks. > My feeling right now is that the fix will be too involved to go into the > release branch. Let's talk when you have a fix. But generally, this doesn't sound like a too grave problem to me, especially since there's an easy way of asking Emacs to fontify correctly. ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-07-30 15:10 ` Eli Zaretskii @ 2022-07-31 15:48 ` Alan Mackenzie 2022-07-31 15:53 ` Eli Zaretskii 0 siblings, 1 reply; 9+ messages in thread From: Alan Mackenzie @ 2022-07-31 15:48 UTC (permalink / raw) To: Eli Zaretskii, sacks; +Cc: 56841, acm Hello, Eli and Bill. On Sat, Jul 30, 2022 at 18:10:12 +0300, Eli Zaretskii wrote: > > Date: Sat, 30 Jul 2022 14:27:53 +0000 > > Cc: 56841@debbugs.gnu.org, sacks@ucar.edu, acm@muc.de > > From: Alan Mackenzie <acm@muc.de> > > > Are you saying this is not a bug in CC mode but somewhere else? Or > > > are you saying that you don't yet know what is the culprit and will > > > investigate? > > It is most definitely a bug in CC Mode, and I'm looking at it at the > > moment. > Thanks. > > My feeling right now is that the fix will be too involved to go into the > > release branch. > Let's talk when you have a fix. But generally, this doesn't sound > like a too grave problem to me, especially since there's an easy way > of asking Emacs to fontify correctly. Here's a proposed version of the fix, which seems to work. The diff is probably best perused with diff -b. The patch will apply to both the master branch and Emacs-28.1. CC Mode: Fontify args correctly when arglist closing ) is not on the same line This should fix bug #56841. * lisp/progmodes/cc-engine.el (c-forward-declarator): Fix an off-by-one comparing the position after a c-forward-name with a limit. * lisp/progmodes/cc-mode.el (c-fl-decl-end): Handle correctly point starting inside a literal. Insert a missing c-backward-syntactic-ws in the handling of C++ attributes. Better handle point starting inside a [ or (. Tidy up the handling of syntactic whitespace at the end of the buffer. diff -r e4e62074b8a6 cc-engine.el --- a/cc-engine.el Sat Jul 30 09:15:53 2022 +0000 +++ b/cc-engine.el Sun Jul 31 15:39:26 2022 +0000 @@ -9576,7 +9576,7 @@ (or (= paren-depth 0) (c-safe (goto-char (scan-lists (point) 1 paren-depth)))) - (<= (point) limit) + (< (point) limit) ;; Skip over any trailing bit, such as "__attribute__". (progn diff -r e4e62074b8a6 cc-mode.el --- a/cc-mode.el Sat Jul 30 09:15:53 2022 +0000 +++ b/cc-mode.el Sun Jul 31 15:39:26 2022 +0000 @@ -2412,49 +2412,59 @@ (and (/= new-pos pos) new-pos)))) (defun c-fl-decl-end (pos) - ;; If POS is inside a declarator, return the end of the token that follows - ;; the declarator, otherwise return nil. POS being in a literal does not - ;; count as being in a declarator (on pragmatic grounds). POINT is not - ;; preserved. + ;; If POS is inside a declarator, return the end of the paren pair that + ;; terminates it, or the token that follows the declarator, otherwise return + ;; nil. If there is no such token, the end of the last token in the buffer + ;; is used. POS being in a literal is now (2022-07) handled correctly. + ;; POINT is not preserved. (goto-char pos) (let ((lit-start (c-literal-start)) (lim (c-determine-limit 1000)) enclosing-attribute pos1) - (unless lit-start - (c-backward-syntactic-ws - lim) - (when (setq enclosing-attribute (c-enclosing-c++-attribute)) - (goto-char (car enclosing-attribute))) ; Only happens in C++ Mode. - (when (setq pos1 (c-on-identifier)) - (goto-char pos1) - (let ((lim (save-excursion - (and (c-beginning-of-macro) - (progn (c-end-of-macro) (point)))))) - (and (c-forward-declarator lim) - (if (eq (char-after) ?\() - (and - (c-go-list-forward nil lim) - (progn (c-forward-syntactic-ws lim) - (not (eobp))) - (progn - (if (looking-at c-symbol-char-key) - ;; Deal with baz (foo((bar)) type var), where - ;; foo((bar)) is not semantically valid. The result - ;; must be after var). - (and - (goto-char pos) - (setq pos1 (c-on-identifier)) - (goto-char pos1) - (progn - (c-backward-syntactic-ws lim) - (eq (char-before) ?\()) - (c-fl-decl-end (1- (point)))) - (c-backward-syntactic-ws lim) - (point)))) - (and (progn (c-forward-syntactic-ws lim) - (not (eobp))) + (if lit-start + (goto-char lit-start)) + (c-backward-syntactic-ws lim) + (when (setq enclosing-attribute (c-enclosing-c++-attribute)) + (goto-char (car enclosing-attribute)) ; Only happens in C++ Mode. + (c-backward-syntactic-ws lim)) + (while (and (> (point) lim) + (memq (char-before) '(?\[ ?\())) + (backward-char) + (c-backward-syntactic-ws lim)) + (when (setq pos1 (c-on-identifier)) + (goto-char pos1) + (let ((lim (save-excursion + (and (c-beginning-of-macro) + (progn (c-end-of-macro) (point)))))) + (and (c-forward-declarator lim) + (if (eq (char-after) ?\() + (and + (c-go-list-forward nil lim) + (progn (c-forward-syntactic-ws lim) + (not (eobp))) + (progn + (if (looking-at c-symbol-char-key) + ;; Deal with baz (foo((bar)) type var), where + ;; foo((bar)) is not semantically valid. The result + ;; must be after var). + (and + (goto-char pos) + (setq pos1 (c-on-identifier)) + (goto-char pos1) + (progn + (c-backward-syntactic-ws lim) + (eq (char-before) ?\()) + (c-fl-decl-end (1- (point)))) (c-backward-syntactic-ws lim) - (point))))))))) + (point)))) + (if (progn (c-forward-syntactic-ws lim) + (not (eobp))) + (c-forward-over-token) + (let ((lit-start (c-literal-start))) + (when lit-start + (goto-char lit-start)) + (c-backward-syntactic-ws))) + (and (>= (point) pos) (point)))))))) (defun c-change-expand-fl-region (_beg _end _old-len) ;; Expand the region (c-new-BEG c-new-END) to an after-change font-lock -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-07-31 15:48 ` Alan Mackenzie @ 2022-07-31 15:53 ` Eli Zaretskii 0 siblings, 0 replies; 9+ messages in thread From: Eli Zaretskii @ 2022-07-31 15:53 UTC (permalink / raw) To: Alan Mackenzie; +Cc: 56841, sacks, acm > Date: Sun, 31 Jul 2022 15:48:56 +0000 > Cc: 56841@debbugs.gnu.org, acm@muc.de > From: Alan Mackenzie <acm@muc.de> > > > Let's talk when you have a fix. But generally, this doesn't sound > > like a too grave problem to me, especially since there's an easy way > > of asking Emacs to fontify correctly. > > Here's a proposed version of the fix, which seems to work. The diff is > probably best perused with diff -b. The patch will apply to both the master > branch and Emacs-28.1. Thanks. I guess this should go to master. ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-07-30 14:14 ` Eli Zaretskii 2022-07-30 14:27 ` Alan Mackenzie @ 2022-08-02 19:30 ` Alan Mackenzie 2022-08-22 16:08 ` Bill Sacks 1 sibling, 1 reply; 9+ messages in thread From: Alan Mackenzie @ 2022-08-02 19:30 UTC (permalink / raw) To: sacks; +Cc: 56841, Eli Zaretskii Hello again, Bill. On Sat, Jul 30, 2022 at 17:14:43 +0300, Eli Zaretskii wrote: > > Cc: Bill Sacks <sacks@ucar.edu> > > Date: Sat, 30 Jul 2022 13:05:24 +0000 > > From: Alan Mackenzie <acm@muc.de> > > 1. Start emacs -Q. > > 2. Insert the following file in C Mode: > > void myfunc( > > ) { > > } > > 3. In line 2 (the first blank line) type "<TAB>int somevar". > > 4. Note that somevar is not fontified. This is a bug, given that the > > arglist to myfunc is terminated with a ) on line 3. > > 5. Do something (e.g. typing M-x) to cause a redisplay. somevar gets > > its correct face. > > 6. Note that any insertion or deletion in L2 causes somevar to lose its > > fontification. This is a bug. > > 7. (After 6). Move point onto somevar and do C-u C-x =. This shows > > that the face text property is set on the character despite the face > > not appearing on the screen. This bug, although the symptoms were similar to the other bug you reported, was an entirely different bug, more difficult to fix. I now have a patch for it, and would ask you to apply the patch to your Emacs 28.1 and byte compile the files in it, as before. (As before, help is available from me by private email.) Then please test it on your actual C code and let us know how it went. Thanks! diff -r e4e62074b8a6 cc-engine.el --- a/cc-engine.el Sat Jul 30 09:15:53 2022 +0000 +++ b/cc-engine.el Tue Aug 02 19:14:15 2022 +0000 @@ -9576,7 +9576,7 @@ (or (= paren-depth 0) (c-safe (goto-char (scan-lists (point) 1 paren-depth)))) - (<= (point) limit) + (< (point) limit) ;; Skip over any trailing bit, such as "__attribute__". (progn diff -r e4e62074b8a6 cc-mode.el --- a/cc-mode.el Sat Jul 30 09:15:53 2022 +0000 +++ b/cc-mode.el Tue Aug 02 19:14:15 2022 +0000 @@ -2412,49 +2412,59 @@ (and (/= new-pos pos) new-pos)))) (defun c-fl-decl-end (pos) - ;; If POS is inside a declarator, return the end of the token that follows - ;; the declarator, otherwise return nil. POS being in a literal does not - ;; count as being in a declarator (on pragmatic grounds). POINT is not - ;; preserved. + ;; If POS is inside a declarator, return the position of the end of the + ;; paren pair that terminates it, or of the end of the token that follows + ;; the declarator, otherwise return nil. If there is no such token, the end + ;; of the last token in the buffer is used. POS being in a literal is now + ;; (2022-07) handled correctly. POINT is not preserved. (goto-char pos) (let ((lit-start (c-literal-start)) (lim (c-determine-limit 1000)) enclosing-attribute pos1) - (unless lit-start - (c-backward-syntactic-ws - lim) - (when (setq enclosing-attribute (c-enclosing-c++-attribute)) - (goto-char (car enclosing-attribute))) ; Only happens in C++ Mode. - (when (setq pos1 (c-on-identifier)) - (goto-char pos1) - (let ((lim (save-excursion - (and (c-beginning-of-macro) - (progn (c-end-of-macro) (point)))))) - (and (c-forward-declarator lim) - (if (eq (char-after) ?\() - (and - (c-go-list-forward nil lim) - (progn (c-forward-syntactic-ws lim) - (not (eobp))) - (progn - (if (looking-at c-symbol-char-key) - ;; Deal with baz (foo((bar)) type var), where - ;; foo((bar)) is not semantically valid. The result - ;; must be after var). - (and - (goto-char pos) - (setq pos1 (c-on-identifier)) - (goto-char pos1) - (progn - (c-backward-syntactic-ws lim) - (eq (char-before) ?\()) - (c-fl-decl-end (1- (point)))) - (c-backward-syntactic-ws lim) - (point)))) - (and (progn (c-forward-syntactic-ws lim) - (not (eobp))) + (if lit-start + (goto-char lit-start)) + (c-backward-syntactic-ws lim) + (when (setq enclosing-attribute (c-enclosing-c++-attribute)) + (goto-char (car enclosing-attribute)) ; Only happens in C++ Mode. + (c-backward-syntactic-ws lim)) + (while (and (> (point) lim) + (memq (char-before) '(?\[ ?\())) + (backward-char) + (c-backward-syntactic-ws lim)) + (when (setq pos1 (c-on-identifier)) + (goto-char pos1) + (let ((lim (save-excursion + (and (c-beginning-of-macro) + (progn (c-end-of-macro) (point)))))) + (and (c-forward-declarator lim) + (if (and (eq (char-after) ?\() + (c-go-list-forward nil lim)) + (and + (progn (c-forward-syntactic-ws lim) + (not (eobp))) + (progn + (if (looking-at c-symbol-char-key) + ;; Deal with baz (foo((bar)) type var), where + ;; foo((bar)) is not semantically valid. The result + ;; must be after var). + (and + (goto-char pos) + (setq pos1 (c-on-identifier)) + (goto-char pos1) + (progn + (c-backward-syntactic-ws lim) + (eq (char-before) ?\()) + (c-fl-decl-end (1- (point)))) (c-backward-syntactic-ws lim) - (point))))))))) + (point)))) + (if (progn (c-forward-syntactic-ws lim) + (not (eobp))) + (c-forward-over-token) + (let ((lit-start (c-literal-start))) + (when lit-start + (goto-char lit-start)) + (c-backward-syntactic-ws))) + (and (>= (point) pos) (point)))))))) (defun c-change-expand-fl-region (_beg _end _old-len) ;; Expand the region (c-new-BEG c-new-END) to an after-change font-lock -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-08-02 19:30 ` Alan Mackenzie @ 2022-08-22 16:08 ` Bill Sacks 2022-08-24 15:10 ` Alan Mackenzie 0 siblings, 1 reply; 9+ messages in thread From: Bill Sacks @ 2022-08-22 16:08 UTC (permalink / raw) To: Alan Mackenzie; +Cc: 56841, Eli Zaretskii [-- Attachment #1: Type: text/plain, Size: 5874 bytes --] Thank you very much for this fix, Alan. I have now tested it both with my test case and in more realistic code, and it seems to fix the issues I was encountering – thank you! Sorry for the delay on getting back to you about this. Bill Alan Mackenzie wrote on 8/2/22 1:30 PM: > Hello again, Bill. > > On Sat, Jul 30, 2022 at 17:14:43 +0300, Eli Zaretskii wrote: >>> Cc: Bill Sacks <sacks@ucar.edu> >>> Date: Sat, 30 Jul 2022 13:05:24 +0000 >>> From: Alan Mackenzie <acm@muc.de> >>> 1. Start emacs -Q. >>> 2. Insert the following file in C Mode: >>> void myfunc( >>> ) { >>> } >>> 3. In line 2 (the first blank line) type "<TAB>int somevar". >>> 4. Note that somevar is not fontified. This is a bug, given that the >>> arglist to myfunc is terminated with a ) on line 3. >>> 5. Do something (e.g. typing M-x) to cause a redisplay. somevar gets >>> its correct face. >>> 6. Note that any insertion or deletion in L2 causes somevar to lose its >>> fontification. This is a bug. >>> 7. (After 6). Move point onto somevar and do C-u C-x =. This shows >>> that the face text property is set on the character despite the face >>> not appearing on the screen. > This bug, although the symptoms were similar to the other bug you > reported, was an entirely different bug, more difficult to fix. > > I now have a patch for it, and would ask you to apply the patch to your > Emacs 28.1 and byte compile the files in it, as before. (As before, > help is available from me by private email.) Then please test it on > your actual C code and let us know how it went. Thanks! > > > > diff -r e4e62074b8a6 cc-engine.el > --- a/cc-engine.el Sat Jul 30 09:15:53 2022 +0000 > +++ b/cc-engine.el Tue Aug 02 19:14:15 2022 +0000 > @@ -9576,7 +9576,7 @@ > (or (= paren-depth 0) > (c-safe (goto-char (scan-lists (point) 1 paren-depth)))) > > - (<= (point) limit) > + (< (point) limit) > > ;; Skip over any trailing bit, such as "__attribute__". > (progn > diff -r e4e62074b8a6 cc-mode.el > --- a/cc-mode.el Sat Jul 30 09:15:53 2022 +0000 > +++ b/cc-mode.el Tue Aug 02 19:14:15 2022 +0000 > @@ -2412,49 +2412,59 @@ > (and (/= new-pos pos) new-pos)))) > > (defun c-fl-decl-end (pos) > - ;; If POS is inside a declarator, return the end of the token that follows > - ;; the declarator, otherwise return nil. POS being in a literal does not > - ;; count as being in a declarator (on pragmatic grounds). POINT is not > - ;; preserved. > + ;; If POS is inside a declarator, return the position of the end of the > + ;; paren pair that terminates it, or of the end of the token that follows > + ;; the declarator, otherwise return nil. If there is no such token, the end > + ;; of the last token in the buffer is used. POS being in a literal is now > + ;; (2022-07) handled correctly. POINT is not preserved. > (goto-char pos) > (let ((lit-start (c-literal-start)) > (lim (c-determine-limit 1000)) > enclosing-attribute pos1) > - (unless lit-start > - (c-backward-syntactic-ws > - lim) > - (when (setq enclosing-attribute (c-enclosing-c++-attribute)) > - (goto-char (car enclosing-attribute))) ; Only happens in C++ Mode. > - (when (setq pos1 (c-on-identifier)) > - (goto-char pos1) > - (let ((lim (save-excursion > - (and (c-beginning-of-macro) > - (progn (c-end-of-macro) (point)))))) > - (and (c-forward-declarator lim) > - (if (eq (char-after) ?\() > - (and > - (c-go-list-forward nil lim) > - (progn (c-forward-syntactic-ws lim) > - (not (eobp))) > - (progn > - (if (looking-at c-symbol-char-key) > - ;; Deal with baz (foo((bar)) type var), where > - ;; foo((bar)) is not semantically valid. The result > - ;; must be after var). > - (and > - (goto-char pos) > - (setq pos1 (c-on-identifier)) > - (goto-char pos1) > - (progn > - (c-backward-syntactic-ws lim) > - (eq (char-before) ?\()) > - (c-fl-decl-end (1- (point)))) > - (c-backward-syntactic-ws lim) > - (point)))) > - (and (progn (c-forward-syntactic-ws lim) > - (not (eobp))) > + (if lit-start > + (goto-char lit-start)) > + (c-backward-syntactic-ws lim) > + (when (setq enclosing-attribute (c-enclosing-c++-attribute)) > + (goto-char (car enclosing-attribute)) ; Only happens in C++ Mode. > + (c-backward-syntactic-ws lim)) > + (while (and (> (point) lim) > + (memq (char-before) '(?\[ ?\())) > + (backward-char) > + (c-backward-syntactic-ws lim)) > + (when (setq pos1 (c-on-identifier)) > + (goto-char pos1) > + (let ((lim (save-excursion > + (and (c-beginning-of-macro) > + (progn (c-end-of-macro) (point)))))) > + (and (c-forward-declarator lim) > + (if (and (eq (char-after) ?\() > + (c-go-list-forward nil lim)) > + (and > + (progn (c-forward-syntactic-ws lim) > + (not (eobp))) > + (progn > + (if (looking-at c-symbol-char-key) > + ;; Deal with baz (foo((bar)) type var), where > + ;; foo((bar)) is not semantically valid. The result > + ;; must be after var). > + (and > + (goto-char pos) > + (setq pos1 (c-on-identifier)) > + (goto-char pos1) > + (progn > + (c-backward-syntactic-ws lim) > + (eq (char-before) ?\()) > + (c-fl-decl-end (1- (point)))) > (c-backward-syntactic-ws lim) > - (point))))))))) > + (point)))) > + (if (progn (c-forward-syntactic-ws lim) > + (not (eobp))) > + (c-forward-over-token) > + (let ((lit-start (c-literal-start))) > + (when lit-start > + (goto-char lit-start)) > + (c-backward-syntactic-ws))) > + (and (>= (point) pos) (point)))))))) > > (defun c-change-expand-fl-region (_beg _end _old-len) > ;; Expand the region (c-new-BEG c-new-END) to an after-change font-lock > > [-- Attachment #2: Type: text/html, Size: 6710 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line 2022-08-22 16:08 ` Bill Sacks @ 2022-08-24 15:10 ` Alan Mackenzie 0 siblings, 0 replies; 9+ messages in thread From: Alan Mackenzie @ 2022-08-24 15:10 UTC (permalink / raw) To: Bill Sacks; +Cc: Eli Zaretskii, 56841-done Hello, Bill. On Mon, Aug 22, 2022 at 10:08:48 -0600, Bill Sacks wrote: > Thank you very much for this fix, Alan. I have now tested it both with > my test case and in more realistic code, and it seems to fix the issues > I was encountering – thank you! Thanks for the testing! > Sorry for the delay on getting back to you about this. No problem! I've now committed the fix to the master branch of Emacs at savannah, and I'm closing the bug with this post. > Bill [ .... ] -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-08-24 15:10 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-07-30 13:05 bug#56841: Emacs-28 C Mode: Fontification errors when arglist closing ) is on next line Alan Mackenzie 2022-07-30 14:14 ` Eli Zaretskii 2022-07-30 14:27 ` Alan Mackenzie 2022-07-30 15:10 ` Eli Zaretskii 2022-07-31 15:48 ` Alan Mackenzie 2022-07-31 15:53 ` Eli Zaretskii 2022-08-02 19:30 ` Alan Mackenzie 2022-08-22 16:08 ` Bill Sacks 2022-08-24 15:10 ` Alan Mackenzie
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).