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