[dart2js] Fix minor bug in rewrite_async.dart

We were always emitting an initialization of the $async$next stack for
unwinding finally blocks, even if there was no finally. The extra code
only appeared in generators that had try-catch-(no-finally), and seems
to be harmless, if slightly inefficient.

Change-Id: Ic1fa80e451fe00015a53b0319e3b56d2aaf04a30
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245088
Reviewed-by: Joshua Litt <joshualitt@google.com>
Commit-Queue: Stephen Adams <sra@google.com>
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index 82d1662..ecc0cd2 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -2852,11 +2852,11 @@
 
   @override
   bool visitTry(js.Try node) {
+    if (node.finallyPart != null) hasFinally = true;
     bool body = visit(node.body);
     bool catchPart = (node.catchPart == null) ? false : visit(node.catchPart);
     bool finallyPart =
         (node.finallyPart == null) ? false : visit(node.finallyPart);
-    if (finallyPart != null) hasFinally = true;
     return body || catchPart || finallyPart;
   }
 
diff --git a/pkg/compiler/test/async_await/async_await_js_transform_test.dart b/pkg/compiler/test/async_await/async_await_js_transform_test.dart
index 5897259..a39226a 100644
--- a/pkg/compiler/test/async_await/async_await_js_transform_test.dart
+++ b/pkg/compiler/test/async_await/async_await_js_transform_test.dart
@@ -1222,7 +1222,7 @@
 function(m) {
   var __goto = 0,
     __completer = NewCompleter(CompleterType),
-    __handler = 1, __currentError, __next = [], exception, __exception;
+    __handler = 1, __currentError, exception, __exception;
   var body = _wrapJsFunctionForAsync(function(__errorCode, __result) {
     if (__errorCode === 1) {
       __currentError = __result;