5 @INC = ('../lib', '../ext/B/t');
7 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
8 print "1..0 # Skip -- Perl configured without B module\n";
11 if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
13 "1..0 # Skip: Data::Dumper was not built, needed by OptreeCheck\n";
24 skip "no perlio in this build", 11 unless $Config::Config{useperlio};
26 pass("SORT OPTIMIZATION");
28 checkOptree ( name => 'sub {sort @a}',
29 code => sub {sort @a},
31 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
32 # 1 <;> nextstate(main 424 optree_sort.t:14) v
35 # 4 <1> rv2av[t2] lK/1
37 # 6 <1> leavesub[1 ref] K/REFC,1
39 # 1 <;> nextstate(main 424 optree_sort.t:14) v
42 # 4 <1> rv2av[t1] lK/1
44 # 6 <1> leavesub[1 ref] K/REFC,1
47 checkOptree ( name => 'sort @a',
50 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
52 2 <;> nextstate(main 1 -e:1) v
57 7 <@> leave[1 ref] vKP/REFC
60 # 2 <;> nextstate(main 1 -e:1) v
63 # 5 <1> rv2av[t1] lK/1
65 # 7 <@> leave[1 ref] vKP/REFC
68 checkOptree ( name => 'sub {@a = sort @a}',
69 code => sub {@a = sort @a},
71 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
72 1 <;> nextstate(main -438 optree.t:244) v
80 9 <1> rv2av[t2] lKRM*/1
81 a <2> aassign[t\d+] KS/COMMON
82 b <1> leavesub[1 ref] K/REFC,1
84 # 1 <;> nextstate(main 65 optree.t:311) v
88 # 5 <1> rv2av[t2] lK/1
92 # 9 <1> rv2av[t1] lKRM*/1
93 # a <2> aassign[t3] KS/COMMON
94 # b <1> leavesub[1 ref] K/REFC,1
97 checkOptree ( name => '@a = sort @a',
98 prog => '@a = sort @a',
100 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
102 2 <;> nextstate(main 1 -e:1) v
106 6 <1> rv2av[t4] lKRM*/1
107 7 <@> sort lK/INPLACE
108 8 <@> leave[1 ref] vKP/REFC
111 # 2 <;> nextstate(main 1 -e:1) v
115 # 6 <1> rv2av[t2] lKRM*/1
116 # 7 <@> sort lK/INPLACE
117 # 8 <@> leave[1 ref] vKP/REFC
120 checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
121 code => sub {@a = sort @a; reverse @a},
123 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
124 1 <;> nextstate(main -438 optree.t:286) v
128 5 <1> rv2av[t4] lKRM*/1
129 6 <@> sort lK/INPLACE
130 7 <;> nextstate(main -438 optree.t:288) v
134 b <@> reverse[t8] K/1
135 c <1> leavesub[1 ref] K/REFC,1
137 # 1 <;> nextstate(main 66 optree.t:345) v
141 # 5 <1> rv2av[t2] lKRM*/1
142 # 6 <@> sort lK/INPLACE
143 # 7 <;> nextstate(main 66 optree.t:346) v
146 # a <1> rv2av[t4] lK/1
147 # b <@> reverse[t5] K/1
148 # c <1> leavesub[1 ref] K/REFC,1
151 checkOptree ( name => '@a = sort @a; reverse @a',
152 prog => '@a = sort @a; reverse @a',
154 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
156 2 <;> nextstate(main 1 -e:1) v
160 6 <1> rv2av[t4] lKRM*/1
161 7 <@> sort lK/INPLACE
162 8 <;> nextstate(main 1 -e:1) v
166 c <@> reverse[t8] vK/1
167 d <@> leave[1 ref] vKP/REFC
170 # 2 <;> nextstate(main 1 -e:1) v
174 # 6 <1> rv2av[t2] lKRM*/1
175 # 7 <@> sort lK/INPLACE
176 # 8 <;> nextstate(main 1 -e:1) v
179 # b <1> rv2av[t4] lK/1
180 # c <@> reverse[t5] vK/1
181 # d <@> leave[1 ref] vKP/REFC
184 checkOptree ( name => 'sub {my @a; @a = sort @a}',
185 code => sub {my @a; @a = sort @a},
187 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
188 1 <;> nextstate(main -437 optree.t:254) v
189 2 <0> padav[@a:-437,-436] vM/LVINTRO
190 3 <;> nextstate(main -436 optree.t:256) v
193 6 <0> padav[@a:-437,-436] l
196 9 <0> padav[@a:-437,-436] lRM*
197 a <2> aassign[t\d+] KS/COMMON
198 b <1> leavesub[1 ref] K/REFC,1
200 # 1 <;> nextstate(main 427 optree_sort.t:172) v
201 # 2 <0> padav[@a:427,428] vM/LVINTRO
202 # 3 <;> nextstate(main 428 optree_sort.t:173) v
205 # 6 <0> padav[@a:427,428] l
208 # 9 <0> padav[@a:427,428] lRM*
209 # a <2> aassign[t2] KS/COMMON
210 # b <1> leavesub[1 ref] K/REFC,1
213 checkOptree ( name => 'my @a; @a = sort @a',
214 prog => 'my @a; @a = sort @a',
216 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
218 2 <;> nextstate(main 1 -e:1) v
219 3 <0> padav[@a:1,2] vM/LVINTRO
220 4 <;> nextstate(main 2 -e:1) v
223 7 <0> padav[@a:1,2] lRM*
224 8 <@> sort lK/INPLACE
225 9 <@> leave[1 ref] vKP/REFC
228 # 2 <;> nextstate(main 1 -e:1) v
229 # 3 <0> padav[@a:1,2] vM/LVINTRO
230 # 4 <;> nextstate(main 2 -e:1) v
233 # 7 <0> padav[@a:1,2] lRM*
234 # 8 <@> sort lK/INPLACE
235 # 9 <@> leave[1 ref] vKP/REFC
238 checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
239 code => sub {my @a; @a = sort @a; push @a, 1},
242 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
243 1 <;> nextstate(main -437 optree.t:325) v
244 2 <0> padav[@a:-437,-436] vM/LVINTRO
245 3 <;> nextstate(main -436 optree.t:325) v
248 6 <0> padav[@a:-437,-436] lRM*
249 7 <@> sort lK/INPLACE
250 8 <;> nextstate(main -436 optree.t:325) v
252 a <0> padav[@a:-437,-436] lRM
255 d <1> leavesub[1 ref] K/REFC,1
257 # 1 <;> nextstate(main 429 optree_sort.t:219) v
258 # 2 <0> padav[@a:429,430] vM/LVINTRO
259 # 3 <;> nextstate(main 430 optree_sort.t:220) v
262 # 6 <0> padav[@a:429,430] lRM*
263 # 7 <@> sort lK/INPLACE
264 # 8 <;> nextstate(main 430 optree_sort.t:220) v
266 # a <0> padav[@a:429,430] lRM
267 # b <$> const(IV 1) s
268 # c <@> push[t3] sK/2
269 # d <1> leavesub[1 ref] K/REFC,1
272 checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
273 code => sub {my @a; @a = sort @a; 1},
276 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
277 1 <;> nextstate(main -437 optree.t:325) v
278 2 <0> padav[@a:-437,-436] vM/LVINTRO
279 3 <;> nextstate(main -436 optree.t:325) v
282 6 <0> padav[@a:-437,-436] lRM*
283 7 <@> sort lK/INPLACE
284 8 <;> nextstate(main -436 optree.t:346) v
286 a <1> leavesub[1 ref] K/REFC,1
288 # 1 <;> nextstate(main 431 optree_sort.t:250) v
289 # 2 <0> padav[@a:431,432] vM/LVINTRO
290 # 3 <;> nextstate(main 432 optree_sort.t:251) v
293 # 6 <0> padav[@a:431,432] lRM*
294 # 7 <@> sort lK/INPLACE
295 # 8 <;> nextstate(main 432 optree_sort.t:251) v
296 # 9 <$> const(IV 1) s
297 # a <1> leavesub[1 ref] K/REFC,1