Skip to content

Commit ff8779e

Browse files
committed
Fix equals method for value classes
Before this commit, the following class: class VC(val x: Int) extends AnyVal resulted in the creation of the method: def equals(val x$0: Any): Boolean = x$0 match { case x$0 @ _: VC => true case _: Any => false } After this commit, we get instead: def equals(val x$0: Any): Boolean = x$0 match { case x$0 @ _: VC => VC.this.a.==(x$0.a) case _: Any => false }
1 parent 5a81c5d commit ff8779e

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

src/dotty/tools/dotc/transform/SymUtils.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ class SymUtils(val self: Symbol) extends AnyVal {
7979
def accessorNamed(name: TermName)(implicit ctx: Context): Symbol =
8080
self.owner.info.decl(name).suchThat(_ is Accessor).symbol
8181

82+
def termParamAccessors(implicit ctx: Context): List[Symbol] =
83+
self.info.decls.filter(_ is TermParamAccessor).toList
84+
8285
def caseAccessors(implicit ctx:Context) =
8386
self.info.decls.filter(_ is CaseAccessor).toList
8487

src/dotty/tools/dotc/transform/SyntheticMethods.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@ class SyntheticMethods extends MiniPhaseTransform with IdentityDenotTransformer
4949
*/
5050
def syntheticMethods(clazz: ClassSymbol)(implicit ctx: Context): List[Tree] = {
5151
val clazzType = clazz.typeRef
52-
lazy val accessors = clazz.caseAccessors
52+
lazy val accessors =
53+
if (isDerivedValueClass(clazz))
54+
clazz.termParamAccessors
55+
else
56+
clazz.caseAccessors
5357

5458
val symbolsToSynthesize: List[Symbol] =
5559
if (clazz.is(Case)) caseSymbols

0 commit comments

Comments
 (0)