Skip tests that require Data::Dumper if it is not built
[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 }
2799c206 11 if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
12 print
13 "1..0 # Skip: Data::Dumper was not built, needed by OptreeCheck\n";
14 exit 0;
15 }
724aa791 16 require './test.pl';
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},
29 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
30# 1 <;> nextstate(main 45 optree.t:23) v
31# 2 <0> padsv[$a:45,46] M/LVINTRO
32# 3 <1> leavesub[1 ref] K/REFC,1
33EOT_EOT
34# 1 <;> nextstate(main 45 optree.t:23) v
35# 2 <0> padsv[$a:45,46] M/LVINTRO
36# 3 <1> leavesub[1 ref] K/REFC,1
37EONT_EONT
38
39checkOptree ( name => '-exec sub {my $a}',
40 bcopts => '-exec',
41 code => sub {my $a},
42 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 43# 1 <;> nextstate(main 49 optree.t:52) v
44# 2 <0> padsv[$a:49,50] M/LVINTRO
45# 3 <1> leavesub[1 ref] K/REFC,1
46EOT_EOT
724aa791 47# 1 <;> nextstate(main 49 optree.t:45) v
48# 2 <0> padsv[$a:49,50] M/LVINTRO
49# 3 <1> leavesub[1 ref] K/REFC,1
50EONT_EONT
51
52checkOptree ( name => 'sub {our $a}',
53 bcopts => '-exec',
54 code => sub {our $a},
55 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 561 <;> nextstate(main 21 optree.t:47) v
572 <#> gvsv[*a] s/OURINTR
583 <1> leavesub[1 ref] K/REFC,1
59EOT_EOT
724aa791 60# 1 <;> nextstate(main 51 optree.t:56) v
61# 2 <$> gvsv(*a) s/OURINTR
62# 3 <1> leavesub[1 ref] K/REFC,1
63EONT_EONT
64
65checkOptree ( name => 'sub {local $a}',
66 bcopts => '-exec',
67 code => sub {local $a},
68 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 691 <;> nextstate(main 23 optree.t:57) v
702 <#> gvsv[*a] s/LVINTRO
713 <1> leavesub[1 ref] K/REFC,1
72EOT_EOT
724aa791 73# 1 <;> nextstate(main 53 optree.t:67) v
74# 2 <$> gvsv(*a) s/LVINTRO
75# 3 <1> leavesub[1 ref] K/REFC,1
76EONT_EONT
77
78checkOptree ( name => 'my $a',
79 prog => 'my $a',
80 bcopts => '-basic',
81 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
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
86EOT_EOT
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
91EONT_EONT
92
93checkOptree ( name => 'our $a',
94 prog => 'our $a',
95 bcopts => '-basic',
96 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
974 <@> leave[1 ref] vKP/REFC ->(end)
981 <0> enter ->2
992 <;> nextstate(main 1 -e:1) v ->3
100- <1> ex-rv2sv vK/17 ->4
1013 <#> gvsv[*a] s/OURINTR ->4
102EOT_EOT
103# 4 <@> leave[1 ref] vKP/REFC ->(end)
104# 1 <0> enter ->2
105# 2 <;> nextstate(main 1 -e:1) v ->3
106# - <1> ex-rv2sv vK/17 ->4
107# 3 <$> gvsv(*a) s/OURINTR ->4
108EONT_EONT
109
110checkOptree ( name => 'local $a',
111 prog => 'local $a',
112 bcopts => '-basic',
113 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1144 <@> leave[1 ref] vKP/REFC ->(end)
1151 <0> enter ->2
1162 <;> nextstate(main 1 -e:1) v ->3
117- <1> ex-rv2sv vKM/129 ->4
1183 <#> gvsv[*a] s/LVINTRO ->4
119EOT_EOT
120# 4 <@> leave[1 ref] vKP/REFC ->(end)
121# 1 <0> enter ->2
122# 2 <;> nextstate(main 1 -e:1) v ->3
123# - <1> ex-rv2sv vKM/129 ->4
124# 3 <$> gvsv(*a) s/LVINTRO ->4
125EONT_EONT
126
127pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
128
129checkOptree ( name => 'sub {my $a=undef}',
130 code => sub {my $a=undef},
131 bcopts => '-basic',
132 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1333 <1> leavesub[1 ref] K/REFC,1 ->(end)
134- <@> lineseq KP ->3
1351 <;> nextstate(main 24 optree.t:99) v ->2
1362 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
137EOT_EOT
138# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
139# - <@> lineseq KP ->3
140# 1 <;> nextstate(main 54 optree.t:149) v ->2
141# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
142EONT_EONT
143
144checkOptree ( name => 'sub {our $a=undef}',
145 code => sub {our $a=undef},
146 note => 'the global must be reset',
147 bcopts => '-basic',
148 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1495 <1> leavesub[1 ref] K/REFC,1 ->(end)
150- <@> lineseq KP ->5
1511 <;> nextstate(main 26 optree.t:109) v ->2
1524 <2> sassign sKS/2 ->5
1532 <0> undef s ->3
154- <1> ex-rv2sv sKRM*/17 ->4
1553 <#> gvsv[*a] s/OURINTR ->4
156EOT_EOT
157# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
158# - <@> lineseq KP ->5
159# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
160# 4 <2> sassign sKS/2 ->5
161# 2 <0> undef s ->3
162# - <1> ex-rv2sv sKRM*/17 ->4
163# 3 <$> gvsv(*a) s/OURINTR ->4
164EONT_EONT
165
166checkOptree ( name => 'sub {local $a=undef}',
167 code => sub {local $a=undef},
168 note => 'local not used enough to bother',
169 bcopts => '-basic',
170 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1715 <1> leavesub[1 ref] K/REFC,1 ->(end)
172- <@> lineseq KP ->5
1731 <;> nextstate(main 28 optree.t:122) v ->2
1744 <2> sassign sKS/2 ->5
1752 <0> undef s ->3
176- <1> ex-rv2sv sKRM*/129 ->4
1773 <#> gvsv[*a] s/LVINTRO ->4
178EOT_EOT
179# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
180# - <@> lineseq KP ->5
181# 1 <;> nextstate(main 58 optree.t:141) v ->2
182# 4 <2> sassign sKS/2 ->5
183# 2 <0> undef s ->3
184# - <1> ex-rv2sv sKRM*/129 ->4
185# 3 <$> gvsv(*a) s/LVINTRO ->4
186EONT_EONT
187
188checkOptree ( name => 'my $a=undef',
189 prog => 'my $a=undef',
190 bcopts => '-basic',
191 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1924 <@> leave[1 ref] vKP/REFC ->(end)
1931 <0> enter ->2
1942 <;> nextstate(main 1 -e:1) v ->3
1953 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
196EOT_EOT
197# 4 <@> leave[1 ref] vKP/REFC ->(end)
198# 1 <0> enter ->2
199# 2 <;> nextstate(main 1 -e:1) v ->3
200# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
201EONT_EONT
202
203checkOptree ( name => 'our $a=undef',
204 prog => 'our $a=undef',
205 note => 'global must be reassigned',
206 bcopts => '-basic',
207 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2086 <@> leave[1 ref] vKP/REFC ->(end)
2091 <0> enter ->2
2102 <;> nextstate(main 1 -e:1) v ->3
2115 <2> sassign vKS/2 ->6
2123 <0> undef s ->4
213- <1> ex-rv2sv sKRM*/17 ->5
2144 <#> gvsv[*a] s/OURINTR ->5
215EOT_EOT
216# 6 <@> leave[1 ref] vKP/REFC ->(end)
217# 1 <0> enter ->2
218# 2 <;> nextstate(main 1 -e:1) v ->3
219# 5 <2> sassign vKS/2 ->6
220# 3 <0> undef s ->4
221# - <1> ex-rv2sv sKRM*/17 ->5
222# 4 <$> gvsv(*a) s/OURINTR ->5
223EONT_EONT
224
225checkOptree ( name => 'local $a=undef',
226 prog => 'local $a=undef',
227 note => 'locals are rare, probly not worth doing',
228 bcopts => '-basic',
229 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2306 <@> leave[1 ref] vKP/REFC ->(end)
2311 <0> enter ->2
2322 <;> nextstate(main 1 -e:1) v ->3
2335 <2> sassign vKS/2 ->6
2343 <0> undef s ->4
235- <1> ex-rv2sv sKRM*/129 ->5
2364 <#> gvsv[*a] s/LVINTRO ->5
237EOT_EOT
238# 6 <@> leave[1 ref] vKP/REFC ->(end)
239# 1 <0> enter ->2
240# 2 <;> nextstate(main 1 -e:1) v ->3
241# 5 <2> sassign vKS/2 ->6
242# 3 <0> undef s ->4
243# - <1> ex-rv2sv sKRM*/129 ->5
244# 4 <$> gvsv(*a) s/LVINTRO ->5
245EONT_EONT
246
247checkOptree ( name => 'sub {my $a=()}',
248 code => sub {my $a=()},
cc02ea56 249 todo => 'apparently done, by patch #?',
724aa791 250 bcopts => '-exec',
251 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2521 <;> nextstate(main -439 optree.t:105) v
2532 <0> stub sP
2543 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2554 <2> sassign sKS/2
2565 <1> leavesub[1 ref] K/REFC,1
257EOT_EOT
258# 1 <;> nextstate(main 438 optree_varinit.t:247) v
259# 2 <0> stub sP
260# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
261# 4 <2> sassign sKS/2
262# 5 <1> leavesub[1 ref] K/REFC,1
263EONT_EONT
264
265checkOptree ( name => 'sub {our $a=()}',
266 code => sub {our $a=()},
267 #todo => 'probly not worth doing',
268 bcopts => '-exec',
269 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2701 <;> nextstate(main 31 optree.t:177) v
2712 <0> stub sP
2723 <#> gvsv[*a] s/OURINTR
2734 <2> sassign sKS/2
2745 <1> leavesub[1 ref] K/REFC,1
275EOT_EOT
276# 1 <;> nextstate(main 440 optree_varinit.t:262) v
277# 2 <0> stub sP
278# 3 <$> gvsv(*a) s/OURINTR
279# 4 <2> sassign sKS/2
280# 5 <1> leavesub[1 ref] K/REFC,1
281EONT_EONT
282
283checkOptree ( name => 'sub {local $a=()}',
284 code => sub {local $a=()},
285 #todo => 'probly not worth doing',
286 bcopts => '-exec',
287 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2881 <;> nextstate(main 33 optree.t:190) v
2892 <0> stub sP
2903 <#> gvsv[*a] s/LVINTRO
2914 <2> sassign sKS/2
2925 <1> leavesub[1 ref] K/REFC,1
293EOT_EOT
724aa791 294# 1 <;> nextstate(main 63 optree.t:225) v
295# 2 <0> stub sP
296# 3 <$> gvsv(*a) s/LVINTRO
297# 4 <2> sassign sKS/2
298# 5 <1> leavesub[1 ref] K/REFC,1
299EONT_EONT
300
301checkOptree ( name => 'my $a=()',
302 prog => 'my $a=()',
cc02ea56 303 todo => 'apparently done, by patch #?',
724aa791 304 bcopts => '-exec',
305 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3061 <0> enter
3072 <;> nextstate(main 1 -e:1) v
3083 <0> stub sP
3094 <0> padsv[$a:1,2] sRM*/LVINTRO
3105 <2> sassign vKS/2
3116 <@> leave[1 ref] vKP/REFC
312EOT_EOT
313# 1 <0> enter
314# 2 <;> nextstate(main 1 -e:1) v
315# 3 <0> stub sP
316# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
317# 5 <2> sassign vKS/2
318# 6 <@> leave[1 ref] vKP/REFC
319EONT_EONT
320
321checkOptree ( name => 'our $a=()',
322 prog => 'our $a=()',
323 #todo => 'probly not worth doing',
324 bcopts => '-exec',
325 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3261 <0> enter
3272 <;> nextstate(main 1 -e:1) v
3283 <0> stub sP
3294 <#> gvsv[*a] s/OURINTR
3305 <2> sassign vKS/2
3316 <@> leave[1 ref] vKP/REFC
332EOT_EOT
333# 1 <0> enter
334# 2 <;> nextstate(main 1 -e:1) v
335# 3 <0> stub sP
336# 4 <$> gvsv(*a) s/OURINTR
337# 5 <2> sassign vKS/2
338# 6 <@> leave[1 ref] vKP/REFC
339EONT_EONT
340
341checkOptree ( name => 'local $a=()',
342 prog => 'local $a=()',
343 #todo => 'probly not worth doing',
344 bcopts => '-exec',
345 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3461 <0> enter
3472 <;> nextstate(main 1 -e:1) v
3483 <0> stub sP
3494 <#> gvsv[*a] s/LVINTRO
3505 <2> sassign vKS/2
3516 <@> leave[1 ref] vKP/REFC
352EOT_EOT
353# 1 <0> enter
354# 2 <;> nextstate(main 1 -e:1) v
355# 3 <0> stub sP
356# 4 <$> gvsv(*a) s/LVINTRO
357# 5 <2> sassign vKS/2
358# 6 <@> leave[1 ref] vKP/REFC
359EONT_EONT
360
361checkOptree ( name => 'my ($a,$b)=()',
362 prog => 'my ($a,$b)=()',
363 #todo => 'probly not worth doing',
364 bcopts => '-exec',
365 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
366# 1 <0> enter
367# 2 <;> nextstate(main 1 -e:1) v
368# 3 <0> pushmark s
369# 4 <0> pushmark sRM*/128
370# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
371# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
372# 7 <2> aassign[t3] vKS
373# 8 <@> leave[1 ref] vKP/REFC
374EOT_EOT
375# 1 <0> enter
376# 2 <;> nextstate(main 1 -e:1) v
377# 3 <0> pushmark s
378# 4 <0> pushmark sRM*/128
379# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
380# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
381# 7 <2> aassign[t3] vKS
382# 8 <@> leave[1 ref] vKP/REFC
383EONT_EONT
384
2ce64696 385} #skip
386
724aa791 387__END__
388