|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This addresses a bug manifesting itself as a regression in the
behavior of @(freeform), which was reported by Frank Schwidom.
The sub_str operation calls lazy_subs_str for a lazy string.
But lazy_sub_str again relies on sub_str for extracting part
of the lazy string prefix. But sub_str can potentially return
the whole object rather than a copy of a substring of it.
In this case, lazy_sub_str produces a new lazy string object
which shares the prefix string object with the original
lazy string. This is incorrect because the lazy string data
type destructively manipulates the prefix. It means that
operations one one lazy string are mucking with the prefix of
another lazy string.
* lib.c (lazy_sub_str): When creating the new lazy string
object, make a copy of the prefix string pulled from the
original. We do the carefully: the copy of the prefix is made
before the make_obj call which allocates the new lazy string,
otherwise we create a wrong-way assignment from the
perspective of generational GC.
* tests/006/freeform-4.txr: New test case, from Frank.
* tests/006/freeform-4.expected: Expected output of test case.
|