| 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 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1289 for (intptr_t j = 0; j < expression_count; ++j) { | 1289 for (intptr_t j = 0; j < expression_count; ++j) { |
| 1290 builder_->ReadPosition(); // read jth position. | 1290 builder_->ReadPosition(); // read jth position. |
| 1291 VisitExpression(); // read jth expression. | 1291 VisitExpression(); // read jth expression. |
| 1292 } | 1292 } |
| 1293 builder_->ReadBool(); // read is_default. | 1293 builder_->ReadBool(); // read is_default. |
| 1294 VisitStatement(); // read body. | 1294 VisitStatement(); // read body. |
| 1295 } | 1295 } |
| 1296 return; | 1296 return; |
| 1297 } | 1297 } |
| 1298 case kContinueSwitchStatement: | 1298 case kContinueSwitchStatement: |
| 1299 builder_->ReadUInt(); // read target_index. | 1299 builder_->ReadPosition(); // read position. |
| 1300 builder_->ReadUInt(); // read target_index. |
| 1300 return; | 1301 return; |
| 1301 case kIfStatement: | 1302 case kIfStatement: |
| 1302 VisitExpression(); // read condition. | 1303 VisitExpression(); // read condition. |
| 1303 VisitStatement(); // read then. | 1304 VisitStatement(); // read then. |
| 1304 VisitStatement(); // read otherwise. | 1305 VisitStatement(); // read otherwise. |
| 1305 return; | 1306 return; |
| 1306 case kReturnStatement: { | 1307 case kReturnStatement: { |
| 1307 if ((depth_.function_ == 0) && (depth_.finally_ > 0) && | 1308 if ((depth_.function_ == 0) && (depth_.finally_ > 0) && |
| 1308 (result_->finally_return_variable == NULL)) { | 1309 (result_->finally_return_variable == NULL)) { |
| 1309 const String& name = H.DartSymbol(":try_finally_return_value"); | 1310 const String& name = H.DartSymbol(":try_finally_return_value"); |
| (...skipping 3262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4572 for (intptr_t j = 0; j < expression_count; ++j) { | 4573 for (intptr_t j = 0; j < expression_count; ++j) { |
| 4573 ReadPosition(); // read jth position. | 4574 ReadPosition(); // read jth position. |
| 4574 SkipExpression(); // read jth expression. | 4575 SkipExpression(); // read jth expression. |
| 4575 } | 4576 } |
| 4576 ReadBool(); // read is_default. | 4577 ReadBool(); // read is_default. |
| 4577 SkipStatement(); // read body. | 4578 SkipStatement(); // read body. |
| 4578 } | 4579 } |
| 4579 return; | 4580 return; |
| 4580 } | 4581 } |
| 4581 case kContinueSwitchStatement: | 4582 case kContinueSwitchStatement: |
| 4582 ReadUInt(); // read target_index. | 4583 ReadPosition(); // read position. |
| 4584 ReadUInt(); // read target_index. |
| 4583 return; | 4585 return; |
| 4584 case kIfStatement: | 4586 case kIfStatement: |
| 4585 SkipExpression(); // read condition. | 4587 SkipExpression(); // read condition. |
| 4586 SkipStatement(); // read then. | 4588 SkipStatement(); // read then. |
| 4587 SkipStatement(); // read otherwise. | 4589 SkipStatement(); // read otherwise. |
| 4588 return; | 4590 return; |
| 4589 case kReturnStatement: { | 4591 case kReturnStatement: { |
| 4590 ReadPosition(); // read position | 4592 ReadPosition(); // read position |
| 4591 Tag tag = ReadTag(); // read (first part of) expression. | 4593 Tag tag = ReadTag(); // read (first part of) expression. |
| 4592 if (tag == kSomething) { | 4594 if (tag == kSomething) { |
| (...skipping 2358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6951 } | 6953 } |
| 6952 | 6954 |
| 6953 delete[] body_fragments; | 6955 delete[] body_fragments; |
| 6954 delete[] case_expression_offsets; | 6956 delete[] case_expression_offsets; |
| 6955 | 6957 |
| 6956 SetOffset(end_offset); | 6958 SetOffset(end_offset); |
| 6957 return Fragment(head_instructions.entry, current_instructions.current); | 6959 return Fragment(head_instructions.entry, current_instructions.current); |
| 6958 } | 6960 } |
| 6959 | 6961 |
| 6960 Fragment StreamingFlowGraphBuilder::BuildContinueSwitchStatement() { | 6962 Fragment StreamingFlowGraphBuilder::BuildContinueSwitchStatement() { |
| 6961 intptr_t target_index = ReadUInt(); // read target index. | 6963 TokenPosition position = ReadPosition(); // read position. |
| 6964 intptr_t target_index = ReadUInt(); // read target index. |
| 6962 | 6965 |
| 6963 TryFinallyBlock* outer_finally = NULL; | 6966 TryFinallyBlock* outer_finally = NULL; |
| 6964 intptr_t target_context_depth = -1; | 6967 intptr_t target_context_depth = -1; |
| 6965 JoinEntryInstr* entry = switch_block()->Destination( | 6968 JoinEntryInstr* entry = switch_block()->Destination( |
| 6966 target_index, &outer_finally, &target_context_depth); | 6969 target_index, &outer_finally, &target_context_depth); |
| 6967 | 6970 |
| 6968 Fragment instructions; | 6971 Fragment instructions; |
| 6969 instructions += | 6972 instructions += |
| 6970 TranslateFinallyFinalizers(outer_finally, target_context_depth); | 6973 TranslateFinallyFinalizers(outer_finally, target_context_depth); |
| 6971 if (instructions.is_open()) { | 6974 if (instructions.is_open()) { |
| 6975 if (NeedsDebugStepCheck(parsed_function()->function(), position)) { |
| 6976 instructions += DebugStepCheck(position); |
| 6977 } |
| 6972 instructions += Goto(entry); | 6978 instructions += Goto(entry); |
| 6973 } | 6979 } |
| 6974 return instructions; | 6980 return instructions; |
| 6975 } | 6981 } |
| 6976 | 6982 |
| 6977 Fragment StreamingFlowGraphBuilder::BuildIfStatement() { | 6983 Fragment StreamingFlowGraphBuilder::BuildIfStatement() { |
| 6978 bool negate; | 6984 bool negate; |
| 6979 Fragment instructions = TranslateCondition(&negate); // read condition. | 6985 Fragment instructions = TranslateCondition(&negate); // read condition. |
| 6980 TargetEntryInstr* then_entry; | 6986 TargetEntryInstr* then_entry; |
| 6981 TargetEntryInstr* otherwise_entry; | 6987 TargetEntryInstr* otherwise_entry; |
| (...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7815 } | 7821 } |
| 7816 } | 7822 } |
| 7817 | 7823 |
| 7818 return Array::Handle(Array::null()); | 7824 return Array::Handle(Array::null()); |
| 7819 } | 7825 } |
| 7820 | 7826 |
| 7821 } // namespace kernel | 7827 } // namespace kernel |
| 7822 } // namespace dart | 7828 } // namespace dart |
| 7823 | 7829 |
| 7824 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 7830 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |