1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-03 08:30:09 +00:00

Fix confusion in C++ file caused by comma in "= {1,2},".

cc-engine.el (c-beginning-of-statement-1): In checking for a statement
boundary marked by "}", check there's no "=" before the "{".
(c-guess-basic-syntax CASE 9B): Call c-beginning-of-statement with
non-nil `comma-delim' argument.
cc-fonts.el (c-font-lock-declarators): Parse an initializer expression
more accurately.
This commit is contained in:
Alan Mackenzie 2014-08-02 18:52:48 +00:00
parent dbc471b133
commit d6c17223fe
3 changed files with 36 additions and 8 deletions

View File

@ -1,5 +1,15 @@
2014-08-02 Alan Mackenzie <acm@muc.de>
Fix confusion in C++ file caused by comma in "= {1,2},". Bug
#17756.
* progmodes/cc-engine.el (c-beginning-of-statement-1): In checking
for a statement boundary marked by "}", check there's no "="
before the "{".
(c-guess-basic-syntax CASE 9B): Call c-beginning-of-statement with
non-nil `comma-delim' argument.
* progmodes/cc-fonts.el (c-font-lock-declarators): Parse an
initializer expression more accurately.
Correct loop termination condition in c-syntactic-skip-backward.
* progmodes/cc-engine.el (c-syntactic-skip-backward): Correct for
the situation where, after moving back out of a literal,

View File

@ -1033,7 +1033,10 @@ comment at the start of cc-engine.el for more info."
;; Just gone back over a brace block?
((and
(eq (char-after) ?{)
(not (c-looking-at-inexpr-block lim nil t)))
(not (c-looking-at-inexpr-block lim nil t))
(save-excursion
(c-backward-token-2 1 t nil)
(not (looking-at "=\\([^=]\\|$\\)"))))
(save-excursion
(c-forward-sexp) (point)))
;; Just gone back over some paren block?
@ -10476,7 +10479,7 @@ comment at the start of cc-engine.el for more info."
(if (eq (point) (c-point 'boi))
(c-add-syntax 'brace-list-close (point))
(setq lim (c-most-enclosing-brace c-state-cache (point)))
(c-beginning-of-statement-1 lim)
(c-beginning-of-statement-1 lim nil nil t)
(c-add-stmt-syntax 'brace-list-close nil t lim paren-state)))
(t

View File

@ -1037,7 +1037,8 @@ casts and declarations are fontified. Used on level 2 and higher."
paren-depth
id-face got-init
c-last-identifier-range
(separator-prop (if types 'c-decl-type-start 'c-decl-id-start)))
(separator-prop (if types 'c-decl-type-start 'c-decl-id-start))
brackets-after-id)
;; The following `while' fontifies a single declarator id each time round.
;; It loops only when LIST is non-nil.
@ -1110,13 +1111,24 @@ casts and declarations are fontified. Used on level 2 and higher."
;; Search syntactically to the end of the declarator (";",
;; ",", a closing paren, eob etc) or to the beginning of an
;; initializer or function prototype ("=" or "\\s\(").
;; Note that the open paren will match array specs in
;; square brackets, and we treat them as initializers too.
(c-syntactic-re-search-forward
"[;,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" limit t t))
;; Note that square brackets are now not also treated as
;; initializers, since this broke when there were also
;; initializing brace lists.
(let (found)
(while
(and (setq found
(c-syntactic-re-search-forward
"[;,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" limit t t))
(eq (char-before) ?\[))
(backward-char)
(c-safe (c-forward-sexp 1))
(setq found nil)
(setq brackets-after-id t))
found))
(setq next-pos (match-beginning 0)
id-face (if (and (eq (char-after next-pos) ?\()
(not brackets-after-id)
(let (c-last-identifier-range)
(save-excursion
(goto-char next-pos)
@ -1486,9 +1498,12 @@ casts and declarations are fontified. Used on level 2 and higher."
c-recognize-knr-p) ; Strictly speaking, bogus, but it
; speeds up lisp.h tremendously.
(save-excursion
(unless (or (eobp)
(looking-at "\\s(\\|\\s)"))
(forward-char))
(setq bod-res (car (c-beginning-of-decl-1 decl-search-lim)))
(if (and (eq bod-res 'same)
(progn
(save-excursion
(c-backward-syntactic-ws)
(eq (char-before) ?\})))
(c-beginning-of-decl-1 decl-search-lim))