Commit | Line | Data |
724aa791 |
1 | #!perl |
2 | |
3 | BEGIN { |
4 | chdir 't'; |
5 | @INC = ('../lib', '../ext/B/t'); |
6 | require './test.pl'; |
7 | } |
8 | use OptreeCheck; |
2ce64696 |
9 | use Config; |
724aa791 |
10 | plan tests => 11; |
11 | |
2ce64696 |
12 | SKIP: { |
13 | skip "no perlio in this build", 11 unless $Config::Config{useperlio}; |
14 | |
724aa791 |
15 | pass("SORT OPTIMIZATION"); |
16 | |
17 | checkOptree ( name => 'sub {sort @a}', |
18 | code => sub {sort @a}, |
19 | bcopts => '-exec', |
20 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
21 | # 1 <;> nextstate(main 424 optree_sort.t:14) v |
22 | # 2 <0> pushmark s |
cc02ea56 |
23 | # 3 <#> gv[*a] s |
24 | # 4 <1> rv2av[t2] lK/1 |
724aa791 |
25 | # 5 <@> sort K |
26 | # 6 <1> leavesub[1 ref] K/REFC,1 |
27 | EOT_EOT |
28 | # 1 <;> nextstate(main 424 optree_sort.t:14) v |
29 | # 2 <0> pushmark s |
30 | # 3 <$> gv(*a) s |
31 | # 4 <1> rv2av[t1] lK/1 |
32 | # 5 <@> sort K |
33 | # 6 <1> leavesub[1 ref] K/REFC,1 |
34 | EONT_EONT |
35 | |
36 | checkOptree ( name => 'sort @a', |
37 | prog => 'sort @a', |
38 | bcopts => '-exec', |
39 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
40 | 1 <0> enter |
41 | 2 <;> nextstate(main 1 -e:1) v |
42 | 3 <0> pushmark s |
43 | 4 <#> gv[*a] s |
44 | 5 <1> rv2av[t2] lK/1 |
45 | 6 <@> sort vK |
46 | 7 <@> leave[1 ref] vKP/REFC |
47 | EOT_EOT |
48 | # 1 <0> enter |
49 | # 2 <;> nextstate(main 1 -e:1) v |
50 | # 3 <0> pushmark s |
51 | # 4 <$> gv(*a) s |
52 | # 5 <1> rv2av[t1] lK/1 |
53 | # 6 <@> sort vK |
54 | # 7 <@> leave[1 ref] vKP/REFC |
55 | EONT_EONT |
56 | |
57 | checkOptree ( name => 'sub {@a = sort @a}', |
58 | code => sub {@a = sort @a}, |
59 | bcopts => '-exec', |
60 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
724aa791 |
61 | 1 <;> nextstate(main -438 optree.t:244) v |
62 | 2 <0> pushmark s |
63 | 3 <0> pushmark s |
64 | 4 <#> gv[*a] s |
cc02ea56 |
65 | 5 <1> rv2av[t4] lK/1 |
724aa791 |
66 | 6 <@> sort lK |
67 | 7 <0> pushmark s |
68 | 8 <#> gv[*a] s |
69 | 9 <1> rv2av[t2] lKRM*/1 |
70 | a <2> aassign[t\d+] KS/COMMON |
71 | b <1> leavesub[1 ref] K/REFC,1 |
72 | EOT_EOT |
73 | # 1 <;> nextstate(main 65 optree.t:311) v |
74 | # 2 <0> pushmark s |
75 | # 3 <0> pushmark s |
76 | # 4 <$> gv(*a) s |
77 | # 5 <1> rv2av[t2] lK/1 |
78 | # 6 <@> sort lK |
79 | # 7 <0> pushmark s |
80 | # 8 <$> gv(*a) s |
81 | # 9 <1> rv2av[t1] lKRM*/1 |
82 | # a <2> aassign[t3] KS/COMMON |
83 | # b <1> leavesub[1 ref] K/REFC,1 |
84 | EONT_EONT |
85 | |
86 | checkOptree ( name => '@a = sort @a', |
87 | prog => '@a = sort @a', |
88 | bcopts => '-exec', |
89 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
90 | 1 <0> enter |
91 | 2 <;> nextstate(main 1 -e:1) v |
92 | 3 <0> pushmark s |
93 | 4 <0> pushmark s |
94 | 5 <#> gv[*a] s |
95 | 6 <1> rv2av[t4] lKRM*/1 |
96 | 7 <@> sort lK/INPLACE |
97 | 8 <@> leave[1 ref] vKP/REFC |
98 | EOT_EOT |
99 | # 1 <0> enter |
100 | # 2 <;> nextstate(main 1 -e:1) v |
101 | # 3 <0> pushmark s |
102 | # 4 <0> pushmark s |
103 | # 5 <$> gv(*a) s |
104 | # 6 <1> rv2av[t2] lKRM*/1 |
105 | # 7 <@> sort lK/INPLACE |
106 | # 8 <@> leave[1 ref] vKP/REFC |
107 | EONT_EONT |
108 | |
109 | checkOptree ( name => 'sub {@a = sort @a; reverse @a}', |
110 | code => sub {@a = sort @a; reverse @a}, |
111 | bcopts => '-exec', |
112 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
724aa791 |
113 | 1 <;> nextstate(main -438 optree.t:286) v |
114 | 2 <0> pushmark s |
115 | 3 <0> pushmark s |
116 | 4 <#> gv[*a] s |
117 | 5 <1> rv2av[t4] lKRM*/1 |
118 | 6 <@> sort lK/INPLACE |
119 | 7 <;> nextstate(main -438 optree.t:288) v |
120 | 8 <0> pushmark s |
121 | 9 <#> gv[*a] s |
122 | a <1> rv2av[t7] lK/1 |
123 | b <@> reverse[t8] K/1 |
124 | c <1> leavesub[1 ref] K/REFC,1 |
125 | EOT_EOT |
126 | # 1 <;> nextstate(main 66 optree.t:345) v |
127 | # 2 <0> pushmark s |
128 | # 3 <0> pushmark s |
129 | # 4 <$> gv(*a) s |
130 | # 5 <1> rv2av[t2] lKRM*/1 |
131 | # 6 <@> sort lK/INPLACE |
132 | # 7 <;> nextstate(main 66 optree.t:346) v |
133 | # 8 <0> pushmark s |
134 | # 9 <$> gv(*a) s |
135 | # a <1> rv2av[t4] lK/1 |
136 | # b <@> reverse[t5] K/1 |
137 | # c <1> leavesub[1 ref] K/REFC,1 |
138 | EONT_EONT |
139 | |
140 | checkOptree ( name => '@a = sort @a; reverse @a', |
141 | prog => '@a = sort @a; reverse @a', |
142 | bcopts => '-exec', |
143 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
144 | 1 <0> enter |
145 | 2 <;> nextstate(main 1 -e:1) v |
146 | 3 <0> pushmark s |
147 | 4 <0> pushmark s |
148 | 5 <#> gv[*a] s |
149 | 6 <1> rv2av[t4] lKRM*/1 |
150 | 7 <@> sort lK/INPLACE |
151 | 8 <;> nextstate(main 1 -e:1) v |
152 | 9 <0> pushmark s |
153 | a <#> gv[*a] s |
154 | b <1> rv2av[t7] lK/1 |
155 | c <@> reverse[t8] vK/1 |
156 | d <@> leave[1 ref] vKP/REFC |
157 | EOT_EOT |
158 | # 1 <0> enter |
159 | # 2 <;> nextstate(main 1 -e:1) v |
160 | # 3 <0> pushmark s |
161 | # 4 <0> pushmark s |
162 | # 5 <$> gv(*a) s |
163 | # 6 <1> rv2av[t2] lKRM*/1 |
164 | # 7 <@> sort lK/INPLACE |
165 | # 8 <;> nextstate(main 1 -e:1) v |
166 | # 9 <0> pushmark s |
167 | # a <$> gv(*a) s |
168 | # b <1> rv2av[t4] lK/1 |
169 | # c <@> reverse[t5] vK/1 |
170 | # d <@> leave[1 ref] vKP/REFC |
171 | EONT_EONT |
172 | |
173 | checkOptree ( name => 'sub {my @a; @a = sort @a}', |
174 | code => sub {my @a; @a = sort @a}, |
175 | bcopts => '-exec', |
176 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
724aa791 |
177 | 1 <;> nextstate(main -437 optree.t:254) v |
178 | 2 <0> padav[@a:-437,-436] vM/LVINTRO |
179 | 3 <;> nextstate(main -436 optree.t:256) v |
180 | 4 <0> pushmark s |
181 | 5 <0> pushmark s |
182 | 6 <0> padav[@a:-437,-436] l |
183 | 7 <@> sort lK |
184 | 8 <0> pushmark s |
185 | 9 <0> padav[@a:-437,-436] lRM* |
186 | a <2> aassign[t\d+] KS/COMMON |
187 | b <1> leavesub[1 ref] K/REFC,1 |
188 | EOT_EOT |
189 | # 1 <;> nextstate(main 427 optree_sort.t:172) v |
190 | # 2 <0> padav[@a:427,428] vM/LVINTRO |
191 | # 3 <;> nextstate(main 428 optree_sort.t:173) v |
192 | # 4 <0> pushmark s |
193 | # 5 <0> pushmark s |
194 | # 6 <0> padav[@a:427,428] l |
195 | # 7 <@> sort lK |
196 | # 8 <0> pushmark s |
197 | # 9 <0> padav[@a:427,428] lRM* |
198 | # a <2> aassign[t2] KS/COMMON |
199 | # b <1> leavesub[1 ref] K/REFC,1 |
200 | EONT_EONT |
201 | |
202 | checkOptree ( name => 'my @a; @a = sort @a', |
203 | prog => 'my @a; @a = sort @a', |
204 | bcopts => '-exec', |
205 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
206 | 1 <0> enter |
207 | 2 <;> nextstate(main 1 -e:1) v |
208 | 3 <0> padav[@a:1,2] vM/LVINTRO |
209 | 4 <;> nextstate(main 2 -e:1) v |
210 | 5 <0> pushmark s |
211 | 6 <0> pushmark s |
212 | 7 <0> padav[@a:1,2] lRM* |
213 | 8 <@> sort lK/INPLACE |
214 | 9 <@> leave[1 ref] vKP/REFC |
215 | EOT_EOT |
216 | # 1 <0> enter |
217 | # 2 <;> nextstate(main 1 -e:1) v |
218 | # 3 <0> padav[@a:1,2] vM/LVINTRO |
219 | # 4 <;> nextstate(main 2 -e:1) v |
220 | # 5 <0> pushmark s |
221 | # 6 <0> pushmark s |
222 | # 7 <0> padav[@a:1,2] lRM* |
223 | # 8 <@> sort lK/INPLACE |
224 | # 9 <@> leave[1 ref] vKP/REFC |
225 | EONT_EONT |
226 | |
227 | checkOptree ( name => 'sub {my @a; @a = sort @a; push @a, 1}', |
228 | code => sub {my @a; @a = sort @a; push @a, 1}, |
229 | bcopts => '-exec', |
230 | debug => 0, |
231 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
724aa791 |
232 | 1 <;> nextstate(main -437 optree.t:325) v |
233 | 2 <0> padav[@a:-437,-436] vM/LVINTRO |
234 | 3 <;> nextstate(main -436 optree.t:325) v |
235 | 4 <0> pushmark s |
236 | 5 <0> pushmark s |
237 | 6 <0> padav[@a:-437,-436] lRM* |
238 | 7 <@> sort lK/INPLACE |
239 | 8 <;> nextstate(main -436 optree.t:325) v |
240 | 9 <0> pushmark s |
241 | a <0> padav[@a:-437,-436] lRM |
242 | b <$> const[IV 1] s |
243 | c <@> push[t3] sK/2 |
244 | d <1> leavesub[1 ref] K/REFC,1 |
245 | EOT_EOT |
246 | # 1 <;> nextstate(main 429 optree_sort.t:219) v |
247 | # 2 <0> padav[@a:429,430] vM/LVINTRO |
248 | # 3 <;> nextstate(main 430 optree_sort.t:220) v |
249 | # 4 <0> pushmark s |
250 | # 5 <0> pushmark s |
251 | # 6 <0> padav[@a:429,430] lRM* |
252 | # 7 <@> sort lK/INPLACE |
253 | # 8 <;> nextstate(main 430 optree_sort.t:220) v |
254 | # 9 <0> pushmark s |
255 | # a <0> padav[@a:429,430] lRM |
256 | # b <$> const(IV 1) s |
257 | # c <@> push[t3] sK/2 |
258 | # d <1> leavesub[1 ref] K/REFC,1 |
259 | EONT_EONT |
260 | |
261 | checkOptree ( name => 'sub {my @a; @a = sort @a; 1}', |
262 | code => sub {my @a; @a = sort @a; 1}, |
263 | bcopts => '-exec', |
264 | debug => 0, |
265 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
724aa791 |
266 | 1 <;> nextstate(main -437 optree.t:325) v |
267 | 2 <0> padav[@a:-437,-436] vM/LVINTRO |
268 | 3 <;> nextstate(main -436 optree.t:325) v |
269 | 4 <0> pushmark s |
270 | 5 <0> pushmark s |
271 | 6 <0> padav[@a:-437,-436] lRM* |
272 | 7 <@> sort lK/INPLACE |
273 | 8 <;> nextstate(main -436 optree.t:346) v |
274 | 9 <$> const[IV 1] s |
275 | a <1> leavesub[1 ref] K/REFC,1 |
276 | EOT_EOT |
277 | # 1 <;> nextstate(main 431 optree_sort.t:250) v |
278 | # 2 <0> padav[@a:431,432] vM/LVINTRO |
279 | # 3 <;> nextstate(main 432 optree_sort.t:251) v |
280 | # 4 <0> pushmark s |
281 | # 5 <0> pushmark s |
282 | # 6 <0> padav[@a:431,432] lRM* |
283 | # 7 <@> sort lK/INPLACE |
284 | # 8 <;> nextstate(main 432 optree_sort.t:251) v |
285 | # 9 <$> const(IV 1) s |
286 | # a <1> leavesub[1 ref] K/REFC,1 |
287 | EONT_EONT |
288 | |
2ce64696 |
289 | } #skip |
724aa791 |
290 | |
291 | __END__ |
292 | |