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

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

Issue 2856223004: dart2js: Smaller async error sequence when only one handler (Closed)
Patch Set: Created 3 years, 7 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
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 import "package:compiler/src/js_backend/js_backend.dart" show StringBackedName; 8 import "package:compiler/src/js_backend/js_backend.dart" show StringBackedName;
9 9
10 void testTransform(String source, String expected, AsyncRewriterBase rewriter) { 10 void testTransform(String source, String expected, AsyncRewriterBase rewriter) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 var closures = [new A.main_closure()], v0 = await closures, v1 = 0, v2, v3; 57 var closures = [new A.main_closure()], v0 = await closures, v1 = 0, v2, v3;
58 if (v1 < 0 || v1 >= v0.length) 58 if (v1 < 0 || v1 >= v0.length)
59 H.ioore(v0, v1); 59 H.ioore(v0, v1);
60 v2 = 4; 60 v2 = 4;
61 v3 = 2; 61 v3 = 2;
62 P.print(v0[v1].call$2(v2, v3)); 62 P.print(v0[v1].call$2(v2, v3));
63 }""", 63 }""",
64 64
65 /// 01: ok 65 /// 01: ok
66 r"""function() { 66 r"""function() {
67 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError, c losures, v0, v1, v2, v3; 67 var __goto = 0, __completer = NewCompleter(), closures, v0, v1, v2, v3;
68 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 68 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
69 if (__errorCode === 1) { 69 if (__errorCode === 1)
70 __currentError = __result; 70 return rethrowHelper(__result, __completer);
71 __goto = __handler;
72 }
73 while (true) 71 while (true)
74 switch (__goto) { 72 switch (__goto) {
75 case 0: 73 case 0:
76 // Function start 74 // Function start
77 closures = [new A.main_closure()]; 75 closures = [new A.main_closure()];
78 __goto = 2; 76 __goto = 2;
79 return awaitHelper(closures, body); 77 return awaitHelper(closures, body);
80 case 2: 78 case 2:
81 // returning from await. 79 // returning from await.
82 v0 = __result; 80 v0 = __result;
83 v1 = 0; 81 v1 = 0;
84 if (v1 < 0 || v1 >= v0.length) 82 if (v1 < 0 || v1 >= v0.length)
85 H.ioore(v0, v1); 83 H.ioore(v0, v1);
86 v2 = 4; 84 v2 = 4;
87 v3 = 2; 85 v3 = 2;
88 P.print(v0[v1].call$2(v2, v3)); 86 P.print(v0[v1].call$2(v2, v3));
89 // implicit return 87 // implicit return
90 return returnHelper(null, __completer); 88 return returnHelper(null, __completer);
91 case 1:
92 // rethrow
93 return rethrowHelper(__currentError, __completer);
94 } 89 }
95 }); 90 });
96 return startHelper(body, __completer); 91 return startHelper(body, __completer);
97 }""") 92 }""")
98 93
99 /// 01: ok 94 /// 01: ok
100 ; 95 ;
101 96
102 testAsyncTransform( 97 testAsyncTransform(
103 """ 98 """
104 function(a) async { 99 function(a) async {
105 print(this.x); // Ensure `this` is translated in the helper function. 100 print(this.x); // Ensure `this` is translated in the helper function.
106 await foo(); 101 await foo();
107 }""", 102 }""",
108 """ 103 """
109 function(a) { 104 function(a) {
110 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError, _ _self = this; 105 var __goto = 0, __completer = NewCompleter(), __self = this;
111 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 106 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
112 if (__errorCode === 1) { 107 if (__errorCode === 1)
113 __currentError = __result; 108 return rethrowHelper(__result, __completer);
114 __goto = __handler;
115 }
116 while (true) 109 while (true)
117 switch (__goto) { 110 switch (__goto) {
118 case 0: 111 case 0:
119 // Function start 112 // Function start
120 print(__self.x); 113 print(__self.x);
121 __goto = 2; 114 __goto = 2;
122 return awaitHelper(foo(), body); 115 return awaitHelper(foo(), body);
123 case 2: 116 case 2:
124 // returning from await. 117 // returning from await.
125 // implicit return 118 // implicit return
126 return returnHelper(null, __completer); 119 return returnHelper(null, __completer);
127 case 1:
128 // rethrow
129 return rethrowHelper(__currentError, __completer);
130 } 120 }
131 }); 121 });
132 return startHelper(body, __completer); 122 return startHelper(body, __completer);
133 }"""); 123 }""");
134 124
135 testAsyncTransform( 125 testAsyncTransform(
136 """ 126 """
137 function(b) async { 127 function(b) async {
138 try { 128 try {
139 __outer: while (true) { // Overlapping label name. 129 __outer: while (true) { // Overlapping label name.
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 var a, b, c, d, e, f; 254 var a, b, c, d, e, f;
265 a = b++; // post- and preincrements. 255 a = b++; // post- and preincrements.
266 b = --b; 256 b = --b;
267 c = (await foo()).a++; 257 c = (await foo()).a++;
268 d = ++(await foo()).a; 258 d = ++(await foo()).a;
269 e = foo1()[await foo2()]--; 259 e = foo1()[await foo2()]--;
270 f = --foo1()[await foo2()]; 260 f = --foo1()[await foo2()];
271 }""", 261 }""",
272 """ 262 """
273 function(c) { 263 function(c) {
274 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError, a , b, c, d, e, f, __temp1; 264 var __goto = 0, __completer = NewCompleter(), a, b, c, d, e, f, __temp1;
275 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 265 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
276 if (__errorCode === 1) { 266 if (__errorCode === 1)
277 __currentError = __result; 267 return rethrowHelper(__result, __completer);
278 __goto = __handler;
279 }
280 while (true) 268 while (true)
281 switch (__goto) { 269 switch (__goto) {
282 case 0: 270 case 0:
283 // Function start 271 // Function start
284 a = b++; 272 a = b++;
285 b = --b; 273 b = --b;
286 __goto = 2; 274 __goto = 2;
287 return awaitHelper(foo(), body); 275 return awaitHelper(foo(), body);
288 case 2: 276 case 2:
289 // returning from await. 277 // returning from await.
(...skipping 10 matching lines...) Expand all
300 // returning from await. 288 // returning from await.
301 e = __temp1[__result]--; 289 e = __temp1[__result]--;
302 __temp1 = foo1(); 290 __temp1 = foo1();
303 __goto = 5; 291 __goto = 5;
304 return awaitHelper(foo2(), body); 292 return awaitHelper(foo2(), body);
305 case 5: 293 case 5:
306 // returning from await. 294 // returning from await.
307 f = --__temp1[__result]; 295 f = --__temp1[__result];
308 // implicit return 296 // implicit return
309 return returnHelper(null, __completer); 297 return returnHelper(null, __completer);
310 case 1:
311 // rethrow
312 return rethrowHelper(__currentError, __completer);
313 } 298 }
314 }); 299 });
315 return startHelper(body, __completer); 300 return startHelper(body, __completer);
316 }"""); 301 }""");
317 302
318 testAsyncTransform( 303 testAsyncTransform(
319 """ 304 """
320 function(d2) async { 305 function(d2) async {
321 var a, b, c, d, e, f, g, h; // empty initializer 306 var a, b, c, d, e, f, g, h; // empty initializer
322 a = foo1() || await foo2(); // short circuiting operators 307 a = foo1() || await foo2(); // short circuiting operators
323 b = await foo1() || foo2(); 308 b = await foo1() || foo2();
324 c = await foo1() || foo3(await foo2()); 309 c = await foo1() || foo3(await foo2());
325 d = foo1() || foo2(); 310 d = foo1() || foo2();
326 e = foo1() && await foo2(); 311 e = foo1() && await foo2();
327 f = await foo1() && foo2(); 312 f = await foo1() && foo2();
328 g = await foo1() && await foo2(); 313 g = await foo1() && await foo2();
329 h = foo1() && foo2(); 314 h = foo1() && foo2();
330 }""", 315 }""",
331 """ 316 """
332 function(d2) { 317 function(d2) {
333 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError, a , b, c, d, e, f, g, h, __temp1; 318 var __goto = 0, __completer = NewCompleter(), a, b, c, d, e, f, g, h, __temp1;
334 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 319 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
335 if (__errorCode === 1) { 320 if (__errorCode === 1)
336 __currentError = __result; 321 return rethrowHelper(__result, __completer);
337 __goto = __handler;
338 }
339 while (true) 322 while (true)
340 switch (__goto) { 323 switch (__goto) {
341 case 0: 324 case 0:
342 // Function start 325 // Function start
343 __temp1 = foo1(); 326 __temp1 = foo1();
344 if (__temp1) 327 if (__temp1)
345 __result = __temp1; 328 __result = __temp1;
346 else { 329 else {
347 // goto then 330 // goto then
348 __goto = 2; 331 __goto = 2;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 __goto = 17; 418 __goto = 17;
436 return awaitHelper(foo2(), body); 419 return awaitHelper(foo2(), body);
437 case 17: 420 case 17:
438 // returning from await. 421 // returning from await.
439 case 15: 422 case 15:
440 // join 423 // join
441 g = __result; 424 g = __result;
442 h = foo1() && foo2(); 425 h = foo1() && foo2();
443 // implicit return 426 // implicit return
444 return returnHelper(null, __completer); 427 return returnHelper(null, __completer);
445 case 1:
446 // rethrow
447 return rethrowHelper(__currentError, __completer);
448 } 428 }
449 }); 429 });
450 return startHelper(body, __completer); 430 return startHelper(body, __completer);
451 }"""); 431 }""");
452 432
453 testAsyncTransform( 433 testAsyncTransform(
454 """ 434 """
455 function(x, y) async { 435 function(x, y) async {
456 while (true) { 436 while (true) {
457 switch(y) { // Switch with no awaits in case key expressions 437 switch(y) { // Switch with no awaits in case key expressions
458 case 0: 438 case 0:
459 case 1: 439 case 1:
460 await foo(); 440 await foo();
461 continue; // Continue the loop, not the switch 441 continue; // Continue the loop, not the switch
462 case 1: // Duplicate case 442 case 1: // Duplicate case
463 await foo(); 443 await foo();
464 break; // Break the switch 444 break; // Break the switch
465 case 2: 445 case 2:
466 foo(); // No default 446 foo(); // No default
467 } 447 }
468 } 448 }
469 }""", 449 }""",
470 """ 450 """
471 function(x, y) { 451 function(x, y) {
472 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError; 452 var __goto = 0, __completer = NewCompleter();
473 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 453 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
474 if (__errorCode === 1) { 454 if (__errorCode === 1)
475 __currentError = __result; 455 return rethrowHelper(__result, __completer);
476 __goto = __handler;
477 }
478 while (true) 456 while (true)
479 switch (__goto) { 457 switch (__goto) {
480 case 0: 458 case 0:
481 // Function start 459 // Function start
482 case 2: 460 case 2:
483 // while condition 461 // while condition
484 case 4: 462 case 4:
485 // switch 463 // switch
486 switch (y) { 464 switch (y) {
487 case 0: 465 case 0:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 foo(); 509 foo();
532 case 5: 510 case 5:
533 // after switch 511 // after switch
534 // goto while condition 512 // goto while condition
535 __goto = 2; 513 __goto = 2;
536 break; 514 break;
537 case 3: 515 case 3:
538 // after while 516 // after while
539 // implicit return 517 // implicit return
540 return returnHelper(null, __completer); 518 return returnHelper(null, __completer);
541 case 1:
542 // rethrow
543 return rethrowHelper(__currentError, __completer);
544 } 519 }
545 }); 520 });
546 return startHelper(body, __completer); 521 return startHelper(body, __completer);
547 }"""); 522 }""");
548 523
549 testAsyncTransform( 524 testAsyncTransform(
550 """ 525 """
551 function(f) async { 526 function(f) async {
552 do { 527 do {
553 var a = await foo(); 528 var a = await foo();
554 if (a) // If with no awaits in body 529 if (a) // If with no awaits in body
555 break; 530 break;
556 else 531 else
557 continue; 532 continue;
558 } while (await foo()); 533 } while (await foo());
559 } 534 }
560 """, 535 """,
561 """ 536 """
562 function(f) { 537 function(f) {
563 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError, a ; 538 var __goto = 0, __completer = NewCompleter(), a;
564 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 539 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
565 if (__errorCode === 1) { 540 if (__errorCode === 1)
566 __currentError = __result; 541 return rethrowHelper(__result, __completer);
567 __goto = __handler;
568 }
569 while (true) 542 while (true)
570 switch (__goto) { 543 switch (__goto) {
571 case 0: 544 case 0:
572 // Function start 545 // Function start
573 case 2: 546 case 2:
574 // do body 547 // do body
575 __goto = 5; 548 __goto = 5;
576 return awaitHelper(foo(), body); 549 return awaitHelper(foo(), body);
577 case 5: 550 case 5:
578 // returning from await. 551 // returning from await.
(...skipping 15 matching lines...) Expand all
594 // returning from await. 567 // returning from await.
595 if (__result) { 568 if (__result) {
596 // goto do body 569 // goto do body
597 __goto = 2; 570 __goto = 2;
598 break; 571 break;
599 } 572 }
600 case 4: 573 case 4:
601 // after do 574 // after do
602 // implicit return 575 // implicit return
603 return returnHelper(null, __completer); 576 return returnHelper(null, __completer);
604 case 1:
605 // rethrow
606 return rethrowHelper(__currentError, __completer);
607 } 577 }
608 }); 578 });
609 return startHelper(body, __completer); 579 return startHelper(body, __completer);
610 }"""); 580 }""");
611 581
612 testAsyncTransform( 582 testAsyncTransform(
613 """ 583 """
614 function(g) async { 584 function(g) async {
615 for (var i = 0; i < await foo1(); i += await foo2()) { 585 for (var i = 0; i < await foo1(); i += await foo2()) {
616 if (foo(i)) 586 if (foo(i))
617 continue; 587 continue;
618 else 588 else
619 break; 589 break;
620 if (!foo(i)) { // If with no else and await in body. 590 if (!foo(i)) { // If with no else and await in body.
621 await foo(); 591 await foo();
622 return; 592 return;
623 } 593 }
624 print(await(foo(i))); 594 print(await(foo(i)));
625 } 595 }
626 } 596 }
627 """, 597 """,
628 """ 598 """
629 function(g) { 599 function(g) {
630 var __goto = 0, __completer = NewCompleter(), __returnValue, __handler = 2, __ currentError, i, __temp1; 600 var __goto = 0, __completer = NewCompleter(), __returnValue, i, __temp1;
631 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 601 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
632 if (__errorCode === 1) { 602 if (__errorCode === 1)
633 __currentError = __result; 603 return rethrowHelper(__result, __completer);
634 __goto = __handler;
635 }
636 while (true) 604 while (true)
637 switch (__goto) { 605 switch (__goto) {
638 case 0: 606 case 0:
639 // Function start 607 // Function start
640 i = 0; 608 i = 0;
641 case 3: 609 case 3:
642 // for condition 610 // for condition
643 __temp1 = i; 611 __temp1 = i;
644 __goto = 6; 612 __goto = 6;
645 return awaitHelper(foo1(), body); 613 return awaitHelper(foo1(), body);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 // returning from await. 654 // returning from await.
687 i += __result; 655 i += __result;
688 // goto for condition 656 // goto for condition
689 __goto = 3; 657 __goto = 3;
690 break; 658 break;
691 case 5: 659 case 5:
692 // after for 660 // after for
693 case 1: 661 case 1:
694 // return 662 // return
695 return returnHelper(__returnValue, __completer); 663 return returnHelper(__returnValue, __completer);
696 case 2:
697 // rethrow
698 return rethrowHelper(__currentError, __completer);
699 } 664 }
700 }); 665 });
701 return startHelper(body, __completer); 666 return startHelper(body, __completer);
702 }"""); 667 }""");
703 668
704 testAsyncTransform( 669 testAsyncTransform(
705 """ 670 """
706 function(a, h) async { 671 function(a, h) async {
707 var x = {"a": foo1(), "b": await foo2(), "c": foo3()}; 672 var x = {"a": foo1(), "b": await foo2(), "c": foo3()};
708 x["a"] = 2; // Different assignments 673 x["a"] = 2; // Different assignments
709 (await foo()).a = 3; 674 (await foo()).a = 3;
710 x[await foo()] = 4; 675 x[await foo()] = 4;
711 x[(await foo1()).a = await foo2()] = 5; 676 x[(await foo1()).a = await foo2()] = 5;
712 (await foo1())[await foo2()] = await foo3(6); 677 (await foo1())[await foo2()] = await foo3(6);
713 } 678 }
714 """, 679 """,
715 """ 680 """
716 function(a, h) { 681 function(a, h) {
717 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError, x , __temp1, __temp2; 682 var __goto = 0, __completer = NewCompleter(), x, __temp1, __temp2;
718 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 683 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
719 if (__errorCode === 1) { 684 if (__errorCode === 1)
720 __currentError = __result; 685 return rethrowHelper(__result, __completer);
721 __goto = __handler;
722 }
723 while (true) 686 while (true)
724 switch (__goto) { 687 switch (__goto) {
725 case 0: 688 case 0:
726 // Function start 689 // Function start
727 __temp1 = foo1(); 690 __temp1 = foo1();
728 __goto = 2; 691 __goto = 2;
729 return awaitHelper(foo2(), body); 692 return awaitHelper(foo2(), body);
730 case 2: 693 case 2:
731 // returning from await. 694 // returning from await.
732 x = {a: __temp1, b: __result, c: foo3()}; 695 x = {a: __temp1, b: __result, c: foo3()};
(...skipping 30 matching lines...) Expand all
763 case 8: 726 case 8:
764 // returning from await. 727 // returning from await.
765 __temp2 = __result; 728 __temp2 = __result;
766 __goto = 9; 729 __goto = 9;
767 return awaitHelper(foo3(6), body); 730 return awaitHelper(foo3(6), body);
768 case 9: 731 case 9:
769 // returning from await. 732 // returning from await.
770 __temp1[__temp2] = __result; 733 __temp1[__temp2] = __result;
771 // implicit return 734 // implicit return
772 return returnHelper(null, __completer); 735 return returnHelper(null, __completer);
773 case 1:
774 // rethrow
775 return rethrowHelper(__currentError, __completer);
776 } 736 }
777 }); 737 });
778 return startHelper(body, __completer); 738 return startHelper(body, __completer);
779 }"""); 739 }""");
780 740
781 testAsyncTransform( 741 testAsyncTransform(
782 """ 742 """
783 function(c, i) async { 743 function(c, i) async {
784 try { 744 try {
785 var x = c ? await foo() : foo(); // conditional 745 var x = c ? await foo() : foo(); // conditional
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 function(x, y, j) async { 862 function(x, y, j) async {
903 print(await(foo(x))); // calls 863 print(await(foo(x))); // calls
904 (await print)(foo(x)); 864 (await print)(foo(x));
905 print(foo(await x)); 865 print(foo(await x));
906 await (print(foo(await x))); 866 await (print(foo(await x)));
907 print(foo(x, await y, z)); 867 print(foo(x, await y, z));
908 } 868 }
909 """, 869 """,
910 """ 870 """
911 function(x, y, j) { 871 function(x, y, j) {
912 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError, _ _temp1, __temp2, __temp3; 872 var __goto = 0, __completer = NewCompleter(), __temp1, __temp2, __temp3;
913 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 873 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
914 if (__errorCode === 1) { 874 if (__errorCode === 1)
915 __currentError = __result; 875 return rethrowHelper(__result, __completer);
916 __goto = __handler;
917 }
918 while (true) 876 while (true)
919 switch (__goto) { 877 switch (__goto) {
920 case 0: 878 case 0:
921 // Function start 879 // Function start
922 __temp1 = print; 880 __temp1 = print;
923 __goto = 2; 881 __goto = 2;
924 return awaitHelper(foo(x), body); 882 return awaitHelper(foo(x), body);
925 case 2: 883 case 2:
926 // returning from await. 884 // returning from await.
927 __temp1(__result); 885 __temp1(__result);
(...skipping 22 matching lines...) Expand all
950 __temp1 = print; 908 __temp1 = print;
951 __temp2 = foo; 909 __temp2 = foo;
952 __temp3 = x; 910 __temp3 = x;
953 __goto = 7; 911 __goto = 7;
954 return awaitHelper(y, body); 912 return awaitHelper(y, body);
955 case 7: 913 case 7:
956 // returning from await. 914 // returning from await.
957 __temp1(__temp2(__temp3, __result, z)); 915 __temp1(__temp2(__temp3, __result, z));
958 // implicit return 916 // implicit return
959 return returnHelper(null, __completer); 917 return returnHelper(null, __completer);
960 case 1:
961 // rethrow
962 return rethrowHelper(__currentError, __completer);
963 } 918 }
964 }); 919 });
965 return startHelper(body, __completer); 920 return startHelper(body, __completer);
966 }"""); 921 }""");
967 922
968 testAsyncTransform( 923 testAsyncTransform(
969 """ 924 """
970 function(x, y, k) async { 925 function(x, y, k) async {
971 while (await(foo())) { 926 while (await(foo())) {
972 lab: { // labelled statement 927 lab: { // labelled statement
(...skipping 14 matching lines...) Expand all
987 } 942 }
988 default: // default case 943 default: // default case
989 break lab; // break to label 944 break lab; // break to label
990 } 945 }
991 foo(); 946 foo();
992 } 947 }
993 } 948 }
994 }""", 949 }""",
995 """ 950 """
996 function(x, y, k) { 951 function(x, y, k) {
997 var __goto = 0, __completer = NewCompleter(), __returnValue, __handler = 2, __ currentError, __temp1; 952 var __goto = 0, __completer = NewCompleter(), __returnValue, __temp1;
998 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 953 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
999 if (__errorCode === 1) { 954 if (__errorCode === 1)
1000 __currentError = __result; 955 return rethrowHelper(__result, __completer);
1001 __goto = __handler;
1002 }
1003 while (true) 956 while (true)
1004 switch (__goto) { 957 switch (__goto) {
1005 case 0: 958 case 0:
1006 // Function start 959 // Function start
1007 case 3: 960 case 3:
1008 // while condition 961 // while condition
1009 __goto = 5; 962 __goto = 5;
1010 return awaitHelper(foo(), body); 963 return awaitHelper(foo(), body);
1011 case 5: 964 case 5:
1012 // returning from await. 965 // returning from await.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 case 6: 1045 case 6:
1093 // break lab 1046 // break lab
1094 // goto while condition 1047 // goto while condition
1095 __goto = 3; 1048 __goto = 3;
1096 break; 1049 break;
1097 case 4: 1050 case 4:
1098 // after while 1051 // after while
1099 case 1: 1052 case 1:
1100 // return 1053 // return
1101 return returnHelper(__returnValue, __completer); 1054 return returnHelper(__returnValue, __completer);
1102 case 2:
1103 // rethrow
1104 return rethrowHelper(__currentError, __completer);
1105 } 1055 }
1106 }); 1056 });
1107 return startHelper(body, __completer); 1057 return startHelper(body, __completer);
1108 }"""); 1058 }""");
1109 1059
1110 testAsyncTransform( 1060 testAsyncTransform(
1111 """ 1061 """
1112 function(l) async { 1062 function(l) async {
1113 switch(await l) { 1063 switch(await l) {
1114 case 1: 1064 case 1:
1115 print(1); 1065 print(1);
1116 break; 1066 break;
1117 case 2: 1067 case 2:
1118 print(1); 1068 print(1);
1119 // Fallthrough 1069 // Fallthrough
1120 default: 1070 default:
1121 print(2); 1071 print(2);
1122 break; 1072 break;
1123 } 1073 }
1124 }""", 1074 }""",
1125 """ 1075 """
1126 function(l) { 1076 function(l) {
1127 var __goto = 0, __completer = NewCompleter(), __handler = 1, __currentError; 1077 var __goto = 0, __completer = NewCompleter();
1128 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) { 1078 var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
1129 if (__errorCode === 1) { 1079 if (__errorCode === 1)
1130 __currentError = __result; 1080 return rethrowHelper(__result, __completer);
1131 __goto = __handler;
1132 }
1133 while (true) 1081 while (true)
1134 switch (__goto) { 1082 switch (__goto) {
1135 case 0: 1083 case 0:
1136 // Function start 1084 // Function start
1137 __goto = 2; 1085 __goto = 2;
1138 return awaitHelper(l, body); 1086 return awaitHelper(l, body);
1139 case 2: 1087 case 2:
1140 // returning from await. 1088 // returning from await.
1141 switch (__result) { 1089 switch (__result) {
1142 case 1: 1090 case 1:
1143 print(1); 1091 print(1);
1144 break; 1092 break;
1145 case 2: 1093 case 2:
1146 print(1); 1094 print(1);
1147 default: 1095 default:
1148 print(2); 1096 print(2);
1149 break; 1097 break;
1150 } 1098 }
1151 // implicit return 1099 // implicit return
1152 return returnHelper(null, __completer); 1100 return returnHelper(null, __completer);
1153 case 1:
1154 // rethrow
1155 return rethrowHelper(__currentError, __completer);
1156 } 1101 }
1157 }); 1102 });
1158 return startHelper(body, __completer); 1103 return startHelper(body, __completer);
1159 }"""); 1104 }""");
1160 1105
1161 testAsyncTransform( 1106 testAsyncTransform(
1162 """ 1107 """
1163 function(m) async { 1108 function(m) async {
1164 var exception = 1; 1109 var exception = 1;
1165 try { 1110 try {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 // return 1213 // return
1269 return endOfIteration(); 1214 return endOfIteration();
1270 case 2: 1215 case 2:
1271 // rethrow 1216 // rethrow
1272 return uncaughtError(__currentError); 1217 return uncaughtError(__currentError);
1273 } 1218 }
1274 }; 1219 };
1275 }); 1220 });
1276 }"""); 1221 }""");
1277 } 1222 }
OLDNEW
« pkg/compiler/lib/src/js/rewrite_async.dart ('K') | « pkg/compiler/lib/src/js/rewrite_async.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698