| 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 <map> | 5 #include <map> |
| 6 #include <set> | 6 #include <set> |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "vm/kernel_to_il.h" | 9 #include "vm/kernel_to_il.h" |
| 10 | 10 |
| (...skipping 5792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5803 JoinEntryInstr* body_join = NULL; | 5803 JoinEntryInstr* body_join = NULL; |
| 5804 if (block.HadJumper(switch_case)) { | 5804 if (block.HadJumper(switch_case)) { |
| 5805 body_join = block.Destination(switch_case); | 5805 body_join = block.Destination(switch_case); |
| 5806 body_fragments[i] = Fragment(body_join) + body_fragments[i]; | 5806 body_fragments[i] = Fragment(body_join) + body_fragments[i]; |
| 5807 } | 5807 } |
| 5808 | 5808 |
| 5809 for (intptr_t j = 0; j < switch_case->expressions().length(); j++) { | 5809 for (intptr_t j = 0; j < switch_case->expressions().length(); j++) { |
| 5810 TargetEntryInstr* then; | 5810 TargetEntryInstr* then; |
| 5811 TargetEntryInstr* otherwise; | 5811 TargetEntryInstr* otherwise; |
| 5812 | 5812 |
| 5813 current_instructions += Constant(constant_evaluator_.EvaluateExpression( | 5813 Expression* expression = switch_case->expressions()[j]; |
| 5814 switch_case->expressions()[j])); | 5814 current_instructions += |
| 5815 Constant(constant_evaluator_.EvaluateExpression(expression)); |
| 5815 current_instructions += PushArgument(); | 5816 current_instructions += PushArgument(); |
| 5816 current_instructions += LoadLocal(scopes_->switch_variable); | 5817 current_instructions += LoadLocal(scopes_->switch_variable); |
| 5817 current_instructions += PushArgument(); | 5818 current_instructions += PushArgument(); |
| 5818 current_instructions += InstanceCall( | 5819 current_instructions += InstanceCall( |
| 5819 TokenPosition::kNoSource, Symbols::EqualOperator(), Token::kEQ, | 5820 expression->position(), Symbols::EqualOperator(), Token::kEQ, |
| 5820 /*argument_count=*/2, | 5821 /*argument_count=*/2, |
| 5821 /*num_args_checked=*/2); | 5822 /*num_args_checked=*/2); |
| 5822 current_instructions += BranchIfTrue(&then, &otherwise); | 5823 current_instructions += BranchIfTrue(&then, &otherwise); |
| 5823 | 5824 |
| 5824 Fragment then_fragment(then); | 5825 Fragment then_fragment(then); |
| 5825 | 5826 |
| 5826 if (body_join != NULL) { | 5827 if (body_join != NULL) { |
| 5827 // There are several branches to the body, so we will make a goto to | 5828 // There are several branches to the body, so we will make a goto to |
| 5828 // the join block (the real body has already been prepended with a | 5829 // the join block (the real body has already been prepended with a |
| 5829 // join instruction). | 5830 // join instruction). |
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6439 thread->clear_sticky_error(); | 6440 thread->clear_sticky_error(); |
| 6440 return error.raw(); | 6441 return error.raw(); |
| 6441 } | 6442 } |
| 6442 } | 6443 } |
| 6443 | 6444 |
| 6444 | 6445 |
| 6445 } // namespace kernel | 6446 } // namespace kernel |
| 6446 } // namespace dart | 6447 } // namespace dart |
| 6447 | 6448 |
| 6448 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 6449 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |