aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-06-26 17:08:04 +0200
committerMartin Odersky <odersky@gmail.com>2015-06-26 18:14:55 +0200
commit3290164f06715bbdf1cc2283b70e6234f74c3606 (patch)
treef46ec4ce004cf8fad98efa8f4f3ef263f82ea298 /src
parentef0184826b784fda9e2e1ef9aab31cab692cf3d2 (diff)
downloaddotty-3290164f06715bbdf1cc2283b70e6234f74c3606.tar.gz
dotty-3290164f06715bbdf1cc2283b70e6234f74c3606.tar.bz2
dotty-3290164f06715bbdf1cc2283b70e6234f74c3606.zip
Fix trait constructors
Trait constructors added a this to the constructor of a trait, which is useless because the constructor's type is unit. By contrast, it's good to rename the DefDef to the new name.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/transform/TraitConstructors.scala8
1 files changed, 2 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/transform/TraitConstructors.scala b/src/dotty/tools/dotc/transform/TraitConstructors.scala
index 9fea468da..8c7277c2e 100644
--- a/src/dotty/tools/dotc/transform/TraitConstructors.scala
+++ b/src/dotty/tools/dotc/transform/TraitConstructors.scala
@@ -11,15 +11,12 @@ import dotty.tools.dotc.core._
import dotty.tools.dotc.transform.TreeTransforms.{MiniPhaseTransform, TransformerInfo}
/***
- * Renames constructors in traits so that backend will call them with invokeInterface
- * Also makes sure that renamed constructor bodies conforms to type of method
+ * Renames constructors in traits so that backend will call them with invokeInterface
*/
class TraitConstructors extends MiniPhaseTransform with SymTransformer {
import dotty.tools.dotc.ast.tpd._
def phaseName: String = "traitConstructors"
- override def treeTransformPhase: Phase = this.phase
-
def transformSym(sym: SymDenotation)(implicit ctx: Context): SymDenotation = {
if (sym.isPrimaryConstructor && (sym.owner is Flags.Trait))
sym.copySymDenotation(name = nme.IMPLCLASS_CONSTRUCTOR)
@@ -29,8 +26,7 @@ class TraitConstructors extends MiniPhaseTransform with SymTransformer {
override def transformDefDef(tree: tpd.DefDef)(implicit ctx: Context, info: TransformerInfo): tpd.Tree = {
val sym = tree.symbol
if (sym.isPrimaryConstructor && (sym.owner is Flags.Trait))
- cpy.DefDef(tree)(rhs = Block(List(tree.rhs), This(tree.symbol.enclosingClass.asClass)))
+ cpy.DefDef(tree)(name = nme.IMPLCLASS_CONSTRUCTOR)
else tree
}
-
}