diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 70cfbb2..2b29fe4 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2021-01-16T20:34:15.774260",
+  "generated": "2021-02-04T09:42:25.936196",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -94,7 +94,7 @@
       "name": "analyzer_plugin",
       "rootUri": "../pkg/analyzer_plugin",
       "packageUri": "lib/",
-      "languageVersion": "2.3"
+      "languageVersion": "2.9"
     },
     {
       "name": "analyzer_utilities",
@@ -117,7 +117,8 @@
     {
       "name": "async_helper",
       "rootUri": "../pkg/async_helper",
-      "packageUri": "lib/"
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
     },
     {
       "name": "bazel_worker",
@@ -177,19 +178,19 @@
       "name": "convert",
       "rootUri": "../third_party/pkg/convert",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "crypto",
       "rootUri": "../third_party/pkg/crypto",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "csslib",
       "rootUri": "../third_party/pkg/csslib",
       "packageUri": "lib/",
-      "languageVersion": "2.11"
+      "languageVersion": "2.12"
     },
     {
       "name": "dart2js_info",
@@ -254,7 +255,8 @@
     {
       "name": "expect",
       "rootUri": "../pkg/expect",
-      "packageUri": "lib/"
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
     },
     {
       "name": "ffi",
@@ -269,6 +271,12 @@
       "languageVersion": "2.12"
     },
     {
+      "name": "file_testing",
+      "rootUri": "../third_party/pkg/file/packages/file_testing",
+      "packageUri": "lib/",
+      "languageVersion": "2.1"
+    },
+    {
       "name": "fixnum",
       "rootUri": "../third_party/pkg/fixnum",
       "packageUri": "lib/",
@@ -307,7 +315,7 @@
       "name": "http",
       "rootUri": "../third_party/pkg/http",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "http_io",
@@ -349,7 +357,7 @@
       "name": "js",
       "rootUri": "../pkg/js",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "js_ast",
@@ -390,7 +398,7 @@
       "name": "logging",
       "rootUri": "../third_party/pkg/logging",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "markdown",
@@ -408,7 +416,7 @@
       "name": "meta",
       "rootUri": "../pkg/meta",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "mime",
@@ -456,7 +464,7 @@
       "name": "observatory",
       "rootUri": "../runtime/observatory",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "observatory_2",
@@ -495,13 +503,13 @@
       "name": "pedantic",
       "rootUri": "../third_party/pkg/pedantic",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "pool",
       "rootUri": "../third_party/pkg/pool",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "protobuf",
@@ -536,7 +544,8 @@
     {
       "name": "sdk_library_metadata",
       "rootUri": "../sdk/lib/_internal/sdk_library_metadata",
-      "packageUri": "lib/"
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
     },
     {
       "name": "shelf",
@@ -560,7 +569,7 @@
       "name": "shelf_static",
       "rootUri": "../third_party/pkg/shelf_static",
       "packageUri": "lib/",
-      "languageVersion": "2.0"
+      "languageVersion": "2.3"
     },
     {
       "name": "shelf_web_socket",
@@ -590,7 +599,7 @@
       "name": "source_span",
       "rootUri": "../third_party/pkg/source_span",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "sourcemap_testing",
@@ -608,13 +617,13 @@
       "name": "stack_trace",
       "rootUri": "../third_party/pkg/stack_trace",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "stagehand",
       "rootUri": "../third_party/pkg/stagehand",
       "packageUri": "lib/",
-      "languageVersion": "2.8"
+      "languageVersion": "2.10"
     },
     {
       "name": "status_file",
@@ -758,7 +767,7 @@
       "name": "web_socket_channel",
       "rootUri": "../third_party/pkg/web_socket_channel",
       "packageUri": "lib/",
-      "languageVersion": "2.0"
+      "languageVersion": "2.10"
     },
     {
       "name": "webdriver",
@@ -773,4 +782,4 @@
       "languageVersion": "2.12"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/DEPS b/DEPS
index d1a47cc..9167b6a 100644
--- a/DEPS
+++ b/DEPS
@@ -71,7 +71,7 @@
   "args_rev": "2c6a221f45e4e0ef447b5d09101bf8a52e1ccd36",
   "async_rev": "695b3ac280f107c84adf7488743abfdfaaeea68f",
   "bazel_worker_rev": "060c55a933d39798681a4f533b161b81dc48d77e",
-  "benchmark_harness_rev": "ec6b646f5443faa871e126ac1ba248c94ca06257",
+  "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
   "boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
   "boringssl_gen_rev": "aaac86738c4f2d1bdf00f54d197f50f247ffee04",
   "boringssl_rev" : "4dfd5af70191b068aebe567b8e29ce108cee85ce",
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 278145e..8c95cab 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -8,6 +8,7 @@
 * Added `AnalysisContext.sdkRoot`.
 * Removed `NullSafetyUnderstandingFlag`.
 * Removed `functionTypeAliasElement` from `TypeSystem.instantiateToBounds2`.
+* Added `Annotation.typeArguments` in preparation for supporting #44838.
 
 ## 0.41.1
 * Updated `PackageBuildWorkspace` that supports `package:build` to stop
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 471b883..80c8339 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -88,7 +88,12 @@
 ///        annotation*
 ///
 ///    annotation ::=
-///        '@' [Identifier] ('.' [SimpleIdentifier])? [ArgumentList]?
+///        '@' metadatum
+///
+///    metadatum ::=
+///        [Identifier]
+///      | qualifiedName
+///      | constructorDesignation argumentPart
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class Annotation implements AstNode {
@@ -146,6 +151,14 @@
 
   /// Set the period before the constructor name to the given [token].
   set period(Token? token);
+
+  /// Returns the type arguments to the constructor being invoked, or `null` if
+  /// (a) this annotation is not the invocation of a constructor or (b) this
+  /// annotation does not specify type arguments explicitly.
+  ///
+  /// Note that type arguments are only valid if [Feature.generic_metadata] is
+  /// enabled.
+  TypeArgumentList? get typeArguments;
 }
 
 /// A list of arguments in the invocation of an executable element (that is, a
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 55a558c..a73af79 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -20,8 +20,16 @@
   /// [constructorName] can be `null` if the annotation is not referencing a
   /// named constructor. The [arguments] can be `null` if the annotation is not
   /// referencing a constructor.
-  Annotation annotation(Token atSign, Identifier name, Token? period,
-      SimpleIdentifier? constructorName, ArgumentList? arguments);
+  ///
+  /// Note that type arguments are only valid if [Feature.generic_metadata] is
+  /// enabled.
+  Annotation annotation(
+      {required Token atSign,
+      required Identifier name,
+      TypeArgumentList? typeArguments,
+      Token? period,
+      SimpleIdentifier? constructorName,
+      ArgumentList? arguments});
 
   /// Returns a newly created list of arguments. The list of [arguments] can
   /// be `null` if there are no arguments.
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 8e3687f..030cecb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -8,7 +8,7 @@
 
 /// The current version of the Dart language (or, for non-stable releases, the
 /// version of the language currently in the process of being developed).
-const _currentVersion = '2.12.0';
+const _currentVersion = '2.13.0';
 
 /// A map containing information about all known experimental flags.
 final _knownFeatures = <String, ExperimentalFeature>{
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 807f627..ed65241 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -180,6 +180,14 @@
   /// the name of the field that is being referenced.
   late IdentifierImpl _name;
 
+  /// The type arguments to the constructor being invoked, or `null` if (a) this
+  /// annotation is not the invocation of a constructor or (b) this annotation
+  /// does not specify type arguments explicitly.
+  ///
+  /// Note that type arguments are only valid if [Feature.generic_metadata] is
+  /// enabled.
+  TypeArgumentListImpl? _typeArguments;
+
   /// The period before the constructor name, or `null` if this annotation is
   /// not the invocation of a named constructor.
   @override
@@ -206,9 +214,18 @@
   /// [constructorName] can be `null` if the annotation is not referencing a
   /// named constructor. The [arguments] can be `null` if the annotation is not
   /// referencing a constructor.
-  AnnotationImpl(this.atSign, IdentifierImpl name, this.period,
-      SimpleIdentifierImpl? constructorName, ArgumentListImpl? arguments) {
+  ///
+  /// Note that type arguments are only valid if [Feature.generic_metadata] is
+  /// enabled.
+  AnnotationImpl(
+      this.atSign,
+      IdentifierImpl name,
+      TypeArgumentListImpl? typeArguments,
+      this.period,
+      SimpleIdentifierImpl? constructorName,
+      ArgumentListImpl? arguments) {
     _name = _becomeParentOf(name)!;
+    _typeArguments = _becomeParentOf(typeArguments);
     _constructorName = _becomeParentOf(constructorName);
     _arguments = _becomeParentOf(arguments);
   }
@@ -228,6 +245,7 @@
   Iterable<SyntacticEntity> get childEntities => ChildEntities()
     ..add(atSign)
     ..add(_name)
+    ..add(_typeArguments)
     ..add(period)
     ..add(_constructorName)
     ..add(_arguments);
@@ -277,11 +295,21 @@
   AstNode get parent => super.parent!;
 
   @override
+  TypeArgumentList? get typeArguments => _typeArguments;
+
+  /// Sets the type arguments to the constructor being invoked to the given
+  /// [typeArguments].
+  set typeArguments(TypeArgumentList? typeArguments) {
+    _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?);
+  }
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAnnotation(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
     _name.accept(visitor);
+    _typeArguments?.accept(visitor);
     _constructorName?.accept(visitor);
     _arguments?.accept(visitor);
   }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index 63e7e6a..b442314 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -17,11 +17,17 @@
       AdjacentStringsImpl(strings);
 
   @override
-  Annotation annotation(Token atSign, Identifier name, Token? period,
-          SimpleIdentifier? constructorName, ArgumentList? arguments) =>
+  Annotation annotation(
+          {required Token atSign,
+          required Identifier name,
+          TypeArgumentList? typeArguments,
+          Token? period,
+          SimpleIdentifier? constructorName,
+          ArgumentList? arguments}) =>
       AnnotationImpl(
           atSign,
           name as IdentifierImpl,
+          typeArguments as TypeArgumentListImpl?,
           period,
           constructorName as SimpleIdentifierImpl?,
           arguments as ArgumentListImpl?);
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 24c111f..199a37f 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -136,6 +136,7 @@
   void visitAnnotation(Annotation node) {
     sink.write('@');
     safelyVisitNode(node.name);
+    safelyVisitNode(node.typeArguments);
     safelyVisitNodeWithPrefix(".", node.constructorName);
     safelyVisitNode(node.arguments);
   }
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 3f388e56b..d837988 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -113,11 +113,12 @@
 
   @override
   Annotation visitAnnotation(Annotation node) => astFactory.annotation(
-      cloneToken(node.atSign),
-      cloneNode(node.name),
-      cloneNullableToken(node.period),
-      cloneNullableNode(node.constructorName),
-      cloneNullableNode(node.arguments));
+      atSign: cloneToken(node.atSign),
+      name: cloneNode(node.name),
+      typeArguments: cloneNullableNode(node.typeArguments),
+      period: cloneNullableToken(node.period),
+      constructorName: cloneNullableNode(node.constructorName),
+      arguments: cloneNullableNode(node.arguments));
 
   @override
   ArgumentList visitArgumentList(ArgumentList node) => astFactory.argumentList(
@@ -1214,6 +1215,7 @@
     Annotation other = _other as Annotation;
     return isEqualTokens(node.atSign, other.atSign) &&
         isEqualNodes(node.name, other.name) &&
+        isEqualNodes(node.typeArguments, other.typeArguments) &&
         isEqualTokens(node.period, other.period) &&
         isEqualNodes(node.constructorName, other.constructorName) &&
         isEqualNodes(node.arguments, other.arguments);
@@ -2657,6 +2659,9 @@
     if (identical(node.arguments, _oldNode)) {
       node.arguments = _newNode as ArgumentList;
       return true;
+    } else if (identical(node.typeArguments, _oldNode)) {
+      (node as AnnotationImpl).typeArguments = _newNode as TypeArgumentList?;
+      return true;
     } else if (identical(node.constructorName, _oldNode)) {
       node.constructorName = _newNode as SimpleIdentifier;
       return true;
@@ -4013,6 +4018,7 @@
     if (_and(
         _isEqualTokens(node.atSign, toNode.atSign),
         _isEqualNodes(node.name, toNode.name),
+        _isEqualNodes(node.typeArguments, toNode.typeArguments),
         _isEqualTokens(node.period, toNode.period),
         _isEqualNodes(node.constructorName, toNode.constructorName),
         _isEqualNodes(node.arguments, toNode.arguments))) {
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 426cf7b..4c4dfb7 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1833,8 +1833,12 @@
         periodBeforeName != null ? pop() as SimpleIdentifier : null;
     pop(); // Type arguments, not allowed.
     var name = pop() as Identifier;
-    push(ast.annotation(atSign, name, periodBeforeName, constructorName,
-        invocation?.argumentList));
+    push(ast.annotation(
+        atSign: atSign,
+        name: name,
+        period: periodBeforeName,
+        constructorName: constructorName,
+        arguments: invocation?.argumentList));
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index d2f99c2..2815129 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -31,18 +31,20 @@
       astFactory.adjacentStrings(strings);
 
   static Annotation annotation(Identifier name) => astFactory.annotation(
-      TokenFactory.tokenFromType(TokenType.AT), name, null, null, null);
+      atSign: TokenFactory.tokenFromType(TokenType.AT), name: name);
 
   static Annotation annotation2(Identifier name,
-          SimpleIdentifier? constructorName, ArgumentList arguments) =>
+          SimpleIdentifier? constructorName, ArgumentList arguments,
+          {TypeArgumentList? typeArguments}) =>
       astFactory.annotation(
-          TokenFactory.tokenFromType(TokenType.AT),
-          name,
-          constructorName == null
+          atSign: TokenFactory.tokenFromType(TokenType.AT),
+          name: name,
+          typeArguments: typeArguments,
+          period: constructorName == null
               ? null
               : TokenFactory.tokenFromType(TokenType.PERIOD),
-          constructorName,
-          arguments);
+          constructorName: constructorName,
+          arguments: arguments);
 
   static ArgumentList argumentList([List<Expression> arguments = const []]) =>
       astFactory.argumentList(TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index af79a1f..56f70a9 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -262,11 +262,11 @@
     var constructorName = _readOptionalNode() as SimpleIdentifier?;
     var arguments = _readOptionalNode() as ArgumentList?;
     return astFactory.annotation(
-      Tokens.AT,
-      name,
-      Tokens.PERIOD,
-      constructorName,
-      arguments,
+      atSign: Tokens.AT,
+      name: name,
+      period: Tokens.PERIOD,
+      constructorName: constructorName,
+      arguments: arguments,
     );
   }
 
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 9f59914..f518e33 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -1372,6 +1372,12 @@
   SimpleIdentifier? get(Annotation node) => node.constructorName;
 }
 
+class Getter_NodeReplacerTest_test_annotation_4
+    implements NodeReplacerTest_Getter<Annotation, TypeArgumentList> {
+  @override
+  TypeArgumentList? get(Annotation node) => node.typeArguments;
+}
+
 class Getter_NodeReplacerTest_test_asExpression
     implements NodeReplacerTest_Getter<AsExpression, TypeAnnotation> {
   @override
@@ -2627,6 +2633,18 @@
     _assertReplace(node, Getter_NodeReplacerTest_test_annotation_2());
   }
 
+  void test_annotation_generic() {
+    Annotation node = AstTestFactory.annotation2(
+        AstTestFactory.identifier3("C"),
+        AstTestFactory.identifier3("c"),
+        AstTestFactory.argumentList([AstTestFactory.integer(0)]),
+        typeArguments:
+            AstTestFactory.typeArgumentList2([AstTestFactory.typeName4('T')]));
+    _assertReplace(node, Getter_NodeReplacerTest_test_annotation());
+    _assertReplace(node, Getter_NodeReplacerTest_test_annotation_3());
+    _assertReplace(node, Getter_NodeReplacerTest_test_annotation_2());
+  }
+
   void test_argumentList() {
     ArgumentList node =
         AstTestFactory.argumentList([AstTestFactory.integer(0)]);
diff --git a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
index bdcdd67..48e9a27 100644
--- a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
@@ -41,6 +41,15 @@
             AstTestFactory.identifier3("c"), AstTestFactory.argumentList()));
   }
 
+  void test_visitAnnotation_constructor_generic() {
+    _assertSource(
+        "@A<T>.c()",
+        AstTestFactory.annotation2(AstTestFactory.identifier3("A"),
+            AstTestFactory.identifier3("c"), AstTestFactory.argumentList(),
+            typeArguments: AstTestFactory.typeArgumentList2(
+                [AstTestFactory.typeName4('T')])));
+  }
+
   void test_visitArgumentList() {
     _assertSource(
         "(a, b)",
diff --git a/pkg/analyzer/test/src/dart/ast/utilities_test.dart b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
index acca07b..1fd52fa 100644
--- a/pkg/analyzer/test/src/dart/ast/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
@@ -190,6 +190,37 @@
     expect(toNode.element, same(element));
   }
 
+  void test_visitAnnotation_generic() {
+    var annotationClassName = "A";
+    var annotationConstructorName = "named";
+    var argumentName = "x";
+    var fromNode = AstTestFactory.annotation2(
+        AstTestFactory.identifier3(annotationClassName),
+        AstTestFactory.identifier3(annotationConstructorName),
+        AstTestFactory.argumentList(
+            [AstTestFactory.identifier3(argumentName)])) as AnnotationImpl;
+    var elementA = ElementFactory.classElement2(annotationClassName, ['T']);
+    var element = ElementFactory.constructorElement(
+        elementA, annotationConstructorName, true, [typeProvider.dynamicType]);
+    fromNode.element = element;
+    var typeArgumentName = 'U';
+    var elementU = ElementFactory.classElement2(typeArgumentName);
+    fromNode.typeArguments =
+        AstTestFactory.typeArgumentList2([AstTestFactory.typeName(elementU)]);
+    var toNode = AstTestFactory.annotation2(
+        AstTestFactory.identifier3(annotationClassName),
+        AstTestFactory.identifier3(annotationConstructorName),
+        AstTestFactory.argumentList(
+            [AstTestFactory.identifier3(argumentName)])) as AnnotationImpl;
+    toNode.typeArguments = AstTestFactory.typeArgumentList2(
+        [AstTestFactory.typeName4(typeArgumentName)]);
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect(toNode.element, same(element));
+    expect(
+        (toNode.typeArguments!.arguments.single as TypeName).name.staticElement,
+        same(elementU));
+  }
+
   void test_visitAsExpression() {
     AsExpression fromNode = AstTestFactory.asExpression(
         AstTestFactory.identifier3("x"), AstTestFactory.typeName4("A"));
diff --git a/pkg/analyzer_utilities/pubspec.yaml b/pkg/analyzer_utilities/pubspec.yaml
index 7142157..a8426e4 100644
--- a/pkg/analyzer_utilities/pubspec.yaml
+++ b/pkg/analyzer_utilities/pubspec.yaml
@@ -3,7 +3,7 @@
 publish_to: none
 
 environment:
-  sdk: '>=2.1.0 <3.0.0'
+  sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
   analyzer:
diff --git a/pkg/async_helper/pubspec.yaml b/pkg/async_helper/pubspec.yaml
index 202f86b..f79d98f 100644
--- a/pkg/async_helper/pubspec.yaml
+++ b/pkg/async_helper/pubspec.yaml
@@ -10,7 +10,7 @@
  the facilities provided in package:test.
 
 environment:
-  sdk: '>=2.0.0'
+  sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
   expect:
diff --git a/pkg/expect/pubspec.yaml b/pkg/expect/pubspec.yaml
index 6a8f0bc..f84f8c9 100644
--- a/pkg/expect/pubspec.yaml
+++ b/pkg/expect/pubspec.yaml
@@ -9,7 +9,7 @@
  test assertions.
 
 environment:
-  sdk: '>=2.0.0'
+  sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
   meta:
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index f2f282f..1915787 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -27,18 +27,18 @@
 }
 
 const Version enableAlternativeInvalidationStrategyVersion =
-    const Version(2, 12);
+    const Version(2, 13);
 const Version enableConstantUpdate2018Version = const Version(2, 0);
 const Version enableControlFlowCollectionsVersion = const Version(2, 0);
 const Version enableExtensionMethodsVersion = const Version(2, 6);
-const Version enableGenericMetadataVersion = const Version(2, 12);
+const Version enableGenericMetadataVersion = const Version(2, 13);
 const Version enableNonNullableVersion = const Version(2, 12);
-const Version enableNonfunctionTypeAliasesVersion = const Version(2, 12);
+const Version enableNonfunctionTypeAliasesVersion = const Version(2, 13);
 const Version enableSetLiteralsVersion = const Version(2, 0);
 const Version enableSpreadCollectionsVersion = const Version(2, 0);
-const Version enableTripleShiftVersion = const Version(2, 12);
-const Version enableValueClassVersion = const Version(2, 12);
-const Version enableVarianceVersion = const Version(2, 12);
+const Version enableTripleShiftVersion = const Version(2, 13);
+const Version enableValueClassVersion = const Version(2, 13);
+const Version enableVarianceVersion = const Version(2, 13);
 
 ExperimentalFlag parseExperimentalFlag(String flag) {
   switch (flag) {
@@ -101,33 +101,33 @@
 };
 
 const Map<ExperimentalFlag, Version> experimentEnabledVersion = {
-  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 12),
+  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 13),
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
-  ExperimentalFlag.genericMetadata: const Version(2, 12),
+  ExperimentalFlag.genericMetadata: const Version(2, 13),
   ExperimentalFlag.nonNullable: const Version(2, 12),
-  ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 12),
+  ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
   ExperimentalFlag.spreadCollections: const Version(2, 0),
-  ExperimentalFlag.tripleShift: const Version(2, 12),
-  ExperimentalFlag.valueClass: const Version(2, 12),
-  ExperimentalFlag.variance: const Version(2, 12),
+  ExperimentalFlag.tripleShift: const Version(2, 13),
+  ExperimentalFlag.valueClass: const Version(2, 13),
+  ExperimentalFlag.variance: const Version(2, 13),
 };
 
 const Map<ExperimentalFlag, Version> experimentReleasedVersion = {
-  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 12),
+  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 13),
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
-  ExperimentalFlag.genericMetadata: const Version(2, 12),
+  ExperimentalFlag.genericMetadata: const Version(2, 13),
   ExperimentalFlag.nonNullable: const Version(2, 10),
