[kotlin compiler][update] adoption [type,value]ArgumentCount

This commit is contained in:
Vasily Levchenko
2020-10-26 15:55:29 +01:00
parent 297361f0c8
commit b3c1c30f2e
20 changed files with 69 additions and 29 deletions
@@ -88,7 +88,7 @@ internal data class ExternalLoweredEnum(
override val entriesMap: Map<Name, Int> override val entriesMap: Map<Name, Int>
) : LoweredEnumAccess { ) : LoweredEnumAccess {
override fun getValuesField(startOffset: Int, endOffset: Int): IrExpression = override fun getValuesField(startOffset: Int, endOffset: Int): IrExpression =
IrCallImpl(startOffset, endOffset, valuesGetter.returnType, valuesGetter.symbol) IrCallImpl(startOffset, endOffset, valuesGetter.returnType, valuesGetter.symbol, valuesGetter.typeParameters.size, valuesGetter.valueParameters.size)
} }
internal class EnumSpecialDeclarationsFactory(val context: Context) { internal class EnumSpecialDeclarationsFactory(val context: Context) {
@@ -368,7 +368,7 @@ internal val useInternalAbiPhase = makeKonanModuleOpPhase(
context.internalAbi.reference(it, irClass.module) context.internalAbi.reference(it, irClass.module)
} }
} }
return IrCallImpl(expression.startOffset, expression.endOffset, expression.type, accessor.symbol) return IrCallImpl(expression.startOffset, expression.endOffset, expression.type, accessor.symbol, accessor.typeParameters.size, accessor.valueParameters.size)
} }
} }
module.transformChildrenVoid(transformer) module.transformChildrenVoid(transformer)
@@ -553,6 +553,7 @@ internal fun KotlinStubs.generateCFunctionPointer(
expression.type, expression.type,
fakeFunction.symbol, fakeFunction.symbol,
typeArgumentsCount = 0, typeArgumentsCount = 0,
fakeFunction.valueParameters.size,
reflectionTarget = null reflectionTarget = null
) )
} }
@@ -64,7 +64,8 @@ internal class KonanSharedVariablesManager(val context: KonanBackendContext) : S
val sharedVariableInitialization = val sharedVariableInitialization =
IrCallImpl(initializer.startOffset, initializer.endOffset, IrCallImpl(initializer.startOffset, initializer.endOffset,
context.irBuiltIns.unitType, elementProperty.setter!!.symbol) context.irBuiltIns.unitType, elementProperty.setter!!.symbol,
elementProperty.setter!!.typeParameters.size, elementProperty.setter!!.valueParameters.size)
sharedVariableInitialization.dispatchReceiver = sharedVariableInitialization.dispatchReceiver =
IrGetValueImpl(initializer.startOffset, initializer.endOffset, IrGetValueImpl(initializer.startOffset, initializer.endOffset,
@@ -80,7 +81,8 @@ internal class KonanSharedVariablesManager(val context: KonanBackendContext) : S
override fun getSharedValue(sharedVariableSymbol: IrVariableSymbol, originalGet: IrGetValue) = override fun getSharedValue(sharedVariableSymbol: IrVariableSymbol, originalGet: IrGetValue) =
IrCallImpl(originalGet.startOffset, originalGet.endOffset, IrCallImpl(originalGet.startOffset, originalGet.endOffset,
originalGet.type, elementProperty.getter!!.symbol).apply { originalGet.type, elementProperty.getter!!.symbol,
elementProperty.getter!!.typeParameters.size, elementProperty.getter!!.valueParameters.size).apply {
dispatchReceiver = IrGetValueImpl( dispatchReceiver = IrGetValueImpl(
originalGet.startOffset, originalGet.endOffset, originalGet.startOffset, originalGet.endOffset,
sharedVariableSymbol.owner.type, sharedVariableSymbol sharedVariableSymbol.owner.type, sharedVariableSymbol
@@ -89,7 +91,8 @@ internal class KonanSharedVariablesManager(val context: KonanBackendContext) : S
override fun setSharedValue(sharedVariableSymbol: IrVariableSymbol, originalSet: IrSetValue) = override fun setSharedValue(sharedVariableSymbol: IrVariableSymbol, originalSet: IrSetValue) =
IrCallImpl(originalSet.startOffset, originalSet.endOffset, context.irBuiltIns.unitType, IrCallImpl(originalSet.startOffset, originalSet.endOffset, context.irBuiltIns.unitType,
elementProperty.setter!!.symbol).apply { elementProperty.setter!!.symbol, elementProperty.setter!!.typeParameters.size,
elementProperty.setter!!.valueParameters.size).apply {
dispatchReceiver = IrGetValueImpl( dispatchReceiver = IrGetValueImpl(
originalSet.startOffset, originalSet.endOffset, originalSet.startOffset, originalSet.endOffset,
sharedVariableSymbol.owner.type, sharedVariableSymbol sharedVariableSymbol.owner.type, sharedVariableSymbol
@@ -7,8 +7,6 @@ package org.jetbrains.kotlin.backend.konan.ir
import org.jetbrains.kotlin.backend.common.atMostOne import org.jetbrains.kotlin.backend.common.atMostOne
import org.jetbrains.kotlin.backend.konan.DECLARATION_ORIGIN_INLINE_CLASS_SPECIAL_FUNCTION import org.jetbrains.kotlin.backend.konan.DECLARATION_ORIGIN_INLINE_CLASS_SPECIAL_FUNCTION
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
@@ -54,7 +54,9 @@ internal class CEnumCompanionGenerator(
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl( +IrDelegatingConstructorCallImpl(
startOffset, endOffset, context.irBuiltIns.unitType, startOffset, endOffset, context.irBuiltIns.unitType,
superConstructorSymbol superConstructorSymbol,
superConstructorSymbol.owner.typeParameters.size,
superConstructorSymbol.owner.valueParameters.size
) )
+irInstanceInitializer(symbolTable.referenceClass(companionObjectDescriptor)) +irInstanceInitializer(symbolTable.referenceClass(companionObjectDescriptor))
} }
@@ -58,7 +58,9 @@ internal class CEnumVarClassGenerator(
) )
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl( +IrDelegatingConstructorCallImpl(
startOffset, endOffset, context.irBuiltIns.unitType, enumVarConstructorSymbol startOffset, endOffset, context.irBuiltIns.unitType, enumVarConstructorSymbol,
enumVarConstructorSymbol.owner.typeParameters.size,
enumVarConstructorSymbol.owner.valueParameters.size
).also { ).also {
it.putValueArgument(0, irGet(irConstructor.valueParameters[0])) it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
} }
@@ -81,7 +83,9 @@ internal class CEnumVarClassGenerator(
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl( +IrDelegatingConstructorCallImpl(
startOffset, endOffset, context.irBuiltIns.unitType, startOffset, endOffset, context.irBuiltIns.unitType,
superConstructorSymbol superConstructorSymbol,
superConstructorSymbol.owner.typeParameters.size,
superConstructorSymbol.owner.valueParameters.size
).also { ).also {
it.putValueArgument(0, irInt(typeSize)) it.putValueArgument(0, irInt(typeSize))
} }
@@ -64,7 +64,9 @@ internal class CStructVarClassGenerator(
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl( +IrDelegatingConstructorCallImpl(
startOffset, endOffset, startOffset, endOffset,
context.irBuiltIns.unitType, enumVarConstructorSymbol context.irBuiltIns.unitType, enumVarConstructorSymbol,
irConstructor.typeParameters.size,
1
).also { ).also {
it.putValueArgument(0, irGet(irConstructor.valueParameters[0])) it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
} }
@@ -48,7 +48,9 @@ internal class CStructVarCompanionGenerator(
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody { irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl( +IrDelegatingConstructorCallImpl(
startOffset, endOffset, context.irBuiltIns.unitType, startOffset, endOffset, context.irBuiltIns.unitType,
superConstructorSymbol superConstructorSymbol,
irConstructor.typeParameters.size,
2
).also { ).also {
it.putValueArgument(0, irLong(size)) it.putValueArgument(0, irLong(size))
it.putValueArgument(1, irInt(align)) it.putValueArgument(1, irInt(align))
@@ -97,7 +97,9 @@ private class AutoboxingTransformer(val context: Context) : AbstractValueUsageTr
startOffset, startOffset,
endOffset, endOffset,
symbols.getNativeNullPtr.owner.returnType, symbols.getNativeNullPtr.owner.returnType,
symbols.getNativeNullPtr symbols.getNativeNullPtr,
symbols.getNativeNullPtr.owner.typeParameters.size,
symbols.getNativeNullPtr.owner.valueParameters.size
).uncheckedCast(type) ).uncheckedCast(type)
} }
@@ -164,7 +166,8 @@ private class AutoboxingTransformer(val context: Context) : AbstractValueUsageTr
val parameter = conversion.owner.explicitParameters.single() val parameter = conversion.owner.explicitParameters.single()
val argument = this.uncheckedCast(parameter.type) val argument = this.uncheckedCast(parameter.type)
IrCallImpl(startOffset, endOffset, conversion.owner.returnType, conversion).apply { IrCallImpl(startOffset, endOffset, conversion.owner.returnType, conversion,
conversion.owner.typeParameters.size, conversion.owner.valueParameters.size).apply {
addArguments(mapOf(parameter to argument)) addArguments(mapOf(parameter to argument))
}.uncheckedCast(this.type) // Try not to bring new type incompatibilities. }.uncheckedCast(this.type) // Try not to bring new type incompatibilities.
} }
@@ -273,7 +276,9 @@ private class InlineClassTransformer(private val context: Context) : IrBuildingT
IrBlockImpl(startOffset, endOffset, irBuiltIns.unitType).apply { IrBlockImpl(startOffset, endOffset, irBuiltIns.unitType).apply {
statements.addIfNotNull(expression.receiver) statements.addIfNotNull(expression.receiver)
statements += expression.value statements += expression.value
statements += IrCallImpl(startOffset, endOffset, irBuiltIns.nothingType, symbols.throwNullPointerException) statements += IrCallImpl(startOffset, endOffset, irBuiltIns.nothingType, symbols.throwNullPointerException,
symbols.throwNullPointerException.owner.typeParameters.size,
symbols.throwNullPointerException.owner.valueParameters.size)
statements += IrGetObjectValueImpl(startOffset, endOffset, irBuiltIns.unitType, irBuiltIns.unitClass) statements += IrGetObjectValueImpl(startOffset, endOffset, irBuiltIns.unitType, irBuiltIns.unitClass)
} }
} else { } else {
@@ -119,6 +119,7 @@ internal class WorkersBridgesBuilding(val context: Context) : DeclarationContain
type = job.type, type = job.type,
symbol = bridge.symbol, symbol = bridge.symbol,
typeArgumentsCount = 0, typeArgumentsCount = 0,
valueArgumentsCount = bridge.symbol.owner.valueParameters.size,
reflectionTarget = null) reflectionTarget = null)
) )
return expression return expression
@@ -238,6 +239,8 @@ private fun Context.buildBridge(startOffset: Int, endOffset: Int,
endOffset, endOffset,
targetSymbol.owner.returnType, targetSymbol.owner.returnType,
targetSymbol, targetSymbol,
typeArgumentsCount = targetSymbol.owner.typeParameters.size,
valueArgumentsCount = targetSymbol.owner.valueParameters.size,
superQualifierSymbol = superQualifierSymbol /* Call non-virtually */ superQualifierSymbol = superQualifierSymbol /* Call non-virtually */
).apply { ).apply {
bridge.dispatchReceiverParameter?.let { bridge.dispatchReceiverParameter?.let {
@@ -58,7 +58,9 @@ internal class BuiltinOperatorLowering(val context: Context) : FileLoweringPass,
irBuiltins.noWhenBranchMatchedExceptionSymbol -> IrCallImpl(expression.startOffset, expression.endOffset, irBuiltins.noWhenBranchMatchedExceptionSymbol -> IrCallImpl(expression.startOffset, expression.endOffset,
context.ir.symbols.throwNoWhenBranchMatchedException.owner.returnType, context.ir.symbols.throwNoWhenBranchMatchedException.owner.returnType,
context.ir.symbols.throwNoWhenBranchMatchedException) context.ir.symbols.throwNoWhenBranchMatchedException,
context.ir.symbols.throwNoWhenBranchMatchedException.owner.typeParameters.size,
context.ir.symbols.throwNoWhenBranchMatchedException.owner.valueParameters.size)
else -> expression else -> expression
} }
@@ -113,9 +113,12 @@ internal class EnumUsageLowering(val context: Context)
return IrCallImpl( return IrCallImpl(
startOffset, endOffset, enumClass.defaultType, startOffset, endOffset, enumClass.defaultType,
loweredEnum.itemGetterSymbol.owner.symbol, loweredEnum.itemGetterSymbol.owner.symbol,
typeArgumentsCount = 0 typeArgumentsCount = 0,
loweredEnum.itemGetterSymbol.owner.valueParameters.size
).apply { ).apply {
dispatchReceiver = IrCallImpl(startOffset, endOffset, loweredEnum.valuesGetter.returnType, loweredEnum.valuesGetter.symbol) dispatchReceiver = IrCallImpl(startOffset, endOffset, loweredEnum.valuesGetter.returnType,
loweredEnum.valuesGetter.symbol, loweredEnum.valuesGetter.typeParameters.size,
loweredEnum.valuesGetter.valueParameters.size)
putValueArgument(0, IrConstImpl.int(startOffset, endOffset, context.irBuiltIns.intType, ordinal)) putValueArgument(0, IrConstImpl.int(startOffset, endOffset, context.irBuiltIns.intType, ordinal))
} }
} }
@@ -179,7 +179,9 @@ internal class EnumConstructorsLowering(val context: Context) : ClassLoweringPas
val result = IrDelegatingConstructorCallImpl( val result = IrDelegatingConstructorCallImpl(
startOffset, endOffset, startOffset, endOffset,
context.irBuiltIns.unitType, context.irBuiltIns.unitType,
enumConstructorCall.symbol) enumConstructorCall.symbol,
enumConstructorCall.symbol.owner.typeParameters.size,
enumConstructorCall.symbol.owner.valueParameters.size)
assert(result.symbol.owner.valueParameters.size == 2) { assert(result.symbol.owner.valueParameters.size == 2) {
"Enum(String, Int) constructor call expected:\n${result.dump()}" "Enum(String, Int) constructor call expected:\n${result.dump()}"
@@ -214,7 +216,9 @@ internal class EnumConstructorsLowering(val context: Context) : ClassLoweringPas
val result = IrDelegatingConstructorCallImpl( val result = IrDelegatingConstructorCallImpl(
startOffset, endOffset, startOffset, endOffset,
context.irBuiltIns.unitType, context.irBuiltIns.unitType,
loweredDelegatingConstructor.symbol) loweredDelegatingConstructor.symbol,
loweredDelegatingConstructor.symbol.owner.typeParameters.size,
loweredDelegatingConstructor.symbol.owner.valueParameters.size)
val firstParameter = enumClassConstructor.valueParameters[0] val firstParameter = enumClassConstructor.valueParameters[0]
result.putValueArgument(0, result.putValueArgument(0,
@@ -268,7 +272,8 @@ internal class EnumConstructorsLowering(val context: Context) : ClassLoweringPas
private inner class InEnumEntryClassConstructor(enumEntry: IrEnumEntry) : InEnumEntry(enumEntry) { private inner class InEnumEntryClassConstructor(enumEntry: IrEnumEntry) : InEnumEntry(enumEntry) {
override fun createConstructorCall(startOffset: Int, endOffset: Int, loweredConstructor: IrConstructorSymbol) = override fun createConstructorCall(startOffset: Int, endOffset: Int, loweredConstructor: IrConstructorSymbol) =
IrDelegatingConstructorCallImpl(startOffset, endOffset, context.irBuiltIns.unitType, loweredConstructor) IrDelegatingConstructorCallImpl(startOffset, endOffset, context.irBuiltIns.unitType, loweredConstructor,
loweredConstructor.owner.typeParameters.size, loweredConstructor.owner.valueParameters.size)
} }
private inner class InEnumEntryInitializer(enumEntry: IrEnumEntry) : InEnumEntry(enumEntry) { private inner class InEnumEntryInitializer(enumEntry: IrEnumEntry) : InEnumEntry(enumEntry) {
@@ -188,7 +188,9 @@ internal class InitializersLowering(val context: CommonBackendContext) : ClassLo
val startOffset = it.startOffset val startOffset = it.startOffset
val endOffset = it.endOffset val endOffset = it.endOffset
listOf(IrCallImpl(startOffset, endOffset, listOf(IrCallImpl(startOffset, endOffset,
context.irBuiltIns.unitType, initializeMethodSymbol context.irBuiltIns.unitType, initializeMethodSymbol,
initializeMethodSymbol.owner.typeParameters.size,
initializeMethodSymbol.owner.valueParameters.size
).apply { ).apply {
dispatchReceiver = IrGetValueImpl( dispatchReceiver = IrGetValueImpl(
startOffset, endOffset, startOffset, endOffset,
@@ -655,7 +655,8 @@ private class InteropLoweringPart1(val context: Context) : BaseInteropIrTransfor
endOffset, endOffset,
context.irBuiltIns.unitType, context.irBuiltIns.unitType,
superConstructor, superConstructor,
0 0,
superConstructor.owner.valueParameters.size
) )
+irCall(symbols.interopObjCObjectSuperInitCheck).apply { +irCall(symbols.interopObjCObjectSuperInitCheck).apply {
@@ -1213,6 +1214,7 @@ private class InteropTransformer(val context: Context, override val irFile: IrFi
symbols.executeImpl.owner.valueParameters[3].type, symbols.executeImpl.owner.valueParameters[3].type,
targetSymbol, targetSymbol,
typeArgumentsCount = 0, typeArgumentsCount = 0,
targetSymbol.owner.valueParameters.size,
reflectionTarget = null) reflectionTarget = null)
builder.irCall(symbols.executeImpl).apply { builder.irCall(symbols.executeImpl).apply {
@@ -41,7 +41,7 @@ internal class RedundantCoercionsCleaner(val context: Context) : FileLoweringPas
typeOperand, expression) typeOperand, expression)
} }
with (coercion) { with (coercion) {
return IrCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, origin).apply { return IrCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.owner.valueParameters.size, origin).apply {
putValueArgument(0, castedExpression) putValueArgument(0, castedExpression)
} }
} }
@@ -334,7 +334,9 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
// Producer and job of executeImpl are called externally, we need to reflect this somehow. // Producer and job of executeImpl are called externally, we need to reflect this somehow.
val producerInvocation = IrCallImpl(expression.startOffset, expression.endOffset, val producerInvocation = IrCallImpl(expression.startOffset, expression.endOffset,
executeImplProducerInvoke.returnType, executeImplProducerInvoke.returnType,
executeImplProducerInvoke.symbol) executeImplProducerInvoke.symbol,
executeImplProducerInvoke.symbol.owner.typeParameters.size,
executeImplProducerInvoke.symbol.owner.valueParameters.size)
producerInvocation.dispatchReceiver = expression.getValueArgument(2) producerInvocation.dispatchReceiver = expression.getValueArgument(2)
expressions += producerInvocation to currentLoop expressions += producerInvocation to currentLoop
@@ -343,7 +345,9 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
?: error("A function reference expected") ?: error("A function reference expected")
val jobInvocation = IrCallImpl(expression.startOffset, expression.endOffset, val jobInvocation = IrCallImpl(expression.startOffset, expression.endOffset,
jobFunctionReference.symbol.owner.returnType, jobFunctionReference.symbol.owner.returnType,
jobFunctionReference.symbol as IrSimpleFunctionSymbol) jobFunctionReference.symbol as IrSimpleFunctionSymbol,
jobFunctionReference.symbol.owner.typeParameters.size,
jobFunctionReference.symbol.owner.valueParameters.size)
jobInvocation.putValueArgument(0, producerInvocation) jobInvocation.putValueArgument(0, producerInvocation)
expressions += jobInvocation to currentLoop expressions += jobInvocation to currentLoop
@@ -355,7 +359,9 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
&& expression.typeOperand.isObjCObjectType()) { && expression.typeOperand.isObjCObjectType()) {
val objcObjGetter = IrCallImpl(expression.startOffset, expression.endOffset, val objcObjGetter = IrCallImpl(expression.startOffset, expression.endOffset,
objCObjectRawValueGetter.owner.returnType, objCObjectRawValueGetter.owner.returnType,
objCObjectRawValueGetter objCObjectRawValueGetter,
objCObjectRawValueGetter.owner.typeParameters.size,
objCObjectRawValueGetter.owner.valueParameters.size
).apply { ).apply {
extensionReceiver = expression.argument extensionReceiver = expression.argument
} }
@@ -58,7 +58,7 @@ object KonanFakeOverrideClassFilter : FakeOverrideClassFilter {
private fun IrClass.hasInteropSuperClass() = this.superTypes private fun IrClass.hasInteropSuperClass() = this.superTypes
.mapNotNull { it.classOrNull } .mapNotNull { it.classOrNull }
.filter { it is IrPublicSymbolBase<*> } .filter { it is IrPublicSymbolBase<*> }
.any { it.signature.isInteropSignature() } .any { it.signature?.isInteropSignature() ?: false }
override fun needToConstructFakeOverrides(clazz: IrClass): Boolean { override fun needToConstructFakeOverrides(clazz: IrClass): Boolean {
return !clazz.hasInteropSuperClass() return !clazz.hasInteropSuperClass()
@@ -241,7 +241,7 @@ fun IrBuilderWithScope.irCall(irFunction: IrFunction, typeArguments: List<IrType
internal fun irCall(startOffset: Int, endOffset: Int, irFunction: IrSimpleFunction, typeArguments: List<IrType>): IrCall = internal fun irCall(startOffset: Int, endOffset: Int, irFunction: IrSimpleFunction, typeArguments: List<IrType>): IrCall =
IrCallImpl( IrCallImpl(
startOffset, endOffset, irFunction.substitutedReturnType(typeArguments), startOffset, endOffset, irFunction.substitutedReturnType(typeArguments),
irFunction.symbol, typeArguments.size irFunction.symbol, typeArguments.size, irFunction.valueParameters.size
).apply { ).apply {
typeArguments.forEachIndexed { index, irType -> typeArguments.forEachIndexed { index, irType ->
this.putTypeArgument(index, irType) this.putTypeArgument(index, irType)