Files
kotlin-fork/compiler/testData/codegen/box/involvesIrInterpreter/intrinsicConst/kCallableNameWithSideEffect.kt
T
Ivan Kylchik 70560fc3eb [IR] Handle each interpreter checker one by one
This wy we can interpret all expressions like `A::a.name` at first and
after that evaluate all complex expressions like
`A::a.name + A::b.name`.
2023-05-18 18:16:54 +00:00

43 lines
1.0 KiB
Kotlin
Vendored

// !LANGUAGE: +IntrinsicConstEvaluation
// TARGET_BACKEND: JVM_IR
// WITH_STDLIB
fun <T> T.id() = this
class A {
val a = ""
fun b() = ""
init {
println("A init")
}
fun test() {
val a = A::a.<!EVALUATED("a")!>name<!>
val b = A::b.<!EVALUATED("b")!>name<!>
val c = ::A.<!EVALUATED("<init>")!>name<!>
val d = this::a.<!EVALUATED("a")!>name<!>
val e = A()::b.<!EVALUATED("b")!>name<!>
val f = getA()::b.<!EVALUATED("b")!>name<!>
val temp = A()
val g = temp::b.<!EVALUATED("b")!>name<!>
val insideStringConcat = "${temp::b.<!EVALUATED("b")!>name<!>}"
val complexExpression1 = A()::a.<!EVALUATED("a")!>name<!> + A()::b.<!EVALUATED("b")!>name<!>
val complexExpression2 = A::a.<!EVALUATED("a")!>name<!> <!EVALUATED("ab")!>+ A::b.<!EVALUATED("b")!>name<!><!>
var recursive = ::test.<!EVALUATED("test")!>name<!>
}
fun getA(): A = A()
}
// STOP_EVALUATION_CHECKS
fun box(): String {
A().test()
return "OK"
}