| 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..c04c5ba71784f3e97bc5f82835b5b20c7854da78 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.
|
| + invariant(node, element.isDeferredLoaderGetter());
|
| + FunctionElement deferredLoader = element;
|
| + Element loadFunction = compiler.loadLibraryFunction;
|
| + PrefixElement prefixElement = deferredLoader.enclosingElement;
|
| + String loadId = compiler.deferredLoadTask
|
| + .importDeferName[prefixElement.deferredImport];
|
| + 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;
|
| }
|
|
|