-  ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 12),
+  ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
   ExperimentalFlag.spreadCollections: const Version(2, 0),
-  ExperimentalFlag.tripleShift: const Version(2, 12),
-  ExperimentalFlag.valueClass: const Version(2, 12),
-  ExperimentalFlag.variance: const Version(2, 12),
+  ExperimentalFlag.tripleShift: const Version(2, 13),
+  ExperimentalFlag.valueClass: const Version(2, 13),
+  ExperimentalFlag.variance: const Version(2, 13),
 };
 
 const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 3bf29c0..ef8334f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -111,7 +111,8 @@
 
 import '../source/value_kinds.dart';
 
-import '../type_inference/type_inferrer.dart' show TypeInferrer;
+import '../type_inference/type_inferrer.dart'
+    show TypeInferrer, InferredFunctionBody;
 
 import '../type_inference/type_promotion.dart'
     show TypePromoter, TypePromotionFact, TypePromotionScope;
@@ -450,8 +451,11 @@
   }
 
   @override
-  void registerVariableDeclaration(VariableDeclaration variable) {
+  VariableDeclaration createVariableDeclarationForValue(Expression expression) {
+    VariableDeclaration variable =
+        forest.createVariableDeclarationForValue(expression);
     typeInferrer?.assignedVariables?.declare(variable);
+    return variable;
   }
 
   @override
@@ -989,9 +993,16 @@
           builder.fileUri);
     }
 
+    InferredFunctionBody inferredFunctionBody;
     if (body != null) {
-      body = typeInferrer?.inferFunctionBody(this, member.charOffset,
-          _computeReturnTypeContext(member), asyncModifier, body);
+      inferredFunctionBody = typeInferrer?.inferFunctionBody(
+          this,
+          member.charOffset,
+          _computeReturnTypeContext(member),
+          asyncModifier,
+          body);
+      body = inferredFunctionBody.body;
+      builder.function.futureValueType = inferredFunctionBody.futureValueType;
       libraryBuilder.loader.transformPostInference(body, transformSetLiterals,
           transformCollections, libraryBuilder.library);
     }
@@ -1423,10 +1434,10 @@
         typeInferrer?.flowAnalysis?.declare(formals[i].variable, true);
       }
     }
-    Statement inferredStatement = typeInferrer?.inferFunctionBody(
+    InferredFunctionBody inferredFunctionBody = typeInferrer?.inferFunctionBody(
         this, fileOffset, const DynamicType(), AsyncMarker.Sync, fakeReturn);
     assert(
-        fakeReturn == inferredStatement,
+        fakeReturn == inferredFunctionBody.body,
         "Previously implicit assumption about inferFunctionBody "
         "not returning anything different.");
 
@@ -1696,8 +1707,7 @@
         reportMissingNonNullableSupport(token);
       }
       VariableDeclaration variable =
