aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Desugar.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-08-25 12:45:39 +0200
committerMartin Odersky <odersky@gmail.com>2013-08-25 12:46:55 +0200
commit35a4fd27c99eff1463eaf79509f0635b67ba8404 (patch)
tree94f113d9f6881ec450e02da6bd8b009f0a88bcb5 /src/dotty/tools/dotc/ast/Desugar.scala
parent42681cb085e464500d28edc5892ae1ea7aed940f (diff)
downloaddotty-35a4fd27c99eff1463eaf79509f0635b67ba8404.tar.gz
dotty-35a4fd27c99eff1463eaf79509f0635b67ba8404.tar.bz2
dotty-35a4fd27c99eff1463eaf79509f0635b67ba8404.zip
Inserts AnyRef as a parent if parents of class def or module def are empty.
Diffstat (limited to 'src/dotty/tools/dotc/ast/Desugar.scala')
-rw-r--r--src/dotty/tools/dotc/ast/Desugar.scala17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala
index ccb99290a..52c9cd187 100644
--- a/src/dotty/tools/dotc/ast/Desugar.scala
+++ b/src/dotty/tools/dotc/ast/Desugar.scala
@@ -135,12 +135,12 @@ object desugar {
constr1.mods, constr1.name, tparams, vparamss, constr1.tpt, constr1.rhs)
val classTypeRef = {
- val tycon = Ident(cdef.name)
+ val tycon = Ident(cdef.name) withPos cdef.pos.startPos
val tparams = impl.constr.tparams
if (tparams.isEmpty) tycon else AppliedTypeTree(tycon, tparams map refOfDef)
}
- val creatorExpr = New(classTypeRef, vparamss nestedMap refOfDef)
+ lazy val creatorExpr = New(classTypeRef, vparamss nestedMap refOfDef)
val caseClassMeths =
if (mods is Case) {
@@ -165,14 +165,15 @@ object desugar {
else Nil
def anyRef = ref(defn.AnyRefAlias.typeConstructor)
+ def parentConstr(tpt: Tree) = Select(New(tpt), nme.CONSTRUCTOR)
- def companionDefs(parentTpt: Tree, defs: List[Tree]) = {
- val parentConstr = Select(New(parentTpt), nme.CONSTRUCTOR)
+ val parents1 = if (parents.isEmpty) parentConstr(anyRef) :: Nil else parents
+
+ def companionDefs(parentTpt: Tree, defs: List[Tree]) =
moduleDef(
ModuleDef(
Modifiers(Synthetic), name.toTermName,
- Template(emptyConstructor, parentConstr :: Nil, EmptyValDef, defs))).toList
- }
+ Template(emptyConstructor, parentConstr(parentTpt) :: Nil, EmptyValDef, defs))).toList
val companions =
if (mods is Case) {
@@ -205,7 +206,7 @@ object desugar {
else Nil
val cdef1 = cpy.TypeDef(cdef, mods, name,
- cpy.Template(impl, constr, parents, self,
+ cpy.Template(impl, constr, parents1, self,
constr1.tparams ::: constr1.vparamss.flatten ::: body ::: caseClassMeths))
flatTree(cdef1 :: companions ::: implicitWrappers)
}
@@ -229,7 +230,7 @@ object desugar {
.withPos(self.pos orElse tmpl.pos.startPos)
val clsTmpl = cpy.Template(tmpl, constr, parents, clsSelf, body)
val cls = TypeDef(mods.toTypeFlags & AccessFlags | ModuleClassCreationFlags, clsName, clsTmpl)
- Thicket(modul, cls)
+ Thicket(modul, classDef(cls))
}
def patDef(pdef: PatDef)(implicit ctx: Context): Tree = {