This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[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)
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" })/


Trivial merge