Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1001)

Unified Diff: runtime/vm/clustered_snapshot.cc

Issue 2132833002: Make core snapshot word-size portable again. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: no size classes Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/clustered_snapshot.h ('k') | runtime/vm/dart.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « runtime/vm/clustered_snapshot.h ('k') | runtime/vm/dart.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698