aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mackenzie2017-04-22 14:45:24 +0000
committerAlan Mackenzie2017-04-22 14:45:24 +0000
commitd354fc38286cba05b3ba2fefb9d9cd6d30deac3d (patch)
treec69648ef131e92d502fb1a2aded5ba7030a999a0
parenteb52828a439f674733ba70844b795c6673733572 (diff)
downloademacs-d354fc38286cba05b3ba2fefb9d9cd6d30deac3d.tar.gz
emacs-d354fc38286cba05b3ba2fefb9d9cd6d30deac3d.zip
Fix fontification of C++ declaration with type FOO::FOO.
* lisp/progmodes/cc-engine.el (c-find-decl-spots): Initialize cfd-top-level properly. (c-forward-decl-or-cast-1): On finding FOO::FOO, check it is followed by "(" before deciding it is a constructor. * lisp/progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare): Negate the result of the c-bs-at-toplevel-p call passed to c-font-lock-declarators (simple bug fix).
-rw-r--r--lisp/progmodes/cc-engine.el8
-rw-r--r--lisp/progmodes/cc-fonts.el2
2 files changed, 7 insertions, 3 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index e7a8962ac2b..4af7c359747 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -5681,7 +5681,7 @@ comment at the start of cc-engine.el for more info."
5681 ;; Whether the last position returned from `c-find-decl-prefix-search' 5681 ;; Whether the last position returned from `c-find-decl-prefix-search'
5682 ;; is at the top-level (including directly in a class or namespace, 5682 ;; is at the top-level (including directly in a class or namespace,
5683 ;; etc.). 5683 ;; etc.).
5684 cfd-top-level) 5684 (cfd-top-level (c-bs-at-toplevel-p (point))))
5685 5685
5686 ;; Initialize by finding a syntactically relevant start position 5686 ;; Initialize by finding a syntactically relevant start position
5687 ;; before the point, and do the first `c-decl-prefix-or-start-re' 5687 ;; before the point, and do the first `c-decl-prefix-or-start-re'
@@ -8379,7 +8379,11 @@ comment at the start of cc-engine.el for more info."
8379 (c-simple-skip-symbol-backward)) 8379 (c-simple-skip-symbol-backward))
8380 (>= (point) type-start) 8380 (>= (point) type-start)
8381 (equal (buffer-substring-no-properties (point) end-1) 8381 (equal (buffer-substring-no-properties (point) end-1)
8382 name)) 8382 name)
8383 (goto-char end-2)
8384 (progn
8385 (c-forward-syntactic-ws)
8386 (eq (char-after) ?\()))
8383 ;; It is a (con|de)structor name. In that case the 8387 ;; It is a (con|de)structor name. In that case the
8384 ;; declaration is typeless so zap out any preceding 8388 ;; declaration is typeless so zap out any preceding
8385 ;; identifier(s) that we might have taken as types. 8389 ;; identifier(s) that we might have taken as types.
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 923f077b411..adb1f1a4937 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -900,7 +900,7 @@ casts and declarations are fontified. Used on level 2 and higher."
900 (when (memq prop '(c-decl-id-start c-decl-type-start)) 900 (when (memq prop '(c-decl-id-start c-decl-type-start))
901 (c-forward-syntactic-ws limit) 901 (c-forward-syntactic-ws limit)
902 (c-font-lock-declarators limit t (eq prop 'c-decl-type-start) 902 (c-font-lock-declarators limit t (eq prop 'c-decl-type-start)
903 (c-bs-at-toplevel-p (point))))) 903 (not (c-bs-at-toplevel-p (point))))))
904 904
905 (setq c-font-lock-context ;; (c-guess-font-lock-context) 905 (setq c-font-lock-context ;; (c-guess-font-lock-context)
906 (save-excursion 906 (save-excursion