diff options
author | Martin Odersky <odersky@gmail.com> | 2013-12-17 15:53:34 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-12-17 15:53:34 +0100 |
commit | ab4ae7ada45201684c91550815f85a2cfab24e34 (patch) | |
tree | c78d457afb4d8e1e4cbbd9dd02f4ca416b60db5d /src/dotty/tools/dotc/ast/Desugar.scala | |
parent | e3fdf97df2ce1ea7cd3a98cbdcce53789db1b3d3 (diff) | |
download | dotty-ab4ae7ada45201684c91550815f85a2cfab24e34.tar.gz dotty-ab4ae7ada45201684c91550815f85a2cfab24e34.tar.bz2 dotty-ab4ae7ada45201684c91550815f85a2cfab24e34.zip |
Fixes to desugaring and indexing package objects
Plus some small tweaks in Typer
Diffstat (limited to 'src/dotty/tools/dotc/ast/Desugar.scala')
-rw-r--r-- | src/dotty/tools/dotc/ast/Desugar.scala | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index 267e1a607..2e1aa48bf 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -305,16 +305,20 @@ object desugar { */ def moduleDef(mdef: ModuleDef)(implicit ctx: Context): Tree = { val ModuleDef(mods, name, tmpl @ Template(constr, parents, self, body)) = mdef - val clsName = name.moduleClassName - val clsRef = Ident(clsName) - val modul = ValDef(mods | ModuleCreationFlags, name, clsRef, New(clsRef, Nil)) withPos mdef.pos - val ValDef(selfMods, selfName, selfTpt, selfRhs) = self - if (!selfTpt.isEmpty) ctx.error("object definition may not have a self type", self.pos) - val clsSelf = ValDef(selfMods, selfName, SingletonTypeTree(Ident(name)), selfRhs) - .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, classDef(cls)) + if (mods is Package) + PackageDef(Ident(name), cpy.ModuleDef(mdef, mods &~ Package, nme.PACKAGE, tmpl) :: Nil) + else { + val clsName = name.moduleClassName + val clsRef = Ident(clsName) + val modul = ValDef(mods | ModuleCreationFlags, name, clsRef, New(clsRef, Nil)) withPos mdef.pos + val ValDef(selfMods, selfName, selfTpt, selfRhs) = self + if (!selfTpt.isEmpty) ctx.error("object definition may not have a self type", self.pos) + val clsSelf = ValDef(selfMods, selfName, SingletonTypeTree(Ident(name)), selfRhs) + .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, classDef(cls)) + } } /** val p1, ..., pN: T = E |