IR: use IrFactory in misc utils

This commit is contained in:
Alexander Udalov
2020-07-14 14:36:13 +02:00
parent f359f36ed9
commit 898dd20a9e
12 changed files with 39 additions and 41 deletions
@@ -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),
@@ -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
)
}
@@ -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
@@ -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,
@@ -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 {
@@ -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