summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-07-24 15:28:37 +0000
committerMartin Odersky <odersky@gmail.com>2009-07-24 15:28:37 +0000
commit40707e0f49eb991ba1cbc07bdb1bcf65a640006b (patch)
tree00b6b70e32b941f9aa4502a91ad07fd0fc807e3d /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parent8a78d3748319811d7b0adc80d4ee8926dc8d90bf (diff)
downloadscala-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.scala32
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)