5 @INC = qw(../lib ../ext/B/t);
15 # examples shamelessly snatched from perldoc -f map
21 # chunk: # translates a list of numbers to the corresponding characters.
22 @chars = map(chr, @nums);
26 checkOptree(note => q{},
28 code => q{@chars = map(chr, @nums); },
29 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
30 # 1 <;> nextstate(main 475 (eval 10):1) v
34 # 5 <1> rv2av[t7] lKM/1
36 # 7 <|> mapwhile(other->8)[t8] lK
42 # c <1> rv2av[t2] lKRM*/1
43 # d <2> aassign[t9] KS/COMMON
44 # e <1> leavesub[1 ref] K/REFC,1
46 # 1 <;> nextstate(main 559 (eval 15):1) v
50 # 5 <1> rv2av[t4] lKM/1
52 # 7 <|> mapwhile(other->8)[t5] lK
58 # c <1> rv2av[t1] lKRM*/1
59 # d <2> aassign[t6] KS/COMMON
60 # e <1> leavesub[1 ref] K/REFC,1
66 # chunk: %hash = map { getkey($_) => $_ } @array;
70 checkOptree(note => q{},
72 code => q{%hash = map { getkey($_) => $_ } @array; },
73 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
74 # 1 <;> nextstate(main 476 (eval 10):1) v
78 # 5 <1> rv2av[t8] lKM/1
80 # 7 <|> mapwhile(other->8)[t9] lK
82 # 9 <;> nextstate(main 475 (eval 10):1) v
86 # d <#> gv[*getkey] s/EARLYCV
87 # e <1> entersub[t5] lKS/TARG,1
94 # k <1> rv2hv[t2] lKRM*/1
95 # l <2> aassign[t10] KS/COMMON
96 # m <1> leavesub[1 ref] K/REFC,1
98 # 1 <;> nextstate(main 560 (eval 15):1) v
102 # 5 <1> rv2av[t3] lKM/1
104 # 7 <|> mapwhile(other->8)[t4] lK
106 # 9 <;> nextstate(main 559 (eval 15):1) v
110 # d <$> gv(*getkey) s/EARLYCV
111 # e <1> entersub[t2] lKS/TARG,1
118 # k <1> rv2hv[t1] lKRM*/1
119 # l <2> aassign[t5] KS/COMMON
120 # m <1> leavesub[1 ref] K/REFC,1
128 foreach $_ (@array) {
129 $hash{getkey($_)} = $_;
135 checkOptree(note => q{},
137 code => q{{ %hash = (); foreach $_ (@array) { $hash{getkey($_)} = $_; } } },
138 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
139 # 1 <;> nextstate(main 478 (eval 10):1) v
140 # 2 <{> enterloop(next->u last->u redo->3)
141 # 3 <;> nextstate(main 475 (eval 10):1) v
145 # 7 <1> rv2hv[t2] lKRM*/1
146 # 8 <2> aassign[t3] vKS
147 # 9 <;> nextstate(main 476 (eval 10):1) v
150 # c <1> rv2av[t6] sKRM/1
153 # f <{> enteriter(next->q last->t redo->g) lKS
155 # s <|> and(other->g) K/1
156 # g <;> nextstate(main 475 (eval 10):1) v
162 # m <#> gv[*getkey] s/EARLYCV
163 # n <1> entersub[t10] sKS/TARG,1
164 # o <2> helem sKRM*/2
165 # p <2> sassign vKS/2
168 # t <2> leaveloop K/2
169 # u <2> leaveloop K/2
170 # v <1> leavesub[1 ref] K/REFC,1
172 # 1 <;> nextstate(main 562 (eval 15):1) v
173 # 2 <{> enterloop(next->u last->u redo->3)
174 # 3 <;> nextstate(main 559 (eval 15):1) v
178 # 7 <1> rv2hv[t1] lKRM*/1
179 # 8 <2> aassign[t2] vKS
180 # 9 <;> nextstate(main 560 (eval 15):1) v
183 # c <1> rv2av[t3] sKRM/1
186 # f <{> enteriter(next->q last->t redo->g) lKS
188 # s <|> and(other->g) K/1
189 # g <;> nextstate(main 559 (eval 15):1) v
195 # m <$> gv(*getkey) s/EARLYCV
196 # n <1> entersub[t4] sKS/TARG,1
197 # o <2> helem sKRM*/2
198 # p <2> sassign vKS/2
201 # t <2> leaveloop K/2
202 # u <2> leaveloop K/2
203 # v <1> leavesub[1 ref] K/REFC,1
209 # chunk: #%hash = map { "\L$_", 1 } @array; # perl guesses EXPR. wrong
210 %hash = map { +"\L$_", 1 } @array; # perl guesses BLOCK. right
214 checkOptree(note => q{},
216 code => q{%hash = map { +"\L$_", 1 } @array; },
217 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
218 # 1 <;> nextstate(main 476 (eval 10):1) v
222 # 5 <1> rv2av[t7] lKM/1
224 # 7 <|> mapwhile(other->8)[t9] lK
228 # b <@> stringify[t5] sK/1
229 # c <$> const[IV 1] s
235 # g <1> rv2hv[t2] lKRM*/1
236 # h <2> aassign[t10] KS/COMMON
237 # i <1> leavesub[1 ref] K/REFC,1
239 # 1 <;> nextstate(main 560 (eval 15):1) v
243 # 5 <1> rv2av[t4] lKM/1
245 # 7 <|> mapwhile(other->8)[t5] lK
249 # b <@> stringify[t3] sK/1
250 # c <$> const(IV 1) s
256 # g <1> rv2hv[t1] lKRM*/1
257 # h <2> aassign[t6] KS/COMMON
258 # i <1> leavesub[1 ref] K/REFC,1
264 # chunk: %hash = map { ("\L$_", 1) } @array; # this also works
268 checkOptree(note => q{},
270 code => q{%hash = map { ("\L$_", 1) } @array; },
271 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
272 # 1 <;> nextstate(main 476 (eval 10):1) v
276 # 5 <1> rv2av[t7] lKM/1
278 # 7 <|> mapwhile(other->8)[t9] lK
282 # b <@> stringify[t5] sK/1
283 # c <$> const[IV 1] s
289 # g <1> rv2hv[t2] lKRM*/1
290 # h <2> aassign[t10] KS/COMMON
291 # i <1> leavesub[1 ref] K/REFC,1
293 # 1 <;> nextstate(main 560 (eval 15):1) v
297 # 5 <1> rv2av[t4] lKM/1
299 # 7 <|> mapwhile(other->8)[t5] lK
303 # b <@> stringify[t3] sK/1
304 # c <$> const(IV 1) s
310 # g <1> rv2hv[t1] lKRM*/1
311 # h <2> aassign[t6] KS/COMMON
312 # i <1> leavesub[1 ref] K/REFC,1
318 # chunk: %hash = map { lc($_), 1 } @array; # as does this.
322 checkOptree(note => q{},
324 code => q{%hash = map { lc($_), 1 } @array; },
325 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
326 # 1 <;> nextstate(main 476 (eval 10):1) v
330 # 5 <1> rv2av[t6] lKM/1
332 # 7 <|> mapwhile(other->8)[t8] lK
336 # b <$> const[IV 1] s
342 # f <1> rv2hv[t2] lKRM*/1
343 # g <2> aassign[t9] KS/COMMON
344 # h <1> leavesub[1 ref] K/REFC,1
346 # 1 <;> nextstate(main 589 (eval 26):1) v
350 # 5 <1> rv2av[t3] lKM/1
352 # 7 <|> mapwhile(other->8)[t4] lK
356 # b <$> const(IV 1) s
362 # f <1> rv2hv[t1] lKRM*/1
363 # g <2> aassign[t5] KS/COMMON
364 # h <1> leavesub[1 ref] K/REFC,1
370 # chunk: %hash = map +( lc($_), 1 ), @array; # this is EXPR and works!
374 checkOptree(note => q{},
376 code => q{%hash = map +( lc($_), 1 ), @array; },
377 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
378 # 1 <;> nextstate(main 475 (eval 10):1) v
382 # 5 <1> rv2av[t6] lKM/1
384 # 7 <|> mapwhile(other->8)[t7] lK
388 # b <$> const[IV 1] s
393 # f <1> rv2hv[t2] lKRM*/1
394 # g <2> aassign[t8] KS/COMMON
395 # h <1> leavesub[1 ref] K/REFC,1
397 # 1 <;> nextstate(main 593 (eval 28):1) v
401 # 5 <1> rv2av[t3] lKM/1
403 # 7 <|> mapwhile(other->8)[t4] lK
407 # b <$> const(IV 1) s
412 # f <1> rv2hv[t1] lKRM*/1
413 # g <2> aassign[t5] KS/COMMON
414 # h <1> leavesub[1 ref] K/REFC,1
420 # chunk: %hash = map ( lc($_), 1 ), @array; # evaluates to (1, @array)
424 checkOptree(note => q{},
426 code => q{%hash = map ( lc($_), 1 ), @array; },
427 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
428 # 1 <;> nextstate(main 475 (eval 10):1) v
432 # 5 <$> const[IV 1] sM
434 # 7 <|> mapwhile(other->8)[t5] lK
440 # c <1> rv2hv[t2] lKRM*/1
441 # d <2> aassign[t6] KS/COMMON
443 # f <1> rv2av[t8] K/1
445 # h <1> leavesub[1 ref] K/REFC,1
447 # 1 <;> nextstate(main 597 (eval 30):1) v
451 # 5 <$> const(IV 1) sM
453 # 7 <|> mapwhile(other->8)[t3] lK
459 # c <1> rv2hv[t1] lKRM*/1
460 # d <2> aassign[t4] KS/COMMON
462 # f <1> rv2av[t5] K/1
464 # h <1> leavesub[1 ref] K/REFC,1
470 # chunk: @hashes = map +{ lc($_), 1 }, @array # EXPR, so needs , at end
474 checkOptree(note => q{},
476 code => q{@hashes = map +{ lc($_), 1 }, @array },
477 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
478 # 1 <;> nextstate(main 475 (eval 10):1) v
482 # 5 <1> rv2av[t6] lKM/1
484 # 7 <|> mapwhile(other->8)[t7] lK
488 # b <$> const[IV 1] s
489 # c <@> anonhash sKRM/1
493 # f <#> gv[*hashes] s
494 # g <1> rv2av[t2] lKRM*/1
495 # h <2> aassign[t8] KS/COMMON
496 # i <1> leavesub[1 ref] K/REFC,1
498 # 1 <;> nextstate(main 601 (eval 32):1) v
502 # 5 <1> rv2av[t3] lKM/1
504 # 7 <|> mapwhile(other->8)[t4] lK
508 # b <$> const(IV 1) s
509 # c <@> anonhash sKRM/1
513 # f <$> gv(*hashes) s
514 # g <1> rv2av[t1] lKRM*/1
515 # h <2> aassign[t5] KS/COMMON
516 # i <1> leavesub[1 ref] K/REFC,1