Version 2.12.0-49.0.dev
Merge commit 'b11d057572599d001dd766c441e85ad06ce1b943' into 'dev'
diff --git a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
index 39bf88b..7803de7 100644
--- a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
+++ b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
@@ -1,11 +1,11 @@
ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|3679|5|94|Const constructors can't throw exceptions.
-ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|7880|5|97|Const constructors can't throw exceptions.
+ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|7881|5|97|Const constructors can't throw exceptions.
ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|893|5|95|Const constructors can't throw exceptions.
ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|926|5|94|Const constructors can't throw exceptions.
ERROR|COMPILE_TIME_ERROR|INVALID_ASSIGNMENT|lib/_internal/js_dev_runtime/private/interceptors.dart|1358|18|27|A value of type 'double' can't be assigned to a variable of type 'int'.
ERROR|COMPILE_TIME_ERROR|RETURN_OF_INVALID_TYPE|lib/_internal/js_dev_runtime/private/interceptors.dart|1225|14|38|A value of type 'double' can't be returned from method '%' because it has a return type of 'JSNumber'.
ERROR|COMPILE_TIME_ERROR|RETURN_OF_INVALID_TYPE|lib/_internal/js_dev_runtime/private/interceptors.dart|1227|14|38|A value of type 'double' can't be returned from method '%' because it has a return type of 'JSNumber'.
ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|3677|3|5|Only redirecting factory constructors can be declared to be 'const'.
-ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|7878|3|5|Only redirecting factory constructors can be declared to be 'const'.
+ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|7879|3|5|Only redirecting factory constructors can be declared to be 'const'.
ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|891|3|5|Only redirecting factory constructors can be declared to be 'const'.
ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|924|3|5|Only redirecting factory constructors can be declared to be 'const'.
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
index 7cd9550..9ee095c 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
@@ -563,28 +563,28 @@
// pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: The method 'Operators1.==' has fewer positional arguments than those of overridden method 'Object.=='.
// operator ==() => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
// pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: The method 'Operators2.==' has more required arguments than those of overridden method 'Object.=='.
// operator ==(a, b) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
// pkg/front_end/testcases/general/invalid_operator.dart:71:12: Error: The method 'Operators4.==' has fewer positional arguments than those of overridden method 'Object.=='.
// operator ==({a}) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
// pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
// operator ==<T>(a) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
@@ -592,7 +592,7 @@
// Change to a subtype of 'bool'.
// operator ==<T>(a) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
index 6e9b140..1c0ff49 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
@@ -563,28 +563,28 @@
// pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: The method 'Operators1.==' has fewer positional arguments than those of overridden method 'Object.=='.
// operator ==() => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
// pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: The method 'Operators2.==' has more required arguments than those of overridden method 'Object.=='.
// operator ==(a, b) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
// pkg/front_end/testcases/general/invalid_operator.dart:71:12: Error: The method 'Operators4.==' has fewer positional arguments than those of overridden method 'Object.=='.
// operator ==({a}) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
// pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
// operator ==<T>(a) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
@@ -592,7 +592,7 @@
// Change to a subtype of 'bool'.
// operator ==<T>(a) => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect
index 930703f..926252c 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect
@@ -9,7 +9,7 @@
// pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='.
// bool operator ==() => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
index e677ee5..2d987ac 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
@@ -9,7 +9,7 @@
// pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='.
// bool operator ==() => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
index e677ee5..2d987ac 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
@@ -9,7 +9,7 @@
// pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='.
// bool operator ==() => true;
// ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
// bool operator ==(Object other) native "Object_equals";
// ^
//
diff --git a/pkg/vm/lib/transformations/pragma.dart b/pkg/vm/lib/transformations/pragma.dart
index ce3055b..d27f3d8 100644
--- a/pkg/vm/lib/transformations/pragma.dart
+++ b/pkg/vm/lib/transformations/pragma.dart
@@ -12,11 +12,14 @@
const kNonNullableResultType = "vm:non-nullable-result-type";
const kResultTypeUsesPassedTypeArguments =
"result-type-uses-passed-type-arguments";
+const kRecognizedPragmaName = "vm:recognized";
abstract class ParsedPragma {}
enum PragmaEntryPointType { Default, GetterOnly, SetterOnly, CallOnly }
+enum PragmaRecognizedType { AsmIntrinsic, GraphIntrinsic, Other }
+
class ParsedEntryPointPragma extends ParsedPragma {
final PragmaEntryPointType type;
ParsedEntryPointPragma(this.type);
@@ -38,6 +41,11 @@
ParsedNonNullableResultType();
}
+class ParsedRecognized extends ParsedPragma {
+ final PragmaRecognizedType type;
+ ParsedRecognized(this.type);
+}
+
abstract class PragmaAnnotationParser {
/// May return 'null' if the annotation does not represent a recognized
/// @pragma.
@@ -118,6 +126,22 @@
"pragma: $options";
case kNonNullableResultType:
return new ParsedNonNullableResultType();
+ case kRecognizedPragmaName:
+ PragmaRecognizedType type;
+ if (options is StringConstant) {
+ if (options.value == "asm-intrinsic") {
+ type = PragmaRecognizedType.AsmIntrinsic;
+ } else if (options.value == "graph-intrinsic") {
+ type = PragmaRecognizedType.GraphIntrinsic;
+ } else if (options.value == "other") {
+ type = PragmaRecognizedType.Other;
+ }
+ }
+ if (type == null) {
+ throw "ERROR: Unsupported option to '$kRecognizedPragmaName' "
+ "pragma: $options";
+ }
+ return new ParsedRecognized(type);
default:
return null;
}
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
index ba8a56d..2a67d18 100644
--- a/pkg/vm/lib/transformations/type_flow/native_code.dart
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -217,6 +217,22 @@
bool isMemberReferencedFromNativeCode(Member member) =>
_membersReferencedFromNativeCode.contains(member);
+ PragmaRecognizedType recognizedType(Member member) {
+ for (var annotation in member.annotations) {
+ ParsedPragma pragma = _matcher.parsePragma(annotation);
+ if (pragma is ParsedRecognized) {
+ return pragma.type;
+ }
+ }
+ return null;
+ }
+
+ bool isRecognized(Member member, [List<PragmaRecognizedType> expectedTypes]) {
+ PragmaRecognizedType type = recognizedType(member);
+ return type != null &&
+ (expectedTypes == null || expectedTypes.contains(type));
+ }
+
/// Simulate the execution of a native method by adding its entry points
/// using [entryPointsListener]. Returns result type of the native method.
TypeExpr handleNativeProcedure(
diff --git a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
index e1a947c..096acaf 100644
--- a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
+++ b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
@@ -160,6 +160,7 @@
shaker.typeFlowAnalysis.isTearOffTaken(member) ||
shaker.typeFlowAnalysis.nativeCodeOracle
.isMemberReferencedFromNativeCode(member) ||
+ shaker.typeFlowAnalysis.nativeCodeOracle.isRecognized(member) ||
getExternalName(member) != null) {
info.eligible = false;
}
diff --git a/pkg/vm/lib/transformations/type_flow/unboxing_info.dart b/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
index f105c4f..792dc99 100644
--- a/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
+++ b/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
@@ -6,6 +6,7 @@
import 'package:kernel/core_types.dart';
import 'package:kernel/external_name.dart' show getExternalName;
import 'package:vm/metadata/procedure_attributes.dart';
+import 'package:vm/transformations/pragma.dart';
import 'package:vm/transformations/type_flow/analysis.dart';
import 'package:vm/transformations/type_flow/calls.dart';
import 'package:vm/transformations/type_flow/native_code.dart';
@@ -199,18 +200,11 @@
// have boxed parameters and return values.
return _isNative(member) ||
_nativeCodeOracle.isMemberReferencedFromNativeCode(member) ||
- _isEnclosingClassSubtypeOfNum(member);
+ _nativeCodeOracle.isRecognized(member, const [
+ PragmaRecognizedType.AsmIntrinsic,
+ PragmaRecognizedType.Other
+ ]);
}
bool _isNative(Member member) => getExternalName(member) != null;
-
- // TODO(dartbug.com/33549): Calls to these methods could be replaced by
- // CheckedSmiOpInstr, so in order to allow the parameters and return
- // value to be unboxed, the slow path for such instructions should be
- // updated to be consistent with the representations from the target interface.
- bool _isEnclosingClassSubtypeOfNum(Member member) {
- return (member.enclosingClass != null &&
- ConeType(_typeHierarchy.getTFClass(member.enclosingClass))
- .isSubtypeOf(_typeHierarchy, _coreTypes.numClass));
- }
}
diff --git a/runtime/docs/compiler/pragmas_recognized_by_compiler.md b/runtime/docs/compiler/pragmas_recognized_by_compiler.md
index 3fded63..8c910f8 100644
--- a/runtime/docs/compiler/pragmas_recognized_by_compiler.md
+++ b/runtime/docs/compiler/pragmas_recognized_by_compiler.md
@@ -135,3 +135,18 @@
final int value;
}
```
+
+### Marking recognized methods
+
+```dart
+@pragma("vm:recognized", <kind>)
+```
+
+Marks the method as one of the methods specially recognized by the VM. Here,
+<kind> is one of `"asm-intrinsic"`, `"graph-intrinsic"` or `"other"`,
+corresponding to the category the recognized method belongs to, as defined in
+[`recognized_methods_list.h`](../../vm/compiler/recognized_methods_list.h).
+
+The pragmas must match exactly the set of recognized methods. This enables
+kernel-level analyses and optimizations to query whether a method is recognized
+by the VM. The correspondence is checked when running in debug mode.
diff --git a/runtime/docs/pragmas.md b/runtime/docs/pragmas.md
index ad3b987..3f7d23b 100644
--- a/runtime/docs/pragmas.md
+++ b/runtime/docs/pragmas.md
@@ -17,6 +17,7 @@
| Pragma | Meaning |
| --- | --- |
| `vm:exact-result-type` | [Declaring an exact result type of a method](compiler/pragmas_recognized_by_compiler.md#providing-an-exact-result-type) |
+| `vm:recognized` | [Marking this as a recognized method](compiler/pragmas_recognized_by_compiler.md#marking-recognized-methods) |
## Pragmas for internal testing
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 48aae11..af86e1e 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -741,6 +741,23 @@
KernelProgramInfo::Handle(script.kernel_program_info());
ASSERT(info.IsNull() ||
info.potential_natives() == GrowableObjectArray::null());
+
+ // Check that all functions that are explicitly marked as recognized with the
+ // vm:recognized annotation are in fact recognized. The check can't be done on
+ // function creation, since the recognized status isn't set until later.
+ if ((function.IsRecognized() !=
+ MethodRecognizer::IsMarkedAsRecognized(function)) &&
+ !function.IsDynamicInvocationForwarder()) {
+ if (function.IsRecognized()) {
+ FATAL1(
+ "Recognized method %s is not marked with the vm:recognized pragma.",
+ function.ToQualifiedCString());
+ } else {
+ FATAL1(
+ "Non-recognized method %s is marked with the vm:recognized pragma.",
+ function.ToQualifiedCString());
+ }
+ }
#endif
auto& kernel_data = ExternalTypedData::Handle(Z, function.KernelData());
diff --git a/runtime/vm/compiler/method_recognizer.cc b/runtime/vm/compiler/method_recognizer.cc
index 2d4d7d6..ecd99a1 100644
--- a/runtime/vm/compiler/method_recognizer.cc
+++ b/runtime/vm/compiler/method_recognizer.cc
@@ -195,6 +195,27 @@
return "?";
}
+// Is this method marked with the vm:recognized pragma?
+bool MethodRecognizer::IsMarkedAsRecognized(const Function& function,
+ const char* kind) {
+ const Function* functionp =
+ function.IsDynamicInvocationForwarder()
+ ? &Function::Handle(function.ForwardingTarget())
+ : &function;
+ Object& options = Object::Handle();
+ bool is_recognized =
+ Library::FindPragma(Thread::Current(), /*only_core=*/true, *functionp,
+ Symbols::vm_recognized(), &options);
+ if (!is_recognized) return false;
+ if (kind == nullptr) return true;
+
+ ASSERT(options.IsString());
+ ASSERT(String::Cast(options).Equals("asm-intrinsic") ||
+ String::Cast(options).Equals("graph-intrinsic") ||
+ String::Cast(options).Equals("other"));
+ return String::Cast(options).Equals(kind);
+}
+
void MethodRecognizer::InitializeState() {
GrowableArray<Library*> libs(3);
Libraries(&libs);
diff --git a/runtime/vm/compiler/method_recognizer.h b/runtime/vm/compiler/method_recognizer.h
index 949e031..e9a1067 100644
--- a/runtime/vm/compiler/method_recognizer.h
+++ b/runtime/vm/compiler/method_recognizer.h
@@ -53,6 +53,8 @@
static intptr_t MethodKindToReceiverCid(Kind kind);
static const char* KindToCString(Kind kind);
+ static bool IsMarkedAsRecognized(const Function& function,
+ const char* kind = nullptr);
static void InitializeState();
private:
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index e198f85..1f50840 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -12,365 +12,365 @@
// 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, 0x8fd6ea58) \
+ V(::, identical, ObjectIdentical, 0x8fd6ea77) \
V(ClassID, getID, ClassIDgetID, 0x0401ffad) \
- V(Object, Object., ObjectConstructor, 0x256e7170) \
- V(List, ., ListFactory, 0xbec87d33) \
- V(_List, ., ObjectArrayAllocate, 0x6de199a1) \
- V(_List, []=, ObjectArraySetIndexed, 0xba15978f) \
- V(_GrowableList, []=, GrowableArraySetIndexed, 0xba15978f) \
- V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff37) \
- V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7212d) \
- V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b952) \
- V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919bc) \
- V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53af) \
- V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c49520) \
- V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6a4) \
- V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c29ffe) \
- V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f28a) \
- V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987b7) \
- V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c28) \
- V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed4e) \
- V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ad87) \
- V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xc9e4212d) \
- V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa0c) \
- V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xe8acb234) \
- V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651525) \
- V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10d97) \
- V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b95f) \
- V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19bea) \
- V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272645) \
- V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af137) \
- V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f7f) \
- V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf0483280) \
- V(ByteData, ., ByteDataFactory, 0x63fefa4b) \
- V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0xe51b926b) \
- V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x3c781fb9) \
- V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0xe51b926b) \
- V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x3c781fb9) \
- V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xe9e9dad9) \
- V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x016014a7) \
- V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x8c3fc232) \
+ V(Object, Object., ObjectConstructor, 0x89c467da) \
+ V(List, ., ListFactory, 0xbec87d52) \
+ V(_List, ., ObjectArrayAllocate, 0x6de199c0) \
+ V(_List, []=, ObjectArraySetIndexed, 0xba1597ae) \
+ V(_GrowableList, []=, GrowableArraySetIndexed, 0xba1597ae) \
+ V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56) \
+ V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c) \
+ V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971) \
+ V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db) \
+ V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce) \
+ V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f) \
+ V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3) \
+ V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d) \
+ V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9) \
+ V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6) \
+ V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47) \
+ V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d) \
+ V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6) \
+ V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xc9e4214c) \
+ V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b) \
+ V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xe8acb253) \
+ V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544) \
+ V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6) \
+ V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e) \
+ V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09) \
+ V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664) \
+ V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156) \
+ V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e) \
+ V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f) \
+ V(ByteData, ., ByteDataFactory, 0x63fefa6a) \
+ V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0xe51b928a) \
+ V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x3c781fd8) \
+ V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0xe51b928a) \
+ V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x3c781fd8) \
+ V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xe9e9daf8) \
+ V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x016014c6) \
+ V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x8c3fc251) \
V(_Uint8ClampedArrayView, ._, TypedData_Uint8ClampedArrayView_factory, \
- 0x36da9706) \
- V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x09a366f8) \
- V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x8f74c30f) \
- V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x8c100d16) \
- V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x4f7f073e) \
- V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xb85546cc) \
- V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x019c229a) \
- V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x2290e5a1) \
- V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xbe62c734) \
- V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x5bb7771d) \
- V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x30b9f2a2) \
- V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x96490d01) \
- V(Int8List, ., TypedData_Int8Array_factory, 0x80ad83e1) \
- V(Uint8List, ., TypedData_Uint8Array_factory, 0x252e6768) \
- V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x1ed931ee) \
- V(Int16List, ., TypedData_Int16Array_factory, 0x7ea8630c) \
- V(Uint16List, ., TypedData_Uint16Array_factory, 0x2764f743) \
- V(Int32List, ., TypedData_Int32Array_factory, 0x54a56479) \
- V(Uint32List, ., TypedData_Uint32Array_factory, 0xac4deaa4) \
- V(Int64List, ., TypedData_Int64Array_factory, 0x02d4c748) \
- V(Uint64List, ., TypedData_Uint64Array_factory, 0x08669751) \
- V(Float32List, ., TypedData_Float32Array_factory, 0x8b65b9d7) \
- V(Float64List, ., TypedData_Float64Array_factory, 0x09ede82a) \
- V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xb2a9e6e1) \
- V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xa5292147) \
- V(Float64x2List, ., TypedData_Float64x2Array_factory, 0x20eafb43) \
- V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x143ed675) \
+ 0x36da9725) \
+ V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x09a36717) \
+ V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x8f74c32e) \
+ V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x8c100d35) \
+ V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x4f7f075d) \
+ V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xb85546eb) \
+ V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x019c22b9) \
+ V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x2290e5c0) \
+ V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xbe62c753) \
+ V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x5bb7773c) \
+ V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x30b9f2c1) \
+ V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x96490d20) \
+ V(Int8List, ., TypedData_Int8Array_factory, 0x80ad8400) \
+ V(Uint8List, ., TypedData_Uint8Array_factory, 0x252e6787) \
+ V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x1ed9320d) \
+ V(Int16List, ., TypedData_Int16Array_factory, 0x7ea8632b) \
+ V(Uint16List, ., TypedData_Uint16Array_factory, 0x2764f762) \
+ V(Int32List, ., TypedData_Int32Array_factory, 0x54a56498) \
+ V(Uint32List, ., TypedData_Uint32Array_factory, 0xac4deac3) \
+ V(Int64List, ., TypedData_Int64Array_factory, 0x02d4c767) \
+ V(Uint64List, ., TypedData_Uint64Array_factory, 0x08669770) \
+ V(Float32List, ., TypedData_Float32Array_factory, 0x8b65b9f6) \
+ V(Float64List, ., TypedData_Float64Array_factory, 0x09ede849) \
+ V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xb2a9e700) \
+ V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xa5292166) \
+ V(Float64x2List, ., TypedData_Float64x2Array_factory, 0x20eafb62) \
+ V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x143ed694) \
V(::, copyRangeFromUint8ListToOneByteString, \
- CopyRangeFromUint8ListToOneByteString, 0x89d6a60a) \
- V(_StringBase, _interpolate, StringBaseInterpolate, 0xd5a58efc) \
- V(_IntegerImplementation, toDouble, IntegerToDouble, 0x5f8db5f5) \
- V(_Double, _add, DoubleAdd, 0x4326962a) \
- V(_Double, _sub, DoubleSub, 0x81077f31) \
- V(_Double, _mul, DoubleMul, 0x7858fa6f) \
- V(_Double, _div, DoubleDiv, 0x813d6a94) \
- V(::, min, MathMin, 0xe6a2f504) \
- V(::, max, MathMax, 0x4cfa6f6b) \
- V(::, _doublePow, MathDoublePow, 0x9772a8c1) \
- V(::, _intPow, MathIntPow, 0x65762a89) \
- V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x4ddbf1d0) \
- V(Float32x4, Float32x4.zero, Float32x4Zero, 0x730d827d) \
- V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x36ae87e8) \
- V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x8704457d) \
- V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x71ab7a48) \
- V(_Float32x4, shuffle, Float32x4Shuffle, 0x6f8cd72e) \
- V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0xd9fe42cf) \
- V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x00b7b96d) \
- V(_Float32x4, equal, Float32x4Equal, 0x77b31279) \
- V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x85a5a282) \
- V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x81c686ba) \
- V(_Float32x4, lessThan, Float32x4LessThan, 0x7d709620) \
- V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x79cf7843) \
- V(_Float32x4, notEqual, Float32x4NotEqual, 0x97a75a46) \
- V(_Float32x4, min, Float32x4Min, 0x0ad96995) \
- V(_Float32x4, max, Float32x4Max, 0xed08eb66) \
- V(_Float32x4, scale, Float32x4Scale, 0xfdf348c5) \
- V(_Float32x4, sqrt, Float32x4Sqrt, 0x84853df5) \
- V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0x7d66357b) \
- V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x73e065b5) \
- V(_Float32x4, unary-, Float32x4Negate, 0x86111def) \
- V(_Float32x4, abs, Float32x4Abs, 0x8ad4c18b) \
- V(_Float32x4, clamp, Float32x4Clamp, 0x374a9da0) \
- V(_Float32x4, _withX, Float32x4WithX, 0xfd53a072) \
- V(_Float32x4, _withY, Float32x4WithY, 0xf5f5b506) \
- V(_Float32x4, _withZ, Float32x4WithZ, 0xf2122f63) \
- V(_Float32x4, _withW, Float32x4WithW, 0xef6f231e) \
- V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9688f476) \
- V(Float64x2, Float64x2.zero, Float64x2Zero, 0x35f71913) \
- V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xf2e6bce9) \
- V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0xa936b421) \
- V(_Float64x2, get:x, Float64x2GetX, 0xd83e5791) \
- V(_Float64x2, get:y, Float64x2GetY, 0xc5cfb2b4) \
- V(_Float64x2, unary-, Float64x2Negate, 0x48fab485) \
- V(_Float64x2, abs, Float64x2Abs, 0x4dbe5821) \
- V(_Float64x2, sqrt, Float64x2Sqrt, 0x476ed48b) \
- V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x00b7b96d) \
- V(_Float64x2, scale, Float64x2Scale, 0xc0dcdf5b) \
- V(_Float64x2, _withX, Float64x2WithX, 0xc03d3708) \
- V(_Float64x2, _withY, Float64x2WithY, 0xb8df4b9c) \
- V(_Float64x2, min, Float64x2Min, 0x6b5e1755) \
- V(_Float64x2, max, Float64x2Max, 0x4d8d9926) \
- V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa646ec55) \
- V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x5e05beed) \
- V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x7893999c) \
- V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x7713cbb9) \
- V(_Int32x4, get:flagY, Int32x4GetFlagY, 0x92840299) \
- V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xa02d9dec) \
- V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xa94db02d) \
- V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x00b7b96d) \
- V(_Int32x4, shuffle, Int32x4Shuffle, 0x149a8b16) \
- V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0xd017e89f) \
- V(_Int32x4, select, Int32x4Select, 0x2847cb63) \
- V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xa365d5a6) \
- V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x945670e9) \
- V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x938c5d97) \
- V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x9ebace9b) \
- V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xe161439b) \
- V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0x8c899997) \
- V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xb1d039ec) \
- V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x7c713c68) \
- V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0xcb55342c) \
- V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0x4b6bbba8) \
- V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0xd35b67db) \
- V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0x5371ef57) \
- V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0xd55a64df) \
- V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0x5570ec5b) \
- V(::, _classRangeCheck, ClassRangeCheck, 0x5ee76871) \
- V(::, _asyncStackTraceHelper, AsyncStackTraceHelper, 0x92cea920) \
- V(::, _abi, FfiAbi, 0x00a48dda) \
- V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x4ea3f661) \
- V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0xe7a60ce3) \
- V(::, _loadInt8, FfiLoadInt8, 0x7b779ed3) \
- V(::, _loadInt16, FfiLoadInt16, 0x58b6f02a) \
- V(::, _loadInt32, FfiLoadInt32, 0x5a94fec0) \
- V(::, _loadInt64, FfiLoadInt64, 0x4b627ea0) \
- V(::, _loadUint8, FfiLoadUint8, 0x4dc0dbce) \
- V(::, _loadUint16, FfiLoadUint16, 0x79491be7) \
- V(::, _loadUint32, FfiLoadUint32, 0x62e14f52) \
- V(::, _loadUint64, FfiLoadUint64, 0x7178bcc9) \
- V(::, _loadIntPtr, FfiLoadIntPtr, 0x584c733b) \
- V(::, _loadFloat, FfiLoadFloat, 0x7f0471da) \
- V(::, _loadDouble, FfiLoadDouble, 0x7d37b396) \
- V(::, _loadPointer, FfiLoadPointer, 0x3691c04d) \
- V(::, _storeInt8, FfiStoreInt8, 0x118e5bc9) \
- V(::, _storeInt16, FfiStoreInt16, 0x0a8b9fef) \
- V(::, _storeInt32, FfiStoreInt32, 0x2e23d91a) \
- V(::, _storeInt64, FfiStoreInt64, 0x2411ba37) \
- V(::, _storeUint8, FfiStoreUint8, 0x37ab7fb3) \
- V(::, _storeUint16, FfiStoreUint16, 0x153b579b) \
- V(::, _storeUint32, FfiStoreUint32, 0x18159582) \
- V(::, _storeUint64, FfiStoreUint64, 0x1516def6) \
- V(::, _storeIntPtr, FfiStoreIntPtr, 0x3a401365) \
- V(::, _storeFloat, FfiStoreFloat, 0x23292bbb) \
- V(::, _storeDouble, FfiStoreDouble, 0x013dc7a1) \
- V(::, _storePointer, FfiStorePointer, 0x43c38f62) \
- V(::, _fromAddress, FfiFromAddress, 0xab4ae553) \
- V(Pointer, get:address, FfiGetAddress, 0x012b2b9f) \
- V(::, reachabilityFence, ReachabilityFence, 0xad39d0a6) \
- V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x288d0078) \
- V(_Future, timeout, FutureTimeout, 0xdea67258) \
+ CopyRangeFromUint8ListToOneByteString, 0x89d6a629) \
+ V(_StringBase, _interpolate, StringBaseInterpolate, 0xd5a58f1b) \
+ V(_IntegerImplementation, toDouble, IntegerToDouble, 0x5f8db614) \
+ V(_Double, _add, DoubleAdd, 0x43269649) \
+ V(_Double, _sub, DoubleSub, 0x81077f50) \
+ V(_Double, _mul, DoubleMul, 0x7858fa8e) \
+ V(_Double, _div, DoubleDiv, 0x813d6ab3) \
+ V(::, min, MathMin, 0xe6a2f523) \
+ V(::, max, MathMax, 0x4cfa6f8a) \
+ V(::, _doublePow, MathDoublePow, 0x9772a8e0) \
+ V(::, _intPow, MathIntPow, 0x65762aa8) \
+ V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x4ddbf1ef) \
+ V(Float32x4, Float32x4.zero, Float32x4Zero, 0x730d829c) \
+ V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x36ae8807) \
+ V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x8704459c) \
+ V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x71ab7a67) \
+ V(_Float32x4, shuffle, Float32x4Shuffle, 0x6f8cd74d) \
+ V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0xd9fe42ee) \
+ V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x00b7b98c) \
+ V(_Float32x4, equal, Float32x4Equal, 0x77b31298) \
+ V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x85a5a2a1) \
+ V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x81c686d9) \
+ V(_Float32x4, lessThan, Float32x4LessThan, 0x7d70963f) \
+ V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x79cf7862) \
+ V(_Float32x4, notEqual, Float32x4NotEqual, 0x97a75a65) \
+ V(_Float32x4, min, Float32x4Min, 0x0ad969b4) \
+ V(_Float32x4, max, Float32x4Max, 0xed08eb85) \
+ V(_Float32x4, scale, Float32x4Scale, 0xfdf348e4) \
+ V(_Float32x4, sqrt, Float32x4Sqrt, 0x84853e14) \
+ V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0x7d66359a) \
+ V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x73e065d4) \
+ V(_Float32x4, unary-, Float32x4Negate, 0x86111e0e) \
+ V(_Float32x4, abs, Float32x4Abs, 0x8ad4c1aa) \
+ V(_Float32x4, clamp, Float32x4Clamp, 0x374a9dbf) \
+ V(_Float32x4, _withX, Float32x4WithX, 0xfd53a091) \
+ V(_Float32x4, _withY, Float32x4WithY, 0xf5f5b525) \
+ V(_Float32x4, _withZ, Float32x4WithZ, 0xf2122f82) \
+ V(_Float32x4, _withW, Float32x4WithW, 0xef6f233d) \
+ V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9688f495) \
+ V(Float64x2, Float64x2.zero, Float64x2Zero, 0x35f71932) \
+ V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xf2e6bd08) \
+ V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0xa936b440) \
+ V(_Float64x2, get:x, Float64x2GetX, 0xd83e57b0) \
+ V(_Float64x2, get:y, Float64x2GetY, 0xc5cfb2d3) \
+ V(_Float64x2, unary-, Float64x2Negate, 0x48fab4a4) \
+ V(_Float64x2, abs, Float64x2Abs, 0x4dbe5840) \
+ V(_Float64x2, sqrt, Float64x2Sqrt, 0x476ed4aa) \
+ V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x00b7b98c) \
+ V(_Float64x2, scale, Float64x2Scale, 0xc0dcdf7a) \
+ V(_Float64x2, _withX, Float64x2WithX, 0xc03d3727) \
+ V(_Float64x2, _withY, Float64x2WithY, 0xb8df4bbb) \
+ V(_Float64x2, min, Float64x2Min, 0x6b5e1774) \
+ V(_Float64x2, max, Float64x2Max, 0x4d8d9945) \
+ V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa646ec74) \
+ V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x5e05bf0c) \
+ V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x789399bb) \
+ V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x7713cbd8) \
+ V(_Int32x4, get:flagY, Int32x4GetFlagY, 0x928402b8) \
+ V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xa02d9e0b) \
+ V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xa94db04c) \
+ V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x00b7b98c) \
+ V(_Int32x4, shuffle, Int32x4Shuffle, 0x149a8b35) \
+ V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0xd017e8be) \
+ V(_Int32x4, select, Int32x4Select, 0x2847cb82) \
+ V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xa365d5c5) \
+ V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x94567108) \
+ V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x938c5db6) \
+ V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x9ebaceba) \
+ V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xe16143ba) \
+ V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0x8c8999b6) \
+ V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xb1d03a0b) \
+ V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x7c713c87) \
+ V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0xcb55344b) \
+ V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0x4b6bbbc7) \
+ V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0xd35b67fa) \
+ V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0x5371ef76) \
+ V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0xd55a64fe) \
+ V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0x5570ec7a) \
+ V(::, _classRangeCheck, ClassRangeCheck, 0x5ee76890) \
+ V(::, _asyncStackTraceHelper, AsyncStackTraceHelper, 0x92cea93f) \
+ V(::, _abi, FfiAbi, 0x00a48df9) \
+ V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x4ea3f680) \
+ V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0xe7a60d02) \
+ V(::, _loadInt8, FfiLoadInt8, 0x7b779ef2) \
+ V(::, _loadInt16, FfiLoadInt16, 0x58b6f049) \
+ V(::, _loadInt32, FfiLoadInt32, 0x5a94fedf) \
+ V(::, _loadInt64, FfiLoadInt64, 0x4b627ebf) \
+ V(::, _loadUint8, FfiLoadUint8, 0x4dc0dbed) \
+ V(::, _loadUint16, FfiLoadUint16, 0x79491c06) \
+ V(::, _loadUint32, FfiLoadUint32, 0x62e14f71) \
+ V(::, _loadUint64, FfiLoadUint64, 0x7178bce8) \
+ V(::, _loadIntPtr, FfiLoadIntPtr, 0x584c735a) \
+ V(::, _loadFloat, FfiLoadFloat, 0x7f0471f9) \
+ V(::, _loadDouble, FfiLoadDouble, 0x7d37b3b5) \
+ V(::, _loadPointer, FfiLoadPointer, 0x3691c06c) \
+ V(::, _storeInt8, FfiStoreInt8, 0x118e5be8) \
+ V(::, _storeInt16, FfiStoreInt16, 0x0a8ba00e) \
+ V(::, _storeInt32, FfiStoreInt32, 0x2e23d939) \
+ V(::, _storeInt64, FfiStoreInt64, 0x2411ba56) \
+ V(::, _storeUint8, FfiStoreUint8, 0x37ab7fd2) \
+ V(::, _storeUint16, FfiStoreUint16, 0x153b57ba) \
+ V(::, _storeUint32, FfiStoreUint32, 0x181595a1) \
+ V(::, _storeUint64, FfiStoreUint64, 0x1516df15) \
+ V(::, _storeIntPtr, FfiStoreIntPtr, 0x3a401384) \
+ V(::, _storeFloat, FfiStoreFloat, 0x23292bda) \
+ V(::, _storeDouble, FfiStoreDouble, 0x013dc7c0) \
+ V(::, _storePointer, FfiStorePointer, 0x43c38f81) \
+ V(::, _fromAddress, FfiFromAddress, 0xab4ae572) \
+ V(Pointer, get:address, FfiGetAddress, 0x012b2bbe) \
+ V(::, reachabilityFence, ReachabilityFence, 0xad39d0c5) \
+ V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x288d0097) \
+ V(_Future, timeout, FutureTimeout, 0xdea67277) \
V(Future, wait, FutureWait, 0x6c0c3295) \
// List of intrinsics:
// (class-name, function-name, intrinsification method, fingerprint).
#define CORE_LIB_INTRINSIC_LIST(V) \
- V(_Smi, ~, Smi_bitNegate, 0x068652b8) \
- V(_Smi, get:bitLength, Smi_bitLength, 0xff01b0cc) \
- V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xa483e093) \
- V(_BigIntImpl, _lsh, Bigint_lsh, 0x772fb5fd) \
- V(_BigIntImpl, _rsh, Bigint_rsh, 0xb52a24b8) \
- V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x90dc61a8) \
- V(_BigIntImpl, _absSub, Bigint_absSub, 0x76887330) \
- V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xb2741296) \
- V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xcee0facc) \
+ V(_Smi, ~, Smi_bitNegate, 0x068652d7) \
+ V(_Smi, get:bitLength, Smi_bitLength, 0xff01b0eb) \
+ V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xa483e0b2) \
+ V(_BigIntImpl, _lsh, Bigint_lsh, 0x772fb61c) \
+ V(_BigIntImpl, _rsh, Bigint_rsh, 0xb52a24d7) \
+ V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x90dc61c7) \
+ V(_BigIntImpl, _absSub, Bigint_absSub, 0x7688734f) \
+ V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xb27412b5) \
+ V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xcee0faeb) \
V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit, \
- 0x14527ed9) \
- V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x08df2795) \
- V(_Double, >, Double_greaterThan, 0xe88b6ffc) \
- V(_Double, >=, Double_greaterEqualThan, 0x1fb70bae) \
- V(_Double, <, Double_lessThan, 0xae875025) \
- V(_Double, <=, Double_lessEqualThan, 0xc87a5050) \
- V(_Double, ==, Double_equal, 0x5299f1d2) \
- V(_Double, +, Double_add, 0x783a47d4) \
- V(_Double, -, Double_sub, 0x493f1465) \
- V(_Double, *, Double_mul, 0xae0df2e2) \
- V(_Double, /, Double_div, 0xed535dde) \
- V(_Double, get:hashCode, Double_hashCode, 0xfa2d7816) \
- V(_Double, get:_identityHashCode, Double_identityHash, 0xcbf20cd4) \
- V(_Double, get:isNaN, Double_getIsNaN, 0x88fdcef4) \
- V(_Double, get:isInfinite, Double_getIsInfinite, 0x796f93b3) \
- V(_Double, get:isNegative, Double_getIsNegative, 0x88e61872) \
- V(_Double, _mulFromInteger, Double_mulFromInteger, 0xc5afaa28) \
- V(_Double, .fromInteger, DoubleFromInteger, 0x9d1ad7f6) \
- V(_GrowableList, ._withData, GrowableArray_Allocate, 0x00be5928) \
- V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x6817556e) \
- V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x60e30834) \
- V(Object, ==, ObjectEquals, 0xbc3cad49) \
- V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c691) \
- V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xa66bfc58) \
- V(_StringBase, get:hashCode, String_getHashCode, 0xfa2d7835) \
- V(_StringBase, get:_identityHashCode, String_identityHash, 0xcbf20cf3) \
- V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xbdfe9c92) \
- V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf5c3c873) \
- V(_StringBase, [], StringBaseCharAt, 0xfa3bf7be) \
- V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0xfa2d7835) \
+ 0x14527ef8) \
+ V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x08df27b4) \
+ V(_Double, >, Double_greaterThan, 0xe88b701b) \
+ V(_Double, >=, Double_greaterEqualThan, 0x1fb70bcd) \
+ V(_Double, <, Double_lessThan, 0xae875044) \
+ V(_Double, <=, Double_lessEqualThan, 0xc87a506f) \
+ V(_Double, ==, Double_equal, 0x5299f1f1) \
+ V(_Double, +, Double_add, 0x783a47f3) \
+ V(_Double, -, Double_sub, 0x493f1484) \
+ V(_Double, *, Double_mul, 0xae0df301) \
+ V(_Double, /, Double_div, 0xed535dfd) \
+ V(_Double, get:hashCode, Double_hashCode, 0xfa2d7835) \
+ V(_Double, get:_identityHashCode, Double_identityHash, 0xcbf20cf3) \
+ V(_Double, get:isNaN, Double_getIsNaN, 0x88fdcf13) \
+ V(_Double, get:isInfinite, Double_getIsInfinite, 0x796f93d2) \
+ V(_Double, get:isNegative, Double_getIsNegative, 0x88e61891) \
+ V(_Double, _mulFromInteger, Double_mulFromInteger, 0xc5afaa47) \
+ V(_Double, .fromInteger, DoubleFromInteger, 0x9d1ad815) \
+ V(_GrowableList, ._withData, GrowableArray_Allocate, 0x00be5947) \
+ V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x6817558d) \
+ V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x60e30853) \
+ V(Object, ==, ObjectEquals, 0xbc3cad68) \
+ V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0) \
+ V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xa66bfc77) \
+ V(_StringBase, get:hashCode, String_getHashCode, 0xfa2d7854) \
+ V(_StringBase, get:_identityHashCode, String_identityHash, 0xcbf20d12) \
+ V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xbdfe9cb1) \
+ V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf5c3c892) \
+ V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd) \
+ V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0xfa2d7854) \
V(_OneByteString, _substringUncheckedNative, \
- OneByteString_substringUnchecked, 0x0d39e4a1) \
- V(_OneByteString, ==, OneByteString_equality, 0x3399ded1) \
- V(_TwoByteString, ==, TwoByteString_equality, 0x3399ded1) \
- V(_Type, get:hashCode, Type_getHashCode, 0xfa2d7835) \
- V(_Type, ==, Type_equality, 0xbc3cad0b) \
- V(::, _getHash, Object_getHash, 0x87e0c73d) \
- V(::, _setHash, Object_setHash, 0xcb4f51d2) \
+ OneByteString_substringUnchecked, 0x0d39e4c0) \
+ V(_OneByteString, ==, OneByteString_equality, 0x3399def0) \
+ V(_TwoByteString, ==, TwoByteString_equality, 0x3399def0) \
+ V(_Type, get:hashCode, Type_getHashCode, 0xfa2d7854) \
+ V(_Type, ==, Type_equality, 0xbc3cad2a) \
+ V(::, _getHash, Object_getHash, 0x87e0c75c) \
+ V(::, _setHash, Object_setHash, 0xcb4f51f1) \
#define CORE_INTEGER_LIB_INTRINSIC_LIST(V) \
V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger, \
- 0xdb88076e) \
- V(_IntegerImplementation, +, Integer_add, 0x9b2718c0) \
+ 0xdb88078d) \
+ V(_IntegerImplementation, +, Integer_add, 0x9b2718df) \
V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger, \
- 0xa1d87562) \
- V(_IntegerImplementation, -, Integer_sub, 0x6c350eb1) \
+ 0xa1d87581) \
+ V(_IntegerImplementation, -, Integer_sub, 0x6c350ed0) \
V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger, \
- 0xa93fad01) \
- V(_IntegerImplementation, *, Integer_mul, 0x4197ce8e) \
+ 0xa93fad20) \
+ V(_IntegerImplementation, *, Integer_mul, 0x4197cead) \
V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger, \
- 0xd040918e) \
- V(_IntegerImplementation, ~/, Integer_truncDivide, 0x79adb402) \
- V(_IntegerImplementation, unary-, Integer_negate, 0xf07a7709) \
+ 0xd04091ad) \
+ V(_IntegerImplementation, ~/, Integer_truncDivide, 0x79adb421) \
+ V(_IntegerImplementation, unary-, Integer_negate, 0xf07a7728) \
V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger, \
- 0xcbb1b792) \
- V(_IntegerImplementation, &, Integer_bitAnd, 0x2b385f64) \
+ 0xcbb1b7b1) \
+ V(_IntegerImplementation, &, Integer_bitAnd, 0x2b385f83) \
V(_IntegerImplementation, _bitOrFromInteger, Integer_bitOrFromInteger, \
- 0xbd3f946a) \
- V(_IntegerImplementation, |, Integer_bitOr, 0x19dc9b1c) \
+ 0xbd3f9489) \
+ V(_IntegerImplementation, |, Integer_bitOr, 0x19dc9b3b) \
V(_IntegerImplementation, _bitXorFromInteger, Integer_bitXorFromInteger, \
- 0xae7f642e) \
- V(_IntegerImplementation, ^, Integer_bitXor, 0x139d6723) \
+ 0xae7f644d) \
+ V(_IntegerImplementation, ^, Integer_bitXor, 0x139d6742) \
V(_IntegerImplementation, _greaterThanFromInteger, \
- Integer_greaterThanFromInt, 0x47319226) \
- V(_IntegerImplementation, >, Integer_greaterThan, 0xc9d374cc) \
- V(_IntegerImplementation, ==, Integer_equal, 0xca4e7087) \
+ Integer_greaterThanFromInt, 0x47319245) \
+ V(_IntegerImplementation, >, Integer_greaterThan, 0xc9d374eb) \
+ V(_IntegerImplementation, ==, Integer_equal, 0xca4e70a6) \
V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger, \
- 0x4d9e5fc5) \
- V(_IntegerImplementation, <, Integer_lessThan, 0xae875025) \
- V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xc87a5050) \
- V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x1fb70bae) \
- V(_IntegerImplementation, <<, Integer_shl, 0xe8da5296) \
- V(_IntegerImplementation, >>, Integer_sar, 0x4fb2013b) \
- V(_Double, toInt, DoubleToInteger, 0xebc963eb) \
+ 0x4d9e5fe4) \
+ V(_IntegerImplementation, <, Integer_lessThan, 0xae875044) \
+ V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xc87a506f) \
+ V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x1fb70bcd) \
+ V(_IntegerImplementation, <<, Integer_shl, 0xe8da52b5) \
+ V(_IntegerImplementation, >>, Integer_sar, 0x4fb2015a) \
+ V(_Double, toInt, DoubleToInteger, 0xebc9640a) \
#define MATH_LIB_INTRINSIC_LIST(V) \
- V(::, sqrt, MathSqrt, 0x98d7cb39) \
- V(_Random, _nextState, Random_nextState, 0x2c1cf0e2) \
+ V(::, sqrt, MathSqrt, 0x98d7cb58) \
+ V(_Random, _nextState, Random_nextState, 0x2c1cf101) \
#define GRAPH_MATH_LIB_INTRINSIC_LIST(V) \
- V(::, sin, MathSin, 0x859e6680) \
- V(::, cos, MathCos, 0xd2dae38e) \
- V(::, tan, MathTan, 0xa23c1122) \
- V(::, asin, MathAsin, 0x1cdb139f) \
- V(::, acos, MathAcos, 0x830d84ba) \
- V(::, atan, MathAtan, 0x35d5ecd7) \
- V(::, atan2, MathAtan2, 0xb4e03ae8) \
+ V(::, sin, MathSin, 0x859e669f) \
+ V(::, cos, MathCos, 0xd2dae3ad) \
+ V(::, tan, MathTan, 0xa23c1141) \
+ V(::, asin, MathAsin, 0x1cdb13be) \
+ V(::, acos, MathAcos, 0x830d84d9) \
+ V(::, atan, MathAtan, 0x35d5ecf6) \
+ V(::, atan2, MathAtan2, 0xb4e03b07) \
#define GRAPH_TYPED_DATA_INTRINSICS_LIST(V) \
- V(_Int8List, [], Int8ArrayGetIndexed, 0xd61e79bd) \
- V(_Int8List, []=, Int8ArraySetIndexed, 0x6e0b2e72) \
- V(_Uint8List, [], Uint8ArrayGetIndexed, 0xe1a67dfd) \
- V(_Uint8List, []=, Uint8ArraySetIndexed, 0x89499a2e) \
- V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xe1a67dfd) \
- V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x89499a2e) \
- V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xe1a67dfd) \
- V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x5facb08e) \
+ V(_Int8List, [], Int8ArrayGetIndexed, 0xd61e79dc) \
+ V(_Int8List, []=, Int8ArraySetIndexed, 0x6e0b2e91) \
+ V(_Uint8List, [], Uint8ArrayGetIndexed, 0xe1a67e1c) \
+ V(_Uint8List, []=, Uint8ArraySetIndexed, 0x89499a4d) \
+ V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xe1a67e1c) \
+ V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x89499a4d) \
+ V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xe1a67e1c) \
+ V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x5facb0ad) \
V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed, \
- 0xe1a67dfd) \
+ 0xe1a67e1c) \
V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed, \
- 0x5facb08e) \
- V(_Int16List, [], Int16ArrayGetIndexed, 0x1726ae5d) \
- V(_Int16List, []=, Int16ArraySetIndexed, 0xde0f4d87) \
- V(_Uint16List, [], Uint16ArrayGetIndexed, 0x26c2525d) \
- V(_Uint16List, []=, Uint16ArraySetIndexed, 0x69ae5b30) \
- V(_Int32List, [], Int32ArrayGetIndexed, 0x407e58de) \
- V(_Int32List, []=, Int32ArraySetIndexed, 0x61194108) \
- V(_Uint32List, [], Uint32ArrayGetIndexed, 0xf078bf3e) \
- V(_Uint32List, []=, Uint32ArraySetIndexed, 0x70f53c88) \
- V(_Int64List, [], Int64ArrayGetIndexed, 0x7c21b69e) \
- V(_Int64List, []=, Int64ArraySetIndexed, 0xcaa7c6ca) \
- V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0a7aa11e) \
- V(_Uint64List, []=, Uint64ArraySetIndexed, 0xd1374e92) \
- V(_Float64List, [], Float64ArrayGetIndexed, 0x9e4b2403) \
- V(_Float64List, []=, Float64ArraySetIndexed, 0x0a43d538) \
- V(_Float32List, [], Float32ArrayGetIndexed, 0xbdf87ee3) \
- V(_Float32List, []=, Float32ArraySetIndexed, 0x2e3e1a4a) \
- V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xa90520bc) \
- V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xb9c7400f) \
- V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfbcc0e74) \
- V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x79152aaf) \
- V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xd90a31e6) \
- V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x4fd191fb) \
- V(_TypedList, get:length, TypedListLength, 0xdc9d90aa) \
- V(_TypedListView, get:length, TypedListViewLength, 0xdc9d90aa) \
- V(_ByteDataView, get:length, ByteDataViewLength, 0xdc9d90aa) \
- V(_Float32x4, get:x, Float32x4ShuffleX, 0xd83e5791) \
- V(_Float32x4, get:y, Float32x4ShuffleY, 0xc5cfb2b4) \
- V(_Float32x4, get:z, Float32x4ShuffleZ, 0xfb9b1e4a) \
- V(_Float32x4, get:w, Float32x4ShuffleW, 0xdddb62cc) \
- V(_Float32x4, *, Float32x4Mul, 0x0be25e24) \
- V(_Float32x4, /, Float32x4Div, 0xe73114a1) \
- V(_Float32x4, -, Float32x4Sub, 0x03c44de7) \
- V(_Float32x4, +, Float32x4Add, 0xde8b8376) \
- V(_Float64x2, *, Float64x2Mul, 0x6c670bc5) \
- V(_Float64x2, /, Float64x2Div, 0x47b5c261) \
- V(_Float64x2, -, Float64x2Sub, 0x6448fb88) \
- V(_Float64x2, +, Float64x2Add, 0x3f103117) \
+ 0x5facb0ad) \
+ V(_Int16List, [], Int16ArrayGetIndexed, 0x1726ae7c) \
+ V(_Int16List, []=, Int16ArraySetIndexed, 0xde0f4da6) \
+ V(_Uint16List, [], Uint16ArrayGetIndexed, 0x26c2527c) \
+ V(_Uint16List, []=, Uint16ArraySetIndexed, 0x69ae5b4f) \
+ V(_Int32List, [], Int32ArrayGetIndexed, 0x407e58fd) \
+ V(_Int32List, []=, Int32ArraySetIndexed, 0x61194127) \
+ V(_Uint32List, [], Uint32ArrayGetIndexed, 0xf078bf5d) \
+ V(_Uint32List, []=, Uint32ArraySetIndexed, 0x70f53ca7) \
+ V(_Int64List, [], Int64ArrayGetIndexed, 0x7c21b6bd) \
+ V(_Int64List, []=, Int64ArraySetIndexed, 0xcaa7c6e9) \
+ V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0a7aa13d) \
+ V(_Uint64List, []=, Uint64ArraySetIndexed, 0xd1374eb1) \
+ V(_Float64List, [], Float64ArrayGetIndexed, 0x9e4b2422) \
+ V(_Float64List, []=, Float64ArraySetIndexed, 0x0a43d557) \
+ V(_Float32List, [], Float32ArrayGetIndexed, 0xbdf87f02) \
+ V(_Float32List, []=, Float32ArraySetIndexed, 0x2e3e1a69) \
+ V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xa90520db) \
+ V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xb9c7402e) \
+ V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfbcc0e93) \
+ V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x79152ace) \
+ V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xd90a3205) \
+ V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x4fd1921a) \
+ V(_TypedList, get:length, TypedListLength, 0xdc9d90c9) \
+ V(_TypedListView, get:length, TypedListViewLength, 0xdc9d90c9) \
+ V(_ByteDataView, get:length, ByteDataViewLength, 0xdc9d90c9) \
+ V(_Float32x4, get:x, Float32x4ShuffleX, 0xd83e57b0) \
+ V(_Float32x4, get:y, Float32x4ShuffleY, 0xc5cfb2d3) \
+ V(_Float32x4, get:z, Float32x4ShuffleZ, 0xfb9b1e69) \
+ V(_Float32x4, get:w, Float32x4ShuffleW, 0xdddb62eb) \
+ V(_Float32x4, *, Float32x4Mul, 0x0be25e43) \
+ V(_Float32x4, /, Float32x4Div, 0xe73114c0) \
+ V(_Float32x4, -, Float32x4Sub, 0x03c44e06) \
+ V(_Float32x4, +, Float32x4Add, 0xde8b8395) \
+ V(_Float64x2, *, Float64x2Mul, 0x6c670be4) \
+ V(_Float64x2, /, Float64x2Div, 0x47b5c280) \
+ V(_Float64x2, -, Float64x2Sub, 0x6448fba7) \
+ V(_Float64x2, +, Float64x2Add, 0x3f103136) \
#define GRAPH_CORE_INTRINSICS_LIST(V) \
- V(_List, get:length, ObjectArrayLength, 0xdc9d90aa) \
- V(_List, [], ObjectArrayGetIndexed, 0xd159dece) \
- V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf5780f43) \
- V(_ImmutableList, get:length, ImmutableArrayLength, 0xdc9d90aa) \
- V(_ImmutableList, [], ImmutableArrayGetIndexed, 0xd159dece) \
- V(_GrowableList, get:length, GrowableArrayLength, 0xdc9d90aa) \
- V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x01ec3c31) \
- V(_GrowableList, _setData, GrowableArraySetData, 0x8ecf0a40) \
- V(_GrowableList, _setLength, GrowableArraySetLength, 0x63da779b) \
- V(_GrowableList, [], GrowableArrayGetIndexed, 0xd159dece) \
- V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x012e9e24) \
- V(_StringBase, get:length, StringBaseLength, 0xdc9d90aa) \
- V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0xc4602c13) \
- V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0xc4602c13) \
+ V(_List, get:length, ObjectArrayLength, 0xdc9d90c9) \
+ V(_List, [], ObjectArrayGetIndexed, 0xd159deed) \
+ V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf5780f62) \
+ V(_ImmutableList, get:length, ImmutableArrayLength, 0xdc9d90c9) \
+ V(_ImmutableList, [], ImmutableArrayGetIndexed, 0xd159deed) \
+ V(_GrowableList, get:length, GrowableArrayLength, 0xdc9d90c9) \
+ V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x01ec3c50) \
+ V(_GrowableList, _setData, GrowableArraySetData, 0x8ecf0a5f) \
+ V(_GrowableList, _setLength, GrowableArraySetLength, 0x63da77ba) \
+ V(_GrowableList, [], GrowableArrayGetIndexed, 0xd159deed) \
+ V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x012e9e43) \
+ V(_StringBase, get:length, StringBaseLength, 0xdc9d90c9) \
+ V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0xc4602c32) \
+ V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0xc4602c32) \
V(_ExternalOneByteString, codeUnitAt, ExternalOneByteStringCodeUnitAt, \
- 0xc4602c13) \
+ 0xc4602c32) \
V(_ExternalTwoByteString, codeUnitAt, ExternalTwoByteStringCodeUnitAt, \
- 0xc4602c13) \
- V(_Double, unary-, DoubleFlipSignBit, 0xdb229448) \
- V(_Double, truncateToDouble, DoubleTruncate, 0x00e6f81b) \
- V(_Double, roundToDouble, DoubleRound, 0xf45c3bc2) \
- V(_Double, floorToDouble, DoubleFloor, 0xf2c73d0a) \
- V(_Double, ceilToDouble, DoubleCeil, 0xfd2e409b) \
- V(_Double, _modulo, DoubleMod, 0x5673c731)
+ 0xc4602c32) \
+ V(_Double, unary-, DoubleFlipSignBit, 0xdb229467) \
+ V(_Double, truncateToDouble, DoubleTruncate, 0x00e6f83a) \
+ V(_Double, roundToDouble, DoubleRound, 0xf45c3be1) \
+ V(_Double, floorToDouble, DoubleFloor, 0xf2c73d29) \
+ V(_Double, ceilToDouble, DoubleCeil, 0xfd2e40ba) \
+ V(_Double, _modulo, DoubleMod, 0x5673c750)
#define GRAPH_INTRINSICS_LIST(V) \
GRAPH_CORE_INTRINSICS_LIST(V) \
@@ -378,14 +378,14 @@
GRAPH_MATH_LIB_INTRINSIC_LIST(V) \
#define DEVELOPER_LIB_INTRINSIC_LIST(V) \
- V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x1eb344b3) \
- V(::, _getDefaultTag, UserTag_defaultTag, 0x2ef2e42c) \
- V(::, _getCurrentTag, Profiler_getCurrentTag, 0x33c3ec15) \
- V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0x7dfcaa18) \
+ V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x1eb344d2) \
+ V(::, _getDefaultTag, UserTag_defaultTag, 0x2ef2e44b) \
+ V(::, _getCurrentTag, Profiler_getCurrentTag, 0x33c3ec34) \
+ V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0x7dfcaa37) \
#define ASYNC_LIB_INTRINSIC_LIST(V) \
- V(::, _clearAsyncThreadStackTrace, ClearAsyncThreadStackTrace, 0x20fecac6) \
- V(::, _setAsyncThreadStackTrace, SetAsyncThreadStackTrace, 0x39346953) \
+ V(::, _clearAsyncThreadStackTrace, ClearAsyncThreadStackTrace, 0x20fecae5) \
+ V(::, _setAsyncThreadStackTrace, SetAsyncThreadStackTrace, 0x39346972) \
#define INTERNAL_LIB_INTRINSIC_LIST(V) \
V(::, allocateOneByteString, AllocateOneByteString, 0xc86bebfa) \
@@ -411,38 +411,38 @@
// A list of core functions that internally dispatch based on received id.
#define POLYMORPHIC_TARGET_LIST(V) \
- V(_StringBase, [], StringBaseCharAt, 0xfa3bf7be) \
- V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff37) \
- V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7212d) \
- V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b952) \
- V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919bc) \
- V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53af) \
- V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c49520) \
- V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6a4) \
- V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c29ffe) \
- V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f28a) \
- V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987b7) \
- V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c28) \
- V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed4e) \
- V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ad87) \
- V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xc9e4212d) \
- V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa0c) \
- V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xe8acb234) \
- V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651525) \
- V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10d97) \
- V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b95f) \
- V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19bea) \
- V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272645) \
- V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af137) \
- V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f7f) \
- V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf0483280) \
- V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c691)
+ V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd) \
+ V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56) \
+ V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c) \
+ V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971) \
+ V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db) \
+ V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce) \
+ V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f) \
+ V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3) \
+ V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d) \
+ V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9) \
+ V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6) \
+ V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47) \
+ V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d) \
+ V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6) \
+ V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xc9e4214c) \
+ V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b) \
+ V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xe8acb253) \
+ V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544) \
+ V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6) \
+ V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e) \
+ V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09) \
+ V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664) \
+ V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156) \
+ V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e) \
+ V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f) \
+ V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0)
// 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, 0x6de199a1) \
+ V(_ListFactory, _List, ., kArrayCid, 0x6de199c0) \
V(_ListFilledFactory, _List, .filled, kArrayCid, 0x871c7eb6) \
V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x045b9063) \
V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid, \
@@ -452,23 +452,23 @@
V(_GrowableListGenerateFactory, _GrowableList, .generate, \
kGrowableObjectArrayCid, 0xf6fbbee3) \
V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \
- 0x00be5928) \
- V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x80ad83e1) \
- V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x252e6768) \
+ 0x00be5947) \
+ V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x80ad8400) \
+ V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x252e6787) \
V(_Uint8ClampedArrayFactory, Uint8ClampedList, ., \
- kTypedDataUint8ClampedArrayCid, 0x1ed931ee) \
- V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x7ea8630c) \
- V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x2764f743) \
- V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x54a56479) \
- V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xac4deaa4) \
- V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x02d4c748) \
- V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x08669751) \
+ kTypedDataUint8ClampedArrayCid, 0x1ed9320d) \
+ V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x7ea8632b) \
+ V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x2764f762) \
+ V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x54a56498) \
+ V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xac4deac3) \
+ V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x02d4c767) \
+ V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x08669770) \
V(_Float64ArrayFactory, Float64List, ., kTypedDataFloat64ArrayCid, \
- 0x09ede82a) \
+ 0x09ede849) \
V(_Float32ArrayFactory, Float32List, ., kTypedDataFloat32ArrayCid, \
- 0x8b65b9d7) \
+ 0x8b65b9f6) \
V(_Float32x4ArrayFactory, Float32x4List, ., kTypedDataFloat32x4ArrayCid, \
- 0xb2a9e6e1)
+ 0xb2a9e700)
// clang-format on
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 91ca10f..3395587 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2306,9 +2306,6 @@
// Set up the intrinsic state of all functions (core, math and typed data).
compiler::Intrinsifier::InitializeState();
- // Set up recognized state of all functions (core, math and typed data).
- MethodRecognizer::InitializeState();
-
// Adds static const fields (class ids) to the class 'ClassID');
lib = Library::LookupLibrary(thread, Symbols::DartInternal());
ASSERT(!lib.IsNull());
@@ -2318,6 +2315,9 @@
ASSERT(injected);
isolate->object_store()->InitKnownObjects();
+
+ // Set up recognized state of all functions (core, math and typed data).
+ MethodRecognizer::InitializeState();
#endif // !defined(DART_PRECOMPILED_RUNTIME)
} else {
// Object::Init version when we are running in a version of dart that has a
@@ -8135,8 +8135,8 @@
const intptr_t arg_offset = args_desc.FirstArgIndex();
// Only check explicit arguments.
const intptr_t arg_start = arg_offset + NumImplicitParameters();
- const intptr_t num_positional_args = args_desc.PositionalCount();
- for (intptr_t arg_index = arg_start; arg_index < num_positional_args;
+ const intptr_t end_positional_args = arg_offset + args_desc.PositionalCount();
+ for (intptr_t arg_index = arg_start; arg_index < end_positional_args;
++arg_index) {
argument ^= args.At(arg_index);
// Adjust for type arguments when they're present.
@@ -8166,7 +8166,7 @@
named_index++) {
argument_name = args_desc.NameAt(named_index);
ASSERT(argument_name.IsSymbol());
- argument ^= args.At(args_desc.PositionAt(named_index));
+ argument ^= args.At(arg_offset + args_desc.PositionAt(named_index));
// Try to find the named parameter that matches the provided argument.
// Even when annotated with @required, named parameters are still stored
@@ -9578,11 +9578,24 @@
}
}
-bool Function::CheckSourceFingerprint(int32_t fp) const {
+bool Function::CheckSourceFingerprint(int32_t fp, const char* kind) const {
#if !defined(DEBUG)
return true; // Only check on debug.
#endif
+#if !defined(DART_PRECOMPILED_RUNTIME)
+ // Check that the function is marked as recognized via the vm:recognized
+ // pragma. This is so that optimizations that change the signature will know
+ // not to touch it.
+ if (kind != nullptr && !MethodRecognizer::IsMarkedAsRecognized(*this, kind)) {
+ OS::PrintErr(
+ "Recognized method %s should be marked with: "
+ "@pragma(\"vm:recognized\", \"%s\")\n",
+ ToQualifiedCString(), kind);
+ return false;
+ }
+#endif
+
if (Isolate::Current()->obfuscate() || FLAG_precompiled_mode ||
(Dart::vm_snapshot_kind() != Snapshot::kNone)) {
return true; // The kernel structure has been altered, skip checking.
@@ -13925,22 +13938,31 @@
Function& func = Function::Handle();
bool fingerprints_match = true;
-#define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \
+#define CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, kind) \
func = GetFunction(all_libs, #class_name, #function_name); \
if (func.IsNull()) { \
fingerprints_match = false; \
OS::PrintErr("Function not found %s.%s\n", #class_name, #function_name); \
} else { \
fingerprints_match = \
- func.CheckSourceFingerprint(fp) && fingerprints_match; \
+ func.CheckSourceFingerprint(fp, kind) && fingerprints_match; \
}
-#define CHECK_FINGERPRINTS2(class_name, function_name, dest, fp) \
- CHECK_FINGERPRINTS(class_name, function_name, dest, fp)
+#define CHECK_FINGERPRINTS(class_name, function_name, dest, fp) \
+ CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, nullptr)
+#define CHECK_FINGERPRINTS_ASM_INTRINSIC(class_name, function_name, dest, fp) \
+ CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, "asm-intrinsic")
+#define CHECK_FINGERPRINTS_GRAPH_INTRINSIC(class_name, function_name, dest, \
+ fp) \
+ CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, \
+ "graph-intrinsic")
+#define CHECK_FINGERPRINTS_OTHER(class_name, function_name, dest, fp) \
+ CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, "other")
all_libs.Add(&Library::ZoneHandle(Library::CoreLibrary()));
- CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
- CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
+ CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+ CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+ GRAPH_CORE_INTRINSICS_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC);
all_libs.Add(&Library::ZoneHandle(Library::AsyncLibrary()));
all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
@@ -13949,21 +13971,26 @@
all_libs.Add(&Library::ZoneHandle(Library::ConvertLibrary()));
all_libs.Add(&Library::ZoneHandle(Library::InternalLibrary()));
all_libs.Add(&Library::ZoneHandle(Library::FfiLibrary()));
- ASYNC_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
- INTERNAL_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
- OTHER_RECOGNIZED_LIST(CHECK_FINGERPRINTS2);
+ ASYNC_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+ INTERNAL_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+ OTHER_RECOGNIZED_LIST(CHECK_FINGERPRINTS_OTHER);
POLYMORPHIC_TARGET_LIST(CHECK_FINGERPRINTS);
+ GRAPH_TYPED_DATA_INTRINSICS_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC);
all_libs.Clear();
all_libs.Add(&Library::ZoneHandle(Library::DeveloperLibrary()));
- DEVELOPER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
+ DEVELOPER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
all_libs.Clear();
all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
- MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
+ MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+ GRAPH_MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC);
+#undef CHECK_FINGERPRINTS_INNER
#undef CHECK_FINGERPRINTS
-#undef CHECK_FINGERPRINTS2
+#undef CHECK_FINGERPRINTS_ASM_INTRINSIC
+#undef CHECK_FINGERPRINTS_GRAPH_INTRINSIC
+#undef CHECK_FINGERPRINTS_OTHER
#define CHECK_FACTORY_FINGERPRINTS(symbol, class_name, factory_name, cid, fp) \
func = GetFunction(all_libs, #class_name, #factory_name); \
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 988de23..11fed21 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -3584,7 +3584,7 @@
int32_t SourceFingerprint() const;
// Return false and report an error if the fingerprint does not match.
- bool CheckSourceFingerprint(int32_t fp) const;
+ bool CheckSourceFingerprint(int32_t fp, const char* kind = nullptr) const;
// Works with map [deopt-id] -> ICData.
void SaveICDataMap(
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index bcb4057..b654d69 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -464,7 +464,6 @@
V(controller, "controller") \
V(current_character, ":current_character") \
V(current_position, ":current_position") \
- V(getID, "getID") \
V(hashCode, "get:hashCode") \
V(identityHashCode, "identityHashCode") \
V(index_temp, ":index_temp") \
@@ -486,7 +485,6 @@
V(start_index_param, ":start_index_param") \
V(string_param, ":string_param") \
V(string_param_length, ":string_param_length") \
- V(timeout, "timeout") \
V(toString, "toString") \
V(vm_prefer_inline, "vm:prefer-inline") \
V(vm_entry_point, "vm:entry-point") \
@@ -494,6 +492,7 @@
V(vm_inferred_type_metadata, "vm.inferred-type.metadata") \
V(vm_never_inline, "vm:never-inline") \
V(vm_non_nullable_result_type, "vm:non-nullable-result-type") \
+ V(vm_recognized, "vm:recognized") \
V(vm_trace_entrypoints, "vm:testing.unsafe.trace-entrypoints-fn") \
V(vm_procedure_attributes_metadata, "vm.procedure-attributes.metadata")
diff --git a/sdk/lib/_internal/vm/lib/array.dart b/sdk/lib/_internal/vm/lib/array.dart
index d615f7b..1e2f9c0 100644
--- a/sdk/lib/_internal/vm/lib/array.dart
+++ b/sdk/lib/_internal/vm/lib/array.dart
@@ -6,6 +6,7 @@
@pragma("vm:entry-point")
class _List<E> extends FixedLengthListBase<E> {
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type",
<dynamic>[_List, "result-type-uses-passed-type-arguments"])
@pragma("vm:prefer-inline")
@@ -34,14 +35,18 @@
return result;
}
+ @pragma("vm:recognized", "graph-intrinsic")
E operator [](int index) native "List_getIndexed";
+ @pragma("vm:recognized", "other")
void operator []=(int index, E value) {
_setIndexed(index, value);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void _setIndexed(int index, E value) native "List_setIndexed";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get length native "List_getLength";
@@ -188,8 +193,10 @@
factory _ImmutableList._from(List from, int offset, int length)
native "ImmutableList_from";
+ @pragma("vm:recognized", "graph-intrinsic")
E operator [](int index) native "List_getIndexed";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get length native "List_getLength";
diff --git a/sdk/lib/_internal/vm/lib/array_patch.dart b/sdk/lib/_internal/vm/lib/array_patch.dart
index ef181be..51fe288 100644
--- a/sdk/lib/_internal/vm/lib/array_patch.dart
+++ b/sdk/lib/_internal/vm/lib/array_patch.dart
@@ -12,6 +12,7 @@
}
@patch
+ @pragma("vm:recognized", "other")
factory List([int? length]) native "List_new";
@patch
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 659f31f..8659e79 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -270,16 +270,19 @@
//
// This method is recognized. It performs a runtime call if
// FLAG_causal_async_stacks is enabled or returns `null` otherwise.
+@pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
Object _asyncStackTraceHelper(Function async_op)
native "StackTrace_asyncStackTraceHelper";
// This method is asm intrinsified.
+@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:entry-point", "call")
void _clearAsyncThreadStackTrace()
native "StackTrace_clearAsyncThreadStackTrace";
// This method is asm intrinsified.
+@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:entry-point", "call")
void _setAsyncThreadStackTrace(StackTrace stackTrace)
native "StackTrace_setAsyncThreadStackTrace";
diff --git a/sdk/lib/_internal/vm/lib/bigint_patch.dart b/sdk/lib/_internal/vm/lib/bigint_patch.dart
index 5cc0bef..dd627df 100644
--- a/sdk/lib/_internal/vm/lib/bigint_patch.dart
+++ b/sdk/lib/_internal/vm/lib/bigint_patch.dart
@@ -559,6 +559,7 @@
/// Does *not* clear digits below ds.
///
/// Note: This function may be intrinsified.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:never-inline")
static void _lsh(
Uint32List xDigits, int xUsed, int n, Uint32List resultDigits) {
@@ -635,6 +636,7 @@
/// resultDigits[0..resultUsed-1] = xDigits[0..xUsed-1] >> n.
///
/// Note: This function may be intrinsified.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:never-inline")
static void _rsh(
Uint32List xDigits, int xUsed, int n, Uint32List resultDigits) {
@@ -763,6 +765,7 @@
/// used >= otherUsed > 0.
///
/// Note: This function may be intrinsified.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:never-inline")
static void _absAdd(Uint32List digits, int used, Uint32List otherDigits,
int otherUsed, Uint32List resultDigits) {
@@ -785,6 +788,7 @@
/// used >= otherUsed > 0.
///
/// Note: This function may be intrinsified.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:never-inline")
static void _absSub(Uint32List digits, int used, Uint32List otherDigits,
int otherUsed, Uint32List resultDigits) {
@@ -1114,6 +1118,7 @@
///
/// Note: This function may be intrinsified. Intrinsics on 64-bit platforms
/// process digit pairs at even indices and returns 2.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:never-inline")
static int _mulAdd(
@@ -1166,6 +1171,7 @@
///
/// Note: This function may be intrinsified. Intrinsics on 64-bit platforms
/// process digit pairs at even indices and returns 2.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:never-inline")
static int _sqrAdd(
@@ -1288,6 +1294,7 @@
/// Estimate `args[_quotientDigit.._quotientHighDigit] = digits[i-3..i] ~/
/// args[_divisorLowTopDigit.._divisorTopDigit]`.
/// Returns 2.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:never-inline")
static int _estimateQuotientDigit(Uint32List args, Uint32List digits, int i) {
@@ -2642,6 +2649,7 @@
// args[_muDigit.._muHighDigit] =
// args[_rhoDigit.._rhoHighDigit] * digits[i..i+1] mod _digitBase^2.
// Returns 2.
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:never-inline")
static int _mulMod(Uint32List args, Uint32List digits, int i) {
diff --git a/sdk/lib/_internal/vm/lib/class_id_fasta.dart b/sdk/lib/_internal/vm/lib/class_id_fasta.dart
index c81bd60..006314b 100644
--- a/sdk/lib/_internal/vm/lib/class_id_fasta.dart
+++ b/sdk/lib/_internal/vm/lib/class_id_fasta.dart
@@ -6,7 +6,7 @@
@pragma("vm:entry-point")
class ClassID {
- @pragma("vm:entry-point", "call")
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
static int getID(Object value) native "ClassID_getID";
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index 67ba9b2..db903e4 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -46,33 +46,43 @@
// Base class for VM-internal classes; keep in sync with _HashFieldBase.
abstract class _HashVMBase {
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:typed_data#_Uint32List")
@pragma("vm:prefer-inline")
Uint32List get _index native "LinkedHashMap_getIndex";
+ @pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
void set _index(Uint32List value) native "LinkedHashMap_setIndex";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get _hashMask native "LinkedHashMap_getHashMask";
+ @pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
void set _hashMask(int value) native "LinkedHashMap_setHashMask";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_List")
@pragma("vm:prefer-inline")
List get _data native "LinkedHashMap_getData";
+ @pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
void set _data(List value) native "LinkedHashMap_setData";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get _usedData native "LinkedHashMap_getUsedData";
+ @pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
void set _usedData(int value) native "LinkedHashMap_setUsedData";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get _deletedKeys native "LinkedHashMap_getDeletedKeys";
+ @pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
void set _deletedKeys(int value) native "LinkedHashMap_setDeletedKeys";
}
diff --git a/sdk/lib/_internal/vm/lib/convert_patch.dart b/sdk/lib/_internal/vm/lib/convert_patch.dart
index 6f82337..851c554 100644
--- a/sdk/lib/_internal/vm/lib/convert_patch.dart
+++ b/sdk/lib/_internal/vm/lib/convert_patch.dart
@@ -1700,7 +1700,7 @@
return size;
}
- // This method is recognized by the VM and compiled into specialized code.
+ @pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
int _scan(Uint8List bytes, int start, int end, String scanTable) {
int size = 0;
diff --git a/sdk/lib/_internal/vm/lib/double.dart b/sdk/lib/_internal/vm/lib/double.dart
index 83b3262..7500050 100644
--- a/sdk/lib/_internal/vm/lib/double.dart
+++ b/sdk/lib/_internal/vm/lib/double.dart
@@ -6,36 +6,45 @@
@pragma("vm:entry-point")
class _Double implements double {
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", _Double)
factory _Double.fromInteger(int value) native "Double_doubleFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
int get hashCode native "Double_hashCode";
+ @pragma("vm:recognized", "asm-intrinsic")
int get _identityHashCode native "Double_hashCode";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", _Double)
@pragma("vm:never-inline")
double operator +(num other) {
return _add(other.toDouble());
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Double)
double _add(double other) native "Double_add";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", _Double)
@pragma("vm:never-inline")
double operator -(num other) {
return _sub(other.toDouble());
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Double)
double _sub(double other) native "Double_sub";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", _Double)
@pragma("vm:never-inline")
double operator *(num other) {
return _mul(other.toDouble());
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Double)
double _mul(double other) native "Double_mul";
@@ -46,12 +55,14 @@
@pragma("vm:non-nullable-result-type")
int _trunc_div(double other) native "Double_trunc_div";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", _Double)
@pragma("vm:never-inline")
double operator /(num other) {
return _div(other.toDouble());
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Double)
double _div(double other) native "Double_div";
@@ -59,6 +70,7 @@
return _modulo(other.toDouble());
}
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Double)
double _modulo(double other) native "Double_modulo";
@@ -68,9 +80,11 @@
double _remainder(double other) native "Double_remainder";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Double)
double operator -() native "Double_flipSignBit";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator ==(Object other) {
@@ -82,12 +96,14 @@
@pragma("vm:exact-result-type", bool)
bool _equalToInteger(int other) native "Double_equalToInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator <(num other) {
return other > this;
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator >(num other) {
@@ -97,12 +113,14 @@
@pragma("vm:exact-result-type", bool)
bool _greaterThan(double other) native "Double_greaterThan";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator >=(num other) {
return (this == other) || (this > other);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator <=(num other) {
@@ -117,6 +135,7 @@
return new _Double.fromInteger(other)._sub(this);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
double _mulFromInteger(int other) {
return new _Double.fromInteger(other)._mul(this);
@@ -137,10 +156,13 @@
bool _greaterThanFromInteger(int other)
native "Double_greaterThanFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool get isNegative native "Double_getIsNegative";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool get isInfinite native "Double_getIsInfinite";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool get isNaN native "Double_getIsNaN";
bool get isFinite => !isInfinite && !isNaN; // Can be optimized.
@@ -162,12 +184,16 @@
int ceil() => ceilToDouble().toInt();
int truncate() => truncateToDouble().toInt();
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Double)
double roundToDouble() native "Double_round";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Double)
double floorToDouble() native "Double_floor";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Double)
double ceilToDouble() native "Double_ceil";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Double)
double truncateToDouble() native "Double_truncate";
@@ -188,6 +214,7 @@
return this;
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int toInt() native "Double_toInt";
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index 02bc8c7..79fc3a3 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -39,12 +39,13 @@
int _sizeOf<T extends NativeType>() native "Ffi_sizeOf";
-// Implemented in the method recognizer.
+@pragma("vm:recognized", "other")
Pointer<T> _fromAddress<T extends NativeType>(int ptr) native "Ffi_fromAddress";
// The real implementation of this function (for interface calls) lives in
// BuildFfiAsFunctionCall in the Kernel frontend. No calls can actually reach
// this function.
+@pragma("vm:recognized", "other")
DS _asFunctionInternal<DS extends Function, NS extends Function>(
Pointer<NativeFunction<NS>> ptr) native "Ffi_asFunctionInternal";
@@ -67,6 +68,7 @@
//
// Function objects returned by this native method are not Dart instances,
// so we need to use top type as a return type to avoid type check.
+@pragma("vm:recognized", "other")
dynamic _nativeCallbackFunction<NS extends Function>(Function target,
Object? exceptionalReturn) native "Ffi_nativeCallbackFunction";
@@ -92,8 +94,8 @@
"Pointer.fromFunction cannot be called dynamically.");
}
- // Implemented in the method recognizer.
@patch
+ @pragma("vm:recognized", "other")
int get address native "Ffi_address";
// For statically known types, this is rewired.
@@ -112,6 +114,7 @@
/// Returns an integer encoding the ABI used for size and alignment
/// calculations. See pkg/vm/lib/transformations/ffi.dart.
+@pragma("vm:recognized", "other")
@pragma('vm:prefer-inline')
int _abi()
native "Recognized method: IR graph is built in the flow graph builder.";
@@ -122,67 +125,91 @@
// allocating a Pointer with in elementAt/offsetBy. Allocating these pointers
// and GCing new spaces takes a lot of the benchmark time. The next speedup is
// getting rid of these allocations by inlining these functions.
+@pragma("vm:recognized", "other")
int _loadInt8(Pointer pointer, int offsetInBytes) native "Ffi_loadInt8";
+@pragma("vm:recognized", "other")
int _loadInt16(Pointer pointer, int offsetInBytes) native "Ffi_loadInt16";
+@pragma("vm:recognized", "other")
int _loadInt32(Pointer pointer, int offsetInBytes) native "Ffi_loadInt32";
+@pragma("vm:recognized", "other")
int _loadInt64(Pointer pointer, int offsetInBytes) native "Ffi_loadInt64";
+@pragma("vm:recognized", "other")
int _loadUint8(Pointer pointer, int offsetInBytes) native "Ffi_loadUint8";
+@pragma("vm:recognized", "other")
int _loadUint16(Pointer pointer, int offsetInBytes) native "Ffi_loadUint16";
+@pragma("vm:recognized", "other")
int _loadUint32(Pointer pointer, int offsetInBytes) native "Ffi_loadUint32";
+@pragma("vm:recognized", "other")
int _loadUint64(Pointer pointer, int offsetInBytes) native "Ffi_loadUint64";
+@pragma("vm:recognized", "other")
int _loadIntPtr(Pointer pointer, int offsetInBytes) native "Ffi_loadIntPtr";
+@pragma("vm:recognized", "other")
double _loadFloat(Pointer pointer, int offsetInBytes) native "Ffi_loadFloat";
+@pragma("vm:recognized", "other")
double _loadDouble(Pointer pointer, int offsetInBytes) native "Ffi_loadDouble";
+@pragma("vm:recognized", "other")
Pointer<S> _loadPointer<S extends NativeType>(
Pointer pointer, int offsetInBytes) native "Ffi_loadPointer";
S _loadStruct<S extends Struct>(Pointer<S> pointer, int index)
native "Ffi_loadStruct";
+@pragma("vm:recognized", "other")
void _storeInt8(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeInt8";
+@pragma("vm:recognized", "other")
void _storeInt16(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeInt16";
+@pragma("vm:recognized", "other")
void _storeInt32(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeInt32";
+@pragma("vm:recognized", "other")
void _storeInt64(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeInt64";
+@pragma("vm:recognized", "other")
void _storeUint8(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeUint8";
+@pragma("vm:recognized", "other")
void _storeUint16(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeUint16";
+@pragma("vm:recognized", "other")
void _storeUint32(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeUint32";
+@pragma("vm:recognized", "other")
void _storeUint64(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeUint64";
+@pragma("vm:recognized", "other")
void _storeIntPtr(Pointer pointer, int offsetInBytes, int value)
native "Ffi_storeIntPtr";
+@pragma("vm:recognized", "other")
void _storeFloat(Pointer pointer, int offsetInBytes, double value)
native "Ffi_storeFloat";
+@pragma("vm:recognized", "other")
void _storeDouble(Pointer pointer, int offsetInBytes, double value)
native "Ffi_storeDouble";
+@pragma("vm:recognized", "other")
void _storePointer<S extends NativeType>(Pointer pointer, int offsetInBytes,
Pointer<S> value) native "Ffi_storePointer";
diff --git a/sdk/lib/_internal/vm/lib/growable_array.dart b/sdk/lib/_internal/vm/lib/growable_array.dart
index 0e63557..62b8196 100644
--- a/sdk/lib/_internal/vm/lib/growable_array.dart
+++ b/sdk/lib/_internal/vm/lib/growable_array.dart
@@ -130,14 +130,17 @@
return result;
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type",
<dynamic>[_GrowableList, "result-type-uses-passed-type-arguments"])
factory _GrowableList._withData(_List data) native "GrowableList_allocate";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get _capacity native "GrowableList_getCapacity";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get length native "GrowableList_getLength";
@@ -170,16 +173,21 @@
_setLength(new_length);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void _setLength(int new_length) native "GrowableList_setLength";
+ @pragma("vm:recognized", "graph-intrinsic")
void _setData(_List array) native "GrowableList_setData";
+ @pragma("vm:recognized", "graph-intrinsic")
T operator [](int index) native "GrowableList_getIndexed";
+ @pragma("vm:recognized", "other")
void operator []=(int index, T value) {
_setIndexed(index, value);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void _setIndexed(int index, T? value) native "GrowableList_setIndexed";
@pragma("vm:entry-point", "call")
diff --git a/sdk/lib/_internal/vm/lib/identical_patch.dart b/sdk/lib/_internal/vm/lib/identical_patch.dart
index 4b57430..9a9ff56 100644
--- a/sdk/lib/_internal/vm/lib/identical_patch.dart
+++ b/sdk/lib/_internal/vm/lib/identical_patch.dart
@@ -5,6 +5,7 @@
// part of "core_patch.dart";
@patch
+@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", bool)
bool identical(Object? a, Object? b) native "Identical_comparison";
diff --git a/sdk/lib/_internal/vm/lib/integers.dart b/sdk/lib/_internal/vm/lib/integers.dart
index 9fd3a76..3ce3af5 100644
--- a/sdk/lib/_internal/vm/lib/integers.dart
+++ b/sdk/lib/_internal/vm/lib/integers.dart
@@ -5,16 +5,20 @@
// part of "core_patch.dart";
abstract class _IntegerImplementation implements int {
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
num operator +(num other) => other._addFromInteger(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
num operator -(num other) => other._subFromInteger(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
num operator *(num other) => other._mulFromInteger(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
int operator ~/(num other) {
@@ -36,6 +40,7 @@
return other._moduloFromInteger(this);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
int operator -() {
@@ -44,12 +49,15 @@
return unsafeCast<int>(0 - this);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
int operator &(int other) => other._bitAndFromInteger(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
int operator |(int other) => other._bitOrFromInteger(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
int operator ^(int other) => other._bitXorFromInteger(this);
@@ -60,24 +68,31 @@
@pragma("vm:non-nullable-result-type")
int _bitAndFromSmi(_Smi other) native "Integer_bitAndFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int _bitAndFromInteger(int other) native "Integer_bitAndFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int _bitOrFromInteger(int other) native "Integer_bitOrFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int _bitXorFromInteger(int other) native "Integer_bitXorFromInteger";
@pragma("vm:non-nullable-result-type")
int _shrFromInteger(int other) native "Integer_shrFromInteger";
@pragma("vm:non-nullable-result-type")
int _shlFromInteger(int other) native "Integer_shlFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int _addFromInteger(int other) native "Integer_addFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int _subFromInteger(int other) native "Integer_subFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int _mulFromInteger(int other) native "Integer_mulFromInteger";
@pragma("vm:non-nullable-result-type")
int _truncDivFromInteger(int other) native "Integer_truncDivFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int _moduloFromInteger(int other) native "Integer_moduloFromInteger";
int _remainderFromInteger(int other) {
@@ -86,41 +101,49 @@
return unsafeCast<int>(other - (other ~/ this) * this);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
int operator >>(int other) => other._shrFromInteger(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
@pragma("vm:never-inline")
int operator <<(int other) => other._shlFromInteger(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator <(num other) {
return other > this;
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator >(num other) {
return other._greaterThanFromInteger(this);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator >=(num other) {
return (this == other) || (this > other);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator <=(num other) {
return (this == other) || (this < other);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool _greaterThanFromInteger(int other)
native "Integer_greaterThanFromInteger";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:never-inline")
bool operator ==(Object other) {
@@ -130,6 +153,7 @@
return false;
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool _equalToInteger(int other) native "Integer_equalToInteger";
int abs() {
@@ -137,7 +161,11 @@
}
int get sign {
- return (this > 0) ? 1 : (this < 0) ? -1 : 0;
+ return (this > 0)
+ ? 1
+ : (this < 0)
+ ? -1
+ : 0;
}
bool get isEven => ((this & 1) == 0);
@@ -268,6 +296,7 @@
return this;
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Double)
double toDouble() {
return new _Double.fromInteger(this);
@@ -515,13 +544,16 @@
int get hashCode => this;
int get _identityHashCode => this;
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator ~() native "Smi_bitNegate";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int get bitLength native "Smi_bitLength";
int operator &(int other) => other._bitAndFromSmi(this);
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _bitAndFromSmi(_Smi other) native "Smi_bitAndFromSmi";
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index ad5f5b7..1566701 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -36,19 +36,19 @@
native "Internal_extractTypeArguments";
/// The returned string is a [_OneByteString] with uninitialized content.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
String allocateOneByteString(int length)
native "Internal_allocateOneByteString";
/// The [string] must be a [_OneByteString]. The [index] must be valid.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
void writeIntoOneByteString(String string, int index, int codePoint)
native "Internal_writeIntoOneByteString";
-/// This function is recognized by the VM and compiled into specialized code.
/// It is assumed that [from] is a native [Uint8List] class and [to] is a
/// [_OneByteString]. The [fromStart] and [toStart] indices together with the
/// [length] must specify ranges within the bounds of the list / string.
+@pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
void copyRangeFromUint8ListToOneByteString(
Uint8List from, String to, int fromStart, int toStart, int length) {
@@ -58,12 +58,12 @@
}
/// The returned string is a [_TwoByteString] with uninitialized content.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
String allocateTwoByteString(int length)
native "Internal_allocateTwoByteString";
/// The [string] must be a [_TwoByteString]. The [index] must be valid.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
void writeIntoTwoByteString(String string, int index, int codePoint)
native "Internal_writeIntoTwoByteString";
@@ -106,6 +106,7 @@
bool _inquireIs64Bit() native "Internal_inquireIs64Bit";
+@pragma("vm:recognized", "other")
@pragma("vm:entry-point", "call")
@pragma("vm:exact-result-type", bool)
@pragma("vm:prefer-inline")
@@ -163,7 +164,7 @@
// This function can be used to keep an object alive til that point.
//
-// This is implemented by a recognized method.
+@pragma("vm:recognized", "other")
@pragma('vm:prefer-inline')
void reachabilityFence(Object object) native "Internal_reachabilityFence";
diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart
index b41daad..0e384ca 100644
--- a/sdk/lib/_internal/vm/lib/math_patch.dart
+++ b/sdk/lib/_internal/vm/lib/math_patch.dart
@@ -14,6 +14,7 @@
/// There are no parts of this patch library.
@patch
+@pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
T min<T extends num>(T a, T b) {
if (a > b) return b;
@@ -38,6 +39,7 @@
}
@patch
+@pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
T max<T extends num>(T a, T b) {
if (a > b) return a;
@@ -74,6 +76,7 @@
return _doublePow(x.toDouble(), exponent.toDouble());
}
+@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Double")
double _doublePow(double base, double exponent) {
if (exponent == 0.0) {
@@ -100,6 +103,7 @@
double _pow(double base, double exponent) native "Math_doublePow";
+@pragma("vm:recognized", "other")
int _intPow(int base, int exponent) {
// Exponentiation by squaring.
int result = 1;
@@ -117,34 +121,42 @@
}
@patch
+@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double atan2(num a, num b) => _atan2(a.toDouble(), b.toDouble());
@patch
+@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double sin(num radians) => _sin(radians.toDouble());
@patch
+@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double cos(num radians) => _cos(radians.toDouble());
@patch
+@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double tan(num radians) => _tan(radians.toDouble());
@patch
+@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double acos(num x) => _acos(x.toDouble());
@patch
+@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double asin(num x) => _asin(x.toDouble());
@patch
+@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double atan(num x) => _atan(x.toDouble());
@patch
+@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
@pragma("vm:never-inline")
double sqrt(num x) => _sqrt(x.toDouble());
@@ -208,6 +220,7 @@
// This is a native to prevent 64-bit operations in Dart, which
// fail with --throw_on_javascript_int_overflow.
// TODO(regis): Implement in Dart and remove Random_nextState in math.cc.
+ @pragma("vm:recognized", "asm-intrinsic")
void _nextState() native "Random_nextState";
int nextInt(int max) {
diff --git a/sdk/lib/_internal/vm/lib/object_patch.dart b/sdk/lib/_internal/vm/lib/object_patch.dart
index e862e5c..fe23069 100644
--- a/sdk/lib/_internal/vm/lib/object_patch.dart
+++ b/sdk/lib/_internal/vm/lib/object_patch.dart
@@ -4,8 +4,10 @@
// part of "core_patch.dart";
+@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _getHash(obj) native "Object_getHash";
+@pragma("vm:recognized", "asm-intrinsic")
void _setHash(obj, hash) native "Object_setHash";
@patch
@@ -13,6 +15,7 @@
class Object {
// The VM has its own implementation of equals.
@patch
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
@pragma("vm:prefer-inline")
bool operator ==(Object other) native "Object_equals";
@@ -52,9 +55,11 @@
}
@patch
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Type")
Type get runtimeType native "Object_runtimeType";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:entry-point", "call")
@pragma("vm:exact-result-type", bool)
static bool _haveSameRuntimeType(a, b) native "Object_haveSameRuntimeType";
diff --git a/sdk/lib/_internal/vm/lib/profiler.dart b/sdk/lib/_internal/vm/lib/profiler.dart
index 745eaa5..812916e 100644
--- a/sdk/lib/_internal/vm/lib/profiler.dart
+++ b/sdk/lib/_internal/vm/lib/profiler.dart
@@ -18,11 +18,14 @@
class _UserTag implements UserTag {
factory _UserTag(String label) native "UserTag_new";
String get label native "UserTag_label";
+ @pragma("vm:recognized", "asm-intrinsic")
UserTag makeCurrent() native "UserTag_makeCurrent";
}
@patch
UserTag getCurrentTag() => _getCurrentTag();
+@pragma("vm:recognized", "asm-intrinsic")
UserTag _getCurrentTag() native "Profiler_getCurrentTag";
+@pragma("vm:recognized", "asm-intrinsic")
UserTag _getDefaultTag() native "UserTag_defaultTag";
diff --git a/sdk/lib/_internal/vm/lib/regexp_patch.dart b/sdk/lib/_internal/vm/lib/regexp_patch.dart
index 153080b..73e38a1 100644
--- a/sdk/lib/_internal/vm/lib/regexp_patch.dart
+++ b/sdk/lib/_internal/vm/lib/regexp_patch.dart
@@ -350,9 +350,11 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
+ @pragma("vm:recognized", "asm-intrinsic")
List<int>? _ExecuteMatch(String str, int start_index)
native "RegExp_ExecuteMatch";
+ @pragma("vm:recognized", "asm-intrinsic")
List<int>? _ExecuteMatchSticky(String str, int start_index)
native "RegExp_ExecuteMatchSticky";
}
diff --git a/sdk/lib/_internal/vm/lib/string_patch.dart b/sdk/lib/_internal/vm/lib/string_patch.dart
index 5d6612d..18c1b56 100644
--- a/sdk/lib/_internal/vm/lib/string_patch.dart
+++ b/sdk/lib/_internal/vm/lib/string_patch.dart
@@ -94,9 +94,11 @@
throw new UnsupportedError("_StringBase can't be instaniated");
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int get hashCode native "String_getHashCode";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int get _identityHashCode native "String_getHashCode";
@@ -249,14 +251,17 @@
static String _createFromCodePoints(List<int> codePoints, int start, int end)
native "StringBase_createFromCodePoints";
+ @pragma("vm:recognized", "asm-intrinsic")
String operator [](int index) native "String_charAt";
int codeUnitAt(int index); // Implemented in the subclasses.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get length native "String_getLength";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool get isEmpty {
return this.length == 0;
@@ -306,6 +311,7 @@
return 0;
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool _substringMatches(int start, String other) {
if (other.isEmpty) return true;
@@ -838,6 +844,7 @@
* into a result string.
* Modifies the input list if it contains non-`String` values.
*/
+ @pragma("vm:recognized", "other")
@pragma("vm:entry-point", "call")
static String _interpolate(final List values) {
final numValues = values.length;
@@ -955,9 +962,11 @@
throw "Unreachable";
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int get hashCode native "String_getHashCode";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int codeUnitAt(int index) native "String_codeUnitAt";
@@ -965,11 +974,13 @@
return _StringBase._isOneByteWhitespace(codeUnit);
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool operator ==(Object other) {
return super == other;
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", _OneByteString)
String _substringUncheckedNative(int startIndex, int endIndex)
native "OneByteString_substringUnchecked";
@@ -1291,9 +1302,11 @@
return _StringBase._isTwoByteWhitespace(codeUnit);
}
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int codeUnitAt(int index) native "String_codeUnitAt";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool operator ==(Object other) {
return super == other;
@@ -1310,6 +1323,7 @@
return _StringBase._isOneByteWhitespace(codeUnit);
}
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int codeUnitAt(int index) native "String_codeUnitAt";
@@ -1328,6 +1342,7 @@
return _StringBase._isTwoByteWhitespace(codeUnit);
}
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int codeUnitAt(int index) native "String_codeUnitAt";
diff --git a/sdk/lib/_internal/vm/lib/type_patch.dart b/sdk/lib/_internal/vm/lib/type_patch.dart
index 1b8f3c1..52be775 100644
--- a/sdk/lib/_internal/vm/lib/type_patch.dart
+++ b/sdk/lib/_internal/vm/lib/type_patch.dart
@@ -18,9 +18,11 @@
throw "Unreachable";
}
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int get hashCode native "Type_getHashCode";
+ @pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:exact-result-type", bool)
bool operator ==(other) native "Type_equality";
}
diff --git a/sdk/lib/_internal/vm/lib/typed_data_patch.dart b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
index ccd3183..8139cb5 100644
--- a/sdk/lib/_internal/vm/lib/typed_data_patch.dart
+++ b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
@@ -36,6 +36,7 @@
@patch
class ByteData implements TypedData {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:entry-point")
factory ByteData(int length) {
final list = new Uint8List(length) as _TypedList;
@@ -2066,57 +2067,82 @@
// Methods implementing the collection interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get length native "TypedData_length";
// Internal utility methods.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _getInt8(int offsetInBytes) native "TypedData_GetInt8";
+ @pragma("vm:recognized", "other")
void _setInt8(int offsetInBytes, int value) native "TypedData_SetInt8";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _getUint8(int offsetInBytes) native "TypedData_GetUint8";
+ @pragma("vm:recognized", "other")
void _setUint8(int offsetInBytes, int value) native "TypedData_SetUint8";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _getInt16(int offsetInBytes) native "TypedData_GetInt16";
+ @pragma("vm:recognized", "other")
void _setInt16(int offsetInBytes, int value) native "TypedData_SetInt16";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _getUint16(int offsetInBytes) native "TypedData_GetUint16";
+ @pragma("vm:recognized", "other")
void _setUint16(int offsetInBytes, int value) native "TypedData_SetUint16";
+ @pragma("vm:recognized", "other")
int _getInt32(int offsetInBytes) native "TypedData_GetInt32";
+ @pragma("vm:recognized", "other")
void _setInt32(int offsetInBytes, int value) native "TypedData_SetInt32";
+ @pragma("vm:recognized", "other")
int _getUint32(int offsetInBytes) native "TypedData_GetUint32";
+ @pragma("vm:recognized", "other")
void _setUint32(int offsetInBytes, int value) native "TypedData_SetUint32";
+ @pragma("vm:recognized", "other")
int _getInt64(int offsetInBytes) native "TypedData_GetInt64";
+ @pragma("vm:recognized", "other")
void _setInt64(int offsetInBytes, int value) native "TypedData_SetInt64";
+ @pragma("vm:recognized", "other")
int _getUint64(int offsetInBytes) native "TypedData_GetUint64";
+ @pragma("vm:recognized", "other")
void _setUint64(int offsetInBytes, int value) native "TypedData_SetUint64";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Double")
double _getFloat32(int offsetInBytes) native "TypedData_GetFloat32";
+ @pragma("vm:recognized", "other")
void _setFloat32(int offsetInBytes, double value)
native "TypedData_SetFloat32";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Double")
double _getFloat64(int offsetInBytes) native "TypedData_GetFloat64";
+ @pragma("vm:recognized", "other")
void _setFloat64(int offsetInBytes, double value)
native "TypedData_SetFloat64";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _getFloat32x4(int offsetInBytes) native "TypedData_GetFloat32x4";
+ @pragma("vm:recognized", "other")
void _setFloat32x4(int offsetInBytes, Float32x4 value)
native "TypedData_SetFloat32x4";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _getInt32x4(int offsetInBytes) native "TypedData_GetInt32x4";
+ @pragma("vm:recognized", "other")
void _setInt32x4(int offsetInBytes, Int32x4 value)
native "TypedData_SetInt32x4";
@@ -2145,6 +2171,7 @@
@patch
class Int8List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int8List)
@pragma("vm:prefer-inline")
factory Int8List(int length) native "TypedData_Int8Array_new";
@@ -2165,6 +2192,7 @@
}
// Method(s) implementing List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator [](int index) {
if (index < 0 || index >= length) {
@@ -2173,6 +2201,7 @@
return _getInt8(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2194,6 +2223,7 @@
@patch
class Uint8List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint8List)
@pragma("vm:prefer-inline")
factory Uint8List(int length) native "TypedData_Uint8Array_new";
@@ -2214,6 +2244,7 @@
}
// Methods implementing List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator [](int index) {
if (index < 0 || index >= length) {
@@ -2222,6 +2253,7 @@
return _getUint8(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2243,6 +2275,7 @@
@patch
class Uint8ClampedList {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint8ClampedList)
@pragma("vm:prefer-inline")
factory Uint8ClampedList(int length) native "TypedData_Uint8ClampedArray_new";
@@ -2263,6 +2296,7 @@
}
// Methods implementing List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator [](int index) {
if (index < 0 || index >= length) {
@@ -2271,6 +2305,7 @@
return _getUint8(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2292,6 +2327,7 @@
@patch
class Int16List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int16List)
@pragma("vm:prefer-inline")
factory Int16List(int length) native "TypedData_Int16Array_new";
@@ -2312,6 +2348,7 @@
}
// Method(s) implementing List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator [](int index) {
if (index < 0 || index >= length) {
@@ -2320,6 +2357,7 @@
return _getIndexedInt16(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2361,6 +2399,7 @@
@patch
class Uint16List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint16List)
@pragma("vm:prefer-inline")
factory Uint16List(int length) native "TypedData_Uint16Array_new";
@@ -2381,6 +2420,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator [](int index) {
if (index < 0 || index >= length) {
@@ -2389,6 +2429,7 @@
return _getIndexedUint16(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2430,6 +2471,7 @@
@patch
class Int32List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32List)
@pragma("vm:prefer-inline")
factory Int32List(int length) native "TypedData_Int32Array_new";
@@ -2450,6 +2492,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
int operator [](int index) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2457,6 +2500,7 @@
return _getIndexedInt32(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2486,6 +2530,7 @@
@patch
class Uint32List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint32List)
@pragma("vm:prefer-inline")
factory Uint32List(int length) native "TypedData_Uint32Array_new";
@@ -2506,6 +2551,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
int operator [](int index) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2513,6 +2559,7 @@
return _getIndexedUint32(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2542,6 +2589,7 @@
@patch
class Int64List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int64List)
@pragma("vm:prefer-inline")
factory Int64List(int length) native "TypedData_Int64Array_new";
@@ -2562,6 +2610,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
int operator [](int index) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2569,6 +2618,7 @@
return _getIndexedInt64(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2598,6 +2648,7 @@
@patch
class Uint64List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint64List)
@pragma("vm:prefer-inline")
factory Uint64List(int length) native "TypedData_Uint64Array_new";
@@ -2618,6 +2669,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
int operator [](int index) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2625,6 +2677,7 @@
return _getIndexedUint64(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2654,6 +2707,7 @@
@patch
class Float32List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32List)
@pragma("vm:prefer-inline")
factory Float32List(int length) native "TypedData_Float32Array_new";
@@ -2674,6 +2728,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
double operator [](int index) {
if (index < 0 || index >= length) {
@@ -2682,6 +2737,7 @@
return _getIndexedFloat32(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, double value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2711,6 +2767,7 @@
@patch
class Float64List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64List)
@pragma("vm:prefer-inline")
factory Float64List(int length) native "TypedData_Float64Array_new";
@@ -2731,6 +2788,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
double operator [](int index) {
if (index < 0 || index >= length) {
@@ -2739,6 +2797,7 @@
return _getIndexedFloat64(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, double value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2768,6 +2827,7 @@
@patch
class Float32x4List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4List)
@pragma("vm:prefer-inline")
factory Float32x4List(int length) native "TypedData_Float32x4Array_new";
@@ -2787,6 +2847,7 @@
throw "Unreachable";
}
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 operator [](int index) {
if (index < 0 || index >= length) {
@@ -2795,6 +2856,7 @@
return _getIndexedFloat32x4(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, Float32x4 value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2824,6 +2886,7 @@
@patch
class Int32x4List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4List)
@pragma("vm:prefer-inline")
factory Int32x4List(int length) native "TypedData_Int32x4Array_new";
@@ -2843,6 +2906,7 @@
throw "Unreachable";
}
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 operator [](int index) {
if (index < 0 || index >= length) {
@@ -2851,6 +2915,7 @@
return _getIndexedInt32x4(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, Int32x4 value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2880,6 +2945,7 @@
@patch
class Float64x2List {
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2List)
@pragma("vm:prefer-inline")
factory Float64x2List(int length) native "TypedData_Float64x2Array_new";
@@ -2899,6 +2965,7 @@
throw "Unreachable";
}
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 operator [](int index) {
if (index < 0 || index >= length) {
@@ -2907,6 +2974,7 @@
return _getIndexedFloat64x2(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, Float64x2 value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -2976,6 +3044,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator [](int index) {
if (index < 0 || index >= length) {
@@ -2984,6 +3053,7 @@
return _getUint8(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -3011,6 +3081,7 @@
}
// Method(s) implementing the List interface.
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int operator [](int index) {
if (index < 0 || index >= length) {
@@ -3019,6 +3090,7 @@
return _getUint8(index);
}
+ @pragma("vm:recognized", "graph-intrinsic")
void operator []=(int index, int value) {
if (index < 0 || index >= length) {
throw new RangeError.index(index, this, "index");
@@ -3511,6 +3583,7 @@
return _Float32x4FromDoubles(x, y, z, w);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
static _Float32x4 _Float32x4FromDoubles(
double x, double y, double z, double w) native "Float32x4_fromDoubles";
@@ -3522,65 +3595,90 @@
return _Float32x4Splat(v);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
static _Float32x4 _Float32x4Splat(double v) native "Float32x4_splat";
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
factory Float32x4.zero() native "Float32x4_zero";
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
factory Float32x4.fromInt32x4Bits(Int32x4 x)
native "Float32x4_fromInt32x4Bits";
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
factory Float32x4.fromFloat64x2(Float64x2 v) native "Float32x4_fromFloat64x2";
}
@pragma("vm:entry-point")
class _Float32x4 implements Float32x4 {
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 operator +(Float32x4 other) native "Float32x4_add";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 operator -() native "Float32x4_negate";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 operator -(Float32x4 other) native "Float32x4_sub";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 operator *(Float32x4 other) native "Float32x4_mul";
+ @pragma("vm:recognized", "graph-intrinsic")
Float32x4 operator /(Float32x4 other) native "Float32x4_div";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 lessThan(Float32x4 other) native "Float32x4_cmplt";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 lessThanOrEqual(Float32x4 other) native "Float32x4_cmplte";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 greaterThan(Float32x4 other) native "Float32x4_cmpgt";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 greaterThanOrEqual(Float32x4 other) native "Float32x4_cmpgte";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 equal(Float32x4 other) native "Float32x4_cmpequal";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 notEqual(Float32x4 other) native "Float32x4_cmpnequal";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 scale(double s) native "Float32x4_scale";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 abs() native "Float32x4_abs";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 clamp(Float32x4 lowerLimit, Float32x4 upperLimit)
native "Float32x4_clamp";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
double get x native "Float32x4_getX";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
double get y native "Float32x4_getY";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
double get z native "Float32x4_getZ";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Double")
double get w native "Float32x4_getW";
+ @pragma("vm:recognized", "other")
int get signMask native "Float32x4_getSignMask";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 shuffle(int mask) native "Float32x4_shuffle";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 shuffleMix(Float32x4 zw, int mask) native "Float32x4_shuffleMix";
@@ -3590,6 +3688,7 @@
return _withX(x);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _withX(double x) native "Float32x4_setX";
@@ -3599,6 +3698,7 @@
return _withY(y);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _withY(double y) native "Float32x4_setY";
@@ -3608,6 +3708,7 @@
return _withZ(z);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _withZ(double z) native "Float32x4_setZ";
@@ -3617,17 +3718,23 @@
return _withW(w);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _withW(double w) native "Float32x4_setW";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 min(Float32x4 other) native "Float32x4_min";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 max(Float32x4 other) native "Float32x4_max";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 sqrt() native "Float32x4_sqrt";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 reciprocal() native "Float32x4_reciprocal";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 reciprocalSqrt() native "Float32x4_reciprocalSqrt";
}
@@ -3644,6 +3751,7 @@
return _Int32x4FromInts(x, y, z, w);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
static _Int32x4 _Int32x4FromInts(int x, int y, int z, int w)
native "Int32x4_fromInts";
@@ -3658,11 +3766,13 @@
return _Int32x4FromBools(x, y, z, w);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
static _Int32x4 _Int32x4FromBools(bool x, bool y, bool z, bool w)
native "Int32x4_fromBools";
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
factory Int32x4.fromFloat32x4Bits(Float32x4 x)
native "Int32x4_fromFloat32x4Bits";
@@ -3679,9 +3789,12 @@
int get y native "Int32x4_getY";
int get z native "Int32x4_getZ";
int get w native "Int32x4_getW";
+ @pragma("vm:recognized", "other")
int get signMask native "Int32x4_getSignMask";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 shuffle(int mask) native "Int32x4_shuffle";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 shuffleMix(Int32x4 zw, int mask) native "Int32x4_shuffleMix";
@@ -3721,12 +3834,16 @@
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withW(int w) native "Int32x4_setW";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", bool)
bool get flagX native "Int32x4_getFlagX";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", bool)
bool get flagY native "Int32x4_getFlagY";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", bool)
bool get flagZ native "Int32x4_getFlagZ";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", bool)
bool get flagW native "Int32x4_getFlagW";
@@ -3736,6 +3853,7 @@
return _withFlagX(x);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withFlagX(bool x) native "Int32x4_setFlagX";
@@ -3745,6 +3863,7 @@
return _withFlagY(y);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withFlagY(bool y) native "Int32x4_setFlagY";
@@ -3754,6 +3873,7 @@
return _withFlagZ(z);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withFlagZ(bool z) native "Int32x4_setFlagZ";
@@ -3763,9 +3883,11 @@
return _withFlagW(w);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withFlagW(bool w) native "Int32x4_setFlagW";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 select(Float32x4 trueValue, Float32x4 falseValue)
native "Int32x4_select";
@@ -3781,6 +3903,7 @@
return _Float64x2FromDoubles(x, y);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
static _Float64x2 _Float64x2FromDoubles(double x, double y)
native "Float64x2_fromDoubles";
@@ -3792,36 +3915,49 @@
return _Float64x2Splat(v);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
static _Float64x2 _Float64x2Splat(double v) native "Float64x2_splat";
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
factory Float64x2.zero() native "Float64x2_zero";
@patch
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
factory Float64x2.fromFloat32x4(Float32x4 v) native "Float64x2_fromFloat32x4";
}
@pragma("vm:entry-point")
class _Float64x2 implements Float64x2 {
+ @pragma("vm:recognized", "graph-intrinsic")
Float64x2 operator +(Float64x2 other) native "Float64x2_add";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 operator -() native "Float64x2_negate";
+ @pragma("vm:recognized", "graph-intrinsic")
Float64x2 operator -(Float64x2 other) native "Float64x2_sub";
+ @pragma("vm:recognized", "graph-intrinsic")
Float64x2 operator *(Float64x2 other) native "Float64x2_mul";
+ @pragma("vm:recognized", "graph-intrinsic")
Float64x2 operator /(Float64x2 other) native "Float64x2_div";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 scale(double s) native "Float64x2_scale";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 abs() native "Float64x2_abs";
Float64x2 clamp(Float64x2 lowerLimit, Float64x2 upperLimit)
native "Float64x2_clamp";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Double")
double get x native "Float64x2_getX";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Double")
double get y native "Float64x2_getY";
+ @pragma("vm:recognized", "other")
int get signMask native "Float64x2_getSignMask";
@pragma("vm:prefer-inline")
@@ -3830,6 +3966,7 @@
return _withX(x);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 _withX(double x) native "Float64x2_setX";
@@ -3839,13 +3976,17 @@
return _withY(y);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 _withY(double y) native "Float64x2_setY";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 min(Float64x2 other) native "Float64x2_min";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 max(Float64x2 other) native "Float64x2_max";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 sqrt() native "Float64x2_sqrt";
}
@@ -3892,14 +4033,17 @@
return _typedData.buffer;
}
+ @pragma("vm:recognized", "other")
@pragma("vm:non-nullable-result-type")
@pragma("vm:prefer-inline")
_TypedList get _typedData native "TypedDataView_typedData";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get offsetInBytes native "TypedDataView_offsetInBytes";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get length native "TypedDataView_length";
@@ -3910,6 +4054,7 @@
with _IntListMixin, _TypedIntListMixin<Int8List>
implements Int8List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int8ArrayView)
factory _Int8ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Int8ArrayView_new";
@@ -3949,6 +4094,7 @@
with _IntListMixin, _TypedIntListMixin<Uint8List>
implements Uint8List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint8ArrayView)
factory _Uint8ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Uint8ArrayView_new";
@@ -3988,6 +4134,7 @@
with _IntListMixin, _TypedIntListMixin<Uint8ClampedList>
implements Uint8ClampedList {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint8ClampedArrayView)
factory _Uint8ClampedArrayView._(_TypedList buffer, int offsetInBytes,
int length) native "TypedDataView_Uint8ClampedArrayView_new";
@@ -4027,6 +4174,7 @@
with _IntListMixin, _TypedIntListMixin<Int16List>
implements Int16List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int16ArrayView)
factory _Int16ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Int16ArrayView_new";
@@ -4079,6 +4227,7 @@
with _IntListMixin, _TypedIntListMixin<Uint16List>
implements Uint16List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint16ArrayView)
factory _Uint16ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Uint16ArrayView_new";
@@ -4132,6 +4281,7 @@
with _IntListMixin, _TypedIntListMixin<Int32List>
implements Int32List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32ArrayView)
factory _Int32ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Int32ArrayView_new";
@@ -4171,6 +4321,7 @@
with _IntListMixin, _TypedIntListMixin<Uint32List>
implements Uint32List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint32ArrayView)
factory _Uint32ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Uint32ArrayView_new";
@@ -4210,6 +4361,7 @@
with _IntListMixin, _TypedIntListMixin<Int64List>
implements Int64List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int64ArrayView)
factory _Int64ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Int64ArrayView_new";
@@ -4249,6 +4401,7 @@
with _IntListMixin, _TypedIntListMixin<Uint64List>
implements Uint64List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Uint64ArrayView)
factory _Uint64ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Uint64ArrayView_new";
@@ -4288,6 +4441,7 @@
with _DoubleListMixin, _TypedDoubleListMixin<Float32List>
implements Float32List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32ArrayView)
factory _Float32ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Float32ArrayView_new";
@@ -4327,6 +4481,7 @@
with _DoubleListMixin, _TypedDoubleListMixin<Float64List>
implements Float64List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64ArrayView)
factory _Float64ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Float64ArrayView_new";
@@ -4366,6 +4521,7 @@
with _Float32x4ListMixin
implements Float32x4List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4ArrayView)
factory _Float32x4ArrayView._(_TypedList buffer, int offsetInBytes,
int length) native "TypedDataView_Float32x4ArrayView_new";
@@ -4403,6 +4559,7 @@
with _Int32x4ListMixin
implements Int32x4List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4ArrayView)
factory _Int32x4ArrayView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_Int32x4ArrayView_new";
@@ -4440,6 +4597,7 @@
with _Float64x2ListMixin
implements Float64x2List {
// Constructor.
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2ArrayView)
factory _Float64x2ArrayView._(_TypedList buffer, int offsetInBytes,
int length) native "TypedDataView_Float64x2ArrayView_new";
@@ -4474,6 +4632,7 @@
@pragma("vm:entry-point")
class _ByteDataView implements ByteData {
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _ByteDataView)
factory _ByteDataView._(_TypedList buffer, int offsetInBytes, int length)
native "TypedDataView_ByteDataView_new";
@@ -4720,14 +4879,17 @@
_typedData._setFloat32x4(offsetInBytes + byteOffset, value);
}
+ @pragma("vm:recognized", "other")
@pragma("vm:non-nullable-result-type")
@pragma("vm:prefer-inline")
_TypedList get _typedData native "TypedDataView_typedData";
+ @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get offsetInBytes native "TypedDataView_offsetInBytes";
+ @pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
@pragma("vm:prefer-inline")
int get length native "TypedDataView_length";
@@ -4773,6 +4935,7 @@
return value & 0xFF;
}
+@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _toClampedUint8(int value) {
if (value < 0) return 0;
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index 0e92b2e..ed9a850 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -361,7 +361,7 @@
* The call to [cleanUp] should not throw. If it does, the error will be an
* uncaught asynchronous error.
*/
- @pragma("vm:entry-point")
+ @pragma("vm:recognized", "other")
static Future<List<T>> wait<T>(Iterable<Future<T>> futures,
{bool eagerError = false, void cleanUp(T successValue)?}) {
// This is a VM recognised method, and the _future variable is deliberately
diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart
index 0d38c61..1b3e02f 100644
--- a/sdk/lib/async/future_impl.dart
+++ b/sdk/lib/async/future_impl.dart
@@ -768,6 +768,7 @@
}
}
+ @pragma("vm:recognized", "other")
@pragma("vm:entry-point")
Future<T> timeout(Duration timeLimit, {FutureOr<T> onTimeout()?}) {
if (_isComplete) return new _Future.immediate(this);
diff --git a/sdk/lib/core/object.dart b/sdk/lib/core/object.dart
index 0f7d97b..b55d80d 100644
--- a/sdk/lib/core/object.dart
+++ b/sdk/lib/core/object.dart
@@ -27,6 +27,7 @@
* through their identity. An [Object] instance is equal to itself
* only.
*/
+ @pragma("vm:recognized", "other")
const Object();
/**
diff --git a/sdk/lib/developer/timeline.dart b/sdk/lib/developer/timeline.dart
index cc9cf40..aaa0ee4 100644
--- a/sdk/lib/developer/timeline.dart
+++ b/sdk/lib/developer/timeline.dart
@@ -364,6 +364,7 @@
}
/// Returns true if the Dart Timeline stream is enabled.
+@pragma("vm:recognized", "asm-intrinsic")
external bool _isDartStreamEnabled();
/// Returns the next async task id.
diff --git a/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart b/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart
index 7139036..5f7cd58 100644
--- a/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart
+++ b/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart
@@ -12,7 +12,7 @@
dynamic f = func;
// Invalid: Subtype may not redeclare optional parameters as required.
- Expect.throws(() {
+ Expect.throwsTypeError(() {
Function(
String p0, {
required int p1,
@@ -21,7 +21,7 @@
});
// Invalid: Subtype may not declare new required named parameters.
- Expect.throws(() {
+ Expect.throwsTypeError(() {
Function(
String p0, {
required int p1,
@@ -29,18 +29,18 @@
});
// Invalid: Invocation with explicit null required named argument.
- Expect.throws(() {
+ Expect.throwsTypeError(() {
f("", p1: null, p2: null);
});
- Expect.throws(() {
+ Expect.throwsTypeError(() {
Function.apply(f, [""], {#p1: null, #p2: null});
});
// Invalid: Invocation that omits a required named argument.
- Expect.throws(() {
+ Expect.throwsNoSuchMethodError(() {
f("", p1: 100);
});
- Expect.throws(() {
+ Expect.throwsNoSuchMethodError(() {
Function.apply(f, [""], {#p1: 100});
});
}
diff --git a/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
index 08a79ad..ab8a449 100644
--- a/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
+++ b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
@@ -5,6 +5,9 @@
// Testing that `noSuchMethod` forwarding properly handles optional, named and
// type parameters, and result type checking.
+// VMOptions=--lazy-dispatchers
+// VMOptions=--no-lazy-dispatchers
+
import 'package:expect/expect.dart';
class A {
@@ -48,6 +51,16 @@
} else if (invoke.memberName == #test8) {
Expect.equals(1, invoke.positionalArguments.length);
Expect.equals(null, invoke.positionalArguments[0]);
+ } else if (invoke.memberName == #test9) {
+ Expect.equals(invoke.typeArguments.length, 2);
+ Expect.equals(invoke.typeArguments[0].toString(), "num");
+ Expect.equals(invoke.typeArguments[1].toString(), "double");
+
+ Expect.equals(1, invoke.positionalArguments.length);
+ Expect.equals(4.2, invoke.positionalArguments[0]);
+
+ Expect.equals(1, invoke.namedArguments.length);
+ Expect.equals(3, invoke.namedArguments[#foo]);
}
}
@@ -63,6 +76,7 @@
void set test7(int x);
void test8([String? x]);
+ void test9<T, S extends T>(S x1, {T? foo});
T allTogetherNow<T, S extends T>(S x1, {List<T> foo: const <Never>[]});
}
@@ -97,6 +111,25 @@
Expect.throwsTypeError(() => (a as dynamic).test7 = "hi");
a.allTogetherNow<num, double>(2.0, foo: const <num>[3, 4]);
+ Expect.throwsTypeError(() =>
+ (a.allTogetherNow as dynamic)<int, double>(2.0, foo: const <num>[3, 4]));
+ Expect.throwsTypeError(() =>
+ (a.allTogetherNow as dynamic)<int, int>(2.0, foo: const <num>[3, 4]));
+ Expect.throwsTypeError(() => (a.allTogetherNow
+ as dynamic)<double, double>(2.0, foo: const <int>[3, 4]));
a.test8();
+
+ a.test9<num, double>(4.2, foo: 3);
+ Expect.throwsTypeError(() => (a.test9 as dynamic)<int, double>(3, foo: 3));
+ Expect.throwsTypeError(
+ () => (a.test9 as dynamic)<double, double>(3, foo: 3.2));
+ // Added to check that uses of positions from the ArgumentsDescriptor in the
+ // VM properly offsets named argument positions if there are also type
+ // arguments. allTogetherNow doesn't work for this because the runtime type of
+ // the positional argument cannot be the same as the type of the named
+ // argument without the positional argument failing to match its own type,
+ // and positional argument types are usually checked first.
+ Expect.throwsTypeError(
+ () => (a.test9 as dynamic)<int, double>(4.2, foo: 3.2));
}
diff --git a/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart b/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
index 01a59e7..3e42573 100644
--- a/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
+++ b/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
@@ -5,6 +5,9 @@
// Testing that `noSuchMethod` forwarding properly handles optional, named and
// type parameters, and result type checking.
+// VMOptions=--lazy-dispatchers
+// VMOptions=--no-lazy-dispatchers
+
import 'package:expect/expect.dart';
class A {
@@ -47,6 +50,16 @@
} else if (invoke.memberName == #test8) {
Expect.equals(1, invoke.positionalArguments.length);
Expect.equals(null, invoke.positionalArguments[0]);
+ } else if (invoke.memberName == #test9) {
+ Expect.equals(invoke.typeArguments.length, 2);
+ Expect.equals(invoke.typeArguments[0].toString(), "num");
+ Expect.equals(invoke.typeArguments[1].toString(), "double");
+
+ Expect.equals(1, invoke.positionalArguments.length);
+ Expect.equals(4.2, invoke.positionalArguments[0]);
+
+ Expect.equals(1, invoke.namedArguments.length);
+ Expect.equals(3, invoke.namedArguments[#foo]);
}
}
@@ -62,6 +75,7 @@
void set test7(int x);
void test8([String x]);
+ void test9<T, S extends T>(S x1, {T foo});
T allTogetherNow<T, S extends T>(S x1, {List<T> foo: const <Null>[]});
}
@@ -96,6 +110,25 @@
Expect.throwsTypeError(() => (a as dynamic).test7 = "hi");
a.allTogetherNow<num, double>(2.0, foo: const <num>[3, 4]);
+ Expect.throwsTypeError(() =>
+ (a.allTogetherNow as dynamic)<int, double>(2.0, foo: const <num>[3, 4]));
+ Expect.throwsTypeError(() =>
+ (a.allTogetherNow as dynamic)<int, int>(2.0, foo: const <num>[3, 4]));
+ Expect.throwsTypeError(() => (a.allTogetherNow
+ as dynamic)<double, double>(2.0, foo: const <int>[3, 4]));
a.test8();
+
+ a.test9<num, double>(4.2, foo: 3);
+ Expect.throwsTypeError(() => (a.test9 as dynamic)<int, double>(3, foo: 3));
+ Expect.throwsTypeError(
+ () => (a.test9 as dynamic)<double, double>(3, foo: 3.2));
+ // Added to check that uses of positions from the ArgumentsDescriptor in the
+ // VM properly offsets named argument positions if there are also type
+ // arguments. allTogetherNow doesn't work for this because the runtime type of
+ // the positional argument cannot be the same as the type of the named
+ // argument without the positional argument failing to match its own type,
+ // and positional argument types are usually checked first.
+ Expect.throwsTypeError(
+ () => (a.test9 as dynamic)<int, double>(4.2, foo: 3.2));
}
diff --git a/tools/VERSION b/tools/VERSION
index 9c3e9575..f08a7cd 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 12
PATCH 0
-PRERELEASE 48
+PRERELEASE 49
PRERELEASE_PATCH 0
\ No newline at end of file