]> git.eshelyaron.com Git - emacs.git/commitdiff
CC Mode: Fix bug in c-parse-state. Fixes bug #55181.
authorAlan Mackenzie <acm@muc.de>
Sun, 8 May 2022 13:14:14 +0000 (13:14 +0000)
committerAlan Mackenzie <acm@muc.de>
Sun, 8 May 2022 13:16:46 +0000 (13:16 +0000)
* 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.

lisp/progmodes/cc-engine.el

index b2fa9e06911a6a59d74bd4f81b5473868ed3aae4..ae68bf989a74f290c4d540567865c1c3ba283317 100644 (file)
@@ -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