| 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 | 6 |
| 7 import '../constants/expressions.dart'; | 7 import '../constants/expressions.dart'; |
| 8 import '../elements/elements.dart' show ConstructorElement; |
| 8 import 'kernel.dart'; | 9 import 'kernel.dart'; |
| 9 | 10 |
| 10 /// Visitor that converts a [ConstantExpression] into a kernel constant | 11 /// Visitor that converts a [ConstantExpression] into a kernel constant |
| 11 /// expression. | 12 /// expression. |
| 12 class ConstantVisitor extends ConstantExpressionVisitor<ir.Node, Kernel> { | 13 class ConstantVisitor extends ConstantExpressionVisitor<ir.Node, Kernel> { |
| 13 const ConstantVisitor(); | 14 const ConstantVisitor(); |
| 14 | 15 |
| 15 @override | 16 @override |
| 16 ir.Node visitNamed(NamedArgumentReference exp, Kernel kernel) { | 17 ir.Node visitNamed(NamedArgumentReference exp, Kernel kernel) { |
| 17 throw new UnsupportedError( | 18 throw new UnsupportedError( |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 ir.Node visitBinary(BinaryConstantExpression exp, Kernel kernel) { | 72 ir.Node visitBinary(BinaryConstantExpression exp, Kernel kernel) { |
| 72 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); | 73 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); |
| 73 } | 74 } |
| 74 | 75 |
| 75 @override | 76 @override |
| 76 ir.Node visitFunction(FunctionConstantExpression exp, Kernel kernel) { | 77 ir.Node visitFunction(FunctionConstantExpression exp, Kernel kernel) { |
| 77 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); | 78 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); |
| 78 } | 79 } |
| 79 | 80 |
| 80 @override | 81 @override |
| 81 ir.Node visitVariable(VariableConstantExpression exp, Kernel kernel) { | 82 ir.Node visitField(FieldConstantExpression exp, Kernel kernel) { |
| 82 return new ir.StaticGet(kernel.fieldToIr(exp.element)); | 83 return new ir.StaticGet(kernel.fieldToIr(exp.element)); |
| 83 } | 84 } |
| 84 | 85 |
| 85 @override | 86 @override |
| 87 ir.Node visitLocalVariable( |
| 88 LocalVariableConstantExpression exp, Kernel kernel) { |
| 89 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); |
| 90 } |
| 91 |
| 92 @override |
| 86 ir.Node visitType(TypeConstantExpression exp, Kernel kernel) { | 93 ir.Node visitType(TypeConstantExpression exp, Kernel kernel) { |
| 87 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); | 94 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); |
| 88 } | 95 } |
| 89 | 96 |
| 90 @override | 97 @override |
| 91 ir.Node visitSymbol(SymbolConstantExpression exp, Kernel kernel) { | 98 ir.Node visitSymbol(SymbolConstantExpression exp, Kernel kernel) { |
| 92 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); | 99 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); |
| 93 } | 100 } |
| 94 | 101 |
| 95 @override | 102 @override |
| (...skipping 11 matching lines...) Expand all Loading... |
| 107 ir.Expression argument = visit(exp.arguments[index], kernel); | 114 ir.Expression argument = visit(exp.arguments[index], kernel); |
| 108 if (index < exp.callStructure.positionalArgumentCount) { | 115 if (index < exp.callStructure.positionalArgumentCount) { |
| 109 positional.add(argument); | 116 positional.add(argument); |
| 110 } else { | 117 } else { |
| 111 named.add(new ir.NamedExpression( | 118 named.add(new ir.NamedExpression( |
| 112 exp.callStructure.namedArguments[index - positionalCount], | 119 exp.callStructure.namedArguments[index - positionalCount], |
| 113 argument)); | 120 argument)); |
| 114 } | 121 } |
| 115 } | 122 } |
| 116 ir.Arguments arguments = new ir.Arguments(positional, named: named); | 123 ir.Arguments arguments = new ir.Arguments(positional, named: named); |
| 124 ConstructorElement constructor = exp.target; |
| 117 return new ir.ConstructorInvocation( | 125 return new ir.ConstructorInvocation( |
| 118 kernel.functionToIr(exp.target), arguments, | 126 kernel.functionToIr(constructor), arguments, |
| 119 isConst: true); | 127 isConst: true); |
| 120 } | 128 } |
| 121 | 129 |
| 122 @override | 130 @override |
| 123 ir.Node visitMap(MapConstantExpression exp, Kernel kernel) { | 131 ir.Node visitMap(MapConstantExpression exp, Kernel kernel) { |
| 124 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); | 132 throw new UnimplementedError('${exp.toStructuredText()} is not supported.'); |
| 125 } | 133 } |
| 126 | 134 |
| 127 @override | 135 @override |
| 128 ir.Node visitList(ListConstantExpression exp, Kernel kernel) { | 136 ir.Node visitList(ListConstantExpression exp, Kernel kernel) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 147 @override | 155 @override |
| 148 ir.Node visitInt(IntConstantExpression exp, Kernel kernel) { | 156 ir.Node visitInt(IntConstantExpression exp, Kernel kernel) { |
| 149 return new ir.IntLiteral(exp.primitiveValue); | 157 return new ir.IntLiteral(exp.primitiveValue); |
| 150 } | 158 } |
| 151 | 159 |
| 152 @override | 160 @override |
| 153 ir.Node visitBool(BoolConstantExpression exp, Kernel kernel) { | 161 ir.Node visitBool(BoolConstantExpression exp, Kernel kernel) { |
| 154 return new ir.BoolLiteral(exp.primitiveValue); | 162 return new ir.BoolLiteral(exp.primitiveValue); |
| 155 } | 163 } |
| 156 } | 164 } |
| OLD | NEW |