Integrate:
[p5sagit/p5-mst-13.2.git] / ext / B / t / optree_varinit.t
CommitLineData
724aa791 1#!perl
2
3BEGIN {
4 chdir 't';
5 @INC = ('../lib', '../ext/B/t');
9cd8f857 6 require Config;
7 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
8 print "1..0 # Skip -- Perl configured without B module\n";
9 exit 0;
10 }
724aa791 11 require './test.pl';
12}
13use OptreeCheck;
2ce64696 14use Config;
724aa791 15plan tests => 22;
2ce64696 16SKIP: {
17skip "no perlio in this build", 22 unless $Config::Config{useperlio};
18
724aa791 19pass("OPTIMIZER TESTS - VAR INITIALIZATION");
20
21checkOptree ( name => 'sub {my $a}',
22 bcopts => '-exec',
23 code => sub {my $a},
24 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
25# 1 <;> nextstate(main 45 optree.t:23) v
26# 2 <0> padsv[$a:45,46] M/LVINTRO
27# 3 <1> leavesub[1 ref] K/REFC,1
28EOT_EOT
29# 1 <;> nextstate(main 45 optree.t:23) v
30# 2 <0> padsv[$a:45,46] M/LVINTRO
31# 3 <1> leavesub[1 ref] K/REFC,1
32EONT_EONT
33
34checkOptree ( name => '-exec sub {my $a}',
35 bcopts => '-exec',
36 code => sub {my $a},
37 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 38# 1 <;> nextstate(main 49 optree.t:52) v
39# 2 <0> padsv[$a:49,50] M/LVINTRO
40# 3 <1> leavesub[1 ref] K/REFC,1
41EOT_EOT
724aa791 42# 1 <;> nextstate(main 49 optree.t:45) v
43# 2 <0> padsv[$a:49,50] M/LVINTRO
44# 3 <1> leavesub[1 ref] K/REFC,1
45EONT_EONT
46
47checkOptree ( name => 'sub {our $a}',
48 bcopts => '-exec',
49 code => sub {our $a},
50 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 511 <;> nextstate(main 21 optree.t:47) v
522 <#> gvsv[*a] s/OURINTR
533 <1> leavesub[1 ref] K/REFC,1
54EOT_EOT
724aa791 55# 1 <;> nextstate(main 51 optree.t:56) v
56# 2 <$> gvsv(*a) s/OURINTR
57# 3 <1> leavesub[1 ref] K/REFC,1
58EONT_EONT
59
60checkOptree ( name => 'sub {local $a}',
61 bcopts => '-exec',
62 code => sub {local $a},
63 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 641 <;> nextstate(main 23 optree.t:57) v
652 <#> gvsv[*a] s/LVINTRO
663 <1> leavesub[1 ref] K/REFC,1
67EOT_EOT
724aa791 68# 1 <;> nextstate(main 53 optree.t:67) v
69# 2 <$> gvsv(*a) s/LVINTRO
70# 3 <1> leavesub[1 ref] K/REFC,1
71EONT_EONT
72
73checkOptree ( name => 'my $a',
74 prog => 'my $a',
75 bcopts => '-basic',
76 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
77# 4 <@> leave[1 ref] vKP/REFC ->(end)
78# 1 <0> enter ->2
79# 2 <;> nextstate(main 1 -e:1) v ->3
80# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
81EOT_EOT
82# 4 <@> leave[1 ref] vKP/REFC ->(end)
83# 1 <0> enter ->2
84# 2 <;> nextstate(main 1 -e:1) v ->3
85# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
86EONT_EONT
87
88checkOptree ( name => 'our $a',
89 prog => 'our $a',
90 bcopts => '-basic',
91 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
924 <@> leave[1 ref] vKP/REFC ->(end)
931 <0> enter ->2
942 <;> nextstate(main 1 -e:1) v ->3
95- <1> ex-rv2sv vK/17 ->4
963 <#> gvsv[*a] s/OURINTR ->4
97EOT_EOT
98# 4 <@> leave[1 ref] vKP/REFC ->(end)
99# 1 <0> enter ->2
100# 2 <;> nextstate(main 1 -e:1) v ->3
101# - <1> ex-rv2sv vK/17 ->4
102# 3 <$> gvsv(*a) s/OURINTR ->4
103EONT_EONT
104
105checkOptree ( name => 'local $a',
106 prog => 'local $a',
107 bcopts => '-basic',
108 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1094 <@> leave[1 ref] vKP/REFC ->(end)
1101 <0> enter ->2
1112 <;> nextstate(main 1 -e:1) v ->3
112- <1> ex-rv2sv vKM/129 ->4
1133 <#> gvsv[*a] s/LVINTRO ->4
114EOT_EOT
115# 4 <@> leave[1 ref] vKP/REFC ->(end)
116# 1 <0> enter ->2
117# 2 <;> nextstate(main 1 -e:1) v ->3
118# - <1> ex-rv2sv vKM/129 ->4
119# 3 <$> gvsv(*a) s/LVINTRO ->4
120EONT_EONT
121
122pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
123
124checkOptree ( name => 'sub {my $a=undef}',
125 code => sub {my $a=undef},
126 bcopts => '-basic',
127 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1283 <1> leavesub[1 ref] K/REFC,1 ->(end)
129- <@> lineseq KP ->3
1301 <;> nextstate(main 24 optree.t:99) v ->2
1312 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
132EOT_EOT
133# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
134# - <@> lineseq KP ->3
135# 1 <;> nextstate(main 54 optree.t:149) v ->2
136# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
137EONT_EONT
138
139checkOptree ( name => 'sub {our $a=undef}',
140 code => sub {our $a=undef},
141 note => 'the global must be reset',
142 bcopts => '-basic',
143 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1445 <1> leavesub[1 ref] K/REFC,1 ->(end)
145- <@> lineseq KP ->5
1461 <;> nextstate(main 26 optree.t:109) v ->2
1474 <2> sassign sKS/2 ->5
1482 <0> undef s ->3
149- <1> ex-rv2sv sKRM*/17 ->4
1503 <#> gvsv[*a] s/OURINTR ->4
151EOT_EOT
152# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
153# - <@> lineseq KP ->5
154# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
155# 4 <2> sassign sKS/2 ->5
156# 2 <0> undef s ->3
157# - <1> ex-rv2sv sKRM*/17 ->4
158# 3 <$> gvsv(*a) s/OURINTR ->4
159EONT_EONT
160
161checkOptree ( name => 'sub {local $a=undef}',
162 code => sub {local $a=undef},
163 note => 'local not used enough to bother',
164 bcopts => '-basic',
165 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1665 <1> leavesub[1 ref] K/REFC,1 ->(end)
167- <@> lineseq KP ->5
1681 <;> nextstate(main 28 optree.t:122) v ->2
1694 <2> sassign sKS/2 ->5
1702 <0> undef s ->3
171- <1> ex-rv2sv sKRM*/129 ->4
1723 <#> gvsv[*a] s/LVINTRO ->4
173EOT_EOT
174# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
175# - <@> lineseq KP ->5
176# 1 <;> nextstate(main 58 optree.t:141) v ->2
177# 4 <2> sassign sKS/2 ->5
178# 2 <0> undef s ->3
179# - <1> ex-rv2sv sKRM*/129 ->4
180# 3 <$> gvsv(*a) s/LVINTRO ->4
181EONT_EONT
182
183checkOptree ( name => 'my $a=undef',
184 prog => 'my $a=undef',
185 bcopts => '-basic',
186 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1874 <@> leave[1 ref] vKP/REFC ->(end)
1881 <0> enter ->2
1892 <;> nextstate(main 1 -e:1) v ->3
1903 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
191EOT_EOT
192# 4 <@> leave[1 ref] vKP/REFC ->(end)
193# 1 <0> enter ->2
194# 2 <;> nextstate(main 1 -e:1) v ->3
195# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
196EONT_EONT
197
198checkOptree ( name => 'our $a=undef',
199 prog => 'our $a=undef',
200 note => 'global must be reassigned',
201 bcopts => '-basic',
202 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2036 <@> leave[1 ref] vKP/REFC ->(end)
2041 <0> enter ->2
2052 <;> nextstate(main 1 -e:1) v ->3
2065 <2> sassign vKS/2 ->6
2073 <0> undef s ->4
208- <1> ex-rv2sv sKRM*/17 ->5
2094 <#> gvsv[*a] s/OURINTR ->5
210EOT_EOT
211# 6 <@> leave[1 ref] vKP/REFC ->(end)
212# 1 <0> enter ->2
213# 2 <;> nextstate(main 1 -e:1) v ->3
214# 5 <2> sassign vKS/2 ->6
215# 3 <0> undef s ->4
216# - <1> ex-rv2sv sKRM*/17 ->5
217# 4 <$> gvsv(*a) s/OURINTR ->5
218EONT_EONT
219
220checkOptree ( name => 'local $a=undef',
221 prog => 'local $a=undef',
222 note => 'locals are rare, probly not worth doing',
223 bcopts => '-basic',
224 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2256 <@> leave[1 ref] vKP/REFC ->(end)
2261 <0> enter ->2
2272 <;> nextstate(main 1 -e:1) v ->3
2285 <2> sassign vKS/2 ->6
2293 <0> undef s ->4
230- <1> ex-rv2sv sKRM*/129 ->5
2314 <#> gvsv[*a] s/LVINTRO ->5
232EOT_EOT
233# 6 <@> leave[1 ref] vKP/REFC ->(end)
234# 1 <0> enter ->2
235# 2 <;> nextstate(main 1 -e:1) v ->3
236# 5 <2> sassign vKS/2 ->6
237# 3 <0> undef s ->4
238# - <1> ex-rv2sv sKRM*/129 ->5
239# 4 <$> gvsv(*a) s/LVINTRO ->5
240EONT_EONT
241
242checkOptree ( name => 'sub {my $a=()}',
243 code => sub {my $a=()},
cc02ea56 244 todo => 'apparently done, by patch #?',
724aa791 245 bcopts => '-exec',
246 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2471 <;> nextstate(main -439 optree.t:105) v
2482 <0> stub sP
2493 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2504 <2> sassign sKS/2
2515 <1> leavesub[1 ref] K/REFC,1
252EOT_EOT
253# 1 <;> nextstate(main 438 optree_varinit.t:247) v
254# 2 <0> stub sP
255# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
256# 4 <2> sassign sKS/2
257# 5 <1> leavesub[1 ref] K/REFC,1
258EONT_EONT
259
260checkOptree ( name => 'sub {our $a=()}',
261 code => sub {our $a=()},
262 #todo => 'probly not worth doing',
263 bcopts => '-exec',
264 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2651 <;> nextstate(main 31 optree.t:177) v
2662 <0> stub sP
2673 <#> gvsv[*a] s/OURINTR
2684 <2> sassign sKS/2
2695 <1> leavesub[1 ref] K/REFC,1
270EOT_EOT
271# 1 <;> nextstate(main 440 optree_varinit.t:262) v
272# 2 <0> stub sP
273# 3 <$> gvsv(*a) s/OURINTR
274# 4 <2> sassign sKS/2
275# 5 <1> leavesub[1 ref] K/REFC,1
276EONT_EONT
277
278checkOptree ( name => 'sub {local $a=()}',
279 code => sub {local $a=()},
280 #todo => 'probly not worth doing',
281 bcopts => '-exec',
282 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2831 <;> nextstate(main 33 optree.t:190) v
2842 <0> stub sP
2853 <#> gvsv[*a] s/LVINTRO
2864 <2> sassign sKS/2
2875 <1> leavesub[1 ref] K/REFC,1
288EOT_EOT
724aa791 289# 1 <;> nextstate(main 63 optree.t:225) v
290# 2 <0> stub sP
291# 3 <$> gvsv(*a) s/LVINTRO
292# 4 <2> sassign sKS/2
293# 5 <1> leavesub[1 ref] K/REFC,1
294EONT_EONT
295
296checkOptree ( name => 'my $a=()',
297 prog => 'my $a=()',
cc02ea56 298 todo => 'apparently done, by patch #?',
724aa791 299 bcopts => '-exec',
300 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3011 <0> enter
3022 <;> nextstate(main 1 -e:1) v
3033 <0> stub sP
3044 <0> padsv[$a:1,2] sRM*/LVINTRO
3055 <2> sassign vKS/2
3066 <@> leave[1 ref] vKP/REFC
307EOT_EOT
308# 1 <0> enter
309# 2 <;> nextstate(main 1 -e:1) v
310# 3 <0> stub sP
311# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
312# 5 <2> sassign vKS/2
313# 6 <@> leave[1 ref] vKP/REFC
314EONT_EONT
315
316checkOptree ( name => 'our $a=()',
317 prog => 'our $a=()',
318 #todo => 'probly not worth doing',
319 bcopts => '-exec',
320 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3211 <0> enter
3222 <;> nextstate(main 1 -e:1) v
3233 <0> stub sP
3244 <#> gvsv[*a] s/OURINTR
3255 <2> sassign vKS/2
3266 <@> leave[1 ref] vKP/REFC
327EOT_EOT
328# 1 <0> enter
329# 2 <;> nextstate(main 1 -e:1) v
330# 3 <0> stub sP
331# 4 <$> gvsv(*a) s/OURINTR
332# 5 <2> sassign vKS/2
333# 6 <@> leave[1 ref] vKP/REFC
334EONT_EONT
335
336checkOptree ( name => 'local $a=()',
337 prog => 'local $a=()',
338 #todo => 'probly not worth doing',
339 bcopts => '-exec',
340 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3411 <0> enter
3422 <;> nextstate(main 1 -e:1) v
3433 <0> stub sP
3444 <#> gvsv[*a] s/LVINTRO
3455 <2> sassign vKS/2
3466 <@> leave[1 ref] vKP/REFC
347EOT_EOT
348# 1 <0> enter
349# 2 <;> nextstate(main 1 -e:1) v
350# 3 <0> stub sP
351# 4 <$> gvsv(*a) s/LVINTRO
352# 5 <2> sassign vKS/2
353# 6 <@> leave[1 ref] vKP/REFC
354EONT_EONT
355
356checkOptree ( name => 'my ($a,$b)=()',
357 prog => 'my ($a,$b)=()',
358 #todo => 'probly not worth doing',
359 bcopts => '-exec',
360 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
361# 1 <0> enter
362# 2 <;> nextstate(main 1 -e:1) v
363# 3 <0> pushmark s
364# 4 <0> pushmark sRM*/128
365# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
366# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
367# 7 <2> aassign[t3] vKS
368# 8 <@> leave[1 ref] vKP/REFC
369EOT_EOT
370# 1 <0> enter
371# 2 <;> nextstate(main 1 -e:1) v
372# 3 <0> pushmark s
373# 4 <0> pushmark sRM*/128
374# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
375# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
376# 7 <2> aassign[t3] vKS
377# 8 <@> leave[1 ref] vKP/REFC
378EONT_EONT
379
2ce64696 380} #skip
381
724aa791 382__END__
383