This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #46947] Parse method-BLOCK arguments as a term
[perl5.git] / ext / B / t / optree_sort.t
CommitLineData
724aa791
JC
1#!perl
2
3BEGIN {
74517a3a 4 unshift @INC, 't';
9cd8f857
NC
5 require Config;
6 if (($Config::Config{'extensions'} !~ /\bB\b/) ){
7 print "1..0 # Skip -- Perl configured without B module\n";
8 exit 0;
9 }
27e11f68
NC
10 if (!$Config::Config{useperlio}) {
11 print "1..0 # Skip -- need perlio to walk the optree\n";
12 exit 0;
13 }
724aa791
JC
14}
15use OptreeCheck;
2ce64696 16use Config;
3857d07c 17plan tests => 21;
724aa791
JC
18
19pass("SORT OPTIMIZATION");
20
21checkOptree ( name => 'sub {sort @a}',
22 code => sub {sort @a},
23 bcopts => '-exec',
be2b1c74 24 strip_open_hints => 1,
724aa791 25 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 26# 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
724aa791 27# 2 <0> pushmark s
cc02ea56
JC
28# 3 <#> gv[*a] s
29# 4 <1> rv2av[t2] lK/1
724aa791
JC
30# 5 <@> sort K
31# 6 <1> leavesub[1 ref] K/REFC,1
32EOT_EOT
be2b1c74 33# 1 <;> nextstate(main 424 optree_sort.t:14) v:>,<,%
724aa791
JC
34# 2 <0> pushmark s
35# 3 <$> gv(*a) s
36# 4 <1> rv2av[t1] lK/1
37# 5 <@> sort K
38# 6 <1> leavesub[1 ref] K/REFC,1
39EONT_EONT
40
19e169bf
JC
41checkOptree ( name => 'sort @a',
42 prog => 'sort @a',
43 errs => [ 'Useless use of sort in void context at -e line 1.',
44 'Name "main::a" used only once: possible typo at -e line 1.',
45 ],
46 bcopts => '-exec',
be2b1c74 47 strip_open_hints => 1,
19e169bf 48 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
724aa791 491 <0> enter
be2b1c74 502 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
513 <0> pushmark s
524 <#> gv[*a] s
535 <1> rv2av[t2] lK/1
546 <@> sort vK
557 <@> leave[1 ref] vKP/REFC
56EOT_EOT
57# 1 <0> enter
be2b1c74 58# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
59# 3 <0> pushmark s
60# 4 <$> gv(*a) s
61# 5 <1> rv2av[t1] lK/1
62# 6 <@> sort vK
63# 7 <@> leave[1 ref] vKP/REFC
64EONT_EONT
65
66checkOptree ( name => 'sub {@a = sort @a}',
67 code => sub {@a = sort @a},
68 bcopts => '-exec',
be2b1c74 69 strip_open_hints => 1,
724aa791 70 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 711 <;> nextstate(main -438 optree.t:244) v:>,<,%
724aa791
JC
722 <0> pushmark s
733 <0> pushmark s
744 <#> gv[*a] s
cc02ea56 755 <1> rv2av[t4] lK/1
724aa791
JC
766 <@> sort lK
777 <0> pushmark s
788 <#> gv[*a] s
799 <1> rv2av[t2] lKRM*/1
19e169bf 80a <2> aassign[t5] KS/COMMON
724aa791
JC
81b <1> leavesub[1 ref] K/REFC,1
82EOT_EOT
be2b1c74 83# 1 <;> nextstate(main 65 optree.t:311) v:>,<,%
724aa791
JC
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',
be2b1c74 99 strip_open_hints => 1,
724aa791
JC
100 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1011 <0> enter
be2b1c74 1022 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
1033 <0> pushmark s
1044 <0> pushmark s
1055 <#> gv[*a] s
1066 <1> rv2av[t4] lKRM*/1
1077 <@> sort lK/INPLACE
1088 <@> leave[1 ref] vKP/REFC
109EOT_EOT
110# 1 <0> enter
be2b1c74 111# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
112# 3 <0> pushmark s
113# 4 <0> pushmark s
114# 5 <$> gv(*a) s
115# 6 <1> rv2av[t2] lKRM*/1
116# 7 <@> sort lK/INPLACE
117# 8 <@> leave[1 ref] vKP/REFC
118EONT_EONT
119
120checkOptree ( name => 'sub {@a = sort @a; reverse @a}',
121 code => sub {@a = sort @a; reverse @a},
122 bcopts => '-exec',
be2b1c74 123 strip_open_hints => 1,
724aa791 124 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 1251 <;> nextstate(main -438 optree.t:286) v:>,<,%
724aa791
JC
1262 <0> pushmark s
1273 <0> pushmark s
1284 <#> gv[*a] s
1295 <1> rv2av[t4] lKRM*/1
1306 <@> sort lK/INPLACE
be2b1c74 1317 <;> nextstate(main -438 optree.t:288) v:>,<,%
724aa791
JC
1328 <0> pushmark s
1339 <#> gv[*a] s
134a <1> rv2av[t7] lK/1
135b <@> reverse[t8] K/1
136c <1> leavesub[1 ref] K/REFC,1
137EOT_EOT
be2b1c74 138# 1 <;> nextstate(main 66 optree.t:345) v:>,<,%
724aa791
JC
139# 2 <0> pushmark s
140# 3 <0> pushmark s
141# 4 <$> gv(*a) s
142# 5 <1> rv2av[t2] lKRM*/1
143# 6 <@> sort lK/INPLACE
be2b1c74 144# 7 <;> nextstate(main 66 optree.t:346) v:>,<,%
724aa791
JC
145# 8 <0> pushmark s
146# 9 <$> gv(*a) s
147# a <1> rv2av[t4] lK/1
148# b <@> reverse[t5] K/1
149# c <1> leavesub[1 ref] K/REFC,1
150EONT_EONT
151
152checkOptree ( name => '@a = sort @a; reverse @a',
153 prog => '@a = sort @a; reverse @a',
19e169bf 154 errs => ['Useless use of reverse in void context at -e line 1.'],
724aa791 155 bcopts => '-exec',
be2b1c74 156 strip_open_hints => 1,
724aa791
JC
157 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
1581 <0> enter
be2b1c74 1592 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
1603 <0> pushmark s
1614 <0> pushmark s
1625 <#> gv[*a] s
1636 <1> rv2av[t4] lKRM*/1
1647 <@> sort lK/INPLACE
be2b1c74 1658 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
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
be2b1c74 173# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
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
be2b1c74 179# 8 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791
JC
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',
be2b1c74 190 strip_open_hints => 1,
724aa791 191 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 1921 <;> nextstate(main -437 optree.t:254) v:>,<,%
724aa791 1932 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 1943 <;> nextstate(main -436 optree.t:256) v:>,<,%
724aa791
JC
1954 <0> pushmark s
1965 <0> pushmark s
1976 <0> padav[@a:-437,-436] l
1987 <@> sort lK
a7fd8ef6
DM
1998 <0> padrange[@a:-437,-436] l/1
2009 <2> aassign[t2] KS/COMMON
201a <1> leavesub[1 ref] K/REFC,1
724aa791 202EOT_EOT
be2b1c74 203# 1 <;> nextstate(main 427 optree_sort.t:172) v:>,<,%
724aa791 204# 2 <0> padav[@a:427,428] vM/LVINTRO
be2b1c74 205# 3 <;> nextstate(main 428 optree_sort.t:173) v:>,<,%
724aa791
JC
206# 4 <0> pushmark s
207# 5 <0> pushmark s
208# 6 <0> padav[@a:427,428] l
209# 7 <@> sort lK
a7fd8ef6
DM
210# 8 <0> padrange[@a:427,428] l/1
211# 9 <2> aassign[t2] KS/COMMON
212# a <1> leavesub[1 ref] K/REFC,1
724aa791
JC
213EONT_EONT
214
215checkOptree ( name => 'my @a; @a = sort @a',
216 prog => 'my @a; @a = sort @a',
217 bcopts => '-exec',
be2b1c74 218 strip_open_hints => 1,
724aa791
JC
219 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
2201 <0> enter
be2b1c74 2212 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 2223 <0> padav[@a:1,2] vM/LVINTRO
be2b1c74 2234 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791 2245 <0> pushmark s
a7fd8ef6
DM
2256 <0> padrange[@a:1,2] l/1
2267 <@> sort lK/INPLACE
2278 <@> leave[1 ref] vKP/REFC
724aa791
JC
228EOT_EOT
229# 1 <0> enter
be2b1c74 230# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
724aa791 231# 3 <0> padav[@a:1,2] vM/LVINTRO
be2b1c74 232# 4 <;> nextstate(main 2 -e:1) v:>,<,%,{
724aa791 233# 5 <0> pushmark s
a7fd8ef6
DM
234# 6 <0> padrange[@a:1,2] l/1
235# 7 <@> sort lK/INPLACE
236# 8 <@> leave[1 ref] vKP/REFC
724aa791
JC
237EONT_EONT
238
239checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}',
240 code => sub {my @a; @a = sort @a; push @a, 1},
241 bcopts => '-exec',
242 debug => 0,
be2b1c74 243 strip_open_hints => 1,
724aa791 244 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2451 <;> nextstate(main -437 optree.t:325) v:>,<,%
724aa791 2462 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 2473 <;> nextstate(main -436 optree.t:325) v:>,<,%
724aa791 2484 <0> pushmark s
a7fd8ef6
DM
2495 <0> padrange[@a:-437,-436] l/1
2506 <@> sort lK/INPLACE
2517 <;> nextstate(main -436 optree.t:325) v:>,<,%,{
2528 <0> padrange[@a:-437,-436] l/1
2539 <$> const[IV 1] s
254a <@> push[t3] sK/2
255b <1> leavesub[1 ref] K/REFC,1
724aa791 256EOT_EOT
be2b1c74 257# 1 <;> nextstate(main 429 optree_sort.t:219) v:>,<,%
724aa791 258# 2 <0> padav[@a:429,430] vM/LVINTRO
be2b1c74 259# 3 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%
724aa791 260# 4 <0> pushmark s
a7fd8ef6
DM
261# 5 <0> padrange[@a:429,430] l/1
262# 6 <@> sort lK/INPLACE
263# 7 <;> nextstate(main 430 optree_sort.t:220) v:>,<,%,{
264# 8 <0> padrange[@a:429,430] l/1
265# 9 <$> const(IV 1) s
266# a <@> push[t3] sK/2
267# b <1> leavesub[1 ref] K/REFC,1
724aa791
JC
268EONT_EONT
269
270checkOptree ( name => 'sub {my @a; @a = sort @a; 1}',
271 code => sub {my @a; @a = sort @a; 1},
272 bcopts => '-exec',
273 debug => 0,
be2b1c74 274 strip_open_hints => 1,
724aa791 275 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
be2b1c74 2761 <;> nextstate(main -437 optree.t:325) v:>,<,%
724aa791 2772 <0> padav[@a:-437,-436] vM/LVINTRO
be2b1c74 2783 <;> nextstate(main -436 optree.t:325) v:>,<,%
724aa791 2794 <0> pushmark s
a7fd8ef6
DM
2805 <0> padrange[@a:-437,-436] l/1
2816 <@> sort lK/INPLACE
2827 <;> nextstate(main -436 optree.t:346) v:>,<,%,{
2838 <$> const[IV 1] s
2849 <1> leavesub[1 ref] K/REFC,1
724aa791 285EOT_EOT
be2b1c74 286# 1 <;> nextstate(main 431 optree_sort.t:250) v:>,<,%
724aa791 287# 2 <0> padav[@a:431,432] vM/LVINTRO
be2b1c74 288# 3 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%
724aa791 289# 4 <0> pushmark s
a7fd8ef6
DM
290# 5 <0> padrange[@a:431,432] l/1
291# 6 <@> sort lK/INPLACE
292# 7 <;> nextstate(main 432 optree_sort.t:251) v:>,<,%,{
293# 8 <$> const(IV 1) s
294# 9 <1> leavesub[1 ref] K/REFC,1
724aa791 295EONT_EONT