19 static const char*
Name() {
return "CodeTraits"; }
22 return a.ptr() ==
b.ptr();
41#if defined(DART_PRECOMPILED_RUNTIME)
56 auto disable_code_fun = [&]() {
58 isolate_group->ForEachIsolate(
61 if (mutator_thread ==
nullptr) {
67 while (
frame !=
nullptr) {
68 code =
frame->LookupDartCode();
70 if (set.ContainsKey(code)) {
82 WeakCodeSet::Iterator it(&set);
83 while (it.MoveNext()) {
84 code ^= set.GetKey(it.Current());
90 if (owner.IsFunction()) {
92 }
else if (owner.IsClass()) {
97 }
else if (owner.
IsNull()) {
107 ASSERT(code.is_optimized());
111 if (
function.CurrentCode() == code.ptr()) {
116 if (!code.IsDisabled()) {
118 code.DisableDartCode();
128 if (are_mutators_stopped) {
131 isolate_group->RunWithStoppedMutators(disable_code_fun);
#define DEBUG_ASSERT(cond)
void DisableAllocationStub() const
static const char * Name()
static uword Hash(const Object &key)
static bool ReportStats()
static bool IsMatch(const Object &a, const Object &b)
static IsolateGroup * Current()
Thread * mutator_thread() const
@ kAllowCrossThreadIteration
void DisableCode(bool are_mutators_stopped)
virtual void ReportDeoptimization(const Code &code)=0
virtual void UpdateArrayTo(const WeakArray &array)=0
virtual void ReportSwitchingCode(const Code &code)=0
void Register(const Code &value)
Dart_NativeFunction function
void DeoptimizeAt(Thread *mutator_thread, const Code &optimized_code, StackFrame *frame)
UnorderedHashSet< CodeTraits, WeakArrayStorageTraits > WeakCodeSet