From cdf42ef797140c5fd8746f57e533c61deddb2aac Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Fri, 7 Mar 2014 16:28:34 +0400 Subject: [PATCH] JS backend: dropped hack from UsageTracker. --- .../k2js/translate/context/StaticContext.java | 10 ++------ .../translate/context/TranslationContext.java | 8 +++--- .../k2js/translate/context/UsageTracker.kt | 17 +++---------- .../declaration/ClassTranslator.java | 4 +-- .../expression/LiteralFunctionTranslator.kt | 17 ++++++------- .../functions/factories/TopLevelFIF.java | 2 +- .../translate/utils/TranslationUtils.java | 25 ++++++++++--------- 7 files changed, 33 insertions(+), 50 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index f6ffddee6e7..69fa312b11d 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -41,6 +41,7 @@ import static org.jetbrains.k2js.translate.utils.AnnotationsUtils.getNameForAnno import static org.jetbrains.k2js.translate.utils.AnnotationsUtils.isLibraryObject; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.*; import static org.jetbrains.k2js.translate.utils.TranslationUtils.getMangledName; +import static org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName; /** * Aggregates all the static parts of the context. @@ -222,14 +223,7 @@ public final class StaticContext { @Nullable public JsName apply(@NotNull DeclarationDescriptor descriptor) { JsScope scope = getEnclosingScope(descriptor); - - String suggestedName = descriptor.getName().asString(); - - if (descriptor instanceof FunctionDescriptor) { - suggestedName = getMangledName((FunctionDescriptor) descriptor); - } - - return scope.declareFreshName(suggestedName); + return scope.declareFreshName(getSuggestedName(descriptor)); } }; Rule constructorHasTheSameNameAsTheClass = new Rule() { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index 0d66dca48c1..dc3c29646d3 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.k2js.translate.intrinsic.Intrinsics; +import org.jetbrains.k2js.translate.utils.TranslationUtils; import java.util.HashMap; import java.util.Map; @@ -114,7 +115,7 @@ public class TranslationContext { @NotNull public TranslationContext newFunctionBodyWithUsageTracker(@NotNull JsFunction fun, @NotNull MemberDescriptor descriptor) { DynamicContext dynamicContext = DynamicContext.newContext(fun.getScope(), fun.getBody()); - UsageTracker usageTracker = new UsageTracker(this.usageTracker, descriptor, fun.getScope(), this.staticContext); + UsageTracker usageTracker = new UsageTracker(this.usageTracker, descriptor, fun.getScope()); return new TranslationContext(this, this.staticContext, dynamicContext, this.aliasingContext.inner(), usageTracker, this.definitionPlace); } @@ -285,8 +286,9 @@ public class TranslationContext { } @NotNull - public JsNameRef define(String name, JsExpression expression) { - return getDefinitionPlace().define(name, expression); + public JsNameRef define(DeclarationDescriptor descriptor, JsExpression expression) { + String suggestedName = TranslationUtils.getSuggestedNameForInnerDeclaration(this, descriptor); + return getDefinitionPlace().define(suggestedName, expression); } @Nullable diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/UsageTracker.kt b/js/js.translator/src/org/jetbrains/k2js/translate/context/UsageTracker.kt index b5dc6d4b416..e0c3fd906ff 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/UsageTracker.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/UsageTracker.kt @@ -20,14 +20,14 @@ import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.resolve.DescriptorUtils.isAncestor import com.google.dart.compiler.backend.js.ast.JsName import com.google.dart.compiler.backend.js.ast.JsScope +import org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName private val CAPTURED_RECEIVER_NAME_PREFIX : String = "this$" class UsageTracker( private val parent: UsageTracker?, val containingDescriptor: MemberDescriptor, - private val scope: JsScope, - private val staticContext: StaticContext + private val scope: JsScope ) { private val captured = hashMapOf() @@ -63,18 +63,7 @@ class UsageTracker( } private fun CallableDescriptor.getJsNameForCapturedDescriptor(): JsName { - val suggestedName = - when (this) { - is ReceiverParameterDescriptor -> { - this.getNameForCapturedReceiver() - } - else -> { - // TODO: drop temporary HACK or add description - val name = staticContext.getNameForDescriptor(this) - name.getIdent() - } - } - + val suggestedName = if (this is ReceiverParameterDescriptor) this.getNameForCapturedReceiver() else getSuggestedName(this) return scope.declareFreshName(suggestedName) } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index aedb7a0eb30..ae7b5278126 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -33,7 +33,6 @@ import org.jetbrains.k2js.translate.expression.ExpressionPackage; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator; import org.jetbrains.k2js.translate.utils.JsAstUtils; -import org.jetbrains.k2js.translate.utils.TranslationUtils; import java.util.*; @@ -224,7 +223,6 @@ public final class ClassTranslator extends AbstractTranslator { fun.getBody().getStatements().add(new JsReturn(translate(funContext))); - String suggestedName = TranslationUtils.getSuggestedName(funContext, descriptor); - return ExpressionPackage.withCapturedParameters(fun, funContext, outerClassContext, suggestedName); + return ExpressionPackage.withCapturedParameters(fun, funContext, outerClassContext, descriptor); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/LiteralFunctionTranslator.kt b/js/js.translator/src/org/jetbrains/k2js/translate/expression/LiteralFunctionTranslator.kt index c0784c0d7c6..d0edf253c90 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/LiteralFunctionTranslator.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/LiteralFunctionTranslator.kt @@ -26,6 +26,7 @@ import org.jetbrains.k2js.translate.utils.BindingUtils.getFunctionDescriptor import org.jetbrains.k2js.translate.utils.FunctionBodyTranslator.translateFunctionBody import org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName import org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction +import org.jetbrains.jet.lang.descriptors.MemberDescriptor class LiteralFunctionTranslator(context: TranslationContext) : AbstractTranslator(context) { fun translate(declaration: JetDeclarationWithBody): JsExpression { @@ -54,18 +55,16 @@ class LiteralFunctionTranslator(context: TranslationContext) : AbstractTranslato lambda.setName(tracker.getNameForCapturedDescriptor(descriptor)) } - val suggestedName = getSuggestedName(functionContext, descriptor) - if (tracker.hasCapturedExceptContaining()) { val lambdaCreator = simpleReturnFunction(invokingContext.scope(), lambda) - return lambdaCreator.withCapturedParameters(functionContext, invokingContext, suggestedName) + return lambdaCreator.withCapturedParameters(functionContext, invokingContext, descriptor) } - return invokingContext.define(suggestedName, lambda) + return invokingContext.define(descriptor, lambda) } } -fun JsFunction.withCapturedParameters(context: TranslationContext, invokingContext: TranslationContext, suggestedName: String): JsExpression { +fun JsFunction.withCapturedParameters(context: TranslationContext, invokingContext: TranslationContext, descriptor: MemberDescriptor): JsExpression { fun getParameterNameRefForInvocation(callableDescriptor: CallableDescriptor): JsExpression { val alias = invokingContext.getAliasForDescriptor(callableDescriptor) @@ -76,7 +75,7 @@ fun JsFunction.withCapturedParameters(context: TranslationContext, invokingConte return invokingContext.getNameForDescriptor(callableDescriptor).makeRef() } - val ref = invokingContext.define(suggestedName, this) + val ref = invokingContext.define(descriptor, this) val invocation = JsInvocation(ref) val invocationArguments = invocation.getArguments()!! @@ -84,11 +83,11 @@ fun JsFunction.withCapturedParameters(context: TranslationContext, invokingConte val tracker = context.usageTracker()!! - for ((descriptor, name) in tracker.capturedDescriptorToJsName) { - if (descriptor == tracker.containingDescriptor) continue + for ((capturedDescriptor, name) in tracker.capturedDescriptorToJsName) { + if (capturedDescriptor == tracker.containingDescriptor) continue functionParameters.add(JsParameter(name)) - invocationArguments.add(getParameterNameRefForInvocation(descriptor)) + invocationArguments.add(getParameterNameRefForInvocation(capturedDescriptor)) } return invocation 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 a1602b05763..9209f5d5b60 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 @@ -131,7 +131,7 @@ public final class TopLevelFIF extends CompositeFIF { private static String getStableMangledBuiltInName(@NotNull ClassDescriptor descriptor, @NotNull String functionName) { Collection functions = descriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier(functionName)); assert functions.size() == 1 : "Can't select a single function: " + functionName + " in " + descriptor; - return TranslationUtils.getMangledName(functions.iterator().next()); + return TranslationUtils.getSuggestedName(functions.iterator().next()); } private static final FunctionIntrinsic PROPERTY_METADATA_IMPL = new FunctionIntrinsic() { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java index 34c53ca772a..873ab047135 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java @@ -143,7 +143,18 @@ public final class TranslationUtils { } @NotNull - public static String getMangledName(@NotNull FunctionDescriptor descriptor) { + public static String getSuggestedName(@NotNull DeclarationDescriptor descriptor) { + String suggestedName = descriptor.getName().asString(); + + if (descriptor instanceof FunctionDescriptor) { + suggestedName = getMangledName((FunctionDescriptor) descriptor); + } + + return suggestedName; + } + + @NotNull + private static String getMangledName(@NotNull FunctionDescriptor descriptor) { if (needsStableMangling(descriptor)) { return getStableMangledName(descriptor); } @@ -322,16 +333,6 @@ public final class TranslationUtils { return jsInitExpression; } - @NotNull - public static List translateExpressionList(@NotNull TranslationContext context, - @NotNull List expressions) { - List result = new ArrayList(); - for (JetExpression expression : expressions) { - result.add(Translation.translateAsExpression(expression, context)); - } - return result; - } - @NotNull public static JsExpression translateBaseExpression(@NotNull TranslationContext context, @NotNull JetUnaryExpression expression) { @@ -412,7 +413,7 @@ public final class TranslationUtils { } @NotNull - public static String getSuggestedName(TranslationContext context, DeclarationDescriptor descriptor) { + public static String getSuggestedNameForInnerDeclaration(TranslationContext context, DeclarationDescriptor descriptor) { String suggestedName = ""; DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); if (containingDeclaration != null &&