(track-changes--after): Fix problem found in bug#73041
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 17 Oct 2024 15:39:19 +0000 (11:39 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 17 Oct 2024 15:39:19 +0000 (11:39 -0400)
When calling `track-changes--before` (e.g. because of a missing
b-f-c or for some other reason), it sets `track-changes--before-end`
to the right value so we shouldn't increment it right after.
Also, we should update `track-changes--buffer-size` before
calling `track-changes--before` so it doesn't risk signaling
a spurious inconsistency.

* lisp/emacs-lisp/track-changes.el (track-changes--after):
Update `track-changes--buffer-size` earlier, and don't increment
`track-changes--before-end` when we call `track-changes--before`.

lisp/emacs-lisp/track-changes.el

index 92d149597637936a5ee6fd52a474e19a908a36b9..1d5c5e9917a45c1afd46df2abbefbf8d131695d4 100644 (file)
@@ -555,16 +555,16 @@ Details logged to `track-changes--error-log'")
 
 (defun track-changes--after (beg end len)
   (cl-assert track-changes--state)
-  (and (eq track-changes--before-clean 'unset)
-       (not track-changes--before-no)
-       ;; This can be a sign that a `before-change-functions' went missing,
-       ;; or that we called `track-changes--clean-state' between
-       ;; a `before-change-functions' and `after-change-functions'.
-       (track-changes--before beg end))
-  (setq track-changes--before-clean nil)
   (let ((offset (- (- end beg) len)))
-    (cl-incf track-changes--before-end offset)
     (cl-incf track-changes--buffer-size offset)
+    (if (and (eq track-changes--before-clean 'unset)
+             (not track-changes--before-no))
+         ;; This can be a sign that a `before-change-functions' went missing,
+         ;; or that we called `track-changes--clean-state' between
+         ;; a `before-change-functions' and `after-change-functions'.
+         (track-changes--before beg end)
+      (cl-incf track-changes--before-end offset))
+    (setq track-changes--before-clean nil)
     (if (not (or track-changes--before-no
                  (save-restriction
                    (widen)