newHV doesn't need to turn off POK or NOK, as they will default to not
[p5sagit/p5-mst-13.2.git] / ext / B / t / optree_varinit.t
CommitLineData
724aa791 1#!perl
2
3BEGIN {
5638aaac 4 if ($ENV{PERL_CORE}){
5 chdir('t') if -d 't';
6 @INC = ('.', '../lib', '../ext/B/t');
7 } else {
8 unshift @INC, 't';
9 push @INC, "../../t";
10 }
9cd8f857 11 require Config;
12 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
13 print "1..0 # Skip -- Perl configured without B module\n";
14 exit 0;
15 }
19e169bf 16 # require 'test.pl'; # now done by OptreeCheck
724aa791 17}
18use OptreeCheck;
2ce64696 19use Config;
724aa791 20plan tests => 22;
2ce64696 21SKIP: {
22skip "no perlio in this build", 22 unless $Config::Config{useperlio};
23
724aa791 24pass("OPTIMIZER TESTS - VAR INITIALIZATION");
25
26checkOptree ( name => 'sub {my $a}',
27 bcopts => '-exec',
28 code => sub {my $a},
09337566 29 @open_todo,
724aa791 30 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
31# 1 <;> nextstate(main 45 optree.t:23) v
32# 2 <0> padsv[$a:45,46] M/LVINTRO
33# 3 <1> leavesub[1 ref] K/REFC,1
34EOT_EOT
35# 1 <;> nextstate(main 45 optree.t:23) v
36# 2 <0> padsv[$a:45,46] M/LVINTRO
37# 3 <1> leavesub[1 ref] K/REFC,1
38EONT_EONT
39
40checkOptree ( name => '-exec sub {my $a}',
41 bcopts => '-exec',
42 code => sub {my $a},
09337566 43 @open_todo,
724aa791 44 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 45# 1 <;> nextstate(main 49 optree.t:52) v
46# 2 <0> padsv[$a:49,50] M/LVINTRO
47# 3 <1> leavesub[1 ref] K/REFC,1
48EOT_EOT
724aa791 49# 1 <;> nextstate(main 49 optree.t:45) v
50# 2 <0> padsv[$a:49,50] M/LVINTRO
51# 3 <1> leavesub[1 ref] K/REFC,1
52EONT_EONT
53
54checkOptree ( name => 'sub {our $a}',
55 bcopts => '-exec',
56 code => sub {our $a},
09337566 57 @open_todo,
724aa791 58 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 591 <;> nextstate(main 21 optree.t:47) v
602 <#> gvsv[*a] s/OURINTR
613 <1> leavesub[1 ref] K/REFC,1
62EOT_EOT
724aa791 63# 1 <;> nextstate(main 51 optree.t:56) v
64# 2 <$> gvsv(*a) s/OURINTR
65# 3 <1> leavesub[1 ref] K/REFC,1
66EONT_EONT
67
68checkOptree ( name => 'sub {local $a}',
69 bcopts => '-exec',
70 code => sub {local $a},
09337566 71 @open_todo,
724aa791 72 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
d5ec2987 731 <;> nextstate(main 23 optree.t:57) v:{
724aa791 742 <#> gvsv[*a] s/LVINTRO
753 <1> leavesub[1 ref] K/REFC,1
76EOT_EOT
d5ec2987 77# 1 <;> nextstate(main 53 optree.t:67) v:{
724aa791 78# 2 <$> gvsv(*a) s/LVINTRO
79# 3 <1> leavesub[1 ref] K/REFC,1
80EONT_EONT
81
82checkOptree ( name => 'my $a',
83 prog => 'my $a',
84 bcopts => '-basic',
09337566 85 @open_todo,
724aa791 86 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
87# 4 <@> leave[1 ref] vKP/REFC ->(end)
88# 1 <0> enter ->2
d5ec2987 89# 2 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 90# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
91EOT_EOT
92# 4 <@> leave[1 ref] vKP/REFC ->(end)
93# 1 <0> enter ->2
d5ec2987 94# 2 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 95# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
96EONT_EONT
97
98checkOptree ( name => 'our $a',
99 prog => 'our $a',
100 bcopts => '-basic',
09337566 101 @open_todo,
724aa791 102 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1034 <@> leave[1 ref] vKP/REFC ->(end)
1041 <0> enter ->2
d5ec2987 1052 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 106- <1> ex-rv2sv vK/17 ->4
1073 <#> gvsv[*a] s/OURINTR ->4
108EOT_EOT
109# 4 <@> leave[1 ref] vKP/REFC ->(end)
110# 1 <0> enter ->2
d5ec2987 111# 2 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 112# - <1> ex-rv2sv vK/17 ->4
113# 3 <$> gvsv(*a) s/OURINTR ->4
114EONT_EONT
115
116checkOptree ( name => 'local $a',
117 prog => 'local $a',
19e169bf 118 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791 119 bcopts => '-basic',
09337566 120 @open_todo,
724aa791 121 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1224 <@> leave[1 ref] vKP/REFC ->(end)
1231 <0> enter ->2
d5ec2987 1242 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 125- <1> ex-rv2sv vKM/129 ->4
1263 <#> gvsv[*a] s/LVINTRO ->4
127EOT_EOT
128# 4 <@> leave[1 ref] vKP/REFC ->(end)
129# 1 <0> enter ->2
d5ec2987 130# 2 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 131# - <1> ex-rv2sv vKM/129 ->4
132# 3 <$> gvsv(*a) s/LVINTRO ->4
133EONT_EONT
134
135pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
136
137checkOptree ( name => 'sub {my $a=undef}',
138 code => sub {my $a=undef},
139 bcopts => '-basic',
09337566 140 @open_todo,
724aa791 141 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
0b599ae5 1425 <1> leavesub[1 ref] K/REFC,1 ->(end)
143- <@> lineseq KP ->5
1441 <;> nextstate(main 641 optree_varinit.t:130) v ->2
1454 <2> sassign sKS/2 ->5
1462 <0> undef s ->3
1473 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
724aa791 148EOT_EOT
0b599ae5 149# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
150# - <@> lineseq KP ->5
151# 1 <;> nextstate(main 641 optree_varinit.t:130) v ->2
152# 4 <2> sassign sKS/2 ->5
153# 2 <0> undef s ->3
154# 3 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
724aa791 155EONT_EONT
156
157checkOptree ( name => 'sub {our $a=undef}',
158 code => sub {our $a=undef},
159 note => 'the global must be reset',
160 bcopts => '-basic',
09337566 161 @open_todo,
724aa791 162 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1635 <1> leavesub[1 ref] K/REFC,1 ->(end)
164- <@> lineseq KP ->5
d5ec2987 1651 <;> nextstate(main 26 optree.t:109) v:{ ->2
724aa791 1664 <2> sassign sKS/2 ->5
1672 <0> undef s ->3
168- <1> ex-rv2sv sKRM*/17 ->4
1693 <#> gvsv[*a] s/OURINTR ->4
170EOT_EOT
171# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
172# - <@> lineseq KP ->5
d5ec2987 173# 1 <;> nextstate(main 446 optree_varinit.t:137) v:{ ->2
724aa791 174# 4 <2> sassign sKS/2 ->5
175# 2 <0> undef s ->3
176# - <1> ex-rv2sv sKRM*/17 ->4
177# 3 <$> gvsv(*a) s/OURINTR ->4
178EONT_EONT
179
180checkOptree ( name => 'sub {local $a=undef}',
181 code => sub {local $a=undef},
182 note => 'local not used enough to bother',
183 bcopts => '-basic',
09337566 184 @open_todo,
724aa791 185 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1865 <1> leavesub[1 ref] K/REFC,1 ->(end)
187- <@> lineseq KP ->5
d5ec2987 1881 <;> nextstate(main 28 optree.t:122) v:{ ->2
724aa791 1894 <2> sassign sKS/2 ->5
1902 <0> undef s ->3
191- <1> ex-rv2sv sKRM*/129 ->4
1923 <#> gvsv[*a] s/LVINTRO ->4
193EOT_EOT
194# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
195# - <@> lineseq KP ->5
d5ec2987 196# 1 <;> nextstate(main 58 optree.t:141) v:{ ->2
724aa791 197# 4 <2> sassign sKS/2 ->5
198# 2 <0> undef s ->3
199# - <1> ex-rv2sv sKRM*/129 ->4
200# 3 <$> gvsv(*a) s/LVINTRO ->4
201EONT_EONT
202
203checkOptree ( name => 'my $a=undef',
204 prog => 'my $a=undef',
205 bcopts => '-basic',
09337566 206 @open_todo,
724aa791 207 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
0b599ae5 2086 <@> leave[1 ref] vKP/REFC ->(end)
724aa791 2091 <0> enter ->2
d5ec2987 2102 <;> nextstate(main 1 -e:1) v:{ ->3
0b599ae5 2115 <2> sassign vKS/2 ->6
2123 <0> undef s ->4
2134 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
724aa791 214EOT_EOT
0b599ae5 215# 6 <@> leave[1 ref] vKP/REFC ->(end)
724aa791 216# 1 <0> enter ->2
d5ec2987 217# 2 <;> nextstate(main 1 -e:1) v:{ ->3
0b599ae5 218# 5 <2> sassign vKS/2 ->6
219# 3 <0> undef s ->4
220# 4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
724aa791 221EONT_EONT
222
223checkOptree ( name => 'our $a=undef',
224 prog => 'our $a=undef',
225 note => 'global must be reassigned',
226 bcopts => '-basic',
09337566 227 @open_todo,
724aa791 228 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2296 <@> leave[1 ref] vKP/REFC ->(end)
2301 <0> enter ->2
d5ec2987 2312 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 2325 <2> sassign vKS/2 ->6
2333 <0> undef s ->4
234- <1> ex-rv2sv sKRM*/17 ->5
2354 <#> gvsv[*a] s/OURINTR ->5
236EOT_EOT
237# 6 <@> leave[1 ref] vKP/REFC ->(end)
238# 1 <0> enter ->2
d5ec2987 239# 2 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 240# 5 <2> sassign vKS/2 ->6
241# 3 <0> undef s ->4
242# - <1> ex-rv2sv sKRM*/17 ->5
243# 4 <$> gvsv(*a) s/OURINTR ->5
244EONT_EONT
245
246checkOptree ( name => 'local $a=undef',
247 prog => 'local $a=undef',
19e169bf 248 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791 249 note => 'locals are rare, probly not worth doing',
250 bcopts => '-basic',
09337566 251 @open_todo,
724aa791 252 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2536 <@> leave[1 ref] vKP/REFC ->(end)
2541 <0> enter ->2
d5ec2987 2552 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 2565 <2> sassign vKS/2 ->6
2573 <0> undef s ->4
258- <1> ex-rv2sv sKRM*/129 ->5
2594 <#> gvsv[*a] s/LVINTRO ->5
260EOT_EOT
261# 6 <@> leave[1 ref] vKP/REFC ->(end)
262# 1 <0> enter ->2
d5ec2987 263# 2 <;> nextstate(main 1 -e:1) v:{ ->3
724aa791 264# 5 <2> sassign vKS/2 ->6
265# 3 <0> undef s ->4
266# - <1> ex-rv2sv sKRM*/129 ->5
267# 4 <$> gvsv(*a) s/LVINTRO ->5
268EONT_EONT
269
270checkOptree ( name => 'sub {my $a=()}',
271 code => sub {my $a=()},
724aa791 272 bcopts => '-exec',
09337566 273 @open_todo,
724aa791 274 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2751 <;> nextstate(main -439 optree.t:105) v
2762 <0> stub sP
2773 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2784 <2> sassign sKS/2
2795 <1> leavesub[1 ref] K/REFC,1
280EOT_EOT
281# 1 <;> nextstate(main 438 optree_varinit.t:247) v
282# 2 <0> stub sP
283# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
284# 4 <2> sassign sKS/2
285# 5 <1> leavesub[1 ref] K/REFC,1
286EONT_EONT
287
288checkOptree ( name => 'sub {our $a=()}',
289 code => sub {our $a=()},
290 #todo => 'probly not worth doing',
291 bcopts => '-exec',
09337566 292 @open_todo,
724aa791 293 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
d5ec2987 2941 <;> nextstate(main 31 optree.t:177) v:{
724aa791 2952 <0> stub sP
2963 <#> gvsv[*a] s/OURINTR
2974 <2> sassign sKS/2
2985 <1> leavesub[1 ref] K/REFC,1
299EOT_EOT
d5ec2987 300# 1 <;> nextstate(main 440 optree_varinit.t:262) v:{
724aa791 301# 2 <0> stub sP
302# 3 <$> gvsv(*a) s/OURINTR
303# 4 <2> sassign sKS/2
304# 5 <1> leavesub[1 ref] K/REFC,1
305EONT_EONT
306
307checkOptree ( name => 'sub {local $a=()}',
308 code => sub {local $a=()},
309 #todo => 'probly not worth doing',
310 bcopts => '-exec',
09337566 311 @open_todo,
724aa791 312 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
d5ec2987 3131 <;> nextstate(main 33 optree.t:190) v:{
724aa791 3142 <0> stub sP
3153 <#> gvsv[*a] s/LVINTRO
3164 <2> sassign sKS/2
3175 <1> leavesub[1 ref] K/REFC,1
318EOT_EOT
d5ec2987 319# 1 <;> nextstate(main 63 optree.t:225) v:{
724aa791 320# 2 <0> stub sP
321# 3 <$> gvsv(*a) s/LVINTRO
322# 4 <2> sassign sKS/2
323# 5 <1> leavesub[1 ref] K/REFC,1
324EONT_EONT
325
326checkOptree ( name => 'my $a=()',
327 prog => 'my $a=()',
724aa791 328 bcopts => '-exec',
09337566 329 @open_todo,
724aa791 330 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3311 <0> enter
d5ec2987 3322 <;> nextstate(main 1 -e:1) v:{
724aa791 3333 <0> stub sP
3344 <0> padsv[$a:1,2] sRM*/LVINTRO
3355 <2> sassign vKS/2
3366 <@> leave[1 ref] vKP/REFC
337EOT_EOT
338# 1 <0> enter
d5ec2987 339# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 340# 3 <0> stub sP
341# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
342# 5 <2> sassign vKS/2
343# 6 <@> leave[1 ref] vKP/REFC
344EONT_EONT
345
346checkOptree ( name => 'our $a=()',
347 prog => 'our $a=()',
348 #todo => 'probly not worth doing',
349 bcopts => '-exec',
09337566 350 @open_todo,
724aa791 351 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3521 <0> enter
d5ec2987 3532 <;> nextstate(main 1 -e:1) v:{
724aa791 3543 <0> stub sP
3554 <#> gvsv[*a] s/OURINTR
3565 <2> sassign vKS/2
3576 <@> leave[1 ref] vKP/REFC
358EOT_EOT
359# 1 <0> enter
d5ec2987 360# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 361# 3 <0> stub sP
362# 4 <$> gvsv(*a) s/OURINTR
363# 5 <2> sassign vKS/2
364# 6 <@> leave[1 ref] vKP/REFC
365EONT_EONT
366
367checkOptree ( name => 'local $a=()',
368 prog => 'local $a=()',
19e169bf 369 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791 370 #todo => 'probly not worth doing',
371 bcopts => '-exec',
09337566 372 @open_todo,
724aa791 373 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3741 <0> enter
d5ec2987 3752 <;> nextstate(main 1 -e:1) v:{
724aa791 3763 <0> stub sP
3774 <#> gvsv[*a] s/LVINTRO
3785 <2> sassign vKS/2
3796 <@> leave[1 ref] vKP/REFC
380EOT_EOT
381# 1 <0> enter
d5ec2987 382# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 383# 3 <0> stub sP
384# 4 <$> gvsv(*a) s/LVINTRO
385# 5 <2> sassign vKS/2
386# 6 <@> leave[1 ref] vKP/REFC
387EONT_EONT
388
389checkOptree ( name => 'my ($a,$b)=()',
390 prog => 'my ($a,$b)=()',
391 #todo => 'probly not worth doing',
392 bcopts => '-exec',
09337566 393 @open_todo,
724aa791 394 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
395# 1 <0> enter
d5ec2987 396# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 397# 3 <0> pushmark s
398# 4 <0> pushmark sRM*/128
399# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
400# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
401# 7 <2> aassign[t3] vKS
402# 8 <@> leave[1 ref] vKP/REFC
403EOT_EOT
404# 1 <0> enter
d5ec2987 405# 2 <;> nextstate(main 1 -e:1) v:{
724aa791 406# 3 <0> pushmark s
407# 4 <0> pushmark sRM*/128
408# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
409# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
410# 7 <2> aassign[t3] vKS
411# 8 <@> leave[1 ref] vKP/REFC
412EONT_EONT
413
2ce64696 414} #skip
415
724aa791 416__END__
417