[IR] Reorder parameters in IrFactory#createValueParameter

This is to prepare for IrFactory auto-generation (KT-59308).
This commit is contained in:
Sergej Jaskiewicz
2023-06-14 14:32:58 +02:00
committed by Space Team
parent 2cc588d6d8
commit 9fcdc10019
23 changed files with 365 additions and 165 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.backend.js.utils.getJsNameOrKotlinName
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
@@ -55,17 +56,18 @@ class EscapedIdentifiersLowering(context: JsIrBackendContext) : BodyLoweringPass
private val IrFunction.dummyDispatchReceiverParameter
get() = context.irFactory.createValueParameter(
startOffset, endOffset,
origin,
IrValueParameterSymbolImpl(),
SpecialNames.THIS,
-1,
context.irBuiltIns.anyType,
null,
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = SpecialNames.THIS,
type = context.irBuiltIns.anyType,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
).also { it.parent = this }
override fun visitGetValue(expression: IrGetValue): IrExpression {
@@ -549,10 +549,18 @@ private class ScriptToClassTransformer(
private fun IrDeclarationParent.createThisReceiverParameter(origin: IrDeclarationOrigin, type: IrType): IrValueParameter =
context.symbolTable.irFactory.createValueParameter(
startOffset, endOffset, origin, IrValueParameterSymbolImpl(),
SpecialNames.THIS, UNDEFINED_PARAMETER_INDEX, type,
varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = SpecialNames.THIS,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).also {
it.parent = this
}
@@ -127,8 +127,18 @@ class IrBuiltInsOverDescriptors(
val valueParameterDescriptor = operatorDescriptor.valueParameters[i]
val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor)
irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg$i"), i,
valueParameterType, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = BUILTIN_OPERATOR,
name = Name.identifier("arg$i"),
type = valueParameterType,
isAssignable = false,
symbol = valueParameterSymbol,
index = i,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false
).apply {
parent = operator
}
@@ -232,8 +242,18 @@ class IrBuiltInsOverDescriptors(
val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor)
val valueParameter = irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg0"), 0,
valueIrType, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = BUILTIN_OPERATOR,
name = Name.identifier("arg0"),
type = valueIrType,
isAssignable = false,
symbol = valueParameterSymbol,
index = 0,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
valueParameter.parent = operator
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
@@ -279,12 +280,18 @@ class IrDescriptorBasedFunctionFactory(
private fun createThisReceiver(descriptorFactory: FunctionDescriptorFactory): IrValueParameter {
val descriptor = descriptorFactory.classReceiverParameterDescriptor()
return irFactory.createValueParameter(
offset, offset, classOrigin, IrValueParameterSymbolImpl(descriptor), SpecialNames.THIS, -1,
typeTranslator.translateType(descriptor.type), null,
startOffset = offset,
endOffset = offset,
origin = classOrigin,
name = SpecialNames.THIS,
type = typeTranslator.translateType(descriptor.type),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(descriptor),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
)
}
@@ -330,11 +337,18 @@ class IrDescriptorBasedFunctionFactory(
buildSimpleType()
}
val vDeclaration = irFactory.createValueParameter(
offset, offset, memberOrigin, vSymbol, Name.identifier("p$i"), i - 1, vType, null,
startOffset = offset,
endOffset = offset,
origin = memberOrigin,
name = Name.identifier("p$i"),
type = vType,
isAssignable = false,
symbol = vSymbol,
index = i - 1,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
)
vDeclaration.parent = fDeclaration
fDeclaration.valueParameters += vDeclaration
@@ -364,8 +378,18 @@ class IrDescriptorBasedFunctionFactory(
private fun IrFunction.createValueParameter(descriptor: ParameterDescriptor): IrValueParameter = with(descriptor) {
irFactory.createValueParameter(
offset, offset, memberOrigin, IrValueParameterSymbolImpl(this), name, indexOrMinusOne, toIrType(type),
(this as? ValueParameterDescriptor)?.varargElementType?.let(::toIrType), isCrossinline, isNoinline, false, false
startOffset = offset,
endOffset = offset,
origin = memberOrigin,
name = name,
type = toIrType(type),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(this),
index = indexOrMinusOne,
varargElementType = (this as? ValueParameterDescriptor)?.varargElementType?.let(::toIrType),
isCrossinline = isCrossinline,
isNoinline = isNoinline,
isHidden = false
).also {
it.parent = this@createValueParameter
}
@@ -449,9 +449,18 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
fun createValueParameter(name: String, index: Int, type: IrType): IrValueParameter =
context.irFactory.createValueParameter(
startOffset, endOffset, IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION, IrValueParameterSymbolImpl(),
Name.identifier(name), index, type, varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION,
name = Name.identifier(name),
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
irAdapterFun.extensionReceiverParameter = createValueParameter("callee", -1, funType.toIrType())
@@ -497,13 +497,18 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
private fun createAdapterParameter(startOffset: Int, endOffset: Int, name: Name, index: Int, type: KotlinType): IrValueParameter =
context.irFactory.createValueParameter(
startOffset, endOffset,
IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE,
IrValueParameterSymbolImpl(),
name,
index,
type.toIrType(),
varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE,
name = name,
type = type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
fun generateCallableReference(
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
@@ -62,12 +63,18 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
type
) { symbol ->
context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
origin, symbol, context.symbolTable.nameProvider.nameForDeclaration(descriptor),
if (index != -1) index else descriptor.indexOrMinusOne,
type, varargElementType,
descriptor.isCrossinline, descriptor.isNoinline,
isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = origin,
name = context.symbolTable.nameProvider.nameForDeclaration(descriptor),
type = type,
isAssignable = false,
symbol = symbol,
index = if (index != UNDEFINED_PARAMETER_INDEX) index else descriptor.indexOrMinusOne,
varargElementType = varargElementType,
isCrossinline = descriptor.isCrossinline,
isNoinline = descriptor.isNoinline,
isHidden = false,
)
}.also { it.parent = irScript }
}
@@ -92,12 +99,18 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
fun createValueParameter(valueParameterDescriptor: ValueParameterDescriptor): IrValueParameter {
return context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.SCRIPT_CALL_PARAMETER, IrValueParameterSymbolImpl(),
valueParameterDescriptor.name, parametersIndex++,
valueParameterDescriptor.type.toIrType(), valueParameterDescriptor.varargElementType?.toIrType(),
valueParameterDescriptor.isCrossinline, valueParameterDescriptor.isNoinline,
false, false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = IrDeclarationOrigin.SCRIPT_CALL_PARAMETER,
name = valueParameterDescriptor.name,
type = valueParameterDescriptor.type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = parametersIndex++,
varargElementType = valueParameterDescriptor.varargElementType?.toIrType(),
isCrossinline = valueParameterDescriptor.isCrossinline,
isNoinline = valueParameterDescriptor.isNoinline,
isHidden = false
).also { it.parent = irScript }
}
@@ -130,9 +143,18 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, parameter, type
) { symbol ->
context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, symbol, descriptor.name,
parametersIndex, type, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY,
name = descriptor.name,
type = type,
isAssignable = false,
symbol = symbol,
index = parametersIndex,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).also { it.parent = irScript }
}
parametersIndex++
@@ -291,10 +291,18 @@ fun <D> buildReceiverParameter(
): IrValueParameter
where D : IrDeclaration, D : IrDeclarationParent =
parent.factory.createValueParameter(
startOffset, endOffset, origin,
IrValueParameterSymbolImpl(),
SpecialNames.THIS, -1, type, null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = SpecialNames.THIS,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).also {
it.parent = parent
}
@@ -302,9 +310,18 @@ fun <D> buildReceiverParameter(
fun IrFactory.buildValueParameter(builder: IrValueParameterBuilder, parent: IrDeclarationParent): IrValueParameter =
with(builder) {
return createValueParameter(
startOffset, endOffset, origin,
IrValueParameterSymbolImpl(),
name, index, type, varargElementType, isCrossInline, isNoinline, isHidden, isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name,
type = type,
isAssignable = isAssignable,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = varargElementType,
isCrossinline = isCrossInline,
isNoinline = isNoinline,
isHidden = isHidden
).also {
it.parent = parent
}
@@ -194,15 +194,15 @@ interface IrFactory {
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrValueParameterSymbol,
name: Name,
index: Int,
type: IrType,
isAssignable: Boolean,
symbol: IrValueParameterSymbol,
index: Int,
varargElementType: IrType?,
isCrossinline: Boolean,
isNoinline: Boolean,
isHidden: Boolean,
isAssignable: Boolean
isHidden: Boolean
): IrValueParameter
// Bodies
@@ -236,15 +236,15 @@ abstract class AbstractIrFactoryImpl : IrFactory {
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrValueParameterSymbol,
name: Name,
index: Int,
type: IrType,
isAssignable: Boolean,
symbol: IrValueParameterSymbol,
index: Int,
varargElementType: IrType?,
isCrossinline: Boolean,
isNoinline: Boolean,
isHidden: Boolean,
isAssignable: Boolean,
): IrValueParameter =
IrValueParameterImpl(
startOffset, endOffset, origin, symbol, name, index, type, varargElementType,
@@ -368,29 +368,29 @@ class IrFactoryImplForJsIC(override val stageController: StageController) : Abst
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrValueParameterSymbol,
name: Name,
index: Int,
type: IrType,
isAssignable: Boolean,
symbol: IrValueParameterSymbol,
index: Int,
varargElementType: IrType?,
isCrossinline: Boolean,
isNoinline: Boolean,
isHidden: Boolean,
isAssignable: Boolean
isHidden: Boolean
): IrValueParameter {
return super.createValueParameter(
startOffset,
endOffset,
origin,
symbol,
name,
index,
type,
isAssignable,
symbol,
index,
varargElementType,
isCrossinline,
isNoinline,
isHidden,
isAssignable,
).register()
}
}
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
@@ -30,9 +31,18 @@ interface IrLazyDeclarationBase : IrDeclaration {
fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter =
factory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this),
name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = origin,
name = name,
type = type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(this),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
fun createLazyAnnotations(): ReadWriteProperty<Any?, List<IrConstructorCall>> = lazyVar(stubGenerator.lock) {
@@ -43,9 +43,18 @@ interface IrLazyFunctionBase : IrLazyDeclarationBase, IrTypeParametersContainer
val result = arrayListOf<IrValueParameter>()
descriptor.contextReceiverParameters.mapIndexedTo(result) { i, contextReceiverParameter ->
factory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(contextReceiverParameter),
Name.identifier("contextReceiverParameter$i"), i, contextReceiverParameter.type.toIrType(),
null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = origin,
name = Name.identifier("contextReceiverParameter$i"),
type = contextReceiverParameter.type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(contextReceiverParameter),
index = i,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).apply { parent = this@IrLazyFunctionBase }
}
descriptor.valueParameters.mapTo(result) {
@@ -91,17 +91,18 @@ class FakeOverrideCopier(
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
declaration.factory.createValueParameter(
declaration.startOffset, declaration.endOffset,
mapDeclarationOrigin(declaration.origin),
symbolRemapper.getDeclaredValueParameter(declaration.symbol),
symbolRenamer.getValueParameterName(declaration.symbol),
declaration.index,
declaration.type.remapType(),
declaration.varargElementType?.remapType(),
declaration.isCrossinline,
declaration.isNoinline,
declaration.isHidden,
declaration.isAssignable
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getValueParameterName(declaration.symbol),
type = declaration.type.remapType(),
isAssignable = declaration.isAssignable,
symbol = symbolRemapper.getDeclaredValueParameter(declaration.symbol),
index = declaration.index,
varargElementType = declaration.varargElementType?.remapType(),
isCrossinline = declaration.isCrossinline,
isNoinline = declaration.isNoinline,
isHidden = declaration.isHidden,
).apply {
transformAnnotations(declaration)
// Don't set the default value for fake overrides.
@@ -373,17 +373,18 @@ open class DeepCopyIrTreeWithSymbols(
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
declaration.factory.createValueParameter(
declaration.startOffset, declaration.endOffset,
mapDeclarationOrigin(declaration.origin),
symbolRemapper.getDeclaredValueParameter(declaration.symbol),
symbolRenamer.getValueParameterName(declaration.symbol),
declaration.index,
declaration.type.remapType(),
declaration.varargElementType?.remapType(),
declaration.isCrossinline,
declaration.isNoinline,
declaration.isHidden,
declaration.isAssignable
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getValueParameterName(declaration.symbol),
type = declaration.type.remapType(),
isAssignable = declaration.isAssignable,
symbol = symbolRemapper.getDeclaredValueParameter(declaration.symbol),
index = declaration.index,
varargElementType = declaration.varargElementType?.remapType(),
isCrossinline = declaration.isCrossinline,
isNoinline = declaration.isNoinline,
isHidden = declaration.isHidden,
).apply {
transformAnnotations(declaration)
defaultValue = declaration.defaultValue?.transform()
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.*
import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.builders.declarations.buildReceiverParameter
import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
import org.jetbrains.kotlin.ir.builders.declarations.*
import org.jetbrains.kotlin.ir.builders.irImplicitCast
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
@@ -799,9 +796,18 @@ fun IrValueParameter.copyTo(
}
}
return factory.createValueParameter(
startOffset, endOffset, origin, symbol,
name, index, type, varargElementType, isCrossinline = isCrossinline,
isNoinline = isNoinline, isHidden = false, isAssignable = isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name,
type = type,
isAssignable = isAssignable,
symbol = symbol,
index = index,
varargElementType = varargElementType,
isCrossinline = isCrossinline,
isNoinline = isNoinline,
isHidden = false,
).also {
it.parent = irFunction
it.defaultValue = defaultValueCopy
@@ -823,13 +829,18 @@ fun IrTypeParameter.copyToWithoutSuperTypes(
fun IrFunction.copyReceiverParametersFrom(from: IrFunction, substitutionMap: Map<IrTypeParameterSymbol, IrType>) {
dispatchReceiverParameter = from.dispatchReceiverParameter?.run {
factory.createValueParameter(
startOffset, endOffset, origin,
IrValueParameterSymbolImpl(),
name, index,
type.substitute(substitutionMap),
varargElementType?.substitute(substitutionMap),
isCrossinline, isNoinline,
isHidden, isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name,
type = type.substitute(substitutionMap),
isAssignable = isAssignable,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = varargElementType?.substitute(substitutionMap),
isCrossinline = isCrossinline,
isNoinline = isNoinline,
isHidden = isHidden,
).also { parameter ->
parameter.parent = this@copyReceiverParametersFrom
}
@@ -1098,17 +1109,18 @@ fun IrFunction.createDispatchReceiverParameter(origin: IrDeclarationOrigin? = nu
assert(dispatchReceiverParameter == null)
dispatchReceiverParameter = factory.createValueParameter(
startOffset, endOffset,
origin ?: parentAsClass.origin,
IrValueParameterSymbolImpl(),
SpecialNames.THIS,
-1,
parentAsClass.defaultType,
null,
startOffset = startOffset,
endOffset = endOffset,
origin = origin ?: parentAsClass.origin,
name = SpecialNames.THIS,
type = parentAsClass.defaultType,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
).apply {
parent = this@createDispatchReceiverParameter
}
@@ -1065,9 +1065,18 @@ open class SymbolTable(
isAssignable: Boolean = false,
valueParameterFactory: (IrValueParameterSymbol) -> IrValueParameter = {
irFactory.createValueParameter(
startOffset, endOffset, origin, it, name ?: nameProvider.nameForDeclaration(descriptor),
index ?: descriptor.indexOrMinusOne, type, varargElementType, descriptor.isCrossinline, descriptor.isNoinline,
isHidden = false, isAssignable = isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name ?: nameProvider.nameForDeclaration(descriptor),
type = type,
isAssignable = isAssignable,
symbol = it,
index = index ?: descriptor.indexOrMinusOne,
varargElementType = varargElementType,
isCrossinline = descriptor.isCrossinline,
isNoinline = descriptor.isNoinline,
isHidden = false,
)
}
): IrValueParameter =
@@ -329,16 +329,18 @@ class IrDeclarationDeserializer(
val flags = ValueParameterFlags.decode(fcode)
val nameAndType = BinaryNameAndType.decode(proto.nameType)
irFactory.createValueParameter(
startOffset, endOffset, origin,
symbol.checkSymbolType(fallbackSymbolKind = null),
deserializeName(nameAndType.nameIndex),
index,
deserializeIrType(nameAndType.typeIndex),
if (proto.hasVarargElementType()) deserializeIrType(proto.varargElementType) else null,
flags.isCrossInline,
flags.isNoInline,
flags.isHidden,
flags.isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = deserializeName(nameAndType.nameIndex),
type = deserializeIrType(nameAndType.typeIndex),
isAssignable = flags.isAssignable,
symbol = symbol.checkSymbolType(fallbackSymbolKind = null),
index = index,
varargElementType = if (proto.hasVarargElementType()) deserializeIrType(proto.varargElementType) else null,
isCrossinline = flags.isCrossInline,
isNoinline = flags.isNoInline,
isHidden = flags.isHidden,
).apply {
if (proto.hasDefaultValue())
defaultValue = deserializeExpressionBody(proto.defaultValue)