diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-06-25 09:40:46 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-07-13 15:31:15 +0200 |
commit | 9185428b63b138f8c05ade5592e59956296b5128 (patch) | |
tree | 6497129872b012cdbede8362ce7c0af1906198b7 | |
parent | d8985603b5d670414ea7844a628168f92a09c402 (diff) | |
download | dotty-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.scala | 2 | ||||
-rw-r--r-- | tests/run/value-class-extractor.scala | 2 |
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 |