 into blocks; process it as one large block instead."
   (interactive "P")
   (fstar-subp-start)
-  (let ((limit (fstar-subp-unprocessed-beginning)))
-    (cond
-     ((<= (point) limit) (fstar-subp-retract-until (point)))
-     ((>  (point) limit) (if (consp arg)
-                             (fstar-subp-enqueue-until (point))
-                           (fstar-subp-advance-until (point)))))))
+  (cond
+   ((fstar-subp--in-tracked-region-p)
+    (fstar-subp-retract-until (point)))
+   ((consp arg)
+    (fstar-subp-enqueue-until (point)))
+   (t
+    (fstar-subp-advance-until (point)))))
 
 (defun fstar-subp-advance-or-retract-to-point-lax (&optional arg)
   "Like `fstar-subp-advance-or-retract-to-point' with ARG, in lax mode."

  (let* ((payload (fstar-subp--clean-buffer-substring beg end)))
    (fstar-subp--query (fstar-subp--peek-query beg kind payload) continuation)))

(defun fstar-subp-overlay-attempt-modification (overlay &rest _args)
  "Allow or prevent attempts to modify OVERLAY.

Modifications are only allowed if it is safe to retract up to the beginning of the current overlay."
  (let ((inhibit-modification-hooks t))
    (when (overlay-buffer overlay) ;; Hooks can be called multiple times
      (cond

                         collect `(const :tag ,desc ,mod))))

;;; Utilities

(defconst fstar--spaces "\t\n\r ")

(defun fstar--indent-str (str amount &optional skip-first-line)
  "Indent all lines of STR by AMOUNT.
