diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-12-11 14:57:35 +0000 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-12-11 14:57:35 +0000 |
commit | fffe6449d14387df980f25aee9e9c1795b5f13aa (patch) | |
tree | f6780a17aaac96fc2bf2aa536111ff00949985e1 /src/compiler/scala/tools/nsc/typechecker/Analyzer.scala | |
parent | e378965dc26c8f1123b87b6b60418bb4872e395b (diff) | |
download | scala-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.scala | 28 |
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 { |