[MERGE] fixups for OP_MULTICONCAT
authorDavid Mitchell <davem@iabyn.com>
Mon, 19 Feb 2018 22:20:40 +0000 (22:20 +0000)
committerDavid Mitchell <davem@iabyn.com>
Mon, 19 Feb 2018 22:20:40 +0000 (22:20 +0000)
commitf7675015b1fdb2eee619d34c20a279db07dcf844
tree4be98d26838e5f349e32dcb885052f6400547372
parent6d37ab4efc1fb099593fb29406193ae79c3be543
parent8327fe931a244c33965f30d2ba4bbe7248016951
[MERGE] fixups for OP_MULTICONCAT

This branch fixes three main issues caused by the OP_MULTICONCAT
optimisation:

* When dealing with magic/tie/overloading, there were many edge cases;
the way these are handled has been completely rewritten, fixing
bugs related to exactly when and how args are sringified and/or tested
for undefinedness;

* relatedly,  on a stringified concat such as $x .= "$y", or
$a = "$b$c$d", the stringification is honoured under exactly the same
(buggy) set of conditions that pertained before multiconcat was
introduced; this is noticable in overloading whether the result calls the
stringify method and thus returns a plain string, or whether it skips that
and returns an overloaded object, e.g. for $a = "$b$c$d", does $a end up
as a ref or a string. Before the branch it was always a ref, now its
sometimes a string.

* concats within a runtime pattern code block could crash, e.g.

    /$a(?{  $b . "c" })/