| Index: runtime/vm/snapshot.cc
|
| diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
|
| index edaaa2b5c12d1a37c9dcc3801e3e2a35448554df..b5b81153e6517e741a4ebe0f119cf8f85e1f5436 100644
|
| --- a/runtime/vm/snapshot.cc
|
| +++ b/runtime/vm/snapshot.cc
|
| @@ -437,219 +437,6 @@ RawObject* SnapshotReader::ReadInlinedObject(intptr_t object_id) {
|
| }
|
|
|
|
|
| -void MessageWriter::WriteMessage(intptr_t field_count, intptr_t *data) {
|
| - // Write out the serialization header value for this object.
|
| - WriteSerializationMarker(kInlined, kMaxPredefinedObjectIds);
|
| -
|
| - // Write out the class and tags information.
|
| - WriteObjectHeader(ObjectStore::kArrayClass, 0);
|
| -
|
| - // Write out the length field.
|
| - Write<RawObject*>(Smi::New(field_count));
|
| -
|
| - // Write out the type arguments.
|
| - WriteIndexedObject(Object::kNullObject);
|
| -
|
| - // Write out the individual Smis.
|
| - for (int i = 0; i < field_count; i++) {
|
| - Write<RawObject*>(Integer::New(data[i]));
|
| - }
|
| -
|
| - FinalizeBuffer();
|
| -}
|
| -
|
| -
|
| -void MessageWriter::MarkCObject(Dart_CObject* object, intptr_t object_id) {
|
| - // Mark the object as serialized by adding the object id to the
|
| - // upper bits of the type field in the Dart_CObject structure. Add
|
| - // an offset for making marking of object id 0 possible.
|
| - ASSERT(!IsCObjectMarked(object));
|
| - intptr_t mark_value = object_id + kDartCObjectMarkOffset;
|
| - object->type = static_cast<Dart_CObject::Type>(
|
| - ((mark_value) << kDartCObjectTypeBits) | object->type);
|
| -}
|
| -
|
| -
|
| -void MessageWriter::UnmarkCObject(Dart_CObject* object) {
|
| - ASSERT(IsCObjectMarked(object));
|
| - object->type = static_cast<Dart_CObject::Type>(
|
| - object->type & kDartCObjectTypeMask);
|
| -}
|
| -
|
| -
|
| -bool MessageWriter::IsCObjectMarked(Dart_CObject* object) {
|
| - return (object->type & kDartCObjectMarkMask) != 0;
|
| -}
|
| -
|
| -
|
| -intptr_t MessageWriter::GetMarkedCObjectMark(Dart_CObject* object) {
|
| - ASSERT(IsCObjectMarked(object));
|
| - intptr_t mark_value = ((object->type & kDartCObjectMarkMask) >> 3);
|
| - // An offset was added to object id for making marking object id 0 possible.
|
| - return mark_value - kDartCObjectMarkOffset;
|
| -}
|
| -
|
| -
|
| -void MessageWriter::UnmarkAllCObjects(Dart_CObject* object) {
|
| - if (!IsCObjectMarked(object)) return;
|
| - UnmarkCObject(object);
|
| - if (object->type == Dart_CObject::kArray) {
|
| - for (int i = 0; i < object->value.as_array.length; i++) {
|
| - Dart_CObject* element = object->value.as_array.values[i];
|
| - UnmarkAllCObjects(element);
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -void MessageWriter::WriteSmi(int64_t value) {
|
| - ASSERT(Smi::IsValid64(value));
|
| - Write<RawObject*>(Smi::New(value));
|
| -}
|
| -
|
| -
|
| -void MessageWriter::WriteMint(Dart_CObject* object, int64_t value) {
|
| - ASSERT(!Smi::IsValid64(value));
|
| - // Write out the serialization header value for mint object.
|
| - WriteInlinedHeader(object);
|
| - // Write out the class and tags information.
|
| - WriteObjectHeader(ObjectStore::kMintClass, 0);
|
| - // Write the 64-bit value.
|
| - Write<int64_t>(value);
|
| -}
|
| -
|
| -
|
| -void MessageWriter::WriteInt32(Dart_CObject* object) {
|
| - int64_t value = object->value.as_int32;
|
| - if (Smi::IsValid64(value)) {
|
| - WriteSmi(value);
|
| - } else {
|
| - WriteMint(object, value);
|
| - }
|
| -}
|
| -
|
| -
|
| -void MessageWriter::WriteInt64(Dart_CObject* object) {
|
| - int64_t value = object->value.as_int64;
|
| - if (Smi::IsValid64(value)) {
|
| - WriteSmi(value);
|
| - } else {
|
| - WriteMint(object, value);
|
| - }
|
| -}
|
| -
|
| -
|
| -void MessageWriter::WriteInlinedHeader(Dart_CObject* object) {
|
| - // Write out the serialization header value for this object.
|
| - WriteSerializationMarker(kInlined, kMaxPredefinedObjectIds + object_id_);
|
| - // Mark object with its object id.
|
| - MarkCObject(object, object_id_);
|
| - // Advance object id.
|
| - object_id_++;
|
| -}
|
| -
|
| -
|
| -void MessageWriter::WriteCObject(Dart_CObject* object) {
|
| - if (IsCObjectMarked(object)) {
|
| - intptr_t object_id = GetMarkedCObjectMark(object);
|
| - WriteIndexedObject(kMaxPredefinedObjectIds + object_id);
|
| - return;
|
| - }
|
| -
|
| - switch (object->type) {
|
| - case Dart_CObject::kNull:
|
| - WriteIndexedObject(Object::kNullObject);
|
| - break;
|
| - case Dart_CObject::kBool:
|
| - if (object->value.as_bool) {
|
| - WriteIndexedObject(ObjectStore::kTrueValue);
|
| - } else {
|
| - WriteIndexedObject(ObjectStore::kFalseValue);
|
| - }
|
| - break;
|
| - case Dart_CObject::kInt32:
|
| - WriteInt32(object);
|
| - break;
|
| - case Dart_CObject::kInt64:
|
| - WriteInt64(object);
|
| - break;
|
| - case Dart_CObject::kBigint: {
|
| - // Write out the serialization header value for this object.
|
| - WriteInlinedHeader(object);
|
| - // Write out the class and tags information.
|
| - WriteObjectHeader(ObjectStore::kBigintClass, 0);
|
| - // Write hex string length and content
|
| - char* hex_string = object->value.as_bigint;
|
| - intptr_t len = strlen(hex_string);
|
| - WriteIntptrValue(len);
|
| - for (intptr_t i = 0; i < len; i++) {
|
| - Write<uint8_t>(hex_string[i]);
|
| - }
|
| - break;
|
| - }
|
| - case Dart_CObject::kDouble:
|
| - // Write out the serialization header value for this object.
|
| - WriteInlinedHeader(object);
|
| - // Write out the class and tags information.
|
| - WriteObjectHeader(ObjectStore::kDoubleClass, 0);
|
| - // Write double value.
|
| - Write<double>(object->value.as_double);
|
| - break;
|
| - case Dart_CObject::kString: {
|
| - // Write out the serialization header value for this object.
|
| - WriteInlinedHeader(object);
|
| - // Write out the class and tags information.
|
| - WriteObjectHeader(ObjectStore::kOneByteStringClass, 0);
|
| - // Write string length, hash and content
|
| - char* str = object->value.as_string;
|
| - intptr_t len = strlen(str);
|
| - WriteSmi(len);
|
| - WriteSmi(0); // TODO(sgjesse): Hash - not written.
|
| - for (intptr_t i = 0; i < len; i++) {
|
| - Write<uint8_t>(str[i]);
|
| - }
|
| - break;
|
| - }
|
| - case Dart_CObject::kArray: {
|
| - // Write out the serialization header value for this object.
|
| - WriteInlinedHeader(object);
|
| - // Write out the class and tags information.
|
| - WriteObjectHeader(ObjectStore::kArrayClass, 0);
|
| - WriteSmi(object->value.as_array.length);
|
| - // Write out the type arguments.
|
| - WriteIndexedObject(Object::kNullObject);
|
| - // Write out array elements.
|
| - for (int i = 0; i < object->value.as_array.length; i++) {
|
| - WriteCObject(object->value.as_array.values[i]);
|
| - }
|
| - break;
|
| - }
|
| - case Dart_CObject::kByteArray: {
|
| - // Write out the serialization header value for this object.
|
| - WriteInlinedHeader(object);
|
| - // Write out the class and tags information.
|
| - WriteObjectHeader(ObjectStore::kInternalByteArrayClass, 0);
|
| - uint8_t* bytes = object->value.as_byte_array.values;
|
| - intptr_t len = object->value.as_byte_array.length;
|
| - WriteSmi(len);
|
| - for (intptr_t i = 0; i < len; i++) {
|
| - Write<uint8_t>(bytes[i]);
|
| - }
|
| - break;
|
| - }
|
| - default:
|
| - UNREACHABLE();
|
| - }
|
| -}
|
| -
|
| -
|
| -void MessageWriter::WriteCMessage(Dart_CObject* object) {
|
| - WriteCObject(object);
|
| - UnmarkAllCObjects(object);
|
| - FinalizeBuffer();
|
| -}
|
| -
|
| -
|
| void SnapshotWriter::WriteObject(RawObject* rawobj) {
|
| // An object is written in one of the following ways:
|
| // - Smi: the Smi value is written as is (last bit is not tagged).
|
|
|