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

Side by Side Diff: tests/compiler/dart2js/async_await_js_transform_test.dart

Issue 925973002: Fix error handling in dart2js async-await (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments Created 5 years, 10 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 import "package:expect/expect.dart"; 5 import "package:expect/expect.dart";
6 import "package:compiler/src/js/js.dart"; 6 import "package:compiler/src/js/js.dart";
7 import "package:compiler/src/js/rewrite_async.dart"; 7 import "package:compiler/src/js/rewrite_async.dart";
8 8
9 import "backend_dart/dart_printer_test.dart" show PrintDiagnosticListener; 9 import "backend_dart/dart_printer_test.dart" show PrintDiagnosticListener;
10 10
11 void testTransform(String source, String expected) { 11 void testTransform(String source, String expected) {
12 Fun fun = js(source); 12 Fun fun = js(source);
13 Fun rewritten = new AsyncRewriter( 13 Fun rewritten = new AsyncRewriter(
14 null, // The diagnostic helper should not be used in these tests. 14 null, // The diagnostic helper should not be used in these tests.
15 null, 15 null,
16 thenHelper: new VariableUse("thenHelper"), 16 asyncHelper: new VariableUse("thenHelper"),
17 newCompleter: new VariableUse("Completer"), 17 newCompleter: new VariableUse("Completer"),
18 endOfIteration: new VariableUse("endOfIteration"), 18 endOfIteration: new VariableUse("endOfIteration"),
19 newIterable: new VariableUse("Iterator"), 19 newIterable: new VariableUse("Iterator"),
20 safeVariableName: (String name) => "__$name").rewrite(fun); 20 safeVariableName: (String name) => "__$name").rewrite(fun);
21 21
22 JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(); 22 JavaScriptPrintingOptions options = new JavaScriptPrintingOptions();
23 JavaScriptPrintingContext context = new SimpleJavaScriptPrintingContext(); 23 SimpleJavaScriptPrintingContext context =
24 new SimpleJavaScriptPrintingContext();
24 Printer printer = new Printer(options, context); 25 Printer printer = new Printer(options, context);
25 printer.visit(rewritten); 26 printer.visit(rewritten);
26 Expect.stringEquals(expected, context.getText()); 27 Expect.stringEquals(expected, context.getText());
27 } 28 }
28 29
29 main() { 30 main() {
30 testTransform(""" 31 testTransform("""
31 function() async { 32 function(a) async {
32 print(this.x); // Ensure `this` is translated in the helper function. 33 print(this.x); // Ensure `this` is translated in the helper function.
33 await foo(); 34 await foo();
34 }""", """ 35 }""", """
35 function() { 36 function(a) {
36 var __goto = 0, __completer = new Completer(), __self = this; 37 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError, _ _self = this;
37 function __helper(__result) { 38 function __body(__errorCode, __result) {
39 if (__errorCode == 1) {
40 __storedError = __result;
41 __goto = __handler;
42 }
38 while (true) 43 while (true)
39 switch (__goto) { 44 try {
40 case 0: 45 switch (__goto) {
41 // Function start 46 case 0:
42 print(__self.x); 47 // Function start
43 __goto = 1; 48 print(__self.x);
44 return thenHelper(foo(), __helper, __completer, null); 49 __goto = 2;
45 case 1: 50 return thenHelper(foo(), __body, __completer);
46 // returning from await. 51 case 2:
47 // implicit return 52 // returning from await.
48 return thenHelper(null, null, __completer, null); 53 // implicit return
54 return thenHelper(null, 0, __completer, null);
55 case 1:
56 // rethrow
57 return thenHelper(__storedError, 1, __completer);
58 }
59 } catch (__error) {
60 __storedError = __error;
61 __goto = __handler;
49 } 62 }
63
50 } 64 }
51 return thenHelper(null, __helper, __completer, null); 65 return thenHelper(null, __body, __completer, null);
52 }"""); 66 }""");
53 67
54 testTransform(""" 68 testTransform("""
55 function() async { 69 function(b) async {
56 try { 70 try {
57 __outer: while (true) { // Overlapping label name. 71 __outer: while (true) { // Overlapping label name.
58 try { 72 try {
59 inner: while (true) { 73 inner: while (true) {
60 break __outer; // Break from untranslated loop to translated target. 74 break __outer; // Break from untranslated loop to translated target.
61 break; // break to untranslated target. 75 break; // break to untranslated target.
62 } 76 }
63 while (true) { 77 while (true) {
64 return; // Return via finallies. 78 return; // Return via finallies.
65 } 79 }
66 var __helper = await foo(); // Overlapping variable name. 80 var __helper = await foo(); // Overlapping variable name.
67 } finally { 81 } finally {
68 foo(); 82 foo();
69 continue; // Continue from finally with pending finally. 83 continue; // Continue from finally with pending finally.
70 return 2; // Return from finally with pending finally. 84 return 2; // Return from finally with pending finally.
71 } 85 }
72 } 86 }
73 } finally { 87 } finally {
74 return 3; // Return from finally with no pending finally. 88 return 3; // Return from finally with no pending finally.
75 } 89 }
76 return 4; 90 return 4;
77 }""", """ 91 }""", """
78 function() { 92 function(b) {
79 var __goto = 0, __completer = new Completer(), __handler = null, __next, __ret urnValue, __helper; 93 var __goto = 0, __completer = new Completer(), __handler = 2, __storedError, _ _next, __returnValue, __helper;
80 function __helper1(__result) { 94 function __body(__errorCode, __result) {
95 if (__errorCode == 1) {
96 __storedError = __result;
97 __goto = __handler;
98 }
81 while (true) 99 while (true)
82 try { 100 try {
83 __outer1: 101 __outer1:
84 switch (__goto) { 102 switch (__goto) {
85 case 0: 103 case 0:
86 // Function start 104 // Function start
87 __handler = 2; 105 __handler = 3;
88 case 6: 106 case 7:
89 // continue __outer 107 // continue __outer
90 case 7: 108 case 8:
91 // while condition 109 // while condition
92 __handler = 9; 110 __handler = 10;
93 inner: { 111 inner: {
94 while (true) { 112 while (true) {
95 __next = [5]; 113 __next = [6];
96 // goto finally 114 // goto finally
97 __goto = 10; 115 __goto = 11;
98 break __outer1; 116 break __outer1;
99 break; 117 break;
100 } 118 }
101 } 119 }
102 while (true) { 120 while (true) {
103 __next = [1, 3]; 121 __next = [1, 4];
104 // goto finally 122 // goto finally
105 __goto = 10; 123 __goto = 11;
106 break __outer1; 124 break __outer1;
107 } 125 }
108 __goto = 12; 126 __goto = 13;
109 return thenHelper(foo(), __helper1, __completer, function(__error) { 127 return thenHelper(foo(), __body, __completer);
110 __goto = 9; 128 case 13:
111 __helper1(__error);
112 });
113 case 12:
114 // returning from await. 129 // returning from await.
115 __helper = __result; 130 __helper = __result;
116 __next = [11]; 131 __next = [12];
117 // goto finally 132 // goto finally
118 __goto = 10; 133 __goto = 11;
119 break; 134 break;
120 case 9: 135 case 10:
121 // catch 136 // catch
122 __handler = 2; 137 __handler = 3;
123 __next = [11]; 138 __next = [12];
124 case 10: 139 case 11:
125 // finally 140 // finally
126 __handler = 2; 141 __handler = 3;
127 foo(); 142 foo();
128 // goto while condition 143 // goto while condition
129 __goto = 7; 144 __goto = 8;
130 break; 145 break;
131 __returnValue = 2; 146 __returnValue = 2;
132 __next = [1]; 147 __next = [1];
133 // goto finally 148 // goto finally
134 __goto = 3; 149 __goto = 4;
135 break; 150 break;
136 // goto the next finally handler 151 // goto the next finally handler
137 __goto = __next.pop(); 152 __goto = __next.pop();
138 break; 153 break;
139 case 11: 154 case 12:
140 // after finally 155 // after finally
141 // goto while condition 156 // goto while condition
142 __goto = 7; 157 __goto = 8;
143 break; 158 break;
144 case 8: 159 case 9:
145 // after while 160 // after while
146 case 5: 161 case 6:
147 // break __outer 162 // break __outer
148 __next = [4]; 163 __next = [5];
149 // goto finally 164 // goto finally
150 __goto = 3; 165 __goto = 4;
151 break; 166 break;
152 case 2: 167 case 3:
153 // catch 168 // catch
154 __handler = null; 169 __handler = 2;
155 __next = [4]; 170 __next = [5];
156 case 3: 171 case 4:
157 // finally 172 // finally
158 __handler = null; 173 __handler = 2;
159 __returnValue = 3; 174 __returnValue = 3;
160 // goto return 175 // goto return
161 __goto = 1; 176 __goto = 1;
162 break; 177 break;
163 // goto the next finally handler 178 // goto the next finally handler
164 __goto = __next.pop(); 179 __goto = __next.pop();
165 break; 180 break;
166 case 4: 181 case 5:
167 // after finally 182 // after finally
168 __returnValue = 4; 183 __returnValue = 4;
169 // goto return 184 // goto return
170 __goto = 1; 185 __goto = 1;
171 break; 186 break;
172 case 1: 187 case 1:
173 // return 188 // return
174 return thenHelper(__returnValue, null, __completer, null); 189 return thenHelper(__returnValue, 0, __completer, null);
190 case 2:
191 // rethrow
192 return thenHelper(__storedError, 1, __completer);
175 } 193 }
176 } catch (__error) { 194 } catch (__error) {
177 if (__handler === null) 195 __storedError = __error;
178 throw __error;
179 __result = __error;
180 __goto = __handler; 196 __goto = __handler;
181 } 197 }
182 198
183 } 199 }
184 return thenHelper(null, __helper1, __completer, null); 200 return thenHelper(null, __body, __completer, null);
185 }"""); 201 }""");
186 testTransform(""" 202 testTransform("""
187 function() async { 203 function(c) async {
188 var a, b, c, d, e, f; 204 var a, b, c, d, e, f;
189 a = b++; // post- and preincrements. 205 a = b++; // post- and preincrements.
190 b = --b; 206 b = --b;
191 c = (await foo()).a++; 207 c = (await foo()).a++;
192 d = ++(await foo()).a; 208 d = ++(await foo()).a;
193 e = foo1()[await foo2()]--; 209 e = foo1()[await foo2()]--;
194 f = --foo1()[await foo2()]; 210 f = --foo1()[await foo2()];
195 }""", """ 211 }""", """
196 function() { 212 function(c) {
197 var __goto = 0, __completer = new Completer(), a, b, c, d, e, f, __temp1; 213 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError, a , b, c, d, e, f, __temp1;
198 function __helper(__result) { 214 function __body(__errorCode, __result) {
215 if (__errorCode == 1) {
216 __storedError = __result;
217 __goto = __handler;
218 }
199 while (true) 219 while (true)
200 switch (__goto) { 220 try {
201 case 0: 221 switch (__goto) {
202 // Function start 222 case 0:
203 a = b++; 223 // Function start
204 b = --b; 224 a = b++;
205 __goto = 1; 225 b = --b;
206 return thenHelper(foo(), __helper, __completer, null); 226 __goto = 2;
207 case 1: 227 return thenHelper(foo(), __body, __completer);
208 // returning from await. 228 case 2:
209 c = __result.a++; 229 // returning from await.
210 __goto = 2; 230 c = __result.a++;
211 return thenHelper(foo(), __helper, __completer, null); 231 __goto = 3;
212 case 2: 232 return thenHelper(foo(), __body, __completer);
213 // returning from await. 233 case 3:
214 d = ++__result.a; 234 // returning from await.
215 __temp1 = foo1(); 235 d = ++__result.a;
216 __goto = 3; 236 __temp1 = foo1();
217 return thenHelper(foo2(), __helper, __completer, null); 237 __goto = 4;
218 case 3: 238 return thenHelper(foo2(), __body, __completer);
219 // returning from await. 239 case 4:
220 e = __temp1[__result]--; 240 // returning from await.
221 __temp1 = foo1(); 241 e = __temp1[__result]--;
222 __goto = 4; 242 __temp1 = foo1();
223 return thenHelper(foo2(), __helper, __completer, null); 243 __goto = 5;
224 case 4: 244 return thenHelper(foo2(), __body, __completer);
225 // returning from await. 245 case 5:
226 f = --__temp1[__result]; 246 // returning from await.
227 // implicit return 247 f = --__temp1[__result];
228 return thenHelper(null, null, __completer, null); 248 // implicit return
249 return thenHelper(null, 0, __completer, null);
250 case 1:
251 // rethrow
252 return thenHelper(__storedError, 1, __completer);
253 }
254 } catch (__error) {
255 __storedError = __error;
256 __goto = __handler;
229 } 257 }
258
230 } 259 }
231 return thenHelper(null, __helper, __completer, null); 260 return thenHelper(null, __body, __completer, null);
232 }"""); 261 }""");
233 testTransform(""" 262 testTransform("""
234 function() async { 263 function(d2) async {
235 var a, b, c, d, e, f, g, h; // empty initializer 264 var a, b, c, d, e, f, g, h; // empty initializer
236 a = foo1() || await foo2(); // short circuiting operators 265 a = foo1() || await foo2(); // short circuiting operators
237 b = await foo1() || foo2(); 266 b = await foo1() || foo2();
238 c = await foo1() || foo3(await foo2()); 267 c = await foo1() || foo3(await foo2());
239 d = foo1() || foo2(); 268 d = foo1() || foo2();
240 e = foo1() && await foo2(); 269 e = foo1() && await foo2();
241 f = await foo1() && foo2(); 270 f = await foo1() && foo2();
242 g = await foo1() && await foo2(); 271 g = await foo1() && await foo2();
243 h = foo1() && foo2(); 272 h = foo1() && foo2();
244 }""", """ 273 }""", """
245 function() { 274 function(d2) {
246 var __goto = 0, __completer = new Completer(), a, b, c, d, e, f, g, h, __temp1 ; 275 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError, a , b, c, d, e, f, g, h, __temp1;
247 function __helper(__result) { 276 function __body(__errorCode, __result) {
277 if (__errorCode == 1) {
278 __storedError = __result;
279 __goto = __handler;
280 }
248 while (true) 281 while (true)
249 switch (__goto) { 282 try {
250 case 0: 283 switch (__goto) {
251 // Function start 284 case 0:
252 __temp1 = foo1(); 285 // Function start
253 if (__temp1) { 286 __temp1 = foo1();
254 // goto then 287 if (__temp1) {
255 __goto = 1; 288 // goto then
289 __goto = 2;
290 break;
291 } else
292 __result = __temp1;
293 // goto join
294 __goto = 3;
256 break; 295 break;
257 } else 296 case 2:
258 __result = __temp1; 297 // then
259 // goto join 298 __goto = 4;
260 __goto = 2; 299 return thenHelper(foo2(), __body, __completer);
261 break; 300 case 4:
262 case 1: 301 // returning from await.
263 // then 302 case 3:
264 __goto = 3; 303 // join
265 return thenHelper(foo2(), __helper, __completer, null); 304 a = __result;
266 case 3:
267 // returning from await.
268 case 2:
269 // join
270 a = __result;
271 __goto = 4;
272 return thenHelper(foo1(), __helper, __completer, null);
273 case 4:
274 // returning from await.
275 b = __result || foo2();
276 __goto = 7;
277 return thenHelper(foo1(), __helper, __completer, null);
278 case 7:
279 // returning from await.
280 __temp1 = __result;
281 if (__temp1) {
282 // goto then
283 __goto = 5; 305 __goto = 5;
306 return thenHelper(foo1(), __body, __completer);
307 case 5:
308 // returning from await.
309 b = __result || foo2();
310 __goto = 8;
311 return thenHelper(foo1(), __body, __completer);
312 case 8:
313 // returning from await.
314 __temp1 = __result;
315 if (__temp1) {
316 // goto then
317 __goto = 6;
318 break;
319 } else
320 __result = __temp1;
321 // goto join
322 __goto = 7;
284 break; 323 break;
285 } else 324 case 6:
286 __result = __temp1; 325 // then
287 // goto join 326 __temp1 = foo3;
288 __goto = 6;
289 break;
290 case 5:
291 // then
292 __temp1 = foo3;
293 __goto = 8;
294 return thenHelper(foo2(), __helper, __completer, null);
295 case 8:
296 // returning from await.
297 __result = __temp1(__result);
298 case 6:
299 // join
300 c = __result;
301 d = foo1() || foo2();
302 __temp1 = foo1();
303 if (__temp1)
304 __result = __temp1;
305 else {
306 // goto then
307 __goto = 9; 327 __goto = 9;
328 return thenHelper(foo2(), __body, __completer);
329 case 9:
330 // returning from await.
331 __result = __temp1(__result);
332 case 7:
333 // join
334 c = __result;
335 d = foo1() || foo2();
336 __temp1 = foo1();
337 if (__temp1)
338 __result = __temp1;
339 else {
340 // goto then
341 __goto = 10;
342 break;
343 }
344 // goto join
345 __goto = 11;
308 break; 346 break;
309 } 347 case 10:
310 // goto join 348 // then
311 __goto = 10; 349 __goto = 12;
312 break; 350 return thenHelper(foo2(), __body, __completer);
313 case 9: 351 case 12:
314 // then 352 // returning from await.
315 __goto = 11; 353 case 11:
316 return thenHelper(foo2(), __helper, __completer, null); 354 // join
317 case 11: 355 e = __result;
318 // returning from await.
319 case 10:
320 // join
321 e = __result;
322 __goto = 12;
323 return thenHelper(foo1(), __helper, __completer, null);
324 case 12:
325 // returning from await.
326 f = __result && foo2();
327 __goto = 15;
328 return thenHelper(foo1(), __helper, __completer, null);
329 case 15:
330 // returning from await.
331 __temp1 = __result;
332 if (__temp1)
333 __result = __temp1;
334 else {
335 // goto then
336 __goto = 13; 356 __goto = 13;
357 return thenHelper(foo1(), __body, __completer);
358 case 13:
359 // returning from await.
360 f = __result && foo2();
361 __goto = 16;
362 return thenHelper(foo1(), __body, __completer);
363 case 16:
364 // returning from await.
365 __temp1 = __result;
366 if (__temp1)
367 __result = __temp1;
368 else {
369 // goto then
370 __goto = 14;
371 break;
372 }
373 // goto join
374 __goto = 15;
337 break; 375 break;
338 } 376 case 14:
339 // goto join 377 // then
340 __goto = 14; 378 __goto = 17;
341 break; 379 return thenHelper(foo2(), __body, __completer);
342 case 13: 380 case 17:
343 // then 381 // returning from await.
344 __goto = 16; 382 case 15:
345 return thenHelper(foo2(), __helper, __completer, null); 383 // join
346 case 16: 384 g = __result;
347 // returning from await. 385 h = foo1() && foo2();
348 case 14: 386 // implicit return
349 // join 387 return thenHelper(null, 0, __completer, null);
350 g = __result; 388 case 1:
351 h = foo1() && foo2(); 389 // rethrow
352 // implicit return 390 return thenHelper(__storedError, 1, __completer);
353 return thenHelper(null, null, __completer, null); 391 }
392 } catch (__error) {
393 __storedError = __error;
394 __goto = __handler;
354 } 395 }
396
355 } 397 }
356 return thenHelper(null, __helper, __completer, null); 398 return thenHelper(null, __body, __completer, null);
357 }"""); 399 }""");
358 testTransform(""" 400 testTransform("""
359 function(x, y) async { 401 function(x, y) async {
360 while (true) { 402 while (true) {
361 switch(y) { // Switch with no awaits in case key expressions 403 switch(y) { // Switch with no awaits in case key expressions
362 case 0: 404 case 0:
363 case 1: 405 case 1:
364 await foo(); 406 await foo();
365 continue; // Continue the loop, not the switch 407 continue; // Continue the loop, not the switch
366 case 1: // Duplicate case 408 case 1: // Duplicate case
367 await foo(); 409 await foo();
368 break; // Break the switch 410 break; // Break the switch
369 case 2: 411 case 2:
370 foo(); // No default 412 foo(); // No default
371 } 413 }
372 } 414 }
373 }""", """ 415 }""", """
374 function(x, y) { 416 function(x, y) {
375 var __goto = 0, __completer = new Completer(); 417 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError;
376 function __helper(__result) { 418 function __body(__errorCode, __result) {
419 if (__errorCode == 1) {
420 __storedError = __result;
421 __goto = __handler;
422 }
377 while (true) 423 while (true)
378 switch (__goto) { 424 try {
379 case 0: 425 switch (__goto) {
380 // Function start 426 case 0:
381 case 1: 427 // Function start
382 // while condition 428 case 2:
383 case 3: 429 // while condition
384 // switch 430 case 4:
385 switch (y) { 431 // switch
386 case 0: 432 switch (y) {
387 // goto case 433 case 0:
388 __goto = 5; 434 // goto case
389 break; 435 __goto = 6;
390 case 1: 436 break;
391 // goto case 437 case 1:
392 __goto = 6; 438 // goto case
393 break; 439 __goto = 7;
394 case 1: 440 break;
395 // goto case 441 case 1:
396 __goto = 7; 442 // goto case
397 break; 443 __goto = 8;
398 case 2: 444 break;
399 // goto case 445 case 2:
400 __goto = 8; 446 // goto case
401 break; 447 __goto = 9;
402 } 448 break;
403 // goto after switch 449 }
404 __goto = 4; 450 // goto after switch
405 break; 451 __goto = 5;
406 case 5: 452 break;
407 // case 453 case 6:
408 case 6: 454 // case
409 // case 455 case 7:
410 __goto = 9; 456 // case
411 return thenHelper(foo(), __helper, __completer, null); 457 __goto = 10;
412 case 9: 458 return thenHelper(foo(), __body, __completer);
413 // returning from await. 459 case 10:
414 // goto while condition 460 // returning from await.
415 __goto = 1; 461 // goto while condition
416 break; 462 __goto = 2;
417 case 7: 463 break;
418 // case 464 case 8:
419 __goto = 10; 465 // case
420 return thenHelper(foo(), __helper, __completer, null); 466 __goto = 11;
421 case 10: 467 return thenHelper(foo(), __body, __completer);
422 // returning from await. 468 case 11:
423 // goto after switch 469 // returning from await.
424 __goto = 4; 470 // goto after switch
425 break; 471 __goto = 5;
426 case 8: 472 break;
427 // case 473 case 9:
428 foo(); 474 // case
429 case 4: 475 foo();
430 // after switch 476 case 5:
431 // goto while condition 477 // after switch
432 __goto = 1; 478 // goto while condition
433 break; 479 __goto = 2;
434 case 2: 480 break;
435 // after while 481 case 3:
436 // implicit return 482 // after while
437 return thenHelper(null, null, __completer, null); 483 // implicit return
484 return thenHelper(null, 0, __completer, null);
485 case 1:
486 // rethrow
487 return thenHelper(__storedError, 1, __completer);
488 }
489 } catch (__error) {
490 __storedError = __error;
491 __goto = __handler;
438 } 492 }
493
439 } 494 }
440 return thenHelper(null, __helper, __completer, null); 495 return thenHelper(null, __body, __completer, null);
441 }"""); 496 }""");
442 testTransform(""" 497 testTransform("""
443 function() async { 498 function(f) async {
444 do { 499 do {
445 var a = await foo(); 500 var a = await foo();
446 if (a) // If with no awaits in body 501 if (a) // If with no awaits in body
447 break; 502 break;
448 else 503 else
449 continue; 504 continue;
450 } while (await foo()); 505 } while (await foo());
451 } 506 }
452 """, """ 507 """, """
453 function() { 508 function(f) {
454 var __goto = 0, __completer = new Completer(), a; 509 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError, a ;
455 function __helper(__result) { 510 function __body(__errorCode, __result) {
511 if (__errorCode == 1) {
512 __storedError = __result;
513 __goto = __handler;
514 }
456 while (true) 515 while (true)
457 switch (__goto) { 516 try {
458 case 0: 517 switch (__goto) {
459 // Function start 518 case 0:
460 case 1: 519 // Function start
461 // do body 520 case 2:
462 __goto = 4; 521 // do body
463 return thenHelper(foo(), __helper, __completer, null); 522 __goto = 5;
464 case 4: 523 return thenHelper(foo(), __body, __completer);
465 // returning from await. 524 case 5:
466 a = __result; 525 // returning from await.
467 if (a) { 526 a = __result;
468 // goto after do 527 if (a) {
469 __goto = 3; 528 // goto after do
470 break; 529 __goto = 4;
471 } else { 530 break;
472 // goto do condition 531 } else {
473 __goto = 2; 532 // goto do condition
474 break; 533 __goto = 3;
475 } 534 break;
476 case 2: 535 }
477 // do condition 536 case 3:
478 __goto = 5; 537 // do condition
479 return thenHelper(foo(), __helper, __completer, null); 538 __goto = 6;
480 case 5: 539 return thenHelper(foo(), __body, __completer);
481 // returning from await. 540 case 6:
482 if (__result) { 541 // returning from await.
483 // goto do body 542 if (__result) {
484 __goto = 1; 543 // goto do body
485 break; 544 __goto = 2;
486 } 545 break;
487 case 3: 546 }
488 // after do 547 case 4:
489 // implicit return 548 // after do
490 return thenHelper(null, null, __completer, null); 549 // implicit return
550 return thenHelper(null, 0, __completer, null);
551 case 1:
552 // rethrow
553 return thenHelper(__storedError, 1, __completer);
554 }
555 } catch (__error) {
556 __storedError = __error;
557 __goto = __handler;
491 } 558 }
559
492 } 560 }
493 return thenHelper(null, __helper, __completer, null); 561 return thenHelper(null, __body, __completer, null);
494 }"""); 562 }""");
495 563
496 testTransform(""" 564 testTransform("""
497 function() async { 565 function(g) async {
498 for (var i = 0; i < await foo1(); i += await foo2()) { 566 for (var i = 0; i < await foo1(); i += await foo2()) {
499 if (foo(i)) 567 if (foo(i))
500 continue; 568 continue;
501 else 569 else
502 break; 570 break;
503 if (!foo(i)) { // If with no else and await in body. 571 if (!foo(i)) { // If with no else and await in body.
504 await foo(); 572 await foo();
505 return; 573 return;
506 } 574 }
507 print(await(foo(i))); 575 print(await(foo(i)));
508 } 576 }
509 } 577 }
510 """, """ 578 """, """
511 function() { 579 function(g) {
512 var __goto = 0, __completer = new Completer(), __returnValue, i, __temp1; 580 var __goto = 0, __completer = new Completer(), __handler = 2, __storedError, _ _returnValue, i, __temp1;
513 function __helper(__result) { 581 function __body(__errorCode, __result) {
582 if (__errorCode == 1) {
583 __storedError = __result;
584 __goto = __handler;
585 }
514 while (true) 586 while (true)
515 switch (__goto) { 587 try {
516 case 0: 588 switch (__goto) {
517 // Function start 589 case 0:
518 i = 0; 590 // Function start
519 case 2: 591 i = 0;
520 // for condition 592 case 3:
521 __temp1 = i; 593 // for condition
522 __goto = 5; 594 __temp1 = i;
523 return thenHelper(foo1(), __helper, __completer, null); 595 __goto = 6;
524 case 5: 596 return thenHelper(foo1(), __body, __completer);
525 // returning from await. 597 case 6:
526 if (!(__temp1 < __result)) { 598 // returning from await.
527 // goto after for 599 if (!(__temp1 < __result)) {
528 __goto = 4; 600 // goto after for
601 __goto = 5;
602 break;
603 }
604 if (foo(i)) {
605 // goto for update
606 __goto = 4;
607 break;
608 } else {
609 // goto after for
610 __goto = 5;
611 break;
612 }
613 __goto = !foo(i) ? 7 : 8;
529 break; 614 break;
530 } 615 case 7:
531 if (foo(i)) { 616 // then
532 // goto for update 617 __goto = 9;
618 return thenHelper(foo(), __body, __completer);
619 case 9:
620 // returning from await.
621 // goto return
622 __goto = 1;
623 break;
624 case 8:
625 // join
626 __temp1 = print;
627 __goto = 10;
628 return thenHelper(foo(i), __body, __completer);
629 case 10:
630 // returning from await.
631 __temp1(__result);
632 case 4:
633 // for update
634 __goto = 11;
635 return thenHelper(foo2(), __body, __completer);
636 case 11:
637 // returning from await.
638 i = __result;
639 // goto for condition
533 __goto = 3; 640 __goto = 3;
534 break; 641 break;
535 } else { 642 case 5:
536 // goto after for 643 // after for
537 __goto = 4; 644 case 1:
538 break; 645 // return
539 } 646 return thenHelper(__returnValue, 0, __completer, null);
540 __goto = !foo(i) ? 6 : 7; 647 case 2:
541 break; 648 // rethrow
542 case 6: 649 return thenHelper(__storedError, 1, __completer);
543 // then 650 }
544 __goto = 8; 651 } catch (__error) {
545 return thenHelper(foo(), __helper, __completer, null); 652 __storedError = __error;
546 case 8: 653 __goto = __handler;
547 // returning from await.
548 // goto return
549 __goto = 1;
550 break;
551 case 7:
552 // join
553 __temp1 = print;
554 __goto = 9;
555 return thenHelper(foo(i), __helper, __completer, null);
556 case 9:
557 // returning from await.
558 __temp1(__result);
559 case 3:
560 // for update
561 __goto = 10;
562 return thenHelper(foo2(), __helper, __completer, null);
563 case 10:
564 // returning from await.
565 i = __result;
566 // goto for condition
567 __goto = 2;
568 break;
569 case 4:
570 // after for
571 case 1:
572 // return
573 return thenHelper(__returnValue, null, __completer, null);
574 } 654 }
655
575 } 656 }
576 return thenHelper(null, __helper, __completer, null); 657 return thenHelper(null, __body, __completer, null);
577 }"""); 658 }""");
578 659
579 testTransform(""" 660 testTransform("""
580 function(a) async { 661 function(a, h) async {
581 var x = {"a": foo1(), "b": await foo2(), "c": foo3()}; 662 var x = {"a": foo1(), "b": await foo2(), "c": foo3()};
582 x["a"] = 2; // Different assignments 663 x["a"] = 2; // Different assignments
583 (await foo()).a = 3; 664 (await foo()).a = 3;
584 x[await foo()] = 4; 665 x[await foo()] = 4;
585 x[(await foo1()).a = await foo2()] = 5; 666 x[(await foo1()).a = await foo2()] = 5;
586 (await foo1())[await foo2()] = await foo3(6); 667 (await foo1())[await foo2()] = await foo3(6);
587 } 668 }
588 """, """ 669 """, """
589 function(a) { 670 function(a, h) {
590 var __goto = 0, __completer = new Completer(), x, __temp1, __temp2; 671 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError, x , __temp1, __temp2;
591 function __helper(__result) { 672 function __body(__errorCode, __result) {
673 if (__errorCode == 1) {
674 __storedError = __result;
675 __goto = __handler;
676 }
592 while (true) 677 while (true)
593 switch (__goto) { 678 try {
594 case 0: 679 switch (__goto) {
595 // Function start 680 case 0:
596 __temp1 = foo1(); 681 // Function start
597 __goto = 1; 682 __temp1 = foo1();
598 return thenHelper(foo2(), __helper, __completer, null); 683 __goto = 2;
599 case 1: 684 return thenHelper(foo2(), __body, __completer);
600 // returning from await. 685 case 2:
601 x = {a: __temp1, b: __result, c: foo3()}; 686 // returning from await.
602 x.a = 2; 687 x = {a: __temp1, b: __result, c: foo3()};
603 __goto = 2; 688 x.a = 2;
604 return thenHelper(foo(), __helper, __completer, null); 689 __goto = 3;
605 case 2: 690 return thenHelper(foo(), __body, __completer);
606 // returning from await. 691 case 3:
607 __result.a = 3; 692 // returning from await.
608 __temp1 = x; 693 __result.a = 3;
609 __goto = 3; 694 __temp1 = x;
610 return thenHelper(foo(), __helper, __completer, null); 695 __goto = 4;
611 case 3: 696 return thenHelper(foo(), __body, __completer);
612 // returning from await. 697 case 4:
613 __temp1[__result] = 4; 698 // returning from await.
614 __temp1 = x; 699 __temp1[__result] = 4;
615 __goto = 4; 700 __temp1 = x;
616 return thenHelper(foo1(), __helper, __completer, null); 701 __goto = 5;
617 case 4: 702 return thenHelper(foo1(), __body, __completer);
618 // returning from await. 703 case 5:
619 __temp2 = __result; 704 // returning from await.
620 __goto = 5; 705 __temp2 = __result;
621 return thenHelper(foo2(), __helper, __completer, null); 706 __goto = 6;
622 case 5: 707 return thenHelper(foo2(), __body, __completer);
623 // returning from await. 708 case 6:
624 __temp1[__temp2.a = __result] = 5; 709 // returning from await.
625 __goto = 6; 710 __temp1[__temp2.a = __result] = 5;
626 return thenHelper(foo1(), __helper, __completer, null); 711 __goto = 7;
627 case 6: 712 return thenHelper(foo1(), __body, __completer);
628 // returning from await. 713 case 7:
629 __temp1 = __result; 714 // returning from await.
630 __goto = 7; 715 __temp1 = __result;
631 return thenHelper(foo2(), __helper, __completer, null); 716 __goto = 8;
632 case 7: 717 return thenHelper(foo2(), __body, __completer);
633 // returning from await. 718 case 8:
634 __temp2 = __result; 719 // returning from await.
635 __goto = 8; 720 __temp2 = __result;
636 return thenHelper(foo3(6), __helper, __completer, null); 721 __goto = 9;
637 case 8: 722 return thenHelper(foo3(6), __body, __completer);
638 // returning from await. 723 case 9:
639 __temp1[__temp2] = __result; 724 // returning from await.
640 // implicit return 725 __temp1[__temp2] = __result;
641 return thenHelper(null, null, __completer, null); 726 // implicit return
727 return thenHelper(null, 0, __completer, null);
728 case 1:
729 // rethrow
730 return thenHelper(__storedError, 1, __completer);
731 }
732 } catch (__error) {
733 __storedError = __error;
734 __goto = __handler;
642 } 735 }
736
643 } 737 }
644 return thenHelper(null, __helper, __completer, null); 738 return thenHelper(null, __body, __completer, null);
645 }"""); 739 }""");
646 testTransform(""" 740 testTransform("""
647 function(c) async { 741 function(c, i) async {
648 try { 742 try {
649 var x = c ? await foo() : foo(); // conditional 743 var x = c ? await foo() : foo(); // conditional
650 var y = {}; 744 var y = {};
651 } catch (error) { 745 } catch (error) {
652 try { 746 try {
653 x = c ? await fooError(error) : fooError(error); 747 x = c ? await fooError(error) : fooError(error);
654 } catch (error) { // nested error handler with overlapping name 748 } catch (error) { // nested error handler with overlapping name
655 y.x = foo(error); 749 y.x = foo(error);
656 } finally { 750 } finally {
657 foo(x); 751 foo(x);
658 } 752 }
659 } 753 }
660 } 754 }
661 """, """ 755 """, """
662 function(c) { 756 function(c, i) {
663 var __goto = 0, __completer = new Completer(), __handler = null, x, y, __error 1, __error2; 757 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError, x , y, __error1, __error2;
664 function __helper(__result) { 758 function __body(__errorCode, __result) {
759 if (__errorCode == 1) {
760 __storedError = __result;
761 __goto = __handler;
762 }
665 while (true) 763 while (true)
666 try { 764 try {
667 switch (__goto) { 765 switch (__goto) {
668 case 0: 766 case 0:
669 // Function start 767 // Function start
670 __handler = 1; 768 __handler = 2;
671 __goto = c ? 4 : 6; 769 __goto = c ? 5 : 7;
672 break; 770 break;
673 case 4: 771 case 5:
674 // then 772 // then
675 __goto = 7; 773 __goto = 8;
676 return thenHelper(foo(), __helper, __completer, function(__error) { 774 return thenHelper(foo(), __body, __completer);
677 __goto = 1; 775 case 8:
678 __helper(__error);
679 });
680 case 7:
681 // returning from await. 776 // returning from await.
682 // goto join 777 // goto join
683 __goto = 5; 778 __goto = 6;
684 break; 779 break;
685 case 6: 780 case 7:
686 // else 781 // else
687 __result = foo(); 782 __result = foo();
688 case 5: 783 case 6:
689 // join 784 // join
690 x = __result; 785 x = __result;
691 y = {}; 786 y = {};
692 __next = [3]; 787 __next = [4];
693 __handler = null; 788 __handler = 1;
694 // goto after finally 789 // goto after finally
695 __goto = 3; 790 __goto = 4;
696 break; 791 break;
697 case 1: 792 case 2:
698 // catch 793 // catch
699 __handler = null; 794 __handler = 1;
700 __error1 = __result; 795 __error1 = __storedError;
701 __handler = 8; 796 __handler = 9;
702 __goto = c ? 11 : 13; 797 __goto = c ? 12 : 14;
703 break; 798 break;
704 case 11: 799 case 12:
705 // then 800 // then
706 __goto = 14; 801 __goto = 15;
707 return thenHelper(fooError(__error1), __helper, __completer, functio n(__error) { 802 return thenHelper(fooError(__error1), __body, __completer);
708 __goto = 8; 803 case 15:
709 __helper(__error);
710 });
711 case 14:
712 // returning from await. 804 // returning from await.
713 // goto join 805 // goto join
714 __goto = 12; 806 __goto = 13;
715 break; 807 break;
716 case 13: 808 case 14:
717 // else 809 // else
718 __result = fooError(__error1); 810 __result = fooError(__error1);
719 case 12: 811 case 13:
720 // join 812 // join
721 x = __result; 813 x = __result;
722 __next = [10]; 814 __next = [11];
723 // goto finally 815 // goto finally
724 __goto = 9; 816 __goto = 10;
725 break; 817 break;
726 case 8: 818 case 9:
727 // catch 819 // catch
728 __handler = null; 820 __handler = 10;
729 __error2 = __result; 821 __next = [1];
822 __error2 = __storedError;
730 y.x = foo(__error2); 823 y.x = foo(__error2);
731 __handler = null; 824 __handler = 1;
732 __next = [10]; 825 __next = [11];
733 case 9: 826 case 10:
734 // finally 827 // finally
735 __handler = null; 828 __handler = 1;
736 foo(x); 829 foo(x);
737 // goto the next finally handler 830 // goto the next finally handler
738 __goto = __next.pop(); 831 __goto = __next.pop();
739 break; 832 break;
740 case 10: 833 case 11:
741 // after finally 834 // after finally
742 case 3: 835 case 4:
743 // after finally 836 // after finally
744 // implicit return 837 // implicit return
745 return thenHelper(null, null, __completer, null); 838 return thenHelper(null, 0, __completer, null);
839 case 1:
840 // rethrow
841 return thenHelper(__storedError, 1, __completer);
746 } 842 }
747 } catch (__error) { 843 } catch (__error) {
748 if (__handler === null) 844 __storedError = __error;
749 throw __error;
750 __result = __error;
751 __goto = __handler; 845 __goto = __handler;
752 } 846 }
753 847
754 } 848 }
755 return thenHelper(null, __helper, __completer, null); 849 return thenHelper(null, __body, __completer, null);
756 }"""); 850 }""");
757 testTransform(""" 851 testTransform("""
758 function(x, y) async { 852 function(x, y, j) async {
759 print(await(foo(x))); // calls 853 print(await(foo(x))); // calls
760 (await print)(foo(x)); 854 (await print)(foo(x));
761 print(foo(await x)); 855 print(foo(await x));
762 await (print(foo(await x))); 856 await (print(foo(await x)));
763 print(foo(x, await y, z)); 857 print(foo(x, await y, z));
764 } 858 }
765 """, """ 859 """, """
766 function(x, y) { 860 function(x, y, j) {
767 var __goto = 0, __completer = new Completer(), __temp1, __temp2, __temp3; 861 var __goto = 0, __completer = new Completer(), __handler = 1, __storedError, _ _temp1, __temp2, __temp3;
768 function __helper(__result) { 862 function __body(__errorCode, __result) {
863 if (__errorCode == 1) {
864 __storedError = __result;
865 __goto = __handler;
866 }
769 while (true) 867 while (true)
770 switch (__goto) { 868 try {
771 case 0: 869 switch (__goto) {
772 // Function start 870 case 0:
773 __temp1 = print; 871 // Function start
774 __goto = 1; 872 __temp1 = print;
775 return thenHelper(foo(x), __helper, __completer, null); 873 __goto = 2;
776 case 1: 874 return thenHelper(foo(x), __body, __completer);
777 // returning from await. 875 case 2:
778 __temp1(__result); 876 // returning from await.
779 __goto = 2; 877 __temp1(__result);
780 return thenHelper(print, __helper, __completer, null); 878 __goto = 3;
781 case 2: 879 return thenHelper(print, __body, __completer);
782 // returning from await. 880 case 3:
783 __result(foo(x)); 881 // returning from await.
784 __temp1 = print; 882 __result(foo(x));
785 __temp2 = foo; 883 __temp1 = print;
786 __goto = 3; 884 __temp2 = foo;
787 return thenHelper(x, __helper, __completer, null); 885 __goto = 4;
788 case 3: 886 return thenHelper(x, __body, __completer);
789 // returning from await. 887 case 4:
790 __temp1(__temp2(__result)); 888 // returning from await.
791 __temp1 = print; 889 __temp1(__temp2(__result));
792 __temp2 = foo; 890 __temp1 = print;
793 __goto = 5; 891 __temp2 = foo;
794 return thenHelper(x, __helper, __completer, null); 892 __goto = 6;
795 case 5: 893 return thenHelper(x, __body, __completer);
796 // returning from await. 894 case 6:
797 __goto = 4; 895 // returning from await.
798 return thenHelper(__temp1(__temp2(__result)), __helper, __completer, n ull); 896 __goto = 5;
799 case 4: 897 return thenHelper(__temp1(__temp2(__result)), __body, __completer);
800 // returning from await. 898 case 5:
801 __temp1 = print; 899 // returning from await.
802 __temp2 = foo; 900 __temp1 = print;
803 __temp3 = x; 901 __temp2 = foo;
804 __goto = 6; 902 __temp3 = x;
805 return thenHelper(y, __helper, __completer, null); 903 __goto = 7;
806 case 6: 904 return thenHelper(y, __body, __completer);
807 // returning from await. 905 case 7:
808 __temp1(__temp2(__temp3, __result, z)); 906 // returning from await.
809 // implicit return 907 __temp1(__temp2(__temp3, __result, z));
810 return thenHelper(null, null, __completer, null); 908 // implicit return
909 return thenHelper(null, 0, __completer, null);
910 case 1:
911 // rethrow
912 return thenHelper(__storedError, 1, __completer);
913 }
914 } catch (__error) {
915 __storedError = __error;
916 __goto = __handler;
811 } 917 }
918
812 } 919 }
813 return thenHelper(null, __helper, __completer, null); 920 return thenHelper(null, __body, __completer, null);
814 }"""); 921 }""");
815 testTransform(""" 922 testTransform("""
816 function(x, y) async { 923 function(x, y, k) async {
817 while (await(foo())) { 924 while (await(foo())) {
818 lab: { // labelled statement 925 lab: { // labelled statement
819 switch(y) { 926 switch(y) {
820 case 0: 927 case 0:
821 foo(); 928 foo();
822 case 0: // Duplicate case 929 case 0: // Duplicate case
823 print(await foo1(x)); 930 print(await foo1(x));
824 return y; 931 return y;
825 case await bar(): // await in case 932 case await bar(): // await in case
826 print(await foobar(x)); 933 print(await foobar(x));
827 return y; 934 return y;
828 case x: 935 case x:
829 if (a) { 936 if (a) {
830 throw new Error(); 937 throw new Error();
831 } else { 938 } else {
832 continue; 939 continue;
833 } 940 }
834 default: // defaul case 941 default: // defaul case
835 break lab; // break to label 942 break lab; // break to label
836 } 943 }
837 foo(); 944 foo();
838 } 945 }
839 } 946 }
840 }""", """ 947 }""", """
841 function(x, y) { 948 function(x, y, k) {
842 var __goto = 0, __completer = new Completer(), __returnValue, __temp1; 949 var __goto = 0, __completer = new Completer(), __handler = 2, __storedError, _ _returnValue, __temp1;
843 function __helper(__result) { 950 function __body(__errorCode, __result) {
951 if (__errorCode == 1) {
952 __storedError = __result;
953 __goto = __handler;
954 }
844 while (true) 955 while (true)
845 switch (__goto) { 956 try {
846 case 0: 957 switch (__goto) {
847 // Function start 958 case 0:
848 case 2: 959 // Function start
849 // while condition 960 case 3:
850 __goto = 4; 961 // while condition
851 return thenHelper(foo(), __helper, __completer, null); 962 __goto = 5;
852 case 4: 963 return thenHelper(foo(), __body, __completer);
853 // returning from await. 964 case 5:
854 if (!__result) { 965 // returning from await.
855 // goto after while 966 if (!__result) {
967 // goto after while
968 __goto = 4;
969 break;
970 }
971 case 7:
972 // continue lab
973 case 8:
974 // switch
975 __temp1 = y;
976 if (__temp1 === 0) {
977 // goto case
978 __goto = 10;
979 break;
980 }
981 if (__temp1 === 0) {
982 // goto case
983 __goto = 11;
984 break;
985 }
986 __goto = 13;
987 return thenHelper(bar(), __body, __completer);
988 case 13:
989 // returning from await.
990 if (__temp1 === __result) {
991 // goto case
992 __goto = 12;
993 break;
994 }
995 if (__temp1 === x) {
996 // goto case
997 __goto = 14;
998 break;
999 }
1000 // goto default
1001 __goto = 15;
1002 break;
1003 case 10:
1004 // case
1005 foo();
1006 case 11:
1007 // case
1008 __temp1 = print;
1009 __goto = 16;
1010 return thenHelper(foo1(x), __body, __completer);
1011 case 16:
1012 // returning from await.
1013 __temp1(__result);
1014 __returnValue = y;
1015 // goto return
1016 __goto = 1;
1017 break;
1018 case 12:
1019 // case
1020 __temp1 = print;
1021 __goto = 17;
1022 return thenHelper(foobar(x), __body, __completer);
1023 case 17:
1024 // returning from await.
1025 __temp1(__result);
1026 __returnValue = y;
1027 // goto return
1028 __goto = 1;
1029 break;
1030 case 14:
1031 // case
1032 if (a) {
1033 throw new Error();
1034 } else {
1035 // goto while condition
1036 __goto = 3;
1037 break;
1038 }
1039 case 15:
1040 // default
1041 // goto break lab
1042 __goto = 6;
1043 break;
1044 case 9:
1045 // after switch
1046 foo();
1047 case 6:
1048 // break lab
1049 // goto while condition
856 __goto = 3; 1050 __goto = 3;
857 break; 1051 break;
858 } 1052 case 4:
859 case 6: 1053 // after while
860 // continue lab 1054 case 1:
861 case 7: 1055 // return
862 // switch 1056 return thenHelper(__returnValue, 0, __completer, null);
863 __temp1 = y; 1057 case 2:
864 if (__temp1 === 0) { 1058 // rethrow
865 // goto case 1059 return thenHelper(__storedError, 1, __completer);
866 __goto = 9; 1060 }
867 break; 1061 } catch (__error) {
868 } 1062 __storedError = __error;
869 if (__temp1 === 0) { 1063 __goto = __handler;
870 // goto case
871 __goto = 10;
872 break;
873 }
874 __goto = 12;
875 return thenHelper(bar(), __helper, __completer, null);
876 case 12:
877 // returning from await.
878 if (__temp1 === __result) {
879 // goto case
880 __goto = 11;
881 break;
882 }
883 if (__temp1 === x) {
884 // goto case
885 __goto = 13;
886 break;
887 }
888 // goto default
889 __goto = 14;
890 break;
891 case 9:
892 // case
893 foo();
894 case 10:
895 // case
896 __temp1 = print;
897 __goto = 15;
898 return thenHelper(foo1(x), __helper, __completer, null);
899 case 15:
900 // returning from await.
901 __temp1(__result);
902 __returnValue = y;
903 // goto return
904 __goto = 1;
905 break;
906 case 11:
907 // case
908 __temp1 = print;
909 __goto = 16;
910 return thenHelper(foobar(x), __helper, __completer, null);
911 case 16:
912 // returning from await.
913 __temp1(__result);
914 __returnValue = y;
915 // goto return
916 __goto = 1;
917 break;
918 case 13:
919 // case
920 if (a) {
921 throw new Error();
922 } else {
923 // goto while condition
924 __goto = 2;
925 break;
926 }
927 case 14:
928 // default
929 // goto break lab
930 __goto = 5;
931 break;
932 case 8:
933 // after switch
934 foo();
935 case 5:
936 // break lab
937 // goto while condition
938 __goto = 2;
939 break;
940 case 3:
941 // after while
942 case 1:
943 // return
944 return thenHelper(__returnValue, null, __completer, null);
945 } 1064 }
1065
946 } 1066 }
947 return thenHelper(null, __helper, __completer, null); 1067 return thenHelper(null, __body, __completer, null);
948 }"""); 1068 }""");
949 } 1069 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698