| Index: sdk/lib/_internal/compiler/implementation/dart_backend/dart_codegen.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/dart_codegen.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/dart_codegen.dart
|
| index 48ecccd6b0d9ca8025f93091281f100b68b6a862..b1d358abb744120f1529858a37fab2a859423b5f 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/dart_backend/dart_codegen.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/dart_backend/dart_codegen.dart
|
| @@ -163,6 +163,54 @@ class ASTEmitter extends tree.Visitor<dynamic, Expression> {
|
| ..element = exp.target;
|
| }
|
|
|
| + Expression visitInvokeMethod(tree.InvokeMethod exp) {
|
| + // TODO: Derive named arguments from selector?
|
| + Expression receiver = visitExpression(exp.receiver);
|
| + List args = exp.arguments.map(visitExpression).toList(growable:false);
|
| + switch (exp.selector.kind) {
|
| + case SelectorKind.CALL:
|
| + return new CallMethod(receiver, exp.selector.name, args);
|
| +
|
| + case SelectorKind.OPERATOR:
|
| + if (args.length == 0) {
|
| + String name = exp.selector.name;
|
| + if (name == 'unary-') {
|
| + name = '-';
|
| + }
|
| + return new UnaryOperator(name, receiver);
|
| + }
|
| + return new BinaryOperator(receiver, exp.selector.name, args[0]);
|
| +
|
| + case SelectorKind.GETTER:
|
| + return new FieldExpression(receiver, exp.selector.name);
|
| +
|
| + case SelectorKind.SETTER:
|
| + return new Assignment(
|
| + new FieldExpression(receiver, exp.selector.name),
|
| + '=',
|
| + args[0]);
|
| +
|
| + case SelectorKind.INDEX:
|
| + Expression e = new IndexExpression(receiver, args[0]);
|
| + if (args.length == 2) {
|
| + e = new Assignment(e, '=', args[1]);
|
| + }
|
| + return e;
|
| +
|
| + default:
|
| + throw "Unexpected selector in InvokeMethod: ${exp.selector.kind}";
|
| + }
|
| + }
|
| +
|
| + Expression visitInvokeConstructor(tree.InvokeConstructor exp) {
|
| + List args = exp.arguments.map(visitExpression).toList(growable:false);
|
| + FunctionElement constructor = exp.target;
|
| + String name = constructor.name.isEmpty ? null : constructor.name;
|
| + return new CallNew(emitType(exp.type), args, constructorName: name)
|
| + ..constructor = constructor
|
| + ..dartType = exp.type;
|
| + }
|
| +
|
| Expression visitVariable(tree.Variable exp) {
|
| return new Identifier(exp.name)
|
| ..element = exp.element;
|
|
|