[kernel] Remove RedirectingFactory node

Closes #28421
Closes #29169

TEST=existing

Change-Id: Iee7d84fadc10981648cb327589fd7aa15b9b3e12
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/308140
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther 2023-06-14 06:38:32 +00:00 committed by Commit Queue
parent b8d4b98edd
commit 7226c7245e
32 changed files with 497 additions and 1178 deletions

View file

@ -22,7 +22,6 @@ import 'package:kernel/ast.dart'
Member,
Node,
Procedure,
RedirectingFactory,
TreeNode,
TypeParameter,
VariableDeclaration,
@ -263,7 +262,6 @@ class FileEndOffsetCalculator extends Visitor<int?> with VisitorNullMixin<int> {
if (node is Constructor) return node.fileEndOffset;
if (node is Procedure) return node.fileEndOffset;
if (node is Field) return node.fileEndOffset;
if (node is RedirectingFactory) return node.fileEndOffset;
if (node is FunctionNode) return node.fileEndOffset;
return noOffset;
}

View file

@ -471,7 +471,6 @@ class ConstantsTransformer extends RemovingTransformer {
transformTypeParameterList(node.typeParameters, node);
transformConstructorList(node.constructors, node);
transformProcedureList(node.procedures, node);
transformRedirectingFactoryList(node.redirectingFactories, node);
});
_staticTypeContext = oldStaticTypeContext;
return node;
@ -546,22 +545,6 @@ class ConstantsTransformer extends RemovingTransformer {
return node;
}
@override
RedirectingFactory visitRedirectingFactory(
RedirectingFactory node, TreeNode? removalSentinel) {
// Currently unreachable as the compiler doesn't produce
// RedirectingFactoryConstructor.
_matchCacheIndex = 0;
StaticTypeContext? oldStaticTypeContext = _staticTypeContext;
_staticTypeContext = new StaticTypeContext(node, typeEnvironment);
constantEvaluator.withNewEnvironment(() {
transformAnnotations(node.annotations, node);
node.function = transform(node.function)..parent = node;
});
_staticTypeContext = oldStaticTypeContext;
return node;
}
@override
TypeParameter visitTypeParameter(
TypeParameter node, TreeNode? removalSentinel) {

View file

@ -283,7 +283,6 @@ FreshTypeParameters buildRedirectingFactoryTearOffProcedureParameters(
{required Procedure tearOff,
required Procedure implementationConstructor,
required SourceLibraryBuilder libraryBuilder}) {
assert(implementationConstructor.isRedirectingFactory);
FunctionNode function = implementationConstructor.function;
FreshTypeParameters freshTypeParameters =
_createFreshTypeParameters(function.typeParameters, tearOff.function);

View file

@ -334,5 +334,4 @@ void finishProcedurePatch(Procedure origin, Procedure patch) {
origin.isExternal = patch.isExternal;
origin.function = patch.function;
origin.function.parent = origin;
origin.isRedirectingFactory = patch.isRedirectingFactory;
}

View file

@ -850,7 +850,6 @@ class KernelTarget extends TargetImplementation {
assert(!builder.isExtension);
// TODO(askesc): Make this check light-weight in the absence of patches.
if (builder.cls.constructors.isNotEmpty) return;
if (builder.cls.redirectingFactories.isNotEmpty) return;
for (Procedure proc in builder.cls.procedures) {
if (proc.isFactory) return;
}

View file

@ -1180,8 +1180,6 @@ class SourceClassBuilder extends ClassBuilderImpl
cls.addField(member);
} else if (member is Constructor) {
cls.addConstructor(member);
} else if (member is RedirectingFactory) {
cls.addRedirectingFactory(member);
} else {
unhandled("${member.runtimeType}", "getMember", member.fileOffset,
member.fileUri);

View file

@ -380,7 +380,6 @@ class RedirectingFactoryBuilder extends SourceFactoryBuilder {
_procedureInternal.function.redirectingFactoryTarget =
new RedirectingFactoryTarget(target, typeArguments);
bodyInternal?.parent = function;
_procedure.isRedirectingFactory = true;
if (isPatch) {
if (function.typeParameters.isNotEmpty) {
Map<TypeParameter, DartType> substitution = <TypeParameter, DartType>{};
@ -423,7 +422,6 @@ class RedirectingFactoryBuilder extends SourceFactoryBuilder {
_procedureInternal.isExternal = isExternal;
_procedureInternal.isConst = isConst;
_procedureInternal.isStatic = isStatic;
_procedureInternal.isRedirectingFactory = true;
if (redirectionTarget.typeArguments != null) {
typeArguments = new List<DartType>.generate(
redirectionTarget.typeArguments!.length,

View file

@ -108,8 +108,6 @@ const Map<String?, Map<String, FieldRule?>> _fieldRuleMap = {
'_fieldsInternal': FieldRule(name: 'fields'),
'_proceduresView': null,
'_proceduresInternal': FieldRule(name: 'procedures'),
'_redirectingFactoriesView': null,
'_redirectingFactoriesInternal': FieldRule(name: 'redirectingFactories'),
'_onClause': null,
'lazyBuilder': null,
'dirty': null,

View file

@ -147,7 +147,7 @@ type CanonicalName {
type ComponentFile {
UInt32 magic = 0x90ABCDEF;
UInt32 formatVersion = 104;
UInt32 formatVersion = 105;
Byte[10] shortSdkHash;
List<String> problemsAsJson; // Described in problems.md.
Library[] libraries;
@ -332,7 +332,6 @@ type Class extends Node {
List<Field> fields;
List<Constructor> constructors;
List<Procedure> procedures;
List<RedirectingFactory> redirectingFactories;
// Class index. Offsets are used to get start (inclusive) and end (exclusive) byte positions for
// a specific procedure. Note the "+1" to account for needing the end of the last entry.
@ -468,10 +467,9 @@ type Procedure extends Member {
Byte kind; // Index into the ProcedureKind enum above.
Byte stubKind; // Index into the ProcedureStubKind enum above.
UInt flags (isStatic, isAbstract, isExternal, isConst,
isRedirectingFactory, isExtensionMember,
isNonNullableByDefault, isSynthetic, isInternalImplementation,
isAbstractFieldAccessor, isInlineClassMember,
hasWeakTearoffReferencePragma);
isExtensionMember, isNonNullableByDefault, isSynthetic,
isInternalImplementation, isAbstractFieldAccessor,
isInlineClassMember, hasWeakTearoffReferencePragma);
Name name;
List<Expression> annotations;
MemberReference stubTarget; // May be NullReference.
@ -479,24 +477,6 @@ type Procedure extends Member {
FunctionNode function;
}
type RedirectingFactory extends Member {
Byte tag = 108;
CanonicalNameReference canonicalName;
UriReference fileUri;
FileOffset fileOffset;
FileOffset fileEndOffset;
Byte flags;
Name name;
List<Expression> annotations;
MemberReference targetReference;
List<DartType> typeArguments;
List<TypeParameter> typeParameters;
UInt parameterCount; // positionalParameters.length + namedParameters.length.
UInt requiredParameterCount;
List<VariableDeclarationPlain> positionalParameters;
List<VariableDeclarationPlain> namedParameters;
}
abstract type Initializer extends Node {}
type InvalidInitializer extends Initializer {

View file

@ -1257,30 +1257,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
_proceduresView = null;
}
List<RedirectingFactory> _redirectingFactoriesInternal;
DirtifyingList<RedirectingFactory>? _redirectingFactoriesView;
/// Redirecting factory constructors declared in the class.
///
/// For mixin applications this should be empty.
List<RedirectingFactory> get redirectingFactories {
ensureLoaded();
// If already dirty the caller just might as well add stuff directly too.
if (dirty) return _redirectingFactoriesInternal;
return _redirectingFactoriesView ??=
new DirtifyingList(this, _redirectingFactoriesInternal);
}
/// Internal. Should *ONLY* be used from within kernel.
///
/// Used for adding redirecting factory constructor when reading the dill
/// file.
void set redirectingFactoryConstructorsInternal(
List<RedirectingFactory> redirectingFactoryConstructors) {
_redirectingFactoriesInternal = redirectingFactoryConstructors;
_redirectingFactoriesView = null;
}
Class(
{required this.name,
bool isAbstract = false,
@ -1292,7 +1268,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
List<Constructor>? constructors,
List<Procedure>? procedures,
List<Field>? fields,
List<RedirectingFactory>? redirectingFactoryConstructors,
required this.fileUri,
Reference? reference})
: this.typeParameters = typeParameters ?? <TypeParameter>[],
@ -1300,14 +1275,11 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
this._fieldsInternal = fields ?? <Field>[],
this._constructorsInternal = constructors ?? <Constructor>[],
this._proceduresInternal = procedures ?? <Procedure>[],
this._redirectingFactoriesInternal =
redirectingFactoryConstructors ?? <RedirectingFactory>[],
super(reference) {
setParents(this.typeParameters, this);
setParents(this._constructorsInternal, this);
setParents(this._proceduresInternal, this);
setParents(this._fieldsInternal, this);
setParents(this._redirectingFactoriesInternal, this);
this.isAbstract = isAbstract;
this.isAnonymousMixin = isAnonymousMixin;
}
@ -1330,9 +1302,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
for (int i = 0; i < constructors.length; ++i) {
constructors[i].bindCanonicalNames(canonicalName);
}
for (int i = 0; i < redirectingFactories.length; ++i) {
redirectingFactories[i].bindCanonicalNames(canonicalName);
}
dirty = false;
}
@ -1357,10 +1326,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
Constructor member = constructors[i];
member._relinkNode();
}
for (int i = 0; i < redirectingFactories.length; ++i) {
RedirectingFactory member = redirectingFactories[i];
member._relinkNode();
}
dirty = false;
}
@ -1402,7 +1367,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
fields,
constructors,
procedures,
redirectingFactories
].expand((x) => x);
/// The immediately extended, mixed-in, and implemented types.
@ -1445,13 +1409,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
_fieldsInternal.add(field);
}
/// Adds a field to this class.
void addRedirectingFactory(RedirectingFactory redirectingFactory) {
dirty = true;
redirectingFactory.parent = this;
_redirectingFactoriesInternal.add(redirectingFactory);
}
@override
void addAnnotation(Expression node) {
if (annotations.isEmpty) {
@ -1502,7 +1459,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
visitList(constructors, v);
visitList(procedures, v);
visitList(fields, v);
visitList(redirectingFactories, v);
}
@override
@ -1519,7 +1475,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
v.transformList(constructors, this);
v.transformList(procedures, this);
v.transformList(fields, this);
v.transformList(redirectingFactories, this);
}
@override
@ -1546,7 +1501,6 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
v.transformConstructorList(constructors, this);
v.transformProcedureList(procedures, this);
v.transformFieldList(fields, this);
v.transformRedirectingFactoryList(redirectingFactories, this);
}
@override
@ -2836,175 +2790,6 @@ class Constructor extends Member {
}
}
/// Residue of a redirecting factory constructor for the linking phase.
///
/// In the following example, `bar` is a redirecting factory constructor.
///
/// class A {
/// A.foo();
/// factory A.bar() = A.foo;
/// }
///
/// An invocation of `new A.bar()` has the same effect as an invocation of
/// `new A.foo()`. In Kernel, the invocations of `bar` are replaced with
/// invocations of `foo`, and after it is done, the redirecting constructor can
/// be removed from the class. However, it is needed during the linking phase,
/// because other modules can refer to that constructor.
///
/// [RedirectingFactory]s contain the necessary information for
/// linking and are treated as non-runnable members of classes that merely serve
/// as containers for that information.
///
/// Redirecting factory constructors can be unnamed. In this case, the name is
/// an empty string (in a [Name]).
class RedirectingFactory extends Member {
int flags = 0;
/// [RedirectingFactory]s may redirect to constructors or factories
/// of instantiated generic types, that is, generic types with supplied type
/// arguments. The supplied type arguments are stored in this field.
final List<DartType> typeArguments;
/// Reference to the constructor or the factory that this
/// [RedirectingFactory] redirects to.
// TODO(johnniwinther): Make this non-nullable.
Reference? targetReference;
/// [FunctionNode] that holds the type parameters, copied from the enclosing
/// class, and the parameters defined on the redirecting factory.
///
/// The `FunctionNode.body` is `null` or a synthesized [ConstructorInvocation]
/// of the [targetReference] constructor using the [typeArguments] and
/// [VariableGet] of the parameters.
@override
FunctionNode function;
RedirectingFactory(this.targetReference,
{required Name name,
bool isConst = false,
bool isExternal = false,
int transformerFlags = 0,
List<DartType>? typeArguments,
required this.function,
required Uri fileUri,
Reference? reference})
: this.typeArguments = typeArguments ?? <DartType>[],
super(name, fileUri, reference) {
function.parent = this;
this.isConst = isConst;
this.isExternal = isExternal;
this.transformerFlags = transformerFlags;
}
@override
void bindCanonicalNames(CanonicalName parent) {
parent.getChildFromRedirectingFactory(this).bindTo(reference);
}
@override
Class get enclosingClass => parent as Class;
static const int FlagConst = 1 << 0; // Must match serialized bit positions.
static const int FlagExternal = 1 << 1;
static const int FlagNonNullableByDefault = 1 << 2;
@override
bool get isConst => flags & FlagConst != 0;
@override
bool get isExternal => flags & FlagExternal != 0;
void set isConst(bool value) {
flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
}
@override
void set isExternal(bool value) {
flags = value ? (flags | FlagExternal) : (flags & ~FlagExternal);
}
@override
bool get isInstanceMember => false;
@override
bool get hasGetter => false;
@override
bool get hasSetter => false;
@override
bool get isExtensionMember => false;
@override
bool get isInlineClassMember => false;
bool get isUnresolved => targetReference == null;
@override
bool get isNonNullableByDefault => flags & FlagNonNullableByDefault != 0;
@override
void set isNonNullableByDefault(bool value) {
flags = value
? (flags | FlagNonNullableByDefault)
: (flags & ~FlagNonNullableByDefault);
}
Member? get target => targetReference?.asMember;
void set target(Member? member) {
assert(member is Constructor ||
(member is Procedure && member.kind == ProcedureKind.Factory));
targetReference = getMemberReferenceGetter(member);
}
@override
R accept<R>(MemberVisitor<R> v) => v.visitRedirectingFactory(this);
@override
R accept1<R, A>(MemberVisitor1<R, A> v, A arg) =>
v.visitRedirectingFactory(this, arg);
@override
R acceptReference<R>(MemberReferenceVisitor<R> v) =>
v.visitRedirectingFactoryReference(this);
@override
void visitChildren(Visitor v) {
visitList(annotations, v);
target?.acceptReference(v);
visitList(typeArguments, v);
name.accept(v);
function.accept(v);
}
@override
void transformChildren(Transformer v) {
v.transformList(annotations, this);
v.transformDartTypeList(typeArguments);
function = v.transform(function)..parent = this;
}
@override
void transformOrRemoveChildren(RemovingTransformer v) {
v.transformExpressionList(annotations, this);
v.transformDartTypeList(typeArguments);
function = v.transform(function)..parent = this;
}
@override
DartType get getterType =>
function.computeFunctionType(enclosingLibrary.nonNullable);
@override
DartType get setterType => const NeverType.nonNullable();
@override
Location? _getLocationInEnclosingFile(int offset) {
return _getLocationInComponent(enclosingComponent, fileUri, offset);
}
}
/// Enum for the semantics of the `Procedure.stubTarget` property.
enum ProcedureStubKind {
/// A regular procedure declared in source code.
@ -3346,15 +3131,13 @@ class Procedure extends Member {
static const int FlagAbstract = 1 << 1;
static const int FlagExternal = 1 << 2;
static const int FlagConst = 1 << 3; // Only for external const factories.
// TODO(29841): Remove this flag after the issue is resolved.
static const int FlagRedirectingFactory = 1 << 4;
static const int FlagExtensionMember = 1 << 5;
static const int FlagNonNullableByDefault = 1 << 6;
static const int FlagSynthetic = 1 << 7;
static const int FlagInternalImplementation = 1 << 8;
static const int FlagIsAbstractFieldAccessor = 1 << 9;
static const int FlagInlineMember = 1 << 10;
static const int FlagHasWeakTearoffReferencePragma = 1 << 11;
static const int FlagExtensionMember = 1 << 4;
static const int FlagNonNullableByDefault = 1 << 5;
static const int FlagSynthetic = 1 << 6;
static const int FlagInternalImplementation = 1 << 7;
static const int FlagIsAbstractFieldAccessor = 1 << 8;
static const int FlagInlineMember = 1 << 9;
static const int FlagHasWeakTearoffReferencePragma = 1 << 10;
bool get isStatic => flags & FlagStatic != 0;
@ -3397,7 +3180,7 @@ class Procedure extends Member {
// Indicates if this [Procedure] represents a redirecting factory constructor
// and doesn't have a runnable body.
bool get isRedirectingFactory {
return flags & FlagRedirectingFactory != 0;
return function.redirectingFactoryTarget != null;
}
/// If set, this flag indicates that this function was not present in the
@ -3454,12 +3237,6 @@ class Procedure extends Member {
flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
}
void set isRedirectingFactory(bool value) {
flags = value
? (flags | FlagRedirectingFactory)
: (flags & ~FlagRedirectingFactory);
}
void set isExtensionMember(bool value) {
flags =
value ? (flags | FlagExtensionMember) : (flags & ~FlagExtensionMember);
@ -15247,12 +15024,6 @@ final List<InlineType> emptyListOfInlineType =
final List<Constructor> emptyListOfConstructor =
List.filled(0, dummyConstructor, growable: false);
/// Almost const <RedirectingFactory>[], but not const in an attempt to avoid
/// polymorphism. See
/// https://dart-review.googlesource.com/c/sdk/+/185828.
final List<RedirectingFactory> emptyListOfRedirectingFactory =
List.filled(0, dummyRedirectingFactory, growable: false);
/// Almost const <Initializer>[], but not const in an attempt to avoid
/// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
final List<Initializer> emptyListOfInitializer =
@ -15406,14 +15177,6 @@ final Procedure dummyProcedure = new Procedure(
/// constructor.
final Field dummyField = new Field.mutable(dummyName, fileUri: dummyUri);
/// Non-nullable [RedirectingFactory] dummy value.
///
/// This is used as the removal sentinel in [RemovingTransformer] and can be
/// used for instance as a dummy initial value for the `List.filled`
/// constructor.
final RedirectingFactory dummyRedirectingFactory = new RedirectingFactory(null,
name: dummyName, fileUri: dummyUri, function: dummyFunctionNode);
/// Non-nullable [Typedef] dummy value.
///
/// This is used as the removal sentinel in [RemovingTransformer] and can be
@ -15561,7 +15324,6 @@ final List<TreeNode> dummyTreeNodes = [
dummyMember,
dummyProcedure,
dummyField,
dummyRedirectingFactory,
dummyTypedef,
dummyInitializer,
dummyFunctionNode,

View file

@ -1702,7 +1702,6 @@ class BinaryBuilder {
node.fieldsInternal = _readFieldList(node);
_readConstructorList(node);
node.proceduresInternal = _readProcedureList(node, procedureOffsets);
_readRedirectingFactoryList(node);
}
void _readConstructorList(Class node) {
@ -1718,21 +1717,6 @@ class BinaryBuilder {
}
}
void _readRedirectingFactoryList(Class node) {
int length = readUInt30();
if (!useGrowableLists && length == 0) {
// When lists don't have to be growable anyway, we might as well use a
// constant one for the empty list.
node.redirectingFactoryConstructorsInternal =
emptyListOfRedirectingFactory;
} else {
node.redirectingFactoryConstructorsInternal =
new List<RedirectingFactory>.generate(
length, (int index) => readRedirectingFactory()..parent = node,
growable: useGrowableLists);
}
}
/// Set the lazyBuilder on the class so it can be lazy loaded in the future.
void _setLazyLoadClass(Class node, List<int> procedureOffsets) {
final int savedByteOffset = _byteOffset;
@ -1922,51 +1906,6 @@ class BinaryBuilder {
return node;
}
RedirectingFactory readRedirectingFactory() {
int tag = readByte();
assert(tag == Tag.RedirectingFactory);
CanonicalName canonicalName = readNonNullCanonicalNameReference();
Reference reference = canonicalName.reference;
RedirectingFactory? node = reference.node as RedirectingFactory?;
if (alwaysCreateNewNamedNodes) {
node = null;
}
Uri fileUri = readUriReference();
int fileOffset = readOffset();
int fileEndOffset = readOffset();
int flags = readByte();
Name name = readName();
assert(() {
debugPath.add(name.text);
return true;
}());
List<Expression> annotations = readAnnotationList();
Reference targetReference = readNonNullMemberReference();
List<DartType> typeArguments = readDartTypeList();
FunctionNode function = readFunctionNode(outerEndOffset: fileEndOffset);
if (node == null) {
node = new RedirectingFactory(targetReference,
reference: reference,
name: name,
fileUri: fileUri,
function: function,
typeArguments: typeArguments);
} else {
node.name = name;
node.fileUri = fileUri;
node.targetReference = targetReference;
node.typeArguments.addAll(typeArguments);
node.function = function..parent = node;
}
node.fileOffset = fileOffset;
node.fileEndOffset = fileEndOffset;
node.flags = flags;
node.annotations = annotations;
setParents(annotations, node);
debugPath.removeLast();
return node;
}
void _readInitializers(Constructor constructor) {
int length = readUInt30();
if (!useGrowableLists && length == 0) {
@ -4282,13 +4221,6 @@ class BinaryBuilderWithMetadata extends BinaryBuilder implements BinarySource {
return _associateMetadata(result, nodeOffset);
}
@override
RedirectingFactory readRedirectingFactory() {
final int nodeOffset = _byteOffset;
final RedirectingFactory result = super.readRedirectingFactory();
return _associateMetadata(result, nodeOffset);
}
@override
Initializer readInitializer() {
final int nodeOffset = _byteOffset;

View file

@ -404,15 +404,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
}
}
void writeRedirectingFactoryNodeList(List<RedirectingFactory> nodes) {
final int len = nodes.length;
writeUInt30(len);
for (int i = 0; i < len; i++) {
final RedirectingFactory node = nodes[i];
writeRedirectingFactoryNode(node);
}
}
void writeSwitchCaseNodeList(List<SwitchCase> nodes) {
final int len = nodes.length;
writeUInt30(len);
@ -511,13 +502,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
node.accept(this);
}
void writeRedirectingFactoryNode(RedirectingFactory node) {
if (_metadataSubsections != null) {
_writeNodeMetadata(node);
}
node.accept(this);
}
void writeSwitchCaseNode(SwitchCase node) {
if (_metadataSubsections != null) {
_writeNodeMetadata(node);
@ -1275,7 +1259,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
procedureOffsets = <int>[];
writeProcedureNodeList(node.procedures);
procedureOffsets.add(getBufferOffset());
writeRedirectingFactoryNodeList(node.redirectingFactories);
leaveScope(typeParameters: node.typeParameters);
assert(procedureOffsets.length > 0);
@ -1455,26 +1438,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
leaveScope(memberScope: true);
}
@override
void visitRedirectingFactory(RedirectingFactory node) {
CanonicalName? canonicalName =
getNonNullableMemberReferenceGetter(node).canonicalName;
if (canonicalName == null) {
throw new ArgumentError('Missing canonical name for $node');
}
writeByte(Tag.RedirectingFactory);
_writeNonNullCanonicalName(canonicalName);
writeUriReference(node.fileUri);
writeOffset(node.fileOffset);
writeOffset(node.fileEndOffset);
writeByte(node.flags);
writeName(node.name);
writeAnnotationList(node.annotations);
writeNonNullReference(node.targetReference!);
writeNodeList(node.typeArguments);
writeFunctionNode(node.function);
}
@override
void visitInvalidInitializer(InvalidInitializer node) {
writeByte(Tag.InvalidInitializer);
@ -3178,12 +3141,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
throw new UnsupportedError('serialization of Components');
}
@override
void visitRedirectingFactoryReference(RedirectingFactory node) {
throw new UnsupportedError(
'serialization of RedirectingFactory references');
}
@override
void visitStringConstant(StringConstant node) {
throw new UnsupportedError('serialization of StringConstants');

View file

@ -18,7 +18,6 @@ class Tag {
static const int Field = 4;
static const int Constructor = 5;
static const int Procedure = 6;
static const int RedirectingFactory = 108;
// Initializers
static const int InvalidInitializer = 7;
@ -225,7 +224,7 @@ class Tag {
/// Internal version of kernel binary format.
/// Bump it when making incompatible changes in kernel binaries.
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
static const int BinaryFormatVersion = 104;
static const int BinaryFormatVersion = 105;
}
abstract class ConstantTag {

View file

@ -155,12 +155,6 @@ class CanonicalName {
.getChildFromQualifiedName(constructor.name);
}
CanonicalName getChildFromRedirectingFactory(
RedirectingFactory redirectingFactory) {
return getChild(factoriesName)
.getChildFromQualifiedName(redirectingFactory.name);
}
CanonicalName getChildFromFieldWithName(Name name) {
return getChild(fieldsName).getChildFromQualifiedName(name);
}

View file

@ -92,11 +92,6 @@ class CloneVisitorNotMembers implements TreeVisitor<TreeNode> {
throw 'Cloning of fields is not implemented here';
}
@override
TreeNode visitRedirectingFactory(RedirectingFactory node) {
throw 'Cloning of redirecting factory constructors is not implemented here';
}
// The currently active file uri where we are cloning [TreeNode]s from. If
// this is set to `null` we cannot clone file offsets to newly created nodes.
// The [_cloneFileOffset] helper function will ensure this.
@ -1164,30 +1159,6 @@ class CloneVisitorWithMembers extends CloneVisitorNotMembers {
_activeFileUri = activeFileUriSaved;
return result;
}
RedirectingFactory cloneRedirectingFactory(
RedirectingFactory node, Reference? reference) {
final Uri? activeFileUriSaved = _activeFileUri;
_activeFileUri = node.fileUri;
RedirectingFactory result = new RedirectingFactory(node.targetReference,
name: node.name,
isConst: node.isConst,
isExternal: node.isExternal,
transformerFlags: node.transformerFlags,
typeArguments: node.typeArguments.map(visitType).toList(),
function: super.clone(node.function),
fileUri: node.fileUri,
reference: reference)
..fileOffset = _cloneFileOffset(node.fileOffset)
..annotations = cloneAnnotations && !node.annotations.isEmpty
? node.annotations.map(super.clone).toList()
: const <Expression>[];
setParents(result.annotations, result);
_activeFileUri = activeFileUriSaved;
return result;
}
}
/// Cloner that resolves super calls in mixin declarations.

View file

@ -61,12 +61,6 @@ class CoverageVisitor implements Visitor<void> {
node.visitChildren(this);
}
@override
void visitRedirectingFactory(RedirectingFactory node) {
visited.add(MemberKind.RedirectingFactory);
node.visitChildren(this);
}
@override
void visitProcedure(Procedure node) {
visited.add(MemberKind.Procedure);
@ -1093,8 +1087,6 @@ class CoverageVisitor implements Visitor<void> {
@override
void visitConstructorReference(Constructor node) {}
@override
void visitRedirectingFactoryReference(RedirectingFactory node) {}
@override
void visitProcedureReference(Procedure node) {}
@override
void defaultConstantReference(Constant node) {}
@ -1240,7 +1232,6 @@ enum MemberKind {
Constructor,
Field,
Procedure,
RedirectingFactory,
}
enum InitializerKind {

View file

@ -75,11 +75,6 @@ class EquivalenceVisitor implements Visitor1<bool, Node> {
return strategy.checkConstructor(this, node, other);
}
@override
bool visitRedirectingFactory(RedirectingFactory node, Node other) {
return strategy.checkRedirectingFactory(this, node, other);
}
@override
bool visitProcedure(Procedure node, Node other) {
return strategy.checkProcedure(this, node, other);
@ -988,11 +983,6 @@ class EquivalenceVisitor implements Visitor1<bool, Node> {
return false;
}
@override
bool visitRedirectingFactoryReference(RedirectingFactory node, Node other) {
return false;
}
@override
bool visitProcedureReference(Procedure node, Node other) {
return false;
@ -1720,9 +1710,6 @@ class EquivalenceStrategy {
if (!checkClass_procedures(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkClass_redirectingFactories(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkClass_reference(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
@ -2005,53 +1992,6 @@ class EquivalenceStrategy {
return result;
}
bool checkRedirectingFactory(
EquivalenceVisitor visitor, RedirectingFactory? node, Object? other) {
if (identical(node, other)) return true;
if (node is! RedirectingFactory) return false;
if (other is! RedirectingFactory) return false;
if (!visitor.matchNamedNodes(node, other)) {
return false;
}
visitor.pushNodeState(node, other);
bool result = true;
if (!checkRedirectingFactory_flags(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_typeArguments(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_targetReference(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_function(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_fileEndOffset(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_annotations(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_name(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_fileUri(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_transformerFlags(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_reference(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkRedirectingFactory_fileOffset(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
visitor.popState();
return result;
}
bool checkProcedure(
EquivalenceVisitor visitor, Procedure? node, Object? other) {
if (identical(node, other)) return true;
@ -5992,12 +5932,6 @@ class EquivalenceStrategy {
node.procedures, other.procedures, visitor.checkNodes, 'procedures');
}
bool checkClass_redirectingFactories(
EquivalenceVisitor visitor, Class node, Class other) {
return visitor.checkLists(node.redirectingFactories,
other.redirectingFactories, visitor.checkNodes, 'redirectingFactories');
}
bool checkClass_reference(
EquivalenceVisitor visitor, Class node, Class other) {
return checkNamedNode_reference(visitor, node, other);
@ -6400,63 +6334,6 @@ class EquivalenceStrategy {
return checkMember_fileOffset(visitor, node, other);
}
bool checkRedirectingFactory_flags(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return visitor.checkValues(node.flags, other.flags, 'flags');
}
bool checkRedirectingFactory_typeArguments(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return visitor.checkLists(node.typeArguments, other.typeArguments,
visitor.checkNodes, 'typeArguments');
}
bool checkRedirectingFactory_targetReference(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return visitor.checkReferences(
node.targetReference, other.targetReference, 'targetReference');
}
bool checkRedirectingFactory_function(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return visitor.checkNodes(node.function, other.function, 'function');
}
bool checkRedirectingFactory_fileEndOffset(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return checkMember_fileEndOffset(visitor, node, other);
}
bool checkRedirectingFactory_annotations(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return checkMember_annotations(visitor, node, other);
}
bool checkRedirectingFactory_name(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return checkMember_name(visitor, node, other);
}
bool checkRedirectingFactory_fileUri(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return checkMember_fileUri(visitor, node, other);
}
bool checkRedirectingFactory_transformerFlags(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return checkMember_transformerFlags(visitor, node, other);
}
bool checkRedirectingFactory_reference(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return checkMember_reference(visitor, node, other);
}
bool checkRedirectingFactory_fileOffset(EquivalenceVisitor visitor,
RedirectingFactory node, RedirectingFactory other) {
return checkMember_fileOffset(visitor, node, other);
}
bool checkProcedure_fileStartOffset(
EquivalenceVisitor visitor, Procedure node, Procedure other) {
return visitor.checkValues(

View file

@ -290,8 +290,6 @@ class NodeCreator {
cls.addField(member);
} else if (member is Constructor) {
cls.addConstructor(member);
} else if (member is RedirectingFactory) {
cls.addRedirectingFactory(member);
} else {
throw new UnsupportedError(
'Unexpected member $member (${member.runtimeType})');
@ -523,9 +521,12 @@ class NodeCreator {
return redirectingFactory;
}
Procedure redirectingFactory = Procedure(
Name('foo'), ProcedureKind.Method, FunctionNode(null),
fileUri: _uri)
..isRedirectingFactory = true;
Name('foo'),
ProcedureKind.Method,
FunctionNode(null)
..redirectingFactoryTarget =
new RedirectingFactoryTarget(_needConstructor(), []),
fileUri: _uri);
_needClass().addProcedure(redirectingFactory);
return redirectingFactory;
}
@ -1636,10 +1637,6 @@ class NodeCreator {
fileUri: _uri)
..fileOffset = _needFileOffset(),
]);
case MemberKind.RedirectingFactory:
return RedirectingFactory(null,
name: _createName(), function: _createFunctionNode(), fileUri: _uri)
..fileOffset = _needFileOffset();
}
}

View file

@ -1224,36 +1224,6 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
name: node.name, initializers: node.initializers);
}
@override
void visitRedirectingFactory(RedirectingFactory node) {
writeAnnotationList(node.annotations);
writeIndentation();
writeModifier(node.isExternal, 'external');
writeModifier(node.isConst, 'const');
writeWord('redirecting_factory');
writeFunction(node.function, name: node.name);
writeSpaced('=');
writeMemberReferenceFromReference(node.targetReference!);
if (node.typeArguments.isNotEmpty) {
writeSymbol('<');
writeList(node.typeArguments, writeType);
writeSymbol('>');
}
List<String> features = <String>[];
if (node.enclosingLibrary.isNonNullableByDefault !=
node.isNonNullableByDefault) {
if (node.isNonNullableByDefault) {
features.add("isNonNullableByDefault");
} else {
features.add("isLegacy");
}
}
if (features.isNotEmpty) {
writeWord("/*${features.join(',')}*/");
}
endLine(';');
}
@override
void visitClass(Class node) {
writeAnnotationList(node.annotations);
@ -1309,7 +1279,6 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
node.fields.forEach(writeNode);
node.constructors.forEach(writeNode);
node.procedures.forEach(writeNode);
node.redirectingFactories.forEach(writeNode);
--indentation;
writeIndentation();
endLine('}');

View file

@ -216,12 +216,6 @@ class TypeCheckingVisitor
handleFunctionNode(node.function);
}
@override
void visitRedirectingFactory(RedirectingFactory node) {
currentReturnType = null;
currentYieldType = null;
}
void handleFunctionNode(FunctionNode node) {
AsyncMarker oldAsyncMarker = currentAsyncMarker;
currentAsyncMarker = node.asyncMarker;

View file

@ -161,9 +161,6 @@ abstract class MemberVisitor<R> {
R visitConstructor(Constructor node) => defaultMember(node);
R visitProcedure(Procedure node) => defaultMember(node);
R visitField(Field node) => defaultMember(node);
R visitRedirectingFactory(RedirectingFactory node) {
return defaultMember(node);
}
}
abstract class MemberVisitor1<R, A> {
@ -174,9 +171,6 @@ abstract class MemberVisitor1<R, A> {
R visitConstructor(Constructor node, A arg) => defaultMember(node, arg);
R visitProcedure(Procedure node, A arg) => defaultMember(node, arg);
R visitField(Field node, A arg) => defaultMember(node, arg);
R visitRedirectingFactory(RedirectingFactory node, A arg) {
return defaultMember(node, arg);
}
}
abstract class InitializerVisitor<R> {
@ -481,10 +475,6 @@ abstract class TreeVisitor<R>
R visitProcedure(Procedure node) => defaultMember(node);
@override
R visitField(Field node) => defaultMember(node);
@override
R visitRedirectingFactory(RedirectingFactory node) {
return defaultMember(node);
}
// Classes
R visitClass(Class node) => defaultTreeNode(node);
@ -850,10 +840,6 @@ abstract class TreeVisitor1<R, A>
R visitProcedure(Procedure node, A arg) => defaultMember(node, arg);
@override
R visitField(Field node, A arg) => defaultMember(node, arg);
@override
R visitRedirectingFactory(RedirectingFactory node, A arg) {
return defaultMember(node, arg);
}
// Classes
R visitClass(Class node, A arg) => defaultTreeNode(node, arg);
@ -1286,9 +1272,6 @@ abstract class MemberReferenceVisitor<R> {
R visitFieldReference(Field node) => defaultMemberReference(node);
R visitConstructorReference(Constructor node) => defaultMemberReference(node);
R visitProcedureReference(Procedure node) => defaultMemberReference(node);
R visitRedirectingFactoryReference(RedirectingFactory node) {
return defaultMemberReference(node);
}
}
abstract class MemberReferenceVisitor1<R, A> {
@ -1301,9 +1284,6 @@ abstract class MemberReferenceVisitor1<R, A> {
defaultMemberReference(node, arg);
R visitProcedureReference(Procedure node, A arg) =>
defaultMemberReference(node, arg);
R visitRedirectingFactoryReference(RedirectingFactory node, A arg) {
return defaultMemberReference(node, arg);
}
}
abstract class Visitor<R> extends TreeVisitor<R>
@ -1456,10 +1436,6 @@ abstract class Visitor<R> extends TreeVisitor<R>
R visitConstructorReference(Constructor node) => defaultMemberReference(node);
@override
R visitProcedureReference(Procedure node) => defaultMemberReference(node);
@override
R visitRedirectingFactoryReference(RedirectingFactory node) {
return defaultMemberReference(node);
}
R visitName(Name node) => defaultNode(node);
R visitSupertype(Supertype node) => defaultNode(node);
@ -1610,9 +1586,6 @@ abstract class Visitor1<R, A> extends TreeVisitor1<R, A>
@override
R visitProcedureReference(Procedure node, A arg) =>
defaultMemberReference(node, arg);
@override
R visitRedirectingFactoryReference(RedirectingFactory node, A arg) =>
defaultMemberReference(node, arg);
R visitName(Name node, A arg) => defaultNode(node, arg);
R visitSupertype(Supertype node, A arg) => defaultNode(node, arg);
@ -2070,16 +2043,6 @@ class RemovingTransformer extends TreeVisitor1<TreeNode, TreeNode?> {
transformList(nodes, parent, dummyField);
}
/// Transforms or removes [RedirectingFactory] nodes in [nodes] as
/// children of [parent].
///
/// This is convenience method for calling [transformList] with removal
/// sentinel for [RedirectingFactory] nodes.
void transformRedirectingFactoryList(
List<RedirectingFactory> nodes, TreeNode parent) {
transformList(nodes, parent, dummyRedirectingFactory);
}
/// Transforms or removes [Typedef] nodes in [nodes] as children of [parent].
///
/// This is convenience method for calling [transformList] with removal

View file

@ -110,17 +110,6 @@ void testMemberCloning() {
"${constructor.function.body}");
}
void testRedirectingFactories(
Iterable<RedirectingFactory> redirectingFactory) {
testMembers<RedirectingFactory>(
redirectingFactory,
(cloner, redirectingFactory) =>
cloner.cloneRedirectingFactory(redirectingFactory, null),
(redirectingFactory) =>
"${redirectingFactory.runtimeType}(${redirectingFactory.name}):"
"${redirectingFactory.function.body}");
}
for (Library library in component.libraries) {
testProcedures(library.procedures);
testFields(library.fields);
@ -128,7 +117,6 @@ void testMemberCloning() {
testProcedures(cls.procedures);
testFields(cls.fields);
testConstructors(cls.constructors);
testRedirectingFactories(cls.redirectingFactories);
}
}
Expect.isEmpty(
@ -185,16 +173,6 @@ class MemberEquivalenceStrategy extends EquivalenceStrategy {
return super.checkConstructor(visitor, node, other);
}
@override
bool checkRedirectingFactory(
EquivalenceVisitor visitor, RedirectingFactory? node, Object? other) {
if (node is RedirectingFactory && other is RedirectingFactory) {
assumeClonedReferences(
visitor, node, node.reference, other, other.reference);
}
return super.checkRedirectingFactory(visitor, node, other);
}
@override
bool checkField(EquivalenceVisitor visitor, Field? node, Object? other) {
if (node is Field && other is Field) {

View file

@ -45,9 +45,13 @@ void main() {
name: new Name('foo'), fileUri: uri);
cls.addConstructor(constructor);
Procedure redirectingFactory = new Procedure(
new Name('foo'), ProcedureKind.Factory, new FunctionNode(null),
fileUri: uri, isStatic: true)
..isRedirectingFactory = true;
new Name('foo'),
ProcedureKind.Factory,
new FunctionNode(null)
..redirectingFactoryTarget =
new RedirectingFactoryTarget(constructor, []),
fileUri: uri,
isStatic: true);
cls.addProcedure(redirectingFactory);
TearOffConstant tearOffConstant1a = new StaticTearOffConstant(procedure1);

View file

@ -143,11 +143,6 @@ Component createComponent() {
class2.addField(
new Field.mutable(new Name('_bar', library2), fileUri: dummyUri));
class2.addRedirectingFactory(new RedirectingFactory(null,
name: new Name('_boz', library1),
function: new FunctionNode(null),
fileUri: dummyUri));
library1.addExtension(new Extension(name: 'Baz', fileUri: dummyUri));
library1.addTypedef(new Typedef('Boz', dummyDartType, fileUri: dummyUri));
@ -251,13 +246,6 @@ Map<ReferenceNameKind, List<ReferenceNameObject>>
field));
}
}
for (RedirectingFactory redirectingFactory in cls.redirectingFactories) {
add(
ReferenceNameKind.Function,
new ReferenceNameObject(
ReferenceName.fromNamedNode(redirectingFactory),
redirectingFactory));
}
}
for (Extension extension in library.extensions) {
add(

View file

@ -843,8 +843,6 @@ class TestHarness {
enclosingClass.addField(node);
} else if (node is Constructor) {
enclosingClass.addConstructor(node);
} else if (node is RedirectingFactory) {
enclosingClass.addRedirectingFactory(node);
} else {
throw "Unexpected class member: ${node.runtimeType}";
}

View file

@ -268,7 +268,6 @@ class _FfiDefinitionTransformer extends FfiTransformer {
if (node.typeParameters.isNotEmpty ||
node.procedures.where((Procedure e) => !e.isSynthetic).isNotEmpty ||
node.fields.isNotEmpty ||
node.redirectingFactories.isNotEmpty ||
node.constructors.length != 1 ||
!node.constructors.single.isConst) {
// We want exactly one constructor, no other members and no type arguments.

View file

@ -1170,7 +1170,6 @@ class _TreeShakerPass1 extends RemovingTransformer {
transformConstructorList(node.constructors, node);
transformProcedureList(node.procedures, node);
transformFieldList(node.fields, node);
transformRedirectingFactoryList(node.redirectingFactories, node);
return node;
}

View file

@ -230,8 +230,7 @@ Fragment StreamingFlowGraphBuilder::BuildInitializers(
bool has_field_initializers = false;
for (intptr_t i = 0; i < list_length; ++i) {
if (PeekTag() == kRedirectingInitializer ||
PeekTag() == kRedirectingFactory) {
if (PeekTag() == kRedirectingInitializer) {
is_redirecting_constructor = true;
} else if (PeekTag() == kFieldInitializer) {
has_field_initializers = true;

View file

@ -597,16 +597,13 @@ class ProcedureHelper {
kAbstract = 1 << 1,
kExternal = 1 << 2,
kConst = 1 << 3, // Only for external const factories.
// TODO(29841): Remove this line after the issue is resolved.
kRedirectingFactory = 1 << 4,
kExtensionMember = 1 << 5,
kIsNonNullableByDefault = 1 << 6,
kSyntheticProcedure = 1 << 7,
kInternalImplementation = 1 << 8,
kIsAbstractFieldAccessor = 1 << 9,
kInlineClassMember = 1 << 10,
kHasWeakTearoffReferencePragma = 1 << 11,
kExtensionMember = 1 << 4,
kIsNonNullableByDefault = 1 << 5,
kSyntheticProcedure = 1 << 6,
kInternalImplementation = 1 << 7,
kIsAbstractFieldAccessor = 1 << 8,
kInlineClassMember = 1 << 9,
kHasWeakTearoffReferencePragma = 1 << 10,
};
explicit ProcedureHelper(KernelReaderHelper* helper)
@ -633,9 +630,6 @@ class ProcedureHelper {
return stub_kind_ == kAbstractForwardingStubKind ||
stub_kind_ == kConcreteForwardingStubKind;
}
bool IsRedirectingFactory() const {
return (flags_ & kRedirectingFactory) != 0;
}
bool IsNoSuchMethodForwarder() const {
return stub_kind_ == kNoSuchMethodForwarderStubKind;
}

View file

@ -12,477 +12,477 @@ 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, 0x04168315) \
V(ClassID, getID, ClassIDgetID, 0xdc8b888a) \
V(::, identical, ObjectIdentical, 0x0407f735) \
V(ClassID, getID, ClassIDgetID, 0xdc7cfcaa) \
V(Object, Object., ObjectConstructor, 0xab6d6cfa) \
V(_List, ., ObjectArrayAllocate, 0x4c9d39e2) \
V(_List, []=, ObjectArraySetIndexed, 0x3a40deba) \
V(_GrowableList, ._withData, GrowableArrayAllocateWithData, 0x1947d8a1) \
V(_GrowableList, []=, GrowableArraySetIndexed, 0x3a40deba) \
V(_Record, get:_fieldNames, Record_fieldNames, 0x68e5459d) \
V(_Record, get:_numFields, Record_numFields, 0x7bc20792) \
V(_Record, get:_shape, Record_shape, 0x70e120f3) \
V(_Record, _fieldAt, Record_fieldAt, 0xb49cb873) \
V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x1623dc34) \
V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x177ffe2a) \
V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x2e40964f) \
V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x2fc1f6b9) \
V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x19182d0a) \
V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x195d6e7b) \
V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xf660bfff) \
V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x2c5b7959) \
V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe8f6a107) \
V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf82a3634) \
V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xaf2d0ce5) \
V(_TypedList, _getFloat64x2, ByteArrayBaseGetFloat64x2, 0x545d2cc0) \
V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x5573740b) \
V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xe18943a2) \
V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xaf59b748) \
V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xbae64027) \
V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xce22484f) \
V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xbddaab40) \
V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xb966a3b2) \
V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xc8cd4f7a) \
V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xda473205) \
V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2f362de0) \
V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x2359f8d2) \
V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38c6295a) \
V(_TypedList, _setFloat64x2, ByteArrayBaseSetFloat64x2, 0xbaead73f) \
V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5ce9025b) \
V(ByteData, ., ByteDataFactory, 0x45f72003) \
V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x60cef22c) \
V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0xb9d15ffa) \
V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x60cef22c) \
V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0xb9d15ffa) \
V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0x3187137c) \
V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x445611ca) \
V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x96008895) \
V(_List, ., ObjectArrayAllocate, 0x4c8eae02) \
V(_List, []=, ObjectArraySetIndexed, 0x3a3252da) \
V(_GrowableList, ._withData, GrowableArrayAllocateWithData, 0x19394cc1) \
V(_GrowableList, []=, GrowableArraySetIndexed, 0x3a3252da) \
V(_Record, get:_fieldNames, Record_fieldNames, 0x68d6b9bd) \
V(_Record, get:_numFields, Record_numFields, 0x7bb37bb2) \
V(_Record, get:_shape, Record_shape, 0x70d29513) \
V(_Record, _fieldAt, Record_fieldAt, 0xb48e2c93) \
V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x16155054) \
V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x1771724a) \
V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x2e320a6f) \
V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x2fb36ad9) \
V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x1909a12a) \
V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x194ee29b) \
V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xf652341f) \
V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x2c4ced79) \
V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe8e81527) \
V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf81baa54) \
V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xaf1e8105) \
V(_TypedList, _getFloat64x2, ByteArrayBaseGetFloat64x2, 0x544ea0e0) \
V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x5564e82b) \
V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xe17ab7c2) \
V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xaf4b2b68) \
V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xbad7b447) \
V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xce13bc6f) \
V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xbdcc1f60) \
V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xb95817d2) \
V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xc8bec39a) \
V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xda38a625) \
V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2f27a200) \
V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x234b6cf2) \
V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38b79d7a) \
V(_TypedList, _setFloat64x2, ByteArrayBaseSetFloat64x2, 0xbadc4b5f) \
V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5cda767b) \
V(ByteData, ., ByteDataFactory, 0x45e89423) \
V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x60c0664c) \
V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0xb9c2d41a) \
V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x60c0664c) \
V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0xb9c2d41a) \
V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0x3178879c) \
V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x444785ea) \
V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x95f1fcb5) \
V(_Uint8ClampedArrayView, ._, TypedData_Uint8ClampedArrayView_factory, \
0x05397869) \
V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x490e13db) \
V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x9ff8c632) \
V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0xe2e9aa79) \
V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x8682baa1) \
V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0x12c74eaf) \
V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x25c66efd) \
V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0xdc968c44) \
V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xcb765517) \
V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x665eaec0) \
V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x04b05d05) \
V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x42e25ba4) \
0x052aec89) \
V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x48ff87fb) \
V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x9fea3a52) \
V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0xe2db1e99) \
V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x86742ec1) \
V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0x12b8c2cf) \
V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x25b7e31d) \
V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0xdc880064) \
V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xcb67c937) \
V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x665022e0) \
V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x04a1d125) \
V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x42d3cfc4) \
V(_UnmodifiableByteDataView, ._, \
TypedData_UnmodifiableByteDataView_factory, 0x9afe180b) \
TypedData_UnmodifiableByteDataView_factory, 0x9aef8c2b) \
V(_UnmodifiableInt8ArrayView, ._, \
TypedData_UnmodifiableInt8ArrayView_factory, 0x4f2b458a) \
TypedData_UnmodifiableInt8ArrayView_factory, 0x4f1cb9aa) \
V(_UnmodifiableUint8ArrayView, ._, \
TypedData_UnmodifiableUint8ArrayView_factory, 0x44489049) \
TypedData_UnmodifiableUint8ArrayView_factory, 0x443a0469) \
V(_UnmodifiableUint8ClampedArrayView, ._, \
TypedData_UnmodifiableUint8ClampedArrayView_factory, 0x6a58f10d) \
TypedData_UnmodifiableUint8ClampedArrayView_factory, 0x6a4a652d) \
V(_UnmodifiableInt16ArrayView, ._, \
TypedData_UnmodifiableInt16ArrayView_factory, 0xb6e82d3a) \
TypedData_UnmodifiableInt16ArrayView_factory, 0xb6d9a15a) \
V(_UnmodifiableUint16ArrayView, ._, \
TypedData_UnmodifiableUint16ArrayView_factory, 0xa6dbb7d6) \
TypedData_UnmodifiableUint16ArrayView_factory, 0xa6cd2bf6) \
V(_UnmodifiableInt32ArrayView, ._, \
TypedData_UnmodifiableInt32ArrayView_factory, 0x48fd7ae4) \
TypedData_UnmodifiableInt32ArrayView_factory, 0x48eeef04) \
V(_UnmodifiableUint32ArrayView, ._, \
TypedData_UnmodifiableUint32ArrayView_factory, 0x9525b674) \
TypedData_UnmodifiableUint32ArrayView_factory, 0x95172a94) \
V(_UnmodifiableInt64ArrayView, ._, \
TypedData_UnmodifiableInt64ArrayView_factory, 0x7652d544) \
TypedData_UnmodifiableInt64ArrayView_factory, 0x76444964) \
V(_UnmodifiableUint64ArrayView, ._, \
TypedData_UnmodifiableUint64ArrayView_factory, 0x401bcd82) \
TypedData_UnmodifiableUint64ArrayView_factory, 0x400d41a2) \
V(_UnmodifiableFloat32ArrayView, ._, \
TypedData_UnmodifiableFloat32ArrayView_factory, 0x54240389) \
TypedData_UnmodifiableFloat32ArrayView_factory, 0x541577a9) \
V(_UnmodifiableFloat64ArrayView, ._, \
TypedData_UnmodifiableFloat64ArrayView_factory, 0xbf89ec6b) \
TypedData_UnmodifiableFloat64ArrayView_factory, 0xbf7b608b) \
V(_UnmodifiableFloat32x4ArrayView, ._, \
TypedData_UnmodifiableFloat32x4ArrayView_factory, 0x5f25ea9a) \
TypedData_UnmodifiableFloat32x4ArrayView_factory, 0x5f175eba) \
V(_UnmodifiableInt32x4ArrayView, ._, \
TypedData_UnmodifiableInt32x4ArrayView_factory, 0xf67af1b2) \
TypedData_UnmodifiableInt32x4ArrayView_factory, 0xf66c65d2) \
V(_UnmodifiableFloat64x2ArrayView, ._, \
TypedData_UnmodifiableFloat64x2ArrayView_factory, 0x6da96e1a) \
V(Int8List, ., TypedData_Int8Array_factory, 0x660dd888) \
V(Uint8List, ., TypedData_Uint8Array_factory, 0xede3f64f) \
V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x28063755) \
V(Int16List, ., TypedData_Int16Array_factory, 0xd0cd98f3) \
V(Uint16List, ., TypedData_Uint16Array_factory, 0x3cb5fb6a) \
V(Int32List, ., TypedData_Int32Array_factory, 0x1b8ff320) \
V(Uint32List, ., TypedData_Uint32Array_factory, 0x2b2f9a8b) \
V(Int64List, ., TypedData_Int64Array_factory, 0xfb71de2f) \
V(Uint64List, ., TypedData_Uint64Array_factory, 0xe3cfcff8) \
V(Float32List, ., TypedData_Float32Array_factory, 0xa39068fe) \
V(Float64List, ., TypedData_Float64Array_factory, 0xa0c64e91) \
V(Float32x4List, ., TypedData_Float32x4Array_factory, 0x0a7d7b88) \
V(Int32x4List, ., TypedData_Int32x4Array_factory, 0x5a17b46e) \
V(Float64x2List, ., TypedData_Float64x2Array_factory, 0xeccaff6a) \
V(::, _toClampedUint8, ConvertIntToClampedUint8, 0xd0f3aeb0) \
TypedData_UnmodifiableFloat64x2ArrayView_factory, 0x6d9ae23a) \
V(Int8List, ., TypedData_Int8Array_factory, 0x65ff4ca8) \
V(Uint8List, ., TypedData_Uint8Array_factory, 0xedd56a6f) \
V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x27f7ab75) \
V(Int16List, ., TypedData_Int16Array_factory, 0xd0bf0d13) \
V(Uint16List, ., TypedData_Uint16Array_factory, 0x3ca76f8a) \
V(Int32List, ., TypedData_Int32Array_factory, 0x1b816740) \
V(Uint32List, ., TypedData_Uint32Array_factory, 0x2b210eab) \
V(Int64List, ., TypedData_Int64Array_factory, 0xfb63524f) \
V(Uint64List, ., TypedData_Uint64Array_factory, 0xe3c14418) \
V(Float32List, ., TypedData_Float32Array_factory, 0xa381dd1e) \
V(Float64List, ., TypedData_Float64Array_factory, 0xa0b7c2b1) \
V(Float32x4List, ., TypedData_Float32x4Array_factory, 0x0a6eefa8) \
V(Int32x4List, ., TypedData_Int32x4Array_factory, 0x5a09288e) \
V(Float64x2List, ., TypedData_Float64x2Array_factory, 0xecbc738a) \
V(::, _toClampedUint8, ConvertIntToClampedUint8, 0xd0e522d0) \
V(::, copyRangeFromUint8ListToOneByteString, \
CopyRangeFromUint8ListToOneByteString, 0xcc5158c1) \
V(_StringBase, _interpolate, StringBaseInterpolate, 0x7c74b060) \
CopyRangeFromUint8ListToOneByteString, 0xcc42cce1) \
V(_StringBase, _interpolate, StringBaseInterpolate, 0x7c662480) \
V(_SuspendState, get:_functionData, SuspendState_getFunctionData, \
0x7290026e) \
0x7281768e) \
V(_SuspendState, set:_functionData, SuspendState_setFunctionData, \
0x2b6668ab) \
0x2b57dccb) \
V(_SuspendState, get:_thenCallback, SuspendState_getThenCallback, \
0x2b9efd21) \
0x2b907141) \
V(_SuspendState, set:_thenCallback, SuspendState_setThenCallback, \
0x753cb4de) \
0x752e28fe) \
V(_SuspendState, get:_errorCallback, SuspendState_getErrorCallback, \
0xaeca06ef) \
0xaebb7b0f) \
V(_SuspendState, set:_errorCallback, SuspendState_setErrorCallback, \
0xc40903ac) \
V(_SuspendState, _clone, SuspendState_clone, 0xae1a40a0) \
0xc3fa77cc) \
V(_SuspendState, _clone, SuspendState_clone, 0xae0bb4c0) \
V(_SuspendState, _createAsyncCallbacks, SuspendState_createAsyncCallbacks, \
0x86343257) \
0x8625a677) \
V(_SuspendState, _createAsyncStarCallback, \
SuspendState_createAsyncStarCallback, 0x98fb897c) \
V(_SuspendState, _resume, SuspendState_resume, 0x5d7a8489) \
V(_IntegerImplementation, toDouble, IntegerToDouble, 0x97728b46) \
V(_Double, _add, DoubleAdd, 0xea666327) \
V(_Double, _sub, DoubleSub, 0x28474c2e) \
V(_Double, _mul, DoubleMul, 0x1f98c76c) \
V(_Double, _div, DoubleDiv, 0x287d3791) \
V(_Double, _modulo, DoubleMod, 0xfdb397ef) \
V(_Double, ceil, DoubleCeilToInt, 0xcef8d7c5) \
V(_Double, ceilToDouble, DoubleCeilToDouble, 0x5f1bced9) \
V(_Double, floor, DoubleFloorToInt, 0x2a323f88) \
V(_Double, floorToDouble, DoubleFloorToDouble, 0x54b4cb48) \
V(_Double, roundToDouble, DoubleRoundToDouble, 0x5649ca00) \
V(_Double, toInt, DoubleToInteger, 0x676f20a9) \
V(_Double, truncateToDouble, DoubleTruncateToDouble, 0x62d48659) \
V(::, min, MathMin, 0x82e75ed3) \
V(::, max, MathMax, 0x4b2fa26c) \
V(::, _doublePow, MathDoublePow, 0xaec8f454) \
V(::, _intPow, MathIntPow, 0xab56ffda) \
V(::, _sin, MathSin, 0x17daca03) \
V(::, _cos, MathCos, 0xf4947d45) \
V(::, _tan, MathTan, 0xeb1a5537) \
V(::, _asin, MathAsin, 0x29e4d59e) \
V(::, _acos, MathAcos, 0x200aa0db) \
V(::, _atan, MathAtan, 0x10fa60f2) \
V(::, _atan2, MathAtan2, 0x58d4f153) \
V(::, _sqrt, MathSqrt, 0x03183390) \
V(::, _exp, MathExp, 0x00f4ffd0) \
V(::, _log, MathLog, 0x09ae8462) \
V(FinalizerBase, get:_allEntries, FinalizerBase_getAllEntries, 0xf03ff26b) \
V(FinalizerBase, set:_allEntries, FinalizerBase_setAllEntries, 0x8f0920e8) \
V(FinalizerBase, get:_detachments, FinalizerBase_getDetachments, 0x2f650f36) \
V(FinalizerBase, set:_detachments, FinalizerBase_setDetachments, 0x788f1df3) \
SuspendState_createAsyncStarCallback, 0x98ecfd9c) \
V(_SuspendState, _resume, SuspendState_resume, 0x5d6bf8a9) \
V(_IntegerImplementation, toDouble, IntegerToDouble, 0x9763ff66) \
V(_Double, _add, DoubleAdd, 0xea57d747) \
V(_Double, _sub, DoubleSub, 0x2838c04e) \
V(_Double, _mul, DoubleMul, 0x1f8a3b8c) \
V(_Double, _div, DoubleDiv, 0x286eabb1) \
V(_Double, _modulo, DoubleMod, 0xfda50c0f) \
V(_Double, ceil, DoubleCeilToInt, 0xceea4be5) \
V(_Double, ceilToDouble, DoubleCeilToDouble, 0x5f0d42f9) \
V(_Double, floor, DoubleFloorToInt, 0x2a23b3a8) \
V(_Double, floorToDouble, DoubleFloorToDouble, 0x54a63f68) \
V(_Double, roundToDouble, DoubleRoundToDouble, 0x563b3e20) \
V(_Double, toInt, DoubleToInteger, 0x676094c9) \
V(_Double, truncateToDouble, DoubleTruncateToDouble, 0x62c5fa79) \
V(::, min, MathMin, 0x82d8d2f3) \
V(::, max, MathMax, 0x4b21168c) \
V(::, _doublePow, MathDoublePow, 0xaeba6874) \
V(::, _intPow, MathIntPow, 0xab4873fa) \
V(::, _sin, MathSin, 0x17cc3e23) \
V(::, _cos, MathCos, 0xf485f165) \
V(::, _tan, MathTan, 0xeb0bc957) \
V(::, _asin, MathAsin, 0x29d649be) \
V(::, _acos, MathAcos, 0x1ffc14fb) \
V(::, _atan, MathAtan, 0x10ebd512) \
V(::, _atan2, MathAtan2, 0x58c66573) \
V(::, _sqrt, MathSqrt, 0x0309a7b0) \
V(::, _exp, MathExp, 0x00e673f0) \
V(::, _log, MathLog, 0x099ff882) \
V(FinalizerBase, get:_allEntries, FinalizerBase_getAllEntries, 0xf031668b) \
V(FinalizerBase, set:_allEntries, FinalizerBase_setAllEntries, 0x8efa9508) \
V(FinalizerBase, get:_detachments, FinalizerBase_getDetachments, 0x2f568356) \
V(FinalizerBase, set:_detachments, FinalizerBase_setDetachments, 0x78809213) \
V(FinalizerBase, _exchangeEntriesCollectedWithNull, \
FinalizerBase_exchangeEntriesCollectedWithNull, 0x6c9124fb) \
V(FinalizerBase, _setIsolate, FinalizerBase_setIsolate, 0xbcf7db91) \
FinalizerBase_exchangeEntriesCollectedWithNull, 0x6c82991b) \
V(FinalizerBase, _setIsolate, FinalizerBase_setIsolate, 0xbce94fb1) \
V(FinalizerBase, get:_isolateFinalizers, FinalizerBase_getIsolateFinalizers, \
0x70f53b2b) \
0x70e6af4b) \
V(FinalizerBase, set:_isolateFinalizers, FinalizerBase_setIsolateFinalizers, \
0xb3e66928) \
V(_FinalizerImpl, get:_callback, Finalizer_getCallback, 0x185ebcf8) \
V(_FinalizerImpl, set:_callback, Finalizer_setCallback, 0xad0b5e35) \
V(_NativeFinalizer, get:_callback, NativeFinalizer_getCallback, 0x5cb374f5) \
V(_NativeFinalizer, set:_callback, NativeFinalizer_setCallback, 0xb12268f2) \
V(FinalizerEntry, allocate, FinalizerEntry_allocate, 0xe0bad878) \
V(FinalizerEntry, get:value, FinalizerEntry_getValue, 0xf5c9b9d7) \
V(FinalizerEntry, get:detach, FinalizerEntry_getDetach, 0x171cd968) \
V(FinalizerEntry, get:token, FinalizerEntry_getToken, 0x04915a72) \
V(FinalizerEntry, set:token, FinalizerEntry_setToken, 0x63c96cef) \
V(FinalizerEntry, get:next, FinalizerEntry_getNext, 0x7102d7a4) \
0xb3d7dd48) \
V(_FinalizerImpl, get:_callback, Finalizer_getCallback, 0x18503118) \
V(_FinalizerImpl, set:_callback, Finalizer_setCallback, 0xacfcd255) \
V(_NativeFinalizer, get:_callback, NativeFinalizer_getCallback, 0x5ca4e915) \
V(_NativeFinalizer, set:_callback, NativeFinalizer_setCallback, 0xb113dd12) \
V(FinalizerEntry, allocate, FinalizerEntry_allocate, 0xe0ac4c98) \
V(FinalizerEntry, get:value, FinalizerEntry_getValue, 0xf5bb2df7) \
V(FinalizerEntry, get:detach, FinalizerEntry_getDetach, 0x170e4d88) \
V(FinalizerEntry, get:token, FinalizerEntry_getToken, 0x0482ce92) \
V(FinalizerEntry, set:token, FinalizerEntry_setToken, 0x63bae10f) \
V(FinalizerEntry, get:next, FinalizerEntry_getNext, 0x70f44bc4) \
V(FinalizerEntry, get:externalSize, FinalizerEntry_getExternalSize, \
0x47df4d22) \
V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x1845792b) \
V(Float32x4, Float32x4.zero, Float32x4Zero, 0xd3b64002) \
V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x13a552c3) \
V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x7ed59542) \
V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x50be8d8d) \
V(_Float32x4, shuffle, Float32x4Shuffle, 0xa7f1b7eb) \
V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0x79a0c2cc) \
V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x7c6b11ea) \
V(_Float32x4, equal, Float32x4Equal, 0x445aed76) \
V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x524d7d7f) \
V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x4e6e61b7) \
V(_Float32x4, lessThan, Float32x4LessThan, 0x4a18711d) \
V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x46775340) \
V(_Float32x4, notEqual, Float32x4NotEqual, 0x644f3543) \
V(_Float32x4, min, Float32x4Min, 0xe41e9e92) \
V(_Float32x4, max, Float32x4Max, 0xc64e2063) \
V(_Float32x4, scale, Float32x4Scale, 0xa3b74802) \
V(_Float32x4, sqrt, Float32x4Sqrt, 0xe4f6fab2) \
V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0xddd7f238) \
V(_Float32x4, reciprocal, Float32x4Reciprocal, 0xd4522272) \
V(_Float32x4, unary-, Float32x4Negate, 0xe6abc412) \
V(_Float32x4, abs, Float32x4Abs, 0xeb467e48) \
V(_Float32x4, clamp, Float32x4Clamp, 0x77cd71dd) \
V(_Float32x4, _withX, Float32x4WithX, 0xa3179faf) \
V(_Float32x4, _withY, Float32x4WithY, 0x9bb9b443) \
V(_Float32x4, _withZ, Float32x4WithZ, 0x97d62ea0) \
V(_Float32x4, _withW, Float32x4WithW, 0x9533225b) \
V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0xd858e051) \
V(Float64x2, Float64x2.zero, Float64x2Zero, 0x82948918) \
V(Float64x2, _Float64x2Splat, Float64x2Splat, 0x5b136bc4) \
V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0x6ea79c66) \
V(_Float64x2, get:x, Float64x2GetX, 0x3a398530) \
V(_Float64x2, get:y, Float64x2GetY, 0x27cae053) \
V(_Float64x2, unary-, Float64x2Negate, 0x958a0d28) \
V(_Float64x2, abs, Float64x2Abs, 0x9a24c75e) \
V(_Float64x2, clamp, Float64x2Clamp, 0xfddc1533) \
V(_Float64x2, sqrt, Float64x2Sqrt, 0x93d543c8) \
V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x7c6b11ea) \
V(_Float64x2, scale, Float64x2Scale, 0x52959118) \
V(_Float64x2, _withX, Float64x2WithX, 0x51f5e8c5) \
V(_Float64x2, _withY, Float64x2WithY, 0x4a97fd59) \
V(_Float64x2, min, Float64x2Min, 0x362edc52) \
V(_Float64x2, max, Float64x2Max, 0x185e5e23) \
V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa900bd30) \
V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0xf56c8fc8) \
V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x45727561) \
V(_Int32x4, get:flagX, Int32x4GetFlagX, 0xc29f03d8) \
V(_Int32x4, get:flagY, Int32x4GetFlagY, 0xde0f3ab8) \
V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xebb8d60b) \
V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xf4d8e84c) \
V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x7c6b11ea) \
V(_Int32x4, shuffle, Int32x4Shuffle, 0x406211d3) \
V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0x4fe8349c) \
V(_Int32x4, select, Int32x4Select, 0x68ca9fa0) \
V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xb7df0063) \
V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0xa8cf9ba6) \
V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0xa8058854) \
V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0xb333f958) \
V(_RawReceivePort, get:sendPort, ReceivePort_getSendPort, 0xe6bb706d) \
V(_RawReceivePort, get:_handler, ReceivePort_getHandler, 0xf1f36233) \
V(_RawReceivePort, set:_handler, ReceivePort_setHandler, 0x571c5330) \
V(_HashVMBase, get:_index, LinkedHashBase_getIndex, 0x882671dc) \
V(_HashVMBase, set:_index, LinkedHashBase_setIndex, 0xa2be9418) \
V(_HashVMBase, get:_data, LinkedHashBase_getData, 0x2c8b5e83) \
V(_HashVMBase, set:_data, LinkedHashBase_setData, 0x40f7efbf) \
V(_HashVMBase, get:_usedData, LinkedHashBase_getUsedData, 0x470893ed) \
V(_HashVMBase, set:_usedData, LinkedHashBase_setUsedData, 0xb3c887a9) \
V(_HashVMBase, get:_hashMask, LinkedHashBase_getHashMask, 0x4f0ec79c) \
V(_HashVMBase, set:_hashMask, LinkedHashBase_setHashMask, 0xbbcebb58) \
V(_HashVMBase, get:_deletedKeys, LinkedHashBase_getDeletedKeys, 0x510dc4a0) \
V(_HashVMBase, set:_deletedKeys, LinkedHashBase_setDeletedKeys, 0xbdcdb85c) \
0x47d0c142) \
V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x1836ed4b) \
V(Float32x4, Float32x4.zero, Float32x4Zero, 0xd3a7b422) \
V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x1396c6e3) \
V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x7ec70962) \
V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x50b001ad) \
V(_Float32x4, shuffle, Float32x4Shuffle, 0xa7e32c0b) \
V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0x799236ec) \
V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x7c5c860a) \
V(_Float32x4, equal, Float32x4Equal, 0x444c6196) \
V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x523ef19f) \
V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x4e5fd5d7) \
V(_Float32x4, lessThan, Float32x4LessThan, 0x4a09e53d) \
V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x4668c760) \
V(_Float32x4, notEqual, Float32x4NotEqual, 0x6440a963) \
V(_Float32x4, min, Float32x4Min, 0xe41012b2) \
V(_Float32x4, max, Float32x4Max, 0xc63f9483) \
V(_Float32x4, scale, Float32x4Scale, 0xa3a8bc22) \
V(_Float32x4, sqrt, Float32x4Sqrt, 0xe4e86ed2) \
V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0xddc96658) \
V(_Float32x4, reciprocal, Float32x4Reciprocal, 0xd4439692) \
V(_Float32x4, unary-, Float32x4Negate, 0xe69d3832) \
V(_Float32x4, abs, Float32x4Abs, 0xeb37f268) \
V(_Float32x4, clamp, Float32x4Clamp, 0x77bee5fd) \
V(_Float32x4, _withX, Float32x4WithX, 0xa30913cf) \
V(_Float32x4, _withY, Float32x4WithY, 0x9bab2863) \
V(_Float32x4, _withZ, Float32x4WithZ, 0x97c7a2c0) \
V(_Float32x4, _withW, Float32x4WithW, 0x9524967b) \
V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0xd84a5471) \
V(Float64x2, Float64x2.zero, Float64x2Zero, 0x8285fd38) \
V(Float64x2, _Float64x2Splat, Float64x2Splat, 0x5b04dfe4) \
V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0x6e991086) \
V(_Float64x2, get:x, Float64x2GetX, 0x3a2af950) \
V(_Float64x2, get:y, Float64x2GetY, 0x27bc5473) \
V(_Float64x2, unary-, Float64x2Negate, 0x957b8148) \
V(_Float64x2, abs, Float64x2Abs, 0x9a163b7e) \
V(_Float64x2, clamp, Float64x2Clamp, 0xfdcd8953) \
V(_Float64x2, sqrt, Float64x2Sqrt, 0x93c6b7e8) \
V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x7c5c860a) \
V(_Float64x2, scale, Float64x2Scale, 0x52870538) \
V(_Float64x2, _withX, Float64x2WithX, 0x51e75ce5) \
V(_Float64x2, _withY, Float64x2WithY, 0x4a897179) \
V(_Float64x2, min, Float64x2Min, 0x36205072) \
V(_Float64x2, max, Float64x2Max, 0x184fd243) \
V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa8f23150) \
V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0xf55e03e8) \
V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x4563e981) \
V(_Int32x4, get:flagX, Int32x4GetFlagX, 0xc29077f8) \
V(_Int32x4, get:flagY, Int32x4GetFlagY, 0xde00aed8) \
V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xebaa4a2b) \
V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xf4ca5c6c) \
V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x7c5c860a) \
V(_Int32x4, shuffle, Int32x4Shuffle, 0x405385f3) \
V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0x4fd9a8bc) \
V(_Int32x4, select, Int32x4Select, 0x68bc13c0) \
V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xb7d07483) \
V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0xa8c10fc6) \
V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0xa7f6fc74) \
V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0xb3256d78) \
V(_RawReceivePort, get:sendPort, ReceivePort_getSendPort, 0xe6ace48d) \
V(_RawReceivePort, get:_handler, ReceivePort_getHandler, 0xf1e4d653) \
V(_RawReceivePort, set:_handler, ReceivePort_setHandler, 0x570dc750) \
V(_HashVMBase, get:_index, LinkedHashBase_getIndex, 0x8817e5fc) \
V(_HashVMBase, set:_index, LinkedHashBase_setIndex, 0xa2b00838) \
V(_HashVMBase, get:_data, LinkedHashBase_getData, 0x2c7cd2a3) \
V(_HashVMBase, set:_data, LinkedHashBase_setData, 0x40e963df) \
V(_HashVMBase, get:_usedData, LinkedHashBase_getUsedData, 0x46fa080d) \
V(_HashVMBase, set:_usedData, LinkedHashBase_setUsedData, 0xb3b9fbc9) \
V(_HashVMBase, get:_hashMask, LinkedHashBase_getHashMask, 0x4f003bbc) \
V(_HashVMBase, set:_hashMask, LinkedHashBase_setHashMask, 0xbbc02f78) \
V(_HashVMBase, get:_deletedKeys, LinkedHashBase_getDeletedKeys, 0x50ff38c0) \
V(_HashVMBase, set:_deletedKeys, LinkedHashBase_setDeletedKeys, 0xbdbf2c7c) \
V(_HashVMImmutableBase, get:_data, ImmutableLinkedHashBase_getData, \
0x2c8b5e83) \
0x2c7cd2a3) \
V(_HashVMImmutableBase, get:_indexNullable, \
ImmutableLinkedHashBase_getIndex, 0xfd877bfb) \
ImmutableLinkedHashBase_getIndex, 0xfd78f01b) \
V(_HashVMImmutableBase, set:_index, \
ImmutableLinkedHashBase_setIndexStoreRelease, 0xa2be9418) \
V(_WeakProperty, get:key, WeakProperty_getKey, 0xde00e462) \
V(_WeakProperty, set:key, WeakProperty_setKey, 0x963a095f) \
V(_WeakProperty, get:value, WeakProperty_getValue, 0xd2f28aae) \
V(_WeakProperty, set:value, WeakProperty_setValue, 0x8b2bafab) \
V(_WeakReference, get:target, WeakReference_getTarget, 0xc990118a) \
V(_WeakReference, set:_target, WeakReference_setTarget, 0xc729697a) \
V(::, _classRangeCheck, ClassRangeCheck, 0xef3a447a) \
V(::, _abi, FfiAbi, 0x7c4ab3b4) \
V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x631b1071) \
V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x3ff5ae9c) \
V(::, _nativeEffect, NativeEffect, 0x537dce91) \
V(::, _loadAbiSpecificInt, FfiLoadAbiSpecificInt, 0x7807e872) \
V(::, _loadAbiSpecificIntAtIndex, FfiLoadAbiSpecificIntAtIndex, 0x6aa4cab4) \
V(::, _loadInt8, FfiLoadInt8, 0x0f04dfd6) \
V(::, _loadInt16, FfiLoadInt16, 0xec44312d) \
V(::, _loadInt32, FfiLoadInt32, 0xee223fc3) \
V(::, _loadInt64, FfiLoadInt64, 0xdeefbfa3) \
V(::, _loadUint8, FfiLoadUint8, 0xe14e1cd1) \
V(::, _loadUint16, FfiLoadUint16, 0x0cd65cea) \
V(::, _loadUint32, FfiLoadUint32, 0xf66e9055) \
V(::, _loadUint64, FfiLoadUint64, 0x0505fdcc) \
V(::, _loadFloat, FfiLoadFloat, 0xf8d9809c) \
V(::, _loadFloatUnaligned, FfiLoadFloatUnaligned, 0xc8c8dc3e) \
V(::, _loadDouble, FfiLoadDouble, 0xf70cc258) \
V(::, _loadDoubleUnaligned, FfiLoadDoubleUnaligned, 0xc99eb978) \
V(::, _loadPointer, FfiLoadPointer, 0x9a080d03) \
V(::, _storeAbiSpecificInt, FfiStoreAbiSpecificInt, 0xc70954c0) \
V(::, _storeAbiSpecificIntAtIndex, FfiStoreAbiSpecificIntAtIndex, 0xc64efe4b)\
V(::, _storeInt8, FfiStoreInt8, 0xdf50af0c) \
V(::, _storeInt16, FfiStoreInt16, 0xd84df332) \
V(::, _storeInt32, FfiStoreInt32, 0xfbe62c5d) \
V(::, _storeInt64, FfiStoreInt64, 0xf1d40d7a) \
V(::, _storeUint8, FfiStoreUint8, 0x056dd2f6) \
V(::, _storeUint16, FfiStoreUint16, 0xe2fdaade) \
V(::, _storeUint32, FfiStoreUint32, 0xe5d7e8c5) \
V(::, _storeUint64, FfiStoreUint64, 0xe2d93239) \
V(::, _storeFloat, FfiStoreFloat, 0x6484ecbd) \
V(::, _storeFloatUnaligned, FfiStoreFloatUnaligned, 0x600a8e42) \
V(::, _storeDouble, FfiStoreDouble, 0x429988a3) \
V(::, _storeDoubleUnaligned, FfiStoreDoubleUnaligned, 0x3dced39a) \
V(::, _storePointer, FfiStorePointer, 0x8b68e158) \
V(::, _fromAddress, FfiFromAddress, 0x811e1e5f) \
V(Pointer, get:address, FfiGetAddress, 0x7cde83fd) \
V(::, _asExternalTypedDataInt8, FfiAsExternalTypedDataInt8, 0x768a02d7) \
V(::, _asExternalTypedDataInt16, FfiAsExternalTypedDataInt16, 0xd09cf605) \
V(::, _asExternalTypedDataInt32, FfiAsExternalTypedDataInt32, 0x38248585) \
V(::, _asExternalTypedDataInt64, FfiAsExternalTypedDataInt64, 0xafaa443a) \
V(::, _asExternalTypedDataUint8, FfiAsExternalTypedDataUint8, 0x35228473) \
V(::, _asExternalTypedDataUint16, FfiAsExternalTypedDataUint16, 0x89a51a79) \
V(::, _asExternalTypedDataUint32, FfiAsExternalTypedDataUint32, 0xd272d880) \
V(::, _asExternalTypedDataUint64, FfiAsExternalTypedDataUint64, 0x06be6e04) \
V(::, _asExternalTypedDataFloat, FfiAsExternalTypedDataFloat, 0x6f465a4b) \
V(::, _asExternalTypedDataDouble, FfiAsExternalTypedDataDouble, 0x40cdd620) \
V(::, _getNativeField, GetNativeField, 0xa0139b85) \
V(::, reachabilityFence, ReachabilityFence, 0x730f2b7f) \
V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xb99d2ee1) \
V(_Future, timeout, FutureTimeout, 0xa0f743d4) \
V(Future, wait, FutureWait, 0x295fe957) \
V(_RootZone, runUnary, RootZoneRunUnary, 0x64397ecb) \
V(_FutureListener, handleValue, FutureListenerHandleValue, 0xec25d1b2) \
V(::, has63BitSmis, Has63BitSmis, 0xf61b56f1) \
V(::, get:extensionStreamHasListener, ExtensionStreamHasListener, 0xfab46343)\
V(_Smi, get:hashCode, Smi_hashCode, 0x75e0ccd2) \
V(_Mint, get:hashCode, Mint_hashCode, 0x75e0ccd2) \
V(_Double, get:hashCode, Double_hashCode, 0x75e0ccd2) \
V(::, _memCopy, MemCopy, 0x274f4816) \
ImmutableLinkedHashBase_setIndexStoreRelease, 0xa2b00838) \
V(_WeakProperty, get:key, WeakProperty_getKey, 0xddf25882) \
V(_WeakProperty, set:key, WeakProperty_setKey, 0x962b7d7f) \
V(_WeakProperty, get:value, WeakProperty_getValue, 0xd2e3fece) \
V(_WeakProperty, set:value, WeakProperty_setValue, 0x8b1d23cb) \
V(_WeakReference, get:target, WeakReference_getTarget, 0xc98185aa) \
V(_WeakReference, set:_target, WeakReference_setTarget, 0xc71add9a) \
V(::, _classRangeCheck, ClassRangeCheck, 0xef2bb89a) \
V(::, _abi, FfiAbi, 0x7c3c27d4) \
V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x630c8491) \
V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x3fe722bc) \
V(::, _nativeEffect, NativeEffect, 0x536f42b1) \
V(::, _loadAbiSpecificInt, FfiLoadAbiSpecificInt, 0x77f95c92) \
V(::, _loadAbiSpecificIntAtIndex, FfiLoadAbiSpecificIntAtIndex, 0x6a963ed4) \
V(::, _loadInt8, FfiLoadInt8, 0x0ef653f6) \
V(::, _loadInt16, FfiLoadInt16, 0xec35a54d) \
V(::, _loadInt32, FfiLoadInt32, 0xee13b3e3) \
V(::, _loadInt64, FfiLoadInt64, 0xdee133c3) \
V(::, _loadUint8, FfiLoadUint8, 0xe13f90f1) \
V(::, _loadUint16, FfiLoadUint16, 0x0cc7d10a) \
V(::, _loadUint32, FfiLoadUint32, 0xf6600475) \
V(::, _loadUint64, FfiLoadUint64, 0x04f771ec) \
V(::, _loadFloat, FfiLoadFloat, 0xf8caf4bc) \
V(::, _loadFloatUnaligned, FfiLoadFloatUnaligned, 0xc8ba505e) \
V(::, _loadDouble, FfiLoadDouble, 0xf6fe3678) \
V(::, _loadDoubleUnaligned, FfiLoadDoubleUnaligned, 0xc9902d98) \
V(::, _loadPointer, FfiLoadPointer, 0x99f98123) \
V(::, _storeAbiSpecificInt, FfiStoreAbiSpecificInt, 0xc6fac8e0) \
V(::, _storeAbiSpecificIntAtIndex, FfiStoreAbiSpecificIntAtIndex, 0xc640726b)\
V(::, _storeInt8, FfiStoreInt8, 0xdf42232c) \
V(::, _storeInt16, FfiStoreInt16, 0xd83f6752) \
V(::, _storeInt32, FfiStoreInt32, 0xfbd7a07d) \
V(::, _storeInt64, FfiStoreInt64, 0xf1c5819a) \
V(::, _storeUint8, FfiStoreUint8, 0x055f4716) \
V(::, _storeUint16, FfiStoreUint16, 0xe2ef1efe) \
V(::, _storeUint32, FfiStoreUint32, 0xe5c95ce5) \
V(::, _storeUint64, FfiStoreUint64, 0xe2caa659) \
V(::, _storeFloat, FfiStoreFloat, 0x647660dd) \
V(::, _storeFloatUnaligned, FfiStoreFloatUnaligned, 0x5ffc0262) \
V(::, _storeDouble, FfiStoreDouble, 0x428afcc3) \
V(::, _storeDoubleUnaligned, FfiStoreDoubleUnaligned, 0x3dc047ba) \
V(::, _storePointer, FfiStorePointer, 0x8b5a5578) \
V(::, _fromAddress, FfiFromAddress, 0x810f927f) \
V(Pointer, get:address, FfiGetAddress, 0x7ccff81d) \
V(::, _asExternalTypedDataInt8, FfiAsExternalTypedDataInt8, 0x767b76f7) \
V(::, _asExternalTypedDataInt16, FfiAsExternalTypedDataInt16, 0xd08e6a25) \
V(::, _asExternalTypedDataInt32, FfiAsExternalTypedDataInt32, 0x3815f9a5) \
V(::, _asExternalTypedDataInt64, FfiAsExternalTypedDataInt64, 0xaf9bb85a) \
V(::, _asExternalTypedDataUint8, FfiAsExternalTypedDataUint8, 0x3513f893) \
V(::, _asExternalTypedDataUint16, FfiAsExternalTypedDataUint16, 0x89968e99) \
V(::, _asExternalTypedDataUint32, FfiAsExternalTypedDataUint32, 0xd2644ca0) \
V(::, _asExternalTypedDataUint64, FfiAsExternalTypedDataUint64, 0x06afe224) \
V(::, _asExternalTypedDataFloat, FfiAsExternalTypedDataFloat, 0x6f37ce6b) \
V(::, _asExternalTypedDataDouble, FfiAsExternalTypedDataDouble, 0x40bf4a40) \
V(::, _getNativeField, GetNativeField, 0xa0050fa5) \
V(::, reachabilityFence, ReachabilityFence, 0x73009f9f) \
V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xb98ea301) \
V(_Future, timeout, FutureTimeout, 0xa0e8b7f4) \
V(Future, wait, FutureWait, 0x29515d77) \
V(_RootZone, runUnary, RootZoneRunUnary, 0x642af2eb) \
V(_FutureListener, handleValue, FutureListenerHandleValue, 0xec1745d2) \
V(::, has63BitSmis, Has63BitSmis, 0xf60ccb11) \
V(::, get:extensionStreamHasListener, ExtensionStreamHasListener, 0xfaa5d763)\
V(_Smi, get:hashCode, Smi_hashCode, 0x75d240f2) \
V(_Mint, get:hashCode, Mint_hashCode, 0x75d240f2) \
V(_Double, get:hashCode, Double_hashCode, 0x75d240f2) \
V(::, _memCopy, MemCopy, 0x2740bc36) \
// List of intrinsics:
// (class-name, function-name, intrinsification method, fingerprint).
#define CORE_LIB_INTRINSIC_LIST(V) \
V(_Smi, get:bitLength, Smi_bitLength, 0x7ab50ceb) \
V(_BigIntImpl, _lsh, Bigint_lsh, 0x3fe316e2) \
V(_BigIntImpl, _rsh, Bigint_rsh, 0xde13d61f) \
V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x2ac27a31) \
V(_BigIntImpl, _absSub, Bigint_absSub, 0x710dc9ab) \
V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0x3d567bfd) \
V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x8fb49645) \
V(_Smi, get:bitLength, Smi_bitLength, 0x7aa6810b) \
V(_BigIntImpl, _lsh, Bigint_lsh, 0x3fd48b02) \
V(_BigIntImpl, _rsh, Bigint_rsh, 0xde054a3f) \
V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x2ab3ee51) \
V(_BigIntImpl, _absSub, Bigint_absSub, 0x70ff3dcb) \
V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0x3d47f01d) \
V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x8fa60a65) \
V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit, \
0x16d58948) \
V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0xdc9e8f54) \
V(_Double, >, Double_greaterThan, 0x7b10d007) \
V(_Double, >=, Double_greaterEqualThan, 0x4abd1f73) \
V(_Double, <, Double_lessThan, 0xd3188b74) \
V(_Double, <=, Double_lessEqualThan, 0x0267bd55) \
V(_Double, ==, Double_equal, 0x2782d9ef) \
V(_Double, +, Double_add, 0xa7e5295f) \
V(_Double, -, Double_sub, 0x9ad235b0) \
V(_Double, *, Double_mul, 0xdc593fad) \
V(_Double, /, Double_div, 0xd287cde9) \
V(_Double, get:isNaN, Double_getIsNaN, 0xd4890713) \
V(_Double, get:isInfinite, Double_getIsInfinite, 0xc4facbd2) \
V(_Double, get:isNegative, Double_getIsNegative, 0xd4715091) \
V(_Double, _mulFromInteger, Double_mulFromInteger, 0xeceed66f) \
V(_Double, .fromInteger, DoubleFromInteger, 0x7d0fd999) \
V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x9911d549) \
V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x91dd880f) \
V(Object, ==, ObjectEquals, 0x46587030) \
V(Object, get:runtimeType, ObjectRuntimeType, 0x0381c851) \
V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xce4e6295) \
V(_StringBase, get:hashCode, String_getHashCode, 0x75e0d454) \
V(_StringBase, get:_identityHashCode, String_identityHash, 0x47a56912) \
V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0x9876dd53) \
V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0x853d4272) \
V(_StringBase, [], StringBaseCharAt, 0xd06fc6bf) \
V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x75e0d454) \
0x16c6fd68) \
V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0xdc900374) \
V(_Double, >, Double_greaterThan, 0x7b024427) \
V(_Double, >=, Double_greaterEqualThan, 0x4aae9393) \
V(_Double, <, Double_lessThan, 0xd309ff94) \
V(_Double, <=, Double_lessEqualThan, 0x02593175) \
V(_Double, ==, Double_equal, 0x27744e0f) \
V(_Double, +, Double_add, 0xa7d69d7f) \
V(_Double, -, Double_sub, 0x9ac3a9d0) \
V(_Double, *, Double_mul, 0xdc4ab3cd) \
V(_Double, /, Double_div, 0xd2794209) \
V(_Double, get:isNaN, Double_getIsNaN, 0xd47a7b33) \
V(_Double, get:isInfinite, Double_getIsInfinite, 0xc4ec3ff2) \
V(_Double, get:isNegative, Double_getIsNegative, 0xd462c4b1) \
V(_Double, _mulFromInteger, Double_mulFromInteger, 0xece04a8f) \
V(_Double, .fromInteger, DoubleFromInteger, 0x7d014db9) \
V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x99034969) \
V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x91cefc2f) \
V(Object, ==, ObjectEquals, 0x4649e450) \
V(Object, get:runtimeType, ObjectRuntimeType, 0x03733c71) \
V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xce3fd6b5) \
V(_StringBase, get:hashCode, String_getHashCode, 0x75d24874) \
V(_StringBase, get:_identityHashCode, String_identityHash, 0x4796dd32) \
V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0x98685173) \
V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0x852eb692) \
V(_StringBase, [], StringBaseCharAt, 0xd0613adf) \
V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x75d24874) \
V(_OneByteString, _substringUncheckedNative, \
OneByteString_substringUnchecked, 0x9b18195e) \
V(_OneByteString, ==, OneByteString_equality, 0x4ea9ddc9) \
V(_TwoByteString, ==, TwoByteString_equality, 0x4ea9ddc9) \
V(_AbstractType, get:hashCode, AbstractType_getHashCode, 0x75e0d454) \
V(_AbstractType, ==, AbstractType_equality, 0x465868ae) \
V(_Type, ==, Type_equality, 0x465868ae) \
V(::, _getHash, Object_getHash, 0xc60ff758) \
OneByteString_substringUnchecked, 0x9b098d7e) \
V(_OneByteString, ==, OneByteString_equality, 0x4e9b51e9) \
V(_TwoByteString, ==, TwoByteString_equality, 0x4e9b51e9) \
V(_AbstractType, get:hashCode, AbstractType_getHashCode, 0x75d24874) \
V(_AbstractType, ==, AbstractType_equality, 0x4649dcce) \
V(_Type, ==, Type_equality, 0x4649dcce) \
V(::, _getHash, Object_getHash, 0xc6016b78) \
#define CORE_INTEGER_LIB_INTRINSIC_LIST(V) \
V(_IntegerImplementation, >, Integer_greaterThan, 0xd9df6cdb) \
V(_IntegerImplementation, ==, Integer_equal, 0xe96bfe0a) \
V(_IntegerImplementation, >, Integer_greaterThan, 0xd9d0e0fb) \
V(_IntegerImplementation, ==, Integer_equal, 0xe95d722a) \
V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger, \
0x710f18c2) \
V(_IntegerImplementation, <, Integer_lessThan, 0xd3188b74) \
V(_IntegerImplementation, <=, Integer_lessEqualThan, 0x0267bd55) \
V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x4abd1f73) \
V(_IntegerImplementation, <<, Integer_shl, 0x2d33c9fb) \
0x71008ce2) \
V(_IntegerImplementation, <, Integer_lessThan, 0xd309ff94) \
V(_IntegerImplementation, <=, Integer_lessEqualThan, 0x02593175) \
V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x4aae9393) \
V(_IntegerImplementation, <<, Integer_shl, 0x2d253e1b) \
#define GRAPH_TYPED_DATA_INTRINSICS_LIST(V) \
V(_Int8List, [], Int8ArrayGetIndexed, 0xb8b9bd6e) \
V(_Int8List, []=, Int8ArraySetIndexed, 0xd840a10f) \
V(_Uint8List, [], Uint8ArrayGetIndexed, 0x1e32412e) \
V(_Uint8List, []=, Uint8ArraySetIndexed, 0x24cfacd3) \
V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x1e32412e) \
V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x24cfacd3) \
V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x1e32412e) \
V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x1acf6273) \
V(_Int8List, [], Int8ArrayGetIndexed, 0xb8ab318e) \
V(_Int8List, []=, Int8ArraySetIndexed, 0xd832152f) \
V(_Uint8List, [], Uint8ArrayGetIndexed, 0x1e23b54e) \
V(_Uint8List, []=, Uint8ArraySetIndexed, 0x24c120f3) \
V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x1e23b54e) \
V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x24c120f3) \
V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x1e23b54e) \
V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x1ac0d693) \
V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed, \
0x1e32412e) \
0x1e23b54e) \
V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed, \
0x1acf6273) \
V(_Int16List, [], Int16ArrayGetIndexed, 0x98b81cce) \
V(_Int16List, []=, Int16ArraySetIndexed, 0x68c0649a) \
V(_Uint16List, [], Uint16ArrayGetIndexed, 0x7c90f8ce) \
V(_Uint16List, []=, Uint16ArraySetIndexed, 0x51030c11) \
V(_Int32List, [], Int32ArrayGetIndexed, 0x9a55c26d) \
V(_Int32List, []=, Int32ArraySetIndexed, 0x46f4e139) \
V(_Uint32List, [], Uint32ArrayGetIndexed, 0xe9a8280d) \
V(_Uint32List, []=, Uint32ArraySetIndexed, 0x329855b9) \
V(_Int64List, [], Int64ArrayGetIndexed, 0xd31e1cad) \
V(_Int64List, []=, Int64ArraySetIndexed, 0xa7a99b0f) \
V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0fe2822d) \
V(_Uint64List, []=, Uint64ArraySetIndexed, 0x730b0c47) \
V(_Float64List, [], Float64ArrayGetIndexed, 0x0cdaecf4) \
V(_Float64List, []=, Float64ArraySetIndexed, 0xa667d86d) \
V(_Float32List, [], Float32ArrayGetIndexed, 0xe2d8ee14) \
V(_Float32List, []=, Float32ArraySetIndexed, 0x01b6359b) \
V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xe498ecad) \
V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x86062148) \
V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfa11b525) \
V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x6f547dd8) \
V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0x2e5b2fd7) \
V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x75dbc6f0) \
V(_TypedListBase, get:length, TypedListBaseLength, 0x5850f06b) \
V(_ByteDataView, get:length, ByteDataViewLength, 0x5850f06b) \
V(_Float32x4, get:x, Float32x4GetX, 0x3a398530) \
V(_Float32x4, get:y, Float32x4GetY, 0x27cae053) \
V(_Float32x4, get:z, Float32x4GetZ, 0x5d964be9) \
V(_Float32x4, get:w, Float32x4GetW, 0x3fd6906b) \
V(_Float32x4, *, Float32x4Mul, 0xe5507c87) \
V(_Float32x4, /, Float32x4Div, 0xc09f2f62) \
V(_Float32x4, -, Float32x4Sub, 0xdd326c4a) \
V(_Float32x4, +, Float32x4Add, 0xb7f9a1d9) \
V(_Float64x2, *, Float64x2Mul, 0x3760b686) \
V(_Float64x2, /, Float64x2Div, 0x12af6d22) \
V(_Float64x2, -, Float64x2Sub, 0x2f42a649) \
V(_Float64x2, +, Float64x2Add, 0x0a09dbd8) \
0x1ac0d693) \
V(_Int16List, [], Int16ArrayGetIndexed, 0x98a990ee) \
V(_Int16List, []=, Int16ArraySetIndexed, 0x68b1d8ba) \
V(_Uint16List, [], Uint16ArrayGetIndexed, 0x7c826cee) \
V(_Uint16List, []=, Uint16ArraySetIndexed, 0x50f48031) \
V(_Int32List, [], Int32ArrayGetIndexed, 0x9a47368d) \
V(_Int32List, []=, Int32ArraySetIndexed, 0x46e65559) \
V(_Uint32List, [], Uint32ArrayGetIndexed, 0xe9999c2d) \
V(_Uint32List, []=, Uint32ArraySetIndexed, 0x3289c9d9) \
V(_Int64List, [], Int64ArrayGetIndexed, 0xd30f90cd) \
V(_Int64List, []=, Int64ArraySetIndexed, 0xa79b0f2f) \
V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0fd3f64d) \
V(_Uint64List, []=, Uint64ArraySetIndexed, 0x72fc8067) \
V(_Float64List, [], Float64ArrayGetIndexed, 0x0ccc6114) \
V(_Float64List, []=, Float64ArraySetIndexed, 0xa6594c8d) \
V(_Float32List, [], Float32ArrayGetIndexed, 0xe2ca6234) \
V(_Float32List, []=, Float32ArraySetIndexed, 0x01a7a9bb) \
V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xe48a60cd) \
V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x85f79568) \
V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfa032945) \
V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x6f45f1f8) \
V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0x2e4ca3f7) \
V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x75cd3b10) \
V(_TypedListBase, get:length, TypedListBaseLength, 0x5842648b) \
V(_ByteDataView, get:length, ByteDataViewLength, 0x5842648b) \
V(_Float32x4, get:x, Float32x4GetX, 0x3a2af950) \
V(_Float32x4, get:y, Float32x4GetY, 0x27bc5473) \
V(_Float32x4, get:z, Float32x4GetZ, 0x5d87c009) \
V(_Float32x4, get:w, Float32x4GetW, 0x3fc8048b) \
V(_Float32x4, *, Float32x4Mul, 0xe541f0a7) \
V(_Float32x4, /, Float32x4Div, 0xc090a382) \
V(_Float32x4, -, Float32x4Sub, 0xdd23e06a) \
V(_Float32x4, +, Float32x4Add, 0xb7eb15f9) \
V(_Float64x2, *, Float64x2Mul, 0x37522aa6) \
V(_Float64x2, /, Float64x2Div, 0x12a0e142) \
V(_Float64x2, -, Float64x2Sub, 0x2f341a69) \
V(_Float64x2, +, Float64x2Add, 0x09fb4ff8) \
#define GRAPH_CORE_INTRINSICS_LIST(V) \
V(_Array, get:length, ObjectArrayLength, 0x5850f06b) \
V(_Array, [], ObjectArrayGetIndexed, 0x78f4f491) \
V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xe62fb5f0) \
V(_GrowableList, get:length, GrowableArrayLength, 0x5850f06b) \
V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x7d9f9bf2) \
V(_GrowableList, _setData, GrowableArraySetData, 0xbdda401b) \
V(_GrowableList, _setLength, GrowableArraySetLength, 0xcc1bf9b6) \
V(_GrowableList, [], GrowableArrayGetIndexed, 0x78f4f491) \
V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x514b032f) \
V(_StringBase, get:length, StringBaseLength, 0x5850f06b) \
V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0x17f90910) \
V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0x17f90910) \
V(_Array, get:length, ObjectArrayLength, 0x5842648b) \
V(_Array, [], ObjectArrayGetIndexed, 0x78e668b1) \
V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xe6212a10) \
V(_GrowableList, get:length, GrowableArrayLength, 0x5842648b) \
V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x7d911012) \
V(_GrowableList, _setData, GrowableArraySetData, 0xbdcbb43b) \
V(_GrowableList, _setLength, GrowableArraySetLength, 0xcc0d6dd6) \
V(_GrowableList, [], GrowableArrayGetIndexed, 0x78e668b1) \
V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x513c774f) \
V(_StringBase, get:length, StringBaseLength, 0x5842648b) \
V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0x17ea7d30) \
V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0x17ea7d30) \
V(_ExternalOneByteString, codeUnitAt, ExternalOneByteStringCodeUnitAt, \
0x17f90910) \
0x17ea7d30) \
V(_ExternalTwoByteString, codeUnitAt, ExternalTwoByteStringCodeUnitAt, \
0x17f90910) \
V(_Smi, ~, Smi_bitNegate, 0x8254f8dc) \
V(_IntegerImplementation, +, Integer_add, 0x6f155e4c) \
V(_IntegerImplementation, -, Integer_sub, 0x631e6d3d) \
V(_IntegerImplementation, *, Integer_mul, 0x468dc1da) \
V(_IntegerImplementation, %, Integer_mod, 0xd45663f4) \
V(_IntegerImplementation, ~/, Integer_truncDivide, 0x8d08b660) \
V(_IntegerImplementation, unary-, Integer_negate, 0x915e0453) \
V(_IntegerImplementation, &, Integer_bitAnd, 0x42624549) \
V(_IntegerImplementation, |, Integer_bitOr, 0x460cbf01) \
V(_IntegerImplementation, ^, Integer_bitXor, 0x8efd8808) \
V(_IntegerImplementation, >>, Integer_sar, 0x49e484a0) \
V(_IntegerImplementation, >>>, Integer_shr, 0x2b5ac102) \
V(_Double, unary-, DoubleFlipSignBit, 0x3d39082b) \
0x17ea7d30) \
V(_Smi, ~, Smi_bitNegate, 0x82466cfc) \
V(_IntegerImplementation, +, Integer_add, 0x6f06d26c) \
V(_IntegerImplementation, -, Integer_sub, 0x630fe15d) \
V(_IntegerImplementation, *, Integer_mul, 0x467f35fa) \
V(_IntegerImplementation, %, Integer_mod, 0xd447d814) \
V(_IntegerImplementation, ~/, Integer_truncDivide, 0x8cfa2a80) \
V(_IntegerImplementation, unary-, Integer_negate, 0x914f7873) \
V(_IntegerImplementation, &, Integer_bitAnd, 0x4253b969) \
V(_IntegerImplementation, |, Integer_bitOr, 0x45fe3321) \
V(_IntegerImplementation, ^, Integer_bitXor, 0x8eeefc28) \
V(_IntegerImplementation, >>, Integer_sar, 0x49d5f8c0) \
V(_IntegerImplementation, >>>, Integer_shr, 0x2b4c3522) \
V(_Double, unary-, DoubleFlipSignBit, 0x3d2a7c4b) \
#define GRAPH_INTRINSICS_LIST(V) \
GRAPH_CORE_INTRINSICS_LIST(V) \
GRAPH_TYPED_DATA_INTRINSICS_LIST(V) \
#define DEVELOPER_LIB_INTRINSIC_LIST(V) \
V(::, _getDefaultTag, UserTag_defaultTag, 0x6c19c8a5) \
V(::, _getCurrentTag, Profiler_getCurrentTag, 0x70ead08e) \
V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0xc97aafb3) \
V(::, _getNextTaskId, Timeline_getNextTaskId, 0x5b2b0b0b) \
V(::, _getDefaultTag, UserTag_defaultTag, 0x6c0b3cc5) \
V(::, _getCurrentTag, Profiler_getCurrentTag, 0x70dc44ae) \
V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0xc96c23d3) \
V(::, _getNextTaskId, Timeline_getNextTaskId, 0x5b1c7f2b) \
#define INTERNAL_LIB_INTRINSIC_LIST(V) \
V(::, allocateOneByteString, AllocateOneByteString, 0x9e7745d5) \
V(::, allocateTwoByteString, AllocateTwoByteString, 0xa63c8172) \
V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xd8729161) \
V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xcfc7982a) \
V(::, allocateOneByteString, AllocateOneByteString, 0x9e68b9f5) \
V(::, allocateTwoByteString, AllocateTwoByteString, 0xa62df592) \
V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xd8640581) \
V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xcfb90c4a) \
#define ALL_INTRINSICS_NO_INTEGER_LIB_LIST(V) \
CORE_LIB_INTRINSIC_LIST(V) \
@ -500,64 +500,64 @@ namespace dart {
// A list of core functions that internally dispatch based on received id.
#define POLYMORPHIC_TARGET_LIST(V) \
V(_StringBase, [], StringBaseCharAt, 0xd06fc6bf) \
V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x1623dc34) \
V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x177ffe2a) \
V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x2e40964f) \
V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x2fc1f6b9) \
V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x19182d0a) \
V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x195d6e7b) \
V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xf660bfff) \
V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x2c5b7959) \
V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe8f6a107) \
V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf82a3634) \
V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xaf2d0ce5) \
V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x5573740b) \
V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xe18943a2) \
V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xaf59b748) \
V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xbae64027) \
V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xce22484f) \
V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xbddaab40) \
V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xb966a3b2) \
V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xc8cd4f7a) \
V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xda473205) \
V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2f362de0) \
V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x2359f8d2) \
V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38c6295a) \
V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5ce9025b) \
V(Object, get:runtimeType, ObjectRuntimeType, 0x0381c851)
V(_StringBase, [], StringBaseCharAt, 0xd0613adf) \
V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x16155054) \
V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x1771724a) \
V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x2e320a6f) \
V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0x2fb36ad9) \
V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0x1909a12a) \
V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0x194ee29b) \
V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xf652341f) \
V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0x2c4ced79) \
V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe8e81527) \
V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf81baa54) \
V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xaf1e8105) \
V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x5564e82b) \
V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xe17ab7c2) \
V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xaf4b2b68) \
V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xbad7b447) \
V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xce13bc6f) \
V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xbdcc1f60) \
V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xb95817d2) \
V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xc8bec39a) \
V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xda38a625) \
V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2f27a200) \
V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x234b6cf2) \
V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38b79d7a) \
V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5cda767b) \
V(Object, get:runtimeType, ObjectRuntimeType, 0x03733c71)
// List of recognized list factories:
// (factory-name-symbol, class-name-string, constructor-name-string,
// result-cid, fingerprint).
#define RECOGNIZED_LIST_FACTORY_LIST(V) \
V(_ListFactory, _List, ., kArrayCid, 0x4c9d39e2) \
V(_ListFilledFactory, _List, .filled, kArrayCid, 0x9283f611) \
V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x429324ae) \
V(_ListFactory, _List, ., kArrayCid, 0x4c8eae02) \
V(_ListFilledFactory, _List, .filled, kArrayCid, 0x92756a31) \
V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x428498ce) \
V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid, \
0x3c9eec4d) \
0x3c90606d) \
V(_GrowableListFilledFactory, _GrowableList, .filled, \
kGrowableObjectArrayCid, 0xeaf01791) \
kGrowableObjectArrayCid, 0xeae18bb1) \
V(_GrowableListGenerateFactory, _GrowableList, .generate, \
kGrowableObjectArrayCid, 0x7bf3262e) \
kGrowableObjectArrayCid, 0x7be49a4e) \
V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \
0x1947d8a1) \
V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x660dd888) \
V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0xede3f64f) \
0x19394cc1) \
V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x65ff4ca8) \
V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0xedd56a6f) \
V(_Uint8ClampedArrayFactory, Uint8ClampedList, ., \
kTypedDataUint8ClampedArrayCid, 0x28063755) \
V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0xd0cd98f3) \
V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x3cb5fb6a) \
V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x1b8ff320) \
V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0x2b2f9a8b) \
V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0xfb71de2f) \
V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0xe3cfcff8) \
kTypedDataUint8ClampedArrayCid, 0x27f7ab75) \
V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0xd0bf0d13) \
V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x3ca76f8a) \
V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x1b816740) \
V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0x2b210eab) \
V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0xfb63524f) \
V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0xe3c14418) \
V(_Float64ArrayFactory, Float64List, ., kTypedDataFloat64ArrayCid, \
0xa0c64e91) \
0xa0b7c2b1) \
V(_Float32ArrayFactory, Float32List, ., kTypedDataFloat32ArrayCid, \
0xa39068fe) \
0xa381dd1e) \
V(_Float32x4ArrayFactory, Float32x4List, ., kTypedDataFloat32x4ArrayCid, \
0x0a7d7b88)
0x0a6eefa8)
// clang-format on

