diff options
author | paltherr <paltherr@epfl.ch> | 2004-01-08 18:51:33 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-01-08 18:51:33 +0000 |
commit | c5dcb8d01fe46c21695a12094206c24af8fe4d50 (patch) | |
tree | 30b05efa1a1b1ed484064bbe93390fea792817ac /sources/scalac | |
parent | 5e749cea9d9d46d98c9150d43f67fc9de6f3810a (diff) | |
download | scala-c5dcb8d01fe46c21695a12094206c24af8fe4d50.tar.gz scala-c5dcb8d01fe46c21695a12094206c24af8fe4d50.tar.bz2 scala-c5dcb8d01fe46c21695a12094206c24af8fe4d50.zip |
- Removed old methods Nil and Cons in TreeGen
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/ast/TreeGen.java | 10 | ||||
-rw-r--r-- | sources/scalac/symtab/SymbolCloner.java | 21 | ||||
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 28 | ||||
-rw-r--r-- | sources/scalac/transformer/TransMatch.java | 5 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/LeftTracerInScala.java | 18 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/RightTracerInScala.java | 4 |
6 files changed, 33 insertions, 53 deletions
diff --git a/sources/scalac/ast/TreeGen.java b/sources/scalac/ast/TreeGen.java index d87115a77c..1c49620c0f 100644 --- a/sources/scalac/ast/TreeGen.java +++ b/sources/scalac/ast/TreeGen.java @@ -1264,16 +1264,6 @@ public class TreeGen implements Kinds, Modifiers, TypeTags { } } - // refactoring duplicate code of LambdaLift and CodeFactory - - public Tree Nil(int pos) { - return mkNil(pos); - } - - public Tree Cons(int pos, Type elemtpe, Tree hd, Tree tl) { - return mkNewCons(pos, elemtpe, hd, tl); - } - // for insert debug printing code public Tree Console_print(int pos, String str) { diff --git a/sources/scalac/symtab/SymbolCloner.java b/sources/scalac/symtab/SymbolCloner.java index 0ddb096b6a..bdb7eb7f75 100644 --- a/sources/scalac/symtab/SymbolCloner.java +++ b/sources/scalac/symtab/SymbolCloner.java @@ -16,8 +16,9 @@ import scalac.util.Debug; /** * This class implements a symbol cloner. It automatically determines - * the new owner of cloned symbols and keeps track of all cloned - * symbols. + * the new owner of cloned symbols, clones their type and keeps track + * of all cloned symbols. Clone a type means clone all symbol declared + * in that type (for example parameters of a MethodType). */ public class SymbolCloner { @@ -90,6 +91,7 @@ public class SymbolCloner { clone.name = renamer.newName(symbol.name); } clones.put(symbol, clone); + //clone.setType(cloneType(clone.info())); return clone; } @@ -100,11 +102,26 @@ public class SymbolCloner { /** Clones the given symbols and renames them if rename is true. */ public Symbol[] cloneSymbols(Symbol[] symbols, boolean rename) { + if (symbols.length == 0) return Symbol.EMPTY_ARRAY; Symbol[] clones = new Symbol[symbols.length]; for (int i = 0; i < clones.length; i++) clones[i] = cloneSymbol(symbols[i], rename); return clones; } + /** Clones the given type. */ + public Type cloneType(Type type) { + switch (type) { + case PolyType(Symbol[] tparams, Type result): + Symbol[] clones = cloneSymbols(tparams); + Type clone = Type.PolyType(clones, cloneType(result)); + return Type.getSubst(tparams, clones).applyParams(clone); + case MethodType(Symbol[] vparams, Type result): + return Type.MethodType(cloneSymbols(vparams), cloneType(result)); + default: + return type; + } + } + //######################################################################## } diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index c29232bfd5..4702636cc9 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -431,7 +431,7 @@ public class LambdaLift extends OwnerTransformer return copy.ValDef(tree, sym, tpe1, rhs1); case Sequence(Tree[] args): - Tree tree1 = mkList(tree.pos, tree.type, transform(args)); + Tree tree1 = gen.mkNewList(tree.pos, tree.type.typeArgs()[0], transform(args)); //new scalac.ast.printer.TextTreePrinter().print("TUPLE: ").print(tree).print("\n ==> \n").print(tree1).println().end();//DEBUG return tree1; @@ -671,30 +671,4 @@ public class LambdaLift extends OwnerTransformer } } - //todo: remove type parameters - Tree mkList(int pos, Type tpe, Tree[] args) { - return mkList(pos, tpe.typeArgs()[0], args, 0); - } - - Tree mkList(int pos, Type elemtpe, Tree[] args, int start) { - if (start == args.length) return gen.Nil(pos); - else return gen.Cons(pos, elemtpe, args[start], - mkList(pos, elemtpe, args, start + 1)); - } - /* - Tree mkNil(int pos) { - return gen.mkRef(pos, global.definitions.getModule(Names.scala_Nil)); - } - - Tree mkCons(int pos, Type elemtpe, Tree hd, Tree tl) { - return gen.New( - gen.Apply( - gen.TypeApply( - gen.mkRef( - pos, - global.definitions.getClass(Names.scala_COLONCOLON).primaryConstructor()), - new Tree[]{gen.mkType(pos, elemtpe)}), - new Tree[]{hd, tl})); - } - */ } diff --git a/sources/scalac/transformer/TransMatch.java b/sources/scalac/transformer/TransMatch.java index 37f7a7889c..19d1fc0eb8 100644 --- a/sources/scalac/transformer/TransMatch.java +++ b/sources/scalac/transformer/TransMatch.java @@ -98,11 +98,10 @@ public class TransMatch extends OwnerTransformer { int j=0; for( Iterator it = nilvars.iterator(); it.hasNext(); ) { Symbol v = (Symbol) it.next(); - newBody[ j++ ] = unit.global.treeGen.ValDef(v, - unit.global.treeGen.Nil(cases[i].pos)); + newBody[ j++ ] = gen.ValDef(v, gen.mkNil(cases[i].pos)); } newBody[ newBody.length - 1 ] = cases[i].body; - cases[i].body = unit.global.treeGen.mkBlock( newBody ); + cases[i].body = gen.mkBlock( newBody ); } i++; } diff --git a/sources/scalac/transformer/matching/LeftTracerInScala.java b/sources/scalac/transformer/matching/LeftTracerInScala.java index e46434bbe6..6fd2f2209d 100644 --- a/sources/scalac/transformer/matching/LeftTracerInScala.java +++ b/sources/scalac/transformer/matching/LeftTracerInScala.java @@ -90,10 +90,10 @@ public class LeftTracerInScala extends TracerInScala { _ref( accumSym )); */ Tree hd = cf.newPair( gen.mkIntLit(cf.pos, i), currentElem() ); - Tree newAcc = gen.Cons(cf.pos, - accumTypeArg, - hd, - gen.Ident( cf.pos, accumSym )); + Tree newAcc = gen.mkNewCons( cf.pos, + accumTypeArg, + hd, + gen.Ident( cf.pos, accumSym )); return callFun( new Tree[] { newAcc , _iter(), gen.mkIntLit( cf.pos, target )} ); } @@ -170,7 +170,7 @@ public class LeftTracerInScala extends TracerInScala { // `def leftTracer(...) = ...' the function definition v.add( theDefDef ); - Tree emptyAcc = gen.Nil( cf.pos ); //cf._seqTraceNil( elementType ); + Tree emptyAcc = gen.mkNil( cf.pos ); //cf._seqTraceNil( elementType ); // the valdef is needed, because passing emptyAcc as a parameter // results in a ClassCastException at runtime (?!) @@ -237,10 +237,10 @@ public class LeftTracerInScala extends TracerInScala { gen.mkDefaultValue(cf.pos, elementType)); //System.err.println(hd.type); - return gen.Cons( cf.pos, - accumTypeArg, - hd, - gen.Ident( cf.pos, accumSym )); + return gen.mkNewCons( cf.pos, + accumTypeArg, + hd, + gen.Ident( cf.pos, accumSym )); } } diff --git a/sources/scalac/transformer/matching/RightTracerInScala.java b/sources/scalac/transformer/matching/RightTracerInScala.java index 8a493e703b..a28f4476e3 100644 --- a/sources/scalac/transformer/matching/RightTracerInScala.java +++ b/sources/scalac/transformer/matching/RightTracerInScala.java @@ -104,7 +104,7 @@ public class RightTracerInScala extends TracerInScala { if( keepType ) rhs = gen.mkDefaultValue( cf.pos, realVar.type() ); else - rhs = gen.Nil( cf.pos ); + rhs = gen.mkNil( cf.pos ); helpVar.flags |= Modifiers.MUTABLE; Tree varDef = gen.ValDef( helpVar, rhs ); //((ValDef) varDef).kind = Kinds.VAR; @@ -114,7 +114,7 @@ public class RightTracerInScala extends TracerInScala { Tree prependToHelpVar( Symbol realVar, Tree elem ) { Tree hv = refHelpVar( realVar ); - return gen.Assign( hv, gen.Cons( cf.pos, elementType, elem, hv )); + return gen.Assign( hv, gen.mkNewCons( cf.pos, elementType, elem, hv )); /* return cf.Block(pos, new Tree [] { |