From eb805f9412c30531d9e051afbf8727b72a27f933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Sat, 24 Oct 2026 13:45:52 -0300 Subject: Read tracking --- base.lisp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/base.lisp b/base.lisp index 5531562..d829e6e 100644 --- a/base.lisp +++ b/base.lisp @@ -22,13 +22,23 @@ (defun parse (parser data) (funcall parser (make-cursor :data data))) +(declaim (ftype (function (parser string) parser) append-on-failure)) +(defun append-on-failure (p message) + (lambda (input) + (let ((result (funcall p input))) + (if (failure-p result) + (make-failure :place (result-place result) + :message (concatenate 'string message (failure-message result)) + :priority (failure-priority result)) + result)))) + (defmacro defparser (name args parser) (let ((message (format nil "In ~a:~&" name))) (if (and (listp args) (every #'symbolp args)) (let (definition) (when (= (length args) 0) (push `(defparameter ,name (,name)) definition)) - (push `(defun ,name (,@args) ,parser) + (push `(defun ,name (,@args) (append-on-failure ,parser ,message)) definition) (push 'progn definition) definition) -- cgit v1.2.3