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

Side by Side Diff: runtime/vm/kernel_binary_flowgraph.h

Issue 2790073004: Restructure the Kernel string table. (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ 5 #ifndef RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_
6 #define RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ 6 #define RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_
7 7
8 #if !defined(DART_PRECOMPILED_RUNTIME) 8 #if !defined(DART_PRECOMPILED_RUNTIME)
9 9
10 #include <map> 10 #include <map>
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 StreamingFlowGraphBuilder* builder_; 44 StreamingFlowGraphBuilder* builder_;
45 Isolate* isolate_; 45 Isolate* isolate_;
46 Zone* zone_; 46 Zone* zone_;
47 TranslationHelper& translation_helper_; 47 TranslationHelper& translation_helper_;
48 // DartTypeTranslator& type_translator_; 48 // DartTypeTranslator& type_translator_;
49 49
50 Script& script_; 50 Script& script_;
51 Instance& result_; 51 Instance& result_;
52 }; 52 };
53 53
54
54 class StreamingFlowGraphBuilder { 55 class StreamingFlowGraphBuilder {
55 public: 56 public:
56 StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder, 57 StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder,
57 const uint8_t* buffer, 58 const uint8_t* buffer,
58 intptr_t buffer_length) 59 intptr_t buffer_length)
59 : flow_graph_builder_(flow_graph_builder), 60 : flow_graph_builder_(flow_graph_builder),
60 translation_helper_(flow_graph_builder->translation_helper_), 61 translation_helper_(flow_graph_builder->translation_helper_),
61 zone_(flow_graph_builder->zone_), 62 zone_(flow_graph_builder->zone_),
62 reader_(new kernel::Reader(buffer, buffer_length)), 63 reader_(new kernel::Reader(buffer, buffer_length)),
63 constant_evaluator_(this, 64 constant_evaluator_(this,
64 flow_graph_builder->zone_, 65 flow_graph_builder->zone_,
65 &flow_graph_builder->translation_helper_, 66 &flow_graph_builder->translation_helper_,
66 &flow_graph_builder->type_translator_), 67 &flow_graph_builder->type_translator_),
67 string_table_offsets_(NULL), 68 string_offset_count_(0),
68 string_table_size_(-1), 69 string_offsets_(NULL),
69 string_table_entries_read_(0),
70 canonical_names_(NULL), 70 canonical_names_(NULL),
71 canonical_names_size_(-1), 71 canonical_names_size_(-1),
72 canonical_names_entries_read_(0), 72 canonical_names_entries_read_(0),
73 canonical_names_next_offset_(-1) {} 73 canonical_names_next_offset_(-1) {}
74 74
75 virtual ~StreamingFlowGraphBuilder() { 75 virtual ~StreamingFlowGraphBuilder() {
76 delete reader_; 76 delete reader_;
77 if (string_table_offsets_ != NULL) { 77 delete[] string_offsets_;
78 delete[] string_table_offsets_; 78 // The canonical names themselves are not (yet) deallocated.
79 } 79 delete[] canonical_names_;
80 if (canonical_names_ != NULL) {
81 // At least for now we'll leak whatever's inside
82 delete[] canonical_names_;
83 }
84 } 80 }
85 81
86 Fragment BuildAt(intptr_t kernel_offset); 82 Fragment BuildAt(intptr_t kernel_offset);
87 83
88 private: 84 private:
89 intptr_t GetStringTableOffset(intptr_t index); 85 intptr_t GetStringOffset(intptr_t index);
90 CanonicalName* GetCanonicalName(intptr_t index); 86 CanonicalName* GetCanonicalName(intptr_t index);
91 87
92 intptr_t ReaderOffset(); 88 intptr_t ReaderOffset();
93 void SetOffset(intptr_t offset); 89 void SetOffset(intptr_t offset);
94 void SkipBytes(intptr_t skip); 90 void SkipBytes(intptr_t skip);
95 uint32_t ReadUInt(); 91 uint32_t ReadUInt();
96 intptr_t ReadListLength(); 92 intptr_t ReadListLength();
97 TokenPosition ReadPosition(bool record = true); 93 TokenPosition ReadPosition(bool record = true);
98 Tag ReadTag(uint8_t* payload = NULL); 94 Tag ReadTag(uint8_t* payload = NULL);
99 95
(...skipping 28 matching lines...) Expand all
128 Fragment BuildIntLiteral(bool is_negative); 124 Fragment BuildIntLiteral(bool is_negative);
129 Fragment BuildDoubleLiteral(); 125 Fragment BuildDoubleLiteral();
130 Fragment BuildBoolLiteral(bool value); 126 Fragment BuildBoolLiteral(bool value);
131 Fragment BuildNullLiteral(); 127 Fragment BuildNullLiteral();
132 128
133 FlowGraphBuilder* flow_graph_builder_; 129 FlowGraphBuilder* flow_graph_builder_;
134 TranslationHelper& translation_helper_; 130 TranslationHelper& translation_helper_;
135 Zone* zone_; 131 Zone* zone_;
136 kernel::Reader* reader_; 132 kernel::Reader* reader_;
137 StreamingConstantEvaluator constant_evaluator_; 133 StreamingConstantEvaluator constant_evaluator_;
138 intptr_t* string_table_offsets_; 134
139 intptr_t string_table_size_; 135 // We build a table that gives us the start and end offsets of all the strings
140 intptr_t string_table_entries_read_; 136 // in the binary.
137 //
138 // The number of string offsets. Note that this is one more than the number
139 // of strings in the binary.
140 intptr_t string_offset_count_;
141
142 // An array of offsets of size string_table_size_ + 1, in order to include the
143 // end offset of the last string. The string with index N consists of the
144 // UTF-8 encoded bytes stretching from string_table_offsets_[N] (enclusive) to
145 // string_table_offsets_[N+1] (exclusive).
146 intptr_t* string_offsets_;
147
141 CanonicalName** canonical_names_; 148 CanonicalName** canonical_names_;
142 intptr_t canonical_names_size_; 149 intptr_t canonical_names_size_;
143 intptr_t canonical_names_entries_read_; 150 intptr_t canonical_names_entries_read_;
144 intptr_t canonical_names_next_offset_; 151 intptr_t canonical_names_next_offset_;
145 152
146 friend class StreamingConstantEvaluator; 153 friend class StreamingConstantEvaluator;
147 }; 154 };
148 155
156
149 } // namespace kernel 157 } // namespace kernel
150 } // namespace dart 158 } // namespace dart
151 159
152 #endif // !defined(DART_PRECOMPILED_RUNTIME) 160 #endif // !defined(DART_PRECOMPILED_RUNTIME)
153 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ 161 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698