Fix for issue 23834 (https://github.com/dart-lang/sdk/issues/23834)
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user