# HG changeset patch # User Alan Mackenzie # Date 1214038849 0 # Node ID 598aca8e5d9d50af184c62db937b52a2c0b94eda # Parent 814c1811dfe0c500d69898db6da5bdc9ef5bd762 (c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax. diff -r 814c1811dfe0 -r 598aca8e5d9d lisp/progmodes/cc-engine.el --- a/lisp/progmodes/cc-engine.el Sat Jun 21 08:59:50 2008 +0000 +++ b/lisp/progmodes/cc-engine.el Sat Jun 21 09:00:49 2008 +0000 @@ -8252,21 +8252,24 @@ (c-add-syntax 'inher-cont (c-point 'boi))) ;; CASE 5D.5: Continuation of the "expression part" of a - ;; top level construct. + ;; top level construct. Or, perhaps, an unrecognised construct. (t - (while (and (eq (car (c-beginning-of-decl-1 containing-sexp)) + (while (and (setq placeholder (point)) + (eq (car (c-beginning-of-decl-1 containing-sexp)) 'same) (save-excursion (c-backward-syntactic-ws) - (eq (char-before) ?})))) + (eq (char-before) ?})) + (< (point) placeholder))) (c-add-stmt-syntax - (if (eq char-before-ip ?,) + (cond + ((eq (point) placeholder) 'statement) ; unrecognised construct ;; A preceding comma at the top level means that a ;; new variable declaration starts here. Use ;; topmost-intro-cont for it, for consistency with ;; the first variable declaration. C.f. case 5N. - 'topmost-intro-cont - 'statement-cont) + ((eq char-before-ip ?,) 'topmost-intro-cont) + (t 'statement-cont)) nil nil containing-sexp paren-state)) ))