1*256a93a4Safresh1#!perl 2*256a93a4Safresh1 3*256a93a4Safresh1BEGIN { 4*256a93a4Safresh1 unshift @INC, 't'; 5*256a93a4Safresh1 require Config; 6*256a93a4Safresh1 if (($Config::Config{'extensions'} !~ /\bB\b/) ){ 7*256a93a4Safresh1 print "1..0 # Skip -- Perl configured without B module\n"; 8*256a93a4Safresh1 exit 0; 9*256a93a4Safresh1 } 10*256a93a4Safresh1} 11*256a93a4Safresh1use OptreeCheck; 12*256a93a4Safresh1plan tests => 19; 13*256a93a4Safresh1 14*256a93a4Safresh1pass("FOR LOOPS"); 15*256a93a4Safresh1 16*256a93a4Safresh1checkOptree ( name => 'for (@a)', 17*256a93a4Safresh1 code => sub {for (@a) {}}, 18*256a93a4Safresh1 bcopts => '-exec', 19*256a93a4Safresh1 strip_open_hints => 1, 20*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 21*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:14) v:>,<,% 22*256a93a4Safresh12 <0> pushmark sM 23*256a93a4Safresh13 <#> gv[*a] s 24*256a93a4Safresh14 <1> rv2av[t2] sKRM/1 25*256a93a4Safresh15 <#> gv[*_] s 26*256a93a4Safresh16 <{> enteriter(next->8 last->b redo->7) KS/DEF 27*256a93a4Safresh19 <0> iter s 28*256a93a4Safresh1a <|> and(other->7) K/1 29*256a93a4Safresh17 <0> stub v 30*256a93a4Safresh18 <0> unstack s 31*256a93a4Safresh1 goto 9 32*256a93a4Safresh1b <2> leaveloop K/2 33*256a93a4Safresh1c <1> leavesub[1 ref] K/REFC,1 34*256a93a4Safresh1EOT_EOT 35*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:14) v:>,<,% 36*256a93a4Safresh12 <0> pushmark sM 37*256a93a4Safresh13 <$> gv(*a) s 38*256a93a4Safresh14 <1> rv2av[t1] sKRM/1 39*256a93a4Safresh15 <$> gv(*_) s 40*256a93a4Safresh16 <{> enteriter(next->8 last->b redo->7) KS/DEF 41*256a93a4Safresh19 <0> iter s 42*256a93a4Safresh1a <|> and(other->7) K/1 43*256a93a4Safresh17 <0> stub v 44*256a93a4Safresh18 <0> unstack s 45*256a93a4Safresh1 goto 9 46*256a93a4Safresh1b <2> leaveloop K/2 47*256a93a4Safresh1c <1> leavesub[1 ref] K/REFC,1 48*256a93a4Safresh1EONT_EONT 49*256a93a4Safresh1 50*256a93a4Safresh1my @lexical; 51*256a93a4Safresh1 52*256a93a4Safresh1checkOptree ( name => 'for (@lexical)', 53*256a93a4Safresh1 code => sub {for (@lexical) {}}, 54*256a93a4Safresh1 bcopts => '-exec', 55*256a93a4Safresh1 strip_open_hints => 1, 56*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 57*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:14) v:>,<,% 58*256a93a4Safresh12 <0> pushmark sM 59*256a93a4Safresh13 <0> padav[@lexical:FAKE::7] sRM 60*256a93a4Safresh14 <#> gv[*_] s 61*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6) KS/DEF 62*256a93a4Safresh18 <0> iter s 63*256a93a4Safresh19 <|> and(other->6) K/1 64*256a93a4Safresh16 <0> stub v 65*256a93a4Safresh17 <0> unstack s 66*256a93a4Safresh1 goto 8 67*256a93a4Safresh1a <2> leaveloop K/2 68*256a93a4Safresh1b <1> leavesub[2 refs] K/REFC,1 69*256a93a4Safresh1EOT_EOT 70*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:14) v:>,<,% 71*256a93a4Safresh12 <0> pushmark sM 72*256a93a4Safresh13 <0> padav[@lexical:FAKE::2] sRM 73*256a93a4Safresh14 <$> gv(*_) s 74*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6) KS/DEF 75*256a93a4Safresh18 <0> iter s 76*256a93a4Safresh19 <|> and(other->6) K/1 77*256a93a4Safresh16 <0> stub v 78*256a93a4Safresh17 <0> unstack s 79*256a93a4Safresh1 goto 8 80*256a93a4Safresh1a <2> leaveloop K/2 81*256a93a4Safresh1b <1> leavesub[2 refs] K/REFC,1 82*256a93a4Safresh1EONT_EONT 83*256a93a4Safresh1 84*256a93a4Safresh1checkOptree ( name => 'for $var (@a)', 85*256a93a4Safresh1 code => sub {for $var (@a) {}}, 86*256a93a4Safresh1 bcopts => '-exec', 87*256a93a4Safresh1 strip_open_hints => 1, 88*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 89*256a93a4Safresh11 <;> nextstate(main 1453 optree_for.t:68) v:{ 90*256a93a4Safresh12 <0> pushmark sM 91*256a93a4Safresh13 <#> gv[*a] s 92*256a93a4Safresh14 <1> rv2av[t3] sKRM/1 93*256a93a4Safresh15 <#> gv[*var] s 94*256a93a4Safresh16 <1> rv2gv sKRM/1 95*256a93a4Safresh17 <{> enteriter(next->9 last->c redo->8) KS 96*256a93a4Safresh1a <0> iter s 97*256a93a4Safresh1b <|> and(other->8) K/1 98*256a93a4Safresh18 <0> stub v 99*256a93a4Safresh19 <0> unstack s 100*256a93a4Safresh1 goto a 101*256a93a4Safresh1c <2> leaveloop KP/2 102*256a93a4Safresh1d <1> leavesub[1 ref] K/REFC,1 103*256a93a4Safresh1EOT_EOT 104*256a93a4Safresh11 <;> nextstate(main 1453 optree_for.t:67) v:{ 105*256a93a4Safresh12 <0> pushmark sM 106*256a93a4Safresh13 <$> gv(*a) s 107*256a93a4Safresh14 <1> rv2av[t1] sKRM/1 108*256a93a4Safresh15 <$> gv(*var) s 109*256a93a4Safresh16 <1> rv2gv sKRM/1 110*256a93a4Safresh17 <{> enteriter(next->9 last->c redo->8) KS 111*256a93a4Safresh1a <0> iter s 112*256a93a4Safresh1b <|> and(other->8) K/1 113*256a93a4Safresh18 <0> stub v 114*256a93a4Safresh19 <0> unstack s 115*256a93a4Safresh1 goto a 116*256a93a4Safresh1c <2> leaveloop KP/2 117*256a93a4Safresh1d <1> leavesub[1 ref] K/REFC,1 118*256a93a4Safresh1EONT_EONT 119*256a93a4Safresh1 120*256a93a4Safresh1checkOptree ( name => 'for my $var (@a)', 121*256a93a4Safresh1 code => sub {for my $var (@a) {}}, 122*256a93a4Safresh1 bcopts => '-exec', 123*256a93a4Safresh1 strip_open_hints => 1, 124*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 125*256a93a4Safresh11 <;> nextstate(main 1459 optree_for.t:90) v 126*256a93a4Safresh12 <0> pushmark sM 127*256a93a4Safresh13 <#> gv[*a] s 128*256a93a4Safresh14 <1> rv2av[t3] sKRM/1 129*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$var:1460,1463] KS/LVINTRO 130*256a93a4Safresh18 <0> iter s 131*256a93a4Safresh19 <|> and(other->6) K/1 132*256a93a4Safresh16 <0> stub v 133*256a93a4Safresh17 <0> unstack s 134*256a93a4Safresh1 goto 8 135*256a93a4Safresh1a <2> leaveloop K/2 136*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 137*256a93a4Safresh1EOT_EOT 138*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:14) v:>,<,% 139*256a93a4Safresh12 <0> pushmark sM 140*256a93a4Safresh13 <$> gv(*a) s 141*256a93a4Safresh14 <1> rv2av[t2] sKRM/1 142*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$var:1460,1463] KS/LVINTRO 143*256a93a4Safresh18 <0> iter s 144*256a93a4Safresh19 <|> and(other->6) K/1 145*256a93a4Safresh16 <0> stub v 146*256a93a4Safresh17 <0> unstack s 147*256a93a4Safresh1 goto 8 148*256a93a4Safresh1a <2> leaveloop K/2 149*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 150*256a93a4Safresh1EONT_EONT 151*256a93a4Safresh1 152*256a93a4Safresh1checkOptree ( name => 'for our $var (@a)', 153*256a93a4Safresh1 code => sub {for our $var (@a) {}}, 154*256a93a4Safresh1 bcopts => '-exec', 155*256a93a4Safresh1 strip_open_hints => 1, 156*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 157*256a93a4Safresh11 <;> nextstate(main 1466 optree_for.t:100) v 158*256a93a4Safresh12 <0> pushmark sM 159*256a93a4Safresh13 <#> gv[*a] s 160*256a93a4Safresh14 <1> rv2av[t4] sKRM/1 161*256a93a4Safresh15 <#> gv[*var] s 162*256a93a4Safresh16 <1> rv2gv sK/FAKE,1 163*256a93a4Safresh17 <{> enteriter(next->9 last->c redo->8) KS/OURINTR 164*256a93a4Safresh1a <0> iter s 165*256a93a4Safresh1b <|> and(other->8) K/1 166*256a93a4Safresh18 <0> stub v 167*256a93a4Safresh19 <0> unstack s 168*256a93a4Safresh1 goto a 169*256a93a4Safresh1c <2> leaveloop K/2 170*256a93a4Safresh1d <1> leavesub[1 ref] K/REFC,1 171*256a93a4Safresh1EOT_EOT 172*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:111) v:>,<,% 173*256a93a4Safresh12 <0> pushmark sM 174*256a93a4Safresh13 <$> gv(*a) s 175*256a93a4Safresh14 <1> rv2av[t2] sKRM/1 176*256a93a4Safresh15 <$> gv(*var) s 177*256a93a4Safresh16 <1> rv2gv sK/FAKE,1 178*256a93a4Safresh17 <{> enteriter(next->9 last->c redo->8) KS/OURINTR 179*256a93a4Safresh1a <0> iter s 180*256a93a4Safresh1b <|> and(other->8) K/1 181*256a93a4Safresh18 <0> stub v 182*256a93a4Safresh19 <0> unstack s 183*256a93a4Safresh1 goto a 184*256a93a4Safresh1c <2> leaveloop K/2 185*256a93a4Safresh1d <1> leavesub[1 ref] K/REFC,1 186*256a93a4Safresh1EONT_EONT 187*256a93a4Safresh1 188*256a93a4Safresh1checkOptree ( name => 'for my ($var) (@a)', 189*256a93a4Safresh1 code => sub {for my ($var) (@a) {}}, 190*256a93a4Safresh1 bcopts => '-exec', 191*256a93a4Safresh1 strip_open_hints => 1, 192*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 193*256a93a4Safresh11 <;> nextstate(main 1466 optree_for.t:100) v 194*256a93a4Safresh12 <0> pushmark sM 195*256a93a4Safresh13 <#> gv[*a] s 196*256a93a4Safresh14 <1> rv2av[t3] sKRM/1 197*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$var:1474,1477] KPS/LVINTRO 198*256a93a4Safresh18 <0> iter s 199*256a93a4Safresh19 <|> and(other->6) K/1 200*256a93a4Safresh16 <0> stub v 201*256a93a4Safresh17 <0> unstack s 202*256a93a4Safresh1 goto 8 203*256a93a4Safresh1a <2> leaveloop K/2 204*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 205*256a93a4Safresh1EOT_EOT 206*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:111) v:>,<,% 207*256a93a4Safresh12 <0> pushmark sM 208*256a93a4Safresh13 <$> gv(*a) s 209*256a93a4Safresh14 <1> rv2av[t2] sKRM/1 210*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$var:1474,1477] KPS/LVINTRO 211*256a93a4Safresh18 <0> iter s 212*256a93a4Safresh19 <|> and(other->6) K/1 213*256a93a4Safresh16 <0> stub v 214*256a93a4Safresh17 <0> unstack s 215*256a93a4Safresh1 goto 8 216*256a93a4Safresh1a <2> leaveloop K/2 217*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 218*256a93a4Safresh1EONT_EONT 219*256a93a4Safresh1 220*256a93a4Safresh1checkOptree ( name => 'for my ($var) (@lexical)', 221*256a93a4Safresh1 code => sub {for my ($var) (@lexical) {}}, 222*256a93a4Safresh1 bcopts => '-exec', 223*256a93a4Safresh1 strip_open_hints => 1, 224*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 225*256a93a4Safresh11 <;> nextstate(main 1466 optree_for.t:100) v 226*256a93a4Safresh12 <0> pushmark sM 227*256a93a4Safresh13 <0> padav[@lexical:FAKE::7] sRM 228*256a93a4Safresh14 <{> enteriter(next->6 last->9 redo->5)[$var:1481,1484] KPS/LVINTRO 229*256a93a4Safresh17 <0> iter s 230*256a93a4Safresh18 <|> and(other->5) K/1 231*256a93a4Safresh15 <0> stub v 232*256a93a4Safresh16 <0> unstack s 233*256a93a4Safresh1 goto 7 234*256a93a4Safresh19 <2> leaveloop K/2 235*256a93a4Safresh1a <1> leavesub[2 refs] K/REFC,1 236*256a93a4Safresh1EOT_EOT 237*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:111) v:>,<,% 238*256a93a4Safresh12 <0> pushmark sM 239*256a93a4Safresh13 <0> padav[@lexical:FAKE::2] sRM 240*256a93a4Safresh14 <{> enteriter(next->6 last->9 redo->5)[$var:1481,1484] KPS/LVINTRO 241*256a93a4Safresh17 <0> iter s 242*256a93a4Safresh18 <|> and(other->5) K/1 243*256a93a4Safresh15 <0> stub v 244*256a93a4Safresh16 <0> unstack s 245*256a93a4Safresh1 goto 7 246*256a93a4Safresh19 <2> leaveloop K/2 247*256a93a4Safresh1a <1> leavesub[2 refs] K/REFC,1 248*256a93a4Safresh1EONT_EONT 249*256a93a4Safresh1 250*256a93a4Safresh1checkOptree ( name => 'for my ($key, $value) (%h)', 251*256a93a4Safresh1 code => sub {for my ($key, $value) (%h) {}}, 252*256a93a4Safresh1 bcopts => '-exec', 253*256a93a4Safresh1 strip_open_hints => 1, 254*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 255*256a93a4Safresh11 <;> nextstate(main 1466 optree_for.t:100) v 256*256a93a4Safresh12 <0> pushmark sM 257*256a93a4Safresh13 <#> gv[*h] s 258*256a93a4Safresh14 <1> rv2hv[t4] lKM 259*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$key:1488,1491; $value:1488,1491] KP/LVINTRO 260*256a93a4Safresh18 <0> iter s 261*256a93a4Safresh19 <|> and(other->6) K/1 262*256a93a4Safresh16 <0> stub v 263*256a93a4Safresh17 <0> unstack s 264*256a93a4Safresh1 goto 8 265*256a93a4Safresh1a <2> leaveloop K/2 266*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 267*256a93a4Safresh1EOT_EOT 268*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:111) v:>,<,% 269*256a93a4Safresh12 <0> pushmark sM 270*256a93a4Safresh13 <$> gv(*h) s 271*256a93a4Safresh14 <1> rv2hv[t3] lKM 272*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$key:1488,1491; $value:1488,1491] KP/LVINTRO 273*256a93a4Safresh18 <0> iter s 274*256a93a4Safresh19 <|> and(other->6) K/1 275*256a93a4Safresh16 <0> stub v 276*256a93a4Safresh17 <0> unstack s 277*256a93a4Safresh1 goto 8 278*256a93a4Safresh1a <2> leaveloop K/2 279*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 280*256a93a4Safresh1EONT_EONT 281*256a93a4Safresh1 282*256a93a4Safresh1checkOptree ( name => 'for my ($foo, $bar, $baz) (@a)', 283*256a93a4Safresh1 code => sub {for my ($foo, $bar, $baz) (@a) {}}, 284*256a93a4Safresh1 bcopts => '-exec', 285*256a93a4Safresh1 strip_open_hints => 1, 286*256a93a4Safresh1 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 287*256a93a4Safresh11 <;> nextstate(main 1466 optree_for.t:100) v 288*256a93a4Safresh12 <0> pushmark sM 289*256a93a4Safresh13 <#> gv[*a] s 290*256a93a4Safresh14 <1> rv2av[t5] sKRM/1 291*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$foo:1495,1498; $bar:1495,1498; $baz:1495,1498] KPS/LVINTRO 292*256a93a4Safresh18 <0> iter s 293*256a93a4Safresh19 <|> and(other->6) K/1 294*256a93a4Safresh16 <0> stub v 295*256a93a4Safresh17 <0> unstack s 296*256a93a4Safresh1 goto 8 297*256a93a4Safresh1a <2> leaveloop K/2 298*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 299*256a93a4Safresh1EOT_EOT 300*256a93a4Safresh11 <;> nextstate(main 424 optree_for.t:111) v:>,<,% 301*256a93a4Safresh12 <0> pushmark sM 302*256a93a4Safresh13 <$> gv(*a) s 303*256a93a4Safresh14 <1> rv2av[t4] sKRM/1 304*256a93a4Safresh15 <{> enteriter(next->7 last->a redo->6)[$foo:1495,1498; $bar:1495,1498; $baz:1495,1498] KPS/LVINTRO 305*256a93a4Safresh18 <0> iter s 306*256a93a4Safresh19 <|> and(other->6) K/1 307*256a93a4Safresh16 <0> stub v 308*256a93a4Safresh17 <0> unstack s 309*256a93a4Safresh1 goto 8 310*256a93a4Safresh1a <2> leaveloop K/2 311*256a93a4Safresh1b <1> leavesub[1 ref] K/REFC,1 312*256a93a4Safresh1EONT_EONT 313