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

Unified Diff: runtime/vm/kernel_binary.cc

Issue 2790073004: Restructure the Kernel string table. (Closed)
Patch Set: Incorporate review comments. Created 3 years, 8 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.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 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;
}
« no previous file with comments | « runtime/vm/kernel.h ('k') | runtime/vm/kernel_binary_flowgraph.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698