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 part of ssa; | 5 part of ssa; |
6 | 6 |
7 /** | 7 /** |
8 * A special element for the extra parameter taken by intercepted | 8 * A special element for the extra parameter taken by intercepted |
9 * methods. We need to override [Element.computeType] because our | 9 * methods. We need to override [Element.computeType] because our |
10 * optimizers may look at its declared type. | 10 * optimizers may look at its declared type. |
(...skipping 4022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4033 } | 4033 } |
4034 handleInTryStatement(); | 4034 handleInTryStatement(); |
4035 closeAndGotoExit(new HThrow(exception, isRethrow: true)); | 4035 closeAndGotoExit(new HThrow(exception, isRethrow: true)); |
4036 } | 4036 } |
4037 | 4037 |
4038 visitReturn(Return node) { | 4038 visitReturn(Return node) { |
4039 if (identical(node.getBeginToken().stringValue, 'native')) { | 4039 if (identical(node.getBeginToken().stringValue, 'native')) { |
4040 native.handleSsaNative(this, node.expression); | 4040 native.handleSsaNative(this, node.expression); |
4041 return; | 4041 return; |
4042 } | 4042 } |
4043 assert(invariant(node, !node.isRedirectingFactoryBody)); | |
4044 HInstruction value; | 4043 HInstruction value; |
4045 if (node.expression == null) { | 4044 if (node.isRedirectingFactoryBody) { |
| 4045 // TODO(ahe): This is only for reflection, and it is not correct yet. |
| 4046 value = graph.addConstantNull(constantSystem); |
| 4047 } else if (node.expression == null) { |
4046 value = graph.addConstantNull(constantSystem); | 4048 value = graph.addConstantNull(constantSystem); |
4047 } else { | 4049 } else { |
4048 visit(node.expression); | 4050 visit(node.expression); |
4049 value = pop(); | 4051 value = pop(); |
4050 value = potentiallyCheckType(value, returnType); | 4052 value = potentiallyCheckType(value, returnType); |
4051 } | 4053 } |
4052 | 4054 |
4053 handleInTryStatement(); | 4055 handleInTryStatement(); |
4054 | 4056 |
4055 if (!inliningStack.isEmpty) { | 4057 if (!inliningStack.isEmpty) { |
(...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5382 new HSubGraphBlockInformation(elseBranch.graph)); | 5384 new HSubGraphBlockInformation(elseBranch.graph)); |
5383 | 5385 |
5384 HBasicBlock conditionStartBlock = conditionBranch.block; | 5386 HBasicBlock conditionStartBlock = conditionBranch.block; |
5385 conditionStartBlock.setBlockFlow(info, joinBlock); | 5387 conditionStartBlock.setBlockFlow(info, joinBlock); |
5386 SubGraph conditionGraph = conditionBranch.graph; | 5388 SubGraph conditionGraph = conditionBranch.graph; |
5387 HIf branch = conditionGraph.end.last; | 5389 HIf branch = conditionGraph.end.last; |
5388 assert(branch is HIf); | 5390 assert(branch is HIf); |
5389 branch.blockInformation = conditionStartBlock.blockFlow; | 5391 branch.blockInformation = conditionStartBlock.blockFlow; |
5390 } | 5392 } |
5391 } | 5393 } |
OLD | NEW |