diff options
author | paltherr <paltherr@epfl.ch> | 2003-09-11 12:03:13 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-09-11 12:03:13 +0000 |
commit | c4b7a33f58721756974e79f6df392f9f90825cfe (patch) | |
tree | 9cd774cdf215bcdb95e0979264c9942fa5f5ab08 /sources/scalac/transformer | |
parent | 3551973214371050c0517d65c1c0371ad37785aa (diff) | |
download | scala-c4b7a33f58721756974e79f6df392f9f90825cfe.tar.gz scala-c4b7a33f58721756974e79f6df392f9f90825cfe.tar.bz2 scala-c4b7a33f58721756974e79f6df392f9f90825cfe.zip |
- Reviewed and cleaned TreeGen.
- Fixed some errors.
- Removed "dangerous" methods in TreeGen.
- Renamed some methods in TreeGen.
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r-- | sources/scalac/transformer/AddAccessors.java | 16 | ||||
-rw-r--r-- | sources/scalac/transformer/AddConstructors.java | 21 | ||||
-rw-r--r-- | sources/scalac/transformer/AddInterfaces.java | 14 | ||||
-rw-r--r-- | sources/scalac/transformer/Erasure.java | 8 | ||||
-rw-r--r-- | sources/scalac/transformer/ExpandMixins.java | 2 | ||||
-rw-r--r-- | sources/scalac/transformer/ExpandMixinsPhase.java | 2 | ||||
-rw-r--r-- | sources/scalac/transformer/ExplicitOuterClassesPhase.java | 16 | ||||
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 11 | ||||
-rw-r--r-- | sources/scalac/transformer/UnCurry.java | 2 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/AlgebraicMatcher.java | 5 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/Autom2Scala.java | 8 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/CodeFactory.java | 22 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/LeftTracerInScala.java | 4 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/PatternMatcher.java | 2 |
14 files changed, 58 insertions, 75 deletions
diff --git a/sources/scalac/transformer/AddAccessors.java b/sources/scalac/transformer/AddAccessors.java index e2dc69b7f1..14bf9c610a 100644 --- a/sources/scalac/transformer/AddAccessors.java +++ b/sources/scalac/transformer/AddAccessors.java @@ -44,8 +44,8 @@ public class AddAccessors extends Transformer { accessor = new TermSymbol(sym.pos, sym.name, sym.classOwner(), - Modifiers.STABLE - | Modifiers.ACCESSOR + /* !!! Modifiers.STABLE + | */ Modifiers.ACCESSOR | Modifiers.PRIVATE); accessor.setType(Type.MethodType(Symbol.EMPTY_ARRAY, sym.type())); accessorMap.put(sym, accessor); @@ -82,18 +82,19 @@ public class AddAccessors extends Transformer { for (int i = 0; i < params.length; ++i) { Symbol paramSym = params[i].symbol(); if (accessorMap.containsKey(paramSym)) { + int pos = paramSym.pos; Symbol accessorSym = (Symbol)accessorMap.get(paramSym); - Symbol valSym = new TermSymbol(paramSym.pos, + Symbol valSym = new TermSymbol(pos, valName(paramSym), clsSym, Modifiers.PRIVATE); valSym.setType(paramSym.type()); - newBody.addFirst(gen.DefDef(accessorSym, gen.Ident(valSym))); + newBody.addFirst(gen.DefDef(accessorSym, gen.Ident(pos, valSym))); newMembers.enter(accessorSym); - newBody.addFirst(gen.ValDef(valSym, gen.Ident(paramSym))); + newBody.addFirst(gen.ValDef(valSym, gen.Ident(pos, paramSym))); newMembers.enter(valSym); } } @@ -120,8 +121,7 @@ public class AddAccessors extends Transformer { Symbol sym = tree.symbol(); assert sym.kind != Kinds.NONE : tree; if (sym.owner().isPrimaryConstructor()) - return gen.Apply(gen.Select(transform(qualifier), accessor(sym)), - Tree.EMPTY_ARRAY); + return gen.Apply(gen.Select(tree.pos, transform(qualifier), accessor(sym))); else return copy.Select(tree, sym, transform(qualifier)); } @@ -131,7 +131,7 @@ public class AddAccessors extends Transformer { if (inClassContext && sym.name.isTermName() && sym.owner().isPrimaryConstructor()) - return gen.Apply(gen.Ident(accessor(sym)), Tree.EMPTY_ARRAY); + return gen.Apply(gen.Ident(tree.pos, accessor(sym))); else return copy.Ident(tree, sym); } diff --git a/sources/scalac/transformer/AddConstructors.java b/sources/scalac/transformer/AddConstructors.java index 8fa3987b81..e8799ca51b 100644 --- a/sources/scalac/transformer/AddConstructors.java +++ b/sources/scalac/transformer/AddConstructors.java @@ -120,8 +120,7 @@ public class AddConstructors extends Transformer { public Tree transform(Tree tree) { final Symbol treeSym = tree.symbol(); switch (tree) { - case ClassDef(_, _, _, ValDef[][] vparams, _, //: - Template(Tree[] baseClasses, Tree[] body)): + case ClassDef(_, _, _, ValDef[][] vparams, _, Template impl): assert treeSym.name.isTypeName(); @@ -154,8 +153,8 @@ public class AddConstructors extends Transformer { Debug.show(constrSym.owner()) + "\n\texpected: " + Debug.show(treeSym); - for (int i = 0; i < body.length; i++) { - Tree t = body[i]; + for (int i = 0; i < impl.body.length; i++) { + Tree t = impl.body[i]; if (t.definesSymbol()) { Symbol sym = t.symbol(); switch (t) { @@ -191,24 +190,22 @@ public class AddConstructors extends Transformer { classScope.enterOrOverload(sym); } else { // move class-level expressions into the constructor - constrBody2.add(transform(body[i])); + constrBody2.add(transform(impl.body[i])); } } // inline the call to the super constructor if ( !forINT || !treeSym.parents()[0].symbol().isJava()) { - switch (baseClasses[0]) { + switch (impl.parents[0]) { case Apply(Tree fun, Tree[] args): - int pos = baseClasses[0].pos; + int pos = impl.parents[0].pos; Tree superConstr = gen.Select (gen.Super(pos, treeSym), getConstructor(fun.symbol())); constrBody.add(gen.Apply(superConstr, transform(args))); break; default: - new scalac.ast.printer.TextTreePrinter(). - print(baseClasses[0]).println().end(); - assert false; + throw Debug.abort("illegal case", impl.parents[0]); } } @@ -248,7 +245,7 @@ public class AddConstructors extends Transformer { toArray(new Tree[constrBody.size()])): (Tree) constrBody.get(0); - classBody.add(gen.DefDef(tree.pos, constrSym, constrTree)); + classBody.add(gen.DefDef(constrSym, constrTree)); // strip off the class constructor from parameters switch (treeSym.primaryConstructor().info()) { @@ -269,7 +266,7 @@ public class AddConstructors extends Transformer { for (int i = 0; i < newBody.length - 1; i ++) newBody[i] = transform(newBody[i]); - return gen.ClassDef(classSym, baseClasses, newBody); + return gen.ClassDef(classSym, impl.parents, impl.symbol(), newBody); // Substitute the constructor into the 'new' expressions case New(Template(Tree[] baseClasses, _)): diff --git a/sources/scalac/transformer/AddInterfaces.java b/sources/scalac/transformer/AddInterfaces.java index 287cd7e6b4..15747cce48 100644 --- a/sources/scalac/transformer/AddInterfaces.java +++ b/sources/scalac/transformer/AddInterfaces.java @@ -183,7 +183,7 @@ class AddInterfaces extends Transformer { Map memMap = phase.getClassMemberMap(realClsSym); assert memMap != null : Debug.show(clsSym) + " " + Debug.show(realClsSym); - return gen.Select(qualifier, (Symbol)memMap.get(sym)); + return gen.Select(tree.pos, qualifier, (Symbol)memMap.get(sym)); } else return super.transform(tree); } else { @@ -197,13 +197,7 @@ class AddInterfaces extends Transformer { Type qualifierType = qualifier.type().bound(); if (phase.needInterface(qualifierType.symbol())) { Type castType = qualifierType.baseType(owner); - qualifier = - gen.Apply( - gen.TypeApply( - gen.Select(qualifier, defs.AS), - new Tree[] { - gen.mkType(tree.pos, castType)}), - Tree.EMPTY_ARRAY); + qualifier = gen.mkAsInstanceOf(qualifier, castType); } } return copy.Select(tree, sym, qualifier); @@ -223,13 +217,13 @@ class AddInterfaces extends Transformer { : Debug.show(clsSym) + " " + Debug.show(realClsSym); assert memMap.containsKey(sym) : Debug.show(sym) + " not in " + memMap; - return gen.Ident((Symbol)memMap.get(sym)); + return gen.Ident(tree.pos, (Symbol)memMap.get(sym)); } else return super.transform(tree); } else if (typeSubst != null) { Symbol newSym = (Symbol)typeSubst.lookupSymbol(tree.symbol()); if (newSym != null) - return gen.Ident(newSym); + return gen.Ident(tree.pos, newSym); else return super.transform(tree); } else { diff --git a/sources/scalac/transformer/Erasure.java b/sources/scalac/transformer/Erasure.java index e65e3c4a16..7f62094608 100644 --- a/sources/scalac/transformer/Erasure.java +++ b/sources/scalac/transformer/Erasure.java @@ -283,9 +283,9 @@ public class Erasure extends Transformer implements Modifiers { assert params1.length == symparams.length; Tree[] args = new Tree[params1.length]; for (int i = 0; i < args.length; i++) { - args[i] = cast(gen.Ident(params1[i]), symparams[i].type().erasure()); + args[i] = cast(gen.Ident(sym.pos, params1[i]), symparams[i].type().erasure()); } - Tree fwd = make.Apply(sym.pos, gen.Ident(sym).setType(symtype), args) + Tree fwd = make.Apply(sym.pos, gen.Ident(sym.pos, sym).setType(symtype), args) .setType(symrestp); bridges.append(gen.DefDef(bridgeSym, coerce(fwd, restp))); return; @@ -518,7 +518,7 @@ public class Erasure extends Transformer implements Modifiers { case LabelDef(Name name, Tree.Ident[] params,Tree body): Tree.Ident[] new_params = new Tree.Ident[params.length]; for (int i = 0; i < params.length; i++) { - new_params[i] = (Tree.Ident)gen.Ident(params[i].symbol()); + new_params[i] = (Tree.Ident)gen.Ident(params[i].pos, params[i].symbol()); } return copy.LabelDef(tree, new_params, transform(body)).setType(owntype); @@ -595,7 +595,7 @@ public class Erasure extends Transformer implements Modifiers { Tree tree1; switch (tree) { case Ident(Name name): - if (name == Names.ZERO) tree1 = gen.Ident(definitions.NULL); + if (name == Names.ZERO) tree1 = gen.mkNullLit(tree.pos); else tree1 = tree; break; case Select(Tree qual, _): diff --git a/sources/scalac/transformer/ExpandMixins.java b/sources/scalac/transformer/ExpandMixins.java index 8d761ca249..48d81ec4c3 100644 --- a/sources/scalac/transformer/ExpandMixins.java +++ b/sources/scalac/transformer/ExpandMixins.java @@ -157,7 +157,7 @@ public class ClassExpander { for (int i = 0; i < params.length; i++) { Symbol member = map.lookupSymbol(params[i]); member.setType(map.apply(member.type())); - body.append(gen.ValDef(args[i].pos, member, args[i])); + body.append(gen.ValDef(member, args[i])); } } diff --git a/sources/scalac/transformer/ExpandMixinsPhase.java b/sources/scalac/transformer/ExpandMixinsPhase.java index ba0f43bd25..0b5e34fc96 100644 --- a/sources/scalac/transformer/ExpandMixinsPhase.java +++ b/sources/scalac/transformer/ExpandMixinsPhase.java @@ -151,7 +151,7 @@ public class ExpandMixinsPhase extends Phase { case ClassDef(_, _, _, _, _, _): Symbol clasz = tree.symbol(); if (clasz.isInterface()) return super.transform(tree); - return gen.ClassDef(tree.pos,clasz,getExpandedTemplate(clasz)); + return gen.ClassDef(clasz, getExpandedTemplate(clasz)); case PackageDef(_, _): return super.transform(tree); case Template(_, _): diff --git a/sources/scalac/transformer/ExplicitOuterClassesPhase.java b/sources/scalac/transformer/ExplicitOuterClassesPhase.java index 3812e1d708..81ba49cf1c 100644 --- a/sources/scalac/transformer/ExplicitOuterClassesPhase.java +++ b/sources/scalac/transformer/ExplicitOuterClassesPhase.java @@ -250,7 +250,7 @@ public class ExplicitOuterClassesPhase extends Phase { context = context.getConstructorContext(symbol); rhs = transform(rhs); context = backup; - return gen.DefDef(tree.pos, symbol, rhs); + return gen.DefDef(symbol, rhs); case This(_): return genOuterRef(tree.pos, tree.symbol()); @@ -262,13 +262,13 @@ public class ExplicitOuterClassesPhase extends Phase { // !!! A this node is missing here. This should // never happen if all trees were correct. Tree qualifier = genOuterRef(tree.pos, owner); - return gen.mkStable(gen.Select(qualifier, symbol)); + 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.mkStable(gen.Select(qualifier, symbol)); + return gen.Select(qualifier, symbol); case Select(Super(_, _), _): Tree qualifier = ((Tree.Select)tree).qualifier; @@ -276,7 +276,7 @@ public class ExplicitOuterClassesPhase extends Phase { if (clasz == context.clasz) break; Symbol symbol = getSuperMethod(clasz, tree.symbol()); qualifier = genOuterRef(qualifier.pos, clasz); - return gen.mkStable(gen.Select(tree.pos, qualifier, symbol)); + return gen.Select(tree.pos, qualifier, symbol); case Apply(Tree vfun, Tree[] vargs): switch (vfun) { @@ -351,8 +351,8 @@ public class ExplicitOuterClassesPhase extends Phase { Symbol method = (Symbol)entry.getKey(); Symbol forward = (Symbol)entry.getValue(); int pos = forward.pos; - Tree[] targs = gen.mkTypeIdents(pos, nextTypeParams(forward)); - Tree[] vargs = gen.mkIdents(pos, nextValueParams(forward)); + Tree[] targs = gen.mkTypeRefs(pos, nextTypeParams(forward)); + Tree[] vargs = gen.mkRefs(pos, nextValueParams(forward)); Tree fun = gen.Select(gen.Super(pos, context.clasz), method); trees[i] = gen.DefDef(forward, gen.mkApply(fun, targs, vargs)); } @@ -362,11 +362,11 @@ public class ExplicitOuterClassesPhase extends Phase { /** Returns a tree referencing the given outer class. */ private Tree genOuterRef(int pos, Symbol clasz) { if (context.clasz == clasz) return gen.This(pos, clasz); - Tree tree = gen.mkStable(gen.Ident(pos, context.link)); + Tree tree = gen.Ident(pos, context.link); for (Context context = this.context.outer;;context =context.outer){ assert context != null: Debug.show(clasz); if (context.clasz == clasz) return tree; - tree = gen.mkStable(gen.Select(tree, context.link)); + tree = gen.Select(tree, context.link); } } diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index af1881ea7d..f3d19647c6 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -398,14 +398,9 @@ public class LambdaLift extends OwnerTransformer if ((sym.flags & CAPTURED) != 0) { assert sym.isLocal(); Type boxedType = sym.nextType(); - Type unboxedType = boxedType.typeArgs()[0]; tpe1 = gen.mkType(tpe.pos, boxedType); rhs1 = gen.New( - rhs.pos, - definitions.SCALA_TYPE, - boxedType.symbol(), - new Type[]{unboxedType}, - new Tree[]{rhs1}); + gen.mkPrimaryConstr(rhs.pos, boxedType, new Tree[]{rhs1})); } return copy.ValDef(tree, sym, tpe1, rhs1); @@ -451,7 +446,7 @@ public class LambdaLift extends OwnerTransformer if (tree1 instanceof Ident) ((Ident)tree1).name = sym.name; else ((Select)tree1).selector = sym.name; } - if ((sym.flags & CAPTURED) != 0) return gen.Select(tree1, Names.elem); + if ((sym.flags & CAPTURED) != 0) return gen.Select__(tree1, Names.elem); else return tree1; default: @@ -621,7 +616,7 @@ public class LambdaLift extends OwnerTransformer for (int i = 0; i < fparams.length; i++) { Symbol farg = descr.proxy(fparams[i], currentOwner); args1[args.length + i] = - types ? gen.mkTypeIdent(pos, farg) : gen.Ident(pos, farg); + types ? gen.mkTypeRef(pos, farg) : gen.Ident(pos, farg); } return args1; } else { diff --git a/sources/scalac/transformer/UnCurry.java b/sources/scalac/transformer/UnCurry.java index 6294631ce5..02df321e64 100644 --- a/sources/scalac/transformer/UnCurry.java +++ b/sources/scalac/transformer/UnCurry.java @@ -147,7 +147,7 @@ public class UnCurry extends OwnerTransformer if (tree1.symbol().isDefParameter()) { tree1.type = global.definitions.functionType( Type.EMPTY_ARRAY, tree1.type.widen()); - return gen.Apply(gen.Select(tree1, Names.apply), new Tree[0]); + return gen.Apply(gen.Select__(tree1, Names.apply), new Tree[0]); } else { return tree1; } diff --git a/sources/scalac/transformer/matching/AlgebraicMatcher.java b/sources/scalac/transformer/matching/AlgebraicMatcher.java index ea07730a1a..ea74702a99 100644 --- a/sources/scalac/transformer/matching/AlgebraicMatcher.java +++ b/sources/scalac/transformer/matching/AlgebraicMatcher.java @@ -358,9 +358,8 @@ public class AlgebraicMatcher extends PatternMatcher { public Tree toTree() { TreeList ts = new TreeList(); - ts.append( gen.ValDef(_m.pos, root.symbol(), _m.selector )); - ts.append( gen.ValDef(_m.pos, - resultVar, + ts.append( gen.ValDef(root.symbol(), _m.selector )); + ts.append( gen.ValDef(resultVar, gen.mkDefaultValue(_m.pos, resultVar.info()) )); ts.append( cf.If( toTree(root.and), gen.Ident( _m.pos, resultVar ), diff --git a/sources/scalac/transformer/matching/Autom2Scala.java b/sources/scalac/transformer/matching/Autom2Scala.java index abe5a6b35a..adcd929e43 100644 --- a/sources/scalac/transformer/matching/Autom2Scala.java +++ b/sources/scalac/transformer/matching/Autom2Scala.java @@ -154,11 +154,9 @@ public class Autom2Scala { // overridden in TracerInScala Tree loadCurrentElem( Tree body ) { return cf.Block( Position.FIRSTPOS, new Tree[] { - cf.gen.ValDef( Position.FIRSTPOS, - this.hasnSym, + cf.gen.ValDef( this.hasnSym, cf._hasNext( _iter() ) ), - cf.gen.ValDef( Position.FIRSTPOS, - this.curSym, + cf.gen.ValDef( this.curSym, cf.If( _ref( hasnSym ),//cf._hasNext( _iter() ), cf._next( _iter() ), cf.ignoreValue( curSym.type() ))), @@ -182,7 +180,7 @@ public class Autom2Scala { /** creates an int variable */ Tree _intvar( Symbol sym, Tree init ) { - return gen.ValDef( pos, sym, init ); + return gen.ValDef( sym, init ); } // the caller needs to set the type ! diff --git a/sources/scalac/transformer/matching/CodeFactory.java b/sources/scalac/transformer/matching/CodeFactory.java index 96c3cd66ee..9800ff4eb1 100644 --- a/sources/scalac/transformer/matching/CodeFactory.java +++ b/sources/scalac/transformer/matching/CodeFactory.java @@ -281,21 +281,21 @@ class CodeFactory extends PatternTool { } Tree newSeqNil( Type tpe ) { - return gen.Select(gen.Ident(pos, defs.SCALA), Names.Nil/*seqNilSym()*/); + return gen.Select__(gen.Ident(pos, defs.SCALA), Names.Nil/*seqNilSym()*/); } // EXPERIMENTAL Tree newRef( Tree init ) { //System.out.println( "hello:"+refSym().type() ); - return gen.New( pos, defs.SCALA_TYPE, refSym(), - new Type[] { init.type() }, - new Tree[] { init } ); + return gen.New(gen.mkPrimaryConstr(pos, refSym(), + new Type[] { init.type() }, + new Tree[] { init } )); } Tree newSeqCons( Tree head, Tree tail ) { - return gen.New( pos, defs.SCALA_TYPE, seqConsSym(), - new Type[] { head.type() }, - new Tree[] { head, tail }); + return gen.New(gen.mkPrimaryConstr(pos, seqConsSym(), + new Type[] { head.type() }, + new Tree[] { head, tail })); } /** returns A for T <: Sequence[ A ] @@ -440,7 +440,7 @@ class CodeFactory extends PatternTool { } return make.Apply( tree.pos, - gen.Select(tree, NOT_N), + gen.Select__(tree, NOT_N), Tree.EMPTY_ARRAY).setType(defs.BOOLEAN_TYPE); } @@ -579,9 +579,9 @@ class CodeFactory extends PatternTool { } Tree newPair( Tree left, Tree right ) { - return gen.New( pos, defs.SCALA_TYPE, tuple2Sym(), - new Type[] { left.type(), right.type() }, - new Tree[] { left, right }); + return gen.New(gen.mkPrimaryConstr(pos, tuple2Sym(), + new Type[] { left.type(), right.type() }, + new Tree[] { left, right })); } diff --git a/sources/scalac/transformer/matching/LeftTracerInScala.java b/sources/scalac/transformer/matching/LeftTracerInScala.java index c79fa113e3..cb58f4b196 100644 --- a/sources/scalac/transformer/matching/LeftTracerInScala.java +++ b/sources/scalac/transformer/matching/LeftTracerInScala.java @@ -213,14 +213,14 @@ public class LeftTracerInScala extends TracerInScala { .setType( _accumType( elementType ) ) ; // `val acc = SeqNil[ elementType ]' init accumulator - v.add( gen.ValDef( pos, emptyAccSym, emptyAcc) ); + v.add( gen.ValDef( emptyAccSym, emptyAcc) ); Tree run = callFun( new Tree[] { gen.Ident( pos, emptyAccSym ), cf.newIterator( selector, selector.type() ), cf.Int( 0 ) }); - run = gen.ValDef( Position.FIRSTPOS, resultSym, run ); + run = gen.ValDef( resultSym, run ); v.add( run ); diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java index ca196c37e6..1ee3b2574f 100644 --- a/sources/scalac/transformer/matching/PatternMatcher.java +++ b/sources/scalac/transformer/matching/PatternMatcher.java @@ -902,7 +902,7 @@ public class PatternMatcher extends PatternTool { cases = cases.next; } return cf.Switch( - gen.Apply(gen.Select(selector.duplicate(), Names.tag), new Tree[0]), + gen.Apply(gen.Select__(selector.duplicate(), Names.tag), new Tree[0]), tags, bodies, (defaultCase == null) ? gen.mkBooleanLit(selector.pos, false) |