IR: use IrFactory in misc utils
This commit is contained in:
@@ -20,8 +20,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildReceiverParameter
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
@@ -154,7 +152,7 @@ fun IrValueParameter.copyTo(
|
||||
}
|
||||
}
|
||||
}
|
||||
return IrValueParameterImpl(
|
||||
return factory.createValueParameter(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
name, index, type, varargElementType, isCrossinline, isNoinline
|
||||
).also {
|
||||
@@ -179,7 +177,7 @@ fun IrTypeParameter.copyToWithoutSuperTypes(
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
fun IrFunction.copyReceiverParametersFrom(from: IrFunction) {
|
||||
dispatchReceiverParameter = from.dispatchReceiverParameter?.run {
|
||||
IrValueParameterImpl(
|
||||
factory.createValueParameter(
|
||||
startOffset, endOffset, origin, IrValueParameterSymbolImpl(descriptor), descriptor.name,
|
||||
descriptor.indexOrMinusOne, type, varargElementType, descriptor.isCrossinline,
|
||||
descriptor.isNoinline
|
||||
@@ -427,7 +425,7 @@ fun IrClass.createParameterDeclarations() {
|
||||
fun IrFunction.createDispatchReceiverParameter(origin: IrDeclarationOrigin? = null) {
|
||||
assert(dispatchReceiverParameter == null)
|
||||
|
||||
dispatchReceiverParameter = IrValueParameterImpl(
|
||||
dispatchReceiverParameter = factory.createValueParameter(
|
||||
startOffset, endOffset,
|
||||
origin ?: parentAsClass.origin,
|
||||
IrValueParameterSymbolImpl(parentAsClass.thisReceiver!!.descriptor),
|
||||
@@ -512,7 +510,7 @@ fun IrClass.addFakeOverridesViaIncorrectHeuristic(implementedMembers: List<IrSim
|
||||
}
|
||||
|
||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||
fun createStaticFunctionWithReceivers(
|
||||
fun IrFactory.createStaticFunctionWithReceivers(
|
||||
irParent: IrDeclarationParent,
|
||||
name: Name,
|
||||
oldFunction: IrFunction,
|
||||
@@ -527,7 +525,7 @@ fun createStaticFunctionWithReceivers(
|
||||
val descriptor = (oldFunction.descriptor as? DescriptorWithContainerSource)?.let {
|
||||
WrappedFunctionDescriptorWithContainerSource(it.containerSource)
|
||||
} ?: WrappedSimpleFunctionDescriptor(Annotations.EMPTY, oldFunction.descriptor.source)
|
||||
return IrFunctionImpl(
|
||||
return createFunction(
|
||||
oldFunction.startOffset, oldFunction.endOffset,
|
||||
origin,
|
||||
IrSimpleFunctionSymbolImpl(descriptor),
|
||||
|
||||
+3
-2
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
@@ -258,5 +257,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
||||
}
|
||||
|
||||
private fun createStaticBodilessMethod(function: IrFunction): IrSimpleFunction =
|
||||
createStaticFunctionWithReceivers(function.parent, function.name.toInlineClassImplementationName(), function)
|
||||
context.irFactory.createStaticFunctionWithReceivers(
|
||||
function.parent, function.name.toInlineClassImplementationName(), function
|
||||
)
|
||||
}
|
||||
|
||||
+1
-1
@@ -138,7 +138,7 @@ class JvmCachedDeclarations(
|
||||
val defaultImpls = getDefaultImplsClass(interfaceFun.parentAsClass)
|
||||
|
||||
val name = Name.identifier(methodSignatureMapper.mapFunctionName(interfaceFun))
|
||||
createStaticFunctionWithReceivers(
|
||||
context.irFactory.createStaticFunctionWithReceivers(
|
||||
defaultImpls, name, interfaceFun,
|
||||
dispatchReceiverType = parent.defaultType,
|
||||
// If `interfaceFun` is not a real implementation, then we're generating stubs in a descendant
|
||||
|
||||
+1
-1
@@ -533,7 +533,7 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
|
||||
|
||||
private fun createStaticSuspendImpl(irFunction: IrSimpleFunction): IrSimpleFunction {
|
||||
// Create static suspend impl method.
|
||||
val static = createStaticFunctionWithReceivers(
|
||||
val static = context.irFactory.createStaticFunctionWithReceivers(
|
||||
irFunction.parent,
|
||||
irFunction.name.toSuspendImplementationName(),
|
||||
irFunction,
|
||||
|
||||
+1
-2
@@ -108,6 +108,5 @@ private class StaticDefaultCallLowering(
|
||||
|
||||
private fun JvmBackendContext.getStaticFunctionWithReceivers(function: IrFunction) =
|
||||
staticDefaultStubs.getOrPut(function.symbol) {
|
||||
createStaticFunctionWithReceivers(function.parent, function.name, function)
|
||||
irFactory.createStaticFunctionWithReceivers(function.parent, function.name, function)
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@ import org.jetbrains.kotlin.ir.interpreter.state.Primitive
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.isSubtypeOf
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
|
||||
import org.jetbrains.kotlin.ir.expressions.IrWhen
|
||||
|
||||
@@ -85,7 +85,7 @@ class ClassGenerator(
|
||||
val modality = getEffectiveModality(ktClassOrObject, classDescriptor)
|
||||
|
||||
return context.symbolTable.declareClass(classDescriptor) {
|
||||
createIrClassFromDescriptor(
|
||||
context.irFactory.createIrClassFromDescriptor(
|
||||
startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, classDescriptor,
|
||||
context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), visibility, modality
|
||||
).apply {
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
||||
}
|
||||
|
||||
fun generateClass(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, symbol: IrClassSymbol): IrClass {
|
||||
val irClass = createIrClassFromDescriptor(startOffset, endOffset, origin, symbol, descriptor)
|
||||
val irClass = irFactory.createIrClassFromDescriptor(startOffset, endOffset, origin, symbol, descriptor)
|
||||
|
||||
symbolTable.withScope(irClass) {
|
||||
irClass.metadata = MetadataSource.Class(descriptor)
|
||||
|
||||
@@ -16,9 +16,6 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrTypeParameterImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl
|
||||
@@ -45,6 +42,7 @@ class IrBuiltIns(
|
||||
val languageVersionSettings = typeTranslator.languageVersionSettings
|
||||
|
||||
lateinit var functionFactory: IrAbstractFunctionFactory
|
||||
private val irFactory = symbolTable.irFactory
|
||||
|
||||
private val builtInsModule = builtIns.builtInsModule
|
||||
|
||||
@@ -68,7 +66,7 @@ class IrBuiltIns(
|
||||
}
|
||||
|
||||
val symbol = symbolTable.declareSimpleFunctionIfNotExists(operatorDescriptor) {
|
||||
val operator = IrFunctionImpl(
|
||||
val operator = irFactory.createFunction(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, it, Name.identifier(name), Visibilities.PUBLIC, Modality.FINAL,
|
||||
returnType, isInline = false, isExternal = false, isTailrec = false, isSuspend = false,
|
||||
isOperator = false, isInfix = false, isExpect = false, isFakeOverride = false
|
||||
@@ -79,7 +77,7 @@ class IrBuiltIns(
|
||||
operator.valueParameters = valueParameterTypes.withIndex().map { (i, valueParameterType) ->
|
||||
val valueParameterDescriptor = operatorDescriptor.valueParameters[i]
|
||||
val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor)
|
||||
IrValueParameterImpl(
|
||||
irFactory.createValueParameter(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg$i"), i,
|
||||
valueParameterType, null, false, false
|
||||
).apply {
|
||||
@@ -133,7 +131,7 @@ class IrBuiltIns(
|
||||
}
|
||||
|
||||
val typeParameterSymbol = IrTypeParameterSymbolImpl(typeParameterDescriptor)
|
||||
val typeParameter = IrTypeParameterImpl(
|
||||
val typeParameter = irFactory.createTypeParameter(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, typeParameterSymbol, Name.identifier("T0"), 0, true, Variance.INVARIANT
|
||||
).apply {
|
||||
superTypes += anyType
|
||||
@@ -154,7 +152,7 @@ class IrBuiltIns(
|
||||
}
|
||||
|
||||
return symbolTable.declareSimpleFunctionIfNotExists(operatorDescriptor) {
|
||||
val operator = IrFunctionImpl(
|
||||
val operator = irFactory.createFunction(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, it, name, Visibilities.PUBLIC, Modality.FINAL, returnIrType,
|
||||
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = false, isInfix = false,
|
||||
isExpect = false, isFakeOverride = false
|
||||
@@ -163,7 +161,7 @@ class IrBuiltIns(
|
||||
packageFragment.declarations += operator
|
||||
|
||||
val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor)
|
||||
val valueParameter = IrValueParameterImpl(
|
||||
val valueParameter = irFactory.createValueParameter(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg0"), 0,
|
||||
valueIrType, null, isCrossinline = false, isNoinline = false
|
||||
)
|
||||
|
||||
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
@@ -87,6 +86,8 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
private val suspendFunctionNMap = mutableMapOf<Int, IrClass>()
|
||||
private val kSuspendFunctionNMap = mutableMapOf<Int, IrClass>()
|
||||
|
||||
private val irFactory: IrFactory get() = symbolTable.irFactory
|
||||
|
||||
override fun functionClassDescriptor(arity: Int): FunctionClassDescriptor =
|
||||
irBuiltIns.builtIns.getFunction(arity) as FunctionClassDescriptor
|
||||
|
||||
@@ -205,7 +206,9 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
val pName = Name.identifier("P$i")
|
||||
|
||||
val pSymbol = descriptorFactory.typeParameterDescriptor(index) {
|
||||
IrTypeParameterImpl(offset, offset, classOrigin, it, pName, index++, false, Variance.IN_VARIANCE)
|
||||
irFactory.createTypeParameter(
|
||||
offset, offset, classOrigin, it, pName, index++, false, Variance.IN_VARIANCE
|
||||
)
|
||||
}
|
||||
val pDeclaration = pSymbol.owner
|
||||
|
||||
@@ -215,7 +218,9 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
}
|
||||
|
||||
val rSymbol = descriptorFactory.typeParameterDescriptor(index) {
|
||||
IrTypeParameterImpl(offset, offset, classOrigin, it, Name.identifier("R"), index, false, Variance.OUT_VARIANCE)
|
||||
irFactory.createTypeParameter(
|
||||
offset, offset, classOrigin, it, Name.identifier("R"), index, false, Variance.OUT_VARIANCE
|
||||
)
|
||||
}
|
||||
val rDeclaration = rSymbol.owner
|
||||
|
||||
@@ -259,7 +264,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
}
|
||||
buildSimpleType()
|
||||
}
|
||||
val vDeclaration = IrValueParameterImpl(
|
||||
val vDeclaration = irFactory.createValueParameter(
|
||||
offset, offset, classOrigin, vSymbol, Name.special("<this>"), -1, type, null,
|
||||
isCrossinline = false,
|
||||
isNoinline = false
|
||||
@@ -296,7 +301,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
buildSimpleType()
|
||||
}
|
||||
|
||||
IrFunctionImpl(
|
||||
irFactory.createFunction(
|
||||
offset, offset, memberOrigin, it, Name.identifier("invoke"), Visibilities.PUBLIC, Modality.ABSTRACT,
|
||||
returnType,
|
||||
isInline = false,
|
||||
@@ -323,7 +328,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
classifier = vTypeParam.symbol
|
||||
buildSimpleType()
|
||||
}
|
||||
val vDeclaration = IrValueParameterImpl(
|
||||
val vDeclaration = irFactory.createValueParameter(
|
||||
offset, offset, memberOrigin, vSymbol, Name.identifier("p$i"), i - 1, vType, null,
|
||||
isCrossinline = false,
|
||||
isNoinline = false
|
||||
@@ -356,7 +361,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
}
|
||||
|
||||
private fun IrFunction.createValueParameter(descriptor: ParameterDescriptor): IrValueParameter = with(descriptor) {
|
||||
IrValueParameterImpl(
|
||||
irFactory.createValueParameter(
|
||||
offset, offset, memberOrigin, IrValueParameterSymbolImpl(this), name, indexOrMinusOne, toIrType(type),
|
||||
(this as? ValueParameterDescriptor)?.varargElementType?.let(::toIrType), isCrossinline, isNoinline
|
||||
).also {
|
||||
@@ -373,7 +378,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
val returnType = descriptor.returnType?.let { toIrType(it) } ?: error("No return type for $descriptor")
|
||||
val newFunction = symbolTable.declareSimpleFunction(descriptor) {
|
||||
descriptor.run {
|
||||
IrFunctionImpl(
|
||||
irFactory.createFunction(
|
||||
offset, offset, memberOrigin, it, name, visibility, modality, returnType,
|
||||
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, true
|
||||
)
|
||||
@@ -392,7 +397,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
|
||||
fun createFakeOverrideProperty(descriptor: PropertyDescriptor): IrProperty {
|
||||
return symbolTable.declareProperty(offset, offset, memberOrigin, descriptor) {
|
||||
IrPropertyImpl(
|
||||
irFactory.createProperty(
|
||||
offset, offset, memberOrigin, it,
|
||||
name = descriptor.name,
|
||||
visibility = descriptor.visibility,
|
||||
@@ -434,7 +439,7 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
): IrClass {
|
||||
val name = functionClassName(isK, isSuspend, n)
|
||||
if (symbol.isBound) return symbol.owner
|
||||
val klass = IrClassImpl(
|
||||
val klass = irFactory.createClass(
|
||||
offset, offset, classOrigin, symbol, Name.identifier(name), ClassKind.INTERFACE, Visibilities.PUBLIC, Modality.ABSTRACT
|
||||
)
|
||||
|
||||
@@ -460,4 +465,4 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
|
||||
return klass
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.*
|
||||
import org.jetbrains.kotlin.ir.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
|
||||
@@ -250,7 +249,7 @@ class DeclarationStubGenerator(
|
||||
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
||||
|
||||
internal fun generateValueParameterStub(descriptor: ValueParameterDescriptor): IrValueParameter = with(descriptor) {
|
||||
IrValueParameterImpl(
|
||||
symbolTable.irFactory.createValueParameter(
|
||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, computeOrigin(this), IrValueParameterSymbolImpl(this), name, index, type.toIrType(),
|
||||
varargElementType?.toIrType(), isCrossinline, isNoinline
|
||||
).also { irValueParameter ->
|
||||
|
||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.util
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
@@ -26,7 +26,7 @@ val ParameterDescriptor.isCrossinline: Boolean
|
||||
val ParameterDescriptor.isNoinline: Boolean
|
||||
get() = this is ValueParameterDescriptor && isNoinline
|
||||
|
||||
fun createIrClassFromDescriptor(
|
||||
fun IrFactory.createIrClassFromDescriptor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
@@ -35,7 +35,7 @@ fun createIrClassFromDescriptor(
|
||||
name: Name = descriptor.name,
|
||||
visibility: Visibility = descriptor.visibility,
|
||||
modality: Modality = descriptor.modality
|
||||
): IrClass = IrClassImpl(
|
||||
): IrClass = createClass(
|
||||
startOffset, endOffset, origin, symbol, name, descriptor.kind, visibility, modality,
|
||||
descriptor.isCompanionObject, descriptor.isInner, descriptor.isData, descriptor.isEffectivelyExternal(),
|
||||
descriptor.isInline, descriptor.isExpect, descriptor.isFun, descriptor.source
|
||||
|
||||
Reference in New Issue
Block a user