summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--share/txr/stdlib/place.tl14
2 files changed, 14 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 710b3f54..0bfa7ee3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-07-11 Kaz Kylheku <kaz@kylheku.com>
+
+ * share/txr/stdlib/place.tl (defplace dwim): Eliminate
+ ogetter-sym variable for caching the sequence; use the getter
+ for the sequence place to access it. Again, this is for placelet,
+ where the caching is visible. Another way to fix this is to
+ clobber the cache variable when updating the sequence place.
+
2015-07-10 Kaz Kylheku <kaz@kylheku.com>
* eval.c (eval_init): Register bindable as intrinsic.
diff --git a/share/txr/stdlib/place.tl b/share/txr/stdlib/place.tl
index af03070f..9cae3974 100644
--- a/share/txr/stdlib/place.tl
+++ b/share/txr/stdlib/place.tl
@@ -417,17 +417,16 @@
oldval-sym dflval-sym)
(let ((sys:*lisp1* (or (symbolp obj-place) sys:*lisp1*)))
(with-update-expander (ogetter-sym osetter-sym) obj-place nil
- ^(rlet ((,obj-sym (,ogetter-sym))
- (,index-sym (sys:l1-val ,index))
+ ^(rlet ((,index-sym (sys:l1-val ,index))
,*(if have-default-p
^((,dflval-sym (sys:l1-val ,default)))))
(macrolet ((,getter ()
- '[,obj-sym ,index-sym
- ,*(if have-default-p ^(,dflval-sym))])
+ '[(,ogetter-sym) ,index-sym
+ ,*(if have-default-p ^(,dflval-sym))])
(,setter (val)
^(rlet ((,',newval-sym ,val))
(,',osetter-sym
- (sys:dwim-set ,',obj-sym
+ (sys:dwim-set (,',ogetter-sym)
,',index-sym ,',newval-sym))
,',newval-sym)))
,body))))))
@@ -437,11 +436,10 @@
(let ((sys:*lisp1* (or (symbolp obj-place) sys:*lisp1*)))
(with-update-expander (ogetter-sym osetter-sym) obj-place nil
^(macrolet ((,ssetter (val)
- ^(rlet ((,',obj-sym (,',ogetter-sym))
- (,',index-sym (sys:l1-val ,',index))
+ ^(rlet ((,',index-sym (sys:l1-val ,',index))
(,',newval-sym ,val))
(,',osetter-sym
- (sys:dwim-set ,',obj-sym
+ (sys:dwim-set (,',ogetter-sym)
,*(if ,have-default-p
^((prog1
,',index-sym