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; |
9 | |
10 | plan tests => 11; |
11 | |
12 | pass("SORT OPTIMIZATION"); |
13 | |
14 | checkOptree ( name => 'sub {sort @a}', |
15 | code => sub {sort @a}, |
16 | bcopts => '-exec', |
17 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
18 | # 1 <;> nextstate(main 424 optree_sort.t:14) v |
19 | # 2 <0> pushmark s |
20 | # 3 <#> gv(*a) s |
21 | # 4 <1> rv2av[t1] lK/1 |
22 | # 5 <@> sort K |
23 | # 6 <1> leavesub[1 ref] K/REFC,1 |
24 | EOT_EOT |
25 | # 1 <;> nextstate(main 424 optree_sort.t:14) v |
26 | # 2 <0> pushmark s |
27 | # 3 <$> gv(*a) s |
28 | # 4 <1> rv2av[t1] lK/1 |
29 | # 5 <@> sort K |
30 | # 6 <1> leavesub[1 ref] K/REFC,1 |
31 | EONT_EONT |
32 | |
33 | checkOptree ( name => 'sort @a', |
34 | prog => 'sort @a', |
35 | bcopts => '-exec', |
36 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
37 | 1 <0> enter |
38 | 2 <;> nextstate(main 1 -e:1) v |
39 | 3 <0> pushmark s |
40 | 4 <#> gv[*a] s |
41 | 5 <1> rv2av[t2] lK/1 |
42 | 6 <@> sort vK |
43 | 7 <@> leave[1 ref] vKP/REFC |
44 | EOT_EOT |
45 | # 1 <0> enter |
46 | # 2 <;> nextstate(main 1 -e:1) v |
47 | # 3 <0> pushmark s |
48 | # 4 <$> gv(*a) s |
49 | # 5 <1> rv2av[t1] lK/1 |
50 | # 6 <@> sort vK |
51 | # 7 <@> leave[1 ref] vKP/REFC |
52 | EONT_EONT |
53 | |
54 | checkOptree ( name => 'sub {@a = sort @a}', |
55 | code => sub {@a = sort @a}, |
56 | bcopts => '-exec', |
57 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
58 | goto - |
59 | 1 <;> nextstate(main -438 optree.t:244) v |
60 | 2 <0> pushmark s |
61 | 3 <0> pushmark s |
62 | 4 <#> gv[*a] s |
63 | 5 <1> rv2av[t2] lK/1 |
64 | 6 <@> sort lK |
65 | 7 <0> pushmark s |
66 | 8 <#> gv[*a] s |
67 | 9 <1> rv2av[t2] lKRM*/1 |
68 | a <2> aassign[t\d+] KS/COMMON |
69 | b <1> leavesub[1 ref] K/REFC,1 |
70 | EOT_EOT |
71 | # 1 <;> nextstate(main 65 optree.t:311) v |
72 | # 2 <0> pushmark s |
73 | # 3 <0> pushmark s |
74 | # 4 <$> gv(*a) s |
75 | # 5 <1> rv2av[t2] lK/1 |
76 | # 6 <@> sort lK |
77 | # 7 <0> pushmark s |
78 | # 8 <$> gv(*a) s |
79 | # 9 <1> rv2av[t1] lKRM*/1 |
80 | # a <2> aassign[t3] KS/COMMON |
81 | # b <1> leavesub[1 ref] K/REFC,1 |
82 | EONT_EONT |
83 | |
84 | checkOptree ( name => '@a = sort @a', |
85 | prog => '@a = sort @a', |
86 | bcopts => '-exec', |
87 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
88 | 1 <0> enter |
89 | 2 <;> nextstate(main 1 -e:1) v |
90 | 3 <0> pushmark s |
91 | 4 <0> pushmark s |
92 | 5 <#> gv[*a] s |
93 | 6 <1> rv2av[t4] lKRM*/1 |
94 | 7 <@> sort lK/INPLACE |
95 | 8 <@> leave[1 ref] vKP/REFC |
96 | EOT_EOT |
97 | # 1 <0> enter |
98 | # 2 <;> nextstate(main 1 -e:1) v |
99 | # 3 <0> pushmark s |
100 | # 4 <0> pushmark s |
101 | # 5 <$> gv(*a) s |
102 | # 6 <1> rv2av[t2] lKRM*/1 |
103 | # 7 <@> sort lK/INPLACE |
104 | # 8 <@> leave[1 ref] vKP/REFC |
105 | EONT_EONT |
106 | |
107 | checkOptree ( name => 'sub {@a = sort @a; reverse @a}', |
108 | code => sub {@a = sort @a; reverse @a}, |
109 | bcopts => '-exec', |
110 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
111 | goto - |
112 | 1 <;> nextstate(main -438 optree.t:286) v |
113 | 2 <0> pushmark s |
114 | 3 <0> pushmark s |
115 | 4 <#> gv[*a] s |
116 | 5 <1> rv2av[t4] lKRM*/1 |
117 | 6 <@> sort lK/INPLACE |
118 | 7 <;> nextstate(main -438 optree.t:288) v |
119 | 8 <0> pushmark s |
120 | 9 <#> gv[*a] s |
121 | a <1> rv2av[t7] lK/1 |
122 | b <@> reverse[t8] K/1 |
123 | c <1> leavesub[1 ref] K/REFC,1 |
124 | EOT_EOT |
125 | # 1 <;> nextstate(main 66 optree.t:345) v |
126 | # 2 <0> pushmark s |
127 | # 3 <0> pushmark s |
128 | # 4 <$> gv(*a) s |
129 | # 5 <1> rv2av[t2] lKRM*/1 |
130 | # 6 <@> sort lK/INPLACE |
131 | # 7 <;> nextstate(main 66 optree.t:346) v |
132 | # 8 <0> pushmark s |
133 | # 9 <$> gv(*a) s |
134 | # a <1> rv2av[t4] lK/1 |
135 | # b <@> reverse[t5] K/1 |
136 | # c <1> leavesub[1 ref] K/REFC,1 |
137 | EONT_EONT |
138 | |
139 | checkOptree ( name => '@a = sort @a; reverse @a', |
140 | prog => '@a = sort @a; reverse @a', |
141 | bcopts => '-exec', |
142 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
143 | 1 <0> enter |
144 | 2 <;> nextstate(main 1 -e:1) v |
145 | 3 <0> pushmark s |
146 | 4 <0> pushmark s |
147 | 5 <#> gv[*a] s |
148 | 6 <1> rv2av[t4] lKRM*/1 |
149 | 7 <@> sort lK/INPLACE |
150 | 8 <;> nextstate(main 1 -e:1) v |
151 | 9 <0> pushmark s |
152 | a <#> gv[*a] s |
153 | b <1> rv2av[t7] lK/1 |
154 | c <@> reverse[t8] vK/1 |
155 | d <@> leave[1 ref] vKP/REFC |
156 | EOT_EOT |
157 | # 1 <0> enter |
158 | # 2 <;> nextstate(main 1 -e:1) v |
159 | # 3 <0> pushmark s |
160 | # 4 <0> pushmark s |
161 | # 5 <$> gv(*a) s |
162 | # 6 <1> rv2av[t2] lKRM*/1 |
163 | # 7 <@> sort lK/INPLACE |
164 | # 8 <;> nextstate(main 1 -e:1) v |
165 | # 9 <0> pushmark s |
166 | # a <$> gv(*a) s |
167 | # b <1> rv2av[t4] lK/1 |
168 | # c <@> reverse[t5] vK/1 |
169 | # d <@> leave[1 ref] vKP/REFC |
170 | EONT_EONT |
171 | |
172 | checkOptree ( name => 'sub {my @a; @a = sort @a}', |
173 | code => sub {my @a; @a = sort @a}, |
174 | bcopts => '-exec', |
175 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
176 | goto - |
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'); |
232 | goto - |
233 | 1 <;> nextstate(main -437 optree.t:325) v |
234 | 2 <0> padav[@a:-437,-436] vM/LVINTRO |
235 | 3 <;> nextstate(main -436 optree.t:325) v |
236 | 4 <0> pushmark s |
237 | 5 <0> pushmark s |
238 | 6 <0> padav[@a:-437,-436] lRM* |
239 | 7 <@> sort lK/INPLACE |
240 | 8 <;> nextstate(main -436 optree.t:325) v |
241 | 9 <0> pushmark s |
242 | a <0> padav[@a:-437,-436] lRM |
243 | b <$> const[IV 1] s |
244 | c <@> push[t3] sK/2 |
245 | d <1> leavesub[1 ref] K/REFC,1 |
246 | EOT_EOT |
247 | # 1 <;> nextstate(main 429 optree_sort.t:219) v |
248 | # 2 <0> padav[@a:429,430] vM/LVINTRO |
249 | # 3 <;> nextstate(main 430 optree_sort.t:220) v |
250 | # 4 <0> pushmark s |
251 | # 5 <0> pushmark s |
252 | # 6 <0> padav[@a:429,430] lRM* |
253 | # 7 <@> sort lK/INPLACE |
254 | # 8 <;> nextstate(main 430 optree_sort.t:220) v |
255 | # 9 <0> pushmark s |
256 | # a <0> padav[@a:429,430] lRM |
257 | # b <$> const(IV 1) s |
258 | # c <@> push[t3] sK/2 |
259 | # d <1> leavesub[1 ref] K/REFC,1 |
260 | EONT_EONT |
261 | |
262 | checkOptree ( name => 'sub {my @a; @a = sort @a; 1}', |
263 | code => sub {my @a; @a = sort @a; 1}, |
264 | bcopts => '-exec', |
265 | debug => 0, |
266 | expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); |
267 | goto - |
268 | 1 <;> nextstate(main -437 optree.t:325) v |
269 | 2 <0> padav[@a:-437,-436] vM/LVINTRO |
270 | 3 <;> nextstate(main -436 optree.t:325) v |
271 | 4 <0> pushmark s |
272 | 5 <0> pushmark s |
273 | 6 <0> padav[@a:-437,-436] lRM* |
274 | 7 <@> sort lK/INPLACE |
275 | 8 <;> nextstate(main -436 optree.t:346) v |
276 | 9 <$> const[IV 1] s |
277 | a <1> leavesub[1 ref] K/REFC,1 |
278 | EOT_EOT |
279 | # 1 <;> nextstate(main 431 optree_sort.t:250) v |
280 | # 2 <0> padav[@a:431,432] vM/LVINTRO |
281 | # 3 <;> nextstate(main 432 optree_sort.t:251) v |
282 | # 4 <0> pushmark s |
283 | # 5 <0> pushmark s |
284 | # 6 <0> padav[@a:431,432] lRM* |
285 | # 7 <@> sort lK/INPLACE |
286 | # 8 <;> nextstate(main 432 optree_sort.t:251) v |
287 | # 9 <$> const(IV 1) s |
288 | # a <1> leavesub[1 ref] K/REFC,1 |
289 | EONT_EONT |
290 | |
291 | |
292 | __END__ |
293 | |