| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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/flow_graph_builder.h" | 5 #include "vm/flow_graph_builder.h" |
| 6 | 6 |
| 7 #include "lib/invocation_mirror.h" | 7 #include "lib/invocation_mirror.h" |
| 8 #include "vm/ast_printer.h" | 8 #include "vm/ast_printer.h" |
| 9 #include "vm/bit_vector.h" | 9 #include "vm/bit_vector.h" |
| 10 #include "vm/class_finalizer.h" | 10 #include "vm/class_finalizer.h" |
| (...skipping 3766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3777 pos = 1; | 3777 pos = 1; |
| 3778 } | 3778 } |
| 3779 while (pos < num_params) { | 3779 while (pos < num_params) { |
| 3780 const LocalVariable& parameter = *scope->VariableAt(pos); | 3780 const LocalVariable& parameter = *scope->VariableAt(pos); |
| 3781 ASSERT(parameter.owner() == scope); | 3781 ASSERT(parameter.owner() == scope); |
| 3782 if (!CanSkipTypeCheck(parameter.token_pos(), | 3782 if (!CanSkipTypeCheck(parameter.token_pos(), |
| 3783 NULL, | 3783 NULL, |
| 3784 parameter.type(), | 3784 parameter.type(), |
| 3785 parameter.name())) { | 3785 parameter.name())) { |
| 3786 Value* parameter_value = Bind(BuildLoadLocal(parameter)); | 3786 Value* parameter_value = Bind(BuildLoadLocal(parameter)); |
| 3787 AssertAssignableInstr* assert_assignable = | 3787 Do(BuildAssertAssignable(parameter.token_pos(), |
| 3788 BuildAssertAssignable(parameter.token_pos(), | 3788 parameter_value, |
| 3789 parameter_value, | 3789 parameter.type(), |
| 3790 parameter.type(), | 3790 parameter.name())); |
| 3791 parameter.name()); | |
| 3792 parameter_value = Bind(assert_assignable); | |
| 3793 // Store the type checked argument back to its corresponding local | |
| 3794 // variable so that ssa renaming detects the dependency and makes use | |
| 3795 // of the checked type in type propagation. | |
| 3796 Do(BuildStoreLocal(parameter, parameter_value)); | |
| 3797 } | 3791 } |
| 3798 pos++; | 3792 pos++; |
| 3799 } | 3793 } |
| 3800 } | 3794 } |
| 3801 | 3795 |
| 3802 // Continuation part: | 3796 // Continuation part: |
| 3803 // If this node sequence is the body of an async closure leave room for a | 3797 // If this node sequence is the body of an async closure leave room for a |
| 3804 // preamble. The preamble is generated after visiting the body. | 3798 // preamble. The preamble is generated after visiting the body. |
| 3805 GotoInstr* preamble_start = NULL; | 3799 GotoInstr* preamble_start = NULL; |
| 3806 if (is_top_level_sequence && | 3800 if (is_top_level_sequence && |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4255 Report::MessageF(Report::kBailout, | 4249 Report::MessageF(Report::kBailout, |
| 4256 Script::Handle(function.script()), | 4250 Script::Handle(function.script()), |
| 4257 function.token_pos(), | 4251 function.token_pos(), |
| 4258 "FlowGraphBuilder Bailout: %s %s", | 4252 "FlowGraphBuilder Bailout: %s %s", |
| 4259 String::Handle(function.name()).ToCString(), | 4253 String::Handle(function.name()).ToCString(), |
| 4260 reason); | 4254 reason); |
| 4261 UNREACHABLE(); | 4255 UNREACHABLE(); |
| 4262 } | 4256 } |
| 4263 | 4257 |
| 4264 } // namespace dart | 4258 } // namespace dart |
| OLD | NEW |