diff options
Diffstat (limited to 'test/files/neg/tailrec.scala')
-rw-r--r-- | test/files/neg/tailrec.scala | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/test/files/neg/tailrec.scala b/test/files/neg/tailrec.scala index 4c45672f93..a77f439cfe 100644 --- a/test/files/neg/tailrec.scala +++ b/test/files/neg/tailrec.scala @@ -1,53 +1,65 @@ import scala.annotation.tailrec // putting @tailrec through the paces -object Main { - @tailrec - def facfail(n: Int): Int = - if (n == 0) 1 - else n * facfail(n - 1) - +object Winners { @tailrec def facsucc(n: Int, acc: Int): Int = if (n == 0) acc else facsucc(n - 1, n * acc) - @tailrec def loopy1(x: Int): Int = loopy1(x - 1) + @tailrec def loopsucc1(x: Int): Int = loopsucc1(x - 1) + @tailrec def loopsucc2[T](x: Int): Int = loopsucc2[T](x - 1) def ding { object dong { - @tailrec def loopy2(x: Int): Int = loopy2(x) + @tailrec def loopsucc3(x: Int): Int = loopsucc3(x) } () } def inner(q: Int) = { @tailrec - def loopy3(x: Int): Int = loopy3(x + 1) + def loopsucc4(x: Int): Int = loopsucc4(x + 1) - loopy3(q) + loopsucc4(q) + } + + object innerBob { + @tailrec def loopsucc5(x: Int): Int = loopsucc5(x) } } -class Bob { - // these should work +class Winners { @tailrec private def succ1(x: Int): Int = succ1(x) @tailrec final def succ2(x: Int): Int = succ2(x) @tailrec final def succ3[T](in: List[T], acc: List[T]): List[T] = in match { case Nil => Nil case x :: xs => succ3(xs, x :: acc) } +} +object Failures { + @tailrec + def facfail(n: Int): Int = + if (n == 0) 1 + else n * facfail(n - 1) +} + +class Failures { // not private, not final @tailrec def fail1(x: Int): Int = fail1(x) // a typical between-chair-and-keyboard error - @tailrec def fail2[T](xs: List[T]): List[T] = xs match { + @tailrec final def fail2[T](xs: List[T]): List[T] = xs match { case Nil => Nil - case x :: xs => x :: fail2(xs) + case x :: xs => x :: fail2[T](xs) } - object innerBob { - @tailrec def succ4(x: Int): Int = succ4(x) + // unsafe + @tailrec final def fail3[T](x: Int): Int = fail3(x - 1) + + // unsafe + class Tom[T](x: Int) { + @tailrec final def fail4[U](other: Tom[U], x: Int): Int = other.fail4[U](other, x - 1) } } |