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