[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) \