summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2009-12-11 14:57:35 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2009-12-11 14:57:35 +0000
commitfffe6449d14387df980f25aee9e9c1795b5f13aa (patch)
treef6780a17aaac96fc2bf2aa536111ff00949985e1 /src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
parente378965dc26c8f1123b87b6b60418bb4872e395b (diff)
downloadscala-fffe6449d14387df980f25aee9e9c1795b5f13aa.tar.gz
scala-fffe6449d14387df980f25aee9e9c1795b5f13aa.tar.bz2
scala-fffe6449d14387df980f25aee9e9c1795b5f13aa.zip
fixes #2610 and fixes #2687.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Analyzer.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Analyzer.scala28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
index 3a4fc6d807..ead20f1cb8 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
@@ -37,13 +37,39 @@ trait Analyzer extends AnyRef
}
}
+ object packageObjects extends SubComponent {
+ val global: Analyzer.this.global.type = Analyzer.this.global
+ val phaseName = "packageobjects"
+ val runsAfter = List[String]()
+ val runsRightAfter= Some("namer")
+
+ def newPhase(_prev: Phase): StdPhase = new StdPhase(_prev) {
+ import global._
+
+ val openPackageObjectsTraverser = new Traverser {
+ override def traverse(tree: Tree): Unit = tree match {
+ case ModuleDef(_, _, _) =>
+ if (tree.symbol.name == nme.PACKAGEkw) {
+ loaders.openPackageModule(tree.symbol)()
+ }
+ case ClassDef(_, _, _, _) => () // make it fast
+ case _ => super.traverse(tree)
+ }
+ }
+
+ def apply(unit: CompilationUnit) {
+ openPackageObjectsTraverser(unit.body)
+ }
+ }
+ }
+
var typerTime = 0L
object typerFactory extends SubComponent {
val global: Analyzer.this.global.type = Analyzer.this.global
val phaseName = "typer"
val runsAfter = List[String]()
- val runsRightAfter = Some("namer")
+ val runsRightAfter = Some("packageobjects")
def newPhase(_prev: Phase): StdPhase = new StdPhase(_prev) {
resetTyper()
override def run {