aboutsummaryrefslogtreecommitdiff
path: root/tests/patmat/exhaustive_heuristics.scala
blob: 7d682f6aa457131f9b33d5203d1aeb4d86042376 (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
// tests exhaustivity doesn't give warnings (due to its heuristic rewrites kicking in or it backing off)
object Test {
  // List() => Nil
  List(1) match {
    case List() =>
    case x :: xs =>
  }

  // we don't look into guards
  val turnOffChecks = true
  List(1) match {
    case _ if turnOffChecks =>
  }

  // we back off when there are any user-defined extractors
  // in fact this is exhaustive, but we pretend we don't know since List's unapplySeq is not special to the compiler
  // to compensate our ignorance, we back off
  // well, in truth, we do rewrite List() to Nil, but otherwise we do nothing
  // the full rewrite List(a, b) to a :: b :: Nil, for example is planned (but not sure it's a good idea)
  List(true, false) match {
    case List(_, _, _:_*) =>
    case List(node, _:_*)  =>
    case Nil =>
  }

}