| Index: pkg/compiler/lib/src/resolution/members.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
|
| index 5e5bf539312d8f6531e3ce998525d105ba7e5716..a647bdda9f96d64ca6314101ee0af41a5937327a 100644
|
| --- a/pkg/compiler/lib/src/resolution/members.dart
|
| +++ b/pkg/compiler/lib/src/resolution/members.dart
|
| @@ -574,8 +574,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // We still need to register the invocation, because we might
|
| // call [:super.noSuchMethod:] which calls
|
| // [JSInvocationMirror._invokeOn].
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| registry.registerSuperNoSuchMethod();
|
| }
|
| } else if (Elements.isUnresolved(resolvedReceiver.element)) {
|
| @@ -950,7 +949,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| }
|
| // We still need to register the invocation, because we might
|
| // call [:super.noSuchMethod:] which calls [JSInvocationMirror._invokeOn].
|
| - registry.registerDynamicInvocation(new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| registry.registerSuperNoSuchMethod();
|
| }
|
| return computeSuperAccessSemantics(node, target);
|
| @@ -1078,7 +1077,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| } else {
|
| ResolutionResult expressionResult = visitExpression(expression);
|
| semantics = new DynamicAccess.dynamicProperty(expression);
|
| - registry.registerDynamicInvocation(new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
|
|
| if (expressionResult.isConstant) {
|
| bool isValidConstant;
|
| @@ -1253,7 +1252,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| } else {
|
| ResolutionResult leftResult = visitExpression(left);
|
| ResolutionResult rightResult = visitExpression(right);
|
| - registry.registerDynamicInvocation(new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| semantics = new DynamicAccess.dynamicProperty(left);
|
|
|
| if (leftResult.isConstant && rightResult.isConstant) {
|
| @@ -1385,7 +1384,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // TODO(johnniwinther): Remove this when all information goes through the
|
| // [SendStructure].
|
| registry.setSelector(node, selector);
|
| - registry.registerDynamicInvocation(new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| registry.registerSendStructure(node,
|
| new InvokeStructure(new AccessSemantics.expression(), selector));
|
| return const NoneResult();
|
| @@ -1435,8 +1434,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // TODO(johnniwinther): Handle invalid this access as an
|
| // [AccessSemantics].
|
| if (checkThisAccess(node)) {
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| registry.registerSendStructure(node,
|
| new InvokeStructure(accessSemantics, selector));
|
| }
|
| @@ -1472,8 +1470,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| superMethod.computeSignature(compiler);
|
| if (!callStructure.signatureApplies(superMethod)) {
|
| registry.registerThrowNoSuchMethod();
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| registry.registerSuperNoSuchMethod();
|
| isIncompatibleInvoke = true;
|
| } else {
|
| @@ -1485,8 +1482,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| case AccessKind.SUPER_GETTER:
|
| registry.registerStaticUse(semantics.element);
|
| selector = callStructure.callSelector;
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| break;
|
| case AccessKind.SUPER_SETTER:
|
| case AccessKind.UNRESOLVED_SUPER:
|
| @@ -1712,15 +1708,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| if (node.isCall) {
|
| CallStructure callStructure = resolveArguments(node.argumentsNode);
|
| selector = new Selector(SelectorKind.CALL, name, callStructure);
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| sendStructure = new InvokeStructure(semantics, selector);
|
| } else {
|
| assert(invariant(node, node.isPropertyAccess));
|
| selector = new Selector(
|
| SelectorKind.GETTER, name, CallStructure.NO_ARGS);
|
| - registry.registerDynamicGetter(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicGetter(selector);
|
| sendStructure = new GetStructure(semantics, selector);
|
| }
|
| registry.registerSendStructure(node, sendStructure);
|
| @@ -1804,15 +1798,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| if (node.isCall) {
|
| CallStructure callStructure = resolveArguments(node.argumentsNode);
|
| selector = new Selector(SelectorKind.CALL, name, callStructure);
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| sendStructure = new InvokeStructure(accessSemantics, selector);
|
| } else {
|
| assert(invariant(node, node.isPropertyAccess));
|
| selector = new Selector(
|
| SelectorKind.GETTER, name, CallStructure.NO_ARGS);
|
| - registry.registerDynamicGetter(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicGetter(selector);
|
| sendStructure = new GetStructure(accessSemantics, selector);
|
| }
|
| // TODO(johnniwinther): Remove this when all information goes through
|
| @@ -1880,8 +1872,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| function.computeSignature(compiler);
|
| if (!callStructure.signatureApplies(function)) {
|
| registry.registerThrowNoSuchMethod();
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| isIncompatibleInvoke = true;
|
| }
|
| break;
|
| @@ -1890,8 +1881,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| case AccessKind.LOCAL_VARIABLE:
|
| case AccessKind.FINAL_LOCAL_VARIABLE:
|
| selector = callStructure.callSelector;
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| break;
|
| default:
|
| internalError(node,
|
| @@ -1956,8 +1946,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| method.computeSignature(compiler);
|
| if (!callStructure.signatureApplies(method)) {
|
| registry.registerThrowNoSuchMethod();
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| isIncompatibleInvoke = true;
|
| } else {
|
| registry.registerStaticUse(semantics.element);
|
| @@ -1972,8 +1961,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| case AccessKind.TOPLEVEL_GETTER:
|
| registry.registerStaticUse(semantics.element);
|
| selector = callStructure.callSelector;
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| break;
|
| case AccessKind.STATIC_SETTER:
|
| case AccessKind.TOPLEVEL_SETTER:
|
| @@ -2196,8 +2184,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // we need to register that fact that we may be calling a closure
|
| // with the same arguments.
|
| Selector call = new Selector.callClosureFrom(selector);
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(call);
|
| } else if (target.impliesType) {
|
| // We call 'call()' on a Type instance returned from the reference to a
|
| // class or typedef literal. We do not need to register this call as a
|
| @@ -2372,8 +2359,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // the ++ and -- ones. Also, if op= form is used, include op itself.
|
| void registerBinaryOperator(String name) {
|
| Selector binop = new Selector.binaryOperator(name);
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(binop, null));
|
| + registry.registerDynamicInvocation(binop);
|
| registry.setOperatorSelectorInComplexSendSet(node, binop);
|
| }
|
| if (identical(source, '++')) {
|
| @@ -2394,14 +2380,11 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| void registerSend(Selector selector, Element target) {
|
| if (target == null || target.isInstanceMember) {
|
| if (selector.isGetter) {
|
| - registry.registerDynamicGetter(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicGetter(selector);
|
| } else if (selector.isSetter) {
|
| - registry.registerDynamicSetter(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicSetter(selector);
|
| } else {
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| }
|
| } else if (Elements.isStaticOrTopLevel(target)) {
|
| // Avoid registration of type variables since they are not analyzable but
|
| @@ -3028,17 +3011,15 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
|
|
| registerImplicitInvocation(String name, int arity) {
|
| Selector selector = new Selector.call(name, null, arity);
|
| - registry.registerDynamicInvocation(new UniverseSelector(selector, null));
|
| + registry.registerDynamicInvocation(selector);
|
| }
|
|
|
| ResolutionResult visitAsyncForIn(AsyncForIn node) {
|
| registry.registerAsyncForIn(node);
|
| registry.setCurrentSelector(node, compiler.currentSelector);
|
| - registry.registerDynamicGetter(
|
| - new UniverseSelector(compiler.currentSelector, null));
|
| + registry.registerDynamicGetter(compiler.currentSelector);
|
| registry.setMoveNextSelector(node, compiler.moveNextSelector);
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(compiler.moveNextSelector, null));
|
| + registry.registerDynamicInvocation(compiler.moveNextSelector);
|
|
|
| visit(node.expression);
|
|
|
| @@ -3051,14 +3032,11 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| ResolutionResult visitSyncForIn(SyncForIn node) {
|
| registry.registerSyncForIn(node);
|
| registry.setIteratorSelector(node, compiler.iteratorSelector);
|
| - registry.registerDynamicGetter(
|
| - new UniverseSelector(compiler.iteratorSelector, null));
|
| + registry.registerDynamicGetter(compiler.iteratorSelector);
|
| registry.setCurrentSelector(node, compiler.currentSelector);
|
| - registry.registerDynamicGetter(
|
| - new UniverseSelector(compiler.currentSelector, null));
|
| + registry.registerDynamicGetter(compiler.currentSelector);
|
| registry.setMoveNextSelector(node, compiler.moveNextSelector);
|
| - registry.registerDynamicInvocation(
|
| - new UniverseSelector(compiler.moveNextSelector, null));
|
| + registry.registerDynamicInvocation(compiler.moveNextSelector);
|
|
|
| visit(node.expression);
|
|
|
|
|