From 70c3b1aba980a77dcefd77e38e4aecbd495ff346 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 24 Mar 2018 07:31:20 -0700 Subject: 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. --- share/txr/stdlib/compiler.tl | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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)) -- cgit v1.2.3