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 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 InlineBailout("EffectGraphVisitor::VisitReturnNode (exception)"); | 957 InlineBailout("EffectGraphVisitor::VisitReturnNode (exception)"); |
958 EffectGraphVisitor for_effect(owner()); | 958 EffectGraphVisitor for_effect(owner()); |
959 node->InlinedFinallyNodeAt(i)->Visit(&for_effect); | 959 node->InlinedFinallyNodeAt(i)->Visit(&for_effect); |
960 Append(for_effect); | 960 Append(for_effect); |
961 if (!is_open()) { | 961 if (!is_open()) { |
962 owner()->DeallocateTemps(owner()->temp_count()); | 962 owner()->DeallocateTemps(owner()->temp_count()); |
963 return; | 963 return; |
964 } | 964 } |
965 } | 965 } |
966 | 966 |
| 967 // Call to stub that checks whether the debugger is in single |
| 968 // step mode. This call must happen before the contexts are |
| 969 // unchained so that captured variables can be inspected. |
| 970 AddInstruction(new DebugStepCheckInstr(node->token_pos())); |
| 971 |
967 Value* return_value = for_value.value(); | 972 Value* return_value = for_value.value(); |
968 if (FLAG_enable_type_checks) { | 973 if (FLAG_enable_type_checks) { |
969 const Function& function = owner()->parsed_function()->function(); | 974 const Function& function = owner()->parsed_function()->function(); |
970 const bool is_implicit_dynamic_getter = | 975 const bool is_implicit_dynamic_getter = |
971 (!function.is_static() && | 976 (!function.is_static() && |
972 ((function.kind() == RawFunction::kImplicitGetter) || | 977 ((function.kind() == RawFunction::kImplicitGetter) || |
973 (function.kind() == RawFunction::kImplicitStaticFinalGetter))); | 978 (function.kind() == RawFunction::kImplicitStaticFinalGetter))); |
974 // Implicit getters do not need a type check at return, unless they compute | 979 // Implicit getters do not need a type check at return, unless they compute |
975 // the initial value of a static field. | 980 // the initial value of a static field. |
976 // The body of a constructor cannot modify the type of the | 981 // The body of a constructor cannot modify the type of the |
(...skipping 3058 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4035 LanguageError::kError, | 4040 LanguageError::kError, |
4036 Heap::kNew, | 4041 Heap::kNew, |
4037 "FlowGraphBuilder Bailout: %s %s", | 4042 "FlowGraphBuilder Bailout: %s %s", |
4038 String::Handle(function.name()).ToCString(), | 4043 String::Handle(function.name()).ToCString(), |
4039 reason)); | 4044 reason)); |
4040 Isolate::Current()->long_jump_base()->Jump(1, error); | 4045 Isolate::Current()->long_jump_base()->Jump(1, error); |
4041 } | 4046 } |
4042 | 4047 |
4043 | 4048 |
4044 } // namespace dart | 4049 } // namespace dart |
OLD | NEW |