diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt index 922e83a409e..a06311f4e95 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt @@ -200,9 +200,7 @@ private class JvmInlineClassLowering(private val context: JvmBackendContext) : F replacement.body = context.createIrBuilder(replacement.symbol, replacement.startOffset, replacement.endOffset).irBlockBody( replacement ) { - val thisVar = irTemporaryVarDeclaration( - replacement.returnType, nameHint = "\$this", isMutable = false - ) + val thisVar = irTemporary(irType = replacement.returnType, nameHint = "\$this") valueMap[constructor.constructedClass.thisReceiver!!.symbol] = thisVar constructor.body?.statements?.forEach { statement -> diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt index 9fa53829fea..f76b6a974f5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt @@ -42,39 +42,18 @@ inline fun IrBuilderWithScope.irLetS( } } - fun IrStatementsBuilder.irTemporary( - value: IrExpression, + value: IrExpression? = null, nameHint: String? = null, - typeHint: KotlinType? = null, - irType: IrType? = null + irType: IrType = value?.type!!, // either value or irType should be supplied at callsite + isMutable: Boolean = false, ): IrVariable { - val temporary = scope.createTemporaryVariable(value, nameHint, irType = irType) + val temporary = scope.createTemporaryVariableDeclaration(irType, nameHint, isMutable) + value?.let { temporary.initializer = it } +temporary return temporary } -fun IrStatementsBuilder.irTemporaryVarDeclaration( - type: IrType, - nameHint: String? = null, - isMutable: Boolean = true -): IrVariable { - val temporary = scope.createTemporaryVariableDeclaration(type, nameHint, isMutable = isMutable) - +temporary - return temporary -} - -fun IrStatementsBuilder.irTemporaryVar( - value: IrExpression, - nameHint: String? = null, - irType: IrType? = null -): IrVariable { - val temporary = scope.createTemporaryVariable(value, nameHint, isMutable = true) - +temporary - return temporary -} - - fun IrBuilderWithScope.irExprBody(value: IrExpression) = context.irFactory.createExpressionBody(startOffset, endOffset, value) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt index 502612e1d61..67cb5b63609 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt @@ -271,7 +271,7 @@ class IrSparseArrayParcelSerializer( ) : IrParcelSerializer { override fun AndroidIrBuilder.readParcel(parcel: IrValueDeclaration): IrExpression = irBlock { - val remainingSizeTemporary = irTemporaryVar(parcelReadInt(irGet(parcel))) + val remainingSizeTemporary = irTemporary(parcelReadInt(irGet(parcel)), isMutable = true) val sparseArrayConstructor = sparseArrayClass.constructors.first { irConstructor -> irConstructor.valueParameters.size == 1 && irConstructor.valueParameters.single().type.isInt() diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt index b84740fd9c0..2177a8faf68 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt @@ -125,7 +125,7 @@ fun IrClass.isSubclassOfFqName(fqName: String): Boolean = fqNameWhenAvailable?.asString() == fqName || superTypes.any { it.erasedUpperBound.isSubclassOfFqName(fqName) } inline fun IrBlockBuilder.forUntil(upperBound: IrExpression, loopBody: IrBlockBuilder.(IrValueDeclaration) -> Unit) { - val indexTemporary = irTemporaryVar(irInt(0)) + val indexTemporary = irTemporary(irInt(0), isMutable = true) +irWhile().apply { condition = irNotEquals(irGet(indexTemporary), upperBound) body = irBlock { diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt index 923b4ac7cb3..e90e2f6fbda 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt @@ -367,23 +367,19 @@ open class SerializerIrGenerator( val localSerialDesc = irTemporary(irGet(descriptorGetterSymbol.owner.returnType, irThis(), descriptorGetterSymbol), "desc") // workaround due to unavailability of labels (KT-25386) - val flagVar = irTemporaryVar(irBoolean(true), "flag") + val flagVar = irTemporary(irBoolean(true), "flag", isMutable = true) - val indexVar = irTemporaryVar(irInt(0), "index") + val indexVar = irTemporary(irInt(0), "index", isMutable = true) // calculating bit mask vars val blocksCnt = serializableProperties.bitMaskSlotCount() // var bitMask0 = 0, bitMask1 = 0... - val bitMasks = (0 until blocksCnt).map { irTemporaryVar(irInt(0), "bitMask$it") } + val bitMasks = (0 until blocksCnt).map { irTemporary(irInt(0), "bitMask$it", isMutable = true) } // var local0 = null, local1 = null ... val localProps = serializableProperties.mapIndexed { i, prop -> val (expr, type) = defaultValueAndType(prop) - irTemporaryVar( - expr, - "local$i", - type - ) + irTemporary(expr, "local$i", type, isMutable = true) } //input = input.beginStructure(...) diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt index 2b9d9df2481..51a4c5afd3d 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt +++ b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt @@ -292,7 +292,7 @@ class IrSparseArrayParcelSerializer( ) : IrParcelSerializer { override fun AndroidIrBuilder.readParcel(parcel: IrValueDeclaration): IrExpression { return irBlock { - val remainingSizeTemporary = irTemporaryVar(parcelReadInt(irGet(parcel))) + val remainingSizeTemporary = irTemporary(parcelReadInt(irGet(parcel)), isMutable = true) val sparseArrayConstructor = sparseArrayClass.constructors.first { irConstructor -> irConstructor.valueParameters.size == 1 && irConstructor.valueParameters.single().type.isInt() diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt index 879ad54c52d..facd7bbef72 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt +++ b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt @@ -134,7 +134,7 @@ fun IrClass.isSubclassOfFqName(fqName: String): Boolean { } inline fun IrBlockBuilder.forUntil(upperBound: IrExpression, loopBody: IrBlockBuilder.(IrValueDeclaration) -> Unit) { - val indexTemporary = irTemporaryVar(irInt(0)) + val indexTemporary = irTemporary(irInt(0), isMutable = true) +irWhile().apply { condition = irNotEquals(irGet(indexTemporary), upperBound) body = irBlock {