Re: [patch] teach B::Concise to see XS code
[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},
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',
19e169bf 112 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791 113 bcopts => '-basic',
114 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1154 <@> leave[1 ref] vKP/REFC ->(end)
1161 <0> enter ->2
1172 <;> nextstate(main 1 -e:1) v ->3
118- <1> ex-rv2sv vKM/129 ->4
1193 <#> gvsv[*a] s/LVINTRO ->4
120EOT_EOT
121# 4 <@> leave[1 ref] vKP/REFC ->(end)
122# 1 <0> enter ->2
123# 2 <;> nextstate(main 1 -e:1) v ->3
124# - <1> ex-rv2sv vKM/129 ->4
125# 3 <$> gvsv(*a) s/LVINTRO ->4
126EONT_EONT
127
128pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
129
130checkOptree ( name => 'sub {my $a=undef}',
131 code => sub {my $a=undef},
132 bcopts => '-basic',
133 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1343 <1> leavesub[1 ref] K/REFC,1 ->(end)
135- <@> lineseq KP ->3
1361 <;> nextstate(main 24 optree.t:99) v ->2
1372 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
138EOT_EOT
139# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
140# - <@> lineseq KP ->3
141# 1 <;> nextstate(main 54 optree.t:149) v ->2
142# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
143EONT_EONT
144
145checkOptree ( name => 'sub {our $a=undef}',
146 code => sub {our $a=undef},
147 note => 'the global must be reset',
148 bcopts => '-basic',
149 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1505 <1> leavesub[1 ref] K/REFC,1 ->(end)
151- <@> lineseq KP ->5
1521 <;> nextstate(main 26 optree.t:109) v ->2
1534 <2> sassign sKS/2 ->5
1542 <0> undef s ->3
155- <1> ex-rv2sv sKRM*/17 ->4
1563 <#> gvsv[*a] s/OURINTR ->4
157EOT_EOT
158# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
159# - <@> lineseq KP ->5
160# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
161# 4 <2> sassign sKS/2 ->5
162# 2 <0> undef s ->3
163# - <1> ex-rv2sv sKRM*/17 ->4
164# 3 <$> gvsv(*a) s/OURINTR ->4
165EONT_EONT
166
167checkOptree ( name => 'sub {local $a=undef}',
168 code => sub {local $a=undef},
169 note => 'local not used enough to bother',
170 bcopts => '-basic',
171 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1725 <1> leavesub[1 ref] K/REFC,1 ->(end)
173- <@> lineseq KP ->5
1741 <;> nextstate(main 28 optree.t:122) v ->2
1754 <2> sassign sKS/2 ->5
1762 <0> undef s ->3
177- <1> ex-rv2sv sKRM*/129 ->4
1783 <#> gvsv[*a] s/LVINTRO ->4
179EOT_EOT
180# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
181# - <@> lineseq KP ->5
182# 1 <;> nextstate(main 58 optree.t:141) v ->2
183# 4 <2> sassign sKS/2 ->5
184# 2 <0> undef s ->3
185# - <1> ex-rv2sv sKRM*/129 ->4
186# 3 <$> gvsv(*a) s/LVINTRO ->4
187EONT_EONT
188
189checkOptree ( name => 'my $a=undef',
190 prog => 'my $a=undef',
191 bcopts => '-basic',
192 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1934 <@> leave[1 ref] vKP/REFC ->(end)
1941 <0> enter ->2
1952 <;> nextstate(main 1 -e:1) v ->3
1963 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
197EOT_EOT
198# 4 <@> leave[1 ref] vKP/REFC ->(end)
199# 1 <0> enter ->2
200# 2 <;> nextstate(main 1 -e:1) v ->3
201# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
202EONT_EONT
203
204checkOptree ( name => 'our $a=undef',
205 prog => 'our $a=undef',
206 note => 'global must be reassigned',
207 bcopts => '-basic',
208 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2096 <@> leave[1 ref] vKP/REFC ->(end)
2101 <0> enter ->2
2112 <;> nextstate(main 1 -e:1) v ->3
2125 <2> sassign vKS/2 ->6
2133 <0> undef s ->4
214- <1> ex-rv2sv sKRM*/17 ->5
2154 <#> gvsv[*a] s/OURINTR ->5
216EOT_EOT
217# 6 <@> leave[1 ref] vKP/REFC ->(end)
218# 1 <0> enter ->2
219# 2 <;> nextstate(main 1 -e:1) v ->3
220# 5 <2> sassign vKS/2 ->6
221# 3 <0> undef s ->4
222# - <1> ex-rv2sv sKRM*/17 ->5
223# 4 <$> gvsv(*a) s/OURINTR ->5
224EONT_EONT
225
226checkOptree ( name => 'local $a=undef',
227 prog => 'local $a=undef',
19e169bf 228 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791 229 note => 'locals are rare, probly not worth doing',
230 bcopts => '-basic',
231 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2326 <@> leave[1 ref] vKP/REFC ->(end)
2331 <0> enter ->2
2342 <;> nextstate(main 1 -e:1) v ->3
2355 <2> sassign vKS/2 ->6
2363 <0> undef s ->4
237- <1> ex-rv2sv sKRM*/129 ->5
2384 <#> gvsv[*a] s/LVINTRO ->5
239EOT_EOT
240# 6 <@> leave[1 ref] vKP/REFC ->(end)
241# 1 <0> enter ->2
242# 2 <;> nextstate(main 1 -e:1) v ->3
243# 5 <2> sassign vKS/2 ->6
244# 3 <0> undef s ->4
245# - <1> ex-rv2sv sKRM*/129 ->5
246# 4 <$> gvsv(*a) s/LVINTRO ->5
247EONT_EONT
248
249checkOptree ( name => 'sub {my $a=()}',
250 code => sub {my $a=()},
724aa791 251 bcopts => '-exec',
252 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2531 <;> nextstate(main -439 optree.t:105) v
2542 <0> stub sP
2553 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2564 <2> sassign sKS/2
2575 <1> leavesub[1 ref] K/REFC,1
258EOT_EOT
259# 1 <;> nextstate(main 438 optree_varinit.t:247) v
260# 2 <0> stub sP
261# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
262# 4 <2> sassign sKS/2
263# 5 <1> leavesub[1 ref] K/REFC,1
264EONT_EONT
265
266checkOptree ( name => 'sub {our $a=()}',
267 code => sub {our $a=()},
268 #todo => 'probly not worth doing',
269 bcopts => '-exec',
270 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2711 <;> nextstate(main 31 optree.t:177) v
2722 <0> stub sP
2733 <#> gvsv[*a] s/OURINTR
2744 <2> sassign sKS/2
2755 <1> leavesub[1 ref] K/REFC,1
276EOT_EOT
277# 1 <;> nextstate(main 440 optree_varinit.t:262) v
278# 2 <0> stub sP
279# 3 <$> gvsv(*a) s/OURINTR
280# 4 <2> sassign sKS/2
281# 5 <1> leavesub[1 ref] K/REFC,1
282EONT_EONT
283
284checkOptree ( name => 'sub {local $a=()}',
285 code => sub {local $a=()},
286 #todo => 'probly not worth doing',
287 bcopts => '-exec',
288 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2891 <;> nextstate(main 33 optree.t:190) v
2902 <0> stub sP
2913 <#> gvsv[*a] s/LVINTRO
2924 <2> sassign sKS/2
2935 <1> leavesub[1 ref] K/REFC,1
294EOT_EOT
724aa791 295# 1 <;> nextstate(main 63 optree.t:225) v
296# 2 <0> stub sP
297# 3 <$> gvsv(*a) s/LVINTRO
298# 4 <2> sassign sKS/2
299# 5 <1> leavesub[1 ref] K/REFC,1
300EONT_EONT
301
302checkOptree ( name => 'my $a=()',
303 prog => 'my $a=()',
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=()',
19e169bf 343 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791 344 #todo => 'probly not worth doing',
345 bcopts => '-exec',
346 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3471 <0> enter
3482 <;> nextstate(main 1 -e:1) v
3493 <0> stub sP
3504 <#> gvsv[*a] s/LVINTRO
3515 <2> sassign vKS/2
3526 <@> leave[1 ref] vKP/REFC
353EOT_EOT
354# 1 <0> enter
355# 2 <;> nextstate(main 1 -e:1) v
356# 3 <0> stub sP
357# 4 <$> gvsv(*a) s/LVINTRO
358# 5 <2> sassign vKS/2
359# 6 <@> leave[1 ref] vKP/REFC
360EONT_EONT
361
362checkOptree ( name => 'my ($a,$b)=()',
363 prog => 'my ($a,$b)=()',
364 #todo => 'probly not worth doing',
365 bcopts => '-exec',
366 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
367# 1 <0> enter
368# 2 <;> nextstate(main 1 -e:1) v
369# 3 <0> pushmark s
370# 4 <0> pushmark sRM*/128
371# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
372# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
373# 7 <2> aassign[t3] vKS
374# 8 <@> leave[1 ref] vKP/REFC
375EOT_EOT
376# 1 <0> enter
377# 2 <;> nextstate(main 1 -e:1) v
378# 3 <0> pushmark s
379# 4 <0> pushmark sRM*/128
380# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
381# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
382# 7 <2> aassign[t3] vKS
383# 8 <@> leave[1 ref] vKP/REFC
384EONT_EONT
385
2ce64696 386} #skip
387
724aa791 388__END__
389