Remaining nit in the deparsing of reversed foreach loops
[p5sagit/p5-mst-13.2.git] / ext / B / t / optree_sort.t
CommitLineData
724aa791 1#!perl
2
3BEGIN {
4 chdir 't';
5 @INC = ('../lib', '../ext/B/t');
9cd8f857 6 require Config;
7 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
8 print "1..0 # Skip -- Perl configured without B module\n";
9 exit 0;
10 }
8dd2f9d4 11 if ($Config::Config{'extensions'} !~ /\bData\/Dumper\b/) {
2799c206 12 print
13 "1..0 # Skip: Data::Dumper was not built, needed by OptreeCheck\n";
14 exit 0;
2799c206 15 }
724aa791 16 require './test.pl';
17}
18use OptreeCheck;
2ce64696 19use Config;
724aa791 20plan tests => 11;
21
2ce64696 22SKIP: {
23skip "no perlio in this build", 11 unless $Config::Config{useperlio};
24
724aa791 25pass("SORT OPTIMIZATION");
26
27checkOptree ( name => 'sub {sort @a}',
28 code => sub {sort @a},
29 bcopts => '-exec',
30 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
31# 1 <;> nextstate(main 424 optree_sort.t:14) v
32# 2 <0> pushmark s
cc02ea56 33# 3 <#> gv[*a] s
34# 4 <1> rv2av[t2] lK/1
724aa791 35# 5 <@> sort K
36# 6 <1> leavesub[1 ref] K/REFC,1
37EOT_EOT
38# 1 <;> nextstate(main 424 optree_sort.t:14) v
39# 2 <0> pushmark s
40# 3 <$> gv(*a) s
41# 4 <1> rv2av[t1] lK/1
42# 5 <@> sort K
43# 6 <1> leavesub[1 ref] K/REFC,1
44EONT_EONT
45
46checkOptree ( name => 'sort @a',
47 prog => 'sort @a',
48 bcopts => '-exec',
49 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
501 <0> enter
512 <;> nextstate(main 1 -e:1) v
523 <0> pushmark s
534 <#> gv[*a] s
545 <1> rv2av[t2] lK/1
556 <@> sort vK
567 <@> leave[1 ref] vKP/REFC
57EOT_EOT
58# 1 <0> enter
59# 2 <;> nextstate(main 1 -e:1) v
60# 3 <0> pushmark s
61# 4 <$> gv(*a) s
62# 5 <1> rv2av[t1] lK/1
63# 6 <@> sort vK
64# 7 <@> leave[1 ref] vKP/REFC
65EONT_EONT
66
67checkOptree ( name => 'sub {@a = sort @a}',
68 code => sub {@a = sort @a},
69 bcopts => '-exec',
70 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 711 <;> nextstate(main -438 optree.t:244) v
722 <0> pushmark s
733 <0> pushmark s
744 <#> gv[*a] s
cc02ea56 755 <1> rv2av[t4] lK/1
724aa791 766 <@> sort lK
777 <0> pushmark s
788 <#> gv[*a] s
799 <1> rv2av[t2] lKRM*/1
80a <2> aassign[t\d+] KS/COMMON
81b <1> leavesub[1 ref] K/REFC,1
82EOT_EOT
83# 1 <;> nextstate(main 65 optree.t:311) v
84# 2 <0> pushmark s
85# 3 <0> pushmark s
86# 4 <$> gv(*a) s
87# 5 <1> rv2av[t2] lK/1
88# 6 <@> sort lK
89# 7 <0> pushmark s
90# 8 <$> gv(*a) s
91# 9 <1> rv2av[t1] lKRM*/1
92# a <2> aassign[t3] KS/COMMON
93# b <1> leavesub[1 ref] K/REFC,1
94EONT_EONT
95
96checkOptree ( name => '@a = sort @a',
97 prog => '@a = sort @a',
98 bcopts => '-exec',
99 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1001 <0> enter
1012 <;> nextstate(main 1 -e:1) v
1023 <0> pushmark s
1034 <0> pushmark s
1045 <#> gv[*a] s
1056 <1> rv2av[t4] lKRM*/1
1067 <@> sort lK/INPLACE
1078 <@> leave[1 ref] vKP/REFC
108EOT_EOT
109# 1 <0> enter
110# 2 <;> nextstate(main 1 -e:1) v
111# 3 <0> pushmark s
112# 4 <0> pushmark s
113# 5 <$> gv(*a) s
114# 6 <1> rv2av[t2] lKRM*/1
115# 7 <@> sort lK/INPLACE
116# 8 <@> leave[1 ref] vKP/REFC
117EONT_EONT
118
119checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
120 code => sub {@a = sort @a; reverse @a},
121 bcopts => '-exec',
122 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 1231 <;> nextstate(main -438 optree.t:286) v
1242 <0> pushmark s
1253 <0> pushmark s
1264 <#> gv[*a] s
1275 <1> rv2av[t4] lKRM*/1
1286 <@> sort lK/INPLACE
1297 <;> nextstate(main -438 optree.t:288) v
1308 <0> pushmark s
1319 <#> gv[*a] s
132a <1> rv2av[t7] lK/1
133b <@> reverse[t8] K/1
134c <1> leavesub[1 ref] K/REFC,1
135EOT_EOT
136# 1 <;> nextstate(main 66 optree.t:345) v
137# 2 <0> pushmark s
138# 3 <0> pushmark s
139# 4 <$> gv(*a) s
140# 5 <1> rv2av[t2] lKRM*/1
141# 6 <@> sort lK/INPLACE
142# 7 <;> nextstate(main 66 optree.t:346) v
143# 8 <0> pushmark s
144# 9 <$> gv(*a) s
145# a <1> rv2av[t4] lK/1
146# b <@> reverse[t5] K/1
147# c <1> leavesub[1 ref] K/REFC,1
148EONT_EONT
149
150checkOptree ( name => '@a = sort @a; reverse @a',
151 prog => '@a = sort @a; reverse @a',
152 bcopts => '-exec',
153 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1541 <0> enter
1552 <;> nextstate(main 1 -e:1) v
1563 <0> pushmark s
1574 <0> pushmark s
1585 <#> gv[*a] s
1596 <1> rv2av[t4] lKRM*/1
1607 <@> sort lK/INPLACE
1618 <;> nextstate(main 1 -e:1) v
1629 <0> pushmark s
163a <#> gv[*a] s
164b <1> rv2av[t7] lK/1
165c <@> reverse[t8] vK/1
166d <@> leave[1 ref] vKP/REFC
167EOT_EOT
168# 1 <0> enter
169# 2 <;> nextstate(main 1 -e:1) v
170# 3 <0> pushmark s
171# 4 <0> pushmark s
172# 5 <$> gv(*a) s
173# 6 <1> rv2av[t2] lKRM*/1
174# 7 <@> sort lK/INPLACE
175# 8 <;> nextstate(main 1 -e:1) v
176# 9 <0> pushmark s
177# a <$> gv(*a) s
178# b <1> rv2av[t4] lK/1
179# c <@> reverse[t5] vK/1
180# d <@> leave[1 ref] vKP/REFC
181EONT_EONT
182
183checkOptree ( name => 'sub {my @a; @a = sort @a}',
184 code => sub {my @a; @a = sort @a},
185 bcopts => '-exec',
186 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 1871 <;> nextstate(main -437 optree.t:254) v
1882 <0> padav[@a:-437,-436] vM/LVINTRO
1893 <;> nextstate(main -436 optree.t:256) v
1904 <0> pushmark s
1915 <0> pushmark s
1926 <0> padav[@a:-437,-436] l
1937 <@> sort lK
1948 <0> pushmark s
1959 <0> padav[@a:-437,-436] lRM*
196a <2> aassign[t\d+] KS/COMMON
197b <1> leavesub[1 ref] K/REFC,1
198EOT_EOT
199# 1 <;> nextstate(main 427 optree_sort.t:172) v
200# 2 <0> padav[@a:427,428] vM/LVINTRO
201# 3 <;> nextstate(main 428 optree_sort.t:173) v
202# 4 <0> pushmark s
203# 5 <0> pushmark s
204# 6 <0> padav[@a:427,428] l
205# 7 <@> sort lK
206# 8 <0> pushmark s
207# 9 <0> padav[@a:427,428] lRM*
208# a <2> aassign[t2] KS/COMMON
209# b <1> leavesub[1 ref] K/REFC,1
210EONT_EONT
211
212checkOptree ( name => 'my @a; @a = sort @a',
213 prog => 'my @a; @a = sort @a',
214 bcopts => '-exec',
215 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2161 <0> enter
2172 <;> nextstate(main 1 -e:1) v
2183 <0> padav[@a:1,2] vM/LVINTRO
2194 <;> nextstate(main 2 -e:1) v
2205 <0> pushmark s
2216 <0> pushmark s
2227 <0> padav[@a:1,2] lRM*
2238 <@> sort lK/INPLACE
2249 <@> leave[1 ref] vKP/REFC
225EOT_EOT
226# 1 <0> enter
227# 2 <;> nextstate(main 1 -e:1) v
228# 3 <0> padav[@a:1,2] vM/LVINTRO
229# 4 <;> nextstate(main 2 -e:1) v
230# 5 <0> pushmark s
231# 6 <0> pushmark s
232# 7 <0> padav[@a:1,2] lRM*
233# 8 <@> sort lK/INPLACE
234# 9 <@> leave[1 ref] vKP/REFC
235EONT_EONT
236
237checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
238 code => sub {my @a; @a = sort @a; push @a, 1},
239 bcopts => '-exec',
240 debug => 0,
241 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2421 <;> nextstate(main -437 optree.t:325) v
2432 <0> padav[@a:-437,-436] vM/LVINTRO
2443 <;> nextstate(main -436 optree.t:325) v
2454 <0> pushmark s
2465 <0> pushmark s
2476 <0> padav[@a:-437,-436] lRM*
2487 <@> sort lK/INPLACE
2498 <;> nextstate(main -436 optree.t:325) v
2509 <0> pushmark s
251a <0> padav[@a:-437,-436] lRM
252b <$> const[IV 1] s
253c <@> push[t3] sK/2
254d <1> leavesub[1 ref] K/REFC,1
255EOT_EOT
256# 1 <;> nextstate(main 429 optree_sort.t:219) v
257# 2 <0> padav[@a:429,430] vM/LVINTRO
258# 3 <;> nextstate(main 430 optree_sort.t:220) v
259# 4 <0> pushmark s
260# 5 <0> pushmark s
261# 6 <0> padav[@a:429,430] lRM*
262# 7 <@> sort lK/INPLACE
263# 8 <;> nextstate(main 430 optree_sort.t:220) v
264# 9 <0> pushmark s
265# a <0> padav[@a:429,430] lRM
266# b <$> const(IV 1) s
267# c <@> push[t3] sK/2
268# d <1> leavesub[1 ref] K/REFC,1
269EONT_EONT
270
271checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
272 code => sub {my @a; @a = sort @a; 1},
273 bcopts => '-exec',
274 debug => 0,
275 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 2761 <;> nextstate(main -437 optree.t:325) v
2772 <0> padav[@a:-437,-436] vM/LVINTRO
2783 <;> nextstate(main -436 optree.t:325) v
2794 <0> pushmark s
2805 <0> pushmark s
2816 <0> padav[@a:-437,-436] lRM*
2827 <@> sort lK/INPLACE
2838 <;> nextstate(main -436 optree.t:346) v
2849 <$> const[IV 1] s
285a <1> leavesub[1 ref] K/REFC,1
286EOT_EOT
287# 1 <;> nextstate(main 431 optree_sort.t:250) v
288# 2 <0> padav[@a:431,432] vM/LVINTRO
289# 3 <;> nextstate(main 432 optree_sort.t:251) v
290# 4 <0> pushmark s
291# 5 <0> pushmark s
292# 6 <0> padav[@a:431,432] lRM*
293# 7 <@> sort lK/INPLACE
294# 8 <;> nextstate(main 432 optree_sort.t:251) v
295# 9 <$> const(IV 1) s
296# a <1> leavesub[1 ref] K/REFC,1
297EONT_EONT
298
2ce64696 299} #skip
724aa791 300
301__END__
302