| 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 class Interceptors { | 5 class Interceptors { |
| 6 Compiler compiler; | 6 Compiler compiler; |
| 7 Interceptors(Compiler this.compiler); | 7 Interceptors(Compiler this.compiler); |
| 8 | 8 |
| 9 SourceString mapOperatorToMethodName(Operator op) { | 9 SourceString mapOperatorToMethodName(Operator op) { |
| 10 String name = op.source.stringValue; | 10 String name = op.source.stringValue; |
| (...skipping 1761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1772 | 1772 |
| 1773 | 1773 |
| 1774 void visitLogicalNot(Send node) { | 1774 void visitLogicalNot(Send node) { |
| 1775 assert(node.argumentsNode is Prefix); | 1775 assert(node.argumentsNode is Prefix); |
| 1776 visit(node.receiver); | 1776 visit(node.receiver); |
| 1777 HNot not = new HNot(popBoolified()); | 1777 HNot not = new HNot(popBoolified()); |
| 1778 pushWithPosition(not, node); | 1778 pushWithPosition(not, node); |
| 1779 } | 1779 } |
| 1780 | 1780 |
| 1781 void visitUnary(Send node, Operator op) { | 1781 void visitUnary(Send node, Operator op) { |
| 1782 String value = op.source.stringValue; |
| 1783 if (value === '?') { |
| 1784 // TODO(ahe): Implement argument definition test. |
| 1785 stack.add(graph.addConstantBool(true)); |
| 1786 return; |
| 1787 } |
| 1782 assert(node.argumentsNode is Prefix); | 1788 assert(node.argumentsNode is Prefix); |
| 1783 visit(node.receiver); | 1789 visit(node.receiver); |
| 1784 assert(op.token.kind !== PLUS_TOKEN); | 1790 assert(op.token.kind !== PLUS_TOKEN); |
| 1785 HInstruction operand = pop(); | 1791 HInstruction operand = pop(); |
| 1786 | 1792 |
| 1787 HInstruction target = | 1793 HInstruction target = |
| 1788 new HStatic(interceptors.getPrefixOperatorInterceptor(op)); | 1794 new HStatic(interceptors.getPrefixOperatorInterceptor(op)); |
| 1789 add(target); | 1795 add(target); |
| 1790 HInvokeUnary result; | 1796 HInvokeUnary result; |
| 1791 String value = op.source.stringValue; | |
| 1792 switch (value) { | 1797 switch (value) { |
| 1793 case "-": result = new HNegate(target, operand); break; | 1798 case "-": result = new HNegate(target, operand); break; |
| 1794 case "~": result = new HBitNot(target, operand); break; | 1799 case "~": result = new HBitNot(target, operand); break; |
| 1795 default: | 1800 default: |
| 1796 compiler.internalError('Unexpected unary operator: $value.', node: op); | 1801 compiler.internalError('Unexpected unary operator: $value.', node: op); |
| 1797 break; | 1802 break; |
| 1798 } | 1803 } |
| 1799 // See if we can constant-fold right away. This avoids rewrites later on. | 1804 // See if we can constant-fold right away. This avoids rewrites later on. |
| 1800 if (operand is HConstant) { | 1805 if (operand is HConstant) { |
| 1801 HConstant constant = operand; | 1806 HConstant constant = operand; |
| (...skipping 2137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3939 new HSubGraphBlockInformation(elseBranch.graph)); | 3944 new HSubGraphBlockInformation(elseBranch.graph)); |
| 3940 | 3945 |
| 3941 HBasicBlock conditionStartBlock = conditionBranch.block; | 3946 HBasicBlock conditionStartBlock = conditionBranch.block; |
| 3942 conditionStartBlock.setBlockFlow(info, joinBlock); | 3947 conditionStartBlock.setBlockFlow(info, joinBlock); |
| 3943 SubGraph conditionGraph = conditionBranch.graph; | 3948 SubGraph conditionGraph = conditionBranch.graph; |
| 3944 HIf branch = conditionGraph.end.last; | 3949 HIf branch = conditionGraph.end.last; |
| 3945 assert(branch is HIf); | 3950 assert(branch is HIf); |
| 3946 branch.blockInformation = conditionStartBlock.blockFlow; | 3951 branch.blockInformation = conditionStartBlock.blockFlow; |
| 3947 } | 3952 } |
| 3948 } | 3953 } |
| OLD | NEW |