Index: runtime/vm/kernel_binary.cc |
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc |
index 220355deebc327ddd04a3269cca27296af7d895b..a494bc38e20968df9f3e240a03787e2271a3632a 100644 |
--- a/runtime/vm/kernel_binary.cc |
+++ b/runtime/vm/kernel_binary.cc |
@@ -74,6 +74,7 @@ void List<T>::ReadFromStatic(Reader* reader) { |
} |
} |
+ |
void TypeParameterList::ReadFrom(Reader* reader) { |
// It is possible for the bound of the first type parameter to refer to |
// the second type parameter. This means we need to create [TypeParameter] |
@@ -181,10 +182,7 @@ Library* Library::ReadFrom(Reader* reader) { |
source_uri_index_ = reader->ReadUInt(); |
reader->set_current_script_id(source_uri_index_); |
- int num_imports = reader->ReadUInt(); |
- if (num_imports != 0) { |
- FATAL("Deferred imports not implemented in VM"); |
- } |
+ dependencies().ReadFromStatic<LibraryDependency>(reader); |
int num_typedefs = reader->ReadUInt(); |
typedefs().EnsureInitialized(num_typedefs); |
for (intptr_t i = 0; i < num_typedefs; i++) { |
@@ -209,6 +207,35 @@ Library* Library::ReadFrom(Reader* reader) { |
} |
+LibraryDependency* LibraryDependency::ReadFrom(Reader* reader) { |
+ TRACE_READ_OFFSET(); |
+ |
+ LibraryDependency* node = new LibraryDependency(); |
+ node->flags_ = reader->ReadFlags(); |
+ node->annotations_.ReadFromStatic<Expression>(reader); |
+ node->target_reference_ = Reference::ReadLibraryFrom(reader); |
+ node->name_index_ = StringIndex(reader->ReadUInt()); |
+ node->combinators_.ReadFromStatic<Combinator>(reader); |
+ |
+ return node; |
+} |
+ |
+ |
+Combinator* Combinator::ReadFrom(Reader* reader) { |
+ TRACE_READ_OFFSET(); |
+ |
+ Combinator* node = new Combinator(); |
+ node->is_show_ = (reader->ReadByte() == 1); |
+ int num_names = reader->ReadUInt(); |
+ node->name_indices_.Initialize(num_names); |
+ for (intptr_t i = 0; i < num_names; ++i) { |
+ node->name_indices_[i] = reader->ReadUInt(); |
+ } |
+ |
+ return node; |
+} |
+ |
+ |
Typedef* Typedef::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
@@ -312,6 +339,16 @@ NameIndex Reference::ReadTypedefFrom(Reader* reader) { |
} |
+NameIndex Reference::ReadLibraryFrom(Reader* reader) { |
+ TRACE_READ_OFFSET(); |
+ NameIndex canonical_name = reader->ReadCanonicalNameReference(); |
+ if (canonical_name == -1) { |
+ FATAL("Expected a valid typedef reference, but got `null`"); |
+ } |
+ return canonical_name; |
+} |
+ |
+ |
Field* Field::ReadFrom(Reader* reader) { |
TRACE_READ_OFFSET(); |
kernel_offset_ = reader->offset(); // Notice the ReadTag() below. |