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:
@@ -0,0 +1,3 @@
|
||||
function createWrongObject() {
|
||||
return new (JS_TESTS.foo.C);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package foo
|
||||
|
||||
open class A
|
||||
|
||||
class B : A()
|
||||
|
||||
class C
|
||||
|
||||
fun box(): String {
|
||||
var b: B = createWrongObject()
|
||||
if (b is A) return "fail1: is"
|
||||
if (b as? A != null) return "fail1: as?"
|
||||
try {
|
||||
println(b as A)
|
||||
return "fail1: as"
|
||||
}
|
||||
catch (e: ClassCastException) {
|
||||
// It's expected
|
||||
}
|
||||
|
||||
b = B()
|
||||
if (b !is A) return "fail2: is"
|
||||
if (b as? A == null) return "fail2: as?"
|
||||
try {
|
||||
if ((b as A) != b) return "fail2: as"
|
||||
}
|
||||
catch (e: ClassCastException) {
|
||||
return "fail2a: as"
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
external fun createWrongObject(): B
|
||||
Reference in New Issue
Block a user