Remove descriptors from CallableReferenceLowering
This commit is contained in:
@@ -16,9 +16,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.common.ir
|
package org.jetbrains.kotlin.backend.common.ir
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.backend.common.BackendContext
|
||||||
import org.jetbrains.kotlin.backend.common.DumpIrTreeWithDescriptorsVisitor
|
import org.jetbrains.kotlin.backend.common.DumpIrTreeWithDescriptorsVisitor
|
||||||
import org.jetbrains.kotlin.backend.common.deepCopyWithVariables
|
import org.jetbrains.kotlin.backend.common.deepCopyWithVariables
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassConstructorDescriptor
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassConstructorDescriptor
|
||||||
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedReceiverParameterDescriptor
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.WrappedTypeParameterDescriptor
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedTypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDescriptor
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.WrappedVariableDescriptor
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedVariableDescriptor
|
||||||
@@ -41,10 +43,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
|||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrTypeProjection
|
|
||||||
import org.jetbrains.kotlin.ir.types.defaultType
|
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
||||||
import org.jetbrains.kotlin.ir.util.DumpIrTreeVisitor
|
import org.jetbrains.kotlin.ir.util.DumpIrTreeVisitor
|
||||||
@@ -354,7 +353,7 @@ fun Scope.createTemporaryVariableWithWrappedDescriptor(
|
|||||||
nameHint: String? = null,
|
nameHint: String? = null,
|
||||||
isMutable: Boolean = false,
|
isMutable: Boolean = false,
|
||||||
origin: IrDeclarationOrigin = IrDeclarationOrigin.IR_TEMPORARY_VARIABLE): IrVariable {
|
origin: IrDeclarationOrigin = IrDeclarationOrigin.IR_TEMPORARY_VARIABLE): IrVariable {
|
||||||
|
|
||||||
val descriptor = WrappedVariableDescriptor()
|
val descriptor = WrappedVariableDescriptor()
|
||||||
return createTemporaryVariableWithGivenDescriptor(
|
return createTemporaryVariableWithGivenDescriptor(
|
||||||
irExpression, nameHint, isMutable, origin, descriptor
|
irExpression, nameHint, isMutable, origin, descriptor
|
||||||
@@ -362,3 +361,24 @@ fun Scope.createTemporaryVariableWithWrappedDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val IrFunction.isOverridable: Boolean get() = this is IrSimpleFunction && this.isOverridable
|
val IrFunction.isOverridable: Boolean get() = this is IrSimpleFunction && this.isOverridable
|
||||||
|
|
||||||
|
fun IrClass.createImplicitParameterDeclarationWithWrappedDescriptor() {
|
||||||
|
val thisReceiverDescriptor = WrappedReceiverParameterDescriptor()
|
||||||
|
thisReceiver = IrValueParameterImpl(
|
||||||
|
startOffset, endOffset,
|
||||||
|
IrDeclarationOrigin.INSTANCE_RECEIVER,
|
||||||
|
IrValueParameterSymbolImpl(thisReceiverDescriptor),
|
||||||
|
Name.identifier("<this>"),
|
||||||
|
index = -1,
|
||||||
|
type = this.symbol.typeWith(this.typeParameters.map { it.defaultType }),
|
||||||
|
varargElementType = null,
|
||||||
|
isCrossinline = false,
|
||||||
|
isNoinline = false
|
||||||
|
).also { valueParameter ->
|
||||||
|
thisReceiverDescriptor.bind(valueParameter)
|
||||||
|
valueParameter.parent = this
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(typeParameters.isEmpty())
|
||||||
|
assert(descriptor.declaredTypeParameters.isEmpty())
|
||||||
|
}
|
||||||
|
|||||||
+6
-5
@@ -31,12 +31,8 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
|||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||||
import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat
|
import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.*
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.NameUtils
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
interface LocalNameProvider {
|
interface LocalNameProvider {
|
||||||
@@ -769,6 +765,11 @@ class LocalDeclarationsLowering(
|
|||||||
val localClassContext = LocalClassContext(declaration)
|
val localClassContext = LocalClassContext(declaration)
|
||||||
localClasses[declaration] = localClassContext
|
localClasses[declaration] = localClassContext
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty) {
|
||||||
|
// Getter and setter of local delegated properties are special generated functions and don't have closure.
|
||||||
|
declaration.delegate.initializer?.acceptVoid(this)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.utils.DFS
|
import org.jetbrains.kotlin.utils.DFS
|
||||||
|
|
||||||
val kotlinPackageFqn = FqName.fromSegments(listOf("kotlin"))
|
val kotlinPackageFqn = FqName.fromSegments(listOf("kotlin"))
|
||||||
val kotlinReflectionPackageFqn = kotlinPackageFqn.child(Name.identifier("reflection"))
|
val kotlinReflectionPackageFqn = kotlinPackageFqn.child(Name.identifier("reflect"))
|
||||||
val kotlinCoroutinesPackageFqn = kotlinPackageFqn.child(Name.identifier("coroutines"))
|
val kotlinCoroutinesPackageFqn = kotlinPackageFqn.child(Name.identifier("coroutines"))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,10 @@ class JvmBackendContext(
|
|||||||
return find(state.module.getPackage(fqName.parent()).memberScope, fqName.shortName())
|
return find(state.module.getPackage(fqName.parent()).memberScope, fqName.shortName())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getIrClass(fqName: FqName): IrClassSymbol {
|
||||||
|
return ir.symbols.externalSymbolTable.referenceClass(getClass(fqName))
|
||||||
|
}
|
||||||
|
|
||||||
override fun getInternalFunctions(name: String): List<FunctionDescriptor> {
|
override fun getInternalFunctions(name: String): List<FunctionDescriptor> {
|
||||||
return when (name) {
|
return when (name) {
|
||||||
"ThrowUninitializedPropertyAccessException" ->
|
"ThrowUninitializedPropertyAccessException" ->
|
||||||
@@ -151,6 +155,8 @@ class JvmBackendContext(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val lambdaClass = calc { symbolTable.referenceClass(context.getInternalClass("Lambda")) }
|
val lambdaClass = calc { symbolTable.referenceClass(context.getInternalClass("Lambda")) }
|
||||||
|
|
||||||
|
fun getKFunction(parameterCount: Int) = symbolTable.referenceClass(reflectionTypes.getKFunction(parameterCount))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import org.jetbrains.kotlin.backend.common.lower.*
|
|||||||
import org.jetbrains.kotlin.backend.common.makePhase
|
import org.jetbrains.kotlin.backend.common.makePhase
|
||||||
import org.jetbrains.kotlin.backend.common.runOnFilePostfix
|
import org.jetbrains.kotlin.backend.common.runOnFilePostfix
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.*
|
import org.jetbrains.kotlin.backend.jvm.lower.*
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.name.NameUtils
|
import org.jetbrains.kotlin.name.NameUtils
|
||||||
|
|
||||||
@@ -108,8 +108,8 @@ private val SharedVariablesPhase = makeJvmPhase(
|
|||||||
private val LocalDeclarationsPhase = makeJvmPhase(
|
private val LocalDeclarationsPhase = makeJvmPhase(
|
||||||
{ context, data ->
|
{ context, data ->
|
||||||
LocalDeclarationsLowering(context, object : LocalNameProvider {
|
LocalDeclarationsLowering(context, object : LocalNameProvider {
|
||||||
override fun localName(descriptor: DeclarationDescriptor): String =
|
override fun localName(declaration: IrDeclarationWithName): String =
|
||||||
NameUtils.sanitizeAsJavaIdentifier(super.localName(descriptor))
|
NameUtils.sanitizeAsJavaIdentifier(super.localName(declaration))
|
||||||
}, Visibilities.PUBLIC, true).lower(data)
|
}, Visibilities.PUBLIC, true).lower(data)
|
||||||
},
|
},
|
||||||
name = "JvmLocalDeclarations",
|
name = "JvmLocalDeclarations",
|
||||||
|
|||||||
+439
-602
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.backend.jvm.lower
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassDescriptor
|
import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassDescriptor
|
||||||
import org.jetbrains.kotlin.backend.common.makePhase
|
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
@@ -79,6 +79,7 @@ class FileClassLowering(val context: JvmBackendContext) : FileLoweringPass {
|
|||||||
superTypes.add(context.irBuiltIns.anyType)
|
superTypes.add(context.irBuiltIns.anyType)
|
||||||
parent = irFile
|
parent = irFile
|
||||||
declarations.addAll(fileClassMembers)
|
declarations.addAll(fileClassMembers)
|
||||||
|
createImplicitParameterDeclarationWithWrappedDescriptor()
|
||||||
// TODO: figure out why reparenting leads to failing tests.
|
// TODO: figure out why reparenting leads to failing tests.
|
||||||
// fileClassMembers.forEach { it.parent = this }
|
// fileClassMembers.forEach { it.parent = this }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ interface IrDeclarationOrigin {
|
|||||||
object DELEGATED_MEMBER : IrDeclarationOriginImpl("DELEGATED_MEMBER")
|
object DELEGATED_MEMBER : IrDeclarationOriginImpl("DELEGATED_MEMBER")
|
||||||
object ENUM_CLASS_SPECIAL_MEMBER : IrDeclarationOriginImpl("ENUM_CLASS_SPECIAL_MEMBER")
|
object ENUM_CLASS_SPECIAL_MEMBER : IrDeclarationOriginImpl("ENUM_CLASS_SPECIAL_MEMBER")
|
||||||
object FUNCTION_FOR_DEFAULT_PARAMETER : IrDeclarationOriginImpl("FUNCTION_FOR_DEFAULT_PARAMETER")
|
object FUNCTION_FOR_DEFAULT_PARAMETER : IrDeclarationOriginImpl("FUNCTION_FOR_DEFAULT_PARAMETER")
|
||||||
|
object FILE_CLASS : IrDeclarationOriginImpl("FILE_CLASS")
|
||||||
object GENERATED_DATA_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_DATA_CLASS_MEMBER")
|
object GENERATED_DATA_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_DATA_CLASS_MEMBER")
|
||||||
object GENERATED_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_INLINE_CLASS_MEMBER")
|
object GENERATED_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_INLINE_CLASS_MEMBER")
|
||||||
object LOCAL_FUNCTION_FOR_LAMBDA : IrDeclarationOriginImpl("LOCAL_FUNCTION_FOR_LAMBDA")
|
object LOCAL_FUNCTION_FOR_LAMBDA : IrDeclarationOriginImpl("LOCAL_FUNCTION_FOR_LAMBDA")
|
||||||
@@ -48,4 +49,4 @@ interface IrDeclarationOrigin {
|
|||||||
|
|
||||||
abstract class IrDeclarationOriginImpl(val name: String) : IrDeclarationOrigin {
|
abstract class IrDeclarationOriginImpl(val name: String) : IrDeclarationOrigin {
|
||||||
override fun toString(): String = name
|
override fun toString(): String = name
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
interface IrField : IrSymbolDeclaration<IrFieldSymbol>, IrOverridableDeclaration<IrFieldSymbol>, IrDeclarationWithVisibility, IrDeclarationParent {
|
interface IrField : IrSymbolDeclaration<IrFieldSymbol>, IrOverridableDeclaration<IrFieldSymbol>,
|
||||||
|
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent {
|
||||||
override val descriptor: PropertyDescriptor
|
override val descriptor: PropertyDescriptor
|
||||||
|
|
||||||
val type: IrType
|
val type: IrType
|
||||||
|
|||||||
@@ -33,8 +33,11 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
inline fun <reified T : IrElement> T.deepCopyWithSymbols(initialParent: IrDeclarationParent? = null): T {
|
inline fun <reified T : IrElement> T.deepCopyWithSymbols(
|
||||||
val symbolRemapper = DeepCopySymbolRemapper()
|
initialParent: IrDeclarationParent? = null,
|
||||||
|
descriptorRemapper: DescriptorsRemapper = DescriptorsRemapper.DEFAULT
|
||||||
|
): T {
|
||||||
|
val symbolRemapper = DeepCopySymbolRemapper(descriptorRemapper)
|
||||||
acceptVoid(symbolRemapper)
|
acceptVoid(symbolRemapper)
|
||||||
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
|
val typeRemapper = DeepCopyTypeRemapper(symbolRemapper)
|
||||||
return transform(DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper), null).patchDeclarationParents(initialParent) as T
|
return transform(DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper), null).patchDeclarationParents(initialParent) as T
|
||||||
|
|||||||
@@ -259,6 +259,9 @@ val IrClassSymbol.constructors: Sequence<IrConstructorSymbol>
|
|||||||
val IrClass.constructors: Sequence<IrConstructor>
|
val IrClass.constructors: Sequence<IrConstructor>
|
||||||
get() = this.declarations.asSequence().filterIsInstance<IrConstructor>()
|
get() = this.declarations.asSequence().filterIsInstance<IrConstructor>()
|
||||||
|
|
||||||
|
val IrDeclarationContainer.properties: Sequence<IrProperty>
|
||||||
|
get() = declarations.asSequence().filterIsInstance<IrProperty>()
|
||||||
|
|
||||||
val IrFunction.explicitParameters: List<IrValueParameter>
|
val IrFunction.explicitParameters: List<IrValueParameter>
|
||||||
get() = (listOfNotNull(dispatchReceiverParameter, extensionReceiverParameter) + valueParameters)
|
get() = (listOfNotNull(dispatchReceiverParameter, extensionReceiverParameter) + valueParameters)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user