summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2021-04-26 11:23:33 +0000
committerRicardo Signes <rjbs@semiotic.systems>2021-10-15 09:28:27 -0400
commitbf6e71ff82686b1287ef59c1565cc669d5301cc5 (patch)
treec55666c8154d75867ccb36a1ffe3a59f8b60de0b
parentc386ecc10be9e73917fa6b819321f0cc47cacdb6 (diff)
downloadperl-bf6e71ff82686b1287ef59c1565cc669d5301cc5.tar.gz
B::Deparse now handles n-at-a-time for.
-rw-r--r--lib/B/Deparse.pm15
-rw-r--r--lib/B/Deparse.t10
2 files changed, 23 insertions, 2 deletions
diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm
index 2d33039a80..12f6a63670 100644
--- a/lib/B/Deparse.pm
+++ b/lib/B/Deparse.pm
@@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
MDEREF_SHIFT
);
-$VERSION = '1.58';
+$VERSION = '1.59';
use strict;
our $AUTOLOAD;
use warnings ();
@@ -3954,7 +3954,18 @@ sub loop_common {
} else {
$ary = $self->deparse($ary, 1);
}
- if (null $var) {
+ my $iter_targ = $kid->first->first->targ;
+ if ($iter_targ) {
+ # for my ($foo, $bar) () stores the count (less 1) in the targ of
+ # the ITER op.
+ my @vars;
+ my $targ = $enter->targ;
+ while ($iter_targ-- >= 0) {
+ push @vars, $self->padname_sv($targ)->PVX;
+ ++$targ;
+ }
+ $var = 'my (' . join(', ', @vars) . ')';
+ } elsif (null $var) {
$var = $self->pp_padsv($enter, 1, 1);
} elsif ($var->name eq "rv2gv") {
$var = $self->pp_rv2sv($var, 1);
diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t
index 3904773655..385c63ae7a 100644
--- a/lib/B/Deparse.t
+++ b/lib/B/Deparse.t
@@ -2530,6 +2530,16 @@ foreach \&a (sub { 9; } , sub { 10; } ) {
die;
}
####
+my %hash;
+foreach my ($key, $value) (%hash) {
+ study $_;
+}
+####
+my @ducks;
+foreach my ($tick, $trick, $track) (@ducks) {
+ study $_;
+}
+####
# join $foo, pos
my $foo;
$_ = join $foo, pos