diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2023-08-02 18:25:14 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2023-08-02 18:25:14 -0700 |
commit | a81edc2c7f1a8110ccc77ef9c73a462af33565dd (patch) | |
tree | 76afea00f441c3fae2d8c2c116fda67254796174 /tests/008 | |
parent | 9d2aa3c66fa52700b213b29ae52d9f08e67d0e2c (diff) | |
download | txr-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.expected | 3 | ||||
-rw-r--r-- | tests/008/repeat.txr | 6 |
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) |