-          forest.createVariableDeclarationForValue(expression);
-      registerVariableDeclaration(variable);
+          createVariableDeclarationForValue(expression);
       push(new Cascade(variable, isNullAware: isNullAware)
         ..fileOffset = expression.fileOffset);
       push(_createReadOnlyVariableAccess(variable, token, expression.fileOffset,
@@ -6318,8 +6328,7 @@
 
     if (isNullAware) {
       VariableDeclaration variable =
-          forest.createVariableDeclarationForValue(receiver);
-      registerVariableDeclaration(variable);
+          createVariableDeclarationForValue(receiver);
       return new NullAwareMethodInvocation(
           variable,
           forest.createMethodInvocation(
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 5fe56fe..353fd1db 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -406,12 +406,11 @@
           offset: offset, voidContext: voidContext, isPostIncDec: true);
     }
     VariableDeclaration read =
-        _helper.forest.createVariableDeclarationForValue(_createRead());
-    _helper.registerVariableDeclaration(read);
+        _helper.createVariableDeclarationForValue(_createRead());
     Expression binary = _helper.forest.createBinary(offset,
         _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-    VariableDeclaration write = _helper.forest
-        .createVariableDeclarationForValue(_createWrite(offset, binary));
+    VariableDeclaration write =
+        _helper.createVariableDeclarationForValue(_createWrite(offset, binary));
     return new LocalPostIncDec(read, write)..fileOffset = offset;
   }
 
@@ -534,16 +533,14 @@
           offset: offset, voidContext: voidContext, isPostIncDec: true);
     }
     VariableDeclaration variable =
-        _helper.forest.createVariableDeclarationForValue(receiver);
-    _helper.registerVariableDeclaration(variable);
-    VariableDeclaration read = _helper.forest.createVariableDeclarationForValue(
+        _helper.createVariableDeclarationForValue(receiver);
+    VariableDeclaration read = _helper.createVariableDeclarationForValue(
         _forest.createPropertyGet(fileOffset,
             _helper.createVariableGet(variable, receiver.fileOffset), name));
-    _helper.registerVariableDeclaration(read);
     Expression binary = _helper.forest.createBinary(offset,
         _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-    VariableDeclaration write = _helper.forest
-        .createVariableDeclarationForValue(_helper.forest.createPropertySet(
+    VariableDeclaration write = _helper.createVariableDeclarationForValue(
+        _helper.forest.createPropertySet(
             fileOffset,
             _helper.createVariableGet(variable, receiver.fileOffset),
             name,
@@ -696,15 +693,13 @@
           offset: offset, voidContext: voidContext, isPostIncDec: true);
     }
     _reportNonNullableInNullAwareWarningIfNeeded();
-    VariableDeclaration read = _helper.forest.createVariableDeclarationForValue(
+    VariableDeclaration read = _helper.createVariableDeclarationForValue(
         _forest.createPropertyGet(
             fileOffset, _forest.createThisExpression(fileOffset), name));
-    _helper.registerVariableDeclaration(read);
     Expression binary = _helper.forest.createBinary(offset,
         _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-    VariableDeclaration write = _helper.forest
-        .createVariableDeclarationForValue(
-            _createWrite(fileOffset, binary, forEffect: true));
+    VariableDeclaration write = _helper.createVariableDeclarationForValue(
+        _createWrite(fileOffset, binary, forEffect: true));
     return new PropertyPostIncDec.onReadOnly(read, write)..fileOffset = offset;
   }
 
@@ -741,7 +736,7 @@
   NullAwarePropertyAccessGenerator(ExpressionGeneratorHelper helper,
       Token token, this.receiverExpression, this.name)
       : this.receiver =
-            helper.forest.createVariableDeclarationForValue(receiverExpression),
+            helper.createVariableDeclarationForValue(receiverExpression),
         super(helper, token);
 
   @override
@@ -755,8 +750,7 @@
   @override
   Expression buildSimpleRead() {
     VariableDeclaration variable =
-        _helper.forest.createVariableDeclarationForValue(receiverExpression);
-    _helper.registerVariableDeclaration(variable);
+        _helper.createVariableDeclarationForValue(receiverExpression);
     PropertyGet read = _forest.createPropertyGet(
         fileOffset,
         _helper.createVariableGet(variable, receiverExpression.fileOffset,
@@ -769,8 +763,7 @@
   @override
   Expression buildAssignment(Expression value, {bool voidContext = false}) {
     VariableDeclaration variable =
-        _helper.forest.createVariableDeclarationForValue(receiverExpression);
-    _helper.registerVariableDeclaration(variable);
+        _helper.createVariableDeclarationForValue(receiverExpression);
     PropertySet read = _helper.forest.createPropertySet(
         fileOffset,
         _helper.createVariableGet(variable, receiverExpression.fileOffset,
@@ -904,11 +897,10 @@
           offset: offset, voidContext: voidContext, isPostIncDec: true);
     }
     VariableDeclaration read =
-        _helper.forest.createVariableDeclarationForValue(_createRead());
-    _helper.registerVariableDeclaration(read);
+        _helper.createVariableDeclarationForValue(_createRead());
     Expression binary = _helper.forest.createBinary(offset,
         _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-    VariableDeclaration write = _helper.forest
+    VariableDeclaration write = _helper
         .createVariableDeclarationForValue(_createWrite(fileOffset, binary));
     return new StaticPostIncDec(read, write)..fileOffset = offset;
   }
@@ -983,8 +975,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
@@ -1004,8 +995,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
@@ -1027,8 +1017,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
@@ -1056,8 +1045,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
@@ -1488,12 +1476,11 @@
           offset: offset, voidContext: voidContext, isPostIncDec: true);
     }
     VariableDeclaration read =
-        _helper.forest.createVariableDeclarationForValue(_createRead());
-    _helper.registerVariableDeclaration(read);
+        _helper.createVariableDeclarationForValue(_createRead());
     Expression binary = _helper.forest.createBinary(offset,
         _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-    VariableDeclaration write = _helper.forest
-        .createVariableDeclarationForValue(_createWrite(offset, binary));
+    VariableDeclaration write =
+        _helper.createVariableDeclarationForValue(_createWrite(offset, binary));
     return new StaticPostIncDec(read, write)..fileOffset = offset;
   }
 
@@ -1758,12 +1745,11 @@
           offset: offset, voidContext: voidContext, isPostIncDec: true);
     }
     VariableDeclaration read =
-        _helper.forest.createVariableDeclarationForValue(_createRead());
+        _helper.createVariableDeclarationForValue(_createRead());
     Expression binary = _helper.forest.createBinary(offset,
         _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-    VariableDeclaration write = _helper.forest
-        .createVariableDeclarationForValue(
-            _createWrite(fileOffset, binary, forEffect: true));
+    VariableDeclaration write = _helper.createVariableDeclarationForValue(
+        _createWrite(fileOffset, binary, forEffect: true));
     return new PropertyPostIncDec.onReadOnly(read, write)..fileOffset = offset;
   }
 
@@ -1999,8 +1985,7 @@
   Expression buildSimpleRead() {
     if (isNullAware) {
       VariableDeclaration variable =
-          _helper.forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+          _helper.createVariableDeclarationForValue(receiver);
       return new NullAwareExtension(
           variable,
           _createRead(_helper.createVariableGet(variable, variable.fileOffset,
@@ -2032,8 +2017,7 @@
   Expression buildAssignment(Expression value, {bool voidContext: false}) {
     if (isNullAware) {
       VariableDeclaration variable =
-          _helper.forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+          _helper.createVariableDeclarationForValue(receiver);
       return new NullAwareExtension(
           variable,
           _createWrite(
@@ -2067,8 +2051,7 @@
       {bool voidContext: false}) {
     if (isNullAware) {
       VariableDeclaration variable =
-          _helper.forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+          _helper.createVariableDeclarationForValue(receiver);
       Expression read = _createRead(_helper.createVariableGet(
           variable, receiver.fileOffset,
           forNullGuardedAccess: true));
@@ -2100,7 +2083,7 @@
       bool isPostIncDec: false}) {
     if (isNullAware) {
       VariableDeclaration variable =
-          _helper.forest.createVariableDeclarationForValue(receiver);
+          _helper.createVariableDeclarationForValue(receiver);
       Expression binary = _helper.forest.createBinary(
           offset,
           _createRead(_helper.createVariableGet(variable, receiver.fileOffset,
@@ -2134,15 +2117,14 @@
           offset: offset, voidContext: voidContext, isPostIncDec: true);
     } else if (isNullAware) {
       VariableDeclaration variable =
-          _helper.forest.createVariableDeclarationForValue(receiver);
-      VariableDeclaration read = _helper.forest
-          .createVariableDeclarationForValue(_createRead(
-              _helper.createVariableGet(variable, receiver.fileOffset,
-                  forNullGuardedAccess: true)));
+          _helper.createVariableDeclarationForValue(receiver);
+      VariableDeclaration read = _helper.createVariableDeclarationForValue(
+          _createRead(_helper.createVariableGet(variable, receiver.fileOffset,
+              forNullGuardedAccess: true)));
       Expression binary = _helper.forest.createBinary(offset,
           _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-      VariableDeclaration write = _helper.forest
-          .createVariableDeclarationForValue(_createWrite(
+      VariableDeclaration write = _helper.createVariableDeclarationForValue(
+          _createWrite(
               fileOffset,
               _helper.createVariableGet(variable, receiver.fileOffset,
                   forNullGuardedAccess: true),
@@ -2154,16 +2136,14 @@
         ..fileOffset = fileOffset;
     } else {
       VariableDeclaration variable =
-          _helper.forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
-      VariableDeclaration read = _helper.forest
-          .createVariableDeclarationForValue(_createRead(
+          _helper.createVariableDeclarationForValue(receiver);
+      VariableDeclaration read = _helper.createVariableDeclarationForValue(
+          _createRead(
               _helper.createVariableGet(variable, receiver.fileOffset)));
-      _helper.registerVariableDeclaration(read);
       Expression binary = _helper.forest.createBinary(offset,
           _helper.createVariableGet(read, fileOffset), binaryOperator, value);
-      VariableDeclaration write = _helper.forest
-          .createVariableDeclarationForValue(_createWrite(fileOffset,
+      VariableDeclaration write = _helper.createVariableDeclarationForValue(
+          _createWrite(fileOffset,
               _helper.createVariableGet(variable, receiver.fileOffset), binary,
               forEffect: voidContext)
             ..fileOffset = fileOffset);
@@ -2178,9 +2158,7 @@
     VariableDeclaration receiverVariable;
     Expression receiverExpression = receiver;
     if (isNullAware) {
-      receiverVariable =
-          _helper.forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(receiverVariable);
+      receiverVariable = _helper.createVariableDeclarationForValue(receiver);
       receiverExpression = _helper.createVariableGet(
           receiverVariable, receiverVariable.fileOffset,
           forNullGuardedAccess: true);
@@ -2354,8 +2332,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
@@ -2385,7 +2362,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
@@ -2420,8 +2397,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
-      _helper.registerVariableDeclaration(variable);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
@@ -2455,7 +2431,7 @@
     VariableDeclaration variable;
     Expression receiverValue;
     if (isNullAware) {
-      variable = _forest.createVariableDeclarationForValue(receiver);
+      variable = _helper.createVariableDeclarationForValue(receiver);
       receiverValue = _helper.createVariableGet(variable, fileOffset,
           forNullGuardedAccess: true);
     } else {
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 9a41855..8d03df8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -154,6 +154,9 @@
   void reportDuplicatedDeclaration(
       Builder existing, String name, int charOffset);
 
+  /// Creates a synthetic variable declaration for the value of [expression].
+  VariableDeclaration createVariableDeclarationForValue(Expression expression);
+
   /// Creates a [VariableGet] of the [variable] using [charOffset] as the file
   /// offset of the created node.
   Expression createVariableGet(VariableDeclaration variable, int charOffset,
@@ -163,6 +166,4 @@
   ///
   /// This is needed for type promotion.
   void registerVariableAssignment(VariableDeclaration variable);
-
-  void registerVariableDeclaration(VariableDeclaration variable);
 }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
index 78dc0c5..e162fa2 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
@@ -33,6 +33,8 @@
   /// the unknown type.
   DartType get yieldContext;
 
+  DartType get futureValueType;
+
   factory ClosureContext(TypeInferrerImpl inferrer, AsyncMarker asyncMarker,
       DartType returnContext, bool needToInferReturnType) {
     assert(returnContext != null);
@@ -55,15 +57,20 @@
             yieldContext, declaredReturnType, needToInferReturnType);
       }
     } else if (isAsync) {
+      DartType futureValueType;
       if (inferrer.isNonNullableByDefault) {
         returnContext = inferrer.wrapFutureOrType(
             inferrer.computeFutureValueTypeSchema(returnContext));
+        if (!needToInferReturnType) {
+          futureValueType =
+              computeFutureValueType(inferrer.coreTypes, declaredReturnType);
+        }
       } else {
         returnContext = inferrer.wrapFutureOrType(
             inferrer.typeSchemaEnvironment.flatten(returnContext));
       }
-      return new _AsyncClosureContext(
-          returnContext, declaredReturnType, needToInferReturnType);
+      return new _AsyncClosureContext(returnContext, declaredReturnType,
+          needToInferReturnType, futureValueType);
     } else {
       return new _SyncClosureContext(
           returnContext, declaredReturnType, needToInferReturnType);
@@ -137,6 +144,9 @@
   /// being inferred.
   List<DartType> _returnExpressionTypes;
 
+  @override
+  DartType get futureValueType => null;
+
   _SyncClosureContext(this._returnContext, this._declaredReturnType,
       this._needToInferReturnType) {
     if (_needToInferReturnType) {
@@ -480,8 +490,10 @@
   /// being inferred.
   List<DartType> _returnExpressionTypes;
 
+  DartType futureValueType;
+
   _AsyncClosureContext(this._returnContext, this._declaredReturnType,
-      this._needToInferReturnType) {
+      this._needToInferReturnType, this.futureValueType) {
     if (_needToInferReturnType) {
       _returnStatements = [];
       _returnExpressionTypes = [];
@@ -491,8 +503,8 @@
   void _checkValidReturn(TypeInferrerImpl inferrer, DartType returnType,
       ReturnStatement statement, DartType expressionType) {
     if (inferrer.isNonNullableByDefault) {
-      DartType futureValueType =
-          computeFutureValueType(inferrer.coreTypes, returnType);
+      assert(
+          futureValueType != null, "Future value type has not been computed.");
 
       if (statement.expression == null) {
         // It is a compile-time error if s is `return;`, unless T_v is void,
@@ -788,6 +800,10 @@
       }
     }
 
+    if (inferrer.isNonNullableByDefault) {
+      futureValueType =
+          computeFutureValueType(inferrer.coreTypes, inferredType);
+    }
     for (int i = 0; i < _returnStatements.length; ++i) {
       _checkValidReturn(inferrer, inferredType, _returnStatements[i],
           _returnExpressionTypes[i]);
@@ -871,6 +887,9 @@
   /// being inferred.
   List<DartType> _yieldElementTypes;
 
+  @override
+  DartType get futureValueType => null;
+
   _SyncStarClosureContext(this._yieldElementContext, this._declaredReturnType,
       this._needToInferReturnType) {
     if (_needToInferReturnType) {
@@ -996,6 +1015,9 @@
   /// being inferred.
   List<DartType> _yieldElementTypes;
 
+  @override
+  DartType get futureValueType => null;
+
   _AsyncStarClosureContext(this._yieldElementContext, this._declaredReturnType,
       this._needToInferReturnType) {
     if (_needToInferReturnType) {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index cfdc40c..c3c6475 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -149,7 +149,7 @@
       InferenceHelper helper, DartType declaredType, Expression initializer);
 
   /// Performs type inference on the given function body.
-  Statement inferFunctionBody(InferenceHelper helper, int fileOffset,
+  InferredFunctionBody inferFunctionBody(InferenceHelper helper, int fileOffset,
       DartType returnType, AsyncMarker asyncMarker, Statement body);
 
   /// Performs type inference on the given constructor initializer.
@@ -1909,7 +1909,7 @@
   }
 
   @override
-  Statement inferFunctionBody(InferenceHelper helper, int fileOffset,
+  InferredFunctionBody inferFunctionBody(InferenceHelper helper, int fileOffset,
       DartType returnType, AsyncMarker asyncMarker, Statement body) {
     assert(body != null);
     assert(closureContext == null);
@@ -1924,10 +1924,17 @@
     }
     result =
         closureContext.handleImplicitReturn(this, body, result, fileOffset);
+    DartType futureValueType = closureContext.futureValueType;
+    assert(
+        !(isNonNullableByDefault &&
+            asyncMarker == AsyncMarker.Async &&
+            futureValueType == null),
+        "No future value type computed.");
     closureContext = null;
     this.helper = null;
     flowAnalysis.finish();
-    return result.hasChanged ? result.statement : body;
+    return new InferredFunctionBody(
+        result.hasChanged ? result.statement : body, futureValueType);
   }
 
   InvocationInferenceResult inferInvocation(DartType typeContext, int offset,
@@ -2531,6 +2538,12 @@
     }
     bodyResult = closureContext.handleImplicitReturn(
         this, function.body, bodyResult, fileOffset);
+    function.futureValueType = closureContext.futureValueType;
+    assert(
+        !(isNonNullableByDefault &&
+            function.asyncMarker == AsyncMarker.Async &&
+            function.futureValueType == null),
+        "No future value type computed.");
 
     if (bodyResult.hasChanged) {
       function.body = bodyResult.statement..parent = function;
@@ -4819,3 +4832,10 @@
       namedParameters: functionType.namedParameters,
       typeParameters: functionType.typeParameters);
 }
+
+class InferredFunctionBody {
+  final Statement body;
+  final DartType futureValueType;
+
+  InferredFunctionBody(this.body, this.futureValueType);
+}
diff --git a/pkg/front_end/test/static_types/data/for_in.dart b/pkg/front_end/test/static_types/data/for_in.dart
index 9282e55..922bee5 100644
--- a/pkg/front_end/test/static_types/data/for_in.dart
+++ b/pkg/front_end/test/static_types/data/for_in.dart
@@ -48,6 +48,7 @@
   }
 }
 
+/*cfe:nnbd.member: asyncForInDynamicStream:futureValueType=dynamic*/
 asyncForInDynamicStream(dynamic stream) async {
   /*current: dynamic*/
   await for (var e in
@@ -58,6 +59,7 @@
   }
 }
 
+/*cfe:nnbd.member: asyncForInDynamic:futureValueType=dynamic*/
 asyncForInDynamic(Stream<dynamic> stream) async {
   /*current: dynamic*/
   await for (var e in
@@ -68,6 +70,7 @@
   }
 }
 
+/*cfe:nnbd.member: asyncForInInt:futureValueType=dynamic*/
 asyncForInInt(Stream<int> stream) async {
   /*cfe.current: int*/
   /*cfe:nnbd.current: int!*/
@@ -81,6 +84,7 @@
   }
 }
 
+/*cfe:nnbd.member: asyncForInIntToNum:futureValueType=dynamic*/
 asyncForInIntToNum(Stream<int> stream) async {
   /*cfe.current: int*/
   /*cfe:nnbd.current: int!*/
@@ -115,6 +119,7 @@
   Iterator<int> get iterator;
 }
 
+/*cfe:nnbd.member: customStream:futureValueType=dynamic*/
 customStream(CustomStream stream) async {
   /*cfe.current: num*/
   /*cfe:nnbd.current: num!*/
@@ -153,6 +158,7 @@
   CustomIterator get iterator;
 }
 
+/*cfe:nnbd.member: customStreamIterator:futureValueType=dynamic*/
 customStreamIterator(StreamWithCustomIterator stream) async {
   /*cfe.current: num*/
   /*cfe:nnbd.current: num!*/
@@ -177,6 +183,7 @@
   }
 }
 
+/*cfe:nnbd.member: genericStream:futureValueType=void*/
 void genericStream<T extends Stream<T>>(T x) async {
   /*cfe.current: T*/
   /*cfe:nnbd.current: T!*/
diff --git a/pkg/front_end/test/static_types/data/future_value_type.dart b/pkg/front_end/test/static_types/data/future_value_type.dart
new file mode 100644
index 0000000..f9ba684
--- /dev/null
+++ b/pkg/front_end/test/static_types/data/future_value_type.dart
@@ -0,0 +1,112 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+/*cfe.library: nnbd=false*/
+
+/*cfe:nnbd.library: nnbd=true*/
+
+import 'dart:async';
+
+/*cfe:nnbd.member: declaredFutureInt:futureValueType=int!*/
+Future<int> declaredFutureInt() async {
+  return
+      /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+}
+
+/*cfe:nnbd.member: declaredFutureOrInt:futureValueType=int!*/
+FutureOr<int> declaredFutureOrInt() async {
+  return
+      /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+}
+
+/*cfe:nnbd.member: declaredObject:futureValueType=Object?*/
+Object declaredObject() async {
+  return
+      /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+}
+
+/*cfe:nnbd.member: omitted:futureValueType=dynamic*/
+omitted() async {}
+
+/*cfe:nnbd.member: method:futureValueType=dynamic*/
+method() async {
+  /*cfe:nnbd.futureValueType=int!*/
+  Future<int> declaredLocalFutureInt() async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  }
+
+  /*cfe:nnbd.futureValueType=int!*/
+  FutureOr<int> declaredLocalFutureOrInt() async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  }
+
+  /*cfe:nnbd.futureValueType=Object?*/
+  Object declaredLocalObject() async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  }
+
+  /*cfe:nnbd.futureValueType=Null*/ omittedLocal() async {}
+
+  Future<int> inferredCalledFutureInt =
+      /*cfe.Future<int> Function()*/
+      /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
+      () async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  }
+          /*cfe.invoke: Future<int>*/
+          /*cfe:nnbd.invoke: Future<int!>!*/
+          ();
+
+  FutureOr<int> inferredCalledFutureOrInt =
+      /*cfe.Future<int> Function()*/
+      /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
+      () async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  }
+          /*cfe.invoke: Future<int>*/
+          /*cfe:nnbd.invoke: Future<int!>!*/
+          ();
+
+  Future<int> Function() inferredFutureInt =
+      /*cfe.Future<int> Function()*/
+      /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
+      () async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  };
+
+  FutureOr<int> Function() inferredFutureOrInt =
+      /*cfe.Future<int> Function()*/
+      /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
+      () async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  };
+
+  Object Function() inferredInt =
+      /*cfe.Future<int> Function()*/
+      /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
+      () async {
+    return
+        /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
+  };
+
+  Object Function() inferredNull =
+      /*cfe.Future<Null> Function()*/
+      /*cfe:nnbd.Future<Null>! Function()!,futureValueType=Null*/
+      () async {
+    return
+        /*Null*/ null;
+  };
+
+  Object Function() inferredEmpty =
+      /*cfe.Future<Null> Function()*/
+      /*cfe:nnbd.Future<Null>! Function()!,futureValueType=Null*/
+      () async {};
+}
diff --git a/pkg/front_end/test/static_types/static_type_test.dart b/pkg/front_end/test/static_types/static_type_test.dart
index c90118c..53a9ee2 100644
--- a/pkg/front_end/test/static_types/static_type_test.dart
+++ b/pkg/front_end/test/static_types/static_type_test.dart
@@ -104,12 +104,24 @@
   }
 
   @override
+  String computeMemberValue(Id id, Member node) {
+    if (node is Procedure && node.function.futureValueType != null) {
+      return 'futureValueType=${typeToText(node.function.futureValueType)}';
+    }
+    return null;
+  }
+
+  @override
   String computeNodeValue(Id id, TreeNode node) {
     if (isSkippedExpression(node)) {
       return null;
     }
     if (node is Expression) {
       DartType type = node.getStaticType(_staticTypeContext);
+      if (node is FunctionExpression && node.function.futureValueType != null) {
+        return '${typeToText(type)},'
+            'futureValueType=${typeToText(node.function.futureValueType)}';
+      }
       return typeToText(type);
     } else if (node is Arguments) {
       if (node.types.isNotEmpty) {
@@ -121,6 +133,10 @@
             node, node.iterable.getStaticType(_staticTypeContext));
         return typeToText(type);
       }
+    } else if (node is FunctionDeclaration) {
+      if (node.function.futureValueType != null) {
+        return 'futureValueType=${typeToText(node.function.futureValueType)}';
+      }
     }
     return null;
   }
diff --git a/pkg/front_end/testcases/general/issue44654.dart b/pkg/front_end/testcases/general/issue44654.dart
new file mode 100644
index 0000000..83abcab
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44654.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+// @dart = 2.9
+
+void test2() {
+  String string = null;
+  if (string?.isNotEmpty) ;
+}
+
+void main() {
+  try {
+    test2();
+  } catch (e, s) {
+    checkFirstLineHasPosition(s);
+  }
+}
+
+void checkFirstLineHasPosition(StackTrace stackTrace) {
+  String firstLine = '$stackTrace'
+      .split('\n')
+      .firstWhere((String line) => line.startsWith('#0'));
+  int lastParen = firstLine.lastIndexOf(')');
+  if (lastParen != -1) {
+    int secondColon = firstLine.lastIndexOf(':', lastParen - 1);
+    if (secondColon != -1) {
+      int firstColon = firstLine.lastIndexOf(':', secondColon - 1);
+      String lineText = firstLine.substring(firstColon + 1, secondColon);
+      String posText = firstLine.substring(secondColon + 1, lastParen);
+      int line = int.tryParse(lineText);
+      int pos = int.tryParse(posText);
+      if (line != null && pos != null) {
+        print('Found position $line:$pos');
+        return;
+      }
+    }
+  }
+  throw 'No position found in "$firstLine"';
+}
diff --git a/pkg/front_end/testcases/general/issue44654.dart.outline.expect b/pkg/front_end/testcases/general/issue44654.dart.outline.expect
new file mode 100644
index 0000000..1fa8f3a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44654.dart.outline.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test2() → void
+  ;
+static method main() → void
+  ;
+static method checkFirstLineHasPosition(core::StackTrace* stackTrace) → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue44654.dart.strong.expect b/pkg/front_end/testcases/general/issue44654.dart.strong.expect
new file mode 100644
index 0000000..20db53d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44654.dart.strong.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test2() → void {
+  core::String* string = null;
+  if(let final core::String* #t1 = string in #t1.{core::String::==}(null) ?{core::bool*} null : #t1.{core::String::isNotEmpty})
+    ;
+}
+static method main() → void {
+  try {
+    self::test2();
+  }
+  on dynamic catch(final dynamic e, final core::StackTrace* s) {
+    self::checkFirstLineHasPosition(s);
+  }
+}
+static method checkFirstLineHasPosition(core::StackTrace* stackTrace) → void {
+  core::String* firstLine = "${stackTrace}".{core::String::split}("
+").{core::Iterable::firstWhere}((core::String* line) → core::bool* => line.{core::String::startsWith}("#0"));
+  core::int* lastParen = firstLine.{core::String::lastIndexOf}(")");
+  if(!lastParen.{core::num::==}(1.{core::int::unary-}())) {
+    core::int* secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1));
+    if(!secondColon.{core::num::==}(1.{core::int::unary-}())) {
+      core::int* firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1));
+      core::String* lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1), secondColon);
+      core::String* posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1), lastParen);
+      core::int* line = core::int::tryParse(lineText);
+      core::int* pos = core::int::tryParse(posText);
+      if(!line.{core::num::==}(null) && !pos.{core::num::==}(null)) {
+        core::print("Found position ${line}:${pos}");
+        return;
+      }
+    }
+  }
+  throw "No position found in \"${firstLine}\"";
+}
diff --git a/pkg/front_end/testcases/general/issue44654.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue44654.dart.strong.transformed.expect
new file mode 100644
index 0000000..dee713e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44654.dart.strong.transformed.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test2() → void {
+  core::String* string = null;
+  if(let final core::String* #t1 = string in #t1.{core::String::==}(null) ?{core::bool*} null : #t1.{core::String::isNotEmpty})
+    ;
+}
+static method main() → void {
+  try {
+    self::test2();
+  }
+  on dynamic catch(final dynamic e, final core::StackTrace* s) {
+    self::checkFirstLineHasPosition(s);
+  }
+}
+static method checkFirstLineHasPosition(core::StackTrace* stackTrace) → void {
+  core::String* firstLine = "${stackTrace}".{core::String::split}("
+").{core::Iterable::firstWhere}((core::String* line) → core::bool* => line.{core::String::startsWith}("#0"));
+  core::int* lastParen = firstLine.{core::String::lastIndexOf}(")");
+  if(!lastParen.{core::num::==}(1.{core::int::unary-}())) {
+    core::int* secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1));
+    if(!secondColon.{core::num::==}(1.{core::int::unary-}())) {
+      core::int* firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1));
+      core::String* lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1), secondColon);
+      core::String* posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1), lastParen);
+      core::int* line = core::int::tryParse(lineText);
+      core::int* pos = core::int::tryParse(posText);
+      if(!line.{core::num::==}(null) && !pos.{core::num::==}(null)) {
+        core::print("Found position ${line}:${pos}");
+        return;
+      }
+    }
+  }
+  throw "No position found in \"${firstLine}\"";
+}
+
+
+Extra constant evaluation status:
+Evaluated: MethodInvocation @ org-dartlang-testcase:///issue44654.dart:25:20 -> IntConstant(-1)
+Evaluated: MethodInvocation @ org-dartlang-testcase:///issue44654.dart:27:24 -> IntConstant(-1)
+Extra constant evaluation: evaluated: 63, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue44654.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue44654.dart.textual_outline.expect
new file mode 100644
index 0000000..a95637c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44654.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+// @dart = 2.9
+void test2() {}
+void main() {}
+void checkFirstLineHasPosition(StackTrace stackTrace) {}
diff --git a/pkg/front_end/testcases/general/issue44654.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue44654.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..95b5598
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44654.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+// @dart = 2.9
+void checkFirstLineHasPosition(StackTrace stackTrace) {}
+void main() {}
+void test2() {}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 0b27f74..def8457 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -9,7 +9,6 @@
 # general/platform_invalid_uris/main: SemiFuzzFailure # semi fuzz fails but isn't currently enabled by default.
 
 extensions/call_methods: TypeCheckError
-extensions/compounds: Crash # assert error
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
@@ -178,8 +177,6 @@
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
 nnbd/nullable_object_access: TypeCheckError
 nnbd/nullable_receiver: TypeCheckError
-nnbd/null_shorting_explicit_extension: Crash # assert error
-nnbd/null_shorting_index: Crash # assert error
 nnbd/potentially_nullable_access: TypeCheckError
 none/equals: TypeCheckError
 none/method_invocation: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 2a84b11..b5e4768 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -7,7 +7,6 @@
 # Kernel files are produced by compiling Dart code via Fasta.
 
 extensions/call_methods: TypeCheckError
-extensions/compounds: Crash # assert error
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
@@ -178,8 +177,6 @@
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
 nnbd/nullable_object_access: TypeCheckError
 nnbd/nullable_receiver: TypeCheckError
-nnbd/null_shorting_explicit_extension: Crash # assert error
-nnbd/null_shorting_index: Crash # assert error
 nnbd/potentially_nullable_access: TypeCheckError
 none/equals: TypeCheckError
 none/method_invocation: TypeCheckError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 663cb4e..fa279da 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -5,7 +5,6 @@
 # Status file for the weak_suite.dart test suite.
 
 extensions/call_methods: TypeCheckError
-extensions/compounds: Crash # assert error
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
@@ -65,8 +64,6 @@
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
 nnbd/nullable_object_access: TypeCheckError
 nnbd/nullable_receiver: TypeCheckError
-nnbd/null_shorting_explicit_extension: Crash # assert error
-nnbd/null_shorting_index: Crash # assert error
 nnbd/potentially_nullable_access: TypeCheckError
 nnbd_mixed/bad_mixins: TypeCheckError
 nnbd_mixed/covariant_from_opt_in: TypeCheckError
@@ -85,7 +82,6 @@
 nnbd_mixed/issue41567: TypeCheckError
 nnbd_mixed/messages_with_types_opt_in: TypeCheckError
 nnbd_mixed/messages_with_types_opt_out: TypeCheckError
-nnbd_mixed/no_null_shorting_explicit_extension: Crash # assert error
 none/equals: TypeCheckError
 none/method_invocation: TypeCheckError
 none/operator: TypeCheckError
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 6e71d73..529d2c76 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 54;
+  UInt32 formatVersion = 55;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -510,6 +510,7 @@
   List<VariableDeclarationPlain> positionalParameters;
   List<VariableDeclarationPlain> namedParameters;
   DartType returnType;
+  Option<DartType> futureValueType;
   Option<Statement> body;
 }
 
@@ -1063,6 +1064,7 @@
 
 type Let extends Expression {
   Byte tag = 53;
+  FileOffset fileOffset;
   VariableDeclarationPlain variable;
   Expression body;
 }
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 65796ed..4bb433a33 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -2899,6 +2899,19 @@
   DartType returnType; // Not null.
   Statement _body;
 
+  /// The future value type of this is an async function, otherwise `null`.
+  ///
+  /// The future value type is the element type returned by an async function.
+  /// For instance
+  ///
+  ///     Future<Foo> method1() async => new Foo();
+  ///     FutureOr<Foo> method2() async => new Foo();
+  ///
+  /// here the return types are `Future<Foo>` and `FutureOr<Foo>` for `method1`
+  /// and `method2`, respectively, but the future value type is in both cases
+  /// `Foo`.
+  DartType futureValueType;
+
   void Function() lazyBuilder;
 
   void _buildLazy() {
@@ -2926,7 +2939,8 @@
       int requiredParameterCount,
       this.returnType: const DynamicType(),
       this.asyncMarker: AsyncMarker.Sync,
-      this.dartAsyncMarker})
+      this.dartAsyncMarker,
+      this.futureValueType})
       : this.positionalParameters =
             positionalParameters ?? <VariableDeclaration>[],
         this.requiredParameterCount =
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index bc9cb92..732e8e6 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1686,6 +1686,7 @@
     List<VariableDeclaration> positional = readAndPushVariableDeclarationList();
     List<VariableDeclaration> named = readAndPushVariableDeclarationList();
     DartType returnType = readDartType();
+    DartType futureValueType = readDartTypeOption();
     int oldLabelStackBase = labelStackBase;
     int oldSwitchCaseStackBase = switchCaseStackBase;
 
@@ -1708,7 +1709,8 @@
         namedParameters: named,
         returnType: returnType,
         asyncMarker: asyncMarker,
-        dartAsyncMarker: dartAsyncMarker)
+        dartAsyncMarker: dartAsyncMarker,
+        futureValueType: futureValueType)
       ..fileOffset = offset
       ..fileEndOffset = endOffset;
 
@@ -2404,12 +2406,13 @@
   }
 
   Expression _readLet() {
+    int offset = readOffset();
     VariableDeclaration variable = readVariableDeclaration();
     int stackHeight = variableStack.length;
     pushVariableDeclaration(variable);
     Expression body = readExpression();
     variableStack.length = stackHeight;
-    return new Let(variable, body);
+    return new Let(variable, body)..fileOffset = offset;
   }
 
   Expression _readBlockExpression() {
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index d706a36..25c299b 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1384,6 +1384,7 @@
     writeVariableDeclarationList(node.positionalParameters);
     writeVariableDeclarationList(node.namedParameters);
     writeNode(node.returnType);
+    writeOptionalNode(node.futureValueType);
     writeOptionalNode(node.body);
     _labelIndexer = oldLabels;
     _switchCaseIndexer = oldCases;
@@ -1899,6 +1900,7 @@
   @override
   void visitLet(Let node) {
     writeByte(Tag.Let);
+    writeOffset(node.fileOffset);
     _variableIndexer ??= new VariableIndexer();
     _variableIndexer.pushScope();
     writeVariableDeclaration(node.variable);
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 410617c..4653eec 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -173,7 +173,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 54;
+  static const int BinaryFormatVersion = 55;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/default_language_version.dart b/pkg/kernel/lib/default_language_version.dart
index 8dbbe5b..5b39ec4 100644
--- a/pkg/kernel/lib/default_language_version.dart
+++ b/pkg/kernel/lib/default_language_version.dart
@@ -11,4 +11,4 @@
 
 import "ast.dart";
 
-Version defaultLanguageVersion = const Version(2, 12);
+Version defaultLanguageVersion = const Version(2, 13);
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index e40ab133..cdd2f22 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -413,6 +413,13 @@
     bool savedInCatchBlock = inCatchBlock;
     AsyncMarker savedAsyncMarker = currentAsyncMarker;
     currentAsyncMarker = node.asyncMarker;
+    if (!isOutline &&
+        currentMember.isNonNullableByDefault &&
+        node.asyncMarker == AsyncMarker.Async &&
+        node.futureValueType == null) {
+      problem(node,
+          "No future value type set for async function in opt-in library.");
+    }
     inCatchBlock = false;
     visitWithLocalScope(node);
     inCatchBlock = savedInCatchBlock;
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index d2d9a4f..a245378 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -666,7 +666,7 @@
     ThrowLanguageError("no library handler registered");
   }
 
-  NoReloadScope no_reload(isolate, thread);
+  NoReloadScope no_reload(isolate->group(), thread);
 
   // Canonicalize library URI.
   String& canonical_uri = String::Handle(zone);
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 0266392..345f9b2 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -3509,6 +3509,10 @@
 
   DECLARE_INSTRUCTION(ReachabilityFence)
 
+  virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+    return kNoRepresentation;
+  }
+
   Value* value() const { return inputs_[0]; }
 
   virtual bool ComputeCanDeoptimize() const { return false; }
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index d4b806d..8a6897e 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -4152,9 +4152,11 @@
   const Register result = locs()->out(0).reg();
   ASSERT(value != result);
   compiler::Label done;
-  __ SmiUntag(result, value);
+  __ sbfx(result, value, kSmiTagSize,
+          Utils::Minimum(static_cast<intptr_t>(32), kSmiBits));
   __ BranchIfSmi(value, &done);
-  __ LoadFieldFromOffset(result, value, Mint::value_offset());
+  __ LoadFieldFromOffset(result, value, Mint::value_offset(),
+                         compiler::kFourBytes);
   __ Bind(&done);
 }
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index fbced06..9856b71 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -3667,9 +3667,9 @@
   return BuildFunctionNode(TokenPosition::kNoSource, StringIndex());
 }
 
-Fragment StreamingFlowGraphBuilder::BuildLet(TokenPosition* position) {
-  if (position != NULL) *position = TokenPosition::kNoSource;
-
+Fragment StreamingFlowGraphBuilder::BuildLet(TokenPosition* p) {
+  const TokenPosition position = ReadPosition();  // read position.
+  if (p != nullptr) *p = position;
   Fragment instructions = BuildVariableDeclaration();  // read variable.
   instructions += BuildExpression();                   // read body.
   return instructions;
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index a736b8e..9f7415c 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -507,6 +507,7 @@
       CalculateFunctionNodeFingerprint();  // read function node.
       return;
     case kLet:
+      ReadPosition();                             // read position.
       CalculateVariableDeclarationFingerprint();  // read variable declaration.
       CalculateExpressionFingerprint();           // read expression.
       return;
@@ -754,6 +755,7 @@
   CalculateListOfVariableDeclarationsFingerprint();  // read positionals
   CalculateListOfVariableDeclarationsFingerprint();  // read named
   CalculateDartTypeFingerprint();                    // read return type.
+  CalculateOptionalDartTypeFingerprint();            // read future value type.
 
   if (ReadTag() == kSomething) {
     CalculateStatementFingerprint();  // Read body.
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index d7fe4f9..7474941 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -897,6 +897,10 @@
       helper_->SkipDartType();  // read return type.
       if (++next_read_ == field) return;
       FALL_THROUGH;
+    case kFutureValueType:
+      helper_->SkipOptionalDartType();  // read future value type.
+      if (++next_read_ == field) return;
+      FALL_THROUGH;
     case kBody:
       if (helper_->ReadTag() == kSomething)
         helper_->SkipStatement();  // read body.
@@ -2444,6 +2448,7 @@
       SkipFunctionNode();  // read function node.
       return;
     case kLet:
+      ReadPosition();             // read position.
       SkipVariableDeclaration();  // read variable declaration.
       SkipExpression();           // read expression.
       return;
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index 9eaf327..b76603a 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -270,6 +270,7 @@
     kPositionalParameters,
     kNamedParameters,
     kReturnType,
+    kFutureValueType,
     kBody,
     kEnd,
   };
@@ -1167,12 +1168,11 @@
 
   KernelReaderHelper(Zone* zone,
                      TranslationHelper* translation_helper,
-                     const uint8_t* data_buffer,
-                     intptr_t buffer_length,
+                     const ProgramBinary& binary,
                      intptr_t data_program_offset)
       : zone_(zone),
         translation_helper_(*translation_helper),
-        reader_(data_buffer, buffer_length),
+        reader_(binary),
         script_(Script::Handle(zone_)),
         data_program_offset_(data_program_offset) {}
 
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 11f7de3..32f02f5 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -856,6 +856,7 @@
 
       EnterScope(offset);
 
+      helper_.ReadPosition();      // read position.
       VisitVariableDeclaration();  // read variable declaration.
       VisitExpression();           // read expression.
 
diff --git a/runtime/vm/compiler/jit/jit_call_specializer.cc b/runtime/vm/compiler/jit/jit_call_specializer.cc
index 873174d..814a0fc 100644
--- a/runtime/vm/compiler/jit/jit_call_specializer.cc
+++ b/runtime/vm/compiler/jit/jit_call_specializer.cc
@@ -188,8 +188,16 @@
       }
     }
     if (!unboxed_field) {
+      // TODO(http://dartbug.com/36097): Once we support optimized compiles with
+      // --enable-isolate-groups we could deoptimize dependent code right here -
+      // which involves stopping mutators.
+      // We could also continue to bailout of the compilation and let any
+      // mutator do the work in it's lazy compile slow path. The benefit of this
+      // would be to avoid stopping mutator here.
+      // The latter is better for single-isolate scenarios, we should measure
+      // and then decide which approach to take.
       if (Compiler::IsBackgroundCompilation()) {
-        isolate()->AddDeoptimizingBoxedField(field);
+        isolate_group()->AddDeoptimizingBoxedField(field);
         Compiler::AbortBackgroundCompilation(
             DeoptId::kNone, "Unboxing instance field while compiling");
         UNREACHABLE();
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 6822001..348954f 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -12,372 +12,372 @@
 // When adding a new function, add a 0 as the fingerprint and run the build in
 // debug mode to get the correct fingerprint from the mismatch error.
 #define OTHER_RECOGNIZED_LIST(V)                                               \
-  V(::, identical, ObjectIdentical, 0x19eb7f33)                                \
-  V(ClassID, getID, ClassIDgetID, 0x4d140cb3)                                  \
-  V(Object, Object., ObjectConstructor, 0x89c467da)                            \
-  V(List, ., ListFactory, 0x1892cc51)                                          \
-  V(_List, ., ObjectArrayAllocate, 0x4c9d39e2)                                 \
-  V(_List, []=, ObjectArraySetIndexed, 0xa06ee8ae)                             \
-  V(_GrowableList, []=, GrowableArraySetIndexed, 0xa06ee8ae)                   \
-  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x30688af4)                    \
-  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x31c4acea)                  \
-  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x4885450f)                  \
-  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x4a06a579)                \
-  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x335cdbca)                  \
-  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x33a21d3b)                \
-  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0x10a56ebf)                  \
-  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x46a02819)                \
-  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe425bcd3)              \
-  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf3595200)              \
-  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xb3cc1803)          \
-  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0xbe4aee59)              \
-  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0x89b17e2a)                    \
-  V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0x5781f1d0)                  \
-  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0x630e7aaf)                  \
-  V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0x764a82d7)                \
-  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0x6602e5c8)                  \
-  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0x618ede3a)                \
-  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0x70f58a02)                  \
-  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0x826f6c8d)                \
-  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2761c274)              \
-  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x1b858d66)              \
-  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x9e2320c0)          \
-  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xfa1f5cf1)              \
-  V(ByteData, ., ByteDataFactory, 0x1a2bee78)                                  \
-  V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x3915c92a)   \
-  V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x487f857c)          \
-  V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x3915c92a) \
-  V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x487f857c)        \
-  V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xbdff93f4)             \
-  V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x955093e6)           \
-  V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x666697bb)         \
+  V(::, identical, ObjectIdentical, 0x04168315)                                \
+  V(ClassID, getID, ClassIDgetID, 0xbe1d6669)                                  \
+  V(Object, Object., ObjectConstructor, 0xab6d6cfa)                            \
+  V(List, ., ListFactory, 0xbc820cf9)                                          \
+  V(_List, ., ObjectArrayAllocate, 0xd693eee6)                                 \
+  V(_List, []=, ObjectArraySetIndexed, 0xac001598)                             \
+  V(_GrowableList, []=, GrowableArraySetIndexed, 0xac001598)                   \
+  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x1623dc34)                    \
+  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x177ffe2a)                  \
+  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x2e40964f)                  \
+  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x2fc1f6b9)                \
+  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x19182d0a)                  \
+  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x195d6e7b)                \
+  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xf660bfff)                  \
+  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x2c5b7959)                \
+  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe8f6a107)              \
+  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf82a3634)              \
+  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xaf2d0ce5)          \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x5573740b)              \
+  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xe18943a2)                    \
+  V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xaf59b748)                  \
+  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xbae64027)                  \
+  V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xce22484f)                \
+  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xbddaab40)                  \
+  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xb966a3b2)                \
+  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xc8cd4f7a)                  \
+  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xda473205)                \
+  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2f362de0)              \
+  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x2359f8d2)              \
+  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38c6295a)          \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5ce9025b)              \
+  V(ByteData, ., ByteDataFactory, 0xd12ef748)                                  \
+  V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x60cef22c)   \
+  V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0xb9d15ffa)          \
+  V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x60cef22c) \
+  V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0xb9d15ffa)        \
+  V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0x3187137c)             \
+  V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x445611ca)           \
+  V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x96008895)         \
   V(_Uint8ClampedArrayView, ._, TypedData_Uint8ClampedArrayView_factory,       \
-    0x0f265d67)                                                                \
-  V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x95778bb5)         \
-  V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0xc9d1b27e)       \
-  V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x609fa957)         \
-  V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x0b0ff42f)       \
-  V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xbd01a661)         \
-  V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x9c964453)       \
-  V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x9a39e22c)     \
-  V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0x78a432f9)     \
-  V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x85e58030) \
-  V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x5132754b)     \
-  V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x9d86a6cc) \
-  V(Int8List, ., TypedData_Int8Array_factory, 0x934e97a2)                      \
-  V(Uint8List, ., TypedData_Uint8Array_factory, 0x7eea24fb)                    \
-  V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0xba98ab35)      \
-  V(Int16List, ., TypedData_Int16Array_factory, 0x54af9dd7)                    \
-  V(Uint16List, ., TypedData_Uint16Array_factory, 0xc3859080)                  \
-  V(Int32List, ., TypedData_Int32Array_factory, 0x3e52ca0a)                    \
-  V(Uint32List, ., TypedData_Uint32Array_factory, 0xdbbb093f)                  \
-  V(Int64List, ., TypedData_Int64Array_factory, 0x560fc11b)                    \
-  V(Uint64List, ., TypedData_Uint64Array_factory, 0x02b7f232)                  \
-  V(Float32List, ., TypedData_Float32Array_factory, 0xdf9d206c)                \
-  V(Float64List, ., TypedData_Float64Array_factory, 0x321abc79)                \
-  V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xa0de94a2)            \
-  V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xfe46a6fc)                \
-  V(Float64x2List, ., TypedData_Float64x2Array_factory, 0xfac00c80)            \
-  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x84e4b390)                 \
+    0x05397869)                                                                \
+  V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x490e13db)         \
+  V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x9ff8c632)       \
+  V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0xe2e9aa79)         \
+  V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x8682baa1)       \
+  V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0x12c74eaf)         \
+  V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x25c66efd)       \
+  V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0xdc968c44)     \
+  V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xcb765517)     \
+  V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x665eaec0) \
+  V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x04b05d05)     \
+  V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x42e25ba4) \
+  V(Int8List, ., TypedData_Int8Array_factory, 0x660dd888)                      \
+  V(Uint8List, ., TypedData_Uint8Array_factory, 0xede3f64f)                    \
+  V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x28063755)      \
+  V(Int16List, ., TypedData_Int16Array_factory, 0xd0cd98f3)                    \
+  V(Uint16List, ., TypedData_Uint16Array_factory, 0x3cb5fb6a)                  \
+  V(Int32List, ., TypedData_Int32Array_factory, 0x1b8ff320)                    \
+  V(Uint32List, ., TypedData_Uint32Array_factory, 0x2b2f9a8b)                  \
+  V(Int64List, ., TypedData_Int64Array_factory, 0xfb71de2f)                    \
+  V(Uint64List, ., TypedData_Uint64Array_factory, 0xe3cfcff8)                  \
+  V(Float32List, ., TypedData_Float32Array_factory, 0xa39068fe)                \
+  V(Float64List, ., TypedData_Float64Array_factory, 0xa0c64e91)                \
+  V(Float32x4List, ., TypedData_Float32x4Array_factory, 0x0a7d7b88)            \
+  V(Int32x4List, ., TypedData_Int32x4Array_factory, 0x5a17b46e)                \
+  V(Float64x2List, ., TypedData_Float64x2Array_factory, 0xeccaff6a)            \
+  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x6f65a4d0)                 \
   V(::, copyRangeFromUint8ListToOneByteString,                                 \
-    CopyRangeFromUint8ListToOneByteString, 0xeb5abaa9)                         \
-  V(_StringBase, _interpolate, StringBaseInterpolate, 0xe8ece5a1)              \
-  V(_IntegerImplementation, toDouble, IntegerToDouble, 0x33d887fc)             \
-  V(_Double, _add, DoubleAdd, 0x1ba15967)                                      \
-  V(_Double, _sub, DoubleSub, 0x5982426e)                                      \
-  V(_Double, _mul, DoubleMul, 0x50d3bdac)                                      \
-  V(_Double, _div, DoubleDiv, 0x59b82dd1)                                      \
-  V(::, min, MathMin, 0xa24c3a83)                                              \
-  V(::, max, MathMax, 0x8552d67e)                                              \
-  V(::, _doublePow, MathDoublePow, 0x9441cc3a)                                 \
-  V(::, _intPow, MathIntPow, 0x409dd978)                                       \
-  V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x790497df)        \
-  V(Float32x4, Float32x4.zero, Float32x4Zero, 0x9657735e)                      \
-  V(Float32x4, _Float32x4Splat, Float32x4Splat, 0xb0d7702d)                    \
-  V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0xda38dd92)      \
-  V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0xe41a2079)      \
-  V(_Float32x4, shuffle, Float32x4Shuffle, 0xac90c309)                         \
-  V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0x3d6d7e46)                   \
-  V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x54b1e8e8)                \
-  V(_Float32x4, equal, Float32x4Equal, 0xc9591626)                             \
-  V(_Float32x4, greaterThan, Float32x4GreaterThan, 0xd74ba62f)                 \
-  V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0xd36c8a67)   \
-  V(_Float32x4, lessThan, Float32x4LessThan, 0xcf1699cd)                       \
-  V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0xcb757bf0)         \
-  V(_Float32x4, notEqual, Float32x4NotEqual, 0xe94d5df3)                       \
-  V(_Float32x4, min, Float32x4Min, 0x04e45812)                                 \
-  V(_Float32x4, max, Float32x4Max, 0xe713d9e3)                                 \
-  V(_Float32x4, scale, Float32x4Scale, 0xde622d94)                             \
-  V(_Float32x4, sqrt, Float32x4Sqrt, 0xa7982e0e)                               \
-  V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0xa0792594)           \
-  V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x96f355ce)                   \
-  V(_Float32x4, unary-, Float32x4Negate, 0xa94cf76e)                           \
-  V(_Float32x4, abs, Float32x4Abs, 0xade7b1a4)                                 \
-  V(_Float32x4, clamp, Float32x4Clamp, 0x57c0dbb9)                             \
-  V(_Float32x4, _withX, Float32x4WithX, 0xddc28541)                            \
-  V(_Float32x4, _withY, Float32x4WithY, 0xd66499d5)                            \
-  V(_Float32x4, _withZ, Float32x4WithZ, 0xd2811432)                            \
-  V(_Float32x4, _withW, Float32x4WithW, 0xcfde07ed)                            \
-  V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9f0a0865)        \
-  V(Float64x2, Float64x2.zero, Float64x2Zero, 0x30a0af88)                      \
-  V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xe169544e)                    \
-  V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0x7ad848fa)      \
-  V(_Float64x2, get:x, Float64x2GetX, 0xf36ac93a)                              \
-  V(_Float64x2, get:y, Float64x2GetY, 0xe0fc245d)                              \
-  V(_Float64x2, unary-, Float64x2Negate, 0x43963398)                           \
-  V(_Float64x2, abs, Float64x2Abs, 0x4830edce)                                 \
-  V(_Float64x2, sqrt, Float64x2Sqrt, 0x41e16a38)                               \
-  V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x54b1e8e8)                \
-  V(_Float64x2, scale, Float64x2Scale, 0x78ab69be)                             \
-  V(_Float64x2, _withX, Float64x2WithX, 0x780bc16b)                            \
-  V(_Float64x2, _withY, Float64x2WithY, 0x70add5ff)                            \
-  V(_Float64x2, min, Float64x2Min,  0xb4f56252)                                \
-  V(_Float64x2, max, Float64x2Max,  0x9724e423)                                \
-  V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0x533214b0)                    \
-  V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x17964f48)                  \
-  V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0xca709e11)        \
-  V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x998cbdb6)                          \
-  V(_Int32x4, get:flagY, Int32x4GetFlagY, 0xb4fcf496)                          \
-  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xc2a68fe9)                          \
-  V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xcbc6a22a)                          \
-  V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x54b1e8e8)                    \
-  V(_Int32x4, shuffle, Int32x4Shuffle, 0xa9398c21)                             \
-  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0x0a889276)                       \
-  V(_Int32x4, select, Int32x4Select, 0x48be097c)                               \
-  V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0x7f4a63d1)                        \
-  V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x703aff14)                        \
-  V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x6f70ebc2)                        \
-  V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x7a9f5cc6)                        \
-  V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xf6b408ce)               \
-  V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0xb0967252)               \
-  V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xe81ec483)                 \
-  V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x719e1187)                 \
-  V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0x1f4f6aeb)         \
-  V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0xa209d2ef)         \
-  V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0x27559e9a)         \
-  V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0xaa10069e)         \
-  V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0x29549b9e)   \
-  V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0xac0f03a2)   \
-  V(_WeakProperty, get:key, WeakProperty_getKey, 0x16b8624c)                   \
-  V(_WeakProperty, set:key, WeakProperty_setKey, 0x8b5df091)                   \
-  V(_WeakProperty, get:value, WeakProperty_getValue, 0x0baa0898)               \
-  V(_WeakProperty, set:value, WeakProperty_setValue, 0x804f96dd)               \
-  V(::, _classRangeCheck, ClassRangeCheck, 0x071d2ec8)                         \
-  V(::, _abi, FfiAbi, 0x54918e73)                                              \
-  V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x2d4e5e32)                \
-  V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x68db1afc)        \
-  V(::, _loadInt8, FfiLoadInt8, 0x3b38d254)                                    \
-  V(::, _loadInt16, FfiLoadInt16, 0x187823ab)                                  \
-  V(::, _loadInt32, FfiLoadInt32, 0x1a563241)                                  \
-  V(::, _loadInt64, FfiLoadInt64, 0x0b23b221)                                  \
-  V(::, _loadUint8, FfiLoadUint8, 0x0d820f4f)                                  \
-  V(::, _loadUint16, FfiLoadUint16, 0x390a4f68)                                \
-  V(::, _loadUint32, FfiLoadUint32, 0x22a282d3)                                \
-  V(::, _loadUint64, FfiLoadUint64, 0x3139f04a)                                \
-  V(::, _loadIntPtr, FfiLoadIntPtr, 0x180da6bc)                                \
-  V(::, _loadFloat, FfiLoadFloat, 0x05f7e3e7)                                  \
-  V(::, _loadDouble, FfiLoadDouble, 0x042b25a3)                                \
-  V(::, _loadPointer, FfiLoadPointer, 0x117833fa)                              \
-  V(::, _storeInt8, FfiStoreInt8, 0xdaa635d2)                                  \
-  V(::, _storeInt16, FfiStoreInt16, 0xd3a379f8)                                \
-  V(::, _storeInt32, FfiStoreInt32, 0xf73bb323)                                \
-  V(::, _storeInt64, FfiStoreInt64, 0xed299440)                                \
-  V(::, _storeUint8, FfiStoreUint8, 0x00c359bc)                                \
-  V(::, _storeUint16, FfiStoreUint16, 0xde5331a4)                              \
-  V(::, _storeUint32, FfiStoreUint32, 0xe12d6f8b)                              \
-  V(::, _storeUint64, FfiStoreUint64, 0xde2eb8ff)                              \
-  V(::, _storeIntPtr, FfiStoreIntPtr, 0x0357ed6e)                              \
-  V(::, _storeFloat, FfiStoreFloat, 0xafddd150)                                \
-  V(::, _storeDouble, FfiStoreDouble, 0x8df26d36)                              \
-  V(::, _storePointer, FfiStorePointer, 0xf3b14e97)                            \
-  V(::, _fromAddress, FfiFromAddress, 0x811e2220)                              \
-  V(Pointer, get:address, FfiGetAddress, 0x55255ebc)                           \
-  V(::, reachabilityFence, ReachabilityFence, 0xde1dc5bd)                      \
-  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xb35ced99)                          \
-  V(_Future, timeout, FutureTimeout, 0x6ad7d1ef)                               \
-  V(Future, wait, FutureWait, 0x264aacc2)                                      \
-  V(_RootZone, runUnary, RootZoneRunUnary, 0x76e41d34)                         \
-  V(_FutureListener, handleValue, FutureListenerHandleValue, 0x73894d16)       \
+    CopyRangeFromUint8ListToOneByteString, 0x8302f9d9)                         \
+  V(_StringBase, _interpolate, StringBaseInterpolate, 0xec019c89)              \
+  V(_IntegerImplementation, toDouble, IntegerToDouble, 0x97728b46)             \
+  V(_Double, _add, DoubleAdd, 0xea666327)                                      \
+  V(_Double, _sub, DoubleSub, 0x28474c2e)                                      \
+  V(_Double, _mul, DoubleMul, 0x1f98c76c)                                      \
+  V(_Double, _div, DoubleDiv, 0x287d3791)                                      \
+  V(::, min, MathMin, 0x1cee3d43)                                              \
+  V(::, max, MathMax, 0xbf7a293e)                                              \
+  V(::, _doublePow, MathDoublePow, 0x701a00c4)                                 \
+  V(::, _intPow, MathIntPow, 0x9e2bb83a)                                       \
+  V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x1845792b)        \
+  V(Float32x4, Float32x4.zero, Float32x4Zero, 0xd3b64002)                      \
+  V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x13a552c3)                    \
+  V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x7ed59542)      \
+  V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x50be8d8d)      \
+  V(_Float32x4, shuffle, Float32x4Shuffle, 0xa7f1b7eb)                         \
+  V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0x79a0c2cc)                   \
+  V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x7c6b11ea)                \
+  V(_Float32x4, equal, Float32x4Equal, 0x445aed76)                             \
+  V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x524d7d7f)                 \
+  V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x4e6e61b7)   \
+  V(_Float32x4, lessThan, Float32x4LessThan, 0x4a18711d)                       \
+  V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x46775340)         \
+  V(_Float32x4, notEqual, Float32x4NotEqual, 0x644f3543)                       \
+  V(_Float32x4, min, Float32x4Min, 0xe41e9e92)                                 \
+  V(_Float32x4, max, Float32x4Max, 0xc64e2063)                                 \
+  V(_Float32x4, scale, Float32x4Scale, 0xa3b74802)                             \
+  V(_Float32x4, sqrt, Float32x4Sqrt, 0xe4f6fab2)                               \
+  V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0xddd7f238)           \
+  V(_Float32x4, reciprocal, Float32x4Reciprocal, 0xd4522272)                   \
+  V(_Float32x4, unary-, Float32x4Negate, 0xe6abc412)                           \
+  V(_Float32x4, abs, Float32x4Abs, 0xeb467e48)                                 \
+  V(_Float32x4, clamp, Float32x4Clamp, 0x77cd71dd)                             \
+  V(_Float32x4, _withX, Float32x4WithX, 0xa3179faf)                            \
+  V(_Float32x4, _withY, Float32x4WithY, 0x9bb9b443)                            \
+  V(_Float32x4, _withZ, Float32x4WithZ, 0x97d62ea0)                            \
+  V(_Float32x4, _withW, Float32x4WithW, 0x9533225b)                            \
+  V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0xd858e051)        \
+  V(Float64x2, Float64x2.zero, Float64x2Zero, 0x82948918)                      \
+  V(Float64x2, _Float64x2Splat, Float64x2Splat, 0x5b136bc4)                    \
+  V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0x6ea79c66)      \
+  V(_Float64x2, get:x, Float64x2GetX, 0x3a398530)                              \
+  V(_Float64x2, get:y, Float64x2GetY, 0x27cae053)                              \
+  V(_Float64x2, unary-, Float64x2Negate, 0x958a0d28)                           \
+  V(_Float64x2, abs, Float64x2Abs, 0x9a24c75e)                                 \
+  V(_Float64x2, sqrt, Float64x2Sqrt, 0x93d543c8)                               \
+  V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x7c6b11ea)                \
+  V(_Float64x2, scale, Float64x2Scale, 0x52959118)                             \
+  V(_Float64x2, _withX, Float64x2WithX, 0x51f5e8c5)                            \
+  V(_Float64x2, _withY, Float64x2WithY, 0x4a97fd59)                            \
+  V(_Float64x2, min, Float64x2Min,  0x362edc52)                                \
+  V(_Float64x2, max, Float64x2Max,  0x185e5e23)                                \
+  V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa900bd30)                    \
+  V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0xf56c8fc8)                  \
+  V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x45727561)        \
+  V(_Int32x4, get:flagX, Int32x4GetFlagX, 0xc29f03d8)                          \
+  V(_Int32x4, get:flagY, Int32x4GetFlagY, 0xde0f3ab8)                          \
+  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xebb8d60b)                          \
+  V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xf4d8e84c)                          \
+  V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x7c6b11ea)                    \
+  V(_Int32x4, shuffle, Int32x4Shuffle, 0x406211d3)                             \
+  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0x4fe8349c)                       \
+  V(_Int32x4, select, Int32x4Select, 0x68ca9fa0)                               \
+  V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xb7df0063)                        \
+  V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0xa8cf9ba6)                        \
+  V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0xa8058854)                        \
+  V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0xb333f958)                        \
+  V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0x882671dc)               \
+  V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0xa2be9418)               \
+  V(_HashVMBase, get:_data, LinkedHashMap_getData, 0x780e14ad)                 \
+  V(_HashVMBase, set:_data, LinkedHashMap_setData, 0xb6a5c369)                 \
+  V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0x470893ed)         \
+  V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0xb3c887a9)         \
+  V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0x4f0ec79c)         \
+  V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0xbbcebb58)         \
+  V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0x510dc4a0)   \
+  V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0xbdcdb85c)   \
+  V(_WeakProperty, get:key, WeakProperty_getKey, 0xde00e462)                   \
+  V(_WeakProperty, set:key, WeakProperty_setKey, 0x963a095f)                   \
+  V(_WeakProperty, get:value, WeakProperty_getValue, 0xd2f28aae)               \
+  V(_WeakProperty, set:value, WeakProperty_setValue, 0x8b2bafab)               \
+  V(::, _classRangeCheck, ClassRangeCheck, 0x5fd51e68)                         \
+  V(::, _abi, FfiAbi, 0x7c4ab775)                                              \
+  V(::, _asFunctionInternal, FfiAsFunctionInternal, 0xbbcb235a)                \
+  V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x3ff5ae9c)        \
+  V(::, _loadInt8, FfiLoadInt8, 0xa54bed8c)                                    \
+  V(::, _loadInt16, FfiLoadInt16, 0x828b3ee3)                                  \
+  V(::, _loadInt32, FfiLoadInt32, 0x84694d79)                                  \
+  V(::, _loadInt64, FfiLoadInt64, 0x7536cd59)                                  \
+  V(::, _loadUint8, FfiLoadUint8, 0x77952a87)                                  \
+  V(::, _loadUint16, FfiLoadUint16, 0xa31d6aa0)                                \
+  V(::, _loadUint32, FfiLoadUint32, 0x8cb59e0b)                                \
+  V(::, _loadUint64, FfiLoadUint64, 0x9b4d0b82)                                \
+  V(::, _loadIntPtr, FfiLoadIntPtr, 0x8220c1f4)                                \
+  V(::, _loadFloat, FfiLoadFloat, 0x8f209213)                                  \
+  V(::, _loadDouble, FfiLoadDouble, 0x8d53d3cf)                                \
+  V(::, _loadPointer, FfiLoadPointer, 0xc50e1486)                              \
+  V(::, _storeInt8, FfiStoreInt8, 0x000b2742)                                  \
+  V(::, _storeInt16, FfiStoreInt16, 0xf9086b68)                                \
+  V(::, _storeInt32, FfiStoreInt32, 0x1ca0a493)                                \
+  V(::, _storeInt64, FfiStoreInt64, 0x128e85b0)                                \
+  V(::, _storeUint8, FfiStoreUint8, 0x26284b2c)                                \
+  V(::, _storeUint16, FfiStoreUint16, 0x03b82314)                              \
+  V(::, _storeUint32, FfiStoreUint32, 0x069260fb)                              \
+  V(::, _storeUint64, FfiStoreUint64, 0x0393aa6f)                              \
+  V(::, _storeIntPtr, FfiStoreIntPtr, 0x28bcdede)                              \
+  V(::, _storeFloat, FfiStoreFloat, 0x853f68b4)                                \
+  V(::, _storeDouble, FfiStoreDouble, 0x6354049a)                              \
+  V(::, _storePointer, FfiStorePointer, 0x0cfd005b)                            \
+  V(::, _fromAddress, FfiFromAddress, 0xfd8cb1cc)                              \
+  V(Pointer, get:address, FfiGetAddress, 0x7cde87be)                           \
+  V(::, reachabilityFence, ReachabilityFence, 0x619235c1)                      \
+  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x4983e111)                          \
+  V(_Future, timeout, FutureTimeout, 0xc83eaf79)                               \
+  V(Future, wait, FutureWait, 0x99cfb096)                                      \
+  V(_RootZone, runUnary, RootZoneRunUnary, 0x966a802c)                         \
+  V(_FutureListener, handleValue, FutureListenerHandleValue, 0x165b47c4)       \
 
 // List of intrinsics:
 // (class-name, function-name, intrinsification method, fingerprint).
 #define CORE_LIB_INTRINSIC_LIST(V)                                             \
