From 5c68ea2b648e7b8975caf587fa8b603dbbedf1dd Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Tue, 15 Aug 2023 16:38:04 +0200 Subject: [PATCH] [Native] Simplify `irCatch` from `IrUtils2` --- .../kotlin/backend/konan/EntryPoint.kt | 2 +- .../backend/konan/cgen/CBridgeGenUtils.kt | 2 +- .../org/jetbrains/kotlin/ir/util/IrUtils2.kt | 24 +++++++------------ 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EntryPoint.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EntryPoint.kt index e41031da104..93359690f2f 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EntryPoint.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EntryPoint.kt @@ -64,7 +64,7 @@ internal fun makeEntryPoint(generationState: NativeGenerationState): IrFunction } +irReturn(irInt(0)) } - catches += irCatch(context.irBuiltIns.throwableType).apply { + catches += irCatch().apply { result = irBlock { +irCall(context.ir.symbols.processUnhandledException).apply { putValueArgument(0, irGet(catchParameter)) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt index e443ae7d6b7..a4acbbc4fe9 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt @@ -225,7 +225,7 @@ internal class KotlinCallBuilder(private val irBuilder: IrBuilderWithScope, priv // Note: generating try-catch as finally blocks are already lowered. val result = irTemporary(IrTryImpl(startOffset, endOffset, kotlinCall.type).apply { tryResult = kotlinCall - catches += irCatch(context.irBuiltIns.throwableType).apply { + catches += irCatch().apply { result = irBlock(kotlinCall) { cleanup.forEach { +it() } +irThrow(irGet(catchParameter)) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt index d39eeaa28bc..01614fee7ea 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/ir/util/IrUtils2.kt @@ -9,18 +9,16 @@ import org.jetbrains.kotlin.backend.konan.KonanBackendContext import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation import org.jetbrains.kotlin.descriptors.DescriptorVisibilities -import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl import org.jetbrains.kotlin.ir.IrFileEntry import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope +import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.builders.irCall import org.jetbrains.kotlin.ir.builders.parent import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl @@ -28,8 +26,6 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl -import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl -import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.makeNullable @@ -131,22 +127,20 @@ internal fun irCall(startOffset: Int, endOffset: Int, irFunction: IrSimpleFuncti } } -fun IrBuilderWithScope.irCatch(type: IrType) = +fun IrBuilderWithScope.irCatch() = IrCatchImpl( startOffset, endOffset, - IrVariableImpl( + buildVariable( + this@irCatch.parent, startOffset, endOffset, IrDeclarationOrigin.IR_TEMPORARY_VARIABLE, - IrVariableSymbolImpl(), Name.identifier("e"), - type, - false, - false, - false - ).apply { - parent = this@irCatch.parent - } + context.irBuiltIns.throwableType, + isVar = false, + isConst = false, + isLateinit = false + ) ) fun IrClass.defaultOrNullableType(hasQuestionMark: Boolean) =