| 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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 import 'package:kernel/ast.dart' as ir; | 5 import 'package:kernel/ast.dart' as ir; |
| 6 import 'package:kernel/frontend/accessors.dart' | 6 import 'package:kernel/frontend/accessors.dart' |
| 7 show | 7 show |
| 8 Accessor, | 8 Accessor, |
| 9 IndexAccessor, | 9 IndexAccessor, |
| 10 NullAwarePropertyAccessor, | 10 NullAwarePropertyAccessor, |
| (...skipping 1127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 | 1138 |
| 1139 @override | 1139 @override |
| 1140 ir.MethodInvocation visitBinary( | 1140 ir.MethodInvocation visitBinary( |
| 1141 Send node, Node left, BinaryOperator operator, Node right, _) { | 1141 Send node, Node left, BinaryOperator operator, Node right, _) { |
| 1142 return associateNode( | 1142 return associateNode( |
| 1143 buildBinaryOperator(left, operator.selectorName, right), node); | 1143 buildBinaryOperator(left, operator.selectorName, right), node); |
| 1144 } | 1144 } |
| 1145 | 1145 |
| 1146 ir.Expression buildConstructorInvoke(NewExpression node, {bool isConst}) { | 1146 ir.Expression buildConstructorInvoke(NewExpression node, {bool isConst}) { |
| 1147 ConstructorElement constructor = elements[node.send]; | 1147 ConstructorElement constructor = elements[node.send]; |
| 1148 ConstructorTarget target = | 1148 ConstructorTarget target; |
| 1149 kernel.computeEffectiveTarget(constructor, elements.getType(node)); | 1149 if (isConst) { |
| 1150 target = |
| 1151 kernel.computeEffectiveTarget(constructor, elements.getType(node)); |
| 1152 } else { |
| 1153 target = new ConstructorTarget(constructor, elements.getType(node)); |
| 1154 } |
| 1150 NodeList arguments = node.send.argumentsNode; | 1155 NodeList arguments = node.send.argumentsNode; |
| 1151 if (kernel.isSyntheticError(target.element)) { | 1156 if (kernel.isSyntheticError(target.element)) { |
| 1152 return new ir.MethodInvocation(new ir.InvalidExpression(), | 1157 return new ir.MethodInvocation(new ir.InvalidExpression(), |
| 1153 kernel.irName("call", currentElement), buildArguments(arguments)); | 1158 kernel.irName("call", currentElement), buildArguments(arguments)); |
| 1154 } | 1159 } |
| 1155 ir.InvocationExpression invoke = target.element.isGenerativeConstructor | 1160 ir.InvocationExpression invoke = target.element.isGenerativeConstructor |
| 1156 ? buildGenerativeConstructorInvoke(target.element, arguments, | 1161 ? buildGenerativeConstructorInvoke(target.element, arguments, |
| 1157 isConst: isConst) | 1162 isConst: isConst) |
| 1158 : buildStaticInvoke(target.element, arguments, isConst: isConst); | 1163 : buildStaticInvoke(target.element, arguments, isConst: isConst); |
| 1159 if (target.type.isInterfaceType) { | 1164 if (target.type.isInterfaceType) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1199 @override | 1204 @override |
| 1200 ir.Expression visitClassTypeLiteralSet( | 1205 ir.Expression visitClassTypeLiteralSet( |
| 1201 SendSet node, ConstantExpression constant, Node rhs, _) { | 1206 SendSet node, ConstantExpression constant, Node rhs, _) { |
| 1202 return buildTypeLiteralSet(constant, rhs); | 1207 return buildTypeLiteralSet(constant, rhs); |
| 1203 } | 1208 } |
| 1204 | 1209 |
| 1205 @override | 1210 @override |
| 1206 ir.FunctionExpression visitClosureDeclaration(FunctionExpression node, | 1211 ir.FunctionExpression visitClosureDeclaration(FunctionExpression node, |
| 1207 LocalFunctionElement closure, NodeList parameters, Node body, _) { | 1212 LocalFunctionElement closure, NodeList parameters, Node body, _) { |
| 1208 return withCurrentElement(closure, () { | 1213 return withCurrentElement(closure, () { |
| 1209 return new ir.FunctionExpression(buildFunctionNode(closure, body)); | 1214 ir.FunctionExpression function = |
| 1215 new ir.FunctionExpression(buildFunctionNode(closure, body)); |
| 1216 kernel.localFunctions[closure] = function; |
| 1217 return function; |
| 1210 }); | 1218 }); |
| 1211 } | 1219 } |
| 1212 | 1220 |
| 1213 @override | 1221 @override |
| 1214 ir.Expression visitCompoundIndexSet(SendSet node, Node receiver, Node index, | 1222 ir.Expression visitCompoundIndexSet(SendSet node, Node receiver, Node index, |
| 1215 AssignmentOperator operator, Node rhs, _) { | 1223 AssignmentOperator operator, Node rhs, _) { |
| 1216 return buildIndexAccessor(receiver, index).buildCompoundAssignment( | 1224 return buildIndexAccessor(receiver, index).buildCompoundAssignment( |
| 1217 kernel.irName(operator.selectorName, currentElement), | 1225 kernel.irName(operator.selectorName, currentElement), |
| 1218 visitForValue(rhs), | 1226 visitForValue(rhs), |
| 1219 voidContext: isVoidContext); | 1227 voidContext: isVoidContext); |
| (...skipping 1539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2759 : this(null, true, node, initializers); | 2767 : this(null, true, node, initializers); |
| 2760 | 2768 |
| 2761 accept(ir.Visitor v) => throw "unsupported"; | 2769 accept(ir.Visitor v) => throw "unsupported"; |
| 2762 | 2770 |
| 2763 visitChildren(ir.Visitor v) => throw "unsupported"; | 2771 visitChildren(ir.Visitor v) => throw "unsupported"; |
| 2764 | 2772 |
| 2765 String toString() { | 2773 String toString() { |
| 2766 return "IrFunction($kind, $isConstructor, $node, $initializers)"; | 2774 return "IrFunction($kind, $isConstructor, $node, $initializers)"; |
| 2767 } | 2775 } |
| 2768 } | 2776 } |
| OLD | NEW |