blob: e63ef40d5309725dc9253d1690aebafa4cc25f43 [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of models;
enum FunctionKind {
regular,
closure,
implicitClosure,
getter,
setter,
constructor,
implicitGetter,
implicitSetter,
implicitStaticGetter,
fieldInitializer,
irregexpFunction,
methodExtractor,
noSuchMethodDispatcher,
invokeFieldDispatcher,
collected,
native,
ffiTrampoline,
stub,
tag,
signatureFunction,
dynamicInvocationForwarder
}
bool isSyntheticFunction(FunctionKind? kind) {
switch (kind) {
case FunctionKind.collected:
case FunctionKind.native:
case FunctionKind.stub:
case FunctionKind.tag:
return true;
default:
return false;
}
}
bool isDartFunction(FunctionKind? kind) => !isSyntheticFunction(kind);
bool isStubFunction(FunctionKind? kind) => kind == FunctionKind.stub;
bool hasDartCode(FunctionKind? kind) =>
isDartFunction(kind) || isStubFunction(kind);
String getFunctionFullName(FunctionRef function) {
String content = function.name!;
ObjectRef? owner = function.dartOwner;
while (owner is FunctionRef) {
FunctionRef function = (owner as FunctionRef);
content = "${function.name!}.${content}";
owner = function.dartOwner!;
}
if (owner is ClassRef) {
content = "${owner.name!}.${content}";
}
return content;
}
abstract class FunctionRef extends ObjectRef {
/// The name of this class.
String? get name;
/// The owner of this function, which can be a LibraryRef, ClassRef,
/// or a FunctionRef.
ObjectRef? get dartOwner; // owner
/// Is this function static?
bool? get isStatic;
/// Is this function const?
bool? get isConst;
/// The kind of the function.
FunctionKind? get kind;
}
abstract class ServiceFunction extends Object implements FunctionRef {
/// The location of this function in the source code. [optional]
SourceLocation? get location;
/// The compiled code associated with this function. [optional]
CodeRef? get code;
/// [optional]
CodeRef? get unoptimizedCode;
/// [optional]
FieldRef? get field;
int? get usageCounter;
InstanceRef? get icDataArray;
int? get deoptimizations;
bool? get isOptimizable;
bool? get isInlinable;
bool? get hasIntrinsic;
bool? get isRecognized;
bool? get isNative;
}