-  V(_Smi, ~, Smi_bitNegate, 0x5a9bcc19)                                        \
-  V(_Smi, get:bitLength, Smi_bitLength, 0x52fbe3e9)                            \
-  V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0x7818c386)                       \
-  V(_BigIntImpl, _lsh, Bigint_lsh, 0xb7f65896)                                 \
-  V(_BigIntImpl, _rsh, Bigint_rsh, 0x3922f42b)                                 \
-  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x295e93f3)                           \
-  V(_BigIntImpl, _absSub, Bigint_absSub, 0x273f7af1)                           \
-  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xba45f6ad)                           \
-  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x2db11c6b)                           \
+  V(_Smi, ~, Smi_bitNegate, 0x8254f51b)                                        \
+  V(_Smi, get:bitLength, Smi_bitLength, 0x7ab50ceb)                            \
+  V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xaf07a450)                       \
+  V(_BigIntImpl, _lsh, Bigint_lsh, 0x3f8b105e)                                 \
+  V(_BigIntImpl, _rsh, Bigint_rsh, 0x117ed3f3)                                 \
+  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0xd55235d1)                           \
+  V(_BigIntImpl, _absSub, Bigint_absSub, 0xe4a9dacf)                           \
+  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0x6dab2009)                           \
+  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x4ea2b411)                           \
   V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit,         \
