Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Side by Side Diff: pkg/analyzer2dart/test/sexpr_data.dart

Issue 833353002: Make scoping more prominent in the CPS IR's printed representation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Test data for sexpr_test. 5 /// Test data for sexpr_test.
6 library test.sexpr.data; 6 library test.sexpr.data;
7 7
8 import 'test_helper.dart'; 8 import 'test_helper.dart';
9 9
10 class TestSpec extends TestSpecBase { 10 class TestSpec extends TestSpecBase {
11 // A [String] or a [Map<String, String>]. 11 // A [String] or a [Map<String, String>].
12 final output; 12 final output;
13 13
14 /// True if the test should be skipped when testing analyzer2dart. 14 /// True if the test should be skipped when testing analyzer2dart.
15 final bool skipInAnalyzerFrontend; 15 final bool skipInAnalyzerFrontend;
16 16
17 const TestSpec(String input, this.output, 17 const TestSpec(String input, this.output,
18 {this.skipInAnalyzerFrontend: false}) : super(input); 18 {this.skipInAnalyzerFrontend: false}) : super(input);
19 } 19 }
20 20
21 const List<Group> TEST_DATA = const [ 21 const List<Group> TEST_DATA = const [
22 const Group('Empty main', const [ 22 const Group('Empty main', const [
23 const TestSpec(''' 23 const TestSpec('''
24 main() {} 24 main() {}
25 ''', ''' 25 ''', '''
26 (FunctionDefinition main () return () 26 (FunctionDefinition main () return ()
27 (LetPrim v0 (Constant (Null))) 27 (LetPrim (v0 (Constant (Null)))
28 (InvokeContinuation return v0)) 28 (InvokeContinuation return (v0))))
29 '''), 29 '''),
30 30
31 const TestSpec(''' 31 const TestSpec('''
32 foo() {} 32 foo() {}
33 main() { 33 main() {
34 foo(); 34 foo();
35 } 35 }
36 ''', ''' 36 ''', '''
37 (FunctionDefinition main () return () 37 (FunctionDefinition main () return ()
38 (LetCont (k0 v0) 38 (LetCont (k0 (v0)
39 (LetPrim v1 (Constant (Null))) 39 (LetPrim (v1 (Constant (Null)))
40 (InvokeContinuation return v1)) 40 (InvokeContinuation return (v1))))
41 (InvokeStatic foo k0)) 41 (InvokeStatic foo () k0)))
42 ''') 42 ''')
43 ]), 43 ]),
44 44
45 const Group('Literals', const [ 45 const Group('Literals', const [
46 const TestSpec(''' 46 const TestSpec('''
47 main() { 47 main() {
48 return 0; 48 return 0;
49 } 49 }
50 ''', ''' 50 ''', '''
51 (FunctionDefinition main () return () 51 (FunctionDefinition main () return ()
52 (LetPrim v0 (Constant (Int 0))) 52 (LetPrim (v0 (Constant (Int 0)))
53 (InvokeContinuation return v0)) 53 (InvokeContinuation return (v0))))
54 '''), 54 '''),
55 55
56 const TestSpec(''' 56 const TestSpec('''
57 main() { 57 main() {
58 return 1.5; 58 return 1.5;
59 } 59 }
60 ''', ''' 60 ''', '''
61 (FunctionDefinition main () return () 61 (FunctionDefinition main () return ()
62 (LetPrim v0 (Constant (Double 1.5))) 62 (LetPrim (v0 (Constant (Double 1.5)))
63 (InvokeContinuation return v0)) 63 (InvokeContinuation return (v0))))
64 '''), 64 '''),
65 65
66 const TestSpec(''' 66 const TestSpec('''
67 main() { 67 main() {
68 return true; 68 return true;
69 } 69 }
70 ''', ''' 70 ''', '''
71 (FunctionDefinition main () return () 71 (FunctionDefinition main () return ()
72 (LetPrim v0 (Constant (Bool true))) 72 (LetPrim (v0 (Constant (Bool true)))
73 (InvokeContinuation return v0)) 73 (InvokeContinuation return (v0))))
74 '''), 74 '''),
75 75
76 const TestSpec(''' 76 const TestSpec('''
77 main() { 77 main() {
78 return false; 78 return false;
79 } 79 }
80 ''', ''' 80 ''', '''
81 (FunctionDefinition main () return () 81 (FunctionDefinition main () return ()
82 (LetPrim v0 (Constant (Bool false))) 82 (LetPrim (v0 (Constant (Bool false)))
83 (InvokeContinuation return v0)) 83 (InvokeContinuation return (v0))))
84 '''), 84 '''),
85 85
86 const TestSpec(''' 86 const TestSpec('''
87 main() { 87 main() {
88 return "a"; 88 return "a";
89 } 89 }
90 ''', ''' 90 ''', '''
91 (FunctionDefinition main () return () 91 (FunctionDefinition main () return ()
92 (LetPrim v0 (Constant (String "a"))) 92 (LetPrim (v0 (Constant (String "a")))
93 (InvokeContinuation return v0)) 93 (InvokeContinuation return (v0))))
94 '''), 94 '''),
95 ]), 95 ]),
96 96
97 const Group('Parameters', const [ 97 const Group('Parameters', const [
98 const TestSpec(''' 98 const TestSpec('''
99 main(args) {} 99 main(args) {}
100 ''', ''' 100 ''', '''
101 (FunctionDefinition main (args) return () 101 (FunctionDefinition main (args) return ()
102 (LetPrim v0 (Constant (Null))) 102 (LetPrim (v0 (Constant (Null)))
103 (InvokeContinuation return v0)) 103 (InvokeContinuation return (v0))))
104 '''), 104 '''),
105 105
106 const TestSpec(''' 106 const TestSpec('''
107 main(a, b) {} 107 main(a, b) {}
108 ''', ''' 108 ''', '''
109 (FunctionDefinition main (a b) return () 109 (FunctionDefinition main (a b) return ()
110 (LetPrim v0 (Constant (Null))) 110 (LetPrim (v0 (Constant (Null)))
111 (InvokeContinuation return v0)) 111 (InvokeContinuation return (v0))))
112 '''), 112 '''),
113 ]), 113 ]),
114 114
115 const Group('Pass arguments', const [ 115 const Group('Pass arguments', const [
116 const TestSpec(''' 116 const TestSpec('''
117 foo(a) {} 117 foo(a) {}
118 main() { 118 main() {
119 foo(null); 119 foo(null);
120 } 120 }
121 ''', ''' 121 ''', '''
122 (FunctionDefinition main () return () 122 (FunctionDefinition main () return ()
123 (LetPrim v0 (Constant (Null))) 123 (LetPrim (v0 (Constant (Null)))
124 (LetCont (k0 v1) 124 (LetCont (k0 (v1)
125 (LetPrim v2 (Constant (Null))) 125 (LetPrim (v2 (Constant (Null)))
126 (InvokeContinuation return v2)) 126 (InvokeContinuation return (v2))))
127 (InvokeStatic foo v0 k0)) 127 (InvokeStatic foo (v0) k0))))
128 '''), 128 '''),
129 129
130 const TestSpec(''' 130 const TestSpec('''
131 bar(b, c) {} 131 bar(b, c) {}
132 foo(a) {} 132 foo(a) {}
133 main() { 133 main() {
134 foo(null); 134 foo(null);
135 bar(0, ""); 135 bar(0, "");
136 } 136 }
137 ''', ''' 137 ''', '''
138 (FunctionDefinition main () return () 138 (FunctionDefinition main () return ()
139 (LetPrim v0 (Constant (Null))) 139 (LetPrim (v0 (Constant (Null)))
140 (LetCont (k0 v1) 140 (LetCont (k0 (v1)
141 (LetPrim v2 (Constant (Int 0))) 141 (LetPrim (v2 (Constant (Int 0)))
142 (LetPrim v3 (Constant (String ""))) 142 (LetPrim (v3 (Constant (String "")))
143 (LetCont (k1 v4) 143 (LetCont (k1 (v4)
144 (LetPrim v5 (Constant (Null))) 144 (LetPrim (v5 (Constant (Null)))
145 (InvokeContinuation return v5)) 145 (InvokeContinuation return (v5))))
146 (InvokeStatic bar v2 v3 k1)) 146 (InvokeStatic bar (v2 v3) k1)))))
147 (InvokeStatic foo v0 k0)) 147 (InvokeStatic foo (v0) k0))))
148 '''), 148 '''),
149 149
150 const TestSpec(''' 150 const TestSpec('''
151 foo(a) {} 151 foo(a) {}
152 main() { 152 main() {
153 return foo(null); 153 return foo(null);
154 } 154 }
155 ''', ''' 155 ''', '''
156 (FunctionDefinition main () return () 156 (FunctionDefinition main () return ()
157 (LetPrim v0 (Constant (Null))) 157 (LetPrim (v0 (Constant (Null)))
158 (LetCont (k0 v1) 158 (LetCont (k0 (v1)
159 (InvokeContinuation return v1)) 159 (InvokeContinuation return (v1)))
160 (InvokeStatic foo v0 k0)) 160 (InvokeStatic foo (v0) k0))))
161 '''), 161 '''),
162 ]), 162 ]),
163 163
164 const Group('Local variables', const [ 164 const Group('Local variables', const [
165 const TestSpec(''' 165 const TestSpec('''
166 main() { 166 main() {
167 var a; 167 var a;
168 return a; 168 return a;
169 } 169 }
170 ''', ''' 170 ''', '''
171 (FunctionDefinition main () return () 171 (FunctionDefinition main () return ()
172 (LetPrim v0 (Constant (Null))) 172 (LetPrim (v0 (Constant (Null)))
173 (InvokeContinuation return v0)) 173 (InvokeContinuation return (v0))))
174 '''), 174 '''),
175 175
176 const TestSpec(''' 176 const TestSpec('''
177 main() { 177 main() {
178 var a = 0; 178 var a = 0;
179 return a; 179 return a;
180 } 180 }
181 ''', ''' 181 ''', '''
182 (FunctionDefinition main () return () 182 (FunctionDefinition main () return ()
183 (LetPrim v0 (Constant (Int 0))) 183 (LetPrim (v0 (Constant (Int 0)))
184 (InvokeContinuation return v0)) 184 (InvokeContinuation return (v0))))
185 '''), 185 '''),
186 186
187 const TestSpec(''' 187 const TestSpec('''
188 main(a) { 188 main(a) {
189 return a; 189 return a;
190 } 190 }
191 ''', ''' 191 ''', '''
192 (FunctionDefinition main (a) return () 192 (FunctionDefinition main (a) return ()
193 (InvokeContinuation return a)) 193 (InvokeContinuation return (a)))
194 '''), 194 '''),
195 ]), 195 ]),
196 196
197 const Group('Local variable writes', const <TestSpec>[ 197 const Group('Local variable writes', const <TestSpec>[
198 const TestSpec(''' 198 const TestSpec('''
199 main() { 199 main() {
200 var a; 200 var a;
201 a = 10; 201 a = 10;
202 return a; 202 return a;
203 } 203 }
204 ''', ''' 204 ''', '''
205 (FunctionDefinition main () return () 205 (FunctionDefinition main () return ()
206 (LetPrim v0 (Constant (Null))) 206 (LetPrim (v0 (Constant (Null)))
207 (LetPrim v1 (Constant (Int 10))) 207 (LetPrim (v1 (Constant (Int 10)))
208 (InvokeContinuation return v1)) 208 (InvokeContinuation return (v1)))))
209 '''), 209 '''),
210 210
211 const TestSpec(''' 211 const TestSpec('''
212 main() { 212 main() {
213 var a = 0; 213 var a = 0;
214 a = 10; 214 a = 10;
215 return a; 215 return a;
216 } 216 }
217 ''', ''' 217 ''', '''
218 (FunctionDefinition main () return () 218 (FunctionDefinition main () return ()
219 (LetPrim v0 (Constant (Int 0))) 219 (LetPrim (v0 (Constant (Int 0)))
220 (LetPrim v1 (Constant (Int 10))) 220 (LetPrim (v1 (Constant (Int 10)))
221 (InvokeContinuation return v1)) 221 (InvokeContinuation return (v1)))))
222 '''), 222 '''),
223 223
224 const TestSpec(''' 224 const TestSpec('''
225 main() { 225 main() {
226 var a = 0; 226 var a = 0;
227 print(a); 227 print(a);
228 a = ""; 228 a = "";
229 print(a); 229 print(a);
230 return a; 230 return a;
231 } 231 }
232 ''', ''' 232 ''', '''
233 (FunctionDefinition main () return () 233 (FunctionDefinition main () return ()
234 (LetPrim v0 (Constant (Int 0))) 234 (LetPrim (v0 (Constant (Int 0)))
235 (LetCont (k0 v1) 235 (LetCont (k0 (v1)
236 (LetPrim v2 (Constant (String ""))) 236 (LetPrim (v2 (Constant (String "")))
237 (LetCont (k1 v3) 237 (LetCont (k1 (v3)
238 (InvokeContinuation return v2)) 238 (InvokeContinuation return (v2)))
239 (InvokeStatic print v2 k1)) 239 (InvokeStatic print (v2) k1))))
240 (InvokeStatic print v0 k0)) 240 (InvokeStatic print (v0) k0))))
241 '''), 241 '''),
242 242
243 const TestSpec(''' 243 const TestSpec('''
244 main(a) { 244 main(a) {
245 print(a); 245 print(a);
246 a = ""; 246 a = "";
247 print(a); 247 print(a);
248 return a; 248 return a;
249 } 249 }
250 ''', ''' 250 ''', '''
251 (FunctionDefinition main (a) return () 251 (FunctionDefinition main (a) return ()
252 (LetCont (k0 v0) 252 (LetCont (k0 (v0)
253 (LetPrim v1 (Constant (String ""))) 253 (LetPrim (v1 (Constant (String "")))
254 (LetCont (k1 v2) 254 (LetCont (k1 (v2)
255 (InvokeContinuation return v1)) 255 (InvokeContinuation return (v1)))
256 (InvokeStatic print v1 k1)) 256 (InvokeStatic print (v1) k1))))
257 (InvokeStatic print a k0)) 257 (InvokeStatic print (a) k0)))
258 '''), 258 '''),
259 259
260 const TestSpec(''' 260 const TestSpec('''
261 main(a) { 261 main(a) {
262 if (a) { 262 if (a) {
263 a = ""; 263 a = "";
264 } 264 }
265 print(a); 265 print(a);
266 return a; 266 return a;
267 } 267 }
268 ''', ''' 268 ''', '''
269 (FunctionDefinition main (a) return () 269 (FunctionDefinition main (a) return ()
270 (LetCont (k0 v0) 270 (LetCont (k0 (v0)
271 (LetCont (k1 v1) 271 (LetCont (k1 (v1)
272 (InvokeContinuation return v0)) 272 (InvokeContinuation return (v0)))
273 (InvokeStatic print v0 k1)) 273 (InvokeStatic print (v0) k1)))
274 (LetCont (k2) 274 (LetCont (k2 ()
275 (LetPrim v2 (Constant (String ""))) 275 (LetPrim (v2 (Constant (String "")))
276 (InvokeContinuation k0 v2)) 276 (InvokeContinuation k0 (v2))))
277 (LetCont (k3) 277 (LetCont (k3 ()
278 (InvokeContinuation k0 a)) 278 (InvokeContinuation k0 (a)))
279 (Branch (IsTrue a) k2 k3)) 279 (Branch (IsTrue a) k2 k3)))))
280 '''), 280 '''),
281 ]), 281 ]),
282 282
283 const Group('Dynamic access', const [ 283 const Group('Dynamic access', const [
284 const TestSpec(''' 284 const TestSpec('''
285 main(a) { 285 main(a) {
286 return a.foo; 286 return a.foo;
287 } 287 }
288 ''', ''' 288 ''', '''
289 (FunctionDefinition main (a) return () 289 (FunctionDefinition main (a) return ()
290 (LetCont (k0 v0) 290 (LetCont (k0 (v0)
291 (InvokeContinuation return v0)) 291 (InvokeContinuation return (v0)))
292 (InvokeMethod a foo k0)) 292 (InvokeMethod a foo () k0)))
293 '''), 293 '''),
294 294
295 const TestSpec(''' 295 const TestSpec('''
296 main() { 296 main() {
297 var a = ""; 297 var a = "";
298 return a.foo; 298 return a.foo;
299 } 299 }
300 ''', ''' 300 ''', '''
301 (FunctionDefinition main () return () 301 (FunctionDefinition main () return ()
302 (LetPrim v0 (Constant (String ""))) 302 (LetPrim (v0 (Constant (String "")))
303 (LetCont (k0 v1) 303 (LetCont (k0 (v1)
304 (InvokeContinuation return v1)) 304 (InvokeContinuation return (v1)))
305 (InvokeMethod v0 foo k0)) 305 (InvokeMethod v0 foo () k0))))
306 '''), 306 '''),
307 ]), 307 ]),
308 308
309 const Group('Dynamic invocation', const [ 309 const Group('Dynamic invocation', const [
310 const TestSpec(''' 310 const TestSpec('''
311 main(a) { 311 main(a) {
312 return a.foo(0); 312 return a.foo(0);
313 } 313 }
314 ''', ''' 314 ''', '''
315 (FunctionDefinition main (a) return () 315 (FunctionDefinition main (a) return ()
316 (LetPrim v0 (Constant (Int 0))) 316 (LetPrim (v0 (Constant (Int 0)))
317 (LetCont (k0 v1) 317 (LetCont (k0 (v1)
318 (InvokeContinuation return v1)) 318 (InvokeContinuation return (v1)))
319 (InvokeMethod a foo v0 k0)) 319 (InvokeMethod a foo (v0) k0))))
320 '''), 320 '''),
321 321
322 const TestSpec(''' 322 const TestSpec('''
323 main() { 323 main() {
324 var a = ""; 324 var a = "";
325 return a.foo(0, 1); 325 return a.foo(0, 1);
326 } 326 }
327 ''', ''' 327 ''', '''
328 (FunctionDefinition main () return () 328 (FunctionDefinition main () return ()
329 (LetPrim v0 (Constant (String ""))) 329 (LetPrim (v0 (Constant (String "")))
330 (LetPrim v1 (Constant (Int 0))) 330 (LetPrim (v1 (Constant (Int 0)))
331 (LetPrim v2 (Constant (Int 1))) 331 (LetPrim (v2 (Constant (Int 1)))
332 (LetCont (k0 v3) 332 (LetCont (k0 (v3)
333 (InvokeContinuation return v3)) 333 (InvokeContinuation return (v3)))
334 (InvokeMethod v0 foo v1 v2 k0)) 334 (InvokeMethod v0 foo (v1 v2) k0))))))
335 '''), 335 '''),
336 ]), 336 ]),
337 337
338 const Group('Binary expressions', const [ 338 const Group('Binary expressions', const [
339 const TestSpec(''' 339 const TestSpec('''
340 main() { 340 main() {
341 return 0 + ""; 341 return 0 + "";
342 } 342 }
343 ''', ''' 343 ''', '''
344 (FunctionDefinition main () return () 344 (FunctionDefinition main () return ()
345 (LetPrim v0 (Constant (Int 0))) 345 (LetPrim (v0 (Constant (Int 0)))
346 (LetPrim v1 (Constant (String ""))) 346 (LetPrim (v1 (Constant (String "")))
347 (LetCont (k0 v2) 347 (LetCont (k0 (v2)
348 (InvokeContinuation return v2)) 348 (InvokeContinuation return (v2)))
349 (InvokeMethod v0 + v1 k0)) 349 (InvokeMethod v0 + (v1) k0)))))
350 '''), 350 '''),
351 351
352 const TestSpec(''' 352 const TestSpec('''
353 main() { 353 main() {
354 return 0 - ""; 354 return 0 - "";
355 } 355 }
356 ''', ''' 356 ''', '''
357 (FunctionDefinition main () return () 357 (FunctionDefinition main () return ()
358 (LetPrim v0 (Constant (Int 0))) 358 (LetPrim (v0 (Constant (Int 0)))
359 (LetPrim v1 (Constant (String ""))) 359 (LetPrim (v1 (Constant (String "")))
360 (LetCont (k0 v2) 360 (LetCont (k0 (v2)
361 (InvokeContinuation return v2)) 361 (InvokeContinuation return (v2)))
362 (InvokeMethod v0 - v1 k0)) 362 (InvokeMethod v0 - (v1) k0)))))
363 '''), 363 '''),
364 364
365 const TestSpec(''' 365 const TestSpec('''
366 main() { 366 main() {
367 return 0 * ""; 367 return 0 * "";
368 } 368 }
369 ''', ''' 369 ''', '''
370 (FunctionDefinition main () return () 370 (FunctionDefinition main () return ()
371 (LetPrim v0 (Constant (Int 0))) 371 (LetPrim (v0 (Constant (Int 0)))
372 (LetPrim v1 (Constant (String ""))) 372 (LetPrim (v1 (Constant (String "")))
373 (LetCont (k0 v2) 373 (LetCont (k0 (v2)
374 (InvokeContinuation return v2)) 374 (InvokeContinuation return (v2)))
375 (InvokeMethod v0 * v1 k0)) 375 (InvokeMethod v0 * (v1) k0)))))
376 '''), 376 '''),
377 377
378 const TestSpec(''' 378 const TestSpec('''
379 main() { 379 main() {
380 return 0 / ""; 380 return 0 / "";
381 } 381 }
382 ''', ''' 382 ''', '''
383 (FunctionDefinition main () return () 383 (FunctionDefinition main () return ()
384 (LetPrim v0 (Constant (Int 0))) 384 (LetPrim (v0 (Constant (Int 0)))
385 (LetPrim v1 (Constant (String ""))) 385 (LetPrim (v1 (Constant (String "")))
386 (LetCont (k0 v2) 386 (LetCont (k0 (v2)
387 (InvokeContinuation return v2)) 387 (InvokeContinuation return (v2)))
388 (InvokeMethod v0 / v1 k0)) 388 (InvokeMethod v0 / (v1) k0)))))
389 '''), 389 '''),
390 390
391 const TestSpec(''' 391 const TestSpec('''
392 main() { 392 main() {
393 return 0 ~/ ""; 393 return 0 ~/ "";
394 } 394 }
395 ''', ''' 395 ''', '''
396 (FunctionDefinition main () return () 396 (FunctionDefinition main () return ()
397 (LetPrim v0 (Constant (Int 0))) 397 (LetPrim (v0 (Constant (Int 0)))
398 (LetPrim v1 (Constant (String ""))) 398 (LetPrim (v1 (Constant (String "")))
399 (LetCont (k0 v2) 399 (LetCont (k0 (v2)
400 (InvokeContinuation return v2)) 400 (InvokeContinuation return (v2)))
401 (InvokeMethod v0 ~/ v1 k0)) 401 (InvokeMethod v0 ~/ (v1) k0)))))
402 '''), 402 '''),
403 403
404 const TestSpec(''' 404 const TestSpec('''
405 main() { 405 main() {
406 return 0 < ""; 406 return 0 < "";
407 } 407 }
408 ''', ''' 408 ''', '''
409 (FunctionDefinition main () return () 409 (FunctionDefinition main () return ()
410 (LetPrim v0 (Constant (Int 0))) 410 (LetPrim (v0 (Constant (Int 0)))
411 (LetPrim v1 (Constant (String ""))) 411 (LetPrim (v1 (Constant (String "")))
412 (LetCont (k0 v2) 412 (LetCont (k0 (v2)
413 (InvokeContinuation return v2)) 413 (InvokeContinuation return (v2)))
414 (InvokeMethod v0 < v1 k0)) 414 (InvokeMethod v0 < (v1) k0)))))
415 '''), 415 '''),
416 416
417 const TestSpec(''' 417 const TestSpec('''
418 main() { 418 main() {
419 return 0 <= ""; 419 return 0 <= "";
420 } 420 }
421 ''', ''' 421 ''', '''
422 (FunctionDefinition main () return () 422 (FunctionDefinition main () return ()
423 (LetPrim v0 (Constant (Int 0))) 423 (LetPrim (v0 (Constant (Int 0)))
424 (LetPrim v1 (Constant (String ""))) 424 (LetPrim (v1 (Constant (String "")))
425 (LetCont (k0 v2) 425 (LetCont (k0 (v2)
426 (InvokeContinuation return v2)) 426 (InvokeContinuation return (v2)))
427 (InvokeMethod v0 <= v1 k0)) 427 (InvokeMethod v0 <= (v1) k0)))))
428 '''), 428 '''),
429 429
430 const TestSpec(''' 430 const TestSpec('''
431 main() { 431 main() {
432 return 0 > ""; 432 return 0 > "";
433 } 433 }
434 ''', ''' 434 ''', '''
435 (FunctionDefinition main () return () 435 (FunctionDefinition main () return ()
436 (LetPrim v0 (Constant (Int 0))) 436 (LetPrim (v0 (Constant (Int 0)))
437 (LetPrim v1 (Constant (String ""))) 437 (LetPrim (v1 (Constant (String "")))
438 (LetCont (k0 v2) 438 (LetCont (k0 (v2)
439 (InvokeContinuation return v2)) 439 (InvokeContinuation return (v2)))
440 (InvokeMethod v0 > v1 k0)) 440 (InvokeMethod v0 > (v1) k0)))))
441 '''), 441 '''),
442 442
443 const TestSpec(''' 443 const TestSpec('''
444 main() { 444 main() {
445 return 0 >= ""; 445 return 0 >= "";
446 } 446 }
447 ''', ''' 447 ''', '''
448 (FunctionDefinition main () return () 448 (FunctionDefinition main () return ()
449 (LetPrim v0 (Constant (Int 0))) 449 (LetPrim (v0 (Constant (Int 0)))
450 (LetPrim v1 (Constant (String ""))) 450 (LetPrim (v1 (Constant (String "")))
451 (LetCont (k0 v2) 451 (LetCont (k0 (v2)
452 (InvokeContinuation return v2)) 452 (InvokeContinuation return (v2)))
453 (InvokeMethod v0 >= v1 k0)) 453 (InvokeMethod v0 >= (v1) k0)))))
454 '''), 454 '''),
455 455
456 const TestSpec(''' 456 const TestSpec('''
457 main() { 457 main() {
458 return 0 << ""; 458 return 0 << "";
459 } 459 }
460 ''', ''' 460 ''', '''
461 (FunctionDefinition main () return () 461 (FunctionDefinition main () return ()
462 (LetPrim v0 (Constant (Int 0))) 462 (LetPrim (v0 (Constant (Int 0)))
463 (LetPrim v1 (Constant (String ""))) 463 (LetPrim (v1 (Constant (String "")))
464 (LetCont (k0 v2) 464 (LetCont (k0 (v2)
465 (InvokeContinuation return v2)) 465 (InvokeContinuation return (v2)))
466 (InvokeMethod v0 << v1 k0)) 466 (InvokeMethod v0 << (v1) k0)))))
467 '''), 467 '''),
468 468
469 const TestSpec(''' 469 const TestSpec('''
470 main() { 470 main() {
471 return 0 >> ""; 471 return 0 >> "";
472 } 472 }
473 ''', ''' 473 ''', '''
474 (FunctionDefinition main () return () 474 (FunctionDefinition main () return ()
475 (LetPrim v0 (Constant (Int 0))) 475 (LetPrim (v0 (Constant (Int 0)))
476 (LetPrim v1 (Constant (String ""))) 476 (LetPrim (v1 (Constant (String "")))
477 (LetCont (k0 v2) 477 (LetCont (k0 (v2)
478 (InvokeContinuation return v2)) 478 (InvokeContinuation return (v2)))
479 (InvokeMethod v0 >> v1 k0)) 479 (InvokeMethod v0 >> (v1) k0)))))
480 '''), 480 '''),
481 481
482 const TestSpec(''' 482 const TestSpec('''
483 main() { 483 main() {
484 return 0 & ""; 484 return 0 & "";
485 } 485 }
486 ''', ''' 486 ''', '''
487 (FunctionDefinition main () return () 487 (FunctionDefinition main () return ()
488 (LetPrim v0 (Constant (Int 0))) 488 (LetPrim (v0 (Constant (Int 0)))
489 (LetPrim v1 (Constant (String ""))) 489 (LetPrim (v1 (Constant (String "")))
490 (LetCont (k0 v2) 490 (LetCont (k0 (v2)
491 (InvokeContinuation return v2)) 491 (InvokeContinuation return (v2)))
492 (InvokeMethod v0 & v1 k0)) 492 (InvokeMethod v0 & (v1) k0)))))
493 '''), 493 '''),
494 494
495 const TestSpec(''' 495 const TestSpec('''
496 main() { 496 main() {
497 return 0 | ""; 497 return 0 | "";
498 } 498 }
499 ''', ''' 499 ''', '''
500 (FunctionDefinition main () return () 500 (FunctionDefinition main () return ()
501 (LetPrim v0 (Constant (Int 0))) 501 (LetPrim (v0 (Constant (Int 0)))
502 (LetPrim v1 (Constant (String ""))) 502 (LetPrim (v1 (Constant (String "")))
503 (LetCont (k0 v2) 503 (LetCont (k0 (v2)
504 (InvokeContinuation return v2)) 504 (InvokeContinuation return (v2)))
505 (InvokeMethod v0 | v1 k0)) 505 (InvokeMethod v0 | (v1) k0)))))
506 '''), 506 '''),
507 507
508 const TestSpec(''' 508 const TestSpec('''
509 main() { 509 main() {
510 return 0 ^ ""; 510 return 0 ^ "";
511 } 511 }
512 ''', ''' 512 ''', '''
513 (FunctionDefinition main () return () 513 (FunctionDefinition main () return ()
514 (LetPrim v0 (Constant (Int 0))) 514 (LetPrim (v0 (Constant (Int 0)))
515 (LetPrim v1 (Constant (String ""))) 515 (LetPrim (v1 (Constant (String "")))
516 (LetCont (k0 v2) 516 (LetCont (k0 (v2)
517 (InvokeContinuation return v2)) 517 (InvokeContinuation return (v2)))
518 (InvokeMethod v0 ^ v1 k0)) 518 (InvokeMethod v0 ^ (v1) k0)))))
519 '''), 519 '''),
520 520
521 const TestSpec(''' 521 const TestSpec('''
522 main() { 522 main() {
523 return 0 == ""; 523 return 0 == "";
524 } 524 }
525 ''', ''' 525 ''', '''
526 (FunctionDefinition main () return () 526 (FunctionDefinition main () return ()
527 (LetPrim v0 (Constant (Int 0))) 527 (LetPrim (v0 (Constant (Int 0)))
528 (LetPrim v1 (Constant (String ""))) 528 (LetPrim (v1 (Constant (String "")))
529 (LetCont (k0 v2) 529 (LetCont (k0 (v2)
530 (InvokeContinuation return v2)) 530 (InvokeContinuation return (v2)))
531 (InvokeMethod v0 == v1 k0)) 531 (InvokeMethod v0 == (v1) k0)))))
532 '''), 532 '''),
533 533
534 const TestSpec(''' 534 const TestSpec('''
535 main() { 535 main() {
536 return 0 != ""; 536 return 0 != "";
537 } 537 }
538 ''', ''' 538 ''', '''
539 (FunctionDefinition main () return () 539 (FunctionDefinition main () return ()
540 (LetPrim v0 (Constant (Int 0))) 540 (LetPrim (v0 (Constant (Int 0)))
541 (LetPrim v1 (Constant (String ""))) 541 (LetPrim (v1 (Constant (String "")))
542 (LetCont (k0 v2) 542 (LetCont (k0 (v2)
543 (LetCont (k1 v3) 543 (LetCont (k1 (v3)
544 (InvokeContinuation return v3)) 544 (InvokeContinuation return (v3)))
545 (LetCont (k2) 545 (LetCont (k2 ()
546 (LetPrim v4 (Constant (Bool false))) 546 (LetPrim (v4 (Constant (Bool false)))
547 (InvokeContinuation k1 v4)) 547 (InvokeContinuation k1 (v4))))
548 (LetCont (k3) 548 (LetCont (k3 ()
549 (LetPrim v5 (Constant (Bool true))) 549 (LetPrim (v5 (Constant (Bool true)))
550 (InvokeContinuation k1 v5)) 550 (InvokeContinuation k1 (v5))))
551 (Branch (IsTrue v2) k2 k3)) 551 (Branch (IsTrue v2) k2 k3)))))
552 (InvokeMethod v0 == v1 k0)) 552 (InvokeMethod v0 == (v1) k0)))))
Kevin Millikin (Google) 2015/01/06 08:01:52 This is a pretty good example of the difference be
553 '''), 553 '''),
554 554
555 const TestSpec(''' 555 const TestSpec('''
556 main() { 556 main() {
557 return 0 && ""; 557 return 0 && "";
558 } 558 }
559 ''', ''' 559 ''', '''
560 (FunctionDefinition main () return () 560 (FunctionDefinition main () return ()
561 (LetPrim v0 (Constant (Int 0))) 561 (LetPrim (v0 (Constant (Int 0)))
562 (LetCont (k0 v1) 562 (LetCont (k0 (v1)
563 (InvokeContinuation return v1)) 563 (InvokeContinuation return (v1)))
564 (LetCont (k1) 564 (LetCont (k1 ()
565 (LetPrim v2 (Constant (String ""))) 565 (LetPrim (v2 (Constant (String "")))
566 (LetCont (k2) 566 (LetCont (k2 ()
567 (LetPrim v3 (Constant (Bool true))) 567 (LetPrim (v3 (Constant (Bool true)))
568 (InvokeContinuation k0 v3)) 568 (InvokeContinuation k0 (v3))))
569 (LetCont (k3) 569 (LetCont (k3 ()
570 (LetPrim v4 (Constant (Bool false))) 570 (LetPrim (v4 (Constant (Bool false)))
571 (InvokeContinuation k0 v4)) 571 (InvokeContinuation k0 (v4))))
572 (Branch (IsTrue v2) k2 k3)) 572 (Branch (IsTrue v2) k2 k3)))))
573 (LetCont (k4) 573 (LetCont (k4 ()
574 (LetPrim v5 (Constant (Bool false))) 574 (LetPrim (v5 (Constant (Bool false)))
575 (InvokeContinuation k0 v5)) 575 (InvokeContinuation k0 (v5))))
576 (Branch (IsTrue v0) k1 k4)) 576 (Branch (IsTrue v0) k1 k4))))))
577 '''), 577 '''),
578 578
579 const TestSpec(''' 579 const TestSpec('''
580 main() { 580 main() {
581 return 0 || ""; 581 return 0 || "";
582 } 582 }
583 ''', ''' 583 ''', '''
584 (FunctionDefinition main () return () 584 (FunctionDefinition main () return ()
585 (LetPrim v0 (Constant (Int 0))) 585 (LetPrim (v0 (Constant (Int 0)))
586 (LetCont (k0 v1) 586 (LetCont (k0 (v1)
587 (InvokeContinuation return v1)) 587 (InvokeContinuation return (v1)))
588 (LetCont (k1) 588 (LetCont (k1 ()
589 (LetPrim v2 (Constant (Bool true))) 589 (LetPrim (v2 (Constant (Bool true)))
590 (InvokeContinuation k0 v2)) 590 (InvokeContinuation k0 (v2))))
591 (LetCont (k2) 591 (LetCont (k2 ()
592 (LetPrim v3 (Constant (String ""))) 592 (LetPrim (v3 (Constant (String "")))
593 (LetCont (k3) 593 (LetCont (k3 ()
594 (LetPrim v4 (Constant (Bool true))) 594 (LetPrim (v4 (Constant (Bool true)))
595 (InvokeContinuation k0 v4)) 595 (InvokeContinuation k0 (v4))))
596 (LetCont (k4) 596 (LetCont (k4 ()
597 (LetPrim v5 (Constant (Bool false))) 597 (LetPrim (v5 (Constant (Bool false)))
598 (InvokeContinuation k0 v5)) 598 (InvokeContinuation k0 (v5))))
599 (Branch (IsTrue v3) k3 k4)) 599 (Branch (IsTrue v3) k3 k4)))))
600 (Branch (IsTrue v0) k1 k2)) 600 (Branch (IsTrue v0) k1 k2))))))
601 '''), 601 '''),
602 602
603 const TestSpec(''' 603 const TestSpec('''
604 main() { 604 main() {
605 return 0 + "" * 2; 605 return 0 + "" * 2;
606 } 606 }
607 ''', ''' 607 ''', '''
608 (FunctionDefinition main () return () 608 (FunctionDefinition main () return ()
609 (LetPrim v0 (Constant (Int 0))) 609 (LetPrim (v0 (Constant (Int 0)))
610 (LetPrim v1 (Constant (String ""))) 610 (LetPrim (v1 (Constant (String "")))
611 (LetPrim v2 (Constant (Int 2))) 611 (LetPrim (v2 (Constant (Int 2)))
612 (LetCont (k0 v3) 612 (LetCont (k0 (v3)
613 (LetCont (k1 v4) 613 (LetCont (k1 (v4)
614 (InvokeContinuation return v4)) 614 (InvokeContinuation return (v4)))
615 (InvokeMethod v0 + v3 k1)) 615 (InvokeMethod v0 + (v3) k1)))
616 (InvokeMethod v1 * v2 k0)) 616 (InvokeMethod v1 * (v2) k0))))))
617 '''), 617 '''),
618 618
619 const TestSpec(''' 619 const TestSpec('''
620 main() { 620 main() {
621 return 0 * "" + 2; 621 return 0 * "" + 2;
622 } 622 }
623 ''', ''' 623 ''', '''
624 (FunctionDefinition main () return () 624 (FunctionDefinition main () return ()
625 (LetPrim v0 (Constant (Int 0))) 625 (LetPrim (v0 (Constant (Int 0)))
626 (LetPrim v1 (Constant (String ""))) 626 (LetPrim (v1 (Constant (String "")))
627 (LetCont (k0 v2) 627 (LetCont (k0 (v2)
628 (LetPrim v3 (Constant (Int 2))) 628 (LetPrim (v3 (Constant (Int 2)))
629 (LetCont (k1 v4) 629 (LetCont (k1 (v4)
630 (InvokeContinuation return v4)) 630 (InvokeContinuation return (v4)))
631 (InvokeMethod v2 + v3 k1)) 631 (InvokeMethod v2 + (v3) k1))))
632 (InvokeMethod v0 * v1 k0)) 632 (InvokeMethod v0 * (v1) k0)))))
633 '''), 633 '''),
634 ]), 634 ]),
635 635
636 const Group('If statement', const [ 636 const Group('If statement', const [
637 const TestSpec(''' 637 const TestSpec('''
638 main(a) { 638 main(a) {
639 if (a) { 639 if (a) {
640 print(0); 640 print(0);
641 } 641 }
642 } 642 }
643 ''', ''' 643 ''', '''
644 (FunctionDefinition main (a) return () 644 (FunctionDefinition main (a) return ()
645 (LetCont (k0) 645 (LetCont (k0 ()
646 (LetPrim v0 (Constant (Null))) 646 (LetPrim (v0 (Constant (Null)))
647 (InvokeContinuation return v0)) 647 (InvokeContinuation return (v0))))
648 (LetCont (k1) 648 (LetCont (k1 ()
649 (LetPrim v1 (Constant (Int 0))) 649 (LetPrim (v1 (Constant (Int 0)))
650 (LetCont (k2 v2) 650 (LetCont (k2 (v2)
651 (InvokeContinuation k0 )) 651 (InvokeContinuation k0 ()))
652 (InvokeStatic print v1 k2)) 652 (InvokeStatic print (v1) k2))))
653 (LetCont (k3) 653 (LetCont (k3 ()
654 (InvokeContinuation k0 )) 654 (InvokeContinuation k0 ()))
655 (Branch (IsTrue a) k1 k3)) 655 (Branch (IsTrue a) k1 k3)))))
656 '''), 656 '''),
657 657
658 const TestSpec(''' 658 const TestSpec('''
659 main(a) { 659 main(a) {
660 if (a) { 660 if (a) {
661 print(0); 661 print(0);
662 } else { 662 } else {
663 print(1); 663 print(1);
664 } 664 }
665 } 665 }
666 ''', ''' 666 ''', '''
667 (FunctionDefinition main (a) return () 667 (FunctionDefinition main (a) return ()
668 (LetCont (k0) 668 (LetCont (k0 ()
669 (LetPrim v0 (Constant (Null))) 669 (LetPrim (v0 (Constant (Null)))
670 (InvokeContinuation return v0)) 670 (InvokeContinuation return (v0))))
671 (LetCont (k1) 671 (LetCont (k1 ()
672 (LetPrim v1 (Constant (Int 0))) 672 (LetPrim (v1 (Constant (Int 0)))
673 (LetCont (k2 v2) 673 (LetCont (k2 (v2)
674 (InvokeContinuation k0 )) 674 (InvokeContinuation k0 ()))
675 (InvokeStatic print v1 k2)) 675 (InvokeStatic print (v1) k2))))
676 (LetCont (k3) 676 (LetCont (k3 ()
677 (LetPrim v3 (Constant (Int 1))) 677 (LetPrim (v3 (Constant (Int 1)))
678 (LetCont (k4 v4) 678 (LetCont (k4 (v4)
679 (InvokeContinuation k0 )) 679 (InvokeContinuation k0 ()))
680 (InvokeStatic print v3 k4)) 680 (InvokeStatic print (v3) k4))))
681 (Branch (IsTrue a) k1 k3)) 681 (Branch (IsTrue a) k1 k3)))))
682 '''), 682 '''),
683 683
684 const TestSpec(''' 684 const TestSpec('''
685 main(a) { 685 main(a) {
686 if (a) { 686 if (a) {
687 print(0); 687 print(0);
688 } else { 688 } else {
689 print(1); 689 print(1);
690 print(2); 690 print(2);
691 } 691 }
692 } 692 }
693 ''', ''' 693 ''', '''
694 (FunctionDefinition main (a) return () 694 (FunctionDefinition main (a) return ()
695 (LetCont (k0) 695 (LetCont (k0 ()
696 (LetPrim v0 (Constant (Null))) 696 (LetPrim (v0 (Constant (Null)))
697 (InvokeContinuation return v0)) 697 (InvokeContinuation return (v0))))
698 (LetCont (k1) 698 (LetCont (k1 ()
699 (LetPrim v1 (Constant (Int 0))) 699 (LetPrim (v1 (Constant (Int 0)))
700 (LetCont (k2 v2) 700 (LetCont (k2 (v2)
701 (InvokeContinuation k0 )) 701 (InvokeContinuation k0 ()))
702 (InvokeStatic print v1 k2)) 702 (InvokeStatic print (v1) k2))))
703 (LetCont (k3) 703 (LetCont (k3 ()
704 (LetPrim v3 (Constant (Int 1))) 704 (LetPrim (v3 (Constant (Int 1)))
705 (LetCont (k4 v4) 705 (LetCont (k4 (v4)
706 (LetPrim v5 (Constant (Int 2))) 706 (LetPrim (v5 (Constant (Int 2)))
707 (LetCont (k5 v6) 707 (LetCont (k5 (v6)
708 (InvokeContinuation k0 )) 708 (InvokeContinuation k0 ()))
709 (InvokeStatic print v5 k5)) 709 (InvokeStatic print (v5) k5))))
710 (InvokeStatic print v3 k4)) 710 (InvokeStatic print (v3) k4))))
711 (Branch (IsTrue a) k1 k3)) 711 (Branch (IsTrue a) k1 k3)))))
712 '''), 712 '''),
713 ]), 713 ]),
714 714
715 const Group('Conditional expression', const [ 715 const Group('Conditional expression', const [
716 const TestSpec(''' 716 const TestSpec('''
717 main(a) { 717 main(a) {
718 return a ? print(0) : print(1); 718 return a ? print(0) : print(1);
719 } 719 }
720 ''', ''' 720 ''', '''
721 (FunctionDefinition main (a) return () 721 (FunctionDefinition main (a) return ()
722 (LetCont (k0 v0) 722 (LetCont (k0 (v0)
723 (InvokeContinuation return v0)) 723 (InvokeContinuation return (v0)))
724 (LetCont (k1) 724 (LetCont (k1 ()
725 (LetPrim v1 (Constant (Int 0))) 725 (LetPrim (v1 (Constant (Int 0)))
726 (LetCont (k2 v2) 726 (LetCont (k2 (v2)
727 (InvokeContinuation k0 v2)) 727 (InvokeContinuation k0 (v2)))
728 (InvokeStatic print v1 k2)) 728 (InvokeStatic print (v1) k2))))
729 (LetCont (k3) 729 (LetCont (k3 ()
730 (LetPrim v3 (Constant (Int 1))) 730 (LetPrim (v3 (Constant (Int 1)))
731 (LetCont (k4 v4) 731 (LetCont (k4 (v4)
732 (InvokeContinuation k0 v4)) 732 (InvokeContinuation k0 (v4)))
733 (InvokeStatic print v3 k4)) 733 (InvokeStatic print (v3) k4))))
734 (Branch (IsTrue a) k1 k3)) 734 (Branch (IsTrue a) k1 k3)))))
735 '''), 735 '''),
736 ]), 736 ]),
737 737
738 738
739 // These test that unreachable statements are skipped within a block. 739 // These test that unreachable statements are skipped within a block.
740 const Group('Block statements', const <TestSpec>[ 740 const Group('Block statements', const <TestSpec>[
741 const TestSpec(''' 741 const TestSpec('''
742 main(a) { 742 main(a) {
743 return 0; 743 return 0;
744 return 1; 744 return 1;
745 } 745 }
746 ''', ''' 746 ''', '''
747 (FunctionDefinition main (a) return () 747 (FunctionDefinition main (a) return ()
748 (LetPrim v0 (Constant (Int 0))) 748 (LetPrim (v0 (Constant (Int 0)))
749 (InvokeContinuation return v0)) 749 (InvokeContinuation return (v0))))
750 '''), 750 '''),
751 751
752 const TestSpec(''' 752 const TestSpec('''
753 main(a) { 753 main(a) {
754 if (a) { 754 if (a) {
755 return 0; 755 return 0;
756 return 1; 756 return 1;
757 } else { 757 } else {
758 return 2; 758 return 2;
759 return 3; 759 return 3;
760 } 760 }
761 } 761 }
762 ''', ''' 762 ''', '''
763 (FunctionDefinition main (a) return () 763 (FunctionDefinition main (a) return ()
764 (LetCont (k0) 764 (LetCont (k0 ()
765 (LetPrim v0 (Constant (Int 0))) 765 (LetPrim (v0 (Constant (Int 0)))
766 (InvokeContinuation return v0)) 766 (InvokeContinuation return (v0))))
767 (LetCont (k1) 767 (LetCont (k1 ()
768 (LetPrim v1 (Constant (Int 2))) 768 (LetPrim (v1 (Constant (Int 2)))
769 (InvokeContinuation return v1)) 769 (InvokeContinuation return (v1))))
770 (Branch (IsTrue a) k0 k1)) 770 (Branch (IsTrue a) k0 k1))))
771 '''), 771 '''),
772 772
773 const TestSpec(''' 773 const TestSpec('''
774 main(a) { 774 main(a) {
775 if (a) { 775 if (a) {
776 print(0); 776 print(0);
777 return 0; 777 return 0;
778 return 1; 778 return 1;
779 } else { 779 } else {
780 print(2); 780 print(2);
781 return 2; 781 return 2;
782 return 3; 782 return 3;
783 } 783 }
784 } 784 }
785 ''', ''' 785 ''', '''
786 (FunctionDefinition main (a) return () 786 (FunctionDefinition main (a) return ()
787 (LetCont (k0) 787 (LetCont (k0 ()
788 (LetPrim v0 (Constant (Int 0))) 788 (LetPrim (v0 (Constant (Int 0)))
789 (LetCont (k1 v1) 789 (LetCont (k1 (v1)
790 (LetPrim v2 (Constant (Int 0))) 790 (LetPrim (v2 (Constant (Int 0)))
791 (InvokeContinuation return v2)) 791 (InvokeContinuation return (v2))))
792 (InvokeStatic print v0 k1)) 792 (InvokeStatic print (v0) k1))))
793 (LetCont (k2) 793 (LetCont (k2 ()
794 (LetPrim v3 (Constant (Int 2))) 794 (LetPrim (v3 (Constant (Int 2)))
795 (LetCont (k3 v4) 795 (LetCont (k3 (v4)
796 (LetPrim v5 (Constant (Int 2))) 796 (LetPrim (v5 (Constant (Int 2)))
797 (InvokeContinuation return v5)) 797 (InvokeContinuation return (v5))))
798 (InvokeStatic print v3 k3)) 798 (InvokeStatic print (v3) k3))))
799 (Branch (IsTrue a) k0 k2)) 799 (Branch (IsTrue a) k0 k2))))
800 '''), 800 '''),
801 ]), 801 ]),
802 802
803 const Group('Constructor invocation', const <TestSpec>[ 803 const Group('Constructor invocation', const <TestSpec>[
804 const TestSpec(''' 804 const TestSpec('''
805 main(a) { 805 main(a) {
806 new Object(); 806 new Object();
807 } 807 }
808 ''', ''' 808 ''', '''
809 (FunctionDefinition main (a) return () 809 (FunctionDefinition main (a) return ()
810 (LetCont (k0 v0) 810 (LetCont (k0 (v0)
811 (LetPrim v1 (Constant (Null))) 811 (LetPrim (v1 (Constant (Null)))
812 (InvokeContinuation return v1)) 812 (InvokeContinuation return (v1))))
813 (InvokeConstructor Object k0)) 813 (InvokeConstructor Object () k0)))
814 '''), 814 '''),
815 815
816 const TestSpec(''' 816 const TestSpec('''
817 main(a) { 817 main(a) {
818 new Deprecated(""); 818 new Deprecated("");
819 } 819 }
820 ''', ''' 820 ''', '''
821 (FunctionDefinition main (a) return () 821 (FunctionDefinition main (a) return ()
822 (LetPrim v0 (Constant (String ""))) 822 (LetPrim (v0 (Constant (String "")))
823 (LetCont (k0 v1) 823 (LetCont (k0 (v1)
824 (LetPrim v2 (Constant (Null))) 824 (LetPrim (v2 (Constant (Null)))
825 (InvokeContinuation return v2)) 825 (InvokeContinuation return (v2))))
826 (InvokeConstructor Deprecated v0 k0)) 826 (InvokeConstructor Deprecated (v0) k0))))
827 '''), 827 '''),
828 ]), 828 ]),
829 829
830 const Group('List literal', const <TestSpec>[ 830 const Group('List literal', const <TestSpec>[
831 const TestSpec(''' 831 const TestSpec('''
832 main() { 832 main() {
833 return []; 833 return [];
834 } 834 }
835 ''', ''' 835 ''', '''
836 (FunctionDefinition main () return () 836 (FunctionDefinition main () return ()
837 (LetPrim v0 (LiteralList ())) 837 (LetPrim (v0 (LiteralList ()))
838 (InvokeContinuation return v0)) 838 (InvokeContinuation return (v0))))
839 '''), 839 '''),
840 840
841 const TestSpec(''' 841 const TestSpec('''
842 main() { 842 main() {
843 return [0]; 843 return [0];
844 } 844 }
845 ''', ''' 845 ''', '''
846 (FunctionDefinition main () return () 846 (FunctionDefinition main () return ()
847 (LetPrim v0 (Constant (Int 0))) 847 (LetPrim (v0 (Constant (Int 0)))
848 (LetPrim v1 (LiteralList (v0))) 848 (LetPrim (v1 (LiteralList (v0)))
849 (InvokeContinuation return v1)) 849 (InvokeContinuation return (v1)))))
850 '''), 850 '''),
851 851
852 const TestSpec(''' 852 const TestSpec('''
853 main(a) { 853 main(a) {
854 return [0, 1, a]; 854 return [0, 1, a];
855 } 855 }
856 ''', ''' 856 ''', '''
857 (FunctionDefinition main (a) return () 857 (FunctionDefinition main (a) return ()
858 (LetPrim v0 (Constant (Int 0))) 858 (LetPrim (v0 (Constant (Int 0)))
859 (LetPrim v1 (Constant (Int 1))) 859 (LetPrim (v1 (Constant (Int 1)))
860 (LetPrim v2 (LiteralList (v0 v1 a))) 860 (LetPrim (v2 (LiteralList (v0 v1 a)))
861 (InvokeContinuation return v2)) 861 (InvokeContinuation return (v2))))))
862 '''), 862 '''),
863 863
864 const TestSpec(''' 864 const TestSpec('''
865 main(a) { 865 main(a) {
866 return [0, [1], [a, [3]]]; 866 return [0, [1], [a, [3]]];
867 } 867 }
868 ''', ''' 868 ''', '''
869 (FunctionDefinition main (a) return () 869 (FunctionDefinition main (a) return ()
870 (LetPrim v0 (Constant (Int 0))) 870 (LetPrim (v0 (Constant (Int 0)))
871 (LetPrim v1 (Constant (Int 1))) 871 (LetPrim (v1 (Constant (Int 1)))
872 (LetPrim v2 (LiteralList (v1))) 872 (LetPrim (v2 (LiteralList (v1)))
873 (LetPrim v3 (Constant (Int 3))) 873 (LetPrim (v3 (Constant (Int 3)))
874 (LetPrim v4 (LiteralList (v3))) 874 (LetPrim (v4 (LiteralList (v3)))
875 (LetPrim v5 (LiteralList (a v4))) 875 (LetPrim (v5 (LiteralList (a v4)))
876 (LetPrim v6 (LiteralList (v0 v2 v5))) 876 (LetPrim (v6 (LiteralList (v0 v2 v5)))
877 (InvokeContinuation return v6)) 877 (InvokeContinuation return (v6))))))))))
878 '''), 878 '''),
879 ]), 879 ]),
880 880
881 const Group('Map literal', const <TestSpec>[ 881 const Group('Map literal', const <TestSpec>[
882 const TestSpec(''' 882 const TestSpec('''
883 main() { 883 main() {
884 return {}; 884 return {};
885 } 885 }
886 ''', ''' 886 ''', '''
887 (FunctionDefinition main () return () 887 (FunctionDefinition main () return ()
888 (LetPrim v0 (LiteralMap () ())) 888 (LetPrim (v0 (LiteralMap () ()))
889 (InvokeContinuation return v0)) 889 (InvokeContinuation return (v0))))
890 '''), 890 '''),
891 891
892 const TestSpec(''' 892 const TestSpec('''
893 main() { 893 main() {
894 return {"a": 0}; 894 return {"a": 0};
895 } 895 }
896 ''', ''' 896 ''', '''
897 (FunctionDefinition main () return () 897 (FunctionDefinition main () return ()
898 (LetPrim v0 (Constant (String "a"))) 898 (LetPrim (v0 (Constant (String "a")))
899 (LetPrim v1 (Constant (Int 0))) 899 (LetPrim (v1 (Constant (Int 0)))
900 (LetPrim v2 (LiteralMap (v0) (v1))) 900 (LetPrim (v2 (LiteralMap (v0) (v1)))
901 (InvokeContinuation return v2)) 901 (InvokeContinuation return (v2))))))
902 '''), 902 '''),
903 903
904 const TestSpec(''' 904 const TestSpec('''
905 main(a) { 905 main(a) {
906 return {"a": 0, "b": 1, "c": a}; 906 return {"a": 0, "b": 1, "c": a};
907 } 907 }
908 ''', ''' 908 ''', '''
909 (FunctionDefinition main (a) return () 909 (FunctionDefinition main (a) return ()
910 (LetPrim v0 (Constant (String "a"))) 910 (LetPrim (v0 (Constant (String "a")))
911 (LetPrim v1 (Constant (Int 0))) 911 (LetPrim (v1 (Constant (Int 0)))
912 (LetPrim v2 (Constant (String "b"))) 912 (LetPrim (v2 (Constant (String "b")))
913 (LetPrim v3 (Constant (Int 1))) 913 (LetPrim (v3 (Constant (Int 1)))
914 (LetPrim v4 (Constant (String "c"))) 914 (LetPrim (v4 (Constant (String "c")))
915 (LetPrim v5 (LiteralMap (v0 v2 v4) (v1 v3 a))) 915 (LetPrim (v5 (LiteralMap (v0 v2 v4) (v1 v3 a)))
916 (InvokeContinuation return v5)) 916 (InvokeContinuation return (v5)))))))))
917 '''), 917 '''),
918 918
919 const TestSpec(''' 919 const TestSpec('''
920 main(a) { 920 main(a) {
921 return {0: "a", 1: {2: "b"}, a: {3: "c"}}; 921 return {0: "a", 1: {2: "b"}, a: {3: "c"}};
922 } 922 }
923 ''', ''' 923 ''', '''
924 (FunctionDefinition main (a) return () 924 (FunctionDefinition main (a) return ()
925 (LetPrim v0 (Constant (Int 0))) 925 (LetPrim (v0 (Constant (Int 0)))
926 (LetPrim v1 (Constant (String "a"))) 926 (LetPrim (v1 (Constant (String "a")))
927 (LetPrim v2 (Constant (Int 1))) 927 (LetPrim (v2 (Constant (Int 1)))
928 (LetPrim v3 (Constant (Int 2))) 928 (LetPrim (v3 (Constant (Int 2)))
929 (LetPrim v4 (Constant (String "b"))) 929 (LetPrim (v4 (Constant (String "b")))
930 (LetPrim v5 (LiteralMap (v3) (v4))) 930 (LetPrim (v5 (LiteralMap (v3) (v4)))
931 (LetPrim v6 (Constant (Int 3))) 931 (LetPrim (v6 (Constant (Int 3)))
932 (LetPrim v7 (Constant (String "c"))) 932 (LetPrim (v7 (Constant (String "c")))
933 (LetPrim v8 (LiteralMap (v6) (v7))) 933 (LetPrim (v8 (LiteralMap (v6) (v7)))
934 (LetPrim v9 (LiteralMap (v0 v2 a) (v1 v5 v8))) 934 (LetPrim (v9 (LiteralMap (v0 v2 a) (v1 v5 v8)))
935 (InvokeContinuation return v9)) 935 (InvokeContinuation return (v9)))))))))))))
Kevin Millikin (Google) 2015/01/06 08:01:52 And here is an expression that runs away to the ri
asgerf 2015/01/06 12:46:07 I think it's OK since we have the IR tracer to see
936 '''), 936 '''),
937 ]), 937 ]),
938 938
939 const Group('For loop', const <TestSpec>[ 939 const Group('For loop', const <TestSpec>[
940 const TestSpec(''' 940 const TestSpec('''
941 main() { 941 main() {
942 for (;;) {} 942 for (;;) {}
943 } 943 }
944 ''', ''' 944 ''', '''
945 (FunctionDefinition main () return () 945 (FunctionDefinition main () return ()
946 (LetCont* (k0) 946 (LetCont* (k0 ()
947 (LetPrim v0 (Constant (Bool true))) 947 (LetPrim (v0 (Constant (Bool true)))
948 (LetCont (k1) 948 (LetCont (k1 ()
949 (LetPrim v1 (Constant (Null))) 949 (LetPrim (v1 (Constant (Null)))
950 (InvokeContinuation return v1)) 950 (InvokeContinuation return (v1))))
951 (LetCont (k2) 951 (LetCont (k2 ()
952 (InvokeContinuation* k0 )) 952 (InvokeContinuation* k0 ()))
953 (Branch (IsTrue v0) k2 k1)) 953 (Branch (IsTrue v0) k2 k1)))))
954 (InvokeContinuation k0 )) 954 (InvokeContinuation k0 ())))
955 '''), 955 '''),
956 956
957 const TestSpec(''' 957 const TestSpec('''
958 main() { 958 main() {
959 for (var i = 0; i < 10; i = i + 1) { 959 for (var i = 0; i < 10; i = i + 1) {
960 print(i); 960 print(i);
961 } 961 }
962 } 962 }
963 ''', ''' 963 ''', '''
964 (FunctionDefinition main () return () 964 (FunctionDefinition main () return ()
965 (LetPrim v0 (Constant (Int 0))) 965 (LetPrim (v0 (Constant (Int 0)))
966 (LetCont* (k0 v1) 966 (LetCont* (k0 (v1)
967 (LetPrim v2 (Constant (Int 10))) 967 (LetPrim (v2 (Constant (Int 10)))
968 (LetCont (k1 v3) 968 (LetCont (k1 (v3)
969 (LetCont (k2) 969 (LetCont (k2 ()
970 (LetPrim v4 (Constant (Null))) 970 (LetPrim (v4 (Constant (Null)))
971 (InvokeContinuation return v4)) 971 (InvokeContinuation return (v4))))
972 (LetCont (k3) 972 (LetCont (k3 ()
973 (LetCont (k4 v5) 973 (LetCont (k4 (v5)
974 (LetPrim v6 (Constant (Int 1))) 974 (LetPrim (v6 (Constant (Int 1)))
975 (LetCont (k5 v7) 975 (LetCont (k5 (v7)
976 (InvokeContinuation* k0 v7)) 976 (InvokeContinuation* k0 (v7)))
977 (InvokeMethod v1 + v6 k5)) 977 (InvokeMethod v1 + (v6) k5))))
978 (InvokeStatic print v1 k4)) 978 (InvokeStatic print (v1) k4)))
979 (Branch (IsTrue v3) k3 k2)) 979 (Branch (IsTrue v3) k3 k2))))
980 (InvokeMethod v1 < v2 k1)) 980 (InvokeMethod v1 < (v2) k1))))
981 (InvokeContinuation k0 v0)) 981 (InvokeContinuation k0 (v0)))))
982 '''), 982 '''),
983 983
984 const TestSpec(''' 984 const TestSpec('''
985 main(i) { 985 main(i) {
986 for (i = 0; i < 10; i = i + 1) { 986 for (i = 0; i < 10; i = i + 1) {
987 print(i); 987 print(i);
988 } 988 }
989 } 989 }
990 ''', ''' 990 ''', '''
991 (FunctionDefinition main (i) return () 991 (FunctionDefinition main (i) return ()
992 (LetPrim v0 (Constant (Int 0))) 992 (LetPrim (v0 (Constant (Int 0)))
993 (LetCont* (k0 v1) 993 (LetCont* (k0 (v1)
994 (LetPrim v2 (Constant (Int 10))) 994 (LetPrim (v2 (Constant (Int 10)))
995 (LetCont (k1 v3) 995 (LetCont (k1 (v3)
996 (LetCont (k2) 996 (LetCont (k2 ()
997 (LetPrim v4 (Constant (Null))) 997 (LetPrim (v4 (Constant (Null)))
998 (InvokeContinuation return v4)) 998 (InvokeContinuation return (v4))))
999 (LetCont (k3) 999 (LetCont (k3 ()
1000 (LetCont (k4 v5) 1000 (LetCont (k4 (v5)
1001 (LetPrim v6 (Constant (Int 1))) 1001 (LetPrim (v6 (Constant (Int 1)))
1002 (LetCont (k5 v7) 1002 (LetCont (k5 (v7)
1003 (InvokeContinuation* k0 v7)) 1003 (InvokeContinuation* k0 (v7)))
1004 (InvokeMethod v1 + v6 k5)) 1004 (InvokeMethod v1 + (v6) k5))))
1005 (InvokeStatic print v1 k4)) 1005 (InvokeStatic print (v1) k4)))
1006 (Branch (IsTrue v3) k3 k2)) 1006 (Branch (IsTrue v3) k3 k2))))
1007 (InvokeMethod v1 < v2 k1)) 1007 (InvokeMethod v1 < (v2) k1))))
1008 (InvokeContinuation k0 v0)) 1008 (InvokeContinuation k0 (v0)))))
1009 '''), 1009 '''),
1010 ]), 1010 ]),
1011 1011
1012 const Group('While loop', const <TestSpec>[ 1012 const Group('While loop', const <TestSpec>[
1013 const TestSpec(''' 1013 const TestSpec('''
1014 main() { 1014 main() {
1015 while (true) {} 1015 while (true) {}
1016 } 1016 }
1017 ''', ''' 1017 ''', '''
1018 (FunctionDefinition main () return () 1018 (FunctionDefinition main () return ()
1019 (LetCont* (k0) 1019 (LetCont* (k0 ()
1020 (LetPrim v0 (Constant (Bool true))) 1020 (LetPrim (v0 (Constant (Bool true)))
1021 (LetCont (k1) 1021 (LetCont (k1 ()
1022 (LetPrim v1 (Constant (Null))) 1022 (LetPrim (v1 (Constant (Null)))
1023 (InvokeContinuation return v1)) 1023 (InvokeContinuation return (v1))))
1024 (LetCont (k2) 1024 (LetCont (k2 ()
1025 (InvokeContinuation* k0 )) 1025 (InvokeContinuation* k0 ()))
1026 (Branch (IsTrue v0) k2 k1)) 1026 (Branch (IsTrue v0) k2 k1)))))
1027 (InvokeContinuation k0 )) 1027 (InvokeContinuation k0 ())))
1028 '''), 1028 '''),
1029 1029
1030 const TestSpec(''' 1030 const TestSpec('''
1031 main() { 1031 main() {
1032 var i = 0; 1032 var i = 0;
1033 while (i < 10) { 1033 while (i < 10) {
1034 print(i); 1034 print(i);
1035 i = i + 1; 1035 i = i + 1;
1036 } 1036 }
1037 } 1037 }
1038 ''', ''' 1038 ''', '''
1039 (FunctionDefinition main () return () 1039 (FunctionDefinition main () return ()
1040 (LetPrim v0 (Constant (Int 0))) 1040 (LetPrim (v0 (Constant (Int 0)))
1041 (LetCont* (k0 v1) 1041 (LetCont* (k0 (v1)
1042 (LetPrim v2 (Constant (Int 10))) 1042 (LetPrim (v2 (Constant (Int 10)))
1043 (LetCont (k1 v3) 1043 (LetCont (k1 (v3)
1044 (LetCont (k2) 1044 (LetCont (k2 ()
1045 (LetPrim v4 (Constant (Null))) 1045 (LetPrim (v4 (Constant (Null)))
1046 (InvokeContinuation return v4)) 1046 (InvokeContinuation return (v4))))
1047 (LetCont (k3) 1047 (LetCont (k3 ()
1048 (LetCont (k4 v5) 1048 (LetCont (k4 (v5)
1049 (LetPrim v6 (Constant (Int 1))) 1049 (LetPrim (v6 (Constant (Int 1)))
1050 (LetCont (k5 v7) 1050 (LetCont (k5 (v7)
1051 (InvokeContinuation* k0 v7)) 1051 (InvokeContinuation* k0 (v7)))
1052 (InvokeMethod v1 + v6 k5)) 1052 (InvokeMethod v1 + (v6) k5))))
1053 (InvokeStatic print v1 k4)) 1053 (InvokeStatic print (v1) k4)))
1054 (Branch (IsTrue v3) k3 k2)) 1054 (Branch (IsTrue v3) k3 k2))))
1055 (InvokeMethod v1 < v2 k1)) 1055 (InvokeMethod v1 < (v2) k1))))
1056 (InvokeContinuation k0 v0)) 1056 (InvokeContinuation k0 (v0)))))
1057 '''), 1057 '''),
1058 ]), 1058 ]),
1059 1059
1060 const Group('Type operators', const <TestSpec>[ 1060 const Group('Type operators', const <TestSpec>[
1061 const TestSpec(''' 1061 const TestSpec('''
1062 main(a) { 1062 main(a) {
1063 return a is String; 1063 return a is String;
1064 } 1064 }
1065 ''', ''' 1065 ''', '''
1066 (FunctionDefinition main (a) return () 1066 (FunctionDefinition main (a) return ()
1067 (LetCont (k0 v0) 1067 (LetCont (k0 (v0)
1068 (InvokeContinuation return v0)) 1068 (InvokeContinuation return (v0)))
1069 (TypeOperator is a String k0)) 1069 (TypeOperator is a String k0)))
1070 '''), 1070 '''),
1071 1071
1072 const TestSpec(''' 1072 const TestSpec('''
1073 main(a) { 1073 main(a) {
1074 return a is List<String>; 1074 return a is List<String>;
1075 } 1075 }
1076 ''', ''' 1076 ''', '''
1077 (FunctionDefinition main (a) return () 1077 (FunctionDefinition main (a) return ()
1078 (LetCont (k0 v0) 1078 (LetCont (k0 (v0)
1079 (InvokeContinuation return v0)) 1079 (InvokeContinuation return (v0)))
1080 (TypeOperator is a List<String> k0)) 1080 (TypeOperator is a List<String> k0)))
1081 '''), 1081 '''),
1082 1082
1083 const TestSpec(''' 1083 const TestSpec('''
1084 main(a) { 1084 main(a) {
1085 return a is Comparator<String>; 1085 return a is Comparator<String>;
1086 } 1086 }
1087 ''', ''' 1087 ''', '''
1088 (FunctionDefinition main (a) return () 1088 (FunctionDefinition main (a) return ()
1089 (LetCont (k0 v0) 1089 (LetCont (k0 (v0)
1090 (InvokeContinuation return v0)) 1090 (InvokeContinuation return (v0)))
1091 (TypeOperator is a Comparator<String> k0)) 1091 (TypeOperator is a Comparator<String> k0)))
1092 '''), 1092 '''),
1093 1093
1094 const TestSpec(''' 1094 const TestSpec('''
1095 main(a) { 1095 main(a) {
1096 return a is! String; 1096 return a is! String;
1097 } 1097 }
1098 ''', ''' 1098 ''', '''
1099 (FunctionDefinition main (a) return () 1099 (FunctionDefinition main (a) return ()
1100 (LetCont (k0 v0) 1100 (LetCont (k0 (v0)
1101 (LetCont (k1 v1) 1101 (LetCont (k1 (v1)
1102 (InvokeContinuation return v1)) 1102 (InvokeContinuation return (v1)))
1103 (LetCont (k2) 1103 (LetCont (k2 ()
1104 (LetPrim v2 (Constant (Bool false))) 1104 (LetPrim (v2 (Constant (Bool false)))
1105 (InvokeContinuation k1 v2)) 1105 (InvokeContinuation k1 (v2))))
1106 (LetCont (k3) 1106 (LetCont (k3 ()
1107 (LetPrim v3 (Constant (Bool true))) 1107 (LetPrim (v3 (Constant (Bool true)))
1108 (InvokeContinuation k1 v3)) 1108 (InvokeContinuation k1 (v3))))
1109 (Branch (IsTrue v0) k2 k3)) 1109 (Branch (IsTrue v0) k2 k3)))))
1110 (TypeOperator is a String k0)) 1110 (TypeOperator is a String k0)))
1111 '''), 1111 '''),
1112 1112
1113 const TestSpec(''' 1113 const TestSpec('''
1114 main(a) { 1114 main(a) {
1115 return a as String; 1115 return a as String;
1116 } 1116 }
1117 ''', ''' 1117 ''', '''
1118 (FunctionDefinition main (a) return () 1118 (FunctionDefinition main (a) return ()
1119 (LetCont (k0 v0) 1119 (LetCont (k0 (v0)
1120 (InvokeContinuation return v0)) 1120 (InvokeContinuation return (v0)))
1121 (TypeOperator as a String k0)) 1121 (TypeOperator as a String k0)))
1122 '''), 1122 '''),
1123 ]), 1123 ]),
1124 1124
1125 const Group('For in loop', const <TestSpec>[ 1125 const Group('For in loop', const <TestSpec>[
1126 // TODO(johnniwinther): Add tests for `i` as top-level, static and instance 1126 // TODO(johnniwinther): Add tests for `i` as top-level, static and instance
1127 // fields. 1127 // fields.
1128 const TestSpec(''' 1128 const TestSpec('''
1129 main(a) { 1129 main(a) {
1130 for (var i in a) { 1130 for (var i in a) {
1131 print(i); 1131 print(i);
1132 } 1132 }
1133 } 1133 }
1134 ''', ''' 1134 ''', '''
1135 (FunctionDefinition main (a) return () 1135 (FunctionDefinition main (a) return ()
1136 (LetCont (k0 v0) 1136 (LetCont (k0 (v0)
1137 (LetCont* (k1 v1) 1137 (LetCont* (k1 (v1)
1138 (LetCont (k2 v2) 1138 (LetCont (k2 (v2)
1139 (LetCont (k3) 1139 (LetCont (k3 ()
1140 (LetPrim v3 (Constant (Null))) 1140 (LetPrim (v3 (Constant (Null)))
1141 (InvokeContinuation return v3)) 1141 (InvokeContinuation return (v3))))
1142 (LetCont (k4) 1142 (LetCont (k4 ()
1143 (LetPrim v4 (Constant (Null))) 1143 (LetPrim (v4 (Constant (Null)))
1144 (LetCont (k5 v5) 1144 (LetCont (k5 (v5)
1145 (LetCont (k6 v6) 1145 (LetCont (k6 (v6)
1146 (InvokeContinuation* k1 v1)) 1146 (InvokeContinuation* k1 (v1)))
1147 (InvokeStatic print v5 k6)) 1147 (InvokeStatic print (v5) k6)))
1148 (InvokeMethod v0 current k5)) 1148 (InvokeMethod v0 current () k5))))
1149 (Branch (IsTrue v2) k4 k3)) 1149 (Branch (IsTrue v2) k4 k3))))
1150 (InvokeMethod v0 moveNext k2)) 1150 (InvokeMethod v0 moveNext () k2)))
1151 (InvokeContinuation k1 a)) 1151 (InvokeContinuation k1 (a))))
1152 (InvokeMethod a iterator k0)) 1152 (InvokeMethod a iterator () k0)))
1153 '''), 1153 '''),
1154 1154
1155 const TestSpec(''' 1155 const TestSpec('''
1156 main(a) { 1156 main(a) {
1157 for (var i in a) { 1157 for (var i in a) {
1158 print(i); 1158 print(i);
1159 i = 0; 1159 i = 0;
1160 print(i); 1160 print(i);
1161 } 1161 }
1162 } 1162 }
1163 ''', ''' 1163 ''', '''
1164 (FunctionDefinition main (a) return () 1164 (FunctionDefinition main (a) return ()
1165 (LetCont (k0 v0) 1165 (LetCont (k0 (v0)
1166 (LetCont* (k1 v1) 1166 (LetCont* (k1 (v1)
1167 (LetCont (k2 v2) 1167 (LetCont (k2 (v2)
1168 (LetCont (k3) 1168 (LetCont (k3 ()
1169 (LetPrim v3 (Constant (Null))) 1169 (LetPrim (v3 (Constant (Null)))
1170 (InvokeContinuation return v3)) 1170 (InvokeContinuation return (v3))))
1171 (LetCont (k4) 1171 (LetCont (k4 ()
1172 (LetPrim v4 (Constant (Null))) 1172 (LetPrim (v4 (Constant (Null)))
1173 (LetCont (k5 v5) 1173 (LetCont (k5 (v5)
1174 (LetCont (k6 v6) 1174 (LetCont (k6 (v6)
1175 (LetPrim v7 (Constant (Int 0))) 1175 (LetPrim (v7 (Constant (Int 0)))
1176 (LetCont (k7 v8) 1176 (LetCont (k7 (v8)
1177 (InvokeContinuation* k1 v1)) 1177 (InvokeContinuation* k1 (v1)))
1178 (InvokeStatic print v7 k7)) 1178 (InvokeStatic print (v7) k7))))
1179 (InvokeStatic print v5 k6)) 1179 (InvokeStatic print (v5) k6)))
1180 (InvokeMethod v0 current k5)) 1180 (InvokeMethod v0 current () k5))))
1181 (Branch (IsTrue v2) k4 k3)) 1181 (Branch (IsTrue v2) k4 k3))))
1182 (InvokeMethod v0 moveNext k2)) 1182 (InvokeMethod v0 moveNext () k2)))
1183 (InvokeContinuation k1 a)) 1183 (InvokeContinuation k1 (a))))
1184 (InvokeMethod a iterator k0)) 1184 (InvokeMethod a iterator () k0)))
1185 '''), 1185 '''),
1186 1186
1187 const TestSpec(''' 1187 const TestSpec('''
1188 main(a) { 1188 main(a) {
1189 var i; 1189 var i;
1190 for (i in a) { 1190 for (i in a) {
1191 print(i); 1191 print(i);
1192 } 1192 }
1193 } 1193 }
1194 ''', ''' 1194 ''', '''
1195 (FunctionDefinition main (a) return () 1195 (FunctionDefinition main (a) return ()
1196 (LetPrim v0 (Constant (Null))) 1196 (LetPrim (v0 (Constant (Null)))
1197 (LetCont (k0 v1) 1197 (LetCont (k0 (v1)
1198 (LetCont* (k1 v2 v3) 1198 (LetCont* (k1 (v2 v3)
1199 (LetCont (k2 v4) 1199 (LetCont (k2 (v4)
1200 (LetCont (k3) 1200 (LetCont (k3 ()
1201 (LetPrim v5 (Constant (Null))) 1201 (LetPrim (v5 (Constant (Null)))
1202 (InvokeContinuation return v5)) 1202 (InvokeContinuation return (v5))))
1203 (LetCont (k4) 1203 (LetCont (k4 ()
1204 (LetCont (k5 v6) 1204 (LetCont (k5 (v6)
1205 (LetCont (k6 v7) 1205 (LetCont (k6 (v7)
1206 (InvokeContinuation* k1 v2 v6)) 1206 (InvokeContinuation* k1 (v2 v6)))
1207 (InvokeStatic print v6 k6)) 1207 (InvokeStatic print (v6) k6)))
1208 (InvokeMethod v1 current k5)) 1208 (InvokeMethod v1 current () k5)))
1209 (Branch (IsTrue v4) k4 k3)) 1209 (Branch (IsTrue v4) k4 k3))))
1210 (InvokeMethod v1 moveNext k2)) 1210 (InvokeMethod v1 moveNext () k2)))
1211 (InvokeContinuation k1 a v0)) 1211 (InvokeContinuation k1 (a v0))))
1212 (InvokeMethod a iterator k0)) 1212 (InvokeMethod a iterator () k0))))
1213 '''), 1213 '''),
1214 ]), 1214 ]),
1215 1215
1216 const Group('Local functions', const <TestSpec>[ 1216 const Group('Local functions', const <TestSpec>[
1217 const TestSpec(''' 1217 const TestSpec('''
1218 main(a) { 1218 main(a) {
1219 local() {} 1219 local() {}
1220 return local(); 1220 return local();
1221 } 1221 }
1222 ''', ''' 1222 ''', '''
1223 (FunctionDefinition main (a) return () 1223 (FunctionDefinition main (a) return ()
1224 (LetPrim v0 (CreateFunction 1224 (LetPrim (v0 (CreateFunction
1225 (FunctionDefinition local () return () 1225 (FunctionDefinition local () return ()
1226 (LetPrim v1 (Constant (Null))) 1226 (LetPrim (v1 (Constant (Null)))
1227 (InvokeContinuation return v1)))) 1227 (InvokeContinuation return (v1))))))
1228 (LetCont (k0 v2) 1228 (LetCont (k0 (v2)
1229 (InvokeContinuation return v2)) 1229 (InvokeContinuation return (v2)))
1230 (InvokeMethod v0 call k0)) 1230 (InvokeMethod v0 call () k0))))
1231 '''), 1231 '''),
1232 1232
1233 const TestSpec(''' 1233 const TestSpec('''
1234 main(a) { 1234 main(a) {
1235 local() {} 1235 local() {}
1236 var l = local; 1236 var l = local;
1237 return l(); 1237 return l();
1238 } 1238 }
1239 ''', ''' 1239 ''', '''
1240 (FunctionDefinition main (a) return () 1240 (FunctionDefinition main (a) return ()
1241 (LetPrim v0 (CreateFunction 1241 (LetPrim (v0 (CreateFunction
1242 (FunctionDefinition local () return () 1242 (FunctionDefinition local () return ()
1243 (LetPrim v1 (Constant (Null))) 1243 (LetPrim (v1 (Constant (Null)))
1244 (InvokeContinuation return v1)))) 1244 (InvokeContinuation return (v1))))))
1245 (LetCont (k0 v2) 1245 (LetCont (k0 (v2)
1246 (InvokeContinuation return v2)) 1246 (InvokeContinuation return (v2)))
1247 (InvokeMethod v0 call k0)) 1247 (InvokeMethod v0 call () k0))))
1248 '''), 1248 '''),
1249 1249
1250 const TestSpec(''' 1250 const TestSpec('''
1251 main(a) { 1251 main(a) {
1252 return () {}(); 1252 return () {}();
1253 } 1253 }
1254 ''', ''' 1254 ''', '''
1255 (FunctionDefinition main (a) return () 1255 (FunctionDefinition main (a) return ()
1256 (LetPrim v0 (CreateFunction 1256 (LetPrim (v0 (CreateFunction
1257 (FunctionDefinition () return () 1257 (FunctionDefinition () return ()
1258 (LetPrim v1 (Constant (Null))) 1258 (LetPrim (v1 (Constant (Null)))
1259 (InvokeContinuation return v1)))) 1259 (InvokeContinuation return (v1))))))
1260 (LetCont (k0 v2) 1260 (LetCont (k0 (v2)
1261 (InvokeContinuation return v2)) 1261 (InvokeContinuation return (v2)))
1262 (InvokeMethod v0 call k0)) 1262 (InvokeMethod v0 call () k0))))
1263 '''), 1263 '''),
1264 1264
1265 const TestSpec(''' 1265 const TestSpec('''
1266 main(a) { 1266 main(a) {
1267 var c = a ? () { return 0; } : () { return 1; } 1267 var c = a ? () { return 0; } : () { return 1; }
1268 return c(); 1268 return c();
1269 } 1269 }
1270 ''', ''' 1270 ''', '''
1271 (FunctionDefinition main (a) return () 1271 (FunctionDefinition main (a) return ()
1272 (LetCont (k0 v0) 1272 (LetCont (k0 (v0)
1273 (LetCont (k1 v1) 1273 (LetCont (k1 (v1)
1274 (InvokeContinuation return v1)) 1274 (InvokeContinuation return (v1)))
1275 (InvokeMethod v0 call k1)) 1275 (InvokeMethod v0 call () k1)))
1276 (LetCont (k2) 1276 (LetCont (k2 ()
1277 (LetPrim v2 (CreateFunction 1277 (LetPrim (v2 (CreateFunction
1278 (FunctionDefinition () return () 1278 (FunctionDefinition () return ()
1279 (LetPrim v3 (Constant (Int 0))) 1279 (LetPrim (v3 (Constant (Int 0)))
1280 (InvokeContinuation return v3)))) 1280 (InvokeContinuation return (v3))))))
1281 (InvokeContinuation k0 v2)) 1281 (InvokeContinuation k0 (v2))))
1282 (LetCont (k3) 1282 (LetCont (k3 ()
1283 (LetPrim v4 (CreateFunction 1283 (LetPrim (v4 (CreateFunction
1284 (FunctionDefinition () return () 1284 (FunctionDefinition () return ()
1285 (LetPrim v5 (Constant (Int 1))) 1285 (LetPrim (v5 (Constant (Int 1)))
1286 (InvokeContinuation return v5)))) 1286 (InvokeContinuation return (v5))))))
1287 (InvokeContinuation k0 v4)) 1287 (InvokeContinuation k0 (v4))))
1288 (Branch (IsTrue a) k2 k3)) 1288 (Branch (IsTrue a) k2 k3)))))
1289 '''), 1289 '''),
1290 ]), 1290 ]),
1291 1291
1292 const Group('Top level field', const <TestSpec>[ 1292 const Group('Top level field', const <TestSpec>[
1293 const TestSpec(''' 1293 const TestSpec('''
1294 var field; 1294 var field;
1295 main(args) { 1295 main(args) {
1296 return field; 1296 return field;
1297 } 1297 }
1298 ''', const { 1298 ''', const {
1299 'main': ''' 1299 'main': '''
1300 (FunctionDefinition main (args) return () 1300 (FunctionDefinition main (args) return ()
1301 (LetCont (k0 v0) 1301 (LetCont (k0 (v0)
1302 (InvokeContinuation return v0)) 1302 (InvokeContinuation return (v0)))
1303 (InvokeStatic field k0)) 1303 (InvokeStatic field () k0)))
1304 ''', 1304 ''',
1305 'field': ''' 1305 'field': '''
1306 (FieldDefinition field) 1306 (FieldDefinition field)
1307 '''}), 1307 '''}),
1308 1308
1309 const TestSpec(''' 1309 const TestSpec('''
1310 var field = null; 1310 var field = null;
1311 main(args) { 1311 main(args) {
1312 return field; 1312 return field;
1313 } 1313 }
1314 ''', const { 1314 ''', const {
1315 'main': ''' 1315 'main': '''
1316 (FunctionDefinition main (args) return () 1316 (FunctionDefinition main (args) return ()
1317 (LetCont (k0 v0) 1317 (LetCont (k0 (v0)
1318 (InvokeContinuation return v0)) 1318 (InvokeContinuation return (v0)))
1319 (InvokeStatic field k0)) 1319 (InvokeStatic field () k0)))
1320 ''', 1320 ''',
1321 'field': ''' 1321 'field': '''
1322 (FieldDefinition field (return) 1322 (FieldDefinition field () return
1323 (LetPrim v0 (Constant (Null))) 1323 (LetPrim (v0 (Constant (Null)))
1324 (InvokeContinuation return v0)) 1324 (InvokeContinuation return (v0))))
1325 '''}), 1325 '''}),
1326 1326
1327 const TestSpec(''' 1327 const TestSpec('''
1328 var field = 0; 1328 var field = 0;
1329 main(args) { 1329 main(args) {
1330 return field; 1330 return field;
1331 } 1331 }
1332 ''', const { 1332 ''', const {
1333 'main': ''' 1333 'main': '''
1334 (FunctionDefinition main (args) return () 1334 (FunctionDefinition main (args) return ()
1335 (LetCont (k0 v0) 1335 (LetCont (k0 (v0)
1336 (InvokeContinuation return v0)) 1336 (InvokeContinuation return (v0)))
1337 (InvokeStatic field k0)) 1337 (InvokeStatic field () k0)))
1338 ''', 1338 ''',
1339 'field': ''' 1339 'field': '''
1340 (FieldDefinition field (return) 1340 (FieldDefinition field () return
1341 (LetPrim v0 (Constant (Int 0))) 1341 (LetPrim (v0 (Constant (Int 0)))
1342 (InvokeContinuation return v0)) 1342 (InvokeContinuation return (v0))))
1343 '''}), 1343 '''}),
1344 1344
1345 const TestSpec(''' 1345 const TestSpec('''
1346 var field; 1346 var field;
1347 main(args) { 1347 main(args) {
1348 field = args.length; 1348 field = args.length;
1349 return field; 1349 return field;
1350 } 1350 }
1351 ''', ''' 1351 ''', '''
1352 (FunctionDefinition main (args) return () 1352 (FunctionDefinition main (args) return ()
1353 (LetCont (k0 v0) 1353 (LetCont (k0 (v0)
1354 (LetCont (k1 v1) 1354 (LetCont (k1 (v1)
1355 (LetCont (k2 v2) 1355 (LetCont (k2 (v2)
1356 (InvokeContinuation return v2)) 1356 (InvokeContinuation return (v2)))
1357 (InvokeStatic field k2)) 1357 (InvokeStatic field () k2)))
1358 (InvokeStatic field v0 k1)) 1358 (InvokeStatic field (v0) k1)))
1359 (InvokeMethod args length k0)) 1359 (InvokeMethod args length () k0)))
1360 '''), 1360 '''),
1361 ]), 1361 ]),
1362 1362
1363 const Group('Closure variables', const <TestSpec>[ 1363 const Group('Closure variables', const <TestSpec>[
1364 const TestSpec(''' 1364 const TestSpec('''
1365 main(x,foo) { 1365 main(x,foo) {
1366 print(x); 1366 print(x);
1367 getFoo() => foo; 1367 getFoo() => foo;
1368 print(getFoo()); 1368 print(getFoo());
1369 } 1369 }
1370 ''', ''' 1370 ''', '''
1371 (FunctionDefinition main (x foo) return (foo) 1371 (FunctionDefinition main (x foo) return (foo)
1372 (LetCont (k0 v0) 1372 (LetCont (k0 (v0)
1373 (LetPrim v1 (CreateFunction 1373 (LetPrim (v1 (CreateFunction
1374 (FunctionDefinition getFoo () return () 1374 (FunctionDefinition getFoo () return ()
1375 (LetPrim v2 (GetClosureVariable foo)) 1375 (LetPrim (v2 (GetClosureVariable foo))
1376 (InvokeContinuation return v2)))) 1376 (InvokeContinuation return (v2))))))
1377 (LetCont (k1 v3) 1377 (LetCont (k1 (v3)
1378 (LetCont (k2 v4) 1378 (LetCont (k2 (v4)
1379 (LetPrim v5 (Constant (Null))) 1379 (LetPrim (v5 (Constant (Null)))
1380 (InvokeContinuation return v5)) 1380 (InvokeContinuation return (v5))))
1381 (InvokeStatic print v3 k2)) 1381 (InvokeStatic print (v3) k2)))
1382 (InvokeMethod v1 call k1)) 1382 (InvokeMethod v1 call () k1))))
1383 (InvokeStatic print x k0)) 1383 (InvokeStatic print (x) k0)))
1384 ''', skipInAnalyzerFrontend: true) 1384 ''', skipInAnalyzerFrontend: true)
1385 ]), 1385 ]),
1386 ]; 1386 ];
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698