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