-    0x3c62c74c)                                                                \
-  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x091127d0)        \
-  V(_Double, >, Double_greaterThan, 0xc4a96c0f)                                \
-  V(_Double, >=, Double_greaterEqualThan, 0x335a31b3)                          \
-  V(_Double, <, Double_lessThan, 0x059b1fd8)                                   \
-  V(_Double, <=, Double_lessEqualThan, 0xeb04cf95)                             \
-  V(_Double, ==, Double_equal, 0x094145f1)                                     \
-  V(_Double, +, Double_add, 0x74e922bb)                                        \
-  V(_Double, -, Double_sub, 0x67d62f0c)                                        \
-  V(_Double, *, Double_mul, 0xa95d3909)                                        \
-  V(_Double, /, Double_div, 0x9f8bc745)                                        \
-  V(_Double, get:hashCode, Double_hashCode, 0x4e27a791)                        \
-  V(_Double, get:_identityHashCode, Double_identityHash, 0x1fec3c4f)           \
-  V(_Double, get:isNaN, Double_getIsNaN, 0xab76c0f1)                           \
-  V(_Double, get:isInfinite, Double_getIsInfinite, 0x9be885b0)                 \
-  V(_Double, get:isNegative, Double_getIsNegative, 0xab5f0a6f)                 \
-  V(_Double, _mulFromInteger, Double_mulFromInteger, 0x88ace077)               \
-  V(_Double, .fromInteger, DoubleFromInteger, 0x0f908a15)                      \
-  V(_GrowableList, ._withData, GrowableArray_Allocate, 0x1947d8a1)             \
-  V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0xd8114d5f)                   \
-  V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0xd0dd0025)       \
-  V(Object, ==, ObjectEquals, 0xd3f5f95a)                                      \
-  V(Object, get:runtimeType, ObjectRuntimeType, 0x81775ebd)                    \
-  V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xe61da79f)       \
-  V(_StringBase, get:hashCode, String_getHashCode, 0x4e27ab52)                 \
-  V(_StringBase, get:_identityHashCode, String_identityHash, 0x1fec4010)       \
-  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xfda61c55)                   \
-  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf07e5912)    \
-  V(_StringBase, [], StringBaseCharAt, 0x6c55f9a1)                             \
-  V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x4e27ab52)       \
+    0x898ea14c)                                                                \
+  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x0d038dd0)        \
+  V(_Double, >, Double_greaterThan, 0xe450adaf)                                \
+  V(_Double, >=, Double_greaterEqualThan, 0xbc280c13)                          \
+  V(_Double, <, Double_lessThan, 0x39643178)                                   \
+  V(_Double, <=, Double_lessEqualThan, 0x73d2a9f5)                             \
+  V(_Double, ==, Double_equal, 0xaca03d47)                                     \
+  V(_Double, +, Double_add, 0x11250707)                                        \
+  V(_Double, -, Double_sub, 0x04121358)                                        \
+  V(_Double, *, Double_mul, 0x45991d55)                                        \
+  V(_Double, /, Double_div, 0x3bc7ab91)                                        \
+  V(_Double, get:hashCode, Double_hashCode, 0x75e0d093)                        \
+  V(_Double, get:_identityHashCode, Double_identityHash, 0x47a56551)           \
+  V(_Double, get:isNaN, Double_getIsNaN, 0xd4890713)                           \
+  V(_Double, get:isInfinite, Double_getIsInfinite, 0xc4facbd2)                 \
+  V(_Double, get:isNegative, Double_getIsNegative, 0xd4715091)                 \
+  V(_Double, _mulFromInteger, Double_mulFromInteger, 0xf9e516ab)               \
+  V(_Double, .fromInteger, DoubleFromInteger, 0x7d0fd999)                      \
+  V(_GrowableList, ._withData, GrowableArray_Allocate, 0xa32d060b)             \
+  V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x9911d549)                   \
+  V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x91dd880f)       \
+  V(Object, ==, ObjectEquals, 0x46587030)                                      \
+  V(Object, get:runtimeType, ObjectRuntimeType, 0x0381c851)                    \
+  V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xce4e6295)       \
+  V(_StringBase, get:hashCode, String_getHashCode, 0x75e0d454)                 \
+  V(_StringBase, get:_identityHashCode, String_identityHash, 0x47a56912)       \
+  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0x9ce63f77)                   \
+  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0x03fdc6ce)    \
+  V(_StringBase, [], StringBaseCharAt, 0xd06fc6bf)                             \
+  V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x75e0d454)       \
   V(_OneByteString, _substringUncheckedNative,                                 \
-    OneByteString_substringUnchecked,  0xd81afdbe)                             \
-  V(_OneByteString, ==, OneByteString_equality, 0x483ef8d2)                    \
-  V(_TwoByteString, ==, TwoByteString_equality, 0x483ef8d2)                    \
-  V(_Type, get:hashCode, Type_getHashCode, 0x4e27ab52)                         \
-  V(_Type, ==, Type_equality, 0xd3f5f1d8)                                      \
-  V(_FunctionType, get:hashCode, FunctionType_getHashCode, 0x4e27ab52)         \
-  V(_FunctionType, ==, FunctionType_equality, 0xd3f5f1d8)                      \
-  V(::, _getHash, Object_getHash, 0x1d1372ac)                                  \
-  V(::, _setHash, Object_setHash, 0x77e0bb27)                                  \
+    OneByteString_substringUnchecked,  0x9b18195e)                             \
+  V(_OneByteString, ==, OneByteString_equality, 0xb50039a8)                    \
+  V(_TwoByteString, ==, TwoByteString_equality, 0xb50039a8)                    \
+  V(_Type, get:hashCode, Type_getHashCode, 0x75e0d454)                         \
+  V(_Type, ==, Type_equality, 0x465868ae)                                      \
+  V(_FunctionType, get:hashCode, FunctionType_getHashCode, 0x75e0d454)         \
+  V(_FunctionType, ==, FunctionType_equality, 0x465868ae)                      \
+  V(::, _getHash, Object_getHash, 0xc60ff758)                                  \
+  V(::, _setHash, Object_setHash, 0x8f2a5b0b)                                  \
 
 #define CORE_INTEGER_LIB_INTRINSIC_LIST(V)                                     \
   V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger,           \
-    0x4965932b)                                                                \
-  V(_IntegerImplementation, +, Integer_add, 0xaf966f4f)                        \
+    0x2f20e46b)                                                                \
+  V(_IntegerImplementation, +, Integer_add, 0xd561008f)                        \
   V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger,           \
-    0x0fb6011f)                                                                \
-  V(_IntegerImplementation, -, Integer_sub, 0xa39f7e40)                        \
+    0xf571525f)                                                                \
+  V(_IntegerImplementation, -, Integer_sub, 0xc96a0f80)                        \
   V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger,           \
-    0x171d38be)                                                                \
-  V(_IntegerImplementation, *, Integer_mul, 0x870ed2dd)                        \
+    0xfcd889fe)                                                                \
+  V(_IntegerImplementation, *, Integer_mul, 0xacd9641d)                        \
   V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger,     \
-    0x3e1e1d4b)                                                                \
-  V(_IntegerImplementation, ~/, Integer_truncDivide, 0xaade713f)               \
-  V(_IntegerImplementation, unary-, Integer_negate, 0x8c0ec194)                \
+    0x23d96e8b)                                                                \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 0xdda49e7f)               \
+  V(_IntegerImplementation, unary-, Integer_negate, 0xf7a9a696)                \
   V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger,     \
-    0x398f434f)                                                                \
-  V(_IntegerImplementation, &, Integer_bitAnd, 0xd8a76af3)                     \
+    0x1f4a948f)                                                                \
+  V(_IntegerImplementation, &, Integer_bitAnd, 0x8b9d7c33)                     \
   V(_IntegerImplementation, _bitOrFromInteger, Integer_bitOrFromInteger,       \
-    0x2b1d2027)                                                                \
-  V(_IntegerImplementation, |, Integer_bitOr, 0xdc51e4ab)                      \
+    0x10d87167)                                                                \
+  V(_IntegerImplementation, |, Integer_bitOr, 0x8f47f5eb)                      \
   V(_IntegerImplementation, _bitXorFromInteger, Integer_bitXorFromInteger,     \
-    0x1c5cefeb)                                                                \
-  V(_IntegerImplementation, ^, Integer_bitXor, 0x2542adb2)                     \
+    0x0218412b)                                                                \
+  V(_IntegerImplementation, ^, Integer_bitXor, 0xd838bef2)                     \
   V(_IntegerImplementation, _greaterThanFromInteger,                           \
-    Integer_greaterThanFromInt, 0x838ddcc3)                                    \
-  V(_IntegerImplementation, >, Integer_greaterThan, 0x0c62013f)                \
-  V(_IntegerImplementation, ==, Integer_equal, 0x881c9ddc)                     \
+    Integer_greaterThanFromInt, 0x6aa24b23)                                    \
+  V(_IntegerImplementation, >, Integer_greaterThan, 0x402b12df)                \
+  V(_IntegerImplementation, ==, Integer_equal, 0x509c9146)                     \
   V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger,           \
-    0x89faaa62)                                                                \
-  V(_IntegerImplementation, <, Integer_lessThan, 0x059b1fd8)                   \
-  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xeb04cf95)             \
-  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x335a31b3)          \
-  V(_IntegerImplementation, <<, Integer_shl, 0xc378efa5)                       \
-  V(_IntegerImplementation, >>, Integer_sar, 0xe029aa4a)                       \
-  V(_Double, toInt, DoubleToInteger, 0x3fb5f3e6)                               \
+    0x710f18c2)                                                                \
+  V(_IntegerImplementation, <, Integer_lessThan, 0x39643178)                   \
+  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0x73d2a9f5)             \
+  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0xbc280c13)          \
+  V(_IntegerImplementation, <<, Integer_shl, 0x766f00e5)                       \
+  V(_IntegerImplementation, >>, Integer_sar, 0x931fbb8a)                       \
+  V(_Double, toInt, DoubleToInteger, 0x676f1ce8)                               \
 
 #define MATH_LIB_INTRINSIC_LIST(V)                                             \
-  V(::, sqrt, MathSqrt, 0x1d97494a)                                            \
-  V(_Random, _nextState, Random_nextState, 0x7e5ba345)                         \
+  V(::, sqrt, MathSqrt, 0x58c2a87e)                                            \
+  V(_Random, _nextState, Random_nextState, 0x7207677d)                         \
 
 #define GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                       \
-  V(::, sin, MathSin, 0xb89b1cb1)                                              \
-  V(::, cos, MathCos, 0x82a25065)                                              \
-  V(::, tan, MathTan, 0x65b9839b)                                              \
-  V(::, asin, MathAsin, 0x7e24237c)                                            \
-  V(::, acos, MathAcos, 0xc484d233)                                            \
-  V(::, atan, MathAtan, 0xb6c154e6)                                            \
-  V(::, atan2, MathAtan2, 0x8e6e8a7b)                                          \
+  V(::, sin, MathSin, 0xf3c67be5)                                              \
+  V(::, cos, MathCos, 0xbdcdaf99)                                              \
+  V(::, tan, MathTan, 0xa0e4e2cf)                                              \
+  V(::, asin, MathAsin, 0xb94f82b0)                                            \
+  V(::, acos, MathAcos, 0xffb03167)                                            \
+  V(::, atan, MathAtan, 0xf1ecb41a)                                            \
+  V(::, atan2, MathAtan2, 0xff585505)                                          \
 
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
-  V(_Int8List, [], Int8ArrayGetIndexed, 0x0cc3b782)                            \
-  V(_Int8List, []=, Int8ArraySetIndexed, 0xbbb0b00b)                           \
-  V(_Uint8List, [], Uint8ArrayGetIndexed, 0x723c3b42)                          \
-  V(_Uint8List, []=, Uint8ArraySetIndexed, 0x083fbbcf)                         \
-  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x723c3b42)         \
-  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x083fbbcf)        \
-  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x723c3b42)            \
-  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xfe3f716f)           \
+  V(_Int8List, [], Int8ArrayGetIndexed, 0x281e2e42)                            \
+  V(_Int8List, []=, Int8ArraySetIndexed, 0x7eb45f63)                           \
+  V(_Uint8List, [], Uint8ArrayGetIndexed, 0x8d96b202)                          \
+  V(_Uint8List, []=, Uint8ArraySetIndexed, 0xcb436b27)                         \
+  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x8d96b202)         \
+  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0xcb436b27)        \
+  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x8d96b202)            \
+  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xc14320c7)           \
   V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed,       \
-    0x723c3b42)                                                                \
+    0x8d96b202)                                                                \
   V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed,      \
