blob: 96e704768d744512bc1b4b70302c28029a422ef2 [file] [log] [blame]
@CompileTimeCalculation
abstract class BaseIterator(var baseStart: Int) {
fun baseNext(): Int {
baseStart += 1
return base()
}
abstract fun base(): Int
}
@CompileTimeCalculation
abstract class ComplexIterator(var complexStart: Int) : BaseIterator(complexStart) {
fun complexNext() = abstractCall()
private fun abstractCall(): Int {
complexStart *= 2
return complex() + baseNext()
}
abstract fun complex(): Int
}
@CompileTimeCalculation
class ImplementIterator constructor(val i: Int) : ComplexIterator(i) {
override fun complex(): Int {
return complexStart
}
override fun base(): Int {
return baseStart
}
}
@CompileTimeCalculation
fun getIterator(i: Int): ComplexIterator = ImplementIterator(i)
const val next = <!EVALUATED: `31`!>getIterator(10).complexNext()<!>