summaryrefslogtreecommitdiff
path: root/base.lisp
diff options
context:
space:
mode:
authorJuan Manuel Tomás <jtomas1815@gmail.com>2025-06-06 01:13:23 -0300
committerJuan Manuel Tomás <jtomas1815@gmail.com>2025-06-06 01:13:23 -0300
commit053deeeb7ed42cd6cde5c3959c3a446fd1fd4674 (patch)
treeec7c580256eec8ce8e5140a9bb1733bf9e202b03 /base.lisp
parent2e8323c2af42e817e98eb931eb733dc42c832448 (diff)
downloadmonparser-053deeeb7ed42cd6cde5c3959c3a446fd1fd4674.tar.gz
monparser-053deeeb7ed42cd6cde5c3959c3a446fd1fd4674.zip
Optimize code generation by defining bind as function
Diffstat (limited to 'base.lisp')
-rw-r--r--base.lisp30
1 files changed, 15 insertions, 15 deletions
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)))))))