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 import '../compiler.dart'; | 5 import '../common.dart'; |
6 import '../io/source_information.dart'; | 6 import '../io/source_information.dart'; |
7 import '../tree/tree.dart' as ast; | 7 import '../tree/tree.dart' as ast; |
8 | 8 |
9 import 'graph_builder.dart'; | 9 import 'graph_builder.dart'; |
10 import 'locals_handler.dart'; | 10 import 'locals_handler.dart'; |
11 import 'nodes.dart'; | 11 import 'nodes.dart'; |
12 | 12 |
13 class SsaBranch { | 13 class SsaBranch { |
14 final SsaBranchBuilder branchBuilder; | 14 final SsaBranchBuilder branchBuilder; |
15 final HBasicBlock block; | 15 final HBasicBlock block; |
16 LocalsHandler startLocals; | 16 LocalsHandler startLocals; |
17 LocalsHandler exitLocals; | 17 LocalsHandler exitLocals; |
18 SubGraph graph; | 18 SubGraph graph; |
19 | 19 |
20 SsaBranch(this.branchBuilder) : block = new HBasicBlock(); | 20 SsaBranch(this.branchBuilder) : block = new HBasicBlock(); |
21 } | 21 } |
22 | 22 |
23 class SsaBranchBuilder { | 23 class SsaBranchBuilder { |
24 final GraphBuilder builder; | 24 final GraphBuilder builder; |
25 final Compiler compiler; | |
26 final ast.Node diagnosticNode; | 25 final ast.Node diagnosticNode; |
27 | 26 |
28 SsaBranchBuilder(this.builder, this.compiler, [this.diagnosticNode]); | 27 SsaBranchBuilder(this.builder, [this.diagnosticNode]); |
29 | 28 |
30 void checkNotAborted() { | 29 void checkNotAborted() { |
31 if (builder.isAborted()) { | 30 if (builder.isAborted()) { |
32 compiler.unimplemented(diagnosticNode, "aborted control flow"); | 31 throw new SpannableAssertionFailure( |
| 32 diagnosticNode, "aborted control flow"); |
33 } | 33 } |
34 } | 34 } |
35 | 35 |
36 void buildCondition( | 36 void buildCondition( |
37 void visitCondition(), | 37 void visitCondition(), |
38 SsaBranch conditionBranch, | 38 SsaBranch conditionBranch, |
39 SsaBranch thenBranch, | 39 SsaBranch thenBranch, |
40 SsaBranch elseBranch, | 40 SsaBranch elseBranch, |
41 SourceInformation sourceInformation) { | 41 SourceInformation sourceInformation) { |
42 startBranch(conditionBranch); | 42 startBranch(conditionBranch); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 new HSubGraphBlockInformation(elseBranch.graph)); | 219 new HSubGraphBlockInformation(elseBranch.graph)); |
220 | 220 |
221 HBasicBlock conditionStartBlock = conditionBranch.block; | 221 HBasicBlock conditionStartBlock = conditionBranch.block; |
222 conditionStartBlock.setBlockFlow(info, joinBlock); | 222 conditionStartBlock.setBlockFlow(info, joinBlock); |
223 SubGraph conditionGraph = conditionBranch.graph; | 223 SubGraph conditionGraph = conditionBranch.graph; |
224 HIf branch = conditionGraph.end.last; | 224 HIf branch = conditionGraph.end.last; |
225 assert(branch is HIf); | 225 assert(branch is HIf); |
226 branch.blockInformation = conditionStartBlock.blockFlow; | 226 branch.blockInformation = conditionStartBlock.blockFlow; |
227 } | 227 } |
228 } | 228 } |
OLD | NEW |