Skip to content

Commit

Permalink
Switch mapping of context bounds to using clauses in 3.6
Browse files Browse the repository at this point in the history
Was future before.
  • Loading branch information
odersky committed Jul 24, 2024
1 parent 0cf25db commit ba82d69
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 21 deletions.
2 changes: 1 addition & 1 deletion compiler/src/dotty/tools/dotc/ast/Desugar.scala
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ object desugar {
// implicit resolution in Scala 3.

val paramssNoContextBounds =
val iflag = if Feature.sourceVersion.isAtLeast(`future`) then Given else Implicit
val iflag = if Feature.sourceVersion.isAtLeast(`3.6`) then Given else Implicit
val flags = if isPrimaryConstructor then iflag | LocalParamAccessor else iflag | Param
mapParamss(paramss) {
tparam => desugarContextBounds(tparam, evidenceParamBuf, flags, freshName, paramss)
Expand Down
13 changes: 13 additions & 0 deletions tests/neg/ctx-bounds-priority-migration.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//> using options -source 3.5
trait Eq[A]
trait Order[A] extends Eq[A]:
def toOrdering: Ordering[A]

def f[Element: Eq: Order] = summon[Eq[Element]].toOrdering // ok

def Test() =
val eq: Eq[Int] = ???
val ord: Order[Int] = ???
f(eq, ord) // error
f(using eq, ord) // ok

6 changes: 6 additions & 0 deletions tests/neg/ctx-bounds-priority.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//> using options -source 3.6
trait Eq[A]
trait Order[A] extends Eq[A]:
def toOrdering: Ordering[A]

def Test[Element: Eq: Order] = summon[Eq[Element]].toOrdering // error
38 changes: 19 additions & 19 deletions tests/neg/i10901.check
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
-- [E008] Not Found Error: tests/neg/i10901.scala:45:38 ----------------------------------------------------------------
45 | val pos1: Point2D[Int,Double] = x º y // error
| ^^^
| value º is not a member of object BugExp4Point2D.IntT.
| An extension method was tried, but could not be fully constructed:
|
| º(x)
|
| failed with:
|
| Ambiguous overload. The overloaded alternatives of method º in object dsl with types
| [T1, T2]
| (x: BugExp4Point2D.ColumnType[T1])
| (y: BugExp4Point2D.ColumnType[T2])
| (implicit evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| [T1, T2]
| (x: T1)
| (y: BugExp4Point2D.ColumnType[T2])
| (implicit evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| both match arguments ((x : BugExp4Point2D.IntT.type))((y : BugExp4Point2D.DoubleT.type))
| value º is not a member of object BugExp4Point2D.IntT.
| An extension method was tried, but could not be fully constructed:
|
| º(x)
|
| failed with:
|
| Ambiguous overload. The overloaded alternatives of method º in object dsl with types
| [T1, T2]
| (x: BugExp4Point2D.ColumnType[T1])
| (y: BugExp4Point2D.ColumnType[T2])
| (using evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| [T1, T2]
| (x: T1)
| (y: BugExp4Point2D.ColumnType[T2])
| (using evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| both match arguments ((x : BugExp4Point2D.IntT.type))((y : BugExp4Point2D.DoubleT.type))
-- [E008] Not Found Error: tests/neg/i10901.scala:48:38 ----------------------------------------------------------------
48 | val pos4: Point2D[Int,Double] = x º 201.1 // error
| ^^^
Expand All @@ -31,8 +31,8 @@
| Ambiguous overload. The overloaded alternatives of method º in object dsl with types
| [T1, T2]
| (x: BugExp4Point2D.ColumnType[T1])
| (y: T2)(implicit evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| [T1, T2](x: T1)(y: T2)(implicit evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| (y: T2)(using evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| [T1, T2](x: T1)(y: T2)(using evidence$1: Numeric[T1], evidence$2: Numeric[T2]): BugExp4Point2D.Point2D[T1, T2]
| both match arguments ((x : BugExp4Point2D.IntT.type))((201.1d : Double))
-- [E008] Not Found Error: tests/neg/i10901.scala:62:16 ----------------------------------------------------------------
62 | val y = "abc".foo // error
Expand Down
2 changes: 1 addition & 1 deletion tests/pos/i20901/Foo.tastycheck
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Trees (98 bytes, starting from <elided base index>):
61: SHAREDtype 6
63: IDENTtpt 16 [T]
65: TYPEREFdirect 39
67: IMPLICIT
67: GIVEN
68: IDENTtpt 17 [Nothing]
70: TYPEREF 17 [Nothing]
72: TERMREFpkg 2 [scala]
Expand Down

0 comments on commit ba82d69

Please sign in to comment.