diff options
author | Martin Odersky <odersky@gmail.com> | 2009-07-24 15:28:37 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-07-24 15:28:37 +0000 |
commit | 40707e0f49eb991ba1cbc07bdb1bcf65a640006b (patch) | |
tree | 00b6b70e32b941f9aa4502a91ad07fd0fc807e3d /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | 8a78d3748319811d7b0adc80d4ee8926dc8d90bf (diff) | |
download | scala-40707e0f49eb991ba1cbc07bdb1bcf65a640006b.tar.gz scala-40707e0f49eb991ba1cbc07bdb1bcf65a640006b.tar.bz2 scala-40707e0f49eb991ba1cbc07bdb1bcf65a640006b.zip |
switch to unnested packages.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index 6268db7024..0bc9d4d0f6 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -4,7 +4,8 @@ */ // $Id$ -package scala.tools.nsc.typechecker +package scala.tools.nsc +package typechecker import scala.collection.mutable.HashMap import scala.tools.nsc.util.Position @@ -70,7 +71,7 @@ trait Namers { self: Analyzer => def setPrivateWithin[Sym <: Symbol](tree: Tree, sym: Sym, mods: Modifiers): Sym = { if (!mods.privateWithin.isEmpty) - sym.privateWithin = typer.qualifyingClassContext(tree, mods.privateWithin, true).owner + sym.privateWithin = typer.qualifyingClass(tree, mods.privateWithin, true) sym } @@ -175,19 +176,21 @@ trait Namers { self: Analyzer => } else scope enter sym } - def enterPackageSymbol(pos: Position, name: Name): Symbol = { - val (cscope, cowner) = - if (context.owner == EmptyPackageClass) (RootClass.info.decls, RootClass) - else (context.scope, context.owner) - val p: Symbol = cscope.lookupWithContext(name)(context.owner) - if (p.isPackage && cscope == p.owner.info.decls) { - p - } else { - val pkg = cowner.newPackage(pos, name) + def enterPackageSymbol(pos: Position, pid: RefTree, pkgOwner: Symbol): Symbol = { + val owner = pid match { + case Ident(name) => + pkgOwner + case Select(qual: RefTree, name) => + enterPackageSymbol(pos, qual, pkgOwner).moduleClass + } + var pkg = owner.info.decls.lookupWithContext(pid.name)(owner) + if (!pkg.isPackage || owner != pkg.owner) { + pkg = owner.newPackage(pos, pid.name) pkg.moduleClass.setInfo(new PackageClassInfoType(newScope, pkg.moduleClass, null)) pkg.setInfo(pkg.moduleClass.tpe) - enterInScope(pkg, cscope) + enterInScope(pkg, owner.info.decls) } + pkg } def enterClassSymbol(tree : ClassDef): Symbol = { @@ -324,8 +327,9 @@ trait Namers { self: Analyzer => if (tree.symbol == NoSymbol) { val owner = context.owner tree match { - case PackageDef(name, stats) => - tree.symbol = enterPackageSymbol(tree.pos, name) + case PackageDef(pid, stats) => + tree.symbol = enterPackageSymbol(tree.pos, pid, + if (context.owner == EmptyPackageClass) RootClass else context.owner) val namer = newNamer( context.make(tree, tree.symbol.moduleClass, tree.symbol.info.decls)) namer.enterSyms(stats) |