Chromium Code Reviews| Index: vm/dart_api_message.h |
| =================================================================== |
| --- vm/dart_api_message.h (revision 8411) |
| +++ vm/dart_api_message.h (working copy) |
| @@ -33,6 +33,22 @@ |
| Dart_CObject* ReadMessage(); |
| private: |
| + class BackwardReferenceNode { |
| + public: |
| + BackwardReferenceNode(Dart_CObject* reference, bool is_deserialized) |
| + : reference_(reference), is_deserialized_(is_deserialized) {} |
| + Dart_CObject* reference() const { return reference_; } |
| + void set_reference(Dart_CObject* reference) { reference_ = reference; } |
| + bool is_deserialized() const { return is_deserialized_; } |
| + void set_is_deserialized(bool value) { is_deserialized_ = value; } |
| + |
| + private: |
| + Dart_CObject* reference_; |
| + bool is_deserialized_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BackwardReferenceNode); |
| + }; |
| + |
| // Allocates a Dart_CObject object. |
| Dart_CObject* AllocateDartCObject(); |
| // Allocates a Dart_CObject object with the specified type. |
| @@ -58,18 +74,28 @@ |
| Dart_CObject* AllocateDartCObjectUint8Array(intptr_t length); |
| // Allocates a C array of Dart_CObject objects. |
| Dart_CObject* AllocateDartCObjectArray(intptr_t length); |
| + // Allocates a backwards reference node. |
| + BackwardReferenceNode* AllocateBackwardReferenceNode(Dart_CObject* reference, |
|
cshapiro
2012/06/08 22:04:39
Just a suggestion: we already shorten "Reference"
siva
2012/06/11 20:49:06
Done.
|
| + bool is_deserialized); |
| void Init(); |
| intptr_t LookupInternalClass(intptr_t class_header); |
| + Dart_CObject* ReadInternalVMObject(intptr_t class_id, intptr_t object_id); |
| Dart_CObject* ReadInlinedObject(intptr_t object_id); |
| - Dart_CObject* ReadObjectImpl(intptr_t header); |
| + Dart_CObject* ReadObjectImpl(); |
| Dart_CObject* ReadIndexedObject(intptr_t object_id); |
| + Dart_CObject* ReadObjectRef(); |
| Dart_CObject* ReadObject(); |
| // Add object to backward references. |
| - void AddBackwardReference(intptr_t id, Dart_CObject* obj); |
| + void AddBackwardReference(intptr_t id, |
| + Dart_CObject* obj, |
| + bool is_deserialized); |
| + // Get an object from the backward references list. |
| + Dart_CObject* GetBackwardReference(intptr_t id); |
| + |
| Dart_CObject_Internal* AsInternal(Dart_CObject* object) { |
| ASSERT(object->type >= Dart_CObject::kNumberOfTypes); |
| return reinterpret_cast<Dart_CObject_Internal*>(object); |
| @@ -79,7 +105,7 @@ |
| // either in the supplied zone or using the supplied allocation |
| // function. |
| ReAlloc alloc_; |
| - ApiGrowableArray<Dart_CObject*> backward_references_; |
| + ApiGrowableArray<BackwardReferenceNode*> backward_references_; |
| Dart_CObject type_arguments_marker; |
| Dart_CObject dynamic_type_marker; |
| @@ -89,10 +115,13 @@ |
| class ApiMessageWriter : public BaseWriter { |
| public: |
| ApiMessageWriter(uint8_t** buffer, ReAlloc alloc) |
| - : BaseWriter(buffer, alloc), object_id_(0) { |
| + : BaseWriter(buffer, alloc), object_id_(0), |
| + forward_list_(NULL), forward_list_length_(0), forward_id_(0) { |
| ASSERT(kDartCObjectTypeMask >= Dart_CObject::kNumberOfTypes - 1); |
| } |
| - ~ApiMessageWriter() { } |
| + ~ApiMessageWriter() { |
| + delete forward_list_; |
| + } |
| // Writes a message of integers. |
| void WriteMessage(intptr_t field_count, intptr_t *data); |
| @@ -114,6 +143,7 @@ |
| bool IsCObjectMarked(Dart_CObject* object); |
| intptr_t GetMarkedCObjectMark(Dart_CObject* object); |
| void UnmarkAllCObjects(Dart_CObject* object); |
| + void AddToForwardList(Dart_CObject* object); |
| void WriteSmi(int64_t value); |
| void WriteMint(Dart_CObject* object, int64_t value); |
| @@ -121,8 +151,14 @@ |
| void WriteInt64(Dart_CObject* object); |
| void WriteInlinedHeader(Dart_CObject* object); |
| void WriteCObject(Dart_CObject* object); |
| + void WriteCObjectRef(Dart_CObject* object); |
| + void WriteForwardedCObject(Dart_CObject* object); |
| + void WriteCObjectInlined(Dart_CObject* object, Dart_CObject::Type type); |
| intptr_t object_id_; |
| + Dart_CObject** forward_list_; |
| + intptr_t forward_list_length_; |
| + intptr_t forward_id_; |
| DISALLOW_COPY_AND_ASSIGN(ApiMessageWriter); |
| }; |