summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-07-21 20:37:59 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-07-21 20:37:59 -0700
commit701d5ff8c6a2d4ca6023be345faf4f085db6c689 (patch)
treeabe7bc64bb157ddbba61b4dedf37b795912eeade /share
parentdd270e9350901f7b750364d167dcd880038cb86f (diff)
downloadtxr-701d5ff8c6a2d4ca6023be345faf4f085db6c689.tar.gz
txr-701d5ff8c6a2d4ca6023be345faf4f085db6c689.tar.bz2
txr-701d5ff8c6a2d4ca6023be345faf4f085db6c689.zip
* share/txr/stdlib/place.tl (defplace cdr): Change deletion
semantics so that (del (cdr x)) is symmetric with (del (car x)). * txr.1: Update documentation.
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