6 @INC = ('.', '../lib', '../ext/B/t');
12 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
13 print "1..0 # Skip -- Perl configured without B module\n";
16 if ($Config::Config{'extensions'} !~ /\bData\/Dumper\b/) {
18 "1..0 # Skip: Data::Dumper was not built, needed by OptreeCheck\n";
28 skip "no perlio in this build", 11 unless $Config::Config{useperlio};
30 pass("SORT OPTIMIZATION");
32 checkOptree ( name => 'sub {sort @a}',
33 code => sub {sort @a},
35 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
36 # 1 <;> nextstate(main 424 optree_sort.t:14) v
39 # 4 <1> rv2av[t2] lK/1
41 # 6 <1> leavesub[1 ref] K/REFC,1
43 # 1 <;> nextstate(main 424 optree_sort.t:14) v
46 # 4 <1> rv2av[t1] lK/1
48 # 6 <1> leavesub[1 ref] K/REFC,1
51 checkOptree ( name => 'sort @a',
54 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
56 2 <;> nextstate(main 1 -e:1) v
61 7 <@> leave[1 ref] vKP/REFC
64 # 2 <;> nextstate(main 1 -e:1) v
67 # 5 <1> rv2av[t1] lK/1
69 # 7 <@> leave[1 ref] vKP/REFC
72 checkOptree ( name => 'sub {@a = sort @a}',
73 code => sub {@a = sort @a},
75 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
76 1 <;> nextstate(main -438 optree.t:244) v
84 9 <1> rv2av[t2] lKRM*/1
85 a <2> aassign[t\d+] KS/COMMON
86 b <1> leavesub[1 ref] K/REFC,1
88 # 1 <;> nextstate(main 65 optree.t:311) v
92 # 5 <1> rv2av[t2] lK/1
96 # 9 <1> rv2av[t1] lKRM*/1
97 # a <2> aassign[t3] KS/COMMON
98 # b <1> leavesub[1 ref] K/REFC,1
101 checkOptree ( name => '@a = sort @a',
102 prog => '@a = sort @a',
104 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
106 2 <;> nextstate(main 1 -e:1) v
110 6 <1> rv2av[t4] lKRM*/1
111 7 <@> sort lK/INPLACE
112 8 <@> leave[1 ref] vKP/REFC
115 # 2 <;> nextstate(main 1 -e:1) v
119 # 6 <1> rv2av[t2] lKRM*/1
120 # 7 <@> sort lK/INPLACE
121 # 8 <@> leave[1 ref] vKP/REFC
124 checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
125 code => sub {@a = sort @a; reverse @a},
127 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
128 1 <;> nextstate(main -438 optree.t:286) v
132 5 <1> rv2av[t4] lKRM*/1
133 6 <@> sort lK/INPLACE
134 7 <;> nextstate(main -438 optree.t:288) v
138 b <@> reverse[t8] K/1
139 c <1> leavesub[1 ref] K/REFC,1
141 # 1 <;> nextstate(main 66 optree.t:345) v
145 # 5 <1> rv2av[t2] lKRM*/1
146 # 6 <@> sort lK/INPLACE
147 # 7 <;> nextstate(main 66 optree.t:346) v
150 # a <1> rv2av[t4] lK/1
151 # b <@> reverse[t5] K/1
152 # c <1> leavesub[1 ref] K/REFC,1
155 checkOptree ( name => '@a = sort @a; reverse @a',
156 prog => '@a = sort @a; reverse @a',
158 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
160 2 <;> nextstate(main 1 -e:1) v
164 6 <1> rv2av[t4] lKRM*/1
165 7 <@> sort lK/INPLACE
166 8 <;> nextstate(main 1 -e:1) v
170 c <@> reverse[t8] vK/1
171 d <@> leave[1 ref] vKP/REFC
174 # 2 <;> nextstate(main 1 -e:1) v
178 # 6 <1> rv2av[t2] lKRM*/1
179 # 7 <@> sort lK/INPLACE
180 # 8 <;> nextstate(main 1 -e:1) v
183 # b <1> rv2av[t4] lK/1
184 # c <@> reverse[t5] vK/1
185 # d <@> leave[1 ref] vKP/REFC
188 checkOptree ( name => 'sub {my @a; @a = sort @a}',
189 code => sub {my @a; @a = sort @a},
191 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
192 1 <;> nextstate(main -437 optree.t:254) v
193 2 <0> padav[@a:-437,-436] vM/LVINTRO
194 3 <;> nextstate(main -436 optree.t:256) v
197 6 <0> padav[@a:-437,-436] l
200 9 <0> padav[@a:-437,-436] lRM*
201 a <2> aassign[t\d+] KS/COMMON
202 b <1> leavesub[1 ref] K/REFC,1
204 # 1 <;> nextstate(main 427 optree_sort.t:172) v
205 # 2 <0> padav[@a:427,428] vM/LVINTRO
206 # 3 <;> nextstate(main 428 optree_sort.t:173) v
209 # 6 <0> padav[@a:427,428] l
212 # 9 <0> padav[@a:427,428] lRM*
213 # a <2> aassign[t2] KS/COMMON
214 # b <1> leavesub[1 ref] K/REFC,1
217 checkOptree ( name => 'my @a; @a = sort @a',
218 prog => 'my @a; @a = sort @a',
220 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
222 2 <;> nextstate(main 1 -e:1) v
223 3 <0> padav[@a:1,2] vM/LVINTRO
224 4 <;> nextstate(main 2 -e:1) v
227 7 <0> padav[@a:1,2] lRM*
228 8 <@> sort lK/INPLACE
229 9 <@> leave[1 ref] vKP/REFC
232 # 2 <;> nextstate(main 1 -e:1) v
233 # 3 <0> padav[@a:1,2] vM/LVINTRO
234 # 4 <;> nextstate(main 2 -e:1) v
237 # 7 <0> padav[@a:1,2] lRM*
238 # 8 <@> sort lK/INPLACE
239 # 9 <@> leave[1 ref] vKP/REFC
242 checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
243 code => sub {my @a; @a = sort @a; push @a, 1},
246 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
247 1 <;> nextstate(main -437 optree.t:325) v
248 2 <0> padav[@a:-437,-436] vM/LVINTRO
249 3 <;> nextstate(main -436 optree.t:325) v
252 6 <0> padav[@a:-437,-436] lRM*
253 7 <@> sort lK/INPLACE
254 8 <;> nextstate(main -436 optree.t:325) v
256 a <0> padav[@a:-437,-436] lRM
259 d <1> leavesub[1 ref] K/REFC,1
261 # 1 <;> nextstate(main 429 optree_sort.t:219) v
262 # 2 <0> padav[@a:429,430] vM/LVINTRO
263 # 3 <;> nextstate(main 430 optree_sort.t:220) v
266 # 6 <0> padav[@a:429,430] lRM*
267 # 7 <@> sort lK/INPLACE
268 # 8 <;> nextstate(main 430 optree_sort.t:220) v
270 # a <0> padav[@a:429,430] lRM
271 # b <$> const(IV 1) s
272 # c <@> push[t3] sK/2
273 # d <1> leavesub[1 ref] K/REFC,1
276 checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
277 code => sub {my @a; @a = sort @a; 1},
280 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
281 1 <;> nextstate(main -437 optree.t:325) v
282 2 <0> padav[@a:-437,-436] vM/LVINTRO
283 3 <;> nextstate(main -436 optree.t:325) v
286 6 <0> padav[@a:-437,-436] lRM*
287 7 <@> sort lK/INPLACE
288 8 <;> nextstate(main -436 optree.t:346) v
290 a <1> leavesub[1 ref] K/REFC,1
292 # 1 <;> nextstate(main 431 optree_sort.t:250) v
293 # 2 <0> padav[@a:431,432] vM/LVINTRO
294 # 3 <;> nextstate(main 432 optree_sort.t:251) v
297 # 6 <0> padav[@a:431,432] lRM*
298 # 7 <@> sort lK/INPLACE
299 # 8 <;> nextstate(main 432 optree_sort.t:251) v
300 # 9 <$> const(IV 1) s
301 # a <1> leavesub[1 ref] K/REFC,1