Fixes bug in local declarations lowering + test
This commit is contained in:
+6
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.backend.common.lower
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCatch
|
||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
@@ -172,6 +173,11 @@ class ClosureAnnotator {
|
||||
super.visitVariable(declaration)
|
||||
}
|
||||
|
||||
override fun visitCatch(aCatch: IrCatch) {
|
||||
closuresStack.peek()?.declareVariable(aCatch.parameter)
|
||||
super.visitCatch(aCatch)
|
||||
}
|
||||
|
||||
// Process delegating constructor calls, enum constructor calls, calls and callable references.
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression) {
|
||||
expression.acceptChildrenVoid(this)
|
||||
|
||||
@@ -568,6 +568,11 @@ task localClass_localFunctionInLocalClass(type: RunKonanTest) {
|
||||
source = "codegen/localClass/localFunctionInLocalClass.kt"
|
||||
}
|
||||
|
||||
task localClass_tryCatch(type: RunKonanTest) {
|
||||
goldValue = ""
|
||||
source = "codegen/localClass/tryCatch.kt"
|
||||
}
|
||||
|
||||
task function_localFunction(type : RunKonanTest) {
|
||||
goldValue = "OK\n"
|
||||
source = "codegen/function/localFunction.kt"
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
private fun foo() {
|
||||
val local =
|
||||
object {
|
||||
fun bar() {
|
||||
try {
|
||||
} catch (t: Throwable) {
|
||||
println(t)
|
||||
}
|
||||
}
|
||||
}
|
||||
local.bar()
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
foo()
|
||||
}
|
||||
Reference in New Issue
Block a user