| Index: pkg/compiler/lib/src/ssa/codegen.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
|
| index 1c2443bb708a7d84f3b94597b07f61ea03e925a2..eb9d7c8257529e6b6a510020b336ccd9ab67387e 100644
|
| --- a/pkg/compiler/lib/src/ssa/codegen.dart
|
| +++ b/pkg/compiler/lib/src/ssa/codegen.dart
|
| @@ -1493,7 +1493,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| } else {
|
| assert(node.inputs.length == 1);
|
| registry.registerSpecializedGetInterceptor(node.interceptedClasses);
|
| - String name =
|
| + js.Name name =
|
| backend.namer.nameForGetInterceptor(node.interceptedClasses);
|
| var isolate = new js.VariableUse(
|
| backend.namer.globalObjectFor(backend.interceptorsLibrary));
|
| @@ -1511,6 +1511,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| List<js.Expression> arguments = visitArguments(node.inputs);
|
| Element target = node.element;
|
|
|
| + // TODO(herhut): The namer should return the appropriate backendname here.
|
| if (target != null && !node.isInterceptedCall) {
|
| if (target == backend.jsArrayAdd) {
|
| methodName = 'push';
|
| @@ -1530,17 +1531,20 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| }
|
| }
|
|
|
| + js.Name methodLiteral;
|
| if (methodName == null) {
|
| - methodName = backend.namer.invocationName(node.selector);
|
| + methodLiteral = backend.namer.invocationName(node.selector);
|
| registerMethodInvoke(node);
|
| + } else {
|
| + methodLiteral = backend.namer.asName(methodName);
|
| }
|
| - push(js.propertyCall(object, methodName, arguments), node);
|
| + push(js.propertyCall(object, methodLiteral, arguments), node);
|
| }
|
|
|
| void visitInvokeConstructorBody(HInvokeConstructorBody node) {
|
| use(node.inputs[0]);
|
| js.Expression object = pop();
|
| - String methodName = backend.namer.instanceMethodName(node.element);
|
| + js.Name methodName = backend.namer.instanceMethodName(node.element);
|
| List<js.Expression> arguments = visitArguments(node.inputs);
|
| push(js.propertyCall(object, methodName, arguments), node);
|
| registry.registerStaticUse(node.element);
|
| @@ -1551,7 +1555,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| var isolate = new js.VariableUse(
|
| backend.namer.globalObjectFor(backend.interceptorsLibrary));
|
| Selector selector = getOptimizedSelectorFor(node, node.selector);
|
| - String methodName = backend.registerOneShotInterceptor(selector);
|
| + js.Name methodName = backend.registerOneShotInterceptor(selector);
|
| push(js.propertyCall(isolate, methodName, arguments), node);
|
| if (selector.isGetter) {
|
| registerGetter(node);
|
| @@ -1608,14 +1612,14 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
|
|
| visitInvokeDynamicSetter(HInvokeDynamicSetter node) {
|
| use(node.receiver);
|
| - String name = backend.namer.invocationName(node.selector);
|
| + js.Name name = backend.namer.invocationName(node.selector);
|
| push(js.propertyCall(pop(), name, visitArguments(node.inputs)), node);
|
| registerSetter(node);
|
| }
|
|
|
| visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
|
| use(node.receiver);
|
| - String name = backend.namer.invocationName(node.selector);
|
| + js.Name name = backend.namer.invocationName(node.selector);
|
| push(js.propertyCall(pop(), name, visitArguments(node.inputs)), node);
|
| registerGetter(node);
|
| }
|
| @@ -1677,10 +1681,10 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| registry.registerSuperInvocation(superMethod);
|
| ClassElement superClass = superMethod.enclosingClass;
|
| if (superMethod.kind == ElementKind.FIELD) {
|
| - String fieldName = backend.namer.instanceFieldPropertyName(superMethod);
|
| + js.Name fieldName =
|
| + backend.namer.instanceFieldPropertyName(superMethod);
|
| use(node.inputs[0]);
|
| - js.PropertyAccess access =
|
| - new js.PropertyAccess.field(pop(), fieldName);
|
| + js.PropertyAccess access = new js.PropertyAccess(pop(), fieldName);
|
| if (node.isSetter) {
|
| use(node.value);
|
| push(new js.Assignment(access, pop()), node);
|
| @@ -1691,7 +1695,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| Selector selector = node.selector;
|
|
|
| if (!backend.maybeRegisterAliasedSuperMember(superMethod, selector)) {
|
| - String methodName;
|
| + js.Name methodName;
|
| if (selector.isGetter) {
|
| // If the selector we need to register a typed getter to the
|
| // [world]. The emitter needs to know if it needs to emit a
|
| @@ -1738,8 +1742,8 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| // property should not be mangled.
|
| push(new js.PropertyAccess.field(pop(), 'length'), node);
|
| } else {
|
| - String name = backend.namer.instanceFieldPropertyName(element);
|
| - push(new js.PropertyAccess.field(pop(), name), node);
|
| + js.Name name = backend.namer.instanceFieldPropertyName(element);
|
| + push(new js.PropertyAccess(pop(), name), node);
|
| registry.registerFieldGetter(element);
|
| }
|
| }
|
| @@ -1747,20 +1751,20 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| visitFieldSet(HFieldSet node) {
|
| Element element = node.element;
|
| registry.registerFieldSetter(element);
|
| - String name = backend.namer.instanceFieldPropertyName(element);
|
| + js.Name name = backend.namer.instanceFieldPropertyName(element);
|
| use(node.receiver);
|
| js.Expression receiver = pop();
|
| use(node.value);
|
| - push(new js.Assignment(new js.PropertyAccess.field(receiver, name), pop()),
|
| + push(new js.Assignment(new js.PropertyAccess(receiver, name), pop()),
|
| node);
|
| }
|
|
|
| visitReadModifyWrite(HReadModifyWrite node) {
|
| Element element = node.element;
|
| registry.registerFieldSetter(element);
|
| - String name = backend.namer.instanceFieldPropertyName(element);
|
| + js.Name name = backend.namer.instanceFieldPropertyName(element);
|
| use(node.receiver);
|
| - js.Expression fieldReference = new js.PropertyAccess.field(pop(), name);
|
| + js.Expression fieldReference = new js.PropertyAccess(pop(), name);
|
| if (node.isPreOp) {
|
| push(new js.Prefix(node.jsOp, fieldReference), node);
|
| } else if (node.isPostOp) {
|
| @@ -2354,7 +2358,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| use(input);
|
|
|
| js.PropertyAccess field =
|
| - new js.PropertyAccess.field(pop(), backend.namer.operatorIsType(type));
|
| + new js.PropertyAccess(pop(), backend.namer.operatorIsType(type));
|
| // We always negate at least once so that the result is boolified.
|
| push(new js.Prefix('!', field));
|
| // If the result is not negated, put another '!' in front.
|
| @@ -2585,7 +2589,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
|
| generateThrowWithHelper('iae', node.checkedInput);
|
| } else if (node.isReceiverTypeCheck) {
|
| use(node.checkedInput);
|
| - String methodName =
|
| + js.Name methodName =
|
| backend.namer.invocationName(node.receiverTypeCheckSelector);
|
| js.Expression call = js.propertyCall(pop(), methodName, []);
|
| pushStatement(new js.Return(call));
|
|
|