summaryrefslogtreecommitdiffstats
path: root/tests/008
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2023-08-02 18:25:14 -0700
committerKaz Kylheku <kaz@kylheku.com>2023-08-02 18:25:14 -0700
commita81edc2c7f1a8110ccc77ef9c73a462af33565dd (patch)
tree76afea00f441c3fae2d8c2c116fda67254796174 /tests/008
parent9d2aa3c66fa52700b213b29ae52d9f08e67d0e2c (diff)
downloadtxr-a81edc2c7f1a8110ccc77ef9c73a462af33565dd.tar.gz
txr-a81edc2c7f1a8110ccc77ef9c73a462af33565dd.tar.bz2
txr-a81edc2c7f1a8110ccc77ef9c73a462af33565dd.zip
bug: :vars not usable with :counter in @(repeat).
This is a regression due to a March 2016 commit which introduced the ability for :vars in an output-side @(repeat) block to have initial values. The bug has the effect that all arguments in @(repeat) which are conses/lists get duplicated, which messes up the property list structure. * parser.y (expand_repeat_rep_args): Do not unconditionally add reg to the output at the bottom of the loop. A few cases above in the consp(arg) case handle that themselves, and do not continue the loop, so control ends up at the bottom, adding a spurious item. By removing this list_collect, we have to introduce it to just one case which relies on it. * tests/008/repeat.txr, * tests/008/repeat.expected: New files. * y.tab.c.shipped: Updated.
Diffstat (limited to 'tests/008')
-rw-r--r--tests/008/repeat.expected3
-rw-r--r--tests/008/repeat.txr6
2 files changed, 9 insertions, 0 deletions
diff --git a/tests/008/repeat.expected b/tests/008/repeat.expected
new file mode 100644
index 00000000..495d096a
--- /dev/null
+++ b/tests/008/repeat.expected
@@ -0,0 +1,3 @@
+1 3 a
+2 3 b
+3 3 c
diff --git a/tests/008/repeat.txr b/tests/008/repeat.txr
new file mode 100644
index 00000000..dba54831
--- /dev/null
+++ b/tests/008/repeat.txr
@@ -0,0 +1,6 @@
+@(bind a ("a" "b" "c"))
+@(output)
+@(repeat :counter (i 1) :vars ((x (len a))))
+@i @x @a
+@(end)
+@(end)