From 8142ae2579f84fb2377748a305af5c821390151e Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 16 Aug 2023 12:06:52 +0200 Subject: [PATCH] [Native] Drop `irCatch` from `IrUtils2` --- .../kotlin/backend/konan/EntryPoint.kt | 29 ++++++++++++------- .../backend/konan/cgen/CBridgeGenUtils.kt | 27 +++++++++++------ .../org/jetbrains/kotlin/ir/util/IrUtils2.kt | 27 ----------------- 3 files changed, 37 insertions(+), 46 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 93359690f2f..61a18f01f00 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 @@ -7,17 +7,19 @@ package org.jetbrains.kotlin.backend.konan import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.common.lower.irBlockBody +import org.jetbrains.kotlin.backend.common.lower.irCatch import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.builders.declarations.buildFun +import org.jetbrains.kotlin.ir.builders.declarations.buildVariable +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.expressions.impl.IrTryImpl import org.jetbrains.kotlin.ir.types.typeWith import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET -import org.jetbrains.kotlin.ir.util.irCatch import org.jetbrains.kotlin.name.Name internal object DECLARATION_ORIGIN_ENTRY_POINT : IrDeclarationOriginImpl("ENTRY_POINT") @@ -64,16 +66,23 @@ internal fun makeEntryPoint(generationState: NativeGenerationState): IrFunction } +irReturn(irInt(0)) } - catches += irCatch().apply { - result = irBlock { - +irCall(context.ir.symbols.processUnhandledException).apply { - putValueArgument(0, irGet(catchParameter)) + val catchParameter = buildVariable( + builder.parent, startOffset, endOffset, + IrDeclarationOrigin.CATCH_PARAMETER, + Name.identifier("e"), + context.irBuiltIns.throwableType + ) + catches += irCatch( + catchParameter, + result = irBlock { + +irCall(context.ir.symbols.processUnhandledException).apply { + putValueArgument(0, irGet(catchParameter)) + } + +irCall(context.ir.symbols.terminateWithUnhandledException).apply { + putValueArgument(0, irGet(catchParameter)) + } } - +irCall(context.ir.symbols.terminateWithUnhandledException).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 a4acbbc4fe9..598ae9269c0 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 @@ -2,13 +2,15 @@ package org.jetbrains.kotlin.backend.konan.cgen import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.common.lower.irBlock +import org.jetbrains.kotlin.backend.common.lower.irCatch import org.jetbrains.kotlin.backend.common.lower.irThrow import org.jetbrains.kotlin.backend.konan.ir.KonanSymbols import org.jetbrains.kotlin.backend.konan.ir.buildSimpleAnnotation -import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.DescriptorVisibilities +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.* +import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl @@ -19,8 +21,8 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType -import org.jetbrains.kotlin.ir.util.* -import org.jetbrains.kotlin.ir.util.irCatch +import org.jetbrains.kotlin.ir.util.constructors +import org.jetbrains.kotlin.ir.util.simpleFunctions import org.jetbrains.kotlin.konan.ForeignExceptionMode import org.jetbrains.kotlin.name.Name @@ -225,12 +227,19 @@ 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().apply { - result = irBlock(kotlinCall) { - cleanup.forEach { +it() } - +irThrow(irGet(catchParameter)) - } - } + val catchParameter = buildVariable( + irBuilder.parent, startOffset, endOffset, + IrDeclarationOrigin.CATCH_PARAMETER, + Name.identifier("e"), + context.irBuiltIns.throwableType + ) + catches += irCatch( + catchParameter = catchParameter, + result = irBlock(kotlinCall) { + cleanup.forEach { +it() } + +irThrow(irGet(catchParameter)) + } + ) }) // TODO: consider handling a cleanup failure properly. cleanup.forEach { +it() } 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 2378414cbda..3a9c0e1be39 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 @@ -4,30 +4,3 @@ */ package org.jetbrains.kotlin.ir.util - -import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope -import org.jetbrains.kotlin.ir.builders.declarations.buildVariable -import org.jetbrains.kotlin.ir.builders.parent -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrField -import org.jetbrains.kotlin.ir.expressions.IrConst -import org.jetbrains.kotlin.ir.expressions.IrConstantValue -import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl -import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl -import org.jetbrains.kotlin.name.Name - -fun IrBuilderWithScope.irCatch() = - IrCatchImpl( - startOffset, endOffset, - buildVariable( - this@irCatch.parent, - startOffset, - endOffset, - IrDeclarationOrigin.IR_TEMPORARY_VARIABLE, - Name.identifier("e"), - context.irBuiltIns.throwableType, - isVar = false, - isConst = false, - isLateinit = false - ) - )