This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move all the xxxpvs() macros to handy.h.
[perl5.git] / ext / B / t / optree_varinit.t
CommitLineData
724aa791
JC
1#!perl
2
3BEGIN {
5638aaac
SM
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
NC
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
JC
17}
18use OptreeCheck;
2ce64696 19use Config;
724aa791 20plan tests => 22;
2ce64696
JC
21SKIP: {
22skip "no perlio in this build", 22 unless $Config::Config{useperlio};
23
724aa791
JC
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
JC
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
JC
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
JC
561 <;> nextstate(main 21 optree.t:47) v
572 <#> gvsv[*a] s/OURINTR
583 <1> leavesub[1 ref] K/REFC,1
59EOT_EOT
724aa791
JC
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
JC
691 <;> nextstate(main 23 optree.t:57) v
702 <#> gvsv[*a] s/LVINTRO
713 <1> leavesub[1 ref] K/REFC,1
72EOT_EOT
724aa791
JC
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
JC
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');
0b599ae5
RGS
1345 <1> leavesub[1 ref] K/REFC,1 ->(end)
135- <@> lineseq KP ->5
1361 <;> nextstate(main 641 optree_varinit.t:130) v ->2
1374 <2> sassign sKS/2 ->5
1382 <0> undef s ->3
1393 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
724aa791 140EOT_EOT
0b599ae5
RGS
141# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
142# - <@> lineseq KP ->5
143# 1 <;> nextstate(main 641 optree_varinit.t:130) v ->2
144# 4 <2> sassign sKS/2 ->5
145# 2 <0> undef s ->3
146# 3 <0> padsv[$a:641,642] sRM*/LVINTRO ->4
724aa791
JC
147EONT_EONT
148
149checkOptree ( name => 'sub {our $a=undef}',
150 code => sub {our $a=undef},
151 note => 'the global must be reset',
152 bcopts => '-basic',
153 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1545 <1> leavesub[1 ref] K/REFC,1 ->(end)
155- <@> lineseq KP ->5
1561 <;> nextstate(main 26 optree.t:109) v ->2
1574 <2> sassign sKS/2 ->5
1582 <0> undef s ->3
159- <1> ex-rv2sv sKRM*/17 ->4
1603 <#> gvsv[*a] s/OURINTR ->4
161EOT_EOT
162# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
163# - <@> lineseq KP ->5
164# 1 <;> nextstate(main 446 optree_varinit.t:137) v ->2
165# 4 <2> sassign sKS/2 ->5
166# 2 <0> undef s ->3
167# - <1> ex-rv2sv sKRM*/17 ->4
168# 3 <$> gvsv(*a) s/OURINTR ->4
169EONT_EONT
170
171checkOptree ( name => 'sub {local $a=undef}',
172 code => sub {local $a=undef},
173 note => 'local not used enough to bother',
174 bcopts => '-basic',
175 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1765 <1> leavesub[1 ref] K/REFC,1 ->(end)
177- <@> lineseq KP ->5
1781 <;> nextstate(main 28 optree.t:122) v ->2
1794 <2> sassign sKS/2 ->5
1802 <0> undef s ->3
181- <1> ex-rv2sv sKRM*/129 ->4
1823 <#> gvsv[*a] s/LVINTRO ->4
183EOT_EOT
184# 5 <1> leavesub[1 ref] K/REFC,1 ->(end)
185# - <@> lineseq KP ->5
186# 1 <;> nextstate(main 58 optree.t:141) v ->2
187# 4 <2> sassign sKS/2 ->5
188# 2 <0> undef s ->3
189# - <1> ex-rv2sv sKRM*/129 ->4
190# 3 <$> gvsv(*a) s/LVINTRO ->4
191EONT_EONT
192
193checkOptree ( name => 'my $a=undef',
194 prog => 'my $a=undef',
195 bcopts => '-basic',
196 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
0b599ae5 1976 <@> leave[1 ref] vKP/REFC ->(end)
724aa791
JC
1981 <0> enter ->2
1992 <;> nextstate(main 1 -e:1) v ->3
0b599ae5
RGS
2005 <2> sassign vKS/2 ->6
2013 <0> undef s ->4
2024 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
724aa791 203EOT_EOT
0b599ae5 204# 6 <@> leave[1 ref] vKP/REFC ->(end)
724aa791
JC
205# 1 <0> enter ->2
206# 2 <;> nextstate(main 1 -e:1) v ->3
0b599ae5
RGS
207# 5 <2> sassign vKS/2 ->6
208# 3 <0> undef s ->4
209# 4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
724aa791
JC
210EONT_EONT
211
212checkOptree ( name => 'our $a=undef',
213 prog => 'our $a=undef',
214 note => 'global must be reassigned',
215 bcopts => '-basic',
216 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2176 <@> leave[1 ref] vKP/REFC ->(end)
2181 <0> enter ->2
2192 <;> nextstate(main 1 -e:1) v ->3
2205 <2> sassign vKS/2 ->6
2213 <0> undef s ->4
222- <1> ex-rv2sv sKRM*/17 ->5
2234 <#> gvsv[*a] s/OURINTR ->5
224EOT_EOT
225# 6 <@> leave[1 ref] vKP/REFC ->(end)
226# 1 <0> enter ->2
227# 2 <;> nextstate(main 1 -e:1) v ->3
228# 5 <2> sassign vKS/2 ->6
229# 3 <0> undef s ->4
230# - <1> ex-rv2sv sKRM*/17 ->5
231# 4 <$> gvsv(*a) s/OURINTR ->5
232EONT_EONT
233
234checkOptree ( name => 'local $a=undef',
235 prog => 'local $a=undef',
19e169bf 236 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791
JC
237 note => 'locals are rare, probly not worth doing',
238 bcopts => '-basic',
239 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2406 <@> leave[1 ref] vKP/REFC ->(end)
2411 <0> enter ->2
2422 <;> nextstate(main 1 -e:1) v ->3
2435 <2> sassign vKS/2 ->6
2443 <0> undef s ->4
245- <1> ex-rv2sv sKRM*/129 ->5
2464 <#> gvsv[*a] s/LVINTRO ->5
247EOT_EOT
248# 6 <@> leave[1 ref] vKP/REFC ->(end)
249# 1 <0> enter ->2
250# 2 <;> nextstate(main 1 -e:1) v ->3
251# 5 <2> sassign vKS/2 ->6
252# 3 <0> undef s ->4
253# - <1> ex-rv2sv sKRM*/129 ->5
254# 4 <$> gvsv(*a) s/LVINTRO ->5
255EONT_EONT
256
257checkOptree ( name => 'sub {my $a=()}',
258 code => sub {my $a=()},
724aa791
JC
259 bcopts => '-exec',
260 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
2611 <;> nextstate(main -439 optree.t:105) v
2622 <0> stub sP
2633 <0> padsv[$a:-439,-438] sRM*/LVINTRO
2644 <2> sassign sKS/2
2655 <1> leavesub[1 ref] K/REFC,1
266EOT_EOT
267# 1 <;> nextstate(main 438 optree_varinit.t:247) v
268# 2 <0> stub sP
269# 3 <0> padsv[$a:438,439] sRM*/LVINTRO
270# 4 <2> sassign sKS/2
271# 5 <1> leavesub[1 ref] K/REFC,1
272EONT_EONT
273
274checkOptree ( name => 'sub {our $a=()}',
275 code => sub {our $a=()},
276 #todo => 'probly not worth doing',
277 bcopts => '-exec',
278 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2791 <;> nextstate(main 31 optree.t:177) v
2802 <0> stub sP
2813 <#> gvsv[*a] s/OURINTR
2824 <2> sassign sKS/2
2835 <1> leavesub[1 ref] K/REFC,1
284EOT_EOT
285# 1 <;> nextstate(main 440 optree_varinit.t:262) v
286# 2 <0> stub sP
287# 3 <$> gvsv(*a) s/OURINTR
288# 4 <2> sassign sKS/2
289# 5 <1> leavesub[1 ref] K/REFC,1
290EONT_EONT
291
292checkOptree ( name => 'sub {local $a=()}',
293 code => sub {local $a=()},
294 #todo => 'probly not worth doing',
295 bcopts => '-exec',
296 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
2971 <;> nextstate(main 33 optree.t:190) v
2982 <0> stub sP
2993 <#> gvsv[*a] s/LVINTRO
3004 <2> sassign sKS/2
3015 <1> leavesub[1 ref] K/REFC,1
302EOT_EOT
724aa791
JC
303# 1 <;> nextstate(main 63 optree.t:225) v
304# 2 <0> stub sP
305# 3 <$> gvsv(*a) s/LVINTRO
306# 4 <2> sassign sKS/2
307# 5 <1> leavesub[1 ref] K/REFC,1
308EONT_EONT
309
310checkOptree ( name => 'my $a=()',
311 prog => 'my $a=()',
724aa791
JC
312 bcopts => '-exec',
313 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3141 <0> enter
3152 <;> nextstate(main 1 -e:1) v
3163 <0> stub sP
3174 <0> padsv[$a:1,2] sRM*/LVINTRO
3185 <2> sassign vKS/2
3196 <@> leave[1 ref] vKP/REFC
320EOT_EOT
321# 1 <0> enter
322# 2 <;> nextstate(main 1 -e:1) v
323# 3 <0> stub sP
324# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
325# 5 <2> sassign vKS/2
326# 6 <@> leave[1 ref] vKP/REFC
327EONT_EONT
328
329checkOptree ( name => 'our $a=()',
330 prog => 'our $a=()',
331 #todo => 'probly not worth doing',
332 bcopts => '-exec',
333 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3341 <0> enter
3352 <;> nextstate(main 1 -e:1) v
3363 <0> stub sP
3374 <#> gvsv[*a] s/OURINTR
3385 <2> sassign vKS/2
3396 <@> leave[1 ref] vKP/REFC
340EOT_EOT
341# 1 <0> enter
342# 2 <;> nextstate(main 1 -e:1) v
343# 3 <0> stub sP
344# 4 <$> gvsv(*a) s/OURINTR
345# 5 <2> sassign vKS/2
346# 6 <@> leave[1 ref] vKP/REFC
347EONT_EONT
348
349checkOptree ( name => 'local $a=()',
350 prog => 'local $a=()',
19e169bf 351 errs => ['Name "main::a" used only once: possible typo at -e line 1.'],
724aa791
JC
352 #todo => 'probly not worth doing',
353 bcopts => '-exec',
354 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3551 <0> enter
3562 <;> nextstate(main 1 -e:1) v
3573 <0> stub sP
3584 <#> gvsv[*a] s/LVINTRO
3595 <2> sassign vKS/2
3606 <@> leave[1 ref] vKP/REFC
361EOT_EOT
362# 1 <0> enter
363# 2 <;> nextstate(main 1 -e:1) v
364# 3 <0> stub sP
365# 4 <$> gvsv(*a) s/LVINTRO
366# 5 <2> sassign vKS/2
367# 6 <@> leave[1 ref] vKP/REFC
368EONT_EONT
369
370checkOptree ( name => 'my ($a,$b)=()',
371 prog => 'my ($a,$b)=()',
372 #todo => 'probly not worth doing',
373 bcopts => '-exec',
374 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
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
383EOT_EOT
384# 1 <0> enter
385# 2 <;> nextstate(main 1 -e:1) v
386# 3 <0> pushmark s
387# 4 <0> pushmark sRM*/128
388# 5 <0> padsv[$a:1,2] lRM*/LVINTRO
389# 6 <0> padsv[$b:1,2] lRM*/LVINTRO
390# 7 <2> aassign[t3] vKS
391# 8 <@> leave[1 ref] vKP/REFC
392EONT_EONT
393
2ce64696
JC
394} #skip
395
724aa791
JC
396__END__
397