aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGuillaume Martres <smarter@ubuntu.com>2015-07-13 17:21:16 +0200
committerGuillaume Martres <smarter@ubuntu.com>2015-07-13 17:51:01 +0200
commit50f45714051bb980b2169f1fbb74d987a34390e0 (patch)
tree482563a212d7463b9dcbfe4857566af2ebb3938e /src
parentb82313268b912c62f9ddc89fefd02be96f2de64c (diff)
downloaddotty-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.scala1
-rw-r--r--src/dotty/tools/dotc/transform/SyntheticMethods.scala6
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)))