JVM IR: Improve codegen for try/catch statements
This commit is contained in:
committed by
Dmitry Petrov
parent
af74fd047a
commit
b1b70e503c
+2
-2
@@ -519,7 +519,7 @@ class ExpressionCodegen(
|
||||
override fun visitSetVariable(expression: IrSetVariable, data: BlockInfo): PromisedValue {
|
||||
expression.markLineNumber(startOffset = true)
|
||||
setVariable(expression.symbol, expression.value, data)
|
||||
return defaultValue(expression.type)
|
||||
return immaterialUnitValue
|
||||
}
|
||||
|
||||
fun setVariable(symbol: IrValueSymbol, value: IrExpression, data: BlockInfo) {
|
||||
@@ -751,7 +751,7 @@ class ExpressionCodegen(
|
||||
mv.nop()
|
||||
val tryAsmType = aTry.asmType
|
||||
val tryResult = aTry.tryResult.accept(this, data)
|
||||
val isExpression = true //TODO: more wise check is required
|
||||
val isExpression = !aTry.type.isUnit()
|
||||
var savedValue: Int? = null
|
||||
if (isExpression) {
|
||||
tryResult.coerce(tryAsmType, aTry.type).materialize()
|
||||
|
||||
-1
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.backend.jvm.codegen
|
||||
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||
import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
||||
import org.jetbrains.kotlin.codegen.visitAnnotableParameterCount
|
||||
|
||||
+5
-1
@@ -1,3 +1,4 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
// WITH_COROUTINES
|
||||
|
||||
import helpers.*
|
||||
@@ -41,6 +42,9 @@ fun box(): String {
|
||||
// 1 LOCALVARIABLE i Ljava/lang/String; L.* 3
|
||||
// 1 LOCALVARIABLE s Ljava/lang/String; L.* 3
|
||||
// 1 PUTFIELD VarValueConflictsWithTableSameSortKt\$box\$1.L\$0 : Ljava/lang/Object;
|
||||
/* 1 load in try/finally */
|
||||
/* 1 load in the catch (e: Throwable) { throw e } block which is implicitly wrapped around try/finally */
|
||||
// 1 ALOAD 3\s+ATHROW
|
||||
/* 1 load in result = s */
|
||||
// 1 ALOAD 3\s+PUTFIELD kotlin/jvm/internal/Ref\$ObjectRef\.element
|
||||
/* But no further load when spilling 's' to the continuation */
|
||||
// 2 ALOAD 3
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
fun z() {}
|
||||
|
||||
fun foo() {
|
||||
|
||||
Reference in New Issue
Block a user