aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Desugar.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-12-17 15:53:34 +0100
committerMartin Odersky <odersky@gmail.com>2013-12-17 15:53:34 +0100
commitab4ae7ada45201684c91550815f85a2cfab24e34 (patch)
treec78d457afb4d8e1e4cbbd9dd02f4ca416b60db5d /src/dotty/tools/dotc/ast/Desugar.scala
parente3fdf97df2ce1ea7cd3a98cbdcce53789db1b3d3 (diff)
downloaddotty-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.scala24
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