#!perl
BEGIN {
- if ($ENV{PERL_CORE}){
- chdir('t') if -d 't';
- @INC = ('.', '../lib', '../ext/B/t');
- } else {
- unshift @INC, 't';
- push @INC, "../../t";
- }
+ unshift @INC, 't';
require Config;
if (($Config::Config{'extensions'} !~ /\bB\b/) ){
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- # require 'test.pl'; # now done by OptreeCheck
+ if (!$Config::Config{useperlio}) {
+ print "1..0 # Skip -- need perlio to walk the optree\n";
+ exit 0;
+ }
}
use OptreeCheck;
use Config;
-plan tests => 20;
-SKIP: {
- skip "no perlio in this build", 20 unless $Config::Config{useperlio};
+plan tests => 46;
pass("GENERAL OPTREE EXAMPLES");
code => sub { if (shift) { print "then" }
else { print "else" }
},
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 9 <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->9
-# 1 <;> nextstate(main 426 optree.t:16) v ->2
+# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->7
+# 1 <;> nextstate(main 665 optree_samples.t:24) v:>,<,% ->2
# - <1> null K/1 ->-
-# 5 <|> cond_expr(other->6) K/1 ->a
-# 4 <1> shift sK/1 ->5
-# 3 <1> rv2av[t2] sKRM/1 ->4
-# 2 <#> gv[*_] s ->3
+# 3 <|> cond_expr(other->4) K/1 ->8
+# 2 <0> shift s* ->3
# - <@> scope K ->-
-# - <0> ex-nextstate v ->6
-# 8 <@> print sK ->9
-# 6 <0> pushmark s ->7
-# 7 <$> const[PV "then"] s ->8
-# f <@> leave KP ->9
-# a <0> enter ->b
-# b <;> nextstate(main 424 optree.t:17) v ->c
-# e <@> print sK ->f
-# c <0> pushmark s ->d
-# d <$> const[PV "else"] s ->e
+# - <0> ex-nextstate v ->4
+# 6 <@> print sK ->7
+# 4 <0> pushmark s ->5
+# 5 <$> const[PV "then"] s ->6
+# d <@> leave KP ->7
+# 8 <0> enter ->9
+# 9 <;> nextstate(main 663 optree_samples.t:25) v:>,<,% ->a
+# c <@> print sK ->d
+# a <0> pushmark s ->b
+# b <$> const[PV "else"] s ->c
EOT_EOT
-# 9 <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->9
-# 1 <;> nextstate(main 427 optree_samples.t:18) v ->2
+# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->7
+# 1 <;> nextstate(main 665 optree_samples.t:24) v:>,<,% ->2
# - <1> null K/1 ->-
-# 5 <|> cond_expr(other->6) K/1 ->a
-# 4 <1> shift sK/1 ->5
-# 3 <1> rv2av[t1] sKRM/1 ->4
-# 2 <$> gv(*_) s ->3
+# 3 <|> cond_expr(other->4) K/1 ->8
+# 2 <0> shift s* ->3
# - <@> scope K ->-
-# - <0> ex-nextstate v ->6
-# 8 <@> print sK ->9
-# 6 <0> pushmark s ->7
-# 7 <$> const(PV "then") s ->8
-# f <@> leave KP ->9
-# a <0> enter ->b
-# b <;> nextstate(main 425 optree_samples.t:19) v ->c
-# e <@> print sK ->f
-# c <0> pushmark s ->d
-# d <$> const(PV "else") s ->e
+# - <0> ex-nextstate v ->4
+# 6 <@> print sK ->7
+# 4 <0> pushmark s ->5
+# 5 <$> const(PV "then") s ->6
+# d <@> leave KP ->7
+# 8 <0> enter ->9
+# 9 <;> nextstate(main 663 optree_samples.t:25) v:>,<,% ->a
+# c <@> print sK ->d
+# a <0> pushmark s ->b
+# b <$> const(PV "else") s ->c
EONT_EONT
checkOptree ( name => '-basic (see above, with my $a = shift)',
if ($a) { print "foo" }
else { print "bar" }
},
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# d <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->d
-# 1 <;> nextstate(main 431 optree.t:68) v ->2
-# 6 <2> sassign vKS/2 ->7
-# 4 <1> shift sK/1 ->5
-# 3 <1> rv2av[t3] sKRM/1 ->4
-# 2 <#> gv[*_] s ->3
-# 5 <0> padsv[$a:431,435] sRM*/LVINTRO ->6
-# 7 <;> nextstate(main 435 optree.t:69) v ->8
+# b <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->b
+# 1 <;> nextstate(main 666 optree_samples.t:70) v:>,<,% ->2
+# 4 <2> sassign vKS/2 ->5
+# 2 <0> shift s* ->3
+# 3 <0> padsv[$a:666,670] sRM*/LVINTRO ->4
+# 5 <;> nextstate(main 670 optree_samples.t:71) v:>,<,% ->6
# - <1> null K/1 ->-
-# 9 <|> cond_expr(other->a) K/1 ->e
-# 8 <0> padsv[$a:431,435] s ->9
+# 7 <|> cond_expr(other->8) K/1 ->c
+# 6 <0> padsv[$a:666,670] s ->7
# - <@> scope K ->-
-# - <0> ex-nextstate v ->a
-# c <@> print sK ->d
-# a <0> pushmark s ->b
-# b <$> const[PV "foo"] s ->c
-# j <@> leave KP ->d
-# e <0> enter ->f
-# f <;> nextstate(main 433 optree.t:70) v ->g
-# i <@> print sK ->j
-# g <0> pushmark s ->h
-# h <$> const[PV "bar"] s ->i
+# - <0> ex-nextstate v ->8
+# a <@> print sK ->b
+# 8 <0> pushmark s ->9
+# 9 <$> const[PV "foo"] s ->a
+# h <@> leave KP ->b
+# c <0> enter ->d
+# d <;> nextstate(main 668 optree_samples.t:72) v:>,<,% ->e
+# g <@> print sK ->h
+# e <0> pushmark s ->f
+# f <$> const[PV "bar"] s ->g
EOT_EOT
-# d <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->d
-# 1 <;> nextstate(main 428 optree_samples.t:48) v ->2
-# 6 <2> sassign vKS/2 ->7
-# 4 <1> shift sK/1 ->5
-# 3 <1> rv2av[t2] sKRM/1 ->4
-# 2 <$> gv(*_) s ->3
-# 5 <0> padsv[$a:428,432] sRM*/LVINTRO ->6
-# 7 <;> nextstate(main 432 optree_samples.t:49) v ->8
+# b <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->b
+# 1 <;> nextstate(main 666 optree_samples.t:72) v:>,<,% ->2
+# 4 <2> sassign vKS/2 ->5
+# 2 <0> shift s* ->3
+# 3 <0> padsv[$a:666,670] sRM*/LVINTRO ->4
+# 5 <;> nextstate(main 670 optree_samples.t:73) v:>,<,% ->6
# - <1> null K/1 ->-
-# 9 <|> cond_expr(other->a) K/1 ->e
-# 8 <0> padsv[$a:428,432] s ->9
+# 7 <|> cond_expr(other->8) K/1 ->c
+# 6 <0> padsv[$a:666,670] s ->7
# - <@> scope K ->-
-# - <0> ex-nextstate v ->a
-# c <@> print sK ->d
-# a <0> pushmark s ->b
-# b <$> const(PV "foo") s ->c
-# j <@> leave KP ->d
-# e <0> enter ->f
-# f <;> nextstate(main 430 optree_samples.t:50) v ->g
-# i <@> print sK ->j
-# g <0> pushmark s ->h
-# h <$> const(PV "bar") s ->i
+# - <0> ex-nextstate v ->8
+# a <@> print sK ->b
+# 8 <0> pushmark s ->9
+# 9 <$> const(PV "foo") s ->a
+# h <@> leave KP ->b
+# c <0> enter ->d
+# d <;> nextstate(main 668 optree_samples.t:74) v:>,<,% ->e
+# g <@> print sK ->h
+# e <0> pushmark s ->f
+# f <$> const(PV "bar") s ->g
EONT_EONT
checkOptree ( name => '-exec sub {if shift print then,else}',
code => sub { if (shift) { print "then" }
else { print "else" }
},
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 426 optree.t:16) v
-# 2 <#> gv[*_] s
-# 3 <1> rv2av[t2] sKRM/1
-# 4 <1> shift sK/1
-# 5 <|> cond_expr(other->6) K/1
-# 6 <0> pushmark s
-# 7 <$> const[PV "then"] s
-# 8 <@> print sK
-# goto 9
-# a <0> enter
-# b <;> nextstate(main 424 optree.t:17) v
-# c <0> pushmark s
-# d <$> const[PV "else"] s
-# e <@> print sK
-# f <@> leave KP
-# 9 <1> leavesub[1 ref] K/REFC,1
+# 1 <;> nextstate(main 674 optree_samples.t:125) v:>,<,%
+# 2 <0> shift s*
+# 3 <|> cond_expr(other->4) K/1
+# 4 <0> pushmark s
+# 5 <$> const[PV "then"] s
+# 6 <@> print sK
+# goto 7
+# 8 <0> enter
+# 9 <;> nextstate(main 672 optree_samples.t:126) v:>,<,%
+# a <0> pushmark s
+# b <$> const[PV "else"] s
+# c <@> print sK
+# d <@> leave KP
+# 7 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 436 optree_samples.t:123) v
-# 2 <$> gv(*_) s
-# 3 <1> rv2av[t1] sKRM/1
-# 4 <1> shift sK/1
-# 5 <|> cond_expr(other->6) K/1
-# 6 <0> pushmark s
-# 7 <$> const(PV "then") s
-# 8 <@> print sK
-# goto 9
-# a <0> enter
-# b <;> nextstate(main 434 optree_samples.t:124) v
-# c <0> pushmark s
-# d <$> const(PV "else") s
-# e <@> print sK
-# f <@> leave KP
-# 9 <1> leavesub[1 ref] K/REFC,1
+# 1 <;> nextstate(main 674 optree_samples.t:129) v:>,<,%
+# 2 <0> shift s*
+# 3 <|> cond_expr(other->4) K/1
+# 4 <0> pushmark s
+# 5 <$> const(PV "then") s
+# 6 <@> print sK
+# goto 7
+# 8 <0> enter
+# 9 <;> nextstate(main 672 optree_samples.t:130) v:>,<,%
+# a <0> pushmark s
+# b <$> const(PV "else") s
+# c <@> print sK
+# d <@> leave KP
+# 7 <1> leavesub[1 ref] K/REFC,1
EONT_EONT
checkOptree ( name => '-exec (see above, with my $a = shift)',
if ($a) { print "foo" }
else { print "bar" }
},
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 423 optree.t:16) v
-# 2 <#> gv[*_] s
-# 3 <1> rv2av[t3] sKRM/1
-# 4 <1> shift sK/1
-# 5 <0> padsv[$a:423,427] sRM*/LVINTRO
-# 6 <2> sassign vKS/2
-# 7 <;> nextstate(main 427 optree.t:17) v
-# 8 <0> padsv[$a:423,427] s
-# 9 <|> cond_expr(other->a) K/1
-# a <0> pushmark s
-# b <$> const[PV "foo"] s
-# c <@> print sK
-# goto d
-# e <0> enter
-# f <;> nextstate(main 425 optree.t:18) v
-# g <0> pushmark s
-# h <$> const[PV "bar"] s
-# i <@> print sK
-# j <@> leave KP
-# d <1> leavesub[1 ref] K/REFC,1
+# 1 <;> nextstate(main 675 optree_samples.t:165) v:>,<,%
+# 2 <0> shift s*
+# 3 <0> padsv[$a:675,679] sRM*/LVINTRO
+# 4 <2> sassign vKS/2
+# 5 <;> nextstate(main 679 optree_samples.t:166) v:>,<,%
+# 6 <0> padsv[$a:675,679] s
+# 7 <|> cond_expr(other->8) K/1
+# 8 <0> pushmark s
+# 9 <$> const[PV "foo"] s
+# a <@> print sK
+# goto b
+# c <0> enter
+# d <;> nextstate(main 677 optree_samples.t:167) v:>,<,%
+# e <0> pushmark s
+# f <$> const[PV "bar"] s
+# g <@> print sK
+# h <@> leave KP
+# b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 437 optree_samples.t:112) v
-# 2 <$> gv(*_) s
-# 3 <1> rv2av[t2] sKRM/1
-# 4 <1> shift sK/1
-# 5 <0> padsv[$a:437,441] sRM*/LVINTRO
-# 6 <2> sassign vKS/2
-# 7 <;> nextstate(main 441 optree_samples.t:113) v
-# 8 <0> padsv[$a:437,441] s
-# 9 <|> cond_expr(other->a) K/1
-# a <0> pushmark s
-# b <$> const(PV "foo") s
-# c <@> print sK
-# goto d
-# e <0> enter
-# f <;> nextstate(main 439 optree_samples.t:114) v
-# g <0> pushmark s
-# h <$> const(PV "bar") s
-# i <@> print sK
-# j <@> leave KP
-# d <1> leavesub[1 ref] K/REFC,1
+# 1 <;> nextstate(main 675 optree_samples.t:171) v:>,<,%
+# 2 <0> shift s*
+# 3 <0> padsv[$a:675,679] sRM*/LVINTRO
+# 4 <2> sassign vKS/2
+# 5 <;> nextstate(main 679 optree_samples.t:172) v:>,<,%
+# 6 <0> padsv[$a:675,679] s
+# 7 <|> cond_expr(other->8) K/1
+# 8 <0> pushmark s
+# 9 <$> const(PV "foo") s
+# a <@> print sK
+# goto b
+# c <0> enter
+# d <;> nextstate(main 677 optree_samples.t:173) v:>,<,%
+# e <0> pushmark s
+# f <$> const(PV "bar") s
+# g <@> print sK
+# h <@> leave KP
+# b <1> leavesub[1 ref] K/REFC,1
EONT_EONT
checkOptree ( name => '-exec sub { print (shift) ? "foo" : "bar" }',
code => sub { print (shift) ? "foo" : "bar" },
bcopts => '-exec',
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 428 optree.t:31) v
+# 1 <;> nextstate(main 680 optree_samples.t:213) v:>,<,%
# 2 <0> pushmark s
-# 3 <#> gv[*_] s
-# 4 <1> rv2av[t2] sKRM/1
-# 5 <1> shift sK/1
-# 6 <@> print sK
-# 7 <|> cond_expr(other->8) K/1
-# 8 <$> const[PV "foo"] s
-# goto 9
-# a <$> const[PV "bar"] s
-# 9 <1> leavesub[1 ref] K/REFC,1
+# 3 <0> shift s*
+# 4 <@> print sK
+# 5 <|> cond_expr(other->6) K/1
+# 6 <$> const[PV "foo"] s
+# goto 7
+# 8 <$> const[PV "bar"] s
+# 7 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 442 optree_samples.t:144) v
+# 1 <;> nextstate(main 680 optree_samples.t:221) v:>,<,%
# 2 <0> pushmark s
-# 3 <$> gv(*_) s
-# 4 <1> rv2av[t1] sKRM/1
-# 5 <1> shift sK/1
-# 6 <@> print sK
-# 7 <|> cond_expr(other->8) K/1
-# 8 <$> const(PV "foo") s
-# goto 9
-# a <$> const(PV "bar") s
-# 9 <1> leavesub[1 ref] K/REFC,1
+# 3 <0> shift s*
+# 4 <@> print sK
+# 5 <|> cond_expr(other->6) K/1
+# 6 <$> const(PV "foo") s
+# goto 7
+# 8 <$> const(PV "bar") s
+# 7 <1> leavesub[1 ref] K/REFC,1
EONT_EONT
pass ("FOREACH");
checkOptree ( name => '-exec sub { foreach (1..10) {print "foo $_"} }',
code => sub { foreach (1..10) {print "foo $_"} },
bcopts => '-exec',
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 443 optree.t:158) v
+# 1 <;> nextstate(main 443 optree.t:158) v:>,<,%
# 2 <0> pushmark s
# 3 <$> const[IV 1] s
# 4 <$> const[IV 10] s
# 6 <{> enteriter(next->d last->g redo->7) lKS/8
# e <0> iter s
# f <|> and(other->7) K/1
-# 7 <;> nextstate(main 442 optree.t:158) v
+# 7 <;> nextstate(main 442 optree.t:158) v:>,<,%
# 8 <0> pushmark s
# 9 <$> const[PV "foo "] s
# a <#> gvsv[*_] s
# g <2> leaveloop K/2
# h <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 444 optree_samples.t:182) v
+# 1 <;> nextstate(main 444 optree_samples.t:182) v:>,<,%
# 2 <0> pushmark s
# 3 <$> const(IV 1) s
# 4 <$> const(IV 10) s
# 6 <{> enteriter(next->d last->g redo->7) lKS/8
# e <0> iter s
# f <|> and(other->7) K/1
-# 7 <;> nextstate(main 443 optree_samples.t:182) v
+# 7 <;> nextstate(main 443 optree_samples.t:182) v:>,<,%
# 8 <0> pushmark s
# 9 <$> const(PV "foo ") s
# a <$> gvsv(*_) s
checkOptree ( name => '-basic sub { print "foo $_" foreach (1..10) }',
code => sub { print "foo $_" foreach (1..10) },
bcopts => '-basic',
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# h <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->h
-# 1 <;> nextstate(main 445 optree.t:167) v ->2
-# 2 <;> nextstate(main 445 optree.t:167) v ->3
-# g <2> leaveloop K/2 ->h
-# 7 <{> enteriter(next->d last->g redo->8) lKS/8 ->e
-# - <0> ex-pushmark s ->3
-# - <1> ex-list lK ->6
-# 3 <0> pushmark s ->4
-# 4 <$> const[IV 1] s ->5
-# 5 <$> const[IV 10] s ->6
-# 6 <#> gv[*_] s ->7
-# - <1> null K/1 ->g
-# f <|> and(other->8) K/1 ->g
-# e <0> iter s ->f
+# g <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->g
+# 1 <;> nextstate(main 445 optree.t:167) v:>,<,% ->2
+# f <2> leaveloop K/2 ->g
+# 6 <{> enteriter(next->c last->f redo->7) lKS/8 ->d
+# - <0> ex-pushmark s ->2
+# - <1> ex-list lK ->5
+# 2 <0> pushmark s ->3
+# 3 <$> const[IV 1] s ->4
+# 4 <$> const[IV 10] s ->5
+# 5 <#> gv[*_] s ->6
+# - <1> null K/1 ->f
+# e <|> and(other->7) K/1 ->f
+# d <0> iter s ->e
# - <@> lineseq sK ->-
-# c <@> print vK ->d
-# 8 <0> pushmark s ->9
-# - <1> ex-stringify sK/1 ->c
-# - <0> ex-pushmark s ->9
-# b <2> concat[t2] sK/2 ->c
-# 9 <$> const[PV "foo "] s ->a
-# - <1> ex-rv2sv sK/1 ->b
-# a <#> gvsv[*_] s ->b
-# d <0> unstack s ->e
+# b <@> print vK ->c
+# 7 <0> pushmark s ->8
+# - <1> ex-stringify sK/1 ->b
+# - <0> ex-pushmark s ->8
+# a <2> concat[t2] sK/2 ->b
+# 8 <$> const[PV "foo "] s ->9
+# - <1> ex-rv2sv sK/1 ->a
+# 9 <#> gvsv[*_] s ->a
+# c <0> unstack s ->d
EOT_EOT
-# h <1> leavesub[1 ref] K/REFC,1 ->(end)
-# - <@> lineseq KP ->h
-# 1 <;> nextstate(main 446 optree_samples.t:192) v ->2
-# 2 <;> nextstate(main 446 optree_samples.t:192) v ->3
-# g <2> leaveloop K/2 ->h
-# 7 <{> enteriter(next->d last->g redo->8) lKS/8 ->e
-# - <0> ex-pushmark s ->3
-# - <1> ex-list lK ->6
-# 3 <0> pushmark s ->4
-# 4 <$> const(IV 1) s ->5
-# 5 <$> const(IV 10) s ->6
-# 6 <$> gv(*_) s ->7
-# - <1> null K/1 ->g
-# f <|> and(other->8) K/1 ->g
-# e <0> iter s ->f
+# g <1> leavesub[1 ref] K/REFC,1 ->(end)
+# - <@> lineseq KP ->g
+# 1 <;> nextstate(main 446 optree_samples.t:192) v:>,<,% ->2
+# f <2> leaveloop K/2 ->g
+# 6 <{> enteriter(next->c last->f redo->7) lKS/8 ->d
+# - <0> ex-pushmark s ->2
+# - <1> ex-list lK ->5
+# 2 <0> pushmark s ->3
+# 3 <$> const(IV 1) s ->4
+# 4 <$> const(IV 10) s ->5
+# 5 <$> gv(*_) s ->6
+# - <1> null K/1 ->f
+# e <|> and(other->7) K/1 ->f
+# d <0> iter s ->e
# - <@> lineseq sK ->-
-# c <@> print vK ->d
-# 8 <0> pushmark s ->9
-# - <1> ex-stringify sK/1 ->c
-# - <0> ex-pushmark s ->9
-# b <2> concat[t1] sK/2 ->c
-# 9 <$> const(PV "foo ") s ->a
-# - <1> ex-rv2sv sK/1 ->b
-# a <$> gvsv(*_) s ->b
-# d <0> unstack s ->e
+# b <@> print vK ->c
+# 7 <0> pushmark s ->8
+# - <1> ex-stringify sK/1 ->b
+# - <0> ex-pushmark s ->8
+# a <2> concat[t1] sK/2 ->b
+# 8 <$> const(PV "foo ") s ->9
+# - <1> ex-rv2sv sK/1 ->a
+# 9 <$> gvsv(*_) s ->a
+# c <0> unstack s ->d
EONT_EONT
checkOptree ( name => '-exec -e foreach (1..10) {print qq{foo $_}}',
prog => 'foreach (1..10) {print qq{foo $_}}',
bcopts => '-exec',
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <0> enter
-# 2 <;> nextstate(main 2 -e:1) v
+# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> const[IV 1] s
# 5 <$> const[IV 10] s
# 7 <{> enteriter(next->e last->h redo->8) lKS/8
# f <0> iter s
# g <|> and(other->8) vK/1
-# 8 <;> nextstate(main 1 -e:1) v
+# 8 <;> nextstate(main 1 -e:1) v:>,<,%
# 9 <0> pushmark s
# a <$> const[PV "foo "] s
# b <#> gvsv[*_] s
# i <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 2 -e:1) v
+# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> const(IV 1) s
# 5 <$> const(IV 10) s
# 7 <{> enteriter(next->e last->h redo->8) lKS/8
# f <0> iter s
# g <|> and(other->8) vK/1
-# 8 <;> nextstate(main 1 -e:1) v
+# 8 <;> nextstate(main 1 -e:1) v:>,<,%
# 9 <0> pushmark s
# a <$> const(PV "foo ") s
# b <$> gvsv(*_) s
checkOptree ( name => '-exec sub { print "foo $_" foreach (1..10) }',
code => sub { print "foo $_" foreach (1..10) },
bcopts => '-exec',
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <;> nextstate(main 445 optree.t:167) v
-# 2 <;> nextstate(main 445 optree.t:167) v
-# 3 <0> pushmark s
-# 4 <$> const[IV 1] s
-# 5 <$> const[IV 10] s
-# 6 <#> gv[*_] s
-# 7 <{> enteriter(next->d last->g redo->8) lKS/8
-# e <0> iter s
-# f <|> and(other->8) K/1
-# 8 <0> pushmark s
-# 9 <$> const[PV "foo "] s
-# a <#> gvsv[*_] s
-# b <2> concat[t2] sK/2
-# c <@> print vK
-# d <0> unstack s
-# goto e
-# g <2> leaveloop K/2
-# h <1> leavesub[1 ref] K/REFC,1
+# 1 <;> nextstate(main 445 optree.t:167) v:>,<,%
+# 2 <0> pushmark s
+# 3 <$> const[IV 1] s
+# 4 <$> const[IV 10] s
+# 5 <#> gv[*_] s
+# 6 <{> enteriter(next->c last->f redo->7) lKS/8
+# d <0> iter s
+# e <|> and(other->7) K/1
+# 7 <0> pushmark s
+# 8 <$> const[PV "foo "] s
+# 9 <#> gvsv[*_] s
+# a <2> concat[t2] sK/2
+# b <@> print vK
+# c <0> unstack s
+# goto d
+# f <2> leaveloop K/2
+# g <1> leavesub[1 ref] K/REFC,1
EOT_EOT
-# 1 <;> nextstate(main 447 optree_samples.t:252) v
-# 2 <;> nextstate(main 447 optree_samples.t:252) v
-# 3 <0> pushmark s
-# 4 <$> const(IV 1) s
-# 5 <$> const(IV 10) s
-# 6 <$> gv(*_) s
-# 7 <{> enteriter(next->d last->g redo->8) lKS/8
-# e <0> iter s
-# f <|> and(other->8) K/1
-# 8 <0> pushmark s
-# 9 <$> const(PV "foo ") s
-# a <$> gvsv(*_) s
-# b <2> concat[t1] sK/2
-# c <@> print vK
-# d <0> unstack s
-# goto e
-# g <2> leaveloop K/2
-# h <1> leavesub[1 ref] K/REFC,1
+# 1 <;> nextstate(main 447 optree_samples.t:252) v:>,<,%
+# 2 <0> pushmark s
+# 3 <$> const(IV 1) s
+# 4 <$> const(IV 10) s
+# 5 <$> gv(*_) s
+# 6 <{> enteriter(next->c last->f redo->7) lKS/8
+# d <0> iter s
+# e <|> and(other->7) K/1
+# 7 <0> pushmark s
+# 8 <$> const(PV "foo ") s
+# 9 <$> gvsv(*_) s
+# a <2> concat[t1] sK/2
+# b <@> print vK
+# c <0> unstack s
+# goto d
+# f <2> leaveloop K/2
+# g <1> leavesub[1 ref] K/REFC,1
EONT_EONT
pass("GREP: SAMPLES FROM PERLDOC -F GREP");
# 3 <0> pushmark s
# 4 <#> gv[*a] s
# 5 <1> rv2av[t8] lKM/1
-# 6 <@> mapstart lK*
+# 6 <@> mapstart lK* < 5.017002
+# 6 <@> mapstart lK >=5.017002
# 7 <|> mapwhile(other->8)[t9] lK
# 8 <0> enter l
# 9 <;> nextstate(main 500 (eval 22):1) v:{
# b <0> pushmark s
# c <#> gvsv[*_] s
# d <#> gv[*getkey] s/EARLYCV
-# e <1> entersub[t5] lKS/TARG,1
+# e <1> entersub[t5] lKS/TARG
# f <#> gvsv[*_] s
# g <@> list lK
# h <@> leave lKP
# goto 7
# i <0> pushmark s
# j <#> gv[*h] s
-# k <1> rv2hv[t2] lKRM*/1
+# k <1> rv2hv[t2] lKRM*/1 < 5.019006
+# k <1> rv2hv lKRM*/1 >=5.019006
# l <2> aassign[t10] KS/COMMON
# m <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 3 <0> pushmark s
# 4 <$> gv(*a) s
# 5 <1> rv2av[t3] lKM/1
-# 6 <@> mapstart lK*
+# 6 <@> mapstart lK* < 5.017002
+# 6 <@> mapstart lK >=5.017002
# 7 <|> mapwhile(other->8)[t4] lK
# 8 <0> enter l
# 9 <;> nextstate(main 500 (eval 22):1) v:{
# b <0> pushmark s
# c <$> gvsv(*_) s
# d <$> gv(*getkey) s/EARLYCV
-# e <1> entersub[t2] lKS/TARG,1
+# e <1> entersub[t2] lKS/TARG
# f <$> gvsv(*_) s
# g <@> list lK
# h <@> leave lKP
# goto 7
# i <0> pushmark s
# j <$> gv(*h) s
-# k <1> rv2hv[t1] lKRM*/1
+# k <1> rv2hv[t1] lKRM*/1 < 5.019006
+# k <1> rv2hv lKRM*/1 >=5.019006
# l <2> aassign[t5] KS/COMMON
# m <1> leavesub[1 ref] K/REFC,1
EONT_EONT
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <#> gv[*h] s
-# 5 <1> rv2hv[t2] lKRM*/1
+# 5 <1> rv2hv[t2] lKRM*/1 < 5.019006
+# 5 <1> rv2hv lKRM*/1 >=5.019006
# 6 <2> aassign[t3] vKS
# 7 <;> nextstate(main 506 (eval 24):1) v:{
# 8 <0> pushmark sM
# i <0> pushmark s
# j <#> gvsv[*_] s
# k <#> gv[*getkey] s/EARLYCV
-# l <1> entersub[t10] sKS/TARG,1
+# l <1> entersub[t10] sKS/TARG
# m <2> helem sKRM*/2
# n <2> sassign vKS/2
# o <0> unstack s
# goto p
-# r <2> leaveloop K/2
+# r <2> leaveloop KP/2
# s <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 505 (eval 24):1) v
# 2 <0> pushmark s
# 3 <0> pushmark s
# 4 <$> gv(*h) s
-# 5 <1> rv2hv[t1] lKRM*/1
+# 5 <1> rv2hv[t1] lKRM*/1 < 5.019006
+# 5 <1> rv2hv lKRM*/1 >=5.019006
# 6 <2> aassign[t2] vKS
# 7 <;> nextstate(main 506 (eval 24):1) v:{
# 8 <0> pushmark sM
# i <0> pushmark s
# j <$> gvsv(*_) s
# k <$> gv(*getkey) s/EARLYCV
-# l <1> entersub[t4] sKS/TARG,1
+# l <1> entersub[t4] sKS/TARG
# m <2> helem sKRM*/2
# n <2> sassign vKS/2
# o <0> unstack s
# goto p
-# r <2> leaveloop K/2
+# r <2> leaveloop KP/2
# s <1> leavesub[1 ref] K/REFC,1
EONT_EONT
checkOptree ( name => '-e use constant j => qq{junk}; print j',
prog => 'use constant j => qq{junk}; print j',
bcopts => '-exec',
- @open_todo,
+ strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <0> enter
-# 2 <;> nextstate(main 71 -e:1) v:{
+# 2 <;> nextstate(main 71 -e:1) v:>,<,%,{
# 3 <0> pushmark s
-# 4 <$> const[PV "junk"] s
+# 4 <$> const[PV "junk"] s* < 5.017002
+# 4 <$> const[PV "junk"] s*/FOLD >=5.017002
# 5 <@> print vK
# 6 <@> leave[1 ref] vKP/REFC
EOT_EOT
# 1 <0> enter
-# 2 <;> nextstate(main 71 -e:1) v:{
+# 2 <;> nextstate(main 71 -e:1) v:>,<,%,{
# 3 <0> pushmark s
-# 4 <$> const(PV "junk") s
+# 4 <$> const(PV "junk") s* < 5.017002
+# 4 <$> const(PV "junk") s*/FOLD >=5.017002
# 5 <@> print vK
# 6 <@> leave[1 ref] vKP/REFC
EONT_EONT
-} # skip
+pass("rpeep - return \$x at end of sub");
+
+checkOptree ( name => '-exec sub { return 1 }',
+ code => sub { return 1 },
+ bcopts => '-exec',
+ strip_open_hints => 1,
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+# 1 <;> nextstate(main 1 -e:1) v:>,<,%
+# 2 <$> const[IV 1] s
+# 3 <1> leavesub[1 ref] K/REFC,1
+EOT_EOT
+# 1 <;> nextstate(main 1 -e:1) v:>,<,%
+# 2 <$> const(IV 1) s
+# 3 <1> leavesub[1 ref] K/REFC,1
+EONT_EONT
+
+pass("rpeep - if ($a || $b)");
+
+checkOptree ( name => 'if ($a || $b) { } return 1',
+ code => 'if ($a || $b) { } return 1',
+ bcopts => '-exec',
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+# 1 <;> nextstate(main 997 (eval 15):1) v
+# 2 <#> gvsv[*a] s
+# 3 <|> or(other->4) sK/1
+# 4 <#> gvsv[*b] s
+# 5 <|> and(other->6) vK/1
+# 6 <0> stub v
+# 7 <;> nextstate(main 997 (eval 15):1) v
+# 8 <$> const[IV 1] s
+# 9 <1> leavesub[1 ref] K/REFC,1
+EOT_EOT
+# 1 <;> nextstate(main 997 (eval 15):1) v
+# 2 <$> gvsv(*a) s
+# 3 <|> or(other->4) sK/1
+# 4 <$> gvsv(*b) s
+# 5 <|> and(other->6) vK/1
+# 6 <0> stub v
+# 7 <;> nextstate(main 3 (eval 3):1) v
+# 8 <$> const(IV 1) s
+# 9 <1> leavesub[1 ref] K/REFC,1
+EONT_EONT
+
+pass("rpeep - unless ($a && $b)");
+
+checkOptree ( name => 'unless ($a && $b) { } return 1',
+ code => 'unless ($a && $b) { } return 1',
+ bcopts => '-exec',
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+# 1 <;> nextstate(main 997 (eval 15):1) v
+# 2 <#> gvsv[*a] s
+# 3 <|> and(other->4) sK/1
+# 4 <#> gvsv[*b] s
+# 5 <|> or(other->6) vK/1
+# 6 <0> stub v
+# 7 <;> nextstate(main 997 (eval 15):1) v
+# 8 <$> const[IV 1] s
+# 9 <1> leavesub[1 ref] K/REFC,1
+EOT_EOT
+# 1 <;> nextstate(main 997 (eval 15):1) v
+# 2 <$> gvsv(*a) s
+# 3 <|> and(other->4) sK/1
+# 4 <$> gvsv(*b) s
+# 5 <|> or(other->6) vK/1
+# 6 <0> stub v
+# 7 <;> nextstate(main 3 (eval 3):1) v
+# 8 <$> const(IV 1) s
+# 9 <1> leavesub[1 ref] K/REFC,1
+EONT_EONT
+
+pass("rpeep - my $a; my @b; my %c; print 'f'");
+
+checkOptree ( name => 'my $a; my @b; my %c; return 1',
+ code => 'my $a; my @b; my %c; return 1',
+ bcopts => '-exec',
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+# 1 <;> nextstate(main 991 (eval 17):1) v
+# 2 <0> padrange[$a:991,994; @b:992,994; %c:993,994] vM/LVINTRO,3
+# 3 <;> nextstate(main 994 (eval 17):1) v:{
+# 4 <$> const[IV 1] s
+# 5 <1> leavesub[1 ref] K/REFC,1
+EOT_EOT
+# 1 <;> nextstate(main 991 (eval 17):1) v
+# 2 <0> padrange[$a:991,994; @b:992,994; %c:993,994] vM/LVINTRO,3
+# 3 <;> nextstate(main 994 (eval 17):1) v:{
+# 4 <$> const(IV 1) s
+# 5 <1> leavesub[1 ref] K/REFC,1
+EONT_EONT
__END__