Index: runtime/vm/kernel_binary.cc |
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc |
index 313b20cfcd42505d9f6122c1843f2375e6568c5a..4cdc004cb84d9b5d5971f7ca58e34c546554f90b 100644 |
--- a/runtime/vm/kernel_binary.cc |
+++ b/runtime/vm/kernel_binary.cc |
@@ -918,6 +918,7 @@ void Library::WriteTo(Writer* writer) { |
Class* Class::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
+ position_ = reader->ReadPosition(); |
is_abstract_ = reader->ReadBool(); |
name_ = Reference::ReadStringFrom(reader); |
source_uri_index_ = reader->ReadUInt(); |
@@ -929,6 +930,7 @@ Class* Class::ReadFrom(Reader* reader) { |
void Class::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
+ writer->WritePosition(position_); |
writer->WriteBool(is_abstract_); |
name_->WriteTo(writer); |
writer->WriteUInt(source_uri_index_); |
@@ -1166,6 +1168,7 @@ Field* Field::ReadFrom(Reader* reader) { |
ASSERT(tag == kField); |
position_ = reader->ReadPosition(); |
+ end_position_ = reader->ReadPosition(); |
flags_ = reader->ReadFlags(); |
name_ = Name::ReadFrom(reader); |
source_uri_index_ = reader->ReadUInt(); |
@@ -1181,6 +1184,7 @@ void Field::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kField); |
writer->WritePosition(position_); |
+ writer->WritePosition(end_position_); |
writer->WriteFlags(flags_); |
name_->WriteTo(writer); |
writer->WriteUInt(source_uri_index_); |
@@ -1197,6 +1201,8 @@ Constructor* Constructor::ReadFrom(Reader* reader) { |
ASSERT(tag == kConstructor); |
VariableScope<ReaderHelper> parameters(reader->helper()); |
+ position_ = reader->ReadPosition(); |
+ end_position_ = reader->ReadPosition(); |
flags_ = reader->ReadFlags(); |
name_ = Name::ReadFrom(reader); |
annotations_.ReadFromStatic<Expression>(reader); |
@@ -1210,6 +1216,8 @@ void Constructor::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kConstructor); |
+ writer->WritePosition(position_); |
+ writer->WritePosition(end_position_); |
VariableScope<WriterHelper> parameters(writer->helper()); |
writer->WriteFlags(flags_); |
name_->WriteTo(writer); |
@@ -1225,6 +1233,8 @@ Procedure* Procedure::ReadFrom(Reader* reader) { |
ASSERT(tag == kProcedure); |
VariableScope<ReaderHelper> parameters(reader->helper()); |
+ position_ = reader->ReadPosition(); |
+ end_position_ = reader->ReadPosition(); |
kind_ = static_cast<ProcedureKind>(reader->ReadByte()); |
flags_ = reader->ReadFlags(); |
name_ = Name::ReadFrom(reader); |
@@ -1239,6 +1249,8 @@ void Procedure::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kProcedure); |
+ writer->WritePosition(position_); |
+ writer->WritePosition(end_position_); |
VariableScope<WriterHelper> parameters(writer->helper()); |
writer->WriteByte(kind_); |
writer->WriteFlags(flags_); |
@@ -1463,6 +1475,7 @@ void InvalidExpression::WriteTo(Writer* writer) { |
VariableGet* VariableGet::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
VariableGet* get = new VariableGet(); |
+ get->position_ = reader->ReadPosition(); |
get->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt()); |
reader->ReadOptional<DartType>(); // Unused promoted type. |
return get; |
@@ -1472,6 +1485,7 @@ VariableGet* VariableGet::ReadFrom(Reader* reader) { |
VariableGet* VariableGet::ReadFrom(Reader* reader, uint8_t payload) { |
TRACE_READ_OFFSET(); |
VariableGet* get = new VariableGet(); |
+ get->position_ = reader->ReadPosition(); |
get->variable_ = reader->helper()->variables().Lookup(payload); |
return get; |
} |
@@ -1482,8 +1496,10 @@ void VariableGet::WriteTo(Writer* writer) { |
int index = writer->helper()->variables().Lookup(variable_); |
if ((index & kSpecializedPayloadMask) == index) { |
writer->WriteTag(kSpecializedVariableGet, static_cast<uint8_t>(index)); |
+ writer->WritePosition(position_); |
} else { |
writer->WriteTag(kVariableGet); |
+ writer->WritePosition(position_); |
writer->WriteUInt(index); |
writer->WriteOptional<DartType>(NULL); |
} |
@@ -1493,6 +1509,7 @@ void VariableGet::WriteTo(Writer* writer) { |
VariableSet* VariableSet::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
VariableSet* set = new VariableSet(); |
+ set->position_ = reader->ReadPosition(); |
set->variable_ = reader->helper()->variables().Lookup(reader->ReadUInt()); |
set->expression_ = Expression::ReadFrom(reader); |
return set; |
@@ -1503,6 +1520,7 @@ VariableSet* VariableSet::ReadFrom(Reader* reader, uint8_t payload) { |
TRACE_READ_OFFSET(); |
VariableSet* set = new VariableSet(); |
set->variable_ = reader->helper()->variables().Lookup(payload); |
+ set->position_ = reader->ReadPosition(); |
set->expression_ = Expression::ReadFrom(reader); |
return set; |
} |
@@ -1513,8 +1531,10 @@ void VariableSet::WriteTo(Writer* writer) { |
int index = writer->helper()->variables().Lookup(variable_); |
if ((index & kSpecializedPayloadMask) == index) { |
writer->WriteTag(kSpecializedVariableSet, static_cast<uint8_t>(index)); |
+ writer->WritePosition(position_); |
} else { |
writer->WriteTag(kVariableSet); |
+ writer->WritePosition(position_); |
writer->WriteUInt(index); |
} |
expression_->WriteTo(writer); |
@@ -1810,6 +1830,7 @@ void ConditionalExpression::WriteTo(Writer* writer) { |
StringConcatenation* StringConcatenation::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
StringConcatenation* concat = new StringConcatenation(); |
+ concat->position_ = reader->ReadPosition(); |
concat->expressions_.ReadFromStatic<Expression>(reader); |
return concat; |
} |
@@ -1818,6 +1839,7 @@ StringConcatenation* StringConcatenation::ReadFrom(Reader* reader) { |
void StringConcatenation::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kStringConcatenation); |
+ writer->WritePosition(position_); |
expressions_.WriteTo(writer); |
} |
@@ -1825,6 +1847,7 @@ void StringConcatenation::WriteTo(Writer* writer) { |
IsExpression* IsExpression::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
IsExpression* expr = new IsExpression(); |
+ expr->position_ = reader->ReadPosition(); |
expr->operand_ = Expression::ReadFrom(reader); |
expr->type_ = DartType::ReadFrom(reader); |
return expr; |
@@ -1834,6 +1857,7 @@ IsExpression* IsExpression::ReadFrom(Reader* reader) { |
void IsExpression::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kIsExpression); |
+ writer->WritePosition(position_); |
operand_->WriteTo(writer); |
type_->WriteTo(writer); |
} |
@@ -2045,6 +2069,7 @@ MapLiteral* MapLiteral::ReadFrom(Reader* reader, bool is_const) { |
TRACE_READ_OFFSET(); |
MapLiteral* literal = new MapLiteral(); |
literal->is_const_ = is_const; |
+ literal->position_ = reader->ReadPosition(); |
literal->key_type_ = DartType::ReadFrom(reader); |
literal->value_type_ = DartType::ReadFrom(reader); |
literal->entries_.ReadFromStatic<MapEntry>(reader); |
@@ -2055,6 +2080,7 @@ MapLiteral* MapLiteral::ReadFrom(Reader* reader, bool is_const) { |
void MapLiteral::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(is_const_ ? kConstMapLiteral : kMapLiteral); |
+ writer->WritePosition(position_); |
key_type_->WriteTo(writer); |
value_type_->WriteTo(writer); |
entries_.WriteTo(writer); |
@@ -2456,6 +2482,7 @@ void IfStatement::WriteTo(Writer* writer) { |
ReturnStatement* ReturnStatement::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
ReturnStatement* ret = new ReturnStatement(); |
+ ret->position_ = reader->ReadPosition(); |
ret->expression_ = reader->ReadOptional<Expression>(); |
return ret; |
} |
@@ -2464,6 +2491,7 @@ ReturnStatement* ReturnStatement::ReadFrom(Reader* reader) { |
void ReturnStatement::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kReturnStatement); |
+ writer->WritePosition(position_); |
writer->WriteOptional<Expression>(expression_); |
} |
@@ -2531,6 +2559,7 @@ void TryFinally::WriteTo(Writer* writer) { |
YieldStatement* YieldStatement::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
YieldStatement* stmt = new YieldStatement(); |
+ stmt->position_ = reader->ReadPosition(); |
stmt->flags_ = reader->ReadByte(); |
stmt->expression_ = Expression::ReadFrom(reader); |
return stmt; |
@@ -2540,6 +2569,7 @@ YieldStatement* YieldStatement::ReadFrom(Reader* reader) { |
void YieldStatement::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kYieldStatement); |
+ writer->WritePosition(position_); |
writer->WriteByte(flags_); |
expression_->WriteTo(writer); |
} |
@@ -2556,6 +2586,7 @@ VariableDeclaration* VariableDeclaration::ReadFrom(Reader* reader) { |
VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader) { |
TRACE_READ_OFFSET(); |
VariableDeclaration* decl = new VariableDeclaration(); |
+ decl->position_ = reader->ReadPosition(); |
decl->flags_ = reader->ReadFlags(); |
decl->name_ = Reference::ReadStringFrom(reader); |
decl->type_ = DartType::ReadFrom(reader); |
@@ -2575,6 +2606,7 @@ void VariableDeclaration::WriteTo(Writer* writer) { |
void VariableDeclaration::WriteToImpl(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
+ writer->WritePosition(position_); |
writer->WriteFlags(flags_); |
name_->WriteTo(writer); |
type_->WriteTo(writer); |
@@ -2587,6 +2619,7 @@ void VariableDeclaration::WriteToImpl(Writer* writer) { |
FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
FunctionDeclaration* decl = new FunctionDeclaration(); |
+ decl->position_ = reader->ReadPosition(); |
decl->variable_ = VariableDeclaration::ReadFromImpl(reader); |
VariableScope<ReaderHelper> parameters(reader->helper()); |
decl->function_ = FunctionNode::ReadFrom(reader); |
@@ -2597,6 +2630,7 @@ FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { |
void FunctionDeclaration::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
writer->WriteTag(kFunctionDeclaration); |
+ writer->WritePosition(position_); |
variable_->WriteToImpl(writer); |
VariableScope<WriterHelper> parameters(writer->helper()); |
function_->WriteTo(writer); |
@@ -2849,8 +2883,11 @@ FunctionNode* FunctionNode::ReadFrom(Reader* reader) { |
TypeParameterScope<ReaderHelper> scope(reader->helper()); |
FunctionNode* function = new FunctionNode(); |
+ function->position_ = reader->ReadPosition(); |
+ function->end_position_ = reader->ReadPosition(); |
function->async_marker_ = |
static_cast<FunctionNode::AsyncMarker>(reader->ReadByte()); |
+ function->debuggable_ = reader->ReadByte() == 1 ? true : false; |
function->type_parameters().ReadFrom(reader); |
function->required_parameter_count_ = reader->ReadUInt(); |
function->positional_parameters().ReadFromStatic<VariableDeclarationImpl>( |
@@ -2871,7 +2908,10 @@ void FunctionNode::WriteTo(Writer* writer) { |
TRACE_WRITE_OFFSET(); |
TypeParameterScope<WriterHelper> scope(writer->helper()); |
+ writer->WritePosition(position_); |
+ writer->WritePosition(end_position_); |
writer->WriteByte(static_cast<uint8_t>(async_marker_)); |
+ writer->WriteByte(debuggable_ ? 1 : 0); |
type_parameters().WriteTo(writer); |
writer->WriteUInt(required_parameter_count()); |
positional_parameters().WriteToStatic<VariableDeclarationImpl>(writer); |