Resolve variable declaration in 'when' subject

This commit is contained in:
Dmitry Petrov
2017-10-20 12:21:17 +03:00
parent 84e49e5b57
commit 1eeafc2d0e
11 changed files with 162 additions and 5 deletions
@@ -0,0 +1,14 @@
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE
fun foo(): Any = 42
fun test(x: Any) {
val z1 = when (val y = foo()) {
42 -> "Magic: $y, $x"
else -> {
"Not magic: $y, $x"
}
}
val z2 = "Anyway, it was $<!UNRESOLVED_REFERENCE!>y<!>"
}
@@ -0,0 +1,4 @@
package
public fun foo(): kotlin.Any
public fun test(/*0*/ x: kotlin.Any): kotlin.Unit
@@ -0,0 +1,11 @@
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
fun foo(): Any = 42
fun test(y: Any) {
val z = when (val <!NAME_SHADOWING!>y<!> = foo()) {
42 -> "Magic: $y"
else -> "Not magic: $y"
}
}
@@ -0,0 +1,4 @@
package
public fun foo(): kotlin.Any
public fun test(/*0*/ y: kotlin.Any): kotlin.Unit
@@ -0,0 +1,16 @@
// !LANGUAGE: -VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE
fun foo(): Any = 42
fun test(x: Any) {
// NB check that we still resolve 'y', even though current language version doesn' support variable declaration in when subject
val z1 = when (<!UNSUPPORTED_FEATURE!>val y = foo()<!>) {
42 -> "Magic: $y, $x"
else -> {
"Not magic: $y, $x"
}
}
val z2 = "Anyway, it was $<!UNRESOLVED_REFERENCE!>y<!>"
}
@@ -0,0 +1,4 @@
package
public fun foo(): kotlin.Any
public fun test(/*0*/ x: kotlin.Any): kotlin.Unit