| Index: runtime/vm/snapshot.cc
|
| diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
|
| index ee4fb30dd67265062a6e4cb3db14fed35f8cbb45..016465ab74358eeb10683528c0766a82c18607a7 100644
|
| --- a/runtime/vm/snapshot.cc
|
| +++ b/runtime/vm/snapshot.cc
|
| @@ -437,242 +437,6 @@ RawObject* SnapshotReader::ReadInlinedObject(intptr_t object_id) {
|
| }
|
|
|
|
|
| -CMessageReader::CMessageReader(const uint8_t* buffer,
|
| - intptr_t length,
|
| - ReAlloc alloc)
|
| - : BaseReader(buffer, length),
|
| - alloc_(alloc),
|
| - backward_references_(kNumInitialReferences) {
|
| - // Initialize marker objects used to handle Lists.
|
| - // TODO(sjesse): Remove this when message serialization format is
|
| - // updated.
|
| - memset(&type_arguments_marker, 0, sizeof(type_arguments_marker));
|
| - memset(&dynamic_type_marker, 0, sizeof(dynamic_type_marker));
|
| - type_arguments_marker.type =
|
| - static_cast<Dart_CObject::Type>(Dart_CObject_Internal::kTypeArguments);
|
| - dynamic_type_marker.type =
|
| - static_cast<Dart_CObject::Type>(Dart_CObject_Internal::kDynamicType);
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::ReadMessage() {
|
| - // Read the object out of the message.
|
| - return ReadObject();
|
| -}
|
| -
|
| -intptr_t CMessageReader::LookupInternalClass(intptr_t class_header) {
|
| - SerializedHeaderType header_type = SerializedHeaderTag::decode(class_header);
|
| - ASSERT(header_type == kObjectId);
|
| - intptr_t header_value = SerializedHeaderData::decode(class_header);
|
| - return header_value;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::AllocateDartCObject(Dart_CObject::Type type) {
|
| - Dart_CObject* value =
|
| - reinterpret_cast<Dart_CObject*>(
|
| - alloc_(NULL, 0, sizeof(Dart_CObject)));
|
| - value->type = type;
|
| - return value;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::AllocateDartCObjectNull() {
|
| - return AllocateDartCObject(Dart_CObject::kNull);
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::AllocateDartCObjectBool(bool val) {
|
| - Dart_CObject* value = AllocateDartCObject(Dart_CObject::kBool);
|
| - value->value.as_bool = val;
|
| - return value;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::AllocateDartCObjectInt32(int32_t val) {
|
| - Dart_CObject* value = AllocateDartCObject(Dart_CObject::kInt32);
|
| - value->value.as_int32 = val;
|
| - return value;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::AllocateDartCObjectDouble(double val) {
|
| - Dart_CObject* value = AllocateDartCObject(Dart_CObject::kDouble);
|
| - value->value.as_double = val;
|
| - return value;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::AllocateDartCObjectString(intptr_t length) {
|
| - // Allocate a Dart_CObject structure followed by an array of chars
|
| - // for the string content. The pointer to the string content is set
|
| - // up to this area.
|
| - Dart_CObject* value =
|
| - reinterpret_cast<Dart_CObject*>(
|
| - alloc_(NULL, 0, sizeof(Dart_CObject) + length + 1));
|
| - value->value.as_string = reinterpret_cast<char*>(value) + sizeof(*value);
|
| - value->type = Dart_CObject::kString;
|
| - return value;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::AllocateDartCObjectArray(intptr_t length) {
|
| - // Allocate a Dart_CObject structure followed by an array of
|
| - // pointers to Dart_CObject structures. The pointer to the array
|
| - // content is set up to this area.
|
| - Dart_CObject* value =
|
| - reinterpret_cast<Dart_CObject*>(
|
| - alloc_(NULL, 0, sizeof(Dart_CObject) + length * sizeof(value)));
|
| - value->type = Dart_CObject::kArray;
|
| - value->value.as_array.length = length;
|
| - if (length > 0) {
|
| - value->value.as_array.values = reinterpret_cast<Dart_CObject**>(value + 1);
|
| - } else {
|
| - value->value.as_array.values = NULL;
|
| - }
|
| - return value;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::ReadInlinedObject(intptr_t object_id) {
|
| - // Read the class header information and lookup the class.
|
| - intptr_t class_header = ReadIntptrValue();
|
| - intptr_t tags = ReadIntptrValue();
|
| - USE(tags);
|
| - intptr_t class_id;
|
| -
|
| - // Reading of regular dart instances is not supported.
|
| - if (SerializedHeaderData::decode(class_header) == kInstanceId) {
|
| - return NULL;
|
| - }
|
| -
|
| - ASSERT((class_header & kSmiTagMask) != 0);
|
| - class_id = LookupInternalClass(class_header);
|
| - switch (class_id) {
|
| - case Object::kClassClass: {
|
| - return NULL;
|
| - }
|
| - case Object::kTypeArgumentsClass: {
|
| - // TODO(sjesse): Remove this when message serialization format is
|
| - // updated (currently length is leaked).
|
| - AddBackwardReference(object_id, NULL);
|
| - Dart_CObject* length = ReadObject();
|
| - ASSERT(length->type == Dart_CObject::kInt32);
|
| - for (int i = 0; i < length->value.as_int32; i++) {
|
| - Dart_CObject* type = ReadObject();
|
| - if (type != &dynamic_type_marker) return NULL;
|
| - }
|
| - return &type_arguments_marker;
|
| - break;
|
| - }
|
| - case ObjectStore::kArrayClass: {
|
| - intptr_t len = ReadSmiValue();
|
| - Dart_CObject* value = AllocateDartCObjectArray(len);
|
| - AddBackwardReference(object_id, value);
|
| - // Skip type arguments.
|
| - // TODO(sjesse): Remove this when message serialization format is
|
| - // updated (currently type_arguments is leaked).
|
| - Dart_CObject* type_arguments = ReadObject();
|
| - if (type_arguments != &type_arguments_marker &&
|
| - type_arguments->type != Dart_CObject::kNull) {
|
| - return NULL;
|
| - }
|
| - for (int i = 0; i < len; i++) {
|
| - value->value.as_array.values[i] = ReadObject();
|
| - }
|
| - return value;
|
| - break;
|
| - }
|
| - case ObjectStore::kDoubleClass: {
|
| - // Read the double value for the object.
|
| - Dart_CObject* object = AllocateDartCObjectDouble(Read<double>());
|
| - AddBackwardReference(object_id, object);
|
| - return object;
|
| - break;
|
| - }
|
| - case ObjectStore::kOneByteStringClass: {
|
| - intptr_t len = ReadSmiValue();
|
| - intptr_t hash = ReadSmiValue();
|
| - USE(hash);
|
| - Dart_CObject* object = AllocateDartCObjectString(len);
|
| - AddBackwardReference(object_id, object);
|
| - char* p = object->value.as_string;
|
| - for (intptr_t i = 0; i < len; i++) {
|
| - *p = Read<uint8_t>();
|
| - p++;
|
| - }
|
| - *p = '\0';
|
| - return object;
|
| - break;
|
| - }
|
| - case ObjectStore::kTwoByteStringClass:
|
| - // Two byte strings not supported.
|
| - return NULL;
|
| - break;
|
| - case ObjectStore::kFourByteStringClass:
|
| - // Four byte strings not supported.
|
| - return NULL;
|
| - break;
|
| - default:
|
| - // Everything else not supported.
|
| - return NULL;
|
| - }
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::ReadIndexedObject(intptr_t object_id) {
|
| - if (object_id == Object::kNullObject) {
|
| - return AllocateDartCObjectNull();
|
| - } else if (object_id == ObjectStore::kTrueValue) {
|
| - return AllocateDartCObjectBool(true);
|
| - } else if (object_id == ObjectStore::kFalseValue) {
|
| - return AllocateDartCObjectBool(false);
|
| - } else if (object_id == ObjectStore::kDynamicType ||
|
| - object_id == ObjectStore::kDoubleInterface ||
|
| - object_id == ObjectStore::kIntInterface ||
|
| - object_id == ObjectStore::kBoolInterface ||
|
| - object_id == ObjectStore::kStringInterface) {
|
| - // Always return dynamic type (this is only a marker).
|
| - return &dynamic_type_marker;
|
| - } else {
|
| - intptr_t index = object_id - kMaxPredefinedObjectIds;
|
| - ASSERT(index < backward_references_.length());
|
| - ASSERT(backward_references_[index] != NULL);
|
| - return backward_references_[index];
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::ReadObjectImpl(intptr_t header) {
|
| - SerializedHeaderType header_type = SerializedHeaderTag::decode(header);
|
| - intptr_t header_value = SerializedHeaderData::decode(header);
|
| -
|
| - if (header_type == kObjectId) {
|
| - return ReadIndexedObject(header_value);
|
| - }
|
| - ASSERT(header_type == kInlined);
|
| - return ReadInlinedObject(header_value);
|
| -}
|
| -
|
| -
|
| -Dart_CObject* CMessageReader::ReadObject() {
|
| - int64_t value = Read<int64_t>();
|
| - if ((value & kSmiTagMask) == 0) {
|
| - Dart_CObject* dart_value = AllocateDartCObjectInt32(value >> kSmiTagShift);
|
| - return dart_value;
|
| - }
|
| - ASSERT((value <= kIntptrMax) && (value >= kIntptrMin));
|
| - return ReadObjectImpl(value);
|
| -}
|
| -
|
| -
|
| -void CMessageReader::AddBackwardReference(intptr_t id, Dart_CObject* obj) {
|
| - ASSERT((id - kMaxPredefinedObjectIds) == backward_references_.length());
|
| - backward_references_.Add(obj);
|
| -}
|
| -
|
| -
|
| void MessageWriter::WriteMessage(intptr_t field_count, intptr_t *data) {
|
| // Write out the serialization header value for this object.
|
| WriteSerializationMarker(kInlined, kMaxPredefinedObjectIds);
|
|
|