| Index: runtime/vm/kernel_binary.h
|
| diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
|
| index 08fe8939501f7319f50c8b709af7eee7d9e6f297..6c2be17e88951247bd0547089a1d158f290b532b 100644
|
| --- a/runtime/vm/kernel_binary.h
|
| +++ b/runtime/vm/kernel_binary.h
|
| @@ -312,15 +312,8 @@ class ReaderHelper {
|
| BlockStack<LabeledStatement>* labels() { return labels_; }
|
| void set_labels(BlockStack<LabeledStatement>* labels) { labels_ = labels; }
|
|
|
| - CanonicalName* GetCanonicalName(int index) { return canonical_names_[index]; }
|
| - void SetCanonicalName(int index, CanonicalName* name) {
|
| - canonical_names_[index] = name;
|
| - }
|
| - void SetCanonicalNameCount(int count) { canonical_names_.SetLength(count); }
|
| -
|
| private:
|
| Program* program_;
|
| - MallocGrowableArray<CanonicalName*> canonical_names_;
|
| BlockStack<VariableDeclaration> scope_;
|
| BlockStack<TypeParameter> type_parameters_;
|
| BlockStack<SwitchCase> switch_cases_;
|
| @@ -334,11 +327,12 @@ class Reader {
|
| : buffer_(buffer),
|
| size_(size),
|
| offset_(0),
|
| - string_table_offset_(-1),
|
| string_data_offset_(-1),
|
| - string_offsets_(NULL) {}
|
| + string_offsets_(NULL),
|
| + canonical_name_parents_(NULL),
|
| + canonical_name_strings_(NULL) {}
|
|
|
| - ~Reader() { delete[] string_offsets_; }
|
| + ~Reader();
|
|
|
| uint32_t ReadUInt32() {
|
| ASSERT(offset_ + 4 <= size_);
|
| @@ -497,13 +491,9 @@ class Reader {
|
|
|
| ReaderHelper* helper() { return &builder_; }
|
|
|
| - CanonicalName* ReadCanonicalNameReference() {
|
| - int index = ReadUInt();
|
| - if (index == 0) return NULL;
|
| - CanonicalName* name = builder_.GetCanonicalName(index - 1);
|
| - ASSERT(name != NULL);
|
| - return name;
|
| - }
|
| + // A canonical name reference of -1 indicates none (for optional names), not
|
| + // the root name as in the canonical name table.
|
| + intptr_t ReadCanonicalNameReference() { return ReadUInt() - 1; }
|
|
|
| intptr_t offset() { return offset_; }
|
| void set_offset(intptr_t offset) { offset_ = offset; }
|
| @@ -511,12 +501,6 @@ class Reader {
|
|
|
| const uint8_t* buffer() { return buffer_; }
|
|
|
| - intptr_t string_table_offset() { return string_table_offset_; }
|
| - void MarkStringTableOffset() {
|
| - ASSERT(string_table_offset_ == -1);
|
| - string_table_offset_ = offset_;
|
| - }
|
| -
|
| intptr_t string_data_offset() { return string_data_offset_; }
|
| void MarkStringDataOffset() {
|
| ASSERT(string_data_offset_ == -1);
|
| @@ -532,6 +516,17 @@ class Reader {
|
| return buffer_[string_data_offset_ + string_offsets_[string_index] + index];
|
| }
|
|
|
| + // The canonical name index of a canonical name's parent (-1 indicates that
|
| + // the parent is the root name).
|
| + intptr_t CanonicalNameParent(intptr_t name_index) {
|
| + return canonical_name_parents_[name_index];
|
| + }
|
| +
|
| + // The string index of a canonical name's name string.
|
| + intptr_t CanonicalNameString(intptr_t name_index) {
|
| + return canonical_name_strings_[name_index];
|
| + }
|
| +
|
| private:
|
| const uint8_t* buffer_;
|
| intptr_t size_;
|
| @@ -541,15 +536,18 @@ class Reader {
|
| TokenPosition min_position_;
|
| intptr_t current_script_id_;
|
|
|
| - // When the binary is deserialized the offset of the start of the string table
|
| - // (the length) and the offset of the start of the string data are recorded.
|
| - intptr_t string_table_offset_;
|
| + // The offset of the start of the string data is recorded to allow access to
|
| + // the strings during deserialization.
|
| intptr_t string_data_offset_;
|
|
|
| // The string offsets are decoded to support efficient access to string UTF-8
|
| // encodings.
|
| intptr_t* string_offsets_;
|
|
|
| + // The canonical names are decoded.
|
| + intptr_t* canonical_name_parents_;
|
| + intptr_t* canonical_name_strings_;
|
| +
|
| friend class PositionScope;
|
| friend class Program;
|
| };
|
|
|