Index: runtime/vm/object.h |
diff --git a/runtime/vm/object.h b/runtime/vm/object.h |
index 984a718d1b86a73f2b9edda5a31e25d5de47eaaf..cd014a3092bd609a521f47dd0f8709aaf98f7841 100644 |
--- a/runtime/vm/object.h |
+++ b/runtime/vm/object.h |
@@ -1842,7 +1842,7 @@ class ICData : public Object { |
bool IsImmutable() const; |
- void Reset(bool is_static_call) const; |
+ void Reset() const; |
void ResetData() const; |
// Note: only deopts with reasons before Unknown in this list are recorded in |
@@ -2028,7 +2028,8 @@ class ICData : public Object { |
const String& target_name, |
const Array& arguments_descriptor, |
intptr_t deopt_id, |
- intptr_t num_args_tested); |
+ intptr_t num_args_tested, |
+ bool is_static_call); |
static RawICData* NewFrom(const ICData& from, intptr_t num_args_tested); |
// Generates a new ICData with descriptor and data array copied (deep clone). |
@@ -2146,6 +2147,9 @@ class ICData : public Object { |
intptr_t tag() const { return raw_ptr()->tag_; } |
#endif |
+ void SetIsStaticCall(bool static_call) const; |
+ bool is_static_call() const; |
+ |
private: |
static RawICData* New(); |
@@ -2167,7 +2171,9 @@ class ICData : public Object { |
kDeoptReasonPos = kNumArgsTestedPos + kNumArgsTestedSize, |
kDeoptReasonSize = kLastRecordedDeoptReason + 1, |
kRangeFeedbackPos = kDeoptReasonPos + kDeoptReasonSize, |
- kRangeFeedbackSize = kBitsPerRangeFeedback * kRangeFeedbackSlots |
+ kRangeFeedbackSize = kBitsPerRangeFeedback * kRangeFeedbackSlots, |
+ kStaticCallPos = kRangeFeedbackPos + kRangeFeedbackSize, |
+ kStaticCallSize = 1, |
}; |
class NumArgsTestedBits : public BitField<uint32_t, |
@@ -2183,6 +2189,10 @@ class ICData : public Object { |
ICData::kRangeFeedbackPos, |
ICData::kRangeFeedbackSize> {}; |
+ class StaticCallBit : public BitField<uint32_t, |
+ bool, |
+ ICData::kStaticCallPos, |
+ ICData::kStaticCallSize> {}; |
#if defined(DEBUG) |
// Used in asserts to verify that a check is not added twice. |
bool HasCheck(const GrowableArray<intptr_t>& cids) const; |
@@ -2196,7 +2206,8 @@ class ICData : public Object { |
const String& target_name, |
const Array& arguments_descriptor, |
intptr_t deopt_id, |
- intptr_t num_args_tested); |
+ intptr_t num_args_tested, |
+ bool is_static_call); |
static void WriteSentinel(const Array& data, intptr_t test_entry_length); |
@@ -2275,7 +2286,6 @@ class Function : public Object { |
// Reloading support: |
void Reparent(const Class& new_cls) const; |
void ZeroEdgeCounters() const; |
- void FillICDataWithSentinels(const Code& code) const; |
RawClass* Owner() const; |
RawClass* origin() const; |
@@ -4539,6 +4549,10 @@ class Code : public Object { |
StorePointer(&raw_ptr()->code_source_map_, code_source_map.raw()); |
} |
+ // Used during reloading (see object_reload.cc). Calls Reset on all ICDatas |
+ // that are embedded inside the Code object. |
+ void ResetICDatas() const; |
+ |
TokenPosition GetTokenPositionAt(intptr_t offset) const; |
// Array of DeoptInfo objects. |