| 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 | 
|---|