Windows issues with select() are already documented in perlport.
[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;
9
10plan tests => 22;
11pass("OPTIMIZER TESTS - VAR INITIALIZATION");
12
13checkOptree ( name => 'sub {my $a}',
14 bcopts => '-exec',
15 code => sub {my $a},
16 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
17# 1 <;> nextstate(main 45 optree.t:23) v
18# 2 <0> padsv[$a:45,46] M/LVINTRO
19# 3 <1> leavesub[1 ref] K/REFC,1
20EOT_EOT
21# 1 <;> nextstate(main 45 optree.t:23) v
22# 2 <0> padsv[$a:45,46] M/LVINTRO
23# 3 <1> leavesub[1 ref] K/REFC,1
24EONT_EONT
25
26checkOptree ( name => '-exec sub {my $a}',
27 bcopts => '-exec',
28 code => sub {my $a},
29 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
30# goto -
31# 1 <;> nextstate(main 49 optree.t:52) v
32# 2 <0> padsv[$a:49,50] M/LVINTRO
33# 3 <1> leavesub[1 ref] K/REFC,1
34EOT_EOT
35# goto -
36# 1 <;> nextstate(main 49 optree.t:45) v
37# 2 <0> padsv[$a:49,50] M/LVINTRO
38# 3 <1> leavesub[1 ref] K/REFC,1
39EONT_EONT
40
41checkOptree ( name => 'sub {our $a}',
42 bcopts => '-exec',
43 code => sub {our $a},
44 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
45 goto -
461 <;> nextstate(main 21 optree.t:47) v
472 <#> gvsv[*a] s/OURINTR
483 <1> leavesub[1 ref] K/REFC,1
49EOT_EOT
50# goto -
51# 1 <;> nextstate(main 51 optree.t:56) v
52# 2 <$> gvsv(*a) s/OURINTR
53# 3 <1> leavesub[1 ref] K/REFC,1
54EONT_EONT
55
56checkOptree ( name => 'sub {local $a}',
57 bcopts => '-exec',
58 code => sub {local $a},
59 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
60 goto -
611 <;> nextstate(main 23 optree.t:57) v
622 <#> gvsv[*a] s/LVINTRO
633 <1> leavesub[1 ref] K/REFC,1
64EOT_EOT
65# goto -
66# 1 <;> nextstate(main 53 optree.t:67) v
67# 2 <$> gvsv(*a) s/LVINTRO
68# 3 <1> leavesub[1 ref] K/REFC,1
69EONT_EONT
70
71checkOptree ( name => 'my $a',
72 prog => 'my $a',
73 bcopts => '-basic',
74 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
75# 4 <@> leave[1 ref] vKP/REFC ->(end)
76# 1 <0> enter ->2
77# 2 <;> nextstate(main 1 -e:1) v ->3
78# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
79EOT_EOT
80# 4 <@> leave[1 ref] vKP/REFC ->(end)
81# 1 <0> enter ->2
82# 2 <;> nextstate(main 1 -e:1) v ->3
83# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
84EONT_EONT
85
86checkOptree ( name => 'our $a',
87 prog => 'our $a',
88 bcopts => '-basic',
89 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
904 <@> leave[1 ref] vKP/REFC ->(end)
911 <0> enter ->2
922 <;> nextstate(main 1 -e:1) v ->3
93- <1> ex-rv2sv vK/17 ->4
943 <#> gvsv[*a] s/OURINTR ->4
95EOT_EOT
96# 4 <@> leave[1 ref] vKP/REFC ->(end)
97# 1 <0> enter ->2
98# 2 <;> nextstate(main 1 -e:1) v ->3
99# - <1> ex-rv2sv vK/17 ->4
100# 3 <$> gvsv(*a) s/OURINTR ->4
101EONT_EONT
102
103checkOptree ( name => 'local $a',
104 prog => 'local $a',
105 bcopts => '-basic',
106 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1074 <@> leave[1 ref] vKP/REFC ->(end)
1081 <0> enter ->2
1092 <;> nextstate(main 1 -e:1) v ->3
110- <1> ex-rv2sv vKM/129 ->4
1113 <#> gvsv[*a] s/LVINTRO ->4
112EOT_EOT
113# 4 <@> leave[1 ref] vKP/REFC ->(end)
114# 1 <0> enter ->2
115# 2 <;> nextstate(main 1 -e:1) v ->3
116# - <1> ex-rv2sv vKM/129 ->4
117# 3 <$> gvsv(*a) s/LVINTRO ->4
118EONT_EONT
119
120pass("MY, OUR, LOCAL, BOTH SUB AND MAIN, = undef");
121
122checkOptree ( name => 'sub {my $a=undef}',
123 code => sub {my $a=undef},
124 bcopts => '-basic',
125 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1263 <1> leavesub[1 ref] K/REFC,1 ->(end)
127- <@> lineseq KP ->3
1281 <;> nextstate(main 24 optree.t:99) v ->2
1292 <0> padsv[$a:24,25] sRM*/LVINTRO ->3
130EOT_EOT
131# 3 <1> leavesub[1 ref] K/REFC,1 ->(end)
132# - <@> lineseq KP ->3
133# 1 <;> nextstate(main 54 optree.t:149) v ->2
134# 2 <0> padsv[$a:54,55] sRM*/LVINTRO ->3
135EONT_EONT
136
137checkOptree ( name => 'sub {our $a=undef}',
138 code => sub {our $a=undef},
139 note => 'the global must be reset',
140 bcopts => '-basic',
141 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1425 <1> leavesub[1 ref] K/REFC,1 ->(end)
143- <@> lineseq KP ->5
1441 <;> nextstate(main 26 optree.t:109) v ->2
1454 <2> sassign sKS/2 ->5
1462 <0> undef s ->3
147- <1> ex-rv2sv sKRM*/17 ->4
1483 <#> gvsv[*a] s/OURINTR ->4
149EOT_EOT
150# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
151# - <@> lineseq KP ->5
152# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
153# 4 <2> sassign sKS/2 ->5
154# 2 <0> undef s ->3
155# - <1> ex-rv2sv sKRM*/17 ->4
156# 3 <$> gvsv(*a) s/OURINTR ->4
157EONT_EONT
158
159checkOptree ( name => 'sub {local $a=undef}',
160 code => sub {local $a=undef},
161 note => 'local not used enough to bother',
162 bcopts => '-basic',
163 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1645 <1> leavesub[1 ref] K/REFC,1 ->(end)
165- <@> lineseq KP ->5
1661 <;> nextstate(main 28 optree.t:122) v ->2
1674 <2> sassign sKS/2 ->5
1682 <0> undef s ->3
169- <1> ex-rv2sv sKRM*/129 ->4
1703 <#> gvsv[*a] s/LVINTRO ->4
171EOT_EOT
172# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
173# - <@> lineseq KP ->5
174# 1 <;> nextstate(main 58 optree.t:141) v ->2
175# 4 <2> sassign sKS/2 ->5
176# 2 <0> undef s ->3
177# - <1> ex-rv2sv sKRM*/129 ->4
178# 3 <$> gvsv(*a) s/LVINTRO ->4
179EONT_EONT
180
181checkOptree ( name => 'my $a=undef',
182 prog => 'my $a=undef',
183 bcopts => '-basic',
184 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1854 <@> leave[1 ref] vKP/REFC ->(end)
1861 <0> enter ->2
1872 <;> nextstate(main 1 -e:1) v ->3
1883 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
189EOT_EOT
190# 4 <@> leave[1 ref] vKP/REFC ->(end)
191# 1 <0> enter ->2
192# 2 <;> nextstate(main 1 -e:1) v ->3
193# 3 <0> padsv[$a:1,2] vRM*/LVINTRO ->4
194EONT_EONT
195
196checkOptree ( name => 'our $a=undef',
197 prog => 'our $a=undef',
198 note => 'global must be reassigned',
199 bcopts => '-basic',
200 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2016 <@> leave[1 ref] vKP/REFC ->(end)
2021 <0> enter ->2
2032 <;> nextstate(main 1 -e:1) v ->3
2045 <2> sassign vKS/2 ->6
2053 <0> undef s ->4
206- <1> ex-rv2sv sKRM*/17 ->5
2074 <#> gvsv[*a] s/OURINTR ->5
208EOT_EOT
209# 6 <@> leave[1 ref] vKP/REFC ->(end)
210# 1 <0> enter ->2
211# 2 <;> nextstate(main 1 -e:1) v ->3
212# 5 <2> sassign vKS/2 ->6
213# 3 <0> undef s ->4
214# - <1> ex-rv2sv sKRM*/17 ->5
215# 4 <$> gvsv(*a) s/OURINTR ->5
216EONT_EONT
217
218checkOptree ( name => 'local $a=undef',
219 prog => 'local $a=undef',
220 note => 'locals are rare, probly not worth doing',
221 bcopts => '-basic',
222 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2236 <@> leave[1 ref] vKP/REFC ->(end)
2241 <0> enter ->2
2252 <;> nextstate(main 1 -e:1) v ->3
2265 <2> sassign vKS/2 ->6
2273 <0> undef s ->4
228- <1> ex-rv2sv sKRM*/129 ->5
2294 <#> gvsv[*a] s/LVINTRO ->5
230EOT_EOT
231# 6 <@> leave[1 ref] vKP/REFC ->(end)
232# 1 <0> enter ->2
233# 2 <;> nextstate(main 1 -e:1) v ->3
234# 5 <2> sassign vKS/2 ->6
235# 3 <0> undef s ->4
236# - <1> ex-rv2sv sKRM*/129 ->5
237# 4 <$> gvsv(*a) s/LVINTRO ->5
238EONT_EONT
239
240checkOptree ( name => 'sub {my $a=()}',
241 code => sub {my $a=()},
242 todo => 'optimize',
243 bcopts => '-exec',
244 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
245 goto -
2461 <;> nextstate(main -439 optree.t:105) v
2472 <0> stub sP
2483 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2494 <2> sassign sKS/2
2505 <1> leavesub[1 ref] K/REFC,1
251EOT_EOT
252# 1 <;> nextstate(main 438 optree_varinit.t:247) v
253# 2 <0> stub sP
254# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
255# 4 <2> sassign sKS/2
256# 5 <1> leavesub[1 ref] K/REFC,1
257EONT_EONT
258
259checkOptree ( name => 'sub {our $a=()}',
260 code => sub {our $a=()},
261 #todo => 'probly not worth doing',
262 bcopts => '-exec',
263 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2641 <;> nextstate(main 31 optree.t:177) v
2652 <0> stub sP
2663 <#> gvsv[*a] s/OURINTR
2674 <2> sassign sKS/2
2685 <1> leavesub[1 ref] K/REFC,1
269EOT_EOT
270# 1 <;> nextstate(main 440 optree_varinit.t:262) v
271# 2 <0> stub sP
272# 3 <$> gvsv(*a) s/OURINTR
273# 4 <2> sassign sKS/2
274# 5 <1> leavesub[1 ref] K/REFC,1
275EONT_EONT
276
277checkOptree ( name => 'sub {local $a=()}',
278 code => sub {local $a=()},
279 #todo => 'probly not worth doing',
280 bcopts => '-exec',
281 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
282 goto -
2831 <;> nextstate(main 33 optree.t:190) v
2842 <0> stub sP
2853 <#> gvsv[*a] s/LVINTRO
2864 <2> sassign sKS/2
2875 <1> leavesub[1 ref] K/REFC,1
288EOT_EOT
289# goto -
290# 1 <;> nextstate(main 63 optree.t:225) v
291# 2 <0> stub sP
292# 3 <$> gvsv(*a) s/LVINTRO
293# 4 <2> sassign sKS/2
294# 5 <1> leavesub[1 ref] K/REFC,1
295EONT_EONT
296
297checkOptree ( name => 'my $a=()',
298 prog => 'my $a=()',
299 todo => 'optimize ? its one of the idioms',
300 bcopts => '-exec',
301 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3021 <0> enter
3032 <;> nextstate(main 1 -e:1) v
3043 <0> stub sP
3054 <0> padsv[$a:1,2] sRM*/LVINTRO
3065 <2> sassign vKS/2
3076 <@> leave[1 ref] vKP/REFC
308EOT_EOT
309# 1 <0> enter
310# 2 <;> nextstate(main 1 -e:1) v
311# 3 <0> stub sP
312# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
313# 5 <2> sassign vKS/2
314# 6 <@> leave[1 ref] vKP/REFC
315EONT_EONT
316
317checkOptree ( name => 'our $a=()',
318 prog => 'our $a=()',
319 #todo => 'probly not worth doing',
320 bcopts => '-exec',
321 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3221 <0> enter
3232 <;> nextstate(main 1 -e:1) v
3243 <0> stub sP
3254 <#> gvsv[*a] s/OURINTR
3265 <2> sassign vKS/2
3276 <@> leave[1 ref] vKP/REFC
328EOT_EOT
329# 1 <0> enter
330# 2 <;> nextstate(main 1 -e:1) v
331# 3 <0> stub sP
332# 4 <$> gvsv(*a) s/OURINTR
333# 5 <2> sassign vKS/2
334# 6 <@> leave[1 ref] vKP/REFC
335EONT_EONT
336
337checkOptree ( name => 'local $a=()',
338 prog => 'local $a=()',
339 #todo => 'probly not worth doing',
340 bcopts => '-exec',
341 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3421 <0> enter
3432 <;> nextstate(main 1 -e:1) v
3443 <0> stub sP
3454 <#> gvsv[*a] s/LVINTRO
3465 <2> sassign vKS/2
3476 <@> leave[1 ref] vKP/REFC
348EOT_EOT
349# 1 <0> enter
350# 2 <;> nextstate(main 1 -e:1) v
351# 3 <0> stub sP
352# 4 <$> gvsv(*a) s/LVINTRO
353# 5 <2> sassign vKS/2
354# 6 <@> leave[1 ref] vKP/REFC
355EONT_EONT
356
357checkOptree ( name => 'my ($a,$b)=()',
358 prog => 'my ($a,$b)=()',
359 #todo => 'probly not worth doing',
360 bcopts => '-exec',
361 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
362# 1 <0> enter
363# 2 <;> nextstate(main 1 -e:1) v
364# 3 <0> pushmark s
365# 4 <0> pushmark sRM*/128
366# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
367# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
368# 7 <2> aassign[t3] vKS
369# 8 <@> leave[1 ref] vKP/REFC
370EOT_EOT
371# 1 <0> enter
372# 2 <;> nextstate(main 1 -e:1) v
373# 3 <0> pushmark s
374# 4 <0> pushmark sRM*/128
375# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
376# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
377# 7 <2> aassign[t3] vKS
378# 8 <@> leave[1 ref] vKP/REFC
379EONT_EONT
380
381__END__
382