aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-06-25 09:40:46 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-07-13 15:31:15 +0200
commit9185428b63b138f8c05ade5592e59956296b5128 (patch)
tree6497129872b012cdbede8362ce7c0af1906198b7
parentd8985603b5d670414ea7844a628168f92a09c402 (diff)
downloaddotty-9185428b63b138f8c05ade5592e59956296b5128.tar.gz
dotty-9185428b63b138f8c05ade5592e59956296b5128.tar.bz2
dotty-9185428b63b138f8c05ade5592e59956296b5128.zip
Fix ClassCastException in patmat when using Product1.
-rw-r--r--src/dotty/tools/dotc/transform/PatternMatcher.scala2
-rw-r--r--tests/run/value-class-extractor.scala2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/PatternMatcher.scala b/src/dotty/tools/dotc/transform/PatternMatcher.scala
index af8da01ff..47643f395 100644
--- a/src/dotty/tools/dotc/transform/PatternMatcher.scala
+++ b/src/dotty/tools/dotc/transform/PatternMatcher.scala
@@ -1443,7 +1443,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
// require (nbSubPats > 0 && (!lastIsStar || isSeq))
protected def subPatRefs(binder: Symbol): List[Tree] = {
val refs = if (totalArity > 0 && isSeq) subPatRefsSeq(binder)
- else if (totalArity > 1 && !isSeq) productElemsToN(binder, totalArity)
+ else if (defn.isProductSubType(binder.info) && !isSeq) productElemsToN(binder, totalArity)
else ref(binder):: Nil
refs
}
diff --git a/tests/run/value-class-extractor.scala b/tests/run/value-class-extractor.scala
index 5628fea47..07f32e0e5 100644
--- a/tests/run/value-class-extractor.scala
+++ b/tests/run/value-class-extractor.scala
@@ -6,7 +6,7 @@ object NonNullChar {
@inline final val None = new NonNullChar(0.toChar)
}
-final class SomeProduct /*extends Product3[String, Int, List[String]]*/ {
+final class SomeProduct extends Product3[String, Int, List[String]] {
def canEqual(x: Any) = x.isInstanceOf[SomeProduct]
def _1 = "abc"
def _2 = 5