Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| index f101a7610ca8a7353f55d27bb79670adc653df87..b58ed819238e6a17e2f422d526b929baccc7e327 100644 |
| --- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| +++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| @@ -240,7 +240,6 @@ class CodeGenerator extends tree_ir.StatementVisitor |
| @override |
| js.Expression visitInvokeConstructor(tree_ir.InvokeConstructor node) { |
| - checkStaticTargetIsValid(node, node.target); |
| if (node.constant != null) return giveup(node); |
| registry.registerInstantiatedType(node.type); |
| @@ -276,44 +275,14 @@ class CodeGenerator extends tree_ir.StatementVisitor |
| visitArguments(node.arguments)); |
| } |
| - /// Checks that the target of the static call is not an [ErroneousElement]. |
| - /// |
| - /// This helper should be removed and the code to generate the CPS IR for |
| - /// the dart2js backend should construct a call to a helper that throw an |
| - /// appropriate error message instead of the static call. |
| - /// |
| - /// See [SsaBuilder.visitStaticSend] as an example how to do this. |
| - void checkStaticTargetIsValid(tree_ir.Node node, Element target) { |
| - if (target.isErroneous) { |
| - giveup(node, 'cannot generate error handling code' |
| - ' for call to unresolved target'); |
| - } |
| - } |
| - |
|
asgerf
2015/05/11 12:31:10
This is just general clean-up since the issue has
|
| @override |
| js.Expression visitInvokeStatic(tree_ir.InvokeStatic node) { |
| - checkStaticTargetIsValid(node, node.target); |
| Selector selector = node.selector; |
| - if (node.target is FunctionElement) { |
| - assert(selector.isGetter || selector.isSetter || selector.isCall); |
| - FunctionElement target = node.target; |
| - List<js.Expression> arguments = visitArguments(node.arguments); |
| - return buildStaticInvoke(selector, target, arguments, |
| - sourceInformation: node.sourceInformation); |
| - } else { |
| - assert(selector.isGetter || selector.isSetter); |
| - FieldElement target = node.target; |
| - registry.registerStaticUse(target); |
| - js.Expression field = glue.staticFieldAccess(target); |
| - if (selector.isGetter) { |
| - assert(node.arguments.isEmpty); |
| - return field; |
| - } else { |
| - assert(node.arguments.length == 1); |
| - js.Expression value = visitExpression(node.arguments.first); |
| - return new js.Assignment(field, value); |
| - } |
| - } |
| + assert(selector.isGetter || selector.isSetter || selector.isCall); |
| + FunctionElement target = node.target; |
| + List<js.Expression> arguments = visitArguments(node.arguments); |
| + return buildStaticInvoke(selector, target, arguments, |
| + sourceInformation: node.sourceInformation); |
| } |
| @override |
| @@ -618,6 +587,26 @@ class CodeGenerator extends tree_ir.StatementVisitor |
| return new js.Assignment(field, visitExpression(node.value)); |
| } |
| + @override |
| + js.Expression visitGetStatic(tree_ir.GetStatic node) { |
| + assert(node.element is FieldElement || node.element is FunctionElement); |
| + registry.registerStaticUse(node.element.declaration); |
| + if (node.element is FieldElement) { |
| + return glue.staticFieldAccess(node.element); |
| + } else { |
| + return glue.staticFunctionAccess(node.element); |
| + } |
| + } |
| + |
| + @override |
| + js.Expression visitSetStatic(tree_ir.SetStatic node) { |
| + assert(node.element is FieldElement); |
| + registry.registerStaticUse(node.element.declaration); |
| + js.Expression field = glue.staticFieldAccess(node.element); |
| + js.Expression value = visitExpression(node.value); |
| + return new js.Assignment(field, value); |
| + } |
| + |
| js.Expression buildStaticHelperInvocation(FunctionElement helper, |
| List<js.Expression> arguments) { |
| registry.registerStaticUse(helper); |