diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-03-24 21:53:09 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-03-24 21:53:09 -0700 |
commit | ccdc56552dafeed328f43fff5aefff1f9773a3a0 (patch) | |
tree | 469d64d78ce7ebb9f5f59e452b19893669f2c87a /share | |
parent | 4e021b03302178f6c79ac75463c82e80ddfae764 (diff) | |
download | txr-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.
Diffstat (limited to 'share')
-rw-r--r-- | share/txr/stdlib/compiler.tl | 7 |
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)))) |