summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-09-08 06:44:00 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-09-08 06:44:00 -0700
commitf6946d73027e1f3213336a6fd721f4ab85036664 (patch)
tree8e93cb2cd7026ed149a27495d965065e9ab10eee /share
parent6752067fbbeb3813fe991a02c03dd26dd6aae1b0 (diff)
downloadtxr-f6946d73027e1f3213336a6fd721f4ab85036664.tar.gz
txr-f6946d73027e1f3213336a6fd721f4ab85036664.tar.bz2
txr-f6946d73027e1f3213336a6fd721f4ab85036664.zip
Optimize qref and sys:rslot using slet.
* share/txr/stdlib/struct.tl (qref): Use slet instead of let in expansion so that in the common case of var.(method ...) the expansion simply produces a form with var evaluated in two places. (sys:rslot): Use slet instead of rlet. * tests/012/struct.tl: Update qref expansion test-cases to test for the now simpler expansions.
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/struct.tl6
1 files changed, 3 insertions, 3 deletions
diff --git a/share/txr/stdlib/struct.tl b/share/txr/stdlib/struct.tl
index 9b37ae0b..0f3d79eb 100644
--- a/share/txr/stdlib/struct.tl
+++ b/share/txr/stdlib/struct.tl
@@ -196,11 +196,11 @@
(if (eq dw 'dwim) ^(qref [(slot ,obj ',sym) ,*args] ,*more) :))
(((sym . args))
(let ((osym (gensym)))
- ^(let ((,osym ,obj))
+ ^(slet ((,osym ,obj))
(call (slot ,osym ',sym) ,osym ,*args))))
(((sym . args) . more)
(let ((osym (gensym)))
- ^(qref (let ((,osym ,obj))
+ ^(qref (slet ((,osym ,obj))
(call (slot ,osym ',sym) ,osym ,*args)) ,*more)))
((sym) ^(slot ,obj ',sym))
((sym . more) ^(qref (slot ,obj ',sym) ,*more))
@@ -270,7 +270,7 @@
(defplace (sys:rslot struct sym meth-sym) body
(getter setter
(with-gensyms (struct-sym slot-sym meth-sym)
- ^(rlet ((,struct-sym ,struct)
+ ^(slet ((,struct-sym ,struct)
(,slot-sym ,sym)
(,meth-sym ,meth-sym))
(macrolet ((,getter () ^(slot ,',struct-sym ,',slot-sym))