aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliu fengyun <liu@fengy.me>2017-04-13 15:02:03 +0200
committerGitHub <noreply@github.com>2017-04-13 15:02:03 +0200
commitde6461ab17562dbb46a1ff094590e051d03cb54c (patch)
treedee86654f0cdd228730676e6ba7668ce6d12e4da
parent195fe4a475b7f35fba09af6126a205a959bb284d (diff)
parent15e8d83a377398c9c13a5319a23645d10b14579a (diff)
downloaddotty-de6461ab17562dbb46a1ff094590e051d03cb54c.zip
dotty-de6461ab17562dbb46a1ff094590e051d03cb54c.tar.gz
dotty-de6461ab17562dbb46a1ff094590e051d03cb54c.tar.bz2
Merge pull request #2256 from dotty-staging/fix-2254
fix #2254: dealias types in decomposition of spaces
-rw-r--r--compiler/src/dotty/tools/dotc/transform/patmat/Space.scala4
-rw-r--r--tests/patmat/i2254.scala6
2 files changed, 8 insertions, 2 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/patmat/Space.scala b/compiler/src/dotty/tools/dotc/transform/patmat/Space.scala
index baf1ae3..229545a 100644
--- a/compiler/src/dotty/tools/dotc/transform/patmat/Space.scala
+++ b/compiler/src/dotty/tools/dotc/transform/patmat/Space.scala
@@ -324,7 +324,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
debug.println(s"candidates for ${tp.show} : [${children.map(_.show).mkString(", ")}]")
- tp match {
+ tp.dealias match {
case OrType(tp1, tp2) => List(Typ(tp1, true), Typ(tp2, true))
case _ if tp =:= ctx.definitions.BooleanType =>
List(
@@ -379,7 +379,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
def canDecompose(tp: Type): Boolean = {
val res = tp.classSymbol.is(allOf(Abstract, Sealed)) ||
tp.classSymbol.is(allOf(Trait, Sealed)) ||
- tp.isInstanceOf[OrType] ||
+ tp.dealias.isInstanceOf[OrType] ||
tp =:= ctx.definitions.BooleanType ||
tp.classSymbol.is(allOf(Enum, Sealed)) // Enum value doesn't have Sealed flag
diff --git a/tests/patmat/i2254.scala b/tests/patmat/i2254.scala
new file mode 100644
index 0000000..23dd8ad
--- /dev/null
+++ b/tests/patmat/i2254.scala
@@ -0,0 +1,6 @@
+object Test {
+ type OrAlias = Int | Float
+
+ def m(s: OrAlias | String) = s match {
+ case _: Int => ; case _: Float => ; case _: String => ; }
+} \ No newline at end of file