diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2015-07-13 17:21:16 +0200 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2015-07-13 17:51:01 +0200 |
commit | 50f45714051bb980b2169f1fbb74d987a34390e0 (patch) | |
tree | 482563a212d7463b9dcbfe4857566af2ebb3938e /src | |
parent | b82313268b912c62f9ddc89fefd02be96f2de64c (diff) | |
download | dotty-50f45714051bb980b2169f1fbb74d987a34390e0.tar.gz dotty-50f45714051bb980b2169f1fbb74d987a34390e0.tar.bz2 dotty-50f45714051bb980b2169f1fbb74d987a34390e0.zip |
SyntheticMethods: override productPrefix for case classes
The productPrefix of a case class should be the name of the class itself
to match Scala 2.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/core/Definitions.scala | 1 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/SyntheticMethods.scala | 6 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/Definitions.scala b/src/dotty/tools/dotc/core/Definitions.scala index e3348d4f3..7ed0a26e0 100644 --- a/src/dotty/tools/dotc/core/Definitions.scala +++ b/src/dotty/tools/dotc/core/Definitions.scala @@ -324,6 +324,7 @@ class Definitions { lazy val ProductClass = ctx.requiredClass("scala.Product") lazy val Product_canEqual = ProductClass.requiredMethod(nme.canEqual_) lazy val Product_productArity = ProductClass.requiredMethod(nme.productArity) + lazy val Product_productPrefix = ProductClass.requiredMethod(nme.productPrefix) lazy val LanguageModuleClass = ctx.requiredModule("dotty.language").moduleClass.asClass // Annotation base classes diff --git a/src/dotty/tools/dotc/transform/SyntheticMethods.scala b/src/dotty/tools/dotc/transform/SyntheticMethods.scala index b33bbd6a4..fa931a379 100644 --- a/src/dotty/tools/dotc/transform/SyntheticMethods.scala +++ b/src/dotty/tools/dotc/transform/SyntheticMethods.scala @@ -22,6 +22,8 @@ import scala.language.postfixOps * def hashCode(): Int * def canEqual(other: Any): Boolean * def toString(): String + * def productArity: Int + * def productPrefix: String * Special handling: * protected def readResolve(): AnyRef * @@ -40,7 +42,8 @@ class SyntheticMethods(thisTransformer: DenotTransformer) { private def initSymbols(implicit ctx: Context) = if (myValueSymbols.isEmpty) { myValueSymbols = List(defn.Any_hashCode, defn.Any_equals) - myCaseSymbols = myValueSymbols ++ List(defn.Any_toString, defn.Product_canEqual, defn.Product_productArity) + myCaseSymbols = myValueSymbols ++ List(defn.Any_toString, defn.Product_canEqual, + defn.Product_productArity, defn.Product_productPrefix) } def valueSymbols(implicit ctx: Context) = { initSymbols; myValueSymbols } @@ -83,6 +86,7 @@ class SyntheticMethods(thisTransformer: DenotTransformer) { case nme.equals_ => vrefss => equalsBody(vrefss.head.head) case nme.canEqual_ => vrefss => canEqualBody(vrefss.head.head) case nme.productArity => vrefss => Literal(Constant(accessors.length)) + case nme.productPrefix => vrefss => Literal(Constant(clazz.name.decode.toString)) } ctx.log(s"adding $synthetic to $clazz at ${ctx.phase}") DefDef(synthetic, syntheticRHS(ctx.withOwner(synthetic))) |