[cfe] Add Function.futureValueType and serialize Let.fileOffset

Serializing Let.fileOffset supports positions in stacktraces resulting
from null aware expressions, like `if (o?.foo) ...` when `o` is `null`.

Adding Function.futureValueType supports the proper backend
implementation for the fix in
https://dart-review.googlesource.com/c/sdk/+/181303

Closes #44654

TEST=existing

Change-Id: Ie5939a248d3d8bf41388e8f435e4ba4195afeabd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/182269
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
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 b6ca1f3..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;
@@ -992,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);
     }
@@ -1426,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.");
 
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/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/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/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 480455a..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,
   };
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/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/kernel_binary.h b/runtime/vm/kernel_binary.h
index c4810c0..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)                                                     \