diff options
| -rw-r--r-- | lisp/progmodes/cc-engine.el | 25 | ||||
| -rw-r--r-- | lisp/progmodes/cc-langs.el | 15 |
2 files changed, 38 insertions, 2 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 6d7bab7a65c..9773b1ca85b 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el | |||
| @@ -8092,8 +8092,29 @@ comment at the start of cc-engine.el for more info." | |||
| 8092 | ;; initializing brace lists. | 8092 | ;; initializing brace lists. |
| 8093 | (let (found) | 8093 | (let (found) |
| 8094 | (while | 8094 | (while |
| 8095 | (and (setq found (c-syntactic-re-search-forward | 8095 | (and (progn |
| 8096 | "[;,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" limit t t)) | 8096 | ;; In the next loop, we keep searching forward whilst |
| 8097 | ;; we find ":"s which aren't single colons inside C++ | ||
| 8098 | ;; "for" statements. | ||
| 8099 | (while | ||
| 8100 | (and | ||
| 8101 | (setq found | ||
| 8102 | (c-syntactic-re-search-forward | ||
| 8103 | "[;:,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" | ||
| 8104 | limit t t)) | ||
| 8105 | (eq (char-before) ?:) | ||
| 8106 | (if (looking-at c-:-op-cont-regexp) | ||
| 8107 | (progn (goto-char (match-end 0)) t) | ||
| 8108 | (not | ||
| 8109 | (and (c-major-mode-is 'c++-mode) | ||
| 8110 | (save-excursion | ||
| 8111 | (and | ||
| 8112 | (c-go-up-list-backward) | ||
| 8113 | (eq (char-after) ?\() | ||
| 8114 | (progn (c-backward-syntactic-ws) | ||
| 8115 | (c-simple-skip-symbol-backward)) | ||
| 8116 | (looking-at c-paren-stmt-key)))))))) | ||
| 8117 | found) | ||
| 8097 | (eq (char-before) ?\[) | 8118 | (eq (char-before) ?\[) |
| 8098 | (c-go-up-list-forward)) | 8119 | (c-go-up-list-forward)) |
| 8099 | (setq brackets-after-id t)) | 8120 | (setq brackets-after-id t)) |
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 3b455fc0908..84d4eab75af 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el | |||
| @@ -1334,6 +1334,21 @@ operators." | |||
| 1334 | (c-lang-defvar c-multichar->-op-not->>-regexp | 1334 | (c-lang-defvar c-multichar->-op-not->>-regexp |
| 1335 | (c-lang-const c-multichar->-op-not->>-regexp)) | 1335 | (c-lang-const c-multichar->-op-not->>-regexp)) |
| 1336 | 1336 | ||
| 1337 | (c-lang-defconst c-:-op-cont-tokens | ||
| 1338 | ;; A list of second and subsequent characters of all multicharacter tokens | ||
| 1339 | ;; that begin with ":". | ||
| 1340 | t (c-filter-ops (c-lang-const c-all-op-syntax-tokens) | ||
| 1341 | t | ||
| 1342 | "\\`:." | ||
| 1343 | (lambda (op) (substring op 1)))) | ||
| 1344 | |||
| 1345 | (c-lang-defconst c-:-op-cont-regexp | ||
| 1346 | ;; Regexp matching the second and subsequent characters of all | ||
| 1347 | ;; multicharacter tokens that begin with ":". | ||
| 1348 | t (c-make-keywords-re nil (c-lang-const c-:-op-cont-tokens))) | ||
| 1349 | (c-lang-defvar c-:-op-cont-regexp | ||
| 1350 | (c-lang-const c-:-op-cont-regexp)) | ||
| 1351 | |||
| 1337 | (c-lang-defconst c-stmt-delim-chars | 1352 | (c-lang-defconst c-stmt-delim-chars |
| 1338 | ;; The characters that should be considered to bound statements. To | 1353 | ;; The characters that should be considered to bound statements. To |
| 1339 | ;; optimize `c-crosses-statement-barrier-p' somewhat, it's assumed to | 1354 | ;; optimize `c-crosses-statement-barrier-p' somewhat, it's assumed to |