summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-07-22 07:43:33 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-07-22 07:43:33 -0700
commit183e90ee84334efe3f27ddaa21ea5bb0355dc15d (patch)
tree8905856ce6569bd6284fec40ed60452167c1ec5a /share
parent420a230dbae897ee32c03297f7e4bb18f683a8b1 (diff)
downloadtxr-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.tl7
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