| Index: dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| index f55026a806851c867fee259d14676437a3f09cb9..254b28e8606ca93c0ab76199835ce9f790d0fa0f 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| @@ -167,10 +167,6 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| // (4) No stub generated, call is direct.
|
| // (5) No stub generated, call is direct.
|
|
|
| - Set<Selector> selectors = member.isInstanceMember()
|
| - ? compiler.codegenWorld.invokedNames[member.name]
|
| - : null; // No stubs needed for static methods.
|
| -
|
| /// Returns all closure call selectors renamed to match this member.
|
| Set<Selector> callSelectorsAsNamed() {
|
| if (!canTearOff) return null;
|
| @@ -183,6 +179,10 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| callSelector.argumentCount, callSelector.namedArguments);
|
| }).toSet();
|
| }
|
| +
|
| + Set<Selector> selectors = member.isInstanceMember()
|
| + ? compiler.codegenWorld.invokedNames[member.name]
|
| + : null; // No stubs needed for static methods.
|
| if (selectors == null) {
|
| selectors = callSelectorsAsNamed();
|
| if (selectors == null) return;
|
| @@ -336,7 +336,7 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| canTearOff = false;
|
| isClosure = true;
|
| } else {
|
| - // Careful with operators.
|
| + // TODO(ahe): What happens if an operator is passed to getterName?
|
| canTearOff = compiler.codegenWorld.hasInvokedGetter(member, compiler);
|
| tearOffName = namer.getterName(member);
|
| }
|
| @@ -435,7 +435,10 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| // stubs for implicit closures.
|
| expressions.add("null");
|
| // TOOD(ahe): Since we know when reading static data versus instance
|
| - // data, we can eliminate this element.
|
| + // data, we can eliminate this element from the emitted array. In
|
| + // other words, instead of generating [..., foo, null, bar, ...], we
|
| + // can generate [..., foo, bar, ...] and adjust the index differently
|
| + // when reading this information from a static function.
|
| }
|
| Set<Selector> callSelectors = compiler.codegenWorld.invokedNames[
|
| namer.closureInvocationSelectorName];
|
|
|