5 @INC = qw(../lib ../ext/B/t);
7 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
8 print "1..0 # Skip -- Perl configured without B module\n";
20 # examples shamelessly snatched from perldoc -f map
26 # chunk: # translates a list of numbers to the corresponding characters.
27 @chars = map(chr, @nums);
31 checkOptree(note => q{},
33 code => q{@chars = map(chr, @nums); },
34 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
35 # 1 <;> nextstate(main 475 (eval 10):1) v
39 # 5 <1> rv2av[t7] lKM/1
41 # 7 <|> mapwhile(other->8)[t8] lK
47 # c <1> rv2av[t2] lKRM*/1
48 # d <2> aassign[t9] KS/COMMON
49 # e <1> leavesub[1 ref] K/REFC,1
51 # 1 <;> nextstate(main 559 (eval 15):1) v
55 # 5 <1> rv2av[t4] lKM/1
57 # 7 <|> mapwhile(other->8)[t5] lK
63 # c <1> rv2av[t1] lKRM*/1
64 # d <2> aassign[t6] KS/COMMON
65 # e <1> leavesub[1 ref] K/REFC,1
71 # chunk: %hash = map { getkey($_) => $_ } @array;
75 checkOptree(note => q{},
77 code => q{%hash = map { getkey($_) => $_ } @array; },
78 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
79 # 1 <;> nextstate(main 476 (eval 10):1) v
83 # 5 <1> rv2av[t8] lKM/1
85 # 7 <|> mapwhile(other->8)[t9] lK
87 # 9 <;> nextstate(main 475 (eval 10):1) v
91 # d <#> gv[*getkey] s/EARLYCV
92 # e <1> entersub[t5] lKS/TARG,1
99 # k <1> rv2hv[t2] lKRM*/1
100 # l <2> aassign[t10] KS/COMMON
101 # m <1> leavesub[1 ref] K/REFC,1
103 # 1 <;> nextstate(main 560 (eval 15):1) v
107 # 5 <1> rv2av[t3] lKM/1
109 # 7 <|> mapwhile(other->8)[t4] lK
111 # 9 <;> nextstate(main 559 (eval 15):1) v
115 # d <$> gv(*getkey) s/EARLYCV
116 # e <1> entersub[t2] lKS/TARG,1
123 # k <1> rv2hv[t1] lKRM*/1
124 # l <2> aassign[t5] KS/COMMON
125 # m <1> leavesub[1 ref] K/REFC,1
133 foreach $_ (@array) {
134 $hash{getkey($_)} = $_;
140 checkOptree(note => q{},
142 code => q{{ %hash = (); foreach $_ (@array) { $hash{getkey($_)} = $_; } } },
143 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
144 # 1 <;> nextstate(main 478 (eval 10):1) v
145 # 2 <{> enterloop(next->u last->u redo->3)
146 # 3 <;> nextstate(main 475 (eval 10):1) v
150 # 7 <1> rv2hv[t2] lKRM*/1
151 # 8 <2> aassign[t3] vKS
152 # 9 <;> nextstate(main 476 (eval 10):1) v
155 # c <1> rv2av[t6] sKRM/1
158 # f <{> enteriter(next->q last->t redo->g) lKS
160 # s <|> and(other->g) K/1
161 # g <;> nextstate(main 475 (eval 10):1) v
167 # m <#> gv[*getkey] s/EARLYCV
168 # n <1> entersub[t10] sKS/TARG,1
169 # o <2> helem sKRM*/2
170 # p <2> sassign vKS/2
173 # t <2> leaveloop K/2
174 # u <2> leaveloop K/2
175 # v <1> leavesub[1 ref] K/REFC,1
177 # 1 <;> nextstate(main 562 (eval 15):1) v
178 # 2 <{> enterloop(next->u last->u redo->3)
179 # 3 <;> nextstate(main 559 (eval 15):1) v
183 # 7 <1> rv2hv[t1] lKRM*/1
184 # 8 <2> aassign[t2] vKS
185 # 9 <;> nextstate(main 560 (eval 15):1) v
188 # c <1> rv2av[t3] sKRM/1
191 # f <{> enteriter(next->q last->t redo->g) lKS
193 # s <|> and(other->g) K/1
194 # g <;> nextstate(main 559 (eval 15):1) v
200 # m <$> gv(*getkey) s/EARLYCV
201 # n <1> entersub[t4] sKS/TARG,1
202 # o <2> helem sKRM*/2
203 # p <2> sassign vKS/2
206 # t <2> leaveloop K/2
207 # u <2> leaveloop K/2
208 # v <1> leavesub[1 ref] K/REFC,1
214 # chunk: #%hash = map { "\L$_", 1 } @array; # perl guesses EXPR. wrong
215 %hash = map { +"\L$_", 1 } @array; # perl guesses BLOCK. right
219 checkOptree(note => q{},
221 code => q{%hash = map { +"\L$_", 1 } @array; },
222 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
223 # 1 <;> nextstate(main 476 (eval 10):1) v
227 # 5 <1> rv2av[t7] lKM/1
229 # 7 <|> mapwhile(other->8)[t9] lK
233 # b <@> stringify[t5] sK/1
234 # c <$> const[IV 1] s
240 # g <1> rv2hv[t2] lKRM*/1
241 # h <2> aassign[t10] KS/COMMON
242 # i <1> leavesub[1 ref] K/REFC,1
244 # 1 <;> nextstate(main 560 (eval 15):1) v
248 # 5 <1> rv2av[t4] lKM/1
250 # 7 <|> mapwhile(other->8)[t5] lK
254 # b <@> stringify[t3] sK/1
255 # c <$> const(IV 1) s
261 # g <1> rv2hv[t1] lKRM*/1
262 # h <2> aassign[t6] KS/COMMON
263 # i <1> leavesub[1 ref] K/REFC,1
269 # chunk: %hash = map { ("\L$_", 1) } @array; # this also works
273 checkOptree(note => q{},
275 code => q{%hash = map { ("\L$_", 1) } @array; },
276 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
277 # 1 <;> nextstate(main 476 (eval 10):1) v
281 # 5 <1> rv2av[t7] lKM/1
283 # 7 <|> mapwhile(other->8)[t9] lK
287 # b <@> stringify[t5] sK/1
288 # c <$> const[IV 1] s
294 # g <1> rv2hv[t2] lKRM*/1
295 # h <2> aassign[t10] KS/COMMON
296 # i <1> leavesub[1 ref] K/REFC,1
298 # 1 <;> nextstate(main 560 (eval 15):1) v
302 # 5 <1> rv2av[t4] lKM/1
304 # 7 <|> mapwhile(other->8)[t5] lK
308 # b <@> stringify[t3] sK/1
309 # c <$> const(IV 1) s
315 # g <1> rv2hv[t1] lKRM*/1
316 # h <2> aassign[t6] KS/COMMON
317 # i <1> leavesub[1 ref] K/REFC,1
323 # chunk: %hash = map { lc($_), 1 } @array; # as does this.
327 checkOptree(note => q{},
329 code => q{%hash = map { lc($_), 1 } @array; },
330 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
331 # 1 <;> nextstate(main 476 (eval 10):1) v
335 # 5 <1> rv2av[t6] lKM/1
337 # 7 <|> mapwhile(other->8)[t8] lK
341 # b <$> const[IV 1] s
347 # f <1> rv2hv[t2] lKRM*/1
348 # g <2> aassign[t9] KS/COMMON
349 # h <1> leavesub[1 ref] K/REFC,1
351 # 1 <;> nextstate(main 589 (eval 26):1) v
355 # 5 <1> rv2av[t3] lKM/1
357 # 7 <|> mapwhile(other->8)[t4] lK
361 # b <$> const(IV 1) s
367 # f <1> rv2hv[t1] lKRM*/1
368 # g <2> aassign[t5] KS/COMMON
369 # h <1> leavesub[1 ref] K/REFC,1
375 # chunk: %hash = map +( lc($_), 1 ), @array; # this is EXPR and works!
379 checkOptree(note => q{},
381 code => q{%hash = map +( lc($_), 1 ), @array; },
382 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
383 # 1 <;> nextstate(main 475 (eval 10):1) v
387 # 5 <1> rv2av[t6] lKM/1
389 # 7 <|> mapwhile(other->8)[t7] lK
393 # b <$> const[IV 1] s
398 # f <1> rv2hv[t2] lKRM*/1
399 # g <2> aassign[t8] KS/COMMON
400 # h <1> leavesub[1 ref] K/REFC,1
402 # 1 <;> nextstate(main 593 (eval 28):1) v
406 # 5 <1> rv2av[t3] lKM/1
408 # 7 <|> mapwhile(other->8)[t4] lK
412 # b <$> const(IV 1) s
417 # f <1> rv2hv[t1] lKRM*/1
418 # g <2> aassign[t5] KS/COMMON
419 # h <1> leavesub[1 ref] K/REFC,1
425 # chunk: %hash = map ( lc($_), 1 ), @array; # evaluates to (1, @array)
429 checkOptree(note => q{},
431 code => q{%hash = map ( lc($_), 1 ), @array; },
432 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
433 # 1 <;> nextstate(main 475 (eval 10):1) v
437 # 5 <$> const[IV 1] sM
439 # 7 <|> mapwhile(other->8)[t5] lK
445 # c <1> rv2hv[t2] lKRM*/1
446 # d <2> aassign[t6] KS/COMMON
448 # f <1> rv2av[t8] K/1
450 # h <1> leavesub[1 ref] K/REFC,1
452 # 1 <;> nextstate(main 597 (eval 30):1) v
456 # 5 <$> const(IV 1) sM
458 # 7 <|> mapwhile(other->8)[t3] lK
464 # c <1> rv2hv[t1] lKRM*/1
465 # d <2> aassign[t4] KS/COMMON
467 # f <1> rv2av[t5] K/1
469 # h <1> leavesub[1 ref] K/REFC,1
475 # chunk: @hashes = map +{ lc($_), 1 }, @array # EXPR, so needs , at end
479 checkOptree(note => q{},
481 code => q{@hashes = map +{ lc($_), 1 }, @array },
482 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
483 # 1 <;> nextstate(main 475 (eval 10):1) v
487 # 5 <1> rv2av[t6] lKM/1
489 # 7 <|> mapwhile(other->8)[t7] lK
493 # b <$> const[IV 1] s
494 # c <@> anonhash sKRM/1
498 # f <#> gv[*hashes] s
499 # g <1> rv2av[t2] lKRM*/1
500 # h <2> aassign[t8] KS/COMMON
501 # i <1> leavesub[1 ref] K/REFC,1
503 # 1 <;> nextstate(main 601 (eval 32):1) v
507 # 5 <1> rv2av[t3] lKM/1
509 # 7 <|> mapwhile(other->8)[t4] lK
513 # b <$> const(IV 1) s
514 # c <@> anonhash sKRM/1
518 # f <$> gv(*hashes) s
519 # g <1> rv2av[t1] lKRM*/1
520 # h <2> aassign[t5] KS/COMMON
521 # i <1> leavesub[1 ref] K/REFC,1