diff --git a/compiler/src/dotty/tools/dotc/typer/RefChecks.scala b/compiler/src/dotty/tools/dotc/typer/RefChecks.scala index 1397b05ec3b5..cdfd137e5661 100644 --- a/compiler/src/dotty/tools/dotc/typer/RefChecks.scala +++ b/compiler/src/dotty/tools/dotc/typer/RefChecks.scala @@ -52,7 +52,7 @@ object RefChecks { }} for (name <- defaultMethodNames) { - val methods = clazz.info.member(name).alternatives.map(_.symbol) + val methods = clazz.thisType.member(name).alternatives.map(_.symbol) val haveDefaults = methods.filter(_.hasDefaultParams) if (haveDefaults.length > 1) { val owners = haveDefaults map (_.owner) diff --git a/tests/pos/first-class-patterns.scala b/tests/pos/first-class-patterns.scala new file mode 100644 index 000000000000..98d7faf4d8e7 --- /dev/null +++ b/tests/pos/first-class-patterns.scala @@ -0,0 +1,23 @@ + + // Trait of all extractors with unapply methods + trait Matcher[A, B]: + def unapply(x: A): Option[B] + + // An extractor defined by an unappy method + object Even extends Matcher[Int, Int]: + def unapply(x: Int): Option[Int] = + if x % 2 == 0 then Some(x) else None + + // Method using a given extractor in pattern position + def collect[A, B](xs: List[A], m: Matcher[A, B]): List[B] = + xs match + case Nil => Nil + case m(x) :: xs1 => x :: collect(xs1, m) + case _ :: xs1 => collect(xs1, m) + + @main def test = + val xs = List(1, 2, 3, 4) + val ys = collect(xs, Even) + println(ys) + + diff --git a/tests/pos/i18555.scala b/tests/pos/i18555.scala new file mode 100644 index 000000000000..84198409370e --- /dev/null +++ b/tests/pos/i18555.scala @@ -0,0 +1,14 @@ +trait GenericCollectionWithCommands { + self: PackSupport => + + def bar(foo: Int = 1): Any = ??? + def bar(writer: GenericCollectionWithCommands.this.pack.Writer[Any]): Any = ??? +} + +trait PackSupport { + val pack: SerializationPack +} + +trait SerializationPack { + type Writer[A] +} \ No newline at end of file diff --git a/tests/pos/into-bigint.scala b/tests/pos/into-bigint.scala new file mode 100644 index 000000000000..d7ecee40b3ba --- /dev/null +++ b/tests/pos/into-bigint.scala @@ -0,0 +1,21 @@ +import language.experimental.into + +class BigInt(x: Int): + def + (other: into BigInt): BigInt = ??? + def * (other: into BigInt): BigInt = ??? + +object BigInt: + given Conversion[Int, BigInt] = BigInt(_) + + extension (x: into BigInt) + def + (other: BigInt): BigInt = ??? + def * (other: BigInt): BigInt = ??? + +@main def Test = + val x = BigInt(2) + val y = 3 + val a1 = x + y + val a2 = y * x + val a3 = x * x + val a4 = y + y +