Index: runtime/vm/kernel_binary.cc |
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc |
index 78f982b34a42a46e339fcca8d1cf16a6ed5b922d..d70ec1f6cf3d70a46d4b5aa1b34da6abdca94669 100644 |
--- a/runtime/vm/kernel_binary.cc |
+++ b/runtime/vm/kernel_binary.cc |
@@ -132,12 +132,33 @@ String* String::ReadFrom(Reader* reader) { |
String* String::ReadFromImpl(Reader* reader) { |
TRACE_READ_OFFSET(); |
- uint32_t bytes = reader->ReadUInt(); |
- return new String(reader->Consume(bytes), bytes); |
+ intptr_t size = reader->ReadUInt(); |
+ return ReadRaw(reader, size); |
} |
+ |
+String* String::ReadRaw(Reader* reader, intptr_t size) { |
+ return new String(reader->Consume(size), size); |
+} |
+ |
+ |
void StringTable::ReadFrom(Reader* reader) { |
- strings_.ReadFromStatic<StringImpl>(reader); |
+ TRACE_READ_OFFSET(); |
+ // Read the table of end offsets. |
+ intptr_t length = reader->ReadUInt(); |
+ int* end_offsets = new int[length]; |
+ for (intptr_t i = 0; i < length; ++i) { |
+ end_offsets[i] = reader->ReadUInt(); |
+ } |
+ // Read the UTF-8 encoded strings. |
+ 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; |
} |