Version 2.18.0-167.0.dev

Merge commit '55a4649075343b7202b38fce41edeac3e84696ce' into 'dev'
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