diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2012-07-21 13:32:25 +0200 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2012-07-21 13:32:25 +0200 |
commit | 393d3ee6b530f15e50c56e1366595d15b7952c7d (patch) | |
tree | 796a4f0215fdd135a6308369d2b92c9c688f8d3d /src | |
parent | 40ddd083592ba3947cb5182d6db26798bad9a9cb (diff) | |
download | scala-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')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala | 12 |
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)) |