blob: 37d8a425d5ff3646c054a7013466f85730d6ed04 (
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
|
object Trace {
private var results = List[Any]()
def apply[A](a: A) = {results ::= a; a}
def fetchAndClear(): Seq[Any] = try results.reverse finally results = Nil
}
trait T(a: Any) {
val ta = a
Trace(s"T.<init>($ta)")
val t_val = Trace("T.val")
}
trait U(a: Any) extends T {
val ua = a
Trace(s"U.<init>($ua)")
}
object Test {
def check(expected: Any) = {
val actual = Trace.fetchAndClear()
if (actual != expected)
sys.error(s"\n$actual\n$expected")
}
def main(args: Array[String]): Unit = {
new T(Trace("ta")) with U(Trace("ua")) {}
check(List("ta", "T.<init>(ta)", "T.val", "ua", "U.<init>(ua)"))
new U(Trace("ua")) with T(Trace("ta")) {}
check(List("ta", "T.<init>(ta)", "T.val", "ua", "U.<init>(ua)"))
}
}
|