Add support local return from lambda with implicit unit type.
This commit is contained in:
+2
-2
@@ -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
|
||||
|
||||
+20
@@ -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<!>
|
||||
}
|
||||
+7
@@ -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
|
||||
+7
@@ -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<!>
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
internal val a: () -> kotlin.Unit
|
||||
internal val flag: kotlin.Boolean = true
|
||||
+16
@@ -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
|
||||
}
|
||||
+6
@@ -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
|
||||
+9
@@ -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<!>
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
internal val a: () -> kotlin.Nothing
|
||||
internal val b: () -> kotlin.Unit
|
||||
Reference in New Issue
Block a user