5 @INC = ('../lib', '../ext/B/t');
13 skip "no perlio in this build", 11 unless $Config::Config{useperlio};
15 pass("SORT OPTIMIZATION");
17 checkOptree ( name => 'sub {sort @a}',
18 code => sub {sort @a},
20 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
21 # 1 <;> nextstate(main 424 optree_sort.t:14) v
24 # 4 <1> rv2av[t2] lK/1
26 # 6 <1> leavesub[1 ref] K/REFC,1
28 # 1 <;> nextstate(main 424 optree_sort.t:14) v
31 # 4 <1> rv2av[t1] lK/1
33 # 6 <1> leavesub[1 ref] K/REFC,1
36 checkOptree ( name => 'sort @a',
39 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
41 2 <;> nextstate(main 1 -e:1) v
46 7 <@> leave[1 ref] vKP/REFC
49 # 2 <;> nextstate(main 1 -e:1) v
52 # 5 <1> rv2av[t1] lK/1
54 # 7 <@> leave[1 ref] vKP/REFC
57 checkOptree ( name => 'sub {@a = sort @a}',
58 code => sub {@a = sort @a},
60 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
61 1 <;> nextstate(main -438 optree.t:244) v
69 9 <1> rv2av[t2] lKRM*/1
70 a <2> aassign[t\d+] KS/COMMON
71 b <1> leavesub[1 ref] K/REFC,1
73 # 1 <;> nextstate(main 65 optree.t:311) v
77 # 5 <1> rv2av[t2] lK/1
81 # 9 <1> rv2av[t1] lKRM*/1
82 # a <2> aassign[t3] KS/COMMON
83 # b <1> leavesub[1 ref] K/REFC,1
86 checkOptree ( name => '@a = sort @a',
87 prog => '@a = sort @a',
89 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
91 2 <;> nextstate(main 1 -e:1) v
95 6 <1> rv2av[t4] lKRM*/1
97 8 <@> leave[1 ref] vKP/REFC
100 # 2 <;> nextstate(main 1 -e:1) v
104 # 6 <1> rv2av[t2] lKRM*/1
105 # 7 <@> sort lK/INPLACE
106 # 8 <@> leave[1 ref] vKP/REFC
109 checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
110 code => sub {@a = sort @a; reverse @a},
112 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
113 1 <;> nextstate(main -438 optree.t:286) v
117 5 <1> rv2av[t4] lKRM*/1
118 6 <@> sort lK/INPLACE
119 7 <;> nextstate(main -438 optree.t:288) v
123 b <@> reverse[t8] K/1
124 c <1> leavesub[1 ref] K/REFC,1
126 # 1 <;> nextstate(main 66 optree.t:345) v
130 # 5 <1> rv2av[t2] lKRM*/1
131 # 6 <@> sort lK/INPLACE
132 # 7 <;> nextstate(main 66 optree.t:346) v
135 # a <1> rv2av[t4] lK/1
136 # b <@> reverse[t5] K/1
137 # c <1> leavesub[1 ref] K/REFC,1
140 checkOptree ( name => '@a = sort @a; reverse @a',
141 prog => '@a = sort @a; reverse @a',
143 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
145 2 <;> nextstate(main 1 -e:1) v
149 6 <1> rv2av[t4] lKRM*/1
150 7 <@> sort lK/INPLACE
151 8 <;> nextstate(main 1 -e:1) v
155 c <@> reverse[t8] vK/1
156 d <@> leave[1 ref] vKP/REFC
159 # 2 <;> nextstate(main 1 -e:1) v
163 # 6 <1> rv2av[t2] lKRM*/1
164 # 7 <@> sort lK/INPLACE
165 # 8 <;> nextstate(main 1 -e:1) v
168 # b <1> rv2av[t4] lK/1
169 # c <@> reverse[t5] vK/1
170 # d <@> leave[1 ref] vKP/REFC
173 checkOptree ( name => 'sub {my @a; @a = sort @a}',
174 code => sub {my @a; @a = sort @a},
176 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
177 1 <;> nextstate(main -437 optree.t:254) v
178 2 <0> padav[@a:-437,-436] vM/LVINTRO
179 3 <;> nextstate(main -436 optree.t:256) v
182 6 <0> padav[@a:-437,-436] l
185 9 <0> padav[@a:-437,-436] lRM*
186 a <2> aassign[t\d+] KS/COMMON
187 b <1> leavesub[1 ref] K/REFC,1
189 # 1 <;> nextstate(main 427 optree_sort.t:172) v
190 # 2 <0> padav[@a:427,428] vM/LVINTRO
191 # 3 <;> nextstate(main 428 optree_sort.t:173) v
194 # 6 <0> padav[@a:427,428] l
197 # 9 <0> padav[@a:427,428] lRM*
198 # a <2> aassign[t2] KS/COMMON
199 # b <1> leavesub[1 ref] K/REFC,1
202 checkOptree ( name => 'my @a; @a = sort @a',
203 prog => 'my @a; @a = sort @a',
205 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
207 2 <;> nextstate(main 1 -e:1) v
208 3 <0> padav[@a:1,2] vM/LVINTRO
209 4 <;> nextstate(main 2 -e:1) v
212 7 <0> padav[@a:1,2] lRM*
213 8 <@> sort lK/INPLACE
214 9 <@> leave[1 ref] vKP/REFC
217 # 2 <;> nextstate(main 1 -e:1) v
218 # 3 <0> padav[@a:1,2] vM/LVINTRO
219 # 4 <;> nextstate(main 2 -e:1) v
222 # 7 <0> padav[@a:1,2] lRM*
223 # 8 <@> sort lK/INPLACE
224 # 9 <@> leave[1 ref] vKP/REFC
227 checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
228 code => sub {my @a; @a = sort @a; push @a, 1},
231 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
232 1 <;> nextstate(main -437 optree.t:325) v
233 2 <0> padav[@a:-437,-436] vM/LVINTRO
234 3 <;> nextstate(main -436 optree.t:325) v
237 6 <0> padav[@a:-437,-436] lRM*
238 7 <@> sort lK/INPLACE
239 8 <;> nextstate(main -436 optree.t:325) v
241 a <0> padav[@a:-437,-436] lRM
244 d <1> leavesub[1 ref] K/REFC,1
246 # 1 <;> nextstate(main 429 optree_sort.t:219) v
247 # 2 <0> padav[@a:429,430] vM/LVINTRO
248 # 3 <;> nextstate(main 430 optree_sort.t:220) v
251 # 6 <0> padav[@a:429,430] lRM*
252 # 7 <@> sort lK/INPLACE
253 # 8 <;> nextstate(main 430 optree_sort.t:220) v
255 # a <0> padav[@a:429,430] lRM
256 # b <$> const(IV 1) s
257 # c <@> push[t3] sK/2
258 # d <1> leavesub[1 ref] K/REFC,1
261 checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
262 code => sub {my @a; @a = sort @a; 1},
265 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
266 1 <;> nextstate(main -437 optree.t:325) v
267 2 <0> padav[@a:-437,-436] vM/LVINTRO
268 3 <;> nextstate(main -436 optree.t:325) v
271 6 <0> padav[@a:-437,-436] lRM*
272 7 <@> sort lK/INPLACE
273 8 <;> nextstate(main -436 optree.t:346) v
275 a <1> leavesub[1 ref] K/REFC,1
277 # 1 <;> nextstate(main 431 optree_sort.t:250) v
278 # 2 <0> padav[@a:431,432] vM/LVINTRO
279 # 3 <;> nextstate(main 432 optree_sort.t:251) v
282 # 6 <0> padav[@a:431,432] lRM*
283 # 7 <@> sort lK/INPLACE
284 # 8 <;> nextstate(main 432 optree_sort.t:251) v
285 # 9 <$> const(IV 1) s
286 # a <1> leavesub[1 ref] K/REFC,1