From 898dd20a9e2230072dbb04de352ff07eb760c5b2 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 14 Jul 2020 14:36:13 +0200 Subject: [PATCH] IR: use IrFactory in misc utils --- .../kotlin/backend/common/ir/IrUtils.kt | 12 ++++----- .../lower/InlineClassDeclarationLowering.kt | 5 ++-- .../backend/jvm/JvmCachedDeclarations.kt | 2 +- .../jvm/lower/AddContinuationLowering.kt | 2 +- .../lower/StaticDefaultFunctionLowering.kt | 3 +-- .../jetbrains/kotlin/ir/interpreter/Label.kt | 2 -- .../psi2ir/generators/ClassGenerator.kt | 2 +- .../StandaloneDeclarationGenerator.kt | 2 +- .../kotlin/ir/descriptors/IrBuiltIns.kt | 14 +++++----- .../ir/descriptors/IrFunctionFactory.kt | 27 +++++++++++-------- .../ir/util/DeclarationStubGenerator.kt | 3 +-- .../kotlin/ir/util/DescriptorToIrUtil.kt | 6 ++--- 12 files changed, 39 insertions(+), 41 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 6d432f386d9..25009de743a 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -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 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 ) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt index 139de3e09fe..80c251a3fb8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrFunctionFactory.kt @@ -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() private val kSuspendFunctionNMap = mutableMapOf() + 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(""), -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 } -} \ No newline at end of file +} diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index c022b9be2b8..c89a18f3c10 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -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 -> diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt index ec09784f77e..5f8dea4ab33 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt @@ -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