Commit | Line | Data |
---|---|---|
c60fdceb SM |
1 | #!perl |
2 | ||
3 | BEGIN { | |
74517a3a | 4 | unshift @INC, 't'; |
c60fdceb SM |
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; | |
2721a2ca | 13 | plan tests => 18; |
c60fdceb SM |
14 | |
15 | SKIP: { | |
3857d07c | 16 | skip "no perlio in this build", 4 unless $Config::Config{useperlio}; |
c60fdceb | 17 | |
93bad3fd | 18 | # The regression this was testing is that the first aelemfast, derived |
c60fdceb SM |
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 | ||
93bad3fd NC |
24 | # All this is much simpler, now that aelemfast_lex has been broken out from |
25 | # aelemfast | |
c60fdceb | 26 | checkOptree ( name => 'OP_AELEMFAST opclass', |
b024352e | 27 | code => sub { my @x; our @y; $x[127] + $y[-128]}, |
be2b1c74 | 28 | strip_open_hints => 1, |
c60fdceb SM |
29 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
30 | # a <1> leavesub[1 ref] K/REFC,1 ->(end) | |
31 | # - <@> lineseq KP ->a | |
be2b1c74 | 32 | # 1 <;> nextstate(main 634 optree_misc.t:25) v:>,<,% ->2 |
c60fdceb | 33 | # 2 <0> padav[@x:634,636] vM/LVINTRO ->3 |
be2b1c74 | 34 | # 3 <;> nextstate(main 635 optree_misc.t:25) v:>,<,% ->4 |
c60fdceb SM |
35 | # 5 <1> rv2av[t4] vK/OURINTR,1 ->6 |
36 | # 4 <#> gv[*y] s ->5 | |
be2b1c74 | 37 | # 6 <;> nextstate(main 636 optree_misc.t:25) v:>,<,%,{ ->7 |
c60fdceb SM |
38 | # 9 <2> add[t6] sK/2 ->a |
39 | # - <1> ex-aelem sK/2 ->8 | |
b024352e | 40 | # 7 <0> aelemfast_lex[@x:634,636] sR/127 ->8 |
c60fdceb SM |
41 | # - <0> ex-const s ->- |
42 | # - <1> ex-aelem sK/2 ->9 | |
43 | # - <1> ex-rv2av sKR/1 ->- | |
b024352e DM |
44 | # 8 <#> aelemfast[*y] s/128 ->9 |
45 | # - <0> ex-const s/FOLD ->- | |
c60fdceb SM |
46 | EOT_EOT |
47 | # a <1> leavesub[1 ref] K/REFC,1 ->(end) | |
48 | # - <@> lineseq KP ->a | |
be2b1c74 | 49 | # 1 <;> nextstate(main 634 optree_misc.t:27) v:>,<,% ->2 |
c60fdceb | 50 | # 2 <0> padav[@x:634,636] vM/LVINTRO ->3 |
be2b1c74 | 51 | # 3 <;> nextstate(main 635 optree_misc.t:27) v:>,<,% ->4 |
c60fdceb SM |
52 | # 5 <1> rv2av[t3] vK/OURINTR,1 ->6 |
53 | # 4 <$> gv(*y) s ->5 | |
be2b1c74 | 54 | # 6 <;> nextstate(main 636 optree_misc.t:27) v:>,<,%,{ ->7 |
c60fdceb SM |
55 | # 9 <2> add[t4] sK/2 ->a |
56 | # - <1> ex-aelem sK/2 ->8 | |
b024352e | 57 | # 7 <0> aelemfast_lex[@x:634,636] sR/127 ->8 |
c60fdceb SM |
58 | # - <0> ex-const s ->- |
59 | # - <1> ex-aelem sK/2 ->9 | |
60 | # - <1> ex-rv2av sKR/1 ->- | |
b024352e DM |
61 | # 8 <$> aelemfast(*y) s/128 ->9 |
62 | # - <0> ex-const s/FOLD ->- | |
c60fdceb SM |
63 | EONT_EONT |
64 | ||
0090231f NC |
65 | checkOptree ( name => 'PMOP children', |
66 | code => sub { $foo =~ s/(a)/$1/ }, | |
67 | strip_open_hints => 1, | |
82aeefe1 DM |
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'))); | |
bb933b9b FC |
92 | # 5 <1> leavesub[1 ref] K/REFC,1 ->(end) |
93 | # - <@> lineseq KP ->5 | |
0090231f | 94 | # 1 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2 |
bb933b9b | 95 | # 4 </> subst(/"(a)"/) KS ->5 |
0090231f NC |
96 | # - <1> ex-rv2sv sKRM/1 ->3 |
97 | # 2 <#> gvsv[*foo] s ->3 | |
bb933b9b FC |
98 | # - <1> ex-rv2sv sK/1 ->4 |
99 | # 3 <#> gvsv[*1] s ->4 | |
0090231f | 100 | EOT_EOT |
bb933b9b FC |
101 | # 5 <1> leavesub[1 ref] K/REFC,1 ->(end) |
102 | # - <@> lineseq KP ->5 | |
0090231f | 103 | # 1 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2 |
bb933b9b | 104 | # 4 </> subst(/"(a)"/) KS ->5 |
0090231f NC |
105 | # - <1> ex-rv2sv sKRM/1 ->3 |
106 | # 2 <$> gvsv(*foo) s ->3 | |
bb933b9b FC |
107 | # - <1> ex-rv2sv sK/1 ->4 |
108 | # 3 <$> gvsv(*1) s ->4 | |
0090231f | 109 | EONT_EONT |
c60fdceb SM |
110 | |
111 | } #skip | |
112 | ||
50786ba8 NC |
113 | my $t = <<'EOT_EOT'; |
114 | # 8 <@> leave[1 ref] vKP/REFC ->(end) | |
115 | # 1 <0> enter ->2 | |
2acfb4e0 | 116 | # 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3 |
50786ba8 NC |
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 | |
c13a5c80 | 121 | # 4 <$> const[PVMG "foo"] s ->5 |
50786ba8 NC |
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 | |
2acfb4e0 | 128 | # 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3 |
50786ba8 NC |
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 | |
c13a5c80 | 133 | # 4 <$> const(PVMG "foo") s ->5 |
50786ba8 NC |
134 | # - <1> ex-rv2sv sKRM*/1 ->7 |
135 | # 6 <$> gvsv(*_) s ->7 | |
136 | EONT_EONT | |
137 | ||
50786ba8 | 138 | checkOptree ( name => 'index and PVBM', |
22aebd37 | 139 | prog => '$_ = index q(foo), q(foo)', |
2acfb4e0 | 140 | strip_open_hints => 1, |
50786ba8 | 141 | expect => $t, expect_nt => $nt); |
35f75594 | 142 | |
f85f6494 SH |
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 | ||
35f75594 FC |
148 | checkOptree ( name => 'formats', |
149 | bcopts => 'STDOUT', | |
f85f6494 | 150 | progfile => $tmpfile, |
35f75594 | 151 | strip_open_hints => 1, |
82aeefe1 | 152 | skip => ($] < 5.017003), |
35f75594 FC |
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 | |
1473b834 | 157 | # 1 <;> nextstate(main 1 -:4) v:>,<,% ->2 |
35f75594 FC |
158 | # 5 <@> formline vK/2 ->6 |
159 | # 2 <0> pushmark s ->3 | |
160 | # 3 <$> const[PV "@<<<\n"] s ->4 | |
161 | # - <@> lineseq lK ->5 | |
162 | # - <0> ex-nextstate v ->4 | |
163 | # - <1> ex-rv2sv sK/1 ->- | |
164 | # 4 <#> gvsv[*a] s ->5 | |
1473b834 | 165 | # 6 <;> nextstate(main 1 -:6) v:>,<,% ->7 |
35f75594 FC |
166 | # b <@> formline sK/2 ->c |
167 | # 7 <0> pushmark s ->8 | |
168 | # 8 <$> const[PV "@>>>\n"] s ->9 | |
169 | # - <@> lineseq lK ->b | |
170 | # - <0> ex-nextstate 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 | |
1473b834 | 177 | # 1 <;> nextstate(main 1 -:4) v:>,<,% ->2 |
35f75594 FC |
178 | # 5 <@> formline vK/2 ->6 |
179 | # 2 <0> pushmark s ->3 | |
180 | # 3 <$> const(PV "@<<<\n") s ->4 | |
181 | # - <@> lineseq lK ->5 | |
182 | # - <0> ex-nextstate v ->4 | |
183 | # - <1> ex-rv2sv sK/1 ->- | |
184 | # 4 <$> gvsv(*a) s ->5 | |
1473b834 | 185 | # 6 <;> nextstate(main 1 -:6) v:>,<,% ->7 |
35f75594 FC |
186 | # b <@> formline sK/2 ->c |
187 | # 7 <0> pushmark s ->8 | |
188 | # 8 <$> const(PV "@>>>\n") s ->9 | |
189 | # - <@> lineseq lK ->b | |
190 | # - <0> ex-nextstate v ->9 | |
191 | # a <1> rv2av[t3] lK/1 ->b | |
192 | # 9 <$> gv(*b) s ->a | |
193 | EONT_EONT | |
f85f6494 | 194 | |
d5524600 DM |
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 | |
e7fd4fe6 | 202 | # 1 <;> nextstate(main 1 -e:1) v:>,<,% ->2 |
d5524600 DM |
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 ->- | |
e7fd4fe6 | 207 | # 3 <;> nextstate(main 2 -e:1) v:>,<,% ->4 |
d5524600 DM |
208 | # 8 <2> aassign[t4] vKS ->9 |
209 | # - <1> ex-list lKP ->5 | |
210 | # 4 <0> padrange[$x:1,2; $y:1,2] l/2 ->5 | |
211 | # - <0> padsv[$x:1,2] l ->- | |
212 | # - <0> padsv[$y:1,2] l ->- | |
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 | |
e7fd4fe6 | 217 | # 9 <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a |
d5524600 DM |
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] lRM/2 ->e | |
225 | # - <0> padsv[$x:1,2] lRM* ->- | |
226 | # - <0> padsv[$y:1,2] lRM* ->- | |
227 | EOT_EOT | |
228 | # f <1> leavesub[1 ref] K/REFC,1 ->(end) | |
229 | # - <@> lineseq KP ->f | |
e7fd4fe6 | 230 | # 1 <;> nextstate(main 1 -e:1) v:>,<,% ->2 |
d5524600 DM |
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 ->- | |
e7fd4fe6 | 235 | # 3 <;> nextstate(main 2 -e:1) v:>,<,% ->4 |
d5524600 DM |
236 | # 8 <2> aassign[t4] vKS ->9 |
237 | # - <1> ex-list lKP ->5 | |
238 | # 4 <0> padrange[$x:1,2; $y:1,2] l/2 ->5 | |
239 | # - <0> padsv[$x:1,2] l ->- | |
240 | # - <0> padsv[$y:1,2] l ->- | |
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 | |
e7fd4fe6 | 245 | # 9 <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a |
d5524600 DM |
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] lRM/2 ->e | |
253 | # - <0> padsv[$x:1,2] lRM* ->- | |
254 | # - <0> padsv[$y:1,2] lRM* ->- | |
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 | |
e7fd4fe6 | 268 | # 1 <;> nextstate(main 1 p3:1) v:>,<,% ->2 |
d5524600 DM |
269 | # 3 <2> aassign[t5] vKS ->4 |
270 | # - <1> ex-list lK ->- | |
271 | # 2 <0> padrange[$a:1,4; $b:1,4] l*/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] lRM*/LVINTRO ->- | |
277 | # - <0> padsv[$b:1,4] lRM*/LVINTRO ->- | |
e7fd4fe6 | 278 | # 4 <;> nextstate(main 2 p3:2) v:>,<,% ->5 |
d5524600 DM |
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] lRM/LVINTRO,2 ->9 | |
286 | # - <0> padsv[$c:2,4] lRM*/LVINTRO ->- | |
287 | # - <0> padsv[$d:2,4] lRM*/LVINTRO ->- | |
e7fd4fe6 | 288 | # a <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b |
d5524600 DM |
289 | # c <2> aassign[t15] KS ->d |
290 | # - <1> ex-list lK ->- | |
291 | # b <0> padrange[$e:3,4; $f:3,4] l*/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] lRM*/LVINTRO ->- | |
297 | # - <0> padsv[$f:3,4] lRM*/LVINTRO ->- | |
298 | EOT_EOT | |
299 | # d <1> leavesub[1 ref] K/REFC,1 ->(end) | |
300 | # - <@> lineseq KP ->d | |
e7fd4fe6 | 301 | # 1 <;> nextstate(main 1 p3:1) v:>,<,% ->2 |
d5524600 DM |
302 | # 3 <2> aassign[t5] vKS ->4 |
303 | # - <1> ex-list lK ->- | |
304 | # 2 <0> padrange[$a:1,4; $b:1,4] l*/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] lRM*/LVINTRO ->- | |
310 | # - <0> padsv[$b:1,4] lRM*/LVINTRO ->- | |
e7fd4fe6 | 311 | # 4 <;> nextstate(main 2 p3:2) v:>,<,% ->5 |
d5524600 DM |
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] lRM/LVINTRO,2 ->9 | |
319 | # - <0> padsv[$c:2,4] lRM*/LVINTRO ->- | |
320 | # - <0> padsv[$d:2,4] lRM*/LVINTRO ->- | |
e7fd4fe6 | 321 | # a <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b |
d5524600 DM |
322 | # c <2> aassign[t15] KS ->d |
323 | # - <1> ex-list lK ->- | |
324 | # b <0> padrange[$e:3,4; $f:3,4] l*/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] lRM*/LVINTRO ->- | |
330 | # - <0> padsv[$f:3,4] lRM*/LVINTRO ->- | |
331 | EONT_EONT | |
332 | ||
4774ee0a DM |
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 | |
e7fd4fe6 | 340 | # 1 <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2 |
4774ee0a DM |
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 ->- | |
e7fd4fe6 | 345 | # - <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->- |
4774ee0a DM |
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 ->- | |
e7fd4fe6 | 350 | # 3 <;> nextstate(main 902 optree_misc.t:334) v:>,<,%,{ ->4 |
4774ee0a DM |
351 | # 4 <$> const[IV 1] s ->5 |
352 | EOT_EOT | |
353 | # 5 <1> leavesub[1 ref] K/REFC,1 ->(end) | |
354 | # - <@> lineseq KP ->5 | |
e7fd4fe6 | 355 | # 1 <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2 |
4774ee0a DM |
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 ->- | |
e7fd4fe6 | 360 | # - <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->- |
4774ee0a DM |
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 ->- | |
e7fd4fe6 | 365 | # 3 <;> nextstate(main 902 optree_misc.t:334) v:>,<,%,{ ->4 |
4774ee0a DM |
366 | # 4 <$> const(IV 1) s ->5 |
367 | EONT_EONT | |
368 | ||
369 | ||
fd3cc9e5 DM |
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 | |
e7fd4fe6 | 378 | # 1 <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2 |
fd3cc9e5 DM |
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 ->- | |
e7fd4fe6 | 383 | # - <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->- |
fd3cc9e5 | 384 | # - <0> padsv[$c:904,910] vM/LVINTRO ->- |
e7fd4fe6 | 385 | # - <;> nextstate(main 905 optree_misc.t:371) v:>,<,%,{ ->- |
fd3cc9e5 DM |
386 | # - <@> list vKP ->- |
387 | # - <0> pushmark vM/LVINTRO ->- | |
388 | # - <0> padsv[$d:905,910] vM/LVINTRO ->- | |
389 | # - <0> padsv[$e:905,910] vM/LVINTRO ->- | |
e7fd4fe6 | 390 | # - <;> nextstate(main 906 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 | 391 | # - <0> padav[@f:906,910] vM/LVINTRO ->- |
e7fd4fe6 | 392 | # - <;> nextstate(main 907 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 | 393 | # - <0> padsv[$g:907,910] vM/LVINTRO ->- |
e7fd4fe6 | 394 | # - <;> nextstate(main 908 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 DM |
395 | # - <@> list vKP ->- |
396 | # - <0> pushmark vM/LVINTRO ->- | |
397 | # - <0> padsv[$h:908,910] vM/LVINTRO ->- | |
398 | # - <0> padsv[$i:908,910] vM/LVINTRO ->- | |
e7fd4fe6 | 399 | # - <;> nextstate(main 909 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 | 400 | # - <0> padhv[%j:909,910] vM/LVINTRO ->3 |
e7fd4fe6 | 401 | # 3 <;> nextstate(main 910 optree_misc.t:372) v:>,<,%,{ ->4 |
fd3cc9e5 DM |
402 | # 4 <$> const[IV 1] s ->5 |
403 | EOT_EOT | |
404 | # 5 <1> leavesub[1 ref] K/REFC,1 ->(end) | |
405 | # - <@> lineseq KP ->5 | |
e7fd4fe6 | 406 | # 1 <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2 |
fd3cc9e5 DM |
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 ->- | |
e7fd4fe6 | 411 | # - <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->- |
fd3cc9e5 | 412 | # - <0> padsv[$c:904,910] vM/LVINTRO ->- |
e7fd4fe6 | 413 | # - <;> nextstate(main 905 optree_misc.t:371) v:>,<,%,{ ->- |
fd3cc9e5 DM |
414 | # - <@> list vKP ->- |
415 | # - <0> pushmark vM/LVINTRO ->- | |
416 | # - <0> padsv[$d:905,910] vM/LVINTRO ->- | |
417 | # - <0> padsv[$e:905,910] vM/LVINTRO ->- | |
e7fd4fe6 | 418 | # - <;> nextstate(main 906 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 | 419 | # - <0> padav[@f:906,910] vM/LVINTRO ->- |
e7fd4fe6 | 420 | # - <;> nextstate(main 907 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 | 421 | # - <0> padsv[$g:907,910] vM/LVINTRO ->- |
e7fd4fe6 | 422 | # - <;> nextstate(main 908 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 DM |
423 | # - <@> list vKP ->- |
424 | # - <0> pushmark vM/LVINTRO ->- | |
425 | # - <0> padsv[$h:908,910] vM/LVINTRO ->- | |
426 | # - <0> padsv[$i:908,910] vM/LVINTRO ->- | |
e7fd4fe6 | 427 | # - <;> nextstate(main 909 optree_misc.t:372) v:>,<,%,{ ->- |
fd3cc9e5 | 428 | # - <0> padhv[%j:909,910] vM/LVINTRO ->3 |
e7fd4fe6 | 429 | # 3 <;> nextstate(main 910 optree_misc.t:372) v:>,<,%,{ ->4 |
fd3cc9e5 DM |
430 | # 4 <$> const(IV 1) s ->5 |
431 | EONT_EONT | |
432 | ||
433 | ||
2721a2ca DM |
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 | |
64bb98af | 440 | # 1 <;> nextstate(main 914 optree_misc.t:434) v:>,<,%,{ ->2 |
2721a2ca DM |
441 | # 2 </> match(/"x"/) /RTIME ->3 |
442 | EOT_EOT | |
443 | # 3 <1> leavesub[1 ref] K/REFC,1 ->(end) | |
444 | # - <@> lineseq KP ->3 | |
64bb98af | 445 | # 1 <;> nextstate(main 914 optree_misc.t:434) v:>,<,%,{ ->2 |
2721a2ca DM |
446 | # 2 </> match(/"x"/) /RTIME ->3 |
447 | EONT_EONT | |
448 | ||
449 | ||
f85f6494 | 450 | unlink $tmpfile; |