JS backend: move "call" and "baseInitializer" keyword to Namer

This commit is contained in:
Erokhin Stanislav
2013-09-05 21:26:30 +04:00
parent 2452b3c34c
commit 8e72efc736
4 changed files with 19 additions and 18 deletions
@@ -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);
@@ -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());
}
}
@@ -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<JsExpression> 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
@@ -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));
}
}
}