]> git.eshelyaron.com Git - emacs.git/commitdiff
(syntax-ppss-flush-cache): Fix corner boundary case.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 21 Oct 2005 06:01:22 +0000 (06:01 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 21 Oct 2005 06:01:22 +0000 (06:01 +0000)
Suggested by Martin Rudalics <rudalics@gmx.at>.

lisp/emacs-lisp/syntax.el

index 126c8d50dd949708859cce6e014b8b54305fac50..6c8973194332e813514546ad1c91de308b1e50b1 100644 (file)
@@ -83,10 +83,14 @@ point (where the PPSS is equivalent to nil).")
     (setq syntax-ppss-cache (cdr syntax-ppss-cache)))
   ;; Throw away `last' value if made invalid.
   (when (< beg (or (car syntax-ppss-last) 0))
-    (if (< beg (or (car (nth 10 syntax-ppss-last))
-                  (nth 9 syntax-ppss-last)
-                  (nth 2 syntax-ppss-last)
-                  0))
+    ;; If syntax-begin-function jumped to BEG, then the old state at BEG can
+    ;; depend on the text after BEG (which is presumably changed).  So if
+    ;; BEG=(car (nth 10 syntax-ppss-last)) don't reuse that data because the
+    ;; assumed nil state at BEG may not be valid any more.
+    (if (<= beg (or (car (nth 10 syntax-ppss-last))
+                    (nth 9 syntax-ppss-last)
+                    (nth 2 syntax-ppss-last)
+                    0))
        (setq syntax-ppss-last nil)
       (setcar syntax-ppss-last nil)))
   ;; Unregister if there's no cache left.  Sadly this doesn't work
@@ -293,5 +297,5 @@ Point is at POS when this function returns."
 
 (provide 'syntax)
 
-;;; arch-tag: 302f1eeb-e77c-4680-a8c5-c543e01161a5
+;; arch-tag: 302f1eeb-e77c-4680-a8c5-c543e01161a5
 ;;; syntax.el ends here