diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-03-24 07:31:20 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-03-24 07:31:20 -0700 |
commit | 1c0adab3cbadb8fe31d29297c64fd0f1cacaac04 (patch) | |
tree | 02eb787d02b1f0b2d4e1d080e31771053775a192 | |
parent | 878c0dded993f02f19d4a46c365b5bd12e3d9030 (diff) | |
download | txr-1c0adab3cbadb8fe31d29297c64fd0f1cacaac04.tar.gz txr-1c0adab3cbadb8fe31d29297c64fd0f1cacaac04.tar.bz2 txr-1c0adab3cbadb8fe31d29297c64fd0f1cacaac04.zip |
compiler: implement mac-param-bind.
* share/txr/stdlib/compiler.tl (compiler compile): Wire in
tree-bind case via comp-mac-param-bind method.
(compiler comp-mac-param-bind): New method.
-rw-r--r-- | share/txr/stdlib/compiler.tl | 12 |
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)) |