OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 #include "vm/kernel_binary_flowgraph.h" | 5 #include "vm/kernel_binary_flowgraph.h" |
6 #include "vm/compiler.h" | 6 #include "vm/compiler.h" |
7 #include "vm/longjump.h" | 7 #include "vm/longjump.h" |
8 #include "vm/object_store.h" | 8 #include "vm/object_store.h" |
9 | 9 |
10 #if !defined(DART_PRECOMPILED_RUNTIME) | 10 #if !defined(DART_PRECOMPILED_RUNTIME) |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 | 80 |
81 // Ordered with fall-through. | 81 // Ordered with fall-through. |
82 switch (next_read_) { | 82 switch (next_read_) { |
83 case kPosition: | 83 case kPosition: |
84 position_ = builder_->ReadPosition(); // read position. | 84 position_ = builder_->ReadPosition(); // read position. |
85 if (++next_read_ == field) return; | 85 if (++next_read_ == field) return; |
86 case kEqualPosition: | 86 case kEqualPosition: |
87 equals_position_ = builder_->ReadPosition(); // read equals position. | 87 equals_position_ = builder_->ReadPosition(); // read equals position. |
88 if (++next_read_ == field) return; | 88 if (++next_read_ == field) return; |
89 case kFlags: | 89 case kFlags: |
90 flags_ = builder_->ReadFlags(); // read flags. | 90 flags_ = builder_->ReadFlags(); |
91 if (++next_read_ == field) return; | 91 if (++next_read_ == field) return; |
92 case kNameIndex: | 92 case kNameIndex: |
93 name_index_ = builder_->ReadStringReference(); // read name index. | 93 name_index_ = builder_->ReadStringReference(); // read name index. |
94 if (++next_read_ == field) return; | 94 if (++next_read_ == field) return; |
95 case kType: | 95 case kType: |
96 builder_->SkipDartType(); // read type. | 96 builder_->SkipDartType(); // read type. |
97 if (++next_read_ == field) return; | 97 if (++next_read_ == field) return; |
98 case kInitializer: | 98 case kInitializer: |
99 if (builder_->ReadTag() == kSomething) | 99 if (builder_->ReadTag() == kSomething) |
100 builder_->SkipExpression(); // read initializer. | 100 builder_->SkipExpression(); // read initializer. |
(...skipping 25 matching lines...) Expand all Loading... |
126 canonical_name_ = | 126 canonical_name_ = |
127 builder_->ReadCanonicalNameReference(); // read canonical_name. | 127 builder_->ReadCanonicalNameReference(); // read canonical_name. |
128 if (++next_read_ == field) return; | 128 if (++next_read_ == field) return; |
129 case kPosition: | 129 case kPosition: |
130 position_ = builder_->ReadPosition(false); // read position. | 130 position_ = builder_->ReadPosition(false); // read position. |
131 if (++next_read_ == field) return; | 131 if (++next_read_ == field) return; |
132 case kEndPosition: | 132 case kEndPosition: |
133 end_position_ = builder_->ReadPosition(false); // read end position. | 133 end_position_ = builder_->ReadPosition(false); // read end position. |
134 if (++next_read_ == field) return; | 134 if (++next_read_ == field) return; |
135 case kFlags: | 135 case kFlags: |
136 flags_ = builder_->ReadFlags(); // read flags. | 136 flags_ = builder_->ReadFlags(); |
137 if (++next_read_ == field) return; | 137 if (++next_read_ == field) return; |
138 case kName: | 138 case kName: |
139 builder_->SkipName(); // read name. | 139 builder_->SkipName(); // read name. |
140 if (++next_read_ == field) return; | 140 if (++next_read_ == field) return; |
141 case kSourceUriIndex: | 141 case kSourceUriIndex: |
142 source_uri_index_ = builder_->ReadUInt(); // read source_uri_index. | 142 source_uri_index_ = builder_->ReadUInt(); // read source_uri_index. |
143 builder_->current_script_id_ = source_uri_index_; | 143 builder_->current_script_id_ = source_uri_index_; |
144 builder_->record_token_position(position_); | 144 builder_->record_token_position(position_); |
145 builder_->record_token_position(end_position_); | 145 builder_->record_token_position(end_position_); |
146 if (++next_read_ == field) return; | 146 if (++next_read_ == field) return; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 case kPosition: | 198 case kPosition: |
199 position_ = builder_->ReadPosition(false); // read position. | 199 position_ = builder_->ReadPosition(false); // read position. |
200 if (++next_read_ == field) return; | 200 if (++next_read_ == field) return; |
201 case kEndPosition: | 201 case kEndPosition: |
202 end_position_ = builder_->ReadPosition(false); // read end position. | 202 end_position_ = builder_->ReadPosition(false); // read end position. |
203 if (++next_read_ == field) return; | 203 if (++next_read_ == field) return; |
204 case kKind: | 204 case kKind: |
205 kind_ = static_cast<Kind>(builder_->ReadByte()); | 205 kind_ = static_cast<Kind>(builder_->ReadByte()); |
206 if (++next_read_ == field) return; | 206 if (++next_read_ == field) return; |
207 case kFlags: | 207 case kFlags: |
208 flags_ = builder_->ReadFlags(); // read flags. | 208 flags_ = builder_->ReadFlags(); |
209 if (++next_read_ == field) return; | 209 if (++next_read_ == field) return; |
210 case kName: | 210 case kName: |
211 builder_->SkipName(); // read name. | 211 builder_->SkipName(); // read name. |
212 if (++next_read_ == field) return; | 212 if (++next_read_ == field) return; |
213 case kSourceUriIndex: | 213 case kSourceUriIndex: |
214 source_uri_index_ = builder_->ReadUInt(); // read source_uri_index. | 214 source_uri_index_ = builder_->ReadUInt(); // read source_uri_index. |
215 builder_->current_script_id_ = source_uri_index_; | 215 builder_->current_script_id_ = source_uri_index_; |
216 builder_->record_token_position(position_); | 216 builder_->record_token_position(position_); |
217 builder_->record_token_position(end_position_); | 217 builder_->record_token_position(end_position_); |
218 if (++next_read_ == field) return; | 218 if (++next_read_ == field) return; |
(...skipping 30 matching lines...) Expand all Loading... |
249 canonical_name_ = | 249 canonical_name_ = |
250 builder_->ReadCanonicalNameReference(); // read canonical_name. | 250 builder_->ReadCanonicalNameReference(); // read canonical_name. |
251 if (++next_read_ == field) return; | 251 if (++next_read_ == field) return; |
252 case kPosition: | 252 case kPosition: |
253 position_ = builder_->ReadPosition(); // read position. | 253 position_ = builder_->ReadPosition(); // read position. |
254 if (++next_read_ == field) return; | 254 if (++next_read_ == field) return; |
255 case kEndPosition: | 255 case kEndPosition: |
256 end_position_ = builder_->ReadPosition(); // read end position. | 256 end_position_ = builder_->ReadPosition(); // read end position. |
257 if (++next_read_ == field) return; | 257 if (++next_read_ == field) return; |
258 case kFlags: | 258 case kFlags: |
259 flags_ = builder_->ReadFlags(); // read flags. | 259 flags_ = builder_->ReadFlags(); |
260 if (++next_read_ == field) return; | 260 if (++next_read_ == field) return; |
261 case kName: | 261 case kName: |
262 builder_->SkipName(); // read name. | 262 builder_->SkipName(); // read name. |
263 if (++next_read_ == field) return; | 263 if (++next_read_ == field) return; |
264 case kDocumentationCommentIndex: | 264 case kDocumentationCommentIndex: |
265 builder_->ReadStringReference(); | 265 builder_->ReadStringReference(); |
266 if (++next_read_ == field) return; | 266 if (++next_read_ == field) return; |
267 case kAnnotations: { | 267 case kAnnotations: { |
268 annotation_count_ = builder_->ReadListLength(); // read list length. | 268 annotation_count_ = builder_->ReadListLength(); // read list length. |
269 for (intptr_t i = 0; i < annotation_count_; ++i) { | 269 for (intptr_t i = 0; i < annotation_count_; ++i) { |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 return; | 403 return; |
404 } | 404 } |
405 } | 405 } |
406 | 406 |
407 void LibraryHelper::ReadUntilExcluding(Field field) { | 407 void LibraryHelper::ReadUntilExcluding(Field field) { |
408 if (field <= next_read_) return; | 408 if (field <= next_read_) return; |
409 | 409 |
410 // Ordered with fall-through. | 410 // Ordered with fall-through. |
411 switch (next_read_) { | 411 switch (next_read_) { |
412 case kFlags: { | 412 case kFlags: { |
413 word flags = builder_->ReadFlags(); // read flags. | 413 flags_ = builder_->ReadFlags(); |
414 ASSERT(flags == 0); // external libraries not supported | |
415 if (++next_read_ == field) return; | 414 if (++next_read_ == field) return; |
416 } | 415 } |
417 case kCanonicalName: | 416 case kCanonicalName: |
418 canonical_name_ = | 417 canonical_name_ = |
419 builder_->ReadCanonicalNameReference(); // read canonical_name. | 418 builder_->ReadCanonicalNameReference(); // read canonical_name. |
420 if (++next_read_ == field) return; | 419 if (++next_read_ == field) return; |
421 case kName: | 420 case kName: |
422 name_index_ = builder_->ReadStringReference(); // read name index. | 421 name_index_ = builder_->ReadStringReference(); // read name index. |
423 if (++next_read_ == field) return; | 422 if (++next_read_ == field) return; |
424 case kSourceUriIndex: | 423 case kSourceUriIndex: |
(...skipping 4228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4653 | 4652 |
4654 void StreamingFlowGraphBuilder::SkipLibraryCombinator() { | 4653 void StreamingFlowGraphBuilder::SkipLibraryCombinator() { |
4655 ReadBool(); // read is_show. | 4654 ReadBool(); // read is_show. |
4656 intptr_t name_count = ReadUInt(); // read list length. | 4655 intptr_t name_count = ReadUInt(); // read list length. |
4657 for (intptr_t j = 0; j < name_count; ++j) { | 4656 for (intptr_t j = 0; j < name_count; ++j) { |
4658 ReadUInt(); // read ith entry of name_indices. | 4657 ReadUInt(); // read ith entry of name_indices. |
4659 } | 4658 } |
4660 } | 4659 } |
4661 | 4660 |
4662 void StreamingFlowGraphBuilder::SkipLibraryDependency() { | 4661 void StreamingFlowGraphBuilder::SkipLibraryDependency() { |
4663 ReadFlags(); // read flags. | 4662 ReadFlags(); |
4664 SkipListOfExpressions(); // Read annotations. | 4663 SkipListOfExpressions(); // Annotations. |
4665 ReadCanonicalNameReference(); // read target_reference. | 4664 ReadCanonicalNameReference(); |
4666 ReadStringReference(); // read name_index. | 4665 ReadStringReference(); // Name. |
4667 intptr_t combinator_count = ReadListLength(); // read list length. | 4666 intptr_t combinator_count = ReadListLength(); |
4668 for (intptr_t i = 0; i < combinator_count; ++i) { | 4667 for (intptr_t i = 0; i < combinator_count; ++i) { |
4669 SkipLibraryCombinator(); | 4668 SkipLibraryCombinator(); |
4670 } | 4669 } |
4671 } | 4670 } |
4672 | 4671 |
4673 void StreamingFlowGraphBuilder::SkipLibraryPart() { | 4672 void StreamingFlowGraphBuilder::SkipLibraryPart() { |
4674 SkipListOfExpressions(); // Read annotations. | 4673 SkipListOfExpressions(); // Read annotations. |
4675 ReadStringReference(); // read uri_index. | 4674 ReadStringReference(); // read uri_index. |
4676 } | 4675 } |
4677 | 4676 |
(...skipping 29 matching lines...) Expand all Loading... |
4707 } | 4706 } |
4708 | 4707 |
4709 Tag StreamingFlowGraphBuilder::ReadTag(uint8_t* payload) { | 4708 Tag StreamingFlowGraphBuilder::ReadTag(uint8_t* payload) { |
4710 return reader_->ReadTag(payload); | 4709 return reader_->ReadTag(payload); |
4711 } | 4710 } |
4712 | 4711 |
4713 Tag StreamingFlowGraphBuilder::PeekTag(uint8_t* payload) { | 4712 Tag StreamingFlowGraphBuilder::PeekTag(uint8_t* payload) { |
4714 return reader_->PeekTag(payload); | 4713 return reader_->PeekTag(payload); |
4715 } | 4714 } |
4716 | 4715 |
4717 word StreamingFlowGraphBuilder::ReadFlags() { | |
4718 return reader_->ReadFlags(); | |
4719 } | |
4720 | |
4721 void StreamingFlowGraphBuilder::loop_depth_inc() { | 4716 void StreamingFlowGraphBuilder::loop_depth_inc() { |
4722 ++flow_graph_builder_->loop_depth_; | 4717 ++flow_graph_builder_->loop_depth_; |
4723 } | 4718 } |
4724 | 4719 |
4725 void StreamingFlowGraphBuilder::loop_depth_dec() { | 4720 void StreamingFlowGraphBuilder::loop_depth_dec() { |
4726 --flow_graph_builder_->loop_depth_; | 4721 --flow_graph_builder_->loop_depth_; |
4727 } | 4722 } |
4728 | 4723 |
4729 intptr_t StreamingFlowGraphBuilder::for_in_depth() { | 4724 intptr_t StreamingFlowGraphBuilder::for_in_depth() { |
4730 return flow_graph_builder_->for_in_depth_; | 4725 return flow_graph_builder_->for_in_depth_; |
(...skipping 3067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7798 } | 7793 } |
7799 } | 7794 } |
7800 | 7795 |
7801 return Array::Handle(Array::null()); | 7796 return Array::Handle(Array::null()); |
7802 } | 7797 } |
7803 | 7798 |
7804 } // namespace kernel | 7799 } // namespace kernel |
7805 } // namespace dart | 7800 } // namespace dart |
7806 | 7801 |
7807 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 7802 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |