diff options
Diffstat (limited to 'share')
-rw-r--r-- | share/txr/stdlib/place.tl | 6 |
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 |