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.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.IrMemberAccessExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression
|
import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
@@ -172,6 +173,11 @@ class ClosureAnnotator {
|
|||||||
super.visitVariable(declaration)
|
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.
|
// Process delegating constructor calls, enum constructor calls, calls and callable references.
|
||||||
override fun visitMemberAccess(expression: IrMemberAccessExpression) {
|
override fun visitMemberAccess(expression: IrMemberAccessExpression) {
|
||||||
expression.acceptChildrenVoid(this)
|
expression.acceptChildrenVoid(this)
|
||||||
|
|||||||
@@ -568,6 +568,11 @@ task localClass_localFunctionInLocalClass(type: RunKonanTest) {
|
|||||||
source = "codegen/localClass/localFunctionInLocalClass.kt"
|
source = "codegen/localClass/localFunctionInLocalClass.kt"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task localClass_tryCatch(type: RunKonanTest) {
|
||||||
|
goldValue = ""
|
||||||
|
source = "codegen/localClass/tryCatch.kt"
|
||||||
|
}
|
||||||
|
|
||||||
task function_localFunction(type : RunKonanTest) {
|
task function_localFunction(type : RunKonanTest) {
|
||||||
goldValue = "OK\n"
|
goldValue = "OK\n"
|
||||||
source = "codegen/function/localFunction.kt"
|
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