From 053deeeb7ed42cd6cde5c3959c3a446fd1fd4674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Fri, 6 Jun 2025 01:13:23 -0300 Subject: Optimize code generation by defining bind as function --- base.lisp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'base.lisp') diff --git a/base.lisp b/base.lisp index bbfab80..61c47bc 100644 --- a/base.lisp +++ b/base.lisp @@ -13,18 +13,18 @@ (declare (ignore lazy)) (make-parsing :tree tree :left input))) -(defmacro bind (parser f) - `(lambda (input &key lazy) - (let ((r (funcall ,parser input))) - (cond ((parsing-p r) - (if lazy - (lambda (ignored-input &key lazy) - (declare (ignore ignored-input)) - (funcall (funcall ,f (parsing-tree r) input) - (parsing-left r) - :lazy lazy)) - (funcall (funcall ,f (parsing-tree r) input) - (parsing-left r)))) - ((failure-p r) - r) - (t (error (format nil "Invalid return value: ~a" r))))))) +(defun bind (parser f) + (lambda (input &key lazy) + (let ((r (funcall parser input))) + (cond ((parsing-p r) + (if lazy + (lambda (ignored-input &key lazy) + (declare (ignore ignored-input)) + (funcall (funcall f (parsing-tree r) input) + (parsing-left r) + :lazy lazy)) + (funcall (funcall f (parsing-tree r) input) + (parsing-left r)))) + ((failure-p r) + r) + (t (error (format nil "Invalid return value: ~a" r))))))) -- cgit v1.2.3