bug#55181: CC Mode 5.35.1 (C/*l); c-guess-style not working

Po Lu via CC-Mode-help <[email protected]> Tue, 03 May 2022 12:07:48 +0800
Newsgroups gmane.emacs.cc-mode.general
Message-ID <[email protected]>
(Terribly sorry that your reply got caught in the spam filter.)

Alan Mackenzie <[email protected]> writes:

> diff -r 04b2d5e1eff8 cc-engine.el
> --- a/cc-engine.el	Wed Apr 27 18:05:17 2022 +0000
> +++ b/cc-engine.el	Fri Apr 29 19:56:29 2022 +0000
> @@ -3431,7 +3431,9 @@
>    ;; 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
> @@ -3447,7 +3449,7 @@
>  	  (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
>
> [ CC Mode configuration snipped, but appreciated. ]

This seems to work, thanks.