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.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),
|
||||||
|
|||||||
+3
-2
@@ -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
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
|
|||||||
+1
-2
@@ -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 {
|
||||||
|
|||||||
+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 {
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user