summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-24 21:53:09 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-24 21:53:09 -0700
commitccdc56552dafeed328f43fff5aefff1f9773a3a0 (patch)
tree469d64d78ce7ebb9f5f59e452b19893669f2c87a
parent4e021b03302178f6c79ac75463c82e80ddfae764 (diff)
downloadtxr-ccdc56552dafeed328f43fff5aefff1f9773a3a0.tar.gz
txr-ccdc56552dafeed328f43fff5aefff1f9773a3a0.tar.bz2
txr-ccdc56552dafeed328f43fff5aefff1f9773a3a0.zip
compiler: implement dwim special op.
* share/txr/stdlib/compiler.tl (compiler compile): Handle dwim case via comp-dwim. (compiler comp-dwim): New method.
-rw-r--r--share/txr/stdlib/compiler.tl7
1 files changed, 7 insertions, 0 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index 239c3a4e..7deddcae 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -192,6 +192,7 @@
(mac-param-bind me.(comp-mac-param-bind oreg env form))
(tree-case me.(comp-tree-case oreg env form))
(sys:lisp1-value me.(comp-lisp1-value oreg env form))
+ (dwim me.(comp-dwim oreg env form))
(sys:upenv me.(compile oreg env.up (cadr form)))
(sys:dvbind me.(compile oreg env (caddr form)))
(sys:with-dyn-rebinds me.(comp-progn oreg env (cddr form)))
@@ -797,6 +798,12 @@
(list arg))))))
(t me.(compile oreg env arg)))))
+(defmeth compiler comp-dwim (me oreg env form)
+ (mac-param-bind form (op obj . args) form
+ (let ((l1-exprs (cdr form)))
+ me.(compile oreg env
+ ^(call ,*(mapcar (op list 'sys:lisp1-value) l1-exprs))))))
+
(defun maybe-mov (to-reg from-reg)
(if (nequal to-reg from-reg)
^((mov ,to-reg ,from-reg))))