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

Unified Diff: runtime/vm/kernel_binary.cc

Issue 2886873008: [kernel] Streaming ScopeBuilder (Closed)
Patch Set: Addressed (some) comments; rebased. Created 3 years, 6 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/kernel_binary.h ('k') | runtime/vm/kernel_binary_flowgraph.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_binary.cc
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc
index e7f25e92a2606b05ede46cccae1798b409b15d75..dd791b1446b7002797268ef93d7bb737c5306198 100644
--- a/runtime/vm/kernel_binary.cc
+++ b/runtime/vm/kernel_binary.cc
@@ -88,9 +88,12 @@ void TypeParameterList::ReadFrom(Reader* reader) {
reader->helper()->type_parameters().Push(parameter);
}
- // Read all [TypeParameter]s and their bounds.
- for (intptr_t i = 0; i < length; i++) {
- (*this)[i]->ReadFrom(reader);
+ if (length > 0) {
+ // Read all [TypeParameter]s and their bounds.
+ for (intptr_t i = 0; i < length; i++) {
+ (*this)[i]->ReadFrom(reader);
+ }
+ first_offset = (*this)[0]->kernel_offset_;
}
}
@@ -360,6 +363,7 @@ Field* Field::ReadFrom(Reader* reader) {
position_ = reader->ReadPosition(false);
end_position_ = reader->ReadPosition(false);
flags_ = reader->ReadFlags();
+ reader->ReadUInt(); // parent class binary offset (or 0).
name_ = Name::ReadFrom(reader);
source_uri_index_ = reader->ReadUInt();
reader->set_current_script_id(source_uri_index_);
@@ -378,6 +382,7 @@ Field* Field::ReadFrom(Reader* reader) {
Constructor* Constructor::ReadFrom(Reader* reader) {
TRACE_READ_OFFSET();
+ kernel_offset_ = reader->offset(); // Notice the ReadTag() below.
Tag tag = reader->ReadTag();
ASSERT(tag == kConstructor);
@@ -386,6 +391,7 @@ Constructor* Constructor::ReadFrom(Reader* reader) {
position_ = reader->ReadPosition();
end_position_ = reader->ReadPosition();
flags_ = reader->ReadFlags();
+ reader->ReadUInt(); // parent class binary offset.
name_ = Name::ReadFrom(reader);
annotations_.ReadFromStatic<Expression>(reader);
function_ = FunctionNode::ReadFrom(reader);
@@ -400,6 +406,7 @@ Constructor* Constructor::ReadFrom(Reader* reader) {
Procedure* Procedure::ReadFrom(Reader* reader) {
TRACE_READ_OFFSET();
+ kernel_offset_ = reader->offset(); // Notice the ReadTag() below.
Tag tag = reader->ReadTag();
ASSERT(tag == kProcedure);
@@ -409,6 +416,7 @@ Procedure* Procedure::ReadFrom(Reader* reader) {
end_position_ = reader->ReadPosition(false);
kind_ = static_cast<ProcedureKind>(reader->ReadByte());
flags_ = reader->ReadFlags();
+ reader->ReadUInt(); // parent class binary offset (or 0).
name_ = Name::ReadFrom(reader);
source_uri_index_ = reader->ReadUInt();
reader->set_current_script_id(source_uri_index_);
@@ -624,7 +632,8 @@ VariableGet* VariableGet::ReadFrom(Reader* reader) {
get->position_ = reader->ReadPosition();
get->variable_kernel_offset_ = reader->ReadUInt();
get->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt());
- ASSERT(get->variable_->kernel_offset() == get->variable_kernel_offset_);
+ ASSERT(get->variable_->kernel_offset_no_tag() ==
+ get->variable_kernel_offset_);
reader->ReadOptional<DartType>(); // Unused promoted type.
return get;
}
@@ -637,7 +646,8 @@ VariableGet* VariableGet::ReadFrom(Reader* reader, uint8_t payload) {
get->position_ = reader->ReadPosition();
get->variable_kernel_offset_ = reader->ReadUInt();
get->variable_ = reader->helper()->variables().Lookup(payload);
- ASSERT(get->variable_->kernel_offset() == get->variable_kernel_offset_);
+ ASSERT(get->variable_->kernel_offset_no_tag() ==
+ get->variable_kernel_offset_);
return get;
}
@@ -649,7 +659,8 @@ VariableSet* VariableSet::ReadFrom(Reader* reader) {
set->position_ = reader->ReadPosition();
set->variable_kernel_offset_ = reader->ReadUInt();
set->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt());
- ASSERT(set->variable_->kernel_offset() == set->variable_kernel_offset_);
+ ASSERT(set->variable_->kernel_offset_no_tag() ==
+ set->variable_kernel_offset_);
set->expression_ = Expression::ReadFrom(reader);
set->can_stream_ = set->expression_->can_stream();
@@ -665,7 +676,8 @@ VariableSet* VariableSet::ReadFrom(Reader* reader, uint8_t payload) {
set->variable_ = reader->helper()->variables().Lookup(payload);
set->position_ = reader->ReadPosition();
set->variable_kernel_offset_ = reader->ReadUInt();
- ASSERT(set->variable_->kernel_offset() == set->variable_kernel_offset_);
+ ASSERT(set->variable_->kernel_offset_no_tag() ==
+ set->variable_kernel_offset_);
set->expression_ = Expression::ReadFrom(reader);
set->can_stream_ = set->expression_->can_stream();
@@ -1580,6 +1592,7 @@ VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader,
VariableDeclaration* decl = new VariableDeclaration();
// -1 or -0 depending on whether there's a tag or not.
decl->kernel_offset_ = reader->offset() - (read_tag ? 1 : 0);
+ decl->kernel_offset_no_tag_ = reader->offset();
decl->position_ = reader->ReadPosition();
decl->equals_position_ = reader->ReadPosition();
decl->flags_ = reader->ReadFlags();
@@ -1819,7 +1832,10 @@ FunctionNode* FunctionNode::ReadFrom(Reader* reader) {
TypeParameterScope<ReaderHelper> scope(reader->helper());
FunctionNode* function = new FunctionNode();
- function->kernel_offset_ = reader->offset(); // FunctionNode has no tag.
+ // FunctionNode tag not read yet.
+ function->kernel_offset_ = reader->offset();
+ Tag tag = reader->ReadTag();
+ ASSERT(tag == kFunctionNode);
function->position_ = reader->ReadPosition();
function->end_position_ = reader->ReadPosition();
function->async_marker_ =
« no previous file with comments | « runtime/vm/kernel_binary.h ('k') | runtime/vm/kernel_binary_flowgraph.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698