-    0xfe3f716f)                                                                \
-  V(_Int16List, [], Int16ArrayGetIndexed, 0xecc216e2)                          \
-  V(_Int16List, []=, Int16ArraySetIndexed, 0x4c307396)                         \
-  V(_Uint16List, [], Uint16ArrayGetIndexed, 0xd09af2e2)                        \
-  V(_Uint16List, []=, Uint16ArraySetIndexed, 0x34731b0d)                       \
-  V(_Int32List, [], Int32ArrayGetIndexed, 0xee5fbc81)                          \
-  V(_Int32List, []=, Int32ArraySetIndexed, 0x2a64f035)                         \
-  V(_Uint32List, [], Uint32ArrayGetIndexed, 0x3db22221)                        \
-  V(_Uint32List, []=, Uint32ArraySetIndexed, 0x160864b5)                       \
-  V(_Int64List, [], Int64ArrayGetIndexed, 0x272816c1)                          \
-  V(_Int64List, []=, Int64ArraySetIndexed, 0x53c7e8d3)                         \
-  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x63ec7c41)                        \
-  V(_Uint64List, []=, Uint64ArraySetIndexed, 0x1f295a0b)                       \
-  V(_Float64List, [], Float64ArrayGetIndexed, 0x4a2c55fc)                      \
-  V(_Float64List, []=, Float64ArraySetIndexed, 0x07ada825)                     \
-  V(_Float32List, [], Float32ArrayGetIndexed, 0x202a571c)                      \
-  V(_Float32List, []=, Float32ArraySetIndexed, 0x62fc0553)                     \
-  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0x96b1f063)                  \
-  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x4897982e)                 \
-  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x9cc8b9ab)                      \
-  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x7307018e)                     \
-  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0x674f0479)                  \
-  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x73d783c2)                 \
-  V(_TypedList, get:length, TypedListLength, 0x3097c769)                       \
-  V(_TypedListView, get:length, TypedListViewLength, 0x3097c769)               \
-  V(_ByteDataView, get:length, ByteDataViewLength, 0x3097c769)                 \
-  V(_Float32x4, get:x, Float32x4ShuffleX, 0xf36ac93a)                          \
-  V(_Float32x4, get:y, Float32x4ShuffleY, 0xe0fc245d)                          \
-  V(_Float32x4, get:z, Float32x4ShuffleZ, 0x16c78ff3)                          \
-  V(_Float32x4, get:w, Float32x4ShuffleW, 0xf907d475)                          \
-  V(_Float32x4, *, Float32x4Mul, 0x06163607)                                   \
-  V(_Float32x4, /, Float32x4Div, 0xe164e8e2)                                   \
-  V(_Float32x4, -, Float32x4Sub, 0xfdf825ca)                                   \
-  V(_Float32x4, +, Float32x4Add, 0xd8bf5b59)                                   \
-  V(_Float64x2, *, Float64x2Mul, 0xb6273c86)                                   \
-  V(_Float64x2, /, Float64x2Div, 0x9175f322)                                   \
-  V(_Float64x2, -, Float64x2Sub, 0xae092c49)                                   \
-  V(_Float64x2, +, Float64x2Add, 0x88d061d8)                                   \
+    0xc14320c7)                                                                \
+  V(_Int16List, [], Int16ArrayGetIndexed, 0x081c8da2)                          \
+  V(_Int16List, []=, Int16ArraySetIndexed, 0x0f3422ee)                         \
+  V(_Uint16List, [], Uint16ArrayGetIndexed, 0xebf569a2)                        \
+  V(_Uint16List, []=, Uint16ArraySetIndexed, 0xf776ca65)                       \
+  V(_Int32List, [], Int32ArrayGetIndexed, 0x09ba3341)                          \
+  V(_Int32List, []=, Int32ArraySetIndexed, 0xed689f8d)                         \
+  V(_Uint32List, [], Uint32ArrayGetIndexed, 0x590c98e1)                        \
+  V(_Uint32List, []=, Uint32ArraySetIndexed, 0xd90c140d)                       \
+  V(_Int64List, [], Int64ArrayGetIndexed, 0x42828d81)                          \
+  V(_Int64List, []=, Int64ArraySetIndexed, 0xd7ba387b)                         \
+  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x7f46f301)                        \
+  V(_Uint64List, []=, Uint64ArraySetIndexed, 0xa31ba9b3)                       \
+  V(_Float64List, [], Float64ArrayGetIndexed, 0x5fa1c248)                      \
+  V(_Float64List, []=, Float64ArraySetIndexed, 0x6ad3ba59)                     \
+  V(_Float32List, [], Float32ArrayGetIndexed, 0x359fc368)                      \
+  V(_Float32List, []=, Float32ArraySetIndexed, 0xc6221787)                     \
+  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xdf87c0c1)                  \
+  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x889551f4)                 \
+  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x75703b39)                      \
+  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x952ee084)                     \
+  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xdc2fab6b)                  \
+  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x0884bf1c)                 \
+  V(_TypedList, get:length, TypedListLength, 0x5850f06b)                       \
+  V(_TypedListView, get:length, TypedListViewLength, 0x5850f06b)               \
+  V(_ByteDataView, get:length, ByteDataViewLength, 0x5850f06b)                 \
+  V(_Float32x4, get:x, Float32x4ShuffleX, 0x3a398530)                          \
+  V(_Float32x4, get:y, Float32x4ShuffleY, 0x27cae053)                          \
+  V(_Float32x4, get:z, Float32x4ShuffleZ, 0x5d964be9)                          \
+  V(_Float32x4, get:w, Float32x4ShuffleW, 0x3fd6906b)                          \
+  V(_Float32x4, *, Float32x4Mul, 0xe5507c87)                                   \
+  V(_Float32x4, /, Float32x4Div, 0xc09f2f62)                                   \
+  V(_Float32x4, -, Float32x4Sub, 0xdd326c4a)                                   \
+  V(_Float32x4, +, Float32x4Add, 0xb7f9a1d9)                                   \
+  V(_Float64x2, *, Float64x2Mul, 0x3760b686)                                   \
+  V(_Float64x2, /, Float64x2Div, 0x12af6d22)                                   \
+  V(_Float64x2, -, Float64x2Sub, 0x2f42a649)                                   \
+  V(_Float64x2, +, Float64x2Add, 0x0a09dbd8)                                   \
 
 #define GRAPH_CORE_INTRINSICS_LIST(V)                                          \
-  V(_List, get:length, ObjectArrayLength, 0x3097c769)                          \
-  V(_List, [], ObjectArrayGetIndexed, 0x78f4f491)                              \
-  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf233cfd8)            \
-  V(_ImmutableList, get:length, ImmutableArrayLength, 0x3097c769)              \
-  V(_ImmutableList, [], ImmutableArrayGetIndexed, 0x78f4f491)                  \
-  V(_GrowableList, get:length, GrowableArrayLength, 0x3097c769)                \
-  V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x55e672f0)           \
-  V(_GrowableList, _setData, GrowableArraySetData, 0x9388253f)                 \
-  V(_GrowableList, _setLength, GrowableArraySetLength, 0xba5d44fc)             \
-  V(_GrowableList, [], GrowableArrayGetIndexed, 0x78f4f491)                    \
-  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x5d4f1d17)  \
-  V(_StringBase, get:length, StringBaseLength, 0x3097c769)                     \
-  V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0x323db7d0)           \
-  V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0x323db7d0)           \
+  V(_List, get:length, ObjectArrayLength, 0x5850f06b)                          \
+  V(_List, [], ObjectArrayGetIndexed, 0x57b029cf)                              \
+  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0x02f293ae)            \
+  V(_ImmutableList, get:length, ImmutableArrayLength, 0x5850f06b)              \
+  V(_ImmutableList, [], ImmutableArrayGetIndexed, 0x57b029cf)                  \
+  V(_GrowableList, get:length, GrowableArrayLength, 0x5850f06b)                \
+  V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x7d9f9bf2)           \
+  V(_GrowableList, _setData, GrowableArraySetData, 0xbdda401b)                 \
+  V(_GrowableList, _setLength, GrowableArraySetLength, 0xcc1bf9b6)             \
+  V(_GrowableList, [], GrowableArrayGetIndexed, 0x57b029cf)                    \
+  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0xfb40ee4f)  \
+  V(_StringBase, get:length, StringBaseLength, 0x5850f06b)                     \
+  V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0x17f90910)           \
+  V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0x17f90910)           \
   V(_ExternalOneByteString, codeUnitAt, ExternalOneByteStringCodeUnitAt,       \
-    0x323db7d0)                                                                \
+    0x17f90910)                                                                \
   V(_ExternalTwoByteString, codeUnitAt, ExternalTwoByteStringCodeUnitAt,       \
-    0x323db7d0)                                                                \
-  V(_Double, unary-, DoubleFlipSignBit, 0xf66a4c35)                            \
-  V(_Double, truncateToDouble, DoubleTruncate, 0x1c05c6a2)                     \
-  V(_Double, roundToDouble, DoubleRound, 0x0f7b0a49)                           \
-  V(_Double, floorToDouble, DoubleFloor, 0x0de60b91)                           \
-  V(_Double, ceilToDouble, DoubleCeil, 0x184d0f22)                             \
-  V(_Double, _modulo, DoubleMod, 0x2eee8a6e)
+    0x17f90910)                                                                \
+  V(_Double, unary-, DoubleFlipSignBit, 0x3d39082b)                            \
+  V(_Double, truncateToDouble, DoubleTruncate, 0x62d48298)                     \
+  V(_Double, roundToDouble, DoubleRound, 0x5649c63f)                           \
+  V(_Double, floorToDouble, DoubleFloor, 0x54b4c787)                           \
+  V(_Double, ceilToDouble, DoubleCeil, 0x5f1bcb18)                             \
+  V(_Double, _modulo, DoubleMod, 0xfdb3942e)
 
 #define GRAPH_INTRINSICS_LIST(V)                                               \
   GRAPH_CORE_INTRINSICS_LIST(V)                                                \
@@ -385,16 +385,16 @@
   GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                             \
 
 #define DEVELOPER_LIB_INTRINSIC_LIST(V)                                        \
-  V(_UserTag, makeCurrent, UserTag_makeCurrent, 0xc0abd700)                    \
-  V(::, _getDefaultTag, UserTag_defaultTag, 0xd0ebe717)                        \
-  V(::, _getCurrentTag, Profiler_getCurrentTag, 0xd5bcef00)                    \
-  V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0xa0686991)        \
+  V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x5bd9b88e)                    \
+  V(::, _getDefaultTag, UserTag_defaultTag, 0x6c19c8a5)                        \
+  V(::, _getCurrentTag, Profiler_getCurrentTag, 0x70ead08e)                    \
+  V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0xc97aafb3)        \
 
 #define INTERNAL_LIB_INTRINSIC_LIST(V)                                         \
-  V(::, allocateOneByteString, AllocateOneByteString, 0x3a5d74f6)              \
-  V(::, allocateTwoByteString, AllocateTwoByteString, 0x4222b093)              \
-  V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xa2337709)            \
-  V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0x99887dd2)            \
+  V(::, allocateOneByteString, AllocateOneByteString, 0x9e774214)              \
+  V(::, allocateTwoByteString, AllocateTwoByteString, 0xa63c7db1)              \
+  V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xd8729161)            \
+  V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xcfc7982a)            \
 
 #define ALL_INTRINSICS_NO_INTEGER_LIB_LIST(V)                                  \
   CORE_LIB_INTRINSIC_LIST(V)                                                   \
@@ -413,64 +413,64 @@
 
 // A list of core functions that internally dispatch based on received id.
 #define POLYMORPHIC_TARGET_LIST(V)                                             \
-  V(_StringBase, [], StringBaseCharAt, 0x6c55f9a1)                             \
-  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x30688af4)                    \
-  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x31c4acea)                  \
-  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x4885450f)                  \
-  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x4a06a579)                \
-  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x335cdbca)                  \
-  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x33a21d3b)                \
-  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0x10a56ebf)                  \
-  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x46a02819)                \
-  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe425bcd3)              \
-  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf3595200)              \
-  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xb3cc1803)          \
-  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0xbe4aee59)              \
-  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0x89b17e2a)                    \
-  V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0x5781f1d0)                   \
-  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0x630e7aaf)                  \
-  V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0x764a82d7)                 \
-  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0x6602e5c8)                  \
-  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0x618ede3a)                \
-  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0x70f58a02)                  \
-  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0x826f6c8d)                \
-  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2761c274)              \
-  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x1b858d66)              \
-  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x9e2320c0)          \
-  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xfa1f5cf1)              \
-  V(Object, get:runtimeType, ObjectRuntimeType, 0x81775ebd)
+  V(_StringBase, [], StringBaseCharAt, 0xd06fc6bf)                             \
+  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x1623dc34)                    \
+  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x177ffe2a)                  \
+  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x2e40964f)                  \
+  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x2fc1f6b9)                \
+  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x19182d0a)                  \
+  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x195d6e7b)                \
+  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xf660bfff)                  \
+  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x2c5b7959)                \
+  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe8f6a107)              \
+  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf82a3634)              \
+  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xaf2d0ce5)          \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x5573740b)              \
+  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xe18943a2)                    \
+  V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xaf59b748)                   \
+  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xbae64027)                  \
+  V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xce22484f)                 \
+  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xbddaab40)                  \
+  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xb966a3b2)                \
+  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xc8cd4f7a)                  \
+  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xda473205)                \
+  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2f362de0)              \
+  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x2359f8d2)              \
+  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38c6295a)          \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5ce9025b)              \
+  V(Object, get:runtimeType, ObjectRuntimeType, 0x0381c851)
 
 // List of recognized list factories:
 // (factory-name-symbol, class-name-string, constructor-name-string,
 //  result-cid, fingerprint).
 #define RECOGNIZED_LIST_FACTORY_LIST(V)                                        \
-  V(_ListFactory, _List, ., kArrayCid, 0x4c9d39e2)                             \
-  V(_ListFilledFactory, _List, .filled, kArrayCid, 0xaf758106)                 \
-  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0xff53e115)             \
+  V(_ListFactory, _List, ., kArrayCid, 0xd693eee6)                             \
+  V(_ListFilledFactory, _List, .filled, kArrayCid, 0x4c76526a)                 \
+  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x4f848337)             \
   V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid,           \
-    0xa61fbeb9)                                                                \
+    0x434de9b9)                                                                \
   V(_GrowableListFilledFactory, _GrowableList, .filled,                        \
-    kGrowableObjectArrayCid, 0x27a28286)                                       \
+    kGrowableObjectArrayCid, 0x261b3cc2)                                       \
   V(_GrowableListGenerateFactory, _GrowableList, .generate,                    \
-    kGrowableObjectArrayCid, 0x60b98295)                                       \
+    kGrowableObjectArrayCid, 0x0c7be78f)                                       \
   V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \
-    0x1947d8a1)                                                                \
-  V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x934e97a2)        \
-  V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x7eea24fb)     \
+    0xa32d060b)                                                                \
+  V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x660dd888)        \
+  V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0xede3f64f)     \
   V(_Uint8ClampedArrayFactory, Uint8ClampedList, .,                            \
-    kTypedDataUint8ClampedArrayCid, 0xba98ab35)                                \
-  V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x54af9dd7)     \
-  V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0xc3859080)  \
-  V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x3e52ca0a)     \
-  V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xdbbb093f)  \
-  V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x560fc11b)     \
-  V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x02b7f232)  \
+    kTypedDataUint8ClampedArrayCid, 0x28063755)                                \
+  V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0xd0cd98f3)     \
+  V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x3cb5fb6a)  \
+  V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x1b8ff320)     \
+  V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0x2b2f9a8b)  \
+  V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0xfb71de2f)     \
+  V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0xe3cfcff8)  \
   V(_Float64ArrayFactory, Float64List, ., kTypedDataFloat64ArrayCid,           \
-    0x321abc79)                                                                \
+    0xa0c64e91)                                                                \
   V(_Float32ArrayFactory, Float32List, ., kTypedDataFloat32ArrayCid,           \
-    0xdf9d206c)                                                                \
+    0xa39068fe)                                                                \
   V(_Float32x4ArrayFactory, Float32x4List, ., kTypedDataFloat32x4ArrayCid,     \
-    0xa0de94a2)
+    0x0a7d7b88)
 
 // clang-format on
 
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index 1e8aa18..88539e8 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -202,7 +202,7 @@
 }
 
 int32_t CreateJitCookie() {
-  return static_cast<int32_t>(Isolate::Current()->random()->NextUInt32());
+  return static_cast<int32_t>(IsolateGroup::Current()->random()->NextUInt32());
 }
 
 word TypedDataElementSizeInBytes(classid_t cid) {
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 44237ab4..964497c 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -978,10 +978,6 @@
   const UserTag& default_tag = UserTag::Handle(UserTag::DefaultTag());
   I->set_current_tag(default_tag);
 
-  if (FLAG_keep_code) {
-    I->set_deoptimized_code_array(
-        GrowableObjectArray::Handle(GrowableObjectArray::New()));
-  }
   return Error::null();
 }
 
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index bd3b5d4..e9464e3 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -1194,7 +1194,7 @@
   }
 
   Thread* thread = Thread::Current();
-  NoReloadScope no_reload_scope(thread->isolate(), thread);
+  NoReloadScope no_reload_scope(thread->isolate_group(), thread);
   return DartLibraryCalls::InstanceCreate(library, *class_name,
                                           *constructor_name, arguments);
 }
diff --git a/runtime/vm/experimental_features.cc b/runtime/vm/experimental_features.cc
index 1fffd1a..fd0fe59 100644
--- a/runtime/vm/experimental_features.cc
+++ b/runtime/vm/experimental_features.cc
@@ -6,7 +6,7 @@
 // Instead modify 'tools/experimental_features.yaml' and run
 // 'dart tools/generate_experimental_flags.dart' to update.
 //
-// Current version: 2.12.0
+// Current version: 2.13.0
 
 #include "vm/experimental_features.h"
 
diff --git a/runtime/vm/experimental_features.h b/runtime/vm/experimental_features.h
index 797b0d2..8efd29e 100644
--- a/runtime/vm/experimental_features.h
+++ b/runtime/vm/experimental_features.h
@@ -6,7 +6,7 @@
 // Instead modify 'tools/experimental_features.yaml' and run
 // 'dart tools/generate_experimental_flags.dart' to update.
 //
-// Current version: 2.12.0
+// Current version: 2.13.0
 
 #ifndef RUNTIME_VM_EXPERIMENTAL_FEATURES_H_
 #define RUNTIME_VM_EXPERIMENTAL_FEATURES_H_
diff --git a/runtime/vm/heap/weak_code.cc b/runtime/vm/heap/weak_code.cc
index 85bf634..3699319 100644
--- a/runtime/vm/heap/weak_code.cc
+++ b/runtime/vm/heap/weak_code.cc
@@ -76,24 +76,20 @@
   // Deoptimize stacks and disable code with mutators stopped.
   isolate_group->RunWithStoppedMutators([&]() {
     Code& code = Code::Handle();
-    Thread* current = isolate_group->thread_registry()->active_list();
-    while (current != NULL) {
-      // Disable all code on stack.
-      {
-        DartFrameIterator iterator(
-            current, StackFrameIterator::kAllowCrossThreadIteration);
-        StackFrame* frame = iterator.NextFrame();
-        while (frame != NULL) {
-          code = frame->LookupDartCode();
-          if (IsOptimizedCode(code_objects, code)) {
-            ReportDeoptimization(code);
-            DeoptimizeAt(code, frame);
-          }
-          frame = iterator.NextFrame();
+    isolate_group->ForEachIsolate([&](Isolate* isolate) {
+      DartFrameIterator iterator(
+          isolate->mutator_thread(),
+          StackFrameIterator::kAllowCrossThreadIteration);
+      StackFrame* frame = iterator.NextFrame();
+      while (frame != nullptr) {
+        code = frame->LookupDartCode();
+        if (IsOptimizedCode(code_objects, code)) {
+          ReportDeoptimization(code);
+          DeoptimizeAt(isolate, code, frame);
         }
+        frame = iterator.NextFrame();
       }
-      current = current->next();
-    }
+    });
 
     // Switch functions that use dependent code to unoptimized code.
     WeakProperty& weak_property = WeakProperty::Handle();
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 9a98248..1485555 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -338,6 +338,7 @@
       isolates_(),
       start_time_micros_(OS::GetCurrentMonotonicMicros()),
       is_system_isolate_group_(source->flags.is_system_isolate),
+      random_(),
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
       last_reload_timestamp_(OS::GetCurrentTimeMillis()),
 #endif
@@ -373,6 +374,8 @@
           NOT_IN_PRODUCT("IsolateGroup::kernel_data_class_cache_mutex_")),
       kernel_constants_mutex_(
           NOT_IN_PRODUCT("IsolateGroup::kernel_constants_mutex_")),
+      field_list_mutex_(NOT_IN_PRODUCT("Isolate::field_list_mutex_")),
+      boxed_field_list_(GrowableObjectArray::null()),
       program_lock_(new SafepointRwLock()),
       active_mutators_monitor_(new Monitor()),
       max_active_mutators_(Scavenger::MaxMutatorThreadCount()) {
@@ -851,19 +854,19 @@
   thread()->RestoreOOBMessageInterrupts();
 }
 
-NoReloadScope::NoReloadScope(Isolate* isolate, Thread* thread)
-    : ThreadStackResource(thread), isolate_(isolate) {
+NoReloadScope::NoReloadScope(IsolateGroup* isolate_group, Thread* thread)
+    : ThreadStackResource(thread), isolate_group_(isolate_group) {
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
-  ASSERT(isolate_ != NULL);
-  isolate_->no_reload_scope_depth_.fetch_add(1);
-  ASSERT(isolate_->no_reload_scope_depth_ >= 0);
+  ASSERT(isolate_group_ != NULL);
+  isolate_group_->no_reload_scope_depth_.fetch_add(1);
+  ASSERT(isolate_group_->no_reload_scope_depth_ >= 0);
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 }
 
 NoReloadScope::~NoReloadScope() {
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
-  isolate_->no_reload_scope_depth_.fetch_sub(1);
-  ASSERT(isolate_->no_reload_scope_depth_ >= 0);
+  isolate_group_->no_reload_scope_depth_.fetch_sub(1);
+  ASSERT(isolate_group_->no_reload_scope_depth_ >= 0);
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 }
 
@@ -1473,7 +1476,7 @@
         T->isolate()->name(), result.ToErrorCString());
   }
 
-  NoReloadScope no_reload_scope(T->isolate(), T);
+  NoReloadScope no_reload_scope(T->isolate_group(), T);
   // Generate the error and stacktrace strings for the error message.
   const char* exception_cstr = nullptr;
   const char* stacktrace_cstr = nullptr;
@@ -1688,10 +1691,7 @@
       mutex_(NOT_IN_PRODUCT("Isolate::mutex_")),
       pending_deopts_(new MallocGrowableArray<PendingLazyDeopt>()),
       tag_table_(GrowableObjectArray::null()),
-      deoptimized_code_array_(GrowableObjectArray::null()),
       sticky_error_(Error::null()),
-      field_list_mutex_(NOT_IN_PRODUCT("Isolate::field_list_mutex_")),
-      boxed_field_list_(GrowableObjectArray::null()),
       spawn_count_monitor_(),
       handler_info_cache_(),
       catch_entry_moves_cache_() {
@@ -1971,7 +1971,7 @@
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 bool Isolate::CanReload() const {
   return !Isolate::IsSystemIsolate(this) && is_runnable() &&
-         !group()->IsReloading() && (no_reload_scope_depth_ == 0) &&
+         !group()->IsReloading() && (group()->no_reload_scope_depth_ == 0) &&
          IsolateCreationEnabled() &&
          OSThread::Current()->HasStackHeadroom(64 * KB);
 }
@@ -2575,7 +2575,6 @@
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&default_tag_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&ic_miss_code_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&tag_table_));
-  visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&deoptimized_code_array_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&sticky_error_));
   if (isolate_group_ != nullptr) {
     if (isolate_group_->source()->loaded_blobs_ != nullptr) {
@@ -2589,11 +2588,6 @@
   visitor->VisitPointer(
       reinterpret_cast<ObjectPtr*>(&registered_service_extension_handlers_));
 #endif  // !defined(PRODUCT)
-  // Visit the boxed_field_list_.
-  // 'boxed_field_list_' access via mutator and background compilation threads
-  // is guarded with a monitor. This means that we can visit it only
-  // when at safepoint or the field_list_mutex_ lock has been taken.
-  visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&boxed_field_list_));
 
   if (background_compiler() != nullptr) {
     background_compiler()->VisitPointers(visitor);
@@ -2746,6 +2740,12 @@
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&saved_unlinked_calls_));
   initial_field_table()->VisitObjectPointers(visitor);
   VisitStackPointers(visitor, validate_frames);
