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 strip_open_hints => 1,
31 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
32 # 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
35 # 4 <1> rv2av[t2] lK/1
37 # 6 <1> leavesub[1 ref] K/REFC,1
39 # 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
42 # 4 <1> rv2av[t1] lK/1
44 # 6 <1> leavesub[1 ref] K/REFC,1
47 checkOptree ( name => 'sort @a',
49 errs => [ 'Useless use of sort in void context at -e line 1.',
50 'Name "main::a" used only once: possible typo at -e line 1.',
53 strip_open_hints => 1,
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 strip_open_hints => 1,
76 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
77 1 <;> nextstate(main -438 optree.t:244) v:>,<,%
85 9 <1> rv2av[t2] lKRM*/1
86 a <2> aassign[t5] KS/COMMON
87 b <1> leavesub[1 ref] K/REFC,1
89 # 1 <;> nextstate(main 65 optree.t:311) v:>,<,%
93 # 5 <1> rv2av[t2] lK/1
97 # 9 <1> rv2av[t1] lKRM*/1
98 # a <2> aassign[t3] KS/COMMON
99 # b <1> leavesub[1 ref] K/REFC,1
102 checkOptree ( name => '@a = sort @a',
103 prog => '@a = sort @a',
105 strip_open_hints => 1,
106 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
108 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
112 6 <1> rv2av[t4] lKRM*/1
113 7 <@> sort lK/INPLACE
114 8 <@> leave[1 ref] vKP/REFC
117 # 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
121 # 6 <1> rv2av[t2] lKRM*/1
122 # 7 <@> sort lK/INPLACE
123 # 8 <@> leave[1 ref] vKP/REFC
126 checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
127 code => sub {@a = sort @a; reverse @a},
129 strip_open_hints => 1,
130 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
131 1 <;> nextstate(main -438 optree.t:286) v:>,<,%
135 5 <1> rv2av[t4] lKRM*/1
136 6 <@> sort lK/INPLACE
137 7 <;> nextstate(main -438 optree.t:288) v:>,<,%
141 b <@> reverse[t8] K/1
142 c <1> leavesub[1 ref] K/REFC,1
144 # 1 <;> nextstate(main 66 optree.t:345) v:>,<,%
148 # 5 <1> rv2av[t2] lKRM*/1
149 # 6 <@> sort lK/INPLACE
150 # 7 <;> nextstate(main 66 optree.t:346) v:>,<,%
153 # a <1> rv2av[t4] lK/1
154 # b <@> reverse[t5] K/1
155 # c <1> leavesub[1 ref] K/REFC,1
158 checkOptree ( name => '@a = sort @a; reverse @a',
159 prog => '@a = sort @a; reverse @a',
160 errs => ['Useless use of reverse in void context at -e line 1.'],
162 strip_open_hints => 1,
163 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
165 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
169 6 <1> rv2av[t4] lKRM*/1
170 7 <@> sort lK/INPLACE
171 8 <;> nextstate(main 1 -e:1) v:>,<,%,{
175 c <@> reverse[t8] vK/1
176 d <@> leave[1 ref] vKP/REFC
179 # 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
183 # 6 <1> rv2av[t2] lKRM*/1
184 # 7 <@> sort lK/INPLACE
185 # 8 <;> nextstate(main 1 -e:1) v:>,<,%,{
188 # b <1> rv2av[t4] lK/1
189 # c <@> reverse[t5] vK/1
190 # d <@> leave[1 ref] vKP/REFC
193 checkOptree ( name => 'sub {my @a; @a = sort @a}',
194 code => sub {my @a; @a = sort @a},
196 strip_open_hints => 1,
197 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
198 1 <;> nextstate(main -437 optree.t:254) v:>,<,%
199 2 <0> padav[@a:-437,-436] vM/LVINTRO
200 3 <;> nextstate(main -436 optree.t:256) v:>,<,%
203 6 <0> padav[@a:-437,-436] l
206 9 <0> padav[@a:-437,-436] lRM*
207 a <2> aassign[t2] KS/COMMON
208 b <1> leavesub[1 ref] K/REFC,1
210 # 1 <;> nextstate(main 427 optree_sort.t:172) v:>,<,%
211 # 2 <0> padav[@a:427,428] vM/LVINTRO
212 # 3 <;> nextstate(main 428 optree_sort.t:173) v:>,<,%
215 # 6 <0> padav[@a:427,428] l
218 # 9 <0> padav[@a:427,428] lRM*
219 # a <2> aassign[t2] KS/COMMON
220 # b <1> leavesub[1 ref] K/REFC,1
223 checkOptree ( name => 'my @a; @a = sort @a',
224 prog => 'my @a; @a = sort @a',
226 strip_open_hints => 1,
227 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
229 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
230 3 <0> padav[@a:1,2] vM/LVINTRO
231 4 <;> nextstate(main 2 -e:1) v:>,<,%,{
234 7 <0> padav[@a:1,2] lRM*
235 8 <@> sort lK/INPLACE
236 9 <@> leave[1 ref] vKP/REFC
239 # 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
240 # 3 <0> padav[@a:1,2] vM/LVINTRO
241 # 4 <;> nextstate(main 2 -e:1) v:>,<,%,{
244 # 7 <0> padav[@a:1,2] lRM*
245 # 8 <@> sort lK/INPLACE
246 # 9 <@> leave[1 ref] vKP/REFC
249 checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
250 code => sub {my @a; @a = sort @a; push @a, 1},
253 strip_open_hints => 1,
254 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
255 1 <;> nextstate(main -437 optree.t:325) v:>,<,%
256 2 <0> padav[@a:-437,-436] vM/LVINTRO
257 3 <;> nextstate(main -436 optree.t:325) v:>,<,%
260 6 <0> padav[@a:-437,-436] lRM*
261 7 <@> sort lK/INPLACE
262 8 <;> nextstate(main -436 optree.t:325) v:>,<,%,{
264 a <0> padav[@a:-437,-436] lRM
267 d <1> leavesub[1 ref] K/REFC,1
269 # 1 <;> nextstate(main 429 optree_sort.t:219) v:>,<,%
270 # 2 <0> padav[@a:429,430] vM/LVINTRO
271 # 3 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%
274 # 6 <0> padav[@a:429,430] lRM*
275 # 7 <@> sort lK/INPLACE
276 # 8 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%,{
278 # a <0> padav[@a:429,430] lRM
279 # b <$> const(IV 1) s
280 # c <@> push[t3] sK/2
281 # d <1> leavesub[1 ref] K/REFC,1
284 checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
285 code => sub {my @a; @a = sort @a; 1},
288 strip_open_hints => 1,
289 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
290 1 <;> nextstate(main -437 optree.t:325) v:>,<,%
291 2 <0> padav[@a:-437,-436] vM/LVINTRO
292 3 <;> nextstate(main -436 optree.t:325) v:>,<,%
295 6 <0> padav[@a:-437,-436] lRM*
296 7 <@> sort lK/INPLACE
297 8 <;> nextstate(main -436 optree.t:346) v:>,<,%,{
299 a <1> leavesub[1 ref] K/REFC,1
301 # 1 <;> nextstate(main 431 optree_sort.t:250) v:>,<,%
302 # 2 <0> padav[@a:431,432] vM/LVINTRO
303 # 3 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%
306 # 6 <0> padav[@a:431,432] lRM*
307 # 7 <@> sort lK/INPLACE
308 # 8 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%,{
309 # 9 <$> const(IV 1) s
310 # a <1> leavesub[1 ref] K/REFC,1