Skip to content

Commit 7f2c4f6

Browse files
authored
Merge pull request #10449 from dotty-staging/fix-#10415
Fix #10415: Use `CanEqual` instead of `Eql` for multiversal equality
2 parents e13089f + b5fb11b commit 7f2c4f6

File tree

40 files changed

+234
-193
lines changed

40 files changed

+234
-193
lines changed

compiler/src/dotty/tools/dotc/core/Definitions.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -842,8 +842,10 @@ class Definitions {
842842

843843
@tu lazy val TastyReflectionClass: ClassSymbol = requiredClass("scala.tasty.Reflection")
844844

845-
@tu lazy val EqlClass: ClassSymbol = requiredClass("scala.Eql")
846-
def Eql_eqlAny(using Context): TermSymbol = EqlClass.companionModule.requiredMethod(nme.eqlAny)
845+
@tu lazy val CanEqualClass: ClassSymbol = getClassIfDefined("scala.Eql").orElse(requiredClass("scala.CanEqual")).asClass
846+
def CanEqual_canEqualAny(using Context): TermSymbol =
847+
val methodName = if CanEqualClass.name == tpnme.Eql then nme.eqlAny else nme.canEqualAny
848+
CanEqualClass.companionModule.requiredMethod(methodName)
847849

848850
@tu lazy val TypeBoxClass: ClassSymbol = requiredClass("scala.runtime.TypeBox")
849851
@tu lazy val TypeBox_CAP: TypeSymbol = TypeBoxClass.requiredType(tpnme.CAP)

compiler/src/dotty/tools/dotc/core/Denotations.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ import collection.mutable.ListBuffer
7171
*/
7272
object Denotations {
7373

74-
implicit def eqDenotation: Eql[Denotation, Denotation] = Eql.derived
74+
implicit def eqDenotation: CanEqual[Denotation, Denotation] = CanEqual.derived
7575

7676
/** A PreDenotation represents a group of single denotations or a single multi-denotation
7777
* It is used as an optimization to avoid forming MultiDenotations too eagerly.

compiler/src/dotty/tools/dotc/core/Names.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ object Names {
3232
* in a name table. A derived term name adds a tag, and possibly a number
3333
* or a further simple name to some other name.
3434
*/
35-
abstract class Name extends Designator, Showable derives Eql {
35+
abstract class Name extends Designator, Showable derives CanEqual {
3636

3737
/** A type for names of the same kind as this name */
3838
type ThisName <: Name

compiler/src/dotty/tools/dotc/core/StdNames.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ object StdNames {
362362
val CAP: N = "CAP"
363363
val Constant: N = "Constant"
364364
val ConstantType: N = "ConstantType"
365+
val Eql: N = "Eql"
365366
val EnumValue: N = "EnumValue"
366367
val ExistentialTypeTree: N = "ExistentialTypeTree"
367368
val Flag : N = "Flag"
@@ -432,6 +433,7 @@ object StdNames {
432433
val bundle: N = "bundle"
433434
val bytes: N = "bytes"
434435
val canEqual_ : N = "canEqual"
436+
val canEqualAny : N = "canEqualAny"
435437
val cbnArg: N = "<cbn-arg>"
436438
val checkInitialized: N = "checkInitialized"
437439
val ClassManifestFactory: N = "ClassManifestFactory"

compiler/src/dotty/tools/dotc/core/Symbols.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import config.Printers.typr
3737

3838
object Symbols {
3939

40-
implicit def eqSymbol: Eql[Symbol, Symbol] = Eql.derived
40+
implicit def eqSymbol: CanEqual[Symbol, Symbol] = CanEqual.derived
4141

4242
/** Tree attachment containing the identifiers in a tree as a sorted array */
4343
val Ids: Property.Key[Array[String]] = new Property.Key

compiler/src/dotty/tools/dotc/core/Types.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ object Types {
4646

4747
@sharable private var nextId = 0
4848

49-
implicit def eqType: Eql[Type, Type] = Eql.derived
49+
implicit def eqType: CanEqual[Type, Type] = CanEqual.derived
5050

5151
/** Main class representing types.
5252
*

compiler/src/dotty/tools/dotc/semanticdb/Language.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package dotty.tools.dotc.semanticdb
22

33
import dotty.tools.dotc.semanticdb.internal._
44

5-
sealed trait Language(val value: Int) extends SemanticdbEnum derives Eql
5+
sealed trait Language(val value: Int) extends SemanticdbEnum derives CanEqual
66

77
object Language {
88

compiler/src/dotty/tools/dotc/semanticdb/Range.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ final case class Range(
1212
startCharacter: Int,
1313
endLine: Int,
1414
endCharacter: Int
15-
) extends SemanticdbMessage[Range] derives Eql {
15+
) extends SemanticdbMessage[Range] derives CanEqual {
1616
@sharable
1717
private var __serializedSizeCachedValue: Int = 0
1818
private def __computeSerializedValue(): Int = {

compiler/src/dotty/tools/dotc/semanticdb/Scala3.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ object Scala3:
2525

2626
private val WILDCARDTypeName = nme.WILDCARD.toTypeName
2727

28-
enum SymbolKind derives Eql:
28+
enum SymbolKind derives CanEqual:
2929
kind =>
3030

3131
case Val, Var, Setter, Abstract

compiler/src/dotty/tools/dotc/semanticdb/Schema.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package dotty.tools.dotc.semanticdb
22

33
import dotty.tools.dotc.semanticdb.internal._
44

5-
sealed trait Schema(val value: Int) extends SemanticdbEnum derives Eql
5+
sealed trait Schema(val value: Int) extends SemanticdbEnum derives CanEqual
66

77
object Schema {
88

0 commit comments

Comments
 (0)