Files
kotlin-fork/js/js.translator/testData/box/safeCall/safeCallAndSideEffect.kt
T
2018-09-12 09:49:25 +03:00

80 lines
1.5 KiB
Kotlin
Vendored

// EXPECTED_REACHABLE_NODES: 1299
package foo
var c1 = 0
var c2 = 0
var c3 = 0
var c4 = 0
var c5 = 0
fun toStr(): String {
return "$c1$c2$c3$c4$c5"
}
fun getA(): A? {
c1++
return A()
}
fun getNullA(): A? {
c1++
return null
}
class A {
fun someFun(): Int {
c2++
return 1
}
val b: B
get() {
c3++
return B()
}
}
fun A.extFun(): Int {
c4++
return 3
}
class B {
operator fun invoke(): Int {
c5++
return 2
}
}
fun box(): String {
val n1 = getNullA()?.someFun()
if (n1 != null || toStr() != "10000") {
return "Bad call getNullA()?.someFun(). result: $n1, counters: ${toStr()}"
}
val n2 = getNullA()?.b?.invoke()
if (n2 != null || toStr() != "20000") {
return "Bad call getNullA()?.b(). result: $n2, counters: ${toStr()}"
}
val n3 = getNullA()?.extFun()
if (n3 != null || toStr() != "30000") {
return "Bad call getNullA()?.extFun(). result: $n3, counters: ${toStr()}"
}
val i1 = getA()?.someFun()
if (i1 != 1 || toStr() != "41000") {
return "Bad call getA()?.someFun(). result: $i1, counters: ${toStr()}"
}
val i2 = getA()?.b?.invoke()
if (i2 != 2 || toStr() != "51101") {
return "Bad call getA()?.b(). result: $i2, counters: ${toStr()}"
}
val i3 = getA()?.extFun()
if (i3 != 3 || toStr() != "61111") {
return "Bad call getA()?.extFun(). result: $i3, counters: ${toStr()}"
}
return "OK"
}