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