This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Ignore cx of padsv for padrange optimisation
[perl5.git] / ext / B / t / optree_misc.t
1 #!perl
2
3 BEGIN {
4     unshift @INC, 't';
5     require Config;
6     if (($Config::Config{'extensions'} !~ /\bB\b/) ){
7         print "1..0 # Skip -- Perl configured without B module\n";
8         exit 0;
9     }
10 }
11 use OptreeCheck;
12 use Config;
13 plan tests => 18;
14
15 SKIP: {
16 skip "no perlio in this build", 4 unless $Config::Config{useperlio};
17
18 # The regression this was testing is that the first aelemfast, derived
19 # from a lexical array, is supposed to be a BASEOP "<0>", while the
20 # second, from a global, is an SVOP "<$>" or a PADOP "<#>" depending
21 # on threading. In buggy versions, both showed up as SVOPs/PADOPs. See
22 # B.xs:cc_opclass() for the relevant code.
23
24 # All this is much simpler, now that aelemfast_lex has been broken out from
25 # aelemfast
26 checkOptree ( name      => 'OP_AELEMFAST opclass',
27               code      => sub { my @x; our @y; $x[127] + $y[-128]},
28               strip_open_hints => 1,
29               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
30 # 7  <1> leavesub[1 ref] K/REFC,1 ->(end)
31 # -     <@> lineseq KP ->7
32 # 1        <;> nextstate(main 634 optree_misc.t:25) v:>,<,% ->2
33 # 2        <0> padav[@x:634,636] vM/LVINTRO ->3
34 # -        <;> ex-nextstate(main 1594 optree_misc.t:27) v:>,<,% ->3
35 # -        <1> rv2av[t4] vK/OURINTR,1 ->3
36 # -           <#> gv[*y] s ->-
37 # 3        <;> nextstate(main 636 optree_misc.t:25) v:>,<,%,{ ->4
38 # 6        <2> add[t6] sK/2 ->7
39 # -           <1> ex-aelem sK/2 ->5
40 # 4              <0> aelemfast_lex[@x:634,636] sR/127 ->5
41 # -              <0> ex-const s ->-
42 # -           <1> ex-aelem sK/2 ->6
43 # -              <1> ex-rv2av sKR/1 ->-
44 # 5                 <#> aelemfast[*y] s/128 ->6
45 # -              <0> ex-const s/FOLD ->-
46 EOT_EOT
47 # 7  <1> leavesub[1 ref] K/REFC,1 ->(end)
48 # -     <@> lineseq KP ->7
49 # 1        <;> nextstate(main 634 optree_misc.t:27) v:>,<,% ->2
50 # 2        <0> padav[@x:634,636] vM/LVINTRO ->3
51 # -        <;> ex-nextstate(main 1594 optree_misc.t:27) v:>,<,% ->3
52 # -        <1> rv2av[t3] vK/OURINTR,1 ->3
53 # -           <$> gv(*y) s ->-
54 # 3        <;> nextstate(main 636 optree_misc.t:27) v:>,<,%,{ ->4
55 # 6        <2> add[t4] sK/2 ->7
56 # -           <1> ex-aelem sK/2 ->5
57 # 4              <0> aelemfast_lex[@x:634,636] sR/127 ->5
58 # -              <0> ex-const s ->-
59 # -           <1> ex-aelem sK/2 ->6
60 # -              <1> ex-rv2av sKR/1 ->-
61 # 5                 <$> aelemfast(*y) s/128 ->6
62 # -              <0> ex-const s/FOLD ->-
63 EONT_EONT
64
65 checkOptree ( name      => 'PMOP children',
66               code      => sub { $foo =~ s/(a)/$1/ },
67               strip_open_hints => 1,
68               ( $] < 5.017002
69                 ?  (expect => <<'EOT_EOT16', expect_nt => <<'EONT_EONT16')
70 # 6  <1> leavesub[1 ref] K/REFC,1 ->(end)
71 # -     <@> lineseq KP ->6
72 # 1        <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2
73 # 3        </> subst(/"(a)"/ replstart->4) KS ->6
74 # -           <1> ex-rv2sv sKRM/1 ->3
75 # 2              <#> gvsv[*foo] s ->3
76 # 5           <|> substcont(other->3) sK/1 ->(end)
77 # -              <1> ex-rv2sv sK/1 ->5
78 # 4                 <#> gvsv[*1] s ->5
79 EOT_EOT16
80 # 6  <1> leavesub[1 ref] K/REFC,1 ->(end)
81 # -     <@> lineseq KP ->6
82 # 1        <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2
83 # 3        </> subst(/"(a)"/ replstart->4) KS ->6
84 # -           <1> ex-rv2sv sKRM/1 ->3
85 # 2              <$> gvsv(*foo) s ->3
86 # 5           <|> substcont(other->3) sK/1 ->(end)
87 # -              <1> ex-rv2sv sK/1 ->5
88 # 4                 <$> gvsv(*1) s ->5
89 EONT_EONT16
90
91                 :  (expect => <<'EOT_EOT',   expect_nt => <<'EONT_EONT')));
92 # 5  <1> leavesub[1 ref] K/REFC,1 ->(end)
93 # -     <@> lineseq KP ->5
94 # 1        <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2
95 # 4        </> subst(/"(a)"/) sKS ->5
96 # -           <1> ex-rv2sv sKRM/1 ->3
97 # 2              <#> gvsv[*foo] s ->3
98 # -           <1> ex-rv2sv sK/1 ->4
99 # 3              <#> gvsv[*1] s ->4
100 EOT_EOT
101 # 5  <1> leavesub[1 ref] K/REFC,1 ->(end)
102 # -     <@> lineseq KP ->5
103 # 1        <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2
104 # 4        </> subst(/"(a)"/) sKS ->5
105 # -           <1> ex-rv2sv sKRM/1 ->3
106 # 2              <$> gvsv(*foo) s ->3
107 # -           <1> ex-rv2sv sK/1 ->4
108 # 3              <$> gvsv(*1) s ->4
109 EONT_EONT
110
111 } #skip
112
113 my $t = <<'EOT_EOT';
114 # 8  <@> leave[1 ref] vKP/REFC ->(end)
115 # 1     <0> enter ->2
116 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
117 # 7     <2> sassign vKS/2 ->8
118 # 5        <@> index[t2] sK/2 ->6
119 # -           <0> ex-pushmark s ->3
120 # 3           <$> const[PV "foo"] s ->4
121 # 4           <$> const[PVMG "foo"] s ->5
122 # -        <1> ex-rv2sv sKRM*/1 ->7
123 # 6           <#> gvsv[*_] s ->7
124 EOT_EOT
125 my $nt = <<'EONT_EONT';
126 # 8  <@> leave[1 ref] vKP/REFC ->(end)
127 # 1     <0> enter ->2
128 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
129 # 7     <2> sassign vKS/2 ->8
130 # 5        <@> index[t1] sK/2 ->6
131 # -           <0> ex-pushmark s ->3
132 # 3           <$> const(PV "foo") s ->4
133 # 4           <$> const(PVMG "foo") s ->5
134 # -        <1> ex-rv2sv sKRM*/1 ->7
135 # 6           <$> gvsv(*_) s ->7
136 EONT_EONT
137
138 checkOptree ( name      => 'index and PVBM',
139               prog      => '$_ = index q(foo), q(foo)',
140               strip_open_hints => 1,
141               expect    => $t,  expect_nt => $nt);
142
143 my $tmpfile = tempfile();
144 open my $fh, '>', $tmpfile or die "Cannot open $tmpfile: $!";
145 print $fh "no warnings;format =\n@<<<\n\$a\n@>>>\n\@b\n.";
146 close $fh;
147
148 checkOptree ( name      => 'formats',
149               bcopts    => 'STDOUT',
150               progfile  => $tmpfile,
151               strip_open_hints => 1,
152               skip      => ($] < 5.017003),
153               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
154 # main::STDOUT (FORMAT):
155 # c  <1> leavewrite[1 ref] K/REFC,1 ->(end)
156 # -     <@> lineseq KP ->c
157 # 1        <;> nextstate(main 1 -:4) v:>,<,% ->2
158 # 5        <@> formline vK/2 ->6
159 # 2           <0> pushmark s ->3
160 # 3           <$> const[PV "@<<<\n"] s ->4
161 # -           <@> lineseq lK ->5
162 # -              <;> ex-nextstate(main 3 tmp35894B:3) v:>,<,% ->4
163 # -              <1> ex-rv2sv sK/1 ->-
164 # 4                 <#> gvsv[*a] s ->5
165 # 6        <;> nextstate(main 1 -:6) v:>,<,% ->7
166 # b        <@> formline sK/2 ->c
167 # 7           <0> pushmark s ->8
168 # 8           <$> const[PV "@>>>\n"] s ->9
169 # -           <@> lineseq lK ->b
170 # -              <;> ex-nextstate(main 3 tmp35894B:5) v:>,<,% ->9
171 # a              <1> rv2av[t3] lK/1 ->b
172 # 9                 <#> gv[*b] s ->a
173 EOT_EOT
174 # main::STDOUT (FORMAT):
175 # c  <1> leavewrite[1 ref] K/REFC,1 ->(end)
176 # -     <@> lineseq KP ->c
177 # 1        <;> nextstate(main 1 -:4) v:>,<,% ->2
178 # 5        <@> formline vK/2 ->6
179 # 2           <0> pushmark s ->3
180 # 3           <$> const(PV "@<<<\n") s ->4
181 # -           <@> lineseq lK ->5
182 # -              <;> ex-nextstate(main 3 tmp35894B:3) v:>,<,% ->4
183 # -              <1> ex-rv2sv sK/1 ->-
184 # 4                 <$> gvsv(*a) s ->5
185 # 6        <;> nextstate(main 1 -:6) v:>,<,% ->7
186 # b        <@> formline sK/2 ->c
187 # 7           <0> pushmark s ->8
188 # 8           <$> const(PV "@>>>\n") s ->9
189 # -           <@> lineseq lK ->b
190 # -              <;> ex-nextstate(main 3 tmp35894B:5) v:>,<,% ->9
191 # a              <1> rv2av[t3] lK/1 ->b
192 # 9                 <$> gv(*b) s ->a
193 EONT_EONT
194
195 checkOptree ( name      => 'padrange',
196               code      => sub { my ($x,$y); @a = ($x,$y); ($x,$y) = @a },
197               strip_open_hints => 1,
198               skip      => ($] < 5.017006),
199               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
200 # f  <1> leavesub[1 ref] K/REFC,1 ->(end)
201 # -     <@> lineseq KP ->f
202 # 1        <;> nextstate(main 1 -e:1) v:>,<,% ->2
203 # -        <@> list vKP ->3
204 # 2           <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,2 ->3
205 # -           <0> padsv[$x:1,2] vM/LVINTRO ->-
206 # -           <0> padsv[$y:1,2] vM/LVINTRO ->-
207 # 3        <;> nextstate(main 2 -e:1) v:>,<,% ->4
208 # 8        <2> aassign[t4] vKS ->9
209 # -           <1> ex-list lKP ->5
210 # 4              <0> padrange[$x:1,2; $y:1,2] /2 ->5
211 # -              <0> padsv[$x:1,2] s ->-
212 # -              <0> padsv[$y:1,2] s ->-
213 # -           <1> ex-list lK ->8
214 # 5              <0> pushmark s ->6
215 # 7              <1> rv2av[t3] lKRM*/1 ->8
216 # 6                 <#> gv[*a] s ->7
217 # 9        <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a
218 # e        <2> aassign[t6] KS ->f
219 # -           <1> ex-list lK ->d
220 # a              <0> pushmark s ->b
221 # c              <1> rv2av[t5] lK/1 ->d
222 # b                 <#> gv[*a] s ->c
223 # -           <1> ex-list lKPRM* ->e
224 # d              <0> padrange[$x:1,2; $y:1,2] RM/2 ->e
225 # -              <0> padsv[$x:1,2] sRM* ->-
226 # -              <0> padsv[$y:1,2] sRM* ->-
227 EOT_EOT
228 # f  <1> leavesub[1 ref] K/REFC,1 ->(end)
229 # -     <@> lineseq KP ->f
230 # 1        <;> nextstate(main 1 -e:1) v:>,<,% ->2
231 # -        <@> list vKP ->3
232 # 2           <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,2 ->3
233 # -           <0> padsv[$x:1,2] vM/LVINTRO ->-
234 # -           <0> padsv[$y:1,2] vM/LVINTRO ->-
235 # 3        <;> nextstate(main 2 -e:1) v:>,<,% ->4
236 # 8        <2> aassign[t4] vKS ->9
237 # -           <1> ex-list lKP ->5
238 # 4              <0> padrange[$x:1,2; $y:1,2] /2 ->5
239 # -              <0> padsv[$x:1,2] s ->-
240 # -              <0> padsv[$y:1,2] s ->-
241 # -           <1> ex-list lK ->8
242 # 5              <0> pushmark s ->6
243 # 7              <1> rv2av[t3] lKRM*/1 ->8
244 # 6                 <$> gv(*a) s ->7
245 # 9        <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a
246 # e        <2> aassign[t6] KS ->f
247 # -           <1> ex-list lK ->d
248 # a              <0> pushmark s ->b
249 # c              <1> rv2av[t5] lK/1 ->d
250 # b                 <$> gv(*a) s ->c
251 # -           <1> ex-list lKPRM* ->e
252 # d              <0> padrange[$x:1,2; $y:1,2] RM/2 ->e
253 # -              <0> padsv[$x:1,2] sRM* ->-
254 # -              <0> padsv[$y:1,2] sRM* ->-
255 EONT_EONT
256
257 checkOptree ( name      => 'padrange and @_',
258               code      => sub { my ($a,$b) = @_;
259                                  my ($c,$d) = @X::_;
260                                  package Y;
261                                  my ($e,$f) = @_;
262                              },
263               strip_open_hints => 1,
264               skip      => ($] < 5.017006),
265               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
266 # d  <1> leavesub[1 ref] K/REFC,1 ->(end)
267 # -     <@> lineseq KP ->d
268 # 1        <;> nextstate(main 1 p3:1) v:>,<,% ->2
269 # 3        <2> aassign[t5] vKS ->4
270 # -           <1> ex-list lK ->-
271 # 2              <0> padrange[$a:1,4; $b:1,4] */LVINTRO,2 ->3
272 # -              <1> rv2av[t4] lK/1 ->-
273 # -                 <#> gv[*_] s ->-
274 # -           <1> ex-list lKPRM* ->3
275 # -              <0> pushmark sRM*/LVINTRO ->-
276 # -              <0> padsv[$a:1,4] sRM*/LVINTRO ->-
277 # -              <0> padsv[$b:1,4] sRM*/LVINTRO ->-
278 # 4        <;> nextstate(main 2 p3:2) v:>,<,% ->5
279 # 9        <2> aassign[t10] vKS ->a
280 # -           <1> ex-list lK ->8
281 # 5              <0> pushmark s ->6
282 # 7              <1> rv2av[t9] lK/1 ->8
283 # 6                 <#> gv[*X::_] s ->7
284 # -           <1> ex-list lKPRM* ->9
285 # 8              <0> padrange[$c:2,4; $d:2,4] RM/LVINTRO,2 ->9
286 # -              <0> padsv[$c:2,4] sRM*/LVINTRO ->-
287 # -              <0> padsv[$d:2,4] sRM*/LVINTRO ->-
288 # a        <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b
289 # c        <2> aassign[t15] KS ->d
290 # -           <1> ex-list lK ->-
291 # b              <0> padrange[$e:3,4; $f:3,4] */LVINTRO,2 ->c
292 # -              <1> rv2av[t14] lK/1 ->-
293 # -                 <#> gv[*_] s ->-
294 # -           <1> ex-list lKPRM* ->c
295 # -              <0> pushmark sRM*/LVINTRO ->-
296 # -              <0> padsv[$e:3,4] sRM*/LVINTRO ->-
297 # -              <0> padsv[$f:3,4] sRM*/LVINTRO ->-
298 EOT_EOT
299 # d  <1> leavesub[1 ref] K/REFC,1 ->(end)
300 # -     <@> lineseq KP ->d
301 # 1        <;> nextstate(main 1 p3:1) v:>,<,% ->2
302 # 3        <2> aassign[t5] vKS ->4
303 # -           <1> ex-list lK ->-
304 # 2              <0> padrange[$a:1,4; $b:1,4] */LVINTRO,2 ->3
305 # -              <1> rv2av[t4] lK/1 ->-
306 # -                 <$> gv(*_) s ->-
307 # -           <1> ex-list lKPRM* ->3
308 # -              <0> pushmark sRM*/LVINTRO ->-
309 # -              <0> padsv[$a:1,4] sRM*/LVINTRO ->-
310 # -              <0> padsv[$b:1,4] sRM*/LVINTRO ->-
311 # 4        <;> nextstate(main 2 p3:2) v:>,<,% ->5
312 # 9        <2> aassign[t10] vKS ->a
313 # -           <1> ex-list lK ->8
314 # 5              <0> pushmark s ->6
315 # 7              <1> rv2av[t9] lK/1 ->8
316 # 6                 <$> gv(*X::_) s ->7
317 # -           <1> ex-list lKPRM* ->9
318 # 8              <0> padrange[$c:2,4; $d:2,4] RM/LVINTRO,2 ->9
319 # -              <0> padsv[$c:2,4] sRM*/LVINTRO ->-
320 # -              <0> padsv[$d:2,4] sRM*/LVINTRO ->-
321 # a        <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b
322 # c        <2> aassign[t15] KS ->d
323 # -           <1> ex-list lK ->-
324 # b              <0> padrange[$e:3,4; $f:3,4] */LVINTRO,2 ->c
325 # -              <1> rv2av[t14] lK/1 ->-
326 # -                 <$> gv(*_) s ->-
327 # -           <1> ex-list lKPRM* ->c
328 # -              <0> pushmark sRM*/LVINTRO ->-
329 # -              <0> padsv[$e:3,4] sRM*/LVINTRO ->-
330 # -              <0> padsv[$f:3,4] sRM*/LVINTRO ->-
331 EONT_EONT
332
333 checkOptree ( name      => 'consolidate padranges',
334               code      => sub { my ($a,$b); my ($c,$d); 1 },
335               strip_open_hints => 1,
336               skip      => ($] < 5.017006),
337               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
338 # 5  <1> leavesub[1 ref] K/REFC,1 ->(end)
339 # -     <@> lineseq KP ->5
340 # 1        <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2
341 # -        <@> list vKP ->-
342 # 2           <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] vM/LVINTRO,4 ->3
343 # -           <0> padsv[$a:900,902] vM/LVINTRO ->-
344 # -           <0> padsv[$b:900,902] vM/LVINTRO ->-
345 # -        <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->-
346 # -        <@> list vKP ->3
347 # -           <0> pushmark vM/LVINTRO ->-
348 # -           <0> padsv[$c:901,902] vM/LVINTRO ->-
349 # -           <0> padsv[$d:901,902] vM/LVINTRO ->-
350 # 3        <;> nextstate(main 902 optree_misc.t:334) v:>,<,%,{ ->4
351 # 4        <$> const[IV 1] s ->5
352 EOT_EOT
353 # 5  <1> leavesub[1 ref] K/REFC,1 ->(end)
354 # -     <@> lineseq KP ->5
355 # 1        <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2
356 # -        <@> list vKP ->-
357 # 2           <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] vM/LVINTRO,4 ->3
358 # -           <0> padsv[$a:900,902] vM/LVINTRO ->-
359 # -           <0> padsv[$b:900,902] vM/LVINTRO ->-
360 # -        <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->-
361 # -        <@> list vKP ->3
362 # -           <0> pushmark vM/LVINTRO ->-
363 # -           <0> padsv[$c:901,902] vM/LVINTRO ->-
364 # -           <0> padsv[$d:901,902] vM/LVINTRO ->-
365 # 3        <;> nextstate(main 902 optree_misc.t:334) v:>,<,%,{ ->4
366 # 4        <$> const(IV 1) s ->5
367 EONT_EONT
368
369
370 checkOptree ( name      => 'consolidate padranges and singletons',
371               code      => sub { my ($a,$b); my $c; my ($d,$e);
372                                  my @f; my $g; my ($h,$i); my %j; 1 },
373               strip_open_hints => 1,
374               skip      => ($] < 5.017006),
375               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
376 # 5  <1> leavesub[1 ref] K/REFC,1 ->(end)
377 # -     <@> lineseq KP ->5
378 # 1        <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2
379 # -        <@> list vKP ->-
380 # 2           <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; $e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] vM/LVINTRO,10 ->3
381 # -           <0> padsv[$a:903,910] vM/LVINTRO ->-
382 # -           <0> padsv[$b:903,910] vM/LVINTRO ->-
383 # -        <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->-
384 # -        <0> padsv[$c:904,910] vM/LVINTRO ->-
385 # -        <;> nextstate(main 905 optree_misc.t:371) v:>,<,%,{ ->-
386 # -        <@> list vKP ->-
387 # -           <0> pushmark vM/LVINTRO ->-
388 # -           <0> padsv[$d:905,910] vM/LVINTRO ->-
389 # -           <0> padsv[$e:905,910] vM/LVINTRO ->-
390 # -        <;> nextstate(main 906 optree_misc.t:372) v:>,<,%,{ ->-
391 # -        <0> padav[@f:906,910] vM/LVINTRO ->-
392 # -        <;> nextstate(main 907 optree_misc.t:372) v:>,<,%,{ ->-
393 # -        <0> padsv[$g:907,910] vM/LVINTRO ->-
394 # -        <;> nextstate(main 908 optree_misc.t:372) v:>,<,%,{ ->-
395 # -        <@> list vKP ->-
396 # -           <0> pushmark vM/LVINTRO ->-
397 # -           <0> padsv[$h:908,910] vM/LVINTRO ->-
398 # -           <0> padsv[$i:908,910] vM/LVINTRO ->-
399 # -        <;> nextstate(main 909 optree_misc.t:372) v:>,<,%,{ ->-
400 # -        <0> padhv[%j:909,910] vM/LVINTRO ->3
401 # 3        <;> nextstate(main 910 optree_misc.t:372) v:>,<,%,{ ->4
402 # 4        <$> const[IV 1] s ->5
403 EOT_EOT
404 # 5  <1> leavesub[1 ref] K/REFC,1 ->(end)
405 # -     <@> lineseq KP ->5
406 # 1        <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2
407 # -        <@> list vKP ->-
408 # 2           <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; $e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] vM/LVINTRO,10 ->3
409 # -           <0> padsv[$a:903,910] vM/LVINTRO ->-
410 # -           <0> padsv[$b:903,910] vM/LVINTRO ->-
411 # -        <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->-
412 # -        <0> padsv[$c:904,910] vM/LVINTRO ->-
413 # -        <;> nextstate(main 905 optree_misc.t:371) v:>,<,%,{ ->-
414 # -        <@> list vKP ->-
415 # -           <0> pushmark vM/LVINTRO ->-
416 # -           <0> padsv[$d:905,910] vM/LVINTRO ->-
417 # -           <0> padsv[$e:905,910] vM/LVINTRO ->-
418 # -        <;> nextstate(main 906 optree_misc.t:372) v:>,<,%,{ ->-
419 # -        <0> padav[@f:906,910] vM/LVINTRO ->-
420 # -        <;> nextstate(main 907 optree_misc.t:372) v:>,<,%,{ ->-
421 # -        <0> padsv[$g:907,910] vM/LVINTRO ->-
422 # -        <;> nextstate(main 908 optree_misc.t:372) v:>,<,%,{ ->-
423 # -        <@> list vKP ->-
424 # -           <0> pushmark vM/LVINTRO ->-
425 # -           <0> padsv[$h:908,910] vM/LVINTRO ->-
426 # -           <0> padsv[$i:908,910] vM/LVINTRO ->-
427 # -        <;> nextstate(main 909 optree_misc.t:372) v:>,<,%,{ ->-
428 # -        <0> padhv[%j:909,910] vM/LVINTRO ->3
429 # 3        <;> nextstate(main 910 optree_misc.t:372) v:>,<,%,{ ->4
430 # 4        <$> const(IV 1) s ->5
431 EONT_EONT
432
433
434 checkOptree ( name      => 'm?x?',
435               code      => sub { m?x?; },
436               strip_open_hints => 1,
437               expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
438 # 3  <1> leavesub[1 ref] K/REFC,1 ->(end)
439 # -     <@> lineseq KP ->3
440 # 1        <;> nextstate(main 914 optree_misc.t:434) v:>,<,%,{ ->2
441 # 2        </> match(/"x"/) /RTIME ->3
442 EOT_EOT
443 # 3  <1> leavesub[1 ref] K/REFC,1 ->(end)
444 # -     <@> lineseq KP ->3
445 # 1        <;> nextstate(main 914 optree_misc.t:434) v:>,<,%,{ ->2
446 # 2        </> match(/"x"/) /RTIME ->3
447 EONT_EONT
448
449
450 unlink $tmpfile;