summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2012-07-21 13:32:25 +0200
committerIulian Dragos <jaguarul@gmail.com>2012-07-21 13:32:25 +0200
commit393d3ee6b530f15e50c56e1366595d15b7952c7d (patch)
tree796a4f0215fdd135a6308369d2b92c9c688f8d3d /src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
parent40ddd083592ba3947cb5182d6db26798bad9a9cb (diff)
downloadscala-393d3ee6b530f15e50c56e1366595d15b7952c7d.tar.gz
scala-393d3ee6b530f15e50c56e1366595d15b7952c7d.tar.bz2
scala-393d3ee6b530f15e50c56e1366595d15b7952c7d.zip
Handle multiple packages in one source file in the presentation compiler.
The PC symbol loader would mistakenly refuse to enter symbols if more than one package declaration occurred in the same file. This has become common practice: package object foo { … } package foo { … }
Diffstat (limited to 'src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala b/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
index 52e971f1e7..84d601bfed 100644
--- a/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
+++ b/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
@@ -69,10 +69,18 @@ abstract class BrowsingLoaders extends SymbolLoaders {
case _ =>
throw new MalformedInput(pkg.pos.point, "illegal tree node in package prefix: "+pkg)
}
+
+ private def inPackagePrefix(pkg: Tree)(op: => Unit): Unit = {
+ val oldPrefix = packagePrefix
+ addPackagePrefix(pkg)
+ op
+ packagePrefix = oldPrefix
+ }
+
override def traverse(tree: Tree): Unit = tree match {
case PackageDef(pkg, body) =>
- addPackagePrefix(pkg)
- body foreach traverse
+ inPackagePrefix(pkg) { body foreach traverse }
+
case ClassDef(_, name, _, _) =>
if (packagePrefix == root.fullName) {
enterClass(root, name.toString, new SourcefileLoader(src))