From: Alan Mackenzie <acm@muc.de>
To: Daniel Colascione <dancol@dancol.org>
Cc: 62339@debbugs.gnu.org, Eli Zaretskii <eliz@gnu.org>
Subject: bug#62339: cc-mode fontifies variables incorrectly when const follows type
Date: Thu, 23 Mar 2023 14:40:23 +0000 [thread overview]
Message-ID: <ZBxk1ye5StbDkCnU@ACM> (raw)
In-Reply-To: <87lejo1ldz.fsf@dancol.org>
Hello, Daniel.
On Wed, Mar 22, 2023 at 18:17:05 -0400, Daniel Colascione wrote:
> Alan Mackenzie <acm@muc.de> writes:
> > Hello, Eli and Daniel.
> > Thanks for the bug report!
> > On Wed, Mar 22, 2023 at 17:12:52 +0200, Eli Zaretskii wrote:
> >> > From: Daniel Colascione <dancol@dancol.org>
> >> > Cc: 62339@debbugs.gnu.org
> >> > Date: Wed, 22 Mar 2023 10:19:55 -0400
> >> > This problem reproduces for me on latest master with emacs -Q:
> >> > ```
> >> > TEST(Foo, Bar) {
> >> > NamedTemporaryDirectory const test_directory;
> >> > }
> >> > ```
> >> Thanks. What I see with Emacs built from master is that
> >> test_directory in the above example gets font-lock-type-face in
> >> c++-mode (but not in c-mode). With Emacs built from emacs-29, both
> >> modes produce correct fontification.
> >> Alan, can you please look into this?
> > I think this is caused by a faulty fix of bug #59267, where "typeless" C
> > declarations like
> > const foo;
> > , which are implicit int, were not being recognised.
> Can we back out this fix in the meantime? These "typeless" declarations
> can't be all that common.
It turned out that the bug was caused by a single missing line of code, a
(c-forward-syntactic-ws) in c-forward-type, so the fix wasn't too
difficult. I've taken the opportunity also to fix some minor other
innaccuracies in c-forward-type.
Please try the following patch, and either confirm to me that it appears
to fix the bug, or say what's still wrong. Thanks!
diff -r 300ebf19cd62 cc-engine.el
--- a/cc-engine.el Fri Feb 17 08:58:11 2023 +0000
+++ b/cc-engine.el Thu Mar 23 14:34:08 2023 +0000
@@ -9143,7 +9143,7 @@
(c-forward-syntactic-ws))
(let ((start (point)) pos res name-res id-start id-end id-range
- post-prefix-pos)
+ post-prefix-pos prefix-end-pos)
;; Skip leading type modifiers. If any are found we know it's a
;; prefix of a type.
@@ -9153,6 +9153,7 @@
(when (looking-at c-no-type-key)
(setq res 'no-id)))
(goto-char (match-end 1))
+ (setq prefix-end-pos (point))
(setq pos (point))
(c-forward-syntactic-ws)
(or (eq res 'no-id)
@@ -9304,7 +9305,10 @@
(not (looking-at c-type-decl-prefix-key)))))
;; A C specifier followed by an implicit int, e.g.
;; "register count;"
- (goto-char id-start)
+ (goto-char prefix-end-pos)
+ (setq pos (point))
+ (unless stop-at-end
+ (c-forward-syntactic-ws))
(setq res 'no-id))
(name-res
@@ -9312,6 +9316,7 @@
;; A normal identifier.
(goto-char id-end)
(setq pos (point))
+ (c-forward-syntactic-ws)
(if (or res c-promote-possible-types)
(progn
(when (not (eq c-promote-possible-types 'just-one))
@@ -9319,7 +9324,9 @@
(when (and c-record-type-identifiers id-range)
(c-record-type-id id-range))
(unless res
- (setq res 'found)))
+ (setq res 'found))
+ (when (eq res 'prefix)
+ (setq res t)))
(setq res (if (c-check-qualified-type id-start)
;; It's an identifier that has been used as
;; a type somewhere else.
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2023-03-23 14:40 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-21 15:14 bug#62339: cc-mode fontifies variables incorrectly when const follows type Daniel Colascione
2023-03-21 17:39 ` Eli Zaretskii
2023-03-22 14:19 ` Daniel Colascione
2023-03-22 15:12 ` Eli Zaretskii
2023-03-22 22:14 ` Alan Mackenzie
2023-03-22 22:17 ` Daniel Colascione
2023-03-23 0:42 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-03-23 2:02 ` Daniel Colascione
2023-03-23 5:45 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-03-23 7:22 ` Eli Zaretskii
2023-03-23 14:40 ` Alan Mackenzie [this message]
2023-04-05 15:53 ` Alan Mackenzie
2023-04-06 3:16 ` Daniel Colascione
2023-04-06 9:26 ` Alan Mackenzie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZBxk1ye5StbDkCnU@ACM \
--to=acm@muc.de \
--cc=62339@debbugs.gnu.org \
--cc=dancol@dancol.org \
--cc=eliz@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).