5#ifndef RUNTIME_VM_COMPILER_CHA_H_
6#define RUNTIME_VM_COMPILER_CHA_H_
8#if defined(DART_PRECOMPILED_RUNTIME)
9#error "AOT runtime should not use compiler sources (including header files)"
22class ZoneGrowableArray;
28 : thread_(thread), guarded_classes_(thread->zone(), 1) {}
47 intptr_t* implementation_cid);
60 intptr_t* subclass_count);
67 intptr_t subclass_count);
69 intptr_t implementor_cid);
82 void AddToGuardedClasses(
const Class& cls,
83 intptr_t subclass_count,
84 intptr_t implementor_cid,
89 struct GuardedClassInfo {
96 intptr_t subclass_count;
102 intptr_t implementor_cid;
108 GrowableArray<GuardedClassInfo> guarded_classes_;
bool HasOverride(const Class &cls, const String &function_name, intptr_t *subclass_count)
void AddToGuardedClassesForImplementorCid(const Class &cls, intptr_t implementor_cid)
void RegisterDependencies(const Code &code) const
static bool IsImplemented(const Class &cls)
bool IsGuardedClass(intptr_t cid) const
static bool HasSubclasses(const Class &cls)
void AddToGuardedClassesForSubclassCount(const Class &cls, intptr_t subclass_count)
static bool ConcreteSubclasses(const Class &cls, GrowableArray< intptr_t > *class_ids)
void AddToGuardedClassesToTrackFuture(const Class &cls)
static bool ClassCanBeFuture(const Class &cls)
bool IsConsistentWithCurrentHierarchy() const
static bool HasSingleConcreteImplementation(const Class &interface, intptr_t *implementation_cid)
const char *const function_name