Files

125 lines
4.1 KiB
Kotlin
Vendored

// IGNORE_BACKEND: JS_IR, JS_IR_ES6
// DONT_TARGET_EXACT_BACKEND: JS
var demoCallCounter = 0
fun flushDemoCallCounter() = demoCallCounter.also { demoCallCounter = 0 }
fun demo(): Unit { ++demoCallCounter }
inline fun inlineDemo(): Unit {
demo()
}
// CHECK_CALLED_IN_SCOPE: scope=testUsualCall function=Unit_getInstance
fun testUsualCall() {
val x = demo()
assertEquals(flushDemoCallCounter(), 1)
assertEquals(x.toString(), "kotlin.Unit")
}
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallNoVar function=Unit_getInstance
fun testUsualCallNoVar() {
demo()
assertEquals(flushDemoCallCounter(), 1)
}
// CHECK_CALLED_IN_SCOPE: scope=testUsualCallInReturn function=Unit_getInstance
fun testUsualCallInReturn() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallInReturn$test function=Unit_getInstance
fun test() { return demo() }
val x = test()
assertEquals(flushDemoCallCounter(), 1)
assertEquals(x.toString(), "kotlin.Unit")
}
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallInReturnNoVar function=Unit_getInstance
fun testUsualCallInReturnNoVar() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallInReturnNoVar$test function=Unit_getInstance
fun test() { return demo() }
test()
assertEquals(flushDemoCallCounter(), 1)
}
// CHECK_CALLED_IN_SCOPE: scope=testUsualCallInExpressionBody function=Unit_getInstance
fun testUsualCallInExpressionBody() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallInExpressionBody$test function=Unit_getInstance
fun test() = demo()
val x = test()
assertEquals(flushDemoCallCounter(), 1)
assertEquals(x.toString(), "kotlin.Unit")
}
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallInExpressionBodyNoVar function=Unit_getInstance
fun testUsualCallInExpressionBodyNoVar() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallInExpressionBodyNoVar$test function=Unit_getInstance
fun test() = demo()
test()
assertEquals(flushDemoCallCounter(), 1)
}
// CHECK_CALLED_IN_SCOPE: scope=testInlineCall function=Unit_getInstance
fun testInlineCall() {
val x = inlineDemo()
assertEquals(flushDemoCallCounter(), 1)
assertEquals(x.toString(), "kotlin.Unit")
}
// CHECK_NOT_CALLED_IN_SCOPE: scope=testUsualCallNoVar function=Unit_getInstance
fun testInlineCallNoVar() {
inlineDemo()
assertEquals(flushDemoCallCounter(), 1)
}
// CHECK_CALLED_IN_SCOPE: scope=testInlineCallInReturn function=Unit_getInstance
fun testInlineCallInReturn() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testInlineCallInReturn$test function=Unit_getInstance
fun test() { return inlineDemo() }
val x = test()
assertEquals(flushDemoCallCounter(), 1)
assertEquals(x.toString(), "kotlin.Unit")
}
// CHECK_NOT_CALLED_IN_SCOPE: scope=testInlineCallInReturnNoVar function=Unit_getInstance
fun testInlineCallInReturnNoVar() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testInlineCallInReturnNoVar$test function=Unit_getInstance
fun test() { return inlineDemo() }
test()
assertEquals(flushDemoCallCounter(), 1)
}
// CHECK_CALLED_IN_SCOPE: scope=testInlineCallInExpressionBody function=Unit_getInstance
fun testInlineCallInExpressionBody() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testInlineCallInExpressionBody$test function=Unit_getInstance
fun test() = inlineDemo()
val x = test()
assertEquals(flushDemoCallCounter(), 1)
assertEquals(x.toString(), "kotlin.Unit")
}
// CHECK_NOT_CALLED_IN_SCOPE: scope=testInlineCallInExpressionBodyNoVar function=Unit_getInstance
fun testInlineCallInExpressionBodyNoVar() {
// CHECK_NOT_CALLED_IN_SCOPE: scope=testInlineCallInExpressionBodyNoVar$test function=Unit_getInstance
fun test() = inlineDemo()
test()
assertEquals(flushDemoCallCounter(), 1)
}
fun box(): String {
testUsualCall()
testUsualCallNoVar()
testUsualCallInReturn()
testUsualCallInReturnNoVar()
testUsualCallInExpressionBody()
testUsualCallInExpressionBodyNoVar()
testInlineCall()
testInlineCallNoVar()
testInlineCallInReturn()
testInlineCallInReturnNoVar()
testInlineCallInExpressionBody()
testInlineCallInExpressionBodyNoVar()
return "OK"
}