Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1637)

Unified Diff: runtime/vm/object.cc

Issue 1544583002: For background compilation we copy ICData so that it is immutable during comnpilation. However, we … (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: remove flag Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.cc
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index f44c36539865db16ec85e89c1c206adcb1f01e76..cb3c236ceaed86a1656ef32bd8b97bfafd230697 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -7033,7 +7033,9 @@ void Function::RestoreICDataMap(
ICData& ic_data = ICData::ZoneHandle(zone);
ic_data ^= saved_ic_data.At(i);
if (clone_descriptors) {
+ ICData& original_ic_data = ICData::Handle(zone, ic_data.raw());
ic_data = ICData::CloneDescriptor(ic_data);
+ ic_data.SetOriginal(original_ic_data);
}
(*deopt_id_to_ic_data)[ic_data.deopt_id()] = &ic_data;
}
@@ -12176,9 +12178,41 @@ const char* ICData::ToCString() const {
}
+RawFunction* ICData::Owner() const {
+ Object& obj = Object::Handle(raw_ptr()->owner_);
+ if (obj.IsFunction()) {
+ return Function::Cast(obj).raw();
+ } else {
+ ICData& original = ICData::Handle();
+ original ^= obj.raw();
+ return original.Owner();
+ }
+}
+
+
+RawICData* ICData::Original() const {
+ if (IsNull()) {
+ return ICData::null();
+ }
+ Object& obj = Object::Handle(raw_ptr()->owner_);
+ if (obj.IsFunction()) {
+ return this->raw();
+ } else {
+ return ICData::RawCast(obj.raw());
+ }
+}
+
+
+void ICData::SetOriginal(const ICData& value) const {
+ ASSERT(value.IsOriginal());
+ ASSERT(!value.IsNull());
+ StorePointer(&raw_ptr()->owner_, reinterpret_cast<RawObject*>(value.raw()));
+}
+
+
void ICData::set_owner(const Function& value) const {
ASSERT(!value.IsNull());
- StorePointer(&raw_ptr()->owner_, value.raw());
+ StorePointer(&raw_ptr()->owner_, reinterpret_cast<RawObject*>(value.raw()));
}
@@ -12817,7 +12851,7 @@ RawICData* ICData::New(const Function& owner,
RawICData* ICData::NewFrom(const ICData& from, intptr_t num_args_tested) {
const ICData& result = ICData::Handle(ICData::New(
- Function::Handle(from.owner()),
+ Function::Handle(from.Owner()),
String::Handle(from.target_name()),
Array::Handle(from.arguments_descriptor()),
from.deopt_id(),
@@ -12832,7 +12866,7 @@ RawICData* ICData::CloneDescriptor(const ICData& from) {
Zone* zone = Thread::Current()->zone();
const ICData& result = ICData::Handle(ICData::NewDescriptor(
zone,
- Function::Handle(zone, from.owner()),
+ Function::Handle(zone, from.Owner()),
String::Handle(zone, from.target_name()),
Array::Handle(zone, from.arguments_descriptor()),
from.deopt_id(),
@@ -12849,7 +12883,7 @@ void ICData::PrintJSONImpl(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
AddCommonObjectProperties(&jsobj, "Object", ref);
jsobj.AddServiceId(*this);
- jsobj.AddProperty("_owner", Object::Handle(owner()));
+ jsobj.AddProperty("_owner", Object::Handle(Owner()));
jsobj.AddProperty("_selector", String::Handle(target_name()).ToCString());
if (ref) {
return;
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698