Commit 8a51e842 authored by Alan Mackenzie's avatar Alan Mackenzie
Browse files

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 ";".
parent e687aa33
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
......
......@@ -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))
))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment