summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-10-30 18:23:36 +0000
committerpaltherr <paltherr@epfl.ch>2003-10-30 18:23:36 +0000
commit44c0c70c5d8d6bcc2bc820c9e5ee040655ad6aa7 (patch)
treee6b234766a669aea99138839e4215c610557251c
parent7d5d0d08ca25be81a654ed30d53b7244cae1c84e (diff)
downloadscala-44c0c70c5d8d6bcc2bc820c9e5ee040655ad6aa7.tar.gz
scala-44c0c70c5d8d6bcc2bc820c9e5ee040655ad6aa7.tar.bz2
scala-44c0c70c5d8d6bcc2bc820c9e5ee040655ad6aa7.zip
- Modified to use GenTransformer
- Removed duplicated code
-rw-r--r--sources/scalac/transformer/ExplicitOuterClassesPhase.java127
1 files changed, 6 insertions, 121 deletions
diff --git a/sources/scalac/transformer/ExplicitOuterClassesPhase.java b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
index 466486d07a..9cb937b96b 100644
--- a/sources/scalac/transformer/ExplicitOuterClassesPhase.java
+++ b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
@@ -16,7 +16,7 @@ import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
import scalac.Unit;
-import scalac.ast.Transformer;
+import scalac.ast.GenTransformer;
import scalac.ast.Tree;
import scalac.ast.Tree.Ident;
import scalac.ast.Tree.Template;
@@ -235,7 +235,7 @@ public class ExplicitOuterClassesPhase extends Phase {
// Private Class - Tree transformer
/** The tree transformer */
- private final Transformer treeTransformer = new Transformer(global) {
+ private final GenTransformer treeTransformer = new GenTransformer(global) {
/** The current context */
private Context context;
@@ -244,9 +244,6 @@ public class ExplicitOuterClassesPhase extends Phase {
public Tree transform(Tree tree) {
switch (tree) {
- case Empty:
- return tree;
-
case ClassDef(_, _, _, _, _, Template impl):
Symbol clasz = tree.symbol();
context = new Context(context, clasz, new HashMap());
@@ -257,12 +254,6 @@ public class ExplicitOuterClassesPhase extends Phase {
if (context != null) clasz.flags |= Modifiers.STATIC;
return gen.ClassDef(clasz, parents, impl.symbol(), body);
- case PackageDef(Tree packaged, Template(_, Tree[] body)):
- return gen.PackageDef(packaged.symbol(), transform(body));
-
- case ValDef(_, _, _, Tree rhs):
- return gen.ValDef(tree.symbol(), transform(rhs));
-
case DefDef(_, _, _, _, _, Tree rhs):
Symbol method = tree.symbol();
Context backup = context;
@@ -277,44 +268,10 @@ public class ExplicitOuterClassesPhase extends Phase {
// eliminate // !!!
return Tree.Empty;
- case LabelDef(_, Ident[] params, Tree rhs):
- Symbol label = tree.symbol();
- rhs = transform(rhs);
- return gen.LabelDef(label, Tree.symbolOf(params), rhs);
-
- case Block(Tree[] stats):
- return gen.Block(tree.pos, transform(stats));
-
- case Assign(Tree lhs, Tree rhs):
- return gen.Assign(tree.pos, transform(lhs), transform(rhs));
-
- case If(Tree cond, Tree thenp, Tree elsep):
- cond = transform(cond);
- thenp = transform(thenp);
- elsep = transform(elsep);
- return gen.If(tree.pos, cond, thenp, elsep);
-
- case Switch(Tree test, int[] tags, Tree[] bodies, Tree otherwise):
- test = transform(test);
- bodies = transform(bodies);
- otherwise = transform(otherwise);
- return gen.Switch(tree.pos, test, tags, bodies, otherwise);
-
- case Return(Tree expr):
- return gen.Return(tree.pos, tree.symbol(), expr);
-
- case New(Template(Tree[] base, Tree[] body)):
- assert base.length == 1 && body.length == 0: tree;
- return gen.New(tree.pos, transform(base[0]));
-
- case Typed(Tree expr, Tree tpe): // !!!
+ case Typed(Tree expr, Tree tpe):
+ // eliminate // !!!
return transform(expr);
- case TypeApply(Tree tfun, Tree[] targs):
- tfun = transform(tfun);
- targs = transform(targs);
- return gen.TypeApply(tree.pos, tfun, targs);
-
case Apply(Tree vfun, Tree[] vargs):
switch (vfun) {
case TypeApply(Tree tfun, Tree[] targs):
@@ -324,9 +281,7 @@ public class ExplicitOuterClassesPhase extends Phase {
if (!vfun.symbol().isConstructor()) break;
return transform(tree, vargs, vfun, Tree.EMPTY_ARRAY,vfun);
}
- vfun = transform(vfun);
- vargs = transform(vargs);
- return gen.Apply(tree.pos, vfun, vargs);
+ return super.transform(tree);
case This(_):
return genOuterRef(tree.pos, tree.symbol());
@@ -367,84 +322,14 @@ public class ExplicitOuterClassesPhase extends Phase {
}
return gen.Ident(tree.pos, symbol);
- case Literal(Object value):
- return gen.mkLit(tree.pos, value);
-
case TypeTerm():
Type type = typeTransformer.apply(tree.type());
if (context != null) type = context.subst.apply(type);
return gen.TypeTerm(tree.pos, type);
default:
- throw Debug.abort("illegal case", tree);
- }
-
- /*
-
- switch (tree) {
-
- case ClassDef(_, _, _, _, _, Template impl):
- Symbol clasz = tree.symbol();
- context = new Context(context, clasz, new HashMap());
- Tree[] parents = transform(impl.parents);
- Tree[] members = transform(impl.body);
- members = Tree.concat(members, genSuperMethods());
- context = context.outer;
- if (context != null) clasz.flags |= Modifiers.STATIC;
- return gen.ClassDef(clasz, parents, impl.symbol(), members);
-
- case DefDef(_, _, _, _, _, Tree rhs):
- Symbol symbol = tree.symbol();
- if (!symbol.isConstructor()) break;
- Context backup = context;
- context = context.getConstructorContext(symbol);
- rhs = transform(rhs);
- context = backup;
- return gen.DefDef(symbol, rhs);
-
- case This(_):
- return genOuterRef(tree.pos, tree.symbol());
-
- case Ident(_):
- Symbol symbol = tree.symbol();
- Symbol owner = symbol.owner();
- if (owner.isClass()) {
- // !!! A this node is missing here. This should
- // never happen if all trees were correct.
- Tree qualifier = genOuterRef(tree.pos, owner);
- return gen.Select(qualifier, symbol);
- }
- if (!owner.isConstructor()) break;
- Symbol clasz = owner.constructorClass();
- if (clasz == context.clasz) break;
- Tree qualifier = genOuterRef(tree.pos, clasz);
- return gen.Select(qualifier, symbol);
-
- case Select(Super(_, _), _):
- Tree qualifier = ((Tree.Select)tree).qualifier;
- Symbol clasz = qualifier.symbol();
- if (clasz == context.clasz) break;
- Symbol symbol = getSuperMethod(clasz, tree.symbol());
- qualifier = genOuterRef(qualifier.pos, clasz);
- return gen.Select(tree.pos, qualifier, symbol);
-
- case Apply(Tree vfun, Tree[] vargs):
- switch (vfun) {
- case TypeApply(Tree tfun, Tree[] targs):
- if (!tfun.symbol().isConstructor()) break;
- return transform(tree, vargs, vfun, targs, tfun);
- default:
- if (!vfun.symbol().isConstructor()) break;
- return transform(tree, vargs, vfun, Tree.EMPTY_ARRAY,vfun);
- }
+ return super.transform(tree);
}
-
- Type type = typeTransformer.apply(tree.type());
- if (context != null) type = context.subst.apply(type);
- return super.transform(tree).setType(type);
-
- */
-
}
/* Add outer type and value arguments to constructor calls. */