From: Alan Mackenzie Date: Sun, 25 Aug 2013 21:06:07 +0000 (+0000) Subject: Improve indentation of bracelists defined by macros (without "="). X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1686^2~126 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8a51e842321a59943df63faa97d98a390e22211a;p=emacs.git Improve indentation of bracelists defined by macros (without "="). * progmodes/cc-engine.el (c-inside-bracelist-p): When a macro expansion begins with "{", regard it as bracelist when it doesn't contain a ";". --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cbeea784579..cf0864561aa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,11 @@ 2013-08-25 Alan Mackenzie + Improve indentation of bracelists defined by macros (without "="). + + * progmodes/cc-engine.el (c-inside-bracelist-p): When a macro + expansion begins with "{", regard it as bracelist when it doesn't + contain a ";". + Parse C++ inher-intro when there's a template split over 2 lines. * progmodes/cc-engine.el (c-guess-basic-syntax CASE 5C): Code more diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 3d6398014db..b9345b2ae6a 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -8476,10 +8476,10 @@ comment at the start of cc-engine.el for more info." ;; check for the class key here. (and (c-major-mode-is 'pike-mode) c-decl-block-key)) - bufpos braceassignp lim next-containing) + bufpos braceassignp lim next-containing macro-start) (while (and (not bufpos) containing-sexp) - (when paren-state + (when paren-state (if (consp (car paren-state)) (setq lim (cdr (car paren-state)) paren-state (cdr paren-state)) @@ -8560,22 +8560,38 @@ comment at the start of cc-engine.el for more info." )))) nil) (t t)))))) - (if (and (eq braceassignp 'dontknow) - (/= (c-backward-token-2 1 t lim) 0)) - (setq braceassignp nil))) - (if (not braceassignp) - (if (eq (char-after) ?\;) - ;; Brace lists can't contain a semicolon, so we're done. - (setq containing-sexp nil) - ;; Go up one level. - (setq containing-sexp next-containing - lim nil - next-containing nil)) - ;; we've hit the beginning of the aggregate list - (c-beginning-of-statement-1 - (c-most-enclosing-brace paren-state)) - (setq bufpos (point)))) - ) + (if (and (eq braceassignp 'dontknow) + (/= (c-backward-token-2 1 t lim) 0)) + (setq braceassignp nil))) + (cond + (braceassignp + ;; We've hit the beginning of the aggregate list. + (c-beginning-of-statement-1 + (c-most-enclosing-brace paren-state)) + (setq bufpos (point))) + ((eq (char-after) ?\;) + ;; Brace lists can't contain a semicolon, so we're done. + (setq containing-sexp nil)) + ((and (setq macro-start (point)) + (c-forward-to-cpp-define-body) + (eq (point) containing-sexp)) + ;; We've a macro whose expansion starts with the '{'. + ;; Heuristically, if we have a ';' in it we've not got a + ;; brace list, otherwise we have. + (let ((macro-end (progn (c-end-of-macro) (point)))) + (goto-char containing-sexp) + (forward-char) + (if (and (c-syntactic-re-search-forward "[;,]" macro-end t t) + (eq (char-before) ?\;)) + (setq bufpos nil + containing-sexp nil) + (setq bufpos macro-start)))) + (t + ;; Go up one level + (setq containing-sexp next-containing + lim nil + next-containing nil))))) + bufpos)) ))