Commit | Line | Data |
---|---|---|
724aa791 JC |
1 | #!perl |
2 | ||
3 | BEGIN { | |
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 | } |
18 | use OptreeCheck; | |
2ce64696 | 19 | use Config; |
cc02ea56 | 20 | plan tests => 20; |
2ce64696 | 21 | SKIP: { |
cc02ea56 | 22 | skip "no perlio in this build", 20 unless $Config::Config{useperlio}; |
724aa791 JC |
23 | |
24 | pass("GENERAL OPTREE EXAMPLES"); | |
25 | ||
26 | pass("IF,THEN,ELSE, ?:"); | |
27 | ||
28 | checkOptree ( 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 | |
53 | EOT_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 | |
73 | EONT_EONT | |
74 | ||
75 | checkOptree ( 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 | |
105 | EOT_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 | |
129 | EONT_EONT | |
130 | ||
131 | checkOptree ( 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 | |
153 | EOT_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 | |
170 | EONT_EONT | |
171 | ||
172 | checkOptree ( 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 | |
199 | EOT_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 | |
220 | EONT_EONT | |
221 | ||
222 | checkOptree ( 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 | |
237 | EOT_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 | |
249 | EONT_EONT | |
250 | ||
251 | pass ("FOREACH"); | |
252 | ||
253 | checkOptree ( 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 |
275 | EOT_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 | |
294 | EONT_EONT | |
295 | ||
296 | checkOptree ( 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 | |
325 | EOT_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 | |
351 | EONT_EONT | |
352 | ||
498d59dd SH |
353 | checkOptree ( 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 | |
376 | EOT_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 |
396 | EONT_EONT |
397 | ||
398 | checkOptree ( 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 | |
420 | EOT_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 | |
439 | EONT_EONT | |
440 | ||
cc02ea56 JC |
441 | pass("GREP: SAMPLES FROM PERLDOC -F GREP"); |
442 | ||
443 | checkOptree ( 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 | |
462 | EOT_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 | |
478 | EONT_EONT | |
479 | ||
480 | ||
481 | pass("MAP: SAMPLES FROM PERLDOC -F MAP"); | |
482 | ||
483 | checkOptree ( 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 | |
510 | EOT_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 | |
534 | EONT_EONT | |
535 | ||
536 | checkOptree ( 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 | |
569 | EOT_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 | |
599 | EONT_EONT | |
600 | ||
601 | checkOptree ( 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 | |
616 | EOT_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 | |
628 | EONT_EONT | |
629 | ||
630 | pass("CONSTANTS"); | |
631 | ||
498d59dd SH |
632 | checkOptree ( 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 | |
642 | EOT_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 | |
649 | EONT_EONT | |
650 | ||
2ce64696 JC |
651 | } # skip |
652 | ||
724aa791 JC |
653 | __END__ |
654 | ||
655 | ####################################################################### | |
656 | ||
657 | checkOptree ( 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 | |
662 | EOT_EOT | |
663 | insert non-threaded reference here | |
664 | EONT_EONT | |
665 |