[vm] Require all recognized methods to be marked with pragma.

Adds a @pragma("vm:recognized", <kind>) to all recognized methods, where
<kind> is one of "intrinsic", "graph" or "other", corresponding to the
kind of recognized method.

When running in debug mode, it is checked that all recognized methods
are marked with the correct kind of pragma, and that all methods marked
with the pragma are in fact recognized.

This enables kernel-level analyses and optimizations to query whether
a method is recognized by the VM.

TEST=Asserts that check the correspondence both ways, covered by test
suite, in particular the various CompileAll tests that compile all code.
Change-Id: I12f3305c72a93ecb1aefae2d66e3d9a7dae23b44
Cq-Do-Not-Cancel-Tryjobs: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/168951
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
This commit is contained in:
Aske Simon Christensen
2020-11-16 13:49:50 +00:00
committed by commit-bot@chromium.org
parent 844a5176ff
commit 1ab705f60c
40 changed files with 852 additions and 431 deletions
@@ -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'.
@@ -563,28 +563,28 @@ library;
// 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 @@ library;
// 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";
// ^
//
@@ -563,28 +563,28 @@ library;
// 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 @@ library;
// 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";
// ^
//
@@ -28,19 +28,19 @@ static method main() → dynamic
Extra constant evaluation status:
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:661:13 -> SymbolConstant(#catchError)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:661:13 -> ListConstant(const <Type*>[])
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:661:13 -> SymbolConstant(#test)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> SymbolConstant(#whenComplete)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> ListConstant(const <Type*>[])
Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:698:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:725:13 -> SymbolConstant(#timeout)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:725:13 -> ListConstant(const <Type*>[])
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:725:13 -> SymbolConstant(#onTimeout)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:622:13 -> SymbolConstant(#then)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:622:13 -> SymbolConstant(#onError)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> SymbolConstant(#asStream)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> ListConstant(const <Type*>[])
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> ListConstant(const <dynamic>[])
Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:709:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:662:13 -> SymbolConstant(#catchError)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:662:13 -> ListConstant(const <Type*>[])
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:662:13 -> SymbolConstant(#test)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:699:13 -> SymbolConstant(#whenComplete)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:699:13 -> ListConstant(const <Type*>[])
Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:699:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:726:13 -> SymbolConstant(#timeout)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:726:13 -> ListConstant(const <Type*>[])
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:726:13 -> SymbolConstant(#onTimeout)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:623:13 -> SymbolConstant(#then)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:623:13 -> SymbolConstant(#onError)
Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> SymbolConstant(#asStream)
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> ListConstant(const <Type*>[])
Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> ListConstant(const <dynamic>[])
Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:710:13 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
Extra constant evaluation: evaluated: 61, effectively constant: 15
@@ -9,7 +9,7 @@ library /*isNonNullableByDefault*/;
// 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";
// ^
//
@@ -9,7 +9,7 @@ library /*isNonNullableByDefault*/;
// 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";
// ^
//
@@ -9,7 +9,7 @@ library /*isNonNullableByDefault*/;
// 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";
// ^
//
@@ -135,3 +135,18 @@ class C {
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.
+1
View File
@@ -17,6 +17,7 @@ These pragmas can cause unsound behavior if used incorrectly and therefore are o
| 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
@@ -741,6 +741,23 @@ FlowGraph* FlowGraphBuilder::BuildGraph() {
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());
+21
View File
@@ -195,6 +195,27 @@ const char* MethodRecognizer::KindToCString(Kind kind) {
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);
+2
View File
@@ -53,6 +53,8 @@ class MethodRecognizer : public AllStatic {
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:
+378 -378
View File
@@ -12,365 +12,365 @@ namespace dart {
// 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(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(::, identical, ObjectIdentical, 0x8fd6ea77) \
V(ClassID, getID, ClassIDgetID, 0x0401ffcc) \
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) \
V(Future, wait, FutureWait, 0x6c0c3295) \
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, 0x6c0c32b4) \
// 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,20 +378,20 @@ namespace dart {
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) \
V(::, allocateTwoByteString, AllocateTwoByteString, 0xd0312797) \
V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xe0d28307) \
V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xd82789d0) \
V(::, allocateOneByteString, AllocateOneByteString, 0xc86bec19) \
V(::, allocateTwoByteString, AllocateTwoByteString, 0xd03127b6) \
V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xe0d28326) \
V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xd82789ef) \
#define ALL_INTRINSICS_NO_INTEGER_LIB_LIST(V) \
ASYNC_LIB_INTRINSIC_LIST(V) \
@@ -411,38 +411,38 @@ namespace dart {
// 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 @@ namespace dart {
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
+43 -16
View File
@@ -2306,9 +2306,6 @@ ErrorPtr Object::Init(Isolate* isolate,
// 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 @@ ErrorPtr Object::Init(Isolate* isolate,
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
@@ -9578,11 +9578,24 @@ void Function::SetDeoptReasonForAll(intptr_t deopt_id,
}
}
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 @@ void Library::CheckFunctionFingerprints() {
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 @@ void Library::CheckFunctionFingerprints() {
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); \
+1 -1
View File
@@ -3584,7 +3584,7 @@ class Function : public Object {
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(
+1
View File
@@ -494,6 +494,7 @@ class ObjectPointerVisitor;
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")
+7
View File
@@ -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 @@ class _List<E> extends FixedLengthListBase<E> {
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 @@ class _ImmutableList<E> extends UnmodifiableListBase<E> {
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";
@@ -12,6 +12,7 @@ class List<E> {
}
@patch
@pragma("vm:recognized", "other")
factory List([int? length]) native "List_new";
@patch
@@ -270,16 +270,19 @@ void _completeOnAsyncError(
//
// 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";
@@ -559,6 +559,7 @@ class _BigIntImpl implements BigInt {
/// 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 @@ class _BigIntImpl implements BigInt {
/// 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 @@ class _BigIntImpl implements BigInt {
/// 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 @@ class _BigIntImpl implements BigInt {
/// 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 @@ class _BigIntImpl implements BigInt {
///
/// 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 @@ class _BigIntImpl implements BigInt {
///
/// 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 @@ class _BigIntImpl implements BigInt {
/// 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 @@ class _BigIntMontgomeryReduction implements _BigIntReduction {
// 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) {
@@ -6,6 +6,7 @@
@pragma("vm:entry-point")
class ClassID {
@pragma("vm:recognized", "other")
@pragma("vm:entry-point", "call")
@pragma("vm:exact-result-type", "dart:core#_Smi")
static int getID(Object value) native "ClassID_getID";
@@ -46,33 +46,43 @@ abstract class _HashFieldBase {
// 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";
}
+1 -1
View File
@@ -1700,7 +1700,7 @@ class _Utf8Decoder {
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;
+27
View File
@@ -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 @@ class _Double implements double {
@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 @@ class _Double implements double {
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 @@ class _Double implements double {
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 @@ class _Double implements double {
@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 @@ class _Double implements double {
@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 @@ class _Double implements double {
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 @@ class _Double implements double {
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 @@ class _Double implements double {
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 @@ class _Double implements double {
return this;
}
@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:non-nullable-result-type")
int toInt() native "Double_toInt";
+29 -2
View File
@@ -39,12 +39,13 @@ int sizeOf<T extends NativeType>() {
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 @@ dynamic _asExternalTypedData(Pointer ptr, int count)
//
// 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 @@ class Pointer<T extends NativeType> {
"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 @@ class Pointer<T extends NativeType> {
/// 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 @@ int _abi()
// 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";
@@ -130,14 +130,17 @@ class _GrowableList<T> extends ListBase<T> {
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 @@ class _GrowableList<T> extends ListBase<T> {
_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")
@@ -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";
+33 -1
View File
@@ -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 @@ abstract class _IntegerImplementation implements int {
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 @@ abstract class _IntegerImplementation implements int {
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 @@ abstract class _IntegerImplementation implements int {
@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 @@ abstract class _IntegerImplementation implements int {
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 @@ abstract class _IntegerImplementation implements int {
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 @@ abstract class _IntegerImplementation implements int {
}
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 @@ abstract class _IntegerImplementation implements int {
return this;
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Double)
double toDouble() {
return new _Double.fromInteger(this);
@@ -515,13 +544,16 @@ class _Smi extends _IntegerImplementation {
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";
+7 -2
View File
@@ -36,19 +36,21 @@ Object? extractTypeArguments<T>(T instance, Function extract)
native "Internal_extractTypeArguments";
/// The returned string is a [_OneByteString] with uninitialized content.
@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:entry-point", "call")
String allocateOneByteString(int length)
native "Internal_allocateOneByteString";
/// The [string] must be a [_OneByteString]. The [index] must be valid.
@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:entry-point", "call")
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,11 +60,13 @@ void copyRangeFromUint8ListToOneByteString(
}
/// The returned string is a [_TwoByteString] with uninitialized content.
@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:entry-point", "call")
String allocateTwoByteString(int length)
native "Internal_allocateTwoByteString";
/// The [string] must be a [_TwoByteString]. The [index] must be valid.
@pragma("vm:recognized", "asm-intrinsic")
@pragma("vm:entry-point", "call")
void writeIntoTwoByteString(String string, int index, int codePoint)
native "Internal_writeIntoTwoByteString";
@@ -106,6 +110,7 @@ final bool is64Bit = _inquireIs64Bit();
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 +168,7 @@ T unsafeCast<T>(Object? v) native "Internal_unsafeCast";
// 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";
+13
View File
@@ -14,6 +14,7 @@ import "dart:typed_data" show Uint32List;
/// 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 @@ T min<T extends num>(T a, T b) {
}
@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 @@ num pow(num x, num exponent) {
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 _doublePow(double base, double exponent) {
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 @@ int _intPow(int base, int exponent) {
}
@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 @@ class _Random implements Random {
// 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) {
@@ -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 @@ void _setHash(obj, hash) native "Object_setHash";
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 @@ class Object {
}
@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";
+3
View File
@@ -18,11 +18,14 @@ class UserTag {
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";
@@ -350,9 +350,11 @@ class _RegExp implements RegExp {
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";
}
@@ -94,9 +94,11 @@ abstract class _StringBase implements String {
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 @@ abstract class _StringBase implements String {
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 @@ abstract class _StringBase implements String {
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 @@ abstract class _StringBase implements String {
* 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 @@ class _OneByteString extends _StringBase {
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 @@ class _OneByteString extends _StringBase {
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 @@ class _TwoByteString extends _StringBase {
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 @@ class _ExternalOneByteString extends _StringBase {
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 @@ class _ExternalTwoByteString extends _StringBase {
return _StringBase._isTwoByteWhitespace(codeUnit);
}
@pragma("vm:recognized", "graph-intrinsic")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int codeUnitAt(int index) native "String_codeUnitAt";
+2
View File
@@ -18,9 +18,11 @@ class _Type extends _AbstractType {
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";
}
@@ -36,6 +36,7 @@ import 'dart:math' show Random;
@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 @@ abstract class _TypedList extends _TypedListBase {
// 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 @@ abstract class _TypedList extends _TypedListBase {
@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 @@ class _Int8List extends _TypedList
}
// 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 @@ class _Int8List extends _TypedList
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 @@ class _Int8List extends _TypedList
@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 @@ class _Uint8List extends _TypedList
}
// 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 @@ class _Uint8List extends _TypedList
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 @@ class _Uint8List extends _TypedList
@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 @@ class _Uint8ClampedList extends _TypedList
}
// 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 @@ class _Uint8ClampedList extends _TypedList
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 @@ class _Uint8ClampedList extends _TypedList
@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 @@ class _Int16List extends _TypedList
}
// 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 @@ class _Int16List extends _TypedList
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 @@ class _Int16List extends _TypedList
@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 @@ class _Uint16List extends _TypedList
}
// 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 @@ class _Uint16List extends _TypedList
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 @@ class _Uint16List extends _TypedList
@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 @@ class _Int32List extends _TypedList
}
// 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 @@ class _Int32List extends _TypedList
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 @@ class _Int32List extends _TypedList
@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 @@ class _Uint32List extends _TypedList
}
// 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 @@ class _Uint32List extends _TypedList
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 @@ class _Uint32List extends _TypedList
@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 @@ class _Int64List extends _TypedList
}
// 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 @@ class _Int64List extends _TypedList
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 @@ class _Int64List extends _TypedList
@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 @@ class _Uint64List extends _TypedList
}
// 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 @@ class _Uint64List extends _TypedList
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 @@ class _Uint64List extends _TypedList
@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 @@ class _Float32List extends _TypedList
}
// 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 @@ class _Float32List extends _TypedList
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 @@ class _Float32List extends _TypedList
@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 @@ class _Float64List extends _TypedList
}
// 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 @@ class _Float64List extends _TypedList
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 @@ class _Float64List extends _TypedList
@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 @@ class _Float32x4List extends _TypedList
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 @@ class _Float32x4List extends _TypedList
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 @@ class _Float32x4List extends _TypedList
@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 @@ class _Int32x4List extends _TypedList
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 @@ class _Int32x4List extends _TypedList
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 @@ class _Int32x4List extends _TypedList
@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 @@ class _Float64x2List extends _TypedList
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 @@ class _Float64x2List extends _TypedList
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 @@ class _ExternalUint8Array extends _TypedList
}
// 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 @@ class _ExternalUint8Array extends _TypedList
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 @@ class _ExternalUint8ClampedArray extends _TypedList
}
// 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 @@ class _ExternalUint8ClampedArray extends _TypedList
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 @@ class Float32x4 {
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 @@ class Float32x4 {
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 @@ class _Float32x4 implements Float32x4 {
return _withX(x);
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _withX(double x) native "Float32x4_setX";
@@ -3599,6 +3698,7 @@ class _Float32x4 implements Float32x4 {
return _withY(y);
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _withY(double y) native "Float32x4_setY";
@@ -3608,6 +3708,7 @@ class _Float32x4 implements Float32x4 {
return _withZ(z);
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float32x4)
Float32x4 _withZ(double z) native "Float32x4_setZ";
@@ -3617,17 +3718,23 @@ class _Float32x4 implements Float32x4 {
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 @@ class Int32x4 {
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 @@ class Int32x4 {
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 @@ class _Int32x4 implements Int32x4 {
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 @@ class _Int32x4 implements Int32x4 {
@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 @@ class _Int32x4 implements Int32x4 {
return _withFlagX(x);
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withFlagX(bool x) native "Int32x4_setFlagX";
@@ -3745,6 +3863,7 @@ class _Int32x4 implements Int32x4 {
return _withFlagY(y);
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withFlagY(bool y) native "Int32x4_setFlagY";
@@ -3754,6 +3873,7 @@ class _Int32x4 implements Int32x4 {
return _withFlagZ(z);
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Int32x4)
Int32x4 _withFlagZ(bool z) native "Int32x4_setFlagZ";
@@ -3763,9 +3883,11 @@ class _Int32x4 implements Int32x4 {
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 @@ class Float64x2 {
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 @@ class Float64x2 {
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 @@ class _Float64x2 implements Float64x2 {
return _withX(x);
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", _Float64x2)
Float64x2 _withX(double x) native "Float64x2_setX";
@@ -3839,13 +3976,17 @@ class _Float64x2 implements Float64x2 {
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 @@ abstract class _TypedListView extends _TypedListBase implements TypedData {
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 @@ class _Int8ArrayView extends _TypedListView
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 @@ class _Uint8ArrayView extends _TypedListView
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 @@ class _Uint8ClampedArrayView extends _TypedListView
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 @@ class _Int16ArrayView extends _TypedListView
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 @@ class _Uint16ArrayView extends _TypedListView
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 @@ class _Int32ArrayView extends _TypedListView
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 @@ class _Uint32ArrayView extends _TypedListView
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 @@ class _Int64ArrayView extends _TypedListView
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 @@ class _Uint64ArrayView extends _TypedListView
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 @@ class _Float32ArrayView extends _TypedListView
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 @@ class _Float64ArrayView extends _TypedListView
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 @@ class _Float32x4ArrayView extends _TypedListView
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 @@ class _Int32x4ArrayView extends _TypedListView
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 @@ class _Float64x2ArrayView extends _TypedListView
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 @@ class _Float64x2ArrayView extends _TypedListView
@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 @@ class _ByteDataView implements ByteData {
_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 @@ int _toUint8(int value) {
return value & 0xFF;
}
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_Smi")
int _toClampedUint8(int value) {
if (value < 0) return 0;
+1
View File
@@ -361,6 +361,7 @@ abstract class Future<T> {
* The call to [cleanUp] should not throw. If it does, the error will be an
* uncaught asynchronous error.
*/
@pragma("vm:recognized", "other")
@pragma("vm:entry-point")
static Future<List<T>> wait<T>(Iterable<Future<T>> futures,
{bool eagerError = false, void cleanUp(T successValue)?}) {
+1
View File
@@ -768,6 +768,7 @@ class _Future<T> implements Future<T> {
}
}
@pragma("vm:recognized", "other")
@pragma("vm:entry-point")
Future<T> timeout(Duration timeLimit, {FutureOr<T> onTimeout()?}) {
if (_isComplete) return new _Future.immediate(this);
+1
View File
@@ -27,6 +27,7 @@ class Object {
* through their identity. An [Object] instance is equal to itself
* only.
*/
@pragma("vm:recognized", "other")
const Object();
/**
+1
View File
@@ -364,6 +364,7 @@ String _argumentsAsJson(Map? arguments) {
}
/// Returns true if the Dart Timeline stream is enabled.
@pragma("vm:recognized", "asm-intrinsic")
external bool _isDartStreamEnabled();
/// Returns the next async task id.