JS backend: minor refactoring in LiteralFunctionTranslator

This commit is contained in:
Zalim Bashorov
2013-12-10 15:47:41 +04:00
parent 24c9d802c2
commit 1c3c2b2f77
2 changed files with 16 additions and 16 deletions
@@ -403,15 +403,14 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@Override
@NotNull
public JsNode visitFunctionLiteralExpression(@NotNull JetFunctionLiteralExpression expression, @NotNull TranslationContext context) {
FunctionDescriptor descriptor = getFunctionDescriptor(context.bindingContext(), expression.getFunctionLiteral());
return context.literalFunctionTranslator().translate(expression.getFunctionLiteral(), descriptor, context);
return context.literalFunctionTranslator().translate(expression.getFunctionLiteral(), context);
}
@Override
@NotNull
public JsNode visitNamedFunction(@NotNull JetNamedFunction expression, @NotNull TranslationContext context) {
JsExpression alias = context.literalFunctionTranslator().translate(expression, context);
FunctionDescriptor descriptor = getFunctionDescriptor(context.bindingContext(), expression);
JsExpression alias = context.literalFunctionTranslator().translate(expression, descriptor, context);
JsName name = context.scope().declareFreshName(descriptor.getName().asString());
context.aliasingContext().registerAlias(descriptor, name.makeRef());
return new JsVars(new JsVars.JsVar(name, alias)).source(expression);
@@ -40,6 +40,7 @@ import org.jetbrains.k2js.translate.general.AbstractTranslator;
import java.util.List;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getFunctionDescriptor;
import static org.jetbrains.k2js.translate.utils.FunctionBodyTranslator.translateFunctionBody;
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getExpectedReceiverDescriptor;
@@ -68,13 +69,14 @@ public class LiteralFunctionTranslator extends AbstractTranslator {
}
}
public JsExpression translate(@NotNull JetDeclarationWithBody declaration, @NotNull FunctionDescriptor descriptor, @NotNull TranslationContext outerContext) {
JsFunction fun = createFunction();
TranslationContext funContext;
boolean asInner;
ClassDescriptor outerClass;
AliasingContext aliasingContext;
@NotNull
public JsExpression translate(@NotNull JetDeclarationWithBody declaration, @NotNull TranslationContext outerContext) {
FunctionDescriptor descriptor = getFunctionDescriptor(outerContext.bindingContext(), declaration);
DeclarationDescriptor receiverDescriptor = getExpectedReceiverDescriptor(descriptor);
JsFunction fun = createFunction();
AliasingContext aliasingContext;
JsName receiverName;
if (receiverDescriptor == null) {
receiverName = null;
@@ -85,6 +87,8 @@ public class LiteralFunctionTranslator extends AbstractTranslator {
aliasingContext = outerContext.aliasingContext().inner(receiverDescriptor, receiverName.makeRef());
}
boolean asInner;
ClassDescriptor outerClass;
if (descriptor.getContainingDeclaration() instanceof ConstructorDescriptor) {
// KT-2388
asInner = true;
@@ -101,16 +105,11 @@ public class LiteralFunctionTranslator extends AbstractTranslator {
asInner = DescriptorUtils.isTopLevelDeclaration(descriptor);
}
funContext = outerContext.newFunctionBody(fun, aliasingContext,
new UsageTracker(descriptor, outerContext.usageTracker(), outerClass));
UsageTracker funTracker = new UsageTracker(descriptor, outerContext.usageTracker(), outerClass);
TranslationContext funContext = outerContext.newFunctionBody(fun, aliasingContext, funTracker);
fun.getBody().getStatements().addAll(translateFunctionBody(descriptor, declaration, funContext).getStatements());
InnerFunctionTranslator translator = null;
if (!asInner) {
translator = new InnerFunctionTranslator(descriptor, funContext, fun);
}
if (asInner) {
addRegularParameters(descriptor, fun, funContext, receiverName);
if (outerClass != null) {
@@ -127,6 +126,8 @@ public class LiteralFunctionTranslator extends AbstractTranslator {
return fun;
}
InnerFunctionTranslator translator = new InnerFunctionTranslator(descriptor, funContext, fun);
JsExpression result = translator.translate(createReference(fun), outerContext);
addRegularParameters(descriptor, fun, funContext, receiverName);
return result;