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 # require 'test.pl'; # now done by OptreeCheck
23 skip "no perlio in this build", 11 unless $Config::Config{useperlio};
25 pass("SORT OPTIMIZATION");
27 checkOptree ( name => 'sub {sort @a}',
28 code => sub {sort @a},
30 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
31 # 1 <;> nextstate(main 424 optree_sort.t:14) v
34 # 4 <1> rv2av[t2] lK/1
36 # 6 <1> leavesub[1 ref] K/REFC,1
38 # 1 <;> nextstate(main 424 optree_sort.t:14) v
41 # 4 <1> rv2av[t1] lK/1
43 # 6 <1> leavesub[1 ref] K/REFC,1
46 checkOptree ( name => 'sort @a',
48 errs => [ 'Useless use of sort in void context at -e line 1.',
49 'Name "main::a" used only once: possible typo at -e line 1.',
52 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
54 2 <;> nextstate(main 1 -e:1) v
59 7 <@> leave[1 ref] vKP/REFC
62 # 2 <;> nextstate(main 1 -e:1) v
65 # 5 <1> rv2av[t1] lK/1
67 # 7 <@> leave[1 ref] vKP/REFC
70 checkOptree ( name => 'sub {@a = sort @a}',
71 code => sub {@a = sort @a},
73 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
74 1 <;> nextstate(main -438 optree.t:244) v
82 9 <1> rv2av[t2] lKRM*/1
83 a <2> aassign[t5] KS/COMMON
84 b <1> leavesub[1 ref] K/REFC,1
86 # 1 <;> nextstate(main 65 optree.t:311) v
90 # 5 <1> rv2av[t2] lK/1
94 # 9 <1> rv2av[t1] lKRM*/1
95 # a <2> aassign[t3] KS/COMMON
96 # b <1> leavesub[1 ref] K/REFC,1
99 checkOptree ( name => '@a = sort @a',
100 prog => '@a = sort @a',
102 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
104 2 <;> nextstate(main 1 -e:1) v
108 6 <1> rv2av[t4] lKRM*/1
109 7 <@> sort lK/INPLACE
110 8 <@> leave[1 ref] vKP/REFC
113 # 2 <;> nextstate(main 1 -e:1) v
117 # 6 <1> rv2av[t2] lKRM*/1
118 # 7 <@> sort lK/INPLACE
119 # 8 <@> leave[1 ref] vKP/REFC
122 checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
123 code => sub {@a = sort @a; reverse @a},
125 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
126 1 <;> nextstate(main -438 optree.t:286) v
130 5 <1> rv2av[t4] lKRM*/1
131 6 <@> sort lK/INPLACE
132 7 <;> nextstate(main -438 optree.t:288) v
136 b <@> reverse[t8] K/1
137 c <1> leavesub[1 ref] K/REFC,1
139 # 1 <;> nextstate(main 66 optree.t:345) v
143 # 5 <1> rv2av[t2] lKRM*/1
144 # 6 <@> sort lK/INPLACE
145 # 7 <;> nextstate(main 66 optree.t:346) v
148 # a <1> rv2av[t4] lK/1
149 # b <@> reverse[t5] K/1
150 # c <1> leavesub[1 ref] K/REFC,1
153 checkOptree ( name => '@a = sort @a; reverse @a',
154 prog => '@a = sort @a; reverse @a',
155 errs => ['Useless use of reverse in void context at -e line 1.'],
157 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
159 2 <;> nextstate(main 1 -e:1) v
163 6 <1> rv2av[t4] lKRM*/1
164 7 <@> sort lK/INPLACE
165 8 <;> nextstate(main 1 -e:1) v
169 c <@> reverse[t8] vK/1
170 d <@> leave[1 ref] vKP/REFC
173 # 2 <;> nextstate(main 1 -e:1) v
177 # 6 <1> rv2av[t2] lKRM*/1
178 # 7 <@> sort lK/INPLACE
179 # 8 <;> nextstate(main 1 -e:1) v
182 # b <1> rv2av[t4] lK/1
183 # c <@> reverse[t5] vK/1
184 # d <@> leave[1 ref] vKP/REFC
187 checkOptree ( name => 'sub {my @a; @a = sort @a}',
188 code => sub {my @a; @a = sort @a},
190 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
191 1 <;> nextstate(main -437 optree.t:254) v
192 2 <0> padav[@a:-437,-436] vM/LVINTRO
193 3 <;> nextstate(main -436 optree.t:256) v
196 6 <0> padav[@a:-437,-436] l
199 9 <0> padav[@a:-437,-436] lRM*
200 a <2> aassign[t2] KS/COMMON
201 b <1> leavesub[1 ref] K/REFC,1
203 # 1 <;> nextstate(main 427 optree_sort.t:172) v
204 # 2 <0> padav[@a:427,428] vM/LVINTRO
205 # 3 <;> nextstate(main 428 optree_sort.t:173) v
208 # 6 <0> padav[@a:427,428] l
211 # 9 <0> padav[@a:427,428] lRM*
212 # a <2> aassign[t2] KS/COMMON
213 # b <1> leavesub[1 ref] K/REFC,1
216 checkOptree ( name => 'my @a; @a = sort @a',
217 prog => 'my @a; @a = sort @a',
219 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
221 2 <;> nextstate(main 1 -e:1) v
222 3 <0> padav[@a:1,2] vM/LVINTRO
223 4 <;> nextstate(main 2 -e:1) v
226 7 <0> padav[@a:1,2] lRM*
227 8 <@> sort lK/INPLACE
228 9 <@> leave[1 ref] vKP/REFC
231 # 2 <;> nextstate(main 1 -e:1) v
232 # 3 <0> padav[@a:1,2] vM/LVINTRO
233 # 4 <;> nextstate(main 2 -e:1) v
236 # 7 <0> padav[@a:1,2] lRM*
237 # 8 <@> sort lK/INPLACE
238 # 9 <@> leave[1 ref] vKP/REFC
241 checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
242 code => sub {my @a; @a = sort @a; push @a, 1},
245 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
246 1 <;> nextstate(main -437 optree.t:325) v
247 2 <0> padav[@a:-437,-436] vM/LVINTRO
248 3 <;> nextstate(main -436 optree.t:325) v
251 6 <0> padav[@a:-437,-436] lRM*
252 7 <@> sort lK/INPLACE
253 8 <;> nextstate(main -436 optree.t:325) v
255 a <0> padav[@a:-437,-436] lRM
258 d <1> leavesub[1 ref] K/REFC,1
260 # 1 <;> nextstate(main 429 optree_sort.t:219) v
261 # 2 <0> padav[@a:429,430] vM/LVINTRO
262 # 3 <;> nextstate(main 430 optree_sort.t:220) v
265 # 6 <0> padav[@a:429,430] lRM*
266 # 7 <@> sort lK/INPLACE
267 # 8 <;> nextstate(main 430 optree_sort.t:220) v
269 # a <0> padav[@a:429,430] lRM
270 # b <$> const(IV 1) s
271 # c <@> push[t3] sK/2
272 # d <1> leavesub[1 ref] K/REFC,1
275 checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
276 code => sub {my @a; @a = sort @a; 1},
279 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
280 1 <;> nextstate(main -437 optree.t:325) v
281 2 <0> padav[@a:-437,-436] vM/LVINTRO
282 3 <;> nextstate(main -436 optree.t:325) v
285 6 <0> padav[@a:-437,-436] lRM*
286 7 <@> sort lK/INPLACE
287 8 <;> nextstate(main -436 optree.t:346) v
289 a <1> leavesub[1 ref] K/REFC,1
291 # 1 <;> nextstate(main 431 optree_sort.t:250) v
292 # 2 <0> padav[@a:431,432] vM/LVINTRO
293 # 3 <;> nextstate(main 432 optree_sort.t:251) v
296 # 6 <0> padav[@a:431,432] lRM*
297 # 7 <@> sort lK/INPLACE
298 # 8 <;> nextstate(main 432 optree_sort.t:251) v
299 # 9 <$> const(IV 1) s
300 # a <1> leavesub[1 ref] K/REFC,1