summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/compiler.tl12
1 files changed, 12 insertions, 0 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index 00e758ea..f1e1401a 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -175,6 +175,7 @@
(sys:quasi me.(comp-quasi oreg env form))
(dohash me.(compile oreg env (expand-dohash form)))
(tree-bind me.(comp-tree-bind oreg env form))
+ (mac-param-bind me.(comp-mac-param-bind oreg env form))
(tree-case me.(comp-tree-case oreg env form))
(sys:upenv me.(compile oreg env.up (cadr form)))
(sys:dvbind me.(compile oreg env (caddr form)))
@@ -636,6 +637,17 @@
obj-var t nil body)))))
me.(compile oreg env expn)))))
+(defmeth compiler comp-mac-param-bind (me oreg env form)
+ (mac-param-bind form (op context params obj . body) form
+ (with-gensyms (obj-var form-var)
+ (let ((expn (expand ^(let* ((,obj-var ,obj)
+ (,form-var ,context))
+ ,(expand-bind-mac-params form-var
+ form-var
+ params nil
+ obj-var t nil body)))))
+ me.(compile oreg env expn)))))
+
(defmeth compiler comp-tree-case (me oreg env form)
(mac-param-bind form (op obj . cases) form
(let* ((ncases (len cases))