+
+  // Visit the boxed_field_list_.
+  // 'boxed_field_list_' access via mutator and background compilation threads
+  // is guarded with a monitor. This means that we can visit it only
+  // when at safepoint or the field_list_mutex_ lock has been taken.
+  visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&boxed_field_list_));
 }
 
 void IsolateGroup::VisitStackPointers(ObjectPointerVisitor* visitor,
@@ -3079,24 +3079,6 @@
   ic_miss_code_ = code.ptr();
 }
 
-void Isolate::set_deoptimized_code_array(const GrowableObjectArray& value) {
-  ASSERT(Thread::Current()->IsMutatorThread());
-  deoptimized_code_array_ = value.ptr();
-}
-
-void Isolate::TrackDeoptimizedCode(const Code& code) {
-  ASSERT(!code.IsNull());
-  const GrowableObjectArray& deoptimized_code =
-      GrowableObjectArray::Handle(deoptimized_code_array());
-  if (deoptimized_code.IsNull()) {
-    // Not tracking deoptimized code.
-    return;
-  }
-  // TODO(johnmccutchan): Scan this array and the isolate's profile before
-  // old space GC and remove the keep_code flag.
-  deoptimized_code.Add(code);
-}
-
 ErrorPtr Isolate::StealStickyError() {
   NoSafepointScope no_safepoint;
   ErrorPtr return_value = sticky_error_;
@@ -3116,7 +3098,7 @@
 }
 #endif  // !defined(PRODUCT)
 
-void Isolate::AddDeoptimizingBoxedField(const Field& field) {
+void IsolateGroup::AddDeoptimizingBoxedField(const Field& field) {
   ASSERT(Compiler::IsBackgroundCompilation());
   ASSERT(!field.IsOriginal());
   // The enclosed code allocates objects and can potentially trigger a GC,
@@ -3130,7 +3112,7 @@
   array.Add(Field::Handle(field.Original()), Heap::kOld);
 }
 
-FieldPtr Isolate::GetDeoptimizingBoxedField() {
+FieldPtr IsolateGroup::GetDeoptimizingBoxedField() {
   ASSERT(Thread::Current()->IsMutatorThread());
   SafepointMutexLocker ml(&field_list_mutex_);
   if (boxed_field_list_ == GrowableObjectArray::null()) {
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index b1ef148..794225c 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -157,11 +157,11 @@
 // Disallow isolate reload.
 class NoReloadScope : public ThreadStackResource {
  public:
-  NoReloadScope(Isolate* isolate, Thread* thread);
+  NoReloadScope(IsolateGroup* isolate_group, Thread* thread);
   ~NoReloadScope();
 
  private:
-  Isolate* isolate_;
+  IsolateGroup* isolate_group_;
   DISALLOW_COPY_AND_ASSIGN(NoReloadScope);
 };
 
@@ -421,6 +421,8 @@
   void set_obfuscation_map(const char** map) { obfuscation_map_ = map; }
   const char** obfuscation_map() const { return obfuscation_map_; }
 
+  Random* random() { return &random_; }
+
   bool is_system_isolate_group() const { return is_system_isolate_group_; }
 
   // IsolateGroup-specific flag handling.
@@ -690,6 +692,12 @@
 
   uword FindPendingDeoptAtSafepoint(uword fp);
 
+  // Used by background compiler which field became boxed and must trigger
+  // deoptimization in the mutator thread.
+  void AddDeoptimizingBoxedField(const Field& field);
+  // Returns Field::null() if none available in the list.
+  FieldPtr GetDeoptimizingBoxedField();
+
   void RememberLiveTemporaries();
   void DeferredMarkLiveTemporaries();
 
@@ -728,6 +736,7 @@
   friend class StackFrame;  // For `[isolates_].First()`.
   // For `object_store_shared_untag()`, `class_table_shared_untag()`
   friend class Isolate;
+  friend class NoReloadScope;  // no_reload_scope_depth_
 
 #define ISOLATE_GROUP_FLAG_BITS(V)                                             \
   V(CompactionInProgress)                                                      \
@@ -774,10 +783,13 @@
   Dart_DeferredLoadHandler deferred_load_handler_ = nullptr;
   int64_t start_time_micros_;
   bool is_system_isolate_group_;
+  Random random_;
 
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
   int64_t last_reload_timestamp_;
   std::shared_ptr<IsolateGroupReloadContext> group_reload_context_;
+  RelaxedAtomic<intptr_t> no_reload_scope_depth_ =
+      0;  // we can only reload when this is 0.
 #endif
 
 #define ISOLATE_METRIC_VARIABLE(type, variable, name, unit)                    \
@@ -837,6 +849,11 @@
   Mutex initializer_functions_mutex_;
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
+  // Protect access to boxed_field_list_.
+  Mutex field_list_mutex_;
+  // List of fields that became boxed and that trigger deoptimization.
+  GrowableObjectArrayPtr boxed_field_list_;
+
   // Ensures synchronized access to classes functions, fields and other
   // program structure elements to accommodate concurrent modification done
   // by multiple isolates and background compiler.
@@ -1280,12 +1297,6 @@
 
   void set_ic_miss_code(const Code& code);
 
-  GrowableObjectArrayPtr deoptimized_code_array() const {
-    return deoptimized_code_array_;
-  }
-  void set_deoptimized_code_array(const GrowableObjectArray& value);
-  void TrackDeoptimizedCode(const Code& code);
-
   // Also sends a paused at exit event over the service protocol.
   void SetStickyError(ErrorPtr sticky_error);
 
@@ -1307,12 +1318,6 @@
     isolate_flags_ = RemappingCidsBit::update(value, isolate_flags_);
   }
 
-  // Used by background compiler which field became boxed and must trigger
-  // deoptimization in the mutator thread.
-  void AddDeoptimizingBoxedField(const Field& field);
-  // Returns Field::null() if none available in the list.
-  FieldPtr GetDeoptimizingBoxedField();
-
 #ifndef PRODUCT
   ErrorPtr InvokePendingServiceExtensionCalls();
   void AppendServiceExtensionCall(const Instance& closure,
@@ -1616,8 +1621,6 @@
   ISOLATE_METRIC_LIST(ISOLATE_METRIC_VARIABLE);
 #undef ISOLATE_METRIC_VARIABLE
 
-  RelaxedAtomic<intptr_t> no_reload_scope_depth_ =
-      0;  // we can only reload when this is 0.
   // Per-isolate copy of FLAG_reload_every.
   intptr_t reload_every_n_stack_overflow_checks_;
   ProgramReloadContext* program_reload_context_ = nullptr;
@@ -1649,18 +1652,11 @@
 
   GrowableObjectArrayPtr tag_table_;
 
-  GrowableObjectArrayPtr deoptimized_code_array_;
-
   ErrorPtr sticky_error_;
 
   std::unique_ptr<Bequest> bequest_;
   Dart_Port beneficiary_ = 0;
 
-  // Protect access to boxed_field_list_.
-  Mutex field_list_mutex_;
-  // List of fields that became boxed and that trigger deoptimization.
-  GrowableObjectArrayPtr boxed_field_list_;
-
   // This guards spawn_count_. An isolate cannot complete shutdown and be
   // destroyed while there are child isolates in the midst of a spawn.
   Monitor spawn_count_monitor_;
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index fef7059..bff8f7a 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -2,6 +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.
 
+#include <array>
+
 #include "include/dart_api.h"
 #include "include/dart_tools_api.h"
 #include "platform/assert.h"
@@ -4734,6 +4736,157 @@
                SimpleInvokeStr(lib, "main"));
 }
 
+// Regression test for b/179030011: incorrect lifetime management when reloading
+// with multicomponent Kernel binary. When loading kernel blobs through tag
+// handler (Dart_kKernelTag) we need to make sure to preserve a link between
+// KernelProgramInfo objects and original typed data, because it might be
+// comming with a finalizer, which otherwise might end up being called
+// prematurely.
+namespace {
+
+// Compile the given |source| to Kernel binary.
+static void CompileToKernel(Dart_SourceFile source,
+                            const uint8_t** kernel_buffer,
+                            intptr_t* kernel_buffer_size) {
+  Dart_SourceFile sources[] = {source};
+  char* error = TestCase::CompileTestScriptWithDFE(
+      sources[0].uri, ARRAY_SIZE(sources), sources, kernel_buffer,
+      kernel_buffer_size,
+      /*incrementally=*/false);
+  EXPECT(error == NULL);
+  EXPECT_NOTNULL(kernel_buffer);
+}
+
+// LibraryTagHandler which returns a fixed Kernel binary back every time it
+// receives a Dart_kKernelTag request. The binary is wrapped in an external
+// typed data with a finalizer attached to it. If this finalizer is called
+// it will set |was_finalized_| to true.
+class KernelTagHandler {
+ public:
+  KernelTagHandler(uint8_t* kernel_buffer, intptr_t kernel_buffer_size)
+      : kernel_buffer_(kernel_buffer), kernel_buffer_size_(kernel_buffer_size) {
+    Dart_SetLibraryTagHandler(&LibraryTagHandler);
+    instance_ = this;
+  }
+
+  ~KernelTagHandler() {
+    Dart_SetLibraryTagHandler(nullptr);
+    instance_ = nullptr;
+  }
+
+  static KernelTagHandler* Current() { return instance_; }
+
+  bool was_called() const { return was_called_; }
+  bool was_finalized() const { return was_finalized_; }
+
+ private:
+  static void Finalizer(void* isolate_callback_data, void* peer) {
+    if (auto handler = KernelTagHandler::Current()) {
+      handler->was_finalized_ = true;
+    }
+  }
+
+  static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
+                                       Dart_Handle library,
+                                       Dart_Handle url) {
+    if (tag == Dart_kKernelTag) {
+      auto handler = KernelTagHandler::Current();
+      handler->was_called_ = true;
+
+      Dart_Handle result = Dart_NewExternalTypedData(
+          Dart_TypedData_kUint8, handler->kernel_buffer_,
+          handler->kernel_buffer_size_);
+      Dart_NewFinalizableHandle(result, handler->kernel_buffer_,
+                                handler->kernel_buffer_size_, &Finalizer);
+      return result;
+    }
+    UNREACHABLE();
+    return Dart_Null();
+  }
+
+  static KernelTagHandler* instance_;
+  uint8_t* kernel_buffer_;
+  intptr_t kernel_buffer_size_;
+  bool was_finalized_ = false;
+  bool was_called_ = false;
+};
+
+KernelTagHandler* KernelTagHandler::instance_ = nullptr;
+}  // namespace
+
+TEST_CASE(IsolateReload_RegressB179030011) {
+  struct Component {
+    Dart_SourceFile source;
+    const uint8_t* kernel_buffer;
+    intptr_t kernel_buffer_size;
+  };
+
+  // clang-format off
+  std::array<Component, 2> components = {{
+    {{
+      "file:///test-app",
+      R"(
+        class A {}
+        void main() {
+          A();
+        }
+      )"
+    }, nullptr, 0},
+    {{
+      "file:///library",
+      R"(
+        class B {}
+      )"
+    }, nullptr, 0}
+  }};
+  // clang-format on
+
+  for (auto& component : components) {
+    CompileToKernel(component.source, &component.kernel_buffer,
+                    &component.kernel_buffer_size);
+    TestCaseBase::AddToKernelBuffers(component.kernel_buffer);
+  }
+
+  // Concatenate all components.
+  intptr_t kernel_buffer_size = 0;
+  for (auto component : components) {
+    kernel_buffer_size += component.kernel_buffer_size;
+  }
+  uint8_t* kernel_buffer = static_cast<uint8_t*>(malloc(kernel_buffer_size));
+  TestCaseBase::AddToKernelBuffers(kernel_buffer);
+  intptr_t pos = 0;
+  for (auto component : components) {
+    memcpy(kernel_buffer + pos, component.kernel_buffer,  // NOLINT
+           component.kernel_buffer_size);
+    pos += component.kernel_buffer_size;
+  }
+
+  // Load the first component into the isolate (to have something set as
+  // root library).
+  Dart_Handle lib = Dart_LoadLibraryFromKernel(
+      components[0].kernel_buffer, components[0].kernel_buffer_size);
+  EXPECT_VALID(lib);
+  EXPECT_VALID(Dart_SetRootLibrary(lib));
+
+  {
+    KernelTagHandler handler(kernel_buffer, kernel_buffer_size);
+    {
+      // Additional API scope to prevent handles leaking into outer scope.
+      Dart_EnterScope();
+      // root_script_url does not really matter.
+      TestCase::TriggerReload(/*root_script_url=*/"something.dill");
+      Dart_ExitScope();
+    }
+    EXPECT(handler.was_called());
+
+    // Check that triggering GC does not cause finalizer registered by
+    // tag handler to fire - meaning that kernel binary continues to live.
+    TransitionNativeToVM transition(thread);
+    GCTestHelper::CollectAllGarbage();
+    EXPECT(!handler.was_finalized());
+  }
+}
+
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 
 }  // namespace dart
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index f7c7dfb..32ecc7c 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -60,6 +60,16 @@
 
 enum LogicalOperator { kAnd, kOr };
 
+struct ProgramBinary {
+  ProgramBinary SubView(intptr_t start, intptr_t end) const {
+    return {typed_data, kernel_data + start, end - start};
+  }
+
+  const ExternalTypedData* typed_data;
+  const uint8_t* kernel_data;
+  intptr_t kernel_data_size;
+};
+
 class Program {
  public:
   // Read a kernel Program from the given Reader. Note the returned Program
@@ -89,14 +99,16 @@
     return metadata_mappings_offset_;
   }
   intptr_t constant_table_offset() { return constant_table_offset_; }
-  const ExternalTypedData* typed_data() { return typed_data_; }
-  const uint8_t* kernel_data() { return kernel_data_; }
-  intptr_t kernel_data_size() { return kernel_data_size_; }
   intptr_t library_count() { return library_count_; }
   NNBDCompiledMode compilation_mode() const { return compilation_mode_; }
 
+  const ProgramBinary& binary() const { return binary_; }
+  const ExternalTypedData* typed_data() { return binary().typed_data; }
+  const uint8_t* kernel_data() { return binary().kernel_data; }
+  intptr_t kernel_data_size() { return binary().kernel_data_size; }
+
  private:
-  Program() : typed_data_(NULL), kernel_data_(NULL), kernel_data_size_(-1) {}
+  Program() : binary_() {}
 
   bool single_program_;
   uint32_t binary_version_;
@@ -122,9 +134,7 @@
   // The offset from the start of the binary to the start of the string table.
   intptr_t string_table_offset_;
 
-  const ExternalTypedData* typed_data_;
-  const uint8_t* kernel_data_;
-  intptr_t kernel_data_size_;
+  ProgramBinary binary_;
 
   DISALLOW_COPY_AND_ASSIGN(Program);
 };
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc
index 7e6f741..00ceb7d 100644
--- a/runtime/vm/kernel_binary.cc
+++ b/runtime/vm/kernel_binary.cc
@@ -144,9 +144,9 @@
 
   std::unique_ptr<Program> program(new Program());
   program->binary_version_ = formatVersion;
