Chromium Code Reviews| Index: src/global-handles.h |
| diff --git a/src/global-handles.h b/src/global-handles.h |
| index a6afb2dcdeec34fa89458710b08aaa83be89ac2e..daf23a9c8c8a28d493d295b17735d9d62d9df10d 100644 |
| --- a/src/global-handles.h |
| +++ b/src/global-handles.h |
| @@ -42,37 +42,60 @@ namespace internal { |
| // An object group is treated like a single JS object: if one of object in |
| // the group is alive, all objects in the same group are considered alive. |
| // An object group is used to simulate object relationship in a DOM tree. |
| -class ObjectGroup : public Malloced { |
| +class ObjectGroup : public CustomlyAllocated { |
| public: |
| - ObjectGroup() : objects_(4) {} |
| - ObjectGroup(size_t capacity, v8::RetainedObjectInfo* info) |
| - : objects_(static_cast<int>(capacity)), |
| - info_(info) { } |
| - ~ObjectGroup(); |
| + static ObjectGroup* New(Object*** handles, |
| + size_t length, |
| + v8::RetainedObjectInfo* info) { |
| + ObjectGroup* group = reinterpret_cast<ObjectGroup*>( |
| + malloc(OFFSET_OF(ObjectGroup, objects_[length]))); |
| + group->length_ = length; |
| + group->info_ = info; |
| + CopyWords(group->objects_, handles, length); |
| + return group; |
| + } |
| + |
| + void Dispose() { |
| + free(this); |
| + } |
| - List<Object**> objects_; |
| + size_t length_; |
| v8::RetainedObjectInfo* info_; |
| + Object** objects_[1]; |
|
antonm
2011/04/06 11:01:48
maybe add a comment that it's a placeholder for va
Vitaly Repeshko
2011/04/06 19:11:01
Done.
|
| private: |
| - DISALLOW_COPY_AND_ASSIGN(ObjectGroup); |
| + DISALLOW_IMPLICIT_CONSTRUCTORS(ObjectGroup); |
| + ~ObjectGroup(); |
| }; |
| // An implicit references group consists of two parts: a parent object and |
| // a list of children objects. If the parent is alive, all the children |
| // are alive too. |
| -class ImplicitRefGroup : public Malloced { |
| +class ImplicitRefGroup : public CustomlyAllocated { |
| public: |
| - ImplicitRefGroup() : children_(4) {} |
| - ImplicitRefGroup(HeapObject* parent, size_t capacity) |
| - : parent_(parent), |
| - children_(static_cast<int>(capacity)) { } |
| + static ImplicitRefGroup* New(HeapObject** parent, |
| + Object*** children, |
| + size_t length) { |
| + ImplicitRefGroup* group = reinterpret_cast<ImplicitRefGroup*>( |
| + malloc(OFFSET_OF(ImplicitRefGroup, children_[length]))); |
| + group->parent_ = parent; |
| + group->length_ = length; |
| + CopyWords(group->children_, children, length); |
| + return group; |
| + } |
| + |
| + void Dispose() { |
| + free(this); |
| + } |
| - HeapObject* parent_; |
| - List<Object**> children_; |
| + HeapObject** parent_; |
| + size_t length_; |
| + Object** children_[1]; |
|
antonm
2011/04/06 11:01:48
ditto
Vitaly Repeshko
2011/04/06 19:11:01
Done.
|
| private: |
| - DISALLOW_COPY_AND_ASSIGN(ImplicitRefGroup); |
| + DISALLOW_IMPLICIT_CONSTRUCTORS(ImplicitRefGroup); |
| + ~ImplicitRefGroup(); |
| }; |
| @@ -154,7 +177,7 @@ class GlobalHandles { |
| // Add an implicit references' group. |
| // Should be only used in GC callback function before a collection. |
| // All groups are destroyed after a mark-compact collection. |
| - void AddImplicitReferences(HeapObject* parent, |
| + void AddImplicitReferences(HeapObject** parent, |
| Object*** children, |
| size_t length); |