| Index: pkg/analyzer2dart/lib/src/cps_generator.dart
|
| diff --git a/pkg/analyzer2dart/lib/src/cps_generator.dart b/pkg/analyzer2dart/lib/src/cps_generator.dart
|
| index fbb0ee054f913c8325935731cf9fb358e3e68424..f2cc5d6cc228aaf1134f109562c311d78b42f87d 100644
|
| --- a/pkg/analyzer2dart/lib/src/cps_generator.dart
|
| +++ b/pkg/analyzer2dart/lib/src/cps_generator.dart
|
| @@ -202,7 +202,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
|
| analyzer.Element staticElement = semantics.element;
|
| dart2js.Element element = converter.convertElement(staticElement);
|
| List<ir.Primitive> arguments = visitArguments(node.argumentList);
|
| - return irBuilder.buildStaticInvocation(
|
| + return irBuilder.buildStaticFunctionInvocation(
|
| element,
|
| createSelectorFromMethodInvocation(
|
| node.argumentList, node.methodName.name),
|
| @@ -218,13 +218,16 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
|
| AccessSemantics semantics) {
|
| analyzer.Element staticElement = semantics.element;
|
| dart2js.Element element = converter.convertElement(staticElement);
|
| - ir.Primitive receiver = irBuilder.buildLocalGet(element);
|
| List<ir.Definition> arguments = visitArguments(node.argumentList);
|
| - return irBuilder.buildCallInvocation(
|
| - receiver,
|
| - createSelectorFromMethodInvocation(
|
| - node.argumentList, node.methodName.name),
|
| - arguments);
|
| + Selector selector = createSelectorFromMethodInvocation(
|
| + node.argumentList, node.methodName.name);
|
| + if (semantics.kind == AccessKind.LOCAL_FUNCTION) {
|
| + return irBuilder.buildLocalFunctionInvocation(
|
| + element, selector, arguments);
|
| + } else {
|
| + return irBuilder.buildLocalVariableInvocation(
|
| + element, selector, arguments);
|
| + }
|
| }
|
|
|
| @override
|
| @@ -348,7 +351,12 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
|
| }
|
|
|
| ir.Primitive handleLocalAccess(AstNode node, AccessSemantics semantics) {
|
| - return irBuilder.buildLocalGet(getLocal(node, semantics));
|
| + dart2js.Element local = getLocal(node, semantics);
|
| + if (semantics.kind == AccessKind.LOCAL_FUNCTION) {
|
| + return irBuilder.buildLocalFunctionGet(local);
|
| + } else {
|
| + return irBuilder.buildLocalVariableGet(local);
|
| + }
|
| }
|
|
|
| ir.Primitive handleLocalAssignment(AssignmentExpression node,
|
| @@ -356,7 +364,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
|
| if (node.operator.lexeme != '=') {
|
| return giveUp(node, 'Assignment operator: ${node.operator.lexeme}');
|
| }
|
| - return irBuilder.buildLocalSet(
|
| + return irBuilder.buildLocalVariableSet(
|
| getLocal(node, semantics),
|
| build(node.rightHandSide));
|
| }
|
| @@ -391,7 +399,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
|
| // [TreeShaker] and shared with the [CpsGeneratingVisitor].
|
| assert(invariant(node, target.isTopLevel || target.isStatic,
|
| '$target expected to be top-level or static.'));
|
| - return irBuilder.buildStaticSet(target, build(node.rightHandSide));
|
| + return irBuilder.buildStaticFieldSet(target, build(node.rightHandSide));
|
| }
|
|
|
| @override
|
| @@ -411,7 +419,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
|
| // [TreeShaker] and shared with the [CpsGeneratingVisitor].
|
| assert(invariant(node, target.isTopLevel || target.isStatic,
|
| '$target expected to be top-level or static.'));
|
| - return irBuilder.buildStaticGet(target);
|
| + return irBuilder.buildStaticFieldGet(target);
|
| }
|
|
|
| ir.Primitive handleBinaryExpression(BinaryExpression node,
|
|
|