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 | 6 |
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 3536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3547 body += BuildStatement(); // read body. | 3547 body += BuildStatement(); // read body. |
3548 | 3548 |
3549 Instruction* entry; | 3549 Instruction* entry; |
3550 if (body.is_open()) { | 3550 if (body.is_open()) { |
3551 JoinEntryInstr* join = BuildJoinEntry(); | 3551 JoinEntryInstr* join = BuildJoinEntry(); |
3552 body += Goto(join); | 3552 body += Goto(join); |
3553 | 3553 |
3554 Fragment loop(join); | 3554 Fragment loop(join); |
3555 loop += CheckStackOverflow(); | 3555 loop += CheckStackOverflow(); |
3556 loop += condition; | 3556 loop += condition; |
3557 entry = new (Z) GotoInstr(join); | 3557 entry = new (Z) GotoInstr(join, Thread::Current()->GetNextDeoptId()); |
3558 } else { | 3558 } else { |
3559 entry = condition.entry; | 3559 entry = condition.entry; |
3560 } | 3560 } |
3561 | 3561 |
3562 | 3562 |
3563 loop_depth_dec(); | 3563 loop_depth_dec(); |
3564 return Fragment(entry, loop_exit); | 3564 return Fragment(entry, loop_exit); |
3565 } | 3565 } |
3566 | 3566 |
3567 Fragment StreamingFlowGraphBuilder::BuildDoStatement() { | 3567 Fragment StreamingFlowGraphBuilder::BuildDoStatement() { |
(...skipping 13 matching lines...) Expand all Loading... |
3581 loop += body; | 3581 loop += body; |
3582 loop += TranslateCondition(&negate); // read condition. | 3582 loop += TranslateCondition(&negate); // read condition. |
3583 TargetEntryInstr* loop_repeat; | 3583 TargetEntryInstr* loop_repeat; |
3584 TargetEntryInstr* loop_exit; | 3584 TargetEntryInstr* loop_exit; |
3585 loop += BranchIfTrue(&loop_repeat, &loop_exit, negate); | 3585 loop += BranchIfTrue(&loop_repeat, &loop_exit, negate); |
3586 | 3586 |
3587 Fragment repeat(loop_repeat); | 3587 Fragment repeat(loop_repeat); |
3588 repeat += Goto(join); | 3588 repeat += Goto(join); |
3589 | 3589 |
3590 loop_depth_dec(); | 3590 loop_depth_dec(); |
3591 return Fragment(new (Z) GotoInstr(join), loop_exit); | 3591 return Fragment(new (Z) GotoInstr(join, Thread::Current()->GetNextDeoptId()), |
| 3592 loop_exit); |
3592 } | 3593 } |
3593 | 3594 |
3594 Fragment StreamingFlowGraphBuilder::BuildForStatement() { | 3595 Fragment StreamingFlowGraphBuilder::BuildForStatement() { |
3595 intptr_t offset = ReaderOffset() - 1; // Include the tag. | 3596 intptr_t offset = ReaderOffset() - 1; // Include the tag. |
3596 | 3597 |
3597 Fragment declarations; | 3598 Fragment declarations; |
3598 | 3599 |
3599 bool new_context = false; | 3600 bool new_context = false; |
3600 declarations += EnterScope(offset, &new_context); | 3601 declarations += EnterScope(offset, &new_context); |
3601 | 3602 |
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4317 } | 4318 } |
4318 instructions += StoreLocal(position, variable); | 4319 instructions += StoreLocal(position, variable); |
4319 instructions += Drop(); | 4320 instructions += Drop(); |
4320 return instructions; | 4321 return instructions; |
4321 } | 4322 } |
4322 | 4323 |
4323 } // namespace kernel | 4324 } // namespace kernel |
4324 } // namespace dart | 4325 } // namespace dart |
4325 | 4326 |
4326 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 4327 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |