Chromium Code Reviews| 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 20d71292c3172713e5747f9b4c49b9af255f5aca..3a185a7e978aebc626b7516b2ca895932edc640f 100644 |
| --- a/pkg/analyzer2dart/lib/src/cps_generator.dart |
| +++ b/pkg/analyzer2dart/lib/src/cps_generator.dart |
| @@ -35,11 +35,17 @@ class CpsGeneratingVisitor extends RecursiveAstVisitor<ir.Node> { |
| irBuilder.createParameter(converter.convertElement(parameter), |
| isClosureVariable: false); |
| }); |
| - super.visitFunctionDeclaration(node); |
| + // Visit the body directly to avoid processing the signature as expressions. |
| + node.functionExpression.body.accept(this); |
| return irBuilder.buildFunctionDefinition( |
| converter.convertElement(function), const [], const []); |
| } |
| - |
| +/* |
|
sigurdm
2014/09/11 11:13:13
Why is this commented out?
Johnni Winther
2014/09/11 11:31:40
I thought I needed to process the function express
|
| + @override |
| + visitFunctionExpression(FunctionExpression node) { |
| + node.body |
| + } |
| +*/ |
| @override |
| visitMethodInvocation(MethodInvocation node) { |
| analyzer.Element staticElement = node.methodName.staticElement; |
| @@ -47,7 +53,11 @@ class CpsGeneratingVisitor extends RecursiveAstVisitor<ir.Node> { |
| dart2js.Element element = converter.convertElement(staticElement); |
| List<ir.Definition> arguments = <ir.Definition>[]; |
| for (Expression argument in node.argumentList.arguments) { |
| - arguments.add(argument.accept(this)); |
| + ir.Definition value = argument.accept(this); |
| + if (value == null) { |
| + giveUp('Unsupported argument: $argument (${argument.runtimeType}).'); |
| + } |
| + arguments.add(value); |
| } |
| return irBuilder.buildStaticInvocation( |
| element, createSelectorFromMethodInvocation(node), arguments); |
| @@ -101,4 +111,18 @@ class CpsGeneratingVisitor extends RecursiveAstVisitor<ir.Node> { |
| irBuilder.buildReturn(); |
| } |
| } |
| + |
| + @override |
| + visitSimpleIdentifier(SimpleIdentifier node) { |
| + analyzer.Element element = node.staticElement; |
| + if (element != null) { |
| + dart2js.Element target = converter.convertElement(element); |
| + if (dart2js.Elements.isLocal(target)) { |
| + return irBuilder.buildGetLocal(target); |
| + } |
| + giveUp('Unhandled static reference: ' |
| + '$node -> $target (${target.runtimeType})'); |
| + } |
| + giveUp('Unresolved identifier: $node.'); |
| + } |
| } |