This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Consolidate any single pad ops after a padrange
authorDavid Mitchell <davem@iabyn.com>
Fri, 2 Nov 2012 16:18:20 +0000 (16:18 +0000)
committerDavid Mitchell <davem@iabyn.com>
Sat, 10 Nov 2012 13:39:33 +0000 (13:39 +0000)
commitfd3cc9e5282b97a033e0685520257cf98b326562
treef2a22654c32282912ed7152c62c1b216c2b3c042
parent4774ee0a8f9bc16a2ee4d1603401c927d02c41bc
Consolidate any single pad ops after a padrange

Given something like
    my ($a,$b); my $c; my $d;
then after having detected that we can create a padrange op for $a,$b,
extend it to include $c,$d too.

Together with the previous commit that consolidates adjacent padrange
ops, this means that any contiguous sequence of void 'my' declarations
that starts with a list (i.e. my ($x,..) rather than my $x) will
all be compressed into a single padrange op. For example

    my ($a,$b);
    my @c;
    my %d;
    my ($e,@f);

becomes the two ops

    padrange[$a;$b;@c;%d;$e;@f]
    nextstate

The restriction on the first 'my' being a list is that we only ever
convert pushmarks into padranges, to keep things manageable (both for
compiling and for Deparse). This simply means that

    my $x; my ($a,$b); my @c; my %d; my ($e,@f)

becomes

    padsv[$x]
    nextstate
    padrange[$a;$b;@c;%d;$e;@f]
    nextstate
ext/B/t/optree_misc.t
op.c