43 lines
957 B
Kotlin
Vendored
43 lines
957 B
Kotlin
Vendored
interface A {
|
|
@CompileTimeCalculation
|
|
fun getStr(): String
|
|
}
|
|
|
|
interface B : A {
|
|
@CompileTimeCalculation
|
|
fun getInt(): Int
|
|
}
|
|
|
|
class C @CompileTimeCalculation constructor(@CompileTimeCalculation val num: Int) : B {
|
|
@CompileTimeCalculation
|
|
override fun getStr(): String {
|
|
return num.toString()
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
override fun getInt(): Int {
|
|
return num
|
|
}
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
fun getClassAsA(num: Int): A {
|
|
return C(num)
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
fun getClassAsB(num: Int): B {
|
|
return C(num)
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
fun getClassAsC(num: Int): C {
|
|
return C(num)
|
|
}
|
|
|
|
const val num1 = <!EVALUATED: `1`!>getClassAsA(1).getStr()<!>
|
|
const val num2 = <!EVALUATED: `2`!>getClassAsB(2).getStr()<!>
|
|
const val num3 = <!EVALUATED: `3`!>getClassAsB(3).getInt()<!>
|
|
const val num4 = <!EVALUATED: `4`!>getClassAsC(4).getStr()<!>
|
|
const val num5 = <!EVALUATED: `5`!>getClassAsC(5).getInt()<!>
|