blob: 0bc249aa98663d8cf8c7a77aa844ad57448684e2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import scala.annotation.tailrec
class TailRec {
def bar(f: => Any) = ""
// transform the qualifier of a Select
bar {
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
}.length
// transform the body of a function
() => {
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
}
// transform the qualifier of a Select
{
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
""
}.length
// The receiver of a tail recursive call must itself be transformed
object X {
@tailrec // okay, all other annotated methods should fail.
def foo: Any = {
{
@tailrec def inner(i: Int): Int = 1 + inner(i)
inner(0)
this
}.foo
}
}
Some(new AnyRef) map { phooie =>
@tailrec
def inner(i: Int): Int = 1 + inner(i)
} getOrElse 42
}
|