This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
refactor and regularise label/statement grammar
[perl5.git] / ext / B / t / optree_samples.t
CommitLineData
724aa791
JC
1#!perl
2
3BEGIN {
74517a3a 4 unshift @INC, 't';
9cd8f857
NC
5 require Config;
6 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
7 print "1..0 # Skip -- Perl configured without B module\n";
8 exit 0;
9 }
19e169bf 10 # require 'test.pl'; # now done by OptreeCheck
724aa791
JC
11}
12use OptreeCheck;
2ce64696 13use Config;
cc02ea56 14plan tests => 20;
2ce64696 15SKIP: {
cc02ea56 16 skip "no perlio in this build", 20 unless $Config::Config{useperlio};
724aa791
JC
17
18pass("GENERAL OPTREE EXAMPLES");
19
20pass("IF,THEN,ELSE, ?:");
21
22checkOptree ( name => '-basic sub {if shift print then,else}',
23 bcopts => '-basic',
24 code => sub { if (shift) { print "then" }
25 else { print "else" }
26 },
be2b1c74 27 strip_open_hints => 1,
724aa791 28 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
538f5756
RZ
29# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
30# - <@> lineseq KP ->7
4e2ac264 31# 1 <;> nextstate(main 665 optree_samples.t:24) v:>,<,% ->2
724aa791 32# - <1> null K/1 ->-
538f5756
RZ
33# 3 <|> cond_expr(other->4) K/1 ->8
34# 2 <0> shift s* ->3
724aa791 35# - <@> scope K ->-
538f5756
RZ
36# - <0> ex-nextstate v ->4
37# 6 <@> print sK ->7
38# 4 <0> pushmark s ->5
39# 5 <$> const[PV "then"] s ->6
40# d <@> leave KP ->7
41# 8 <0> enter ->9
4e2ac264 42# 9 <;> nextstate(main 663 optree_samples.t:25) v:>,<,% ->a
538f5756
RZ
43# c <@> print sK ->d
44# a <0> pushmark s ->b
45# b <$> const[PV "else"] s ->c
724aa791 46EOT_EOT
538f5756
RZ
47# 7 <1> leavesub[1 ref] K/REFC,1 ->(end)
48# - <@> lineseq KP ->7
4e2ac264 49# 1 <;> nextstate(main 665 optree_samples.t:24) v:>,<,% ->2
724aa791 50# - <1> null K/1 ->-
538f5756
RZ
51# 3 <|> cond_expr(other->4) K/1 ->8
52# 2 <0> shift s* ->3
724aa791 53# - <@> scope K ->-
538f5756
RZ
54# - <0> ex-nextstate v ->4
55# 6 <@> print sK ->7
56# 4 <0> pushmark s ->5
57# 5 <$> const(PV "then") s ->6
58# d <@> leave KP ->7
59# 8 <0> enter ->9
4e2ac264 60# 9 <;> nextstate(main 663 optree_samples.t:25) v:>,<,% ->a
538f5756
RZ
61# c <@> print sK ->d
62# a <0> pushmark s ->b
63# b <$> const(PV "else") s ->c
724aa791
JC
64EONT_EONT
65
66checkOptree ( name => '-basic (see above, with my $a = shift)',
67 bcopts => '-basic',
68 code => sub { my $a = shift;
69 if ($a) { print "foo" }
70 else { print "bar" }
71 },
be2b1c74 72 strip_open_hints => 1,
724aa791 73 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
538f5756
RZ
74# b <1> leavesub[1 ref] K/REFC,1 ->(end)
75# - <@> lineseq KP ->b
4e2ac264 76# 1 <;> nextstate(main 666 optree_samples.t:70) v:>,<,% ->2
538f5756
RZ
77# 4 <2> sassign vKS/2 ->5
78# 2 <0> shift s* ->3
79# 3 <0> padsv[$a:666,670] sRM*/LVINTRO ->4
4e2ac264 80# 5 <;> nextstate(main 670 optree_samples.t:71) v:>,<,% ->6
724aa791 81# - <1> null K/1 ->-
538f5756
RZ
82# 7 <|> cond_expr(other->8) K/1 ->c
83# 6 <0> padsv[$a:666,670] s ->7
724aa791 84# - <@> scope K ->-
538f5756
RZ
85# - <0> ex-nextstate v ->8
86# a <@> print sK ->b
87# 8 <0> pushmark s ->9
88# 9 <$> const[PV "foo"] s ->a
89# h <@> leave KP ->b
90# c <0> enter ->d
4e2ac264 91# d <;> nextstate(main 668 optree_samples.t:72) v:>,<,% ->e
538f5756
RZ
92# g <@> print sK ->h
93# e <0> pushmark s ->f
94# f <$> const[PV "bar"] s ->g
724aa791 95EOT_EOT
538f5756
RZ
96# b <1> leavesub[1 ref] K/REFC,1 ->(end)
97# - <@> lineseq KP ->b
4e2ac264 98# 1 <;> nextstate(main 666 optree_samples.t:72) v:>,<,% ->2
538f5756
RZ
99# 4 <2> sassign vKS/2 ->5
100# 2 <0> shift s* ->3
101# 3 <0> padsv[$a:666,670] sRM*/LVINTRO ->4
4e2ac264 102# 5 <;> nextstate(main 670 optree_samples.t:73) v:>,<,% ->6
724aa791 103# - <1> null K/1 ->-
538f5756
RZ
104# 7 <|> cond_expr(other->8) K/1 ->c
105# 6 <0> padsv[$a:666,670] s ->7
724aa791 106# - <@> scope K ->-
538f5756
RZ
107# - <0> ex-nextstate v ->8
108# a <@> print sK ->b
109# 8 <0> pushmark s ->9
110# 9 <$> const(PV "foo") s ->a
111# h <@> leave KP ->b
112# c <0> enter ->d
4e2ac264 113# d <;> nextstate(main 668 optree_samples.t:74) v:>,<,% ->e
538f5756
RZ
114# g <@> print sK ->h
115# e <0> pushmark s ->f
116# f <$> const(PV "bar") s ->g
724aa791
JC
117EONT_EONT
118
119checkOptree ( name => '-exec sub {if shift print then,else}',
120 bcopts => '-exec',
121 code => sub { if (shift) { print "then" }
122 else { print "else" }
123 },
be2b1c74 124 strip_open_hints => 1,
724aa791 125 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
4e2ac264 126# 1 <;> nextstate(main 674 optree_samples.t:125) v:>,<,%
538f5756
RZ
127# 2 <0> shift s*
128# 3 <|> cond_expr(other->4) K/1
129# 4 <0> pushmark s
130# 5 <$> const[PV "then"] s
131# 6 <@> print sK
132# goto 7
133# 8 <0> enter
4e2ac264 134# 9 <;> nextstate(main 672 optree_samples.t:126) v:>,<,%
538f5756
RZ
135# a <0> pushmark s
136# b <$> const[PV "else"] s
137# c <@> print sK
138# d <@> leave KP
139# 7 <1> leavesub[1 ref] K/REFC,1
724aa791 140EOT_EOT
4e2ac264 141# 1 <;> nextstate(main 674 optree_samples.t:129) v:>,<,%
538f5756
RZ
142# 2 <0> shift s*
143# 3 <|> cond_expr(other->4) K/1
144# 4 <0> pushmark s
145# 5 <$> const(PV "then") s
146# 6 <@> print sK
147# goto 7
148# 8 <0> enter
4e2ac264 149# 9 <;> nextstate(main 672 optree_samples.t:130) v:>,<,%
538f5756
RZ
150# a <0> pushmark s
151# b <$> const(PV "else") s
152# c <@> print sK
153# d <@> leave KP
154# 7 <1> leavesub[1 ref] K/REFC,1
724aa791
JC
155EONT_EONT
156
157checkOptree ( name => '-exec (see above, with my $a = shift)',
158 bcopts => '-exec',
159 code => sub { my $a = shift;
160 if ($a) { print "foo" }
161 else { print "bar" }
162 },
be2b1c74 163 strip_open_hints => 1,
724aa791 164 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
4e2ac264 165# 1 <;> nextstate(main 675 optree_samples.t:165) v:>,<,%
538f5756
RZ
166# 2 <0> shift s*
167# 3 <0> padsv[$a:675,679] sRM*/LVINTRO
168# 4 <2> sassign vKS/2
4e2ac264 169# 5 <;> nextstate(main 679 optree_samples.t:166) v:>,<,%
538f5756
RZ
170# 6 <0> padsv[$a:675,679] s
171# 7 <|> cond_expr(other->8) K/1
172# 8 <0> pushmark s
173# 9 <$> const[PV "foo"] s
174# a <@> print sK
175# goto b
176# c <0> enter
4e2ac264 177# d <;> nextstate(main 677 optree_samples.t:167) v:>,<,%
538f5756
RZ
178# e <0> pushmark s
179# f <$> const[PV "bar"] s
180# g <@> print sK
181# h <@> leave KP
182# b <1> leavesub[1 ref] K/REFC,1
724aa791 183EOT_EOT
4e2ac264 184# 1 <;> nextstate(main 675 optree_samples.t:171) v:>,<,%
538f5756
RZ
185# 2 <0> shift s*
186# 3 <0> padsv[$a:675,679] sRM*/LVINTRO
187# 4 <2> sassign vKS/2
4e2ac264 188# 5 <;> nextstate(main 679 optree_samples.t:172) v:>,<,%
538f5756
RZ
189# 6 <0> padsv[$a:675,679] s
190# 7 <|> cond_expr(other->8) K/1
191# 8 <0> pushmark s
192# 9 <$> const(PV "foo") s
193# a <@> print sK
194# goto b
195# c <0> enter
4e2ac264 196# d <;> nextstate(main 677 optree_samples.t:173) v:>,<,%
538f5756
RZ
197# e <0> pushmark s
198# f <$> const(PV "bar") s
199# g <@> print sK
200# h <@> leave KP
201# b <1> leavesub[1 ref] K/REFC,1
724aa791
JC
202EONT_EONT
203
204checkOptree ( name => '-exec sub { print (shift) ? "foo" : "bar" }',
205 code => sub { print (shift) ? "foo" : "bar" },
206 bcopts => '-exec',
be2b1c74 207 strip_open_hints => 1,
724aa791 208 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
4e2ac264 209# 1 <;> nextstate(main 680 optree_samples.t:213) v:>,<,%
724aa791 210# 2 <0> pushmark s
538f5756
RZ
211# 3 <0> shift s*
212# 4 <@> print sK
213# 5 <|> cond_expr(other->6) K/1
214# 6 <$> const[PV "foo"] s
215# goto 7
216# 8 <$> const[PV "bar"] s
217# 7 <1> leavesub[1 ref] K/REFC,1
724aa791 218EOT_EOT
4e2ac264 219# 1 <;> nextstate(main 680 optree_samples.t:221) v:>,<,%
724aa791 220# 2 <0> pushmark s
538f5756
RZ
221# 3 <0> shift s*
222# 4 <@> print sK
223# 5 <|> cond_expr(other->6) K/1
224# 6 <$> const(PV "foo") s
225# goto 7
226# 8 <$> const(PV "bar") s
227# 7 <1> leavesub[1 ref] K/REFC,1
724aa791
JC
228EONT_EONT
229
230pass ("FOREACH");
231
232checkOptree ( name => '-exec sub { foreach (1..10) {print "foo $_"} }',
233 code => sub { foreach (1..10) {print "foo $_"} },
234 bcopts => '-exec',
be2b1c74 235 strip_open_hints => 1,
724aa791 236 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 237# 1 <;> nextstate(main 443 optree.t:158) v:>,<,%
724aa791
JC
238# 2 <0> pushmark s
239# 3 <$> const[IV 1] s
240# 4 <$> const[IV 10] s
241# 5 <#> gv[*_] s
0d863452 242# 6 <{> enteriter(next->d last->g redo->7) lKS/8
724aa791
JC
243# e <0> iter s
244# f <|> and(other->7) K/1
be2b1c74 245# 7 <;> nextstate(main 442 optree.t:158) v:>,<,%
724aa791
JC
246# 8 <0> pushmark s
247# 9 <$> const[PV "foo "] s
248# a <#> gvsv[*_] s
249# b <2> concat[t4] sK/2
250# c <@> print vK
251# d <0> unstack s
252# goto e
253# g <2> leaveloop K/2
254# h <1> leavesub[1 ref] K/REFC,1
724aa791 255EOT_EOT
be2b1c74 256# 1 <;> nextstate(main 444 optree_samples.t:182) v:>,<,%
724aa791
JC
257# 2 <0> pushmark s
258# 3 <$> const(IV 1) s
259# 4 <$> const(IV 10) s
260# 5 <$> gv(*_) s
0d863452 261# 6 <{> enteriter(next->d last->g redo->7) lKS/8
724aa791
JC
262# e <0> iter s
263# f <|> and(other->7) K/1
be2b1c74 264# 7 <;> nextstate(main 443 optree_samples.t:182) v:>,<,%
724aa791
JC
265# 8 <0> pushmark s
266# 9 <$> const(PV "foo ") s
267# a <$> gvsv(*_) s
268# b <2> concat[t3] sK/2
269# c <@> print vK
270# d <0> unstack s
271# goto e
272# g <2> leaveloop K/2
273# h <1> leavesub[1 ref] K/REFC,1
274EONT_EONT
275
276checkOptree ( name => '-basic sub { print "foo $_" foreach (1..10) }',
277 code => sub { print "foo $_" foreach (1..10) },
278 bcopts => '-basic',
be2b1c74 279 strip_open_hints => 1,
724aa791 280 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
ac56e7de
NC
281# g <1> leavesub[1 ref] K/REFC,1 ->(end)
282# - <@> lineseq KP ->g
be2b1c74 283# 1 <;> nextstate(main 445 optree.t:167) v:>,<,% ->2
ac56e7de
NC
284# f <2> leaveloop K/2 ->g
285# 6 <{> enteriter(next->c last->f redo->7) lKS/8 ->d
286# - <0> ex-pushmark s ->2
287# - <1> ex-list lK ->5
288# 2 <0> pushmark s ->3
289# 3 <$> const[IV 1] s ->4
290# 4 <$> const[IV 10] s ->5
291# 5 <#> gv[*_] s ->6
292# - <1> null K/1 ->f
293# e <|> and(other->7) K/1 ->f
294# d <0> iter s ->e
724aa791 295# - <@> lineseq sK ->-
ac56e7de
NC
296# b <@> print vK ->c
297# 7 <0> pushmark s ->8
298# - <1> ex-stringify sK/1 ->b
299# - <0> ex-pushmark s ->8
300# a <2> concat[t2] sK/2 ->b
301# 8 <$> const[PV "foo "] s ->9
302# - <1> ex-rv2sv sK/1 ->a
303# 9 <#> gvsv[*_] s ->a
304# c <0> unstack s ->d
724aa791 305EOT_EOT
ac56e7de
NC
306# g <1> leavesub[1 ref] K/REFC,1 ->(end)
307# - <@> lineseq KP ->g
be2b1c74 308# 1 <;> nextstate(main 446 optree_samples.t:192) v:>,<,% ->2
ac56e7de
NC
309# f <2> leaveloop K/2 ->g
310# 6 <{> enteriter(next->c last->f redo->7) lKS/8 ->d
311# - <0> ex-pushmark s ->2
312# - <1> ex-list lK ->5
313# 2 <0> pushmark s ->3
314# 3 <$> const(IV 1) s ->4
315# 4 <$> const(IV 10) s ->5
316# 5 <$> gv(*_) s ->6
317# - <1> null K/1 ->f
318# e <|> and(other->7) K/1 ->f
319# d <0> iter s ->e
724aa791 320# - <@> lineseq sK ->-
ac56e7de
NC
321# b <@> print vK ->c
322# 7 <0> pushmark s ->8
323# - <1> ex-stringify sK/1 ->b
324# - <0> ex-pushmark s ->8
325# a <2> concat[t1] sK/2 ->b
326# 8 <$> const(PV "foo ") s ->9
327# - <1> ex-rv2sv sK/1 ->a
328# 9 <$> gvsv(*_) s ->a
329# c <0> unstack s ->d
724aa791
JC
330EONT_EONT
331
498d59dd
SH
332checkOptree ( name => '-exec -e foreach (1..10) {print qq{foo $_}}',
333 prog => 'foreach (1..10) {print qq{foo $_}}',
724aa791 334 bcopts => '-exec',
be2b1c74 335 strip_open_hints => 1,
724aa791
JC
336 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
337# 1 <0> enter
eae48c89 338# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791
JC
339# 3 <0> pushmark s
340# 4 <$> const[IV 1] s
341# 5 <$> const[IV 10] s
342# 6 <#> gv[*_] s
0d863452 343# 7 <{> enteriter(next->e last->h redo->8) lKS/8
724aa791
JC
344# f <0> iter s
345# g <|> and(other->8) vK/1
be2b1c74 346# 8 <;> nextstate(main 1 -e:1) v:>,<,%
724aa791
JC
347# 9 <0> pushmark s
348# a <$> const[PV "foo "] s
349# b <#> gvsv[*_] s
350# c <2> concat[t4] sK/2
351# d <@> print vK
352# e <0> unstack v
353# goto f
354# h <2> leaveloop vK/2
355# i <@> leave[1 ref] vKP/REFC
356EOT_EOT
357# 1 <0> enter
eae48c89 358# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791
JC
359# 3 <0> pushmark s
360# 4 <$> const(IV 1) s
361# 5 <$> const(IV 10) s
362# 6 <$> gv(*_) s
0d863452 363# 7 <{> enteriter(next->e last->h redo->8) lKS/8
724aa791
JC
364# f <0> iter s
365# g <|> and(other->8) vK/1
be2b1c74 366# 8 <;> nextstate(main 1 -e:1) v:>,<,%
724aa791
JC
367# 9 <0> pushmark s
368# a <$> const(PV "foo ") s
369# b <$> gvsv(*_) s
370# c <2> concat[t3] sK/2
371# d <@> print vK
372# e <0> unstack v
373# goto f
374# h <2> leaveloop vK/2
375# i <@> leave[1 ref] vKP/REFC
724aa791
JC
376EONT_EONT
377
378checkOptree ( name => '-exec sub { print "foo $_" foreach (1..10) }',
379 code => sub { print "foo $_" foreach (1..10) },
380 bcopts => '-exec',
be2b1c74 381 strip_open_hints => 1,
724aa791 382 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 383# 1 <;> nextstate(main 445 optree.t:167) v:>,<,%
ac56e7de
NC
384# 2 <0> pushmark s
385# 3 <$> const[IV 1] s
386# 4 <$> const[IV 10] s
387# 5 <#> gv[*_] s
388# 6 <{> enteriter(next->c last->f redo->7) lKS/8
389# d <0> iter s
390# e <|> and(other->7) K/1
391# 7 <0> pushmark s
392# 8 <$> const[PV "foo "] s
393# 9 <#> gvsv[*_] s
394# a <2> concat[t2] sK/2
395# b <@> print vK
396# c <0> unstack s
397# goto d
398# f <2> leaveloop K/2
399# g <1> leavesub[1 ref] K/REFC,1
724aa791 400EOT_EOT
be2b1c74 401# 1 <;> nextstate(main 447 optree_samples.t:252) v:>,<,%
ac56e7de
NC
402# 2 <0> pushmark s
403# 3 <$> const(IV 1) s
404# 4 <$> const(IV 10) s
405# 5 <$> gv(*_) s
406# 6 <{> enteriter(next->c last->f redo->7) lKS/8
407# d <0> iter s
408# e <|> and(other->7) K/1
409# 7 <0> pushmark s
410# 8 <$> const(PV "foo ") s
411# 9 <$> gvsv(*_) s
412# a <2> concat[t1] sK/2
413# b <@> print vK
414# c <0> unstack s
415# goto d
416# f <2> leaveloop K/2
417# g <1> leavesub[1 ref] K/REFC,1
724aa791
JC
418EONT_EONT
419
cc02ea56
JC
420pass("GREP: SAMPLES FROM PERLDOC -F GREP");
421
422checkOptree ( name => '@foo = grep(!/^\#/, @bar)',
423 code => '@foo = grep(!/^\#/, @bar)',
424 bcopts => '-exec',
425 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
d5ec2987 426# 1 <;> nextstate(main 496 (eval 20):1) v:{
cc02ea56
JC
427# 2 <0> pushmark s
428# 3 <0> pushmark s
429# 4 <#> gv[*bar] s
430# 5 <1> rv2av[t4] lKM/1
431# 6 <@> grepstart lK
432# 7 <|> grepwhile(other->8)[t5] lK
433# 8 </> match(/"^#"/) s/RTIME
434# 9 <1> not sK/1
435# goto 7
436# a <0> pushmark s
437# b <#> gv[*foo] s
438# c <1> rv2av[t2] lKRM*/1
439# d <2> aassign[t6] KS/COMMON
440# e <1> leavesub[1 ref] K/REFC,1
441EOT_EOT
d5ec2987 442# 1 <;> nextstate(main 496 (eval 20):1) v:{
cc02ea56
JC
443# 2 <0> pushmark s
444# 3 <0> pushmark s
445# 4 <$> gv(*bar) s
446# 5 <1> rv2av[t2] lKM/1
447# 6 <@> grepstart lK
448# 7 <|> grepwhile(other->8)[t3] lK
449# 8 </> match(/"^\\#"/) s/RTIME
450# 9 <1> not sK/1
451# goto 7
452# a <0> pushmark s
453# b <$> gv(*foo) s
454# c <1> rv2av[t1] lKRM*/1
455# d <2> aassign[t4] KS/COMMON
456# e <1> leavesub[1 ref] K/REFC,1
457EONT_EONT
458
459
460pass("MAP: SAMPLES FROM PERLDOC -F MAP");
461
462checkOptree ( name => '%h = map { getkey($_) => $_ } @a',
463 code => '%h = map { getkey($_) => $_ } @a',
464 bcopts => '-exec',
465 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
d5ec2987 466# 1 <;> nextstate(main 501 (eval 22):1) v:{
cc02ea56
JC
467# 2 <0> pushmark s
468# 3 <0> pushmark s
469# 4 <#> gv[*a] s
470# 5 <1> rv2av[t8] lKM/1
471# 6 <@> mapstart lK*
472# 7 <|> mapwhile(other->8)[t9] lK
473# 8 <0> enter l
d5ec2987 474# 9 <;> nextstate(main 500 (eval 22):1) v:{
cc02ea56
JC
475# a <0> pushmark s
476# b <0> pushmark s
477# c <#> gvsv[*_] s
478# d <#> gv[*getkey] s/EARLYCV
479# e <1> entersub[t5] lKS/TARG,1
480# f <#> gvsv[*_] s
481# g <@> list lK
482# h <@> leave lKP
483# goto 7
484# i <0> pushmark s
485# j <#> gv[*h] s
486# k <1> rv2hv[t2] lKRM*/1
487# l <2> aassign[t10] KS/COMMON
488# m <1> leavesub[1 ref] K/REFC,1
489EOT_EOT
d5ec2987 490# 1 <;> nextstate(main 501 (eval 22):1) v:{
cc02ea56
JC
491# 2 <0> pushmark s
492# 3 <0> pushmark s
493# 4 <$> gv(*a) s
494# 5 <1> rv2av[t3] lKM/1
495# 6 <@> mapstart lK*
496# 7 <|> mapwhile(other->8)[t4] lK
497# 8 <0> enter l
d5ec2987 498# 9 <;> nextstate(main 500 (eval 22):1) v:{
cc02ea56
JC
499# a <0> pushmark s
500# b <0> pushmark s
501# c <$> gvsv(*_) s
502# d <$> gv(*getkey) s/EARLYCV
503# e <1> entersub[t2] lKS/TARG,1
504# f <$> gvsv(*_) s
505# g <@> list lK
506# h <@> leave lKP
507# goto 7
508# i <0> pushmark s
509# j <$> gv(*h) s
510# k <1> rv2hv[t1] lKRM*/1
511# l <2> aassign[t5] KS/COMMON
512# m <1> leavesub[1 ref] K/REFC,1
513EONT_EONT
514
515checkOptree ( name => '%h=(); for $_(@a){$h{getkey($_)} = $_}',
516 code => '%h=(); for $_(@a){$h{getkey($_)} = $_}',
517 bcopts => '-exec',
518 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
519# 1 <;> nextstate(main 505 (eval 24):1) v
520# 2 <0> pushmark s
521# 3 <0> pushmark s
522# 4 <#> gv[*h] s
523# 5 <1> rv2hv[t2] lKRM*/1
524# 6 <2> aassign[t3] vKS
d5ec2987 525# 7 <;> nextstate(main 506 (eval 24):1) v:{
cc02ea56
JC
526# 8 <0> pushmark sM
527# 9 <#> gv[*a] s
528# a <1> rv2av[t6] sKRM/1
529# b <#> gv[*_] s
530# c <1> rv2gv sKRM/1
0d863452 531# d <{> enteriter(next->o last->r redo->e) lKS/8
cc02ea56
JC
532# p <0> iter s
533# q <|> and(other->e) K/1
d5ec2987 534# e <;> nextstate(main 505 (eval 24):1) v:{
cc02ea56
JC
535# f <#> gvsv[*_] s
536# g <#> gv[*h] s
537# h <1> rv2hv sKR/1
538# i <0> pushmark s
539# j <#> gvsv[*_] s
540# k <#> gv[*getkey] s/EARLYCV
541# l <1> entersub[t10] sKS/TARG,1
542# m <2> helem sKRM*/2
543# n <2> sassign vKS/2
544# o <0> unstack s
545# goto p
eae48c89 546# r <2> leaveloop KP/2
cc02ea56
JC
547# s <1> leavesub[1 ref] K/REFC,1
548EOT_EOT
549# 1 <;> nextstate(main 505 (eval 24):1) v
550# 2 <0> pushmark s
551# 3 <0> pushmark s
552# 4 <$> gv(*h) s
553# 5 <1> rv2hv[t1] lKRM*/1
554# 6 <2> aassign[t2] vKS
d5ec2987 555# 7 <;> nextstate(main 506 (eval 24):1) v:{
cc02ea56
JC
556# 8 <0> pushmark sM
557# 9 <$> gv(*a) s
558# a <1> rv2av[t3] sKRM/1
559# b <$> gv(*_) s
560# c <1> rv2gv sKRM/1
0d863452 561# d <{> enteriter(next->o last->r redo->e) lKS/8
cc02ea56
JC
562# p <0> iter s
563# q <|> and(other->e) K/1
d5ec2987 564# e <;> nextstate(main 505 (eval 24):1) v:{
cc02ea56
JC
565# f <$> gvsv(*_) s
566# g <$> gv(*h) s
567# h <1> rv2hv sKR/1
568# i <0> pushmark s
569# j <$> gvsv(*_) s
570# k <$> gv(*getkey) s/EARLYCV
571# l <1> entersub[t4] sKS/TARG,1
572# m <2> helem sKRM*/2
573# n <2> sassign vKS/2
574# o <0> unstack s
575# goto p
eae48c89 576# r <2> leaveloop KP/2
cc02ea56
JC
577# s <1> leavesub[1 ref] K/REFC,1
578EONT_EONT
579
580checkOptree ( name => 'map $_+42, 10..20',
581 code => 'map $_+42, 10..20',
582 bcopts => '-exec',
583 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
584# 1 <;> nextstate(main 497 (eval 20):1) v
585# 2 <0> pushmark s
586# 3 <$> const[AV ] s
587# 4 <1> rv2av lKPM/1
588# 5 <@> mapstart K
9ad9869c 589# 6 <|> mapwhile(other->7)[t5] K
cc02ea56
JC
590# 7 <#> gvsv[*_] s
591# 8 <$> const[IV 42] s
592# 9 <2> add[t2] sK/2
593# goto 6
594# a <1> leavesub[1 ref] K/REFC,1
595EOT_EOT
596# 1 <;> nextstate(main 511 (eval 26):1) v
597# 2 <0> pushmark s
598# 3 <$> const(AV ) s
599# 4 <1> rv2av lKPM/1
600# 5 <@> mapstart K
601# 6 <|> mapwhile(other->7)[t4] K
602# 7 <$> gvsv(*_) s
603# 8 <$> const(IV 42) s
604# 9 <2> add[t1] sK/2
605# goto 6
606# a <1> leavesub[1 ref] K/REFC,1
607EONT_EONT
608
609pass("CONSTANTS");
610
498d59dd
SH
611checkOptree ( name => '-e use constant j => qq{junk}; print j',
612 prog => 'use constant j => qq{junk}; print j',
724aa791 613 bcopts => '-exec',
be2b1c74 614 strip_open_hints => 1,
724aa791
JC
615 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
616# 1 <0> enter
be2b1c74 617# 2 <;> nextstate(main 71 -e:1) v:>,<,%,{
724aa791
JC
618# 3 <0> pushmark s
619# 4 <$> const[PV "junk"] s
620# 5 <@> print vK
621# 6 <@> leave[1 ref] vKP/REFC
622EOT_EOT
623# 1 <0> enter
be2b1c74 624# 2 <;> nextstate(main 71 -e:1) v:>,<,%,{
724aa791
JC
625# 3 <0> pushmark s
626# 4 <$> const(PV "junk") s
627# 5 <@> print vK
628# 6 <@> leave[1 ref] vKP/REFC
629EONT_EONT
630
2ce64696
JC
631} # skip
632
724aa791
JC
633__END__
634
635#######################################################################
636
637checkOptree ( name => '-exec sub a { print (shift) ? "foo" : "bar" }',
638 code => sub { print (shift) ? "foo" : "bar" },
639 bcopts => '-exec',
640 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
641 insert threaded reference here
642EOT_EOT
643 insert non-threaded reference here
644EONT_EONT
645