emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 5601eb2: * lisp/emacs-lisp/syntax.el (syntax-propertize): Use run


From: Stefan Monnier
Subject: master 5601eb2: * lisp/emacs-lisp/syntax.el (syntax-propertize): Use run-hook-wrapped
Date: Mon, 11 May 2020 00:15:23 -0400 (EDT)

branch: master
commit 5601eb231fe1467b2949d7cdc57d8fefb81540e2
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * lisp/emacs-lisp/syntax.el (syntax-propertize): Use run-hook-wrapped
    
    This way we avoid making assumptions about the content of
    syntax-propertize-extend-region-functions
---
 lisp/emacs-lisp/syntax.el | 38 +++++++++++++++++++++-----------------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el
index 11cc198..3294378 100644
--- a/lisp/emacs-lisp/syntax.el
+++ b/lisp/emacs-lisp/syntax.el
@@ -345,23 +345,27 @@ END) suitable for `syntax-propertize-function'."
                    (end (max pos
                              (min (point-max)
                                   (+ start syntax-propertize-chunk-size))))
-                   (funs syntax-propertize-extend-region-functions))
-              (while funs
-                (let ((new (funcall (pop funs) start end))
-                      ;; Avoid recursion!
-                      (syntax-propertize--done most-positive-fixnum))
-                  (if (or (null new)
-                          (and (>= (car new) start) (<= (cdr new) end)))
-                      nil
-                    (setq start (car new))
-                    (setq end (cdr new))
-                    ;; If there's been a change, we should go through the
-                    ;; list again since this new position may
-                    ;; warrant a different answer from one of the funs we've
-                    ;; already seen.
-                    (unless (eq funs
-                                (cdr 
syntax-propertize-extend-region-functions))
-                      (setq funs syntax-propertize-extend-region-functions)))))
+                   (first t)
+                   (repeat t))
+              (while repeat
+                (setq repeat nil)
+                (run-hook-wrapped
+                 'syntax-propertize-extend-region-functions
+                 (lambda (f)
+                   (let ((new (funcall f start end))
+                         ;; Avoid recursion!
+                         (syntax-propertize--done most-positive-fixnum))
+                     (if (or (null new)
+                             (and (>= (car new) start) (<= (cdr new) end)))
+                         nil
+                       (setq start (car new))
+                       (setq end (cdr new))
+                       ;; If there's been a change, we should go through the
+                       ;; list again since this new position may
+                       ;; warrant a different answer from one of the funs we've
+                       ;; already seen.
+                       (unless first (setq repeat t))))
+                   (setq first nil))))
               ;; Flush ppss cache between the original value of `start' and 
that
               ;; set above by syntax-propertize-extend-region-functions.
               (syntax-ppss-flush-cache start)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]