From fc68528cf5a7714848d1f4c6ba855b763c49a85e Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 25 Nov 2015 20:45:50 -0800 Subject: Bugfix: sethash doesn't return stored value. sethash mistakenly returns a boolean which indicates that the value was newly added, rather than the documented behavior of returning the new value. * hash.c (sethash): return value rather than new_p. * share/txr/stdlib/place.tl (defplace): The defplace form now seturn the main symbol of the place being defined, rather than returning whatever the last sethash call returns. (define-place-macro): Likewise. (sys:register-simple-accessor): Likewise, so that defaccessor returns the getter function's name. --- share/txr/stdlib/place.tl | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'share') diff --git a/share/txr/stdlib/place.tl b/share/txr/stdlib/place.tl index 81a506a5..29c8e1fa 100644 --- a/share/txr/stdlib/place.tl +++ b/share/txr/stdlib/place.tl @@ -312,15 +312,18 @@ ^((sethash *place-delete-expander* ',name (lambda (,deleter-sym ,place ,body-sym) (tree-bind ,args (cdr ,place) - ,delete-body))))))))) + ,delete-body))))) + ',name)))) (defmacro define-place-macro (name place-destructuring-args . body) (with-gensyms (name-dummy args) - ^(sethash *place-macro* ',name - (lambda (,args) - (mac-param-bind ,args - (,name-dummy ,*place-destructuring-args) - ,args ,*body))))) + ^(progn + (sethash *place-macro* ',name + (lambda (,args) + (mac-param-bind ,args + (,name-dummy ,*place-destructuring-args) + ,args ,*body))) + ',name))) (defplace (sys:var arg) body (getter setter @@ -666,7 +669,8 @@ (lambda (ssetter place body) ^(macrolet ((,ssetter (val) ^(,',set-fun ,*(cdr ',place) ,val))) - ,body)))) + ,body))) + get-fun) (defmacro define-accessor (get-fun set-fun) ^(sys:register-simple-accessor ',get-fun ',set-fun)) -- cgit v1.2.3