This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
make MULTICALL handle list context
authorDavid Mitchell <davem@iabyn.com>
Tue, 9 Jun 2015 10:17:44 +0000 (11:17 +0100)
committerDavid Mitchell <davem@iabyn.com>
Fri, 19 Jun 2015 07:44:18 +0000 (08:44 +0100)
commit1f0ba93b9eac4ae12dd4b0e2702f798a6cbf224c
tree36a1bd67e19ac3c70efb9b514d1b171b64bf54ce
parent31ccb4f524a46aa0f0d2009d0dab57added88402
make MULTICALL handle list context

Currently in something like

    for (1,2) { return 3,4 }

the user of MULTICALL will see 1,2,3,4 returned, because in pp_return,
MULTICALL is handled as a special case, and that special-case code doesn't
handle list context.

A simple fix is just to remove the special handling in pp_return.
Allow a MULTICALL return to pass through the normal pp_return stack
manging code, then tail call pp_leavesub or pp_leavesublv as approriate.
Both those subs do an immeidate 'return 0' if CxMULTICALL().

As well as fixing list context MULTICALL, it removes one extra condition
in the path of a normal return.
ext/XS-APItest/APItest.pm
ext/XS-APItest/APItest.xs
ext/XS-APItest/t/multicall.t
pp_ctl.c
pp_hot.c