From: Alan Mackenzie <acm@muc.de>
Date: Wed, 24 Aug 2022 19:27:32 +0000 (+0000)
Subject: C++ Mode - Fontify "class Foo {\n  ~Foo() noexcept;" correctly
X-Git-Tag: emacs-29.0.90~1893^2~56
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=78923c5f4e26d3cb9fbaf0dbf2d04c523482e52c;p=emacs.git

C++ Mode - Fontify "class Foo {\n  ~Foo() noexcept;" correctly

This fixes bug #49787.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): (In `if' form just
before CASE 8) Remove the (not ...) around the (looking-at
c-after-suffixed-type-maybe-decl-key).

* lisp/progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare): Add
`c-not-decl' to the values of c-type which are erased at the start of a
fontification.
---

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index f46c909fea5..1139423a455 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -10571,8 +10571,8 @@ This function might do hidden buffer changes."
 			backup-maybe-typeless
 			(when c-recognize-typeless-decls
 			  (or (not got-suffix)
-			      (not (looking-at
-				    c-after-suffixed-type-maybe-decl-key))))))
+			      (looking-at
+			       c-after-suffixed-type-maybe-decl-key)))))
 	       ;; Got an empty paren pair and a preceding type that probably
 	       ;; really is the identifier.  Shift the type backwards to make
 	       ;; the last one the identifier.  This is analogous to the
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 2495d21a10f..12bb3d37513 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -940,7 +940,8 @@ casts and declarations are fontified.  Used on level 2 and higher."
 			'(c-decl-arg-start
 			  c-decl-end
 			  c-decl-id-start
-			  c-decl-type-start)))
+			  c-decl-type-start
+			  c-not-decl)))
 	     (1- (point))
 	   pos)
 	 limit 'c-type)))