* lisp/emacs-lisp/lisp-mode.el (lisp--el-non-funcall-position-p):

Avoid pathological slowdown at top-level in large file.
This commit is contained in:
Stefan Monnier 2015-04-15 16:39:18 -04:00
parent 17a8618dc7
commit 59fd76c178

View file

@ -181,22 +181,23 @@
nil)))
res))
(defun lisp--el-non-funcall-position-p (&optional pos)
(defun lisp--el-non-funcall-position-p (pos)
"Heuristically determine whether POS is an evaluated position."
(setf pos (or pos (point)))
(save-match-data
(save-excursion
(ignore-errors
(goto-char pos)
(or (eql (char-before) ?\')
(let ((parent
(progn
(up-list -1)
(cond
(let* ((ppss (syntax-ppss))
(paren-posns (nth 9 ppss))
(parent
(when paren-posns
(goto-char (car (last paren-posns))) ;(up-list -1)
(cond
((ignore-errors
(and (eql (char-after) ?\()
(progn
(up-list -1)
(when (cdr paren-posns)
(goto-char (car (last paren-posns 2)))
(looking-at "(\\_<let\\*?\\_>"))))
(goto-char (match-end 0))
'let)