From 183e90ee84334efe3f27ddaa21ea5bb0355dc15d Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 22 Jul 2015 07:43:33 -0700 Subject: 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. --- share/txr/stdlib/place.tl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'share') 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 -- cgit v1.2.3