diff options
author | paltherr <paltherr@epfl.ch> | 2004-12-10 17:56:28 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-12-10 17:56:28 +0000 |
commit | 2dd7fe52f6603de48d90280a937bb50cf7bc82d1 (patch) | |
tree | fc2e9472e010a57e73edecd0dd2180e41c762aff | |
parent | 5d070472caaf3f79b79b1e15e99b45bf0399905b (diff) | |
download | scala-2dd7fe52f6603de48d90280a937bb50cf7bc82d1.tar.gz scala-2dd7fe52f6603de48d90280a937bb50cf7bc82d1.tar.bz2 scala-2dd7fe52f6603de48d90280a937bb50cf7bc82d1.zip |
- Added phase NAMER
-rw-r--r-- | sources/scala/tools/scalac/CompilerPhases.scala | 2 | ||||
-rw-r--r-- | sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala | 16 | ||||
-rw-r--r-- | sources/scalac/CompilerPhases.java | 7 | ||||
-rw-r--r-- | sources/scalac/Global.java | 4 |
4 files changed, 25 insertions, 4 deletions
diff --git a/sources/scala/tools/scalac/CompilerPhases.scala b/sources/scala/tools/scalac/CompilerPhases.scala index 3f242be80c..9983a73e90 100644 --- a/sources/scala/tools/scalac/CompilerPhases.scala +++ b/sources/scala/tools/scalac/CompilerPhases.scala @@ -18,6 +18,8 @@ class CompilerPhases extends scalac_CompilerPhases { protected override def PARSER_PHASE(): Class = Class.forName("scala.tools.scalac.ast.parser.ParserPhase$class"); + protected override def NAMER_PHASE(): Class = + Class.forName("scala.tools.scalac.typechecker.NamerPhase$class"); protected override def ANALYZER_PHASE(): Class = Class.forName("scala.tools.scalac.typechecker.AnalyzerPhase$class"); protected override def REFCHECK_PHASE(): Class = diff --git a/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala b/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala index 1baf5251a7..8da9db017d 100644 --- a/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala +++ b/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala @@ -19,6 +19,19 @@ import scalac.{Global => scalac_Global} package scala.tools.scalac.typechecker { +class NamerPhase(global0: scalac_Global, descriptor0: PhaseDescriptor) + extends Phase(global0, descriptor0) +{ + override def apply(unit: CompilationUnit): Unit = { + // change phase to make sure that no setInfo occurs before phase ANALYZER + val analyzer = global.PHASE.ANALYZER.phase().asInstanceOf[AnalyzerPhase]; + val backup = global.currentPhase; + global.currentPhase = analyzer; + new Analyzer(global, analyzer).lateEnter(unit); + global.currentPhase = backup; + } +} + class AnalyzerPhase(global: scalac_Global, descriptor: PhaseDescriptor) extends scalac_AnalyzerPhase(global, descriptor) { var startContext = new Context( @@ -80,8 +93,7 @@ class AnalyzerPhase(global: scalac_Global, descriptor: PhaseDescriptor) extends c } - override def apply(unit: CompilationUnit): Unit = - new Analyzer(global, this).lateEnter(unit); + override def apply(unit: CompilationUnit): Unit = (); } } diff --git a/sources/scalac/CompilerPhases.java b/sources/scalac/CompilerPhases.java index a3e90bf715..0e69a8c595 100644 --- a/sources/scalac/CompilerPhases.java +++ b/sources/scalac/CompilerPhases.java @@ -23,6 +23,7 @@ public abstract class CompilerPhases { /** The compiler phases. */ public final PhaseDescriptor INITIAL; public final PhaseDescriptor PARSER; + public final PhaseDescriptor NAMER; public final PhaseDescriptor ANALYZER; public final PhaseDescriptor REFCHECK; public final PhaseDescriptor UNCURRY; @@ -51,6 +52,7 @@ public abstract class CompilerPhases { /** Phase names, can be overridden to install . */ protected abstract Class PARSER_PHASE(); + protected abstract Class NAMER_PHASE(); protected abstract Class ANALYZER_PHASE(); protected abstract Class REFCHECK_PHASE(); protected abstract Class UNCURRY_PHASE(); @@ -84,6 +86,11 @@ public abstract class CompilerPhases { "parse source files", "parsed", PARSER_PHASE()), + this.NAMER = new PhaseDescriptor( + "namer", + "create symbols", + "symbols created", + NAMER_PHASE()), this.ANALYZER = new PhaseDescriptor( "analyze", "name and type analysis", diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java index 8e5165525b..ff882fe12c 100644 --- a/sources/scalac/Global.java +++ b/sources/scalac/Global.java @@ -423,8 +423,8 @@ public abstract class Global { // !!! add code to print/skip/graph as in compile currentPhase = PHASE.PARSER.phase(); PHASE.PARSER.phase().apply(unit); - currentPhase = PHASE.ANALYZER.phase(); - ((AnalyzerPhase)PHASE.ANALYZER.phase()).apply(unit); + currentPhase = PHASE.NAMER.phase(); + PHASE.NAMER.phase().apply(unit); // !!! add code for later phases? currentPhase = backup; } |