5 @INC = ('../lib', '../ext/B/t');
7 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
8 print "1..0 # Skip -- Perl configured without B module\n";
18 skip "no perlio in this build", 11 unless $Config::Config{useperlio};
20 pass("SORT OPTIMIZATION");
22 checkOptree ( name => 'sub {sort @a}',
23 code => sub {sort @a},
25 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
26 # 1 <;> nextstate(main 424 optree_sort.t:14) v
29 # 4 <1> rv2av[t2] lK/1
31 # 6 <1> leavesub[1 ref] K/REFC,1
33 # 1 <;> nextstate(main 424 optree_sort.t:14) v
36 # 4 <1> rv2av[t1] lK/1
38 # 6 <1> leavesub[1 ref] K/REFC,1
41 checkOptree ( name => 'sort @a',
44 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
46 2 <;> nextstate(main 1 -e:1) v
51 7 <@> leave[1 ref] vKP/REFC
54 # 2 <;> nextstate(main 1 -e:1) v
57 # 5 <1> rv2av[t1] lK/1
59 # 7 <@> leave[1 ref] vKP/REFC
62 checkOptree ( name => 'sub {@a = sort @a}',
63 code => sub {@a = sort @a},
65 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
66 1 <;> nextstate(main -438 optree.t:244) v
74 9 <1> rv2av[t2] lKRM*/1
75 a <2> aassign[t\d+] KS/COMMON
76 b <1> leavesub[1 ref] K/REFC,1
78 # 1 <;> nextstate(main 65 optree.t:311) v
82 # 5 <1> rv2av[t2] lK/1
86 # 9 <1> rv2av[t1] lKRM*/1
87 # a <2> aassign[t3] KS/COMMON
88 # b <1> leavesub[1 ref] K/REFC,1
91 checkOptree ( name => '@a = sort @a',
92 prog => '@a = sort @a',
94 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
96 2 <;> nextstate(main 1 -e:1) v
100 6 <1> rv2av[t4] lKRM*/1
101 7 <@> sort lK/INPLACE
102 8 <@> leave[1 ref] vKP/REFC
105 # 2 <;> nextstate(main 1 -e:1) v
109 # 6 <1> rv2av[t2] lKRM*/1
110 # 7 <@> sort lK/INPLACE
111 # 8 <@> leave[1 ref] vKP/REFC
114 checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
115 code => sub {@a = sort @a; reverse @a},
117 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
118 1 <;> nextstate(main -438 optree.t:286) v
122 5 <1> rv2av[t4] lKRM*/1
123 6 <@> sort lK/INPLACE
124 7 <;> nextstate(main -438 optree.t:288) v
128 b <@> reverse[t8] K/1
129 c <1> leavesub[1 ref] K/REFC,1
131 # 1 <;> nextstate(main 66 optree.t:345) v
135 # 5 <1> rv2av[t2] lKRM*/1
136 # 6 <@> sort lK/INPLACE
137 # 7 <;> nextstate(main 66 optree.t:346) v
140 # a <1> rv2av[t4] lK/1
141 # b <@> reverse[t5] K/1
142 # c <1> leavesub[1 ref] K/REFC,1
145 checkOptree ( name => '@a = sort @a; reverse @a',
146 prog => '@a = sort @a; reverse @a',
148 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
150 2 <;> nextstate(main 1 -e:1) v
154 6 <1> rv2av[t4] lKRM*/1
155 7 <@> sort lK/INPLACE
156 8 <;> nextstate(main 1 -e:1) v
160 c <@> reverse[t8] vK/1
161 d <@> leave[1 ref] vKP/REFC
164 # 2 <;> nextstate(main 1 -e:1) v
168 # 6 <1> rv2av[t2] lKRM*/1
169 # 7 <@> sort lK/INPLACE
170 # 8 <;> nextstate(main 1 -e:1) v
173 # b <1> rv2av[t4] lK/1
174 # c <@> reverse[t5] vK/1
175 # d <@> leave[1 ref] vKP/REFC
178 checkOptree ( name => 'sub {my @a; @a = sort @a}',
179 code => sub {my @a; @a = sort @a},
181 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
182 1 <;> nextstate(main -437 optree.t:254) v
183 2 <0> padav[@a:-437,-436] vM/LVINTRO
184 3 <;> nextstate(main -436 optree.t:256) v
187 6 <0> padav[@a:-437,-436] l
190 9 <0> padav[@a:-437,-436] lRM*
191 a <2> aassign[t\d+] KS/COMMON
192 b <1> leavesub[1 ref] K/REFC,1
194 # 1 <;> nextstate(main 427 optree_sort.t:172) v
195 # 2 <0> padav[@a:427,428] vM/LVINTRO
196 # 3 <;> nextstate(main 428 optree_sort.t:173) v
199 # 6 <0> padav[@a:427,428] l
202 # 9 <0> padav[@a:427,428] lRM*
203 # a <2> aassign[t2] KS/COMMON
204 # b <1> leavesub[1 ref] K/REFC,1
207 checkOptree ( name => 'my @a; @a = sort @a',
208 prog => 'my @a; @a = sort @a',
210 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
212 2 <;> nextstate(main 1 -e:1) v
213 3 <0> padav[@a:1,2] vM/LVINTRO
214 4 <;> nextstate(main 2 -e:1) v
217 7 <0> padav[@a:1,2] lRM*
218 8 <@> sort lK/INPLACE
219 9 <@> leave[1 ref] vKP/REFC
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 checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
233 code => sub {my @a; @a = sort @a; push @a, 1},
236 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
237 1 <;> nextstate(main -437 optree.t:325) v
238 2 <0> padav[@a:-437,-436] vM/LVINTRO
239 3 <;> nextstate(main -436 optree.t:325) v
242 6 <0> padav[@a:-437,-436] lRM*
243 7 <@> sort lK/INPLACE
244 8 <;> nextstate(main -436 optree.t:325) v
246 a <0> padav[@a:-437,-436] lRM
249 d <1> leavesub[1 ref] K/REFC,1
251 # 1 <;> nextstate(main 429 optree_sort.t:219) v
252 # 2 <0> padav[@a:429,430] vM/LVINTRO
253 # 3 <;> nextstate(main 430 optree_sort.t:220) v
256 # 6 <0> padav[@a:429,430] lRM*
257 # 7 <@> sort lK/INPLACE
258 # 8 <;> nextstate(main 430 optree_sort.t:220) v
260 # a <0> padav[@a:429,430] lRM
261 # b <$> const(IV 1) s
262 # c <@> push[t3] sK/2
263 # d <1> leavesub[1 ref] K/REFC,1
266 checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
267 code => sub {my @a; @a = sort @a; 1},
270 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
271 1 <;> nextstate(main -437 optree.t:325) v
272 2 <0> padav[@a:-437,-436] vM/LVINTRO
273 3 <;> nextstate(main -436 optree.t:325) v
276 6 <0> padav[@a:-437,-436] lRM*
277 7 <@> sort lK/INPLACE
278 8 <;> nextstate(main -436 optree.t:346) v
280 a <1> leavesub[1 ref] K/REFC,1
282 # 1 <;> nextstate(main 431 optree_sort.t:250) v
283 # 2 <0> padav[@a:431,432] vM/LVINTRO
284 # 3 <;> nextstate(main 432 optree_sort.t:251) v
287 # 6 <0> padav[@a:431,432] lRM*
288 # 7 <@> sort lK/INPLACE
289 # 8 <;> nextstate(main 432 optree_sort.t:251) v
290 # 9 <$> const(IV 1) s
291 # a <1> leavesub[1 ref] K/REFC,1