-  program->typed_data_ = reader->typed_data();
-  program->kernel_data_ = reader->buffer();
-  program->kernel_data_size_ = reader->size();
+  program->binary_.typed_data = reader->typed_data();
+  program->binary_.kernel_data = reader->buffer();
+  program->binary_.kernel_data_size = reader->size();
 
   // Dill files can be concatenated (e.g. cat a.dill b.dill > c.dill). Find out
   // if this dill contains more than one program.
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index bad9b38..3afc431 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 54;
-static const uint32_t kMaxSupportedKernelFormatVersion = 54;
+static const uint32_t kMinSupportedKernelFormatVersion = 55;
+static const uint32_t kMaxSupportedKernelFormatVersion = 55;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
@@ -224,23 +224,18 @@
 
 class Reader : public ValueObject {
  public:
-  Reader(const uint8_t* buffer, intptr_t size)
-      : thread_(NULL),
-        raw_buffer_(buffer),
-        typed_data_(NULL),
-        size_(size),
-        offset_(0),
-        max_position_(TokenPosition::kNoSource),
-        min_position_(TokenPosition::kNoSource) {}
+  explicit Reader(const ProgramBinary& binary)
+      : Reader(binary.kernel_data, binary.kernel_data_size) {
+    // Make sure to link any Program / KernelProgramInfo objects created
+    // from this reader back to originating typed data to keep it alive.
+    set_typed_data(binary.typed_data);
+  }
 
   explicit Reader(const ExternalTypedData& typed_data)
       : thread_(Thread::Current()),
         raw_buffer_(NULL),
         typed_data_(&typed_data),
-        size_(typed_data.IsNull() ? 0 : typed_data.Length()),
-        offset_(0),
-        max_position_(TokenPosition::kNoSource),
-        min_position_(TokenPosition::kNoSource) {}
+        size_(typed_data.IsNull() ? 0 : typed_data.Length()) {}
 
   uint32_t ReadFromIndex(intptr_t end_offset,
                          intptr_t fields_before,
@@ -456,6 +451,9 @@
   TypedDataPtr ReadLineStartsData(intptr_t line_start_count);
 
  private:
+  Reader(const uint8_t* buffer, intptr_t size)
+      : thread_(NULL), raw_buffer_(buffer), typed_data_(NULL), size_(size) {}
+
   const uint8_t* buffer() const {
     if (raw_buffer_ != NULL) {
       return raw_buffer_;
@@ -468,10 +466,10 @@
   const uint8_t* raw_buffer_;
   const ExternalTypedData* typed_data_;
   intptr_t size_;
-  intptr_t offset_;
-  TokenPosition max_position_;
-  TokenPosition min_position_;
-  intptr_t current_script_id_;
+  intptr_t offset_ = 0;
+  TokenPosition max_position_ = TokenPosition::kNoSource;
+  TokenPosition min_position_ = TokenPosition::kNoSource;
+  intptr_t current_script_id_ = -1;
 
   friend class PositionScope;
   friend class Program;
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 804e6e5..04b3b430 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -162,11 +162,10 @@
   source_references_offset_ = reader_.ReadUInt32At(class_index_offset_ - 4);
 }
 
-ClassIndex::ClassIndex(const uint8_t* buffer,
-                       intptr_t buffer_size,
+ClassIndex::ClassIndex(const ProgramBinary& binary,
                        intptr_t class_offset,
                        intptr_t class_size)
-    : reader_(buffer, buffer_size) {
+    : reader_(binary) {
   Init(class_offset, class_size);
 }
 
@@ -202,9 +201,8 @@
       translation_helper_(this, thread_, Heap::kOld),
       helper_(zone_,
               &translation_helper_,
-              program_->kernel_data(),
-              program_->kernel_data_size(),
-              0),
+              program_->binary(),
+              /*data_program_offset=*/0),
       constant_reader_(&helper_, &active_class_),
       type_translator_(&helper_,
                        &constant_reader_,
@@ -247,7 +245,7 @@
     return Object::Handle(loader.LoadProgram(process_pending_classes));
   }
 
-  kernel::Reader reader(program->kernel_data(), program->kernel_data_size());
+  kernel::Reader reader(program->binary());
   GrowableArray<intptr_t> subprogram_file_starts;
   index_programs(&reader, &subprogram_file_starts);
 
@@ -264,9 +262,9 @@
     Thread* thread_ = Thread::Current();
     Zone* zone_ = thread_->zone();
     TranslationHelper translation_helper(thread);
-    KernelReaderHelper helper_(zone_, &translation_helper,
-                               program->kernel_data() + subprogram_start,
-                               subprogram_end - subprogram_start, 0);
+    KernelReaderHelper helper_(
+        zone_, &translation_helper,
+        program->binary().SubView(subprogram_start, subprogram_end), 0);  // ,
     const intptr_t source_table_size = helper_.SourceTableSize();
     for (intptr_t index = 0; index < source_table_size; ++index) {
       const String& uri_string = helper_.SourceTableUriFor(index);
@@ -361,8 +359,11 @@
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
   TranslationHelper translation_helper(thread);
-  KernelReaderHelper reader(zone, &translation_helper, kernel_buffer,
-                            kernel_buffer_length, 0);
+  // Note: it is okay to have typed_data be nullptr here because we are not
+  // creating any long living views into the kernel_buffer.
+  const ProgramBinary binary = {/*typed_data=*/nullptr, kernel_buffer,
+                                kernel_buffer_length};
+  KernelReaderHelper reader(zone, &translation_helper, binary, 0);
   intptr_t source_table_size = reader.SourceTableSize();
   for (intptr_t i = 0; i < source_table_size; ++i) {
     const String& source_uri = reader.SourceTableUriFor(i);
@@ -380,7 +381,7 @@
 
   // Copy the Kernel string offsets out of the binary and into the VM's heap.
   ASSERT(program_->string_table_offset() >= 0);
-  Reader reader(program_->kernel_data(), program_->kernel_data_size());
+  Reader reader(program_->binary());
   reader.set_offset(program_->string_table_offset());
   intptr_t count = reader.ReadUInt() + 1;
   TypedData& offsets = TypedData::Handle(
@@ -498,7 +499,7 @@
 
   Thread* thread = Thread::Current();
   NoOOBMessageScope no_msg_scope(thread);
-  NoReloadScope no_reload_scope(thread->isolate(), thread);
+  NoReloadScope no_reload_scope(thread->isolate_group(), thread);
 
   Function& function = Function::Handle();
   Library& library = Library::Handle();
@@ -874,7 +875,7 @@
       loader.walk_incremental_kernel(modified_libs, is_empty_program,
                                      p_num_classes, p_num_procedures);
     }
-    kernel::Reader reader(program->kernel_data(), program->kernel_data_size());
+    kernel::Reader reader(program->binary());
     GrowableArray<intptr_t> subprogram_file_starts;
     index_programs(&reader, &subprogram_file_starts);
 
@@ -1460,8 +1461,8 @@
                              intptr_t class_end,
                              Class* out_class) {
   intptr_t class_offset = helper_.ReaderOffset();
-  ClassIndex class_index(program_->kernel_data(), program_->kernel_data_size(),
-                         class_offset, class_end - class_offset);
+  ClassIndex class_index(program_->binary(), class_offset,
+                         class_end - class_offset);
 
   ClassHelper class_helper(&helper_);
   class_helper.ReadUntilIncluding(ClassHelper::kCanonicalName);
@@ -2088,7 +2089,7 @@
     } else {
       Thread* thread = Thread::Current();
       NoOOBMessageScope no_msg_scope(thread);
-      NoReloadScope no_reload_scope(thread->isolate(), thread);
+      NoReloadScope no_reload_scope(thread->isolate_group(), thread);
       library.GetMetadata(function);
     }
   }
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 00f6335..6245e6f 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -125,8 +125,7 @@
  public:
   // |class_offset| is the offset of class' kernel data in |buffer| of
   // size |size|. The size of the class' kernel data is |class_size|.
-  ClassIndex(const uint8_t* buffer,
-             intptr_t buffer_size,
+  ClassIndex(const ProgramBinary& binary,
              intptr_t class_offset,
              intptr_t class_size);
 
@@ -264,16 +263,14 @@
   }
 
   intptr_t library_offset(intptr_t index) {
-    kernel::Reader reader(program_->kernel_data(),
-                          program_->kernel_data_size());
+    kernel::Reader reader(program_->binary());
     return reader.ReadFromIndexNoReset(reader.size(),
                                        LibraryCountFieldCountFromEnd + 1,
                                        program_->library_count() + 1, index);
   }
 
   NameIndex library_canonical_name(intptr_t index) {
-    kernel::Reader reader(program_->kernel_data(),
-                          program_->kernel_data_size());
+    kernel::Reader reader(program_->binary());
     reader.set_offset(library_offset(index));
 
     // Start reading library.
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 415bbfa..88567bf 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -6768,7 +6768,6 @@
   Thread* thread = Thread::Current();
   DEBUG_ASSERT(
       thread->isolate_group()->program_lock()->IsCurrentThreadWriter());
-  Isolate* isolate = thread->isolate();
   Zone* zone = thread->zone();
   // TODO(35224): DEBUG_ASSERT(thread->TopErrorHandlerIsExitFrame());
   const Code& current_code = Code::Handle(zone, CurrentCode());
@@ -6786,7 +6785,6 @@
   const Code& unopt_code = Code::Handle(zone, unoptimized_code());
   unopt_code.Enable();
   AttachCode(unopt_code);
-  isolate->TrackDeoptimizedCode(current_code);
 }
 
 void Function::SwitchToLazyCompiledUnoptimizedCode() const {
@@ -10754,7 +10752,7 @@
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
   NoOOBMessageScope no_msg_scope(thread);
-  NoReloadScope no_reload_scope(thread->isolate(), thread);
+  NoReloadScope no_reload_scope(thread->isolate_group(), thread);
   const Function& initializer = Function::Handle(EnsureInitializerFunction());
   return DartEntry::InvokeFunction(initializer, Object::empty_array());
 }
@@ -17969,7 +17967,7 @@
 
 const char* LanguageError::ToErrorCString() const {
   Thread* thread = Thread::Current();
-  NoReloadScope no_reload_scope(thread->isolate(), thread);
+  NoReloadScope no_reload_scope(thread->isolate_group(), thread);
   const String& msg_str = String::Handle(FormatMessage());
   return msg_str.ToCString();
 }
@@ -18018,9 +18016,8 @@
 
 const char* UnhandledException::ToErrorCString() const {
   Thread* thread = Thread::Current();
-  auto isolate = thread->isolate();
   auto isolate_group = thread->isolate_group();
-  NoReloadScope no_reload_scope(isolate, thread);
+  NoReloadScope no_reload_scope(isolate_group, thread);
   HANDLESCOPE(thread);
   Object& strtmp = Object::Handle();
   const char* exc_str;
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index e1a3c38..c5d4619 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -25,73 +25,6 @@
 
 #ifndef PRODUCT
 
-class DeoptimizedCodeSet : public ZoneAllocated {
- public:
-  explicit DeoptimizedCodeSet(Isolate* isolate)
-      : previous_(
-            GrowableObjectArray::ZoneHandle(isolate->deoptimized_code_array())),
-        current_(GrowableObjectArray::ZoneHandle(
-            previous_.IsNull() ? GrowableObjectArray::null()
-                               : GrowableObjectArray::New())) {}
-
-  void Add(const Code& code) {
-    if (current_.IsNull()) {
-      return;
-    }
-    if (!Contained(code, previous_) || Contained(code, current_)) {
-      return;
-    }
-    current_.Add(code);
-  }
-
-  void UpdateIsolate(Isolate* isolate) {
-    intptr_t size_before = SizeOf(previous_);
-    intptr_t size_after = SizeOf(current_);
-    if ((size_before > 0) && FLAG_trace_profiler) {
-      intptr_t length_before = previous_.Length();
-      intptr_t length_after = current_.Length();
-      OS::PrintErr(
-          "Updating isolate deoptimized code array: "
-          "%" Pd " -> %" Pd " [%" Pd " -> %" Pd "]\n",
-          size_before, size_after, length_before, length_after);
-    }
-    isolate->set_deoptimized_code_array(current_);
-  }
-
- private:
-  bool Contained(const Code& code, const GrowableObjectArray& array) {
-    if (array.IsNull() || code.IsNull()) {
-      return false;
-    }
-    NoSafepointScope no_safepoint_scope;
-    for (intptr_t i = 0; i < array.Length(); i++) {
-      if (code.ptr() == array.At(i)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  intptr_t SizeOf(const GrowableObjectArray& array) {
-    if (array.IsNull()) {
-      return 0;
-    }
-    Code& code = Code::ZoneHandle();
-    intptr_t size = 0;
-    for (intptr_t i = 0; i < array.Length(); i++) {
-      code ^= array.At(i);
-      ASSERT(!code.IsNull());
-      size += code.Size();
-    }
-    return size;
-  }
-
-  // Array holding code that is being kept around only for the profiler.
-  const GrowableObjectArray& previous_;
-  // Array holding code that should continue to be kept around for the profiler.
-  const GrowableObjectArray& current_;
-};
-
 ProfileFunctionSourcePosition::ProfileFunctionSourcePosition(
     TokenPosition token_pos)
     : token_pos_(token_pos), exclusive_ticks_(0), inclusive_ticks_(0) {}
@@ -990,7 +923,6 @@
         filter_(filter),
         sample_buffer_(sample_buffer),
         profile_(profile),
-        deoptimized_code_(new DeoptimizedCodeSet(thread->isolate())),
         null_code_(Code::null()),
         null_function_(Function::ZoneHandle()),
         inclusive_tree_(false),
@@ -1506,7 +1438,6 @@
   SampleFilter* filter_;
   SampleBuffer* sample_buffer_;
   Profile* profile_;
-  DeoptimizedCodeSet* deoptimized_code_;
   const AbstractCode null_code_;
   const Function& null_function_;
   bool inclusive_tree_;
diff --git a/runtime/vm/random.cc b/runtime/vm/random.cc
index 1451cf2..2cc2335 100644
--- a/runtime/vm/random.cc
+++ b/runtime/vm/random.cc
@@ -53,19 +53,26 @@
 // The algorithm used here is Multiply with Carry (MWC) with a Base b = 2^32.
 // http://en.wikipedia.org/wiki/Multiply-with-carry
 // The constant A is selected from "Numerical Recipes 3rd Edition" p.348 B1.
-void Random::NextState() {
+uint64_t Random::NextState() {
   const uint64_t MASK_32 = 0xffffffff;
   const uint64_t A = 0xffffda61;
 
-  uint64_t state_lo = _state & MASK_32;
-  uint64_t state_hi = (_state >> 32) & MASK_32;
-  _state = (A * state_lo) + state_hi;
+  uint64_t old_state = _state;
+  while (true) {
+    const uint64_t state_lo = old_state & MASK_32;
+    const uint64_t state_hi = (old_state >> 32) & MASK_32;
+    const uint64_t new_state = (A * state_lo) + state_hi;
+    if (_state.compare_exchange_weak(old_state, new_state,
+                                     std::memory_order_relaxed,
+                                     std::memory_order_relaxed)) {
+      return new_state;
+    }
+  }
 }
 
 uint32_t Random::NextUInt32() {
   const uint64_t MASK_32 = 0xffffffff;
-  NextState();
-  return static_cast<uint32_t>(_state & MASK_32);
+  return static_cast<uint32_t>(NextState() & MASK_32);
 }
 
 }  // namespace dart
diff --git a/runtime/vm/random.h b/runtime/vm/random.h
index 67dda32..4af724b 100644
--- a/runtime/vm/random.h
+++ b/runtime/vm/random.h
@@ -5,6 +5,8 @@
 #ifndef RUNTIME_VM_RANDOM_H_
 #define RUNTIME_VM_RANDOM_H_
 
+#include <atomic>
+
 #include "vm/allocation.h"
 #include "vm/flags.h"
 #include "vm/globals.h"
@@ -27,10 +29,10 @@
   }
 
  private:
-  void NextState();
+  uint64_t NextState();
   void Initialize(uint64_t seed);
 
-  uint64_t _state;
+  std::atomic<uint64_t> _state;
 
   DISALLOW_COPY_AND_ASSIGN(Random);
 };
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 94e3f38..2a7cbd5 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -2527,7 +2527,7 @@
 
     const char* script_uri;
     {
-      NoReloadScope no_reload(isolate, thread);
+      NoReloadScope no_reload(isolate_group, thread);
       const Library& lib =
           Library::Handle(isolate_group->object_store()->_internal_library());
       const Class& cls = Class::Handle(
@@ -2753,7 +2753,7 @@
         SafepointWriteRwLocker ml(thread,
                                   thread->isolate_group()->program_lock());
         Field& field =
-            Field::Handle(zone, isolate->GetDeoptimizingBoxedField());
+            Field::Handle(zone, isolate->group()->GetDeoptimizingBoxedField());
         while (!field.IsNull()) {
           if (FLAG_trace_optimization || FLAG_trace_field_guards) {
             THR_Print("Lazy disabling unboxing of %s\n", field.ToCString());
@@ -2761,7 +2761,7 @@
           field.set_is_unboxing_candidate(false);
           field.DeoptimizeDependentCode();
           // Get next field.
-          field = isolate->GetDeoptimizingBoxedField();
+          field = isolate->group()->GetDeoptimizingBoxedField();
         }
       }
       if (!BackgroundCompiler::IsDisabled(isolate,
@@ -2952,7 +2952,9 @@
   }
 }
 
-void DeoptimizeAt(const Code& optimized_code, StackFrame* frame) {
+void DeoptimizeAt(Isolate* isolate,
+                  const Code& optimized_code,
+                  StackFrame* frame) {
   ASSERT(optimized_code.is_optimized());
 
   // Force-optimized code is optimized code which cannot deoptimize and doesn't
@@ -2993,7 +2995,7 @@
 
     // N.B.: Update the pending deopt table before updating the frame. The
     // profiler may attempt a stack walk in between.
-    thread->isolate()->AddPendingDeopt(frame->fp(), deopt_pc);
+    isolate->AddPendingDeopt(frame->fp(), deopt_pc);
     frame->MarkForLazyDeopt();
 
     if (FLAG_trace_deoptimization) {
@@ -3011,22 +3013,21 @@
 void DeoptimizeFunctionsOnStack() {
   auto isolate_group = IsolateGroup::Current();
   isolate_group->RunWithStoppedMutators([&]() {
-    auto current = isolate_group->thread_registry()->active_list();
     Code& optimized_code = Code::Handle();
-    while (current != nullptr) {
+    isolate_group->ForEachIsolate([&](Isolate* isolate) {
       DartFrameIterator iterator(
-          current, StackFrameIterator::kAllowCrossThreadIteration);
+          isolate->mutator_thread(),
+          StackFrameIterator::kAllowCrossThreadIteration);
       StackFrame* frame = iterator.NextFrame();
-      while (frame != NULL) {
+      while (frame != nullptr) {
         optimized_code = frame->LookupDartCode();
         if (optimized_code.is_optimized() &&
             !optimized_code.is_force_optimized()) {
-          DeoptimizeAt(optimized_code, frame);
+          DeoptimizeAt(isolate, optimized_code, frame);
         }
         frame = iterator.NextFrame();
       }
-      current = current->next();
-    }
+    });
   });
 }
 
diff --git a/runtime/vm/runtime_entry.h b/runtime/vm/runtime_entry.h
index d4ce293..f1171a6 100644
--- a/runtime/vm/runtime_entry.h
+++ b/runtime/vm/runtime_entry.h
@@ -160,7 +160,9 @@
 
 const char* DeoptReasonToCString(ICData::DeoptReasonId deopt_reason);
 
-void DeoptimizeAt(const Code& optimized_code, StackFrame* frame);
+void DeoptimizeAt(Isolate* isolate,
+                  const Code& optimized_code,
+                  StackFrame* frame);
 void DeoptimizeFunctionsOnStack();
 
 double DartModulo(double a, double b);
diff --git a/runtime/vm/thread_registry.h b/runtime/vm/thread_registry.h
index 4a32f5f..e0c80a3 100644
--- a/runtime/vm/thread_registry.h
+++ b/runtime/vm/thread_registry.h
@@ -58,8 +58,6 @@
   friend class IsolateGroup;
   friend class SafepointHandler;
   friend class Scavenger;
-  friend class WeakCodeReferences;
-  friend void DeoptimizeFunctionsOnStack();
   DISALLOW_COPY_AND_ASSIGN(ThreadRegistry);
 };
 
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index a65d61c..9213cfd 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -528,19 +528,15 @@
   return Api::Success();
 }
 
-Dart_Handle TestCase::TriggerReload(const uint8_t* kernel_buffer,
-                                    intptr_t kernel_buffer_size) {
+Dart_Handle TestCase::TriggerReload(
+    std::function<bool(Isolate*, JSONStream*)> do_reload) {
   Thread* thread = Thread::Current();
   Isolate* isolate = thread->isolate();
   JSONStream js;
   bool success = false;
   {
     TransitionNativeToVM transition(thread);
-    success =
-        isolate->group()->ReloadKernel(&js,
-                                       false,  // force_reload
-                                       kernel_buffer, kernel_buffer_size,
-                                       true);  // dont_delete_reload_context
+    success = do_reload(isolate, &js);
     OS::PrintErr("RELOAD REPORT:\n%s\n", js.ToCString());
   }
 
@@ -569,6 +565,26 @@
   return result;
 }
 
+Dart_Handle TestCase::TriggerReload(const char* root_script_url) {
+  return TriggerReload([&](Isolate* isolate, JSONStream* js) {
+    return isolate->group()->ReloadSources(js,
+                                           /*force_reload=*/false,
+                                           root_script_url,
+                                           /*packages_url=*/nullptr,
+                                           /*dont_delete_reload_context=*/true);
+  });
+}
+
+Dart_Handle TestCase::TriggerReload(const uint8_t* kernel_buffer,
+                                    intptr_t kernel_buffer_size) {
+  return TriggerReload([&](Isolate* isolate, JSONStream* js) {
+    return isolate->group()->ReloadKernel(js,
+                                          /*force_reload=*/false, kernel_buffer,
+                                          kernel_buffer_size,
+                                          /*dont_delete_reload_context=*/true);
+  });
+}
+
 Dart_Handle TestCase::ReloadTestScript(const char* script) {
     Dart_SourceFile* sourcefiles = NULL;
     intptr_t num_files = BuildSourceFilesArray(&sourcefiles, script);
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index 89bc50e..50d39eb 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.h
@@ -5,6 +5,8 @@
 #ifndef RUNTIME_VM_UNIT_TEST_H_
 #define RUNTIME_VM_UNIT_TEST_H_
 
+#include <functional>
+
 #include "include/dart_native_api.h"
 
 #include "platform/globals.h"
@@ -378,6 +380,7 @@
   // Initiates the reload.
   static Dart_Handle TriggerReload(const uint8_t* kernel_buffer,
                                    intptr_t kernel_buffer_size);
+  static Dart_Handle TriggerReload(const char* root_script_url);
 
   // Helper function which reloads the current isolate using |script|.
   static Dart_Handle ReloadTestScript(const char* script);
@@ -397,6 +400,9 @@
   static const char* LateTag() { return IsNNBD() ? "late" : ""; }
 
  private:
+  static Dart_Handle TriggerReload(
+      std::function<bool(Isolate*, JSONStream*)> do_reload);
+
   // |data_buffer| can either be snapshot data, or kernel binary data.
   // If |data_buffer| is snapshot data, then |len| should be zero as snapshot
   // size is encoded within them. If |len| is non-zero, then |data_buffer|
diff --git a/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml b/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml
index 7f66713..5624a4e 100644
--- a/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml
+++ b/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml
@@ -3,4 +3,4 @@
 name: sdk_library_metadata
 publish_to: none
 environment:
-  sdk: '>=2.11.0 <3.0.0'
+  sdk: '>=2.12.0 <3.0.0'
diff --git a/tools/VERSION b/tools/VERSION
index 7e70b16..8ef6d63 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -25,7 +25,7 @@
 #
 CHANNEL dev
 MAJOR 2
-MINOR 12
+MINOR 13
 PATCH 0
-PRERELEASE 286
+PRERELEASE 0
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 823773d..bd85a2b 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -97,7 +97,7 @@
 # default 'language' "category" with code generated for both CFE and Analyzer,
 # while other categories can be tailored more specifically.
 
-current-version: '2.12.0'
+current-version: '2.13.0'
 
 features:
   triple-shift:
diff --git a/tools/generate_package_config.dart b/tools/generate_package_config.dart
index 08b7920..516dcf7 100644
--- a/tools/generate_package_config.dart
+++ b/tools/generate_package_config.dart
@@ -19,6 +19,7 @@
     ...listSubdirectories('pkg'),
     ...listSubdirectories('third_party/pkg'),
     ...listSubdirectories('third_party/pkg_tested'),
+    ...listSubdirectories('third_party/pkg/file/packages'),
     ...listSubdirectories('third_party/pkg/test/pkgs'),
     packageDirectory('runtime/observatory'),
     packageDirectory(
@@ -27,7 +28,6 @@
     packageDirectory(
         'runtime/observatory_2/tests/service_2/observatory_test_package_2'),
     packageDirectory('sdk/lib/_internal/sdk_library_metadata'),
-    packageDirectory('sdk/lib/_internal/js_runtime'),
     packageDirectory('third_party/pkg/protobuf/protobuf'),
     packageDirectory('tools/package_deps'),
   ];
