aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/typer/Applications.scala4
-rw-r--r--tests/pos/i1318.scala38
2 files changed, 40 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/Applications.scala b/src/dotty/tools/dotc/typer/Applications.scala
index f743c5784..a9184c7e5 100644
--- a/src/dotty/tools/dotc/typer/Applications.scala
+++ b/src/dotty/tools/dotc/typer/Applications.scala
@@ -709,11 +709,11 @@ trait Applications extends Compatibility { self: Typer =>
// try first for non-overloaded, then for overloaded ocurrences
def tryWithName(name: TermName)(fallBack: Tree => Tree)(implicit ctx: Context): Tree =
tryEither {
- implicit ctx => typedExpr(untpd.Select(qual, name), genericProto)
+ implicit ctx => typedExpr(untpd.Select(qual, name), specificProto)
} {
(sel, _) =>
tryEither {
- implicit ctx => typedExpr(untpd.Select(qual, name), specificProto)
+ implicit ctx => typedExpr(untpd.Select(qual, name), genericProto)
} {
(_, _) => fallBack(sel)
}
diff --git a/tests/pos/i1318.scala b/tests/pos/i1318.scala
new file mode 100644
index 000000000..dfb882825
--- /dev/null
+++ b/tests/pos/i1318.scala
@@ -0,0 +1,38 @@
+object Foo {
+ class S(i: Int)
+ case class T(i: Int) extends S(i)
+
+ object T {
+ def unapply(s: S): Option[(Int, Int)] = Some(5, 6)
+ // def unapply(o: Object): Option[(Int, Int, Int)] = Some(5, 6, 7)
+ }
+
+ val s = new S(5)
+
+ s match {
+ // case T(x, y, z) => println(x + y + z)
+ case T(x, y) => println(x + y)
+ case T(x) => println(x)
+ case _ => println("not match")
+ }
+}
+
+object Bar {
+ case class T(i: Int)
+ class S(i: Int) extends T(i)
+
+ object T {
+ def unapply(s: S): Option[(Int, Int)] = Some(5, 6)
+ // def unapply(o: Object): Option[(Int, Int, Int)] = Some(5, 6, 7)
+ }
+
+ val s = new S(5)
+
+ s match {
+ // case T(x, y, z) => println(x + y + z)
+ case T(x, y) => println(x + y)
+ case T(x) => println(x)
+ case _ => println("not match")
+ }
+}
+