[Native] Drop irCatch from IrUtils2

This commit is contained in:
Ivan Kylchik
2023-08-16 12:06:52 +02:00
committed by Space Team
parent c2076a0227
commit 8142ae2579
3 changed files with 37 additions and 46 deletions
@@ -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))
}
}
}
)
}
}
@@ -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() }
@@ -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
)
)