Index: runtime/vm/object.cc |
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
index 346ddfdb0d5968f3871bc2ffe6cdf9f143cf5aa8..0c0415f55bd956e4b7e42d7c4f240e89ef42ce50 100644 |
--- a/runtime/vm/object.cc |
+++ b/runtime/vm/object.cc |
@@ -12570,6 +12570,17 @@ void ICData::AddDeoptReason(DeoptReasonId reason) const { |
} |
+void ICData::SetIsStaticCall(bool static_call) const { |
+ StoreNonPointer(&raw_ptr()->state_bits_, |
+ StaticCallBit::update(static_call, raw_ptr()->state_bits_)); |
+} |
+ |
+ |
+bool ICData::is_static_call() const { |
+ return StaticCallBit::decode(raw_ptr()->state_bits_); |
+} |
+ |
+ |
void ICData::set_state_bits(uint32_t bits) const { |
StoreNonPointer(&raw_ptr()->state_bits_, bits); |
} |
@@ -13382,7 +13393,8 @@ RawICData* ICData::NewDescriptor(Zone* zone, |
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) { |
ASSERT(!owner.IsNull()); |
ASSERT(!target_name.IsNull()); |
ASSERT(!arguments_descriptor.IsNull()); |
@@ -13405,6 +13417,7 @@ RawICData* ICData::NewDescriptor(Zone* zone, |
#if defined(TAG_IC_DATA) |
result.set_tag(-1); |
#endif |
+ result.SetIsStaticCall(is_static_call); |
result.SetNumArgsTested(num_args_tested); |
return result.raw(); |
} |
@@ -13449,7 +13462,8 @@ RawICData* ICData::New(const Function& owner, |
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) { |
Zone* zone = Thread::Current()->zone(); |
const ICData& result = ICData::Handle(zone, |
NewDescriptor(zone, |
@@ -13457,7 +13471,8 @@ RawICData* ICData::New(const Function& owner, |
target_name, |
arguments_descriptor, |
deopt_id, |
- num_args_tested)); |
+ num_args_tested, |
+ is_static_call)); |
result.set_ic_data_array( |
Array::Handle(zone, NewEmptyICDataArray(num_args_tested))); |
return result.raw(); |
@@ -13470,7 +13485,8 @@ RawICData* ICData::NewFrom(const ICData& from, intptr_t num_args_tested) { |
String::Handle(from.target_name()), |
Array::Handle(from.arguments_descriptor()), |
from.deopt_id(), |
- num_args_tested)); |
+ num_args_tested, |
+ from.is_static_call())); |
// Copy deoptimization reasons. |
result.SetDeoptReasons(from.DeoptReasons()); |
return result.raw(); |
@@ -13485,7 +13501,8 @@ RawICData* ICData::Clone(const ICData& from) { |
String::Handle(zone, from.target_name()), |
Array::Handle(zone, from.arguments_descriptor()), |
from.deopt_id(), |
- from.NumArgsTested())); |
+ from.NumArgsTested(), |
+ from.is_static_call())); |
// Clone entry array. |
const Array& from_array = Array::Handle(zone, from.ic_data()); |
const intptr_t len = from_array.Length(); |