From: Alan Mackenzie Date: Sun, 8 May 2022 13:14:14 +0000 (+0000) Subject: CC Mode: Fix bug in c-parse-state. Fixes bug #55181. X-Git-Tag: emacs-29.0.90~1910^2~903 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f93c94996c7a8062878e1b7e0e7dba74bf5b98cd;p=emacs.git CC Mode: Fix bug in c-parse-state. Fixes bug #55181. * lisp/progmodes/cc-engine.el (c-state-cache-lower-good-pos): When in a literal, return the start of that literal as a "good pos", not the parameter POS. --- diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index b2fa9e06911..ae68bf989a7 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -3422,7 +3422,9 @@ initializing CC Mode. Currently (2020-06) these are `js-mode' and ;; Return a good pos (in the sense of `c-state-cache-good-pos') at the ;; lowest[*] position between POS and HERE which is syntactically equivalent ;; to HERE. This position may be HERE itself. POS is before HERE in the - ;; buffer. + ;; buffer. If POS and HERE are both in the same literal, return the start + ;; of the literal. STATE is the parsing state at POS. + ;; ;; [*] We don't actually always determine this exact position, since this ;; would require a disproportionate amount of work, given that this function ;; deals only with a corner condition, and POS and HERE are typically on @@ -3438,7 +3440,7 @@ initializing CC Mode. Currently (2020-06) these are `js-mode' and (setq pos (point) state s))) (if (eq (point) here) ; HERE is in the same literal as POS - pos + (nth 8 state) ; A valid good pos cannot be in a literal. (setq s (parse-partial-sexp pos here (1+ (car state)) nil state nil)) (cond ((> (car s) (car state)) ; Moved into a paren between POS and HERE