blob: 6fef8ae9126caeb9c6a2166787535d06fb870738 (
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
|
import annotation.tailrec
object Test {
def a(): Option[String] = Some("a")
def test1: Any = {
a() match {
case Some(b1) =>
a() match {
case Some(b2) =>
@tailrec
def tick(i: Int): Unit = if (i < 0) () else tick(i - 1)
tick(10000000) // testing that this doesn't SOE
case None => None
}
case None => None
}
}
def test2: Any = {
a() match {
case Some(b1) =>
a() match {
case Some(b2) =>
@tailrec
def tick(i: Int): Unit = if (i < 0) () else tick(i - 1)
tick(10000000) // testing that this doesn't SOE
case None => test1
}
case None =>
test1 // not a tail call
test1
}
}
def main(args: Array[String]) {
test1
test2
}
}
|