| Index: src/global-handles.cc
|
| diff --git a/src/global-handles.cc b/src/global-handles.cc
|
| index 8058f350cdb96f14ec79b775d25e1ba2eb260548..a3e7f1e7c7141679a580a060370b15fe1bad8e62 100644
|
| --- a/src/global-handles.cc
|
| +++ b/src/global-handles.cc
|
| @@ -855,8 +855,18 @@ void GlobalHandles::AddObjectGroup(Object*** handles,
|
| object_groups_.Add(ObjectGroupConnection(
|
| UniqueId(reinterpret_cast<intptr_t>(handles[0])), handles[i]));
|
| }
|
| - retainer_infos_.Add(ObjectGroupRetainerInfo(
|
| - UniqueId(reinterpret_cast<intptr_t>(handles[0])), info));
|
| + for (size_t i = 0; i < length; ++i) {
|
| + if ((*handles[i])->IsHeapObject()) {
|
| + representative_objects_.Add(ObjectGroupRepresentative(
|
| + UniqueId(reinterpret_cast<intptr_t>(handles[0])),
|
| + reinterpret_cast<HeapObject**>(handles[i])));
|
| + break;
|
| + }
|
| + }
|
| + if (info != NULL) {
|
| + retainer_infos_.Add(ObjectGroupRetainerInfo(
|
| + UniqueId(reinterpret_cast<intptr_t>(handles[0])), info));
|
| + }
|
| }
|
|
|
| void GlobalHandles::SetObjectGroupId(Object** handle,
|
| @@ -871,6 +881,13 @@ void GlobalHandles::SetRetainedObjectInfo(UniqueId id,
|
| }
|
|
|
|
|
| +void GlobalHandles::SetObjectGroupRepresentative(
|
| + UniqueId id,
|
| + HeapObject** representative_object) {
|
| + representative_objects_.Add(
|
| + ObjectGroupRepresentative(id, representative_object));
|
| +}
|
| +
|
| void GlobalHandles::AddImplicitReferences(HeapObject** parent,
|
| Object*** children,
|
| size_t length) {
|
| @@ -880,8 +897,16 @@ void GlobalHandles::AddImplicitReferences(HeapObject** parent,
|
| ASSERT(!Node::FromLocation(children[i])->is_independent());
|
| }
|
| #endif
|
| - if (length == 0) return;
|
| - implicit_ref_groups_.Add(ImplicitRefGroup::New(parent, children, length));
|
| + for (size_t i = 0; i < length; ++i) {
|
| + implicit_ref_groups_.Add(ObjectGroupConnection(
|
| + UniqueId(reinterpret_cast<intptr_t>(parent)), children[i]));
|
| + }
|
| +}
|
| +
|
| +
|
| +void GlobalHandles::AddImplicitReference(UniqueId id, Object** child) {
|
| + ASSERT(!Node::FromLocation(child)->is_independent());
|
| + implicit_ref_groups_.Add(ObjectGroupConnection(id, child));
|
| }
|
|
|
|
|
| @@ -896,9 +921,7 @@ void GlobalHandles::RemoveObjectGroups() {
|
|
|
|
|
| void GlobalHandles::RemoveImplicitRefGroups() {
|
| - for (int i = 0; i < implicit_ref_groups_.length(); i++) {
|
| - implicit_ref_groups_.at(i)->Dispose();
|
| - }
|
| + representative_objects_.Clear();
|
| implicit_ref_groups_.Clear();
|
| }
|
|
|
|
|