summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/ErasurePhase.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/transformer/ErasurePhase.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/transformer/ErasurePhase.java')
-rw-r--r--sources/scalac/transformer/ErasurePhase.java68
1 files changed, 36 insertions, 32 deletions
diff --git a/sources/scalac/transformer/ErasurePhase.java b/sources/scalac/transformer/ErasurePhase.java
index 8accd1ed9a..bd90b57eb8 100644
--- a/sources/scalac/transformer/ErasurePhase.java
+++ b/sources/scalac/transformer/ErasurePhase.java
@@ -10,7 +10,9 @@
package scalac.transformer;
import scalac.Global;
-import scalac.*;
+import scalac.Phase;
+import scalac.PhaseDescriptor;
+import scalac.Unit;
import scalac.backend.Primitive;
import scalac.backend.Primitives;
import scalac.checkers.Checker;
@@ -23,46 +25,30 @@ import scalac.symtab.Symbol;
import scalac.symtab.Type;
import scalac.util.Debug;
-public class ErasurePhase extends PhaseDescriptor {
+public class ErasurePhase extends Phase {
- public Definitions definitions;
- public Primitives primitives;
+ //########################################################################
+ // Private Fields
- public String name () {
- return "erasure";
- }
-
- public String description () {
- return "type eraser";
- }
+ private final Definitions definitions;
+ private final Primitives primitives;
+ private final Erasure erasure;
- public String taskDescription() {
- return "erased types";
- }
+ //########################################################################
+ // Public Constructors
- public void apply(Global global) {
+ public ErasurePhase(Global global, PhaseDescriptor descriptor) {
+ super(global, descriptor);
this.definitions = global.definitions;
this.primitives = global.primitives;
- new Erasure(global).apply();
+ this.erasure = new Erasure(global);
}
- public void apply(Unit unit) {
- this.definitions = unit.global.definitions;
- this.primitives = unit.global.primitives;
- new Erasure(unit.global).apply(unit);
- }
+ //########################################################################
+ // Public Methods
- private Type eraseParams(Type tp) {
- switch (tp) {
- case PolyType(_, Type result):
- return eraseParams(result);
- case MethodType(Symbol[] params, Type result):
- Symbol[] params1 = Type.erasureMap.map(params);
- if (params1 == params) return tp;
- else return Type.MethodType(params1, result);
- default:
- return tp;
- }
+ public void apply(Unit[] units) {
+ erasure.apply(units);
}
public Type transformInfo(Symbol sym, Type tp) {
@@ -85,4 +71,22 @@ public class ErasurePhase extends PhaseDescriptor {
new CheckNames(global)
};
}
+
+ //########################################################################
+ // Private Methods
+
+ private Type eraseParams(Type tp) {
+ switch (tp) {
+ case PolyType(_, Type result):
+ return eraseParams(result);
+ case MethodType(Symbol[] params, Type result):
+ Symbol[] params1 = Type.erasureMap.map(params);
+ if (params1 == params) return tp;
+ else return Type.MethodType(params1, result);
+ default:
+ return tp;
+ }
+ }
+
+ //########################################################################
}