5 @INC = ('../lib', '../ext/B/t');
12 pass("SORT OPTIMIZATION");
14 checkOptree ( name => 'sub {sort @a}',
15 code => sub {sort @a},
17 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
18 # 1 <;> nextstate(main 424 optree_sort.t:14) v
21 # 4 <1> rv2av[t1] lK/1
23 # 6 <1> leavesub[1 ref] K/REFC,1
25 # 1 <;> nextstate(main 424 optree_sort.t:14) v
28 # 4 <1> rv2av[t1] lK/1
30 # 6 <1> leavesub[1 ref] K/REFC,1
33 checkOptree ( name => 'sort @a',
36 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
38 2 <;> nextstate(main 1 -e:1) v
43 7 <@> leave[1 ref] vKP/REFC
46 # 2 <;> nextstate(main 1 -e:1) v
49 # 5 <1> rv2av[t1] lK/1
51 # 7 <@> leave[1 ref] vKP/REFC
54 checkOptree ( name => 'sub {@a = sort @a}',
55 code => sub {@a = sort @a},
57 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
59 1 <;> nextstate(main -438 optree.t:244) v
67 9 <1> rv2av[t2] lKRM*/1
68 a <2> aassign[t\d+] KS/COMMON
69 b <1> leavesub[1 ref] K/REFC,1
71 # 1 <;> nextstate(main 65 optree.t:311) v
75 # 5 <1> rv2av[t2] lK/1
79 # 9 <1> rv2av[t1] lKRM*/1
80 # a <2> aassign[t3] KS/COMMON
81 # b <1> leavesub[1 ref] K/REFC,1
84 checkOptree ( name => '@a = sort @a',
85 prog => '@a = sort @a',
87 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
89 2 <;> nextstate(main 1 -e:1) v
93 6 <1> rv2av[t4] lKRM*/1
95 8 <@> leave[1 ref] vKP/REFC
98 # 2 <;> nextstate(main 1 -e:1) v
102 # 6 <1> rv2av[t2] lKRM*/1
103 # 7 <@> sort lK/INPLACE
104 # 8 <@> leave[1 ref] vKP/REFC
107 checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
108 code => sub {@a = sort @a; reverse @a},
110 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
112 1 <;> nextstate(main -438 optree.t:286) v
116 5 <1> rv2av[t4] lKRM*/1
117 6 <@> sort lK/INPLACE
118 7 <;> nextstate(main -438 optree.t:288) v
122 b <@> reverse[t8] K/1
123 c <1> leavesub[1 ref] K/REFC,1
125 # 1 <;> nextstate(main 66 optree.t:345) v
129 # 5 <1> rv2av[t2] lKRM*/1
130 # 6 <@> sort lK/INPLACE
131 # 7 <;> nextstate(main 66 optree.t:346) v
134 # a <1> rv2av[t4] lK/1
135 # b <@> reverse[t5] K/1
136 # c <1> leavesub[1 ref] K/REFC,1
139 checkOptree ( name => '@a = sort @a; reverse @a',
140 prog => '@a = sort @a; reverse @a',
142 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
144 2 <;> nextstate(main 1 -e:1) v
148 6 <1> rv2av[t4] lKRM*/1
149 7 <@> sort lK/INPLACE
150 8 <;> nextstate(main 1 -e:1) v
154 c <@> reverse[t8] vK/1
155 d <@> leave[1 ref] vKP/REFC
158 # 2 <;> nextstate(main 1 -e:1) v
162 # 6 <1> rv2av[t2] lKRM*/1
163 # 7 <@> sort lK/INPLACE
164 # 8 <;> nextstate(main 1 -e:1) v
167 # b <1> rv2av[t4] lK/1
168 # c <@> reverse[t5] vK/1
169 # d <@> leave[1 ref] vKP/REFC
172 checkOptree ( name => 'sub {my @a; @a = sort @a}',
173 code => sub {my @a; @a = sort @a},
175 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');
233 1 <;> nextstate(main -437 optree.t:325) v
234 2 <0> padav[@a:-437,-436] vM/LVINTRO
235 3 <;> nextstate(main -436 optree.t:325) v
238 6 <0> padav[@a:-437,-436] lRM*
239 7 <@> sort lK/INPLACE
240 8 <;> nextstate(main -436 optree.t:325) v
242 a <0> padav[@a:-437,-436] lRM
245 d <1> leavesub[1 ref] K/REFC,1
247 # 1 <;> nextstate(main 429 optree_sort.t:219) v
248 # 2 <0> padav[@a:429,430] vM/LVINTRO
249 # 3 <;> nextstate(main 430 optree_sort.t:220) v
252 # 6 <0> padav[@a:429,430] lRM*
253 # 7 <@> sort lK/INPLACE
254 # 8 <;> nextstate(main 430 optree_sort.t:220) v
256 # a <0> padav[@a:429,430] lRM
257 # b <$> const(IV 1) s
258 # c <@> push[t3] sK/2
259 # d <1> leavesub[1 ref] K/REFC,1
262 checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
263 code => sub {my @a; @a = sort @a; 1},
266 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
268 1 <;> nextstate(main -437 optree.t:325) v
269 2 <0> padav[@a:-437,-436] vM/LVINTRO
270 3 <;> nextstate(main -436 optree.t:325) v
273 6 <0> padav[@a:-437,-436] lRM*
274 7 <@> sort lK/INPLACE
275 8 <;> nextstate(main -436 optree.t:346) v
277 a <1> leavesub[1 ref] K/REFC,1
279 # 1 <;> nextstate(main 431 optree_sort.t:250) v
280 # 2 <0> padav[@a:431,432] vM/LVINTRO
281 # 3 <;> nextstate(main 432 optree_sort.t:251) v
284 # 6 <0> padav[@a:431,432] lRM*
285 # 7 <@> sort lK/INPLACE
286 # 8 <;> nextstate(main 432 optree_sort.t:251) v
287 # 9 <$> const(IV 1) s
288 # a <1> leavesub[1 ref] K/REFC,1