@@ -3165,7 +3165,8 @@ tasks.register("vararg_of_literals", KonanLocalTest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
standaloneTest('tailrec') {
|
standaloneTest('tailrec') {
|
||||||
disabled = isAggressiveGC // TODO: Investigate why too slow
|
disabled = isAggressiveGC || // TODO: Investigate why too slow
|
||||||
|
isK2(project) // KT-56269
|
||||||
useGoldenData = true
|
useGoldenData = true
|
||||||
source = "lower/tailrec.kt"
|
source = "lower/tailrec.kt"
|
||||||
flags = ['-XXLanguage:-ProhibitTailrecOnVirtualMember', '-e', 'lower.tailrec.main']
|
flags = ['-XXLanguage:-ProhibitTailrecOnVirtualMember', '-e', 'lower.tailrec.main']
|
||||||
|
|||||||
@@ -18,6 +18,12 @@ fun main() {
|
|||||||
|
|
||||||
println(listOf(1, 2, 3).indexOf(3))
|
println(listOf(1, 2, 3).indexOf(3))
|
||||||
println(listOf(1, 2, 3).indexOf(4))
|
println(listOf(1, 2, 3).indexOf(4))
|
||||||
|
|
||||||
|
println(Integer(5).isLessOrEqualThan(7))
|
||||||
|
println(Integer(42).isLessOrEqualThan(1))
|
||||||
|
|
||||||
|
println(DefaultArgGetter().foo("non-default"))
|
||||||
|
println(EitherDelegatedOrNot(NotDelegated()).get42())
|
||||||
}
|
}
|
||||||
|
|
||||||
tailrec fun add(x: Int, y: Int): Int = if (x > 0) add(x - 1, y + 1) else y
|
tailrec fun add(x: Int, y: Int): Int = if (x > 0) add(x - 1, y + 1) else y
|
||||||
@@ -55,3 +61,37 @@ tailrec fun <T> List<T>.indexOf(x: T, startIndex: Int = 0): Int {
|
|||||||
return startIndex
|
return startIndex
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open class Integer(val value: Int) {
|
||||||
|
open tailrec fun isLessOrEqualThan(value: Int): Boolean {
|
||||||
|
if (this.value == value) {
|
||||||
|
return true
|
||||||
|
} else if (value > 0) {
|
||||||
|
return this.isLessOrEqualThan(value - 1)
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open class DefaultArgHolder {
|
||||||
|
open fun foo(s: String = "default") = s
|
||||||
|
}
|
||||||
|
|
||||||
|
class DefaultArgGetter : DefaultArgHolder() {
|
||||||
|
override tailrec fun foo(s: String): String {
|
||||||
|
return if (s == "default") s else foo()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open class EitherDelegatedOrNot(val delegate: EitherDelegatedOrNot?) {
|
||||||
|
open tailrec fun get42(): Int = if (delegate != null) {
|
||||||
|
delegate.get42()
|
||||||
|
} else {
|
||||||
|
throw Error()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotDelegated : EitherDelegatedOrNot(null) {
|
||||||
|
override fun get42() = 42
|
||||||
|
}
|
||||||
@@ -8,3 +8,7 @@
|
|||||||
ready!
|
ready!
|
||||||
2
|
2
|
||||||
-1
|
-1
|
||||||
|
true
|
||||||
|
false
|
||||||
|
default
|
||||||
|
42
|
||||||
|
|||||||
Reference in New Issue
Block a user