bug#59427: CC Mode 5.35.2 (C/*l); More bad fontification
Alan Mackenzie <[email protected]> Thu, 24 Nov 2022 12:56:40 +0000
| Newsgroups | gmane.emacs.cc-mode.general |
|---|---|
| Message-ID | <Y39qCMfJOHgckwuN@ACM> |
Hello, Po.
On Mon, Nov 21, 2022 at 10:32:26 +0800, Po Lu via CC-Mode-help wrote:
> Package: cc-mode
> Insert the following text in a c-mode buffer:
> static uint64_t
> ConfineTime (uint64_t time)
> {
> uint32_t milliseconds;
> /* Given a microsecond time, confine the millisecond part to
> CARD32. */
> milliseconds = time / 1000;
> return (milliseconds * (uint64_t) 1000
> + time % 1000);
> }
> Notice how "milliseconds" is recognized as a type, and the uint64_t in
> the cast as an identifier.
Yes. Here the "symmetric space" criterion for * was buggy. That
criterion says if there is whitespace on neither side of the *, or both,
it is a multiplication sign. Otherwise it is the indirection operator.
The bug was not taking the ( properly into account. Please apply the
attached patch, which should fix this, and confirm it works OK. Thanks!
> Emacs : GNU Emacs 29.0.50 (build 236, x86_64-pc-linux-gnu)
> of 2022-11-21
> Package: CC Mode 5.35.2 (C/*l)
> Buffer Style: gnu
> c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties category-properties 1-bit)
[ .... ]
--
Alan Mackenzie (Nuremberg, Germany).
diff.20221123.diff
(text/plain, 804 B)
diff -r d37a87d7240d cc-engine.el --- a/cc-engine.el Thu Nov 17 10:20:00 2022 +0000 +++ b/cc-engine.el Wed Nov 23 12:48:03 2022 +0000 @@ -11096,8 +11096,9 @@ at-decl-start)) (let ((space-before-id (save-excursion - (goto-char name-start) - (or (bolp) (memq (char-before) '(?\ ?\t))))) + (goto-char id-start) + (and (> (skip-chars-forward "* \t\n\r") 0) + (memq (char-before) '(?\ ?\t ?\n ?\r))))) (space-after-type (save-excursion (goto-char type-start) @@ -11107,6 +11108,8 @@ (memq (char-after) '(?\ ?\t))))))) (when (not (eq (not space-before-id) (not space-after-type))) + (when (eq at-type 'maybe) + (setq unsafe-maybe t)) (setq maybe-expression t) (throw 'at-decl-or-cast t)))))