View file

@ -18,7 +18,7 @@ namespace kernel {
// package:kernel/binary.md.
static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
static const uint32_t kSupportedKernelFormatVersion = 104;
static const uint32_t kSupportedKernelFormatVersion = 105;
// Keep in sync with package:kernel/lib/binary/tag.dart
#define KERNEL_TAG_LIST(V) \
@ -31,7 +31,6 @@ static const uint32_t kSupportedKernelFormatVersion = 104;
V(Field, 4) \
V(Constructor, 5) \
V(Procedure, 6) \
V(RedirectingFactory, 108) \
V(InvalidInitializer, 7) \
V(FieldInitializer, 8) \
V(SuperInitializer, 9) \

View file

@ -1849,7 +1849,6 @@ void KernelLoader::LoadProcedure(const Library& library,
}
function.set_kernel_offset(procedure_offset);
function.set_is_extension_member(is_extension_member);
function.set_is_redirecting_factory(procedure_helper.IsRedirectingFactory());
if ((library.is_dart_scheme() &&
H.IsPrivate(procedure_helper.canonical_name_)) ||
(function.is_static() && (library.ptr() == Library::InternalLibrary()))) {
@ -1896,6 +1895,10 @@ void KernelLoader::LoadProcedure(const Library& library,
&function_node_helper);
T.SetupUnboxingInfoMetadata(function, library_kernel_offset_);
function_node_helper.ReadUntilExcluding(
FunctionNodeHelper::kRedirectingFactoryTarget);
function.set_is_redirecting_factory(helper_.ReadTag() == kSomething);
// Everything else is skipped implicitly, and procedure_helper and
// function_node_helper are no longer used.
helper_.SetOffset(procedure_end);