aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mackenzie2016-01-15 21:15:20 +0000
committerPaul Eggert2016-03-21 17:05:55 -0700
commit515ce25ffdfef33a603342fa7fbc793925f54230 (patch)
treeebdb1e97076af30a0c16652867723f86c8dd26d8
parenta17bddeaa430715bf98f662a2c24ae5af50cc6b8 (diff)
downloademacs-515ce25ffdfef33a603342fa7fbc793925f54230.tar.gz
emacs-515ce25ffdfef33a603342fa7fbc793925f54230.zip
Don't confuse "::" with ":" when trying to parse member initializers.
* lisp/progmodes/cc-engine.el (c-back-over-member-initializers): Check more robustly for ":" token when searching backwards for it. * lisp/progmodes/cc-langs (c-:$-multichar-token-regexp): New language variable. [This reapplies commit 9e5452f7166e3634f2d8e943815ed722e1672714, which was inadvertently lost by merge commit 7823745acbe9b87eea2db4ef434e379fc903ec35.]
-rw-r--r--lisp/progmodes/cc-engine.el6
-rw-r--r--lisp/progmodes/cc-langs.el8
2 files changed, 14 insertions, 0 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 66b5369bbba..06e11b25d20 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -6798,6 +6798,9 @@ comment at the start of cc-engine.el for more info."
6798 (c-backward-syntactic-ws)) 6798 (c-backward-syntactic-ws))
6799 (c-back-over-list-of-member-inits) 6799 (c-back-over-list-of-member-inits)
6800 (and (eq (char-before) ?:) 6800 (and (eq (char-before) ?:)
6801 (save-excursion
6802 (c-backward-token-2)
6803 (not (looking-at c-:$-multichar-token-regexp)))
6801 (c-just-after-func-arglist-p)))) 6804 (c-just-after-func-arglist-p))))
6802 6805
6803 (while (and (not (and level-plausible 6806 (while (and (not (and level-plausible
@@ -6812,6 +6815,9 @@ comment at the start of cc-engine.el for more info."
6812 (c-backward-syntactic-ws) 6815 (c-backward-syntactic-ws)
6813 (c-back-over-list-of-member-inits) 6816 (c-back-over-list-of-member-inits)
6814 (and (eq (char-before) ?:) 6817 (and (eq (char-before) ?:)
6818 (save-excursion
6819 (c-backward-token-2)
6820 (not (looking-at c-:$-multichar-token-regexp)))
6815 (c-just-after-func-arglist-p))))) 6821 (c-just-after-func-arglist-p)))))
6816 6822
6817 (and at-top-level level-plausible))) 6823 (and at-top-level level-plausible)))
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index d212482790d..7a8213bf6ca 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -1230,6 +1230,14 @@ operators."
1230(c-lang-defvar c-assignment-op-regexp 1230(c-lang-defvar c-assignment-op-regexp
1231 (c-lang-const c-assignment-op-regexp)) 1231 (c-lang-const c-assignment-op-regexp))
1232 1232
1233(c-lang-defconst c-:$-multichar-token-regexp
1234 ;; Regexp matching all tokens ending in ":" which are longer than one char.
1235 ;; Currently (2016-01-07) only used in C++ Mode.
1236 t (c-make-keywords-re nil
1237 (c-filter-ops (c-lang-const c-operators) t ".+:$")))
1238(c-lang-defvar c-:$-multichar-token-regexp
1239 (c-lang-const c-:$-multichar-token-regexp))
1240
1233(c-lang-defconst c-<>-multichar-token-regexp 1241(c-lang-defconst c-<>-multichar-token-regexp
1234 ;; Regexp matching all tokens containing "<" or ">" which are longer 1242 ;; Regexp matching all tokens containing "<" or ">" which are longer
1235 ;; than one char. 1243 ;; than one char.