From: Stefan Monnier Date: Fri, 16 Jun 2023 17:14:27 +0000 (-0400) Subject: * lisp/emacs-lisp/lisp-mode.el (lisp-ppss): Fix performance bug X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f411cc3a9578eae4ea4549959109817a467f9a16;p=emacs.git * lisp/emacs-lisp/lisp-mode.el (lisp-ppss): Fix performance bug (nth 2 ppss) can be absent but not incorrect, so don't recompute ppss for (nth 2 ppss) when (nth 2 ppss) is already provided. When calling `lisp-indent-line` on all the lines in a region, this sometimes introduced a gratuitous O(N²) complexity. --- diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index d44c9d6e23d..9914ededb85 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -876,7 +876,7 @@ complete sexp in the innermost containing list at position 2 (counting from 0). This is important for Lisp indentation." (unless pos (setq pos (point))) (let ((pss (syntax-ppss pos))) - (if (nth 9 pss) + (if (and (not (nth 2 pss)) (nth 9 pss)) (let ((sexp-start (car (last (nth 9 pss))))) (parse-partial-sexp sexp-start pos nil nil (syntax-ppss sexp-start))) pss)))