]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/lisp-mode.el (lisp-ppss): Fix performance bug
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 16 Jun 2023 17:14:27 +0000 (13:14 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 17 Jun 2023 21:10:50 +0000 (17:10 -0400)
(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.

lisp/emacs-lisp/lisp-mode.el

index d44c9d6e23dae142561bdfb24a42958ba0bb97e4..9914ededb85dbf4ef4de34435f85524ef9b1a387 100644 (file)
@@ -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)))