From 44c0c70c5d8d6bcc2bc820c9e5ee040655ad6aa7 Mon Sep 17 00:00:00 2001 From: paltherr Date: Thu, 30 Oct 2003 18:23:36 +0000 Subject: - Modified to use GenTransformer - Removed duplicated code --- .../transformer/ExplicitOuterClassesPhase.java | 127 +-------------------- 1 file 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. */ -- cgit v1.2.3