This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
clear_defarray(): clear @_ if possible
authorDavid Mitchell <davem@iabyn.com>
Sat, 11 Jul 2015 10:05:55 +0000 (11:05 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 3 Feb 2016 08:59:35 +0000 (08:59 +0000)
commitc3d969bf8c6373a9f0535609542576f0a0ba221a
treebbc1cf341ea327c2fe2c19f1caff263ae632f3b5
parent95b2f486579b731481fbd80debadc4504e6fc8fc
clear_defarray(): clear @_ if possible

clear_defarray() is called during sub exit to clean up @_ in the
less common case where @_ has somehow gotten reified.

At the moment it just frees the old @_, then creates a new AV and
sticks it in pad[0].

This commit changes it so that for the reasonably common case of a reified
@_ where it's not magical and only has a reference count of 1, just call
av_clear() on it, rather than freeing and recreating.

Typical code that will benefit from this change is be something like:

    sub f { push @_, ...; ... }

which causes the AV to be reified, but not to become otherwise visible.
pp_hot.c