Cleanup ext/B tests for -w and to run separately
[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 }
8dd2f9d4 16 if ($Config::Config{'extensions'} !~ /\bData\/Dumper\b/) {
2799c206 17 print
18 "1..0 # Skip: Data::Dumper was not built, needed by OptreeCheck\n";
19 exit 0;
20 }
5638aaac 21 require 'test.pl';
724aa791 22}
23use OptreeCheck;
2ce64696 24use Config;
724aa791 25plan tests => 22;
2ce64696 26SKIP: {
27skip "no perlio in this build", 22 unless $Config::Config{useperlio};
28
724aa791 29pass("OPTIMIZER TESTS - VAR INITIALIZATION");
30
31checkOptree ( name => 'sub {my $a}',
32 bcopts => '-exec',
33 code => sub {my $a},
34 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
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
38EOT_EOT
39# 1 <;> nextstate(main 45 optree.t:23) v
40# 2 <0> padsv[$a:45,46] M/LVINTRO
41# 3 <1> leavesub[1 ref] K/REFC,1
42EONT_EONT
43
44checkOptree ( name => '-exec sub {my $a}',
45 bcopts => '-exec',
46 code => sub {my $a},
47 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 48# 1 <;> nextstate(main 49 optree.t:52) v
49# 2 <0> padsv[$a:49,50] M/LVINTRO
50# 3 <1> leavesub[1 ref] K/REFC,1
51EOT_EOT
724aa791 52# 1 <;> nextstate(main 49 optree.t:45) v
53# 2 <0> padsv[$a:49,50] M/LVINTRO
54# 3 <1> leavesub[1 ref] K/REFC,1
55EONT_EONT
56
57checkOptree ( name => 'sub {our $a}',
58 bcopts => '-exec',
59 code => sub {our $a},
60 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 611 <;> nextstate(main 21 optree.t:47) v
622 <#> gvsv[*a] s/OURINTR
633 <1> leavesub[1 ref] K/REFC,1
64EOT_EOT
724aa791 65# 1 <;> nextstate(main 51 optree.t:56) v
66# 2 <$> gvsv(*a) s/OURINTR
67# 3 <1> leavesub[1 ref] K/REFC,1
68EONT_EONT
69
70checkOptree ( name => 'sub {local $a}',
71 bcopts => '-exec',
72 code => sub {local $a},
73 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 741 <;> nextstate(main 23 optree.t:57) v
752 <#> gvsv[*a] s/LVINTRO
763 <1> leavesub[1 ref] K/REFC,1
77EOT_EOT
724aa791 78# 1 <;> nextstate(main 53 optree.t:67) v
79# 2 <$> gvsv(*a) s/LVINTRO
80# 3 <1> leavesub[1 ref] K/REFC,1
81EONT_EONT
82
83checkOptree ( name => 'my $a',
84 prog => 'my $a',
85 bcopts => '-basic',
86 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
87# 4 <@> leave[1 ref] vKP/REFC ->(end)
88# 1 <0> enter ->2
89# 2 <;> nextstate(main 1 -e:1) v ->3
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
94# 2 <;> nextstate(main 1 -e:1) v ->3
95# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
96EONT_EONT
97
98checkOptree ( name => 'our $a',
99 prog => 'our $a',
100 bcopts => '-basic',
101 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1024 <@> leave[1 ref] vKP/REFC ->(end)
1031 <0> enter ->2
1042 <;> nextstate(main 1 -e:1) v ->3
105- <1> ex-rv2sv vK/17 ->4
1063 <#> gvsv[*a] s/OURINTR ->4
107EOT_EOT
108# 4 <@> leave[1 ref] vKP/REFC ->(end)
109# 1 <0> enter ->2
110# 2 <;> nextstate(main 1 -e:1) v ->3
111# - <1> ex-rv2sv vK/17 ->4
112# 3 <$> gvsv(*a) s/OURINTR ->4
113EONT_EONT
114
115checkOptree ( name => 'local $a',
116 prog => 'local $a',
117 bcopts => '-basic',
118 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1194 <@> leave[1 ref] vKP/REFC ->(end)
1201 <0> enter ->2
1212 <;> nextstate(main 1 -e:1) v ->3
122- <1> ex-rv2sv vKM/129 ->4
1233 <#> gvsv[*a] s/LVINTRO ->4
124EOT_EOT
125# 4 <@> leave[1 ref] vKP/REFC ->(end)
126# 1 <0> enter ->2
127# 2 <;> nextstate(main 1 -e:1) v ->3
128# - <1> ex-rv2sv vKM/129 ->4
129# 3 <$> gvsv(*a) s/LVINTRO ->4
130EONT_EONT
131
132pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
133
134checkOptree ( name => 'sub {my $a=undef}',
135 code => sub {my $a=undef},
136 bcopts => '-basic',
137 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1383 <1> leavesub[1 ref] K/REFC,1 ->(end)
139- <@> lineseq KP ->3
1401 <;> nextstate(main 24 optree.t:99) v ->2
1412 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
142EOT_EOT
143# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
144# - <@> lineseq KP ->3
145# 1 <;> nextstate(main 54 optree.t:149) v ->2
146# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
147EONT_EONT
148
149checkOptree ( name => 'sub {our $a=undef}',
150 code => sub {our $a=undef},
151 note => 'the global must be reset',
152 bcopts => '-basic',
153 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1545 <1> leavesub[1 ref] K/REFC,1 ->(end)
155- <@> lineseq KP ->5
1561 <;> nextstate(main 26 optree.t:109) v ->2
1574 <2> sassign sKS/2 ->5
1582 <0> undef s ->3
159- <1> ex-rv2sv sKRM*/17 ->4
1603 <#> gvsv[*a] s/OURINTR ->4
161EOT_EOT
162# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
163# - <@> lineseq KP ->5
164# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
165# 4 <2> sassign sKS/2 ->5
166# 2 <0> undef s ->3
167# - <1> ex-rv2sv sKRM*/17 ->4
168# 3 <$> gvsv(*a) s/OURINTR ->4
169EONT_EONT
170
171checkOptree ( name => 'sub {local $a=undef}',
172 code => sub {local $a=undef},
173 note => 'local not used enough to bother',
174 bcopts => '-basic',
175 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1765 <1> leavesub[1 ref] K/REFC,1 ->(end)
177- <@> lineseq KP ->5
1781 <;> nextstate(main 28 optree.t:122) v ->2
1794 <2> sassign sKS/2 ->5
1802 <0> undef s ->3
181- <1> ex-rv2sv sKRM*/129 ->4
1823 <#> gvsv[*a] s/LVINTRO ->4
183EOT_EOT
184# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
185# - <@> lineseq KP ->5
186# 1 <;> nextstate(main 58 optree.t:141) v ->2
187# 4 <2> sassign sKS/2 ->5
188# 2 <0> undef s ->3
189# - <1> ex-rv2sv sKRM*/129 ->4
190# 3 <$> gvsv(*a) s/LVINTRO ->4
191EONT_EONT
192
193checkOptree ( name => 'my $a=undef',
194 prog => 'my $a=undef',
195 bcopts => '-basic',
196 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1974 <@> leave[1 ref] vKP/REFC ->(end)
1981 <0> enter ->2
1992 <;> nextstate(main 1 -e:1) v ->3
2003 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
201EOT_EOT
202# 4 <@> leave[1 ref] vKP/REFC ->(end)
203# 1 <0> enter ->2
204# 2 <;> nextstate(main 1 -e:1) v ->3
205# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
206EONT_EONT
207
208checkOptree ( name => 'our $a=undef',
209 prog => 'our $a=undef',
210 note => 'global must be reassigned',
211 bcopts => '-basic',
212 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2136 <@> leave[1 ref] vKP/REFC ->(end)
2141 <0> enter ->2
2152 <;> nextstate(main 1 -e:1) v ->3
2165 <2> sassign vKS/2 ->6
2173 <0> undef s ->4
218- <1> ex-rv2sv sKRM*/17 ->5
2194 <#> gvsv[*a] s/OURINTR ->5
220EOT_EOT
221# 6 <@> leave[1 ref] vKP/REFC ->(end)
222# 1 <0> enter ->2
223# 2 <;> nextstate(main 1 -e:1) v ->3
224# 5 <2> sassign vKS/2 ->6
225# 3 <0> undef s ->4
226# - <1> ex-rv2sv sKRM*/17 ->5
227# 4 <$> gvsv(*a) s/OURINTR ->5
228EONT_EONT
229
230checkOptree ( name => 'local $a=undef',
231 prog => 'local $a=undef',
232 note => 'locals are rare, probly not worth doing',
233 bcopts => '-basic',
234 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2356 <@> leave[1 ref] vKP/REFC ->(end)
2361 <0> enter ->2
2372 <;> nextstate(main 1 -e:1) v ->3
2385 <2> sassign vKS/2 ->6
2393 <0> undef s ->4
240- <1> ex-rv2sv sKRM*/129 ->5
2414 <#> gvsv[*a] s/LVINTRO ->5
242EOT_EOT
243# 6 <@> leave[1 ref] vKP/REFC ->(end)
244# 1 <0> enter ->2
245# 2 <;> nextstate(main 1 -e:1) v ->3
246# 5 <2> sassign vKS/2 ->6
247# 3 <0> undef s ->4
248# - <1> ex-rv2sv sKRM*/129 ->5
249# 4 <$> gvsv(*a) s/LVINTRO ->5
250EONT_EONT
251
252checkOptree ( name => 'sub {my $a=()}',
253 code => sub {my $a=()},
724aa791 254 bcopts => '-exec',
255 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2561 <;> nextstate(main -439 optree.t:105) v
2572 <0> stub sP
2583 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2594 <2> sassign sKS/2
2605 <1> leavesub[1 ref] K/REFC,1
261EOT_EOT
262# 1 <;> nextstate(main 438 optree_varinit.t:247) v
263# 2 <0> stub sP
264# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
265# 4 <2> sassign sKS/2
266# 5 <1> leavesub[1 ref] K/REFC,1
267EONT_EONT
268
269checkOptree ( name => 'sub {our $a=()}',
270 code => sub {our $a=()},
271 #todo => 'probly not worth doing',
272 bcopts => '-exec',
273 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2741 <;> nextstate(main 31 optree.t:177) v
2752 <0> stub sP
2763 <#> gvsv[*a] s/OURINTR
2774 <2> sassign sKS/2
2785 <1> leavesub[1 ref] K/REFC,1
279EOT_EOT
280# 1 <;> nextstate(main 440 optree_varinit.t:262) v
281# 2 <0> stub sP
282# 3 <$> gvsv(*a) s/OURINTR
283# 4 <2> sassign sKS/2
284# 5 <1> leavesub[1 ref] K/REFC,1
285EONT_EONT
286
287checkOptree ( name => 'sub {local $a=()}',
288 code => sub {local $a=()},
289 #todo => 'probly not worth doing',
290 bcopts => '-exec',
291 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2921 <;> nextstate(main 33 optree.t:190) v
2932 <0> stub sP
2943 <#> gvsv[*a] s/LVINTRO
2954 <2> sassign sKS/2
2965 <1> leavesub[1 ref] K/REFC,1
297EOT_EOT
724aa791 298# 1 <;> nextstate(main 63 optree.t:225) v
299# 2 <0> stub sP
300# 3 <$> gvsv(*a) s/LVINTRO
301# 4 <2> sassign sKS/2
302# 5 <1> leavesub[1 ref] K/REFC,1
303EONT_EONT
304
305checkOptree ( name => 'my $a=()',
306 prog => 'my $a=()',
724aa791 307 bcopts => '-exec',
308 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3091 <0> enter
3102 <;> nextstate(main 1 -e:1) v
3113 <0> stub sP
3124 <0> padsv[$a:1,2] sRM*/LVINTRO
3135 <2> sassign vKS/2
3146 <@> leave[1 ref] vKP/REFC
315EOT_EOT
316# 1 <0> enter
317# 2 <;> nextstate(main 1 -e:1) v
318# 3 <0> stub sP
319# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
320# 5 <2> sassign vKS/2
321# 6 <@> leave[1 ref] vKP/REFC
322EONT_EONT
323
324checkOptree ( name => 'our $a=()',
325 prog => 'our $a=()',
326 #todo => 'probly not worth doing',
327 bcopts => '-exec',
328 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3291 <0> enter
3302 <;> nextstate(main 1 -e:1) v
3313 <0> stub sP
3324 <#> gvsv[*a] s/OURINTR
3335 <2> sassign vKS/2
3346 <@> leave[1 ref] vKP/REFC
335EOT_EOT
336# 1 <0> enter
337# 2 <;> nextstate(main 1 -e:1) v
338# 3 <0> stub sP
339# 4 <$> gvsv(*a) s/OURINTR
340# 5 <2> sassign vKS/2
341# 6 <@> leave[1 ref] vKP/REFC
342EONT_EONT
343
344checkOptree ( name => 'local $a=()',
345 prog => 'local $a=()',
346 #todo => 'probly not worth doing',
347 bcopts => '-exec',
348 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3491 <0> enter
3502 <;> nextstate(main 1 -e:1) v
3513 <0> stub sP
3524 <#> gvsv[*a] s/LVINTRO
3535 <2> sassign vKS/2
3546 <@> leave[1 ref] vKP/REFC
355EOT_EOT
356# 1 <0> enter
357# 2 <;> nextstate(main 1 -e:1) v
358# 3 <0> stub sP
359# 4 <$> gvsv(*a) s/LVINTRO
360# 5 <2> sassign vKS/2
361# 6 <@> leave[1 ref] vKP/REFC
362EONT_EONT
363
364checkOptree ( name => 'my ($a,$b)=()',
365 prog => 'my ($a,$b)=()',
366 #todo => 'probly not worth doing',
367 bcopts => '-exec',
368 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
369# 1 <0> enter
370# 2 <;> nextstate(main 1 -e:1) v
371# 3 <0> pushmark s
372# 4 <0> pushmark sRM*/128
373# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
374# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
375# 7 <2> aassign[t3] vKS
376# 8 <@> leave[1 ref] vKP/REFC
377EOT_EOT
378# 1 <0> enter
379# 2 <;> nextstate(main 1 -e:1) v
380# 3 <0> pushmark s
381# 4 <0> pushmark sRM*/128
382# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
383# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
384# 7 <2> aassign[t3] vKS
385# 8 <@> leave[1 ref] vKP/REFC
386EONT_EONT
387
2ce64696 388} #skip
389
724aa791 390__END__
391