xref: /openbsd-src/gnu/usr.bin/perl/ext/B/t/optree_for.t (revision 256a93a44f36679bee503f12e49566c2183f6181)
1*256a93a4Safresh1#!perl
2*256a93a4Safresh1
3*256a93a4Safresh1BEGIN {
4*256a93a4Safresh1    unshift @INC, 't';
5*256a93a4Safresh1    require Config;
6*256a93a4Safresh1    if (($Config::Config{'extensions'} !~ /\bB\b/) ){
7*256a93a4Safresh1        print "1..0 # Skip -- Perl configured without B module\n";
8*256a93a4Safresh1        exit 0;
9*256a93a4Safresh1    }
10*256a93a4Safresh1}
11*256a93a4Safresh1use OptreeCheck;
12*256a93a4Safresh1plan tests => 19;
13*256a93a4Safresh1
14*256a93a4Safresh1pass("FOR LOOPS");
15*256a93a4Safresh1
16*256a93a4Safresh1checkOptree ( name      => 'for (@a)',
17*256a93a4Safresh1              code      => sub {for (@a) {}},
18*256a93a4Safresh1              bcopts    => '-exec',
19*256a93a4Safresh1              strip_open_hints => 1,
20*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
21*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:14) v:>,<,%
22*256a93a4Safresh12  <0> pushmark sM
23*256a93a4Safresh13  <#> gv[*a] s
24*256a93a4Safresh14  <1> rv2av[t2] sKRM/1
25*256a93a4Safresh15  <#> gv[*_] s
26*256a93a4Safresh16  <{> enteriter(next->8 last->b redo->7) KS/DEF
27*256a93a4Safresh19  <0> iter s
28*256a93a4Safresh1a  <|> and(other->7) K/1
29*256a93a4Safresh17      <0> stub v
30*256a93a4Safresh18      <0> unstack s
31*256a93a4Safresh1           goto 9
32*256a93a4Safresh1b  <2> leaveloop K/2
33*256a93a4Safresh1c  <1> leavesub[1 ref] K/REFC,1
34*256a93a4Safresh1EOT_EOT
35*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:14) v:>,<,%
36*256a93a4Safresh12  <0> pushmark sM
37*256a93a4Safresh13  <$> gv(*a) s
38*256a93a4Safresh14  <1> rv2av[t1] sKRM/1
39*256a93a4Safresh15  <$> gv(*_) s
40*256a93a4Safresh16  <{> enteriter(next->8 last->b redo->7) KS/DEF
41*256a93a4Safresh19  <0> iter s
42*256a93a4Safresh1a  <|> and(other->7) K/1
43*256a93a4Safresh17      <0> stub v
44*256a93a4Safresh18      <0> unstack s
45*256a93a4Safresh1           goto 9
46*256a93a4Safresh1b  <2> leaveloop K/2
47*256a93a4Safresh1c  <1> leavesub[1 ref] K/REFC,1
48*256a93a4Safresh1EONT_EONT
49*256a93a4Safresh1
50*256a93a4Safresh1my @lexical;
51*256a93a4Safresh1
52*256a93a4Safresh1checkOptree ( name      => 'for (@lexical)',
53*256a93a4Safresh1              code      => sub {for (@lexical) {}},
54*256a93a4Safresh1              bcopts    => '-exec',
55*256a93a4Safresh1              strip_open_hints => 1,
56*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
57*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:14) v:>,<,%
58*256a93a4Safresh12  <0> pushmark sM
59*256a93a4Safresh13  <0> padav[@lexical:FAKE::7] sRM
60*256a93a4Safresh14  <#> gv[*_] s
61*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6) KS/DEF
62*256a93a4Safresh18  <0> iter s
63*256a93a4Safresh19  <|> and(other->6) K/1
64*256a93a4Safresh16      <0> stub v
65*256a93a4Safresh17      <0> unstack s
66*256a93a4Safresh1           goto 8
67*256a93a4Safresh1a  <2> leaveloop K/2
68*256a93a4Safresh1b  <1> leavesub[2 refs] K/REFC,1
69*256a93a4Safresh1EOT_EOT
70*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:14) v:>,<,%
71*256a93a4Safresh12  <0> pushmark sM
72*256a93a4Safresh13  <0> padav[@lexical:FAKE::2] sRM
73*256a93a4Safresh14  <$> gv(*_) s
74*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6) KS/DEF
75*256a93a4Safresh18  <0> iter s
76*256a93a4Safresh19  <|> and(other->6) K/1
77*256a93a4Safresh16      <0> stub v
78*256a93a4Safresh17      <0> unstack s
79*256a93a4Safresh1           goto 8
80*256a93a4Safresh1a  <2> leaveloop K/2
81*256a93a4Safresh1b  <1> leavesub[2 refs] K/REFC,1
82*256a93a4Safresh1EONT_EONT
83*256a93a4Safresh1
84*256a93a4Safresh1checkOptree ( name      => 'for $var (@a)',
85*256a93a4Safresh1              code      => sub {for $var (@a) {}},
86*256a93a4Safresh1              bcopts    => '-exec',
87*256a93a4Safresh1              strip_open_hints => 1,
88*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
89*256a93a4Safresh11  <;> nextstate(main 1453 optree_for.t:68) v:{
90*256a93a4Safresh12  <0> pushmark sM
91*256a93a4Safresh13  <#> gv[*a] s
92*256a93a4Safresh14  <1> rv2av[t3] sKRM/1
93*256a93a4Safresh15  <#> gv[*var] s
94*256a93a4Safresh16  <1> rv2gv sKRM/1
95*256a93a4Safresh17  <{> enteriter(next->9 last->c redo->8) KS
96*256a93a4Safresh1a  <0> iter s
97*256a93a4Safresh1b  <|> and(other->8) K/1
98*256a93a4Safresh18      <0> stub v
99*256a93a4Safresh19      <0> unstack s
100*256a93a4Safresh1           goto a
101*256a93a4Safresh1c  <2> leaveloop KP/2
102*256a93a4Safresh1d  <1> leavesub[1 ref] K/REFC,1
103*256a93a4Safresh1EOT_EOT
104*256a93a4Safresh11  <;> nextstate(main 1453 optree_for.t:67) v:{
105*256a93a4Safresh12  <0> pushmark sM
106*256a93a4Safresh13  <$> gv(*a) s
107*256a93a4Safresh14  <1> rv2av[t1] sKRM/1
108*256a93a4Safresh15  <$> gv(*var) s
109*256a93a4Safresh16  <1> rv2gv sKRM/1
110*256a93a4Safresh17  <{> enteriter(next->9 last->c redo->8) KS
111*256a93a4Safresh1a  <0> iter s
112*256a93a4Safresh1b  <|> and(other->8) K/1
113*256a93a4Safresh18      <0> stub v
114*256a93a4Safresh19      <0> unstack s
115*256a93a4Safresh1           goto a
116*256a93a4Safresh1c  <2> leaveloop KP/2
117*256a93a4Safresh1d  <1> leavesub[1 ref] K/REFC,1
118*256a93a4Safresh1EONT_EONT
119*256a93a4Safresh1
120*256a93a4Safresh1checkOptree ( name      => 'for my $var (@a)',
121*256a93a4Safresh1              code      => sub {for my $var (@a) {}},
122*256a93a4Safresh1              bcopts    => '-exec',
123*256a93a4Safresh1              strip_open_hints => 1,
124*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
125*256a93a4Safresh11  <;> nextstate(main 1459 optree_for.t:90) v
126*256a93a4Safresh12  <0> pushmark sM
127*256a93a4Safresh13  <#> gv[*a] s
128*256a93a4Safresh14  <1> rv2av[t3] sKRM/1
129*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$var:1460,1463] KS/LVINTRO
130*256a93a4Safresh18  <0> iter s
131*256a93a4Safresh19  <|> and(other->6) K/1
132*256a93a4Safresh16      <0> stub v
133*256a93a4Safresh17      <0> unstack s
134*256a93a4Safresh1           goto 8
135*256a93a4Safresh1a  <2> leaveloop K/2
136*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
137*256a93a4Safresh1EOT_EOT
138*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:14) v:>,<,%
139*256a93a4Safresh12  <0> pushmark sM
140*256a93a4Safresh13  <$> gv(*a) s
141*256a93a4Safresh14  <1> rv2av[t2] sKRM/1
142*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$var:1460,1463] KS/LVINTRO
143*256a93a4Safresh18  <0> iter s
144*256a93a4Safresh19  <|> and(other->6) K/1
145*256a93a4Safresh16      <0> stub v
146*256a93a4Safresh17      <0> unstack s
147*256a93a4Safresh1           goto 8
148*256a93a4Safresh1a  <2> leaveloop K/2
149*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
150*256a93a4Safresh1EONT_EONT
151*256a93a4Safresh1
152*256a93a4Safresh1checkOptree ( name      => 'for our $var (@a)',
153*256a93a4Safresh1              code      => sub {for our $var (@a) {}},
154*256a93a4Safresh1              bcopts    => '-exec',
155*256a93a4Safresh1              strip_open_hints => 1,
156*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
157*256a93a4Safresh11  <;> nextstate(main 1466 optree_for.t:100) v
158*256a93a4Safresh12  <0> pushmark sM
159*256a93a4Safresh13  <#> gv[*a] s
160*256a93a4Safresh14  <1> rv2av[t4] sKRM/1
161*256a93a4Safresh15  <#> gv[*var] s
162*256a93a4Safresh16  <1> rv2gv sK/FAKE,1
163*256a93a4Safresh17  <{> enteriter(next->9 last->c redo->8) KS/OURINTR
164*256a93a4Safresh1a  <0> iter s
165*256a93a4Safresh1b  <|> and(other->8) K/1
166*256a93a4Safresh18      <0> stub v
167*256a93a4Safresh19      <0> unstack s
168*256a93a4Safresh1           goto a
169*256a93a4Safresh1c  <2> leaveloop K/2
170*256a93a4Safresh1d  <1> leavesub[1 ref] K/REFC,1
171*256a93a4Safresh1EOT_EOT
172*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:111) v:>,<,%
173*256a93a4Safresh12  <0> pushmark sM
174*256a93a4Safresh13  <$> gv(*a) s
175*256a93a4Safresh14  <1> rv2av[t2] sKRM/1
176*256a93a4Safresh15  <$> gv(*var) s
177*256a93a4Safresh16  <1> rv2gv sK/FAKE,1
178*256a93a4Safresh17  <{> enteriter(next->9 last->c redo->8) KS/OURINTR
179*256a93a4Safresh1a  <0> iter s
180*256a93a4Safresh1b  <|> and(other->8) K/1
181*256a93a4Safresh18      <0> stub v
182*256a93a4Safresh19      <0> unstack s
183*256a93a4Safresh1           goto a
184*256a93a4Safresh1c  <2> leaveloop K/2
185*256a93a4Safresh1d  <1> leavesub[1 ref] K/REFC,1
186*256a93a4Safresh1EONT_EONT
187*256a93a4Safresh1
188*256a93a4Safresh1checkOptree ( name      => 'for my ($var) (@a)',
189*256a93a4Safresh1              code      => sub {for my ($var) (@a) {}},
190*256a93a4Safresh1              bcopts    => '-exec',
191*256a93a4Safresh1              strip_open_hints => 1,
192*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
193*256a93a4Safresh11  <;> nextstate(main 1466 optree_for.t:100) v
194*256a93a4Safresh12  <0> pushmark sM
195*256a93a4Safresh13  <#> gv[*a] s
196*256a93a4Safresh14  <1> rv2av[t3] sKRM/1
197*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$var:1474,1477] KPS/LVINTRO
198*256a93a4Safresh18  <0> iter s
199*256a93a4Safresh19  <|> and(other->6) K/1
200*256a93a4Safresh16      <0> stub v
201*256a93a4Safresh17      <0> unstack s
202*256a93a4Safresh1           goto 8
203*256a93a4Safresh1a  <2> leaveloop K/2
204*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
205*256a93a4Safresh1EOT_EOT
206*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:111) v:>,<,%
207*256a93a4Safresh12  <0> pushmark sM
208*256a93a4Safresh13  <$> gv(*a) s
209*256a93a4Safresh14  <1> rv2av[t2] sKRM/1
210*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$var:1474,1477] KPS/LVINTRO
211*256a93a4Safresh18  <0> iter s
212*256a93a4Safresh19  <|> and(other->6) K/1
213*256a93a4Safresh16      <0> stub v
214*256a93a4Safresh17      <0> unstack s
215*256a93a4Safresh1           goto 8
216*256a93a4Safresh1a  <2> leaveloop K/2
217*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
218*256a93a4Safresh1EONT_EONT
219*256a93a4Safresh1
220*256a93a4Safresh1checkOptree ( name      => 'for my ($var) (@lexical)',
221*256a93a4Safresh1              code      => sub {for my ($var) (@lexical) {}},
222*256a93a4Safresh1              bcopts    => '-exec',
223*256a93a4Safresh1              strip_open_hints => 1,
224*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
225*256a93a4Safresh11  <;> nextstate(main 1466 optree_for.t:100) v
226*256a93a4Safresh12  <0> pushmark sM
227*256a93a4Safresh13  <0> padav[@lexical:FAKE::7] sRM
228*256a93a4Safresh14  <{> enteriter(next->6 last->9 redo->5)[$var:1481,1484] KPS/LVINTRO
229*256a93a4Safresh17  <0> iter s
230*256a93a4Safresh18  <|> and(other->5) K/1
231*256a93a4Safresh15      <0> stub v
232*256a93a4Safresh16      <0> unstack s
233*256a93a4Safresh1           goto 7
234*256a93a4Safresh19  <2> leaveloop K/2
235*256a93a4Safresh1a  <1> leavesub[2 refs] K/REFC,1
236*256a93a4Safresh1EOT_EOT
237*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:111) v:>,<,%
238*256a93a4Safresh12  <0> pushmark sM
239*256a93a4Safresh13  <0> padav[@lexical:FAKE::2] sRM
240*256a93a4Safresh14  <{> enteriter(next->6 last->9 redo->5)[$var:1481,1484] KPS/LVINTRO
241*256a93a4Safresh17  <0> iter s
242*256a93a4Safresh18  <|> and(other->5) K/1
243*256a93a4Safresh15      <0> stub v
244*256a93a4Safresh16      <0> unstack s
245*256a93a4Safresh1           goto 7
246*256a93a4Safresh19  <2> leaveloop K/2
247*256a93a4Safresh1a  <1> leavesub[2 refs] K/REFC,1
248*256a93a4Safresh1EONT_EONT
249*256a93a4Safresh1
250*256a93a4Safresh1checkOptree ( name      => 'for my ($key, $value) (%h)',
251*256a93a4Safresh1              code      => sub {for my ($key, $value) (%h) {}},
252*256a93a4Safresh1              bcopts    => '-exec',
253*256a93a4Safresh1              strip_open_hints => 1,
254*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
255*256a93a4Safresh11  <;> nextstate(main 1466 optree_for.t:100) v
256*256a93a4Safresh12  <0> pushmark sM
257*256a93a4Safresh13  <#> gv[*h] s
258*256a93a4Safresh14  <1> rv2hv[t4] lKM
259*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$key:1488,1491; $value:1488,1491] KP/LVINTRO
260*256a93a4Safresh18  <0> iter s
261*256a93a4Safresh19  <|> and(other->6) K/1
262*256a93a4Safresh16      <0> stub v
263*256a93a4Safresh17      <0> unstack s
264*256a93a4Safresh1           goto 8
265*256a93a4Safresh1a  <2> leaveloop K/2
266*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
267*256a93a4Safresh1EOT_EOT
268*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:111) v:>,<,%
269*256a93a4Safresh12  <0> pushmark sM
270*256a93a4Safresh13  <$> gv(*h) s
271*256a93a4Safresh14  <1> rv2hv[t3] lKM
272*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$key:1488,1491; $value:1488,1491] KP/LVINTRO
273*256a93a4Safresh18  <0> iter s
274*256a93a4Safresh19  <|> and(other->6) K/1
275*256a93a4Safresh16      <0> stub v
276*256a93a4Safresh17      <0> unstack s
277*256a93a4Safresh1           goto 8
278*256a93a4Safresh1a  <2> leaveloop K/2
279*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
280*256a93a4Safresh1EONT_EONT
281*256a93a4Safresh1
282*256a93a4Safresh1checkOptree ( name      => 'for my ($foo, $bar, $baz) (@a)',
283*256a93a4Safresh1              code      => sub {for my ($foo, $bar, $baz) (@a) {}},
284*256a93a4Safresh1              bcopts    => '-exec',
285*256a93a4Safresh1              strip_open_hints => 1,
286*256a93a4Safresh1              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
287*256a93a4Safresh11  <;> nextstate(main 1466 optree_for.t:100) v
288*256a93a4Safresh12  <0> pushmark sM
289*256a93a4Safresh13  <#> gv[*a] s
290*256a93a4Safresh14  <1> rv2av[t5] sKRM/1
291*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$foo:1495,1498; $bar:1495,1498; $baz:1495,1498] KPS/LVINTRO
292*256a93a4Safresh18  <0> iter s
293*256a93a4Safresh19  <|> and(other->6) K/1
294*256a93a4Safresh16      <0> stub v
295*256a93a4Safresh17      <0> unstack s
296*256a93a4Safresh1           goto 8
297*256a93a4Safresh1a  <2> leaveloop K/2
298*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
299*256a93a4Safresh1EOT_EOT
300*256a93a4Safresh11  <;> nextstate(main 424 optree_for.t:111) v:>,<,%
301*256a93a4Safresh12  <0> pushmark sM
302*256a93a4Safresh13  <$> gv(*a) s
303*256a93a4Safresh14  <1> rv2av[t4] sKRM/1
304*256a93a4Safresh15  <{> enteriter(next->7 last->a redo->6)[$foo:1495,1498; $bar:1495,1498; $baz:1495,1498] KPS/LVINTRO
305*256a93a4Safresh18  <0> iter s
306*256a93a4Safresh19  <|> and(other->6) K/1
307*256a93a4Safresh16      <0> stub v
308*256a93a4Safresh17      <0> unstack s
309*256a93a4Safresh1           goto 8
310*256a93a4Safresh1a  <2> leaveloop K/2
311*256a93a4Safresh1b  <1> leavesub[1 ref] K/REFC,1
312*256a93a4Safresh1EONT_EONT
313