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