summaryrefslogtreecommitdiff
path: root/sources/scalac/CompilerPhases.java
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-08-18 15:58:45 +0000
committerpaltherr <paltherr@epfl.ch>2003-08-18 15:58:45 +0000
commit87210b8f1092065be1b7cfaf13a3852fe861abe4 (patch)
tree0e2ee43a75d151a74cec60e0025876082f2d7bc5 /sources/scalac/CompilerPhases.java
parentc4e1967d6c99021400b8fa906f51f0bcba984fd4 (diff)
downloadscala-87210b8f1092065be1b7cfaf13a3852fe861abe4.tar.gz
scala-87210b8f1092065be1b7cfaf13a3852fe861abe4.tar.bz2
scala-87210b8f1092065be1b7cfaf13a3852fe861abe4.zip
- rewrote the phase creation process
- replace PhaseRepository by CompilerPhases
Diffstat (limited to 'sources/scalac/CompilerPhases.java')
-rw-r--r--sources/scalac/CompilerPhases.java164
1 files changed, 164 insertions, 0 deletions
diff --git a/sources/scalac/CompilerPhases.java b/sources/scalac/CompilerPhases.java
new file mode 100644
index 0000000000..165b1b975a
--- /dev/null
+++ b/sources/scalac/CompilerPhases.java
@@ -0,0 +1,164 @@
+/* ____ ____ ____ ____ ______ *\
+** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
+** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
+** /_____/\____/\___/\____/____/ **
+\* */
+
+// $Id$
+
+package scalac;
+
+import java.util.List;
+import java.util.ArrayList;
+
+public class CompilerPhases {
+
+ //########################################################################
+ // Public Fields
+
+ public final PhaseDescriptor INITIAL;
+ public final PhaseDescriptor PARSER;
+ public final PhaseDescriptor ANALYZER;
+ public final PhaseDescriptor REFCHECK;
+ public final PhaseDescriptor UNCURRY;
+ // public final PhaseDescriptor OPTIMIZE;
+ public final PhaseDescriptor TRANSMATCH;
+ public final PhaseDescriptor LAMBDALIFT;
+ public final PhaseDescriptor EXPLICITOUTER;
+ public final PhaseDescriptor ADDACCESSORS;
+ public final PhaseDescriptor ADDINTERFACES;
+ public final PhaseDescriptor EXPANDMIXIN;
+ public final PhaseDescriptor ERASURE;
+ public final PhaseDescriptor ADDCONSTRUCTORS;
+ public final PhaseDescriptor GENMSIL;
+ public final PhaseDescriptor GENJVM;
+ public final PhaseDescriptor GENJVM_BCEL;
+ public final PhaseDescriptor TERMINAL;
+
+ //########################################################################
+ // Private Fields
+
+ private final List phases;
+
+ //########################################################################
+ // Public Constructors
+
+ public CompilerPhases() {
+ this.phases = new ArrayList();
+ PhaseDescriptor[] array = {
+ this.INITIAL = new PhaseDescriptor(
+ "initial",
+ "initializing compiler",
+ "initializing compiler",
+ scalac.util.EmptyPhase.class),
+ this.PARSER = new PhaseDescriptor(
+ "parse",
+ "parse source files",
+ "parsed",
+ scalac.ast.parser.ParserPhase.class),
+ this.ANALYZER = new PhaseDescriptor(
+ "analyze",
+ "name and type analysis",
+ "type checking",
+ scalac.typechecker.AnalyzerPhase.class),
+ this.REFCHECK = new PhaseDescriptor(
+ "refcheck",
+ "reference checking",
+ "reference checking",
+ scalac.typechecker.RefCheckPhase.class),
+ this.UNCURRY = new PhaseDescriptor(
+ "uncurry",
+ "uncurry function types and applications",
+ "uncurried",
+ scalac.transformer.UnCurryPhase.class),
+// this.OPTIMIZE = new PhaseDescriptor(
+// "optimize",
+// "tree-optimizer",
+// "tree optimization",
+// scalac.optimizer.OptimizePhase.class),
+ this.TRANSMATCH = new PhaseDescriptor(
+ "transmatch",
+ "translate match expressions",
+ "translated pattern matching",
+ scalac.transformer.TransMatchPhase.class),
+ this.LAMBDALIFT = new PhaseDescriptor(
+ "lambdalift",
+ "lambda lifter",
+ "lambda lifting",
+ scalac.transformer.LambdaLiftPhase.class),
+ this.EXPLICITOUTER = new PhaseDescriptor(
+ "explicitouterclasses",
+ "make links from inner classes to enclosing one explicit",
+ "made outer links explicit",
+ scalac.transformer.ExplicitOuterClassesPhase.class),
+ this.ADDACCESSORS = new PhaseDescriptor(
+ "addaccessors",
+ "add accessors for constructor arguments",
+ "added accessors",
+ scalac.transformer.AddAccessorsPhase.class),
+ this.ADDINTERFACES = new PhaseDescriptor(
+ "addinterfaces",
+ "add one interface per class",
+ "added interfaces",
+ scalac.transformer.AddInterfacesPhase.class),
+ this.EXPANDMIXIN = new PhaseDescriptor(
+ "expandmixins",
+ "expand mixins by code copying",
+ "expanded mixins",
+ scalac.transformer.ExpandMixinsPhase.class),
+ this.ERASURE = new PhaseDescriptor(
+ "erasure",
+ "type eraser",
+ "erased types",
+ scalac.transformer.ErasurePhase.class),
+ this.ADDCONSTRUCTORS = new PhaseDescriptor(
+ "addconstructors",
+ "add explicit constructor for each class",
+ "added constructors",
+ scalac.transformer.AddConstructorsPhase.class),
+ this.GENMSIL = new PhaseDescriptor(
+ "genmsil",
+ "generate MSIL code",
+ "generated MSIL code",
+ scalac.backend.msil.GenMSILPhase.class),
+ this.GENJVM = new PhaseDescriptor(
+ "genjvm",
+ "generate JVM bytecodes",
+ "generated JVM code",
+ scalac.backend.jvm.GenJVMPhase.class),
+ this.GENJVM_BCEL = new PhaseDescriptor(
+ "genjvm-bcel",
+ "generate JVM bytecodes",
+ "generated JVM code",
+ scalac.backend.jvm.GenJVMBCELPhase.class),
+ this.TERMINAL = new PhaseDescriptor(
+ "terminal",
+ "compilation terminated",
+ "compilation terminated",
+ scalac.util.EmptyPhase.class),
+ };
+ for (int i = 0; i < array.length; i++) phases.add(array[i]);
+ }
+
+ //########################################################################
+ // Public Methods
+
+ public PhaseDescriptor[] phases() {
+ PhaseDescriptor[] array = new PhaseDescriptor[phases.size()];
+ phases.toArray(array);
+ return array;
+ }
+
+ public void freeze() {
+ PhaseDescriptor[] phases = phases();
+ PhaseDescriptor.freeze(phases);
+ for (int i = 0; i < phases.length; i++)
+ if (phases[i].hasSkipFlag()) remove(phases[i]);
+ }
+
+ public void remove(PhaseDescriptor phase) {
+ phases.remove(phase);
+ }
+
+ //########################################################################
+}