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/compiler.h" | 10 #include "vm/compiler.h" |
(...skipping 4318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4329 | 4329 |
4330 // NOTE: The implicit variables ':saved_try_context_var', ':exception_var' | 4330 // NOTE: The implicit variables ':saved_try_context_var', ':exception_var' |
4331 // and ':stack_trace_var' can never be captured variables. | 4331 // and ':stack_trace_var' can never be captured variables. |
4332 ASSERT(!catch_block->context_var().is_captured()); | 4332 ASSERT(!catch_block->context_var().is_captured()); |
4333 ASSERT(!catch_block->exception_var().is_captured()); | 4333 ASSERT(!catch_block->exception_var().is_captured()); |
4334 ASSERT(!catch_block->stacktrace_var().is_captured()); | 4334 ASSERT(!catch_block->stacktrace_var().is_captured()); |
4335 | 4335 |
4336 CatchBlockEntryInstr* catch_entry = | 4336 CatchBlockEntryInstr* catch_entry = |
4337 new(Z) CatchBlockEntryInstr(owner()->AllocateBlockId(), | 4337 new(Z) CatchBlockEntryInstr(owner()->AllocateBlockId(), |
4338 catch_handler_index, | 4338 catch_handler_index, |
| 4339 owner()->graph_entry(), |
4339 catch_block->handler_types(), | 4340 catch_block->handler_types(), |
4340 try_handler_index, | 4341 try_handler_index, |
4341 catch_block->exception_var(), | 4342 catch_block->exception_var(), |
4342 catch_block->stacktrace_var(), | 4343 catch_block->stacktrace_var(), |
4343 catch_block->needs_stacktrace()); | 4344 catch_block->needs_stacktrace()); |
4344 owner()->AddCatchEntry(catch_entry); | 4345 owner()->AddCatchEntry(catch_entry); |
4345 AppendFragment(catch_entry, for_catch); | 4346 AppendFragment(catch_entry, for_catch); |
4346 | 4347 |
4347 if (for_catch.is_open()) { | 4348 if (for_catch.is_open()) { |
4348 JoinEntryInstr* join = new(Z) JoinEntryInstr(owner()->AllocateBlockId(), | 4349 JoinEntryInstr* join = new(Z) JoinEntryInstr(owner()->AllocateBlockId(), |
(...skipping 25 matching lines...) Expand all Loading... |
4374 new(Z) ReThrowInstr(catch_block->token_pos(), catch_handler_index)); | 4375 new(Z) ReThrowInstr(catch_block->token_pos(), catch_handler_index)); |
4375 for_finally.CloseFragment(); | 4376 for_finally.CloseFragment(); |
4376 } | 4377 } |
4377 ASSERT(!for_finally.is_open()); | 4378 ASSERT(!for_finally.is_open()); |
4378 | 4379 |
4379 const Array& types = Array::ZoneHandle(Z, Array::New(1, Heap::kOld)); | 4380 const Array& types = Array::ZoneHandle(Z, Array::New(1, Heap::kOld)); |
4380 types.SetAt(0, Object::dynamic_type()); | 4381 types.SetAt(0, Object::dynamic_type()); |
4381 CatchBlockEntryInstr* finally_entry = | 4382 CatchBlockEntryInstr* finally_entry = |
4382 new(Z) CatchBlockEntryInstr(owner()->AllocateBlockId(), | 4383 new(Z) CatchBlockEntryInstr(owner()->AllocateBlockId(), |
4383 original_handler_index, | 4384 original_handler_index, |
| 4385 owner()->graph_entry(), |
4384 types, | 4386 types, |
4385 catch_handler_index, | 4387 catch_handler_index, |
4386 catch_block->exception_var(), | 4388 catch_block->exception_var(), |
4387 catch_block->stacktrace_var(), | 4389 catch_block->stacktrace_var(), |
4388 catch_block->needs_stacktrace()); | 4390 catch_block->needs_stacktrace()); |
4389 owner()->AddCatchEntry(finally_entry); | 4391 owner()->AddCatchEntry(finally_entry); |
4390 AppendFragment(finally_entry, for_finally); | 4392 AppendFragment(finally_entry, for_finally); |
4391 } | 4393 } |
4392 | 4394 |
4393 // Generate code for the finally block if one exists. | 4395 // Generate code for the finally block if one exists. |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4660 Script::Handle(function.script()), | 4662 Script::Handle(function.script()), |
4661 function.token_pos(), | 4663 function.token_pos(), |
4662 Report::AtLocation, | 4664 Report::AtLocation, |
4663 "FlowGraphBuilder Bailout: %s %s", | 4665 "FlowGraphBuilder Bailout: %s %s", |
4664 String::Handle(function.name()).ToCString(), | 4666 String::Handle(function.name()).ToCString(), |
4665 reason); | 4667 reason); |
4666 UNREACHABLE(); | 4668 UNREACHABLE(); |
4667 } | 4669 } |
4668 | 4670 |
4669 } // namespace dart | 4671 } // namespace dart |
OLD | NEW |