[IR] Reorder parameters in IrFactory#createFunction

This is to prepare for IrFactory auto-generation (KT-59308).
This commit is contained in:
Sergej Jaskiewicz
2023-06-13 19:54:28 +02:00
committed by teamcity
parent 650b00e1b2
commit 7b77ec9930
23 changed files with 380 additions and 251 deletions
@@ -172,12 +172,24 @@ inline fun IrProperty.addBackingField(builder: IrFieldBuilder.() -> Unit = {}):
@PublishedApi
internal fun IrFactory.buildFunction(builder: IrFunctionBuilder): IrSimpleFunction = with(builder) {
createFunction(
startOffset, endOffset, origin,
IrSimpleFunctionSymbolImpl(),
name, visibility, modality, returnType,
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride,
containerSource,
createSimpleFunction(
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name,
visibility = visibility,
isInline = isInline,
isExpect = isExpect,
returnType = returnType,
modality = modality,
symbol = IrSimpleFunctionSymbolImpl(),
isTailrec = isTailrec,
isSuspend = isSuspend,
isOperator = isOperator,
isInfix = isInfix,
isExternal = isExternal,
containerSource = containerSource,
isFakeOverride = isFakeOverride,
)
}
@@ -88,24 +88,24 @@ interface IrFactory {
isExternal: Boolean,
): IrField
fun createFunction(
fun createSimpleFunction(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrSimpleFunctionSymbol,
name: Name,
visibility: DescriptorVisibility,
modality: Modality,
returnType: IrType,
isInline: Boolean,
isExternal: Boolean,
isExpect: Boolean,
returnType: IrType,
modality: Modality,
symbol: IrSimpleFunctionSymbol,
isTailrec: Boolean,
isSuspend: Boolean,
isOperator: Boolean,
isInfix: Boolean,
isExpect: Boolean,
isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
isExternal: Boolean,
containerSource: DeserializedContainerSource? = null,
isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
): IrSimpleFunction
fun createFunctionWithLateBinding(
@@ -107,24 +107,24 @@ abstract class AbstractIrFactoryImpl : IrFactory {
): IrField =
IrFieldImpl(startOffset, endOffset, origin, symbol, name, type, visibility, isFinal, isExternal, isStatic, factory = this)
override fun createFunction(
override fun createSimpleFunction(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrSimpleFunctionSymbol,
name: Name,
visibility: DescriptorVisibility,
modality: Modality,
returnType: IrType,
isInline: Boolean,
isExternal: Boolean,
isExpect: Boolean,
returnType: IrType,
modality: Modality,
symbol: IrSimpleFunctionSymbol,
isTailrec: Boolean,
isSuspend: Boolean,
isOperator: Boolean,
isInfix: Boolean,
isExpect: Boolean,
isFakeOverride: Boolean,
isExternal: Boolean,
containerSource: DeserializedContainerSource?,
isFakeOverride: Boolean,
): IrSimpleFunction =
IrFunctionImpl(
startOffset, endOffset, origin, symbol, name, visibility, modality, returnType,
@@ -160,43 +160,43 @@ class IrFactoryImplForJsIC(override val stageController: StageController) : Abst
).register()
}
override fun createFunction(
override fun createSimpleFunction(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrSimpleFunctionSymbol,
name: Name,
visibility: DescriptorVisibility,
modality: Modality,
returnType: IrType,
isInline: Boolean,
isExternal: Boolean,
isExpect: Boolean,
returnType: IrType,
modality: Modality,
symbol: IrSimpleFunctionSymbol,
isTailrec: Boolean,
isSuspend: Boolean,
isOperator: Boolean,
isInfix: Boolean,
isExpect: Boolean,
isFakeOverride: Boolean,
containerSource: DeserializedContainerSource?
isExternal: Boolean,
containerSource: DeserializedContainerSource?,
isFakeOverride: Boolean
): IrSimpleFunction {
return super.createFunction(
return super.createSimpleFunction(
startOffset,
endOffset,
origin,
symbol,
name,
visibility,
modality,
returnType,
isInline,
isExternal,
isExpect,
returnType,
modality,
symbol,
isTailrec,
isSuspend,
isOperator,
isInfix,
isExpect,
isFakeOverride,
isExternal,
containerSource,
isFakeOverride,
).register()
}
@@ -117,30 +117,30 @@ class LazyIrFactory(
else
delegate.createField(startOffset, endOffset, origin, name, visibility, symbol, type, isFinal, isStatic, isExternal)
override fun createFunction(
override fun createSimpleFunction(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrSimpleFunctionSymbol,
name: Name,
visibility: DescriptorVisibility,
modality: Modality,
returnType: IrType,
isInline: Boolean,
isExternal: Boolean,
isExpect: Boolean,
returnType: IrType,
modality: Modality,
symbol: IrSimpleFunctionSymbol,
isTailrec: Boolean,
isSuspend: Boolean,
isOperator: Boolean,
isInfix: Boolean,
isExpect: Boolean,
isFakeOverride: Boolean,
containerSource: DeserializedContainerSource?
isExternal: Boolean,
containerSource: DeserializedContainerSource?,
isFakeOverride: Boolean
): IrSimpleFunction = if (symbol.isBound)
symbol.owner
else
delegate.createFunction(
startOffset, endOffset, origin, symbol, name, visibility, modality, returnType,
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride, containerSource
delegate.createSimpleFunction(
startOffset, endOffset, origin, name, visibility, isInline, isExpect, returnType,
modality, symbol, isTailrec, isSuspend, isOperator, isInfix, isExternal, containerSource, isFakeOverride
)
override fun createProperty(
@@ -171,23 +171,24 @@ open class DeepCopyIrTreeWithSymbols(
}.copyAttributes(declaration)
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
declaration.factory.createFunction(
declaration.startOffset, declaration.endOffset,
mapDeclarationOrigin(declaration.origin),
symbolRemapper.getDeclaredFunction(declaration.symbol),
symbolRenamer.getFunctionName(declaration.symbol),
declaration.visibility,
declaration.modality,
declaration.returnType,
declaration.factory.createSimpleFunction(
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getFunctionName(declaration.symbol),
visibility = declaration.visibility,
isInline = declaration.isInline,
isExternal = declaration.isExternal,
isExpect = declaration.isExpect,
returnType = declaration.returnType,
modality = declaration.modality,
symbol = symbolRemapper.getDeclaredFunction(declaration.symbol),
isTailrec = declaration.isTailrec,
isSuspend = declaration.isSuspend,
isOperator = declaration.isOperator,
isInfix = declaration.isInfix,
isExpect = declaration.isExpect,
isFakeOverride = declaration.isFakeOverride,
isExternal = declaration.isExternal,
containerSource = declaration.containerSource,
isFakeOverride = declaration.isFakeOverride,
).apply {
overriddenSymbols = declaration.overriddenSymbols.memoryOptimizedMap {
symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol
@@ -1188,23 +1188,24 @@ fun IrFactory.createStaticFunctionWithReceivers(
typeParametersFromContext: List<IrTypeParameter> = listOf(),
remapMultiFieldValueClassStructure: (IrFunction, IrFunction, Map<IrValueParameter, IrValueParameter>?) -> Unit
): IrSimpleFunction {
return createFunction(
oldFunction.startOffset, oldFunction.endOffset,
origin,
IrSimpleFunctionSymbolImpl(),
name,
visibility,
modality,
oldFunction.returnType,
return createSimpleFunction(
startOffset = oldFunction.startOffset,
endOffset = oldFunction.endOffset,
origin = origin,
name = name,
visibility = visibility,
isInline = oldFunction.isInline,
isExternal = false,
isExpect = oldFunction.isExpect,
returnType = oldFunction.returnType,
modality = modality,
symbol = IrSimpleFunctionSymbolImpl(),
isTailrec = false,
isSuspend = oldFunction.isSuspend,
isExpect = oldFunction.isExpect,
isFakeOverride = isFakeOverride,
isOperator = oldFunction is IrSimpleFunction && oldFunction.isOperator,
isInfix = oldFunction is IrSimpleFunction && oldFunction.isInfix,
isExternal = false,
containerSource = oldFunction.containerSource,
isFakeOverride = isFakeOverride,
).apply {
parent = irParent
@@ -24,18 +24,22 @@ fun SymbolTable.declareSimpleFunctionWithOverrides(
) =
declareSimpleFunction(descriptor) {
with(descriptor) {
irFactory.createFunction(
startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(this),
visibility,
modality,
IrUninitializedType,
isInline,
isEffectivelyExternal(),
isTailrec,
isSuspend,
isOperator,
isInfix,
isExpect,
irFactory.createSimpleFunction(
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = nameProvider.nameForDeclaration(this),
visibility = visibility,
isInline = isInline,
isExpect = isExpect,
returnType = IrUninitializedType,
modality = modality,
symbol = it,
isTailrec = isTailrec,
isSuspend = isSuspend,
isOperator = isOperator,
isInfix = isInfix,
isExternal = isEffectivelyExternal(),
isFakeOverride = descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
).also { declaration ->
declaration.metadata = DescriptorMetadataSource.Function(this)