[K/N] Avoid using deprecated functions in data class generated methods

^KT-58267
This commit is contained in:
Pavel Kunyavskiy
2023-05-08 12:43:46 +02:00
committed by Space Team
parent 2f3947d8e5
commit 11e1bcca1d
2 changed files with 6 additions and 24 deletions
@@ -321,13 +321,13 @@ internal class KonanSymbols(
}
val arrayContentToString = arrayToExtensionSymbolMap("contentToString") {
lookup.isExtensionReceiverNullable(it) == false
lookup.isExtensionReceiverNullable(it) == true
}
val arrayContentHashCode = arrayToExtensionSymbolMap("contentHashCode") {
lookup.isExtensionReceiverNullable(it) == false
lookup.isExtensionReceiverNullable(it) == true
}
val arrayContentEquals = arrayToExtensionSymbolMap("contentEquals") {
lookup.isExtensionReceiverNullable(it) == false
lookup.isExtensionReceiverNullable(it) == true
}
override val arraysContentEquals by lazy { arrayContentEquals.mapKeys { it.key.defaultType } }
@@ -6,17 +6,15 @@
package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.lower.at
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlock
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.types.isNullable
import org.jetbrains.kotlin.ir.util.irCall
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
@@ -56,24 +54,8 @@ internal class DataClassOperatorsLowering(val context: Context) : FileLoweringPa
// TODO: use more precise type arguments.
val typeArguments = (0 until newCallee.typeParameters.size).map { irBuiltins.anyNType }
if (!argument.type.isNullable()) {
irCall(newCallee, typeArguments).apply {
extensionReceiver = argument
}
} else {
irBlock(argument) {
val tmp = irTemporary(argument)
val call = irCall(newCallee, typeArguments).apply {
extensionReceiver = irGet(tmp)
}
+irIfThenElse(call.type,
irEqeqeq(irGet(tmp), irNull()),
if (isToString)
irString("null")
else
irInt(0),
call)
}
irCall(newCallee, typeArguments).apply {
extensionReceiver = argument
}
}
}