#!perl
BEGIN {
- chdir 't';
- @INC = ('../lib', '../ext/B/t');
- require './test.pl';
+ if ($ENV{PERL_CORE}){
+ chdir('t') if -d 't';
+ @INC = ('.', '../lib', '../ext/B/t');
+ } else {
+ unshift @INC, 't';
+ push @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
}
use OptreeCheck;
-
+use Config;
plan tests => 11;
+SKIP: {
+skip "no perlio in this build", 11 unless $Config::Config{useperlio};
+
pass("SORT OPTIMIZATION");
checkOptree ( name => 'sub {sort @a}',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 1 <;> nextstate(main 424 optree_sort.t:14) v
# 2 <0> pushmark s
-# 3 <#> gv(*a) s
-# 4 <1> rv2av[t1] lK/1
+# 3 <#> gv[*a] s
+# 4 <1> rv2av[t2] lK/1
# 5 <@> sort K
# 6 <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 6 <1> leavesub[1 ref] K/REFC,1
EONT_EONT
-checkOptree ( name => 'sort @a',
- prog => 'sort @a',
- bcopts => '-exec',
- expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
+checkOptree ( name => 'sort @a',
+ prog => 'sort @a',
+ errs => [ 'Useless use of sort in void context at -e line 1.',
+ 'Name "main::a" used only once: possible typo at -e line 1.',
+ ],
+ bcopts => '-exec',
+ expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
2 <;> nextstate(main 1 -e:1) v
3 <0> pushmark s
code => sub {@a = sort @a},
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
- goto -
1 <;> nextstate(main -438 optree.t:244) v
2 <0> pushmark s
3 <0> pushmark s
4 <#> gv[*a] s
-5 <1> rv2av[t2] lK/1
+5 <1> rv2av[t4] lK/1
6 <@> sort lK
7 <0> pushmark s
8 <#> gv[*a] s
9 <1> rv2av[t2] lKRM*/1
-a <2> aassign[t\d+] KS/COMMON
+a <2> aassign[t5] KS/COMMON
b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 65 optree.t:311) v
code => sub {@a = sort @a; reverse @a},
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
- goto -
1 <;> nextstate(main -438 optree.t:286) v
2 <0> pushmark s
3 <0> pushmark s
checkOptree ( name => '@a = sort @a; reverse @a',
prog => '@a = sort @a; reverse @a',
+ errs => ['Useless use of reverse in void context at -e line 1.'],
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1 <0> enter
code => sub {my @a; @a = sort @a},
bcopts => '-exec',
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
- goto -
1 <;> nextstate(main -437 optree.t:254) v
2 <0> padav[@a:-437,-436] vM/LVINTRO
3 <;> nextstate(main -436 optree.t:256) v
7 <@> sort lK
8 <0> pushmark s
9 <0> padav[@a:-437,-436] lRM*
-a <2> aassign[t\d+] KS/COMMON
+a <2> aassign[t2] KS/COMMON
b <1> leavesub[1 ref] K/REFC,1
EOT_EOT
# 1 <;> nextstate(main 427 optree_sort.t:172) v
bcopts => '-exec',
debug => 0,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
- goto -
1 <;> nextstate(main -437 optree.t:325) v
2 <0> padav[@a:-437,-436] vM/LVINTRO
3 <;> nextstate(main -436 optree.t:325) v
bcopts => '-exec',
debug => 0,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
- goto -
1 <;> nextstate(main -437 optree.t:325) v
2 <0> padav[@a:-437,-436] vM/LVINTRO
3 <;> nextstate(main -436 optree.t:325) v
# a <1> leavesub[1 ref] K/REFC,1
EONT_EONT
+} #skip
__END__