diff options
author | Paul Phillips <paulp@improving.org> | 2013-01-17 00:08:38 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-01-17 00:08:38 -0800 |
commit | b17980666d23250d70bdd5806370939384127945 (patch) | |
tree | 8a2f58470831af035cf4cbe443b855f30fdbe827 /src | |
parent | 6f3ea77870ab5e17805ef0fc338c251e87870b8c (diff) | |
parent | ce563164a3e64d8a7a5ca1f49dd62377d603b5d9 (diff) | |
download | scala-b17980666d23250d70bdd5806370939384127945.tar.gz scala-b17980666d23250d70bdd5806370939384127945.tar.bz2 scala-b17980666d23250d70bdd5806370939384127945.zip |
Merge pull request #1905 from adriaanm/ticket-6956
SI-6956 determine switchability by type, not tree
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala b/src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala index d8cfd5a765..f1c70f46d8 100644 --- a/src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala +++ b/src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala @@ -3494,8 +3494,10 @@ trait PatternMatching extends Transform with TypingTransformers with ast.TreeDSL val alternativesSupported = true val canJump = true - object SwitchablePattern { def unapply(pat: Tree): Option[Tree] = pat match { - case Literal(const@Constant((_: Byte ) | (_: Short) | (_: Int ) | (_: Char ))) => + // Constant folding sets the type of a constant tree to `ConstantType(Constant(folded))` + // The tree itself can be a literal, an ident, a selection, ... + object SwitchablePattern { def unapply(pat: Tree): Option[Tree] = pat.tpe match { + case ConstantType(const) if const.isIntRange => Some(Literal(Constant(const.intValue))) // TODO: Java 7 allows strings in switches case _ => None }} |