blob: 30eb15b4a5a6887d4e06bc5f6a5762dee84edbaa [file] [log] [blame]
abstract class A @CompileTimeCalculation constructor() {
@CompileTimeCalculation
abstract fun getInt(): Int
}
open class B @CompileTimeCalculation constructor(@CompileTimeCalculation val b: Int) : A() {
@CompileTimeCalculation
override fun getInt(): Int {
return b
}
}
abstract class C @CompileTimeCalculation constructor(@CompileTimeCalculation val c: Int) : B(c + 1) {
@CompileTimeCalculation
abstract fun getString(): String
}
class D @CompileTimeCalculation constructor(@CompileTimeCalculation val d: Int) : C(d + 1) {
@CompileTimeCalculation
override fun getString(): String {
return d.toString()
}
}
@CompileTimeCalculation
fun getClassDAsA(num: Int): A {
return D(num)
}
@CompileTimeCalculation
fun getClassDAsB(num: Int): B {
return D(num)
}
@CompileTimeCalculation
fun getClassDAsC(num: Int): C {
return D(num)
}
@CompileTimeCalculation
fun getClassDAsD(num: Int): D {
return D(num)
}
const val numA1 = <!EVALUATED: `3`!>getClassDAsA(1).getInt()<!>
const val numB1 = <!EVALUATED: `3`!>getClassDAsB(1).getInt()<!>
const val numC1 = <!EVALUATED: `3`!>getClassDAsC(1).getInt()<!>
const val numC2 = <!EVALUATED: `1`!>getClassDAsC(1).getString()<!>
const val numD1 = <!EVALUATED: `3`!>getClassDAsD(1).getInt()<!>
const val numD2 = <!EVALUATED: `1`!>getClassDAsD(1).getString()<!>