From: Alan Mackenzie Date: Fri, 15 Jan 2016 21:15:20 +0000 (+0000) Subject: Don't confuse "::" with ":" when trying to parse member initializers. X-Git-Tag: emacs-26.0.90~2312 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=515ce25ffdfef33a603342fa7fbc793925f54230;p=emacs.git 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.] --- 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." (c-backward-syntactic-ws)) (c-back-over-list-of-member-inits) (and (eq (char-before) ?:) + (save-excursion + (c-backward-token-2) + (not (looking-at c-:$-multichar-token-regexp))) (c-just-after-func-arglist-p)))) (while (and (not (and level-plausible @@ -6812,6 +6815,9 @@ comment at the start of cc-engine.el for more info." (c-backward-syntactic-ws) (c-back-over-list-of-member-inits) (and (eq (char-before) ?:) + (save-excursion + (c-backward-token-2) + (not (looking-at c-:$-multichar-token-regexp))) (c-just-after-func-arglist-p))))) (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." (c-lang-defvar c-assignment-op-regexp (c-lang-const c-assignment-op-regexp)) +(c-lang-defconst c-:$-multichar-token-regexp + ;; Regexp matching all tokens ending in ":" which are longer than one char. + ;; Currently (2016-01-07) only used in C++ Mode. + t (c-make-keywords-re nil + (c-filter-ops (c-lang-const c-operators) t ".+:$"))) +(c-lang-defvar c-:$-multichar-token-regexp + (c-lang-const c-:$-multichar-token-regexp)) + (c-lang-defconst c-<>-multichar-token-regexp ;; Regexp matching all tokens containing "<" or ">" which are longer ;; than one char.