Chromium Code Reviews| Index: runtime/vm/clustered_snapshot.cc |
| diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc |
| index e938fefb454842f7c627ec3fd11427386bbb16ef..d2f899cb88409a5b57812048eaffc777be6ab566 100644 |
| --- a/runtime/vm/clustered_snapshot.cc |
| +++ b/runtime/vm/clustered_snapshot.cc |
| @@ -78,15 +78,15 @@ class ClassSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kClassCid); |
| intptr_t count = predefined_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawClass* cls = predefined_[i]; |
| intptr_t class_id = cls->ptr()->id_; |
| - s->Write<intptr_t>(class_id); |
| + s->WriteCid(class_id); |
| s->AssignRef(cls); |
| } |
| count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawClass* cls = objects_[i]; |
| s->AssignRef(cls); |
| @@ -137,10 +137,10 @@ class ClassDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| predefined_start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| ClassTable* table = d->isolate()->class_table(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t class_id = d->Read<intptr_t>(); |
| + intptr_t class_id = d->ReadCid(); |
| ASSERT(table->HasValidClassAt(class_id)); |
| RawClass* cls = table->At(class_id); |
| ASSERT(cls != NULL); |
| @@ -149,7 +149,7 @@ class ClassDeserializationCluster : public DeserializationCluster { |
| predefined_stop_index_ = d->next_index(); |
| start_index_ = d->next_index(); |
| - count = d->Read<intptr_t>(); |
| + count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| Class::InstanceSize())); |
| @@ -174,8 +174,13 @@ class ClassDeserializationCluster : public DeserializationCluster { |
| intptr_t class_id = d->ReadCid(); |
| cls->ptr()->id_ = class_id; |
| - cls->ptr()->instance_size_in_words_ = d->Read<int32_t>(); |
| - cls->ptr()->next_field_offset_in_words_ = d->Read<int32_t>(); |
| + if (!RawObject::IsInternalVMdefinedClassId(class_id)) { |
| + cls->ptr()->instance_size_in_words_ = d->Read<int32_t>(); |
| + cls->ptr()->next_field_offset_in_words_ = d->Read<int32_t>(); |
| + } else { |
| + d->Read<int32_t>(); // Skip. |
| + d->Read<int32_t>(); // Skip. |
| + } |
| cls->ptr()->type_arguments_field_offset_in_words_ = d->Read<int32_t>(); |
| cls->ptr()->num_type_arguments_ = d->Read<uint16_t>(); |
| cls->ptr()->num_own_type_arguments_ = d->Read<uint16_t>(); |
| @@ -261,7 +266,7 @@ class UnresolvedClassSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kUnresolvedClassCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawUnresolvedClass* cls = objects_[i]; |
| s->AssignRef(cls); |
| @@ -270,7 +275,7 @@ class UnresolvedClassSerializationCluster : public SerializationCluster { |
| void WriteFill(Serializer* s) { |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawUnresolvedClass* cls = objects_[i]; |
| RawObject** from = cls->from(); |
| @@ -295,7 +300,7 @@ class UnresolvedClassDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| UnresolvedClass::InstanceSize())); |
| @@ -342,11 +347,11 @@ class TypeArgumentsSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kTypeArgumentsCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawTypeArguments* type_args = objects_[i]; |
| intptr_t length = Smi::Value(type_args->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(type_args); |
| } |
| } |
| @@ -356,7 +361,7 @@ class TypeArgumentsSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawTypeArguments* type_args = objects_[i]; |
| intptr_t length = Smi::Value(type_args->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->Write<bool>(type_args->IsCanonical()); |
| intptr_t hash = Smi::Value(type_args->ptr()->hash_); |
| s->Write<int32_t>(hash); |
| @@ -380,9 +385,9 @@ class TypeArgumentsDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| TypeArguments::InstanceSize(length))); |
| } |
| @@ -395,7 +400,7 @@ class TypeArgumentsDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawTypeArguments* type_args = |
| reinterpret_cast<RawTypeArguments*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| bool is_canonical = d->Read<bool>(); |
| Deserializer::InitializeHeader(type_args, kTypeArgumentsCid, |
| TypeArguments::InstanceSize(length), |
| @@ -432,7 +437,7 @@ class PatchClassSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kPatchClassCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawPatchClass* cls = objects_[i]; |
| s->AssignRef(cls); |
| @@ -464,7 +469,7 @@ class PatchClassDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| PatchClass::InstanceSize())); |
| @@ -514,7 +519,7 @@ class FunctionSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kFunctionCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawFunction* func = objects_[i]; |
| s->AssignRef(func); |
| @@ -572,7 +577,7 @@ class FunctionDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| Function::InstanceSize())); |
| @@ -684,7 +689,7 @@ class ClosureDataSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kClosureDataCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawClosureData* data = objects_[i]; |
| s->AssignRef(data); |
| @@ -716,7 +721,7 @@ class ClosureDataDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| ClosureData::InstanceSize())); |
| @@ -760,7 +765,7 @@ class RedirectionDataSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kRedirectionDataCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawRedirectionData* data = objects_[i]; |
| s->AssignRef(data); |
| @@ -792,7 +797,7 @@ class RedirectionDataDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| RedirectionData::InstanceSize())); |
| @@ -864,7 +869,7 @@ class FieldSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kFieldCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawField* field = objects_[i]; |
| s->AssignRef(field); |
| @@ -929,7 +934,7 @@ class FieldDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Field::InstanceSize())); |
| } |
| @@ -1006,7 +1011,7 @@ class LiteralTokenSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kLiteralTokenCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawLiteralToken* token = objects_[i]; |
| s->AssignRef(token); |
| @@ -1039,7 +1044,7 @@ class LiteralTokenDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| LiteralToken::InstanceSize())); |
| @@ -1085,7 +1090,7 @@ class TokenStreamSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kTokenStreamCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawTokenStream* stream = objects_[i]; |
| s->AssignRef(stream); |
| @@ -1117,7 +1122,7 @@ class TokenStreamDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| TokenStream::InstanceSize())); |
| @@ -1161,7 +1166,7 @@ class ScriptSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kScriptCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawScript* script = objects_[i]; |
| s->AssignRef(script); |
| @@ -1198,7 +1203,7 @@ class ScriptDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Script::InstanceSize())); |
| } |
| @@ -1251,7 +1256,7 @@ class LibrarySerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kLibraryCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawLibrary* lib = objects_[i]; |
| s->AssignRef(lib); |
| @@ -1289,7 +1294,7 @@ class LibraryDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Library::InstanceSize())); |
| } |
| @@ -1361,7 +1366,7 @@ class NamespaceSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kNamespaceCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawNamespace* ns = objects_[i]; |
| s->AssignRef(ns); |
| @@ -1393,7 +1398,7 @@ class NamespaceDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Namespace::InstanceSize())); |
| } |
| @@ -1436,7 +1441,7 @@ class CodeSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kCodeCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawCode* code = objects_[i]; |
| s->AssignRef(code); |
| @@ -1496,7 +1501,7 @@ class CodeDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Code::InstanceSize(0))); |
| } |
| @@ -1571,11 +1576,11 @@ class ObjectPoolSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kObjectPoolCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawObjectPool* pool = objects_[i]; |
| intptr_t length = pool->ptr()->length_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(pool); |
| } |
| } |
| @@ -1586,7 +1591,7 @@ class ObjectPoolSerializationCluster : public SerializationCluster { |
| RawObjectPool* pool = objects_[i]; |
| RawTypedData* info_array = pool->ptr()->info_array_; |
| intptr_t length = pool->ptr()->length_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| for (intptr_t j = 0; j < length; j++) { |
| ObjectPool::EntryType entry_type = |
| static_cast<ObjectPool::EntryType>(info_array->ptr()->data()[j]); |
| @@ -1608,7 +1613,7 @@ class ObjectPoolSerializationCluster : public SerializationCluster { |
| break; |
| } |
| case ObjectPool::kImmediate: { |
| - s->Write<intptr_t>(entry.raw_value_); |
| + s->Write<int32_t>(entry.raw_value_); |
| break; |
| } |
| case ObjectPool::kNativeEntry: { |
| @@ -1638,9 +1643,9 @@ class ObjectPoolDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| ObjectPool::InstanceSize(length))); |
| } |
| @@ -1651,7 +1656,7 @@ class ObjectPoolDeserializationCluster : public DeserializationCluster { |
| bool is_vm_object = d->isolate() == Dart::vm_isolate(); |
| PageSpace* old_space = d->heap()->old_space(); |
| for (intptr_t id = start_index_; id < stop_index_; id += 1) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| RawTypedData* info_array = reinterpret_cast<RawTypedData*>( |
| AllocateUninitialized(old_space, TypedData::InstanceSize(length))); |
| Deserializer::InitializeHeader(info_array, kTypedDataUint8ArrayCid, |
| @@ -1674,7 +1679,7 @@ class ObjectPoolDeserializationCluster : public DeserializationCluster { |
| entry.raw_obj_ = d->ReadRef(); |
| break; |
| case ObjectPool::kImmediate: |
| - entry.raw_value_ = d->Read<intptr_t>(); |
| + entry.raw_value_ = d->Read<int32_t>(); |
| break; |
| case ObjectPool::kNativeEntry: { |
| #if !defined(TARGET_ARCH_DBC) |
| @@ -1728,7 +1733,7 @@ class RODataSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(cid_); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawObject* object = objects_[i]; |
| int32_t rodata_offset = s->GetRODataOffset(object); |
| @@ -1753,7 +1758,7 @@ class RODataDeserializationCluster : public DeserializationCluster { |
| virtual ~RODataDeserializationCluster() { } |
| void ReadAlloc(Deserializer* d) { |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| int32_t rodata_offset = d->Read<int32_t>(); |
| d->AssignRef(d->GetObjectAt(rodata_offset)); |
| @@ -1795,11 +1800,11 @@ class ExceptionHandlersSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kExceptionHandlersCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawExceptionHandlers* handlers = objects_[i]; |
| intptr_t length = handlers->ptr()->num_entries_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(handlers); |
| } |
| } |
| @@ -1809,7 +1814,7 @@ class ExceptionHandlersSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawExceptionHandlers* handlers = objects_[i]; |
| intptr_t length = handlers->ptr()->num_entries_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->WriteRef(handlers->ptr()->handled_types_data_); |
| uint8_t* data = reinterpret_cast<uint8_t*>(handlers->ptr()->data()); |
| @@ -1832,9 +1837,9 @@ class ExceptionHandlersDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| ExceptionHandlers::InstanceSize(length))); |
| } |
| @@ -1847,7 +1852,7 @@ class ExceptionHandlersDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawExceptionHandlers* handlers = |
| reinterpret_cast<RawExceptionHandlers*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| Deserializer::InitializeHeader(handlers, kExceptionHandlersCid, |
| ExceptionHandlers::InstanceSize(length), |
| is_vm_object); |
| @@ -1882,11 +1887,11 @@ class ContextSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kContextCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawContext* context = objects_[i]; |
| intptr_t length = context->ptr()->num_variables_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(context); |
| } |
| } |
| @@ -1896,7 +1901,7 @@ class ContextSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawContext* context = objects_[i]; |
| intptr_t length = context->ptr()->num_variables_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->WriteRef(context->ptr()->parent_); |
| for (intptr_t j = 0; j < length; j++) { |
| s->WriteRef(context->ptr()->data()[j]); |
| @@ -1917,9 +1922,9 @@ class ContextDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| Context::InstanceSize(length))); |
| } |
| @@ -1931,7 +1936,7 @@ class ContextDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawContext* context = reinterpret_cast<RawContext*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| Deserializer::InitializeHeader(context, kContextCid, |
| Context::InstanceSize(length), |
| is_vm_object); |
| @@ -1965,11 +1970,11 @@ class ContextScopeSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kContextScopeCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawContextScope* scope = objects_[i]; |
| intptr_t length = scope->ptr()->num_variables_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(scope); |
| } |
| } |
| @@ -1979,7 +1984,7 @@ class ContextScopeSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawContextScope* scope = objects_[i]; |
| intptr_t length = scope->ptr()->num_variables_; |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->Write<bool>(scope->ptr()->is_implicit_); |
| RawObject** from = scope->from(); |
| RawObject** to = scope->to(length); |
| @@ -2002,9 +2007,9 @@ class ContextScopeDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| ContextScope::InstanceSize(length))); |
| } |
| @@ -2016,7 +2021,7 @@ class ContextScopeDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawContextScope* scope = reinterpret_cast<RawContextScope*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| Deserializer::InitializeHeader(scope, kContextScopeCid, |
| ContextScope::InstanceSize(length), |
| is_vm_object); |
| @@ -2051,7 +2056,7 @@ class ICDataSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kICDataCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawICData* ic = objects_[i]; |
| s->AssignRef(ic); |
| @@ -2071,7 +2076,7 @@ class ICDataSerializationCluster : public SerializationCluster { |
| s->Write<int32_t>(ic->ptr()->deopt_id_); |
| s->Write<uint32_t>(ic->ptr()->state_bits_); |
| #if defined(TAG_IC_DATA) |
| - s->Write<intptr_t>(ic->ptr()->tag_); |
| + s->Write<int32_t>(ic->ptr()->tag_); |
| #endif |
| } |
| } |
| @@ -2089,7 +2094,7 @@ class ICDataDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, ICData::InstanceSize())); |
| } |
| @@ -2116,7 +2121,7 @@ class ICDataDeserializationCluster : public DeserializationCluster { |
| ic->ptr()->deopt_id_ = d->Read<int32_t>(); |
| ic->ptr()->state_bits_ = d->Read<int32_t>(); |
| #if defined(TAG_IC_DATA) |
| - ic->ptr()->tag_ = d->Read<intptr_t>(); |
| + ic->ptr()->tag_ = d->Read<int32_t>(); |
| #endif |
| } |
| } |
| @@ -2165,7 +2170,7 @@ class MegamorphicCacheSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kMegamorphicCacheCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawMegamorphicCache* cache = objects_[i]; |
| s->AssignRef(cache); |
| @@ -2198,7 +2203,7 @@ class MegamorphicCacheDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| MegamorphicCache::InstanceSize())); |
| @@ -2240,7 +2245,7 @@ class SubtypeTestCacheSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kSubtypeTestCacheCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawSubtypeTestCache* cache = objects_[i]; |
| s->AssignRef(cache); |
| @@ -2268,7 +2273,7 @@ class SubtypeTestCacheDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| SubtypeTestCache::InstanceSize())); |
| @@ -2310,7 +2315,7 @@ class LanguageErrorSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kLanguageErrorCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawLanguageError* error = objects_[i]; |
| s->AssignRef(error); |
| @@ -2345,7 +2350,7 @@ class LanguageErrorDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| LanguageError::InstanceSize())); |
| @@ -2393,7 +2398,7 @@ class UnhandledExceptionSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kUnhandledExceptionCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawUnhandledException* exception = objects_[i]; |
| s->AssignRef(exception); |
| @@ -2425,7 +2430,7 @@ class UnhandledExceptionDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| UnhandledException::InstanceSize())); |
| @@ -2456,10 +2461,9 @@ class InstanceSerializationCluster : public SerializationCluster { |
| public: |
| explicit InstanceSerializationCluster(intptr_t cid) : cid_(cid) { |
| RawClass* cls = Isolate::Current()->class_table()->At(cid); |
| - next_field_offset_ = |
| - cls->ptr()->next_field_offset_in_words_ << kWordSizeLog2; |
| + next_field_offset_in_words_ = cls->ptr()->next_field_offset_in_words_; |
| instance_size_in_words_ = cls->ptr()->instance_size_in_words_; |
| - ASSERT(next_field_offset_ > 0); |
| + ASSERT(next_field_offset_in_words_ > 0); |
| ASSERT(instance_size_in_words_ > 0); |
| } |
| virtual ~InstanceSerializationCluster() { } |
| @@ -2468,8 +2472,9 @@ class InstanceSerializationCluster : public SerializationCluster { |
| RawInstance* instance = Instance::RawCast(object); |
| objects_.Add(instance); |
| + intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2; |
| intptr_t offset = Instance::NextFieldOffset(); |
| - while (offset < next_field_offset_) { |
| + while (offset < next_field_offset) { |
| RawObject* raw_obj = *reinterpret_cast<RawObject**>( |
| reinterpret_cast<uword>(instance->ptr()) + offset); |
| s->Push(raw_obj); |
| @@ -2478,12 +2483,12 @@ class InstanceSerializationCluster : public SerializationCluster { |
| } |
| void WriteAlloc(Serializer* s) { |
| - s->Write<intptr_t>(cid_); |
| + s->WriteCid(cid_); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| - s->Write<intptr_t>(next_field_offset_); |
| - s->Write<intptr_t>(instance_size_in_words_); |
| + s->Write<int32_t>(next_field_offset_in_words_); |
| + s->Write<int32_t>(instance_size_in_words_); |
| for (intptr_t i = 0; i < count; i++) { |
| RawInstance* instance = objects_[i]; |
| @@ -2492,12 +2497,13 @@ class InstanceSerializationCluster : public SerializationCluster { |
| } |
| void WriteFill(Serializer* s) { |
| + intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2; |
| intptr_t count = objects_.length(); |
| for (intptr_t i = 0; i < count; i++) { |
| RawInstance* instance = objects_[i]; |
| s->Write<bool>(instance->IsCanonical()); |
| intptr_t offset = Instance::NextFieldOffset(); |
| - while (offset < next_field_offset_) { |
| + while (offset < next_field_offset) { |
| RawObject* raw_obj = *reinterpret_cast<RawObject**>( |
| reinterpret_cast<uword>(instance->ptr()) + offset); |
| s->WriteRef(raw_obj); |
| @@ -2508,7 +2514,7 @@ class InstanceSerializationCluster : public SerializationCluster { |
| private: |
| const intptr_t cid_; |
| - intptr_t next_field_offset_; |
| + intptr_t next_field_offset_in_words_; |
| intptr_t instance_size_in_words_; |
| GrowableArray<RawInstance*> objects_; |
| }; |
| @@ -2522,9 +2528,9 @@ class InstanceDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| - next_field_offset_ = d->Read<intptr_t>(); |
| - instance_size_in_words_ = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| + next_field_offset_in_words_ = d->Read<int32_t>(); |
| + instance_size_in_words_ = d->Read<int32_t>(); |
| intptr_t instance_size = |
| Object::RoundedAllocationSize(instance_size_in_words_ * kWordSize); |
| for (intptr_t i = 0; i < count; i++) { |
| @@ -2534,6 +2540,7 @@ class InstanceDeserializationCluster : public DeserializationCluster { |
| } |
| void ReadFill(Deserializer* d) { |
| + intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2; |
| intptr_t instance_size = |
| Object::RoundedAllocationSize(instance_size_in_words_ * kWordSize); |
| bool is_vm_object = d->isolate() == Dart::vm_isolate(); |
| @@ -2545,7 +2552,7 @@ class InstanceDeserializationCluster : public DeserializationCluster { |
| instance_size, |
| is_vm_object, is_canonical); |
| intptr_t offset = Instance::NextFieldOffset(); |
| - while (offset < next_field_offset_) { |
| + while (offset < next_field_offset) { |
| RawObject** p = reinterpret_cast<RawObject**>( |
| reinterpret_cast<uword>(instance->ptr()) + offset); |
| *p = d->ReadRef(); |
| @@ -2563,7 +2570,7 @@ class InstanceDeserializationCluster : public DeserializationCluster { |
| private: |
| const intptr_t cid_; |
| - intptr_t next_field_offset_; |
| + intptr_t next_field_offset_in_words_; |
| intptr_t instance_size_in_words_; |
| }; |
| @@ -2587,7 +2594,7 @@ class LibraryPrefixSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kLibraryPrefixCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawLibraryPrefix* prefix = objects_[i]; |
| s->AssignRef(prefix); |
| @@ -2622,7 +2629,7 @@ class LibraryPrefixDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| LibraryPrefix::InstanceSize())); |
| @@ -2680,13 +2687,13 @@ class TypeSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kTypeCid); |
| intptr_t count = canonical_objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawType* type = canonical_objects_[i]; |
| s->AssignRef(type); |
| } |
| count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawType* type = objects_[i]; |
| s->AssignRef(type); |
| @@ -2732,14 +2739,14 @@ class TypeDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| canonical_start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Type::InstanceSize())); |
| } |
| canonical_stop_index_ = d->next_index(); |
| start_index_ = d->next_index(); |
| - count = d->Read<intptr_t>(); |
| + count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Type::InstanceSize())); |
| } |
| @@ -2803,7 +2810,7 @@ class TypeRefSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kTypeRefCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawTypeRef* type = objects_[i]; |
| s->AssignRef(type); |
| @@ -2835,7 +2842,7 @@ class TypeRefDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, TypeRef::InstanceSize())); |
| } |
| @@ -2879,7 +2886,7 @@ class TypeParameterSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kTypeParameterCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawTypeParameter* type = objects_[i]; |
| s->AssignRef(type); |
| @@ -2895,7 +2902,7 @@ class TypeParameterSerializationCluster : public SerializationCluster { |
| for (RawObject** p = from; p <= to; p++) { |
| s->WriteRef(*p); |
| } |
| - s->Write<intptr_t>(type->ptr()->parameterized_class_id_); |
| + s->Write<int32_t>(type->ptr()->parameterized_class_id_); |
| s->WriteTokenPosition(type->ptr()->token_pos_); |
| s->Write<int16_t>(type->ptr()->index_); |
| s->Write<int8_t>(type->ptr()->type_state_); |
| @@ -2915,7 +2922,7 @@ class TypeParameterDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| TypeParameter::InstanceSize())); |
| @@ -2936,7 +2943,7 @@ class TypeParameterDeserializationCluster : public DeserializationCluster { |
| for (RawObject** p = from; p <= to; p++) { |
| *p = d->ReadRef(); |
| } |
| - type->ptr()->parameterized_class_id_ = d->Read<intptr_t>(); |
| + type->ptr()->parameterized_class_id_ = d->Read<int32_t>(); |
| type->ptr()->token_pos_ = d->ReadTokenPosition(); |
| type->ptr()->index_ = d->Read<int16_t>(); |
| type->ptr()->type_state_ = d->Read<int8_t>(); |
| @@ -2964,7 +2971,7 @@ class BoundedTypeSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kBoundedTypeCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawBoundedType* type = objects_[i]; |
| s->AssignRef(type); |
| @@ -2996,7 +3003,7 @@ class BoundedTypeDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| BoundedType::InstanceSize())); |
| @@ -3040,7 +3047,7 @@ class ClosureSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kClosureCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawClosure* closure = objects_[i]; |
| s->AssignRef(closure); |
| @@ -3073,7 +3080,7 @@ class ClosureDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Closure::InstanceSize())); |
| } |
| @@ -3105,31 +3112,38 @@ class MintSerializationCluster : public SerializationCluster { |
| virtual ~MintSerializationCluster() { } |
| void Trace(Serializer* s, RawObject* object) { |
| - RawMint* mint = Mint::RawCast(object); |
| - objects_.Add(mint); |
| + if (!object->IsHeapObject()) { |
| + RawSmi* smi = Smi::RawCast(object); |
| + smis_.Add(smi); |
| + } else { |
| + RawMint* mint = Mint::RawCast(object); |
| + mints_.Add(mint); |
| + } |
| } |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kMintCid); |
| - intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| - for (intptr_t i = 0; i < count; i++) { |
| - RawMint* mint = objects_[i]; |
| - s->AssignRef(mint); |
| - } |
| - } |
| - void WriteFill(Serializer* s) { |
| - intptr_t count = objects_.length(); |
| - for (intptr_t i = 0; i < count; i++) { |
| - RawMint* mint = objects_[i]; |
| + s->Write<int32_t>(smis_.length() + mints_.length()); |
| + for (intptr_t i = 0; i < smis_.length(); i++) { |
| + RawSmi* smi = smis_[i]; |
| + s->Write<bool>(true); |
| + s->Write<int64_t>(Smi::Value(smi)); |
| + s->AssignRef(smi); |
| + } |
| + for (intptr_t i = 0; i < mints_.length(); i++) { |
| + RawMint* mint = mints_[i]; |
| s->Write<bool>(mint->IsCanonical()); |
| s->Write<int64_t>(mint->ptr()->value_); |
| + s->AssignRef(mint); |
| } |
| } |
| + void WriteFill(Serializer* s) { } |
| + |
| private: |
| - GrowableArray<RawMint*> objects_; |
| + GrowableArray<RawSmi*> smis_; |
| + GrowableArray<RawMint*> mints_; |
| }; |
| @@ -3139,26 +3153,49 @@ class MintDeserializationCluster : public DeserializationCluster { |
| virtual ~MintDeserializationCluster() { } |
| void ReadAlloc(Deserializer* d) { |
| - start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + bool is_vm_object = d->isolate() == Dart::vm_isolate(); |
| + |
| + start_index_ = d->next_index(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - d->AssignRef(AllocateUninitialized(old_space, Mint::InstanceSize())); |
| + bool is_canonical = d->Read<bool>(); |
| + int64_t value = d->Read<int64_t>(); |
| + if (Smi::IsValid(value)) { |
| + d->AssignRef(Smi::New(value)); |
| + } else { |
| + RawMint* mint = static_cast<RawMint*>( |
| + AllocateUninitialized(old_space, Mint::InstanceSize())); |
| + Deserializer::InitializeHeader(mint, kMintCid, |
| + Mint::InstanceSize(), |
| + is_vm_object, is_canonical); |
| + mint->ptr()->value_ = value; |
| + d->AssignRef(mint); |
| + } |
| } |
| stop_index_ = d->next_index(); |
| } |
| - void ReadFill(Deserializer* d) { |
| - bool is_vm_object = d->isolate() == Dart::vm_isolate(); |
| + void ReadFill(Deserializer* d) { } |
| - for (intptr_t id = start_index_; id < stop_index_; id++) { |
| - RawMint* mint = reinterpret_cast<RawMint*>(d->Ref(id)); |
| - bool is_canonical = d->Read<bool>(); |
| - Deserializer::InitializeHeader(mint, kMintCid, |
| - Mint::InstanceSize(), |
| - is_vm_object, is_canonical); |
| - mint->ptr()->value_ = d->Read<int64_t>(); |
| + void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { |
| + NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), |
| + Timeline::GetIsolateStream(), "PostLoadMint")); |
| + |
| + const GrowableObjectArray& new_constants = |
| + GrowableObjectArray::Handle(zone, GrowableObjectArray::New()); |
| + Object& number = Object::Handle(zone); |
| + for (intptr_t i = start_index_; i < stop_index_; i++) { |
| + number = refs.At(i); |
| + if (number.IsMint() && number.IsCanonical()) { |
| + new_constants.Add(number); |
| + } |
| } |
| + const Array& constants_array = |
| + Array::Handle(zone, Array::MakeArray(new_constants)); |
|
siva
2016/07/08 21:10:00
Not for this CL maybe the next one.
You could cou
rmacnak
2016/07/08 21:18:21
Noted.
|
| + const Class& mint_cls = Class::Handle(zone, |
| + Isolate::Current()->object_store()->mint_class()); |
| + mint_cls.set_constants(constants_array); |
| } |
| }; |
| @@ -3182,7 +3219,7 @@ class BigintSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kBigintCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawBigint* bigint = objects_[i]; |
| s->AssignRef(bigint); |
| @@ -3215,7 +3252,7 @@ class BigintDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Bigint::InstanceSize())); |
| } |
| @@ -3254,7 +3291,7 @@ class DoubleSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kDoubleCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawDouble* dbl = objects_[i]; |
| s->AssignRef(dbl); |
| @@ -3283,7 +3320,7 @@ class DoubleDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, Double::InstanceSize())); |
| } |
| @@ -3324,7 +3361,7 @@ class GrowableObjectArraySerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kGrowableObjectArrayCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawGrowableObjectArray* array = objects_[i]; |
| s->AssignRef(array); |
| @@ -3358,7 +3395,7 @@ class GrowableObjectArrayDeserializationCluster |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| GrowableObjectArray::InstanceSize())); |
| @@ -3397,13 +3434,13 @@ class TypedDataSerializationCluster : public SerializationCluster { |
| } |
| void WriteAlloc(Serializer* s) { |
| - s->Write<intptr_t>(cid_); |
| + s->WriteCid(cid_); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawTypedData* data = objects_[i]; |
| intptr_t length = Smi::Value(data->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(data); |
| } |
| } |
| @@ -3414,7 +3451,7 @@ class TypedDataSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawTypedData* data = objects_[i]; |
| intptr_t length = Smi::Value(data->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->Write<bool>(data->IsCanonical()); |
| uint8_t* cdata = reinterpret_cast<uint8_t*>(data->ptr()->data()); |
| s->WriteBytes(cdata, length * element_size); |
| @@ -3435,10 +3472,10 @@ class TypedDataDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| intptr_t element_size = TypedData::ElementSizeInBytes(cid_); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| TypedData::InstanceSize(length * element_size))); |
| } |
| @@ -3451,7 +3488,7 @@ class TypedDataDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawTypedData* data = reinterpret_cast<RawTypedData*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| bool is_canonical = d->Read<bool>(); |
| intptr_t length_in_bytes = length * element_size; |
| Deserializer::InitializeHeader(data, cid_, |
| @@ -3480,9 +3517,9 @@ class ExternalTypedDataSerializationCluster : public SerializationCluster { |
| } |
| void WriteAlloc(Serializer* s) { |
| - s->Write<intptr_t>(cid_); |
| + s->WriteCid(cid_); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawExternalTypedData* data = objects_[i]; |
| s->AssignRef(data); |
| @@ -3495,7 +3532,7 @@ class ExternalTypedDataSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawExternalTypedData* data = objects_[i]; |
| intptr_t length = Smi::Value(data->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| uint8_t* cdata = reinterpret_cast<uint8_t*>(data->ptr()->data_); |
| s->WriteBytes(cdata, length * element_size); |
| } |
| @@ -3515,7 +3552,7 @@ class ExternalTypedDataDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| ExternalTypedData::InstanceSize())); |
| @@ -3530,7 +3567,7 @@ class ExternalTypedDataDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawExternalTypedData* data = |
| reinterpret_cast<RawExternalTypedData*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| Deserializer::InitializeHeader(data, cid_, |
| ExternalTypedData::InstanceSize(), |
| is_vm_object); |
| @@ -3564,7 +3601,7 @@ class StacktraceSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kStacktraceCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawStacktrace* trace = objects_[i]; |
| s->AssignRef(trace); |
| @@ -3596,7 +3633,7 @@ class StacktraceDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| Stacktrace::InstanceSize())); |
| @@ -3640,7 +3677,7 @@ class RegExpSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kRegExpCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawRegExp* regexp = objects_[i]; |
| s->AssignRef(regexp); |
| @@ -3657,7 +3694,7 @@ class RegExpSerializationCluster : public SerializationCluster { |
| s->WriteRef(*p); |
| } |
| - s->Write<intptr_t>(regexp->ptr()->num_registers_); |
| + s->Write<int32_t>(regexp->ptr()->num_registers_); |
| s->Write<int8_t>(regexp->ptr()->type_flags_); |
| } |
| } |
| @@ -3675,7 +3712,7 @@ class RegExpDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| RegExp::InstanceSize())); |
| @@ -3696,7 +3733,7 @@ class RegExpDeserializationCluster : public DeserializationCluster { |
| *p = d->ReadRef(); |
| } |
| - regexp->ptr()->num_registers_ = d->Read<intptr_t>(); |
| + regexp->ptr()->num_registers_ = d->Read<int32_t>(); |
| regexp->ptr()->type_flags_ = d->Read<int8_t>(); |
| } |
| } |
| @@ -3730,7 +3767,7 @@ class LinkedHashMapSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kLinkedHashMapCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawLinkedHashMap* map = objects_[i]; |
| s->AssignRef(map); |
| @@ -3750,7 +3787,7 @@ class LinkedHashMapSerializationCluster : public SerializationCluster { |
| const intptr_t deleted_keys = Smi::Value(map->ptr()->deleted_keys_); |
| // Write out the number of (not deleted) key/value pairs that will follow. |
| - s->Write<intptr_t>((used_data >> 1) - deleted_keys); |
| + s->Write<int32_t>((used_data >> 1) - deleted_keys); |
| RawArray* data_array = map->ptr()->data_; |
| RawObject** data_elements = data_array->ptr()->data(); |
| @@ -3778,7 +3815,7 @@ class LinkedHashMapDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| d->AssignRef(AllocateUninitialized(old_space, |
| LinkedHashMap::InstanceSize())); |
| @@ -3801,7 +3838,7 @@ class LinkedHashMapDeserializationCluster : public DeserializationCluster { |
| reinterpret_cast<RawTypeArguments*>(d->ReadRef()); |
| // TODO(rmacnak): Reserve ref ids and co-allocate in ReadAlloc. |
| - intptr_t pairs = d->Read<intptr_t>(); |
| + intptr_t pairs = d->Read<int32_t>(); |
| intptr_t used_data = pairs << 1; |
| intptr_t data_size = Utils::Maximum( |
| Utils::RoundUpToPowerOfTwo(used_data), |
| @@ -3848,11 +3885,11 @@ class ArraySerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(cid_); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawArray* array = objects_[i]; |
| intptr_t length = Smi::Value(array->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(array); |
| } |
| } |
| @@ -3862,7 +3899,7 @@ class ArraySerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawArray* array = objects_[i]; |
| intptr_t length = Smi::Value(array->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->Write<bool>(array->IsCanonical()); |
| s->WriteRef(array->ptr()->type_arguments_); |
| for (intptr_t j = 0; j < length; j++) { |
| @@ -3885,9 +3922,9 @@ class ArrayDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| Array::InstanceSize(length))); |
| } |
| @@ -3899,7 +3936,7 @@ class ArrayDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawArray* array = reinterpret_cast<RawArray*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| bool is_canonical = d->Read<bool>(); |
| Deserializer::InitializeHeader(array, cid_, |
| Array::InstanceSize(length), |
| @@ -3931,11 +3968,11 @@ class OneByteStringSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kOneByteStringCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawOneByteString* str = objects_[i]; |
| intptr_t length = Smi::Value(str->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(str); |
| } |
| } |
| @@ -3945,7 +3982,7 @@ class OneByteStringSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawOneByteString* str = objects_[i]; |
| intptr_t length = Smi::Value(str->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->Write<bool>(str->IsCanonical()); |
| intptr_t hash = Smi::Value(str->ptr()->hash_); |
| s->Write<int32_t>(hash); |
| @@ -3966,9 +4003,9 @@ class OneByteStringDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| OneByteString::InstanceSize(length))); |
| } |
| @@ -3980,13 +4017,13 @@ class OneByteStringDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawOneByteString* str = reinterpret_cast<RawOneByteString*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| bool is_canonical = d->Read<bool>(); |
| Deserializer::InitializeHeader(str, kOneByteStringCid, |
| OneByteString::InstanceSize(length), |
| is_vm_object, is_canonical); |
| str->ptr()->length_ = Smi::New(length); |
| - str->ptr()->hash_ = Smi::New(d->Read<intptr_t>()); |
| + str->ptr()->hash_ = Smi::New(d->Read<int32_t>()); |
| for (intptr_t j = 0; j < length; j++) { |
| str->ptr()->data()[j] = d->Read<uint8_t>(); |
| } |
| @@ -4008,11 +4045,11 @@ class TwoByteStringSerializationCluster : public SerializationCluster { |
| void WriteAlloc(Serializer* s) { |
| s->WriteCid(kTwoByteStringCid); |
| intptr_t count = objects_.length(); |
| - s->Write<intptr_t>(count); |
| + s->Write<int32_t>(count); |
| for (intptr_t i = 0; i < count; i++) { |
| RawTwoByteString* str = objects_[i]; |
| intptr_t length = Smi::Value(str->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->AssignRef(str); |
| } |
| } |
| @@ -4022,7 +4059,7 @@ class TwoByteStringSerializationCluster : public SerializationCluster { |
| for (intptr_t i = 0; i < count; i++) { |
| RawTwoByteString* str = objects_[i]; |
| intptr_t length = Smi::Value(str->ptr()->length_); |
| - s->Write<intptr_t>(length); |
| + s->Write<int32_t>(length); |
| s->Write<bool>(str->IsCanonical()); |
| intptr_t hash = Smi::Value(str->ptr()->hash_); |
| s->Write<int32_t>(hash); |
| @@ -4043,9 +4080,9 @@ class TwoByteStringDeserializationCluster : public DeserializationCluster { |
| void ReadAlloc(Deserializer* d) { |
| start_index_ = d->next_index(); |
| PageSpace* old_space = d->heap()->old_space(); |
| - intptr_t count = d->Read<intptr_t>(); |
| + intptr_t count = d->Read<int32_t>(); |
| for (intptr_t i = 0; i < count; i++) { |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| d->AssignRef(AllocateUninitialized(old_space, |
| TwoByteString::InstanceSize(length))); |
| } |
| @@ -4058,7 +4095,7 @@ class TwoByteStringDeserializationCluster : public DeserializationCluster { |
| for (intptr_t id = start_index_; id < stop_index_; id++) { |
| RawTwoByteString* str = |
| reinterpret_cast<RawTwoByteString*>(d->Ref(id)); |
| - intptr_t length = d->Read<intptr_t>(); |
| + intptr_t length = d->Read<int32_t>(); |
| bool is_canonical = d->Read<bool>(); |
| Deserializer::InitializeHeader(str, kTwoByteStringCid, |
| TwoByteString::InstanceSize(length), |
| @@ -4196,7 +4233,9 @@ SerializationCluster* Serializer::NewClusterForClass(intptr_t cid) { |
| void Serializer::Trace(RawObject* object) { |
| intptr_t cid; |
| if (!object->IsHeapObject()) { |
| - cid = kSmiCid; |
| + // Smis are merged into the Mint cluster because Smis for the writer might |
| + // become Mints for the reader and vice versa. |
| + cid = kMintCid; |
| } else { |
| cid = object->GetClassId(); |
| } |
| @@ -4227,7 +4266,7 @@ void Serializer::WriteVersionAndFeatures() { |
| #if defined(DEBUG) |
| -static const intptr_t kSectionMarker = 0xABAB; |
| +static const int32_t kSectionMarker = 0xABAB; |
| #endif |
| void Serializer::Serialize() { |
| @@ -4244,6 +4283,11 @@ void Serializer::Serialize() { |
| } |
| intptr_t num_objects = num_base_objects_ + num_written_objects_; |
| +#if defined(ARCH_IS_64_BIT) |
| + if (!Utils::IsInt(32, num_objects)) { |
| + FATAL("Ref overflow"); |
| + } |
| +#endif |
|
siva
2016/07/08 21:10:00
How does this protect against overflows on a 32 bi
rmacnak
2016/07/08 21:18:22
It can't overflow on a 32-bit machine because we c
|
| Write<int32_t>(num_objects); |
| Write<int32_t>(num_clusters); |
| @@ -4253,7 +4297,7 @@ void Serializer::Serialize() { |
| if (cluster != NULL) { |
| cluster->WriteAlloc(this); |
| #if defined(DEBUG) |
| - Write<intptr_t>(next_ref_index_); |
| + Write<int32_t>(next_ref_index_); |
| #endif |
| } |
| } |
| @@ -4266,7 +4310,7 @@ void Serializer::Serialize() { |
| if (cluster != NULL) { |
| cluster->WriteFill(this); |
| #if defined(DEBUG) |
| - Write<intptr_t>(kSectionMarker); |
| + Write<int32_t>(kSectionMarker); |
| #endif |
| } |
| } |
| @@ -4336,7 +4380,7 @@ intptr_t Serializer::WriteVMSnapshot(const Array& symbols, |
| } |
| #if defined(DEBUG) |
| - Write<intptr_t>(kSectionMarker); |
| + Write<int32_t>(kSectionMarker); |
| #endif |
| // Note we are not clearing the object id table. The full ref table |
| @@ -4379,7 +4423,7 @@ void Serializer::WriteFullSnapshot(intptr_t num_base_objects, |
| } |
| #if defined(DEBUG) |
| - Write<intptr_t>(kSectionMarker); |
| + Write<int32_t>(kSectionMarker); |
| #endif |
| heap_->ResetObjectIdTable(); |
| @@ -4599,7 +4643,7 @@ void Deserializer::Deserialize() { |
| clusters_[i] = ReadCluster(); |
| clusters_[i]->ReadAlloc(this); |
| #if defined(DEBUG) |
| - intptr_t serializers_next_ref_index_ = Read<intptr_t>(); |
| + intptr_t serializers_next_ref_index_ = Read<int32_t>(); |
| ASSERT(serializers_next_ref_index_ == next_ref_index_); |
| #endif |
| } |
| @@ -4614,7 +4658,7 @@ void Deserializer::Deserialize() { |
| for (intptr_t i = 0; i < num_clusters_; i++) { |
| clusters_[i]->ReadFill(this); |
| #if defined(DEBUG) |
| - intptr_t section_marker = Read<intptr_t>(); |
| + int32_t section_marker = Read<int32_t>(); |
| ASSERT(section_marker == kSectionMarker); |
| #endif |
| } |
| @@ -4698,7 +4742,7 @@ void Deserializer::ReadVMSnapshot() { |
| } |
| #if defined(DEBUG) |
| - intptr_t section_marker = Read<intptr_t>(); |
| + int32_t section_marker = Read<int32_t>(); |
| ASSERT(section_marker == kSectionMarker); |
| #endif |
| @@ -4739,7 +4783,7 @@ void Deserializer::ReadFullSnapshot(ObjectStore* object_store) { |
| } |
| #if defined(DEBUG) |
| - intptr_t section_marker = Read<intptr_t>(); |
| + int32_t section_marker = Read<int32_t>(); |
| ASSERT(section_marker == kSectionMarker); |
| #endif |