diff options
author | Martin Odersky <odersky@gmail.com> | 2013-08-25 12:45:39 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-08-25 12:46:55 +0200 |
commit | 35a4fd27c99eff1463eaf79509f0635b67ba8404 (patch) | |
tree | 94f113d9f6881ec450e02da6bd8b009f0a88bcb5 /src/dotty/tools/dotc/ast/Desugar.scala | |
parent | 42681cb085e464500d28edc5892ae1ea7aed940f (diff) | |
download | dotty-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.scala | 17 |
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 = { |