From 2f35789d67115ccd7288ce0b759d6b52c08dde4c Mon Sep 17 00:00:00 2001 From: akater Date: Mon, 8 Nov 2021 04:48:13 +0000 Subject: [PATCH] ; * lisp/emacs-lisp/lisp-mode.el: Fix parser state corruption. * lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p): Preserve the point * test/lisp/progmodes/elisp-mode-resources/flet.erts: Add corresponding test example --- lisp/emacs-lisp/lisp-mode.el | 13 +++++++------ test/lisp/progmodes/elisp-mode-resources/flet.erts | 10 ++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 15afdef0252..d90d0f5f6ac 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -1148,12 +1148,13 @@ defun lisp--local-defform-body-p (state) ;; that starts a sexp. t) (point)))))) - (ignore-errors - ;; We rely on `backward-up-list' working - ;; even when sexp is incomplete “to the right”. - (backward-up-list 2) - t) - (= local-definitions-starting-point (point)))))))) + (save-excursion + (when (ignore-errors + ;; We rely on `backward-up-list' working + ;; even when sexp is incomplete “to the right”. + (backward-up-list 2) + t) + (= local-definitions-starting-point (point)))))))))) (defun lisp-indent-function (indent-point state) "This function is the normal value of the variable `lisp-indent-function'. diff --git a/test/lisp/progmodes/elisp-mode-resources/flet.erts b/test/lisp/progmodes/elisp-mode-resources/flet.erts index 7c4a0f304e9..da3dcb6ec3e 100644 --- a/test/lisp/progmodes/elisp-mode-resources/flet.erts +++ b/test/lisp/progmodes/elisp-mode-resources/flet.erts @@ -221,6 +221,16 @@ Name: flet15 i))) =-=-= +Name: flet16 + +=-= +(cl-flet ((f (x) + (g x))) + (pcase e + ((dangerous-expression) + (form)))) +=-=-= + Name: flet-indentation-incomplete-sexp-no-side-effects-1 Code: (lambda () (emacs-lisp-mode) (setq indent-tabs-mode nil) (newline nil t)) Point-Char: | -- 2.32.0