Fixes bug in local declarations lowering + test

This commit is contained in:
Igor Chevdar
2017-04-10 17:47:01 +03:00
parent 028cf6c947
commit 8a5659456c
3 changed files with 27 additions and 0 deletions
@@ -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)
+5
View File
@@ -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()
}