blob: 2ae1544e54a70c2e7fcec4dc2f790fe57b8a64f8 (
plain) (
tree)
|
|
import scala.annotation.switch
object Test extends dotty.runtime.LegacyApp {
def noSwitch(ch: Char, eof: Boolean) = ch match {
case 'a' if eof => println("a with oef") // then branch
}
def onlyThen(ch: Char, eof: Boolean) = ch match {
case 'a' if eof => println("a with oef") // then branch
case 'c' =>
}
def ifThenElse(ch: Char, eof: Boolean) = (ch: @switch) match {
case 'a' if eof => println("a with oef") // then branch
case 'a' if eof => println("a with oef2") // unreachable, but the analysis is not that sophisticated
case 'a' => println("a") // else-branch
case 'c' =>
}
def defaultUnguarded(ch: Char, eof: Boolean) = ch match {
case ' ' if eof => println("spacey oef")
case _ => println("default")
}
def defaults(ch: Char, eof: Boolean) = (ch: @switch) match {
case _ if eof => println("def with oef") // then branch
case _ if eof => println("def with oef2") // unreachable, but the analysis is not that sophisticated
case _ => println("def") // else-branch
}
// test binders in collapsed cases (no need to run, it's "enough" to know it doesn't crash the compiler)
def guard(x: Any): Boolean = true
def testBinders =
try { println("") } // work around SI-6015
catch {
case _ if guard(null) =>
case x if guard(x) => throw x
}
// def unreachable(ch: Char) = (ch: @switch) match {
// case 'a' => println("b") // ok
// case 'a' => println("b") // unreachable
// case 'c' =>
// }
noSwitch('a', true)
onlyThen('a', true) // 'a with oef'
ifThenElse('a', true) // 'a with oef'
ifThenElse('a', false) // 'a'
defaults('a', true) // 'def with oef'
defaults('a', false) // 'def'
// test that it jumps to default case, no match error
defaultUnguarded(' ', false) // default
}
|