Move FunctionInvokeDescriptor.BIG_ARITY to :core:compiler.common
This commit is contained in:
@@ -13,6 +13,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.backend.common.CodegenUtil;
|
import org.jetbrains.kotlin.backend.common.CodegenUtil;
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames;
|
import org.jetbrains.kotlin.builtins.StandardNames;
|
||||||
|
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity;
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor;
|
import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor;
|
||||||
import org.jetbrains.kotlin.codegen.binding.CalculatedClosure;
|
import org.jetbrains.kotlin.codegen.binding.CalculatedClosure;
|
||||||
import org.jetbrains.kotlin.codegen.context.CodegenContext;
|
import org.jetbrains.kotlin.codegen.context.CodegenContext;
|
||||||
@@ -353,7 +354,7 @@ public class JvmCodegenUtil {
|
|||||||
|
|
||||||
public static boolean isDeclarationOfBigArityCreateCoroutineMethod(@Nullable DeclarationDescriptor descriptor) {
|
public static boolean isDeclarationOfBigArityCreateCoroutineMethod(@Nullable DeclarationDescriptor descriptor) {
|
||||||
return descriptor instanceof SimpleFunctionDescriptor && descriptor.getName().asString().equals(SUSPEND_FUNCTION_CREATE_METHOD_NAME) &&
|
return descriptor instanceof SimpleFunctionDescriptor && descriptor.getName().asString().equals(SUSPEND_FUNCTION_CREATE_METHOD_NAME) &&
|
||||||
((SimpleFunctionDescriptor) descriptor).getValueParameters().size() >= FunctionInvokeDescriptor.BIG_ARITY - 1 &&
|
((SimpleFunctionDescriptor) descriptor).getValueParameters().size() >= BuiltInFunctionArity.BIG_ARITY - 1 &&
|
||||||
descriptor.getContainingDeclaration() instanceof AnonymousFunctionDescriptor && ((AnonymousFunctionDescriptor) descriptor.getContainingDeclaration()).isSuspend();
|
descriptor.getContainingDeclaration() instanceof AnonymousFunctionDescriptor && ((AnonymousFunctionDescriptor) descriptor.getContainingDeclaration()).isSuspend();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.types.expressions
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.ReflectionTypes
|
import org.jetbrains.kotlin.builtins.ReflectionTypes
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor
|
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.DefaultImplementation
|
import org.jetbrains.kotlin.container.DefaultImplementation
|
||||||
@@ -633,7 +633,7 @@ class DoubleColonExpressionResolver(
|
|||||||
|
|
||||||
context.trace.record(BindingContext.FUNCTION, expression, functionDescriptor)
|
context.trace.record(BindingContext.FUNCTION, expression, functionDescriptor)
|
||||||
|
|
||||||
if (functionDescriptor.valueParameters.size >= FunctionInvokeDescriptor.BIG_ARITY &&
|
if (functionDescriptor.valueParameters.size >= BuiltInFunctionArity.BIG_ARITY &&
|
||||||
bigAritySupport.shouldCheckLanguageVersionSettings &&
|
bigAritySupport.shouldCheckLanguageVersionSettings &&
|
||||||
!languageVersionSettings.supportsFeature(LanguageFeature.FunctionTypesWithBigArity)
|
!languageVersionSettings.supportsFeature(LanguageFeature.FunctionTypesWithBigArity)
|
||||||
) {
|
) {
|
||||||
|
|||||||
+2
-2
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.backend.jvm.codegen
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor
|
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
||||||
import org.jetbrains.kotlin.codegen.signature.AsmTypeFactory
|
import org.jetbrains.kotlin.codegen.signature.AsmTypeFactory
|
||||||
@@ -240,7 +240,7 @@ class IrTypeMapper(private val context: JvmBackendContext) : KotlinTypeMapperBas
|
|||||||
val parameters = classifier.typeParameters.map(IrTypeParameter::symbol)
|
val parameters = classifier.typeParameters.map(IrTypeParameter::symbol)
|
||||||
val arguments = type.arguments
|
val arguments = type.arguments
|
||||||
|
|
||||||
if ((classifier.symbol.isFunction() && arguments.size > FunctionInvokeDescriptor.BIG_ARITY)
|
if ((classifier.symbol.isFunction() && arguments.size > BuiltInFunctionArity.BIG_ARITY)
|
||||||
|| classifier.symbol.isKFunction() || classifier.symbol.isKSuspendFunction()
|
|| classifier.symbol.isKFunction() || classifier.symbol.isKSuspendFunction()
|
||||||
) {
|
) {
|
||||||
writeGenericArguments(sw, listOf(arguments.last()), listOf(parameters.last()), mode)
|
writeGenericArguments(sw, listOf(arguments.last()), listOf(parameters.last()), mode)
|
||||||
|
|||||||
+3
-3
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
|||||||
import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder
|
import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.irArray
|
import org.jetbrains.kotlin.backend.jvm.ir.irArray
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor
|
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
@@ -47,7 +47,7 @@ private class FunctionNVarargBridgeLowering(val context: JvmBackendContext) :
|
|||||||
|
|
||||||
// Change calls to big arity invoke functions to vararg calls.
|
// Change calls to big arity invoke functions to vararg calls.
|
||||||
override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression {
|
override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression {
|
||||||
if (expression.valueArgumentsCount < FunctionInvokeDescriptor.BIG_ARITY ||
|
if (expression.valueArgumentsCount < BuiltInFunctionArity.BIG_ARITY ||
|
||||||
!(expression.symbol.owner.parentAsClass.defaultType.isFunctionOrKFunction() ||
|
!(expression.symbol.owner.parentAsClass.defaultType.isFunctionOrKFunction() ||
|
||||||
expression.symbol.owner.parentAsClass.defaultType.isSuspendFunctionOrKFunction()) ||
|
expression.symbol.owner.parentAsClass.defaultType.isSuspendFunctionOrKFunction()) ||
|
||||||
expression.symbol.owner.name.asString() != "invoke"
|
expression.symbol.owner.name.asString() != "invoke"
|
||||||
@@ -69,7 +69,7 @@ private class FunctionNVarargBridgeLowering(val context: JvmBackendContext) :
|
|||||||
|
|
||||||
override fun visitClassNew(declaration: IrClass): IrStatement {
|
override fun visitClassNew(declaration: IrClass): IrStatement {
|
||||||
val bigArityFunctionSuperTypes = declaration.superTypes.filterIsInstance<IrSimpleType>().filter {
|
val bigArityFunctionSuperTypes = declaration.superTypes.filterIsInstance<IrSimpleType>().filter {
|
||||||
it.isFunctionType && it.arguments.size > FunctionInvokeDescriptor.BIG_ARITY
|
it.isFunctionType && it.arguments.size > BuiltInFunctionArity.BIG_ARITY
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bigArityFunctionSuperTypes.isEmpty())
|
if (bigArityFunctionSuperTypes.isEmpty())
|
||||||
|
|||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.builtins.functions
|
||||||
|
|
||||||
|
object BuiltInFunctionArity {
|
||||||
|
const val BIG_ARITY = 23
|
||||||
|
}
|
||||||
@@ -10,8 +10,8 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames.FqNames
|
import org.jetbrains.kotlin.builtins.StandardNames.FqNames
|
||||||
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap
|
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap
|
||||||
|
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.name.*
|
import org.jetbrains.kotlin.name.*
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
@@ -98,11 +98,11 @@ object JavaToKotlinClassMap : PlatformToKotlinClassMap {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i in 0 until FunctionInvokeDescriptor.BIG_ARITY) {
|
for (i in 0 until BuiltInFunctionArity.BIG_ARITY) {
|
||||||
add(ClassId.topLevel(FqName("kotlin.jvm.functions.Function$i")), StandardNames.getFunctionClassId(i))
|
add(ClassId.topLevel(FqName("kotlin.jvm.functions.Function$i")), StandardNames.getFunctionClassId(i))
|
||||||
addKotlinToJava(FqName(NUMBERED_K_FUNCTION_PREFIX + i), K_FUNCTION_CLASS_ID)
|
addKotlinToJava(FqName(NUMBERED_K_FUNCTION_PREFIX + i), K_FUNCTION_CLASS_ID)
|
||||||
}
|
}
|
||||||
for (i in 0 until FunctionInvokeDescriptor.BIG_ARITY - 1) {
|
for (i in 0 until BuiltInFunctionArity.BIG_ARITY - 1) {
|
||||||
val kSuspendFunction = FunctionClassKind.KSuspendFunction
|
val kSuspendFunction = FunctionClassKind.KSuspendFunction
|
||||||
val kSuspendFun = kSuspendFunction.packageFqName.toString() + "." + kSuspendFunction.classNamePrefix
|
val kSuspendFun = kSuspendFunction.packageFqName.toString() + "." + kSuspendFunction.classNamePrefix
|
||||||
addKotlinToJava(FqName(kSuspendFun + i), K_FUNCTION_CLASS_ID)
|
addKotlinToJava(FqName(kSuspendFun + i), K_FUNCTION_CLASS_ID)
|
||||||
@@ -166,7 +166,7 @@ object JavaToKotlinClassMap : PlatformToKotlinClassMap {
|
|||||||
val arityString = kotlinFqName.asString().substringAfter(prefix, "")
|
val arityString = kotlinFqName.asString().substringAfter(prefix, "")
|
||||||
if (arityString.isNotEmpty() && !arityString.startsWith('0')) {
|
if (arityString.isNotEmpty() && !arityString.startsWith('0')) {
|
||||||
val arity = arityString.toIntOrNull()
|
val arity = arityString.toIntOrNull()
|
||||||
return arity != null && arity >= FunctionInvokeDescriptor.BIG_ARITY
|
return arity != null && arity >= BuiltInFunctionArity.BIG_ARITY
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ class FunctionClassDescriptor(
|
|||||||
|
|
||||||
@get:JvmName("hasBigArity")
|
@get:JvmName("hasBigArity")
|
||||||
val hasBigArity: Boolean
|
val hasBigArity: Boolean
|
||||||
get() = arity >= FunctionInvokeDescriptor.BIG_ARITY
|
get() = arity >= BuiltInFunctionArity.BIG_ARITY
|
||||||
|
|
||||||
override fun getContainingDeclaration() = containingDeclaration
|
override fun getContainingDeclaration() = containingDeclaration
|
||||||
|
|
||||||
|
|||||||
+1
-4
@@ -56,7 +56,7 @@ class FunctionInvokeDescriptor private constructor(
|
|||||||
*/
|
*/
|
||||||
@get:JvmName("hasBigArity")
|
@get:JvmName("hasBigArity")
|
||||||
val hasBigArity: Boolean
|
val hasBigArity: Boolean
|
||||||
get() = valueParameters.size >= BIG_ARITY
|
get() = valueParameters.size >= BuiltInFunctionArity.BIG_ARITY
|
||||||
|
|
||||||
override fun doSubstitute(configuration: CopyConfiguration): FunctionDescriptor? {
|
override fun doSubstitute(configuration: CopyConfiguration): FunctionDescriptor? {
|
||||||
val substituted = super.doSubstitute(configuration) as FunctionInvokeDescriptor? ?: return null
|
val substituted = super.doSubstitute(configuration) as FunctionInvokeDescriptor? ?: return null
|
||||||
@@ -108,9 +108,6 @@ class FunctionInvokeDescriptor private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object Factory {
|
companion object Factory {
|
||||||
/** @see hasBigArity */
|
|
||||||
const val BIG_ARITY = 23
|
|
||||||
|
|
||||||
fun create(functionClass: FunctionClassDescriptor, isSuspend: Boolean): FunctionInvokeDescriptor {
|
fun create(functionClass: FunctionClassDescriptor, isSuspend: Boolean): FunctionInvokeDescriptor {
|
||||||
val typeParameters = functionClass.declaredTypeParameters
|
val typeParameters = functionClass.declaredTypeParameters
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user