Fix VerifyError on primitive override properties

Don't just blindly map property type in PropertyCodegen when generating getter:
we already have its full signature, so we can just as well take the type from
it. The former also isn't correct for properties which are overrides with a
primitive type. Simple mapType is safe for setter though, because the type of a
method parameter cannot change with override on JVM

The change in StackValue relates to call sites of properties which return Unit:
in that case StackValue's this.type is V, whereas the return type of its getter
is Ljet/Unit; -- so coerceTo was coercing from the wrong type in case of getter
calls

 #KT-4373 Fixed
 #KT-4383 Fixed
This commit is contained in:
Alexander Udalov
2014-01-13 21:23:38 +04:00
parent b92e121458
commit 7041a10ecf
7 changed files with 86 additions and 11 deletions
@@ -0,0 +1,16 @@
class D {
fun get(a: Any, p: PropertyMetadata) { }
}
object P {
val u = Unit.VALUE
val v by D()
var w = Unit.VALUE
}
fun box(): String {
if (P.u != P.v) return "Fail uv"
P.w = Unit.VALUE
if (P.w != P.u) return "Fail w"
return "OK"
}