blob: c5b8811449bf2b1c862e5a543a06e2e6c1d688d6 (
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
|
// this class's bytecode, compiled under -optimize is analyzed by the test
// method a's bytecode should be identical to method b's bytecode
class SameBytecode {
case class Foo(x: Int, y: String)
def a =
Foo(1, "a") match {
case Foo(_: Int, y) => y
}
// this method's body holds the tree that should be generated by the pattern matcher for method a (-Xprint:patmat)
// the test checks that bytecode for a and b is identical (modulo line numbers)
// we can't diff trees as they are quite different (patmat uses jumps to labels that cannot be expressed in source, for example)
// note that the actual tree is quite bad: we do an unnecessary null check, and local val (x3)
// some of these will be fixed soon (the initial null check is for the scrutinee, which is harder to fix in patmat)
def b: String = {
val x1 = Foo(1, "a")
if (x1.ne(null)) {
val x3 = x1.x
return x1.y
}
throw new MatchError(x1)
}
}
|