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