diff options
author | Jim Cromie <jcromie@cpan.org> | 2004-03-30 07:39:31 -0700 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2004-04-06 07:29:30 +0000 |
commit | 724aa791452d3e96e29ba14db12e3f5d43f03348 (patch) | |
tree | fde93ae0bf677429114c77e6b70c18ac00e83e61 /ext/B/t/optree_varinit.t | |
parent | 068bd2e7e6b490383a9259507cd9652925bab47a (diff) | |
download | perl-724aa791452d3e96e29ba14db12e3f5d43f03348.tar.gz |
Re: tests for change #22539
Message-ID: <4069E913.5040906@divsol.com>
(with some spelling tweaks)
p4raw-id: //depot/perl@22664
Diffstat (limited to 'ext/B/t/optree_varinit.t')
-rw-r--r-- | ext/B/t/optree_varinit.t | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/ext/B/t/optree_varinit.t b/ext/B/t/optree_varinit.t new file mode 100644 index 0000000000..e8eb8720e0 --- /dev/null +++ b/ext/B/t/optree_varinit.t @@ -0,0 +1,382 @@ +#!perl + +BEGIN { + chdir 't'; + @INC = ('../lib', '../ext/B/t'); + require './test.pl'; +} +use OptreeCheck; + +plan tests => 22; +pass("OPTIMIZER TESTS - VAR INITIALIZATION"); + +checkOptree ( name => 'sub {my $a}', + bcopts => '-exec', + code => sub {my $a}, + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +# 1 <;> nextstate(main 45 optree.t:23) v +# 2 <0> padsv[$a:45,46] M/LVINTRO +# 3 <1> leavesub[1 ref] K/REFC,1 +EOT_EOT +# 1 <;> nextstate(main 45 optree.t:23) v +# 2 <0> padsv[$a:45,46] M/LVINTRO +# 3 <1> leavesub[1 ref] K/REFC,1 +EONT_EONT + +checkOptree ( name => '-exec sub {my $a}', + bcopts => '-exec', + code => sub {my $a}, + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +# goto - +# 1 <;> nextstate(main 49 optree.t:52) v +# 2 <0> padsv[$a:49,50] M/LVINTRO +# 3 <1> leavesub[1 ref] K/REFC,1 +EOT_EOT +# goto - +# 1 <;> nextstate(main 49 optree.t:45) v +# 2 <0> padsv[$a:49,50] M/LVINTRO +# 3 <1> leavesub[1 ref] K/REFC,1 +EONT_EONT + +checkOptree ( name => 'sub {our $a}', + bcopts => '-exec', + code => sub {our $a}, + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); + goto - +1 <;> nextstate(main 21 optree.t:47) v +2 <#> gvsv[*a] s/OURINTR +3 <1> leavesub[1 ref] K/REFC,1 +EOT_EOT +# goto - +# 1 <;> nextstate(main 51 optree.t:56) v +# 2 <$> gvsv(*a) s/OURINTR +# 3 <1> leavesub[1 ref] K/REFC,1 +EONT_EONT + +checkOptree ( name => 'sub {local $a}', + bcopts => '-exec', + code => sub {local $a}, + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); + goto - +1 <;> nextstate(main 23 optree.t:57) v +2 <#> gvsv[*a] s/LVINTRO +3 <1> leavesub[1 ref] K/REFC,1 +EOT_EOT +# goto - +# 1 <;> nextstate(main 53 optree.t:67) v +# 2 <$> gvsv(*a) s/LVINTRO +# 3 <1> leavesub[1 ref] K/REFC,1 +EONT_EONT + +checkOptree ( name => 'my $a', + prog => 'my $a', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +# 4 <@> leave[1 ref] vKP/REFC ->(end) +# 1 <0> enter ->2 +# 2 <;> nextstate(main 1 -e:1) v ->3 +# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4 +EOT_EOT +# 4 <@> leave[1 ref] vKP/REFC ->(end) +# 1 <0> enter ->2 +# 2 <;> nextstate(main 1 -e:1) v ->3 +# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4 +EONT_EONT + +checkOptree ( name => 'our $a', + prog => 'our $a', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +4 <@> leave[1 ref] vKP/REFC ->(end) +1 <0> enter ->2 +2 <;> nextstate(main 1 -e:1) v ->3 +- <1> ex-rv2sv vK/17 ->4 +3 <#> gvsv[*a] s/OURINTR ->4 +EOT_EOT +# 4 <@> leave[1 ref] vKP/REFC ->(end) +# 1 <0> enter ->2 +# 2 <;> nextstate(main 1 -e:1) v ->3 +# - <1> ex-rv2sv vK/17 ->4 +# 3 <$> gvsv(*a) s/OURINTR ->4 +EONT_EONT + +checkOptree ( name => 'local $a', + prog => 'local $a', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +4 <@> leave[1 ref] vKP/REFC ->(end) +1 <0> enter ->2 +2 <;> nextstate(main 1 -e:1) v ->3 +- <1> ex-rv2sv vKM/129 ->4 +3 <#> gvsv[*a] s/LVINTRO ->4 +EOT_EOT +# 4 <@> leave[1 ref] vKP/REFC ->(end) +# 1 <0> enter ->2 +# 2 <;> nextstate(main 1 -e:1) v ->3 +# - <1> ex-rv2sv vKM/129 ->4 +# 3 <$> gvsv(*a) s/LVINTRO ->4 +EONT_EONT + +pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef"); + +checkOptree ( name => 'sub {my $a=undef}', + code => sub {my $a=undef}, + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +3 <1> leavesub[1 ref] K/REFC,1 ->(end) +- <@> lineseq KP ->3 +1 <;> nextstate(main 24 optree.t:99) v ->2 +2 <0> padsv[$a:24,25] sRM*/LVINTRO ->3 +EOT_EOT +# 3 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->3 +# 1 <;> nextstate(main 54 optree.t:149) v ->2 +# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3 +EONT_EONT + +checkOptree ( name => 'sub {our $a=undef}', + code => sub {our $a=undef}, + note => 'the global must be reset', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +5 <1> leavesub[1 ref] K/REFC,1 ->(end) +- <@> lineseq KP ->5 +1 <;> nextstate(main 26 optree.t:109) v ->2 +4 <2> sassign sKS/2 ->5 +2 <0> undef s ->3 +- <1> ex-rv2sv sKRM*/17 ->4 +3 <#> gvsv[*a] s/OURINTR ->4 +EOT_EOT +# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->5 +# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2 +# 4 <2> sassign sKS/2 ->5 +# 2 <0> undef s ->3 +# - <1> ex-rv2sv sKRM*/17 ->4 +# 3 <$> gvsv(*a) s/OURINTR ->4 +EONT_EONT + +checkOptree ( name => 'sub {local $a=undef}', + code => sub {local $a=undef}, + note => 'local not used enough to bother', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +5 <1> leavesub[1 ref] K/REFC,1 ->(end) +- <@> lineseq KP ->5 +1 <;> nextstate(main 28 optree.t:122) v ->2 +4 <2> sassign sKS/2 ->5 +2 <0> undef s ->3 +- <1> ex-rv2sv sKRM*/129 ->4 +3 <#> gvsv[*a] s/LVINTRO ->4 +EOT_EOT +# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->5 +# 1 <;> nextstate(main 58 optree.t:141) v ->2 +# 4 <2> sassign sKS/2 ->5 +# 2 <0> undef s ->3 +# - <1> ex-rv2sv sKRM*/129 ->4 +# 3 <$> gvsv(*a) s/LVINTRO ->4 +EONT_EONT + +checkOptree ( name => 'my $a=undef', + prog => 'my $a=undef', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +4 <@> leave[1 ref] vKP/REFC ->(end) +1 <0> enter ->2 +2 <;> nextstate(main 1 -e:1) v ->3 +3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4 +EOT_EOT +# 4 <@> leave[1 ref] vKP/REFC ->(end) +# 1 <0> enter ->2 +# 2 <;> nextstate(main 1 -e:1) v ->3 +# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4 +EONT_EONT + +checkOptree ( name => 'our $a=undef', + prog => 'our $a=undef', + note => 'global must be reassigned', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +6 <@> leave[1 ref] vKP/REFC ->(end) +1 <0> enter ->2 +2 <;> nextstate(main 1 -e:1) v ->3 +5 <2> sassign vKS/2 ->6 +3 <0> undef s ->4 +- <1> ex-rv2sv sKRM*/17 ->5 +4 <#> gvsv[*a] s/OURINTR ->5 +EOT_EOT +# 6 <@> leave[1 ref] vKP/REFC ->(end) +# 1 <0> enter ->2 +# 2 <;> nextstate(main 1 -e:1) v ->3 +# 5 <2> sassign vKS/2 ->6 +# 3 <0> undef s ->4 +# - <1> ex-rv2sv sKRM*/17 ->5 +# 4 <$> gvsv(*a) s/OURINTR ->5 +EONT_EONT + +checkOptree ( name => 'local $a=undef', + prog => 'local $a=undef', + note => 'locals are rare, probly not worth doing', + bcopts => '-basic', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +6 <@> leave[1 ref] vKP/REFC ->(end) +1 <0> enter ->2 +2 <;> nextstate(main 1 -e:1) v ->3 +5 <2> sassign vKS/2 ->6 +3 <0> undef s ->4 +- <1> ex-rv2sv sKRM*/129 ->5 +4 <#> gvsv[*a] s/LVINTRO ->5 +EOT_EOT +# 6 <@> leave[1 ref] vKP/REFC ->(end) +# 1 <0> enter ->2 +# 2 <;> nextstate(main 1 -e:1) v ->3 +# 5 <2> sassign vKS/2 ->6 +# 3 <0> undef s ->4 +# - <1> ex-rv2sv sKRM*/129 ->5 +# 4 <$> gvsv(*a) s/LVINTRO ->5 +EONT_EONT + +checkOptree ( name => 'sub {my $a=()}', + code => sub {my $a=()}, + todo => 'optimize', + bcopts => '-exec', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); + goto - +1 <;> nextstate(main -439 optree.t:105) v +2 <0> stub sP +3 <0> padsv[$a:-439,-438] sRM*/LVINTRO +4 <2> sassign sKS/2 +5 <1> leavesub[1 ref] K/REFC,1 +EOT_EOT +# 1 <;> nextstate(main 438 optree_varinit.t:247) v +# 2 <0> stub sP +# 3 <0> padsv[$a:438,439] sRM*/LVINTRO +# 4 <2> sassign sKS/2 +# 5 <1> leavesub[1 ref] K/REFC,1 +EONT_EONT + +checkOptree ( name => 'sub {our $a=()}', + code => sub {our $a=()}, + #todo => 'probly not worth doing', + bcopts => '-exec', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +1 <;> nextstate(main 31 optree.t:177) v +2 <0> stub sP +3 <#> gvsv[*a] s/OURINTR +4 <2> sassign sKS/2 +5 <1> leavesub[1 ref] K/REFC,1 +EOT_EOT +# 1 <;> nextstate(main 440 optree_varinit.t:262) v +# 2 <0> stub sP +# 3 <$> gvsv(*a) s/OURINTR +# 4 <2> sassign sKS/2 +# 5 <1> leavesub[1 ref] K/REFC,1 +EONT_EONT + +checkOptree ( name => 'sub {local $a=()}', + code => sub {local $a=()}, + #todo => 'probly not worth doing', + bcopts => '-exec', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); + goto - +1 <;> nextstate(main 33 optree.t:190) v +2 <0> stub sP +3 <#> gvsv[*a] s/LVINTRO +4 <2> sassign sKS/2 +5 <1> leavesub[1 ref] K/REFC,1 +EOT_EOT +# goto - +# 1 <;> nextstate(main 63 optree.t:225) v +# 2 <0> stub sP +# 3 <$> gvsv(*a) s/LVINTRO +# 4 <2> sassign sKS/2 +# 5 <1> leavesub[1 ref] K/REFC,1 +EONT_EONT + +checkOptree ( name => 'my $a=()', + prog => 'my $a=()', + todo => 'optimize ? its one of the idioms', + bcopts => '-exec', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +1 <0> enter +2 <;> nextstate(main 1 -e:1) v +3 <0> stub sP +4 <0> padsv[$a:1,2] sRM*/LVINTRO +5 <2> sassign vKS/2 +6 <@> leave[1 ref] vKP/REFC +EOT_EOT +# 1 <0> enter +# 2 <;> nextstate(main 1 -e:1) v +# 3 <0> stub sP +# 4 <0> padsv[$a:1,2] sRM*/LVINTRO +# 5 <2> sassign vKS/2 +# 6 <@> leave[1 ref] vKP/REFC +EONT_EONT + +checkOptree ( name => 'our $a=()', + prog => 'our $a=()', + #todo => 'probly not worth doing', + bcopts => '-exec', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +1 <0> enter +2 <;> nextstate(main 1 -e:1) v +3 <0> stub sP +4 <#> gvsv[*a] s/OURINTR +5 <2> sassign vKS/2 +6 <@> leave[1 ref] vKP/REFC +EOT_EOT +# 1 <0> enter +# 2 <;> nextstate(main 1 -e:1) v +# 3 <0> stub sP +# 4 <$> gvsv(*a) s/OURINTR +# 5 <2> sassign vKS/2 +# 6 <@> leave[1 ref] vKP/REFC +EONT_EONT + +checkOptree ( name => 'local $a=()', + prog => 'local $a=()', + #todo => 'probly not worth doing', + bcopts => '-exec', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +1 <0> enter +2 <;> nextstate(main 1 -e:1) v +3 <0> stub sP +4 <#> gvsv[*a] s/LVINTRO +5 <2> sassign vKS/2 +6 <@> leave[1 ref] vKP/REFC +EOT_EOT +# 1 <0> enter +# 2 <;> nextstate(main 1 -e:1) v +# 3 <0> stub sP +# 4 <$> gvsv(*a) s/LVINTRO +# 5 <2> sassign vKS/2 +# 6 <@> leave[1 ref] vKP/REFC +EONT_EONT + +checkOptree ( name => 'my ($a,$b)=()', + prog => 'my ($a,$b)=()', + #todo => 'probly not worth doing', + bcopts => '-exec', + expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); +# 1 <0> enter +# 2 <;> nextstate(main 1 -e:1) v +# 3 <0> pushmark s +# 4 <0> pushmark sRM*/128 +# 5 <0> padsv[$a:1,2] lRM*/LVINTRO +# 6 <0> padsv[$b:1,2] lRM*/LVINTRO +# 7 <2> aassign[t3] vKS +# 8 <@> leave[1 ref] vKP/REFC +EOT_EOT +# 1 <0> enter +# 2 <;> nextstate(main 1 -e:1) v +# 3 <0> pushmark s +# 4 <0> pushmark sRM*/128 +# 5 <0> padsv[$a:1,2] lRM*/LVINTRO +# 6 <0> padsv[$b:1,2] lRM*/LVINTRO +# 7 <2> aassign[t3] vKS +# 8 <@> leave[1 ref] vKP/REFC +EONT_EONT + +__END__ + |