Script snapshots do not use VM isolate object indexes and hence we should not be accounting for max_vm_isolate_object_id.

This is related to the fix done in https://github.com/dart-lang/sdk/issues/23647

BUG=23834
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1234803008 .
This commit is contained in:
Siva Annamalai
2015-07-15 16:56:13 -07:00
parent d09e04eff8
commit 969005dfe6
4 changed files with 14 additions and 30 deletions
+7 -20
View File
@@ -14,16 +14,12 @@ static const int kNumInitialReferences = 4;
ApiMessageReader::ApiMessageReader(const uint8_t* buffer,
intptr_t length,
ReAlloc alloc,
bool use_vm_isolate_snapshot)
ReAlloc alloc)
: BaseReader(buffer, length),
alloc_(alloc),
backward_references_(kNumInitialReferences),
vm_isolate_references_(kNumInitialReferences),
vm_symbol_references_(NULL),
max_vm_isolate_object_id_(
use_vm_isolate_snapshot ?
Object::vm_isolate_snapshot_object_table().Length() : 0) {
vm_symbol_references_(NULL) {
Init();
}
@@ -421,8 +417,7 @@ Dart_CObject* ApiMessageReader::ReadVMSymbol(intptr_t object_id) {
intptr_t ApiMessageReader::NextAvailableObjectId() const {
return backward_references_.length() +
kMaxPredefinedObjectIds + max_vm_isolate_object_id_;
return backward_references_.length() + kMaxPredefinedObjectIds;
}
@@ -807,10 +802,6 @@ Dart_CObject* ApiMessageReader::ReadIndexedObject(intptr_t object_id) {
return &dynamic_type_marker;
}
intptr_t index = object_id - kMaxPredefinedObjectIds;
if (index < max_vm_isolate_object_id_) {
return AllocateDartCObjectVmIsolateObj(index);
}
index -= max_vm_isolate_object_id_;
ASSERT((0 <= index) && (index < backward_references_.length()));
ASSERT(backward_references_[index]->reference() != NULL);
return backward_references_[index]->reference();
@@ -861,8 +852,6 @@ void ApiMessageReader::AddBackRef(intptr_t id,
Dart_CObject* obj,
DeserializeState state) {
intptr_t index = (id - kMaxPredefinedObjectIds);
ASSERT(index >= max_vm_isolate_object_id_);
index -= max_vm_isolate_object_id_;
ASSERT(index == backward_references_.length());
BackRefNode* node = AllocateBackRefNode(obj, state);
ASSERT(node != NULL);
@@ -873,8 +862,6 @@ void ApiMessageReader::AddBackRef(intptr_t id,
Dart_CObject* ApiMessageReader::GetBackRef(intptr_t id) {
ASSERT(id >= kMaxPredefinedObjectIds);
intptr_t index = (id - kMaxPredefinedObjectIds);
ASSERT(index >= max_vm_isolate_object_id_);
index -= max_vm_isolate_object_id_;
if (index < backward_references_.length()) {
return backward_references_[index]->reference();
}
@@ -1012,7 +999,7 @@ void ApiMessageWriter::WriteInt64(Dart_CObject* object) {
void ApiMessageWriter::WriteInlinedHeader(Dart_CObject* object) {
// Write out the serialization header value for this object.
WriteInlinedObjectHeader(SnapshotWriter::FirstObjectId() + object_id_);
WriteInlinedObjectHeader(kMaxPredefinedObjectIds + object_id_);
// Mark object with its object id.
MarkCObject(object, object_id_);
// Advance object id.
@@ -1023,7 +1010,7 @@ void ApiMessageWriter::WriteInlinedHeader(Dart_CObject* object) {
bool ApiMessageWriter::WriteCObject(Dart_CObject* object) {
if (IsCObjectMarked(object)) {
intptr_t object_id = GetMarkedCObjectMark(object);
WriteIndexedObject(SnapshotWriter::FirstObjectId() + object_id);
WriteIndexedObject(kMaxPredefinedObjectIds + object_id);
return true;
}
@@ -1058,7 +1045,7 @@ bool ApiMessageWriter::WriteCObject(Dart_CObject* object) {
bool ApiMessageWriter::WriteCObjectRef(Dart_CObject* object) {
if (IsCObjectMarked(object)) {
intptr_t object_id = GetMarkedCObjectMark(object);
WriteIndexedObject(SnapshotWriter::FirstObjectId() + object_id);
WriteIndexedObject(kMaxPredefinedObjectIds + object_id);
return true;
}
@@ -1096,7 +1083,7 @@ bool ApiMessageWriter::WriteForwardedCObject(Dart_CObject* object) {
// Write out the serialization header value for this object.
intptr_t object_id = GetMarkedCObjectMark(object);
WriteInlinedObjectHeader(SnapshotWriter::FirstObjectId() + object_id);
WriteInlinedObjectHeader(kMaxPredefinedObjectIds + object_id);
// Write out the class and tags information.
WriteIndexedObject(kArrayCid);
WriteTags(0);
+1 -4
View File
@@ -48,8 +48,7 @@ class ApiMessageReader : public BaseReader {
// recommended.
ApiMessageReader(const uint8_t* buffer,
intptr_t length,
ReAlloc alloc,
bool use_vm_isolate_snapshot = true);
ReAlloc alloc);
~ApiMessageReader() { }
Dart_CObject* ReadMessage();
@@ -147,7 +146,6 @@ class ApiMessageReader : public BaseReader {
ApiGrowableArray<BackRefNode*> backward_references_;
ApiGrowableArray<Dart_CObject*> vm_isolate_references_;
Dart_CObject** vm_symbol_references_;
intptr_t max_vm_isolate_object_id_;
Dart_CObject type_arguments_marker;
Dart_CObject dynamic_type_marker;
@@ -202,7 +200,6 @@ class ApiMessageWriter : public BaseWriter {
Dart_CObject** forward_list_;
intptr_t forward_list_length_;
intptr_t forward_id_;
intptr_t max_vm_isolate_object_id_;
DISALLOW_COPY_AND_ASSIGN(ApiMessageWriter);
};
+4 -3
View File
@@ -191,7 +191,8 @@ SnapshotReader::SnapshotReader(
typed_data_(TypedData::Handle(isolate)),
error_(UnhandledException::Handle(isolate)),
max_vm_isolate_object_id_(
Object::vm_isolate_snapshot_object_table().Length()),
(kind == Snapshot::kFull) ?
Object::vm_isolate_snapshot_object_table().Length() : 0),
backward_references_(backward_refs) {
}
@@ -2266,7 +2267,7 @@ ScriptSnapshotWriter::ScriptSnapshotWriter(uint8_t** buffer,
kInitialSize,
&forward_list_,
true),
forward_list_(SnapshotWriter::FirstObjectId()) {
forward_list_(kMaxPredefinedObjectIds) {
ASSERT(buffer != NULL);
ASSERT(alloc != NULL);
}
@@ -2324,7 +2325,7 @@ MessageWriter::MessageWriter(uint8_t** buffer,
kInitialSize,
&forward_list_,
can_send_any_object),
forward_list_(SnapshotWriter::FirstObjectId()) {
forward_list_(kMaxPredefinedObjectIds) {
ASSERT(buffer != NULL);
ASSERT(alloc != NULL);
}
+2 -3
View File
@@ -863,7 +863,7 @@ class TestSnapshotWriter : public SnapshotWriter {
kInitialSize,
&forward_list_,
true),
forward_list_(SnapshotWriter::FirstObjectId()) {
forward_list_(kMaxPredefinedObjectIds) {
ASSERT(buffer != NULL);
ASSERT(alloc != NULL);
}
@@ -1582,8 +1582,7 @@ TEST_CASE(IntArrayMessage) {
ApiNativeScope scope;
ApiMessageReader api_reader(buffer,
writer.BytesWritten(),
&zone_allocator,
false);
&zone_allocator);
Dart_CObject* root = api_reader.ReadMessage();
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);