Re: more B::Concise stuff (PATCH - updated)
[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');
724aa791 33# 1 <;> nextstate(main 49 optree.t:52) v
34# 2 <0> padsv[$a:49,50] M/LVINTRO
35# 3 <1> leavesub[1 ref] K/REFC,1
36EOT_EOT
724aa791 37# 1 <;> nextstate(main 49 optree.t:45) v
38# 2 <0> padsv[$a:49,50] M/LVINTRO
39# 3 <1> leavesub[1 ref] K/REFC,1
40EONT_EONT
41
42checkOptree ( name => 'sub {our $a}',
43 bcopts => '-exec',
44 code => sub {our $a},
45 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 461 <;> nextstate(main 21 optree.t:47) v
472 <#> gvsv[*a] s/OURINTR
483 <1> leavesub[1 ref] K/REFC,1
49EOT_EOT
724aa791 50# 1 <;> nextstate(main 51 optree.t:56) v
51# 2 <$> gvsv(*a) s/OURINTR
52# 3 <1> leavesub[1 ref] K/REFC,1
53EONT_EONT
54
55checkOptree ( name => 'sub {local $a}',
56 bcopts => '-exec',
57 code => sub {local $a},
58 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 591 <;> nextstate(main 23 optree.t:57) v
602 <#> gvsv[*a] s/LVINTRO
613 <1> leavesub[1 ref] K/REFC,1
62EOT_EOT
724aa791 63# 1 <;> nextstate(main 53 optree.t:67) v
64# 2 <$> gvsv(*a) s/LVINTRO
65# 3 <1> leavesub[1 ref] K/REFC,1
66EONT_EONT
67
68checkOptree ( name => 'my $a',
69 prog => 'my $a',
70 bcopts => '-basic',
71 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
72# 4 <@> leave[1 ref] vKP/REFC ->(end)
73# 1 <0> enter ->2
74# 2 <;> nextstate(main 1 -e:1) v ->3
75# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
76EOT_EOT
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
81EONT_EONT
82
83checkOptree ( name => 'our $a',
84 prog => 'our $a',
85 bcopts => '-basic',
86 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
874 <@> leave[1 ref] vKP/REFC ->(end)
881 <0> enter ->2
892 <;> nextstate(main 1 -e:1) v ->3
90- <1> ex-rv2sv vK/17 ->4
913 <#> gvsv[*a] s/OURINTR ->4
92EOT_EOT
93# 4 <@> leave[1 ref] vKP/REFC ->(end)
94# 1 <0> enter ->2
95# 2 <;> nextstate(main 1 -e:1) v ->3
96# - <1> ex-rv2sv vK/17 ->4
97# 3 <$> gvsv(*a) s/OURINTR ->4
98EONT_EONT
99
100checkOptree ( name => 'local $a',
101 prog => 'local $a',
102 bcopts => '-basic',
103 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1044 <@> leave[1 ref] vKP/REFC ->(end)
1051 <0> enter ->2
1062 <;> nextstate(main 1 -e:1) v ->3
107- <1> ex-rv2sv vKM/129 ->4
1083 <#> gvsv[*a] s/LVINTRO ->4
109EOT_EOT
110# 4 <@> leave[1 ref] vKP/REFC ->(end)
111# 1 <0> enter ->2
112# 2 <;> nextstate(main 1 -e:1) v ->3
113# - <1> ex-rv2sv vKM/129 ->4
114# 3 <$> gvsv(*a) s/LVINTRO ->4
115EONT_EONT
116
117pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
118
119checkOptree ( name => 'sub {my $a=undef}',
120 code => sub {my $a=undef},
121 bcopts => '-basic',
122 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1233 <1> leavesub[1 ref] K/REFC,1 ->(end)
124- <@> lineseq KP ->3
1251 <;> nextstate(main 24 optree.t:99) v ->2
1262 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
127EOT_EOT
128# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
129# - <@> lineseq KP ->3
130# 1 <;> nextstate(main 54 optree.t:149) v ->2
131# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
132EONT_EONT
133
134checkOptree ( name => 'sub {our $a=undef}',
135 code => sub {our $a=undef},
136 note => 'the global must be reset',
137 bcopts => '-basic',
138 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1395 <1> leavesub[1 ref] K/REFC,1 ->(end)
140- <@> lineseq KP ->5
1411 <;> nextstate(main 26 optree.t:109) v ->2
1424 <2> sassign sKS/2 ->5
1432 <0> undef s ->3
144- <1> ex-rv2sv sKRM*/17 ->4
1453 <#> gvsv[*a] s/OURINTR ->4
146EOT_EOT
147# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
148# - <@> lineseq KP ->5
149# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
150# 4 <2> sassign sKS/2 ->5
151# 2 <0> undef s ->3
152# - <1> ex-rv2sv sKRM*/17 ->4
153# 3 <$> gvsv(*a) s/OURINTR ->4
154EONT_EONT
155
156checkOptree ( name => 'sub {local $a=undef}',
157 code => sub {local $a=undef},
158 note => 'local not used enough to bother',
159 bcopts => '-basic',
160 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1615 <1> leavesub[1 ref] K/REFC,1 ->(end)
162- <@> lineseq KP ->5
1631 <;> nextstate(main 28 optree.t:122) v ->2
1644 <2> sassign sKS/2 ->5
1652 <0> undef s ->3
166- <1> ex-rv2sv sKRM*/129 ->4
1673 <#> gvsv[*a] s/LVINTRO ->4
168EOT_EOT
169# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
170# - <@> lineseq KP ->5
171# 1 <;> nextstate(main 58 optree.t:141) v ->2
172# 4 <2> sassign sKS/2 ->5
173# 2 <0> undef s ->3
174# - <1> ex-rv2sv sKRM*/129 ->4
175# 3 <$> gvsv(*a) s/LVINTRO ->4
176EONT_EONT
177
178checkOptree ( name => 'my $a=undef',
179 prog => 'my $a=undef',
180 bcopts => '-basic',
181 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1824 <@> leave[1 ref] vKP/REFC ->(end)
1831 <0> enter ->2
1842 <;> nextstate(main 1 -e:1) v ->3
1853 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
186EOT_EOT
187# 4 <@> leave[1 ref] vKP/REFC ->(end)
188# 1 <0> enter ->2
189# 2 <;> nextstate(main 1 -e:1) v ->3
190# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
191EONT_EONT
192
193checkOptree ( name => 'our $a=undef',
194 prog => 'our $a=undef',
195 note => 'global must be reassigned',
196 bcopts => '-basic',
197 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1986 <@> leave[1 ref] vKP/REFC ->(end)
1991 <0> enter ->2
2002 <;> nextstate(main 1 -e:1) v ->3
2015 <2> sassign vKS/2 ->6
2023 <0> undef s ->4
203- <1> ex-rv2sv sKRM*/17 ->5
2044 <#> gvsv[*a] s/OURINTR ->5
205EOT_EOT
206# 6 <@> leave[1 ref] vKP/REFC ->(end)
207# 1 <0> enter ->2
208# 2 <;> nextstate(main 1 -e:1) v ->3
209# 5 <2> sassign vKS/2 ->6
210# 3 <0> undef s ->4
211# - <1> ex-rv2sv sKRM*/17 ->5
212# 4 <$> gvsv(*a) s/OURINTR ->5
213EONT_EONT
214
215checkOptree ( name => 'local $a=undef',
216 prog => 'local $a=undef',
217 note => 'locals are rare, probly not worth doing',
218 bcopts => '-basic',
219 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2206 <@> leave[1 ref] vKP/REFC ->(end)
2211 <0> enter ->2
2222 <;> nextstate(main 1 -e:1) v ->3
2235 <2> sassign vKS/2 ->6
2243 <0> undef s ->4
225- <1> ex-rv2sv sKRM*/129 ->5
2264 <#> gvsv[*a] s/LVINTRO ->5
227EOT_EOT
228# 6 <@> leave[1 ref] vKP/REFC ->(end)
229# 1 <0> enter ->2
230# 2 <;> nextstate(main 1 -e:1) v ->3
231# 5 <2> sassign vKS/2 ->6
232# 3 <0> undef s ->4
233# - <1> ex-rv2sv sKRM*/129 ->5
234# 4 <$> gvsv(*a) s/LVINTRO ->5
235EONT_EONT
236
237checkOptree ( name => 'sub {my $a=()}',
238 code => sub {my $a=()},
cc02ea56 239 todo => 'apparently done, by patch #?',
724aa791 240 bcopts => '-exec',
241 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2421 <;> nextstate(main -439 optree.t:105) v
2432 <0> stub sP
2443 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2454 <2> sassign sKS/2
2465 <1> leavesub[1 ref] K/REFC,1
247EOT_EOT
248# 1 <;> nextstate(main 438 optree_varinit.t:247) v
249# 2 <0> stub sP
250# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
251# 4 <2> sassign sKS/2
252# 5 <1> leavesub[1 ref] K/REFC,1
253EONT_EONT
254
255checkOptree ( name => 'sub {our $a=()}',
256 code => sub {our $a=()},
257 #todo => 'probly not worth doing',
258 bcopts => '-exec',
259 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2601 <;> nextstate(main 31 optree.t:177) v
2612 <0> stub sP
2623 <#> gvsv[*a] s/OURINTR
2634 <2> sassign sKS/2
2645 <1> leavesub[1 ref] K/REFC,1
265EOT_EOT
266# 1 <;> nextstate(main 440 optree_varinit.t:262) v
267# 2 <0> stub sP
268# 3 <$> gvsv(*a) s/OURINTR
269# 4 <2> sassign sKS/2
270# 5 <1> leavesub[1 ref] K/REFC,1
271EONT_EONT
272
273checkOptree ( name => 'sub {local $a=()}',
274 code => sub {local $a=()},
275 #todo => 'probly not worth doing',
276 bcopts => '-exec',
277 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2781 <;> nextstate(main 33 optree.t:190) v
2792 <0> stub sP
2803 <#> gvsv[*a] s/LVINTRO
2814 <2> sassign sKS/2
2825 <1> leavesub[1 ref] K/REFC,1
283EOT_EOT
724aa791 284# 1 <;> nextstate(main 63 optree.t:225) v
285# 2 <0> stub sP
286# 3 <$> gvsv(*a) s/LVINTRO
287# 4 <2> sassign sKS/2
288# 5 <1> leavesub[1 ref] K/REFC,1
289EONT_EONT
290
291checkOptree ( name => 'my $a=()',
292 prog => 'my $a=()',
cc02ea56 293 todo => 'apparently done, by patch #?',
724aa791 294 bcopts => '-exec',
295 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2961 <0> enter
2972 <;> nextstate(main 1 -e:1) v
2983 <0> stub sP
2994 <0> padsv[$a:1,2] sRM*/LVINTRO
3005 <2> sassign vKS/2
3016 <@> leave[1 ref] vKP/REFC
302EOT_EOT
303# 1 <0> enter
304# 2 <;> nextstate(main 1 -e:1) v
305# 3 <0> stub sP
306# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
307# 5 <2> sassign vKS/2
308# 6 <@> leave[1 ref] vKP/REFC
309EONT_EONT
310
311checkOptree ( name => 'our $a=()',
312 prog => 'our $a=()',
313 #todo => 'probly not worth doing',
314 bcopts => '-exec',
315 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3161 <0> enter
3172 <;> nextstate(main 1 -e:1) v
3183 <0> stub sP
3194 <#> gvsv[*a] s/OURINTR
3205 <2> sassign vKS/2
3216 <@> leave[1 ref] vKP/REFC
322EOT_EOT
323# 1 <0> enter
324# 2 <;> nextstate(main 1 -e:1) v
325# 3 <0> stub sP
326# 4 <$> gvsv(*a) s/OURINTR
327# 5 <2> sassign vKS/2
328# 6 <@> leave[1 ref] vKP/REFC
329EONT_EONT
330
331checkOptree ( name => 'local $a=()',
332 prog => 'local $a=()',
333 #todo => 'probly not worth doing',
334 bcopts => '-exec',
335 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3361 <0> enter
3372 <;> nextstate(main 1 -e:1) v
3383 <0> stub sP
3394 <#> gvsv[*a] s/LVINTRO
3405 <2> sassign vKS/2
3416 <@> leave[1 ref] vKP/REFC
342EOT_EOT
343# 1 <0> enter
344# 2 <;> nextstate(main 1 -e:1) v
345# 3 <0> stub sP
346# 4 <$> gvsv(*a) s/LVINTRO
347# 5 <2> sassign vKS/2
348# 6 <@> leave[1 ref] vKP/REFC
349EONT_EONT
350
351checkOptree ( name => 'my ($a,$b)=()',
352 prog => 'my ($a,$b)=()',
353 #todo => 'probly not worth doing',
354 bcopts => '-exec',
355 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
356# 1 <0> enter
357# 2 <;> nextstate(main 1 -e:1) v
358# 3 <0> pushmark s
359# 4 <0> pushmark sRM*/128
360# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
361# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
362# 7 <2> aassign[t3] vKS
363# 8 <@> leave[1 ref] vKP/REFC
364EOT_EOT
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
373EONT_EONT
374
2ce64696 375} #skip
376
724aa791 377__END__
378