Add support local return from lambda with implicit unit type.

This commit is contained in:
Stanislav Erokhin
2015-02-17 17:08:08 +03:00
parent 57fd5cc84c
commit c6f8a1cfcc
15 changed files with 188 additions and 43 deletions
@@ -1,7 +1,7 @@
fun test(a: Int) {
run @f{
if (a > 0) <!RETURN_TYPE_MISMATCH!>return@f<!>
else return@f 1
if (a > 0) return@f
else return@f <!RETURN_TYPE_MISMATCH!>1<!>
}
}
@@ -0,0 +1,6 @@
val flag = true
val a = @b {
if (flag) return@b <!RETURN_TYPE_MISMATCH!>4<!>
return@b
}
@@ -0,0 +1,4 @@
package
internal val a: () -> kotlin.Unit
internal val flag: kotlin.Boolean = true
@@ -1,6 +1,6 @@
fun test(a: Int) {
val x = run @f{
if (a > 0) <!RETURN_TYPE_MISMATCH!>return@f<!>
if (a > 0) return@f
else return@f Unit
}
x: Unit
@@ -0,0 +1,20 @@
val flag = true
fun run<T>(f: () -> T): T { return f() }
// type of a was checked by txt
val a = run { // () -> Unit
return@run
}
// Unit
val b = run {
if (flag) return@run
<!UNUSED_EXPRESSION!>5<!>
}
// Unit
val c = run {
if (flag) return@run
return@run <!RETURN_TYPE_MISMATCH!>4<!>
}
@@ -0,0 +1,7 @@
package
internal val a: kotlin.Unit
internal val b: kotlin.Unit
internal val c: kotlin.Unit
internal val flag: kotlin.Boolean = true
internal fun </*0*/ T> run(/*0*/ f: () -> T): T
@@ -0,0 +1,7 @@
val flag = true
// type of lambda was checked by txt
val a = @b { // () -> Unit
if (flag) return@b
else <!UNUSED_EXPRESSION!>54<!>
}
@@ -0,0 +1,4 @@
package
internal val a: () -> kotlin.Unit
internal val flag: kotlin.Boolean = true
@@ -0,0 +1,16 @@
val flag = true
// type of lambda was checked by txt
val a = @l { // () -> Any
if (flag) return@l 4
return@l Unit
}
val b = @l { // () -> Any
if (flag) return@l Unit
5
}
val c = @l { // () -> Unit
if (flag) return@l Unit
}
@@ -0,0 +1,6 @@
package
internal val a: () -> kotlin.Any
internal val b: () -> kotlin.Any
internal val c: () -> kotlin.Unit
internal val flag: kotlin.Boolean = true
@@ -0,0 +1,9 @@
val a = @l {
return@l <!UNRESOLVED_REFERENCE!>r<!>
}
val b = @l {
if ("" == "OK") return@l
return@l <!UNRESOLVED_REFERENCE, RETURN_TYPE_MISMATCH!>r<!>
}
@@ -0,0 +1,4 @@
package
internal val a: () -> kotlin.Nothing
internal val b: () -> kotlin.Unit