diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..5ace460
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,6 @@
+version: 2
+updates:
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "weekly"
diff --git a/DEPS b/DEPS
index 5756948..5a145db 100644
--- a/DEPS
+++ b/DEPS
@@ -77,7 +77,7 @@
   # Revisions of /third_party/* dependencies.
   "args_rev": "862d929b980b993334974d38485a39d891d83918",
   "async_rev": "f3ed5f690e2ec9dbe1bfc5184705575b4f6480e5",
-  "bazel_worker_rev": "ceeba0982d4ff40d32371c9d35f3d2dc1868de20",
+  "bazel_worker_rev": "9710de6c9c70b1b583183db9d9721ba64e5a16fe",
   "benchmark_harness_rev": "0530da692a5d689f4b5450a7c8d1a8abe3e2d555",
   "boolean_selector_rev": "1d3565e2651d16566bb556955b96ea75018cbd0c",
   "boringssl_gen_rev": "ced85ef0a00bbca77ce5a91261a5f2ae61b1e62f",
@@ -89,7 +89,7 @@
   "chrome_rev": "19997",
   "cli_util_rev": "b0adbba89442b2ea6fef39c7a82fe79cb31e1168",
   "clock_rev": "f594d86da123015186d5680b0d0e8255c52fc162",
-  "collection_rev": "e1407da23b9f17400b3a905aafe2b8fa10db3d86",
+  "collection_rev": "69766daafbaa8535d1343fb7cd87e713f57c107f",
   "convert_rev": "00b251529c074df394b3391c7e3eea3dd9e5778e",
   "crypto_rev": "4297d240b0e1e780ec0a9eab23eaf1ad491f3e68",
   "csslib_rev": "518761b166974537f334dbf264e7f56cb157a96a",
@@ -127,7 +127,7 @@
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
   "matcher_rev": "12cdc5fbafd666ed908359ae215d5d0306087969",
   "mime_rev": "c2c5ffd594674f32dc277521369da1557a1622d3",
-  "mockito_rev": "1e977a727e82a2e1bdb49b79ef1dce0f23aa1faa",
+  "mockito_rev": "fcd6b285f7c4a631778890cf02b52a9a68171a71",
   "oauth2_rev": "199ebf15cbd5b07958438184f32e41c4447a57bf",
   "package_config_rev": "cff98c90acc457a3b0750f0a7da0e351a35e5d0c",
   "path_rev": "3d41ea582f5b0b18de3d90008809b877ff3f69bc",
@@ -135,7 +135,7 @@
   "pool_rev": "c40cc32eabecb9d60f1045d1403108d968805f9a",
   "protobuf_rev": "b149f801cf7a5e959cf1dbf72d61068ac275f24b",
   "pub_rev": "51435efcd574b7bc18d47a5dd620cb9759dea8f8",
-  "pub_semver_rev": "ea6c54019948dc03042c595ce9413e17aaf7aa38",
+  "pub_semver_rev": "5c0b4bfd5ca57fe16f1319c581dc8c882e9b8cb2",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
   "rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
   "shelf_rev": "05f42601d22c9bfe490ceda50e812f83b7d1de77",
@@ -143,19 +143,19 @@
   "source_maps_rev": "c07a01b8d5547ce3a47ee7a7a2b938a2bc09afe3",
   "source_span_rev": "8ae724c3e67f5afaacead44e93ff145bfb8775c7",
   "sse_rev": "9a54f1cdd91c8d79a6bf5ef8e849a12756607453",
-  "stack_trace_rev": "5220580872625ddee41e9ca9a5f3364789b2f0f6",
+  "stack_trace_rev": "17f09c2c6845bb31c7c385acecce5befb8527a13",
   "stream_channel_rev": "3fa3e40c75c210d617b8b943b9b8f580e9866a89",
   "string_scanner_rev": "6579871b528036767b3200b390a3ecef28e4900d",
   "sync_http_rev": "b6bd47965694dddffb6e62fb8a6c12d17c4ae4cd",
   "term_glyph_rev": "d0f205c67ea70eea47b9f41c8440129a72a9c86e",
-  "test_descriptor_rev": "ead23c1e7df079ac0f6457a35f7a71432892e527",
+  "test_descriptor_rev": "5ed5d7f6bf1191592995dcb8eedbbc17df69d386",
   "test_process_rev": "3e695bcfeab551473ddc288970f345f30e5e1375",
   "test_reflective_loader_rev": "8d0de01bbe852fea1f8e33aba907abcba50a8a1e",
   "test_rev": "d54846bc2b5cfa4e1445fda85c5e48a00940aa68",
   "typed_data_rev": "8b19e29bcf4077147de4d67adeabeb48270c65eb",
-  "usage_rev": "e85d575d6decb921c57a43b9844bba3607479f56",
+  "usage_rev": "79eef484e7403f24b414354a4af2008967484e46",
   "vector_math_rev": "1c72944e8c2f02340a1d90b32aab2e3836cef8cc",
-  "watcher_rev": "f76997ab0c857dc5537ac0975a9ada92b54ef949",
+  "watcher_rev": "e00c0ea769e32821d91c0880da8eb736839a6e6d",
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
   "web_socket_channel_rev": "99dbdc5769e19b9eeaf69449a59079153c6a8b1f",
   "WebCore_rev": "bcb10901266c884e7b3740abc597ab95373ab55c",
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
index beda821..0c23da3 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
@@ -406,6 +406,18 @@
           ElementKind.setterKind
         ],
       );
+    } else if (container is ExtensionElement) {
+      _addMatcher(
+        components: [node.identifier.name, container.displayName],
+        kinds: const [
+          ElementKind.constantKind,
+          ElementKind.fieldKind,
+          ElementKind.functionKind, // tear-off
+          ElementKind.getterKind,
+          ElementKind.methodKind, // tear-off
+          ElementKind.setterKind
+        ],
+      );
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 542b4eb..375e92f 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -777,6 +777,9 @@
     CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT: [
       AddSuperConstructorInvocation.new,
     ],
+    CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER: [
+      DataDriven.new,
+    ],
     CompileTimeErrorCode.UNDEFINED_FUNCTION: [
       DataDriven.new,
       ImportLibrary.forExtension,
diff --git a/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart b/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
index 129b7a0..e1e1804 100644
--- a/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
+++ b/pkg/analysis_server/test/src/analytics/google_analytics_manager_test.dart
@@ -20,11 +20,7 @@
 @reflectiveTest
 class GoogleAnalyticsManagerTest {
   final analytics = _MockAnalytics();
-  late final GoogleAnalyticsManager manager;
-
-  void setUp() {
-    manager = GoogleAnalyticsManager(analytics);
-  }
+  late final manager = GoogleAnalyticsManager(analytics);
 
   void test_plugin_request() {
     _defaultStartup();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart
index d39a127..2312d09 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart
@@ -839,6 +839,29 @@
 ''');
   }
 
+  Future<void> test_static_reference_removed_extension() async {
+    setPackageContent('''
+extension C {
+  static int b;
+}
+''');
+    setPackageData(_rename(['a', 'C'], 'b'));
+    await resolveTestCode('''
+import '$importUri';
+
+void f() {
+  C.a;
+}
+''');
+    await assertHasFix('''
+import '$importUri';
+
+void f() {
+  C.b;
+}
+''');
+  }
+
   Future<void> test_static_reference_removed_prefixed() async {
     setPackageContent('''
 class C {
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
index ee95251..4ea37fe 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
@@ -656,11 +656,11 @@
           argumentList: ArgumentList
             leftParenthesis: (
             rightParenthesis: )
-          parameter: <null>
           staticInvokeType: C? Function()
           staticType: C?
           typeArgumentTypes
             C?
+        parameter: self::@class::X::@constructor::•::@parameter::c
       MethodInvocation
         methodName: SimpleIdentifier
           token: g2
@@ -689,11 +689,11 @@
           argumentList: ArgumentList
             leftParenthesis: (
             rightParenthesis: )
-          parameter: <null>
           staticInvokeType: D? Function()
           staticType: D?
           typeArgumentTypes
             D?
+        parameter: self::@class::X::@constructor::•::@parameter::d
     rightParenthesis: )
   staticType: X
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index aa551dd..25e09df 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -702,11 +702,11 @@
           argumentList: ArgumentList
             leftParenthesis: (
             rightParenthesis: )
-          parameter: <null>
           staticInvokeType: C? Function()
           staticType: C?
           typeArgumentTypes
             C?
+        parameter: self::@function::foo::@parameter::c
       MethodInvocation
         methodName: SimpleIdentifier
           token: g2
@@ -735,11 +735,11 @@
           argumentList: ArgumentList
             leftParenthesis: (
             rightParenthesis: )
-          parameter: <null>
           staticInvokeType: D? Function()
           staticType: D?
           typeArgumentTypes
             D?
+        parameter: self::@function::foo::@parameter::d
     rightParenthesis: )
   staticInvokeType: void Function(A, B, {C? c, D? d})
   staticType: void
@@ -7388,8 +7388,8 @@
           colon: :
         expression: BooleanLiteral
           literal: false
-          parameter: <null>
           staticType: bool
+        parameter: self::@function::foo::@parameter::b
       NamedExpression
         name: Label
           label: SimpleIdentifier
@@ -7399,8 +7399,8 @@
           colon: :
         expression: IntegerLiteral
           literal: 0
-          parameter: <null>
           staticType: int
+        parameter: self::@function::foo::@parameter::a
     rightParenthesis: )
   staticInvokeType: void Function({int? a, bool? b})
   staticType: void
@@ -7424,8 +7424,8 @@
           colon: :
         expression: BooleanLiteral
           literal: false
-          parameter: <null>
           staticType: bool*
+        parameter: self::@function::foo::@parameter::b
       NamedExpression
         name: Label
           label: SimpleIdentifier
@@ -7435,8 +7435,8 @@
           colon: :
         expression: IntegerLiteral
           literal: 0
-          parameter: <null>
           staticType: int*
+        parameter: self::@function::foo::@parameter::a
     rightParenthesis: )
   staticInvokeType: void Function({int* a, bool* b})*
   staticType: void
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 39f28cb..787c85b 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -830,6 +830,7 @@
     _writeln('NamedExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
+      _writeParameterElement(node);
     });
   }
 
@@ -1461,8 +1462,7 @@
       if (parent is ArgumentList ||
           parent is AssignmentExpression && parent.rightHandSide == node ||
           parent is BinaryExpression && parent.rightOperand == node ||
-          parent is IndexExpression && parent.index == node ||
-          parent is NamedExpression && parent.expression == node) {
+          parent is IndexExpression && parent.index == node) {
         _writeElement('parameter', node.staticParameterElement);
       }
     }
diff --git a/pkg/compiler/lib/src/inferrer/engine.dart b/pkg/compiler/lib/src/inferrer/engine.dart
index 65036f5..d3aeab1 100644
--- a/pkg/compiler/lib/src/inferrer/engine.dart
+++ b/pkg/compiler/lib/src/inferrer/engine.dart
@@ -261,10 +261,6 @@
 
     info.bailedOut = false;
     info.elementType.inferred = true;
-    if (abstractValueDomain.isSpecializationOf(
-        info.originalType, abstractValueDomain.fixedListType)) {
-      info.checksGrowable = tracer.callsGrowableMethod;
-    }
     tracer.inputs.forEach(info.elementType.addInput);
     // Enqueue the list for later refinement
     _workQueue.add(info);
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
index 9e62daa..923e556 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
@@ -161,13 +161,8 @@
     });
 
     Map<ir.TreeNode, AbstractValue> allocatedLists = {};
-    Set<ir.TreeNode> checkedForGrowableLists = {};
     inferrer.types.allocatedLists
         .forEach((ir.TreeNode node, ListTypeInformation typeInformation) {
-      ListTypeInformation info = inferrer.types.allocatedLists[node];
-      if (info.checksGrowable) {
-        checkedForGrowableLists.add(node);
-      }
       allocatedLists[node] = typeInformation.type;
     });
 
@@ -177,7 +172,6 @@
         _inferredDataBuilder.close(closedWorld),
         memberResults,
         parameterResults,
-        checkedForGrowableLists,
         inferrer.returnsListElementTypeSet,
         allocatedLists);
 
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 87345f4..ea0f69f 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -1757,10 +1757,6 @@
   /// The length after the container has been traced.
   int inferredLength;
 
-  /// Whether this list goes through a growable check.
-  /// We conservatively assume it does.
-  bool checksGrowable = true;
-
   ListTypeInformation(
       AbstractValueDomain abstractValueDomain,
       MemberTypeInformation context,
diff --git a/pkg/compiler/lib/src/inferrer/types.dart b/pkg/compiler/lib/src/inferrer/types.dart
index e065188..92ee1c5 100644
--- a/pkg/compiler/lib/src/inferrer/types.dart
+++ b/pkg/compiler/lib/src/inferrer/types.dart
@@ -146,10 +146,6 @@
   /// the given [receiver] type.
   AbstractValue resultTypeOfSelector(Selector selector, AbstractValue receiver);
 
-  /// Returns whether a fixed-length constructor call goes through a growable
-  /// check.
-  bool isFixedArrayCheckedForGrowable(ir.TreeNode node);
-
   /// Returns the type of a list new expression [node].  Returns `null` if
   /// [node] does not represent the construction of a new list.
   AbstractValue typeOfNewList(ir.TreeNode node);
@@ -225,7 +221,6 @@
 
   final Map<MemberEntity, GlobalTypeInferenceMemberResult> memberResults;
   final Map<Local, AbstractValue> parameterResults;
-  final Set<ir.TreeNode> checkedForGrowableLists;
   final Set<Selector> returnsListElementTypeSet;
   final Map<ir.TreeNode, AbstractValue> _allocatedLists;
 
@@ -235,7 +230,6 @@
       this.inferredData,
       this.memberResults,
       this.parameterResults,
-      this.checkedForGrowableLists,
       this.returnsListElementTypeSet,
       this._allocatedLists)
       : _deadFieldResult =
@@ -262,7 +256,6 @@
     Map<Local, AbstractValue> parameterResults = source.readLocalMap(() =>
         closedWorld.abstractValueDomain
             .readAbstractValueFromDataSource(source));
-    Set<ir.TreeNode> checkedForGrowableLists = source.readTreeNodes().toSet();
     Set<Selector> returnsListElementTypeSet =
         source.readList(() => Selector.readFromDataSource(source)).toSet();
     Map<ir.TreeNode, AbstractValue> allocatedLists = source.readTreeNodeMap(
@@ -275,7 +268,6 @@
         inferredData,
         memberResults,
         parameterResults,
-        checkedForGrowableLists,
         returnsListElementTypeSet,
         allocatedLists);
   }
@@ -295,7 +287,6 @@
         parameterResults,
         (AbstractValue value) => closedWorld.abstractValueDomain
             .writeAbstractValueToDataSink(sink, value));
-    sink.writeTreeNodes(checkedForGrowableLists);
     sink.writeList(returnsListElementTypeSet,
         (Selector selector) => selector.writeToDataSink(sink));
     sink.writeTreeNodeMap(
@@ -407,14 +398,6 @@
     }
   }
 
-  /// Returns whether a fixed-length constructor call goes through a growable
-  /// check.
-  // TODO(sigmund): move into the result of the element containing such
-  // constructor call.
-  @override
-  bool isFixedArrayCheckedForGrowable(ir.Node ctorCall) =>
-      checkedForGrowableLists.contains(ctorCall);
-
   @override
   AbstractValue typeOfNewList(ir.Node node) => _allocatedLists[node];
 
@@ -508,9 +491,6 @@
   }
 
   @override
-  bool isFixedArrayCheckedForGrowable(ir.Node node) => false;
-
-  @override
   AbstractValue resultTypeOfSelector(Selector selector, AbstractValue mask) {
     return closedWorld.abstractValueDomain.dynamicType;
   }
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 03d96d5..0c073db 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -4082,16 +4082,13 @@
             canThrow ? NativeThrowBehavior.MAY : NativeThrowBehavior.NEVER)
       ..sourceInformation = sourceInformation;
     push(foreign);
-    // TODO(redemption): Global type analysis tracing may have determined that
-    // the fixed-length property is never checked. If so, we can avoid marking
-    // the array.
-    {
-      js.Template code = js.js.parseForeignJS(r'#.fixed$length = Array');
-      // We set the instruction as [canThrow] to avoid it being dead code.
-      // We need a finer grained side effect.
-      add(HForeignCode(code, _abstractValueDomain.nullType, [stack.last],
-          throwBehavior: NativeThrowBehavior.MAY));
-    }
+    js.Template fixedLengthMarker =
+        js.js.parseForeignJS(r'#.fixed$length = Array');
+    // We set the instruction as [canThrow] to avoid it being dead code.
+    // We need a finer grained side effect.
+    add(HForeignCode(
+        fixedLengthMarker, _abstractValueDomain.nullType, [stack.last],
+        throwBehavior: NativeThrowBehavior.MAY));
 
     HInstruction newInstance = stack.last;
 
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index a72f199..2ed7f4c 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -66,7 +66,6 @@
 import 'package:front_end/src/fasta/util/parser_ast_helper.dart';
 import 'package:kernel/ast.dart'
     show
-        AwaitExpression,
         BasicLiteral,
         Class,
         Component,
@@ -87,9 +86,7 @@
         TreeNode,
         UnevaluatedConstant,
         VariableDeclaration,
-        Version,
-        Visitor,
-        VisitorVoidMixin;
+        Version;
 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 import 'package:kernel/core_types.dart' show CoreTypes;
@@ -2421,13 +2418,6 @@
           backendTarget.performModularTransformations = false;
         }
       }
-      List<String> errors = VerifyTransformed.verify(component, backendTarget);
-      if (errors.isNotEmpty) {
-        return new Result<ComponentResult>(
-            result,
-            context.expectationSet["TransformVerificationError"],
-            errors.join('\n'));
-      }
       if (backendTarget is TestTarget &&
           backendTarget.hasGlobalTransformation) {
         component =
@@ -2492,34 +2482,6 @@
   }
 }
 
-/// Visitor that checks that the component has been transformed properly.
-// TODO(johnniwinther): Add checks for all nodes that are unsupported after
-// transformation.
-class VerifyTransformed extends Visitor<void> with VisitorVoidMixin {
-  final Target target;
-  List<String> errors = [];
-
-  VerifyTransformed(this.target);
-
-  @override
-  void defaultNode(Node node) {
-    node.visitChildren(this);
-  }
-
-  @override
-  void visitAwaitExpression(AwaitExpression node) {
-    if (target is VmTarget) {
-      errors.add("ERROR: Untransformed await expression: $node");
-    }
-  }
-
-  static List<String> verify(Component component, Target target) {
-    VerifyTransformed visitor = new VerifyTransformed(target);
-    component.accept(visitor);
-    return visitor.errors;
-  }
-}
-
 mixin TestTarget on Target {
   bool performModularTransformations = false;
 
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
index 66e1488..1ed196c 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
@@ -1,7 +1,6 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 
 extension Extension on core::int {
   method syncStarMethod = self::Extension|syncStarMethod;
@@ -25,58 +24,10 @@
 }
 static method Extension|get#syncStarMethod(lowered final core::int #this) → () → dynamic
   return () → dynamic => self::Extension|syncStarMethod(#this);
-static method Extension|asyncMethod(lowered final core::int #this) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method Extension|asyncMethod(lowered final core::int #this) → dynamic async /* futureValueType= dynamic */ {}
 static method Extension|get#asyncMethod(lowered final core::int #this) → () → dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
-static method Extension|asyncStarMethod(lowered final core::int #this) → dynamic /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L2:
-        {}
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-  return :controller_stream;
-}
+static method Extension|asyncStarMethod(lowered final core::int #this) → dynamic async* {}
 static method Extension|get#asyncStarMethod(lowered final core::int #this) → () → dynamic
   return () → dynamic => self::Extension|asyncStarMethod(#this);
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
index 484ac66..f3e3b49 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
@@ -8,47 +8,21 @@
 // ^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 import "deferred_explicit_access_lib.dart" as def;
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error) in null;
-        :result_or_exception;
-        self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
-        self::expect(0, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
-        self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in let final core::int #t5 = 0 in let final core::int #t6 = 42 in let final void #t7 = def::Extension|set#property(#t5, #t6) in #t6);
-        self::expect(84, let final core::Object* #t8 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(42));
-        self::expect(85, let final core::Object* #t9 = CheckLibraryIsLoaded(prefix) in def::Extension|method(43));
-        self::expect(42, let final core::Object* #t10 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty);
-        self::expect(87, let final core::Object* #t11 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty = 87);
-        self::expect(87, let final core::Object* #t12 = CheckLibraryIsLoaded(prefix) in def::Extension|staticMethod());
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await LoadLibrary(prefix);
+  self::expect(0, let final core::Object* #t1 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
+  self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
+  self::expect(42, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in let final core::int #t4 = 0 in let final core::int #t5 = 42 in let final void #t6 = def::Extension|set#property(#t4, #t5) in #t5);
+  self::expect(84, let final core::Object* #t7 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(42));
+  self::expect(85, let final core::Object* #t8 = CheckLibraryIsLoaded(prefix) in def::Extension|method(43));
+  self::expect(42, let final core::Object* #t9 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty);
+  self::expect(87, let final core::Object* #t10 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty = 87);
+  self::expect(87, let final core::Object* #t11 = CheckLibraryIsLoaded(prefix) in def::Extension|staticMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
@@ -100,4 +74,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:31 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:45 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:45 -> IntConstant(42)
-Extra constant evaluation: evaluated: 91, effectively constant: 3
+Extra constant evaluation: evaluated: 68, effectively constant: 3
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
index 3769826..bd0fcbf 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
@@ -1,45 +1,19 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 import "deferred_explicit_access_lib.dart" as def;
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix hide Extension;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error) in null;
-        :result_or_exception;
-        self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
-        self::expect(42, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::topLevelField = 42);
-        self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
-        self::expect(0, let final core::Object* #t5 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty);
-        self::expect(87, let final core::Object* #t6 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty = 87);
-        self::expect(87, let final core::Object* #t7 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty);
-        self::expect(87, let final core::Object* #t8 = CheckLibraryIsLoaded(prefix) in def::topLevelMethod());
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await LoadLibrary(prefix);
+  self::expect(0, let final core::Object* #t1 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
+  self::expect(42, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::topLevelField = 42);
+  self::expect(42, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
+  self::expect(0, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty);
+  self::expect(87, let final core::Object* #t5 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty = 87);
+  self::expect(87, let final core::Object* #t6 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty);
+  self::expect(87, let final core::Object* #t7 = CheckLibraryIsLoaded(prefix) in def::topLevelMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
index aea2b09..55fe823 100644
--- a/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
@@ -2,64 +2,15 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
 static field core::List<core::String> stringList = core::_GrowableList::_literal1<core::String>("bar");
-static method asyncString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  core::String? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = "foo";
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method asyncString() → asy::Future<core::String> async /* futureValueType= core::String */ {
+  return "foo";
 }
-static method asyncString2() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  FutureOr<core::String>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = self::asyncString();
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method asyncString2() → asy::Future<core::String> async /* futureValueType= core::String */ {
+  return self::asyncString();
 }
 static method syncStarString() → core::Iterable<core::String> /* originally sync* */ {
   function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
@@ -103,106 +54,14 @@
   }
   return new core::_SyncIterable::•<core::String>(:sync_op_gen);
 }
-static method asyncStarString() → asy::Stream<core::String> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::String>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L3:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}("foo"){(core::String) → core::bool})
-            return null;
-          else
-            [yield] null;
-          :controller.{asy::_AsyncStarStreamController::addStream}(self::asyncStarString2()){(asy::Stream<core::String>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-          [yield] let dynamic #t1 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error) in null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::String>(:result_or_exception)){(core::String) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::String>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::String>};
-  return :controller_stream;
+static method asyncStarString() → asy::Stream<core::String> async* {
+  yield "foo";
+  yield* self::asyncStarString2();
+  yield await self::asyncString();
 }
-static method asyncStarString2() → asy::Stream<core::String> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::String>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L4:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}("bar"){(core::String) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::String>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::String>};
-  return :controller_stream;
+static method asyncStarString2() → asy::Stream<core::String> async* {
+  yield "bar";
 }
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error) in null;
-        core::String str = _in::unsafeCast<core::String>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::String str = await self::asyncString();
 }
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
index f6fb0b0..46f8ed8 100644
--- a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
@@ -2,385 +2,42 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnsString(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::String>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnsFutureOrString(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::String>(:result_or_exception);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnsAwaitFutureOrString(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::String>(:result_or_exception);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnsFutureString(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::String>(:result_or_exception);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnsAwaitFutureString(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::String>(:result_or_exception);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnsObject(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::Object>(:result_or_exception);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnsFutureOrObject(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::Object>(:result_or_exception);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnsAwaitFutureOrObject(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::Object>(:result_or_exception);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnsFutureObject(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::Object>(:result_or_exception);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnsAwaitFutureObject(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::Object>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await self::returnsString();
+  await self::returnsFutureOrString();
+  await self::returnsAwaitFutureOrString();
+  await self::returnsFutureString();
+  await self::returnsAwaitFutureString();
+  await self::returnsObject();
+  await self::returnsFutureOrObject();
+  await self::returnsAwaitFutureOrObject();
+  await self::returnsFutureObject();
+  await self::returnsAwaitFutureObject();
 }
-static method returnsString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  core::String? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = "a";
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsFutureOrString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  FutureOr<core::String>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = self::getFutureOr<core::String>("a");
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsAwaitFutureOrString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  core::String? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::getFutureOr<core::String>("a"), :async_op_then, :async_op_error) in null;
-        :return_value = _in::unsafeCast<core::String>(:result_or_exception);
-        break #L4;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsFutureString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  FutureOr<core::String>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        :return_value = self::getFuture<core::String>("a");
-        break #L5;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsAwaitFutureString() → FutureOr<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  core::String? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::getFuture<core::String>("a"), :async_op_then, :async_op_error) in null;
-        :return_value = _in::unsafeCast<core::String>(:result_or_exception);
-        break #L6;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  FutureOr<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L7:
-      {
-        :return_value = new core::Object::•();
-        break #L7;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsFutureOrObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  FutureOr<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L8:
-      {
-        :return_value = self::getFutureOr<core::Object>(new core::Object::•());
-        break #L8;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsAwaitFutureOrObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  FutureOr<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L9:
-      {
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::getFutureOr<core::Object>(new core::Object::•()), :async_op_then, :async_op_error) in null;
-        :return_value = _in::unsafeCast<core::Object>(:result_or_exception);
-        break #L9;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsFutureObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  FutureOr<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L10:
-      {
-        :return_value = self::getFuture<core::Object>(new core::Object::•());
-        break #L10;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnsAwaitFutureObject() → FutureOr<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  FutureOr<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L11:
-      {
-        [yield] let dynamic #t14 = asy::_awaitHelper(self::getFuture<core::Object>(new core::Object::•()), :async_op_then, :async_op_error) in null;
-        :return_value = _in::unsafeCast<core::Object>(:result_or_exception);
-        break #L11;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> /* futureValueType= self::getFutureOr::T% */ /* originally async */ {
-  final asy::_Future<self::getFutureOr::T%> :async_future = new asy::_Future::•<self::getFutureOr::T%>();
-  core::bool* :is_sync = false;
-  FutureOr<self::getFutureOr::T%>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L12:
-      {
-        :return_value = v;
-        break #L12;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> /* futureValueType= self::getFuture::T% */ /* originally async */ {
-  final asy::_Future<self::getFuture::T%> :async_future = new asy::_Future::•<self::getFuture::T%>();
-  core::bool* :is_sync = false;
-  FutureOr<self::getFuture::T%>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L13:
-      {
-        :return_value = v;
-        break #L13;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method returnsString() → asy::Future<core::String> async /* futureValueType= core::String */ 
+  return "a";
+static method returnsFutureOrString() → asy::Future<core::String> async /* futureValueType= core::String */ 
+  return self::getFutureOr<core::String>("a");
+static method returnsAwaitFutureOrString() → asy::Future<core::String> async /* futureValueType= core::String */ 
+  return await self::getFutureOr<core::String>("a");
+static method returnsFutureString() → asy::Future<core::String> async /* futureValueType= core::String */ 
+  return self::getFuture<core::String>("a");
+static method returnsAwaitFutureString() → FutureOr<core::String> async /* futureValueType= core::String */ 
+  return await self::getFuture<core::String>("a");
+static method returnsObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
+  return new core::Object::•();
+static method returnsFutureOrObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
+  return self::getFutureOr<core::Object>(new core::Object::•());
+static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
+  return await self::getFutureOr<core::Object>(new core::Object::•());
+static method returnsFutureObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
+  return self::getFuture<core::Object>(new core::Object::•());
+static method returnsAwaitFutureObject() → FutureOr<core::Object> async /* futureValueType= core::Object */ 
+  return await self::getFuture<core::Object>(new core::Object::•());
+static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> async /* futureValueType= self::getFutureOr::T% */ 
+  return v;
+static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async /* futureValueType= self::getFuture::T% */ 
+  return v;
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
index eaa793aa..2acbe0f 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
@@ -7,33 +7,9 @@
 //   ^^^
 //
 import self as self;
-import "dart:async" as asy;
-import "dart:core" as core;
 
-static method foo() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        invalid-type x;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method foo() → dynamic async /* futureValueType= dynamic */ {
+  invalid-type x;
+  invalid-expression "Invalid iterable type in for-in";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
index e7662de..05ca060 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -18,52 +17,14 @@
     return "${this.{self::Node::name}{core::String}} ${let final core::Iterable<dynamic>? #t3 = tmp in #t3 == null ?{core::String?} null : #t3{core::Iterable<dynamic>}.{core::Iterable::join}(" "){([core::String]) → core::String}}".{core::String::trim}(){() → core::String};
   }
 }
-static method main() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  self::Node :async_temporary_0;
-  self::Node :async_temporary_1;
-  self::Node :async_temporary_2;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::String expected = "1 2 3 4 5 6 7 8 9 10";
-        :async_temporary_2 = new self::Node::•("2", core::_GrowableList::•<self::Node>(0));
-        [yield] let dynamic #t4 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("7", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
-        [yield] let dynamic #t5 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("6", core::_GrowableList::_literal1<self::Node>(_in::unsafeCast<self::Node>(:result_or_exception)))), :async_op_then, :async_op_error) in null;
-        :async_temporary_1 = _in::unsafeCast<self::Node>(:result_or_exception);
-        [yield] let dynamic #t6 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("8", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
-        :async_temporary_0 = _in::unsafeCast<self::Node>(:result_or_exception);
-        [yield] let dynamic #t7 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("9", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
-        [yield] let dynamic #t8 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("4", core::_GrowableList::_literal1<self::Node>(new self::Node::•("5", core::_GrowableList::_literal3<self::Node>(_in::unsafeCast<self::Node>(:async_temporary_1), _in::unsafeCast<self::Node>(:async_temporary_0), _in::unsafeCast<self::Node>(:result_or_exception)))))), :async_op_then, :async_op_error) in null;
-        [yield] let dynamic #t9 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("3", core::_GrowableList::_literal1<self::Node>(_in::unsafeCast<self::Node>(:result_or_exception)))), :async_op_then, :async_op_error) in null;
-        :async_temporary_0 = _in::unsafeCast<self::Node>(:result_or_exception);
-        [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("10", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
-        self::Node node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node>(_in::unsafeCast<self::Node>(:async_temporary_2), _in::unsafeCast<self::Node>(:async_temporary_0), _in::unsafeCast<self::Node>(:result_or_exception)));
-        core::String actual = node.{self::Node::toSimpleString}(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
-        core::print(actual);
-        if(!(actual =={core::String::==}{(core::Object) → core::bool} expected)) {
-          throw "Expected '${expected}' but got '${actual}'";
-        }
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → void async /* futureValueType= void */ {
+  core::String expected = "1 2 3 4 5 6 7 8 9 10";
+  self::Node node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node>(new self::Node::•("2", core::_GrowableList::•<self::Node>(0)), await asy::Future::value<self::Node>(new self::Node::•("3", core::_GrowableList::_literal1<self::Node>(await asy::Future::value<self::Node>(new self::Node::•("4", core::_GrowableList::_literal1<self::Node>(new self::Node::•("5", core::_GrowableList::_literal3<self::Node>(await asy::Future::value<self::Node>(new self::Node::•("6", core::_GrowableList::_literal1<self::Node>(await asy::Future::value<self::Node>(new self::Node::•("7", core::_GrowableList::•<self::Node>(0)))))), await asy::Future::value<self::Node>(new self::Node::•("8", core::_GrowableList::•<self::Node>(0))), await asy::Future::value<self::Node>(new self::Node::•("9", core::_GrowableList::•<self::Node>(0))))))))))), await asy::Future::value<self::Node>(new self::Node::•("10", core::_GrowableList::•<self::Node>(0)))));
+  core::String actual = node.{self::Node::toSimpleString}(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+  core::print(actual);
+  if(!(actual =={core::String::==}{(core::Object) → core::bool} expected)) {
+    throw "Expected '${expected}' but got '${actual}'";
+  }
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/await.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
index 8d16530..c9c78d7 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
@@ -1,34 +1,7 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper("Hello, World!", :async_op_then, :async_op_error) in null;
-        core::print(_in::unsafeCast<core::String>(:result_or_exception));
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::print(await "Hello, World!");
 }
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
index 7af3671..b8f0235 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
@@ -8,8 +8,8 @@
 //
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 import "dart:_internal" as _in;
+import "dart:async" as asy;
 
 import "dart:async";
 
@@ -53,746 +53,202 @@
 }
 static method dummy() → dynamic
   return 1;
-static method staticMembers() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  core::int :async_temporary_0;
-  core::int :async_temporary_1;
-  core::int :async_temporary_2;
-  core::int :async_temporary_3;
-  core::int :async_temporary_4;
-  core::int :async_temporary_5;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :async_temporary_0 = self::C::staticField;
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num a = _in::unsafeCast<core::int>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, a);
-        :async_temporary_1 = self::C::staticField = 1;
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num f = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, f);
-        :async_temporary_2 = self::C::staticGetter;
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num b = _in::unsafeCast<core::int>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, b);
-        :async_temporary_3 = self::C::staticSetter = 1;
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num c = _in::unsafeCast<core::int>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, c);
-        :async_temporary_4 = self::C::staticFoo(2);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num d = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(3, d);
-        :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num) → core::int}.{core::num::+}(self::C::staticSetter = 1){(core::num) → core::int}.{core::num::+}(self::C::staticFoo(1)){(core::num) → core::int};
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num e = _in::unsafeCast<core::int>(:async_temporary_5).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(5, e);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method staticMembers() → dynamic async /* futureValueType= dynamic */ {
+  core::num a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, a);
+  core::num f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, f);
+  core::num b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, b);
+  core::num c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, c);
+  core::num d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(3, d);
+  core::num e = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num) → core::int}.{core::num::+}(self::C::staticSetter = 1){(core::num) → core::int}.{core::num::+}(self::C::staticFoo(1)){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(5, e);
 }
-static method topLevelMembers() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  core::int :async_temporary_0;
-  core::int :async_temporary_1;
-  core::int :async_temporary_2;
-  core::int :async_temporary_3;
-  core::int :async_temporary_4;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :async_temporary_0 = self::globalVariable;
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num a = _in::unsafeCast<core::int>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, a);
-        :async_temporary_1 = self::topLevelGetter;
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num b = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, b);
-        :async_temporary_2 = self::topLevelSetter = 1;
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num c = _in::unsafeCast<core::int>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, c);
-        :async_temporary_3 = self::topLevelFoo(1);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num d = _in::unsafeCast<core::int>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, d);
-        :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num) → core::int}.{core::num::+}(self::topLevelSetter = 1){(core::num) → core::int}.{core::num::+}(self::topLevelFoo(1)){(core::num) → core::int};
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num e = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(5, e);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method topLevelMembers() → dynamic async /* futureValueType= dynamic */ {
+  core::num a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, a);
+  core::num b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, b);
+  core::num c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, c);
+  core::num d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, d);
+  core::num e = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num) → core::int}.{core::num::+}(self::topLevelSetter = 1){(core::num) → core::int}.{core::num::+}(self::topLevelFoo(1)){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(5, e);
 }
-static method instanceMembers() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  core::int :async_temporary_0;
-  core::int :async_temporary_1;
-  core::int :async_temporary_2;
-  core::int :async_temporary_3;
-  core::int :async_temporary_4;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        self::C inst = new self::C::•();
-        :async_temporary_0 = inst.{self::C::field}{core::int};
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num a = _in::unsafeCast<core::int>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, a);
-        :async_temporary_1 = inst.{self::C::getter}{core::int};
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num b = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, b);
-        :async_temporary_2 = inst.{self::C::setter} = 1;
-        [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num c = _in::unsafeCast<core::int>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, c);
-        :async_temporary_3 = inst.{self::C::foo}(1){(core::int) → core::int};
-        [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num d = _in::unsafeCast<core::int>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, d);
-        :async_temporary_4 = inst.{self::C::field}{core::int}.{core::num::+}(inst.{self::C::getter}{core::int}){(core::num) → core::int}.{core::num::+}(inst.{self::C::setter} = 1){(core::num) → core::int}.{core::num::+}(inst.{self::C::foo}(1){(core::int) → core::int}){(core::num) → core::int};
-        [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num e = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(5, e);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method instanceMembers() → dynamic async /* futureValueType= dynamic */ {
+  self::C inst = new self::C::•();
+  core::num a = inst.{self::C::field}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, a);
+  core::num b = inst.{self::C::getter}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, b);
+  core::num c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, c);
+  core::num d = inst.{self::C::foo}(1){(core::int) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, d);
+  core::num e = inst.{self::C::field}{core::int}.{core::num::+}(inst.{self::C::getter}{core::int}){(core::num) → core::int}.{core::num::+}(inst.{self::C::setter} = 1){(core::num) → core::int}.{core::num::+}(inst.{self::C::foo}(1){(core::int) → core::int}){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(5, e);
 }
-static method others() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :async_temporary_0;
-  core::int :async_temporary_1;
-  core::int :async_temporary_2;
-  core::List<core::int> :async_temporary_3;
-  core::int :async_temporary_4;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        :async_temporary_0 = self::globalVariable;
-        [yield] let dynamic #t17 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        :async_temporary_0 = "${_in::unsafeCast<core::int>(:async_temporary_0)} ${:result_or_exception} ";
-        [yield] let dynamic #t18 = asy::_awaitHelper("someString", :async_op_then, :async_op_error) in null;
-        core::String a = _in::unsafeCast<core::String>(:async_temporary_0).{core::String::+}(_in::unsafeCast<core::String>(:result_or_exception)){(core::String) → core::String};
-        self::expect("1 1 someString", a);
-        self::C c = new self::C::•();
-        :async_temporary_1 = c.{self::C::field}{core::int};
-        [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num d = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        core::int cnt = 2;
-        core::List<core::int> b = core::_GrowableList::_literal3<core::int>(1, 2, 3);
-        :async_temporary_3 = b;
-        :async_temporary_2 = cnt;
-        [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::List<core::int>>(:async_temporary_3).{core::List::[]=}(_in::unsafeCast<core::int>(:async_temporary_2), :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int, core::int) → void};
-        self::expect(1, b.{core::List::[]}(cnt){(core::int) → core::int});
-        :async_temporary_4 = b.{core::List::[]}(0){(core::int) → core::int};
-        [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-        core::num e = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
-        self::expect(2, e);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method others() → dynamic async /* futureValueType= dynamic */ {
+  core::String a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString"){(core::String) → core::String};
+  self::expect("1 1 someString", a);
+  self::C c = new self::C::•();
+  core::num d = c.{self::C::field}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::int cnt = 2;
+  core::List<core::int> b = core::_GrowableList::_literal3<core::int>(1, 2, 3);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int, core::int) → void};
+  self::expect(1, b.{core::List::[]}(cnt){(core::int) → core::int});
+  core::num e = b.{core::List::[]}(0){(core::int) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  self::expect(2, e);
 }
-static method conditionals() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  core::bool :async_temporary_0;
-  dynamic :async_temporary_1;
-  dynamic :async_temporary_2;
-  dynamic :async_temporary_3;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        core::bool a = false;
-        core::bool b = true;
-        :async_temporary_0 = (a || b) =={core::Object::==}{(core::Object) → core::bool} true;
-        if(_in::unsafeCast<core::bool>(:async_temporary_0))
-          ;
-        else {
-          [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-          :async_temporary_0 = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool =={core::Object::==}{(core::Object) → core::bool} true;
-        }
-        core::bool c = _in::unsafeCast<core::bool>(:async_temporary_0);
-        self::expect(true, c);
-        if(a || b) {
-          :async_temporary_1 = a;
-        }
-        else {
-          [yield] let dynamic #t23 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-          :async_temporary_1 = :result_or_exception;
-        }
-        dynamic d = :async_temporary_1;
-        self::expect(false, d);
-        if(a is{ForNonNullableByDefault} core::int) {
-          [yield] let dynamic #t24 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-          :async_temporary_2 = :result_or_exception;
-        }
-        else {
-          :async_temporary_2 = 2;
-        }
-        dynamic e = :async_temporary_2;
-        self::expect(2, e);
-        try {
-          if(a is{ForNonNullableByDefault} core::int) {
-            [yield] let dynamic #t25 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
-            :async_temporary_3 = :result_or_exception;
-          }
-          else {
-            :async_temporary_3 = 2;
-          }
-          dynamic f = :async_temporary_3;
-        }
-        on core::Object catch(final core::Object e) {
-        }
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method conditionals() → dynamic async /* futureValueType= dynamic */ {
+  core::bool a = false;
+  core::bool b = true;
+  core::bool c = a || b || await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  self::expect(true, c);
+  dynamic d = a || b ?{dynamic} a : await self::dummy();
+  self::expect(false, d);
+  dynamic e = a is{ForNonNullableByDefault} core::int ?{dynamic} await self::dummy() : 2;
+  self::expect(2, e);
+  try {
+    dynamic f = a is{ForNonNullableByDefault} core::int ?{dynamic} await self::dummy() : 2;
+  }
+  on core::Object catch(final core::Object e) {
+  }
 }
-static method asserts() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
+static method asserts() → dynamic async /* futureValueType= dynamic */ {
+  {
+    core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>> :sync-for-iterator = core::_GrowableList::_literal2<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func = :sync-for-iterator.{core::Iterator::current}{<T extends core::Object? = dynamic>(T%) → FutureOr<T%>};
       {
-        {
-          core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>> :sync-for-iterator = core::_GrowableList::_literal2<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func = :sync-for-iterator.{core::Iterator::current}{<T extends core::Object? = dynamic>(T%) → FutureOr<T%>};
-            {
-              assert {
-                [yield] let dynamic #t26 = asy::_awaitHelper(func<core::bool>(true){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
-                assert(_in::unsafeCast<core::bool>(:result_or_exception));
-              }
-              assert {
-                if(invalid-expression "pkg/front_end/testcases/general/await_complex.dart:120:12: Error: A value of type 'FutureOr<bool>' can't be assigned to a variable of type 'bool'.
+        assert(await func<core::bool>(true){(core::bool) → FutureOr<core::bool>});
+        assert(invalid-expression "pkg/front_end/testcases/general/await_complex.dart:120:12: Error: A value of type 'FutureOr<bool>' can't be assigned to a variable of type 'bool'.
     assert(id(true), await func(\"message\"));
-           ^" in self::id<core::bool>(true) as{TypeError,ForNonNullableByDefault} core::bool)
-                  ;
-                else {
-                  [yield] let dynamic #t27 = asy::_awaitHelper(func<core::String>("message"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
-                  assert(false, _in::unsafeCast<core::String>(:result_or_exception));
-                }
-              }
-              assert {
-                [yield] let dynamic #t28 = asy::_awaitHelper(func<core::bool>(true){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
-                if(_in::unsafeCast<core::bool>(:result_or_exception))
-                  ;
-                else {
-                  [yield] let dynamic #t29 = asy::_awaitHelper(func<core::String>("message"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
-                  assert(false, _in::unsafeCast<core::String>(:result_or_exception));
-                }
-              }
-              try {
-                assert {
-                  [yield] let dynamic #t30 = asy::_awaitHelper(func<core::bool>(false){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    ;
-                  else {
-                    [yield] let dynamic #t31 = asy::_awaitHelper(func<core::String>("message"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
-                    assert(false, _in::unsafeCast<core::String>(:result_or_exception));
-                  }
-                }
-                if(self::assertStatementsEnabled)
-                  throw "Didn't throw";
-              }
-              on core::AssertionError catch(final core::AssertionError e) {
-                self::expect("message", e.{core::AssertionError::message}{core::Object?});
-              }
-            }
-          }
+           ^" in self::id<core::bool>(true) as{TypeError,ForNonNullableByDefault} core::bool, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
+        assert(await func<core::bool>(true){(core::bool) → FutureOr<core::bool>}, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
+        try {
+          assert(await func<core::bool>(false){(core::bool) → FutureOr<core::bool>}, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
+          if(self::assertStatementsEnabled)
+            throw "Didn't throw";
+        }
+        on core::AssertionError catch(final core::AssertionError e) {
+          self::expect("message", e.{core::AssertionError::message}{core::Object?});
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  }
 }
-static method controlFlow() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :saved_try_context_var2;
-  dynamic :saved_try_context_var3;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  core::List<dynamic> :async_temporary_0;
-  core::List<dynamic> :async_temporary_1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L7:
+static method controlFlow() → dynamic async /* futureValueType= dynamic */ {
+  {
+    core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>> :sync-for-iterator = core::_GrowableList::_literal2<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func = :sync-for-iterator.{core::Iterator::current}{<T extends core::Object? = dynamic>(T%) → FutureOr<T%>};
       {
-        {
-          core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>> :sync-for-iterator = core::_GrowableList::_literal2<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func = :sync-for-iterator.{core::Iterator::current}{<T extends core::Object? = dynamic>(T%) → FutureOr<T%>};
+        core::int c = 0;
+        for (core::int i = await func<core::int>(0){(core::int) → FutureOr<core::int>}; await func<core::bool>(i.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}; await func<core::int>(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1){(core::int) → FutureOr<core::int>}) {
+          c = c.{core::num::+}(1){(core::num) → core::int};
+        }
+        self::expect(5, c);
+        c = 0;
+        while (await func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>})
+          c = c.{core::num::+}(1){(core::num) → core::int};
+        self::expect(5, c);
+        c = 0;
+        do {
+          c = c.{core::num::+}(1){(core::num) → core::int};
+        }
+        while (await func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>})
+        self::expect(5, c);
+        if(await func<core::bool>(c =={core::num::==}{(core::Object) → core::bool} 5){(core::bool) → FutureOr<core::bool>}) {
+          self::expect(5, c);
+        }
+        else {
+          throw "unreachable";
+        }
+        try {
+          throw await func<core::String>("string"){(core::String) → FutureOr<core::String>};
+        }
+        on core::String catch(no-exception-var) {
+        }
+        try {
+          let final Never #t3 = await throw "string" in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+        }
+        on core::String catch(no-exception-var) {
+        }
+        try
+          try {
+            try
+              try {
+                throw "string";
+              }
+              on core::Object catch(final core::Object e) {
+                self::expect("string", e);
+                self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
+                rethrow;
+              }
+            finally {
+              self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
+            }
+          }
+          on core::Object catch(final core::Object e) {
+            self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
+            self::expect("string", e);
+          }
+        finally {
+          self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
+        }
+        #L1:
+        switch(await func<core::int>(2){(core::int) → FutureOr<core::int>}) {
+          #L2:
+          case #C3:
             {
-              core::int c = 0;
-              {
-                dynamic #t32 = true;
-                core::int #t33;
-                #L8:
-                while (true) {
-                  has-declared-initializer core::int i;
-                  if(#t32) {
-                    #t32 = false;
-                    [yield] let dynamic #t34 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                    i = _in::unsafeCast<core::int>(:result_or_exception);
-                  }
-                  else {
-                    i = #t33;
-                    [yield] let dynamic #t35 = asy::_awaitHelper(func<core::int>(let final core::int #t36 = i in let final core::int #t37 = i = #t36.{core::num::+}(1){(core::num) → core::int} in #t36){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                    _in::unsafeCast<core::int>(:result_or_exception);
-                  }
-                  [yield] let dynamic #t38 = asy::_awaitHelper(func<core::bool>(i.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                    {
-                      c = c.{core::num::+}(1){(core::num) → core::int};
-                    }
-                    #t33 = i;
-                  }
-                  else
-                    break #L8;
-                }
-              }
-              self::expect(5, c);
-              c = 0;
-              #L9:
-              while (true) {
-                [yield] let dynamic #t39 = asy::_awaitHelper(func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
-                if(_in::unsafeCast<core::bool>(:result_or_exception))
-                  c = c.{core::num::+}(1){(core::num) → core::int};
-                else
-                  break #L9;
-              }
-              self::expect(5, c);
-              c = 0;
-              do {
-                c = c.{core::num::+}(1){(core::num) → core::int};
-                [yield] let dynamic #t40 = asy::_awaitHelper(func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
-              }
-              while (_in::unsafeCast<core::bool>(:result_or_exception))
-              self::expect(5, c);
-              [yield] let dynamic #t41 = asy::_awaitHelper(func<core::bool>(c =={core::num::==}{(core::Object) → core::bool} 5){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                self::expect(5, c);
-              }
-              else {
-                throw "unreachable";
-              }
-              try {
-                [yield] let dynamic #t42 = asy::_awaitHelper(func<core::String>("string"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
-                throw _in::unsafeCast<core::String>(:result_or_exception);
-              }
-              on core::String catch(no-exception-var) {
-              }
-              try {
-                [yield] let dynamic #t43 = asy::_awaitHelper(throw "string", :async_op_then, :async_op_error) in null;
-                let final Never #t44 = _in::unsafeCast<Never>(:result_or_exception) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-              }
-              on core::String catch(no-exception-var) {
-              }
-              try
-                try {
-                  try
-                    try {
-                      throw "string";
-                    }
-                    on core::Object catch(final core::Object e) {
-                      self::expect("string", e);
-                      [yield] let dynamic #t45 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                      self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
-                      rethrow;
-                    }
-                  finally {
-                    [yield] let dynamic #t46 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                    self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
-                  }
-                }
-                on core::Object catch(final core::Object e) {
-                  [yield] let dynamic #t47 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                  self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
-                  self::expect("string", e);
-                }
-              finally {
-                [yield] let dynamic #t48 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
-              }
-              #L10:
-              {
-                [yield] let dynamic #t49 = asy::_awaitHelper(func<core::int>(2){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                switch(_in::unsafeCast<core::int>(:result_or_exception)) {
-                  #L11:
-                  case #C3:
-                    {
-                      break #L10;
-                    }
-                  #L12:
-                  default:
-                    {
-                      throw "unreachable";
-                    }
-                }
-              }
-              [yield] let dynamic #t50 = asy::_awaitHelper((() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-                final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-                core::bool* :is_sync = false;
-                core::int? :return_value;
-                (dynamic) → dynamic :async_op_then;
-                (core::Object, core::StackTrace) → dynamic :async_op_error;
-                core::int :await_jump_var = 0;
-                dynamic :await_ctx_var;
-                dynamic :saved_try_context_var0;
-                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-                  try {
-                    #L13:
-                    {
-                      [yield] let dynamic #t51 = asy::_awaitHelper(func<core::int>(42){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                      :return_value = _in::unsafeCast<core::int>(:result_or_exception);
-                      break #L13;
-                    }
-                    asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-                    return;
-                  }
-                  on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                    asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-                  }
-                :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-                :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :async_op(null, null){() → dynamic};
-                :is_sync = true;
-                return :async_future;
-              })(){() → asy::Future<core::int>}, :async_op_then, :async_op_error) in null;
-              self::expect(42, _in::unsafeCast<core::int>(:result_or_exception));
-              [yield] let dynamic #t52 = asy::_awaitHelper((() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-                final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-                core::bool* :is_sync = false;
-                FutureOr<core::int>? :return_value;
-                (dynamic) → dynamic :async_op_then;
-                (core::Object, core::StackTrace) → dynamic :async_op_error;
-                core::int :await_jump_var = 0;
-                dynamic :await_ctx_var;
-                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-                  try {
-                    #L14:
-                    {
-                      :return_value = func<core::int>(42){(core::int) → FutureOr<core::int>};
-                      break #L14;
-                    }
-                    asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-                    return;
-                  }
-                  on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                    asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-                  }
-                :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-                :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :async_op(null, null){() → dynamic};
-                :is_sync = true;
-                return :async_future;
-              })(){() → asy::Future<core::int>}, :async_op_then, :async_op_error) in null;
-              self::expect(42, _in::unsafeCast<core::int>(:result_or_exception));
-              function testStream1() → asy::Stream<core::int> /* originally async* */ {
-                asy::_AsyncStarStreamController<core::int>? :controller;
-                dynamic :controller_stream;
-                (dynamic) → dynamic :async_op_then;
-                (core::Object, core::StackTrace) → dynamic :async_op_error;
-                core::int :await_jump_var = 0;
-                dynamic :await_ctx_var;
-                dynamic :saved_try_context_var0;
-                dynamic :saved_try_context_var1;
-                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-                  try
-                    try {
-                      #L15:
-                      {
-                        [yield] let dynamic #t53 = asy::_awaitHelper(func<core::int>(42){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
-                        if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int>(:result_or_exception)){(core::int) → core::bool})
-                          return null;
-                        else
-                          [yield] null;
-                      }
-                      return;
-                    }
-                    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                      :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-                    }
-                  finally {
-                    :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-                  }
-                :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-                :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
-                :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
-                return :controller_stream;
-              }
-              :async_temporary_0 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t54 = asy::_awaitHelper(testStream1(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>}, :async_op_then, :async_op_error) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>>(:async_temporary_0), _in::unsafeCast<core::List<core::int>>(:result_or_exception));
-              function testStream2() → asy::Stream<core::int> /* originally async* */ {
-                asy::_AsyncStarStreamController<core::int>? :controller;
-                dynamic :controller_stream;
-                (dynamic) → dynamic :async_op_then;
-                (core::Object, core::StackTrace) → dynamic :async_op_error;
-                core::int :await_jump_var = 0;
-                dynamic :await_ctx_var;
-                dynamic :saved_try_context_var0;
-                dynamic :saved_try_context_var1;
-                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-                  try
-                    try {
-                      #L16:
-                      {
-                        [yield] let dynamic #t55 = asy::_awaitHelper(func<asy::Stream<core::int>>(self::intStream()){(asy::Stream<core::int>) → FutureOr<asy::Stream<core::int>>}, :async_op_then, :async_op_error) in null;
-                        :controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int>>(:result_or_exception)){(asy::Stream<core::int>) → void};
-                        [yield] null;
-                        if(_in::unsafeCast<core::bool>(:result_or_exception))
-                          return null;
-                      }
-                      return;
-                    }
-                    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                      :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-                    }
-                  finally {
-                    :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-                  }
-                :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-                :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
-                :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
-                return :controller_stream;
-              }
-              :async_temporary_1 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t56 = asy::_awaitHelper(testStream2(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>}, :async_op_then, :async_op_error) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>>(:async_temporary_1), _in::unsafeCast<core::List<core::int>>(:result_or_exception));
+              break #L1;
             }
-          }
+          #L3:
+          default:
+            {
+              throw "unreachable";
+            }
         }
+        self::expect(42, await(() → asy::Future<core::int> async /* futureValueType= core::int */ {
+          return await func<core::int>(42){(core::int) → FutureOr<core::int>};
+        })(){() → asy::Future<core::int>});
+        self::expect(42, await(() → asy::Future<core::int> async /* futureValueType= core::int */ {
+          return func<core::int>(42){(core::int) → FutureOr<core::int>};
+        })(){() → asy::Future<core::int>});
+        function testStream1() → asy::Stream<core::int> async* {
+          yield await func<core::int>(42){(core::int) → FutureOr<core::int>};
+        }
+        self::expectList(core::_GrowableList::_literal1<dynamic>(42), await testStream1(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>});
+        function testStream2() → asy::Stream<core::int> async* {
+          yield* await func<asy::Stream<core::int>>(self::intStream()){(asy::Stream<core::int>) → FutureOr<asy::Stream<core::int>>};
+        }
+        self::expectList(core::_GrowableList::_literal1<dynamic>(42), await testStream2(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>});
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  }
 }
-static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> /* futureValueType= self::future::T% */ /* originally async */ {
-  final asy::_Future<self::future::T%> :async_future = new asy::_Future::•<self::future::T%>();
-  core::bool* :is_sync = false;
-  FutureOr<self::future::T%>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L17:
-      {
-        :return_value = value;
-        break #L17;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> async /* futureValueType= self::future::T% */ 
+  return value;
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → FutureOr<self::id::T%>
   return value;
-static method intStream() → asy::Stream<core::int> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::int>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L18:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(42){(core::int) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
-  return :controller_stream;
+static method intStream() → asy::Stream<core::int> async* {
+  yield 42;
 }
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L19:
-      {
-        for (core::int i = 0; i.{core::num::<}(11){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
-          [yield] let dynamic #t57 = asy::_awaitHelper(self::staticMembers(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          [yield] let dynamic #t58 = asy::_awaitHelper(self::topLevelMembers(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          [yield] let dynamic #t59 = asy::_awaitHelper(self::instanceMembers(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          [yield] let dynamic #t60 = asy::_awaitHelper(self::conditionals(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          [yield] let dynamic #t61 = asy::_awaitHelper(self::others(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          [yield] let dynamic #t62 = asy::_awaitHelper(self::asserts(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          [yield] let dynamic #t63 = asy::_awaitHelper(self::controlFlow(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-        }
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  for (core::int i = 0; i.{core::num::<}(11){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    await self::staticMembers();
+    await self::topLevelMembers();
+    await self::instanceMembers();
+    await self::conditionals();
+    await self::others();
+    await self::asserts();
+    await self::controlFlow();
+  }
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
index 4b57e71..32b67ed 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -10,92 +9,15 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m() → asy::Future<core::List<core::int>> /* futureValueType= core::List<core::int> */ /* originally async */ {
-    final asy::_Future<core::List<core::int>> :async_future = new asy::_Future::•<core::List<core::int>>();
-    core::bool* :is_sync = false;
-    core::List<core::int>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
-          [yield] let dynamic #t2 = asy::_awaitHelper(this.{self::C::_m}(){() → asy::Future<core::int>}, :async_op_then, :async_op_error) in null;
-          #t1.{core::List::add}(_in::unsafeCast<core::int>(:result_or_exception)){(core::int) → void};
-          :return_value = block {} =>#t1;
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  method _m() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          :return_value = 42;
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  method m() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ 
+    return let final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0) in block {
+      #t1.{core::List::add}(await this.{self::C::_m}(){() → asy::Future<core::int>}){(core::int) → void};
+    } =>#t1;
+  method _m() → asy::Future<core::int> async /* futureValueType= core::int */ 
+    return 42;
 }
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t3 = asy::_awaitHelper(new self::C::•().{self::C::m}(){() → asy::Future<core::List<core::int>>}, :async_op_then, :async_op_error) in null;
-        self::expect(42, _in::unsafeCast<core::List<core::int>>(:result_or_exception).{core::Iterable::first}{core::int});
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  self::expect(42, (await new self::C::•().{self::C::m}(){() → asy::Future<core::List<core::int>>}).{core::Iterable::first}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
index 25f1e40..61269a2 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
@@ -1,7 +1,6 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 
 import "dart:async";
 
@@ -9,30 +8,6 @@
   FutureOr<core::String>result = self::returnsString();
   core::print(result.{core::Object::runtimeType}{core::Type});
 }
-static method returnsString() → FutureOr<core::String> /* futureValueType= core::String */ /* originally async */ {
-  final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-  core::bool* :is_sync = false;
-  core::String? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = "oh no";
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method returnsString() → FutureOr<core::String> async /* futureValueType= core::String */ {
+  return "oh no";
 }
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
index f5586b6..b66e0d1 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -21,123 +20,20 @@
     ;
   method f(dynamic _) → dynamic {}
 }
-static method f1() → asy::Future<core::List<core::Object>> /* futureValueType= core::List<core::Object> */ /* originally async */ {
-  final asy::_Future<core::List<core::Object>> :async_future = new asy::_Future::•<core::List<core::Object>>();
-  core::bool* :is_sync = false;
-  core::List<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = core::_GrowableList::_literal1<core::Object>(1);
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method f1() → asy::Future<core::List<core::Object>> async /* futureValueType= core::List<core::Object> */ {
+  return core::_GrowableList::_literal1<core::Object>(1);
 }
 static method f2() → core::List<core::Object>
   return core::_GrowableList::_literal1<core::Object>(2);
-static method f3() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  core::Object? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = 3;
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method f3() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
+  return 3;
 }
-static method foo() → asy::Future<self::X> /* futureValueType= self::X */ /* originally async */ {
-  final asy::_Future<self::X> :async_future = new asy::_Future::•<self::X>();
-  core::bool* :is_sync = false;
-  self::X? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  self::Y :async_temporary_0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        final self::Y #t1 = new self::Y::•();
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::f1(), :async_op_then, :async_op_error) in null;
-        #t1.{self::Y::f}(_in::unsafeCast<core::List<core::Object>>(:result_or_exception)){(dynamic) → dynamic};
-        :async_temporary_0 = block {
-          #t1.{self::Y::f}(self::f2()){(dynamic) → dynamic};
-        } =>#t1;
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error) in null;
-        :return_value = new self::X::•(_in::unsafeCast<self::Y>(:async_temporary_0), _in::unsafeCast<core::Object>(:result_or_exception));
-        break #L3;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method foo() → asy::Future<self::X> async /* futureValueType= self::X */ {
+  return new self::X::•(let final self::Y #t1 = new self::Y::•() in block {
+    #t1.{self::Y::f}(await self::f1()){(dynamic) → dynamic};
+    #t1.{self::Y::f}(self::f2()){(dynamic) → dynamic};
+  } =>#t1, await self::f3());
 }
-static method main() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::foo(), :async_op_then, :async_op_error) in null;
-        core::print(_in::unsafeCast<self::X>(:result_or_exception));
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → asy::Future<void> async /* futureValueType= void */ {
+  core::print(await self::foo());
 }
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
index 3517f76..4c94c0f 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
@@ -1,40 +1,13 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
 
 static method main() → dynamic {}
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        final core::Object* #t1 = CheckLibraryIsLoaded(lib);
-        [yield] let dynamic #t2 = asy::_awaitHelper(LoadLibrary(lib), :async_op_then, :async_op_error) in null;
-        def::m(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::m(await LoadLibrary(lib));
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
index aa93492..ef6dd9c 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
@@ -425,7 +425,6 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 class A extends core::Object {
   synthetic constructor •() → self::A*
@@ -1943,589 +1942,510 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        block {
-          final core::List<core::int*>* #t236 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async /* futureValueType= dynamic */ {
+  block {
+    final core::List<core::int*>* #t236 = core::_GrowableList::•<core::int*>(0);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
-        } =>#t236;
-        block {
-          final core::Set<core::int*>* #t237 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  } =>#t236;
+  block {
+    final core::Set<core::int*>* #t237 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
-          #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t237;
-        block {
-          final core::Map<core::int*, core::int*>* #t238 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t237;
+  block {
+    final core::Map<core::int*, core::int*>* #t238 = <core::int*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                         ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
-          #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
-        } =>#t238;
-        block {
-          final core::List<core::int*>* #t239 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  } =>#t238;
+  block {
+    final core::List<core::int*>* #t239 = core::_GrowableList::•<core::int*>(0);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
-        } =>#t239;
-        block {
-          final core::Set<core::int*>* #t240 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  } =>#t239;
+  block {
+    final core::Set<core::int*>* #t240 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
-          #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t240;
-        block {
-          final core::Map<core::int*, core::int*>* #t241 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-            core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t240;
+  block {
+    final core::Map<core::int*, core::int*>* #t241 = <core::int*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                             ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int*, core::int*>>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::MapEntry<core::int*, core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
-              #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
-            }
-          }
-          #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::int*, core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
+        #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+      }
+    }
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                     ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
-        } =>#t241;
-        block {
-          final core::List<core::int*>* #t243 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  } =>#t241;
+  block {
+    final core::List<core::int*>* #t243 = core::_GrowableList::•<core::int*>(0);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                                ^"){(core::int*) →* void};
-        } =>#t243;
-        block {
-          final core::Set<core::int*>* #t244 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  } =>#t243;
+  block {
+    final core::Set<core::int*>* #t244 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                ^"){(core::int*) →* core::bool*};
-          #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t244;
-        <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+    #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t244;
+  <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null};
-        block {
-          final core::List<core::String*>* #t245 = core::_GrowableList::•<core::String*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  block {
+    final core::List<core::String*>* #t245 = core::_GrowableList::•<core::String*>(0);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
-            else
-              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      else
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
-        } =>#t245;
-        block {
-          final core::Set<core::String*>* #t246 = new col::_CompactLinkedHashSet::•<core::String*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  } =>#t245;
+  block {
+    final core::Set<core::String*>* #t246 = new col::_CompactLinkedHashSet::•<core::String*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
-            else
-              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      else
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
-          #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
-        } =>#t246;
-        block {
-          final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
+  } =>#t246;
+  block {
+    final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
-            else
-              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      else
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
-          #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
-        } =>#t247;
-        block {
-          final core::List<core::int*>* #t248 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+    #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
+  } =>#t247;
+  block {
+    final core::List<core::int*>* #t248 = core::_GrowableList::•<core::int*>(0);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                              ^"){(core::int*) →* void};
-            else
-              #t248.{core::List::add}{Invariant}(42){(core::int*) →* void};
-        } =>#t248;
-        block {
-          final core::Set<core::int*>* #t249 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      else
+        #t248.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t248;
+  block {
+    final core::Set<core::int*>* #t249 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                              ^"){(core::int*) →* core::bool*};
-            else
-              #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-          #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t249;
-        <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+      else
+        #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t249;
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null};
-        block {
-          final core::List<core::int*>* #t250 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
-            else
-              #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  block {
+    final core::List<core::int*>* #t250 = core::_GrowableList::•<core::int*>(0);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
+      else
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                      ^"){(core::int*) →* void};
-        } =>#t250;
-        block {
-          final core::Set<core::int*>* #t251 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-            else
-              #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  } =>#t250;
+  block {
+    final core::Set<core::int*>* #t251 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+      else
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                      ^"){(core::int*) →* core::bool*};
-          #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t251;
-        <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+    #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t251;
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                     ^": null};
-        final core::int* i = 0;
-        block {
-          final core::List<core::int*>* #t252 = core::_GrowableList::•<core::int*>(0);
-          {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int* #t253 = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
+  final core::int* i = 0;
+  block {
+    final core::List<core::int*>* #t252 = core::_GrowableList::•<core::int*>(0);
+    {
+      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::int* #t253 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        {
+          invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
-                #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
-              }
-            }
-          }
-        } =>#t252;
-        block {
-          final core::Set<core::int*>* #t254 = new col::_CompactLinkedHashSet::•<core::int*>();
-          {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int* #t255 = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
+          #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
+        }
+      }
+    }
+  } =>#t252;
+  block {
+    final core::Set<core::int*>* #t254 = new col::_CompactLinkedHashSet::•<core::int*>();
+    {
+      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::int* #t255 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        {
+          invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
-                #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-              }
-            }
-          }
-          #t254.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t254;
-        block {
-          final core::Map<core::String*, core::int*>* #t256 = <core::String*, core::int*>{};
-          {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int* #t257 = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
+          #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+        }
+      }
+    }
+    #t254.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t254;
+  block {
+    final core::Map<core::String*, core::int*>* #t256 = <core::String*, core::int*>{};
+    {
+      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(1).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::int* #t257 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        {
+          invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
-                #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-              }
-            }
-          }
-          #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t256;
-        core::List<dynamic>* list10 = block {
-          final core::List<dynamic>* #t258 = core::_GrowableList::•<dynamic>(0);
-          {
-            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+          #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+        }
+      }
+    }
+    #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t256;
+  core::List<dynamic>* list10 = block {
+    final core::List<dynamic>* #t258 = core::_GrowableList::•<dynamic>(0);
+    {
+      core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
                               ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
-              #t258.{core::List::add}{Invariant}(i){(dynamic) →* void};
-            }
-          }
-        } =>#t258;
-        core::Set<dynamic>* set10 = block {
-          final core::Set<dynamic>* #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
-          {
-            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t258.{core::List::add}{Invariant}(i){(dynamic) →* void};
+      }
+    }
+  } =>#t258;
+  core::Set<dynamic>* set10 = block {
+    final core::Set<dynamic>* #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
+    {
+      core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
-              #t259.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
-            }
-          }
-          #t259.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-        } =>#t259;
-        core::Map<core::String*, dynamic>* map10 = block {
-          final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
-          {
-            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t259.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
+      }
+    }
+    #t259.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t259;
+  core::Map<core::String*, dynamic>* map10 = block {
+    final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
+    {
+      core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
-              #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
-            }
-          }
-          #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-        } =>#t260;
-        core::List<core::int*>* list20 = block {
-          final core::List<core::int*>* #t261 = core::_GrowableList::•<core::int*>(0);
-          {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
+      }
+    }
+    #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t260;
+  core::List<core::int*>* list20 = block {
+    final core::List<core::int*>* #t261 = core::_GrowableList::•<core::int*>(0);
+    {
+      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              #t261.{core::List::add}{Invariant}(i){(core::int*) →* void};
-            }
-          }
-        } =>#t261;
-        core::Set<core::int*>* set20 = block {
-          final core::Set<core::int*>* #t262 = new col::_CompactLinkedHashSet::•<core::int*>();
-          {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        #t261.{core::List::add}{Invariant}(i){(core::int*) →* void};
+      }
+    }
+  } =>#t261;
+  core::Set<core::int*>* set20 = block {
+    final core::Set<core::int*>* #t262 = new col::_CompactLinkedHashSet::•<core::int*>();
+    {
+      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              #t262.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-            }
-          }
-          #t262.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t262;
-        core::Map<core::String*, core::int*>* map20 = block {
-          final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
-          {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        #t262.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+      }
+    }
+    #t262.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t262;
+  core::Map<core::String*, core::int*>* map20 = block {
+    final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
+    {
+      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
-              #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-            }
-          }
-          #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t263;
-        final core::List<dynamic>* #t264 = core::_GrowableList::•<dynamic>(0);
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+      }
+    }
+    #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t263;
+  core::List<dynamic>* list30 = block {
+    final core::List<dynamic>* #t264 = core::_GrowableList::•<dynamic>(0);
+    {
+      Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t266 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t264.{core::List::add}{Invariant}(i){(dynamic) →* void};
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+      try
+        while (let dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+          #t264.{core::List::add}{Invariant}(i){(dynamic) →* void};
         }
-        core::List<dynamic>* list30 = block {} =>#t264;
-        final core::Set<dynamic>* #t268 = new col::_CompactLinkedHashSet::•<dynamic>();
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+  } =>#t264;
+  core::Set<dynamic>* set30 = block {
+    final core::Set<dynamic>* #t266 = new col::_CompactLinkedHashSet::•<dynamic>();
+    {
+      Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t270 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t268.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+      try
+        while (let dynamic #t267 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+          #t266.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
         }
-        core::Set<dynamic>* set30 = block {
-          #t268.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
-        } =>#t268;
-        final core::Map<core::String*, dynamic>* #t272 = <core::String*, dynamic>{};
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t266.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t266;
+  core::Map<core::String*, dynamic>* map30 = block {
+    final core::Map<core::String*, dynamic>* #t268 = <core::String*, dynamic>{};
+    {
+      Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L4:
-            while (true) {
-              dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t274 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t272.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
-              }
-              else
-                break #L4;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+      try
+        while (let dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+          #t268.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
         }
-        core::Map<core::String*, dynamic>* map30 = block {
-          #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
-        } =>#t272;
-        final core::List<core::int*>* #t276 = core::_GrowableList::•<core::int*>(0);
-        {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t268.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t268;
+  core::List<core::int*>* list40 = block {
+    final core::List<core::int*>* #t270 = core::_GrowableList::•<core::int*>(0);
+    {
+      asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                          ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError} core::int*));
-          asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
-          try
-            #L5:
-            while (true) {
-              dynamic #t277 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t278 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                #t276.{core::List::add}{Invariant}(i){(core::int*) →* void};
-              }
-              else
-                break #L5;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
+      try
+        while (let dynamic #t271 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
+          #t270.{core::List::add}{Invariant}(i){(core::int*) →* void};
         }
-        core::List<core::int*>* list40 = block {} =>#t276;
-        final core::Set<core::int*>* #t280 = new col::_CompactLinkedHashSet::•<core::int*>();
-        {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+  } =>#t270;
+  core::Set<core::int*>* set40 = block {
+    final core::Set<core::int*>* #t272 = new col::_CompactLinkedHashSet::•<core::int*>();
+    {
+      asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError} core::int*));
-          asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
-          try
-            #L6:
-            while (true) {
-              dynamic #t281 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t282 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                #t280.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-              }
-              else
-                break #L6;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
+      try
+        while (let dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
+          #t272.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
         }
-        core::Set<core::int*>* set40 = block {
-          #t280.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t280;
-        final core::Map<core::String*, core::int*>* #t284 = <core::String*, core::int*>{};
-        {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t272.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t272;
+  core::Map<core::String*, core::int*>* map40 = block {
+    final core::Map<core::String*, core::int*>* #t274 = <core::String*, core::int*>{};
+    {
+      asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError} core::int*));
-          asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
-          try
-            #L7:
-            while (true) {
-              dynamic #t285 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t286 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-              }
-              else
-                break #L7;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
+      try
+        while (let dynamic #t275 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
+          #t274.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
         }
-        core::Map<core::String*, core::int*>* map40 = block {
-          #t284.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t284;
-        core::List<core::int*>* list50 = block {
-          final core::List<core::int*>* #t288 = core::_GrowableList::•<core::int*>(0);
-          for (; ; )
-            #t288.{core::List::add}{Invariant}(42){(core::int*) →* void};
-        } =>#t288;
-        core::Set<core::int*>* set50 = block {
-          final core::Set<core::int*>* #t289 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (; ; )
-            #t289.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-          #t289.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t289;
-        core::Map<core::String*, core::int*>* map50 = block {
-          final core::Map<core::String*, core::int*>* #t290 = <core::String*, core::int*>{};
-          for (; ; )
-            #t290.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-          #t290.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t290;
-        core::List<core::int*>* list60 = block {
-          final core::List<core::int*>* #t291 = core::_GrowableList::•<core::int*>(0);
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t274.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t274;
+  core::List<core::int*>* list50 = block {
+    final core::List<core::int*>* #t276 = core::_GrowableList::•<core::int*>(0);
+    for (; ; )
+      #t276.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t276;
+  core::Set<core::int*>* set50 = block {
+    final core::Set<core::int*>* #t277 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (; ; )
+      #t277.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t277.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t277;
+  core::Map<core::String*, core::int*>* map50 = block {
+    final core::Map<core::String*, core::int*>* #t278 = <core::String*, core::int*>{};
+    for (; ; )
+      #t278.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t278.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t278;
+  core::List<core::int*>* list60 = block {
+    final core::List<core::int*>* #t279 = core::_GrowableList::•<core::int*>(0);
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
-            #t291.{core::List::add}{Invariant}(42){(core::int*) →* void};
-        } =>#t291;
-        core::Set<core::int*>* set60 = block {
-          final core::Set<core::int*>* #t292 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+      #t279.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t279;
+  core::Set<core::int*>* set60 = block {
+    final core::Set<core::int*>* #t280 = new col::_CompactLinkedHashSet::•<core::int*>();
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-            #t292.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
-          #t292.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
-        } =>#t292;
-        core::Map<core::String*, core::int*>* map60 = block {
-          final core::Map<core::String*, core::int*>* #t293 = <core::String*, core::int*>{};
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+      #t280.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t280.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t280;
+  core::Map<core::String*, core::int*>* map60 = block {
+    final core::Map<core::String*, core::int*>* #t281 = <core::String*, core::int*>{};
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-            #t293.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
-          #t293.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
-        } =>#t293;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+      #t281.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t281.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t281;
 }
 static method testForElementErrorsNotAsync(asy::Stream<core::int*>* stream) → dynamic {
   block {
-    final core::List<core::int*>* #t294 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t282 = core::_GrowableList::•<core::int*>(0);
     await for (core::int* i in stream)
-      #t294.{core::List::add}{Invariant}(i){(core::int*) →* void};
-  } =>#t294;
+      #t282.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t282;
   block {
-    final core::Set<core::int*>* #t295 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t283 = new col::_CompactLinkedHashSet::•<core::int*>();
     await for (core::int* i in stream)
-      #t295.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-  } =>#t295;
+      #t283.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t283;
   block {
-    final core::Map<core::String*, core::int*>* #t296 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t284 = <core::String*, core::int*>{};
     await for (core::int* i in stream)
-      #t296.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
-  } =>#t296;
+      #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+  } =>#t284;
 }
 static method testPromotion(self::A* a) → dynamic {
   core::List<core::int*>* list10 = block {
-    final core::List<core::int*>* #t297 = core::_GrowableList::•<core::int*>(0);
+    final core::List<core::int*>* #t285 = core::_GrowableList::•<core::int*>(0);
     if(a is self::B*)
-      #t297.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
-  } =>#t297;
+      #t285.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
+  } =>#t285;
   core::Set<core::int*>* set10 = block {
-    final core::Set<core::int*>* #t298 = new col::_CompactLinkedHashSet::•<core::int*>();
+    final core::Set<core::int*>* #t286 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(a is self::B*)
-      #t298.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
-  } =>#t298;
+      #t286.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
+  } =>#t286;
   core::Map<core::int*, core::int*>* map10 = block {
-    final core::Map<core::int*, core::int*>* #t299 = <core::int*, core::int*>{};
+    final core::Map<core::int*, core::int*>* #t287 = <core::int*, core::int*>{};
     if(a is self::B*)
-      #t299.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
-  } =>#t299;
+      #t287.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
+  } =>#t287;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect
index e2cc511..3cd0d2b 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect
@@ -425,7 +425,6 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 class A extends core::Object {
   synthetic constructor •() → self::A
@@ -1933,589 +1932,510 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        block {
-          final core::List<core::int> #t236 = core::_GrowableList::•<core::int>(0);
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic async /* futureValueType= dynamic */ {
+  block {
+    final core::List<core::int> #t236 = core::_GrowableList::•<core::int>(0);
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
-        } =>#t236;
-        block {
-          final core::Set<core::int?> #t237 = new col::_CompactLinkedHashSet::•<core::int?>();
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  } =>#t236;
+  block {
+    final core::Set<core::int?> #t237 = new col::_CompactLinkedHashSet::•<core::int?>();
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                              ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
-          #t237.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t237;
-        block {
-          final core::Map<core::int, core::int?> #t238 = <core::int, core::int?>{};
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t237.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t237;
+  block {
+    final core::Map<core::int, core::int?> #t238 = <core::int, core::int?>{};
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                   ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                          ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int, core::int?) → void};
-          #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                 ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
-        } =>#t238;
-        block {
-          final core::List<core::int> #t239 = core::_GrowableList::•<core::int>(0);
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  } =>#t238;
+  block {
+    final core::List<core::int> #t239 = core::_GrowableList::•<core::int>(0);
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int)){(core::Iterable<core::int>) → void};
-        } =>#t239;
-        block {
-          final core::Set<core::int?> #t240 = new col::_CompactLinkedHashSet::•<core::int?>();
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int?>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  } =>#t239;
+  block {
+    final core::Set<core::int?> #t240 = new col::_CompactLinkedHashSet::•<core::int?>();
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int?>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <int?>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                  ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?)){(core::Iterable<core::int?>) → void};
-          #t240.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t240;
-        block {
-          final core::Map<core::int, core::int?> #t241 = <core::int, core::int?>{};
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
-            core::Iterator<core::MapEntry<core::int, core::int?>> :sync-for-iterator = <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t240.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t240;
+  block {
+    final core::Map<core::int, core::int?> #t241 = <core::int, core::int?>{};
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      core::Iterator<core::MapEntry<core::int, core::int?>> :sync-for-iterator = <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                       ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                              ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int?>>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::MapEntry<core::int, core::int?> #t242 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int?>};
-              #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int}, #t242.{core::MapEntry::value}{core::int?}){(core::int, core::int?) → void};
-            }
-          }
-          #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::int, core::int?> #t242 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int?>};
+        #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int}, #t242.{core::MapEntry::value}{core::int?}){(core::int, core::int?) → void};
+      }
+    }
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                      ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
-        } =>#t241;
-        block {
-          final core::List<core::int> #t243 = core::_GrowableList::•<core::int>(0);
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  } =>#t241;
+  block {
+    final core::List<core::int> #t243 = core::_GrowableList::•<core::int>(0);
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                                ^"){(core::int) → void};
-        } =>#t243;
-        block {
-          final core::Set<core::int?> #t244 = new col::_CompactLinkedHashSet::•<core::int?>();
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  } =>#t243;
+  block {
+    final core::Set<core::int?> #t244 = new col::_CompactLinkedHashSet::•<core::int?>();
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int?>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                 ^"){(core::int?) → core::bool};
-          #t244.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t244;
-        <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+    #t244.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t244;
+  <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                      ^": null};
-        block {
-          final core::List<core::String> #t245 = core::_GrowableList::•<core::String>(0);
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  block {
+    final core::List<core::String> #t245 = core::_GrowableList::•<core::String>(0);
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
-            else
-              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      else
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
-        } =>#t245;
-        block {
-          final core::Set<core::String?> #t246 = new col::_CompactLinkedHashSet::•<core::String?>();
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  } =>#t245;
+  block {
+    final core::Set<core::String?> #t246 = new col::_CompactLinkedHashSet::•<core::String?>();
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
   <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                               ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
-            else
-              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+      else
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
   <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                       ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
-          #t246.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
-        } =>#t246;
-        block {
-          final core::Map<core::String, core::String?> #t247 = <core::String, core::String?>{};
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+    #t246.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
+  } =>#t246;
+  block {
+    final core::Map<core::String, core::String?> #t247 = <core::String, core::String?>{};
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
   <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
-            else
-              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+      else
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
   <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                             ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
-          #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
-        } =>#t247;
-        block {
-          final core::List<core::int> #t248 = core::_GrowableList::•<core::int>(0);
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-              #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+    #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
+  } =>#t247;
+  block {
+    final core::List<core::int> #t248 = core::_GrowableList::•<core::int>(0);
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                              ^"){(core::int) → void};
-            else
-              #t248.{core::List::add}{Invariant}(42){(core::int) → void};
-        } =>#t248;
-        block {
-          final core::Set<core::int?> #t249 = new col::_CompactLinkedHashSet::•<core::int?>();
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-              #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      else
+        #t248.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t248;
+  block {
+    final core::Set<core::int?> #t249 = new col::_CompactLinkedHashSet::•<core::int?>();
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                               ^"){(core::int?) → core::bool};
-            else
-              #t249.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
-          #t249.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t249;
-        <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+      else
+        #t249.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t249.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t249;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                       ^": null};
-        block {
-          final core::List<core::int> #t250 = core::_GrowableList::•<core::int>(0);
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-              #t250.{core::List::add}{Invariant}(42){(core::int) → void};
-            else
-              #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  block {
+    final core::List<core::int> #t250 = core::_GrowableList::•<core::int>(0);
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t250.{core::List::add}{Invariant}(42){(core::int) → void};
+      else
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                      ^"){(core::int) → void};
-        } =>#t250;
-        block {
-          final core::Set<core::int?> #t251 = new col::_CompactLinkedHashSet::•<core::int?>();
-          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-              #t251.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
-            else
-              #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+  } =>#t250;
+  block {
+    final core::Set<core::int?> #t251 = new col::_CompactLinkedHashSet::•<core::int?>();
+    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t251.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+      else
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                       ^"){(core::int?) → core::bool};
-          #t251.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t251;
-        <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+    #t251.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t251;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                      ^": null};
-        final core::int i = 0;
-        block {
-          final core::List<core::int> #t252 = core::_GrowableList::•<core::int>(0);
-          {
-            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int #t253 = :sync-for-iterator.{core::Iterator::current}{core::int};
-              {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
+  final core::int i = 0;
+  block {
+    final core::List<core::int> #t252 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::int #t253 = :sync-for-iterator.{core::Iterator::current}{core::int};
+        {
+          invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
-                #t252.{core::List::add}{Invariant}(i){(core::int) → void};
-              }
-            }
-          }
-        } =>#t252;
-        block {
-          final core::Set<core::int?> #t254 = new col::_CompactLinkedHashSet::•<core::int?>();
-          {
-            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int #t255 = :sync-for-iterator.{core::Iterator::current}{core::int};
-              {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
+          #t252.{core::List::add}{Invariant}(i){(core::int) → void};
+        }
+      }
+    }
+  } =>#t252;
+  block {
+    final core::Set<core::int?> #t254 = new col::_CompactLinkedHashSet::•<core::int?>();
+    {
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::int #t255 = :sync-for-iterator.{core::Iterator::current}{core::int};
+        {
+          invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
   <int?>{for (i in <int>[1]) i, null};
               ^";
-                #t254.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
-              }
-            }
-          }
-          #t254.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t254;
-        block {
-          final core::Map<core::String, core::int?> #t256 = <core::String, core::int?>{};
-          {
-            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              final core::int #t257 = :sync-for-iterator.{core::Iterator::current}{core::int};
-              {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
+          #t254.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+        }
+      }
+    }
+    #t254.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t254;
+  block {
+    final core::Map<core::String, core::int?> #t256 = <core::String, core::int?>{};
+    {
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::int #t257 = :sync-for-iterator.{core::Iterator::current}{core::int};
+        {
+          invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
   <String, int?>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
                       ^";
-                #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
-              }
-            }
-          }
-          #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
-        } =>#t256;
-        core::List<dynamic> list10 = block {
-          final core::List<dynamic> #t258 = core::_GrowableList::•<dynamic>(0);
-          {
-            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+          #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+        }
+      }
+    }
+    #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t256;
+  core::List<dynamic> list10 = block {
+    final core::List<dynamic> #t258 = core::_GrowableList::•<dynamic>(0);
+    {
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
                               ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
-              #t258.{core::List::add}{Invariant}(i){(dynamic) → void};
-            }
-          }
-        } =>#t258;
-        core::Set<dynamic> set10 = block {
-          final core::Set<dynamic> #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
-          {
-            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t258.{core::List::add}{Invariant}(i){(dynamic) → void};
+      }
+    }
+  } =>#t258;
+  core::Set<dynamic> set10 = block {
+    final core::Set<dynamic> #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
+    {
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
                              ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
-              #t259.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
-            }
-          }
-          #t259.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
-        } =>#t259;
-        core::Map<core::String, dynamic> map10 = block {
-          final core::Map<core::String, dynamic> #t260 = <core::String, dynamic>{};
-          {
-            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t259.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
+      }
+    }
+    #t259.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t259;
+  core::Map<core::String, dynamic> map10 = block {
+    final core::Map<core::String, dynamic> #t260 = <core::String, dynamic>{};
+    {
+      core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                              ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
-              #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
-            }
-          }
-          #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
-        } =>#t260;
-        core::List<core::int> list20 = block {
-          final core::List<core::int> #t261 = core::_GrowableList::•<core::int>(0);
-          {
-            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+        #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
+      }
+    }
+    #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t260;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t261 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{core::Iterable::iterator}{core::Iterator<core::int>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
-              #t261.{core::List::add}{Invariant}(i){(core::int) → void};
-            }
-          }
-        } =>#t261;
-        core::Set<core::int?> set20 = block {
-          final core::Set<core::int?> #t262 = new col::_CompactLinkedHashSet::•<core::int?>();
-          {
-            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        #t261.{core::List::add}{Invariant}(i){(core::int) → void};
+      }
+    }
+  } =>#t261;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t262 = new col::_CompactLinkedHashSet::•<core::int?>();
+    {
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                               ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{core::Iterable::iterator}{core::Iterator<core::int>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
-              #t262.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
-            }
-          }
-          #t262.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t262;
-        core::Map<core::String, core::int?> map20 = block {
-          final core::Map<core::String, core::int?> #t263 = <core::String, core::int?>{};
-          {
-            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        #t262.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+      }
+    }
+    #t262.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t262;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t263 = <core::String, core::int?>{};
+    {
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                               ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{core::Iterable::iterator}{core::Iterator<core::int>};
-            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-              core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
-              #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
-            }
-          }
-          #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
-        } =>#t263;
-        final core::List<dynamic> #t264 = core::_GrowableList::•<dynamic>(0);
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+      }
+    }
+    #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t263;
+  core::List<dynamic> list30 = block {
+    final core::List<dynamic> #t264 = core::_GrowableList::•<dynamic>(0);
+    {
+      Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
-          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t266 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t264.{core::List::add}{Invariant}(i){(dynamic) → void};
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+      try
+        while (let dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+          #t264.{core::List::add}{Invariant}(i){(dynamic) → void};
         }
-        core::List<dynamic> list30 = block {} =>#t264;
-        final core::Set<dynamic> #t268 = new col::_CompactLinkedHashSet::•<dynamic>();
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+  } =>#t264;
+  core::Set<dynamic> set30 = block {
+    final core::Set<dynamic> #t266 = new col::_CompactLinkedHashSet::•<dynamic>();
+    {
+      Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
-          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t270 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t268.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+      try
+        while (let dynamic #t267 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+          #t266.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
         }
-        core::Set<dynamic> set30 = block {
-          #t268.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
-        } =>#t268;
-        final core::Map<core::String, dynamic> #t272 = <core::String, dynamic>{};
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t266.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t266;
+  core::Map<core::String, dynamic> map30 = block {
+    final core::Map<core::String, dynamic> #t268 = <core::String, dynamic>{};
+    {
+      Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
-          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L4:
-            while (true) {
-              dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t274 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                #t272.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
-              }
-              else
-                break #L4;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+      try
+        while (let dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+          #t268.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
         }
-        core::Map<core::String, dynamic> map30 = block {
-          #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
-        } =>#t272;
-        final core::List<core::int> #t276 = core::_GrowableList::•<core::int>(0);
-        {
-          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t268.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t268;
+  core::List<core::int> list40 = block {
+    final core::List<core::int> #t270 = core::_GrowableList::•<core::int>(0);
+    {
+      asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                          ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
-          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
-          try
-            #L5:
-            while (true) {
-              dynamic #t277 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t278 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
-                #t276.{core::List::add}{Invariant}(i){(core::int) → void};
-              }
-              else
-                break #L5;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
-              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+      try
+        while (let dynamic #t271 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
+          #t270.{core::List::add}{Invariant}(i){(core::int) → void};
         }
-        core::List<core::int> list40 = block {} =>#t276;
-        final core::Set<core::int?> #t280 = new col::_CompactLinkedHashSet::•<core::int?>();
-        {
-          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+  } =>#t270;
+  core::Set<core::int?> set40 = block {
+    final core::Set<core::int?> #t272 = new col::_CompactLinkedHashSet::•<core::int?>();
+    {
+      asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                         ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
-          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
-          try
-            #L6:
-            while (true) {
-              dynamic #t281 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t282 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
-                #t280.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
-              }
-              else
-                break #L6;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
-              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+      try
+        while (let dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
+          #t272.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
         }
-        core::Set<core::int?> set40 = block {
-          #t280.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t280;
-        final core::Map<core::String, core::int?> #t284 = <core::String, core::int?>{};
-        {
-          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t272.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t272;
+  core::Map<core::String, core::int?> map40 = block {
+    final core::Map<core::String, core::int?> #t274 = <core::String, core::int?>{};
+    {
+      asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                         ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
-          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
-          try
-            #L7:
-            while (true) {
-              dynamic #t285 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t286 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
-                #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
-              }
-              else
-                break #L7;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
-              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+      asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+      try
+        while (let dynamic #t275 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
+          #t274.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
         }
-        core::Map<core::String, core::int?> map40 = block {
-          #t284.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
-        } =>#t284;
-        core::List<core::int> list50 = block {
-          final core::List<core::int> #t288 = core::_GrowableList::•<core::int>(0);
-          for (; ; )
-            #t288.{core::List::add}{Invariant}(42){(core::int) → void};
-        } =>#t288;
-        core::Set<core::int?> set50 = block {
-          final core::Set<core::int?> #t289 = new col::_CompactLinkedHashSet::•<core::int?>();
-          for (; ; )
-            #t289.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
-          #t289.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t289;
-        core::Map<core::String, core::int?> map50 = block {
-          final core::Map<core::String, core::int?> #t290 = <core::String, core::int?>{};
-          for (; ; )
-            #t290.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
-          #t290.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
-        } =>#t290;
-        core::List<core::int> list60 = block {
-          final core::List<core::int> #t291 = core::_GrowableList::•<core::int>(0);
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
+    #t274.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t274;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t276 = core::_GrowableList::•<core::int>(0);
+    for (; ; )
+      #t276.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t276;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t277 = new col::_CompactLinkedHashSet::•<core::int?>();
+    for (; ; )
+      #t277.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t277.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t277;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t278 = <core::String, core::int?>{};
+    for (; ; )
+      #t278.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t278.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t278;
+  core::List<core::int> list60 = block {
+    final core::List<core::int> #t279 = core::_GrowableList::•<core::int>(0);
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
-            #t291.{core::List::add}{Invariant}(42){(core::int) → void};
-        } =>#t291;
-        core::Set<core::int?> set60 = block {
-          final core::Set<core::int?> #t292 = new col::_CompactLinkedHashSet::•<core::int?>();
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+      #t279.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t279;
+  core::Set<core::int?> set60 = block {
+    final core::Set<core::int?> #t280 = new col::_CompactLinkedHashSet::•<core::int?>();
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
-            #t292.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
-          #t292.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
-        } =>#t292;
-        core::Map<core::String, core::int?> map60 = block {
-          final core::Map<core::String, core::int?> #t293 = <core::String, core::int?>{};
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+      #t280.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t280.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t280;
+  core::Map<core::String, core::int?> map60 = block {
+    final core::Map<core::String, core::int?> #t281 = <core::String, core::int?>{};
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
-            #t293.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
-          #t293.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
-        } =>#t293;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+      #t281.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t281.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t281;
 }
 static method testForElementErrorsNotAsync(asy::Stream<core::int> stream) → dynamic {
   block {
-    final core::List<core::int> #t294 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t282 = core::_GrowableList::•<core::int>(0);
     await for (core::int i in stream)
-      #t294.{core::List::add}{Invariant}(i){(core::int) → void};
-  } =>#t294;
+      #t282.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t282;
   block {
-    final core::Set<core::int> #t295 = new col::_CompactLinkedHashSet::•<core::int>();
+    final core::Set<core::int> #t283 = new col::_CompactLinkedHashSet::•<core::int>();
     await for (core::int i in stream)
-      #t295.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
-  } =>#t295;
+      #t283.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+  } =>#t283;
   block {
-    final core::Map<core::String, core::int> #t296 = <core::String, core::int>{};
+    final core::Map<core::String, core::int> #t284 = <core::String, core::int>{};
     await for (core::int i in stream)
-      #t296.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int) → void};
-  } =>#t296;
+      #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int) → void};
+  } =>#t284;
 }
 static method testPromotion(self::A a) → dynamic {
   core::List<core::int> list10 = block {
-    final core::List<core::int> #t297 = core::_GrowableList::•<core::int>(0);
+    final core::List<core::int> #t285 = core::_GrowableList::•<core::int>(0);
     if(a is{ForNonNullableByDefault} self::B)
-      #t297.{core::List::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → void};
-  } =>#t297;
+      #t285.{core::List::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → void};
+  } =>#t285;
   core::Set<core::int> set10 = block {
-    final core::Set<core::int> #t298 = new col::_CompactLinkedHashSet::•<core::int>();
+    final core::Set<core::int> #t286 = new col::_CompactLinkedHashSet::•<core::int>();
     if(a is{ForNonNullableByDefault} self::B)
-      #t298.{core::Set::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → core::bool};
-  } =>#t298;
+      #t286.{core::Set::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → core::bool};
+  } =>#t286;
   core::Map<core::int, core::int> map10 = block {
-    final core::Map<core::int, core::int> #t299 = <core::int, core::int>{};
+    final core::Map<core::int, core::int> #t287 = <core::int, core::int>{};
     if(a is{ForNonNullableByDefault} self::B)
-      #t299.{core::Map::[]=}{Invariant}(a{self::B}.{self::B::foo}{core::int}, a{self::B}.{self::B::foo}{core::int}){(core::int, core::int) → void};
-  } =>#t299;
+      #t287.{core::Map::[]=}{Invariant}(a{self::B}.{self::B::foo}{core::int}, a{self::B}.{self::B::foo}{core::int}){(core::int, core::int) → void};
+  } =>#t287;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
index ee95a19..a8ee34c 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
@@ -14,61 +14,24 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  {
+    Never :stream = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
+  await for () {}
+             ^";
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t2 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
+          invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
   await for () {}
              ^";
-          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final dynamic #t3 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
-  await for () {}
-             ^";
-                }
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
index 55e1b209..0c88e17 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
@@ -2,53 +2,26 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* /* futureValueType= self::TestMixin::T* */ /* originally async */ {
-    final asy::_Future<self::TestMixin::T*>* :async_future = new asy::_Future::•<self::TestMixin::T*>();
-    core::bool* :is_sync = false;
-    FutureOr<self::TestMixin::T*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::TestMixin::R* response = _in::unsafeCast<self::TestMixin::R*>(:result_or_exception);
-          self::TestMixin::T* result;
-          if(response is self::Response<dynamic>*) {
-            result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} self::TestMixin::T*;
-          }
-          else
-            if(response is self::PagingResponse<dynamic>*) {
-              result = response{self::TestMixin::R* & self::PagingResponse<dynamic>* /* '*' & '*' = '*' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as self::TestMixin::T*;
-            }
-            else
-              if(response is self::TestMixin::T*) {
-                result = response{self::TestMixin::R* & self::TestMixin::T* /* '*' & '*' = '*' */};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L1;
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async /* futureValueType= self::TestMixin::T* */ {
+    final self::TestMixin::R* response = await fetch;
+    self::TestMixin::T* result;
+    if(response is self::Response<dynamic>*) {
+      result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} self::TestMixin::T*;
+    }
+    else
+      if(response is self::PagingResponse<dynamic>*) {
+        result = response{self::TestMixin::R* & self::PagingResponse<dynamic>* /* '*' & '*' = '*' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as self::TestMixin::T*;
+      }
+      else
+        if(response is self::TestMixin::T*) {
+          result = response{self::TestMixin::R* & self::TestMixin::T* /* '*' & '*' = '*' */};
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -113,50 +86,24 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>* /* futureValueType= core::String* */ /* originally async */ {
-    final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
-    core::bool* :is_sync = false;
-    core::String? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::Response<core::String*>* response = _in::unsafeCast<self::Response<core::String*>*>(:result_or_exception);
-          core::String* result;
-          if(response is self::Response<dynamic>*) {
-            result = response{self::Response<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
-          }
-          else
-            if(response is self::PagingResponse<dynamic>*) {
-              result = response{self::Response<core::String*>*}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as core::String*;
-            }
-            else
-              if(response is core::String*) {
-                result = response{self::Response<core::String*>*};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L2;
+  method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>* async /* futureValueType= core::String* */ {
+    final self::Response<core::String*>* response = await fetch;
+    core::String* result;
+    if(response is self::Response<dynamic>*) {
+      result = response{self::Response<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
+    }
+    else
+      if(response is self::PagingResponse<dynamic>*) {
+        result = response{self::Response<core::String*>*}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as core::String*;
+      }
+      else
+        if(response is core::String*) {
+          result = response{self::Response<core::String*>*};
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -182,50 +129,24 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin*
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>* /* futureValueType= core::String* */ /* originally async */ {
-    final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
-    core::bool* :is_sync = false;
-    core::String? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::PagingResponse<core::String*>* response = _in::unsafeCast<self::PagingResponse<core::String*>*>(:result_or_exception);
-          core::String* result;
-          if(response is self::Response<dynamic>*) {
-            result = response{self::PagingResponse<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
-          }
-          else
-            if(response is self::PagingResponse<dynamic>*) {
-              result = response{self::PagingResponse<core::String*>*}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as core::String*;
-            }
-            else
-              if(response is core::String*) {
-                result = response{self::PagingResponse<core::String*>*};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L3;
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>* async /* futureValueType= core::String* */ {
+    final self::PagingResponse<core::String*>* response = await fetch;
+    core::String* result;
+    if(response is self::Response<dynamic>*) {
+      result = response{self::PagingResponse<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
+    }
+    else
+      if(response is self::PagingResponse<dynamic>*) {
+        result = response{self::PagingResponse<core::String*>*}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as core::String*;
+      }
+      else
+        if(response is core::String*) {
+          result = response{self::PagingResponse<core::String*>*};
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
index ffa2007..2aa86e0 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
@@ -27,33 +27,8 @@
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method bar() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    FutureOr<dynamic>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = this.{self::B::a}{self::A*}.{self::A::foo}(){() →* dynamic};
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  method bar() → asy::Future<dynamic>* async /* futureValueType= dynamic */ 
+    return this.{self::B::a}{self::A*}.{self::A::foo}(){() →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -70,33 +45,8 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  method baz() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          :return_value = this.{self::C::b}{self::B*}.{self::B::bar}(){() →* asy::Future<dynamic>*} as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  method baz() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+    return this.{self::C::b}{self::B*}.{self::B::bar}(){() →* asy::Future<dynamic>*} as{TypeError} FutureOr<core::int*>*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
index 3614ef4..bdb2a13 100644
--- a/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
@@ -21,7 +21,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -32,377 +31,41 @@
 }
 static method returnDynamic() → dynamic
   return new self::Class::•();
-static method returnClass() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = new self::Class::•();
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  self::Class? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = new self::Class::•();
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureOrClass() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  self::Class? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = new self::Class::•();
-        break #L3;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnClassFromDynamic() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        :return_value = self::returnDynamic();
-        break #L4;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureClassDynamic() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  FutureOr<self::Class>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        :return_value = self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
-        break #L5;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureOrClassDynamic() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  FutureOr<self::Class>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        :return_value = self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
-        break #L6;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnClassFromFutureClass() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L7:
-      {
-        :return_value = self::returnFutureClass();
-        break #L7;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  FutureOr<self::Class>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L8:
-      {
-        :return_value = self::returnFutureClass();
-        break #L8;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  FutureOr<self::Class>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L9:
-      {
-        :return_value = self::returnFutureClass();
-        break #L9;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnClassFromFutureOrClass() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L10:
-      {
-        :return_value = self::returnFutureOrClass();
-        break #L10;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  FutureOr<self::Class>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L11:
-      {
-        :return_value = self::returnFutureOrClass();
-        break #L11;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  FutureOr<self::Class>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L12:
-      {
-        :return_value = self::returnFutureOrClass();
-        break #L12;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L13:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOrClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnClassFromDynamic(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnFutureClassDynamic(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnFutureOrClassDynamic(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnClassFromFutureClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnFutureClassFromFutureClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnFutureOrClassFromFutureClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::returnFutureClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::returnFutureOrClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<self::Class>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method returnClass() → self::Class async /* futureValueType= core::Object? */ 
+  return new self::Class::•();
+static method returnFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
+  return new self::Class::•();
+static method returnFutureOrClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
+  return new self::Class::•();
+static method returnClassFromDynamic() → self::Class async /* futureValueType= core::Object? */ 
+  return self::returnDynamic();
+static method returnFutureClassDynamic() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
+  return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
+static method returnFutureOrClassDynamic() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
+  return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
+static method returnClassFromFutureClass() → self::Class async /* futureValueType= core::Object? */ 
+  return self::returnFutureClass();
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
+  return self::returnFutureClass();
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
+  return self::returnFutureClass();
+static method returnClassFromFutureOrClass() → self::Class async /* futureValueType= core::Object? */ 
+  return self::returnFutureOrClass();
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
+  return self::returnFutureOrClass();
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
+  return self::returnFutureOrClass();
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await self::returnClass();
+  await self::returnFutureClass();
+  await self::returnFutureOrClass();
+  await self::returnClassFromDynamic();
+  await self::returnFutureClassDynamic();
+  await self::returnFutureOrClassDynamic();
+  await self::returnClassFromFutureClass();
+  await self::returnFutureClassFromFutureClass();
+  await self::returnFutureOrClassFromFutureClass();
+  await self::returnClassFromFutureOrClass();
+  await self::returnFutureClassFromFutureOrClass();
+  await self::returnFutureOrClassFromFutureOrClass();
 }
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
index cc36db2..e943d3f 100644
--- a/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
@@ -2,100 +2,54 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 static field void v1 = self::method();
 static field void v2 = self::method();
 static field core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
 static field core::List<void> l2 = core::_GrowableList::_literal1<void>(self::method());
 static method method() → void {}
-static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        void v1 = self::method();
-        void v2 = self::method();
-        {
-          core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            void v3 = :sync-for-iterator.{core::Iterator::current}{void};
-            {}
-          }
-        }
-        {
-          core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            void v4 = :sync-for-iterator.{core::Iterator::current}{void};
-            {}
-          }
-        }
-        {
-          asy::Stream<void> :stream = stream;
-          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                void v5 = :for-iterator.{asy::_StreamIterator::current}{void};
-                {}
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          asy::Stream<void> :stream = stream;
-          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                void v6 = :for-iterator.{asy::_StreamIterator::current}{void};
-                {}
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
-              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
-        core::List<void> l2 = core::_GrowableList::_literal1<void>(self::method());
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async /* futureValueType= dynamic */ {
+  void v1 = self::method();
+  void v2 = self::method();
+  {
+    core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      void v3 = :sync-for-iterator.{core::Iterator::current}{void};
+      {}
+    }
+  }
+  {
+    core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      void v4 = :sync-for-iterator.{core::Iterator::current}{void};
+      {}
+    }
+  }
+  {
+    asy::Stream<void> :stream = stream;
+    asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+    try
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        void v5 = :for-iterator.{asy::_StreamIterator::current}{void};
+        {}
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    asy::Stream<void> :stream = stream;
+    asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+    try
+      while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        void v6 = :for-iterator.{asy::_StreamIterator::current}{void};
+        {}
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
+  core::List<void> l2 = core::_GrowableList::_literal1<void>(self::method());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
index 0726288..be3108a 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
@@ -19,8 +19,6 @@
 //     ^
 //
 import self as self;
-import "dart:async" as asy;
-import "dart:core" as core;
 
 static field () → Null a = () → Null {
   function f1() → invalid-type {
@@ -28,34 +26,10 @@
     return;
     ^" in null;
   }
-  function f2() → invalid-type /* futureValueType= invalid-type */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
+  function f2() → invalid-type async /* futureValueType= invalid-type */ {
+    return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
     return;
     ^" in null;
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
   }
 };
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
index 8beb24a..7681572 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
@@ -19,98 +19,23 @@
 //   ^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
+import "dart:async" as asy;
 
 static field () → Null a = () → Null {
   function f1() → invalid-type {}
-  function f2() → invalid-type /* futureValueType= invalid-type */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  function f2() → invalid-type async /* futureValueType= invalid-type */ {}
   function f3() → core::int {
     return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int f3() {}
   ^" in null;
   }
-  function f4() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          :return_value = invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  function f4() → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   Future<int> f4() async {}
   ^" in null;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
   }
 };
-static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(f, :async_op_then, :async_op_error) in null;
-        :return_value = :result_or_exception;
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-};
+static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> async /* futureValueType= dynamic */ => await f;
 static field (dynamic) → dynamic c = (dynamic f) → dynamic => f;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
index 4854611..904b9c0 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
@@ -1,84 +1,15 @@
 library;
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 static method bar(core::int* a, core::List<core::int*>* b) → dynamic {
   self::expect(1.{core::int::unary-}(){() →* core::int*}, a);
   self::expect(1.{core::int::unary-}(){() →* core::int*}, b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::-}(2){(core::num*) →* core::int*});
 }
-static method foo(core::int* x) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  core::int* :async_temporary_0;
-  core::int* :async_temporary_1;
-  core::List<core::int*>* :async_temporary_2;
-  core::int* :async_temporary_3;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :async_temporary_3 = x.{core::num::-}(1){(core::num*) →* core::int*};
-        if(!(x == null)) {
-          :async_temporary_1 = x.{core::num::+}(1){(core::num*) →* core::int*};
-          :async_temporary_0 = x.{core::num::+}(2){(core::num*) →* core::int*};
-          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-          :async_temporary_2 = core::_GrowableList::_literal3<core::int*>(_in::unsafeCast<core::int*>(:async_temporary_1), _in::unsafeCast<core::int*>(:async_temporary_0), _in::unsafeCast<Null>(:result_or_exception));
-        }
-        else {
-          :async_temporary_2 = null;
-        }
-        :return_value = self::bar(_in::unsafeCast<core::int*>(:async_temporary_3), _in::unsafeCast<core::List<core::int*>*>(:async_temporary_2));
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::foo(0), :async_op_then, :async_op_error) in null;
-        :return_value = :result_or_exception;
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method foo(core::int* x) → dynamic async /* futureValueType= dynamic */ 
+  return self::bar(x.{core::num::-}(1){(core::num*) →* core::int*}, !(x == null) ?{core::List<core::int*>*} core::_GrowableList::_literal3<core::int*>(x.{core::num::+}(1){(core::num*) →* core::int*}, x.{core::num::+}(2){(core::num*) →* core::int*}, await null) : null);
+static method main() → void async /* futureValueType= void */ 
+  return await self::foo(0);
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
@@ -88,4 +19,4 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:10:10 -> IntConstant(-1)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:11:10 -> IntConstant(-1)
-Extra constant evaluation: evaluated: 92, effectively constant: 2
+Extra constant evaluation: evaluated: 31, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
index a5d9155..4590283 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
@@ -1,7 +1,6 @@
 library;
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 
 import "dart:async";
 
@@ -23,33 +22,7 @@
 static method method() → dynamic
   return null;
 static method main() → dynamic {
-  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* /* futureValueType= core::List<dynamic>* */ /* originally async */ {
-    final asy::_Future<core::List<dynamic>*>* :async_future = new asy::_Future::•<core::List<dynamic>*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::List<dynamic>*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = self::method() as{TypeError} FutureOr<core::List<dynamic>*>*;
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  });
+  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* async /* futureValueType= core::List<dynamic>* */ => self::method() as{TypeError} FutureOr<core::List<dynamic>*>*);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
index 5209384..23b5061 100644
--- a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -14,87 +13,14 @@
 static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
   return throw 42;
 static method bar(core::String? y) → dynamic {}
-static method test(self::A<core::String> a) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper((() → asy::Future<core::String?> /* futureValueType= core::String? */ /* originally async */ {
-          final asy::_Future<core::String?> :async_future = new asy::_Future::•<core::String?>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String?>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                :return_value = self::foo<core::String>(a);
-                break #L2;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<core::String?>}, :async_op_then, :async_op_error) in null;
-        final core::String? x = _in::unsafeCast<core::String?>(:result_or_exception);
-        self::bar(x);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method test(self::A<core::String> a) → dynamic async /* futureValueType= dynamic */ {
+  final core::String? x = await(() → asy::Future<core::String?> async /* futureValueType= core::String? */ {
+    return self::foo<core::String>(a);
+  })(){() → asy::Future<core::String?>};
+  self::bar(x);
 }
-static method test2(self::A<core::String> a) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = self::foo<core::String>(a);
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method test2(self::A<core::String> a) → dynamic async /* futureValueType= dynamic */ {
+  return self::foo<core::String>(a);
 }
 static method test3(self::A<core::String> a) → dynamic {
   return self::foo<core::String>(a);
diff --git a/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
index 745e0b9..da93591 100644
--- a/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
@@ -5,36 +5,12 @@
 
 import "dart:async";
 
-static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        if(x is{ForNonNullableByDefault} asy::Future<core::int>) {
-          :return_value = x{self::foo::X% & asy::Future<core::int> /* '%' & '!' = '!' */};
-          break #L1;
-        }
-        else {
-          throw 42;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  if(x is{ForNonNullableByDefault} asy::Future<core::int>) {
+    return x{self::foo::X% & asy::Future<core::int> /* '%' & '!' = '!' */};
+  }
+  else {
+    throw 42;
+  }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
index cb2e8b2..82a47f2 100644
--- a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
@@ -2,58 +2,21 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
-static method test(asy::StreamController<void> _eventStreamController) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        {
-          asy::Stream<void> :stream = _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>};
-          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final void _ = :for-iterator.{asy::_StreamIterator::current}{void};
-                {}
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async /* futureValueType= dynamic */ {
+  {
+    asy::Stream<void> :stream = _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>};
+    asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+    try
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final void _ = :for-iterator.{asy::_StreamIterator::current}{void};
+        {}
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
index f3c06a2..21cedca 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
@@ -1,41 +1,14 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 class X extends core::Object {
   synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  method _foo() → void /* futureValueType= void */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-          _in::unsafeCast<Null>(:result_or_exception);
-          core::print("hello");
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  method _foo() → void async /* futureValueType= void */ {
+    await null;
+    core::print("hello");
   }
   method foo() → void
     return this.{self::X::_foo}(){() → void};
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
index 1fe23ba..43749bc 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
@@ -2,98 +2,18 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 class A extends core::Object {
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo(dynamic x) → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-    final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-    core::bool* :is_sync = false;
-    void :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  method foo(dynamic x) → asy::Future<void> async /* futureValueType= void */ {}
 }
 class B extends core::Object {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method bar(dynamic x) → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-    final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-    core::bool* :is_sync = false;
-    void :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  method bar(dynamic x) → asy::Future<void> async /* futureValueType= void */ {}
 }
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  self::B :async_temporary_0;
-  dynamic :async_temporary_1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :async_temporary_1 = new self::A::•();
-        [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-        :async_temporary_1 = _in::unsafeCast<self::A>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) → asy::Future<void>};
-        :async_temporary_0 = new self::B::•();
-        [yield] let dynamic #t2 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-        :return_value = core::_GrowableList::_literal2<asy::Future<void>>(_in::unsafeCast<asy::Future<void>>(:async_temporary_1), _in::unsafeCast<self::B>(:async_temporary_0).{self::B::bar}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) → asy::Future<void>});
-        break #L3;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method main() → dynamic async /* futureValueType= dynamic */ 
+  return core::_GrowableList::_literal2<asy::Future<void>>(new self::A::•().{self::A::foo}(await null){(dynamic) → asy::Future<void>}, new self::B::•().{self::B::bar}(await null){(dynamic) → asy::Future<void>});
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart.weak.transformed.expect b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.transformed.expect
index 9e92a56..1ed7164 100644
--- a/pkg/front_end/testcases/general/return_async_promoted.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.transformed.expect
@@ -7,60 +7,8 @@
 import "org-dartlang-testcase:///return_async_promoted_lib.dart";
 
 static method main() → void {
-  <T extends core::Object? = dynamic>(dynamic) → asy::Future<core::int> f = <T extends core::Object? = dynamic>(dynamic o) → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = o is{ForNonNullableByDefault} core::int ?{core::int} o{core::int} : throw "";
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
-  () → asy::Future<core::int> g = () → asy::Future<core::int> /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          :return_value = ret::legacy();
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
+  <T extends core::Object? = dynamic>(dynamic) → asy::Future<core::int> f = <T extends core::Object? = dynamic>(dynamic o) → asy::Future<core::int> async /* futureValueType= core::int */ => o is{ForNonNullableByDefault} core::int ?{core::int} o{core::int} : throw "";
+  () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int* */ => ret::legacy();
 }
 static method nullable() → core::int?
   return null;
@@ -76,86 +24,8 @@
 import "org-dartlang-testcase:///return_async_promoted.dart";
 
 static method legacy() → core::int* {
-  <T extends core::Object* = dynamic>(dynamic) →* asy::Future<core::int*>* f = <T extends core::Object* = dynamic>(dynamic o) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = o is core::int* ?{core::int*} o{core::int*} : throw "";
-          break #L3;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
-  () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = self::nullable();
-          break #L4;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
-  () →* asy::Future<core::int*>* h = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          :return_value = self::nonNullable();
-          break #L5;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
+  <T extends core::Object* = dynamic>(dynamic) →* asy::Future<core::int*>* f = <T extends core::Object* = dynamic>(dynamic o) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => o is core::int* ?{core::int*} o{core::int*} : throw "";
+  () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::nullable();
+  () →* asy::Future<core::int*>* h = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::nonNullable();
   return null;
 }
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
index 2db299f..437744e 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 static method foo() → dynamic {
   try {
@@ -12,67 +11,22 @@
     core::print("Hello from finally block!");
   }
 }
-static method bar(dynamic d) → dynamic /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :saved_try_context_var2;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+static method bar(dynamic d) → dynamic async* {
+  {
+    asy::Stream<dynamic> :stream = d as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
     try
-      try {
-        #L1:
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          {
-            asy::Stream<dynamic> :stream = d as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
-            asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-            try
-              #L2:
-              while (true) {
-                dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-                if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                  dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                  {
-                    if(:controller.{asy::_AsyncStarStreamController::add}(x){(dynamic) → core::bool})
-                      return null;
-                    else
-                      [yield] null;
-                    :controller.{asy::_AsyncStarStreamController::addStream}(x as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>){(asy::Stream<dynamic>) → void};
-                    [yield] null;
-                    if(_in::unsafeCast<core::bool>(:result_or_exception))
-                      return null;
-                  }
-                }
-                else
-                  break #L2;
-              }
-            finally
-              if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-                :result_or_exception;
-              }
-          }
+          yield x;
+          yield* x as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
         }
-        return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-  return :controller_stream;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
 static method main() → dynamic {
   do {
@@ -103,9 +57,9 @@
   {
     core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::_literal1<dynamic>("Hello from for-in without decl!").{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        s = #t4;
+        s = #t2;
         core::print(s);
       }
     }
@@ -113,9 +67,9 @@
   {
     core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::_literal1<dynamic>("Hello from for-in without decl and block!").{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      final dynamic #t5 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      final dynamic #t3 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        s = #t5;
+        s = #t3;
         core::print(s);
       }
     }
@@ -147,87 +101,87 @@
   on core::Object catch(final core::Object e) {
     core::print(e);
   }
-  #L3:
+  #L1:
   switch(1) {
-    #L4:
+    #L2:
     case #C1:
     case #C2:
       {
         core::print("Hello from switch case!");
-        break #L3;
+        break #L1;
       }
-    #L5:
+    #L3:
     default:
       {
-        break #L3;
+        break #L1;
       }
   }
-  #L6:
+  #L4:
   switch(4) {
-    #L7:
+    #L5:
     case #C2:
       {
         core::print("Hello from case 2!");
-        break #L6;
+        break #L4;
       }
-    #L8:
+    #L6:
     case #C1:
       {
         core::print("Hello from case 1!");
-        continue #L7;
+        continue #L5;
       }
-    #L9:
+    #L7:
     case #C3:
       {
         core::print("Hello from case 0!");
-        continue #L8;
+        continue #L6;
       }
-    #L10:
+    #L8:
     case #C4:
       {
         core::print("Hello from case 4!");
-        continue #L11;
-      }
-    #L11:
-    default:
-      {
         continue #L9;
       }
+    #L9:
+    default:
+      {
+        continue #L7;
+      }
   }
-  #L12:
+  #L10:
   switch(4) {
-    #L13:
+    #L11:
     case #C1:
       {
         core::print("Hello from next case 1");
-        break #L12;
+        break #L10;
       }
-    #L14:
+    #L12:
     default:
       {
-        continue #L13;
+        continue #L11;
       }
   }
   core::int i = 0;
-  #L15:
+  #L13:
   do
-    #L16:
+    #L14:
     {
       core::print("Hello from do-while!");
       if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
-        break #L16;
-      break #L15;
+        break #L14;
+      break #L13;
     }
   while (true)
   i = 0;
-  #L17:
+  #L15:
   while (true)
-    #L18:
+    #L16:
     {
       core::print("Hello from while!");
       if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
-        break #L18;
-      break #L17;
+        break #L16;
+      break #L15;
     }
 }
 
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
index 5f23e4e..23a9b36 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
@@ -11,7 +11,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -24,187 +23,35 @@
   return new self::Class::•();
 static method returnClass() → self::Class
   return new self::Class::•();
-static method returnFutureDynamic() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = new self::Class::•();
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnFutureClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
-  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
-  core::bool* :is_sync = false;
-  self::Class? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = new self::Class::•();
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method error() → asy::Stream<FutureOr<self::Class>> /* originally async* */ {
-  asy::_AsyncStarStreamController<FutureOr<self::Class>>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L3:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
+static method returnFutureDynamic() → asy::Future<dynamic> async /* futureValueType= dynamic */ 
+  return new self::Class::•();
+static method returnFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
+  return new self::Class::•();
+static method error() → asy::Stream<FutureOr<self::Class>> async* {
+  yield invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
  - 'Future' is from 'dart:async'.
  - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
   yield returnFutureDynamic();
-        ^" in self::returnFutureDynamic() as{TypeError,ForNonNullableByDefault} FutureOr<self::Class>){(FutureOr<self::Class>) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<FutureOr<self::Class>>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<FutureOr<self::Class>>};
-  return :controller_stream;
+        ^" in self::returnFutureDynamic() as{TypeError,ForNonNullableByDefault} FutureOr<self::Class>;
 }
-static method stream() → asy::Stream<FutureOr<self::Class>> /* originally async* */ {
-  asy::_AsyncStarStreamController<FutureOr<self::Class>>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+static method stream() → asy::Stream<FutureOr<self::Class>> async* {
+  yield self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
+  yield self::returnClass();
+  yield self::returnFutureClass();
+}
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  {
+    asy::Stream<FutureOr<self::Class>> :stream = self::stream();
+    asy::_StreamIterator<FutureOr<self::Class>>? :for-iterator = new asy::_StreamIterator::•<FutureOr<self::Class>>(:stream);
     try
-      try {
-        #L4:
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        FutureOr<self::Class>cls = :for-iterator.{asy::_StreamIterator::current}{FutureOr<self::Class>};
         {
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>){(FutureOr<self::Class>) → core::bool})
-            return null;
-          else
-            [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnClass()){(FutureOr<self::Class>) → core::bool})
-            return null;
-          else
-            [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnFutureClass()){(FutureOr<self::Class>) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<FutureOr<self::Class>>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<FutureOr<self::Class>>};
-  return :controller_stream;
-}
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        {
-          asy::Stream<FutureOr<self::Class>> :stream = self::stream();
-          asy::_StreamIterator<FutureOr<self::Class>>? :for-iterator = new asy::_StreamIterator::•<FutureOr<self::Class>>(:stream);
-          try
-            #L6:
-            while (true) {
-              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                FutureOr<self::Class>cls = :for-iterator.{asy::_StreamIterator::current}{FutureOr<self::Class>};
-                {
-                  core::print(cls);
-                }
-              }
-              else
-                break #L6;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<FutureOr<self::Class>>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          core::print(cls);
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<FutureOr<self::Class>>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
diff --git a/pkg/front_end/testcases/incremental.status b/pkg/front_end/testcases/incremental.status
index 1afe42e..9638f1b 100644
--- a/pkg/front_end/testcases/incremental.status
+++ b/pkg/front_end/testcases/incremental.status
@@ -10,7 +10,6 @@
 changing_modules_16: Crash
 late_lowering: EquivalenceError
 constant_fileoffset_and_typedef: EquivalenceError
-no_change_but_changed_type: EquivalenceError
 no_such_method_forwarder: EquivalenceError
 no_change_but_changed_type_02: EquivalenceError
 changing_nullability_on_recompile: EquivalenceError
diff --git a/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.1.expect
index 99d00d7..f2a38bd 100644
--- a/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.1.expect
@@ -2,35 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   abstract class TestMixin<T extends dart.core::Object? = dynamic> extends dart.core::Object /*isMixinDeclaration*/  {
-    method test(covariant-by-class dart.async::Future<lib::TestMixin::T%> fetch) → dart.async::Future<lib::TestMixin::T%> /* futureValueType= lib::TestMixin::T% */ /* originally async */ {
-      final dart.async::_Future<lib::TestMixin::T%> :async_future = new dart.async::_Future::•<lib::TestMixin::T%>();
-      dart.core::bool* :is_sync = false;
-      FutureOr<lib::TestMixin::T%>? :return_value;
-      (dynamic) → dynamic :async_op_then;
-      (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-      dart.core::int :await_jump_var = 0;
-      dynamic :await_ctx_var;
-      dynamic :saved_try_context_var0;
-      function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-        try {
-          #L1:
-          {
-            [yield] let dynamic #t1 = dart.async::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-            final lib::TestMixin::T% response = dart._internal::unsafeCast<lib::TestMixin::T%>(:result_or_exception);
-            :return_value = response;
-            break #L1;
-          }
-          dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-          return;
-        }
-        on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-          dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-        }
-      :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-      :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-      :async_op(null, null){() → dynamic};
-      :is_sync = true;
-      return :async_future;
+    method test(covariant-by-class dart.async::Future<lib::TestMixin::T%> fetch) → dart.async::Future<lib::TestMixin::T%> async /* futureValueType= lib::TestMixin::T% */ {
+      final lib::TestMixin::T% response = await fetch;
+      return response;
     }
   }
 }
@@ -42,35 +16,9 @@
     const synthetic constructor •() → main::_Class2&Object&TestMixin
       : super dart.core::Object::•()
       ;
-    method /* from org-dartlang-test:///lib.dart */ test(covariant-by-class dart.async::Future<dart.core::String> fetch) → dart.async::Future<dart.core::String> /* futureValueType= dart.core::String */ /* originally async */ {
-      final dart.async::_Future<dart.core::String> :async_future = new dart.async::_Future::•<dart.core::String>();
-      dart.core::bool* :is_sync = false;
-      dart.core::String? :return_value;
-      (dynamic) → dynamic :async_op_then;
-      (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-      dart.core::int :await_jump_var = 0;
-      dynamic :await_ctx_var;
-      dynamic :saved_try_context_var0;
-      function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-        try {
-          #L2:
-          {
-            [yield] let dynamic #t2 = dart.async::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-            final dart.core::String response = dart._internal::unsafeCast<dart.core::String>(:result_or_exception);
-            :return_value = response;
-            break #L2;
-          }
-          dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-          return;
-        }
-        on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-          dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-        }
-      :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-      :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-      :async_op(null, null){() → dynamic};
-      :is_sync = true;
-      return :async_future;
+    method /* from org-dartlang-test:///lib.dart */ test(covariant-by-class dart.async::Future<dart.core::String> fetch) → dart.async::Future<dart.core::String> async /* futureValueType= dart.core::String */ {
+      final dart.core::String response = await fetch;
+      return response;
     }
   }
   class Class2 extends main::_Class2&Object&TestMixin {
diff --git a/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.2.expect
index ba9e36d..f2a38bd 100644
--- a/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_change_but_changed_type.yaml.world.2.expect
@@ -2,35 +2,9 @@
 library from "org-dartlang-test:///lib.dart" as lib {
 
   abstract class TestMixin<T extends dart.core::Object? = dynamic> extends dart.core::Object /*isMixinDeclaration*/  {
-    method test(covariant-by-class dart.async::Future<lib::TestMixin::T%> fetch) → dart.async::Future<lib::TestMixin::T%> /* futureValueType= lib::TestMixin::T% */ /* originally async */ {
-      final dart.async::_Future<lib::TestMixin::T%> :async_future = new dart.async::_Future::•<lib::TestMixin::T%>();
-      dart.core::bool* :is_sync = false;
-      FutureOr<lib::TestMixin::T%>? :return_value;
-      (dynamic) → dynamic :async_op_then;
-      (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-      dart.core::int :await_jump_var = 0;
-      dynamic :await_ctx_var;
-      dynamic :saved_try_context_var0;
-      function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-        try {
-          #L1:
-          {
-            [yield] let dynamic #t1 = dart.async::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-            final lib::TestMixin::T% response = dart._internal::unsafeCast<lib::TestMixin::T%>(:result_or_exception);
-            :return_value = response;
-            break #L1;
-          }
-          dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-          return;
-        }
-        on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-          dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-        }
-      :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-      :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-      :async_op(null, null){() → dynamic};
-      :is_sync = true;
-      return :async_future;
+    method test(covariant-by-class dart.async::Future<lib::TestMixin::T%> fetch) → dart.async::Future<lib::TestMixin::T%> async /* futureValueType= lib::TestMixin::T% */ {
+      final lib::TestMixin::T% response = await fetch;
+      return response;
     }
   }
 }
@@ -42,35 +16,9 @@
     const synthetic constructor •() → main::_Class2&Object&TestMixin
       : super dart.core::Object::•()
       ;
-    method /* from org-dartlang-test:///lib.dart */ test(covariant-by-class dart.async::Future<dart.core::String> fetch) → dart.async::Future<dart.core::String> /* futureValueType= dart.core::String */ /* originally async */ {
-      final dart.async::_Future<dart.core::String> :async_future = new dart.async::_Future::•<dart.core::String>();
-      dart.core::bool* :is_sync = false;
-      FutureOr<dart.core::String>? :return_value;
-      (dynamic) → dynamic :async_op_then;
-      (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-      dart.core::int :await_jump_var = 0;
-      dynamic :await_ctx_var;
-      dynamic :saved_try_context_var0;
-      function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-        try {
-          #L2:
-          {
-            [yield] let dynamic #t2 = dart.async::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-            final dart.core::String response = dart._internal::unsafeCast<dart.core::String>(:result_or_exception);
-            :return_value = response;
-            break #L2;
-          }
-          dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-          return;
-        }
-        on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-          dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-        }
-      :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-      :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-      :async_op(null, null){() → dynamic};
-      :is_sync = true;
-      return :async_future;
+    method /* from org-dartlang-test:///lib.dart */ test(covariant-by-class dart.async::Future<dart.core::String> fetch) → dart.async::Future<dart.core::String> async /* futureValueType= dart.core::String */ {
+      final dart.core::String response = await fetch;
+      return response;
     }
   }
   class Class2 extends main::_Class2&Object&TestMixin {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
index e04acb1..5858d2a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
@@ -1,35 +1,9 @@
 main = main::main;
 library from "org-dartlang-test:///libA.dart" as libA {
 
-  static method whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-          dart._internal::unsafeCast<Null>(:result_or_exception);
-          :return_value = "hello";
-          break #L1;
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method whatever() → dynamic async /* futureValueType= dynamic */ {
+    await null;
+    return "hello";
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -53,34 +27,9 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          dart.core::print(#C2);
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method main() → dynamic async /* futureValueType= dynamic */ {
+    await libA::whatever();
+    dart.core::print(#C2);
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
index 56a2eb1..39a1eee 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
@@ -1,35 +1,9 @@
 main = main::main;
 library from "org-dartlang-test:///libA.dart" as libA {
 
-  static method whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-          dart._internal::unsafeCast<Null>(:result_or_exception);
-          :return_value = "hello";
-          break #L1;
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method whatever() → dynamic async /* futureValueType= dynamic */ {
+    await null;
+    return "hello";
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -53,35 +27,10 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          dart.core::print(#C2);
-          dart.core::print("Done");
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method main() → dynamic async /* futureValueType= dynamic */ {
+    await libA::whatever();
+    dart.core::print(#C2);
+    dart.core::print("Done");
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
index 31712ce..d8895e9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
@@ -19,64 +19,13 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          dart.core::print(#C2);
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method main() → dynamic async /* futureValueType= dynamic */ {
+    await main::whatever();
+    dart.core::print(#C2);
   }
-  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-          dart._internal::unsafeCast<Null>(:result_or_exception);
-          :return_value = "hello";
-          break #L2;
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic async /* futureValueType= dynamic */ {
+    await null;
+    return "hello";
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
index 37f43e7..443a189c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
@@ -19,64 +19,13 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          dart.core::print(#C2);
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method main() → dynamic async /* futureValueType= dynamic */ {
+    await main::whatever();
+    dart.core::print(#C2);
   }
-  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-          dart._internal::unsafeCast<Null>(:result_or_exception);
-          :return_value = "hello!!!";
-          break #L2;
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic async /* futureValueType= dynamic */ {
+    await null;
+    return "hello!!!";
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
index 9d36a28..e7549e8 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
@@ -19,65 +19,14 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          dart.core::print(#C2);
-          dart.core::print("Done!");
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method main() → dynamic async /* futureValueType= dynamic */ {
+    await main::whatever();
+    dart.core::print(#C2);
+    dart.core::print("Done!");
   }
-  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
-    dart.core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-          dart._internal::unsafeCast<Null>(:result_or_exception);
-          :return_value = "hello!!!";
-          break #L2;
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic async /* futureValueType= dynamic */ {
+    await null;
+    return "hello!!!";
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
index e66b45d..73e7931 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -26,331 +25,47 @@
   abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
   abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
 }
-static method test() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::int* x0;
-        asy::Future<core::int*>* x1;
-        asy::Future<asy::Future<core::int*>*>* x2;
-        asy::Future<FutureOr<core::int*>*>* x3;
-        asy::Future<self::MyFuture*>* x4;
-        FutureOr<core::int*>* x5;
-        FutureOr<asy::Future<core::int*>*>* x6;
-        FutureOr<FutureOr<core::int*>*>* x7;
-        FutureOr<self::MyFuture*>* x8;
-        self::MyFuture* x9;
-        function test0() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-          final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-          core::bool* :is_sync = false;
-          core::int? :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                :return_value = x0;
-                break #L2;
-              }
-              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test1() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-          final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-          core::bool* :is_sync = false;
-          FutureOr<core::int*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L3:
-              {
-                :return_value = x1;
-                break #L3;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test2() → asy::Future<asy::Future<core::int*>*>* /* futureValueType= asy::Future<core::int*>* */ /* originally async */ {
-          final asy::_Future<asy::Future<core::int*>*>* :async_future = new asy::_Future::•<asy::Future<core::int*>*>();
-          core::bool* :is_sync = false;
-          FutureOr<asy::Future<core::int*>*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L4:
-              {
-                :return_value = x2;
-                break #L4;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test3() → asy::Future<FutureOr<core::int*>*>* /* futureValueType= FutureOr<core::int*>* */ /* originally async */ {
-          final asy::_Future<FutureOr<core::int*>*>* :async_future = new asy::_Future::•<FutureOr<core::int*>*>();
-          core::bool* :is_sync = false;
-          FutureOr<FutureOr<core::int*>*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L5:
-              {
-                :return_value = x3;
-                break #L5;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test4() → asy::Future<self::MyFuture*>* /* futureValueType= self::MyFuture* */ /* originally async */ {
-          final asy::_Future<self::MyFuture*>* :async_future = new asy::_Future::•<self::MyFuture*>();
-          core::bool* :is_sync = false;
-          FutureOr<self::MyFuture*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L6:
-              {
-                :return_value = x4;
-                break #L6;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test5() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-          final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-          core::bool* :is_sync = false;
-          FutureOr<core::int*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L7:
-              {
-                :return_value = x5;
-                break #L7;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test6() → asy::Future<asy::Future<core::int*>*>* /* futureValueType= asy::Future<core::int*>* */ /* originally async */ {
-          final asy::_Future<asy::Future<core::int*>*>* :async_future = new asy::_Future::•<asy::Future<core::int*>*>();
-          core::bool* :is_sync = false;
-          FutureOr<asy::Future<core::int*>*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L8:
-              {
-                :return_value = x6;
-                break #L8;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test7() → asy::Future<FutureOr<core::int*>*>* /* futureValueType= FutureOr<core::int*>* */ /* originally async */ {
-          final asy::_Future<FutureOr<core::int*>*>* :async_future = new asy::_Future::•<FutureOr<core::int*>*>();
-          core::bool* :is_sync = false;
-          FutureOr<FutureOr<core::int*>*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L9:
-              {
-                :return_value = x7;
-                break #L9;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test8() → asy::Future<self::MyFuture*>* /* futureValueType= self::MyFuture* */ /* originally async */ {
-          final asy::_Future<self::MyFuture*>* :async_future = new asy::_Future::•<self::MyFuture*>();
-          core::bool* :is_sync = false;
-          FutureOr<self::MyFuture*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L10:
-              {
-                :return_value = x8;
-                break #L10;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test9() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-          final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-          core::bool* :is_sync = false;
-          FutureOr<core::int*>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L11:
-              {
-                :return_value = x9;
-                break #L11;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        [yield] let dynamic #t1 = asy::_awaitHelper(x0, :async_op_then, :async_op_error) in null;
-        core::int* y0 = _in::unsafeCast<core::int*>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(x1, :async_op_then, :async_op_error) in null;
-        core::int* y1 = _in::unsafeCast<core::int*>(:result_or_exception);
-        [yield] let dynamic #t3 = asy::_awaitHelper(x2, :async_op_then, :async_op_error) in null;
-        asy::Future<core::int*>* y2 = _in::unsafeCast<asy::Future<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t4 = asy::_awaitHelper(x3, :async_op_then, :async_op_error) in null;
-        FutureOr<core::int*>* y3 = _in::unsafeCast<FutureOr<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t5 = asy::_awaitHelper(x4, :async_op_then, :async_op_error) in null;
-        self::MyFuture* y4 = _in::unsafeCast<self::MyFuture*>(:result_or_exception);
-        [yield] let dynamic #t6 = asy::_awaitHelper(x5, :async_op_then, :async_op_error) in null;
-        core::int* y5 = _in::unsafeCast<core::int*>(:result_or_exception);
-        [yield] let dynamic #t7 = asy::_awaitHelper(x6, :async_op_then, :async_op_error) in null;
-        asy::Future<core::int*>* y6 = _in::unsafeCast<asy::Future<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t8 = asy::_awaitHelper(x7, :async_op_then, :async_op_error) in null;
-        FutureOr<core::int*>* y7 = _in::unsafeCast<FutureOr<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t9 = asy::_awaitHelper(x8, :async_op_then, :async_op_error) in null;
-        self::MyFuture* y8 = _in::unsafeCast<self::MyFuture*>(:result_or_exception);
-        [yield] let dynamic #t10 = asy::_awaitHelper(x9, :async_op_then, :async_op_error) in null;
-        core::int* y9 = _in::unsafeCast<core::int*>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method test() → void async /* futureValueType= void */ {
+  core::int* x0;
+  asy::Future<core::int*>* x1;
+  asy::Future<asy::Future<core::int*>*>* x2;
+  asy::Future<FutureOr<core::int*>*>* x3;
+  asy::Future<self::MyFuture*>* x4;
+  FutureOr<core::int*>* x5;
+  FutureOr<asy::Future<core::int*>*>* x6;
+  FutureOr<FutureOr<core::int*>*>* x7;
+  FutureOr<self::MyFuture*>* x8;
+  self::MyFuture* x9;
+  function test0() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+    return x0;
+  function test1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+    return x1;
+  function test2() → asy::Future<asy::Future<core::int*>*>* async /* futureValueType= asy::Future<core::int*>* */ 
+    return x2;
+  function test3() → asy::Future<FutureOr<core::int*>*>* async /* futureValueType= FutureOr<core::int*>* */ 
+    return x3;
+  function test4() → asy::Future<self::MyFuture*>* async /* futureValueType= self::MyFuture* */ 
+    return x4;
+  function test5() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+    return x5;
+  function test6() → asy::Future<asy::Future<core::int*>*>* async /* futureValueType= asy::Future<core::int*>* */ 
+    return x6;
+  function test7() → asy::Future<FutureOr<core::int*>*>* async /* futureValueType= FutureOr<core::int*>* */ 
+    return x7;
+  function test8() → asy::Future<self::MyFuture*>* async /* futureValueType= self::MyFuture* */ 
+    return x8;
+  function test9() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+    return x9;
+  core::int* y0 = await x0;
+  core::int* y1 = await x1;
+  asy::Future<core::int*>* y2 = await x2;
+  FutureOr<core::int*>* y3 = await x3;
+  self::MyFuture* y4 = await x4;
+  core::int* y5 = await x5;
+  asy::Future<core::int*>* y6 = await x6;
+  FutureOr<core::int*>* y7 = await x7;
+  self::MyFuture* y8 = await x8;
+  core::int* y9 = await x9;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
index 2324c89..366738b 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
@@ -7,33 +7,7 @@
 
 static field asy::Future<core::int*>* futureInt = null;
 static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = self::futureInt;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-};
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
index d92144a..dcce00c 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
@@ -3,33 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  core::int? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = 0;
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-};
+static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 0;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
index 23c7b00..5454d59 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
@@ -7,33 +7,7 @@
 
 static field FutureOr<core::int*>* futureOrInt = null;
 static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = self::futureOrInt;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-};
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureOrInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
index 68357cb..c2fcd34 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
@@ -8,38 +8,13 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* futureValueType= core::num* */ /* originally async */ {
-    final asy::_Future<core::num*>* :async_future = new asy::_Future::•<core::num*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::num*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
-            :return_value = asy::Future::value<core::int*>(1);
-            break #L1;
-          }
-          else {
-            :return_value = asy::Future::value<core::double*>(2.0);
-            break #L1;
-          }
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return asy::Future::value<core::int*>(1);
+    }
+    else {
+      return asy::Future::value<core::double*>(2.0);
+    }
   };
   asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
   asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
index 6dd1245..a28c927 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
@@ -8,38 +8,13 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* futureValueType= core::num* */ /* originally async */ {
-    final asy::_Future<core::num*>* :async_future = new asy::_Future::•<core::num*>();
-    core::bool* :is_sync = false;
-    core::num? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
-            :return_value = 1;
-            break #L1;
-          }
-          else {
-            :return_value = 2.0;
-            break #L1;
-          }
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return 1;
+    }
+    else {
+      return 2.0;
+    }
   };
   asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
   asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
index ff44989..f4a674b 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
@@ -8,38 +8,13 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* futureValueType= core::num* */ /* originally async */ {
-    final asy::_Future<core::num*>* :async_future = new asy::_Future::•<core::num*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::num*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
-            :return_value = asy::Future::value<core::int*>(1);
-            break #L1;
-          }
-          else {
-            :return_value = 2.0;
-            break #L1;
-          }
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return asy::Future::value<core::int*>(1);
+    }
+    else {
+      return 2.0;
+    }
   };
   asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
   asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
index 5730a20..f68b064 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
@@ -2,48 +2,14 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
 static method test() → dynamic {
-  () →* asy::Stream<core::num*>* f = () → asy::Stream<core::num*>* /* originally async* */ {
-    asy::_AsyncStarStreamController<core::num*>* :controller;
-    dynamic :controller_stream;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try
-        try {
-          #L1:
-          {
-            if(:controller.{asy::_AsyncStarStreamController::add}(1){(core::num*) → core::bool})
-              return null;
-            else
-              [yield] null;
-            asy::Stream<core::double*>* s;
-            :controller.{asy::_AsyncStarStreamController::addStream}(s){(asy::Stream<core::num*>) → void};
-            [yield] null;
-            if(_in::unsafeCast<core::bool>(:result_or_exception))
-              return null;
-          }
-          return;
-        }
-        on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-          :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-        }
-      finally {
-        :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :controller = new asy::_AsyncStarStreamController::•<core::num*>(:async_op);
-    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::num*>};
-    return :controller_stream;
+  () →* asy::Stream<core::num*>* f = () → asy::Stream<core::num*>* async* {
+    yield 1;
+    asy::Stream<core::double*>* s;
+    yield* s;
   };
   asy::Stream<core::num*>* g = f(){() →* asy::Stream<core::num*>*};
   asy::Stream<core::int*>* h = f(){() →* asy::Stream<core::num*>*} as{TypeError} asy::Stream<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
index 82fc16a..2d31d8e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
@@ -2,64 +2,14 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        () →* asy::Future<Null>* f = () → asy::Future<Null>* /* futureValueType= Null */ /* originally async */ {
-          final asy::_Future<Null>* :async_future = new asy::_Future::•<Null>();
-          core::bool* :is_sync = false;
-          FutureOr<Null>* :return_value;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                :return_value = null;
-                break #L2;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() →* dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-        asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
-        asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
-        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Future<Null>*}, :async_op_then, :async_op_error) in null;
-        core::String* s = _in::unsafeCast<Null>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  () →* asy::Future<Null>* f = () → asy::Future<Null>* async /* futureValueType= Null */ {
+    return null;
+  };
+  asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
+  asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
+  core::String* s = await f(){() →* asy::Future<Null>*};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
index d81d2c2..9a6dc27 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
@@ -2,70 +2,14 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        () →* asy::Stream<Null>* f = () → asy::Stream<Null>* /* originally async* */ {
-          asy::_AsyncStarStreamController<Null>* :controller;
-          dynamic :controller_stream;
-          (dynamic) →* dynamic :async_op_then;
-          (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-          core::int* :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L2:
-                {
-                  if(:controller.{asy::_AsyncStarStreamController::add}(null){(Null) → core::bool})
-                    return null;
-                  else
-                    [yield] null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<Null>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<Null>};
-          return :controller_stream;
-        };
-        asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
-        asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
-        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*}, :async_op_then, :async_op_error) in null;
-        core::String* s = _in::unsafeCast<Null>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
+    yield null;
+  };
+  asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
+  asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
+  core::String* s = await f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*};
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
index 7a300f3..9b9355c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
@@ -2,38 +2,11 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        dynamic d;
-        [yield] let dynamic #t1 = asy::_awaitHelper(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*), :async_op_then, :async_op_error) in null;
-        core::List<core::int*>* l0 = _in::unsafeCast<core::List<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*)), :async_op_then, :async_op_error) in null;
-        core::List<core::int*>* l1 = _in::unsafeCast<core::List<core::int*>*>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+  dynamic d;
+  core::List<core::int*>* l0 = await core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*);
+  core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*));
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
index a0160b8..e9a5f94 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -59,276 +58,159 @@
 }
 static method F<T extends core::Object* = dynamic>() → self::F::T*
   return null;
-static method f() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
+static method f() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+  dynamic d;
+  core::Object* o;
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      {}
+    }
+  }
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      {}
+    }
+  }
+  {
+    core::Iterator<core::Object*>* :sync-for-iterator = self::F<core::Iterable<core::Object*>*>().{core::Iterable::iterator}{core::Iterator<core::Object*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      core::Object* x = :sync-for-iterator.{core::Iterator::current}{core::Object*};
+      {}
+    }
+  }
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        dynamic d;
-        core::Object* o;
+        d = #t1;
+      }
+    }
+  }
+  {
+    core::Iterator<core::Object*>* :sync-for-iterator = self::F<core::Iterable<core::Object*>*>().{core::Iterable::iterator}{core::Iterator<core::Object*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final core::Object* #t2 = :sync-for-iterator.{core::Iterator::current}{core::Object*};
+      {
+        o = #t2;
+      }
+    }
+  }
+  {
+    asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        {}
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        {}
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    asy::Stream<core::Object*>* :stream = self::F<asy::Stream<core::Object*>*>();
+    asy::_StreamIterator<core::Object*>* :for-iterator = new asy::_StreamIterator::•<core::Object*>(:stream);
+    try
+      while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        core::Object* x = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
+        {}
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t7 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-            {}
-          }
-        }
-        {
-          core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-            {}
-          }
-        }
-        {
-          core::Iterator<core::Object*>* :sync-for-iterator = self::F<core::Iterable<core::Object*>*>().{core::Iterable::iterator}{core::Iterator<core::Object*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            core::Object* x = :sync-for-iterator.{core::Iterator::current}{core::Object*};
-            {}
-          }
-        }
-        {
-          core::Iterator<dynamic>* :sync-for-iterator = self::F<core::Iterable<dynamic>*>().{core::Iterable::iterator}{core::Iterator<dynamic>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{dynamic};
-            {
-              d = #t1;
-            }
-          }
-        }
-        {
-          core::Iterator<core::Object*>* :sync-for-iterator = self::F<core::Iterable<core::Object*>*>().{core::Iterable::iterator}{core::Iterator<core::Object*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final core::Object* #t2 = :sync-for-iterator.{core::Iterator::current}{core::Object*};
-            {
-              o = #t2;
-            }
-          }
-        }
-        {
-          asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {}
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {}
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          asy::Stream<core::Object*>* :stream = self::F<asy::Stream<core::Object*>*>();
-          asy::_StreamIterator<core::Object*>* :for-iterator = new asy::_StreamIterator::•<core::Object*>(:stream);
-          try
-            #L4:
-            while (true) {
-              dynamic #t9 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::Object* x = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
-                {}
-              }
-              else
-                break #L4;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null)) {
-              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          asy::Stream<dynamic>* :stream = self::F<asy::Stream<dynamic>*>();
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L5:
-            while (true) {
-              dynamic #t12 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final dynamic #t14 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  d = #t14;
-                }
-              }
-              else
-                break #L5;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          asy::Stream<core::Object*>* :stream = self::F<asy::Stream<core::Object*>*>();
-          asy::_StreamIterator<core::Object*>* :for-iterator = new asy::_StreamIterator::•<core::Object*>(:stream);
-          try
-            #L6:
-            while (true) {
-              dynamic #t16 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final core::Object* #t18 = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
-                {
-                  o = #t18;
-                }
-              }
-              else
-                break #L6;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null)) {
-              [yield] let dynamic #t19 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          d = #t7;
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    asy::Stream<core::Object*>* :stream = self::F<asy::Stream<core::Object*>*>();
+    asy::_StreamIterator<core::Object*>* :for-iterator = new asy::_StreamIterator::•<core::Object*>(:stream);
+    try
+      while (let dynamic #t8 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final core::Object* #t9 = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
+        {
+          o = #t9;
+        }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
-static method main() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L7:
-      {
-        {
-          core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            core::int* x = :sync-for-iterator.{core::Iterator::current}{core::int*};
-            {}
-          }
-        }
-        {
-          core::Iterator<core::num*>* :sync-for-iterator = core::_GrowableList::_literal3<core::num*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::num*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            core::num* x = :sync-for-iterator.{core::Iterator::current}{core::num*};
-            {}
-          }
-        }
-        {
-          core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            core::int* x = :sync-for-iterator.{core::Iterator::current}{core::int*};
-            {}
-          }
-        }
-        {
-          self::MyStream<core::int*>* :stream = self::MyStream::•<core::int*>();
-          asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
-          try
-            #L8:
-            while (true) {
-              dynamic #t20 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t21 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                {}
-              }
-              else
-                break #L8;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          self::MyStream<core::int*>* :stream = self::MyStream::•<core::int*>();
-          asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
-          try
-            #L9:
-            while (true) {
-              dynamic #t23 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
-                {}
-              }
-              else
-                break #L9;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t25 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
+static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
+  {
+    core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      core::int* x = :sync-for-iterator.{core::Iterator::current}{core::int*};
+      {}
+    }
+  }
+  {
+    core::Iterator<core::num*>* :sync-for-iterator = core::_GrowableList::_literal3<core::num*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::num*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      core::num* x = :sync-for-iterator.{core::Iterator::current}{core::num*};
+      {}
+    }
+  }
+  {
+    core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      core::int* x = :sync-for-iterator.{core::Iterator::current}{core::int*};
+      {}
+    }
+  }
+  {
+    self::MyStream<core::int*>* :stream = self::MyStream::•<core::int*>();
+    asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
+    try
+      while (let dynamic #t10 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
+        {}
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    self::MyStream<core::int*>* :stream = self::MyStream::•<core::int*>();
+    asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
+    try
+      while (let dynamic #t11 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
+        {}
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
index 02bca84..35e82c4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
@@ -29,7 +29,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -84,58 +83,19 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
-static method foo() → asy::Stream<core::List<core::int*>*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<core::List<core::int*>*>* :controller;
-  dynamic :controller_stream;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L1:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) → core::bool})
-            return null;
-          else
-            [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
+static method foo() → asy::Stream<core::List<core::int*>*>* async* {
+  yield core::_GrowableList::•<core::int*>(0);
+  yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
  - 'List' is from 'dart:core'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
-                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*){(core::List<core::int*>*) → core::bool})
-            return null;
-          else
-            [yield] null;
-          :controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
+                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*;
+  yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
  - 'List' is from 'dart:core'.
  - 'Stream' is from 'dart:async'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                               ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} asy::Stream<core::List<core::int*>*>*){(asy::Stream<core::List<core::int*>*>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-          :controller.{asy::_AsyncStarStreamController::addStream}(self::MyStream::•<core::List<core::int*>*>()){(asy::Stream<core::List<core::int*>*>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::List<core::int*>*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::List<core::int*>*>};
-  return :controller_stream;
+                                                               ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} asy::Stream<core::List<core::int*>*>*;
+  yield* self::MyStream::•<core::List<core::int*>*>();
 }
 static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* /* originally sync* */ {
   function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
index 258db25..52fd949 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
@@ -1,98 +1,52 @@
 library test;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
+import "dart:async" as asy;
 
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  core::Object* o;
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = (o as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      {}
+    }
+  }
+  {
+    asy::Stream<dynamic>* :stream = o as{TypeError} asy::Stream<dynamic>*;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        {}
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  core::int* y;
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = (o as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
-        core::Object* o;
+        y = #t2 as{TypeError,ForDynamic} core::int*;
+      }
+    }
+  }
+  {
+    asy::Stream<dynamic>* :stream = o as{TypeError} asy::Stream<dynamic>*;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t4 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          core::Iterator<dynamic>* :sync-for-iterator = (o as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-            {}
-          }
-        }
-        {
-          asy::Stream<dynamic>* :stream = o as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {}
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        core::int* y;
-        {
-          core::Iterator<dynamic>* :sync-for-iterator = (o as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
-            {
-              y = #t4 as{TypeError,ForDynamic} core::int*;
-            }
-          }
-        }
-        {
-          asy::Stream<dynamic>* :stream = o as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final dynamic #t7 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  y = #t7 as{TypeError,ForDynamic} core::int*;
-                }
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          y = #t4 as{TypeError,ForDynamic} core::int*;
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
index 5c43118..06b5b67 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,175 +34,21 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = 3;
-          break #L3;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = 3;
-          break #L4;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          :return_value = asy::Future::value<core::int*>(3);
-          break #L5;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = asy::Future::value<core::int*>(3);
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
index a14d3e6..8e3d262 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,175 +34,21 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = 3;
-          break #L3;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = 3;
-          break #L4;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          :return_value = new self::MyFuture::value<core::int*>(3);
-          break #L5;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = new self::MyFuture::value<core::int*>(3);
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
index e39900a..53f1486 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,175 +34,21 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = 3;
-          break #L3;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = 3;
-          break #L4;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          :return_value = asy::Future::value<core::int*>(3);
-          break #L5;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = asy::Future::value<core::int*>(3);
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
index 3d41dfa..e29cac0 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,175 +34,21 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = 3;
-          break #L3;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = 3;
-          break #L4;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          :return_value = new self::MyFuture::value<core::int*>(3);
-          break #L5;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = new self::MyFuture::value<core::int*>(3);
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
index cce1d0b..1503ace 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,175 +34,21 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = 3;
-          break #L3;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = 3;
-          break #L4;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          :return_value = new self::MyFuture::value<core::int*>(3);
-          break #L5;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = new self::MyFuture::value<core::int*>(3);
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
index 36a0f77..9ce9f77 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,175 +34,21 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = 3;
-          break #L3;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = 3;
-          break #L4;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          :return_value = asy::Future::value<core::int*>(3);
-          break #L5;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = asy::Future::value<core::int*>(3);
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
index 0fbde92..864842a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,70 +34,9 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    core::int* :async_temporary_0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(x) {
-            :async_temporary_0 = 2;
-          }
-          else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
-          }
-          :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
+    return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
index b88ca68..fddad42 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,70 +34,9 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    core::int* :async_temporary_0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(x) {
-            :async_temporary_0 = 2;
-          }
-          else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
-          }
-          :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
+    return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
index 6a05bbf..0688642 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,70 +34,9 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    core::int* :async_temporary_0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(x) {
-            :async_temporary_0 = 2;
-          }
-          else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
-          }
-          :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
+    return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
index 34c2ea5..1840033 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,70 +34,9 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    core::int* :async_temporary_0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(x) {
-            :async_temporary_0 = 2;
-          }
-          else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
-          }
-          :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
+    return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
index c47ee35..436d1f4 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,70 +34,9 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    core::int* :async_temporary_0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(x) {
-            :async_temporary_0 = 2;
-          }
-          else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
-          }
-          :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
+    return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
index 9c16fa5..30e9a01 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,70 +34,9 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    core::int* :async_temporary_0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          if(x) {
-            :async_temporary_0 = 2;
-          }
-          else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
-          }
-          :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
+    return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
index 83b6d1e..60016a9 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -35,75 +34,13 @@
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    core::int* :async_temporary_0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          final core::int* #t1 = x;
-          if(#t1 == null) {
-            [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
-          }
-          else {
-            :async_temporary_0 = #t1;
-          }
-          :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => let final core::int* #t1 = x in #t1 == null ?{core::int*} await asy::Future::value<core::int*>(3) : #t1){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
+    return (let final core::int* #t2 = await x in #t2 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t2) as{TypeError} FutureOr<core::int*>*;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t3 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
-          :return_value = (let final core::int* #t4 = _in::unsafeCast<core::int*>(:result_or_exception) in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t5 = x in #t5 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t5) as{TypeError} FutureOr<core::int*>*){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t3 = x in #t3 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t3) as{TypeError} FutureOr<core::int*>*){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* {
-    return (let final core::int* #t6 = x in #t6 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t6) as{TypeError} FutureOr<core::int*>*;
+    return (let final core::int* #t4 = x in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
index e561f29..727832e 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
@@ -32,87 +32,14 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g1(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+  return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method g3(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        core::Object* y = x ?{core::Object*} 42 : asy::Future::value<core::int*>(42);
-        :return_value = y as{TypeError} FutureOr<core::int*>*;
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g2(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+  return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
+static method g3(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+  core::Object* y = x ?{core::Object*} 42 : asy::Future::value<core::int*>(42);
+  return y as{TypeError} FutureOr<core::int*>*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
index 042521a..88f763b 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
@@ -32,87 +32,14 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g1(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+  return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method g3(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-  final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        core::Object* y = x ?{core::Object*} 42 : new self::MyFuture::value<dynamic>(42);
-        :return_value = y as{TypeError} FutureOr<core::int*>*;
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g2(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+  return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
+static method g3(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+  core::Object* y = x ?{core::Object*} 42 : new self::MyFuture::value<dynamic>(42);
+  return y as{TypeError} FutureOr<core::int*>*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index 4d9373c..78822c8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -44,59 +44,11 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  core::List<core::int*>? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = core::_GrowableList::_literal1<core::int*>(3);
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return core::_GrowableList::_literal1<core::int*>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::List<core::int*>*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
index b24c57d..e0786f8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
@@ -35,59 +35,11 @@
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  core::List<core::int*>? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = core::_GrowableList::_literal1<core::int*>(3);
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return core::_GrowableList::_literal1<core::int*>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::List<core::int*>*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = new self::MyFuture::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return new self::MyFuture::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index feef12c..0c3bc84 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -44,59 +44,11 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  core::List<core::int*>? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = core::_GrowableList::_literal1<core::int*>(3);
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return core::_GrowableList::_literal1<core::int*>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::List<core::int*>*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
index 685b7cb..756da4f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
@@ -35,59 +35,11 @@
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  core::List<core::int*>? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = core::_GrowableList::_literal1<core::int*>(3);
-        break #L1;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return core::_GrowableList::_literal1<core::int*>(3);
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
-  core::bool* :is_sync = false;
-  FutureOr<core::List<core::int*>*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = new self::MyFuture::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
+  return new self::MyFuture::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(3));
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
index cb0174e..d92020e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -21,34 +20,9 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
-        has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
-        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2)), :async_op_then, :async_op_error) in null;
-        core::List<core::List<self::A*>*>* merged = _in::unsafeCast<core::List<core::List<self::A*>*>>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method foo() → dynamic async /* futureValueType= dynamic */ {
+  has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
+  has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
+  core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
index ee68309..9fb7dae 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
@@ -2,39 +2,13 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
 static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
   return x;
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        asy::Future<core::String*>* f;
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::id<FutureOr<core::String*>*>(f), :async_op_then, :async_op_error) in null;
-        core::String* s = _in::unsafeCast<core::String*>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  asy::Future<core::String*>* f;
+  core::String* s = await self::id<FutureOr<core::String*>*>(f);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
index 7d0a74b..057267c 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -31,38 +30,12 @@
     : super self::A::•()
     ;
 }
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
-        asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
-        core::List<asy::Future<self::A*>*>* lll = core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c);
-        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<self::A*>(lll), :async_op_then, :async_op_error) in null;
-        core::List<self::A*>* result = _in::unsafeCast<core::List<self::A*>>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::wait<self::A*>(core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c)), :async_op_then, :async_op_error) in null;
-        core::List<self::A*>* result2 = _in::unsafeCast<core::List<self::A*>>(:result_or_exception);
-        core::List<self::A*>* list = result;
-        list = result2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
+  asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
+  core::List<asy::Future<self::A*>*>* lll = core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c);
+  core::List<self::A*>* result = await asy::Future::wait<self::A*>(lll);
+  core::List<self::A*>* result2 = await asy::Future::wait<self::A*>(core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c));
+  core::List<self::A*>* list = result;
+  list = result2;
 }
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
index add860f..c703bed 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
@@ -7,41 +7,8 @@
 
 static method foo(() →* asy::Stream<core::int*>* values) → void {}
 static method main() → void {
-  self::foo(() → asy::Stream<core::int*>* /* originally async* */ {
-    asy::_AsyncStarStreamController<core::int*>* :controller;
-    dynamic :controller_stream;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try
-        try {
-          #L1:
-          {
-            if(:controller.{asy::_AsyncStarStreamController::add}(0){(core::int*) → core::bool})
-              return null;
-            else
-              [yield] null;
-            if(:controller.{asy::_AsyncStarStreamController::add}(1){(core::int*) → core::bool})
-              return null;
-            else
-              [yield] null;
-          }
-          return;
-        }
-        on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-          :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-        }
-      finally {
-        :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
-    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int*>};
-    return :controller_stream;
+  self::foo(() → asy::Stream<core::int*>* async* {
+    yield 0;
+    yield 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
index f5a8bb3..c0bf62a 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
@@ -6,62 +6,13 @@
 static method test() → dynamic {
   function f0() → core::int*
     return 42;
-  function f1() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = 42;
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  function f1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
+    return 42;
   function f2() → core::int* {
     return 42;
   }
-  function f3() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          :return_value = 42;
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+  function f3() → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
+    return 42;
   }
   function f4() → core::Iterable<core::int*>* /* originally sync* */ {
     function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
@@ -80,38 +31,8 @@
     }
     return new core::_SyncIterable::•<core::int*>(:sync_op_gen);
   }
-  function f5() → asy::Stream<core::int*>* /* originally async* */ {
-    asy::_AsyncStarStreamController<core::int*>* :controller;
-    dynamic :controller_stream;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try
-        try {
-          #L3:
-          {
-            if(:controller.{asy::_AsyncStarStreamController::add}(42){(core::int*) → core::bool})
-              return null;
-            else
-              [yield] null;
-          }
-          return;
-        }
-        on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-          :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-        }
-      finally {
-        :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
-    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int*>};
-    return :controller_stream;
+  function f5() → asy::Stream<core::int*>* async* {
+    yield 42;
   }
   function f6() → core::num*
     return 42;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
index 170116d..5cac307 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
@@ -31,7 +31,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -55,59 +54,23 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    dynamic :exception0;
-    dynamic :stack_trace0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
+  method foo(covariant-by-class self::Bar::T* t) → dynamic async /* futureValueType= dynamic */ {
+    {
+      self::Bar::T* :stream = t;
+      asy::_StreamIterator<core::String*>* :for-iterator = new asy::_StreamIterator::•<core::String*>(:stream);
+      try
+        while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          core::String* i = :for-iterator.{asy::_StreamIterator::current}{core::String*};
           {
-            self::Bar::T* :stream = t;
-            asy::_StreamIterator<core::String*>* :for-iterator = new asy::_StreamIterator::•<core::String*>(:stream);
-            try
-              #L2:
-              while (true) {
-                dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-                if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                  core::String* i = :for-iterator.{asy::_StreamIterator::current}{core::String*};
-                  {
-                    core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
-                  }
-                }
-                else
-                  break #L2;
-              }
-            finally
-              if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String*>?} == null)) {
-                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-                :result_or_exception;
-              }
           }
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String*>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -124,60 +87,24 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    dynamic :exception0;
-    dynamic :stack_trace0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
+  method foo(covariant-by-class self::Baz::S* t) → dynamic async /* futureValueType= dynamic */ {
+    {
+      self::Baz::S* :stream = t;
+      asy::_StreamIterator<self::Baz::T*>* :for-iterator = new asy::_StreamIterator::•<self::Baz::T*>(:stream);
+      try
+        while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+          self::Baz::T* i = :for-iterator.{asy::_StreamIterator::current}{self::Baz::T*};
           {
-            self::Baz::S* :stream = t;
-            asy::_StreamIterator<self::Baz::T*>* :for-iterator = new asy::_StreamIterator::•<self::Baz::T*>(:stream);
-            try
-              #L4:
-              while (true) {
-                dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-                if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                  self::Baz::T* i = :for-iterator.{asy::_StreamIterator::current}{self::Baz::T*};
-                  {
-                    core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+            core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in i as{TypeError} core::int*;
-                    self::Baz::T* y = i;
-                  }
-                }
-                else
-                  break #L4;
-              }
-            finally
-              if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Baz::T*>?} == null)) {
-                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-                :result_or_exception;
-              }
+            self::Baz::T* y = i;
           }
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
+      finally
+        if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Baz::T*>?} == null))
+          await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+    }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -241,216 +168,126 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
+  {
+    self::MyStream<self::Foo*>* :stream = myStream;
+    asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
+    try
+      while (let dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        self::Foo* x = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
         {
-          self::MyStream<self::Foo*>* :stream = myStream;
-          asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
-          try
-            #L6:
-            while (true) {
-              dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                self::Foo* x = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
-                {
-                  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+          core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in x as{TypeError} core::String*;
-                }
-              }
-              else
-                break #L6;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t9 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
         }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    self::MyStream<self::Foo*>* :stream = myStream;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          self::MyStream<self::Foo*>* :stream = myStream;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L7:
-            while (true) {
-              dynamic #t10 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  core::String* y = x as{TypeError,ForDynamic} core::String*;
-                }
-              }
-              else
-                break #L7;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          core::String* y = x as{TypeError,ForDynamic} core::String*;
         }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    self::MyStream<self::Foo*>* :stream = myStream;
+    asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
+    try
+      while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final self::Foo* #t6 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
         {
-          self::MyStream<self::Foo*>* :stream = myStream;
-          asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
-          try
-            #L8:
-            while (true) {
-              dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final self::Foo* #t15 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
-                {
-                  core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+          core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in #t15 as{TypeError} core::String*;
-                  core::String* y = x;
-                }
-              }
-              else
-                break #L8;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t16 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+                    ^" in #t6 as{TypeError} core::String*;
+          core::String* y = x;
         }
-        dynamic z;
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  dynamic z;
+  {
+    self::MyStream<self::Foo*>* :stream = myStream;
+    asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
+    try
+      while (let dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final self::Foo* #t8 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
         {
-          self::MyStream<self::Foo*>* :stream = myStream;
-          asy::_StreamIterator<self::Foo*>* :for-iterator = new asy::_StreamIterator::•<self::Foo*>(:stream);
-          try
-            #L9:
-            while (true) {
-              dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final self::Foo* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
-                {
-                  z = #t19;
-                  core::String* y = z as{TypeError,ForDynamic} core::String*;
-                }
-              }
-              else
-                break #L9;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          z = #t8;
+          core::String* y = z as{TypeError,ForDynamic} core::String*;
         }
-        asy::Stream<dynamic>* stream = myStream;
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  asy::Stream<dynamic>* stream = myStream;
+  {
+    asy::Stream<dynamic>* :stream = stream;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t9 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t10 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          asy::Stream<dynamic>* :stream = stream;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L10:
-            while (true) {
-              dynamic #t21 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final dynamic #t23 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  self::Foo* x = #t23 as{TypeError,ForDynamic} self::Foo*;
-                  self::Foo* y = x;
-                }
-              }
-              else
-                break #L10;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          self::Foo* x = #t10 as{TypeError,ForDynamic} self::Foo*;
+          self::Foo* y = x;
         }
-        dynamic stream2 = myStream;
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  dynamic stream2 = myStream;
+  {
+    asy::Stream<dynamic>* :stream = stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t11 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t12 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          asy::Stream<dynamic>* :stream = stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L11:
-            while (true) {
-              dynamic #t25 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t26 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final dynamic #t27 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  self::Foo* x = #t27 as{TypeError,ForDynamic} self::Foo*;
-                  self::Foo* y = x;
-                }
-              }
-              else
-                break #L11;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t28 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          self::Foo* x = #t12 as{TypeError,ForDynamic} self::Foo*;
+          self::Foo* y = x;
         }
-        core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  {
+    Never :stream = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Map' is from 'dart:core'.
  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
  - 'Stream' is from 'dart:async'.
   await for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                            ^" in map as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L12:
-            while (true) {
-              dynamic #t29 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  core::String* y = x as{TypeError,ForDynamic} core::String*;
-                }
-              }
-              else
-                break #L12;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t31 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        {
+          core::String* y = x as{TypeError,ForDynamic} core::String*;
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
index 251c281..24b6944 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
@@ -10,7 +10,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -19,35 +18,11 @@
   function a() → (core::int*) →* core::int* {
     return (core::int* x) → core::int* => x;
   }
-  function b() → asy::Future<(core::int*) →* core::int*>* /* futureValueType= (core::int*) →* core::int* */ /* originally async */ {
-    final asy::_Future<(core::int*) →* core::int*>* :async_future = new asy::_Future::•<(core::int*) →* core::int*>();
-    core::bool* :is_sync = false;
-    FutureOr<(core::int*) →* core::int*>* :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+  function b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                      ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
   }
   function c() → core::Iterable<(core::int*) →* core::int*>* /* originally sync* */ {
     function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
@@ -83,70 +58,10 @@
     }
     return new core::_SyncIterable::•<(core::int*) →* core::int*>(:sync_op_gen);
   }
-  function e() → asy::Stream<(core::int*) →* core::int*>* /* originally async* */ {
-    asy::_AsyncStarStreamController<(core::int*) →* core::int*>* :controller;
-    dynamic :controller_stream;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try
-        try {
-          #L2:
-          {
-            if(:controller.{asy::_AsyncStarStreamController::add}((core::int* x) → core::int* => x){((core::int*) →* core::int*) → core::bool})
-              return null;
-            else
-              [yield] null;
-          }
-          return;
-        }
-        on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-          :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-        }
-      finally {
-        :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :controller = new asy::_AsyncStarStreamController::•<(core::int*) →* core::int*>(:async_op);
-    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<(core::int*) →* core::int*>};
-    return :controller_stream;
+  function e() → asy::Stream<(core::int*) →* core::int*>* async* {
+    yield(core::int* x) → core::int* => x;
   }
-  function f() → asy::Stream<(core::int*) →* core::int*>* /* originally async* */ {
-    asy::_AsyncStarStreamController<(core::int*) →* core::int*>* :controller;
-    dynamic :controller_stream;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    dynamic :saved_try_context_var1;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try
-        try {
-          #L3:
-          {
-            :controller.{asy::_AsyncStarStreamController::addStream}(asy::Stream::fromIterable<(core::int*) →* core::int*>(core::_GrowableList::_literal1<(core::int*) →* core::int*>((core::int* x) → core::int* => x))){(asy::Stream<(core::int*) →* core::int*>) → void};
-            [yield] null;
-            if(_in::unsafeCast<core::bool>(:result_or_exception))
-              return null;
-          }
-          return;
-        }
-        on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-          :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-        }
-      finally {
-        :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :controller = new asy::_AsyncStarStreamController::•<(core::int*) →* core::int*>(:async_op);
-    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<(core::int*) →* core::int*>};
-    return :controller_stream;
+  function f() → asy::Stream<(core::int*) →* core::int*>* async* {
+    yield* asy::Stream::fromIterable<(core::int*) →* core::int*>(core::_GrowableList::_literal1<(core::int*) →* core::int*>((core::int* x) → core::int* => x));
   }
 }
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
index 3d5e979..b867e07 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
@@ -10,7 +10,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -18,35 +17,11 @@
 static method a() → (core::int*) →* core::int* {
   return (core::int* x) → core::int* => x;
 }
-static method b() → asy::Future<(core::int*) →* core::int*>* /* futureValueType= (core::int*) →* core::int* */ /* originally async */ {
-  final asy::_Future<(core::int*) →* core::int*>* :async_future = new asy::_Future::•<(core::int*) →* core::int*>();
-  core::bool* :is_sync = false;
-  FutureOr<(core::int*) →* core::int*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+static method b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
                                    ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
 }
 static method c() → core::Iterable<(core::int*) →* core::int*>* /* originally sync* */ {
   function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
@@ -82,70 +57,10 @@
   }
   return new core::_SyncIterable::•<(core::int*) →* core::int*>(:sync_op_gen);
 }
-static method e() → asy::Stream<(core::int*) →* core::int*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<(core::int*) →* core::int*>* :controller;
-  dynamic :controller_stream;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L2:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}((core::int* x) → core::int* => x){((core::int*) →* core::int*) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<(core::int*) →* core::int*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<(core::int*) →* core::int*>};
-  return :controller_stream;
+static method e() → asy::Stream<(core::int*) →* core::int*>* async* {
+  yield(core::int* x) → core::int* => x;
 }
-static method f() → asy::Stream<(core::int*) →* core::int*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<(core::int*) →* core::int*>* :controller;
-  dynamic :controller_stream;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L3:
-        {
-          :controller.{asy::_AsyncStarStreamController::addStream}(asy::Stream::fromIterable<(core::int*) →* core::int*>(core::_GrowableList::_literal1<(core::int*) →* core::int*>((core::int* x) → core::int* => x))){(asy::Stream<(core::int*) →* core::int*>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<(core::int*) →* core::int*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<(core::int*) →* core::int*>};
-  return :controller_stream;
+static method f() → asy::Stream<(core::int*) →* core::int*>* async* {
+  yield* asy::Stream::fromIterable<(core::int*) →* core::int*>(core::_GrowableList::_literal1<(core::int*) →* core::int*>((core::int* x) → core::int* => x));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
index 71aadc6..6ab4fd2 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
@@ -23,115 +23,69 @@
 //                   ^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
+import "dart:async" as asy;
 
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::String* s;
-        {
-          core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  core::String* s;
+  {
+    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
                 ^" in s as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{Never};
-            {
-              core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
-            }
-          }
-        }
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final dynamic #t1 = :sync-for-iterator.{core::Iterator::current}{Never};
+      {
+        core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
+      }
+    }
+  }
+  {
+    Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (int x in s) {}
                       ^" in s as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final dynamic #t4 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  core::int* x = #t4 as{TypeError,ForDynamic} core::int*;
-                }
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        core::int* y;
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t3 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+          core::int* x = #t3 as{TypeError,ForDynamic} core::int*;
+        }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  core::int* y;
+  {
+    core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (y in s) {}
             ^" in s as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final dynamic #t6 = :sync-for-iterator.{core::Iterator::current}{Never};
-            {
-              y = #t6 as{TypeError,ForDynamic} core::int*;
-            }
-          }
-        }
-        {
-          Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{Never};
+      {
+        y = #t4 as{TypeError,ForDynamic} core::int*;
+      }
+    }
+  }
+  {
+    Never :stream = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (y in s) {}
                   ^" in s as{TypeError} asy::Stream<dynamic>*;
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final dynamic #t9 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  y = #t9 as{TypeError,ForDynamic} core::int*;
-                }
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+    asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final dynamic #t6 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+        {
+          y = #t6 as{TypeError,ForDynamic} core::int*;
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
index c30707e..310c41e 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
@@ -17,7 +17,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -43,174 +42,111 @@
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  core::Iterable<self::A*>* iterable;
+  asy::Stream<self::A*>* stream;
+  self::A* a;
+  self::B* b;
+  core::int* i;
+  {
+    core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final self::A* #t1 = :sync-for-iterator.{core::Iterator::current}{self::A*};
       {
-        core::Iterable<self::A*>* iterable;
-        asy::Stream<self::A*>* stream;
-        self::A* a;
-        self::B* b;
-        core::int* i;
+        a = #t1;
+      }
+    }
+  }
+  {
+    asy::Stream<self::A*>* :stream = stream;
+    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    try
+      while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final self::A* #t3 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
         {
-          core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final self::A* #t1 = :sync-for-iterator.{core::Iterator::current}{self::A*};
-            {
-              a = #t1;
-            }
-          }
+          a = #t3;
         }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final self::A* #t4 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+      {
+        b = #t4 as{TypeError} self::B*;
+      }
+    }
+  }
+  {
+    asy::Stream<self::A*>* :stream = stream;
+    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    try
+      while (let dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final self::A* #t6 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
         {
-          asy::Stream<self::A*>* :stream = stream;
-          asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final self::A* #t4 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
-                {
-                  a = #t4;
-                }
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          b = #t6 as{TypeError} self::B*;
         }
-        {
-          core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final self::A* #t6 = :sync-for-iterator.{core::Iterator::current}{self::A*};
-            {
-              b = #t6 as{TypeError} self::B*;
-            }
-          }
-        }
-        {
-          asy::Stream<self::A*>* :stream = stream;
-          asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final self::A* #t9 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
-                {
-                  b = #t9 as{TypeError} self::B*;
-                }
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final self::A* #t11 = :sync-for-iterator.{core::Iterator::current}{self::A*};
-            {
-              i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    core::Iterator<self::A*>* :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final self::A* #t7 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+      {
+        i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   for (i in iterable) {}
-         ^" in #t11 as{TypeError} core::int*;
-            }
-          }
-        }
+         ^" in #t7 as{TypeError} core::int*;
+      }
+    }
+  }
+  {
+    asy::Stream<self::A*>* :stream = stream;
+    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    try
+      while (let dynamic #t8 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final self::A* #t9 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
         {
-          asy::Stream<self::A*>* :stream = stream;
-          asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
-          try
-            #L4:
-            while (true) {
-              dynamic #t12 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final self::A* #t14 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
-                {
-                  i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+          i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
 Try changing the type of the variable.
   await for (i in stream) {}
-               ^" in #t14 as{TypeError} core::int*;
-                }
-              }
-              else
-                break #L4;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        {
-          core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final self::A* #t16 = :sync-for-iterator.{core::Iterator::current}{self::A*};
-            {
-              a = #t16;
-            }
-          }
-        }
-        {
-          asy::Stream<self::A*>* :stream = self::f<asy::Stream<self::A*>*>();
-          asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
-          try
-            #L5:
-            while (true) {
-              dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final self::A* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
-                {
-                  a = #t19;
-                }
-              }
-              else
-                break #L5;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+               ^" in #t9 as{TypeError} core::int*;
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  {
+    core::Iterator<self::A*>* :sync-for-iterator = self::f<core::Iterable<self::A*>*>().{core::Iterable::iterator}{core::Iterator<self::A*>*};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final self::A* #t10 = :sync-for-iterator.{core::Iterator::current}{self::A*};
+      {
+        a = #t10;
+      }
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+  }
+  {
+    asy::Stream<self::A*>* :stream = self::f<asy::Stream<self::A*>*>();
+    asy::_StreamIterator<self::A*>* :for-iterator = new asy::_StreamIterator::•<self::A*>(:stream);
+    try
+      while (let dynamic #t11 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final self::A* #t12 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
+        {
+          a = #t12;
+        }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index 774b14f..87ee63e 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -136,131 +136,43 @@
       #t5.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t5;
 }
-static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
+  {
+    asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
+    asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
+    try
+      while (let dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
         {
-          asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
-          asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
-                {
-                  core::print(s);
-                }
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          core::print(s);
         }
-        :return_value = "hest";
-        break #L1;
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  return "hest";
 }
-static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        lowered has-declared-initializer core::String? #s1;
-        function #s1#get() → core::String
-          return let final core::String? #t9 = #s1 in #t9 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
+  lowered has-declared-initializer core::String? #s1;
+  function #s1#get() → core::String
+    return let final core::String? #t7 = #s1 in #t7 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
-                   ^^^^^" : #t9{core::String};
-        function #s1#set(core::String s1#param) → dynamic
-          return #s1 = s1#param;
-        lowered has-declared-initializer core::String? #s2;
-        function #s2#get() → core::String
-          return let final core::String? #t10 = #s2 in #t10 == null ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+                   ^^^^^" : #t7{core::String};
+  function #s1#set(core::String s1#param) → dynamic
+    return #s1 = s1#param;
+  lowered has-declared-initializer core::String? #s2;
+  function #s2#get() → core::String
+    return let final core::String? #t8 = #s2 in #t8 == null ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
-                             ^^^^^"}${#C1}" : #t10{core::String};
-        function #s2#set(core::String s2#param) → dynamic
-          return #s2 = s2#param;
-        lowered has-declared-initializer core::Function? #f;
-        function #f#get() → core::Function
-          return let final core::Function? #t11 = #f in #t11 == null ?{core::Function} #f = () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-            final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-            core::bool* :is_sync = false;
-            FutureOr<dynamic>? :return_value;
-            (dynamic) → dynamic :async_op_then;
-            (core::Object, core::StackTrace) → dynamic :async_op_error;
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            dynamic :saved_try_context_var0;
-            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-              try {
-                #L4:
-                {
-                  [yield] let dynamic #t12 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
-                  :return_value = :result_or_exception;
-                  break #L4;
-                }
-                asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-              }
-            :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-            :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(null, null){() → dynamic};
-            :is_sync = true;
-            return :async_future;
-          } : #t11{core::Function};
-        function #f#set(core::Function f#param) → dynamic
-          return #f = f#param;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+                             ^^^^^"}${#C1}" : #t8{core::String};
+  function #s2#set(core::String s2#param) → dynamic
+    return #s2 = s2#param;
+  lowered has-declared-initializer core::Function? #f;
+  function #f#get() → core::Function
+    return let final core::Function? #t9 = #f in #t9 == null ?{core::Function} #f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest() : #t9{core::Function};
+  function #f#set(core::Function f#param) → dynamic
+    return #f = f#param;
 }
 static method main() → dynamic {}
 
@@ -270,4 +182,4 @@
 
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///later.dart:46:18 -> IntConstant(42)
-Extra constant evaluation: evaluated: 201, effectively constant: 1
+Extra constant evaluation: evaluated: 130, effectively constant: 1
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index 97b6f78..d1a0a6c 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -156,155 +156,67 @@
       #t5.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t5;
 }
-static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
+  {
+    asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
+    asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
+    try
+      while (let dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
         {
-          asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
-          asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
-                {
-                  core::print(s);
-                }
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          core::print(s);
         }
-        :return_value = "hest";
-        break #L1;
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  return "hest";
 }
-static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        lowered has-declared-initializer core::String? #s1;
-        lowered core::bool #s1#isSet = false;
-        function #s1#get() → core::String {
-          if(!#s1#isSet) {
-            #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
+  lowered has-declared-initializer core::String? #s1;
+  lowered core::bool #s1#isSet = false;
+  function #s1#get() → core::String {
+    if(!#s1#isSet) {
+      #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^";
-            #s1#isSet = true;
-          }
-          return #s1{core::String};
-        }
-        function #s1#set(core::String s1#param) → dynamic {
-          #s1#isSet = true;
-          return #s1 = s1#param;
-        }
-        lowered has-declared-initializer core::String? #s2;
-        lowered core::bool #s2#isSet = false;
-        function #s2#get() → core::String {
-          if(!#s2#isSet) {
-            #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+      #s1#isSet = true;
+    }
+    return #s1{core::String};
+  }
+  function #s1#set(core::String s1#param) → dynamic {
+    #s1#isSet = true;
+    return #s1 = s1#param;
+  }
+  lowered has-declared-initializer core::String? #s2;
+  lowered core::bool #s2#isSet = false;
+  function #s2#get() → core::String {
+    if(!#s2#isSet) {
+      #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}";
-            #s2#isSet = true;
-          }
-          return #s2{core::String};
-        }
-        function #s2#set(core::String s2#param) → dynamic {
-          #s2#isSet = true;
-          return #s2 = s2#param;
-        }
-        lowered has-declared-initializer core::Function? #f;
-        lowered core::bool #f#isSet = false;
-        function #f#get() → core::Function {
-          if(!#f#isSet) {
-            #f = () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-              final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-              core::bool* :is_sync = false;
-              FutureOr<dynamic>? :return_value;
-              (dynamic) → dynamic :async_op_then;
-              (core::Object, core::StackTrace) → dynamic :async_op_error;
-              core::int :await_jump_var = 0;
-              dynamic :await_ctx_var;
-              dynamic :saved_try_context_var0;
-              function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-                try {
-                  #L4:
-                  {
-                    [yield] let dynamic #t9 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
-                    :return_value = :result_or_exception;
-                    break #L4;
-                  }
-                  asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-                  return;
-                }
-                on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                  asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-                }
-              :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-              :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-              :async_op(null, null){() → dynamic};
-              :is_sync = true;
-              return :async_future;
-            };
-            #f#isSet = true;
-          }
-          return #f{core::Function};
-        }
-        function #f#set(core::Function f#param) → dynamic {
-          #f#isSet = true;
-          return #f = f#param;
-        }
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
+      #s2#isSet = true;
     }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    return #s2{core::String};
+  }
+  function #s2#set(core::String s2#param) → dynamic {
+    #s2#isSet = true;
+    return #s2 = s2#param;
+  }
+  lowered has-declared-initializer core::Function? #f;
+  lowered core::bool #f#isSet = false;
+  function #f#get() → core::Function {
+    if(!#f#isSet) {
+      #f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
+      #f#isSet = true;
     }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    return #f{core::Function};
+  }
+  function #f#set(core::Function f#param) → dynamic {
+    #f#isSet = true;
+    return #f = f#param;
+  }
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
index 1bb1cc7..564f0b5 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
@@ -272,47 +272,22 @@
         break #L1;
       }
   }
-  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
-    final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
-    core::bool* :is_sync = false;
-    FutureOr<self::A>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          if(true) {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
+    if(true) {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
              ^" in let self::B? #t6 = x in #t6 == null ?{self::A} #t6 as{TypeError,ForNonNullableByDefault} self::A : #t6{self::A};
-            break #L4;
-          }
-          else {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<B?>.value(x); // Error.
                  ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
-            break #L4;
-          }
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+    }
   }
   return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -406,45 +381,20 @@
     return null; // Error.
            ^" in let Null #t15 = null in #t15 == null ?{self::A} #t15 as{TypeError,ForNonNullableByDefault} self::A : #t15{self::A};
   }
-  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
-    final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
-    core::bool* :is_sync = false;
-    FutureOr<self::A>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          if(true) {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
+    if(true) {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
              ^" in let Null #t16 = null in #t16 == null ?{self::A} #t16 as{TypeError,ForNonNullableByDefault} self::A : #t16{self::A};
-            break #L5;
-          }
-          else {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
                  ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
-            break #L5;
-          }
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+    }
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
index 2268408..65746d3 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
@@ -272,47 +272,22 @@
         break #L1;
       }
   }
-  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
-    final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
-    core::bool* :is_sync = false;
-    FutureOr<self::A>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          if(true) {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
+    if(true) {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
              ^" in x;
-            break #L4;
-          }
-          else {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<B?>.value(x); // Error.
                  ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
-            break #L4;
-          }
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+    }
   }
   return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -406,45 +381,20 @@
     return null; // Error.
            ^" in null;
   }
-  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
-    final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
-    core::bool* :is_sync = false;
-    FutureOr<self::A>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          if(true) {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
+    if(true) {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
              ^" in null;
-            break #L5;
-          }
-          else {
-            :return_value = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
                  ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
-            break #L5;
-          }
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+    }
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index 5244f7f..712bc36 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -2,53 +2,26 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* futureValueType= self::TestMixin::T% */ /* originally async */ {
-    final asy::_Future<self::TestMixin::T%> :async_future = new asy::_Future::•<self::TestMixin::T%>();
-    core::bool* :is_sync = false;
-    FutureOr<self::TestMixin::T%>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result_or_exception);
-          self::TestMixin::T% result;
-          if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
-          }
-          else
-            if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
-            }
-            else
-              if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
-                result = response{self::TestMixin::R% & self::TestMixin::T% /* '%' & '%' = '%' */};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L1;
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async /* futureValueType= self::TestMixin::T% */ {
+    final self::TestMixin::R% response = await fetch;
+    self::TestMixin::T% result;
+    if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
+      result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
+    }
+    else
+      if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
+        result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
+      }
+      else
+        if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
+          result = response{self::TestMixin::R% & self::TestMixin::T% /* '%' & '%' = '%' */};
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
 }
 class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
@@ -73,50 +46,24 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-    final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-    core::bool* :is_sync = false;
-    core::String? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result_or_exception);
-          core::String result;
-          if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
-          }
-          else
-            if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::Response<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
-            }
-            else
-              if(response is{ForNonNullableByDefault} core::String) {
-                result = response{self::Response<core::String>};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L2;
+  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    final self::Response<core::String> response = await fetch;
+    core::String result;
+    if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
+      result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+    }
+    else
+      if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
+        result = response{self::Response<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
+      }
+      else
+        if(response is{ForNonNullableByDefault} core::String) {
+          result = response{self::Response<core::String>};
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
 }
 class Class1 extends self::_Class1&Object&TestMixin {
@@ -132,50 +79,24 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-    final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-    core::bool* :is_sync = false;
-    core::String? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result_or_exception);
-          core::String result;
-          if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
-          }
-          else
-            if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
-            }
-            else
-              if(response is{ForNonNullableByDefault} core::String) {
-                result = response{self::PagingResponse<core::String>};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L3;
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    final self::PagingResponse<core::String> response = await fetch;
+    core::String result;
+    if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
+      result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+    }
+    else
+      if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
+        result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
+      }
+      else
+        if(response is{ForNonNullableByDefault} core::String) {
+          result = response{self::PagingResponse<core::String>};
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
 }
 class Class2 extends self::_Class2&Object&TestMixin {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index 5244f7f..712bc36 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -2,53 +2,26 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* futureValueType= self::TestMixin::T% */ /* originally async */ {
-    final asy::_Future<self::TestMixin::T%> :async_future = new asy::_Future::•<self::TestMixin::T%>();
-    core::bool* :is_sync = false;
-    FutureOr<self::TestMixin::T%>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result_or_exception);
-          self::TestMixin::T% result;
-          if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
-          }
-          else
-            if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
-            }
-            else
-              if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
-                result = response{self::TestMixin::R% & self::TestMixin::T% /* '%' & '%' = '%' */};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L1;
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async /* futureValueType= self::TestMixin::T% */ {
+    final self::TestMixin::R% response = await fetch;
+    self::TestMixin::T% result;
+    if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
+      result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
+    }
+    else
+      if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
+        result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
+      }
+      else
+        if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
+          result = response{self::TestMixin::R% & self::TestMixin::T% /* '%' & '%' = '%' */};
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
 }
 class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
@@ -73,50 +46,24 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-    final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-    core::bool* :is_sync = false;
-    core::String? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result_or_exception);
-          core::String result;
-          if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
-          }
-          else
-            if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::Response<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
-            }
-            else
-              if(response is{ForNonNullableByDefault} core::String) {
-                result = response{self::Response<core::String>};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L2;
+  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    final self::Response<core::String> response = await fetch;
+    core::String result;
+    if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
+      result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+    }
+    else
+      if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
+        result = response{self::Response<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
+      }
+      else
+        if(response is{ForNonNullableByDefault} core::String) {
+          result = response{self::Response<core::String>};
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
 }
 class Class1 extends self::_Class1&Object&TestMixin {
@@ -132,50 +79,24 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-    final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-    core::bool* :is_sync = false;
-    core::String? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
-          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result_or_exception);
-          core::String result;
-          if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
-          }
-          else
-            if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
-            }
-            else
-              if(response is{ForNonNullableByDefault} core::String) {
-                result = response{self::PagingResponse<core::String>};
-              }
-              else {
-                throw core::Exception::•("Invalid response type");
-              }
-          :return_value = result;
-          break #L3;
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    final self::PagingResponse<core::String> response = await fetch;
+    core::String result;
+    if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
+      result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+    }
+    else
+      if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
+        result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
+      }
+      else
+        if(response is{ForNonNullableByDefault} core::String) {
+          result = response{self::PagingResponse<core::String>};
         }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
   }
 }
 class Class2 extends self::_Class2&Object&TestMixin {
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
index b0a1eca..bae87ac 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
@@ -8,40 +8,14 @@
 //            ^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
+import "dart:async" as asy;
 
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error) in null;
-        core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
-           ^" in let core::List<dynamic>? #t2 = _in::unsafeCast<core::List<dynamic>?>(:result_or_exception) in #t2 == null ?{core::List<dynamic>} #t2 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t2{core::List<dynamic>};
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+           ^" in let core::List<dynamic>? #t1 = await self::l() in #t1 == null ?{core::List<dynamic>} #t1 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t1{core::List<dynamic>};
 }
 static method l() → asy::Future<core::List<dynamic>>?
   return null;
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
index af4fa89..a7bd501 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
@@ -8,40 +8,14 @@
 //            ^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
+import "dart:async" as asy;
 
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error) in null;
-        core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
-           ^" in _in::unsafeCast<core::List<dynamic>?>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+           ^" in await self::l();
 }
 static method l() → asy::Future<core::List<dynamic>>?
   return null;
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
index b91c2a7..d11dc27 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
@@ -1,34 +1,10 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::List<core::String>? a = core::_GrowableList::•<core::String>(0);
-        core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
-        core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
-        core::print(i);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::List<core::String>? a = core::_GrowableList::•<core::String>(0);
+  core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
+  core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
+  core::print(i);
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
index b91c2a7..d11dc27 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
@@ -1,34 +1,10 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::List<core::String>? a = core::_GrowableList::•<core::String>(0);
-        core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
-        core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
-        core::print(i);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::List<core::String>? a = core::_GrowableList::•<core::String>(0);
+  core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
+  core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
+  core::print(i);
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
index 38b54a6..fad7dab 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -55,367 +55,100 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return self::throwing();
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = throw v;
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => throw v;
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    throw v;
   };
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    Never? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          throw v;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    return throw v;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = throw v;
-          break #L3;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => self::throwing();
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    self::throwing();
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = self::throwing();
-          break #L4;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    Never? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          self::throwing();
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = self::throwing();
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    return self::throwing();
   };
 }
-static method errors() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+static method errors() → void async /* futureValueType= void */ {
+  (core::int) → core::String x2 = (core::int v) → core::String {
     try {
-      #L7:
-      {
-        (core::int) → core::String x2 = (core::int v) → core::String {
-          try {
-            throw v;
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+      throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → core::String x3 = (core::int v) → core::String {
-          try {
-            return throw v;
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → core::String x3 = (core::int v) → core::String {
+    try {
+      return throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → core::String x5 = (core::int v) → core::String {
-          try {
-            self::throwing();
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → core::String x5 = (core::int v) → core::String {
+    try {
+      self::throwing();
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → core::String x6 = (core::int v) → core::String {
-          try {
-            return self::throwing();
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → core::String x6 = (core::int v) → core::String {
+    try {
+      return self::throwing();
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L8:
-              {
-                try {
-                  throw v;
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
-                break #L8;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-        (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L9:
-              {
-                try {
-                  :return_value = throw v;
-                  break #L9;
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      return throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
-                break #L9;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-        (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L10:
-              {
-                try {
-                  self::throwing();
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      self::throwing();
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
-                break #L10;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-        (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L11:
-              {
-                try {
-                  :return_value = self::throwing();
-                  break #L11;
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      return self::throwing();
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
-                break #L11;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  };
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
index c6419e0..f8ca0c2 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
@@ -56,367 +56,100 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return let final Never #t3 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = throw v;
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => throw v;
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    throw v;
   };
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    Never? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          throw v;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    return throw v;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          :return_value = throw v;
-          break #L3;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          :return_value = let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-          break #L4;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    Never? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
-    final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
-    core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          :return_value = let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-          break #L6;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
+    return let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
 }
-static method errors() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+static method errors() → void async /* futureValueType= void */ {
+  (core::int) → core::String x2 = (core::int v) → core::String {
     try {
-      #L7:
-      {
-        (core::int) → core::String x2 = (core::int v) → core::String {
-          try {
-            throw v;
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+      throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → core::String x3 = (core::int v) → core::String {
-          try {
-            return throw v;
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → core::String x3 = (core::int v) → core::String {
+    try {
+      return throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → core::String x5 = (core::int v) → core::String {
-          try {
-            let final Never #t7 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → core::String x5 = (core::int v) → core::String {
+    try {
+      let final Never #t7 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → core::String x6 = (core::int v) → core::String {
-          try {
-            return let final Never #t8 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-          }
-          on core::Object catch(final core::Object _) {
-          }
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → core::String x6 = (core::int v) → core::String {
+    try {
+      return let final Never #t8 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
-        };
-        (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L8:
-              {
-                try {
-                  throw v;
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
-                break #L8;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-        (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L9:
-              {
-                try {
-                  :return_value = throw v;
-                  break #L9;
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      return throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
-                break #L9;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-        (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L10:
-              {
-                try {
-                  let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
-                break #L10;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-        (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
-          final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
-          core::bool* :is_sync = false;
-          FutureOr<core::String>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L11:
-              {
-                try {
-                  :return_value = let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-                  break #L11;
-                }
-                on core::Object catch(final core::Object _) {
-                }
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  };
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
+    try {
+      return let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
-                break #L11;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  };
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
index 5c6560a..030ca78 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -33,122 +33,20 @@
 
 static method getNull() → dynamic
   return null;
-static method getFutureNull() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = null;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method getFutureNull() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
+  return null;
 }
-static method getFutureBool() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  core::bool? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = true;
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method getFutureBool() → asy::Future<core::bool> async /* futureValueType= core::bool */ {
+  return true;
 }
-static method test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  FutureOr<core::bool>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test2() → asy::Future<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  FutureOr<core::bool>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
-        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        break #L4;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+  return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
   return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
@@ -156,250 +54,41 @@
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
-static method test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  FutureOr<core::bool>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        :return_value = self::getFutureBool();
-        break #L5;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        function test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L7:
-              {
-                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                break #L7;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test2() → asy::Future<core::bool>
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-        function test3() → core::bool
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L8:
-              {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                break #L8;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test5() → asy::Future<core::bool>
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+static method test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+  return self::getFutureBool();
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+    return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+  function test2() → asy::Future<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+    return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+  function test5() → asy::Future<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        function test6() → asy::Future<core::bool>
-          return self::getFutureBool();
-        function test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L9:
-              {
-                :return_value = self::getFutureBool();
-                break #L9;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  function test6() → asy::Future<core::bool>
+    return self::getFutureBool();
+  function test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+    return self::getFutureBool();
+  asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-          final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-          core::bool* :is_sync = false;
-          FutureOr<dynamic>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L10:
-              {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception;
-                break #L10;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+                                                   ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-          final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-          core::bool* :is_sync = false;
-          FutureOr<dynamic>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L11:
-              {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception;
-                break #L11;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+                                                         ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
-        asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L12:
-              {
-                :return_value = self::getFutureBool();
-                break #L12;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<core::bool>};
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async /* futureValueType= core::bool */ => self::getFutureBool())(){() → asy::Future<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
index 5c6560a..030ca78 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -33,122 +33,20 @@
 
 static method getNull() → dynamic
   return null;
-static method getFutureNull() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = null;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method getFutureNull() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
+  return null;
 }
-static method getFutureBool() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  core::bool? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = true;
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method getFutureBool() → asy::Future<core::bool> async /* futureValueType= core::bool */ {
+  return true;
 }
-static method test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  FutureOr<core::bool>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test2() → asy::Future<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  FutureOr<core::bool>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
-        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        break #L4;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+  return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
   return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
@@ -156,250 +54,41 @@
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
-static method test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-  final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-  core::bool* :is_sync = false;
-  FutureOr<core::bool>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        :return_value = self::getFutureBool();
-        break #L5;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        function test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L7:
-              {
-                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                break #L7;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test2() → asy::Future<core::bool>
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-        function test3() → core::bool
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L8:
-              {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                break #L8;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        function test5() → asy::Future<core::bool>
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+static method test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+  return self::getFutureBool();
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+    return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+  function test2() → asy::Future<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+    return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+  function test5() → asy::Future<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        function test6() → asy::Future<core::bool>
-          return self::getFutureBool();
-        function test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L9:
-              {
-                :return_value = self::getFutureBool();
-                break #L9;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  function test6() → asy::Future<core::bool>
+    return self::getFutureBool();
+  function test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
+    return self::getFutureBool();
+  asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-          final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-          core::bool* :is_sync = false;
-          FutureOr<dynamic>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L10:
-              {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception;
-                break #L10;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+                                                   ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-          final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-          core::bool* :is_sync = false;
-          FutureOr<dynamic>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L11:
-              {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
-                :return_value = :result_or_exception;
-                break #L11;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+                                                         ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
-        asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
-          final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
-          core::bool* :is_sync = false;
-          FutureOr<core::bool>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L12:
-              {
-                :return_value = self::getFutureBool();
-                break #L12;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<core::bool>};
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async /* futureValueType= core::bool */ => self::getFutureBool())(){() → asy::Future<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
index 815faef..0ce9817 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
@@ -39,7 +39,6 @@
 //
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 
 static method getNull() → dynamic
   return null;
@@ -142,158 +141,135 @@
   }
   return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        function test1() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        function test2() → core::Iterable<core::bool>
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-        function test3() → core::bool
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  }
+  function test2() → core::Iterable<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
     yield* getIterableNull(); // error
            ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        function test5() → core::Iterable<core::bool>
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  }
+  function test5() → core::Iterable<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> test5() => getIterableNull(); // error
                             ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        function test6() → core::Iterable<core::bool>
-          return self::getIterableBool();
-        function test7() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+  function test6() → core::Iterable<core::bool>
+    return self::getIterableBool();
+  function test7() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  }
+  core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_current} = self::getNull();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_current} = self::getNull();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        }
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableNull();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableNull();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        }
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
                                                  ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
-        core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+  core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
+  core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
-        })(){() → core::Iterable<core::bool>};
+        }
+        return false;
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
+      return :sync_op;
     }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  })(){() → core::Iterable<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
index 815faef..0ce9817 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
@@ -39,7 +39,6 @@
 //
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 
 static method getNull() → dynamic
   return null;
@@ -142,158 +141,135 @@
   }
   return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        function test1() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        function test2() → core::Iterable<core::bool>
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-        function test3() → core::bool
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  }
+  function test2() → core::Iterable<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
     yield* getIterableNull(); // error
            ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        function test5() → core::Iterable<core::bool>
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  }
+  function test5() → core::Iterable<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> test5() => getIterableNull(); // error
                             ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        function test6() → core::Iterable<core::bool>
-          return self::getIterableBool();
-        function test7() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+  function test6() → core::Iterable<core::bool>
+    return self::getIterableBool();
+  function test7() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         }
-        core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  }
+  core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_current} = self::getNull();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_current} = self::getNull();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        }
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableNull();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableNull();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+        }
+        return false;
+      }
+      return :sync_op;
+    }
+    return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
                                                  ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
-        core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
+  core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
+  core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
+            [yield] true;
           }
-          return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
-        })(){() → core::Iterable<core::bool>};
+        }
+        return false;
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
+      return :sync_op;
     }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
+  })(){() → core::Iterable<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
index c8058e6..a6f6ba7 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
@@ -40,148 +40,27 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method getNull() → dynamic
   return null;
-static method getStreamNull() → asy::Stream<dynamic> /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L1:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(null){(dynamic) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-  return :controller_stream;
+static method getStreamNull() → asy::Stream<dynamic> async* {
+  yield null;
 }
-static method getStreamBool() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L2:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(true){(core::bool) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+static method getStreamBool() → asy::Stream<core::bool> async* {
+  yield true;
 }
-static method test1() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L3:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool){(core::bool) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+static method test1() → asy::Stream<core::bool> async* {
+  yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 }
 static method test2() → asy::Stream<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L4:
-        {
-          :controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+static method test4() → asy::Stream<core::bool> async* {
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   yield* getStreamNull(); // error
-         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
 }
 static method test5() → asy::Stream<core::bool>
   return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
@@ -190,287 +69,54 @@
                         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
 static method test6() → asy::Stream<core::bool>
   return self::getStreamBool();
-static method test7() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L5:
-        {
-          :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamBool()){(asy::Stream<core::bool>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+static method test7() → asy::Stream<core::bool> async* {
+  yield* self::getStreamBool();
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        function test1() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L7:
-                {
-                  if(:controller.{asy::_AsyncStarStreamController::add}(self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool){(core::bool) → core::bool})
-                    return null;
-                  else
-                    [yield] null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        }
-        function test2() → asy::Stream<core::bool>
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-        function test3() → core::bool
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L8:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → asy::Stream<core::bool> async* {
+    yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  }
+  function test2() → asy::Stream<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → asy::Stream<core::bool> async* {
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
     yield* getStreamNull(); // error
-           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        }
-        function test5() → asy::Stream<core::bool>
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  }
+  function test5() → asy::Stream<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> test5() => getStreamNull(); // error
                           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        function test6() → asy::Stream<core::bool>
-          return self::getStreamBool();
-        function test7() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L9:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamBool()){(asy::Stream<core::bool>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        }
-        asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  function test6() → asy::Stream<core::bool>
+    return self::getStreamBool();
+  function test7() → asy::Stream<core::bool> async* {
+    yield* self::getStreamBool();
+  }
+  asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
-    ^" in (() → asy::Stream<dynamic> /* originally async* */ {
-          asy::_AsyncStarStreamController<dynamic>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L10:
-                {
-                  if(:controller.{asy::_AsyncStarStreamController::add}(self::getNull()){(dynamic) → core::bool})
-                    return null;
-                  else
-                    [yield] null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-          return :controller_stream;
-        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+    ^" in (() → asy::Stream<dynamic> async* {
+    yield self::getNull();
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
-    ^" in (() → asy::Stream<dynamic> /* originally async* */ {
-          asy::_AsyncStarStreamController<dynamic>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L11:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamNull()){(asy::Stream<dynamic>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-          return :controller_stream;
-        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+    ^" in (() → asy::Stream<dynamic> async* {
+    yield* self::getStreamNull();
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
                                              ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
-        asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L12:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamBool()){(asy::Stream<core::bool>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        })(){() → asy::Stream<core::bool>};
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
+  asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> async* {
+    yield* self::getStreamBool();
+  })(){() → asy::Stream<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
index c8058e6..a6f6ba7 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
@@ -40,148 +40,27 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method getNull() → dynamic
   return null;
-static method getStreamNull() → asy::Stream<dynamic> /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L1:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(null){(dynamic) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-  return :controller_stream;
+static method getStreamNull() → asy::Stream<dynamic> async* {
+  yield null;
 }
-static method getStreamBool() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L2:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(true){(core::bool) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+static method getStreamBool() → asy::Stream<core::bool> async* {
+  yield true;
 }
-static method test1() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L3:
-        {
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool){(core::bool) → core::bool})
-            return null;
-          else
-            [yield] null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+static method test1() → asy::Stream<core::bool> async* {
+  yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 }
 static method test2() → asy::Stream<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L4:
-        {
-          :controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+static method test4() → asy::Stream<core::bool> async* {
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   yield* getStreamNull(); // error
-         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
 }
 static method test5() → asy::Stream<core::bool>
   return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
@@ -190,287 +69,54 @@
                         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
 static method test6() → asy::Stream<core::bool>
   return self::getStreamBool();
-static method test7() → asy::Stream<core::bool> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::bool>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L5:
-        {
-          :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamBool()){(asy::Stream<core::bool>) → void};
-          [yield] null;
-          if(_in::unsafeCast<core::bool>(:result_or_exception))
-            return null;
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-  return :controller_stream;
+static method test7() → asy::Stream<core::bool> async* {
+  yield* self::getStreamBool();
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        function test1() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L7:
-                {
-                  if(:controller.{asy::_AsyncStarStreamController::add}(self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool){(core::bool) → core::bool})
-                    return null;
-                  else
-                    [yield] null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        }
-        function test2() → asy::Stream<core::bool>
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-        function test3() → core::bool
-          return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L8:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → asy::Stream<core::bool> async* {
+    yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  }
+  function test2() → asy::Stream<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → asy::Stream<core::bool> async* {
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
     yield* getStreamNull(); // error
-           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>){(asy::Stream<core::bool>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        }
-        function test5() → asy::Stream<core::bool>
-          return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  }
+  function test5() → asy::Stream<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> test5() => getStreamNull(); // error
                           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        function test6() → asy::Stream<core::bool>
-          return self::getStreamBool();
-        function test7() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L9:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamBool()){(asy::Stream<core::bool>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        }
-        asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+  function test6() → asy::Stream<core::bool>
+    return self::getStreamBool();
+  function test7() → asy::Stream<core::bool> async* {
+    yield* self::getStreamBool();
+  }
+  asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
-    ^" in (() → asy::Stream<dynamic> /* originally async* */ {
-          asy::_AsyncStarStreamController<dynamic>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L10:
-                {
-                  if(:controller.{asy::_AsyncStarStreamController::add}(self::getNull()){(dynamic) → core::bool})
-                    return null;
-                  else
-                    [yield] null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-          return :controller_stream;
-        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+    ^" in (() → asy::Stream<dynamic> async* {
+    yield self::getNull();
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
-    ^" in (() → asy::Stream<dynamic> /* originally async* */ {
-          asy::_AsyncStarStreamController<dynamic>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L11:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamNull()){(asy::Stream<dynamic>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-          return :controller_stream;
-        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+    ^" in (() → asy::Stream<dynamic> async* {
+    yield* self::getStreamNull();
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
                                              ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
-        asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> /* originally async* */ {
-          asy::_AsyncStarStreamController<core::bool>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L12:
-                {
-                  :controller.{asy::_AsyncStarStreamController::addStream}(self::getStreamBool()){(asy::Stream<core::bool>) → void};
-                  [yield] null;
-                  if(_in::unsafeCast<core::bool>(:result_or_exception))
-                    return null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
-          return :controller_stream;
-        })(){() → asy::Stream<core::bool>};
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
+  asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> async* {
+    yield* self::getStreamBool();
+  })(){() → asy::Stream<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
index 756e88b..bab6d364 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
@@ -12,113 +12,14 @@
 //
 import self as self;
 import "dart:async" as asy;
-import "dart:core" as core;
-import "dart:_internal" as _in;
 
-static method returnFutureOfVoid() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method returnFutureOfVoid() → asy::Future<void> async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  await self::returnVoid();
+  await self::returnVoidAsync();
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await self::returnFutureOfVoid();
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
index 756e88b..bab6d364 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
@@ -12,113 +12,14 @@
 //
 import self as self;
 import "dart:async" as asy;
-import "dart:core" as core;
-import "dart:_internal" as _in;
 
-static method returnFutureOfVoid() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method returnFutureOfVoid() → asy::Future<void> async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  await self::returnVoid();
+  await self::returnVoidAsync();
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await self::returnFutureOfVoid();
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index 271e82e..6b5ec79 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -17,7 +17,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -34,34 +33,8 @@
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
     return s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
-    final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-    core::bool* :is_sync = false;
-    core::num? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::num>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
+    return (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test2(self::C<core::num?> c) → dynamic {
@@ -70,36 +43,10 @@
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
-    final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-    core::bool* :is_sync = false;
-    FutureOr<core::num>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
-          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in _in::unsafeCast<core::num?>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+                     ^" in (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index 271e82e..6b5ec79 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -17,7 +17,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -34,34 +33,8 @@
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
     return s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
-    final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-    core::bool* :is_sync = false;
-    core::num? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
-          :return_value = _in::unsafeCast<core::num>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
+    return (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test2(self::C<core::num?> c) → dynamic {
@@ -70,36 +43,10 @@
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
-    final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-    core::bool* :is_sync = false;
-    FutureOr<core::num>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
-          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in _in::unsafeCast<core::num?>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
-          break #L2;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+                     ^" in (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
index e9c16e6..5ff4605 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
@@ -5,35 +5,8 @@
 
 static method getNull() → dynamic
   return null;
-static method fn() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  FutureOr<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-        core::Object o = let dynamic #t2 = :result_or_exception in #t2 == null ?{core::Object} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t2{core::Object};
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-        :return_value = let dynamic #t4 = :result_or_exception in #t4 == null ?{FutureOr<core::Object>} #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t4{FutureOr<core::Object>};
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method fn() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
+  core::Object o = let dynamic #t1 = await self::getNull() in #t1 == null ?{core::Object} #t1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t1{core::Object};
+  return let dynamic #t2 = await self::getNull() in #t2 == null ?{FutureOr<core::Object>} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t2{FutureOr<core::Object>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
index 717c3ef..81c92d4 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
@@ -5,35 +5,8 @@
 
 static method getNull() → dynamic
   return null;
-static method fn() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
-  final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
-  core::bool* :is_sync = false;
-  FutureOr<core::Object>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-        core::Object o = :result_or_exception;
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
-        :return_value = :result_or_exception;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method fn() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
+  core::Object o = await self::getNull();
+  return await self::getNull();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
index 229b2a9..8c665cc 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
@@ -37,65 +37,16 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ /* originally async */ {
-          final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
-          core::bool* :is_sync = false;
-          FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
-                break #L2;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>)(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
index 229b2a9..8c665cc 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
@@ -37,65 +37,16 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
-static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ /* originally async */ {
-          final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
-          core::bool* :is_sync = false;
-          FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                :return_value = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
-                break #L2;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>)(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
index 057b001..8bf045e 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -1,64 +1,16 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
+import "dart:async" as asy;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::bool b = (() → core::bool => true)(){() → core::bool};
-        (dynamic _) → core::int? {
-          if(b)
-            return 42;
-        };
-        (dynamic _) → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-          final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-          core::bool* :is_sync = false;
-          core::int? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                if(b) {
-                  :return_value = 42;
-                  break #L2;
-                }
-              }
-              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::bool b = (() → core::bool => true)(){() → core::bool};
+  (dynamic _) → core::int? {
+    if(b)
+      return 42;
+  };
+  (dynamic _) → asy::Future<core::int?> async /* futureValueType= core::int? */ {
+    if(b)
+      return 42;
+  };
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
index 057b001..8bf045e 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
@@ -1,64 +1,16 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
+import "dart:async" as asy;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::bool b = (() → core::bool => true)(){() → core::bool};
-        (dynamic _) → core::int? {
-          if(b)
-            return 42;
-        };
-        (dynamic _) → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-          final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-          core::bool* :is_sync = false;
-          core::int? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                if(b) {
-                  :return_value = 42;
-                  break #L2;
-                }
-              }
-              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        };
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::bool b = (() → core::bool => true)(){() → core::bool};
+  (dynamic _) → core::int? {
+    if(b)
+      return 42;
+  };
+  (dynamic _) → asy::Future<core::int?> async /* futureValueType= core::int? */ {
+    if(b)
+      return 42;
+  };
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
index 65142ef..8429111 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
@@ -1,7 +1,6 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 
 import "dart:async";
 
@@ -12,37 +11,14 @@
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
-        FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
-          self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
-        } =>#t1;
-        FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
-          self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
-        } =>#t2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
+  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
+    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
+  } =>#t1;
+  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
+    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
+  } =>#t2;
 }
 static method _extension#0|checkStaticType<T extends core::Object? = dynamic, R extends (self::_extension#0|checkStaticType::T%) → self::_extension#0|checkStaticType::T% = (dynamic) → dynamic>(lowered final self::_extension#0|checkStaticType::T% #this) → void {}
 static method _extension#0|get#checkStaticType<T extends core::Object? = dynamic>(lowered final self::_extension#0|get#checkStaticType::T% #this) → <R extends (self::_extension#0|get#checkStaticType::T%) → self::_extension#0|get#checkStaticType::T% = (dynamic) → dynamic>() → void
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
index 65142ef..8429111 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
@@ -1,7 +1,6 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
 
 import "dart:async";
 
@@ -12,37 +11,14 @@
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
-        FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
-          self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
-        } =>#t1;
-        FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
-          self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
-        } =>#t2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
+  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
+    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
+  } =>#t1;
+  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
+    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
+  } =>#t2;
 }
 static method _extension#0|checkStaticType<T extends core::Object? = dynamic, R extends (self::_extension#0|checkStaticType::T%) → self::_extension#0|checkStaticType::T% = (dynamic) → dynamic>(lowered final self::_extension#0|checkStaticType::T% #this) → void {}
 static method _extension#0|get#checkStaticType<T extends core::Object? = dynamic>(lowered final self::_extension#0|get#checkStaticType::T% #this) → <R extends (self::_extension#0|get#checkStaticType::T%) → self::_extension#0|get#checkStaticType::T% = (dynamic) → dynamic>() → void
diff --git a/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect
index c6295ee..e54e3bd 100644
--- a/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect
@@ -1,34 +1,8 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 
-static method foo(dynamic y) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper((<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?}, :async_op_then, :async_op_error) in null;
-        dynamic a = :result_or_exception;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method foo(dynamic y) → dynamic async /* futureValueType= dynamic */ {
+  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect
index c6295ee..e54e3bd 100644
--- a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect
@@ -1,34 +1,8 @@
 library /*isNonNullableByDefault*/;
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 
-static method foo(dynamic y) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper((<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?}, :async_op_then, :async_op_error) in null;
-        dynamic a = :result_or_exception;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method foo(dynamic y) → dynamic async /* futureValueType= dynamic */ {
+  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index f0900fa..ca8810e 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -65,7 +65,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 class A extends core::Object {
   field core::int a = 42;
@@ -123,125 +122,37 @@
       #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
 }
-static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
+  {
+    asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
+    asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
+    try
+      while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
         {
-          asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
-          asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
-                {
-                  core::print(s);
-                }
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          core::print(s);
         }
-        :return_value = "hest";
-        break #L1;
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  return "hest";
 }
-static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        function #s1#initializer() → core::String
-          return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
+  function #s1#initializer() → core::String
+    return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
                    ^^^^^";
-        late core::String s1 = #s1#initializer(){() → core::String};
-        function #s2#initializer() → core::String
-          return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
+  late core::String s1 = #s1#initializer(){() → core::String};
+  function #s2#initializer() → core::String
+    return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
-        late core::String s2 = #s2#initializer(){() → core::String};
-        function #f#initializer() → core::Function
-          return () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-            final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-            core::bool* :is_sync = false;
-            FutureOr<dynamic>? :return_value;
-            (dynamic) → dynamic :async_op_then;
-            (core::Object, core::StackTrace) → dynamic :async_op_error;
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            dynamic :saved_try_context_var0;
-            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-              try {
-                #L4:
-                {
-                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
-                  :return_value = :result_or_exception;
-                  break #L4;
-                }
-                asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-              }
-            :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-            :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(null, null){() → dynamic};
-            :is_sync = true;
-            return :async_future;
-          };
-        late core::Function f = #f#initializer(){() → core::Function};
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  late core::String s2 = #s2#initializer(){() → core::String};
+  function #f#initializer() → core::Function
+    return () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
+  late core::Function f = #f#initializer(){() → core::Function};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index f0900fa..ca8810e 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -65,7 +65,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 class A extends core::Object {
   field core::int a = 42;
@@ -123,125 +122,37 @@
       #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
 }
-static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
+  {
+    asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
+    asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
+    try
+      while (let dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
         {
-          asy::Stream<core::String> :stream = asy::Stream::fromIterable<core::String>(core::_GrowableList::_literal1<core::String>("hest"));
-          asy::_StreamIterator<core::String>? :for-iterator = new asy::_StreamIterator::•<core::String>(:stream);
-          try
-            #L2:
-            while (true) {
-              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
-                {
-                  core::print(s);
-                }
-              }
-              else
-                break #L2;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
+          core::print(s);
         }
-        :return_value = "hest";
-        break #L1;
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  return "hest";
 }
-static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        function #s1#initializer() → core::String
-          return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
+  function #s1#initializer() → core::String
+    return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
                    ^^^^^";
-        late core::String s1 = #s1#initializer(){() → core::String};
-        function #s2#initializer() → core::String
-          return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
+  late core::String s1 = #s1#initializer(){() → core::String};
+  function #s2#initializer() → core::String
+    return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
-        late core::String s2 = #s2#initializer(){() → core::String};
-        function #f#initializer() → core::Function
-          return () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-            final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-            core::bool* :is_sync = false;
-            FutureOr<dynamic>? :return_value;
-            (dynamic) → dynamic :async_op_then;
-            (core::Object, core::StackTrace) → dynamic :async_op_error;
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            dynamic :saved_try_context_var0;
-            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-              try {
-                #L4:
-                {
-                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
-                  :return_value = :result_or_exception;
-                  break #L4;
-                }
-                asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-              }
-            :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-            :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(null, null){() → dynamic};
-            :is_sync = true;
-            return :async_future;
-          };
-        late core::Function f = #f#initializer(){() → core::Function};
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  late core::String s2 = #s2#initializer(){() → core::String};
+  function #f#initializer() → core::Function
+    return () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
+  late core::Function f = #f#initializer(){() → core::Function};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
index 53360c1..efe6e98 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
@@ -2,159 +2,32 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
 static method throwSync() → asy::Future<void> {
   throw "";
 }
-static method allYield() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method allYield() → asy::Future<void> async /* futureValueType= void */ {
+  await 0;
+  await self::allYield2();
 }
-static method allYield2() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method allYield2() → asy::Future<void> async /* futureValueType= void */ {
+  await 0;
+  await self::allYield3();
 }
-static method allYield3() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        self::throwSync();
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method allYield3() → asy::Future<void> async /* futureValueType= void */ {
+  await 0;
+  self::throwSync();
 }
-static method customErrorZone() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        final asy::Completer<void> completer = asy::Completer::•<void>();
-        asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
-          final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
-          core::bool* :is_sync = false;
-          Null :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L5:
-              {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error) in null;
-                _in::unsafeCast<void>(:result_or_exception);
-                completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
-              }
-              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }, (core::Object e, core::StackTrace s) → void {
-          completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
-        });
-        :return_value = completer.{asy::Completer::future}{asy::Future<void>};
-        break #L4;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method customErrorZone() → asy::Future<void> async /* futureValueType= void */ {
+  final asy::Completer<void> completer = asy::Completer::•<void>();
+  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async /* futureValueType= Null */ {
+    await self::allYield();
+    completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
+  }, (core::Object e, core::StackTrace s) → void {
+    completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
+  });
+  return completer.{asy::Completer::future}{asy::Future<void>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
index 53360c1..efe6e98 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
@@ -2,159 +2,32 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
 static method throwSync() → asy::Future<void> {
   throw "";
 }
-static method allYield() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method allYield() → asy::Future<void> async /* futureValueType= void */ {
+  await 0;
+  await self::allYield2();
 }
-static method allYield2() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method allYield2() → asy::Future<void> async /* futureValueType= void */ {
+  await 0;
+  await self::allYield3();
 }
-static method allYield3() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        self::throwSync();
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method allYield3() → asy::Future<void> async /* futureValueType= void */ {
+  await 0;
+  self::throwSync();
 }
-static method customErrorZone() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        final asy::Completer<void> completer = asy::Completer::•<void>();
-        asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
-          final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
-          core::bool* :is_sync = false;
-          Null :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L5:
-              {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error) in null;
-                _in::unsafeCast<void>(:result_or_exception);
-                completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
-              }
-              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }, (core::Object e, core::StackTrace s) → void {
-          completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
-        });
-        :return_value = completer.{asy::Completer::future}{asy::Future<void>};
-        break #L4;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method customErrorZone() → asy::Future<void> async /* futureValueType= void */ {
+  final asy::Completer<void> completer = asy::Completer::•<void>();
+  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async /* futureValueType= Null */ {
+    await self::allYield();
+    completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
+  }, (core::Object e, core::StackTrace s) → void {
+    completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
+  });
+  return completer.{asy::Completer::future}{asy::Future<void>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index d1fe484..cc1f3a8 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -91,182 +91,19 @@
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
-static method returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+static method returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
 }
-static method returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-  final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-  core::bool* :is_sync = false;
-  core::int? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+static method returnAsync5() → dynamic async /* futureValueType= dynamic */ {}
+static method returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
+  return null;
 }
-static method returnAsync5() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-  final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int?>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        :return_value = null;
-        break #L6;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-  final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-  core::bool* :is_sync = false;
-  core::int? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L7:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
 static method yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
   function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
     core::int :await_jump_var = 0;
@@ -279,40 +116,15 @@
   }
   return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
 }
-static method yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L8:
-        {}
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-  return :controller_stream;
-}
+static method yieldAsync() → asy::Stream<dynamic> async* {}
 static method caseReturn1(self::Enum e) → self::Enum {
   switch(e) {
-    #L9:
+    #L1:
     case #C3:
       {
         return e;
       }
-    #L10:
+    #L2:
     case #C6:
       {
         return e;
@@ -321,12 +133,12 @@
 }
 static method caseReturn2(self::Enum e) → self::Enum {
   switch(e) {
-    #L11:
+    #L3:
     case #C3:
       {
         return e;
       }
-    #L12:
+    #L4:
     default:
       {}
   }
@@ -359,182 +171,19 @@
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
-  function returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L13:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L14:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L15:
-        {
-          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  function returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
-          break #L15;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
   }
-  function returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-    final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L16:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  function returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+  function returnAsync5() → asy::Future<Null> async /* futureValueType= Null */ {}
+  function returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
+    return null;
   }
-  function returnAsync5() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
-    final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
-    core::bool* :is_sync = false;
-    Null :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L17:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-    final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int?>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L18:
-        {
-          :return_value = null;
-          break #L18;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-    final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L19:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  function returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
   function yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
     function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
       core::int :await_jump_var = 0;
@@ -547,40 +196,15 @@
     }
     return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
   }
-  function yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
-    asy::_AsyncStarStreamController<dynamic>? :controller;
-    dynamic :controller_stream;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try
-        try {
-          #L20:
-          {}
-          return;
-        }
-        on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-          :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-        }
-      finally {
-        :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-    return :controller_stream;
-  }
+  function yieldAsync() → asy::Stream<dynamic> async* {}
   function caseReturn1(self::Enum e) → self::Enum {
     switch(e) {
-      #L21:
+      #L5:
       case #C3:
         {
           return e;
         }
-      #L22:
+      #L6:
       case #C6:
         {
           return e;
@@ -589,12 +213,12 @@
   }
   function caseReturn2(self::Enum e) → self::Enum {
     switch(e) {
-      #L23:
+      #L7:
       case #C3:
         {
           return e;
         }
-      #L24:
+      #L8:
       default:
         {}
     }
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 1017e98..8108220 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -92,182 +92,19 @@
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
-static method returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+static method returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
-        break #L3;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
 }
-static method returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-  final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-  core::bool* :is_sync = false;
-  core::int? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+static method returnAsync5() → dynamic async /* futureValueType= dynamic */ {}
+static method returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
+  return null;
 }
-static method returnAsync5() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-  final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int?>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        :return_value = null;
-        break #L6;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-  final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-  core::bool* :is_sync = false;
-  core::int? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L7:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
 static method yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
   function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
     core::int :await_jump_var = 0;
@@ -280,57 +117,32 @@
   }
   return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
 }
-static method yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L8:
-        {}
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-  return :controller_stream;
-}
+static method yieldAsync() → asy::Stream<dynamic> async* {}
 static method caseReturn1(self::Enum e) → self::Enum {
   switch(e) {
-    #L9:
+    #L1:
     case #C3:
       {
         return e;
       }
-    #L10:
+    #L2:
     case #C6:
       {
         return e;
       }
-    #L11:
+    #L3:
     default:
       throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
   }
 }
 static method caseReturn2(self::Enum e) → self::Enum {
   switch(e) {
-    #L12:
+    #L4:
     case #C3:
       {
         return e;
       }
-    #L13:
+    #L5:
     default:
       {}
   }
@@ -363,182 +175,19 @@
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
-  function returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L14:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L15:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L16:
-        {
-          :return_value = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  function returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
-          break #L16;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
   }
-  function returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-    final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L17:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  function returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+  function returnAsync5() → asy::Future<Null> async /* futureValueType= Null */ {}
+  function returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
+    return null;
   }
-  function returnAsync5() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
-    final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
-    core::bool* :is_sync = false;
-    Null :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L18:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-    final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int?>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L19:
-        {
-          :return_value = null;
-          break #L19;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
-  function returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
-    final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L20:
-        {}
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+  function returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
   function yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
     function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
       core::int :await_jump_var = 0;
@@ -551,57 +200,32 @@
     }
     return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
   }
-  function yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
-    asy::_AsyncStarStreamController<dynamic>? :controller;
-    dynamic :controller_stream;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try
-        try {
-          #L21:
-          {}
-          return;
-        }
-        on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-          :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-        }
-      finally {
-        :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-    return :controller_stream;
-  }
+  function yieldAsync() → asy::Stream<dynamic> async* {}
   function caseReturn1(self::Enum e) → self::Enum {
     switch(e) {
-      #L22:
+      #L6:
       case #C3:
         {
           return e;
         }
-      #L23:
+      #L7:
       case #C6:
         {
           return e;
         }
-      #L24:
+      #L8:
       default:
         throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
     }
   }
   function caseReturn2(self::Enum e) → self::Enum {
     switch(e) {
-      #L25:
+      #L9:
       case #C3:
         {
           return e;
         }
-      #L26:
+      #L10:
       default:
         {}
     }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
index 5dcce49..6608d90 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
@@ -1,87 +1,12 @@
 library;
 import self as self;
 import "dart:async" as asy;
-import "dart:core" as core;
-import "dart:_internal" as _in;
 
-static method returnFutureOfVoid() → asy::Future<void>* /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
+static method returnFutureOfVoid() → asy::Future<void>* async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {}
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<void>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await self::returnVoid();
+  await self::returnFutureOfVoid();
+  await self::returnVoidAsync();
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
index 05711ed..f52e2c9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
@@ -7,33 +7,7 @@
 import "org-dartlang-testcase:///typedef_from_opt_in_lib.dart";
 
 static method method1() → (typ::Request*) →* FutureOr<typ::Response*>*
-  return (typ::Request* r) → asy::Future<typ::Response*>* /* futureValueType= typ::Response* */ /* originally async */ {
-    final asy::_Future<typ::Response*>* :async_future = new asy::_Future::•<typ::Response*>();
-    core::bool* :is_sync = false;
-    typ::Response? :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = new typ::Response::•();
-          break #L1;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
-    :is_sync = true;
-    return :async_future;
-  };
+  return (typ::Request* r) → asy::Future<typ::Response*>* async /* futureValueType= typ::Response* */ => new typ::Response::•();
 static method method2() → (core::int*) →* core::int*
   return (core::int* r) → core::int* => 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
index 88fac78..eff3876 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
@@ -44,95 +44,18 @@
 //
 import self as self;
 import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 static method f1() → invalid-type {
   return null;
 }
 static method Future<List extends core::Object? = dynamic>() → invalid-type {}
-static method f2() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        :return_value = null;
-        break #L1;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method f2() → dynamic async /* futureValueType= dynamic */ 
+  return null;
+static method f3() → invalid-type async /* futureValueType= invalid-type */ {
+  return null;
 }
-static method f3() → invalid-type /* futureValueType= invalid-type */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = null;
-        break #L2;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        core::print(self::f1());
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::f2(), :async_op_then, :async_op_error) in null;
-        core::print(:result_or_exception);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error) in null;
-        core::print(_in::unsafeCast<invalid-type>(:result_or_exception));
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::print(self::f1());
+  core::print(await self::f2());
+  core::print(await self::f3());
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
index 3e8045c..e18b48b 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
@@ -15,147 +15,55 @@
 //       ^^^^^^^^^^^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
+import "dart:async" as asy;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        function f_async() → core::int /* futureValueType= core::Object? */ /* originally async */ {
-          final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-          core::bool* :is_sync = false;
-          dynamic :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try {
-              #L2:
-              {
-                :return_value = 42;
-                break #L2;
-              }
-              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(null, null){() → dynamic};
-          :is_sync = true;
-          return :async_future;
-        }
-        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() → core::int}, :async_op_then, :async_op_error) in null;
-        core::print(_in::unsafeCast<core::int>(:result_or_exception));
-        function f_async_star() → core::int /* originally async* */ {
-          asy::_AsyncStarStreamController<dynamic>? :controller;
-          dynamic :controller_stream;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-            try
-              try {
-                #L3:
-                {
-                  if(:controller.{asy::_AsyncStarStreamController::add}(42){(dynamic) → core::bool})
-                    return null;
-                  else
-                    [yield] null;
-                }
-                return;
-              }
-              on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-                :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-              }
-            finally {
-              :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
-          :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
-          return :controller_stream;
-        }
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  function f_async() → core::int async /* futureValueType= core::Object? */ {
+    return 42;
+  }
+  core::print(await f_async(){() → core::int});
+  function f_async_star() → core::int async* {
+    yield 42;
+  }
+  {
+    asy::Stream<dynamic> :stream = (f_async_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
+    asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+    try
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
         {
-          asy::Stream<dynamic> :stream = (f_async_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
-          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
-          try
-            #L4:
-            while (true) {
-              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
-                {
-                  core::print(x);
-                }
-              }
-              else
-                break #L4;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        function f_sync_star() → core::int /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
-            core::int :await_jump_var = 0;
-            dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
-              {
-                {
-                  :iterator.{core::_SyncIterator::_current} = 42;
-                  [yield] true;
-                }
-              }
-              return false;
-            }
-            return :sync_op;
-          }
-          return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        }
-        {
-          core::Iterator<dynamic> :sync-for-iterator = ((f_sync_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
-            {
-              core::print(x);
-            }
-          }
+          core::print(x);
         }
       }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  function f_sync_star() → core::int /* originally sync* */ {
+    function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+      core::int :await_jump_var = 0;
+      dynamic :await_ctx_var;
+      function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+        {
+          {
+            :iterator.{core::_SyncIterator::_current} = 42;
+            [yield] true;
+          }
+        }
+        return false;
+      }
+      return :sync_op;
     }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
+  }
+  {
+    core::Iterator<dynamic> :sync-for-iterator = ((f_sync_star(){() → core::int} as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic x = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      {
+        core::print(x);
+      }
     }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  }
 }
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
index 4e4dd22..ae2ecfb 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
@@ -45,252 +45,92 @@
 //                                                 ^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 import "dart:collection" as col;
-import "dart:_internal" as _in;
+import "dart:async" as asy;
 
 import "dart:async" show FutureOr;
 import "dart:collection" show LinkedHashMap, LinkedHashSet;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::Map<core::int*, core::bool*>* m = <core::int*, core::bool*>{};
-        core::Set<core::int*>* s = block {
-          final core::Set<core::int*>* #t1 = new col::_CompactLinkedHashSet::•<core::int*>();
-        } =>#t1;
-        core::Iterable<core::int*>* i = block {
-          final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
-        } =>#t2;
-        col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::Map<core::int*, core::bool*>* m = <core::int*, core::bool*>{};
+  core::Set<core::int*>* s = block {
+    final core::Set<core::int*>* #t1 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t1;
+  core::Iterable<core::int*>* i = block {
+    final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t2;
+  col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:15:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
   LinkedHashSet<int> lhs = {};
                            ^" in block {
-          final core::Set<dynamic>* #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
-        } =>#t3;
-        col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+    final core::Set<dynamic>* #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t3;
+  col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:16:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Change the type of the map literal or the context in which it is used.
   LinkedHashMap<int, bool> lhm = {};
                                  ^" in <dynamic, dynamic>{};
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error) in null;
-        core::Map<core::int*, core::bool*>* fm = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result_or_exception);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error) in null;
-        core::Set<core::int*>* fs = _in::unsafeCast<core::Set<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error) in null;
-        core::Iterable<core::int*>* fi = _in::unsafeCast<core::Iterable<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashSet<core::int*>* flhs = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashMap<core::int*, core::bool*>* flhm = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result_or_exception);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error) in null;
-        core::Map<core::int*, core::bool*>* fm2 = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result_or_exception);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error) in null;
-        core::Set<core::int*>* fs2 = _in::unsafeCast<core::Set<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error) in null;
-        core::Iterable<core::int*>* fi2 = _in::unsafeCast<core::Iterable<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashSet<core::int*>* flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result_or_exception);
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashMap<core::int*, core::bool*>* flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
+  core::Map<core::int*, core::bool*>* fm = await self::mapfun();
+  core::Set<core::int*>* fs = await self::setfun();
+  core::Iterable<core::int*>* fi = await self::iterablefun();
+  col::LinkedHashSet<core::int*>* flhs = await self::lhsfun();
+  col::LinkedHashMap<core::int*, core::bool*>* flhm = await self::lhmfun();
+  core::Map<core::int*, core::bool*>* fm2 = await self::mapfun2();
+  core::Set<core::int*>* fs2 = await self::setfun2();
+  core::Iterable<core::int*>* fi2 = await self::iterablefun2();
+  col::LinkedHashSet<core::int*>* flhs2 = await self::lhsfun2();
+  col::LinkedHashMap<core::int*, core::bool*>* flhm2 = await self::lhmfun2();
 }
-static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* /* futureValueType= core::Map<core::int*, core::bool*>* */ /* originally async */ {
-  final asy::_Future<core::Map<core::int*, core::bool*>*>* :async_future = new asy::_Future::•<core::Map<core::int*, core::bool*>*>();
-  core::bool* :is_sync = false;
-  core::Map<core::int*, core::bool*>? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = <core::int*, core::bool*>{};
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method setfun() → asy::Future<core::Set<core::int*>*>* /* futureValueType= core::Set<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::Set<core::int*>*>* :async_future = new asy::_Future::•<core::Set<core::int*>*>();
-  core::bool* :is_sync = false;
-  core::Set<core::int*>? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = block {
-          final core::Set<core::int*>* #t14 = new col::_CompactLinkedHashSet::•<core::int*>();
-        } =>#t14;
-        break #L3;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* /* futureValueType= core::Iterable<core::int*>* */ /* originally async */ {
-  final asy::_Future<core::Iterable<core::int*>*>* :async_future = new asy::_Future::•<core::Iterable<core::int*>*>();
-  core::bool* :is_sync = false;
-  core::Iterable<core::int*>? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        :return_value = block {
-          final core::Set<core::int*>* #t15 = new col::_CompactLinkedHashSet::•<core::int*>();
-        } =>#t15;
-        break #L4;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* /* futureValueType= col::LinkedHashSet<core::int*>* */ /* originally async */ {
-  final asy::_Future<col::LinkedHashSet<core::int*>*>* :async_future = new asy::_Future::•<col::LinkedHashSet<core::int*>*>();
-  core::bool* :is_sync = false;
-  FutureOr<col::LinkedHashSet<core::int*>*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* async /* futureValueType= core::Map<core::int*, core::bool*>* */ 
+  return <core::int*, core::bool*>{};
+static method setfun() → asy::Future<core::Set<core::int*>*>* async /* futureValueType= core::Set<core::int*>* */ 
+  return block {
+    final core::Set<core::int*>* #t4 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t4;
+static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* async /* futureValueType= core::Iterable<core::int*>* */ 
+  return block {
+    final core::Set<core::int*>* #t5 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t5;
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async /* futureValueType= col::LinkedHashSet<core::int*>* */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:34:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Change the type of the set literal or the context in which it is used.
 Future<LinkedHashSet<int>> lhsfun() async => {};
                                              ^" in block {
-          final core::Set<dynamic>* #t16 = new col::_CompactLinkedHashSet::•<dynamic>();
-        } =>#t16;
-        break #L5;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* /* futureValueType= col::LinkedHashMap<core::int*, core::bool*>* */ /* originally async */ {
-  final asy::_Future<col::LinkedHashMap<core::int*, core::bool*>*>* :async_future = new asy::_Future::•<col::LinkedHashMap<core::int*, core::bool*>*>();
-  core::bool* :is_sync = false;
-  FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+    final core::Set<dynamic>* #t6 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t6;
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async /* futureValueType= col::LinkedHashMap<core::int*, core::bool*>* */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:35:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Change the type of the map literal or the context in which it is used.
 Future<LinkedHashMap<int, bool>> lhmfun() async => {};
                                                    ^" in <dynamic, dynamic>{};
-        break #L6;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
-  :is_sync = true;
-  return :async_future;
-}
 static method mapfun2() → FutureOr<core::Map<core::int*, core::bool*>*>*
   return <core::int*, core::bool*>{};
 static method setfun2() → FutureOr<core::Set<core::int*>*>*
   return block {
-    final core::Set<core::int*>* #t17 = new col::_CompactLinkedHashSet::•<core::int*>();
-  } =>#t17;
+    final core::Set<core::int*>* #t7 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t7;
 static method iterablefun2() → FutureOr<core::Iterable<core::int*>*>*
   return block {
-    final core::Set<core::int*>* #t18 = new col::_CompactLinkedHashSet::•<core::int*>();
-  } =>#t18;
+    final core::Set<core::int*>* #t8 = new col::_CompactLinkedHashSet::•<core::int*>();
+  } =>#t8;
 static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int*>*>*
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:40:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 FutureOr<LinkedHashSet<int>> lhsfun2() => {};
                                           ^" in ( block {
-    final core::Set<dynamic>* #t19 = new col::_CompactLinkedHashSet::•<dynamic>();
-  } =>#t19) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
+    final core::Set<dynamic>* #t9 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t9) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
 static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:41:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.transformed.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.transformed.expect
index 621dcc5..2fa022c 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule2.dart.weak.transformed.expect
@@ -41,248 +41,88 @@
 //                                                 ^
 //
 import self as self;
-import "dart:async" as asy;
 import "dart:core" as core;
 import "dart:collection" as col;
-import "dart:_internal" as _in;
+import "dart:async" as asy;
 
 import "dart:async" show FutureOr;
 import "dart:collection" show LinkedHashMap, LinkedHashSet;
 
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        core::Map<core::int, core::bool> m = <core::int, core::bool>{};
-        core::Set<core::int> s = block {
-          final core::Set<core::int> #t1 = new col::_CompactLinkedHashSet::•<core::int>();
-        } =>#t1;
-        core::Iterable<core::int> i = block {
-          final core::Set<core::int> #t2 = new col::_CompactLinkedHashSet::•<core::int>();
-        } =>#t2;
-        col::LinkedHashSet<core::int> lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  core::Map<core::int, core::bool> m = <core::int, core::bool>{};
+  core::Set<core::int> s = block {
+    final core::Set<core::int> #t1 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t1;
+  core::Iterable<core::int> i = block {
+    final core::Set<core::int> #t2 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t2;
+  col::LinkedHashSet<core::int> lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:13:28: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'LinkedHashSet<int>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
   LinkedHashSet<int> lhs = {};
                            ^" in ( block {
-          final core::Set<dynamic> #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
-        } =>#t3) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
-        col::LinkedHashMap<core::int, core::bool> lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
+    final core::Set<dynamic> #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+  col::LinkedHashMap<core::int, core::bool> lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:14:34: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'LinkedHashMap<int, bool>'.
  - 'Map' is from 'dart:core'.
  - 'LinkedHashMap' is from 'dart:collection'.
   LinkedHashMap<int, bool> lhm = {};
                                  ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error) in null;
-        core::Map<core::int, core::bool> fm = _in::unsafeCast<core::Map<core::int, core::bool>>(:result_or_exception);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error) in null;
-        core::Set<core::int> fs = _in::unsafeCast<core::Set<core::int>>(:result_or_exception);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error) in null;
-        core::Iterable<core::int> fi = _in::unsafeCast<core::Iterable<core::int>>(:result_or_exception);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashSet<core::int> flhs = _in::unsafeCast<col::LinkedHashSet<core::int>>(:result_or_exception);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashMap<core::int, core::bool> flhm = _in::unsafeCast<col::LinkedHashMap<core::int, core::bool>>(:result_or_exception);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error) in null;
-        core::Map<core::int, core::bool> fm2 = _in::unsafeCast<core::Map<core::int, core::bool>>(:result_or_exception);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error) in null;
-        core::Set<core::int> fs2 = _in::unsafeCast<core::Set<core::int>>(:result_or_exception);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error) in null;
-        core::Iterable<core::int> fi2 = _in::unsafeCast<core::Iterable<core::int>>(:result_or_exception);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashSet<core::int> flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int>>(:result_or_exception);
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error) in null;
-        col::LinkedHashMap<core::int, core::bool> flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int, core::bool>>(:result_or_exception);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  core::Map<core::int, core::bool> fm = await self::mapfun();
+  core::Set<core::int> fs = await self::setfun();
+  core::Iterable<core::int> fi = await self::iterablefun();
+  col::LinkedHashSet<core::int> flhs = await self::lhsfun();
+  col::LinkedHashMap<core::int, core::bool> flhm = await self::lhmfun();
+  core::Map<core::int, core::bool> fm2 = await self::mapfun2();
+  core::Set<core::int> fs2 = await self::setfun2();
+  core::Iterable<core::int> fi2 = await self::iterablefun2();
+  col::LinkedHashSet<core::int> flhs2 = await self::lhsfun2();
+  col::LinkedHashMap<core::int, core::bool> flhm2 = await self::lhmfun2();
 }
-static method mapfun() → asy::Future<core::Map<core::int, core::bool>> /* futureValueType= core::Map<core::int, core::bool> */ /* originally async */ {
-  final asy::_Future<core::Map<core::int, core::bool>> :async_future = new asy::_Future::•<core::Map<core::int, core::bool>>();
-  core::bool* :is_sync = false;
-  core::Map<core::int, core::bool>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = <core::int, core::bool>{};
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method setfun() → asy::Future<core::Set<core::int>> /* futureValueType= core::Set<core::int> */ /* originally async */ {
-  final asy::_Future<core::Set<core::int>> :async_future = new asy::_Future::•<core::Set<core::int>>();
-  core::bool* :is_sync = false;
-  core::Set<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = block {
-          final core::Set<core::int> #t14 = new col::_CompactLinkedHashSet::•<core::int>();
-        } =>#t14;
-        break #L3;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method iterablefun() → asy::Future<core::Iterable<core::int>> /* futureValueType= core::Iterable<core::int> */ /* originally async */ {
-  final asy::_Future<core::Iterable<core::int>> :async_future = new asy::_Future::•<core::Iterable<core::int>>();
-  core::bool* :is_sync = false;
-  core::Iterable<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        :return_value = block {
-          final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
-        } =>#t15;
-        break #L4;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method lhsfun() → asy::Future<col::LinkedHashSet<core::int>> /* futureValueType= col::LinkedHashSet<core::int> */ /* originally async */ {
-  final asy::_Future<col::LinkedHashSet<core::int>> :async_future = new asy::_Future::•<col::LinkedHashSet<core::int>>();
-  core::bool* :is_sync = false;
-  FutureOr<col::LinkedHashSet<core::int>>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
+static method mapfun() → asy::Future<core::Map<core::int, core::bool>> async /* futureValueType= core::Map<core::int, core::bool> */ 
+  return <core::int, core::bool>{};
+static method setfun() → asy::Future<core::Set<core::int>> async /* futureValueType= core::Set<core::int> */ 
+  return block {
+    final core::Set<core::int> #t4 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t4;
+static method iterablefun() → asy::Future<core::Iterable<core::int>> async /* futureValueType= core::Iterable<core::int> */ 
+  return block {
+    final core::Set<core::int> #t5 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t5;
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int>> async /* futureValueType= col::LinkedHashSet<core::int> */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:32:46: Error: A value of type 'Set<dynamic>' can't be returned from an async function with return type 'Future<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
  - 'LinkedHashSet' is from 'dart:collection'.
 Future<LinkedHashSet<int>> lhsfun() async => {};
                                              ^" in ( block {
-          final core::Set<dynamic> #t16 = new col::_CompactLinkedHashSet::•<dynamic>();
-        } =>#t16) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
-        break #L5;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method lhmfun() → asy::Future<col::LinkedHashMap<core::int, core::bool>> /* futureValueType= col::LinkedHashMap<core::int, core::bool> */ /* originally async */ {
-  final asy::_Future<col::LinkedHashMap<core::int, core::bool>> :async_future = new asy::_Future::•<col::LinkedHashMap<core::int, core::bool>>();
-  core::bool* :is_sync = false;
-  FutureOr<col::LinkedHashMap<core::int, core::bool>>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L6:
-      {
-        :return_value = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
+    final core::Set<dynamic> #t6 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t6) as{TypeError,ForNonNullableByDefault} col::LinkedHashSet<core::int>;
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int, core::bool>> async /* futureValueType= col::LinkedHashMap<core::int, core::bool> */ 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:33:52: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from an async function with return type 'Future<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
  - 'LinkedHashMap' is from 'dart:collection'.
 Future<LinkedHashMap<int, bool>> lhmfun() async => {};
                                                    ^" in <dynamic, dynamic>{} as{TypeError,ForNonNullableByDefault} col::LinkedHashMap<core::int, core::bool>;
-        break #L6;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
 static method mapfun2() → FutureOr<core::Map<core::int, core::bool>>
   return <core::int, core::bool>{};
 static method setfun2() → FutureOr<core::Set<core::int>>
   return block {
-    final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
-  } =>#t17;
+    final core::Set<core::int> #t7 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t7;
 static method iterablefun2() → FutureOr<core::Iterable<core::int>>
   return block {
-    final core::Set<core::int> #t18 = new col::_CompactLinkedHashSet::•<core::int>();
-  } =>#t18;
+    final core::Set<core::int> #t8 = new col::_CompactLinkedHashSet::•<core::int>();
+  } =>#t8;
 static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int>>
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:38:43: Error: A value of type 'Set<dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashSet<int>>'.
  - 'Set' is from 'dart:core'.
  - 'LinkedHashSet' is from 'dart:collection'.
 FutureOr<LinkedHashSet<int>> lhsfun2() => {};
                                           ^" in ( block {
-    final core::Set<dynamic> #t19 = new col::_CompactLinkedHashSet::•<dynamic>();
-  } =>#t19) as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashSet<core::int>>;
+    final core::Set<dynamic> #t9 = new col::_CompactLinkedHashSet::•<dynamic>();
+  } =>#t9) as{TypeError,ForNonNullableByDefault} FutureOr<col::LinkedHashSet<core::int>>;
 static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int, core::bool>>
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule2.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'FutureOr<LinkedHashMap<int, bool>>'.
  - 'Map' is from 'dart:core'.
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index b2489b6..8bd5bbb 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -58,7 +58,7 @@
           'supported when --aot and --minimal-kernel are not used.',
       defaultsTo: null)
   ..addFlag('compact-async',
-      help: 'Enable new compact async/await implementation.', defaultsTo: null)
+      help: 'Enable new compact async/await implementation.', defaultsTo: true)
   ..addFlag('tfa',
       help:
           'Enable global type flow analysis and related transformations in AOT mode.',
@@ -541,7 +541,7 @@
       nullSafety: compilerOptions.nnbdMode == NnbdMode.Strong,
       supportMirrors: options['support-mirrors'] ??
           !(options['aot'] || options['minimal-kernel']),
-      compactAsync: options['compact-async'] ?? options['aot'],
+      compactAsync: options['compact-async'],
     );
     if (compilerOptions.target == null) {
       print('Failed to create front-end target ${options['target']}.');
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 90f85e8..707efa0 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -22,7 +22,7 @@
       {this.trackWidgetCreation = false,
       this.enableNullSafety = false,
       this.supportMirrors = true,
-      this.compactAsync = false});
+      this.compactAsync = true});
 
   @override
   bool operator ==(other) {
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 22c471fb..03ffe27 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -81,7 +81,7 @@
           'supported when --aot and --minimal-kernel are not used.',
       defaultsTo: null);
   args.addFlag('compact-async',
-      help: 'Enable new compact async/await implementation.', defaultsTo: null);
+      help: 'Enable new compact async/await implementation.', defaultsTo: true);
   args.addOption('depfile', help: 'Path to output Ninja depfile');
   args.addOption('from-dill',
       help: 'Read existing dill file instead of compiling from sources',
@@ -202,7 +202,7 @@
   final String? manifestFilename = options['manifest'];
   final String? dataDir = options['component-name'] ?? options['data-dir'];
   final bool? supportMirrors = options['support-mirrors'];
-  final bool compactAsync = options['compact-async'] ?? aot;
+  final bool compactAsync = options['compact-async'];
 
   final bool minimalKernel = options['minimal-kernel'];
   final bool treeShakeWriteOnlyFields = options['tree-shake-write-only-fields'];
@@ -617,7 +617,7 @@
     {bool trackWidgetCreation = false,
     bool nullSafety = false,
     bool supportMirrors = true,
-    bool compactAsync = false}) {
+    bool compactAsync = true}) {
   // Make sure VM-specific targets are available.
   installAdditionalTargets();
 
diff --git a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
index ec6468f..e0c0bdd 100644
--- a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
+++ b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
@@ -45,62 +45,16 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/a.dart" as a;
 
-  static method j() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          dart.core::print("J");
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method j() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("J");
   }
 }
 library h from "#pkg/vm/testcases/transformations/deferred_loading/h.dart" as h {
 
   import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" as g;
 
-  static method h() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          dart.core::print("H");
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method h() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("H");
   }
 }
 library i from "#pkg/vm/testcases/transformations/deferred_loading/i.dart" as i {
@@ -108,67 +62,18 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/j.dart" deferred as j;
   import "#pkg/vm/testcases/transformations/deferred_loading/b.dart" as b;
 
-  static method i() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L3:
-        {
-          dart.core::print("I");
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(LoadLibrary(j), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          :return_value = let final dynamic #t2 = CheckLibraryIsLoaded(j) in j::j();
-          break #L3;
-        }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method i() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("I");
+    await LoadLibrary(j);
+    return let final dynamic #t1 = CheckLibraryIsLoaded(j) in j::j();
   }
 }
 library g from "#pkg/vm/testcases/transformations/deferred_loading/g.dart" as g {
 
   import "#pkg/vm/testcases/transformations/deferred_loading/h.dart" as h;
 
-  static method g() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L4:
-        {
-          dart.core::print("G");
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method g() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("G");
   }
 }
 library f from "#pkg/vm/testcases/transformations/deferred_loading/f.dart" as f {
@@ -176,76 +81,22 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" deferred as g;
   import "#pkg/vm/testcases/transformations/deferred_loading/i.dart" deferred as i;
 
-  static method f() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L5:
-        {
-          dart.core::print("F");
-          [yield] let dynamic #t3 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          :return_value = let final dynamic #t4 = CheckLibraryIsLoaded(g) in g::g();
-          break #L5;
-          [yield] let dynamic #t5 = dart.async::_awaitHelper(LoadLibrary(i), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          :return_value = let final dynamic #t6 = CheckLibraryIsLoaded(i) in i::i();
-          break #L5;
-        }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method f() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("F");
+    await LoadLibrary(g);
+    return let final dynamic #t2 = CheckLibraryIsLoaded(g) in g::g();
+    await LoadLibrary(i);
+    return let final dynamic #t3 = CheckLibraryIsLoaded(i) in i::i();
   }
 }
 library e from "#pkg/vm/testcases/transformations/deferred_loading/e.dart" as e {
 
   import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" deferred as g;
 
-  static method e() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L6:
-        {
-          dart.core::print("E");
-          [yield] let dynamic #t7 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          :return_value = let final dynamic #t8 = CheckLibraryIsLoaded(g) in g::g();
-          break #L6;
-        }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method e() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("E");
+    await LoadLibrary(g);
+    return let final dynamic #t4 = CheckLibraryIsLoaded(g) in g::g();
   }
 }
 library c from "#pkg/vm/testcases/transformations/deferred_loading/c.dart" as c {
@@ -253,138 +104,38 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/b.dart" as b;
   import "#pkg/vm/testcases/transformations/deferred_loading/f.dart" deferred as f;
 
-  static method c() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L7:
-        {
-          dart.core::print("C");
-          [yield] let dynamic #t9 = dart.async::_awaitHelper(LoadLibrary(f), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          :return_value = let final dynamic #t10 = CheckLibraryIsLoaded(f) in f::f();
-          break #L7;
-        }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method c() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("C");
+    await LoadLibrary(f);
+    return let final dynamic #t5 = CheckLibraryIsLoaded(f) in f::f();
   }
 }
 library d from "#pkg/vm/testcases/transformations/deferred_loading/d.dart" as d {
 
   import "#pkg/vm/testcases/transformations/deferred_loading/e.dart" as e;
 
-  static method d() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L8:
-        {
-          dart.core::print("D");
-          :return_value = e::e();
-          break #L8;
-        }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method d() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("D");
+    return e::e();
   }
 }
 library b from "#pkg/vm/testcases/transformations/deferred_loading/b.dart" as b {
 
   import "#pkg/vm/testcases/transformations/deferred_loading/c.dart" as c;
 
-  static method b() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L9:
-        {
-          dart.core::print("B");
-          :return_value = c::c();
-          break #L9;
-        }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method b() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("B");
+    return c::c();
   }
 }
 library a from "#pkg/vm/testcases/transformations/deferred_loading/a.dart" as a {
 
   import "#pkg/vm/testcases/transformations/deferred_loading/d.dart" deferred as d;
 
-  static method a() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L10:
-        {
-          dart.core::print("A");
-          [yield] let dynamic #t11 = dart.async::_awaitHelper(LoadLibrary(d), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          :return_value = let final dynamic #t12 = CheckLibraryIsLoaded(d) in d::d();
-          break #L10;
-        }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method a() → dynamic async /* futureValueType= dynamic */ {
+    dart.core::print("A");
+    await LoadLibrary(d);
+    return let final dynamic #t6 = CheckLibraryIsLoaded(d) in d::d();
   }
 }
 library #lib from "#lib" as #lib {
@@ -392,34 +143,8 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/a.dart";
   import "#pkg/vm/testcases/transformations/deferred_loading/b.dart";
 
-  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-    final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
-    dart.core::bool* :is_sync = false;
-    dynamic :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
-    dart.core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L11:
-        {
-          [yield] let dynamic #t13 = dart.async::_awaitHelper(a::a(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-          [yield] let dynamic #t14 = dart.async::_awaitHelper(b::b(), :async_op_then, :async_op_error) in null;
-          :result_or_exception;
-        }
-        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
-        dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  static method main() → dynamic async /* futureValueType= dynamic */ {
+    await a::a();
+    await b::b();
   }
 }
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
index 2adb29e..2039db0 100644
--- a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
@@ -11,70 +11,20 @@
   synthetic constructor •() → self::MyFinalizable
     : super core::Object::•()
     ;
-  method use() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = block {
-            final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
-            _in::reachabilityFence(this);
-          } =>:expressionValueWrappedFinalizable;
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  method use() → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return block {
+      final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
   }
-  method use2() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    core::int? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L2:
-        {
-          [yield] let dynamic #t1 = asy::_awaitHelper( block {
-            final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
-            _in::reachabilityFence(this);
-          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
-          final core::int :expressionValueWrappedFinalizable = _in::unsafeCast<core::int>(:result_or_exception);
-          :return_value = block {
-            _in::reachabilityFence(this);
-          } =>:expressionValueWrappedFinalizable;
-          break #L2;
-        }
-        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
+  method use2() → asy::Future<core::int> async /* futureValueType= core::int */ {
+    return block {
+      final core::int :expressionValueWrappedFinalizable = await block {
+        final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
+        _in::reachabilityFence(this);
+      } =>:expressionValueWrappedFinalizable;
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
   }
   method use3() → asy::Future<core::int> {
     return block {
@@ -83,117 +33,39 @@
     } =>:expressionValueWrappedFinalizable;
   }
 }
-static method doSomething() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  core::int? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :return_value = 3;
-        break #L3;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method doSomething() → asy::Future<core::int> async /* futureValueType= core::int */ 
+  return 3;
+static method useFinalizableAsync(ffi::Finalizable finalizable) → asy::Future<core::int> async /* futureValueType= core::int */ {
+  await block {
+    final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 6);
+    _in::reachabilityFence(finalizable);
+  } =>:expressionValueWrappedFinalizable;
+  final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
+  await block {
+    final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 5);
+    _in::reachabilityFence(finalizable);
+    _in::reachabilityFence(finalizable2);
+  } =>:expressionValueWrappedFinalizable;
+  final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
+  await block {
+    final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 4);
+    _in::reachabilityFence(finalizable);
+    _in::reachabilityFence(finalizable2);
+    _in::reachabilityFence(finalizable3);
+  } =>:expressionValueWrappedFinalizable;
+  return block {
+    final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
+    _in::reachabilityFence(finalizable);
+    _in::reachabilityFence(finalizable2);
+    _in::reachabilityFence(finalizable3);
+  } =>:expressionValueWrappedFinalizable;
 }
-static method useFinalizableAsync(ffi::Finalizable finalizable) → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L4:
-      {
-        [yield] let dynamic #t2 = asy::_awaitHelper( block {
-          final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 6);
-          _in::reachabilityFence(finalizable);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
-        [yield] let dynamic #t3 = asy::_awaitHelper( block {
-          final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 5);
-          _in::reachabilityFence(finalizable);
-          _in::reachabilityFence(finalizable2);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
-        [yield] let dynamic #t4 = asy::_awaitHelper( block {
-          final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 4);
-          _in::reachabilityFence(finalizable);
-          _in::reachabilityFence(finalizable2);
-          _in::reachabilityFence(finalizable3);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
-        _in::unsafeCast<core::int>(:result_or_exception);
-        :return_value = block {
-          final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
-          _in::reachabilityFence(finalizable);
-          _in::reachabilityFence(finalizable2);
-          _in::reachabilityFence(finalizable3);
-        } =>:expressionValueWrappedFinalizable;
-        break #L4;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L5:
-      {
-        final self::MyFinalizable finalizable = new self::MyFinalizable::•();
-        final asy::Future<core::int> asyncResult = self::useFinalizableAsync(finalizable);
-        [yield] let dynamic #t5 = asy::_awaitHelper( block {
-          final asy::Future<core::int> :expressionValueWrappedFinalizable = asyncResult;
-          _in::reachabilityFence(finalizable);
-        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
-        core::print(_in::unsafeCast<core::int>(:result_or_exception));
-        _in::reachabilityFence(finalizable);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main() → void async /* futureValueType= void */ {
+  final self::MyFinalizable finalizable = new self::MyFinalizable::•();
+  final asy::Future<core::int> asyncResult = self::useFinalizableAsync(finalizable);
+  core::print(await block {
+    final asy::Future<core::int> :expressionValueWrappedFinalizable = asyncResult;
+    _in::reachabilityFence(finalizable);
+  } =>:expressionValueWrappedFinalizable);
+  _in::reachabilityFence(finalizable);
 }
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
index 74e5fe6..e3d7376 100644
--- a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
@@ -14,128 +14,58 @@
 }
 static method doSomething() → core::int
   return 3;
-static method useFinalizableAsyncStar(ffi::Finalizable finalizable) → asy::Stream<core::int> /* originally async* */ {
-  asy::_AsyncStarStreamController<core::int>? :controller;
-  dynamic :controller_stream;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try
-      try {
-        #L1:
-        {
-          final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
-          if([@vm.call-site-attributes.metadata=receiverType:dart.async::_AsyncStarStreamController<dart.core::int>?] :controller.{asy::_AsyncStarStreamController::add}( block {
-            final core::int :expressionValueWrappedFinalizable = self::doSomething();
-            _in::reachabilityFence(finalizable);
-            _in::reachabilityFence(finalizable2);
-          } =>:expressionValueWrappedFinalizable){(core::int) → core::bool})
-            return null;
-          else
-            [yield] null;
-          final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
-          [yield] let dynamic #t1 = asy::_awaitHelper( block {
-            final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 3);
-            _in::reachabilityFence(finalizable);
-            _in::reachabilityFence(finalizable2);
-            _in::reachabilityFence(finalizable3);
-          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
-          _in::unsafeCast<core::int>(:result_or_exception);
-          final self::MyFinalizable finalizable4 = new self::MyFinalizable::•();
-          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 4) {
-            {
-              _in::reachabilityFence(finalizable);
-              _in::reachabilityFence(finalizable2);
-              _in::reachabilityFence(finalizable3);
-              _in::reachabilityFence(finalizable4);
-              break #L1;
-            }
-          }
-          if([@vm.call-site-attributes.metadata=receiverType:dart.async::_AsyncStarStreamController<dart.core::int>?] :controller.{asy::_AsyncStarStreamController::add}( block {
-            final core::int :expressionValueWrappedFinalizable = 5;
-            _in::reachabilityFence(finalizable);
-            _in::reachabilityFence(finalizable2);
-            _in::reachabilityFence(finalizable3);
-            _in::reachabilityFence(finalizable4);
-          } =>:expressionValueWrappedFinalizable){(core::int) → core::bool})
-            return null;
-          else
-            [yield] null;
-          _in::reachabilityFence(finalizable2);
-          _in::reachabilityFence(finalizable3);
-          _in::reachabilityFence(finalizable4);
-          _in::reachabilityFence(finalizable);
-        }
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
-      }
-    finally {
-      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
-  return :controller_stream;
-}
-static method main() → void /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        final self::MyFinalizable finalizable = new self::MyFinalizable::•();
-        final asy::Stream<core::int> asyncStarResult = self::useFinalizableAsyncStar(finalizable);
-        {
-          asy::Stream<core::int> :stream = asyncStarResult;
-          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
-          try
-            #L3:
-            while (true) {
-              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
-              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                final core::int element = :for-iterator.{asy::_StreamIterator::current}{core::int};
-                {
-                  core::print(element);
-                }
-              }
-              else
-                break #L3;
-            }
-          finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
-              :result_or_exception;
-            }
-        }
-        _in::reachabilityFence(finalizable);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+static method useFinalizableAsyncStar(ffi::Finalizable finalizable) → asy::Stream<core::int> async* {
+  final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
+  yield block {
+    final core::int :expressionValueWrappedFinalizable = self::doSomething();
+    _in::reachabilityFence(finalizable);
+    _in::reachabilityFence(finalizable2);
+  } =>:expressionValueWrappedFinalizable;
+  final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
+  await block {
+    final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 3);
+    _in::reachabilityFence(finalizable);
+    _in::reachabilityFence(finalizable2);
+    _in::reachabilityFence(finalizable3);
+  } =>:expressionValueWrappedFinalizable;
+  final self::MyFinalizable finalizable4 = new self::MyFinalizable::•();
+  if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 4) {
+    {
+      _in::reachabilityFence(finalizable);
+      _in::reachabilityFence(finalizable2);
+      _in::reachabilityFence(finalizable3);
+      _in::reachabilityFence(finalizable4);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+  }
+  yield block {
+    final core::int :expressionValueWrappedFinalizable = 5;
+    _in::reachabilityFence(finalizable);
+    _in::reachabilityFence(finalizable2);
+    _in::reachabilityFence(finalizable3);
+    _in::reachabilityFence(finalizable4);
+  } =>:expressionValueWrappedFinalizable;
+  _in::reachabilityFence(finalizable2);
+  _in::reachabilityFence(finalizable3);
+  _in::reachabilityFence(finalizable4);
+  _in::reachabilityFence(finalizable);
+}
+static method main() → void async /* futureValueType= void */ {
+  final self::MyFinalizable finalizable = new self::MyFinalizable::•();
+  final asy::Stream<core::int> asyncStarResult = self::useFinalizableAsyncStar(finalizable);
+  {
+    asy::Stream<core::int> :stream = asyncStarResult;
+    asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+    try
+      while (let dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream) in await :for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}) {
+        final core::int element = :for-iterator.{asy::_StreamIterator::current}{core::int};
+        {
+          core::print(element);
+        }
+      }
+    finally
+      if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null))
+        await :for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>};
+  }
+  _in::reachabilityFence(finalizable);
 }
diff --git a/pkg/vm/testcases/transformations/ffi/regress_49075.dart.expect b/pkg/vm/testcases/transformations/ffi/regress_49075.dart.expect
index 2974867..fb88d53 100644
--- a/pkg/vm/testcases/transformations/ffi/regress_49075.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/regress_49075.dart.expect
@@ -14,32 +14,7 @@
     _in::reachabilityFence(this);
   }
 }
-static method main(core::List<core::String> arguments) → asy::Future<void> /* futureValueType= void */ /* originally async */ {
-  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
-  core::bool* :is_sync = false;
-  void :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L1:
-      {
-        [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFinalizable::•(), :async_op_then, :async_op_error) in null;
-        final self::MyFinalizable myFinalizable = _in::unsafeCast<self::MyFinalizable>(:result_or_exception);
-        _in::reachabilityFence(myFinalizable);
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method main(core::List<core::String> arguments) → asy::Future<void> async /* futureValueType= void */ {
+  final self::MyFinalizable myFinalizable = await new self::MyFinalizable::•();
+  _in::reachabilityFence(myFinalizable);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
index 0d6b3b9..da9a9a2 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
@@ -7,33 +7,8 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method bar(dynamic x) → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-    core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-      try {
-        #L1:
-        {
-          :return_value = [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::print(x);
-          break #L1;
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() → dynamic};
-    :is_sync = true;
-    return :async_future;
-  }
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method bar(dynamic x) → asy::Future<dynamic> async /* futureValueType= dynamic */ 
+    return core::print(x);
 }
 class B extends core::Object {
   synthetic constructor •() → self::B
@@ -42,61 +17,8 @@
 }
 static method foo() → dynamic
   return new self::A::•();
-static method baz() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L2:
-      {
-        :return_value = new self::B::•();
-        break #L2;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  dynamic :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :async_temporary_0;
-  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
-    try {
-      #L3:
-      {
-        :async_temporary_0 = [@vm.inferred-type.metadata=#lib::A] self::foo();
-        [yield] let dynamic #t1 = asy::_awaitHelper([@vm.inferred-type.metadata=dart.async::_Future<dynamic>] self::baz(), :async_op_then, :async_op_error) in null;
-        [yield] let dynamic #t2 = asy::_awaitHelper([@vm.direct-call.metadata=#lib::A.bar??] [@vm.inferred-type.metadata=dart.async::_Future<dynamic> (receiver not int)] :async_temporary_0{dynamic}.bar(:result_or_exception), :async_op_then, :async_op_error) in null;
-        :result_or_exception;
-      }
-      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() → dynamic};
-  :is_sync = true;
-  return :async_future;
+static method baz() → asy::Future<dynamic> async /* futureValueType= dynamic */ 
+  return new self::B::•();
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await [@vm.direct-call.metadata=#lib::A.bar] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::A] self::foo(){dynamic}.bar(await self::baz());
 }
diff --git a/pkg/vm_service/test/async_single_step_exception_test.dart b/pkg/vm_service/test/async_single_step_exception_test.dart
index 2e06ba7..3a093de 100644
--- a/pkg/vm_service/test/async_single_step_exception_test.dart
+++ b/pkg/vm_service/test/async_single_step_exception_test.dart
@@ -54,10 +54,6 @@
   smartNext,
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(22), // } (weird dispatching)
-  smartNext,
-
-  hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_D), // await helper (weird dispatching)
   smartNext,
 
diff --git a/pkg/vm_service/test/async_single_step_out_test.dart b/pkg/vm_service/test/async_single_step_out_test.dart
index 1db5d67..71f9517 100644
--- a/pkg/vm_service/test/async_single_step_out_test.dart
+++ b/pkg/vm_service/test/async_single_step_out_test.dart
@@ -44,14 +44,10 @@
   stepInto, // exit helper via a single step.
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(20), // return null (weird dispatching)
-  stepInto, // exit helper via a single step.
-
-  hasStoppedAtBreakpoint,
-  stoppedAtLine(25), // await helper (weird dispatching)
+  stoppedAtLine(LINE_D), // await helper
   smartNext,
 
-  hasStoppedAtBreakpoint, //19
+  hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_E), // arrive after the await.
   resumeIsolate
 ];
diff --git a/pkg/vm_service/test/async_star_single_step_into_test.dart b/pkg/vm_service/test/async_star_single_step_into_test.dart
index bf5c964..be3eba7 100644
--- a/pkg/vm_service/test/async_star_single_step_into_test.dart
+++ b/pkg/vm_service/test/async_star_single_step_into_test.dart
@@ -8,12 +8,13 @@
 import 'common/service_test_common.dart';
 import 'common/test_helper.dart';
 
-const LINE_A = 19;
-const LINE_B = 20;
-const LINE_C = 24;
-const LINE_D = 28;
-const LINE_E = 34;
-const LINE_F = 35;
+const LINE_A = 20;
+const LINE_B = 21;
+const LINE_C = 25;
+const LINE_D = 29;
+const LINE_E = 35;
+const LINE_F = 36;
+const LINE_G = 27;
 
 foobar() async* {
   yield 1; // LINE_A.
@@ -23,7 +24,7 @@
 helper() async {
   print('helper'); // LINE_C.
   // ignore: unused_local_variable
-  await for (var i in foobar()) {
+  await for (var i in foobar()) /* LINE_G. */ {
     debugger();
     print('loop'); // LINE_D.
   }
@@ -50,6 +51,11 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G), // foobar()
+  stepInto,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G), // await for
   stepInto,
 
   hasStoppedAtBreakpoint,
@@ -63,6 +69,7 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G),
   stepInto,
 
   hasStoppedAtBreakpoint,
diff --git a/pkg/vm_service/test/async_star_step_out_test.dart b/pkg/vm_service/test/async_star_step_out_test.dart
index 14a05f9..41d387f 100644
--- a/pkg/vm_service/test/async_star_step_out_test.dart
+++ b/pkg/vm_service/test/async_star_step_out_test.dart
@@ -54,6 +54,11 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_H), // foobar().
+  stepInto,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_H), // await for.
   stepInto,
 
   hasStoppedAtBreakpoint,
diff --git a/pkg/vm_service/test/awaiter_async_stack_contents_2_test.dart b/pkg/vm_service/test/awaiter_async_stack_contents_2_test.dart
index 88d17d0a..5cd7443 100644
--- a/pkg/vm_service/test/awaiter_async_stack_contents_2_test.dart
+++ b/pkg/vm_service/test/awaiter_async_stack_contents_2_test.dart
@@ -49,9 +49,9 @@
     List<Frame> awaiterFrames = stack.awaiterFrames!;
     expect(awaiterFrames.length, greaterThanOrEqualTo(2));
     // Awaiter frame.
-    expect(awaiterFrames[0].function!.owner.name, 'foobar');
+    expect(awaiterFrames[0].function!.name, 'foobar');
     // Awaiter frame.
-    expect(awaiterFrames[1].function!.owner.name, 'helper');
+    expect(awaiterFrames[1].function!.name, 'helper');
   },
 ];
 
diff --git a/pkg/vm_service/test/awaiter_async_stack_contents_test.dart b/pkg/vm_service/test/awaiter_async_stack_contents_test.dart
index 0fea350..ac8ab8c 100644
--- a/pkg/vm_service/test/awaiter_async_stack_contents_test.dart
+++ b/pkg/vm_service/test/awaiter_async_stack_contents_test.dart
@@ -56,9 +56,9 @@
 
     expect(awaiterFrames.length, greaterThanOrEqualTo(2));
     // Awaiter frame.
-    expect(await awaiterFrames[0].function!.owner.name, 'foobar');
+    expect(await awaiterFrames[0].function!.name, 'foobar');
     // Awaiter frame.
-    expect(await awaiterFrames[1].function!.owner.name, 'helper');
+    expect(await awaiterFrames[1].function!.name, 'helper');
     // "helper" is not await'ed.
   },
 ];
diff --git a/pkg/vm_service/test/causal_async_stack_contents_test.dart b/pkg/vm_service/test/causal_async_stack_contents_test.dart
index b634f10..b28ece5 100644
--- a/pkg/vm_service/test/causal_async_stack_contents_test.dart
+++ b/pkg/vm_service/test/causal_async_stack_contents_test.dart
@@ -48,7 +48,7 @@
     // Has causal frames (we are inside an async function)
     expect(stack.asyncCausalFrames, isNotNull);
     expect(
-      stack.asyncCausalFrames![0].function!.owner.name,
+      stack.asyncCausalFrames![0].function!.name,
       contains('helper'),
     );
     // "helper" is not await'ed.
@@ -62,7 +62,7 @@
     expect(stack.asyncCausalFrames, isNotNull);
     final asyncStack = stack.asyncCausalFrames!;
     expect(asyncStack[0].function!.name, contains('foobar'));
-    expect(asyncStack[1].function!.owner.name, contains('helper'));
+    expect(asyncStack[1].function!.name, contains('helper'));
     // "helper" is not await'ed.
   },
 ];
diff --git a/pkg/vm_service/test/causal_async_star_stack_contents_test.dart b/pkg/vm_service/test/causal_async_star_stack_contents_test.dart
index 4795850..80f0a2d 100644
--- a/pkg/vm_service/test/causal_async_star_stack_contents_test.dart
+++ b/pkg/vm_service/test/causal_async_star_stack_contents_test.dart
@@ -45,7 +45,7 @@
     expect(stack.asyncCausalFrames, isNotNull);
     final asyncStack = stack.asyncCausalFrames!;
     expect(asyncStack.length, greaterThanOrEqualTo(1));
-    expect(asyncStack[0].function!.owner.name, contains('helper'));
+    expect(asyncStack[0].function!.name, contains('helper'));
     // helper isn't awaited.
   },
   resumeIsolate,
@@ -57,9 +57,9 @@
     expect(stack.asyncCausalFrames, isNotNull);
     final asyncStack = stack.asyncCausalFrames!;
     expect(asyncStack.length, greaterThanOrEqualTo(3));
-    expect(asyncStack[0].function!.owner.name, contains('foobar'));
+    expect(asyncStack[0].function!.name, contains('foobar'));
     expect(asyncStack[1].kind, equals(FrameKind.kAsyncSuspensionMarker));
-    expect(asyncStack[2].function!.owner.name, contains('helper'));
+    expect(asyncStack[2].function!.name, contains('helper'));
     expect(asyncStack[3].kind, equals(FrameKind.kAsyncSuspensionMarker));
   },
   resumeIsolate,
@@ -73,13 +73,13 @@
     expect(asyncStack.length, greaterThanOrEqualTo(4));
     final script = await service.getObject(
         isolateRef.id!, asyncStack[0].location!.script!.id!) as Script;
-    expect(asyncStack[0].function!.owner.name, contains('foobar'));
+    expect(asyncStack[0].function!.name, contains('foobar'));
     expect(
       script.getLineNumberFromTokenPos(asyncStack[0].location!.tokenPos!),
       LINE_C,
     );
     expect(asyncStack[1].kind, equals(FrameKind.kAsyncSuspensionMarker));
-    expect(asyncStack[2].function!.owner.name, contains('helper'));
+    expect(asyncStack[2].function!.name, contains('helper'));
     expect(
       script.getLineNumberFromTokenPos(asyncStack[2].location!.tokenPos!),
       30,
diff --git a/pkg/vm_service/test/coverage_const_field_async_closure_test.dart b/pkg/vm_service/test/coverage_const_field_async_closure_test.dart
index 8a7430d..8bdb959 100644
--- a/pkg/vm_service/test/coverage_const_field_async_closure_test.dart
+++ b/pkg/vm_service/test/coverage_const_field_async_closure_test.dart
@@ -41,7 +41,7 @@
     // Make sure we are in the right place.
     expect(stack.frames!.length, greaterThanOrEqualTo(1));
     // Async closure of testFunction
-    expect(stack.frames![0].function!.name, 'async_op');
+    expect(stack.frames![0].function!.name, 'testFunction');
 
     final rootLib =
         await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
diff --git a/pkg/vm_service/test/rpc_error_test.dart b/pkg/vm_service/test/rpc_error_test.dart
index 87e8776..67330c2 100644
--- a/pkg/vm_service/test/rpc_error_test.dart
+++ b/pkg/vm_service/test/rpc_error_test.dart
@@ -17,9 +17,9 @@
       // Ensure stack trace contains actual invocation path.
       final stack = st.toString().split('\n');
       expect(stack.where((e) => e.contains('VmService.callMethod')).length, 1);
-      // Call to vm.callMethod('foo') and the invocation of the test closure.
+      // Call to vm.callMethod('foo').
       expect(
-          stack.where((e) => e.contains('test/rpc_error_test.dart')).length, 2);
+          stack.where((e) => e.contains('test/rpc_error_test.dart')).length, 1);
     } catch (e) {
       fail('Expected RPCError, got $e');
     }
diff --git a/pkg/vm_service/test/throws_sentinel_test.dart b/pkg/vm_service/test/throws_sentinel_test.dart
index b9242b3..bf52549 100644
--- a/pkg/vm_service/test/throws_sentinel_test.dart
+++ b/pkg/vm_service/test/throws_sentinel_test.dart
@@ -16,10 +16,10 @@
       // Ensure stack trace contains actual invocation path.
       final stack = st.toString().split('\n');
       expect(stack.where((e) => e.contains('VmService.getIsolate')).length, 1);
-      // Call to vm.getIsolate('isolates/12321') and the invocation of the test closure.
+      // Call to vm.getIsolate('isolates/12321').
       expect(
         stack.where((e) => e.contains('test/throws_sentinel_test.dart')).length,
-        2,
+        1,
       );
     } catch (e) {
       fail('Expected SentinelException, got $e');
diff --git a/runtime/observatory/tests/service/async_single_step_exception_test.dart b/runtime/observatory/tests/service/async_single_step_exception_test.dart
index 0fdc183..544ba6f 100644
--- a/runtime/observatory/tests/service/async_single_step_exception_test.dart
+++ b/runtime/observatory/tests/service/async_single_step_exception_test.dart
@@ -55,10 +55,6 @@
   smartNext,
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(23), // } (weird dispatching)
-  smartNext,
-
-  hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_D), // await helper (weird dispatching)
   smartNext,
 
diff --git a/runtime/observatory/tests/service/async_single_step_out_test.dart b/runtime/observatory/tests/service/async_single_step_out_test.dart
index cfeac6c..e93c274 100644
--- a/runtime/observatory/tests/service/async_single_step_out_test.dart
+++ b/runtime/observatory/tests/service/async_single_step_out_test.dart
@@ -44,11 +44,7 @@
   stepInto, // exit helper via a single step.
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(20), // return null (weird dispatching)
-  stepInto, // exit helper via a single step.
-
-  hasStoppedAtBreakpoint,
-  stoppedAtLine(25), // await helper (weird dispatching)
+  stoppedAtLine(LINE_D), // await helper
   smartNext,
 
   hasStoppedAtBreakpoint,
diff --git a/runtime/observatory/tests/service/async_star_single_step_into_test.dart b/runtime/observatory/tests/service/async_star_single_step_into_test.dart
index 0d99fd5..ac8e6ba 100644
--- a/runtime/observatory/tests/service/async_star_single_step_into_test.dart
+++ b/runtime/observatory/tests/service/async_star_single_step_into_test.dart
@@ -8,12 +8,13 @@
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
-const LINE_A = 19;
-const LINE_B = 20;
-const LINE_C = 24;
-const LINE_D = 27;
-const LINE_E = 33;
-const LINE_F = 34;
+const LINE_A = 20;
+const LINE_B = 21;
+const LINE_C = 25;
+const LINE_D = 28;
+const LINE_E = 34;
+const LINE_F = 35;
+const LINE_G = 26;
 
 foobar() async* {
   yield 1; // LINE_A.
@@ -22,7 +23,7 @@
 
 helper() async {
   print('helper'); // LINE_C.
-  await for (var i in foobar()) {
+  await for (var i in foobar()) /* LINE_G. */ {
     debugger();
     print('loop'); // LINE_D.
   }
@@ -49,6 +50,11 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G), // foobar()
+  stepInto,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G), // await for
   stepInto,
 
   hasStoppedAtBreakpoint,
@@ -62,6 +68,7 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G),
   stepInto,
 
   hasStoppedAtBreakpoint,
diff --git a/runtime/observatory/tests/service/async_star_step_out_test.dart b/runtime/observatory/tests/service/async_star_step_out_test.dart
index 95ca280..6e73174 100644
--- a/runtime/observatory/tests/service/async_star_step_out_test.dart
+++ b/runtime/observatory/tests/service/async_star_step_out_test.dart
@@ -53,6 +53,11 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_H), // foobar().
+  stepInto,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_H), // await for.
   stepInto,
 
   hasStoppedAtBreakpoint,
diff --git a/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart b/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart
index 957251b..d3faadb 100644
--- a/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart
+++ b/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart
@@ -36,8 +36,7 @@
     // Make sure we are in the right place.
     expect(stack.type, 'Stack');
     expect(stack['frames'].length, greaterThanOrEqualTo(1));
-    // Async closure of testFunction
-    expect(stack['frames'][0].function.name, 'async_op');
+    expect(stack['frames'][0].function.name, 'testFunction');
 
     var root = isolate.rootLibrary;
     await root.load();
diff --git a/runtime/observatory/tests/service/get_source_report_test.dart b/runtime/observatory/tests/service/get_source_report_test.dart
index a1d5206..7c87aa6 100644
--- a/runtime/observatory/tests/service/get_source_report_test.dart
+++ b/runtime/observatory/tests/service/get_source_report_test.dart
@@ -91,7 +91,7 @@
     final numRanges = coverage['ranges'].length;
     expect(coverage['type'], equals('SourceReport'));
 
-    expect(numRanges, equals(11));
+    expect(numRanges, greaterThanOrEqualTo(10));
     expect(coverage['ranges'][0], equals(expectedRange));
     expect(coverage['scripts'].length, 1);
     expect(
@@ -106,7 +106,7 @@
     };
     coverage = await isolate.invokeRpcNoUpgrade('getSourceReport', params);
     expect(coverage['type'], equals('SourceReport'));
-    expect(coverage['ranges'].length, 12);
+    expect(coverage['ranges'].length, greaterThanOrEqualTo(10));
     expect(allRangesCompiled(coverage), isTrue);
 
     // One function
diff --git a/runtime/observatory/tests/service/get_stack_limit_rpc_test.dart b/runtime/observatory/tests/service/get_stack_limit_rpc_test.dart
index 09186aa..b3e47e2 100644
--- a/runtime/observatory/tests/service/get_stack_limit_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_stack_limit_rpc_test.dart
@@ -58,9 +58,9 @@
     expect(awaiterFrames.length, greaterThan(frames.length));
     expect(stack['truncated'], false);
     verifyStack(frames, [
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
       '_RootZone.runUnary', // Internal async. mech. ..
     ]);
 
@@ -78,9 +78,9 @@
     expect(awaiterFrames.length, fullStackLength + 1);
     expect(stack['truncated'], true);
     verifyStack(frames, [
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
       '_RootZone.runUnary', // Internal async. mech. ..
     ]);
 
@@ -96,16 +96,16 @@
     expect(awaiterFrames.length, 10);
     expect(stack['truncated'], true);
     verifyStack(frames, [
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
     ]);
   },
 // Invalid limit
diff --git a/runtime/observatory/tests/service/network_profiling_test.dart b/runtime/observatory/tests/service/network_profiling_test.dart
index 3a318ca..6770c58 100644
--- a/runtime/observatory/tests/service/network_profiling_test.dart
+++ b/runtime/observatory/tests/service/network_profiling_test.dart
@@ -24,6 +24,8 @@
 const String kStartSocketProfilingRPC = 'ext.dart.io.startSocketProfiling';
 const String localhost = '127.0.0.1';
 
+List<Object> sockets = [];
+
 Future<void> setup() async {}
 
 Future<void> socketTest() async {
@@ -54,6 +56,11 @@
   await doneCompleter.future;
   // Post finish event
   postEvent('socketTest', {'socket': 'test'});
+  // Workaround for dartbug.com/49111: make sure socket IDs are not reused.
+  sockets.add(serverSocket);
+  sockets.add(socket);
+  sockets.add(server);
+  sockets.add(client);
 }
 
 bool checkFinishEvent(ServiceEvent event) {
diff --git a/runtime/observatory/tests/service/positive_token_pos_test.dart b/runtime/observatory/tests/service/positive_token_pos_test.dart
index b9c25a8..6ebfbae 100644
--- a/runtime/observatory/tests/service/positive_token_pos_test.dart
+++ b/runtime/observatory/tests/service/positive_token_pos_test.dart
@@ -29,7 +29,7 @@
     // We used to return a negative token position for this frame.
     // See issue #27128.
     var frame = stack['frames'][0];
-    expect(frame.function.qualifiedName, equals('helper.async_op'));
+    expect(frame.function.qualifiedName, equals('helper'));
     expect(await frame.location.getLine(), equals(14));
     expect(await frame.location.getColumn(), equals(1));
 
diff --git a/runtime/observatory/tests/service/regress_28443_test.dart b/runtime/observatory/tests/service/regress_28443_test.dart
index ccdec12..c986dd5 100644
--- a/runtime/observatory/tests/service/regress_28443_test.dart
+++ b/runtime/observatory/tests/service/regress_28443_test.dart
@@ -8,7 +8,7 @@
 import 'package:observatory/service_io.dart';
 import 'package:test/test.dart';
 
-const int LINE_A = 28, LINE_B = 33;
+const int LINE_A = 28, LINE_B = 33, LINE_C = 37;
 
 class VMServiceClient {
   VMServiceClient(this.x);
@@ -30,11 +30,11 @@
   });
 }
 
-test_code() async {
+test_code() async /* LINE_B */ {
   try {
     await collect();
   } on TimeoutException {
-    print("ok");
+    print("ok"); // LINE_C
   }
 }
 
@@ -44,12 +44,15 @@
   setBreakpointAtLine(LINE_B),
   resumeIsolate,
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
   setBreakpointAtLine(LINE_A),
   resumeIsolate,
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  setBreakpointAtLine(LINE_C),
   stepOut,
-  stoppedAtLine(LINE_B),
-  resumeIsolate
+  resumeIsolate,
+  stoppedAtLine(LINE_C),
 ];
 
 main(args) => runIsolateTestsSynchronous(args, tests,
diff --git a/runtime/observatory/tests/service/service_test_common.dart b/runtime/observatory/tests/service/service_test_common.dart
index 0189540..50afe39 100644
--- a/runtime/observatory/tests/service/service_test_common.dart
+++ b/runtime/observatory/tests/service/service_test_common.dart
@@ -305,8 +305,7 @@
   };
 }
 
-IsolateTest stoppedInFunction(String functionName,
-    {bool contains: false, bool includeOwner: false}) {
+IsolateTest stoppedInFunction(String functionName) {
   return (Isolate isolate) async {
     print("Checking we are in function: $functionName");
 
@@ -320,13 +319,7 @@
     ServiceFunction function =
         await topFrame.function!.load() as ServiceFunction;
     String name = function.name!;
-    if (includeOwner) {
-      ServiceFunction owner =
-          await (function.dartOwner as ServiceObject).load() as ServiceFunction;
-      name = '${owner.name}.$name';
-    }
-    final bool matches =
-        contains ? name.contains(functionName) : name == functionName;
+    final bool matches = name == functionName;
     if (!matches) {
       StringBuffer sb = new StringBuffer();
       sb.write("Expected to be in function $functionName but "
diff --git a/runtime/observatory/tests/service/set_library_debuggable_test.dart b/runtime/observatory/tests/service/set_library_debuggable_test.dart
index 7431778..adac834 100644
--- a/runtime/observatory/tests/service/set_library_debuggable_test.dart
+++ b/runtime/observatory/tests/service/set_library_debuggable_test.dart
@@ -31,12 +31,12 @@
     await dartCore.reload();
     expect(dartCore.debuggable, equals(true));
   },
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_A),
   stepInto,
   stoppedInFunction('print'),
   stepOut,
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_B),
   (Isolate isolate) async {
     // Mark 'dart:core' as not debuggable.
@@ -55,10 +55,10 @@
     await dartCore.reload();
     expect(dartCore.debuggable, equals(false));
   },
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_B),
   stepInto,
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_C),
 ];
 
diff --git a/runtime/observatory_2/tests/service_2/async_single_step_exception_test.dart b/runtime/observatory_2/tests/service_2/async_single_step_exception_test.dart
index 841afab..9982e0c 100644
--- a/runtime/observatory_2/tests/service_2/async_single_step_exception_test.dart
+++ b/runtime/observatory_2/tests/service_2/async_single_step_exception_test.dart
@@ -55,10 +55,6 @@
   smartNext,
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(23), // } (weird dispatching)
-  smartNext,
-
-  hasStoppedAtBreakpoint,
   stoppedAtLine(LINE_D), // await helper (weird dispatching)
   smartNext,
 
diff --git a/runtime/observatory_2/tests/service_2/async_single_step_out_test.dart b/runtime/observatory_2/tests/service_2/async_single_step_out_test.dart
index cfeac6c..e93c274 100644
--- a/runtime/observatory_2/tests/service_2/async_single_step_out_test.dart
+++ b/runtime/observatory_2/tests/service_2/async_single_step_out_test.dart
@@ -44,11 +44,7 @@
   stepInto, // exit helper via a single step.
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(20), // return null (weird dispatching)
-  stepInto, // exit helper via a single step.
-
-  hasStoppedAtBreakpoint,
-  stoppedAtLine(25), // await helper (weird dispatching)
+  stoppedAtLine(LINE_D), // await helper
   smartNext,
 
   hasStoppedAtBreakpoint,
diff --git a/runtime/observatory_2/tests/service_2/async_star_single_step_into_test.dart b/runtime/observatory_2/tests/service_2/async_star_single_step_into_test.dart
index 0d99fd5..ac8e6ba 100644
--- a/runtime/observatory_2/tests/service_2/async_star_single_step_into_test.dart
+++ b/runtime/observatory_2/tests/service_2/async_star_single_step_into_test.dart
@@ -8,12 +8,13 @@
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
-const LINE_A = 19;
-const LINE_B = 20;
-const LINE_C = 24;
-const LINE_D = 27;
-const LINE_E = 33;
-const LINE_F = 34;
+const LINE_A = 20;
+const LINE_B = 21;
+const LINE_C = 25;
+const LINE_D = 28;
+const LINE_E = 34;
+const LINE_F = 35;
+const LINE_G = 26;
 
 foobar() async* {
   yield 1; // LINE_A.
@@ -22,7 +23,7 @@
 
 helper() async {
   print('helper'); // LINE_C.
-  await for (var i in foobar()) {
+  await for (var i in foobar()) /* LINE_G. */ {
     debugger();
     print('loop'); // LINE_D.
   }
@@ -49,6 +50,11 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G), // foobar()
+  stepInto,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G), // await for
   stepInto,
 
   hasStoppedAtBreakpoint,
@@ -62,6 +68,7 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_G),
   stepInto,
 
   hasStoppedAtBreakpoint,
diff --git a/runtime/observatory_2/tests/service_2/async_star_step_out_test.dart b/runtime/observatory_2/tests/service_2/async_star_step_out_test.dart
index 95ca280..6e73174 100644
--- a/runtime/observatory_2/tests/service_2/async_star_step_out_test.dart
+++ b/runtime/observatory_2/tests/service_2/async_star_step_out_test.dart
@@ -53,6 +53,11 @@
   stepOver, // print.
 
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_H), // foobar().
+  stepInto,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_H), // await for.
   stepInto,
 
   hasStoppedAtBreakpoint,
diff --git a/runtime/observatory_2/tests/service_2/coverage_const_field_async_closure_test.dart b/runtime/observatory_2/tests/service_2/coverage_const_field_async_closure_test.dart
index f2c21ce..ba084ef 100644
--- a/runtime/observatory_2/tests/service_2/coverage_const_field_async_closure_test.dart
+++ b/runtime/observatory_2/tests/service_2/coverage_const_field_async_closure_test.dart
@@ -36,8 +36,7 @@
     // Make sure we are in the right place.
     expect(stack.type, 'Stack');
     expect(stack['frames'].length, greaterThanOrEqualTo(1));
-    // Async closure of testFunction
-    expect(stack['frames'][0].function.name, 'async_op');
+    expect(stack['frames'][0].function.name, 'testFunction');
 
     var root = isolate.rootLibrary;
     await root.load();
diff --git a/runtime/observatory_2/tests/service_2/get_source_report_test.dart b/runtime/observatory_2/tests/service_2/get_source_report_test.dart
index 78ea471..067aeba 100644
--- a/runtime/observatory_2/tests/service_2/get_source_report_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_source_report_test.dart
@@ -91,7 +91,7 @@
     final numRanges = coverage['ranges'].length;
     expect(coverage['type'], equals('SourceReport'));
 
-    expect(numRanges, equals(11));
+    expect(numRanges, greaterThanOrEqualTo(10));
     expect(coverage['ranges'][0], equals(expectedRange));
     expect(coverage['scripts'].length, 1);
     expect(
@@ -106,7 +106,7 @@
     };
     coverage = await isolate.invokeRpcNoUpgrade('getSourceReport', params);
     expect(coverage['type'], equals('SourceReport'));
-    expect(coverage['ranges'].length, 12);
+    expect(coverage['ranges'].length, greaterThanOrEqualTo(10));
     expect(allRangesCompiled(coverage), isTrue);
 
     // One function
diff --git a/runtime/observatory_2/tests/service_2/get_stack_limit_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_stack_limit_rpc_test.dart
index fca283d..dc9f253 100644
--- a/runtime/observatory_2/tests/service_2/get_stack_limit_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_stack_limit_rpc_test.dart
@@ -58,9 +58,9 @@
     expect(awaiterFrames.length, greaterThan(frames.length));
     expect(stack['truncated'], false);
     verifyStack(frames, [
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
       '_RootZone.runUnary', // Internal async. mech. ..
     ]);
 
@@ -78,9 +78,9 @@
     expect(awaiterFrames.length, fullStackLength + 1);
     expect(stack['truncated'], true);
     verifyStack(frames, [
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
-      'bar.async_op', 'foo.async_op', 'bar.async_op', 'foo.async_op',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
+      'bar', 'foo', 'bar', 'foo',
       '_RootZone.runUnary', // Internal async. mech. ..
     ]);
 
@@ -96,16 +96,16 @@
     expect(awaiterFrames.length, 10);
     expect(stack['truncated'], true);
     verifyStack(frames, [
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
-      'bar.async_op',
-      'foo.async_op',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
+      'bar',
+      'foo',
     ]);
   },
 // Invalid limit
diff --git a/runtime/observatory_2/tests/service_2/network_profiling_test.dart b/runtime/observatory_2/tests/service_2/network_profiling_test.dart
index 8ba995f..8a2053b 100644
--- a/runtime/observatory_2/tests/service_2/network_profiling_test.dart
+++ b/runtime/observatory_2/tests/service_2/network_profiling_test.dart
@@ -24,6 +24,8 @@
 const String kStartSocketProfilingRPC = 'ext.dart.io.startSocketProfiling';
 const String localhost = '127.0.0.1';
 
+List<Object> sockets = [];
+
 Future<void> setup() async {}
 
 Future<void> socketTest() async {
@@ -54,6 +56,11 @@
   await doneCompleter.future;
   // Post finish event
   postEvent('socketTest', {'socket': 'test'});
+  // Workaround for dartbug.com/49111: make sure socket IDs are not reused.
+  sockets.add(serverSocket);
+  sockets.add(socket);
+  sockets.add(server);
+  sockets.add(client);
 }
 
 bool checkFinishEvent(ServiceEvent event) {
diff --git a/runtime/observatory_2/tests/service_2/positive_token_pos_test.dart b/runtime/observatory_2/tests/service_2/positive_token_pos_test.dart
index ed4d46e..84dc6e1 100644
--- a/runtime/observatory_2/tests/service_2/positive_token_pos_test.dart
+++ b/runtime/observatory_2/tests/service_2/positive_token_pos_test.dart
@@ -29,7 +29,7 @@
     // We used to return a negative token position for this frame.
     // See issue #27128.
     var frame = stack['frames'][0];
-    expect(frame.function.qualifiedName, equals('helper.async_op'));
+    expect(frame.function.qualifiedName, equals('helper'));
     expect(await frame.location.getLine(), equals(14));
     expect(await frame.location.getColumn(), equals(1));
 
diff --git a/runtime/observatory_2/tests/service_2/regress_28443_test.dart b/runtime/observatory_2/tests/service_2/regress_28443_test.dart
index ddc48fa..f30535f 100644
--- a/runtime/observatory_2/tests/service_2/regress_28443_test.dart
+++ b/runtime/observatory_2/tests/service_2/regress_28443_test.dart
@@ -8,7 +8,7 @@
 import 'package:observatory_2/service_io.dart';
 import 'package:test/test.dart';
 
-const int LINE_A = 28, LINE_B = 33;
+const int LINE_A = 28, LINE_B = 33, LINE_C = 37;
 
 class VMServiceClient {
   VMServiceClient(this.x);
@@ -30,11 +30,11 @@
   });
 }
 
-test_code() async {
+test_code() async /* LINE_B */ {
   try {
     await collect();
   } on TimeoutException {
-    print("ok");
+    print("ok"); // LINE_C
   }
 }
 
@@ -44,12 +44,15 @@
   setBreakpointAtLine(LINE_B),
   resumeIsolate,
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
   setBreakpointAtLine(LINE_A),
   resumeIsolate,
   hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  setBreakpointAtLine(LINE_C),
   stepOut,
-  stoppedAtLine(LINE_B),
-  resumeIsolate
+  resumeIsolate,
+  stoppedAtLine(LINE_C),
 ];
 
 main(args) => runIsolateTestsSynchronous(args, tests,
diff --git a/runtime/observatory_2/tests/service_2/service_test_common.dart b/runtime/observatory_2/tests/service_2/service_test_common.dart
index e1dc008..a8530b0 100644
--- a/runtime/observatory_2/tests/service_2/service_test_common.dart
+++ b/runtime/observatory_2/tests/service_2/service_test_common.dart
@@ -308,8 +308,7 @@
   };
 }
 
-IsolateTest stoppedInFunction(String functionName,
-    {bool contains: false, bool includeOwner: false}) {
+IsolateTest stoppedInFunction(String functionName) {
   return (Isolate isolate) async {
     print("Checking we are in function: $functionName");
 
@@ -322,13 +321,7 @@
     Frame topFrame = frames[0];
     ServiceFunction function = await topFrame.function.load();
     String name = function.name;
-    if (includeOwner) {
-      ServiceFunction owner =
-          await (function.dartOwner as ServiceObject).load();
-      name = '${owner.name}.$name';
-    }
-    final bool matches =
-        contains ? name.contains(functionName) : name == functionName;
+    final bool matches = name == functionName;
     if (!matches) {
       StringBuffer sb = new StringBuffer();
       sb.write("Expected to be in function $functionName but "
diff --git a/runtime/observatory_2/tests/service_2/set_library_debuggable_test.dart b/runtime/observatory_2/tests/service_2/set_library_debuggable_test.dart
index 89a8b52..e2bcc9c 100644
--- a/runtime/observatory_2/tests/service_2/set_library_debuggable_test.dart
+++ b/runtime/observatory_2/tests/service_2/set_library_debuggable_test.dart
@@ -31,12 +31,12 @@
     await dartCore.reload();
     expect(dartCore.debuggable, equals(true));
   },
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_A),
   stepInto,
   stoppedInFunction('print'),
   stepOut,
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_B),
   (Isolate isolate) async {
     // Mark 'dart:core' as not debuggable.
@@ -55,10 +55,10 @@
     await dartCore.reload();
     expect(dartCore.debuggable, equals(false));
   },
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_B),
   stepInto,
-  stoppedInFunction('testMain', contains: true, includeOwner: true),
+  stoppedInFunction('testMain'),
   stoppedAtLine(LINE_C),
 ];
 
diff --git a/runtime/tests/vm/dart/causal_stacks/utils.dart b/runtime/tests/vm/dart/causal_stacks/utils.dart
index 077e9bd..584fd6d 100644
--- a/runtime/tests/vm/dart/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart/causal_stacks/utils.dart
@@ -321,15 +321,12 @@
     final expected = const <String>[
       r'^#0      throwSync \(.*/utils.dart:16(:3)?\)$',
       r'^#1      noYields3 \(.*/utils.dart:54(:3)?\)$',
-      r'^#2      noYields3 \(.*/utils.dart:53(:23)?\)$',
-      r'^#3      noYields2 \(.*/utils.dart:50(:9)?\)$',
-      r'^#4      noYields2 \(.*/utils.dart:49(:23)?\)$',
-      r'^#5      noYields \(.*/utils.dart:46(:9)?\)$',
-      r'^#6      noYields \(.*/utils.dart:45(:22)?\)$',
+      r'^#2      noYields2 \(.*/utils.dart:50(:9)?\)$',
+      r'^#3      noYields \(.*/utils.dart:46(:9)?\)$',
     ];
     final postfix = const <String>[
-      r'^#9      doTestsNoCausalNoLazy ',
-      r'^#10     _RootZone.runUnary \(.+\)$',
+      r'^#5      doTestsNoCausalNoLazy ',
+      r'^#6      _RootZone.runUnary \(.+\)$',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
     ];
@@ -338,8 +335,7 @@
         noYields,
         expected +
             const <String>[
-              r'^#7      doTestAwait ',
-              r'^#8      doTestAwait ',
+              r'^#4      doTestAwait ',
             ] +
             postfix,
         debugInfoFilename);
@@ -348,8 +344,7 @@
         noYields,
         expected +
             const <String>[
-              r'^#7      doTestAwaitThen ',
-              r'^#8      doTestAwaitThen ',
+              r'^#4      doTestAwaitThen ',
             ] +
             postfix,
         debugInfoFilename);
@@ -358,8 +353,7 @@
         noYields,
         expected +
             const <String>[
-              r'^#7      doTestAwaitCatchError ',
-              r'^#8      doTestAwaitCatchError ',
+              r'^#4      doTestAwaitCatchError ',
             ] +
             postfix,
         debugInfoFilename);
diff --git a/runtime/tests/vm/dart_2/causal_stacks/utils.dart b/runtime/tests/vm/dart_2/causal_stacks/utils.dart
index 0d1489c..5ae06ed 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/utils.dart
@@ -323,15 +323,12 @@
     final expected = const <String>[
       r'^#0      throwSync \(.*/utils.dart:18(:3)?\)$',
       r'^#1      noYields3 \(.*/utils.dart:56(:3)?\)$',
-      r'^#2      noYields3 \(.*/utils.dart:55(:23)?\)$',
-      r'^#3      noYields2 \(.*/utils.dart:52(:9)?\)$',
-      r'^#4      noYields2 \(.*/utils.dart:51(:23)?\)$',
-      r'^#5      noYields \(.*/utils.dart:48(:9)?\)$',
-      r'^#6      noYields \(.*/utils.dart:47(:22)?\)$',
+      r'^#2      noYields2 \(.*/utils.dart:52(:9)?\)$',
+      r'^#3      noYields \(.*/utils.dart:48(:9)?\)$',
     ];
     final postfix = const <String>[
-      r'^#9      doTestsNoCausalNoLazy ',
-      r'^#10     _RootZone.runUnary ',
+      r'^#5      doTestsNoCausalNoLazy ',
+      r'^#6      _RootZone.runUnary ',
       // The rest are internal frames which we don't really care about.
       IGNORE_REMAINING_STACK,
     ];
@@ -340,8 +337,7 @@
         noYields,
         expected +
             const <String>[
-              r'^#7      doTestAwait ',
-              r'^#8      doTestAwait ',
+              r'^#4      doTestAwait ',
             ] +
             postfix,
         debugInfoFilename);
@@ -350,8 +346,7 @@
         noYields,
         expected +
             const <String>[
-              r'^#7      doTestAwaitThen ',
-              r'^#8      doTestAwaitThen ',
+              r'^#4      doTestAwaitThen ',
             ] +
             postfix,
         debugInfoFilename);
@@ -360,8 +355,7 @@
         noYields,
         expected +
             const <String>[
-              r'^#7      doTestAwaitCatchError ',
-              r'^#8      doTestAwaitCatchError ',
+              r'^#4      doTestAwaitCatchError ',
             ] +
             postfix,
         debugInfoFilename);
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index c88a31f..c5523fb 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -1900,12 +1900,12 @@
     // in the current loading unit).
     ObjectPoolPtr pool = code->untag()->object_pool_;
     if (s->kind() == Snapshot::kFullAOT) {
-      TracePool(s, pool, /*only_code=*/is_deferred);
+      TracePool(s, pool, /*only_call_targets=*/is_deferred);
     } else {
       if (s->InCurrentLoadingUnitOrRoot(pool)) {
         s->Push(pool);
       } else {
-        TracePool(s, pool, /*only_code=*/true);
+        TracePool(s, pool, /*only_call_targets=*/true);
       }
     }
 
@@ -1973,7 +1973,7 @@
 #endif
   }
 
-  void TracePool(Serializer* s, ObjectPoolPtr pool, bool only_code) {
+  void TracePool(Serializer* s, ObjectPoolPtr pool, bool only_call_targets) {
     if (pool == ObjectPool::null()) {
       return;
     }
@@ -1984,8 +1984,18 @@
       auto entry_type = ObjectPool::TypeBits::decode(entry_bits[i]);
       if (entry_type == ObjectPool::EntryType::kTaggedObject) {
         const ObjectPtr target = pool->untag()->data()[i].raw_obj_;
-        if (!only_code || target->IsCode()) {
+        // A field is a call target because its initializer may be called
+        // indirectly by passing the field to the runtime. A const closure
+        // is a call target because its function may be called indirectly
+        // via a closure call.
+        if (!only_call_targets || target->IsCode() || target->IsFunction() ||
+            target->IsField() || target->IsClosure()) {
           s->Push(target);
+        } else {
+          intptr_t cid = target->GetClassIdMayBeSmi();
+          if (cid >= kNumPredefinedCids) {
+            s->Push(s->isolate_group()->class_table()->At(cid));
+          }
         }
       }
     }
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index ee450a6..6c6a023 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -424,6 +424,7 @@
       typeparams_to_retain_(),
       consts_to_retain_(),
       seen_table_selectors_(),
+      api_uses_(),
       error_(Error::Handle()),
       get_runtime_type_is_unique_(false) {
   ASSERT(Precompiler::singleton_ == NULL);
@@ -662,6 +663,8 @@
       ProgramVisitor::Dedup(T);
     }
 
+    PruneDictionaries();
+
     if (retained_reasons_writer_ != nullptr) {
       reasons_writer.Write();
       retained_reasons_writer_ = nullptr;
@@ -752,6 +755,7 @@
     }
   }
   if (!main.IsNull()) {
+    AddApiUse(main);
     if (lib.LookupLocalFunction(name) == Function::null()) {
       retain_root_library_caches_ = true;
     }
@@ -1464,6 +1468,14 @@
   return seen_table_selectors_.HasKey(selector_id);
 }
 
+void Precompiler::AddApiUse(const Object& obj) {
+  api_uses_.Insert(&Object::ZoneHandle(Z, obj.ptr()));
+}
+
+bool Precompiler::HasApiUse(const Object& obj) {
+  return api_uses_.HasKey(&obj);
+}
+
 void Precompiler::AddInstantiatedClass(const Class& cls) {
   if (is_tracing()) {
     tracer_->WriteClassInstantiationRef(cls);
@@ -1523,6 +1535,7 @@
                                  &reusable_object_handle) ==
             EntryPointPragma::kAlways) {
           AddInstantiatedClass(cls);
+          AddApiUse(cls);
         }
       }
 
@@ -1541,6 +1554,7 @@
           if (pragma == EntryPointPragma::kNever) continue;
 
           AddField(field);
+          AddApiUse(field);
 
           if (!field.is_static()) {
             if (pragma != EntryPointPragma::kSetterOnly) {
@@ -1569,6 +1583,7 @@
               type == EntryPointPragma::kCallOnly) {
             functions_with_entry_point_pragmas_.Insert(function);
             AddFunction(function, RetainReasons::kEntryPointPragma);
+            AddApiUse(function);
           }
 
           if ((type == EntryPointPragma::kAlways ||
@@ -1578,10 +1593,16 @@
             function2 = function.ImplicitClosureFunction();
             functions_with_entry_point_pragmas_.Insert(function2);
             AddFunction(function2, RetainReasons::kEntryPointPragma);
+
+            // Not `function2`: Dart_GetField will lookup the regular function
+            // and get the implicit closure function from that.
+            AddApiUse(function);
           }
 
           if (function.IsGenerativeConstructor()) {
             AddInstantiatedClass(cls);
+            AddApiUse(function);
+            AddApiUse(cls);
           }
         }
         if (function.kind() == UntaggedFunction::kImplicitGetter &&
@@ -1591,6 +1612,7 @@
             if (function.accessor_field() == field.ptr()) {
               functions_with_entry_point_pragmas_.Insert(function);
               AddFunction(function, RetainReasons::kImplicitGetter);
+              AddApiUse(function);
             }
           }
         }
@@ -1601,6 +1623,7 @@
             if (function.accessor_field() == field.ptr()) {
               functions_with_entry_point_pragmas_.Insert(function);
               AddFunction(function, RetainReasons::kImplicitSetter);
+              AddApiUse(function);
             }
           }
         }
@@ -1611,9 +1634,15 @@
             if (function.accessor_field() == field.ptr()) {
               functions_with_entry_point_pragmas_.Insert(function);
               AddFunction(function, RetainReasons::kImplicitStaticGetter);
+              AddApiUse(function);
             }
           }
         }
+        if (function.is_native()) {
+          // The embedder will need to lookup this library to provide the native
+          // resolver, even if there are no embedder calls into the library.
+          AddApiUse(lib);
+        }
       }
 
       implicit_getters = GrowableObjectArray::null();
@@ -3069,6 +3098,166 @@
   }
 }
 
+void Precompiler::PruneDictionaries() {
+  // PRODUCT-only: pruning interferes with various uses of the service protocol,
+  // including heap analysis tools.
+#if defined(PRODUCT)
+  class PruneDictionariesVisitor {
+   public:
+    GrowableObjectArrayPtr PruneLibraries(
+        const GrowableObjectArray& libraries) {
+      for (intptr_t i = 0; i < libraries.Length(); i++) {
+        lib_ ^= libraries.At(i);
+        bool retain = PruneLibrary(lib_);
+        if (retain) {
+          lib_.set_index(retained_libraries_.Length());
+          retained_libraries_.Add(lib_);
+        } else {
+          lib_.set_index(-1);
+          lib_.set_private_key(null_string_);
+        }
+      }
+
+      Library::RegisterLibraries(Thread::Current(), retained_libraries_);
+      return retained_libraries_.ptr();
+    }
+
+    bool PruneLibrary(const Library& lib) {
+      dict_ = lib.dictionary();
+      intptr_t dict_size = dict_.Length() - 1;
+      intptr_t used = 0;
+      for (intptr_t i = 0; i < dict_size; i++) {
+        entry_ = dict_.At(i);
+        if (entry_.IsNull()) continue;
+
+        bool retain = false;
+        if (entry_.IsClass()) {
+          // dart:async: Fix async stack trace lookups in dart:async to annotate
+          // entry points or fail gracefully.
+          // dart:core, dart:collection, dart:typed_data: Isolate messaging
+          // between groups allows any class in these libraries.
+          retain = PruneClass(Class::Cast(entry_)) ||
+                   (lib.url() == Symbols::DartAsync().ptr()) ||
+                   (lib.url() == Symbols::DartCore().ptr()) ||
+                   (lib.url() == Symbols::DartCollection().ptr()) ||
+                   (lib.url() == Symbols::DartTypedData().ptr());
+        } else if (entry_.IsFunction() || entry_.IsField()) {
+          retain = precompiler_->HasApiUse(entry_);
+        } else {
+          FATAL("Unexpected library entry: %s", entry_.ToCString());
+        }
+        if (retain) {
+          used++;
+        } else {
+          dict_.SetAt(i, Object::null_object());
+        }
+      }
+      lib.RehashDictionary(dict_, used * 4 / 3 + 1);
+
+      bool retain = used > 0;
+      cls_ = lib.toplevel_class();
+      if (PruneClass(cls_)) {
+        retain = true;
+      }
+      if (lib.is_dart_scheme()) {
+        retain = true;
+      }
+      if (lib.ptr() == root_lib_.ptr()) {
+        retain = true;
+      }
+      if (precompiler_->HasApiUse(lib)) {
+        retain = true;
+      }
+      return retain;
+    }
+
+    bool PruneClass(const Class& cls) {
+      bool retain = precompiler_->HasApiUse(cls);
+
+      functions_ = cls.functions();
+      retained_functions_ = GrowableObjectArray::New();
+      for (intptr_t i = 0; i < functions_.Length(); i++) {
+        function_ ^= functions_.At(i);
+        if (precompiler_->HasApiUse(function_)) {
+          retained_functions_.Add(function_);
+          retain = true;
+        } else if (precompiler_->functions_called_dynamically_.ContainsKey(
+                       function_)) {
+          retained_functions_.Add(function_);
+          // No `retain = true`: the function must appear in the method
+          // dictionary for lookup, but the class may still be removed from the
+          // library.
+        }
+      }
+      if (retained_functions_.Length() > 0) {
+        functions_ = Array::MakeFixedLength(retained_functions_);
+        cls.SetFunctions(functions_);
+      } else {
+        cls.SetFunctions(Object::empty_array());
+      }
+
+      fields_ = cls.fields();
+      retained_fields_ = GrowableObjectArray::New();
+      for (intptr_t i = 0; i < fields_.Length(); i++) {
+        field_ ^= fields_.At(i);
+        if (precompiler_->HasApiUse(field_)) {
+          retained_fields_.Add(field_);
+          retain = true;
+        }
+      }
+      if (retained_fields_.Length() > 0) {
+        fields_ = Array::MakeFixedLength(retained_fields_);
+        cls.SetFields(fields_);
+      } else {
+        cls.SetFields(Object::empty_array());
+      }
+
+      return retain;
+    }
+
+    explicit PruneDictionariesVisitor(Precompiler* precompiler, Zone* zone)
+        : precompiler_(precompiler),
+          lib_(Library::Handle(zone)),
+          dict_(Array::Handle(zone)),
+          entry_(Object::Handle(zone)),
+          cls_(Class::Handle(zone)),
+          functions_(Array::Handle(zone)),
+          fields_(Array::Handle(zone)),
+          function_(Function::Handle(zone)),
+          field_(Field::Handle(zone)),
+          retained_functions_(GrowableObjectArray::Handle(zone)),
+          retained_fields_(GrowableObjectArray::Handle(zone)),
+          retained_libraries_(
+              GrowableObjectArray::Handle(zone, GrowableObjectArray::New())),
+          root_lib_(Library::Handle(
+              zone,
+              precompiler->isolate_group()->object_store()->root_library())),
+          null_string_(String::Handle(zone)) {}
+
+   private:
+    Precompiler* const precompiler_;
+    Library& lib_;
+    Array& dict_;
+    Object& entry_;
+    Class& cls_;
+    Array& functions_;
+    Array& fields_;
+    Function& function_;
+    Field& field_;
+    GrowableObjectArray& retained_functions_;
+    GrowableObjectArray& retained_fields_;
+    const GrowableObjectArray& retained_libraries_;
+    const Library& root_lib_;
+    const String& null_string_;
+  };
+
+  HANDLESCOPE(T);
+  SafepointWriteRwLocker ml(T, T->isolate_group()->program_lock());
+  PruneDictionariesVisitor visitor(this, Z);
+  libraries_ = visitor.PruneLibraries(libraries_);
+#endif  // defined(PRODUCT)
+}
+
 // Traits for the HashTable template.
 struct CodeKeyTraits {
   static uint32_t Hash(const Object& key) { return Code::Cast(key).Size(); }
diff --git a/runtime/vm/compiler/aot/precompiler.h b/runtime/vm/compiler/aot/precompiler.h
index 4e0d211..50df9e7 100644
--- a/runtime/vm/compiler/aot/precompiler.h
+++ b/runtime/vm/compiler/aot/precompiler.h
@@ -210,6 +210,37 @@
 
 typedef DirectChainedHashMap<TypeArgumentsKeyValueTrait> TypeArgumentsSet;
 
+class ProgramElementKeyValueTrait {
+ public:
+  // Typedefs needed for the DirectChainedHashMap template.
+  typedef const Object* Key;
+  typedef const Object* Value;
+  typedef const Object* Pair;
+
+  static Key KeyOf(Pair kv) { return kv; }
+
+  static Value ValueOf(Pair kv) { return kv; }
+
+  static inline uword Hash(Key key) {
+    if (key->IsFunction()) {
+      return Function::Cast(*key).Hash();
+    } else if (key->IsField()) {
+      return Field::Cast(*key).kernel_offset();
+    } else if (key->IsClass()) {
+      return Class::Cast(*key).kernel_offset();
+    } else if (key->IsLibrary()) {
+      return Library::Cast(*key).index();
+    }
+    FATAL("Unexpected type: %s\n", key->ToCString());
+  }
+
+  static inline bool IsKeyEqual(Pair pair, Key key) {
+    return pair->ptr() == key->ptr();
+  }
+};
+
+typedef DirectChainedHashMap<ProgramElementKeyValueTrait> ProgramElementSet;
+
 class InstanceKeyValueTrait {
  public:
   // Typedefs needed for the DirectChainedHashMap template.
@@ -321,6 +352,8 @@
   bool IsHitByTableSelector(const Function& function);
   // Returns the reason if the function must be retained, otherwise nullptr.
   const char* MustRetainFunction(const Function& function);
+  void AddApiUse(const Object& obj);
+  bool HasApiUse(const Object& obj);
 
   void ProcessFunction(const Function& function);
   void CheckForNewDynamicFunctions();
@@ -343,6 +376,7 @@
   void DropClasses();
   void DropLibraries();
   void DiscardCodeObjects();
+  void PruneDictionaries();
 
   DEBUG_ONLY(FunctionPtr FindUnvisitedRetainedFunction());
 
@@ -393,6 +427,7 @@
   TypeParameterSet typeparams_to_retain_;
   InstanceSet consts_to_retain_;
   TableSelectorSet seen_table_selectors_;
+  ProgramElementSet api_uses_;
   Error& error_;
 
   compiler::DispatchTableGenerator* dispatch_table_generator_;
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 67f8fb8..2839cd8 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -1587,7 +1587,7 @@
                           target::Instructions::HeaderSize() - kHeapObjectTag;
   mov(R0, Operand(PC));
   AddImmediate(R0, -offset);
-  ldr(IP, FieldAddress(CODE_REG, target::Code::saved_instructions_offset()));
+  ldr(IP, FieldAddress(CODE_REG, target::Code::instructions_offset()));
   cmp(R0, Operand(IP));
   b(&instructions_ok, EQ);
   bkpt(1);
@@ -3308,6 +3308,10 @@
   READS_RETURN_ADDRESS_FROM_LR(bx(LR, cond));
 }
 
+void Assembler::SetReturnAddress(Register value) {
+  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(MoveRegister(LR, value));
+}
+
 void Assembler::ReserveAlignedFrameSpace(intptr_t frame_space) {
   // Reserve space for arguments and align frame before entering
   // the C++ world.
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 00dc85b..8a714cf 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -1300,6 +1300,11 @@
   void EnterFrame(RegList regs, intptr_t frame_space);
   void LeaveFrame(RegList regs, bool allow_pop_pc = false);
   void Ret(Condition cond = AL);
+
+  // Sets the return address to [value] as if there was a call.
+  // On ARM sets LR.
+  void SetReturnAddress(Register value);
+
   void ReserveAlignedFrameSpace(intptr_t frame_space);
 
   // In debug mode, this generates code to check that:
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index e282fcb..f904733 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1540,7 +1540,7 @@
   const intptr_t entry_offset =
       CodeSize() + target::Instructions::HeaderSize() - kHeapObjectTag;
   adr(R0, Immediate(-entry_offset));
-  ldr(TMP, FieldAddress(CODE_REG, target::Code::saved_instructions_offset()));
+  ldr(TMP, FieldAddress(CODE_REG, target::Code::instructions_offset()));
   cmp(R0, Operand(TMP));
   b(&instructions_ok, EQ);
   brk(1);
@@ -1583,6 +1583,10 @@
   mov(CSP, SP);
 }
 
+void Assembler::SetReturnAddress(Register value) {
+  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(MoveRegister(LR, value));
+}
+
 void Assembler::EnterFrame(intptr_t frame_size) {
   SPILLS_LR_TO_FRAME(PushPair(FP, LR));  // low: FP, high: LR.
   mov(FP, SP);
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 3e79152..fa1d808 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -2121,6 +2121,10 @@
   void LeaveFrame();
   void Ret() { ret(); }
 
+  // Sets the return address to [value] as if there was a call.
+  // On ARM64 sets LR.
+  void SetReturnAddress(Register value);
+
   // Emit code to transition between generated mode and native mode.
   //
   // These require and ensure that CSP and SP are equal and aligned and require
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index b97296c..7ef5339 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -573,6 +573,13 @@
    */
 
   void Ret() { ret(); }
+
+  // Sets the return address to [value] as if there was a call.
+  // On IA32 pushes [value].
+  void SetReturnAddress(Register value) {
+    PushRegister(value);
+  }
+
   void CompareRegisters(Register a, Register b);
   void CompareObjectRegisters(Register a, Register b) {
     CompareRegisters(a, b);
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.cc b/runtime/vm/compiler/assembler/assembler_riscv.cc
index 0c1caab..cdfa87a 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv.cc
@@ -2727,6 +2727,9 @@
                              Register rs1,
                              intx_t imm,
                              OperandSize sz) {
+  if ((imm == 0) && (rd == rs1)) {
+    return;
+  }
   if (IsITypeImm(imm)) {
     addi(rd, rs1, imm);
   } else {
@@ -3646,7 +3649,7 @@
   intx_t hi = (imm - lo) << (XLEN - 32) >> (XLEN - 32);
   auipc(TMP, hi);
   addi(TMP, TMP, lo);
-  lx(TMP2, FieldAddress(CODE_REG, target::Code::saved_instructions_offset()));
+  lx(TMP2, FieldAddress(CODE_REG, target::Code::instructions_offset()));
   beq(TMP, TMP2, &instructions_ok, kNearJump);
   ebreak();
   Bind(&instructions_ok);
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.h b/runtime/vm/compiler/assembler/assembler_riscv.h
index 914301b..eb2708e 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.h
+++ b/runtime/vm/compiler/assembler/assembler_riscv.h
@@ -1231,6 +1231,12 @@
   void LeaveFrame();
   void Ret() { ret(); }
 
+  // Sets the return address to [value] as if there was a call.
+  // On RISC-V sets RA.
+  void SetReturnAddress(Register value) {
+    mv(RA, value);
+  }
+
   // Emit code to transition between generated mode and native mode.
   //
   // These require and ensure that CSP and SP are equal and aligned and require
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index f4f0dd4..2d3ebb0 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -2069,7 +2069,7 @@
     leaq(RAX, Address::AddressRIPRelative(-header_to_rip_offset));
     ASSERT(CodeSize() == (header_to_rip_offset - header_to_entry_offset));
   }
-  cmpq(RAX, FieldAddress(CODE_REG, target::Code::saved_instructions_offset()));
+  cmpq(RAX, FieldAddress(CODE_REG, target::Code::instructions_offset()));
   j(EQUAL, &instructions_ok);
   int3();
   Bind(&instructions_ok);
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 9f3fb6e..eafff9b 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -711,6 +711,13 @@
 
   // Methods for High-level operations and implemented on all architectures.
   void Ret() { ret(); }
+
+  // Sets the return address to [value] as if there was a call.
+  // On X64 pushes [value].
+  void SetReturnAddress(Register value) {
+    PushRegister(value);
+  }
+
   void CompareRegisters(Register a, Register b);
   void CompareObjectRegisters(Register a, Register b) { OBJ(cmp)(a, b); }
   void BranchIf(Condition condition,
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index 51af8e2..85595e1 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -1456,6 +1456,10 @@
   SetValue(instr, non_constant_);
 }
 
+void ConstantPropagator::VisitSuspend(SuspendInstr* instr) {
+  SetValue(instr, non_constant_);
+}
+
 void ConstantPropagator::VisitLoadThread(LoadThreadInstr* instr) {
   SetValue(instr, non_constant_);
 }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index bce15d9..5a9918a 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -373,7 +373,8 @@
       Register value_reg = slot_index == args_desc_slot ? ARGS_DESC_REG : R0;
       __ StoreToOffset(value_reg, FP, slot_index * compiler::target::kWordSize);
     }
-  } else if (parsed_function().suspend_state_var() != nullptr) {
+  } else if (parsed_function().suspend_state_var() != nullptr &&
+             !flow_graph().IsCompiledForOsr()) {
     // Initialize synthetic :suspend_state variable early
     // as it may be accessed by GC and exception handling before
     // InitSuspendableFunction stub is called.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 7f86e88..fd697f2 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -363,7 +363,8 @@
           slot_index == args_desc_slot ? ARGS_DESC_REG : NULL_REG;
       __ StoreToOffset(value_reg, FP, slot_index * kWordSize);
     }
-  } else if (parsed_function().suspend_state_var() != nullptr) {
+  } else if (parsed_function().suspend_state_var() != nullptr &&
+             !flow_graph().IsCompiledForOsr()) {
     // Initialize synthetic :suspend_state variable early
     // as it may be accessed by GC and exception handling before
     // InitSuspendableFunction stub is called.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index e4b5071..db8d71e 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -450,7 +450,8 @@
       Register value_reg = slot_index == args_desc_slot ? ARGS_DESC_REG : EAX;
       __ movl(compiler::Address(EBP, slot_index * kWordSize), value_reg);
     }
-  } else if (parsed_function().suspend_state_var() != nullptr) {
+  } else if (parsed_function().suspend_state_var() != nullptr &&
+             !flow_graph().IsCompiledForOsr()) {
     // Initialize synthetic :suspend_state variable early
     // as it may be accessed by GC and exception handling before
     // InitSuspendableFunction stub is called.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
index 7a3215d..58f2236 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
@@ -357,7 +357,8 @@
       __ StoreToOffset(value_reg, SP,
                        (slot_index + fp_to_sp_delta) * kWordSize);
     }
-  } else if (parsed_function().suspend_state_var() != nullptr) {
+  } else if (parsed_function().suspend_state_var() != nullptr &&
+             !flow_graph().IsCompiledForOsr()) {
     // Initialize synthetic :suspend_state variable early
     // as it may be accessed by GC and exception handling before
     // InitSuspendableFunction stub is called.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 1c87031..ba0add49 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -369,7 +369,8 @@
       Register value_reg = slot_index == args_desc_slot ? ARGS_DESC_REG : RAX;
       __ movq(compiler::Address(RBP, slot_index * kWordSize), value_reg);
     }
-  } else if (parsed_function().suspend_state_var() != nullptr) {
+  } else if (parsed_function().suspend_state_var() != nullptr &&
+             !flow_graph().IsCompiledForOsr()) {
     // Initialize synthetic :suspend_state variable early
     // as it may be accessed by GC and exception handling before
     // InitSuspendableFunction stub is called.
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index e4ba8ff..95d5237 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -7298,10 +7298,6 @@
       locs->set_in(0, Location::RegisterLocation(
                           InitSuspendableFunctionStubABI::kTypeArgsReg));
       break;
-    case StubId::kAwait:
-    case StubId::kYieldAsyncStar:
-      locs->set_in(0, Location::RegisterLocation(SuspendStubABI::kArgumentReg));
-      break;
   }
   locs->set_out(0, Location::RegisterLocation(CallingConventions::kReturnReg));
   return locs;
@@ -7314,12 +7310,34 @@
     case StubId::kInitAsync:
       stub = object_store->init_async_stub();
       break;
-    case StubId::kAwait:
-      stub = object_store->await_stub();
-      break;
     case StubId::kInitAsyncStar:
       stub = object_store->init_async_star_stub();
       break;
+  }
+  compiler->GenerateStubCall(source(), stub, UntaggedPcDescriptors::kOther,
+                             locs(), deopt_id(), env());
+}
+
+LocationSummary* SuspendInstr::MakeLocationSummary(Zone* zone, bool opt) const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
+  locs->set_in(0, Location::RegisterLocation(SuspendStubABI::kArgumentReg));
+  locs->set_out(0, Location::RegisterLocation(CallingConventions::kReturnReg));
+  return locs;
+}
+
+void SuspendInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  // Use deopt_id as a yield index.
+  compiler->EmitYieldPositionMetadata(source(), deopt_id());
+
+  ObjectStore* object_store = compiler->isolate_group()->object_store();
+  Code& stub = Code::ZoneHandle(compiler->zone());
+  switch (stub_id_) {
+    case StubId::kAwait:
+      stub = object_store->await_stub();
+      break;
     case StubId::kYieldAsyncStar:
       stub = object_store->yield_async_star_stub();
       break;
@@ -7328,18 +7346,18 @@
                              locs(), deopt_id(), env());
 
 #if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_IA32)
-  if ((stub_id_ == StubId::kAwait) || (stub_id_ == StubId::kYieldAsyncStar)) {
-    // On x86 (X64 and IA32) mismatch between calls and returns
-    // significantly regresses performance. So suspend stub
-    // does not return directly to the caller. Instead, a small
-    // epilogue is generated right after the call to suspend stub,
-    // and resume stub adjusts resume PC to skip this epilogue.
-    const intptr_t start = compiler->assembler()->CodeSize();
-    __ LeaveFrame();
-    __ ret();
-    RELEASE_ASSERT(compiler->assembler()->CodeSize() - start ==
-                   SuspendStubABI::kResumePcDistance);
-  }
+  // On x86 (X64 and IA32) mismatch between calls and returns
+  // significantly regresses performance. So suspend stub
+  // does not return directly to the caller. Instead, a small
+  // epilogue is generated right after the call to suspend stub,
+  // and resume stub adjusts resume PC to skip this epilogue.
+  const intptr_t start = compiler->assembler()->CodeSize();
+  __ LeaveFrame();
+  __ ret();
+  RELEASE_ASSERT(compiler->assembler()->CodeSize() - start ==
+                 SuspendStubABI::kResumePcDistance);
+  compiler->EmitCallsiteMetadata(source(), resume_deopt_id(),
+                                 UntaggedPcDescriptors::kOther, locs(), env());
 #endif
 }
 
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 9f7562f..676dd00 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -529,7 +529,8 @@
   M(Call1ArgStub, _)                                                           \
   M(LoadThread, kNoGC)                                                         \
   M(Deoptimize, kNoGC)                                                         \
-  M(SimdOp, kNoGC)
+  M(SimdOp, kNoGC)                                                             \
+  M(Suspend, _)
 
 #define FOR_EACH_ABSTRACT_INSTRUCTION(M)                                       \
   M(Allocation, _)                                                             \
@@ -9582,10 +9583,8 @@
 class Call1ArgStubInstr : public TemplateDefinition<1, Throws> {
  public:
   enum class StubId {
-    kAwait,
     kInitAsync,
     kInitAsyncStar,
-    kYieldAsyncStar,
   };
 
   Call1ArgStubInstr(const InstructionSource& source,
@@ -9605,6 +9604,9 @@
   virtual bool CanCallDart() const { return true; }
   virtual bool ComputeCanDeoptimize() const { return true; }
   virtual bool HasUnknownSideEffects() const { return true; }
+  virtual intptr_t NumberOfInputsConsumedBeforeCall() const {
+    return InputCount();
+  }
 
   DECLARE_INSTRUCTION(Call1ArgStub);
   PRINT_OPERANDS_TO_SUPPORT
@@ -9616,6 +9618,49 @@
   DISALLOW_COPY_AND_ASSIGN(Call1ArgStubInstr);
 };
 
+// Suspends execution using the suspend stub specified using [StubId].
+class SuspendInstr : public TemplateDefinition<1, Throws> {
+ public:
+  enum class StubId {
+    kAwait,
+    kYieldAsyncStar,
+  };
+
+  SuspendInstr(const InstructionSource& source,
+               StubId stub_id,
+               Value* operand,
+               intptr_t deopt_id,
+               intptr_t resume_deopt_id)
+      : TemplateDefinition(source, deopt_id),
+        stub_id_(stub_id),
+        resume_deopt_id_(resume_deopt_id),
+        token_pos_(source.token_pos) {
+    SetInputAt(0, operand);
+  }
+
+  Value* operand() const { return inputs_[0]; }
+  StubId stub_id() const { return stub_id_; }
+  intptr_t resume_deopt_id() const { return resume_deopt_id_; }
+  virtual TokenPosition token_pos() const { return token_pos_; }
+
+  virtual bool CanCallDart() const { return true; }
+  virtual bool ComputeCanDeoptimize() const { return true; }
+  virtual bool HasUnknownSideEffects() const { return true; }
+  virtual intptr_t NumberOfInputsConsumedBeforeCall() const {
+    return InputCount();
+  }
+
+  DECLARE_INSTRUCTION(Suspend);
+  PRINT_OPERANDS_TO_SUPPORT
+
+ private:
+  const StubId stub_id_;
+  const intptr_t resume_deopt_id_;
+  const TokenPosition token_pos_;
+
+  DISALLOW_COPY_AND_ASSIGN(SuspendInstr);
+};
+
 #undef DECLARE_INSTRUCTION
 
 class Environment : public ZoneAllocated {
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 1513ce0..9d1ffa4 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -6503,8 +6503,8 @@
               EBP, compiler::target::frame_layout.code_from_fp * kWordSize));
   // Load instructions object (active_instructions and Code::entry_point() may
   // not point to this instruction object any more; see Code::DisableDartCode).
-  __ movl(target_reg, compiler::FieldAddress(
-                          target_reg, Code::saved_instructions_offset()));
+  __ movl(target_reg,
+          compiler::FieldAddress(target_reg, Code::instructions_offset()));
   __ addl(target_reg,
           compiler::Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ addl(target_reg, offset);
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index 8f983bd..fd5b452 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -1370,12 +1370,21 @@
     case StubId::kInitAsync:
       name = "InitAsync";
       break;
-    case StubId::kAwait:
-      name = "Await";
-      break;
     case StubId::kInitAsyncStar:
       name = "InitAsyncStar";
       break;
+  }
+  f->Printf("%s(", name);
+  operand()->PrintTo(f);
+  f->AddString(")");
+}
+
+void SuspendInstr::PrintOperandsTo(BaseTextBuffer* f) const {
+  const char* name = "";
+  switch (stub_id_) {
+    case StubId::kAwait:
+      name = "Await";
+      break;
     case StubId::kYieldAsyncStar:
       name = "YieldAsyncStar";
       break;
diff --git a/runtime/vm/compiler/backend/linearscan.cc b/runtime/vm/compiler/backend/linearscan.cc
index 8438490..0dafbb87 100644
--- a/runtime/vm/compiler/backend/linearscan.cc
+++ b/runtime/vm/compiler/backend/linearscan.cc
@@ -645,7 +645,7 @@
         Definition* defn = (*catch_entry->initial_definitions())[i];
         LiveRange* range = GetLiveRange(defn->ssa_temp_index());
         range->DefineAt(catch_entry->start_pos());  // Defined at block entry.
-        ProcessInitialDefinition(defn, range, catch_entry);
+        ProcessInitialDefinition(defn, range, catch_entry, i);
       }
     } else if (auto entry = block->AsBlockEntryWithInitialDefs()) {
       ASSERT(block->IsFunctionEntry() || block->IsOsrEntry());
@@ -658,13 +658,13 @@
               GetLiveRange(ToSecondPairVreg(defn->ssa_temp_index()));
           range->AddUseInterval(entry->start_pos(), entry->start_pos() + 2);
           range->DefineAt(entry->start_pos());
-          ProcessInitialDefinition(defn, range, entry,
+          ProcessInitialDefinition(defn, range, entry, i,
                                    /*second_location_for_definition=*/true);
         }
         LiveRange* range = GetLiveRange(defn->ssa_temp_index());
         range->AddUseInterval(entry->start_pos(), entry->start_pos() + 2);
         range->DefineAt(entry->start_pos());
-        ProcessInitialDefinition(defn, range, entry);
+        ProcessInitialDefinition(defn, range, entry, i);
       }
     }
   }
@@ -679,13 +679,13 @@
       LiveRange* range = GetLiveRange(ToSecondPairVreg(defn->ssa_temp_index()));
       range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos());
       range->DefineAt(graph_entry->start_pos());
-      ProcessInitialDefinition(defn, range, graph_entry,
+      ProcessInitialDefinition(defn, range, graph_entry, i,
                                /*second_location_for_definition=*/true);
     }
     LiveRange* range = GetLiveRange(defn->ssa_temp_index());
     range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos());
     range->DefineAt(graph_entry->start_pos());
-    ProcessInitialDefinition(defn, range, graph_entry);
+    ProcessInitialDefinition(defn, range, graph_entry, i);
   }
 }
 
@@ -697,10 +697,45 @@
   }
 }
 
+bool FlowGraphAllocator::IsSuspendStateParameter(Definition* defn) {
+  if (auto param = defn->AsParameter()) {
+    if ((param->GetBlock()->IsOsrEntry() ||
+         param->GetBlock()->IsCatchBlockEntry()) &&
+        flow_graph_.SuspendStateVar() != nullptr &&
+        param->index() == flow_graph_.SuspendStateEnvIndex()) {
+      return true;
+    }
+  }
+  return false;
+}
+
+void FlowGraphAllocator::AllocateSpillSlotForInitialDefinition(
+    intptr_t slot_index,
+    intptr_t range_end) {
+  if (slot_index < spill_slots_.length()) {
+    // Multiple initial definitions could exist for the same spill slot
+    // as function could have both OsrEntry and CatchBlockEntry.
+    spill_slots_[slot_index] =
+        Utils::Maximum(spill_slots_[slot_index], range_end);
+    ASSERT(!quad_spill_slots_[slot_index]);
+    ASSERT(!untagged_spill_slots_[slot_index]);
+  } else {
+    while (spill_slots_.length() < slot_index) {
+      spill_slots_.Add(kMaxPosition);
+      quad_spill_slots_.Add(false);
+      untagged_spill_slots_.Add(false);
+    }
+    spill_slots_.Add(range_end);
+    quad_spill_slots_.Add(false);
+    untagged_spill_slots_.Add(false);
+  }
+}
+
 void FlowGraphAllocator::ProcessInitialDefinition(
     Definition* defn,
     LiveRange* range,
     BlockEntryInstr* block,
+    intptr_t initial_definition_index,
     bool second_location_for_definition) {
   // Save the range end because it may change below.
   const intptr_t range_end = range->End();
@@ -779,21 +814,30 @@
   Location spill_slot = range->spill_slot();
   if (spill_slot.IsStackSlot() && spill_slot.base_reg() == FPREG &&
       spill_slot.stack_index() <=
-          compiler::target::frame_layout.first_local_from_fp) {
+          compiler::target::frame_layout.first_local_from_fp &&
+      !IsSuspendStateParameter(defn)) {
     // On entry to the function, range is stored on the stack above the FP in
     // the same space which is used for spill slots. Update spill slot state to
     // reflect that and prevent register allocator from reusing this space as a
     // spill slot.
-    spill_slots_.Add(range_end);
-    quad_spill_slots_.Add(false);
-    untagged_spill_slots_.Add(false);
+    // Do not allocate spill slot for OSR parameter corresponding to
+    // a synthetic :suspend_state variable as it is already allocated
+    // in AllocateSpillSlotForSuspendState.
+    ASSERT(defn->IsParameter());
+    ASSERT(defn->AsParameter()->index() == initial_definition_index);
+    const intptr_t spill_slot_index =
+        -compiler::target::frame_layout.VariableIndexForFrameSlot(
+            spill_slot.stack_index());
+    AllocateSpillSlotForInitialDefinition(spill_slot_index, range_end);
     // Note, all incoming parameters are assumed to be tagged.
     MarkAsObjectAtSafepoints(range);
-  } else if (defn->IsConstant() && block->IsCatchBlockEntry()) {
+  } else if (defn->IsConstant() && block->IsCatchBlockEntry() &&
+             (initial_definition_index >=
+              flow_graph_.num_direct_parameters())) {
     // Constants at catch block entries consume spill slots.
-    spill_slots_.Add(range_end);
-    quad_spill_slots_.Add(false);
-    untagged_spill_slots_.Add(false);
+    AllocateSpillSlotForInitialDefinition(
+        initial_definition_index - flow_graph_.num_direct_parameters(),
+        range_end);
   }
 }
 
@@ -994,26 +1038,45 @@
     for (intptr_t i = 0; i < env->Length(); ++i) {
       Value* value = env->ValueAt(i);
       Definition* def = value->definition();
+
       if (def->HasPairRepresentation()) {
         locations[i] = Location::Pair(Location::Any(), Location::Any());
       } else {
         locations[i] = Location::Any();
       }
 
+      if (env->outer() == nullptr && flow_graph_.SuspendStateVar() != nullptr &&
+          i == flow_graph_.SuspendStateEnvIndex()) {
+        // Make sure synthetic :suspend_state variable gets a correct
+        // location on the stack frame. It is used by deoptimization.
+        const intptr_t slot_index =
+            compiler::target::frame_layout.FrameSlotForVariable(
+                flow_graph_.parsed_function().suspend_state_var());
+        locations[i] = Location::StackSlot(slot_index, FPREG);
+        if (!def->IsConstant()) {
+          // Update live intervals for Parameter/Phi definitions
+          // corresponding to :suspend_state in OSR and try/catch cases as
+          // they are still used when resolving control flow.
+          ASSERT(def->IsParameter() || def->IsPhi());
+          ASSERT(!def->HasPairRepresentation());
+          LiveRange* range = GetLiveRange(def->ssa_temp_index());
+          range->AddUseInterval(block_start_pos, use_pos);
+        }
+        continue;
+      }
+
       if (def->IsPushArgument()) {
         // Frame size is unknown until after allocation.
         locations[i] = Location::NoLocation();
         continue;
       }
 
-      ConstantInstr* constant = def->AsConstant();
-      if (constant != NULL) {
+      if (auto constant = def->AsConstant()) {
         locations[i] = Location::Constant(constant);
         continue;
       }
 
-      MaterializeObjectInstr* mat = def->AsMaterializeObject();
-      if (mat != NULL) {
+      if (auto mat = def->AsMaterializeObject()) {
         // MaterializeObject itself produces no value. But its uses
         // are treated as part of the environment: allocated locations
         // will be used when building deoptimization data.
diff --git a/runtime/vm/compiler/backend/linearscan.h b/runtime/vm/compiler/backend/linearscan.h
index 7c16c5f..8256a1a 100644
--- a/runtime/vm/compiler/backend/linearscan.h
+++ b/runtime/vm/compiler/backend/linearscan.h
@@ -147,6 +147,7 @@
   void ProcessInitialDefinition(Definition* defn,
                                 LiveRange* range,
                                 BlockEntryInstr* block,
+                                intptr_t initial_definition_index,
                                 bool second_location_for_definition = false);
   void ConnectIncomingPhiMoves(JoinEntryInstr* join);
   void BlockLocation(Location loc, intptr_t from, intptr_t to);
@@ -249,6 +250,15 @@
   // at all safepoints.
   void UpdateStackmapsForSuspendState();
 
+  // Returns true if [defn] is an OsrEntry or CatchBlockEntry parameter
+  // corresponding to a synthetic :suspend_state variable.
+  bool IsSuspendStateParameter(Definition* defn);
+
+  // Allocates spill slot [slot_index] for the initial definition of
+  // OsrEntry or CatchBlockEntry (Parameter or Constant).
+  void AllocateSpillSlotForInitialDefinition(intptr_t slot_index,
+                                             intptr_t range_end);
+
   // Allocate the given live range to a spill slot.
   void Spill(LiveRange* range);
 
diff --git a/runtime/vm/compiler/backend/yield_position_test.cc b/runtime/vm/compiler/backend/yield_position_test.cc
index c28b700..edad705 100644
--- a/runtime/vm/compiler/backend/yield_position_test.cc
+++ b/runtime/vm/compiler/backend/yield_position_test.cc
@@ -12,11 +12,10 @@
 
 namespace dart {
 
-using Pair = std::pair<intptr_t, TokenPosition>;
-using YieldPoints = ZoneGrowableArray<Pair>;
+using YieldPoints = ZoneGrowableArray<TokenPosition>;
 
-int LowestFirst(const Pair* a, const Pair* b) {
-  return a->first - b->first;
+int LowestFirst(const TokenPosition* a, const TokenPosition* b) {
+  return a->Pos() - b->Pos();
 }
 
 static YieldPoints* GetYieldPointsFromGraph(FlowGraph* flow_graph) {
@@ -25,13 +24,8 @@
   for (auto block : blocks) {
     ForwardInstructionIterator it(block);
     while (!it.Done()) {
-      if (auto return_instr = it.Current()->AsReturn()) {
-        if (return_instr->yield_index() !=
-            UntaggedPcDescriptors::kInvalidYieldIndex) {
-          ASSERT(return_instr->yield_index() > 0);
-          array->Add(
-              Pair(return_instr->yield_index(), return_instr->token_pos()));
-        }
+      if (auto suspend_instr = it.Current()->AsSuspend()) {
+        array->Add(suspend_instr->token_pos());
       }
       it.Advance();
     }
@@ -46,7 +40,7 @@
   PcDescriptors::Iterator it(pc_descriptor, UntaggedPcDescriptors::kOther);
   while (it.MoveNext()) {
     if (it.YieldIndex() != UntaggedPcDescriptors::kInvalidYieldIndex) {
-      array->Add(Pair(it.YieldIndex(), it.TokenPos()));
+      array->Add(it.TokenPos());
     }
   }
   array->Sort(LowestFirst);
@@ -75,13 +69,7 @@
   // function for the inner closure.
   Invoke(root_library, "foo");
 
-  const auto& outer_function =
-      Function::Handle(GetFunction(root_library, "foo"));
-
-  // Grab the inner, lazily created, closure from the object store.
-  const auto& function = Function::Handle(
-      ClosureFunctionsCache::GetUniqueInnerClosure(outer_function));
-  RELEASE_ASSERT(function.IsFunction());
+  const auto& function = Function::Handle(GetFunction(root_library, "foo"));
 
   // Ensure we have 3 different return instructions with yield indices attached
   // to them.
@@ -93,12 +81,9 @@
   auto validate_indices = [](const YieldPoints& yield_points) {
     EXPECT_EQ(3, yield_points.length());
 
-    EXPECT_EQ(1, yield_points[0].first);
-    EXPECT_EQ(88, yield_points[0].second.Pos());
-    EXPECT_EQ(2, yield_points[1].first);
-    EXPECT_EQ(129, yield_points[1].second.Pos());
-    EXPECT_EQ(3, yield_points[2].first);
-    EXPECT_EQ(170, yield_points[2].second.Pos());
+    EXPECT_EQ(88, yield_points[0].Pos());
+    EXPECT_EQ(129, yield_points[1].Pos());
+    EXPECT_EQ(170, yield_points[2].Pos());
   };
 
   validate_indices(*GetYieldPointsFromGraph(flow_graph));
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index a1f6765..2badb5f 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -699,8 +699,8 @@
                             Call1ArgStubInstr::StubId::kInitAsyncStar);
     body += Drop();
     body += NullConstant();
-    body += B->Call1ArgStub(TokenPosition::kNoSource,
-                            Call1ArgStubInstr::StubId::kYieldAsyncStar);
+    body += B->Suspend(TokenPosition::kNoSource,
+                       SuspendInstr::StubId::kYieldAsyncStar);
     body += Drop();
   }
   return body;
@@ -4373,7 +4373,10 @@
 
   instructions += BuildExpression();  // read operand.
 
-  instructions += B->Call1ArgStub(pos, Call1ArgStubInstr::StubId::kAwait);
+  if (NeedsDebugStepCheck(parsed_function()->function(), pos)) {
+    instructions += DebugStepCheck(pos);
+  }
+  instructions += B->Suspend(pos, SuspendInstr::StubId::kAwait);
   return instructions;
 }
 
@@ -5305,6 +5308,9 @@
     instructions += LoadNativeField(Slot::SuspendState_function_data());
 
     instructions += BuildExpression();  // read expression.
+    if (NeedsDebugStepCheck(parsed_function()->function(), pos)) {
+      instructions += DebugStepCheck(pos);
+    }
 
     auto& add_method = Function::ZoneHandle(Z);
     const bool is_yield_star = (flags & kYieldStatementFlagYieldStar) != 0;
@@ -5314,15 +5320,15 @@
     } else {
       add_method = IG->object_store()->async_star_stream_controller_add();
     }
-    instructions += StaticCall(pos, add_method, 2, ICData::kNoRebind);
+    instructions +=
+        StaticCall(TokenPosition::kNoSource, add_method, 2, ICData::kNoRebind);
 
     if (is_yield_star) {
       // Discard result of _AsyncStarStreamController.addStream().
       instructions += Drop();
       // Suspend and test value passed to the resumed async* body.
       instructions += NullConstant();
-      instructions +=
-          B->Call1ArgStub(pos, Call1ArgStubInstr::StubId::kYieldAsyncStar);
+      instructions += B->Suspend(pos, SuspendInstr::StubId::kYieldAsyncStar);
     } else {
       // Test value returned by _AsyncStarStreamController.add().
     }
@@ -5339,8 +5345,7 @@
     instructions = Fragment(instructions.entry, continue_execution);
     if (!is_yield_star) {
       instructions += NullConstant();
-      instructions +=
-          B->Call1ArgStub(pos, Call1ArgStubInstr::StubId::kYieldAsyncStar);
+      instructions += B->Suspend(pos, SuspendInstr::StubId::kYieldAsyncStar);
       instructions += Drop();
     }
 
@@ -5586,9 +5591,6 @@
         }
 
         if (function_node_helper.async_marker_ == FunctionNodeHelper::kAsync) {
-          if (!FLAG_precompiled_mode) {
-            FATAL("Compact async functions are only supported in AOT mode.");
-          }
           function.set_modifier(UntaggedFunction::kAsync);
           function.set_is_debuggable(true);
           function.set_is_inlinable(false);
@@ -5596,9 +5598,6 @@
           ASSERT(function.IsCompactAsyncFunction());
         } else if (function_node_helper.async_marker_ ==
                    FunctionNodeHelper::kAsyncStar) {
-          if (!FLAG_precompiled_mode) {
-            FATAL("Compact async* functions are only supported in AOT mode.");
-          }
           function.set_modifier(UntaggedFunction::kAsyncGen);
           function.set_is_debuggable(true);
           function.set_is_inlinable(false);
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 8a20c37..4d50fc7 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -4254,6 +4254,15 @@
   return Fragment(instr);
 }
 
+Fragment FlowGraphBuilder::Suspend(TokenPosition position,
+                                   SuspendInstr::StubId stub_id) {
+  SuspendInstr* instr =
+      new (Z) SuspendInstr(InstructionSource(position), stub_id, Pop(),
+                           GetNextDeoptId(), GetNextDeoptId());
+  Push(instr);
+  return Fragment(instr);
+}
+
 Fragment FlowGraphBuilder::WrapTypedDataBaseInCompound(
     const AbstractType& compound_type) {
   const auto& compound_sub_class =
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index ff641cc..fcb4245 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -424,6 +424,9 @@
   Fragment Call1ArgStub(TokenPosition position,
                         Call1ArgStubInstr::StubId stub_id);
 
+  // Generates Suspend instruction.
+  Fragment Suspend(TokenPosition position, SuspendInstr::StubId stub_id);
+
   LocalVariable* LookupVariable(intptr_t kernel_offset);
 
   // Build type argument type checks for the current function.
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index d52cc58..7dba48a 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -1891,9 +1891,11 @@
   Zone* zone = thread->zone();
   intptr_t unit_count = helper_->ReadUInt();
   Array& loading_units = Array::Handle(zone, Array::New(unit_count + 1));
+  Array& loading_unit_uris = Array::Handle(zone, Array::New(unit_count + 1));
   LoadingUnit& unit = LoadingUnit::Handle(zone);
   LoadingUnit& parent = LoadingUnit::Handle(zone);
   Library& lib = Library::Handle(zone);
+  Array& uris = Array::Handle(zone);
 
   for (int i = 0; i < unit_count; i++) {
     intptr_t id = helper_->ReadUInt();
@@ -1907,6 +1909,7 @@
     unit.set_parent(parent);
 
     intptr_t library_count = helper_->ReadUInt();
+    uris = Array::New(library_count);
     for (intptr_t j = 0; j < library_count; j++) {
       const String& uri =
           translation_helper_.DartSymbolPlain(helper_->ReadStringReference());
@@ -1915,14 +1918,18 @@
         FATAL1("Missing library: %s\n", uri.ToCString());
       }
       lib.set_loading_unit(unit);
+      uris.SetAt(j, uri);
     }
 
     loading_units.SetAt(id, unit);
+    loading_unit_uris.SetAt(id, uris);
   }
 
   ObjectStore* object_store = IG->object_store();
   ASSERT(object_store->loading_units() == Array::null());
   object_store->set_loading_units(loading_units);
+  ASSERT(object_store->loading_unit_uris() == Array::null());
+  object_store->set_loading_unit_uris(loading_unit_uris);
 }
 
 CallSiteAttributesMetadataHelper::CallSiteAttributesMetadataHelper(
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 3ce510e..723e277 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -993,6 +993,7 @@
 
 class SuspendState : public AllStatic {
  public:
+  static word frame_capacity_offset();
   static word frame_size_offset();
   static word pc_offset();
   static word function_data_offset();
@@ -1003,6 +1004,8 @@
   static word HeaderSize();
   static word InstanceSize();
   static word InstanceSize(word payload_size);
+  static word FrameSizeGrowthGap();
+
   FINAL_CLASS();
 };
 
@@ -1203,6 +1206,10 @@
   static word null_cast_error_shared_with_fpu_regs_stub_offset();
   static word range_error_shared_without_fpu_regs_stub_offset();
   static word range_error_shared_with_fpu_regs_stub_offset();
+  static word resume_stub_offset();
+  static word return_async_not_future_stub_offset();
+  static word return_async_star_stub_offset();
+  static word return_async_stub_offset();
   static word stack_overflow_shared_without_fpu_regs_entry_point_offset();
   static word stack_overflow_shared_without_fpu_regs_stub_offset();
   static word stack_overflow_shared_with_fpu_regs_entry_point_offset();
@@ -1214,6 +1221,7 @@
   static word allocate_object_stub_offset();
   static word allocate_object_parameterized_stub_offset();
   static word allocate_object_slow_stub_offset();
+  static word async_exception_handler_stub_offset();
   static word optimize_stub_offset();
   static word deoptimize_stub_offset();
   static word enter_safepoint_stub_offset();
@@ -1276,6 +1284,15 @@
   static word int_type_offset();
   static word string_type_offset();
   static word type_type_offset();
+
+  static word suspend_state_await_offset();
+  static word suspend_state_handle_exception_offset();
+  static word suspend_state_init_async_offset();
+  static word suspend_state_init_async_star_offset();
+  static word suspend_state_return_async_offset();
+  static word suspend_state_return_async_not_future_offset();
+  static word suspend_state_return_async_star_offset();
+  static word suspend_state_yield_async_star_offset();
 };
 
 class Isolate : public AllStatic {
@@ -1287,6 +1304,7 @@
   static word finalizers_offset();
 #if !defined(PRODUCT)
   static word single_step_offset();
+  static word has_resumption_breakpoints_offset();
 #endif  // !defined(PRODUCT)
 };
 
@@ -1355,7 +1373,8 @@
 
   static word object_pool_offset();
   static word entry_point_offset(CodeEntryKind kind = CodeEntryKind::kNormal);
-  static word saved_instructions_offset();
+  static word active_instructions_offset();
+  static word instructions_offset();
   static word owner_offset();
   static word HeaderSize();
   static word InstanceSize();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index c3a19ca..fa6301e 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -18,10 +18,14 @@
 #if !defined(PRODUCT)
 
 #if defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    56;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     72;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 4;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 12;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -132,9 +136,8 @@
     Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    24;
 static constexpr dart::compiler::target::word Code_owner_offset = 28;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 4;
 static constexpr dart::compiler::target::word Context_parent_offset = 8;
@@ -182,6 +185,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 40;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 45;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -224,6 +229,22 @@
     188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -242,124 +263,128 @@
 static constexpr dart::compiler::target::word String_hash_offset = 8;
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 20;
+    SuspendState_error_callback_offset = 24;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    4;
+    8;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 12;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+    SuspendState_function_data_offset = 16;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 28;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 12;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 16;
+    SuspendState_then_callback_offset = 20;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 380;
+    Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    792;
+    816;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 272;
+    Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 288;
+    Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 292;
+    Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 296;
+    Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 832;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 856;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 276;
+    Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 856;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 880;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 836;
+    Thread_double_truncate_round_supported_offset = 860;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 860;
+    Thread_service_extension_stream_offset = 884;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    316;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
+    336;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    320;
+    340;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    232;
+    252;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    360;
+    380;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 356;
+    Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 252;
+    Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    812;
+    836;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 256;
+    Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 264;
+    Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 324;
+    Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 372;
+    Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 368;
+    Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    364;
+    384;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 376;
+    Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    800;
+    824;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    828;
+    852;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 864;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 888;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 236;
+    Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 240;
+    Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 248;
+    Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 308;
+    Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 312;
+    Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 212;
+    Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -380,49 +405,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 208;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    212;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 804;
+    Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 828;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 808;
+    Thread_saved_shadow_call_stack_offset = 832;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    816;
+    840;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 244;
+    Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 332;
+    Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 764;
+    Thread_suspend_state_await_entry_point_offset = 788;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 760;
+    Thread_suspend_state_init_async_entry_point_offset = 784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 768;
+    Thread_suspend_state_return_async_entry_point_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 796;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 776;
+    Thread_suspend_state_init_async_star_entry_point_offset = 800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 780;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 804;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 784;
+    Thread_suspend_state_return_async_star_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 788;
+    Thread_suspend_state_handle_exception_entry_point_offset = 812;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -433,17 +465,17 @@
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 268;
+    Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 820;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 844;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 824;
-static constexpr dart::compiler::target::word Thread_random_offset = 840;
+    Thread_callback_stack_return_offset = 848;
+static constexpr dart::compiler::target::word Thread_random_offset = 864;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 848;
+    Thread_jump_to_frame_entry_point_offset = 348;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 872;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -536,7 +568,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        752, 756, 760, 764, 768, -1, 772, -1, 776, 780, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -610,7 +642,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 28;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -635,10 +667,14 @@
 #endif  // defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     112;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 24;
 static constexpr dart::compiler::target::word Array_element_size = 8;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -752,9 +788,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 16;
@@ -802,6 +837,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -844,6 +881,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -863,126 +916,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 40;
+    SuspendState_error_callback_offset = 48;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 56;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 32;
+    SuspendState_then_callback_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1752;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1712;
+    Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -1003,49 +1060,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1528;
+    Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1520;
+    Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1536;
+    Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -1056,18 +1120,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word Thread_random_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1736;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1162,8 +1226,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -1237,7 +1301,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 56;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -1263,10 +1327,14 @@
 #endif  // defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_IA32) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    56;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     72;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 4;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 12;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -1377,9 +1445,8 @@
     Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    24;
 static constexpr dart::compiler::target::word Code_owner_offset = 28;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 4;
 static constexpr dart::compiler::target::word Context_parent_offset = 8;
@@ -1427,6 +1494,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 40;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 45;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -1469,6 +1538,22 @@
     188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -1487,124 +1572,128 @@
 static constexpr dart::compiler::target::word String_hash_offset = 8;
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 20;
+    SuspendState_error_callback_offset = 24;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    4;
+    8;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 12;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+    SuspendState_function_data_offset = 16;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 28;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 12;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 16;
+    SuspendState_then_callback_offset = 20;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 380;
+    Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    760;
+    784;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    764;
+    788;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 272;
+    Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 288;
+    Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 292;
+    Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 296;
+    Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 800;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 276;
+    Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 804;
+    Thread_double_truncate_round_supported_offset = 828;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 828;
+    Thread_service_extension_stream_offset = 852;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    316;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
+    336;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    320;
+    340;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    232;
+    252;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    360;
+    380;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 356;
+    Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 252;
+    Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    780;
+    804;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 256;
+    Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 264;
+    Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 324;
+    Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 372;
+    Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 368;
+    Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    364;
+    384;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 376;
+    Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    768;
+    792;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 832;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 856;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 236;
+    Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 240;
+    Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 248;
+    Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 308;
+    Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 312;
+    Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 212;
+    Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -1625,49 +1714,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 208;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    212;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 772;
+    Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 796;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 776;
+    Thread_saved_shadow_call_stack_offset = 800;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    784;
+    808;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 244;
+    Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 332;
+    Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 732;
+    Thread_suspend_state_await_entry_point_offset = 756;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 728;
+    Thread_suspend_state_init_async_entry_point_offset = 752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 736;
+    Thread_suspend_state_return_async_entry_point_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 740;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 764;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 744;
+    Thread_suspend_state_init_async_star_entry_point_offset = 768;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 748;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 772;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 752;
+    Thread_suspend_state_return_async_star_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 756;
+    Thread_suspend_state_handle_exception_entry_point_offset = 780;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -1678,17 +1774,17 @@
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 268;
+    Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 788;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 812;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 792;
-static constexpr dart::compiler::target::word Thread_random_offset = 808;
+    Thread_callback_stack_return_offset = 816;
+static constexpr dart::compiler::target::word Thread_random_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
+    Thread_jump_to_frame_entry_point_offset = 348;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 840;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1852,7 +1948,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 28;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -1877,10 +1973,14 @@
 #endif  // defined(TARGET_ARCH_IA32) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     112;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 24;
 static constexpr dart::compiler::target::word Array_element_size = 8;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -1994,9 +2094,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 16;
@@ -2044,6 +2143,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -2086,6 +2187,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -2105,126 +2222,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 40;
+    SuspendState_error_callback_offset = 48;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 56;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 32;
+    SuspendState_then_callback_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1768;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1736;
+    Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1776;
+    Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -2245,49 +2366,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1672;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1680;
+    Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1592;
+    Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1584;
+    Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1600;
+    Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -2298,18 +2426,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word Thread_random_offset = 1744;
+    Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word Thread_random_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1752;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1800;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2404,9 +2532,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -2480,7 +2608,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 56;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -2506,10 +2634,14 @@
 #endif  // defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     80;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 16;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -2620,9 +2752,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 12;
@@ -2670,6 +2801,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -2712,6 +2845,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -2731,126 +2880,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 32;
+    SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 28;
+    SuspendState_then_callback_offset = 36;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1752;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1712;
+    Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -2871,49 +3024,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1528;
+    Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1520;
+    Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1536;
+    Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -2924,18 +3084,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word Thread_random_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1736;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3030,8 +3190,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -3105,7 +3265,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -3131,10 +3291,14 @@
 #endif  // defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     80;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 16;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -3245,9 +3409,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 12;
@@ -3295,6 +3458,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -3337,6 +3502,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -3356,126 +3537,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 32;
+    SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 28;
+    SuspendState_then_callback_offset = 36;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1768;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1736;
+    Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1776;
+    Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -3496,49 +3681,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1672;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1680;
+    Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1592;
+    Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1584;
+    Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1600;
+    Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -3549,18 +3741,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word Thread_random_offset = 1744;
+    Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word Thread_random_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1752;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1800;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3655,9 +3847,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -3731,7 +3923,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -3757,10 +3949,14 @@
 #endif  // defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    56;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     72;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 4;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 12;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -3871,9 +4067,8 @@
     Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    24;
 static constexpr dart::compiler::target::word Code_owner_offset = 28;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 4;
 static constexpr dart::compiler::target::word Context_parent_offset = 8;
@@ -3921,6 +4116,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 40;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 45;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -3963,6 +4160,22 @@
     188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -3981,124 +4194,128 @@
 static constexpr dart::compiler::target::word String_hash_offset = 8;
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 20;
+    SuspendState_error_callback_offset = 24;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    4;
+    8;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 12;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+    SuspendState_function_data_offset = 16;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 28;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 12;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 16;
+    SuspendState_then_callback_offset = 20;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 380;
+    Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    836;
+    860;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 272;
+    Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 288;
+    Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 292;
+    Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 296;
+    Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 872;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 896;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 276;
+    Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 896;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 920;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 876;
+    Thread_double_truncate_round_supported_offset = 900;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 900;
+    Thread_service_extension_stream_offset = 924;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    316;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
+    336;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    320;
+    340;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    232;
+    252;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    360;
+    380;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 356;
+    Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 252;
+    Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    852;
+    876;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 256;
+    Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 264;
+    Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 324;
+    Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 372;
+    Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 368;
+    Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    364;
+    384;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 376;
+    Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    840;
+    864;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    868;
+    892;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 904;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 928;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 236;
+    Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 240;
+    Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 248;
+    Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 308;
+    Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 312;
+    Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 212;
+    Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -4119,49 +4336,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 208;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    212;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 844;
+    Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 868;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 848;
+    Thread_saved_shadow_call_stack_offset = 872;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    856;
+    880;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 244;
+    Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 332;
+    Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 804;
+    Thread_suspend_state_await_entry_point_offset = 828;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 800;
+    Thread_suspend_state_init_async_entry_point_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 808;
+    Thread_suspend_state_return_async_entry_point_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 816;
+    Thread_suspend_state_init_async_star_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 820;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 844;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 824;
+    Thread_suspend_state_return_async_star_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 828;
+    Thread_suspend_state_handle_exception_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -4172,17 +4396,17 @@
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 268;
+    Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 860;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 884;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 864;
-static constexpr dart::compiler::target::word Thread_random_offset = 880;
+    Thread_callback_stack_return_offset = 888;
+static constexpr dart::compiler::target::word Thread_random_offset = 904;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 888;
+    Thread_jump_to_frame_entry_point_offset = 348;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 912;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4275,9 +4499,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 752, 756, 760, -1,  -1,  764,
+        768, 772, -1, -1, -1, 776, 780, 784, 788, 792, 796,
+        800, 804, -1, -1, -1, -1,  808, 812, 816, 820};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -4351,7 +4575,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 28;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -4376,10 +4600,14 @@
 #endif  // defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_RISCV64) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     112;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 24;
 static constexpr dart::compiler::target::word Array_element_size = 8;
 static constexpr dart::compiler::target::word ClassTable_elements_start_offset =
@@ -4493,9 +4721,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 16;
@@ -4543,6 +4770,8 @@
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
 static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
+static constexpr dart::compiler::target::word
+    Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -4585,6 +4814,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -4604,126 +4849,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 40;
+    SuspendState_error_callback_offset = 48;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 56;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 32;
+    SuspendState_then_callback_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1760;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1808;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1728;
+    Thread_double_truncate_round_supported_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1768;
+    Thread_service_extension_stream_offset = 1816;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1680;
+    1728;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1776;
+    1824;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -4744,49 +4993,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1664;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1672;
+    Thread_saved_shadow_call_stack_offset = 1720;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1584;
+    Thread_suspend_state_await_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1576;
+    Thread_suspend_state_init_async_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1592;
+    Thread_suspend_state_return_async_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1608;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1616;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1624;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1632;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -4797,18 +5053,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1704;
-static constexpr dart::compiler::target::word Thread_random_offset = 1736;
+    Thread_callback_stack_return_offset = 1752;
+static constexpr dart::compiler::target::word Thread_random_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1744;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1792;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4903,9 +5159,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1480, 1488, 1496, -1,   -1,   1504,
+        1512, 1520, -1, -1, -1, 1528, 1536, 1544, 1552, 1560, 1568,
+        1576, 1584, -1, -1, -1, -1,   1592, 1600, 1608, 1616};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -4979,7 +5235,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 56;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -5007,10 +5263,14 @@
 #else  // !defined(PRODUCT)
 
 #if defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    56;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     72;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 4;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 12;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 76;
@@ -5116,9 +5376,8 @@
     Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    24;
 static constexpr dart::compiler::target::word Code_owner_offset = 28;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 4;
 static constexpr dart::compiler::target::word Context_parent_offset = 8;
@@ -5207,6 +5466,22 @@
     188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -5225,124 +5500,128 @@
 static constexpr dart::compiler::target::word String_hash_offset = 8;
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 20;
+    SuspendState_error_callback_offset = 24;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    4;
+    8;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 12;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+    SuspendState_function_data_offset = 16;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 28;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 12;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 16;
+    SuspendState_then_callback_offset = 20;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 380;
+    Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    792;
+    816;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 272;
+    Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 288;
+    Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 292;
+    Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 296;
+    Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 832;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 856;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 276;
+    Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 856;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 880;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 836;
+    Thread_double_truncate_round_supported_offset = 860;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 860;
+    Thread_service_extension_stream_offset = 884;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    316;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
+    336;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    320;
+    340;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    232;
+    252;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    360;
+    380;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 356;
+    Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 252;
+    Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    812;
+    836;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 256;
+    Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 264;
+    Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 324;
+    Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 372;
+    Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 368;
+    Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    364;
+    384;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 376;
+    Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    800;
+    824;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    828;
+    852;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 864;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 888;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 236;
+    Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 240;
+    Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 248;
+    Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 308;
+    Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 312;
+    Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 212;
+    Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -5363,49 +5642,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 208;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    212;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 804;
+    Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 828;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 808;
+    Thread_saved_shadow_call_stack_offset = 832;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    816;
+    840;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 244;
+    Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 332;
+    Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 764;
+    Thread_suspend_state_await_entry_point_offset = 788;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 760;
+    Thread_suspend_state_init_async_entry_point_offset = 784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 768;
+    Thread_suspend_state_return_async_entry_point_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 796;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 776;
+    Thread_suspend_state_init_async_star_entry_point_offset = 800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 780;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 804;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 784;
+    Thread_suspend_state_return_async_star_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 788;
+    Thread_suspend_state_handle_exception_entry_point_offset = 812;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -5416,17 +5702,17 @@
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 268;
+    Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 820;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 844;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 824;
-static constexpr dart::compiler::target::word Thread_random_offset = 840;
+    Thread_callback_stack_return_offset = 848;
+static constexpr dart::compiler::target::word Thread_random_offset = 864;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 848;
+    Thread_jump_to_frame_entry_point_offset = 348;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 872;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5519,7 +5805,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        752, 756, 760, 764, 768, -1, 772, -1, 776, 780, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -5593,7 +5879,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 28;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -5618,10 +5904,14 @@
 #endif  // defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     112;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 24;
 static constexpr dart::compiler::target::word Array_element_size = 8;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 144;
@@ -5730,9 +6020,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 16;
@@ -5821,6 +6110,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -5840,126 +6145,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 40;
+    SuspendState_error_callback_offset = 48;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 56;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 32;
+    SuspendState_then_callback_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1752;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1712;
+    Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -5980,49 +6289,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1528;
+    Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1520;
+    Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1536;
+    Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -6033,18 +6349,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word Thread_random_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1736;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6139,8 +6455,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -6214,7 +6530,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 56;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -6240,10 +6556,14 @@
 #endif  // defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_IA32) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    56;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     72;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 4;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 12;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 76;
@@ -6349,9 +6669,8 @@
     Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    24;
 static constexpr dart::compiler::target::word Code_owner_offset = 28;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 4;
 static constexpr dart::compiler::target::word Context_parent_offset = 8;
@@ -6440,6 +6759,22 @@
     188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -6458,124 +6793,128 @@
 static constexpr dart::compiler::target::word String_hash_offset = 8;
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 20;
+    SuspendState_error_callback_offset = 24;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    4;
+    8;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 12;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+    SuspendState_function_data_offset = 16;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 28;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 12;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 16;
+    SuspendState_then_callback_offset = 20;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 380;
+    Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    760;
+    784;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    764;
+    788;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 272;
+    Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 288;
+    Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 292;
+    Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 296;
+    Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 800;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 276;
+    Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 804;
+    Thread_double_truncate_round_supported_offset = 828;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 828;
+    Thread_service_extension_stream_offset = 852;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    316;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
+    336;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    320;
+    340;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    232;
+    252;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    360;
+    380;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 356;
+    Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 252;
+    Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    780;
+    804;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 256;
+    Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 264;
+    Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 324;
+    Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 372;
+    Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 368;
+    Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    364;
+    384;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 376;
+    Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    768;
+    792;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 832;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 856;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 236;
+    Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 240;
+    Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 248;
+    Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 308;
+    Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 312;
+    Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 212;
+    Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -6596,49 +6935,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 208;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    212;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 772;
+    Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 796;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 776;
+    Thread_saved_shadow_call_stack_offset = 800;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    784;
+    808;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 244;
+    Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 332;
+    Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 732;
+    Thread_suspend_state_await_entry_point_offset = 756;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 728;
+    Thread_suspend_state_init_async_entry_point_offset = 752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 736;
+    Thread_suspend_state_return_async_entry_point_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 740;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 764;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 744;
+    Thread_suspend_state_init_async_star_entry_point_offset = 768;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 748;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 772;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 752;
+    Thread_suspend_state_return_async_star_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 756;
+    Thread_suspend_state_handle_exception_entry_point_offset = 780;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -6649,17 +6995,17 @@
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 268;
+    Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 788;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 812;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 792;
-static constexpr dart::compiler::target::word Thread_random_offset = 808;
+    Thread_callback_stack_return_offset = 816;
+static constexpr dart::compiler::target::word Thread_random_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
+    Thread_jump_to_frame_entry_point_offset = 348;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 840;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6823,7 +7169,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 28;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -6848,10 +7194,14 @@
 #endif  // defined(TARGET_ARCH_IA32) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     112;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 24;
 static constexpr dart::compiler::target::word Array_element_size = 8;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 144;
@@ -6960,9 +7310,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 16;
@@ -7051,6 +7400,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -7070,126 +7435,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 40;
+    SuspendState_error_callback_offset = 48;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 56;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 32;
+    SuspendState_then_callback_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1768;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1736;
+    Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1776;
+    Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -7210,49 +7579,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1672;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1680;
+    Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1592;
+    Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1584;
+    Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1600;
+    Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -7263,18 +7639,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word Thread_random_offset = 1744;
+    Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word Thread_random_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1752;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1800;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7369,9 +7745,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -7445,7 +7821,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 56;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -7471,10 +7847,14 @@
 #endif  // defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     80;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 16;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 144;
@@ -7580,9 +7960,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 12;
@@ -7671,6 +8050,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -7690,126 +8085,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 32;
+    SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 28;
+    SuspendState_then_callback_offset = 36;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1752;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1712;
+    Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -7830,49 +8229,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1528;
+    Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1520;
+    Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1536;
+    Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -7883,18 +8289,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word Thread_random_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1736;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7989,8 +8395,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -8064,7 +8470,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -8090,10 +8496,14 @@
 #endif  // defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     80;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 16;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 144;
@@ -8199,9 +8609,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 12;
@@ -8290,6 +8699,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -8309,126 +8734,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 32;
+    SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 28;
+    SuspendState_then_callback_offset = 36;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1768;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1736;
+    Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1776;
+    Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -8449,49 +8878,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1672;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1680;
+    Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1592;
+    Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1584;
+    Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1600;
+    Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -8502,18 +8938,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word Thread_random_offset = 1744;
+    Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word Thread_random_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1752;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1800;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8608,9 +9044,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -8684,7 +9120,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -8710,10 +9146,14 @@
 #endif  // defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    56;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     72;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 4;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 12;
 static constexpr dart::compiler::target::word Array_element_size = 4;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 76;
@@ -8819,9 +9259,8 @@
     Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    24;
 static constexpr dart::compiler::target::word Code_owner_offset = 28;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 4;
 static constexpr dart::compiler::target::word Context_parent_offset = 8;
@@ -8910,6 +9349,22 @@
     188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -8928,124 +9383,128 @@
 static constexpr dart::compiler::target::word String_hash_offset = 8;
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 20;
+    SuspendState_error_callback_offset = 24;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    4;
+    8;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 12;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+    SuspendState_function_data_offset = 16;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 28;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 12;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 16;
+    SuspendState_then_callback_offset = 20;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 380;
+    Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    836;
+    860;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 272;
+    Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 288;
+    Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 292;
+    Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 296;
+    Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 872;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 896;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 276;
+    Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 896;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 920;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 876;
+    Thread_double_truncate_round_supported_offset = 900;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 900;
+    Thread_service_extension_stream_offset = 924;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    316;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
+    336;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    320;
+    340;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    232;
+    252;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    360;
+    380;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 356;
+    Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 252;
+    Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    852;
+    876;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 256;
+    Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 264;
+    Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 324;
+    Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 372;
+    Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 368;
+    Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    364;
+    384;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 376;
+    Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    840;
+    864;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    868;
+    892;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 904;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 928;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 236;
+    Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 240;
+    Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 248;
+    Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 308;
+    Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 312;
+    Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 212;
+    Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -9066,49 +9525,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 208;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    212;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 844;
+    Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 868;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 848;
+    Thread_saved_shadow_call_stack_offset = 872;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    856;
+    880;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 244;
+    Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 332;
+    Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 804;
+    Thread_suspend_state_await_entry_point_offset = 828;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 800;
+    Thread_suspend_state_init_async_entry_point_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 808;
+    Thread_suspend_state_return_async_entry_point_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 816;
+    Thread_suspend_state_init_async_star_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 820;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 844;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 824;
+    Thread_suspend_state_return_async_star_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 828;
+    Thread_suspend_state_handle_exception_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -9119,17 +9585,17 @@
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 268;
+    Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 860;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 884;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 864;
-static constexpr dart::compiler::target::word Thread_random_offset = 880;
+    Thread_callback_stack_return_offset = 888;
+static constexpr dart::compiler::target::word Thread_random_offset = 904;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 888;
+    Thread_jump_to_frame_entry_point_offset = 348;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 912;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -9222,9 +9688,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 752, 756, 760, -1,  -1,  764,
+        768, 772, -1, -1, -1, 776, 780, 784, 788, 792, 796,
+        800, 804, -1, -1, -1, -1,  808, 812, 816, 820};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -9298,7 +9764,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 28;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -9323,10 +9789,14 @@
 #endif  // defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
 
 #if defined(TARGET_ARCH_RISCV64) && !defined(DART_COMPRESSED_POINTERS)
+static constexpr dart::compiler::target::word Code_active_instructions_offset =
+    112;
 static constexpr dart::compiler::target::word Function_usage_counter_offset =
     112;
 static constexpr dart::compiler::target::word
     ICData_receivers_static_type_offset = 32;
+static constexpr dart::compiler::target::word
+    SuspendState_frame_capacity_offset = 8;
 static constexpr dart::compiler::target::word Array_elements_start_offset = 24;
 static constexpr dart::compiler::target::word Array_element_size = 8;
 static constexpr dart::compiler::target::word Code_elements_start_offset = 144;
@@ -9435,9 +9905,8 @@
     Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word Code_saved_instructions_offset =
-    48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
 static constexpr dart::compiler::target::word Context_parent_offset = 16;
@@ -9526,6 +9995,22 @@
     376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -9545,126 +10030,130 @@
 static constexpr dart::compiler::target::word String_hash_offset = 4;
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
+static constexpr dart::compiler::target::word SuspendState_FrameSizeGrowthGap =
+    2;
 static constexpr dart::compiler::target::word
-    SuspendState_error_callback_offset = 40;
+    SuspendState_error_callback_offset = 48;
 static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
-    8;
+    16;
 static constexpr dart::compiler::target::word
-    SuspendState_function_data_offset = 24;
-static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
-static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+    SuspendState_function_data_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 56;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 24;
 static constexpr dart::compiler::target::word
-    SuspendState_then_callback_offset = 32;
+    SuspendState_then_callback_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 736;
+    Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 520;
+    Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 552;
+    Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 560;
+    Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 568;
+    Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 528;
+    Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1760;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1808;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1728;
+    Thread_double_truncate_round_supported_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1768;
+    Thread_service_extension_stream_offset = 1816;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
+    648;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    616;
+    656;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    480;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    696;
+    736;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 688;
+    Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1680;
+    1728;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 504;
+    Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 624;
+    Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 720;
+    Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 712;
+    Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    704;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 728;
+    Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1776;
+    1824;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 592;
+    Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 600;
+    Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -9685,49 +10174,56 @@
     Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word Thread_resume_stub_offset = 392;
+static constexpr dart::compiler::target::word
+    Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word Thread_return_async_stub_offset =
+    400;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1664;
+    Thread_predefined_symbols_address_offset = 712;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1672;
+    Thread_saved_shadow_call_stack_offset = 1720;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 640;
+    Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_await_entry_point_offset = 1584;
+    Thread_suspend_state_await_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_entry_point_offset = 1576;
+    Thread_suspend_state_init_async_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1592;
+    Thread_suspend_state_return_async_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1608;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1616;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1624;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1632;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -9738,18 +10234,18 @@
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 512;
+    Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1704;
-static constexpr dart::compiler::target::word Thread_random_offset = 1736;
+    Thread_callback_stack_return_offset = 1752;
+static constexpr dart::compiler::target::word Thread_random_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1744;
+    Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1792;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -9844,9 +10340,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1480, 1488, 1496, -1,   -1,   1504,
+        1512, 1520, -1, -1, -1, 1528, 1536, 1544, 1552, 1560, 1568,
+        1576, 1584, -1, -1, -1, -1,   1592, 1600, 1608, 1616};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -9920,7 +10416,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
-static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 56;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -10073,9 +10569,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 28;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     4;
@@ -10129,6 +10624,8 @@
     28;
 static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
     40;
+static constexpr dart::compiler::target::word
+    AOT_Isolate_has_resumption_breakpoints_offset = 45;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     32;
 static constexpr dart::compiler::target::word
@@ -10180,6 +10677,22 @@
     AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -10203,6 +10716,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 20;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 4;
@@ -10214,118 +10729,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 16;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 380;
+    AOT_Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 792;
+    AOT_Thread_active_exception_offset = 816;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 796;
+    AOT_Thread_active_stacktrace_offset = 820;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 272;
+    AOT_Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 288;
+    AOT_Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 296;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 276;
+    AOT_Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    856;
+    880;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 836;
+    AOT_Thread_double_truncate_round_supported_offset = 860;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 860;
+    AOT_Thread_service_extension_stream_offset = 884;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    316;
+    336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    228;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 320;
+    AOT_Thread_deoptimize_entry_offset = 340;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 232;
+    AOT_Thread_deoptimize_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 360;
+    AOT_Thread_double_abs_address_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 356;
+    AOT_Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 252;
+    AOT_Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 812;
+    AOT_Thread_execution_state_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 256;
+    AOT_Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 264;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 372;
+    AOT_Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 368;
+    AOT_Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 364;
+    AOT_Thread_float_not_address_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 376;
+    AOT_Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 800;
+    AOT_Thread_global_object_pool_offset = 824;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 828;
+    AOT_Thread_exit_through_ffi_offset = 852;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    864;
+    888;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 236;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 248;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 308;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 312;
+    AOT_Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 212;
+    AOT_Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -10347,19 +10864,27 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    208;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 804;
+    AOT_Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 828;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 808;
+    AOT_Thread_saved_shadow_call_stack_offset = 832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 816;
+    AOT_Thread_safepoint_state_offset = 840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 244;
+    AOT_Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 332;
+    AOT_Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -10367,31 +10892,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 764;
+    AOT_Thread_suspend_state_await_entry_point_offset = 788;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 760;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 768;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 796;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 776;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 780;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 804;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 784;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 788;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 812;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -10403,19 +10928,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 268;
+    AOT_Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    820;
+    844;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 824;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 840;
+    AOT_Thread_callback_stack_return_offset = 848;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 328;
+    AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    848;
+    872;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -10528,7 +11053,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        752, 756, 760, 764, 768, -1, 772, -1, 776, 780, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -10769,9 +11294,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -10825,6 +11349,8 @@
     56;
 static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
     80;
+static constexpr dart::compiler::target::word
+    AOT_Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -10876,6 +11402,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -10899,6 +11441,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -10910,118 +11454,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1712;
+    AOT_Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1704;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -11043,20 +11589,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -11064,31 +11618,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1528;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -11100,20 +11654,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1728;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1736;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -11226,8 +11780,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11471,9 +12025,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -11527,6 +12080,8 @@
     56;
 static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
     80;
+static constexpr dart::compiler::target::word
+    AOT_Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -11578,6 +12133,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -11601,6 +12172,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -11612,118 +12185,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1648;
+    AOT_Thread_active_exception_offset = 1696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1656;
+    AOT_Thread_active_stacktrace_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1768;
+    1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1736;
+    AOT_Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1776;
+    AOT_Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1688;
+    AOT_Thread_execution_state_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1664;
+    AOT_Thread_global_object_pool_offset = 1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1720;
+    AOT_Thread_exit_through_ffi_offset = 1768;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -11745,20 +12320,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1672;
+    1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1680;
+    AOT_Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1696;
+    AOT_Thread_safepoint_state_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -11766,31 +12349,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1592;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -11802,20 +12385,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1744;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1752;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1792;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1800;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -11928,9 +12511,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12170,9 +12753,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -12226,6 +12808,8 @@
     56;
 static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
     80;
+static constexpr dart::compiler::target::word
+    AOT_Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -12277,6 +12861,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -12300,6 +12900,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 32;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -12311,118 +12913,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 28;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1712;
+    AOT_Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1704;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -12444,20 +13048,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -12465,31 +13077,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1528;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -12501,20 +13113,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1728;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1736;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -12627,8 +13239,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12868,9 +13480,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -12924,6 +13535,8 @@
     56;
 static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
     80;
+static constexpr dart::compiler::target::word
+    AOT_Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -12975,6 +13588,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -12998,6 +13627,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 32;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -13009,118 +13640,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 28;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1648;
+    AOT_Thread_active_exception_offset = 1696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1656;
+    AOT_Thread_active_stacktrace_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1768;
+    1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1736;
+    AOT_Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1776;
+    AOT_Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1688;
+    AOT_Thread_execution_state_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1664;
+    AOT_Thread_global_object_pool_offset = 1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1720;
+    AOT_Thread_exit_through_ffi_offset = 1768;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -13142,20 +13775,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1672;
+    1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1680;
+    AOT_Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1696;
+    AOT_Thread_safepoint_state_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -13163,31 +13804,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1592;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -13199,20 +13840,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1744;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1752;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1792;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1800;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -13325,9 +13966,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -13567,9 +14208,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 28;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     4;
@@ -13623,6 +14263,8 @@
     28;
 static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
     40;
+static constexpr dart::compiler::target::word
+    AOT_Isolate_has_resumption_breakpoints_offset = 45;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     32;
 static constexpr dart::compiler::target::word
@@ -13674,6 +14316,22 @@
     AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -13697,6 +14355,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 20;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 4;
@@ -13708,118 +14368,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 16;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 380;
+    AOT_Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 832;
+    AOT_Thread_active_exception_offset = 856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 836;
+    AOT_Thread_active_stacktrace_offset = 860;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 272;
+    AOT_Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 288;
+    AOT_Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 296;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    872;
+    896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 276;
+    AOT_Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    896;
+    920;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 876;
+    AOT_Thread_double_truncate_round_supported_offset = 900;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 900;
+    AOT_Thread_service_extension_stream_offset = 924;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    316;
+    336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    228;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 320;
+    AOT_Thread_deoptimize_entry_offset = 340;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 232;
+    AOT_Thread_deoptimize_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 360;
+    AOT_Thread_double_abs_address_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 356;
+    AOT_Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 252;
+    AOT_Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 852;
+    AOT_Thread_execution_state_offset = 876;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 256;
+    AOT_Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 264;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 372;
+    AOT_Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 368;
+    AOT_Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 364;
+    AOT_Thread_float_not_address_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 376;
+    AOT_Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 840;
+    AOT_Thread_global_object_pool_offset = 864;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 868;
+    AOT_Thread_exit_through_ffi_offset = 892;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    904;
+    928;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 236;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 248;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 308;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 312;
+    AOT_Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 212;
+    AOT_Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -13841,19 +14503,27 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    208;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 844;
+    AOT_Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 868;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 848;
+    AOT_Thread_saved_shadow_call_stack_offset = 872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 856;
+    AOT_Thread_safepoint_state_offset = 880;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 244;
+    AOT_Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 332;
+    AOT_Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -13861,31 +14531,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 804;
+    AOT_Thread_suspend_state_await_entry_point_offset = 828;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 800;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 808;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 816;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 820;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 844;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 824;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 828;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -13897,19 +14567,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 268;
+    AOT_Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    860;
+    884;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 864;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 880;
+    AOT_Thread_callback_stack_return_offset = 888;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 904;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 328;
+    AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    888;
+    912;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -14022,9 +14692,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 752, 756, 760, -1,  -1,  764,
+        768, 772, -1, -1, -1, 776, 780, 784, 788, 792, 796,
+        800, 804, -1, -1, -1, -1,  808, 812, 816, 820};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -14265,9 +14935,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -14321,6 +14990,8 @@
     56;
 static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
     80;
+static constexpr dart::compiler::target::word
+    AOT_Isolate_has_resumption_breakpoints_offset = 89;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -14372,6 +15043,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -14395,6 +15082,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -14406,118 +15095,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1640;
+    AOT_Thread_active_exception_offset = 1688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1648;
+    AOT_Thread_active_stacktrace_offset = 1696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1760;
+    1808;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1728;
+    AOT_Thread_double_truncate_round_supported_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1768;
+    AOT_Thread_service_extension_stream_offset = 1816;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1680;
+    AOT_Thread_execution_state_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1656;
+    AOT_Thread_global_object_pool_offset = 1704;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1712;
+    AOT_Thread_exit_through_ffi_offset = 1760;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1776;
+    1824;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -14539,20 +15230,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1672;
+    AOT_Thread_saved_shadow_call_stack_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1688;
+    AOT_Thread_safepoint_state_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -14560,31 +15259,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1584;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1576;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1592;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1608;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1616;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1624;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1632;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -14596,20 +15295,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1696;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1704;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1736;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1744;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1752;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1784;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1792;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -14722,9 +15421,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1480, 1488, 1496, -1,   -1,   1504,
+        1512, 1520, -1, -1, -1, 1528, 1536, 1544, 1552, 1560, 1568,
+        1576, 1584, -1, -1, -1, -1,   1592, 1600, 1608, 1616};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -14961,9 +15660,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 28;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     4;
@@ -15066,6 +15764,22 @@
     AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -15089,6 +15803,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 20;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 4;
@@ -15100,118 +15816,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 16;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 380;
+    AOT_Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 792;
+    AOT_Thread_active_exception_offset = 816;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 796;
+    AOT_Thread_active_stacktrace_offset = 820;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 272;
+    AOT_Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 288;
+    AOT_Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 296;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 276;
+    AOT_Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    856;
+    880;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 836;
+    AOT_Thread_double_truncate_round_supported_offset = 860;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 860;
+    AOT_Thread_service_extension_stream_offset = 884;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    316;
+    336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    228;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 320;
+    AOT_Thread_deoptimize_entry_offset = 340;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 232;
+    AOT_Thread_deoptimize_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 360;
+    AOT_Thread_double_abs_address_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 356;
+    AOT_Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 252;
+    AOT_Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 812;
+    AOT_Thread_execution_state_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 256;
+    AOT_Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 264;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 372;
+    AOT_Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 368;
+    AOT_Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 364;
+    AOT_Thread_float_not_address_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 376;
+    AOT_Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 800;
+    AOT_Thread_global_object_pool_offset = 824;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 828;
+    AOT_Thread_exit_through_ffi_offset = 852;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    864;
+    888;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 236;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 248;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 308;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 312;
+    AOT_Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 212;
+    AOT_Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -15233,19 +15951,27 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    208;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 804;
+    AOT_Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 828;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 808;
+    AOT_Thread_saved_shadow_call_stack_offset = 832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 816;
+    AOT_Thread_safepoint_state_offset = 840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 244;
+    AOT_Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 332;
+    AOT_Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -15253,31 +15979,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 764;
+    AOT_Thread_suspend_state_await_entry_point_offset = 788;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 760;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 768;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 796;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 776;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 780;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 804;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 784;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 788;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 812;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -15289,19 +16015,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 268;
+    AOT_Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    820;
+    844;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 824;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 840;
+    AOT_Thread_callback_stack_return_offset = 848;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 328;
+    AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    848;
+    872;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -15414,7 +16140,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        752, 756, 760, 764, 768, -1, 772, -1, 776, 780, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -15650,9 +16376,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -15755,6 +16480,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -15778,6 +16519,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -15789,118 +16532,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1712;
+    AOT_Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1704;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -15922,20 +16667,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -15943,31 +16696,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1528;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -15979,20 +16732,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1728;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1736;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -16105,8 +16858,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -16345,9 +17098,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -16450,6 +17202,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -16473,6 +17241,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -16484,118 +17254,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1648;
+    AOT_Thread_active_exception_offset = 1696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1656;
+    AOT_Thread_active_stacktrace_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1768;
+    1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1736;
+    AOT_Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1776;
+    AOT_Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1688;
+    AOT_Thread_execution_state_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1664;
+    AOT_Thread_global_object_pool_offset = 1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1720;
+    AOT_Thread_exit_through_ffi_offset = 1768;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -16617,20 +17389,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1672;
+    1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1680;
+    AOT_Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1696;
+    AOT_Thread_safepoint_state_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -16638,31 +17418,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1592;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -16674,20 +17454,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1744;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1752;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1792;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1800;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -16800,9 +17580,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -17037,9 +17817,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -17142,6 +17921,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -17165,6 +17960,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 32;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -17176,118 +17973,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 28;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1712;
+    AOT_Thread_service_extension_stream_offset = 1760;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1648;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1704;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -17309,20 +18108,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -17330,31 +18137,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1528;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1552;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1560;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1568;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1576;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -17366,20 +18173,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1696;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1728;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1736;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -17492,8 +18299,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1480, 1488, 1496, 1504, -1,   -1,   1512, 1520,
+        1528, 1536, 1544, -1,   1552, 1560, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -17728,9 +18535,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 20;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -17833,6 +18639,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -17856,6 +18678,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 32;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -17867,118 +18691,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 28;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1648;
+    AOT_Thread_active_exception_offset = 1696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1656;
+    AOT_Thread_active_stacktrace_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1728;
+    1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1768;
+    1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1736;
+    AOT_Thread_double_truncate_round_supported_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1776;
+    AOT_Thread_service_extension_stream_offset = 1824;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1688;
+    AOT_Thread_execution_state_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1664;
+    AOT_Thread_global_object_pool_offset = 1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1720;
+    AOT_Thread_exit_through_ffi_offset = 1768;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1784;
+    1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -18000,20 +18826,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1672;
+    1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1680;
+    AOT_Thread_saved_shadow_call_stack_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1696;
+    AOT_Thread_safepoint_state_offset = 1744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -18021,31 +18855,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1592;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1616;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1624;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1632;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1640;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -18057,20 +18891,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1712;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1744;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1752;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1760;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1792;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1800;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -18183,9 +19017,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1480, 1488, 1496, 1504, 1512, 1520, 1528, 1536, 1544, 1552, 1560,
+        1568, 1576, 1584, 1592, -1,   -1,   -1,   -1,   1600, 1608, -1,
+        -1,   1616, 1624, 1632, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -18420,9 +19254,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 16;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 20;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 24;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 28;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     4;
@@ -18525,6 +19358,22 @@
     AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     112;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 504;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 500;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 516;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 508;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 512;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 524;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 520;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -18548,6 +19397,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 20;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 4;
@@ -18559,118 +19410,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 16;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 380;
+    AOT_Thread_AllocateArray_entry_point_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 832;
+    AOT_Thread_active_exception_offset = 856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 836;
+    AOT_Thread_active_stacktrace_offset = 860;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 272;
+    AOT_Thread_array_write_barrier_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 288;
+    AOT_Thread_allocate_object_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 312;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 196;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 296;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 316;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    872;
+    896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_async_exception_handler_stub_offset = 204;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 364;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 276;
+    AOT_Thread_call_to_runtime_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    896;
+    920;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 876;
+    AOT_Thread_double_truncate_round_supported_offset = 900;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 900;
+    AOT_Thread_service_extension_stream_offset = 924;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    316;
+    336;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    228;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 320;
+    AOT_Thread_deoptimize_entry_offset = 340;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 232;
+    AOT_Thread_deoptimize_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 360;
+    AOT_Thread_double_abs_address_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 356;
+    AOT_Thread_double_negate_address_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 252;
+    AOT_Thread_enter_safepoint_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 852;
+    AOT_Thread_execution_state_offset = 876;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 256;
+    AOT_Thread_exit_safepoint_stub_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 260;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 264;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 344;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 132;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 372;
+    AOT_Thread_float_absolute_address_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 368;
+    AOT_Thread_float_negate_address_offset = 388;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 364;
+    AOT_Thread_float_not_address_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 376;
+    AOT_Thread_float_zerow_address_offset = 396;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 840;
+    AOT_Thread_global_object_pool_offset = 864;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 868;
+    AOT_Thread_exit_through_ffi_offset = 892;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    904;
+    928;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 236;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 248;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 268;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 308;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 312;
+    AOT_Thread_switchable_call_miss_entry_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 212;
+    AOT_Thread_switchable_call_miss_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 360;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
@@ -18692,19 +19545,27 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 176;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    208;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 216;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 220;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 844;
+    AOT_Thread_predefined_symbols_address_offset = 368;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 868;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 848;
+    AOT_Thread_saved_shadow_call_stack_offset = 872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 856;
+    AOT_Thread_safepoint_state_offset = 880;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 244;
+    AOT_Thread_slow_type_test_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 332;
+    AOT_Thread_slow_type_test_entry_point_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -18712,31 +19573,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 324;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 204;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 224;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 804;
+    AOT_Thread_suspend_state_await_entry_point_offset = 828;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 800;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 808;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 816;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 820;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 844;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 824;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 828;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -18748,19 +19609,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 268;
+    AOT_Thread_write_barrier_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    860;
+    884;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 864;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 880;
+    AOT_Thread_callback_stack_return_offset = 888;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 904;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 328;
+    AOT_Thread_jump_to_frame_entry_point_offset = 348;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    888;
+    912;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -18873,9 +19734,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 752, 756, 760, -1,  -1,  764,
+        768, 772, -1, -1, -1, 776, 780, 784, 788, 792, 796,
+        800, 804, -1, -1, -1, -1,  808, 812, 816, 820};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -19111,9 +19972,8 @@
     AOT_Closure_instantiator_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ClosureData_default_type_arguments_kind_offset = 32;
+static constexpr dart::compiler::target::word AOT_Code_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_object_pool_offset = 40;
-static constexpr dart::compiler::target::word
-    AOT_Code_saved_instructions_offset = 48;
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
@@ -19216,6 +20076,22 @@
     AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     224;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_await_offset = 1008;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_offset = 1000;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1032;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_offset = 1016;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1024;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1048;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1040;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -19239,6 +20115,8 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_FrameSizeGrowthGap = 0;
+static constexpr dart::compiler::target::word
     AOT_SuspendState_error_callback_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_SuspendState_frame_size_offset = 8;
@@ -19250,118 +20128,120 @@
 static constexpr dart::compiler::target::word
     AOT_SuspendState_then_callback_offset = 32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 736;
+    AOT_Thread_AllocateArray_entry_point_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1640;
+    AOT_Thread_active_exception_offset = 1688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1648;
+    AOT_Thread_active_stacktrace_offset = 1696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 520;
+    AOT_Thread_array_write_barrier_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 552;
+    AOT_Thread_allocate_object_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_parameterized_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 608;
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1720;
+    1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_async_exception_handler_stub_offset = 384;
+static constexpr dart::compiler::target::word
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 528;
+    AOT_Thread_call_to_runtime_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1760;
+    1808;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1728;
+    AOT_Thread_double_truncate_round_supported_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1768;
+    AOT_Thread_service_extension_stream_offset = 1816;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    608;
+    648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 616;
+    AOT_Thread_deoptimize_entry_offset = 656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 696;
+    AOT_Thread_double_abs_address_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 688;
+    AOT_Thread_double_negate_address_offset = 728;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1680;
+    AOT_Thread_execution_state_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 496;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 664;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_allocation_stub_code_offset = 240;
 static constexpr dart::compiler::target::word
     AOT_Thread_fix_callers_target_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 720;
+    AOT_Thread_float_absolute_address_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 712;
+    AOT_Thread_float_negate_address_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 704;
+    AOT_Thread_float_not_address_offset = 744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 728;
+    AOT_Thread_float_zerow_address_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1656;
+    AOT_Thread_global_object_pool_offset = 1704;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1712;
+    AOT_Thread_exit_through_ffi_offset = 1760;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1776;
+    1824;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 600;
+    AOT_Thread_switchable_call_miss_entry_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
@@ -19383,20 +20263,28 @@
     AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
     AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word AOT_Thread_resume_stub_offset =
+    392;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_not_future_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_star_stub_offset = 416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_return_async_stub_offset = 400;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 672;
+    AOT_Thread_predefined_symbols_address_offset = 712;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1664;
+    1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1672;
+    AOT_Thread_saved_shadow_call_stack_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1688;
+    AOT_Thread_safepoint_state_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 640;
+    AOT_Thread_slow_type_test_entry_point_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -19404,31 +20292,31 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 424;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_await_entry_point_offset = 1584;
+    AOT_Thread_suspend_state_await_entry_point_offset = 1632;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_entry_point_offset = 1576;
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1592;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1608;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1616;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1624;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1632;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 144;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -19440,20 +20328,20 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 512;
+    AOT_Thread_write_barrier_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1696;
-static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1704;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1736;
-static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
     1744;
 static constexpr dart::compiler::target::word
+    AOT_Thread_callback_stack_return_offset = 1752;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1784;
+static constexpr dart::compiler::target::word
+    AOT_Thread_jump_to_frame_entry_point_offset = 672;
+static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
+    1792;
+static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_buffer_offset = 8;
@@ -19566,9 +20454,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1480, 1488, 1496, -1,   -1,   1504,
+        1512, 1520, -1, -1, -1, 1528, 1536, 1544, 1552, 1560, 1568,
+        1576, 1584, -1, -1, -1, -1,   1592, 1600, 1608, 1616};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index b631b58..d4b23a4 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -111,8 +111,8 @@
   FIELD(Closure, hash_offset)                                                  \
   FIELD(Closure, instantiator_type_arguments_offset)                           \
   FIELD(ClosureData, default_type_arguments_kind_offset)                       \
+  FIELD(Code, instructions_offset)                                             \
   FIELD(Code, object_pool_offset)                                              \
-  FIELD(Code, saved_instructions_offset)                                       \
   FIELD(Code, owner_offset)                                                    \
   FIELD(Context, num_variables_offset)                                         \
   FIELD(Context, parent_offset)                                                \
@@ -149,6 +149,7 @@
   FIELD(Isolate, current_tag_offset)                                           \
   FIELD(Isolate, default_tag_offset)                                           \
   FIELD(Isolate, finalizers_offset)                                            \
+  NOT_IN_PRODUCT(FIELD(Isolate, has_resumption_breakpoints_offset))            \
   FIELD(Isolate, ic_miss_code_offset)                                          \
   FIELD(IsolateGroup, object_store_offset)                                     \
   FIELD(IsolateGroup, shared_class_table_offset)                               \
@@ -176,6 +177,14 @@
   FIELD(ObjectStore, int_type_offset)                                          \
   FIELD(ObjectStore, string_type_offset)                                       \
   FIELD(ObjectStore, type_type_offset)                                         \
+  FIELD(ObjectStore, suspend_state_await_offset)                               \
+  FIELD(ObjectStore, suspend_state_handle_exception_offset)                    \
+  FIELD(ObjectStore, suspend_state_init_async_offset)                          \
+  FIELD(ObjectStore, suspend_state_init_async_star_offset)                     \
+  FIELD(ObjectStore, suspend_state_return_async_offset)                        \
+  FIELD(ObjectStore, suspend_state_return_async_not_future_offset)             \
+  FIELD(ObjectStore, suspend_state_return_async_star_offset)                   \
+  FIELD(ObjectStore, suspend_state_yield_async_star_offset)                    \
   FIELD(OneByteString, data_offset)                                            \
   FIELD(PointerBase, data_offset)                                              \
   FIELD(Pointer, type_arguments_offset)                                        \
@@ -189,6 +198,7 @@
   FIELD(String, hash_offset)                                                   \
   FIELD(String, length_offset)                                                 \
   FIELD(SubtypeTestCache, cache_offset)                                        \
+  FIELD(SuspendState, FrameSizeGrowthGap)                                      \
   FIELD(SuspendState, error_callback_offset)                                   \
   FIELD(SuspendState, frame_size_offset)                                       \
   FIELD(SuspendState, function_data_offset)                                    \
@@ -210,6 +220,7 @@
   FIELD(Thread, allocate_object_slow_entry_point_offset)                       \
   FIELD(Thread, allocate_object_slow_stub_offset)                              \
   FIELD(Thread, api_top_scope_offset)                                          \
+  FIELD(Thread, async_exception_handler_stub_offset)                           \
   FIELD(Thread, auto_scope_native_wrapper_entry_point_offset)                  \
   FIELD(Thread, bool_false_offset)                                             \
   FIELD(Thread, bool_true_offset)                                              \
@@ -263,6 +274,10 @@
   FIELD(Thread, null_cast_error_shared_without_fpu_regs_stub_offset)           \
   FIELD(Thread, range_error_shared_with_fpu_regs_stub_offset)                  \
   FIELD(Thread, range_error_shared_without_fpu_regs_stub_offset)               \
+  FIELD(Thread, resume_stub_offset)                                            \
+  FIELD(Thread, return_async_not_future_stub_offset)                           \
+  FIELD(Thread, return_async_star_stub_offset)                                 \
+  FIELD(Thread, return_async_stub_offset)                                      \
                                                                                \
   FIELD(Thread, object_null_offset)                                            \
   FIELD(Thread, predefined_symbols_address_offset)                             \
@@ -459,8 +474,10 @@
 
 #define JIT_OFFSETS_LIST(FIELD, ARRAY, SIZEOF, ARRAY_SIZEOF, PAYLOAD_SIZEOF,   \
                          RANGE, CONSTANT)                                      \
+  FIELD(Code, active_instructions_offset)                                      \
   FIELD(Function, usage_counter_offset)                                        \
-  FIELD(ICData, receivers_static_type_offset)
+  FIELD(ICData, receivers_static_type_offset)                                  \
+  FIELD(SuspendState, frame_capacity_offset)
 
 #define AOT_OFFSETS_LIST(FIELD, ARRAY, SIZEOF, ARRAY_SIZEOF, PAYLOAD_SIZEOF,   \
                          RANGE, CONSTANT)                                      \
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index bd7219f..213650a 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -1274,9 +1274,34 @@
          compiler::target::kWordSize;
 }
 
+static void CallDartCoreLibraryFunction(
+    Assembler* assembler,
+    intptr_t entry_point_offset_in_thread,
+    intptr_t function_offset_in_object_store,
+    bool uses_args_desc = false) {
+  if (FLAG_precompiled_mode) {
+    __ Call(Address(THR, entry_point_offset_in_thread));
+  } else {
+    __ LoadIsolateGroup(FUNCTION_REG);
+    __ LoadFromOffset(
+        FUNCTION_REG,
+        Address(FUNCTION_REG, target::IsolateGroup::object_store_offset()));
+    __ LoadFromOffset(FUNCTION_REG,
+                      Address(FUNCTION_REG, function_offset_in_object_store));
+    __ LoadCompressedFieldFromOffset(CODE_REG, FUNCTION_REG,
+                                     target::Function::code_offset());
+    if (!uses_args_desc) {
+      // Load a GC-safe value for the arguments descriptor (unused but tagged).
+      __ LoadImmediate(ARGS_DESC_REG, 0);
+    }
+    __ Call(FieldAddress(FUNCTION_REG, target::Function::entry_point_offset()));
+  }
+}
+
 void StubCodeCompiler::GenerateSuspendStub(
     Assembler* assembler,
-    intptr_t suspend_entry_point_offset) {
+    intptr_t suspend_entry_point_offset_in_thread,
+    intptr_t suspend_function_offset_in_object_store) {
   const Register kArgument = SuspendStubABI::kArgumentReg;
   const Register kTemp = SuspendStubABI::kTempReg;
   const Register kFrameSize = SuspendStubABI::kFrameSizeReg;
@@ -1284,7 +1309,8 @@
   const Register kFunctionData = SuspendStubABI::kFunctionDataReg;
   const Register kSrcFrame = SuspendStubABI::kSrcFrameReg;
   const Register kDstFrame = SuspendStubABI::kDstFrameReg;
-  Label alloc_slow_case, alloc_done, init_done, old_gen_object, call_await;
+  Label alloc_slow_case, alloc_done, init_done, resize_suspend_state,
+      old_gen_object, call_dart;
 
 #if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
   SPILLS_LR_TO_FRAME({});  // Simulate entering the caller (Dart) frame.
@@ -1300,10 +1326,29 @@
   __ EnterStubFrame();
 
   __ CompareClassId(kSuspendState, kSuspendStateCid, kTemp);
-  __ BranchIf(EQUAL, &init_done);
 
-  __ MoveRegister(kFunctionData, kSuspendState);
+  if (FLAG_precompiled_mode) {
+    __ BranchIf(EQUAL, &init_done);
+  } else {
+    Label alloc_suspend_state;
+    __ BranchIf(NOT_EQUAL, &alloc_suspend_state);
+
+    __ CompareWithMemoryValue(
+        kFrameSize,
+        FieldAddress(kSuspendState,
+                     target::SuspendState::frame_capacity_offset()));
+    __ BranchIf(UNSIGNED_GREATER, &resize_suspend_state);
+
+    __ StoreToOffset(
+        kFrameSize,
+        FieldAddress(kSuspendState, target::SuspendState::frame_size_offset()));
+    __ Jump(&init_done);
+
+    __ Bind(&alloc_suspend_state);
+  }
+
   __ Comment("Allocate SuspendState");
+  __ MoveRegister(kFunctionData, kSuspendState);
 
   // Check for allocation tracing.
   NOT_IN_PRODUCT(
@@ -1312,6 +1357,7 @@
   // Compute the rounded instance size.
   const intptr_t fixed_size_plus_alignment_padding =
       (target::SuspendState::HeaderSize() +
+       target::SuspendState::FrameSizeGrowthGap() * target::kWordSize +
        target::ObjectAlignment::kObjectAlignment - 1);
   __ AddImmediate(kTemp, kFrameSize, fixed_size_plus_alignment_padding);
   __ AndImmediate(kTemp, -target::ObjectAlignment::kObjectAlignment);
@@ -1329,6 +1375,16 @@
   __ SubRegisters(kTemp, kSuspendState);
   __ AddImmediate(kSuspendState, kHeapObjectTag);
 
+  if (!FLAG_precompiled_mode) {
+    // Use rounded object size to calculate and save frame capacity.
+    __ AddImmediate(kTemp, kTemp, -target::SuspendState::payload_offset());
+    __ StoreToOffset(
+        kTemp, FieldAddress(kSuspendState,
+                            target::SuspendState::frame_capacity_offset()));
+    // Restore rounded object size.
+    __ AddImmediate(kTemp, kTemp, target::SuspendState::payload_offset());
+  }
+
   // Calculate the size tag.
   {
     Label size_tag_overflow, done;
@@ -1381,8 +1437,8 @@
   __ Bind(&alloc_done);
 
   __ Comment("Save SuspendState to frame");
-  __ LoadFromOffset(kTemp, Address(FPREG, kSavedCallerFpSlotFromFp *
-                                              compiler::target::kWordSize));
+  __ LoadFromOffset(
+      kTemp, Address(FPREG, kSavedCallerFpSlotFromFp * target::kWordSize));
   __ StoreToOffset(kSuspendState, Address(kTemp, SuspendStateFpOffset()));
 
   __ Bind(&init_done);
@@ -1437,22 +1493,32 @@
   }
 #endif
 
-  // Push arguments for _SuspendState._await* method.
+  // Push arguments for suspend Dart function.
   __ PushRegistersInOrder({kSuspendState, kArgument});
 
   // Write barrier.
   __ BranchIfBit(kSuspendState, target::ObjectAlignment::kNewObjectBitPosition,
                  ZERO, &old_gen_object);
 
-  __ Bind(&call_await);
-  __ Comment("Call _SuspendState._await method");
-  __ Call(Address(THR, suspend_entry_point_offset));
+  __ Bind(&call_dart);
+  __ Comment("Call suspend Dart function");
+  CallDartCoreLibraryFunction(assembler, suspend_entry_point_offset_in_thread,
+                              suspend_function_offset_in_object_store);
 
   __ LeaveStubFrame();
+
 #if !defined(TARGET_ARCH_X64) && !defined(TARGET_ARCH_IA32)
-  // Drop caller frame on all architectures except x86 which needs to maintain
-  // call/return balance to avoid performance regressions.
+  // Drop caller frame on all architectures except x86 (X64/IA32) which
+  // needs to maintain call/return balance to avoid performance regressions.
   __ LeaveDartFrame();
+#elif defined(TARGET_ARCH_X64)
+  // Restore PP in JIT mode on x64 as epilogue following SuspendStub call
+  // will only unwind frame and return.
+  if (!FLAG_precompiled_mode) {
+    __ LoadFromOffset(
+        PP, Address(FPREG, target::frame_layout.saved_caller_pp_from_fp *
+                               target::kWordSize));
+  }
 #endif
   __ Ret();
 
@@ -1476,6 +1542,24 @@
   __ PopRegister(kArgument);      // Restore argument.
   __ Jump(&alloc_done);
 
+  __ Bind(&resize_suspend_state);
+  __ Comment("Resize SuspendState");
+  // Save argument and frame size.
+  __ PushRegistersInOrder({kArgument, kFrameSize});
+  __ PushObject(NullObject());  // Make space on stack for the return value.
+  __ SmiTag(kFrameSize);
+  // Pass frame size and old suspend state to runtime entry.
+  __ PushRegistersInOrder({kFrameSize, kSuspendState});
+  // It's okay to call runtime for resizing SuspendState objects
+  // as it can only happen in the unoptimized code if expression
+  // stack grows between suspends, or once after OSR transition.
+  __ CallRuntime(kAllocateSuspendStateRuntimeEntry, 2);
+  __ Drop(2);                     // Drop arguments
+  __ PopRegister(kSuspendState);  // Get result.
+  __ PopRegister(kFrameSize);     // Restore frame size.
+  __ PopRegister(kArgument);      // Restore argument.
+  __ Jump(&alloc_done);
+
   __ Bind(&old_gen_object);
   __ Comment("Old gen SuspendState slow case");
   {
@@ -1492,30 +1576,35 @@
 #endif
     rt.Call(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
   }
-  __ Jump(&call_await);
+  __ Jump(&call_dart);
 }
 
 void StubCodeCompiler::GenerateAwaitStub(Assembler* assembler) {
   GenerateSuspendStub(assembler,
-                      target::Thread::suspend_state_await_entry_point_offset());
+                      target::Thread::suspend_state_await_entry_point_offset(),
+                      target::ObjectStore::suspend_state_await_offset());
 }
 
 void StubCodeCompiler::GenerateYieldAsyncStarStub(Assembler* assembler) {
   GenerateSuspendStub(
       assembler,
-      target::Thread::suspend_state_yield_async_star_entry_point_offset());
+      target::Thread::suspend_state_yield_async_star_entry_point_offset(),
+      target::ObjectStore::suspend_state_yield_async_star_offset());
 }
 
 void StubCodeCompiler::GenerateInitSuspendableFunctionStub(
     Assembler* assembler,
-    intptr_t init_entry_point_offset) {
+    intptr_t init_entry_point_offset_in_thread,
+    intptr_t init_function_offset_in_object_store) {
   const Register kTypeArgs = InitSuspendableFunctionStubABI::kTypeArgsReg;
 
   __ EnterStubFrame();
   __ LoadObject(ARGS_DESC_REG, ArgumentsDescriptorBoxed(/*type_args_len=*/1,
                                                         /*num_arguments=*/0));
   __ PushRegister(kTypeArgs);
-  __ Call(Address(THR, init_entry_point_offset));
+  CallDartCoreLibraryFunction(assembler, init_entry_point_offset_in_thread,
+                              init_function_offset_in_object_store,
+                              /*uses_args_desc=*/true);
   __ LeaveStubFrame();
 
   // Set :suspend_state in the caller frame.
@@ -1526,13 +1615,15 @@
 
 void StubCodeCompiler::GenerateInitAsyncStub(Assembler* assembler) {
   GenerateInitSuspendableFunctionStub(
-      assembler, target::Thread::suspend_state_init_async_entry_point_offset());
+      assembler, target::Thread::suspend_state_init_async_entry_point_offset(),
+      target::ObjectStore::suspend_state_init_async_offset());
 }
 
 void StubCodeCompiler::GenerateInitAsyncStarStub(Assembler* assembler) {
   GenerateInitSuspendableFunctionStub(
       assembler,
-      target::Thread::suspend_state_init_async_star_entry_point_offset());
+      target::Thread::suspend_state_init_async_star_entry_point_offset(),
+      target::ObjectStore::suspend_state_init_async_star_offset());
 }
 
 void StubCodeCompiler::GenerateResumeStub(Assembler* assembler) {
@@ -1544,7 +1635,7 @@
   const Register kResumePc = ResumeStubABI::kResumePcReg;
   const Register kException = ResumeStubABI::kExceptionReg;
   const Register kStackTrace = ResumeStubABI::kStackTraceReg;
-  Label rethrow_exception;
+  Label call_runtime;
 
   // Top of the stack on entry:
   // ... [SuspendState] [value] [exception] [stackTrace] [ReturnAddress]
@@ -1563,6 +1654,15 @@
     __ Breakpoint();
     __ Bind(&okay);
   }
+  {
+    Label okay;
+    __ LoadFromOffset(
+        kTemp, FieldAddress(kSuspendState, target::SuspendState::pc_offset()));
+    __ CompareImmediate(kTemp, 0);
+    __ BranchIf(NOT_EQUAL, &okay);
+    __ Breakpoint();
+    __ Bind(&okay);
+  }
 #endif
 
   __ LoadFromOffset(
@@ -1582,16 +1682,48 @@
     __ Bind(&okay);
   }
 #endif
+  if (!FLAG_precompiled_mode) {
+    // Copy Code object (part of the fixed frame which is not copied below)
+    // and restore pool pointer.
+    __ MoveRegister(kTemp, kSuspendState);
+    __ AddRegisters(kTemp, kFrameSize);
+    __ LoadFromOffset(
+        CODE_REG,
+        Address(kTemp,
+                target::SuspendState::payload_offset() - kHeapObjectTag +
+                    target::frame_layout.code_from_fp * target::kWordSize));
+    __ StoreToOffset(
+        CODE_REG,
+        Address(FPREG, target::frame_layout.code_from_fp * target::kWordSize));
+#if !defined(TARGET_ARCH_IA32)
+    __ LoadPoolPointer(PP);
+#endif
+  }
   // Do not copy fixed frame between the first local and FP.
   __ AddImmediate(kFrameSize, (target::frame_layout.first_local_from_fp + 1) *
                                   target::kWordSize);
   __ SubRegisters(SPREG, kFrameSize);
 
   __ Comment("Copy frame from SuspendState");
+  intptr_t num_saved_regs = 0;
+  if (kSrcFrame == THR) {
+    __ PushRegister(THR);
+    ++num_saved_regs;
+  }
+  if (kDstFrame == CODE_REG) {
+    __ PushRegister(CODE_REG);
+    ++num_saved_regs;
+  }
   __ AddImmediate(kSrcFrame, kSuspendState,
                   target::SuspendState::payload_offset() - kHeapObjectTag);
-  __ MoveRegister(kDstFrame, SPREG);
+  __ AddImmediate(kDstFrame, SPREG, num_saved_regs * target::kWordSize);
   __ CopyMemoryWords(kSrcFrame, kDstFrame, kFrameSize, kTemp);
+  if (kDstFrame == CODE_REG) {
+    __ PopRegister(CODE_REG);
+  }
+  if (kSrcFrame == THR) {
+    __ PopRegister(THR);
+  }
 
   __ Comment("Transfer control");
 
@@ -1600,11 +1732,6 @@
   __ StoreZero(FieldAddress(kSuspendState, target::SuspendState::pc_offset()),
                kTemp);
 
-  __ LoadFromOffset(kException,
-                    Address(FPREG, param_offset + 2 * target::kWordSize));
-  __ CompareObject(kException, NullObject());
-  __ BranchIf(NOT_EQUAL, &rethrow_exception);
-
 #if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_IA32)
   // Adjust resume PC to skip extra epilogue generated on x86
   // right after the call to suspend stub in order to maintain
@@ -1612,41 +1739,78 @@
   __ AddImmediate(kResumePc, SuspendStubABI::kResumePcDistance);
 #endif
 
+  static_assert((kException != CODE_REG) && (kException != PP),
+                "should not interfere");
+  __ LoadFromOffset(kException,
+                    Address(FPREG, param_offset + 2 * target::kWordSize));
+  __ CompareObject(kException, NullObject());
+  __ BranchIf(NOT_EQUAL, &call_runtime);
+
+  if (!FLAG_precompiled_mode) {
+    // Check if Code is disabled.
+    __ LoadFromOffset(
+        kTemp, FieldAddress(CODE_REG, target::Code::instructions_offset()));
+    __ CompareWithMemoryValue(
+        kTemp,
+        FieldAddress(CODE_REG, target::Code::active_instructions_offset()));
+    __ BranchIf(NOT_EQUAL, &call_runtime);
+
+#if !defined(PRODUCT)
+    // Check if there is a breakpoint at resumption.
+    __ LoadIsolate(kTemp);
+    __ LoadFromOffset(
+        kTemp,
+        Address(kTemp, target::Isolate::has_resumption_breakpoints_offset()),
+        kUnsignedByte);
+    __ CompareImmediate(kTemp, 0);
+    __ BranchIf(NOT_EQUAL, &call_runtime);
+#endif
+  }
+
   __ LoadFromOffset(CallingConventions::kReturnReg,
                     Address(FPREG, param_offset + 3 * target::kWordSize));
 
   __ Jump(kResumePc);
 
-  __ Comment("Rethrow exception");
-  __ Bind(&rethrow_exception);
+  __ Comment("Call runtime to throw exception or deopt");
+  __ Bind(&call_runtime);
 
   __ LoadFromOffset(kStackTrace,
                     Address(FPREG, param_offset + 1 * target::kWordSize));
+  static_assert((kStackTrace != CODE_REG) && (kStackTrace != PP),
+                "should not interfere");
 
-  // Adjust stack/LR/RA as if suspended Dart function called
+  // Set return address as if suspended Dart function called
   // stub with kResumePc as a return address.
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
-  __ PushRegister(kResumePc);
-#elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
-  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(__ MoveRegister(LR, kResumePc));
-#elif defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
-  __ MoveRegister(RA, kResumePc);
-#else
-#error Unknown target
-#endif
+  __ SetReturnAddress(kResumePc);
 
+  if (!FLAG_precompiled_mode) {
+    __ LoadFromOffset(CODE_REG, THR, target::Thread::resume_stub_offset());
+  }
 #if !defined(TARGET_ARCH_IA32)
   __ set_constant_pool_allowed(false);
 #endif
   __ EnterStubFrame();
   __ PushObject(NullObject());  // Make room for (unused) result.
   __ PushRegistersInOrder({kException, kStackTrace});
-  __ CallRuntime(kReThrowRuntimeEntry, /*argument_count=*/2);
-  __ Breakpoint();
+  __ CallRuntime(kResumeFrameRuntimeEntry, /*argument_count=*/2);
+
+  if (FLAG_precompiled_mode) {
+    __ Breakpoint();
+  } else {
+    __ LeaveStubFrame();
+    __ LoadFromOffset(CallingConventions::kReturnReg,
+                      Address(FPREG, param_offset + 3 * target::kWordSize));
+    // Lazy deoptimize.
+    __ Ret();
+  }
 }
 
-void StubCodeCompiler::GenerateReturnStub(Assembler* assembler,
-                                          intptr_t return_entry_point_offset) {
+void StubCodeCompiler::GenerateReturnStub(
+    Assembler* assembler,
+    intptr_t return_entry_point_offset_in_thread,
+    intptr_t return_function_offset_in_object_store,
+    intptr_t return_stub_offset_in_thread) {
   const Register kSuspendState = ReturnStubABI::kSuspendStateReg;
 
 #if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
@@ -1654,11 +1818,23 @@
 #endif
 
   __ LoadFromOffset(kSuspendState, Address(FPREG, SuspendStateFpOffset()));
+#ifdef DEBUG
+  {
+    Label okay;
+    __ CompareObject(kSuspendState, NullObject());
+    __ BranchIf(NOT_EQUAL, &okay);
+    __ Breakpoint();
+    __ Bind(&okay);
+  }
+#endif
   __ LeaveDartFrame();
-
+  if (!FLAG_precompiled_mode) {
+    __ LoadFromOffset(CODE_REG, THR, return_stub_offset_in_thread);
+  }
   __ EnterStubFrame();
   __ PushRegistersInOrder({kSuspendState, CallingConventions::kReturnReg});
-  __ Call(Address(THR, return_entry_point_offset));
+  CallDartCoreLibraryFunction(assembler, return_entry_point_offset_in_thread,
+                              return_function_offset_in_object_store);
   __ LeaveStubFrame();
   __ Ret();
 }
@@ -1666,20 +1842,26 @@
 void StubCodeCompiler::GenerateReturnAsyncStub(Assembler* assembler) {
   GenerateReturnStub(
       assembler,
-      target::Thread::suspend_state_return_async_entry_point_offset());
+      target::Thread::suspend_state_return_async_entry_point_offset(),
+      target::ObjectStore::suspend_state_return_async_offset(),
+      target::Thread::return_async_stub_offset());
 }
 
 void StubCodeCompiler::GenerateReturnAsyncNotFutureStub(Assembler* assembler) {
   GenerateReturnStub(
       assembler,
       target::Thread::
-          suspend_state_return_async_not_future_entry_point_offset());
+          suspend_state_return_async_not_future_entry_point_offset(),
+      target::ObjectStore::suspend_state_return_async_not_future_offset(),
+      target::Thread::return_async_not_future_stub_offset());
 }
 
 void StubCodeCompiler::GenerateReturnAsyncStarStub(Assembler* assembler) {
   GenerateReturnStub(
       assembler,
-      target::Thread::suspend_state_return_async_star_entry_point_offset());
+      target::Thread::suspend_state_return_async_star_entry_point_offset(),
+      target::ObjectStore::suspend_state_return_async_star_offset(),
+      target::Thread::return_async_star_stub_offset());
 }
 
 void StubCodeCompiler::GenerateAsyncExceptionHandlerStub(Assembler* assembler) {
@@ -1701,12 +1883,17 @@
   __ BranchIf(EQUAL, &rethrow_exception);
 
   __ LeaveDartFrame();
+  if (!FLAG_precompiled_mode) {
+    __ LoadFromOffset(CODE_REG, THR,
+                      target::Thread::async_exception_handler_stub_offset());
+  }
   __ EnterStubFrame();
   __ PushRegistersInOrder(
       {kSuspendState, kExceptionObjectReg, kStackTraceObjectReg});
-  __ Call(Address(
-      THR,
-      target::Thread::suspend_state_handle_exception_entry_point_offset()));
+  CallDartCoreLibraryFunction(
+      assembler,
+      target::Thread::suspend_state_handle_exception_entry_point_offset(),
+      target::ObjectStore::suspend_state_handle_exception_offset());
   __ LeaveStubFrame();
   __ Ret();
 
@@ -1717,6 +1904,10 @@
   __ Comment("Rethrow exception");
   __ Bind(&rethrow_exception);
   __ LeaveDartFrame();
+  if (!FLAG_precompiled_mode) {
+    __ LoadFromOffset(CODE_REG, THR,
+                      target::Thread::async_exception_handler_stub_offset());
+  }
   __ EnterStubFrame();
   __ PushObject(NullObject());  // Make room for (unused) result.
   __ PushRegistersInOrder({kExceptionObjectReg, kStackTraceObjectReg});
diff --git a/runtime/vm/compiler/stub_code_compiler.h b/runtime/vm/compiler/stub_code_compiler.h
index 7cd39e1..e4da7fa 100644
--- a/runtime/vm/compiler/stub_code_compiler.h
+++ b/runtime/vm/compiler/stub_code_compiler.h
@@ -199,13 +199,19 @@
 
   static void GenerateRangeError(Assembler* assembler, bool with_fpu_regs);
 
-  static void GenerateSuspendStub(Assembler* assembler,
-                                  intptr_t suspend_entry_point_offset);
+  static void GenerateSuspendStub(
+      Assembler* assembler,
+      intptr_t suspend_entry_point_offset_in_thread,
+      intptr_t suspend_function_offset_in_object_store);
   static void GenerateInitSuspendableFunctionStub(
       Assembler* assembler,
-      intptr_t init_entry_point_offset);
-  static void GenerateReturnStub(Assembler* assembler,
-                                 intptr_t return_entry_point_offset);
+      intptr_t init_entry_point_offset_in_thread,
+      intptr_t init_function_offset_in_object_store);
+  static void GenerateReturnStub(
+      Assembler* assembler,
+      intptr_t return_entry_point_offset_in_thread,
+      intptr_t return_function_offset_in_object_store,
+      intptr_t return_stub_offset_in_thread);
 };
 
 }  // namespace compiler
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 7b0d4ce..224f969 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -560,6 +560,7 @@
   // Registers for control transfer.
   // (the 2nd part, can reuse registers from the 1st part)
   static const Register kResumePcReg = R1;
+  // Can also reuse kSuspendStateReg but should not conflict with CODE_REG/PP.
   static const Register kExceptionReg = R3;
   static const Register kStackTraceReg = R4;
 };
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 0cd27b6..fea118e 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -394,6 +394,7 @@
   // Registers for control transfer.
   // (the 2nd part, can reuse registers from the 1st part)
   static const Register kResumePcReg = R1;
+  // Can also reuse kSuspendStateReg but should not conflict with CODE_REG/PP.
   static const Register kExceptionReg = R3;
   static const Register kStackTraceReg = R4;
 };
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index 47f2797..d141285 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -276,7 +276,7 @@
   // Number of bytes to skip after
   // suspend stub return address in order to resume.
   // IA32: mov esp, ebp; pop ebp; ret
-  static const intptr_t kResumePcDistance = 5;
+  static const intptr_t kResumePcDistance = 4;
 };
 
 // ABI for InitSuspendableFunctionStub (InitAsyncStub, InitAsyncStarStub).
@@ -290,13 +290,16 @@
   static const Register kTempReg = EDX;
   // Registers for the frame copying (the 1st part).
   static const Register kFrameSizeReg = ECX;
+  // Can reuse THR.
   static const Register kSrcFrameReg = ESI;
+  // Can reuse CODE_REG.
   static const Register kDstFrameReg = EDI;
   // Registers for control transfer.
   // (the 2nd part, can reuse registers from the 1st part)
   static const Register kResumePcReg = ECX;
-  static const Register kExceptionReg = ESI;
-  static const Register kStackTraceReg = EDI;
+  // Can also reuse kSuspendStateReg but should not conflict with CODE_REG.
+  static const Register kExceptionReg = EAX;
+  static const Register kStackTraceReg = EBX;
 };
 
 // ABI for ReturnStub (ReturnAsyncStub, ReturnAsyncNotFutureStub,
diff --git a/runtime/vm/constants_riscv.h b/runtime/vm/constants_riscv.h
index 435c5f8..c18f413 100644
--- a/runtime/vm/constants_riscv.h
+++ b/runtime/vm/constants_riscv.h
@@ -404,6 +404,7 @@
   // Registers for control transfer.
   // (the 2nd part, can reuse registers from the 1st part)
   static const Register kResumePcReg = T2;
+  // Can also reuse kSuspendStateReg but should not conflict with CODE_REG/PP.
   static const Register kExceptionReg = T3;
   static const Register kStackTraceReg = T4;
 };
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index c2a1162..119f08c 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -368,6 +368,7 @@
   // Registers for control transfer.
   // (the 2nd part, can reuse registers from the 1st part)
   static const Register kResumePcReg = RCX;
+  // Can also reuse kSuspendStateReg but should not conflict with CODE_REG/PP.
   static const Register kExceptionReg = RSI;
   static const Register kStackTraceReg = RDI;
 };
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 4f03fb7a..f8b05d2 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6728,24 +6728,12 @@
   DARTSCOPE(Thread::Current());
   API_TIMELINE_DURATION(T);
 
-  const GrowableObjectArray& result =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  const GrowableObjectArray& libs = GrowableObjectArray::Handle(
-      Z, T->isolate_group()->object_store()->libraries());
-  Library& lib = Library::Handle(Z);
-  LoadingUnit& unit = LoadingUnit::Handle(Z);
-  String& uri = String::Handle(Z);
-  for (intptr_t i = 0; i < libs.Length(); i++) {
-    lib ^= libs.At(i);
-    unit = lib.loading_unit();
-    if (unit.IsNull() || (unit.id() != loading_unit_id)) {
-      continue;
-    }
-    uri = lib.url();
-    result.Add(uri);
+  const Array& loading_units =
+      Array::Handle(Z, T->isolate_group()->object_store()->loading_unit_uris());
+  if (loading_unit_id >= 0 && loading_unit_id < loading_units.Length()) {
+    return Api::NewHandle(T, loading_units.At(loading_unit_id));
   }
-
-  return Api::NewHandle(T, Array::MakeFixedLength(result));
+  return Api::NewError("Invalid loading_unit_id");
 #endif
 }
 
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 4e4f9a1..1a83328 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -282,7 +282,8 @@
       desc_indices_(8),
       pc_desc_(PcDescriptors::ZoneHandle()) {}
 
-ActivationFrame::ActivationFrame(const Closure& async_activation)
+ActivationFrame::ActivationFrame(const Closure& async_activation,
+                                 CallerClosureFinder* caller_closure_finder)
     : pc_(0),
       fp_(0),
       sp_(0),
@@ -306,6 +307,17 @@
       pc_desc_(PcDescriptors::ZoneHandle()) {
   // Extract the function and the code from the asynchronous activation.
   function_ = async_activation.function();
+  if (caller_closure_finder->IsCompactAsyncCallback(function_)) {
+    const auto& suspend_state = SuspendState::Handle(
+        caller_closure_finder->GetSuspendStateFromAsyncCallback(
+            async_activation));
+    if (suspend_state.pc() != 0) {
+      pc_ = suspend_state.pc();
+      code_ = suspend_state.GetCodeObject();
+      function_ = code_.function();
+      return;
+    }
+  }
   // Force-optimize functions should not be debuggable.
   ASSERT(!function_.ForceOptimize());
   function_.EnsureHasCompiledUnoptimizedCode();
@@ -752,16 +764,24 @@
 
 ObjectPtr ActivationFrame::GetAsyncAwaiter(
     CallerClosureFinder* caller_closure_finder) {
-  if (fp() != 0 && !function_.IsNull() &&
-      (function_.IsAsyncClosure() || function_.IsAsyncGenClosure())) {
-    // Look up caller's closure on the stack.
-    ObjectPtr* last_caller_obj = reinterpret_cast<ObjectPtr*>(GetCallerSp());
-    Closure& closure = Closure::Handle();
-    closure = StackTraceUtils::FindClosureInFrame(last_caller_obj, function_);
+  if (fp() != 0 && !function_.IsNull()) {
+    if (function_.IsCompactAsyncFunction() ||
+        function_.IsCompactAsyncStarFunction()) {
+      const auto& suspend_state = Object::Handle(GetSuspendStateVar());
+      if (suspend_state.IsSuspendState()) {
+        return caller_closure_finder->FindCallerFromSuspendState(
+            SuspendState::Cast(suspend_state));
+      }
+    } else if (function_.IsAsyncClosure() || function_.IsAsyncGenClosure()) {
+      // Look up caller's closure on the stack.
+      ObjectPtr* last_caller_obj = reinterpret_cast<ObjectPtr*>(GetCallerSp());
+      Closure& closure = Closure::Handle();
+      closure = StackTraceUtils::FindClosureInFrame(last_caller_obj, function_);
 
-    if (!closure.IsNull() && caller_closure_finder->IsRunningAsync(closure)) {
-      closure = caller_closure_finder->FindCaller(closure);
-      return closure.ptr();
+      if (!closure.IsNull() && caller_closure_finder->IsRunningAsync(closure)) {
+        closure = caller_closure_finder->FindCaller(closure);
+        return closure.ptr();
+      }
     }
   }
 
@@ -774,16 +794,13 @@
     return false;
   }
   intptr_t try_index = TryIndex();
-  if (try_index < 0) {
+  const auto& handlers = ExceptionHandlers::Handle(code().exception_handlers());
+  ASSERT(!handlers.IsNull());
+  if ((try_index < 0) && !handlers.has_async_handler()) {
     return false;
   }
-  ExceptionHandlers& handlers = ExceptionHandlers::Handle();
   Array& handled_types = Array::Handle();
   AbstractType& type = Type::Handle();
-  const bool is_async =
-      function().IsAsyncClosure() || function().IsAsyncGenClosure();
-  handlers = code().exception_handlers();
-  ASSERT(!handlers.IsNull());
   intptr_t num_handlers_checked = 0;
   while (try_index != kInvalidTryIndex) {
     // Detect circles in the exception handler data.
@@ -812,7 +829,8 @@
   }
   // Async functions might have indirect exception handlers in the form of
   // `Future.catchError`. Check the Closure's _FutureListeners.
-  if (fp() != 0 && is_async) {
+  if ((fp() != 0) &&
+      (function().IsAsyncClosure() || function().IsAsyncGenClosure())) {
     CallerClosureFinder caller_closure_finder(Thread::Current()->zone());
     ObjectPtr* last_caller_obj = reinterpret_cast<ObjectPtr*>(GetCallerSp());
     Closure& closure = Closure::Handle(
@@ -825,6 +843,17 @@
     futureOrListener =
         caller_closure_finder.GetFutureFutureListener(futureOrListener);
     return caller_closure_finder.HasCatchError(futureOrListener);
+  } else if ((fp() != 0) && function().IsCompactAsyncFunction()) {
+    CallerClosureFinder caller_closure_finder(Thread::Current()->zone());
+    auto& suspend_state = Object::Handle(GetSuspendStateVar());
+    if (!suspend_state.IsSuspendState()) {
+      return false;
+    }
+    Object& futureOrListener =
+        Object::Handle(SuspendState::Cast(suspend_state).function_data());
+    futureOrListener =
+        caller_closure_finder.GetFutureFutureListener(futureOrListener);
+    return caller_closure_finder.HasCatchError(futureOrListener);
   }
 
   return false;
@@ -1074,6 +1103,19 @@
   return Closure::Cast(param).ptr();
 }
 
+ObjectPtr ActivationFrame::GetSuspendStateVar() {
+  ASSERT(function().IsSuspendableFunction());
+  return GetStackVar(VariableIndex(SuspendState::kSuspendStateVarIndex));
+}
+
+ObjectPtr ActivationFrame::GetSuspendableFunctionData() {
+  Object& suspend_state = Object::Handle(GetSuspendStateVar());
+  if (suspend_state.IsSuspendState()) {
+    return SuspendState::Cast(suspend_state).function_data();
+  }
+  return suspend_state.ptr();
+}
+
 ObjectPtr ActivationFrame::GetStackVar(VariableIndex variable_index) {
   const intptr_t slot_index =
       runtime_frame_layout.FrameSlotForVariableIndex(variable_index.value());
@@ -1660,6 +1702,13 @@
     }
     return false;
   }
+  if (top_frame->function().IsCompactAsyncFunction() ||
+      top_frame->function().IsCompactAsyncStarFunction()) {
+    const auto& function_data =
+        Object::Handle(top_frame->GetSuspendableFunctionData());
+    SetBreakpointAtResumption(function_data);
+    return true;
+  }
   Object& closure = Object::Handle(top_frame->GetAsyncOperation());
   ASSERT(!closure.IsNull());
   ASSERT(closure.IsInstance());
@@ -2057,6 +2106,20 @@
         if (caller_closure_finder.IsRunningAsync(closure)) {
           break;
         }
+      } else if (function.IsCompactAsyncFunction() ||
+                 function.IsCompactAsyncStarFunction()) {
+        ActivationFrame* activation = CollectDartFrame(
+            isolate, frame->pc(), frame, code, Object::null_array(), 0,
+            ActivationFrame::kAsyncActivation);
+        ASSERT(activation != nullptr);
+        stack_trace->AddActivation(activation);
+        stack_has_async_function = true;
+        // Grab the awaiter.
+        async_activation ^= activation->GetAsyncAwaiter(&caller_closure_finder);
+        // Bail if we've reach the end of sync execution stack.
+        if (Object::Handle(activation->GetSuspendStateVar()).IsSuspendState()) {
+          break;
+        }
       } else {
         stack_trace->AddActivation(CollectDartFrame(
             isolate, frame->pc(), frame, code, Object::null_array(), 0));
@@ -2094,7 +2157,9 @@
       }
 
       intptr_t deopt_frame_offset = it.GetDeoptFpOffset();
-      if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
+      if (function.IsAsyncClosure() || function.IsAsyncGenClosure() ||
+          function.IsCompactAsyncFunction() ||
+          function.IsCompactAsyncStarFunction()) {
         ActivationFrame* activation = CollectDartFrame(
             isolate, it.pc(), frame, inlined_code, deopt_frame,
             deopt_frame_offset, ActivationFrame::kAsyncActivation);
@@ -2125,7 +2190,8 @@
   // Append the awaiter return call stack.
   while (!async_activation.IsNull() &&
          async_activation.context() != Object::null()) {
-    ActivationFrame* activation = new (zone) ActivationFrame(async_activation);
+    ActivationFrame* activation =
+        new (zone) ActivationFrame(async_activation, &caller_closure_finder);
     if (activation->function().IsAsyncClosure() ||
         activation->function().IsAsyncGenClosure()) {
       activation->ExtractTokenPositionFromAsyncClosure();
@@ -3107,6 +3173,39 @@
   return NULL;
 }
 
+void Debugger::SetBreakpointAtResumption(const Object& function_data) {
+  ASSERT(!function_data.IsNull());
+  ASSERT(function_data.IsInstance());
+  breakpoints_at_resumption_.Add(function_data.ptr());
+  isolate_->set_has_resumption_breakpoints(true);
+}
+
+void Debugger::ResumptionBreakpoint() {
+  ASSERT(!breakpoints_at_resumption_.is_empty());
+  ASSERT(isolate_->has_resumption_breakpoints());
+
+  ActivationFrame* top_frame = TopDartFrame();
+  ASSERT(top_frame->function().IsSuspendableFunction());
+  const auto& function_data =
+      Object::Handle(top_frame->GetSuspendableFunctionData());
+
+  for (intptr_t i = 0, n = breakpoints_at_resumption_.length(); i < n; ++i) {
+    if (breakpoints_at_resumption_[i] == function_data.ptr()) {
+      breakpoints_at_resumption_.RemoveAt(i);
+      if (breakpoints_at_resumption_.is_empty()) {
+        isolate_->set_has_resumption_breakpoints(false);
+      }
+      if (FLAG_verbose_debug) {
+        OS::PrintErr(
+            "ResumptionBreakpoint - hit a breakpoint, continue single "
+            "stepping\n");
+      }
+      EnterSingleStepMode();
+      return;
+    }
+  }
+}
+
 Breakpoint* Debugger::SetBreakpointAtLine(const String& script_url,
                                           intptr_t line_number) {
   // Prevent future tests from calling this function in the wrong
@@ -3352,6 +3451,9 @@
     loc = loc->next();
   }
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&top_frame_awaiter_));
+  for (intptr_t i = 0, n = breakpoints_at_resumption_.length(); i < n; ++i) {
+    visitor->VisitPointer(&breakpoints_at_resumption_[i]);
+  }
 }
 
 void Debugger::Pause(ServiceEvent* event) {
@@ -3487,7 +3589,9 @@
   } else if (resume_action_ == kStepOut) {
     if (FLAG_async_debugger) {
       if (stack_trace->FrameAt(0)->function().IsAsyncClosure() ||
-          stack_trace->FrameAt(0)->function().IsAsyncGenClosure()) {
+          stack_trace->FrameAt(0)->function().IsAsyncGenClosure() ||
+          stack_trace->FrameAt(0)->function().IsCompactAsyncFunction() ||
+          stack_trace->FrameAt(0)->function().IsCompactAsyncStarFunction()) {
         CallerClosureFinder caller_closure_finder(Thread::Current()->zone());
         // Request to step out of an async/async* closure.
         const Object& async_op = Object::Handle(
@@ -3880,25 +3984,29 @@
 
 static bool IsAtAsyncJump(ActivationFrame* top_frame) {
   Zone* zone = Thread::Current()->zone();
-  Object& closure_or_null =
-      Object::Handle(zone, top_frame->GetAsyncOperation());
-  if (!closure_or_null.IsNull()) {
+  if (!top_frame->function().IsCompactAsyncFunction() &&
+      !top_frame->function().IsCompactAsyncStarFunction()) {
+    Object& closure_or_null =
+        Object::Handle(zone, top_frame->GetAsyncOperation());
+    if (closure_or_null.IsNull()) {
+      return false;
+    }
     ASSERT(top_frame->function().IsAsyncClosure() ||
            top_frame->function().IsAsyncGenClosure());
     ASSERT(closure_or_null.IsInstance());
     ASSERT(Instance::Cast(closure_or_null).IsClosure());
-    const auto& pc_descriptors =
-        PcDescriptors::Handle(zone, top_frame->code().pc_descriptors());
-    if (pc_descriptors.IsNull()) {
-      return false;
-    }
-    const TokenPosition looking_for = top_frame->TokenPos();
-    PcDescriptors::Iterator it(pc_descriptors, UntaggedPcDescriptors::kOther);
-    while (it.MoveNext()) {
-      if (it.TokenPos() == looking_for &&
-          it.YieldIndex() != UntaggedPcDescriptors::kInvalidYieldIndex) {
-        return true;
-      }
+  }
+  const auto& pc_descriptors =
+      PcDescriptors::Handle(zone, top_frame->code().pc_descriptors());
+  if (pc_descriptors.IsNull()) {
+    return false;
+  }
+  const TokenPosition looking_for = top_frame->TokenPos();
+  PcDescriptors::Iterator it(pc_descriptors, UntaggedPcDescriptors::kOther);
+  while (it.MoveNext()) {
+    if (it.TokenPos() == looking_for &&
+        it.YieldIndex() != UntaggedPcDescriptors::kInvalidYieldIndex) {
+      return true;
     }
   }
   return false;
@@ -3964,7 +4072,8 @@
   if (FLAG_lazy_async_stacks) {
     // async and async* functions always contain synthetic async_ops.
     if ((frame->function().IsAsyncFunction() ||
-         frame->function().IsAsyncGenerator())) {
+         frame->function().IsAsyncGenerator()) &&
+        !frame->function().IsSuspendableFunction()) {
       ASSERT(!frame->GetSavedCurrentContext().IsNull());
       ASSERT(frame->GetSavedCurrentContext().num_variables() >
              Context::kAsyncFutureIndex);
@@ -4003,6 +4112,14 @@
     return Error::null();
   }
 
+  // TODO(dartbug.com/48378): Consider aligning async/async* functions
+  // with regular function wrt the first stop in the function prologue.
+  if ((frame->function().IsCompactAsyncFunction() ||
+       frame->function().IsCompactAsyncStarFunction()) &&
+      frame->GetSuspendStateVar() == Object::null()) {
+    return Error::null();
+  }
+
   // We are stopping in this frame at the token pos.
   last_stepping_fp_ = frame->fp();
   last_stepping_pos_ = frame->TokenPos();
@@ -4612,7 +4729,18 @@
 }
 
 void Debugger::AsyncStepInto(const Closure& async_op) {
-  SetBreakpointAtActivation(async_op, true);
+  Zone* zone = Thread::Current()->zone();
+  CallerClosureFinder caller_closure_finder(zone);
+  if (caller_closure_finder.IsCompactAsyncCallback(
+          Function::Handle(zone, async_op.function()))) {
+    const auto& suspend_state = SuspendState::Handle(
+        zone, caller_closure_finder.GetSuspendStateFromAsyncCallback(async_op));
+    const auto& function_data =
+        Object::Handle(zone, suspend_state.function_data());
+    SetBreakpointAtResumption(function_data);
+  } else {
+    SetBreakpointAtActivation(async_op, true);
+  }
   Continue();
 }
 
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 0c95bd3..47e701f 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -326,7 +326,8 @@
 
   explicit ActivationFrame(Kind kind);
 
-  explicit ActivationFrame(const Closure& async_activation);
+  ActivationFrame(const Closure& async_activation,
+                  CallerClosureFinder* caller_closure_finder);
 
   uword pc() const { return pc_; }
   uword fp() const { return fp_; }
@@ -388,6 +389,8 @@
 
   const Context& GetSavedCurrentContext();
   ObjectPtr GetAsyncOperation();
+  ObjectPtr GetSuspendStateVar();
+  ObjectPtr GetSuspendableFunctionData();
 
   TypeArgumentsPtr BuildParameters(
       const GrowableObjectArray& param_names,
@@ -816,6 +819,13 @@
   // Callback to the debugger to continue frame rewind, post-deoptimization.
   void RewindPostDeopt();
 
+  // Sets breakpoint at resumption of a suspendable function
+  // with given function data (such as _Future or _AsyncStarStreamController).
+  void SetBreakpointAtResumption(const Object& function_data);
+
+  // Check breakpoints at frame resumption. Called from generated code.
+  void ResumptionBreakpoint();
+
  private:
   ErrorPtr PauseRequest(ServiceEvent::EventKind kind);
 
@@ -968,6 +978,10 @@
 
   Dart_ExceptionPauseInfo exc_pause_info_;
 
+  // Holds function data corresponding to suspendable
+  // function which should be stopped when resumed.
+  MallocGrowableArray<ObjectPtr> breakpoints_at_resumption_;
+
   friend class Isolate;
   friend class BreakpointLocation;
   DISALLOW_COPY_AND_ASSIGN(Debugger);
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index 8d08c18..23e9aa2 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -580,14 +580,15 @@
                                    uword frame_pointer,
                                    const Object& exception_object,
                                    const Object& stacktrace_object) {
+  bool clear_deopt = false;
   uword remapped_pc = thread->pending_deopts().RemapExceptionPCForDeopt(
-      program_counter, frame_pointer);
+      program_counter, frame_pointer, &clear_deopt);
   thread->set_active_exception(exception_object);
   thread->set_active_stacktrace(stacktrace_object);
   thread->set_resume_pc(remapped_pc);
   uword run_exception_pc = StubCode::RunExceptionHandler().EntryPoint();
   Exceptions::JumpToFrame(thread, run_exception_pc, stack_pointer,
-                          frame_pointer, false /* do not clear deopt */);
+                          frame_pointer, clear_deopt);
 }
 
 NO_SANITIZE_SAFE_STACK  // This function manipulates the safestack pointer.
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index ffb8a64..7aec9f6 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -1150,6 +1150,16 @@
     return OFFSET_OF(Isolate, single_step_);
   }
 
+  void set_has_resumption_breakpoints(bool value) {
+    has_resumption_breakpoints_ = value;
+  }
+  bool has_resumption_breakpoints() const {
+    return has_resumption_breakpoints_;
+  }
+  static intptr_t has_resumption_breakpoints_offset() {
+    return OFFSET_OF(Isolate, has_resumption_breakpoints_);
+  }
+
   bool ResumeRequest() const { return LoadIsolateFlagsBit<ResumeRequestBit>(); }
   // Lets the embedder know that a service message resulted in a resume request.
   void SetResumeRequest() {
@@ -1554,6 +1564,7 @@
   // shutdown to prevent usage of dangling pointers.
   GrowableObjectArrayPtr finalizers_;
   bool single_step_ = false;
+  bool has_resumption_breakpoints_ = false;
   bool is_system_isolate_ = false;
   // End accessed from generated code.
 
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 1386624..f182dce 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -1882,11 +1882,13 @@
                         GrowableArray<const Function*>* functions,
                         GrowableArray<const KernelProgramInfo*>* kernel_infos,
                         GrowableArray<const Field*>* fields,
+                        GrowableArray<const SuspendState*>* suspend_states,
                         GrowableArray<const Instance*>* instances)
       : zone_(zone),
         functions_(functions),
         kernel_infos_(kernel_infos),
         fields_(fields),
+        suspend_states_(suspend_states),
         instances_(instances) {}
   virtual ~InvalidationCollector() {}
 
@@ -1904,6 +1906,12 @@
           zone_, static_cast<KernelProgramInfoPtr>(obj)));
     } else if (cid == kFieldCid) {
       fields_->Add(&Field::Handle(zone_, static_cast<FieldPtr>(obj)));
+    } else if (cid == kSuspendStateCid) {
+      const auto& suspend_state =
+          SuspendState::Handle(zone_, static_cast<SuspendStatePtr>(obj));
+      if (suspend_state.pc() != 0) {
+        suspend_states_->Add(&suspend_state);
+      }
     } else if (cid > kNumPredefinedCids) {
       instances_->Add(&Instance::Handle(zone_, static_cast<InstancePtr>(obj)));
     }
@@ -1914,6 +1922,7 @@
   GrowableArray<const Function*>* const functions_;
   GrowableArray<const KernelProgramInfo*>* const kernel_infos_;
   GrowableArray<const Field*>* const fields_;
+  GrowableArray<const SuspendState*>* const suspend_states_;
   GrowableArray<const Instance*>* const instances_;
 };
 
@@ -1928,16 +1937,18 @@
   GrowableArray<const Function*> functions(4 * KB);
   GrowableArray<const KernelProgramInfo*> kernel_infos(KB);
   GrowableArray<const Field*> fields(4 * KB);
+  GrowableArray<const SuspendState*> suspend_states(4 * KB);
   GrowableArray<const Instance*> instances(4 * KB);
 
   {
     HeapIterationScope iteration(thread);
     InvalidationCollector visitor(zone, &functions, &kernel_infos, &fields,
-                                  &instances);
+                                  &suspend_states, &instances);
     iteration.IterateObjects(&visitor);
   }
 
   InvalidateKernelInfos(zone, kernel_infos);
+  InvalidateSuspendStates(zone, suspend_states);
   InvalidateFunctions(zone, functions);
   InvalidateFields(zone, fields, instances);
 }
@@ -2028,6 +2039,55 @@
   }
 }
 
+void ProgramReloadContext::InvalidateSuspendStates(
+    Zone* zone,
+    const GrowableArray<const SuspendState*>& suspend_states) {
+  TIMELINE_SCOPE(InvalidateSuspendStates);
+  auto thread = Thread::Current();
+  HANDLESCOPE(thread);
+
+  CallSiteResetter resetter(zone);
+  Code& code = Code::Handle(zone);
+  Function& function = Function::Handle(zone);
+
+  SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+  for (intptr_t i = 0, n = suspend_states.length(); i < n; ++i) {
+    const SuspendState& suspend_state = *suspend_states[i];
+    ASSERT(suspend_state.pc() != 0);
+    code = suspend_state.GetCodeObject();
+    ASSERT(!code.IsNull());
+    if (code.is_optimized() && !code.is_force_optimized()) {
+      function = code.function();
+      // Before disabling [code], function needs to
+      // switch to unoptimized code first.
+      function.SwitchToLazyCompiledUnoptimizedCode();
+      // Disable [code] in order to trigger lazy deoptimization.
+      // Unless [code] is compiled for OSR, it may be already
+      // disabled in SwitchToLazyCompiledUnoptimizedCode.
+      if (!code.IsDisabled()) {
+        code.DisableDartCode();
+      }
+      // Reset switchable calls and caches for unoptimized
+      // code (if any), as it is going to be used to continue
+      // execution of the suspended function.
+      code = function.unoptimized_code();
+      if (!code.IsNull()) {
+        resetter.ResetSwitchableCalls(code);
+        resetter.ResetCaches(code);
+      }
+    } else {
+      function = code.function();
+      // ResetSwitchableCalls uses ICData array, which
+      // can be cleared along with the code in InvalidateFunctions
+      // during previous hot reloads.
+      // Rebuild an unoptimized code in order to recreate ICData array.
+      function.EnsureHasCompiledUnoptimizedCode();
+      resetter.ResetSwitchableCalls(code);
+      resetter.ResetCaches(code);
+    }
+  }
+}
+
 // Finds fields that are initialized or have a value that does not conform to
 // the field's static type, setting Field::needs_load_guard(). Accessors for
 // such fields are compiled with additional checks to handle lazy initialization
diff --git a/runtime/vm/isolate_reload.h b/runtime/vm/isolate_reload.h
index 939f512..07978e4 100644
--- a/runtime/vm/isolate_reload.h
+++ b/runtime/vm/isolate_reload.h
@@ -281,7 +281,6 @@
   friend class Class;  // AddStaticFieldMapping, AddEnumBecomeMapping.
   friend class Library;
   friend class ObjectLocator;
-  friend class MarkFunctionsForRecompilation;  // IsDirty.
   friend class ReasonForCancelling;
   friend class ProgramReloadContext;
   friend class IsolateGroup;  // GetClassSizeForHeapWalkAt
@@ -356,6 +355,9 @@
       const GrowableArray<const KernelProgramInfo*>& kernel_infos);
   void InvalidateFunctions(Zone* zone,
                            const GrowableArray<const Function*>& functions);
+  void InvalidateSuspendStates(
+      Zone* zone,
+      const GrowableArray<const SuspendState*>& suspend_states);
   void InvalidateFields(Zone* zone,
                         const GrowableArray<const Field*>& fields,
                         const GrowableArray<const Instance*>& instances);
@@ -411,7 +413,6 @@
   friend class Class;  // AddStaticFieldMapping, AddEnumBecomeMapping.
   friend class Library;
   friend class ObjectLocator;
-  friend class MarkFunctionsForRecompilation;  // IsDirty.
   friend class ReasonForCancelling;
   friend class IsolateGroupReloadContext;
 };
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 5cb7d4f..ee8d3a6 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -2037,9 +2037,6 @@
   FunctionNodeHelper function_node_helper(&helper_);
   function_node_helper.ReadUntilIncluding(FunctionNodeHelper::kDartAsyncMarker);
   if (function_node_helper.async_marker_ == FunctionNodeHelper::kAsync) {
-    if (!FLAG_precompiled_mode) {
-      FATAL("Compact async functions are only supported in AOT mode.");
-    }
     function.set_modifier(UntaggedFunction::kAsync);
     function.set_is_debuggable(true);
     function.set_is_inlinable(false);
@@ -2047,9 +2044,6 @@
     ASSERT(function.IsCompactAsyncFunction());
   } else if (function_node_helper.async_marker_ ==
              FunctionNodeHelper::kAsyncStar) {
-    if (!FLAG_precompiled_mode) {
-      FATAL("Compact async* functions are only supported in AOT mode.");
-    }
     function.set_modifier(UntaggedFunction::kAsyncGen);
     function.set_is_debuggable(true);
     function.set_is_inlinable(false);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 3526a5c..7bc0b78 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -12460,8 +12460,12 @@
   untag()->set_name(name.ptr());
 }
 
-void Library::set_url(const String& name) const {
-  untag()->set_url(name.ptr());
+void Library::set_url(const String& url) const {
+  untag()->set_url(url.ptr());
+}
+
+void Library::set_private_key(const String& key) const {
+  untag()->set_private_key(key.ptr());
 }
 
 void Library::set_kernel_data(const ExternalTypedData& data) const {
@@ -26055,12 +26059,22 @@
                                   const Instance& function_data,
                                   Heap::Space space) {
   SuspendState& result = SuspendState::Handle();
+  const intptr_t instance_size = SuspendState::InstanceSize(
+      frame_size + SuspendState::FrameSizeGrowthGap());
   {
-    ObjectPtr raw = Object::Allocate(
-        SuspendState::kClassId, SuspendState::InstanceSize(frame_size), space,
-        SuspendState::ContainsCompressedPointers());
+    ObjectPtr raw =
+        Object::Allocate(SuspendState::kClassId, instance_size, space,
+                         SuspendState::ContainsCompressedPointers());
     NoSafepointScope no_safepoint;
     result ^= raw;
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    // Include heap object alignment overhead into the frame capacity.
+    const intptr_t frame_capacity =
+        instance_size - SuspendState::payload_offset();
+    ASSERT(SuspendState::InstanceSize(frame_capacity) == instance_size);
+    ASSERT(frame_size <= frame_capacity);
+    result.set_frame_capacity(frame_capacity);
+#endif
     result.set_frame_size(frame_size);
     result.set_pc(0);
     result.set_function_data(function_data);
@@ -26068,6 +26082,13 @@
   return result.ptr();
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+void SuspendState::set_frame_capacity(intptr_t frame_capcity) const {
+  ASSERT(frame_capcity >= 0);
+  StoreNonPointer(&untag()->frame_capacity_, frame_capcity);
+}
+#endif
+
 void SuspendState::set_frame_size(intptr_t frame_size) const {
   ASSERT(frame_size >= 0);
   StoreNonPointer(&untag()->frame_size_, frame_size);
@@ -26094,8 +26115,10 @@
   ASSERT(code != Code::null());
   return code;
 #else
-  UNIMPLEMENTED();
-  return Code::null();
+  ObjectPtr code = *(reinterpret_cast<ObjectPtr*>(
+      untag()->payload() + untag()->frame_size_ +
+      runtime_frame_layout.code_from_fp * kWordSize));
+  return Code::RawCast(code);
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 06fae2d..8b3c7a3 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -5120,6 +5120,7 @@
   // the name and url.
   void set_name(const String& name) const;
   void set_url(const String& url) const;
+  void set_private_key(const String& key) const;
 
   void set_num_imports(intptr_t value) const;
   void set_flags(uint8_t flags) const;
@@ -6404,9 +6405,14 @@
     return code->untag()->instructions();
   }
 
-  static intptr_t saved_instructions_offset() {
+  static intptr_t instructions_offset() {
     return OFFSET_OF(UntaggedCode, instructions_);
   }
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  static intptr_t active_instructions_offset() {
+    return OFFSET_OF(UntaggedCode, active_instructions_);
+  }
+#endif
 
   using EntryKind = CodeEntryKind;
 
@@ -11813,20 +11819,31 @@
 
   static intptr_t HeaderSize() { return sizeof(UntaggedSuspendState); }
   static intptr_t UnroundedSize(SuspendStatePtr ptr) {
-    return UnroundedSize(ptr->untag()->frame_size_);
+    return UnroundedSize(ptr->untag()->frame_capacity());
   }
-  static intptr_t UnroundedSize(intptr_t frame_size) {
-    return HeaderSize() + frame_size;
+  static intptr_t UnroundedSize(intptr_t frame_capacity) {
+    return HeaderSize() + frame_capacity;
   }
   static intptr_t InstanceSize() {
     ASSERT_EQUAL(sizeof(UntaggedSuspendState),
                  OFFSET_OF_RETURNED_VALUE(UntaggedSuspendState, payload));
     return 0;
   }
-  static intptr_t InstanceSize(intptr_t frame_size) {
-    return RoundedAllocationSize(UnroundedSize(frame_size));
+  static intptr_t InstanceSize(intptr_t frame_capacity) {
+    return RoundedAllocationSize(UnroundedSize(frame_capacity));
   }
 
+  // Number of extra words reserved for growth of frame size
+  // during SuspendState allocation. Frames do not grow in AOT.
+  static intptr_t FrameSizeGrowthGap() {
+    return ONLY_IN_PRECOMPILED(0) NOT_IN_PRECOMPILED(2);
+  }
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  static intptr_t frame_capacity_offset() {
+    return OFFSET_OF(UntaggedSuspendState, frame_capacity_);
+  }
+#endif
   static intptr_t frame_size_offset() {
     return OFFSET_OF(UntaggedSuspendState, frame_size_);
   }
@@ -11848,16 +11865,23 @@
                              const Instance& function_data,
                              Heap::Space space = Heap::kNew);
 
-  InstancePtr function_data() const { return untag()->function_data(); }
   uword pc() const { return untag()->pc_; }
+  InstancePtr function_data() const {
+    return untag()->function_data();
+  }
 
   // Returns Code object corresponding to the suspended function.
   CodePtr GetCodeObject() const;
 
  private:
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  void set_frame_capacity(intptr_t frame_capcity) const;
+#endif
   void set_frame_size(intptr_t frame_size) const;
   void set_pc(uword pc) const;
   void set_function_data(const Instance& function_data) const;
+  void set_then_callback(const Closure& then_callback) const;
+  void set_error_callback(const Closure& error_callback) const;
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(SuspendState, Instance);
   friend class Class;
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index 85f6653..d939b4a 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -146,7 +146,8 @@
     descriptors_ = code.pc_descriptors();
     PcDescriptors::Iterator iter(descriptors_, UntaggedPcDescriptors::kIcCall);
     while (iter.MoveNext()) {
-      FATAL1("%s has IC calls but no ic_data_array\n", object_.ToCString());
+      FATAL1("%s has IC calls but no ic_data_array\n",
+             function.ToFullyQualifiedCString());
     }
 #endif
     return;
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index f2959f4..733ed33 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -250,6 +250,7 @@
 
   String& function_name = String::Handle(zone);
   Function& function = Function::Handle(zone);
+  Field& field = Field::Handle(zone);
 
   function_name = async_lib.PrivateName(Symbols::AsyncStarMoveNextHelper());
   ASSERT(!function_name.IsNull());
@@ -297,6 +298,10 @@
   ASSERT(!function.IsNull());
   set_async_star_stream_controller_add_stream(function);
 
+  field = cls.LookupFieldAllowPrivate(Symbols::asyncStarBody());
+  ASSERT(!field.IsNull());
+  set_async_star_stream_controller_async_star_body(field);
+
   if (FLAG_async_debugger) {
     // Disable debugging and inlining of all functions on the
     // _AsyncStarStreamController class.
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 674d1b4..bbfe908 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -180,6 +180,7 @@
   RW(Function, suspend_state_handle_exception)                                 \
   RW(Class, async_star_stream_controller)                                      \
   RW(Class, stream_class)                                                      \
+  RW(Field, async_star_stream_controller_async_star_body)                      \
   ARW_RELAXED(Smi, future_timeout_future_index)                                \
   ARW_RELAXED(Smi, future_wait_future_index)                                   \
   RW(CompressedStackMaps, canonicalized_stack_map_entries)                     \
@@ -261,6 +262,7 @@
   RW(Array, dispatch_table_code_entries)                                       \
   RW(GrowableObjectArray, instructions_tables)                                 \
   RW(Array, obfuscation_map)                                                   \
+  RW(Array, loading_unit_uris)                                                 \
   RW(GrowableObjectArray, ffi_callback_functions)                              \
   RW(Class, ffi_pointer_class)                                                 \
   RW(Class, ffi_native_type_class)                                             \
diff --git a/runtime/vm/pending_deopts.cc b/runtime/vm/pending_deopts.cc
index 46ae036..c3d7cd2 100644
--- a/runtime/vm/pending_deopts.cc
+++ b/runtime/vm/pending_deopts.cc
@@ -73,7 +73,17 @@
 }
 
 uword PendingDeopts::RemapExceptionPCForDeopt(uword program_counter,
-                                              uword frame_pointer) {
+                                              uword frame_pointer,
+                                              bool* clear_deopt) {
+  *clear_deopt = false;
+  // Do not attempt to deopt at async exception handler as it doesn't
+  // belong to the function code. Async handler never continues execution
+  // in the same frame - it either rethrows exception to the caller or
+  // tail calls Dart handler, leaving the function frame before the call.
+  if (program_counter == StubCode::AsyncExceptionHandler().EntryPoint()) {
+    *clear_deopt = true;
+    return program_counter;
+  }
   // Check if the target frame is scheduled for lazy deopt.
   for (intptr_t i = 0; i < pending_deopts_->length(); i++) {
     if ((*pending_deopts_)[i].fp() == frame_pointer) {
diff --git a/runtime/vm/pending_deopts.h b/runtime/vm/pending_deopts.h
index 778dba2..27f16eb 100644
--- a/runtime/vm/pending_deopts.h
+++ b/runtime/vm/pending_deopts.h
@@ -40,7 +40,9 @@
   uword FindPendingDeopt(uword fp);
   void ClearPendingDeoptsBelow(uword fp, ClearReason reason);
   void ClearPendingDeoptsAtOrBelow(uword fp, ClearReason reason);
-  uword RemapExceptionPCForDeopt(uword program_counter, uword frame_pointer);
+  uword RemapExceptionPCForDeopt(uword program_counter,
+                                 uword frame_pointer,
+                                 bool* clear_deopt);
 
  private:
   MallocGrowableArray<PendingLazyDeopt>* pending_deopts_;
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 07b74a2..4d87ab1 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -174,8 +174,8 @@
     case kSuspendStateCid: {
       const SuspendStatePtr raw_suspend_state =
           static_cast<const SuspendStatePtr>(this);
-      intptr_t frame_size = raw_suspend_state->untag()->frame_size_;
-      instance_size = SuspendState::InstanceSize(frame_size);
+      intptr_t frame_capacity = raw_suspend_state->untag()->frame_capacity();
+      instance_size = SuspendState::InstanceSize(frame_capacity);
       break;
     }
     case kTypeArgumentsCid: {
@@ -658,7 +658,7 @@
     }
   }
 
-  return SuspendState::InstanceSize(raw_obj->untag()->frame_size_);
+  return SuspendState::InstanceSize(raw_obj->untag()->frame_capacity());
 }
 
 bool UntaggedCode::ContainsPC(const ObjectPtr raw_obj, uword pc) {
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index eb60d27..abc979e 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -3307,6 +3307,7 @@
 class UntaggedSuspendState : public UntaggedInstance {
   RAW_HEAP_OBJECT_IMPLEMENTATION(SuspendState);
 
+  NOT_IN_PRECOMPILED(intptr_t frame_capacity_);
   intptr_t frame_size_;
   uword pc_;
 
@@ -3324,6 +3325,14 @@
  public:
   uword pc() const { return pc_; }
 
+  intptr_t frame_capacity() const {
+#if defined(DART_PRECOMPILED_RUNTIME)
+    return frame_size_;
+#else
+    return frame_capacity_;
+#endif
+  }
+
   static intptr_t payload_offset() {
     return OFFSET_OF_RETURNED_VALUE(UntaggedSuspendState, payload);
   }
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index a3fcc07..caa9315 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -711,15 +711,36 @@
 
 // Allocate a SuspendState object.
 // Arg0: frame size.
-// Arg1: function data.
+// Arg1: existing SuspendState object or function data.
 // Return value: newly allocated object.
 DEFINE_RUNTIME_ENTRY(AllocateSuspendState, 2) {
-  const Smi& frame_size = Smi::CheckedHandle(zone, arguments.ArgAt(0));
-  const Instance& function_data =
-      Instance::CheckedHandle(zone, arguments.ArgAt(1));
-  const SuspendState& result = SuspendState::Handle(
-      zone, SuspendState::New(frame_size.Value(), function_data,
-                              SpaceForRuntimeAllocation()));
+  const intptr_t frame_size =
+      Smi::CheckedHandle(zone, arguments.ArgAt(0)).Value();
+  const Object& previous_state = Object::Handle(zone, arguments.ArgAt(1));
+  SuspendState& result = SuspendState::Handle(zone);
+  if (previous_state.IsSuspendState()) {
+    const auto& suspend_state = SuspendState::Cast(previous_state);
+    const auto& function_data =
+        Instance::Handle(zone, suspend_state.function_data());
+    ObjectStore* object_store = thread->isolate_group()->object_store();
+    if (function_data.GetClassId() ==
+        Class::Handle(zone, object_store->async_star_stream_controller())
+            .id()) {
+      // Reset _AsyncStarStreamController.asyncStarBody to null in order
+      // to create a new callback closure during next yield.
+      // The new callback closure will capture the reallocated SuspendState.
+      function_data.SetField(
+          Field::Handle(
+              zone,
+              object_store->async_star_stream_controller_async_star_body()),
+          Object::null_object());
+    }
+    result = SuspendState::New(frame_size, function_data,
+                               SpaceForRuntimeAllocation());
+  } else {
+    result = SuspendState::New(frame_size, Instance::Cast(previous_state),
+                               SpaceForRuntimeAllocation());
+  }
   arguments.SetReturn(result);
 }
 
@@ -3111,6 +3132,20 @@
   }
 }
 
+static bool IsSuspendedFrame(Zone* zone,
+                             const Function& function,
+                             StackFrame* frame) {
+  if (!function.IsSuspendableFunction()) {
+    return false;
+  }
+  auto& suspend_state = Object::Handle(
+      zone, *reinterpret_cast<ObjectPtr*>(LocalVarAddress(
+                frame->fp(), runtime_frame_layout.FrameSlotForVariableIndex(
+                                 SuspendState::kSuspendStateVarIndex))));
+  return suspend_state.IsSuspendState() &&
+         (SuspendState::Cast(suspend_state).pc() != 0);
+}
+
 void DeoptimizeAt(Thread* mutator_thread,
                   const Code& optimized_code,
                   StackFrame* frame) {
@@ -3136,7 +3171,12 @@
     function.SwitchToUnoptimizedCode();
   }
 
-  if (frame->IsMarkedForLazyDeopt()) {
+  if (IsSuspendedFrame(zone, function, frame)) {
+    // Frame is suspended and going to be removed from the stack.
+    if (FLAG_trace_deoptimization) {
+      THR_Print("Not deoptimizing suspended frame, fp=%" Pp "\n", frame->fp());
+    }
+  } else if (frame->IsMarkedForLazyDeopt()) {
     // Deopt already scheduled.
     if (FLAG_trace_deoptimization) {
       THR_Print("Lazy deopt already scheduled for fp=%" Pp "\n", frame->fp());
@@ -3408,6 +3448,52 @@
   UNREACHABLE();
 }
 
+// Handle slow path actions for the resumed frame after it was
+// copied back to the stack:
+// 1) deoptimization;
+// 2) breakpoint at resumption;
+// 3) throwing an exception.
+//
+// Arg0: exception
+// Arg1: stack trace
+DEFINE_RUNTIME_ENTRY(ResumeFrame, 2) {
+  const Instance& exception = Instance::CheckedHandle(zone, arguments.ArgAt(0));
+  const Instance& stacktrace =
+      Instance::CheckedHandle(zone, arguments.ArgAt(1));
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+#if !defined(PRODUCT)
+  if (isolate->has_resumption_breakpoints()) {
+    isolate->debugger()->ResumptionBreakpoint();
+  }
+#endif
+
+  DartFrameIterator iterator(thread,
+                             StackFrameIterator::kNoCrossThreadIteration);
+  StackFrame* frame = iterator.NextFrame();
+  ASSERT(frame->IsDartFrame());
+  ASSERT(Function::Handle(zone, frame->LookupDartFunction())
+             .IsSuspendableFunction());
+  const Code& caller_code = Code::Handle(zone, frame->LookupDartCode());
+  if (caller_code.IsDisabled() && caller_code.is_optimized() &&
+      !caller_code.is_force_optimized()) {
+    const uword deopt_pc = frame->pc();
+    thread->pending_deopts().AddPendingDeopt(frame->fp(), deopt_pc);
+    frame->MarkForLazyDeopt();
+
+    if (FLAG_trace_deoptimization) {
+      THR_Print("Lazy deopt scheduled for resumed frame fp=%" Pp ", pc=%" Pp
+                "\n",
+                frame->fp(), deopt_pc);
+    }
+  }
+#endif
+
+  if (!exception.IsNull()) {
+    Exceptions::ReThrow(thread, exception, stacktrace);
+  }
+}
+
 void OnEveryRuntimeEntryCall(Thread* thread,
                              const char* runtime_call_name,
                              bool can_lazy_deopt) {
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 685c56d..90a51a9 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -62,6 +62,7 @@
   V(LateFieldAssignedDuringInitializationError)                                \
   V(LateFieldNotInitializedError)                                              \
   V(CompileFunction)                                                           \
+  V(ResumeFrame)                                                               \
   V(SwitchableCallMiss)                                                        \
   V(NotLoaded)
 
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 7eb6d2d..f0fe6a8 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -457,6 +457,7 @@
   V(_yieldAsyncStar, "_yieldAsyncStar")                                        \
   V(add, "add")                                                                \
   V(addStream, "addStream")                                                    \
+  V(asyncStarBody, "asyncStarBody")                                            \
   V(callback, "callback")                                                      \
   V(capture_length, ":capture_length")                                         \
   V(capture_start_index, ":capture_start_index")                               \
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index dc5b90b..4d95cb4 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -129,6 +129,14 @@
     StubCode::AllocateObjectParameterized().ptr(), nullptr)                    \
   V(CodePtr, allocate_object_slow_stub_, StubCode::AllocateObjectSlow().ptr(), \
     nullptr)                                                                   \
+  V(CodePtr, async_exception_handler_stub_,                                    \
+    StubCode::AsyncExceptionHandler().ptr(), nullptr)                          \
+  V(CodePtr, resume_stub_, StubCode::Resume().ptr(), nullptr)                  \
+  V(CodePtr, return_async_stub_, StubCode::ReturnAsync().ptr(), nullptr)       \
+  V(CodePtr, return_async_not_future_stub_,                                    \
+    StubCode::ReturnAsyncNotFuture().ptr(), nullptr)                           \
+  V(CodePtr, return_async_star_stub_, StubCode::ReturnAsyncStar().ptr(),       \
+    nullptr)                                                                   \
   V(CodePtr, stack_overflow_shared_without_fpu_regs_stub_,                     \
     StubCode::StackOverflowSharedWithoutFPURegs().ptr(), nullptr)              \
   V(CodePtr, stack_overflow_shared_with_fpu_regs_stub_,                        \
diff --git a/runtime/vm/type_testing_stubs_test.cc b/runtime/vm/type_testing_stubs_test.cc
index 2a0f8e9..8be06b0 100644
--- a/runtime/vm/type_testing_stubs_test.cc
+++ b/runtime/vm/type_testing_stubs_test.cc
@@ -1140,6 +1140,8 @@
           (() => 3) as int Function()?;
 )";
 
+  SetupCoreLibrariesForUnitTest();
+
   const auto& class_future =
       Class::Handle(IsolateGroup::Current()->object_store()->future_class());
 
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index d0bddf8..a70896e 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -2543,6 +2543,7 @@
 }
 
 @patch
+@pragma("vm:entry-point")
 class ResourceHandle {
   factory ResourceHandle.fromFile(RandomAccessFile file) {
     int fd = (file as _RandomAccessFile).fd;
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index d6f6c74..238cbb6 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -110,6 +110,7 @@
 class _AsyncStarStreamController<T> {
   @pragma("vm:entry-point")
   StreamController<T> controller;
+  @pragma("vm:entry-point")
   Function? asyncStarBody;
   bool isAdding = false;
   bool onListenReceived = false;
diff --git a/tests/language/async/await_test.dart b/tests/language/async/await_test.dart
index 07c3dad..e7920d6 100644
--- a/tests/language/async/await_test.dart
+++ b/tests/language/async/await_test.dart
@@ -2,7 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library async_await_test;
+// VMOptions=
+// VMOptions=--optimization-counter-threshold=5
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
diff --git a/tests/language/await/future_test.dart b/tests/language/await/future_test.dart
index 10314a4..7654698 100644
--- a/tests/language/await/future_test.dart
+++ b/tests/language/await/future_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// VMOptions=
 // VMOptions=--optimization-counter-threshold=5
 
 import 'package:expect/expect.dart';
diff --git a/tests/language_2/async/await_test.dart b/tests/language_2/async/await_test.dart
index f8b79d2..fd3f3f9 100644
--- a/tests/language_2/async/await_test.dart
+++ b/tests/language_2/async/await_test.dart
@@ -4,7 +4,8 @@
 
 // @dart = 2.9
 
-library async_await_test;
+// VMOptions=
+// VMOptions=--optimization-counter-threshold=5
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
diff --git a/tests/language_2/await/future_test.dart b/tests/language_2/await/future_test.dart
index c927f6f..4b9c8d3 100644
--- a/tests/language_2/await/future_test.dart
+++ b/tests/language_2/await/future_test.dart
@@ -4,6 +4,7 @@
 
 // @dart = 2.9
 
+// VMOptions=
 // VMOptions=--optimization-counter-threshold=5
 
 import 'package:expect/expect.dart';
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 905ce63..6d0cacd4 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -7,6 +7,7 @@
 # prefix.
 io/http_close_stack_overflow_test: Skip # The test is heavy loaded. Should be used for manual test.
 io/http_linklocal_ipv6_test: SkipByDesign # This needs manual test.
+io/large_file_read_small_file_test: Slow # Test reads small file 1M times
 io/non_utf8_directory_test: Skip # Issue 33519. Temp files causing bots to go purple.
 io/non_utf8_file_test: Skip # Issue 33519. Temp files causing bots to go purple.
 io/non_utf8_link_test: Skip # Issue 33519. Temp files causing bots to go purple.
@@ -74,9 +75,6 @@
 io/https_connection_closed_during_handshake_test: SkipByDesign # long_ssl_cert_evaluation needed for long handshake is only supported on mac.
 io/https_nonblocking_trust_evaluation_test: SkipByDesign
 
-[ $system == windows ]
-io/large_file_read_small_file_test: Slow # Test reads small file 1M times
-
 [ $builder_tag == swarming && $system == macos ]
 io/*: Skip # Issue 30618
 
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 5e3852e..fba85b6 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -7,6 +7,7 @@
 # prefix.
 io/http_close_stack_overflow_test: Skip # The test is heavy loaded. Should be used for manual test.
 io/http_linklocal_ipv6_test: SkipByDesign # This needs manual test.
+io/large_file_read_small_file_test: Slow # Test reads small file 1M times
 io/non_utf8_directory_test: Skip # Issue 33519. Temp files causing bots to go purple.
 io/non_utf8_file_test: Skip # Issue 33519. Temp files causing bots to go purple.
 io/non_utf8_link_test: Skip # Issue 33519. Temp files causing bots to go purple.
@@ -84,9 +85,6 @@
 io/https_connection_closed_during_handshake_test: SkipByDesign # long_ssl_cert_evaluation needed for long handshake is only supported on mac.
 io/https_nonblocking_trust_evaluation_test: SkipByDesign
 
-[ $system == windows ]
-io/large_file_read_small_file_test: Slow # Test reads small file 1M times
-
 [ $builder_tag == swarming && $system == macos ]
 io/*: Skip # Issue 30618
 
diff --git a/tools/VERSION b/tools/VERSION
index 3548928..b3753a6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 166
+PRERELEASE 167
 PRERELEASE_PATCH 0
\ No newline at end of file
