chiark / gitweb /
src/lexer-{proto,impl}.lisp: Add explicit recovery action to `error'.
[sod] / src / lexer-impl.lisp
index 16861793b9a269cb027a2b91d9ee6aae38ee9940..de763712353260a26d72ddd82f918582775e5bfc 100644 (file)
@@ -67,7 +67,7 @@ (defun %skip-until (scanner token-types
     (scanner-step scanner)))
 
 (defun parse-error-recover (scanner parser recover
-                           &key ignore-unconsumed force-progress)
+                           &key ignore-unconsumed force-progress action)
   "This is the implementation of the `error' parser."
   (multiple-value-bind (result win consumedp) (funcall parser)
     (cond ((or win
@@ -93,6 +93,7 @@ (defun parse-error-recover (scanner parser recover
           ;; simply to propagate the current failure back to the caller, but
           ;; we handled that case above.
           (syntax-error scanner result)
+          (when action (funcall action))
           (when (and force-progress (not consumedp)) (scanner-step scanner))
           (funcall recover)))))