]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve indentation of bracelists defined by macros (without "=").
authorAlan Mackenzie <acm@muc.de>
Sun, 25 Aug 2013 21:06:07 +0000 (21:06 +0000)
committerAlan Mackenzie <acm@muc.de>
Sun, 25 Aug 2013 21:06:07 +0000 (21:06 +0000)
* progmodes/cc-engine.el (c-inside-bracelist-p): When a macro
expansion begins with "{", regard it as bracelist when it doesn't
contain a ";".

lisp/ChangeLog
lisp/progmodes/cc-engine.el

index cbeea784579d7b8b5989ebffc865370b539fecb0..cf0864561aa0b802a5faae7710a8c6e4034879c5 100644 (file)
@@ -1,5 +1,11 @@
 2013-08-25  Alan Mackenzie  <acm@muc.de>
 
+       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
index 3d6398014dbbd16d3c31472dff243648bb582ffd..b9345b2ae6ae592cbc796b24dfb8f1a37a11260b 100644 (file)
@@ -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))
    ))