src/method-impl.lisp, etc.: Add a `readonly' message property.
[sod] / src / lexer-impl.lisp
index 1686179..ccaca5c 100644 (file)
@@ -67,7 +67,7 @@
     (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 @@
           ;; 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)))))
 
 
          ;; Some special punctuation sequences are single tokens.
          ("..." (values :ellipsis nil))
+         ("==" (values :eq))
+         ("!=" (values :ne))
+         ("<=" (values :le))
+         (">=" (values :ge))
+         ("&&" (values :and))
+         ("||" (values :or))
+         ("<<" (values :shl))
+         (">>" (values :shr))
 
          ;; Any other character is punctuation.
          (:any (values it nil))