diff options
Diffstat (limited to 'lisp/progmodes/cc-engine.el')
-rw-r--r-- | lisp/progmodes/cc-engine.el | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index ce83efd114b..b3a6a0e3f03 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -8486,17 +8486,21 @@ comment at the start of cc-engine.el for more info." (or ;; This will pick up brace list declarations. (c-safe - (save-excursion - (goto-char containing-sexp) - (c-forward-sexp -1) - (let (bracepos) - (if (and (or (looking-at c-brace-list-key) - (progn (c-forward-sexp -1) - (looking-at c-brace-list-key))) - (setq bracepos (c-down-list-forward (point))) - (not (c-crosses-statement-barrier-p (point) - (- bracepos 2)))) - (point))))) + (save-excursion + (goto-char containing-sexp) + (let (before-identifier) + (while + (progn + (c-forward-sexp -1) + (cond + ((c-on-identifier) (setq before-identifier t)) + ((and before-identifier + (looking-at c-postfix-decl-spec-key)) + (setq before-identifier nil) + t) + ((looking-at c-brace-list-key) nil) + (t nil)))) + (looking-at c-brace-list-key)))) ;; this will pick up array/aggregate init lists, even if they are nested. (save-excursion (let ((class-key |