Index: tests/compiler/dart2js/async_await_js_transform_test.dart |
diff --git a/tests/compiler/dart2js/async_await_js_transform_test.dart b/tests/compiler/dart2js/async_await_js_transform_test.dart |
index a1936165503bf07503b18727c7b217b14c870e2f..36aa10d6e272ed6fe96f4584150d46a0e2d0f7de 100644 |
--- a/tests/compiler/dart2js/async_await_js_transform_test.dart |
+++ b/tests/compiler/dart2js/async_await_js_transform_test.dart |
@@ -597,7 +597,7 @@ function(g) { |
return thenHelper(foo2(), __body, __completer); |
case 11: |
// returning from await. |
- i = __result; |
+ i += __result; |
// goto for condition |
__goto = 3; |
break; |
@@ -1059,4 +1059,83 @@ function(l) { |
} |
return thenHelper(null, __body, __completer, null); |
}"""); |
+ |
+ testTransform(""" |
+ function(m) async { |
+ var exception = 1; |
+ try { |
+ await 42; |
+ throw 42; |
+ } catch (exception) { |
+ exception = await 10; |
+ exception += await 10; |
+ exception++; |
+ exception--; |
+ ++exception; |
+ --exception; |
+ exception += 10; |
+ } |
+ print(exception); |
+ }""", """ |
+function(m) { |
+ var __goto = 0, __completer = new Completer(), __handler = 1, __currentError, __next = [], exception, __exception; |
+ function __body(__errorCode, __result) { |
+ if (__errorCode === 1) { |
+ __currentError = __result; |
+ __goto = __handler; |
+ } |
+ while (true) |
+ switch (__goto) { |
+ case 0: |
+ // Function start |
+ exception = 1; |
+ __handler = 3; |
+ __goto = 6; |
+ return thenHelper(42, __body, __completer); |
+ case 6: |
+ // returning from await. |
+ throw 42; |
+ __handler = 1; |
+ // goto after finally |
+ __goto = 5; |
+ break; |
+ case 3: |
+ // catch |
+ __handler = 2; |
+ __exception = __currentError; |
+ __goto = 7; |
+ return thenHelper(10, __body, __completer); |
+ case 7: |
+ // returning from await. |
+ __exception = __result; |
+ __goto = 8; |
+ return thenHelper(10, __body, __completer); |
+ case 8: |
+ // returning from await. |
+ __exception += __result; |
+ __exception++; |
+ __exception--; |
+ ++__exception; |
+ --__exception; |
+ __exception += 10; |
+ // goto after finally |
+ __goto = 5; |
+ break; |
+ case 2: |
+ // uncaught |
+ // goto rethrow |
+ __goto = 1; |
+ break; |
+ case 5: |
+ // after finally |
+ print(exception); |
+ // implicit return |
+ return thenHelper(null, 0, __completer, null); |
+ case 1: |
+ // rethrow |
+ return thenHelper(__currentError, 1, __completer); |
+ } |
+ } |
+ return thenHelper(null, __body, __completer, null); |
+}"""); |
} |