diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/TastyImpl.scala b/compiler/src/dotty/tools/dotc/tastyreflect/TastyImpl.scala index e6efd764dbee..d28b90503a5d 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/TastyImpl.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/TastyImpl.scala @@ -488,7 +488,8 @@ object TastyImpl extends scala.tasty.Tasty { object Unapply extends UnapplyExtractor { def unapply(x: Pattern)(implicit ctx: Context): Option[(Term, List[Term], List[Pattern])] = x match { - case x: tpd.UnApply @unchecked => Some(x.fun, x.implicits, x.patterns) + case Trees.UnApply(fun, implicits, patterns) => Some((fun, implicits, patterns)) + case Trees.Typed(Trees.UnApply(fun, implicits, patterns), _) => Some((fun, implicits, patterns)) case _ => None } } @@ -502,7 +503,8 @@ object TastyImpl extends scala.tasty.Tasty { object TypeTest extends TypeTestExtractor { def unapply(x: Pattern)(implicit ctx: Context): Option[TypeTree] = x match { - case x: tpd.Typed @unchecked => Some(x.tpt) + case Trees.Typed(Trees.UnApply(_, _, _), _) => None + case Trees.Typed(_, tpt) => Some(tpt) case _ => None } } diff --git a/library/src/scala/tasty/util/ShowSourceCode.scala b/library/src/scala/tasty/util/ShowSourceCode.scala index 07265e834e90..f58e6d3422c7 100644 --- a/library/src/scala/tasty/util/ShowSourceCode.scala +++ b/library/src/scala/tasty/util/ShowSourceCode.scala @@ -540,7 +540,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty printTypeTree(tpt) case Pattern.Bind(name, pattern) => - this += name += "@ " + this += name += " @ " printPattern(pattern) case Pattern.Unapply(fun, implicits, patterns) => diff --git a/tests/pos/simpleExractors.decompiled b/tests/pos/simpleExtractors-1.decompiled similarity index 70% rename from tests/pos/simpleExractors.decompiled rename to tests/pos/simpleExtractors-1.decompiled index e432e5a99d65..dc23b0998dc3 100644 --- a/tests/pos/simpleExractors.decompiled +++ b/tests/pos/simpleExtractors-1.decompiled @@ -1,20 +1,20 @@ -/** Decompiled from out/posTestFromTasty/pos/simpleExractors/Bar.class */ +/** Decompiled from out/posTestFromTasty/pos/simpleExtractors-1/Bar.class */ object Bar { def unapply(arg: scala.Any): scala.Option[scala.Any] = scala.Some.apply[scala.Any](arg) } -/** Decompiled from out/posTestFromTasty/pos/simpleExractors/BarSeq.class */ +/** Decompiled from out/posTestFromTasty/pos/simpleExtractors-1/BarSeq.class */ object BarSeq { def unapplySeq(arg: scala.Any): scala.Option[scala.Seq[scala.Any]] = scala.Some.apply[collection.immutable.List[scala.Any]](scala.List.apply[scala.Any](arg)) } -/** Decompiled from out/posTestFromTasty/pos/simpleExractors/Baz.class */ +/** Decompiled from out/posTestFromTasty/pos/simpleExtractors-1/Baz.class */ object Baz { def unapply[T](arg: T): scala.Option[T] = scala.Some.apply[T](arg) } -/** Decompiled from out/posTestFromTasty/pos/simpleExractors/BazSeq.class */ +/** Decompiled from out/posTestFromTasty/pos/simpleExtractors-1/BazSeq.class */ object BazSeq { def unapplySeq[T](arg: T): scala.Option[scala.Seq[T]] = scala.Some.apply[collection.immutable.List[T]](scala.List.apply[T](arg)) } -/** Decompiled from out/posTestFromTasty/pos/simpleExractors/Foo.class */ +/** Decompiled from out/posTestFromTasty/pos/simpleExtractors-1/Foo.class */ class Foo() { def bar(x: scala.Any): scala.Unit = x match { case Bar(a) => diff --git a/tests/pos/simpleExractors.scala b/tests/pos/simpleExtractors-1.scala similarity index 100% rename from tests/pos/simpleExractors.scala rename to tests/pos/simpleExtractors-1.scala diff --git a/tests/pos/simpleExtractors-2.decompiled b/tests/pos/simpleExtractors-2.decompiled new file mode 100644 index 000000000000..ab13e08134a6 --- /dev/null +++ b/tests/pos/simpleExtractors-2.decompiled @@ -0,0 +1,11 @@ +/** Decompiled from out/posTestFromTasty/pos/simpleExtractors-2/Foo.class */ +class Foo() { + def bar(x: scala.Any): scala.Unit = x match { + case scala.Some(scala.Some(i: scala.Int)) => + scala.Predef.println(i) + case scala.Some(s @ scala.Some(i)) => + scala.Predef.println(s) + case s @ scala.Some(r @ scala.Some(i)) => + scala.Predef.println(s) + } +} diff --git a/tests/pos/simpleExtractors-2.scala b/tests/pos/simpleExtractors-2.scala new file mode 100644 index 000000000000..ad9d165aa37c --- /dev/null +++ b/tests/pos/simpleExtractors-2.scala @@ -0,0 +1,7 @@ +class Foo { + def bar(x: Any): Unit = x match { + case Some(Some(i: Int)) => println(i) + case Some(s @ Some(i)) => println(s) + case s @ Some(r @ Some(i)) => println(s) + } +}