diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/Namer.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/Namer.java index 8fed189d5d0..9aa1252ab20 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/Namer.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/Namer.java @@ -36,6 +36,7 @@ public final class Namer { public static final String CALLEE_NAME = "$fun"; public static final String OUTER_CLASS_NAME = "$outer"; + private static final String CALL_FUNCTION = "call"; private static final String INITIALIZE_METHOD_NAME = "initialize"; private static final String CLASS_OBJECT_NAME = "createClass"; private static final String TRAIT_OBJECT_NAME = "createTrait"; @@ -44,7 +45,7 @@ public final class Namer { private static final String SETTER_PREFIX = "set_"; private static final String GETTER_PREFIX = "get_"; private static final String BACKING_FIELD_PREFIX = "$"; - private static final String SUPER_METHOD_NAME = "super_init"; + private static final String SUPER_METHOD_NAME = "baseInitializer"; private static final String ROOT_NAMESPACE = "_"; private static final String RECEIVER_PARAMETER_NAME = "$receiver"; private static final String CLASSES_OBJECT_NAME = "_c"; @@ -80,8 +81,8 @@ public final class Namer { } @NotNull - public static String superMethodName() { - return SUPER_METHOD_NAME; + public static JsNameRef superMethodNameRef(@NotNull JsName superClassJsName) { + return new JsNameRef(SUPER_METHOD_NAME, superClassJsName.makeRef()); } @NotNull @@ -143,6 +144,11 @@ public final class Namer { return prefix + name; } + @NotNull + public static JsNameRef getFunctionCallRef(@NotNull JsExpression functionExpression) { + return new JsNameRef(CALL_FUNCTION, functionExpression); + } + @NotNull public static Namer newInstance(@NotNull JsScope rootScope) { return new Namer(rootScope); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java index 267c5951368..cae80e1f35c 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java @@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.k2js.translate.LabelGenerator; +import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.Translation; @@ -104,7 +105,7 @@ final class NamespaceTranslator extends AbstractTranslator { else { initializer = visitor.initializer; if (!context().isEcma5()) { - initializers.add(new JsInvocation(new JsNameRef("call", initializer), + initializers.add(new JsInvocation(Namer.getFunctionCallRef(initializer), context().getQualifiedReference(descriptor)).makeStmt()); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java index 3080db3098b..654f645fe31 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java @@ -39,7 +39,6 @@ import java.util.List; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassDescriptorForType; import static org.jetbrains.k2js.translate.utils.BindingUtils.*; -import static org.jetbrains.k2js.translate.utils.JsAstUtils.convertToStatement; import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters; import static org.jetbrains.k2js.translate.utils.TranslationUtils.translateArgumentList; @@ -107,18 +106,12 @@ public final class ClassInitializerTranslator extends AbstractTranslator { } private void addCallToSuperMethod(@NotNull List arguments, JsFunction initializer) { - if (context().isEcma5()) { - JsName ref = context().scope().declareName(Namer.CALLEE_NAME); - initializer.setName(ref); - JsInvocation call = new JsInvocation(new JsNameRef("call", new JsNameRef("baseInitializer", ref.makeRef()))); - call.getArguments().add(JsLiteral.THIS); - call.getArguments().addAll(arguments); - initializerStatements.add(call.makeStmt()); - } - else { - JsName superMethodName = context().scope().declareName(Namer.superMethodName()); - initializerStatements.add(convertToStatement(new JsInvocation(new JsNameRef(superMethodName, JsLiteral.THIS), arguments))); - } + JsName ref = context().scope().declareName(Namer.CALLEE_NAME); + initializer.setName(ref); + JsInvocation call = new JsInvocation(Namer.getFunctionCallRef(Namer.superMethodNameRef(ref))); + call.getArguments().add(JsLiteral.THIS); + call.getArguments().addAll(arguments); + initializerStatements.add(call.makeStmt()); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java index 268244c29fb..66464c685d0 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java @@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.PrimitiveType; +import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.patterns.DescriptorPredicate; @@ -169,7 +170,7 @@ public final class TopLevelFIF extends CompositeFIF { if (functionReference instanceof JsNameRef && ((JsNameRef) functionReference).getIdent().equals("invoke")) { return callTranslator.explicitInvokeCall(); } - return new JsInvocation(new JsNameRef("call", functionReference), generateInvocationArguments(thisExpression, arguments)); + return new JsInvocation(Namer.getFunctionCallRef(functionReference), generateInvocationArguments(thisExpression, arguments)); } } }