Index: runtime/vm/kernel_binary.cc |
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc |
index d38dd8b0563f954f1dbb116d852022f294b82acc..8f63e6b05ee5ce69871239d7e100ee50294c587c 100644 |
--- a/runtime/vm/kernel_binary.cc |
+++ b/runtime/vm/kernel_binary.cc |
@@ -87,12 +87,11 @@ void TypeParameterList::ReadFrom(Reader* reader) { |
} |
-template <typename A, typename B> |
-Tuple<A, B>* Tuple<A, B>::ReadFrom(Reader* reader) { |
+NamedParameter* NamedParameter::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
- A* first = A::ReadFrom(reader); |
- B* second = B::ReadFrom(reader); |
- return new Tuple<A, B>(first, second); |
+ intptr_t name_index = reader->ReadUInt(); |
+ DartType* type = DartType::ReadFrom(reader); |
+ return new NamedParameter(name_index, type); |
} |
@@ -115,42 +114,6 @@ class VariableDeclarationImpl { |
}; |
-String* String::ReadFrom(Reader* reader) { |
- TRACE_READ_OFFSET(); |
- return Reference::ReadStringFrom(reader); |
-} |
- |
- |
-String* String::ReadRaw(Reader* reader, intptr_t size) { |
- ASSERT(reader->string_data_offset() >= 0); |
- String* result = |
- new String(reader->offset() - reader->string_data_offset(), size); |
- reader->Consume(size); |
- return result; |
-} |
- |
- |
-void StringTable::ReadFrom(Reader* reader) { |
- TRACE_READ_OFFSET(); |
- // Read the table of end offsets. |
- intptr_t length = reader->ReadUInt(); |
- intptr_t* end_offsets = new intptr_t[length]; |
- for (intptr_t i = 0; i < length; ++i) { |
- end_offsets[i] = reader->ReadUInt(); |
- } |
- // Read the UTF-8 encoded strings. |
- reader->MarkStringDataOffset(); |
- strings_.EnsureInitialized(length); |
- intptr_t start_offset = 0; |
- for (intptr_t i = 0; i < length; ++i) { |
- ASSERT(strings_[i] == NULL); |
- strings_[i] = String::ReadRaw(reader, end_offsets[i] - start_offset); |
- start_offset = end_offsets[i]; |
- } |
- delete[] end_offsets; |
-} |
- |
- |
void SourceTable::ReadFrom(Reader* reader) { |
size_ = reader->ReadUInt(); |
sources_ = new Source[size_]; |
@@ -206,8 +169,8 @@ Library* Library::ReadFrom(Reader* reader) { |
kernel_data_size_ = reader->size(); |
canonical_name_ = reader->ReadCanonicalNameReference(); |
- name_ = Reference::ReadStringFrom(reader); |
- import_uri_ = canonical_name_->name(); |
+ name_index_ = reader->ReadUInt(); |
+ import_uri_index_ = canonical_name_->name(); |
source_uri_index_ = reader->ReadUInt(); |
reader->set_current_script_id(source_uri_index_); |
@@ -240,7 +203,7 @@ Typedef* Typedef::ReadFrom(Reader* reader) { |
canonical_name_ = reader->ReadCanonicalNameReference(); |
position_ = reader->ReadPosition(false); |
- name_ = Reference::ReadStringFrom(reader); |
+ name_index_ = reader->ReadUInt(); |
source_uri_index_ = reader->ReadUInt(); |
type_parameters_.ReadFrom(reader); |
type_ = DartType::ReadFrom(reader); |
@@ -255,7 +218,7 @@ Class* Class::ReadFrom(Reader* reader) { |
canonical_name_ = reader->ReadCanonicalNameReference(); |
position_ = reader->ReadPosition(false); |
is_abstract_ = reader->ReadBool(); |
- name_ = Reference::ReadStringFrom(reader); |
+ name_index_ = reader->ReadUInt(); |
source_uri_index_ = reader->ReadUInt(); |
reader->set_current_script_id(source_uri_index_); |
reader->record_token_position(position_); |
@@ -346,12 +309,6 @@ CanonicalName* Reference::ReadTypedefFrom(Reader* reader) { |
} |
-String* Reference::ReadStringFrom(Reader* reader) { |
- int index = reader->ReadUInt(); |
- return reader->helper()->program()->string_table().strings()[index]; |
-} |
- |
- |
Field* Field::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
kernel_offset_ = reader->offset(); // Notice the ReadTag() below. |
@@ -719,9 +676,9 @@ Arguments* Arguments::ReadFrom(Reader* reader) { |
NamedExpression* NamedExpression::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
- String* name = Reference::ReadStringFrom(reader); |
+ intptr_t name_index = reader->ReadUInt(); |
Expression* expression = Expression::ReadFrom(reader); |
- return new NamedExpression(name, expression); |
+ return new NamedExpression(name_index, expression); |
} |
@@ -842,7 +799,7 @@ AsExpression* AsExpression::ReadFrom(Reader* reader) { |
StringLiteral* StringLiteral::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
- StringLiteral* lit = new StringLiteral(Reference::ReadStringFrom(reader)); |
+ StringLiteral* lit = new StringLiteral(reader->ReadUInt()); |
lit->kernel_offset_ = offset; |
return lit; |
} |
@@ -851,7 +808,7 @@ StringLiteral* StringLiteral::ReadFrom(Reader* reader) { |
BigintLiteral* BigintLiteral::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
intptr_t offset = reader->offset() - 1; // -1 to include tag byte. |
- BigintLiteral* lit = new BigintLiteral(Reference::ReadStringFrom(reader)); |
+ BigintLiteral* lit = new BigintLiteral(reader->ReadUInt()); |
lit->kernel_offset_ = offset; |
return lit; |
} |
@@ -880,7 +837,7 @@ DoubleLiteral* DoubleLiteral::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
DoubleLiteral* literal = new DoubleLiteral(); |
literal->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
- literal->value_ = Reference::ReadStringFrom(reader); |
+ literal->value_index_ = reader->ReadUInt(); |
return literal; |
} |
@@ -906,7 +863,7 @@ SymbolLiteral* SymbolLiteral::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
SymbolLiteral* lit = new SymbolLiteral(); |
lit->kernel_offset_ = reader->offset() - 1; // -1 to include tag byte. |
- lit->value_ = Reference::ReadStringFrom(reader); |
+ lit->value_index_ = reader->ReadUInt(); |
return lit; |
} |
@@ -1384,7 +1341,7 @@ VariableDeclaration* VariableDeclaration::ReadFromImpl(Reader* reader, |
decl->position_ = reader->ReadPosition(); |
decl->equals_position_ = reader->ReadPosition(); |
decl->flags_ = reader->ReadFlags(); |
- decl->name_ = Reference::ReadStringFrom(reader); |
+ decl->name_index_ = reader->ReadUInt(); |
decl->type_ = DartType::ReadFrom(reader); |
decl->initializer_ = reader->ReadOptional<Expression>(); |
@@ -1412,12 +1369,13 @@ FunctionDeclaration* FunctionDeclaration::ReadFrom(Reader* reader) { |
Name* Name::ReadFrom(Reader* reader) { |
- String* name = Reference::ReadStringFrom(reader); |
- if (name->size() >= 1 && reader->CharacterAt(name, 0) == '_') { |
+ intptr_t name_index = reader->ReadUInt(); |
+ if ((reader->StringLength(name_index) >= 1) && |
+ (reader->CharacterAt(name_index, 0) == '_')) { |
CanonicalName* library_reference = reader->ReadCanonicalNameReference(); |
- return new Name(name, library_reference); |
+ return new Name(name_index, library_reference); |
} else { |
- return new Name(name, NULL); |
+ return new Name(name_index, NULL); |
} |
} |
@@ -1507,7 +1465,7 @@ FunctionType* FunctionType::ReadFrom(Reader* reader) { |
type->type_parameters().ReadFrom(reader); |
type->required_parameter_count_ = reader->ReadUInt(); |
type->positional_parameters().ReadFromStatic<DartType>(reader); |
- type->named_parameters().ReadFromStatic<Tuple<String, DartType> >(reader); |
+ type->named_parameters().ReadFromStatic<NamedParameter>(reader); |
type->return_type_ = DartType::ReadFrom(reader); |
return type; |
} |
@@ -1549,9 +1507,22 @@ Program* Program::ReadFrom(Reader* reader) { |
program->canonical_name_root_ = CanonicalName::NewRoot(); |
reader->helper()->set_program(program); |
- program->string_table_.ReadFrom(reader); |
- program->string_data_offset_ = reader->string_data_offset(); |
- ASSERT(program->string_data_offset_ >= 0); |
+ // Skip the table of string end offsets. |
+ reader->MarkStringTableOffset(); |
+ intptr_t length = reader->ReadUInt(); |
+ reader->string_offsets_ = new intptr_t[length + 1]; |
+ intptr_t offset = 0; |
+ for (intptr_t i = 0; i < length; ++i) { |
+ reader->string_offsets_[i] = offset; |
+ offset = reader->ReadUInt(); |
+ } |
+ reader->string_offsets_[length] = offset; |
+ // Skip the UTF-8 encoded strings. |
+ reader->MarkStringDataOffset(); |
+ reader->Consume(offset); |
+ |
+ program->string_table_offset_ = reader->string_table_offset(); |
+ ASSERT(program->string_table_offset_ >= 0); |
program->source_table_.ReadFrom(reader); |
int canonical_names = reader->ReadUInt(); |
@@ -1565,9 +1536,8 @@ Program* Program::ReadFrom(Reader* reader) { |
parent = program->canonical_name_root(); |
} |
ASSERT(parent != NULL); |
- int name_index = reader->ReadUInt(); |
- String* name = program->string_table().strings()[name_index]; |
- CanonicalName* canonical_name = parent->AddChild(name); |
+ intptr_t name_index = reader->ReadUInt(); |
+ CanonicalName* canonical_name = parent->AddChild(name_index); |
reader->helper()->SetCanonicalName(i, canonical_name); |
} |
@@ -1613,7 +1583,7 @@ FunctionNode* FunctionNode::ReadFrom(Reader* reader) { |
TypeParameter* TypeParameter::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
- name_ = Reference::ReadStringFrom(reader); |
+ name_index_ = reader->ReadUInt(); |
bound_ = DartType::ReadFrom(reader); |
return this; |
} |