1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-31 21:01:23 -08:00

Avoid hangs in python-mode with debug-on-error set

* lisp/progmodes/python.el (python-nav-end-of-statement): Avoid
using cl-assert here, because this is called from the font-lock
machinery, and if debug-on-error is set here, we'll hang Emacs
(bug#54996).

Do not merge to master.
This commit is contained in:
Lars Ingebrigtsen 2022-04-18 13:17:32 +02:00
parent 4684b8e62f
commit 1b77362771

View file

@ -1620,23 +1620,20 @@ of the statement."
;; are somehow out of whack. This has been
;; observed when using `syntax-ppss' during
;; narrowing.
(cl-assert (>= string-start last-string-end)
:show-args
"\
Overlapping strings detected (start=%d, last-end=%d)")
(goto-char string-start)
(if (python-syntax-context 'paren)
;; Ended up inside a paren, roll again.
(python-nav-end-of-statement t)
;; This is not inside a paren, move to the
;; end of this string.
(goto-char (+ (point)
(python-syntax-count-quotes
(char-after (point)) (point))))
(setq last-string-end
(or (re-search-forward
(rx (syntax string-delimiter)) nil t)
(goto-char (point-max))))))
(when (>= string-start last-string-end)
(goto-char string-start)
(if (python-syntax-context 'paren)
;; Ended up inside a paren, roll again.
(python-nav-end-of-statement t)
;; This is not inside a paren, move to the
;; end of this string.
(goto-char (+ (point)
(python-syntax-count-quotes
(char-after (point)) (point))))
(setq last-string-end
(or (re-search-forward
(rx (syntax string-delimiter)) nil t)
(goto-char (point-max)))))))
((python-syntax-context 'paren)
;; The statement won't end before we've escaped
;; at least one level of parenthesis.