JS: add tests to prove that compiler does not optimize RTTI and safe calls based on type information. Remove corresponding optimization for !! operation. See KT-14033

This commit is contained in:
Alexey Andreev
2016-12-13 17:13:53 +03:00
parent e6501591fa
commit b21f906856
8 changed files with 86 additions and 14 deletions
@@ -0,0 +1,3 @@
function createWrongObject() {
return null
}
@@ -0,0 +1,32 @@
package foo
class A(val x: String) {
fun foo() = x
}
fun box(): String {
var b: A = createWrongObject()
if (b?.x != null) return "fail1: ?."
if (b?.foo() != null) return "fail1a: ?."
try {
println(b!!.x)
return "fail1: !!"
}
catch (e: NullPointerException) {
// It's expected
}
b = A("OK")
if (b?.x != "OK") return "fail2: ?."
if (b?.foo() != "OK") return "fail2a: ?."
try {
if (b!!.x != "OK") return "fail2: !!"
}
catch (e: NullPointerException) {
return "fail2a: !!"
}
return "OK"
}
external fun createWrongObject(): A