diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-07-22 07:43:33 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-07-22 07:43:33 -0700 |
commit | 183e90ee84334efe3f27ddaa21ea5bb0355dc15d (patch) | |
tree | 8905856ce6569bd6284fec40ed60452167c1ec5a /share | |
parent | 420a230dbae897ee32c03297f7e4bb18f683a8b1 (diff) | |
download | txr-183e90ee84334efe3f27ddaa21ea5bb0355dc15d.tar.gz txr-183e90ee84334efe3f27ddaa21ea5bb0355dc15d.tar.bz2 txr-183e90ee84334efe3f27ddaa21ea5bb0355dc15d.zip |
Improve bad argument diagnosis for place macros.
* eval.c (op_mac_param_bind): New static function.
(eval_init): Register mac-param-bind operator.
* share/txr/stdlib/place.tl (define-place-macro): Use
mac-param-bind inside a lambda instead of tb macro.
* txr.1: Document mac-param-bind.
Diffstat (limited to 'share')
-rw-r--r-- | share/txr/stdlib/place.tl | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/share/txr/stdlib/place.tl b/share/txr/stdlib/place.tl index 67a593fb..e19caa2f 100644 --- a/share/txr/stdlib/place.tl +++ b/share/txr/stdlib/place.tl @@ -310,9 +310,12 @@ ,delete-body))))))))) (defmacro define-place-macro (name place-destructuring-args . body) - (with-gensyms (name-dummy) + (with-gensyms (name-dummy args) ^(sethash *place-macro* ',name - (tb ((,name-dummy ,*place-destructuring-args)) ,*body)))) + (lambda (,args) + (mac-param-bind ,args + (,name-dummy ,*place-destructuring-args) + ,args ,*body))))) (defplace (sys:var arg) body (getter setter |