summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/place.tl6
1 files changed, 5 insertions, 1 deletions
diff --git a/share/txr/stdlib/place.tl b/share/txr/stdlib/place.tl
index f7e468cf..1d748d99 100644
--- a/share/txr/stdlib/place.tl
+++ b/share/txr/stdlib/place.tl
@@ -327,7 +327,11 @@
^(macrolet ((,ssetter (val) ^(sys:rplacd ,',cell ,val)))
,body))
(deleter
- ^(macrolet ((,deleter () ^(zap (cdr ,',cell))))
+ ^(macrolet ((,deleter ()
+ (with-gensyms (tmp)
+ (with-update-expander (cgetter csetter) ',cell nil
+ ^(let ((,tmp (,cgetter)))
+ (prog1 (cdr ,tmp) (,csetter (car ,tmp))))))))
,body)))
(defplace (vecref vector index :whole args) body