Fix delegated property resolve on number literals and proper types

There is no need to update type of delegate expression if it's already
 resolved correctly (doesn't include non-proper types). In almost all
 cases it was fine except number literals as there we didn't box
 expression in backend and got problems at bytecode verification stage

 #KT-40057 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2020-07-14 12:58:27 +03:00
parent e5bca3ce29
commit fcf7a55ccc
9 changed files with 71 additions and 2 deletions
@@ -0,0 +1,29 @@
// !LANGUAGE: +NewInference
// WITH_RUNTIME
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
operator fun <C, T> T.provideDelegate(thisRef: C, property: KProperty<*>) =
object : ReadOnlyProperty<C, T> {
override operator fun getValue(thisRef: C, property: KProperty<*>) = this@provideDelegate
}
val byInt by 42
val byIntAsLong: Long by 42L
val byIntNullable: Int? by 42
val byString by "str"
val byStringNullable: String? = "strNullable"
fun box(): String {
if (byInt != 42) return "fail1"
if (byIntAsLong != 42L) return "fail2"
if (byIntNullable != 42) return "fail3"
if (byString != "str") return "fail4"
if (byStringNullable != "strNullable") return "fail5"
return "OK"
}