[Native] Drop irCatch from IrUtils2
This commit is contained in:
+19
-10
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+18
-9
@@ -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() }
|
||||
|
||||
-27
@@ -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
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user