emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r114719: Fix fontification bugs with constructors an


From: Alan Mackenzie
Subject: [Emacs-diffs] trunk r114719: Fix fontification bugs with constructors and const.
Date: Sat, 19 Oct 2013 15:14:06 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 114719
revision-id: address@hidden
parent: address@hidden
committer: Alan Mackenzie <address@hidden>
branch nick: trunk
timestamp: Sat 2013-10-19 15:11:07 +0000
message:
  Fix fontification bugs with constructors and const.
  
  * progmodes/cc-engine.el (c-forward-decl-or-cast-1): (Just after
  CASE 2) Remove the check for the absence of a suffix construct
  after a function declaration with only types (no identifiers) in
  the parentheses.  Also, accept a function declaration with just a
  type inside the parentheses, if this type can be positively
  recognised as such, or if a prefix keyword like "explicit" nails
  down the construct as a declaration.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/progmodes/cc-engine.el    
ccengine.el-20091113204419-o5vbwnq5f7feedwu-1227
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-10-19 08:35:51 +0000
+++ b/lisp/ChangeLog    2013-10-19 15:11:07 +0000
@@ -1,3 +1,15 @@
+2013-10-19  Alan Mackenzie  <address@hidden>
+
+       Fix fontification bugs with constructors and const.
+
+       * progmodes/cc-engine.el (c-forward-decl-or-cast-1): (Just after
+       CASE 2) Remove the check for the absence of a suffix construct
+       after a function declaration with only types (no identifiers) in
+       the parentheses.  Also, accept a function declaration with just a
+       type inside the parentheses, if this type can be positively
+       recognised as such, or if a prefix keyword like "explicit" nails
+       down the construct as a declaration.
+
 2013-10-19  Eli Zaretskii  <address@hidden>
 
        * menu-bar.el (tty-menu-navigation-map): Bind mouse-N to perform

=== modified file 'lisp/progmodes/cc-engine.el'
--- a/lisp/progmodes/cc-engine.el       2013-10-13 19:54:46 +0000
+++ b/lisp/progmodes/cc-engine.el       2013-10-19 15:11:07 +0000
@@ -6917,7 +6917,9 @@
          ;; can happen since we don't know if
          ;; `c-restricted-<>-arglists' will be correct inside the
          ;; arglist paren that gets entered.
-         c-parse-and-markup-<>-arglists)
+         c-parse-and-markup-<>-arglists
+         ;; Start of the identifier for which `got-identifier' was set.
+         name-start)
 
       (goto-char id-start)
 
@@ -6935,7 +6937,9 @@
                        ;; If the third submatch matches in C++ then
                        ;; we're looking at an identifier that's a
                        ;; prefix only if it specifies a member pointer.
-                       (when (setq got-identifier (c-forward-name))
+                       (when (progn (setq pos (point))
+                                    (setq got-identifier (c-forward-name)))
+                         (setq name-start pos)
                          (if (looking-at "\\(::\\)")
                              ;; We only check for a trailing "::" and
                              ;; let the "*" that should follow be
@@ -6961,7 +6965,9 @@
       ;; Skip over an identifier.
       (or got-identifier
          (and (looking-at c-identifier-start)
-              (setq got-identifier (c-forward-name))))
+              (setq pos (point))
+              (setq got-identifier (c-forward-name))
+              (setq name-start pos)))
 
       ;; Skip over type decl suffix operators.
       (while (if (looking-at c-type-decl-suffix-key)
@@ -7052,23 +7058,27 @@
                ;; declaration.
                (throw 'at-decl-or-cast t))
 
-             (when (and got-parens
-                        (not got-prefix)
-                        (not got-suffix-after-parens)
-                        (or backup-at-type
-                            maybe-typeless
-                            backup-maybe-typeless))
-               ;; Got a declaration of the form "foo bar (gnu);" where we've
-               ;; recognized "bar" as the type and "gnu" as the declarator.
-               ;; In this case it's however more likely that "bar" is the
-               ;; declarator and "gnu" a function argument or initializer (if
-               ;; `c-recognize-paren-inits' is set), since the parens around
-               ;; "gnu" would be superfluous if it's a declarator.  Shift the
-               ;; type one step backward.
-               (c-fdoc-shift-type-backward)))
-
-         ;; Found no identifier.
-
+
+              (when (and got-parens
+                         (not got-prefix)
+                         ;; (not got-suffix-after-parens)
+                         (or backup-at-type
+                             maybe-typeless
+                             backup-maybe-typeless
+                             (eq at-decl-or-cast t)
+                             (save-excursion
+                               (goto-char name-start)
+                               (not (memq (c-forward-type) '(nil maybe))))))
+                ;; Got a declaration of the form "foo bar (gnu);" or "bar
+                ;; (gnu);" where we've recognized "bar" as the type and "gnu"
+                ;; as the declarator.  In this case it's however more likely
+                ;; that "bar" is the declarator and "gnu" a function argument
+                ;; or initializer (if `c-recognize-paren-inits' is set),
+                ;; since the parens around "gnu" would be superfluous if it's
+                ;; a declarator.  Shift the type one step backward.
+                (c-fdoc-shift-type-backward)))
+
+          ;; Found no identifier.
          (if backup-at-type
              (progn
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]