summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-12-10 17:56:28 +0000
committerpaltherr <paltherr@epfl.ch>2004-12-10 17:56:28 +0000
commit2dd7fe52f6603de48d90280a937bb50cf7bc82d1 (patch)
treefc2e9472e010a57e73edecd0dd2180e41c762aff
parent5d070472caaf3f79b79b1e15e99b45bf0399905b (diff)
downloadscala-2dd7fe52f6603de48d90280a937bb50cf7bc82d1.tar.gz
scala-2dd7fe52f6603de48d90280a937bb50cf7bc82d1.tar.bz2
scala-2dd7fe52f6603de48d90280a937bb50cf7bc82d1.zip
- Added phase NAMER
-rw-r--r--sources/scala/tools/scalac/CompilerPhases.scala2
-rw-r--r--sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala16
-rw-r--r--sources/scalac/CompilerPhases.java7
-rw-r--r--sources/scalac/Global.java4
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;
}