From: Alan Mackenzie <acm@muc.de>
Date: Fri, 25 Nov 2022 09:49:02 +0000 (+0000)
Subject: CC Mode: Fix the "asymmetry rule" for fontifying a type followed by *
X-Git-Tag: emacs-29.0.90~1512
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=639adf26a1b43445eaf52e4246cf1f5b46b5e12d;p=emacs.git

CC Mode: Fix the "asymmetry rule" for fontifying a type followed by *

This fixes bug #59427.  We now handle correctly the case when a parenthesis
follows the * which is ambiguously a multiplication or indirection operator.
Also, we don't recognise a type thus found as a found type - the evidence is
too weak.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): Fix CASE 17.5 as
above.
---

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 9e09e5150d9..11ddb39ed91 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -11077,8 +11077,9 @@ This function might do hidden buffer changes."
 			      at-decl-start))
 		 (let ((space-before-id
 			(save-excursion
-			  (goto-char name-start)
-			  (or (bolp) (memq (char-before) '(?\  ?\t)))))
+			  (goto-char id-start) ; Position of "*".
+			  (and (> (skip-chars-forward "* \t\n\r") 0)
+			       (memq (char-before) '(?\  ?\t ?\n ?\r)))))
 		       (space-after-type
 			(save-excursion
 			  (goto-char type-start)
@@ -11088,6 +11089,8 @@ This function might do hidden buffer changes."
 				   (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)))))