Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| index b42ae6af9dff58125321df4620d161b83b7f5af6..2329764ecac34a55be48dfc7e867041b195f639b 100644 |
| --- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| +++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| @@ -2926,7 +2926,9 @@ class SsaBuilder extends ResolvedVisitor { |
| } |
| void generateGetter(ast.Send send, Element element) { |
| - if (Elements.isStaticOrTopLevelField(element)) { |
| + if (element != null && element.isForeign(compiler)) { |
| + visitForeignGetter(send); |
| + } else if (Elements.isStaticOrTopLevelField(element)) { |
| Constant value; |
| if (element.isField() && !element.isAssignable()) { |
| // A static final or const. Get its constant value and inline it if |
| @@ -3573,6 +3575,21 @@ class SsaBuilder extends ResolvedVisitor { |
| } |
| } |
| + visitForeignGetter(ast.Send node) { |
| + Element element = elements[node]; |
| + // Until now we only handle these as getters. |
| + assert(invariant(node, element.isDeferredLoaderGetter())); |
|
floitsch
2014/03/20 12:33:22
Don't just make this an assert.
sigurdm
2014/03/20 12:45:54
Done.
|
| + FunctionElement deferredLoader = element; |
| + Element loadFunction = compiler.loadLibraryFunction; |
| + PrefixElement prefixElement = deferredLoader.enclosingElement; |
| + String loadId = compiler.deferredLoadTask |
| + .importDeferName[prefixElement.deferred_import]; |
| + var inputs = [graph.addConstantString( |
| + new ast.DartString.literal(loadId), compiler)]; |
| + push(new HInvokeStatic(loadFunction, inputs, backend.nonNullType, |
| + targetCanThrow: false)); |
| + } |
| + |
| generateSuperNoSuchMethodSend(ast.Send node, |
| Selector selector, |
| List<HInstruction> arguments) { |
| @@ -4079,7 +4096,7 @@ class SsaBuilder extends ResolvedVisitor { |
| visitStaticSend(ast.Send node) { |
| Selector selector = elements.getSelector(node); |
| Element element = elements[node]; |
| - if (element.isForeign(compiler)) { |
| + if (element.isForeign(compiler) && element.isFunction()) { |
| visitForeignSend(node); |
| return; |
| } |