From 0a3ed7f12e33320fa79ca103e1911746dbc87ad0 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 16 Mar 2015 20:10:16 +0300 Subject: [PATCH] JS: small fixes after conversion --- .../callTranslator/CallInfoExtensions.kt | 2 +- .../callTranslator/FunctionCallCases.kt | 38 ++++++------- .../reference/CallArgumentTranslator.kt | 57 +++++++++---------- 3 files changed, 48 insertions(+), 49 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfoExtensions.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfoExtensions.kt index fed81cb6a38..decdb1a8980 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfoExtensions.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfoExtensions.kt @@ -74,7 +74,7 @@ fun VariableAccessInfo.constructAccessExpression(ref: JsExpression): JsExpressio val FunctionCallInfo.functionName: JsName get() = context.getNameForDescriptor(callableDescriptor) -fun FunctionCallInfo.hasSpreadOperator(): Boolean = argumentsInfo.isHasSpreadOperator() +fun FunctionCallInfo.hasSpreadOperator(): Boolean = argumentsInfo.hasSpreadOperator fun TranslationContext.aliasOrValue(callableDescriptor: CallableDescriptor, value: (CallableDescriptor) -> JsExpression): JsExpression { val alias = getAliasForDescriptor(callableDescriptor) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt index 25aa82e5622..b9561a3d31a 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt @@ -51,9 +51,9 @@ public fun addReceiverToArgs(receiver: JsExpression, arguments: List { override fun FunctionCallInfo.getArgs(): List { - return argumentsInfo.getTranslateArguments() + return argumentsInfo.translateArguments } override fun FunctionCallInfo.getDescriptor(): CallableDescriptor { return callableDescriptor @@ -149,17 +149,17 @@ abstract class AnnotatedAsNativeXCallCase(val annotation: PredefinedAnnotation) object NativeInvokeCallCase : AnnotatedAsNativeXCallCase(PredefinedAnnotation.NATIVE_INVOKE) { override fun translateCall(receiver: JsExpression, argumentsInfo: CallArgumentTranslator.ArgumentsInfo) = - JsInvocation(receiver, argumentsInfo.getTranslateArguments()) + JsInvocation(receiver, argumentsInfo.translateArguments) } object NativeGetterCallCase : AnnotatedAsNativeXCallCase(PredefinedAnnotation.NATIVE_GETTER) { override fun translateCall(receiver: JsExpression, argumentsInfo: CallArgumentTranslator.ArgumentsInfo) = - JsArrayAccess(receiver, argumentsInfo.getTranslateArguments()[0]) + JsArrayAccess(receiver, argumentsInfo.translateArguments[0]) } object NativeSetterCallCase : AnnotatedAsNativeXCallCase(PredefinedAnnotation.NATIVE_SETTER) { override fun translateCall(receiver: JsExpression, argumentsInfo: CallArgumentTranslator.ArgumentsInfo): JsExpression { - val args = argumentsInfo.getTranslateArguments() + val args = argumentsInfo.translateArguments return JsAstUtils.assignment(JsArrayAccess(receiver, args[0]), args[1]) } } @@ -183,7 +183,7 @@ object InvokeIntrinsic : FunctionCallCase { } override fun FunctionCallInfo.dispatchReceiver(): JsExpression { - return JsInvocation(dispatchReceiver, argumentsInfo.getTranslateArguments()) + return JsInvocation(dispatchReceiver, argumentsInfo.translateArguments) } /** @@ -200,7 +200,7 @@ object InvokeIntrinsic : FunctionCallCase { * extLambda.call(obj, some, args) */ override fun FunctionCallInfo.bothReceivers(): JsExpression { - return JsInvocation(Namer.getFunctionCallRef(dispatchReceiver!!), addReceiverToArgs(extensionReceiver!!, argumentsInfo.getTranslateArguments())) + return JsInvocation(Namer.getFunctionCallRef(dispatchReceiver!!), addReceiverToArgs(extensionReceiver!!, argumentsInfo.translateArguments)) } } @@ -214,7 +214,7 @@ object ConstructorCallCase : FunctionCallCase { val functionRef = if (isNative()) fqName else context.aliasOrValue(callableDescriptor) { fqName } - return JsNew(functionRef, argumentsInfo.getTranslateArguments()) + return JsNew(functionRef, argumentsInfo.translateArguments) } } @@ -227,7 +227,7 @@ object SuperCallCase : FunctionCallCase { // TODO: spread operator val prototypeClass = JsNameRef(Namer.getPrototypeName(), dispatchReceiver!!) val functionRef = Namer.getFunctionCallRef(JsNameRef(functionName, prototypeClass)) - return JsInvocation(functionRef, addReceiverToArgs(JsLiteral.THIS, argumentsInfo.getTranslateArguments())) + return JsInvocation(functionRef, addReceiverToArgs(JsLiteral.THIS, argumentsInfo.translateArguments)) } } @@ -236,7 +236,7 @@ object DynamicInvokeAndBracketAccessCallCase : FunctionCallCase { callInfo.resolvedCall.getCall().getCallType() != Call.CallType.DEFAULT && callInfo.callableDescriptor.isDynamic() override fun FunctionCallInfo.dispatchReceiver(): JsExpression { - val arguments = argumentsInfo.getTranslateArguments() + val arguments = argumentsInfo.translateArguments val callType = resolvedCall.getCall().getCallType() return when (callType) { Call.CallType.INVOKE -> @@ -264,7 +264,7 @@ object DynamicOperatorCallCase : FunctionCallCase { val callElement = resolvedCall.getCall().getCallElement() as JetOperationExpression val operationToken = PsiUtils.getOperationToken(callElement) - val arguments = argumentsInfo.getTranslateArguments() + val arguments = argumentsInfo.translateArguments return when (callElement) { is JetBinaryExpression -> { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt index 6185fbe8613..a80420c0641 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/CallArgumentTranslator.kt @@ -33,38 +33,37 @@ import org.jetbrains.kotlin.resolve.calls.model.* import java.util.ArrayList import java.util.Collections +import kotlin.platform.platformStatic -public class CallArgumentTranslator private(private val resolvedCall: ResolvedCall<*>, private val receiver: JsExpression?, context: TranslationContext) : AbstractTranslator(context) { +public class CallArgumentTranslator private ( + private val resolvedCall: ResolvedCall<*>, + private val receiver: JsExpression?, + context: TranslationContext +) : AbstractTranslator(context) { - public class ArgumentsInfo(public val translateArguments: List, private val hasSpreadOperator: Boolean, public val cachedReceiver: TemporaryConstVariable) { - - public fun isHasSpreadOperator(): Boolean { - return hasSpreadOperator - } - } + public class ArgumentsInfo( + public val translateArguments: List, + public val hasSpreadOperator: Boolean, + public val cachedReceiver: TemporaryConstVariable? + ) private enum class ArgumentsKind { HAS_EMPTY_EXPRESSION_ARGUMENT HAS_NOT_EMPTY_EXPRESSION_ARGUMENT } - private val isNativeFunctionCall: Boolean + private val isNativeFunctionCall = AnnotationsUtils.isNativeObject(resolvedCall.getCandidateDescriptor()) - { - this.isNativeFunctionCall = AnnotationsUtils.isNativeObject(resolvedCall.getCandidateDescriptor()) - } + private fun removeLastUndefinedArguments(result: MutableList) { + var i = result.size() - 1 - private fun removeLastUndefinedArguments(result: List) { - var i: Int - run { - i = result.size() - 1 - while (i >= 0) { - if (result.get(i) != context().namer().getUndefinedExpression()) { - break - } - i-- + while (i >= 0) { + if (result.get(i) != context().namer().getUndefinedExpression()) { + break } + i-- } + result.subList(i + 1, result.size()).clear() } @@ -97,15 +96,13 @@ public class CallArgumentTranslator private(private val resolvedCall: ResolvedCa val arguments = actualArgument.getArguments() val size = arguments.size() - run { - var i = 0 - while (i != size) { - if (arguments.get(i).getSpreadElement() != null) { - hasSpreadOperator = true - break - } - ++i + var i = 0 + while (i != size) { + if (arguments.get(i).getSpreadElement() != null) { + hasSpreadOperator = true + break } + ++i } if (hasSpreadOperator) { @@ -149,7 +146,7 @@ public class CallArgumentTranslator private(private val resolvedCall: ResolvedCa concatArguments!!.add(0, JsArrayLiteral(argsBeforeVararg)) } - result = SmartList(concatArgumentsIfNeeded(concatArguments)) + result = SmartList(concatArgumentsIfNeeded(concatArguments!!)) if (receiver != null) { cachedReceiver = context().getOrDeclareTemporaryConstVariable(receiver) @@ -166,10 +163,12 @@ public class CallArgumentTranslator private(private val resolvedCall: ResolvedCa companion object { + platformStatic public fun translate(resolvedCall: ResolvedCall<*>, receiver: JsExpression?, context: TranslationContext): ArgumentsInfo { return translate(resolvedCall, receiver, context, context.dynamicContext().jsBlock()) } + platformStatic public fun translate(resolvedCall: ResolvedCall<*>, receiver: JsExpression?, context: TranslationContext, block: JsBlock): ArgumentsInfo { val innerContext = context.innerBlock(block) val argumentTranslator = CallArgumentTranslator(resolvedCall, receiver, innerContext)