Index: runtime/vm/snapshot.h |
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h |
index 166ea06ee89e899b0714b4203faf0dee7705f29d..29de83f0eab8421ada5d276cb8379256e2b85e9e 100644 |
--- a/runtime/vm/snapshot.h |
+++ b/runtime/vm/snapshot.h |
@@ -424,7 +424,7 @@ class CMessageReader : public BaseReader { |
CMessageReader(const uint8_t* buffer, intptr_t length, ReAlloc alloc); |
~CMessageReader() { } |
- Dart_CMessage* ReadMessage(); |
+ Dart_CObject* ReadMessage(); |
private: |
// Allocates a Dart_CObject object on the C heap. |
@@ -531,18 +531,39 @@ class BaseWriter { |
class MessageWriter : public BaseWriter { |
public: |
- MessageWriter(uint8_t** buffer, ReAlloc alloc) : BaseWriter(buffer, alloc) { |
+ MessageWriter(uint8_t** buffer, ReAlloc alloc) |
+ : BaseWriter(buffer, alloc), object_id_(0) { |
+ ASSERT(kDartCObjectTypeMask >= Dart_CObject::kNumberOfTypes); |
} |
~MessageWriter() { } |
// Writes a message of integers. |
void WriteMessage(intptr_t field_count, intptr_t *data); |
+ void WriteCMessage(Dart_CObject* object); |
+ |
void FinalizeBuffer() { |
BaseWriter::FinalizeBuffer(Snapshot::kMessage); |
} |
private: |
+ static const intptr_t kDartCObjectTypeBits = 3; |
+ static const intptr_t kDartCObjectTypeMask = (1 << kDartCObjectTypeBits) - 1; |
+ static const intptr_t kDartCObjectMarkMask = ~kDartCObjectTypeMask; |
+ static const intptr_t kDartCObjectMarkOffset = 1; |
+ |
+ void MarkCObject(Dart_CObject* object, intptr_t object_id); |
+ void UnmarkCObject(Dart_CObject* object); |
+ bool IsCObjectMarked(Dart_CObject* object); |
+ intptr_t GetMarkedCObjectMark(Dart_CObject* object); |
+ void UnmarkAllCObjects(Dart_CObject* object); |
+ |
+ void WriteSmi(int32_t value); |
+ void WriteInlinedHeader(Dart_CObject* object); |
+ void WriteCObject(Dart_CObject* object); |
+ |
+ intptr_t object_id_; |
+ |
DISALLOW_COPY_AND_ASSIGN(MessageWriter); |
}; |