Add new dUNDERBAR and UNDERBAR macros, to help XS writers to
[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');
6 require './test.pl';
7}
8use OptreeCheck;
2ce64696 9use Config;
724aa791 10plan tests => 22;
2ce64696 11SKIP: {
12skip "no perlio in this build", 22 unless $Config::Config{useperlio};
13
724aa791 14pass("OPTIMIZER TESTS - VAR INITIALIZATION");
15
16checkOptree ( name => 'sub {my $a}',
17 bcopts => '-exec',
18 code => sub {my $a},
19 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
20# 1 <;> nextstate(main 45 optree.t:23) v
21# 2 <0> padsv[$a:45,46] M/LVINTRO
22# 3 <1> leavesub[1 ref] K/REFC,1
23EOT_EOT
24# 1 <;> nextstate(main 45 optree.t:23) v
25# 2 <0> padsv[$a:45,46] M/LVINTRO
26# 3 <1> leavesub[1 ref] K/REFC,1
27EONT_EONT
28
29checkOptree ( name => '-exec sub {my $a}',
30 bcopts => '-exec',
31 code => sub {my $a},
32 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
33# goto -
34# 1 <;> nextstate(main 49 optree.t:52) v
35# 2 <0> padsv[$a:49,50] M/LVINTRO
36# 3 <1> leavesub[1 ref] K/REFC,1
37EOT_EOT
38# goto -
39# 1 <;> nextstate(main 49 optree.t:45) v
40# 2 <0> padsv[$a:49,50] M/LVINTRO
41# 3 <1> leavesub[1 ref] K/REFC,1
42EONT_EONT
43
44checkOptree ( name => 'sub {our $a}',
45 bcopts => '-exec',
46 code => sub {our $a},
47 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
48 goto -
491 <;> nextstate(main 21 optree.t:47) v
502 <#> gvsv[*a] s/OURINTR
513 <1> leavesub[1 ref] K/REFC,1
52EOT_EOT
53# goto -
54# 1 <;> nextstate(main 51 optree.t:56) v
55# 2 <$> gvsv(*a) s/OURINTR
56# 3 <1> leavesub[1 ref] K/REFC,1
57EONT_EONT
58
59checkOptree ( name => 'sub {local $a}',
60 bcopts => '-exec',
61 code => sub {local $a},
62 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
63 goto -
641 <;> nextstate(main 23 optree.t:57) v
652 <#> gvsv[*a] s/LVINTRO
663 <1> leavesub[1 ref] K/REFC,1
67EOT_EOT
68# goto -
69# 1 <;> nextstate(main 53 optree.t:67) v
70# 2 <$> gvsv(*a) s/LVINTRO
71# 3 <1> leavesub[1 ref] K/REFC,1
72EONT_EONT
73
74checkOptree ( name => 'my $a',
75 prog => 'my $a',
76 bcopts => '-basic',
77 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
78# 4 <@> leave[1 ref] vKP/REFC ->(end)
79# 1 <0> enter ->2
80# 2 <;> nextstate(main 1 -e:1) v ->3
81# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
82EOT_EOT
83# 4 <@> leave[1 ref] vKP/REFC ->(end)
84# 1 <0> enter ->2
85# 2 <;> nextstate(main 1 -e:1) v ->3
86# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
87EONT_EONT
88
89checkOptree ( name => 'our $a',
90 prog => 'our $a',
91 bcopts => '-basic',
92 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
934 <@> leave[1 ref] vKP/REFC ->(end)
941 <0> enter ->2
952 <;> nextstate(main 1 -e:1) v ->3
96- <1> ex-rv2sv vK/17 ->4
973 <#> gvsv[*a] s/OURINTR ->4
98EOT_EOT
99# 4 <@> leave[1 ref] vKP/REFC ->(end)
100# 1 <0> enter ->2
101# 2 <;> nextstate(main 1 -e:1) v ->3
102# - <1> ex-rv2sv vK/17 ->4
103# 3 <$> gvsv(*a) s/OURINTR ->4
104EONT_EONT
105
106checkOptree ( name => 'local $a',
107 prog => 'local $a',
108 bcopts => '-basic',
109 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1104 <@> leave[1 ref] vKP/REFC ->(end)
1111 <0> enter ->2
1122 <;> nextstate(main 1 -e:1) v ->3
113- <1> ex-rv2sv vKM/129 ->4
1143 <#> gvsv[*a] s/LVINTRO ->4
115EOT_EOT
116# 4 <@> leave[1 ref] vKP/REFC ->(end)
117# 1 <0> enter ->2
118# 2 <;> nextstate(main 1 -e:1) v ->3
119# - <1> ex-rv2sv vKM/129 ->4
120# 3 <$> gvsv(*a) s/LVINTRO ->4
121EONT_EONT
122
123pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
124
125checkOptree ( name => 'sub {my $a=undef}',
126 code => sub {my $a=undef},
127 bcopts => '-basic',
128 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1293 <1> leavesub[1 ref] K/REFC,1 ->(end)
130- <@> lineseq KP ->3
1311 <;> nextstate(main 24 optree.t:99) v ->2
1322 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
133EOT_EOT
134# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
135# - <@> lineseq KP ->3
136# 1 <;> nextstate(main 54 optree.t:149) v ->2
137# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
138EONT_EONT
139
140checkOptree ( name => 'sub {our $a=undef}',
141 code => sub {our $a=undef},
142 note => 'the global must be reset',
143 bcopts => '-basic',
144 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1455 <1> leavesub[1 ref] K/REFC,1 ->(end)
146- <@> lineseq KP ->5
1471 <;> nextstate(main 26 optree.t:109) v ->2
1484 <2> sassign sKS/2 ->5
1492 <0> undef s ->3
150- <1> ex-rv2sv sKRM*/17 ->4
1513 <#> gvsv[*a] s/OURINTR ->4
152EOT_EOT
153# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
154# - <@> lineseq KP ->5
155# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
156# 4 <2> sassign sKS/2 ->5
157# 2 <0> undef s ->3
158# - <1> ex-rv2sv sKRM*/17 ->4
159# 3 <$> gvsv(*a) s/OURINTR ->4
160EONT_EONT
161
162checkOptree ( name => 'sub {local $a=undef}',
163 code => sub {local $a=undef},
164 note => 'local not used enough to bother',
165 bcopts => '-basic',
166 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1675 <1> leavesub[1 ref] K/REFC,1 ->(end)
168- <@> lineseq KP ->5
1691 <;> nextstate(main 28 optree.t:122) v ->2
1704 <2> sassign sKS/2 ->5
1712 <0> undef s ->3
172- <1> ex-rv2sv sKRM*/129 ->4
1733 <#> gvsv[*a] s/LVINTRO ->4
174EOT_EOT
175# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
176# - <@> lineseq KP ->5
177# 1 <;> nextstate(main 58 optree.t:141) v ->2
178# 4 <2> sassign sKS/2 ->5
179# 2 <0> undef s ->3
180# - <1> ex-rv2sv sKRM*/129 ->4
181# 3 <$> gvsv(*a) s/LVINTRO ->4
182EONT_EONT
183
184checkOptree ( name => 'my $a=undef',
185 prog => 'my $a=undef',
186 bcopts => '-basic',
187 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1884 <@> leave[1 ref] vKP/REFC ->(end)
1891 <0> enter ->2
1902 <;> nextstate(main 1 -e:1) v ->3
1913 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
192EOT_EOT
193# 4 <@> leave[1 ref] vKP/REFC ->(end)
194# 1 <0> enter ->2
195# 2 <;> nextstate(main 1 -e:1) v ->3
196# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
197EONT_EONT
198
199checkOptree ( name => 'our $a=undef',
200 prog => 'our $a=undef',
201 note => 'global must be reassigned',
202 bcopts => '-basic',
203 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2046 <@> leave[1 ref] vKP/REFC ->(end)
2051 <0> enter ->2
2062 <;> nextstate(main 1 -e:1) v ->3
2075 <2> sassign vKS/2 ->6
2083 <0> undef s ->4
209- <1> ex-rv2sv sKRM*/17 ->5
2104 <#> gvsv[*a] s/OURINTR ->5
211EOT_EOT
212# 6 <@> leave[1 ref] vKP/REFC ->(end)
213# 1 <0> enter ->2
214# 2 <;> nextstate(main 1 -e:1) v ->3
215# 5 <2> sassign vKS/2 ->6
216# 3 <0> undef s ->4
217# - <1> ex-rv2sv sKRM*/17 ->5
218# 4 <$> gvsv(*a) s/OURINTR ->5
219EONT_EONT
220
221checkOptree ( name => 'local $a=undef',
222 prog => 'local $a=undef',
223 note => 'locals are rare, probly not worth doing',
224 bcopts => '-basic',
225 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2266 <@> leave[1 ref] vKP/REFC ->(end)
2271 <0> enter ->2
2282 <;> nextstate(main 1 -e:1) v ->3
2295 <2> sassign vKS/2 ->6
2303 <0> undef s ->4
231- <1> ex-rv2sv sKRM*/129 ->5
2324 <#> gvsv[*a] s/LVINTRO ->5
233EOT_EOT
234# 6 <@> leave[1 ref] vKP/REFC ->(end)
235# 1 <0> enter ->2
236# 2 <;> nextstate(main 1 -e:1) v ->3
237# 5 <2> sassign vKS/2 ->6
238# 3 <0> undef s ->4
239# - <1> ex-rv2sv sKRM*/129 ->5
240# 4 <$> gvsv(*a) s/LVINTRO ->5
241EONT_EONT
242
243checkOptree ( name => 'sub {my $a=()}',
244 code => sub {my $a=()},
245 todo => 'optimize',
246 bcopts => '-exec',
247 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
248 goto -
2491 <;> nextstate(main -439 optree.t:105) v
2502 <0> stub sP
2513 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2524 <2> sassign sKS/2
2535 <1> leavesub[1 ref] K/REFC,1
254EOT_EOT
255# 1 <;> nextstate(main 438 optree_varinit.t:247) v
256# 2 <0> stub sP
257# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
258# 4 <2> sassign sKS/2
259# 5 <1> leavesub[1 ref] K/REFC,1
260EONT_EONT
261
262checkOptree ( name => 'sub {our $a=()}',
263 code => sub {our $a=()},
264 #todo => 'probly not worth doing',
265 bcopts => '-exec',
266 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2671 <;> nextstate(main 31 optree.t:177) v
2682 <0> stub sP
2693 <#> gvsv[*a] s/OURINTR
2704 <2> sassign sKS/2
2715 <1> leavesub[1 ref] K/REFC,1
272EOT_EOT
273# 1 <;> nextstate(main 440 optree_varinit.t:262) v
274# 2 <0> stub sP
275# 3 <$> gvsv(*a) s/OURINTR
276# 4 <2> sassign sKS/2
277# 5 <1> leavesub[1 ref] K/REFC,1
278EONT_EONT
279
280checkOptree ( name => 'sub {local $a=()}',
281 code => sub {local $a=()},
282 #todo => 'probly not worth doing',
283 bcopts => '-exec',
284 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
285 goto -
2861 <;> nextstate(main 33 optree.t:190) v
2872 <0> stub sP
2883 <#> gvsv[*a] s/LVINTRO
2894 <2> sassign sKS/2
2905 <1> leavesub[1 ref] K/REFC,1
291EOT_EOT
292# goto -
293# 1 <;> nextstate(main 63 optree.t:225) v
294# 2 <0> stub sP
295# 3 <$> gvsv(*a) s/LVINTRO
296# 4 <2> sassign sKS/2
297# 5 <1> leavesub[1 ref] K/REFC,1
298EONT_EONT
299
300checkOptree ( name => 'my $a=()',
301 prog => 'my $a=()',
302 todo => 'optimize ? its one of the idioms',
303 bcopts => '-exec',
304 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3051 <0> enter
3062 <;> nextstate(main 1 -e:1) v
3073 <0> stub sP
3084 <0> padsv[$a:1,2] sRM*/LVINTRO
3095 <2> sassign vKS/2
3106 <@> leave[1 ref] vKP/REFC
311EOT_EOT
312# 1 <0> enter
313# 2 <;> nextstate(main 1 -e:1) v
314# 3 <0> stub sP
315# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
316# 5 <2> sassign vKS/2
317# 6 <@> leave[1 ref] vKP/REFC
318EONT_EONT
319
320checkOptree ( name => 'our $a=()',
321 prog => 'our $a=()',
322 #todo => 'probly not worth doing',
323 bcopts => '-exec',
324 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3251 <0> enter
3262 <;> nextstate(main 1 -e:1) v
3273 <0> stub sP
3284 <#> gvsv[*a] s/OURINTR
3295 <2> sassign vKS/2
3306 <@> leave[1 ref] vKP/REFC
331EOT_EOT
332# 1 <0> enter
333# 2 <;> nextstate(main 1 -e:1) v
334# 3 <0> stub sP
335# 4 <$> gvsv(*a) s/OURINTR
336# 5 <2> sassign vKS/2
337# 6 <@> leave[1 ref] vKP/REFC
338EONT_EONT
339
340checkOptree ( name => 'local $a=()',
341 prog => 'local $a=()',
342 #todo => 'probly not worth doing',
343 bcopts => '-exec',
344 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3451 <0> enter
3462 <;> nextstate(main 1 -e:1) v
3473 <0> stub sP
3484 <#> gvsv[*a] s/LVINTRO
3495 <2> sassign vKS/2
3506 <@> leave[1 ref] vKP/REFC
351EOT_EOT
352# 1 <0> enter
353# 2 <;> nextstate(main 1 -e:1) v
354# 3 <0> stub sP
355# 4 <$> gvsv(*a) s/LVINTRO
356# 5 <2> sassign vKS/2
357# 6 <@> leave[1 ref] vKP/REFC
358EONT_EONT
359
360checkOptree ( name => 'my ($a,$b)=()',
361 prog => 'my ($a,$b)=()',
362 #todo => 'probly not worth doing',
363 bcopts => '-exec',
364 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
365# 1 <0> enter
366# 2 <;> nextstate(main 1 -e:1) v
367# 3 <0> pushmark s
368# 4 <0> pushmark sRM*/128
369# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
370# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
371# 7 <2> aassign[t3] vKS
372# 8 <@> leave[1 ref] vKP/REFC
373EOT_EOT
374# 1 <0> enter
375# 2 <;> nextstate(main 1 -e:1) v
376# 3 <0> pushmark s
377# 4 <0> pushmark sRM*/128
378# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
379# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
380# 7 <2> aassign[t3] vKS
381# 8 <@> leave[1 ref] vKP/REFC
382EONT_EONT
383
2ce64696 384} #skip
385
724aa791 386__END__
387