This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move all the xxxpvs() macros to handy.h.
[perl5.git] / ext / B / t / optree_sort.t
CommitLineData
724aa791
JC
1#!perl
2
3BEGIN {
5638aaac
SM
4 if ($ENV{PERL_CORE}){
5 chdir('t') if -d 't';
6 @INC = ('.', '../lib', '../ext/B/t');
7 } else {
8 unshift @INC, 't';
9 push @INC, "../../t";
10 }
9cd8f857
NC
11 require Config;
12 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
13 print "1..0 # Skip -- Perl configured without B module\n";
14 exit 0;
15 }
19e169bf 16 # require 'test.pl'; # now done by OptreeCheck
724aa791
JC
17}
18use OptreeCheck;
2ce64696 19use Config;
724aa791
JC
20plan tests => 11;
21
2ce64696
JC
22SKIP: {
23skip "no perlio in this build", 11 unless $Config::Config{useperlio};
24
724aa791
JC
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
JC
33# 3 <#> gv[*a] s
34# 4 <1> rv2av[t2] lK/1
724aa791
JC
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
19e169bf
JC
46checkOptree ( name => 'sort @a',
47 prog => '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.',
50 ],
51 bcopts => '-exec',
52 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
531 <0> enter
542 <;> nextstate(main 1 -e:1) v
553 <0> pushmark s
564 <#> gv[*a] s
575 <1> rv2av[t2] lK/1
586 <@> sort vK
597 <@> leave[1 ref] vKP/REFC
60EOT_EOT
61# 1 <0> enter
62# 2 <;> nextstate(main 1 -e:1) v
63# 3 <0> pushmark s
64# 4 <$> gv(*a) s
65# 5 <1> rv2av[t1] lK/1
66# 6 <@> sort vK
67# 7 <@> leave[1 ref] vKP/REFC
68EONT_EONT
69
70checkOptree ( name => 'sub {@a = sort @a}',
71 code => sub {@a = sort @a},
72 bcopts => '-exec',
73 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
741 <;> nextstate(main -438 optree.t:244) v
752 <0> pushmark s
763 <0> pushmark s
774 <#> gv[*a] s
cc02ea56 785 <1> rv2av[t4] lK/1
724aa791
JC
796 <@> sort lK
807 <0> pushmark s
818 <#> gv[*a] s
829 <1> rv2av[t2] lKRM*/1
19e169bf 83a <2> aassign[t5] KS/COMMON
724aa791
JC
84b <1> leavesub[1 ref] K/REFC,1
85EOT_EOT
86# 1 <;> nextstate(main 65 optree.t:311) v
87# 2 <0> pushmark s
88# 3 <0> pushmark s
89# 4 <$> gv(*a) s
90# 5 <1> rv2av[t2] lK/1
91# 6 <@> sort lK
92# 7 <0> pushmark s
93# 8 <$> gv(*a) s
94# 9 <1> rv2av[t1] lKRM*/1
95# a <2> aassign[t3] KS/COMMON
96# b <1> leavesub[1 ref] K/REFC,1
97EONT_EONT
98
99checkOptree ( name => '@a = sort @a',
100 prog => '@a = sort @a',
101 bcopts => '-exec',
102 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1031 <0> enter
1042 <;> nextstate(main 1 -e:1) v
1053 <0> pushmark s
1064 <0> pushmark s
1075 <#> gv[*a] s
1086 <1> rv2av[t4] lKRM*/1
1097 <@> sort lK/INPLACE
1108 <@> leave[1 ref] vKP/REFC
111EOT_EOT
112# 1 <0> enter
113# 2 <;> nextstate(main 1 -e:1) v
114# 3 <0> pushmark s
115# 4 <0> pushmark s
116# 5 <$> gv(*a) s
117# 6 <1> rv2av[t2] lKRM*/1
118# 7 <@> sort lK/INPLACE
119# 8 <@> leave[1 ref] vKP/REFC
120EONT_EONT
121
122checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
123 code => sub {@a = sort @a; reverse @a},
124 bcopts => '-exec',
125 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
1261 <;> nextstate(main -438 optree.t:286) v
1272 <0> pushmark s
1283 <0> pushmark s
1294 <#> gv[*a] s
1305 <1> rv2av[t4] lKRM*/1
1316 <@> sort lK/INPLACE
1327 <;> nextstate(main -438 optree.t:288) v
1338 <0> pushmark s
1349 <#> gv[*a] s
135a <1> rv2av[t7] lK/1
136b <@> reverse[t8] K/1
137c <1> leavesub[1 ref] K/REFC,1
138EOT_EOT
139# 1 <;> nextstate(main 66 optree.t:345) v
140# 2 <0> pushmark s
141# 3 <0> pushmark s
142# 4 <$> gv(*a) s
143# 5 <1> rv2av[t2] lKRM*/1
144# 6 <@> sort lK/INPLACE
145# 7 <;> nextstate(main 66 optree.t:346) v
146# 8 <0> pushmark s
147# 9 <$> gv(*a) s
148# a <1> rv2av[t4] lK/1
149# b <@> reverse[t5] K/1
150# c <1> leavesub[1 ref] K/REFC,1
151EONT_EONT
152
153checkOptree ( name => '@a = sort @a; reverse @a',
154 prog => '@a = sort @a; reverse @a',
19e169bf 155 errs => ['Useless use of reverse in void context at -e line 1.'],
724aa791
JC
156 bcopts => '-exec',
157 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1581 <0> enter
1592 <;> nextstate(main 1 -e:1) v
1603 <0> pushmark s
1614 <0> pushmark s
1625 <#> gv[*a] s
1636 <1> rv2av[t4] lKRM*/1
1647 <@> sort lK/INPLACE
1658 <;> nextstate(main 1 -e:1) v
1669 <0> pushmark s
167a <#> gv[*a] s
168b <1> rv2av[t7] lK/1
169c <@> reverse[t8] vK/1
170d <@> leave[1 ref] vKP/REFC
171EOT_EOT
172# 1 <0> enter
173# 2 <;> nextstate(main 1 -e:1) v
174# 3 <0> pushmark s
175# 4 <0> pushmark s
176# 5 <$> gv(*a) s
177# 6 <1> rv2av[t2] lKRM*/1
178# 7 <@> sort lK/INPLACE
179# 8 <;> nextstate(main 1 -e:1) v
180# 9 <0> pushmark s
181# a <$> gv(*a) s
182# b <1> rv2av[t4] lK/1
183# c <@> reverse[t5] vK/1
184# d <@> leave[1 ref] vKP/REFC
185EONT_EONT
186
187checkOptree ( name => 'sub {my @a; @a = sort @a}',
188 code => sub {my @a; @a = sort @a},
189 bcopts => '-exec',
190 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
1911 <;> nextstate(main -437 optree.t:254) v
1922 <0> padav[@a:-437,-436] vM/LVINTRO
1933 <;> nextstate(main -436 optree.t:256) v
1944 <0> pushmark s
1955 <0> pushmark s
1966 <0> padav[@a:-437,-436] l
1977 <@> sort lK
1988 <0> pushmark s
1999 <0> padav[@a:-437,-436] lRM*
19e169bf 200a <2> aassign[t2] KS/COMMON
724aa791
JC
201b <1> leavesub[1 ref] K/REFC,1
202EOT_EOT
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
206# 4 <0> pushmark s
207# 5 <0> pushmark s
208# 6 <0> padav[@a:427,428] l
209# 7 <@> sort lK
210# 8 <0> pushmark s
211# 9 <0> padav[@a:427,428] lRM*
212# a <2> aassign[t2] KS/COMMON
213# b <1> leavesub[1 ref] K/REFC,1
214EONT_EONT
215
216checkOptree ( name => 'my @a; @a = sort @a',
217 prog => 'my @a; @a = sort @a',
218 bcopts => '-exec',
219 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2201 <0> enter
2212 <;> nextstate(main 1 -e:1) v
2223 <0> padav[@a:1,2] vM/LVINTRO
2234 <;> nextstate(main 2 -e:1) v
2245 <0> pushmark s
2256 <0> pushmark s
2267 <0> padav[@a:1,2] lRM*
2278 <@> sort lK/INPLACE
2289 <@> leave[1 ref] vKP/REFC
229EOT_EOT
230# 1 <0> enter
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
234# 5 <0> pushmark s
235# 6 <0> pushmark s
236# 7 <0> padav[@a:1,2] lRM*
237# 8 <@> sort lK/INPLACE
238# 9 <@> leave[1 ref] vKP/REFC
239EONT_EONT
240
241checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
242 code => sub {my @a; @a = sort @a; push @a, 1},
243 bcopts => '-exec',
244 debug => 0,
245 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
2461 <;> nextstate(main -437 optree.t:325) v
2472 <0> padav[@a:-437,-436] vM/LVINTRO
2483 <;> nextstate(main -436 optree.t:325) v
2494 <0> pushmark s
2505 <0> pushmark s
2516 <0> padav[@a:-437,-436] lRM*
2527 <@> sort lK/INPLACE
2538 <;> nextstate(main -436 optree.t:325) v
2549 <0> pushmark s
255a <0> padav[@a:-437,-436] lRM
256b <$> const[IV 1] s
257c <@> push[t3] sK/2
258d <1> leavesub[1 ref] K/REFC,1
259EOT_EOT
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
263# 4 <0> pushmark s
264# 5 <0> pushmark s
265# 6 <0> padav[@a:429,430] lRM*
266# 7 <@> sort lK/INPLACE
267# 8 <;> nextstate(main 430 optree_sort.t:220) v
268# 9 <0> pushmark s
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
273EONT_EONT
274
275checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
276 code => sub {my @a; @a = sort @a; 1},
277 bcopts => '-exec',
278 debug => 0,
279 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791
JC
2801 <;> nextstate(main -437 optree.t:325) v
2812 <0> padav[@a:-437,-436] vM/LVINTRO
2823 <;> nextstate(main -436 optree.t:325) v
2834 <0> pushmark s
2845 <0> pushmark s
2856 <0> padav[@a:-437,-436] lRM*
2867 <@> sort lK/INPLACE
2878 <;> nextstate(main -436 optree.t:346) v
2889 <$> const[IV 1] s
289a <1> leavesub[1 ref] K/REFC,1
290EOT_EOT
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
294# 4 <0> pushmark s
295# 5 <0> pushmark s
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
301EONT_EONT
302
2ce64696 303} #skip
724aa791
JC
304
305__END__
306