summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-01-08 18:51:33 +0000
committerpaltherr <paltherr@epfl.ch>2004-01-08 18:51:33 +0000
commitc5dcb8d01fe46c21695a12094206c24af8fe4d50 (patch)
tree30b05efa1a1b1ed484064bbe93390fea792817ac /sources
parent5e749cea9d9d46d98c9150d43f67fc9de6f3810a (diff)
downloadscala-c5dcb8d01fe46c21695a12094206c24af8fe4d50.tar.gz
scala-c5dcb8d01fe46c21695a12094206c24af8fe4d50.tar.bz2
scala-c5dcb8d01fe46c21695a12094206c24af8fe4d50.zip
- Removed old methods Nil and Cons in TreeGen
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalac/transformer/TransMatch.scala6
-rw-r--r--sources/scalac/ast/TreeGen.java10
-rw-r--r--sources/scalac/symtab/SymbolCloner.java21
-rw-r--r--sources/scalac/transformer/LambdaLift.java28
-rw-r--r--sources/scalac/transformer/TransMatch.java5
-rw-r--r--sources/scalac/transformer/matching/LeftTracerInScala.java18
-rw-r--r--sources/scalac/transformer/matching/RightTracerInScala.java4
7 files changed, 36 insertions, 56 deletions
diff --git a/sources/scala/tools/scalac/transformer/TransMatch.scala b/sources/scala/tools/scalac/transformer/TransMatch.scala
index aa3bd79299..3167bf242b 100644
--- a/sources/scala/tools/scalac/transformer/TransMatch.scala
+++ b/sources/scala/tools/scalac/transformer/TransMatch.scala
@@ -91,11 +91,11 @@ class TransMatch( global:scalac_Global )
var it:Iterator = nilvars.iterator();
while( it.hasNext() ) {
val v:Symbol = it.next().asInstanceOf[ Symbol ];
- val n = cunit.global.treeGen.Nil(cases(i).pos);
- newBody.update( {j = j + 1; j} , cunit.global.treeGen.ValDef(v, n));
+ val n = gen.mkNil(cases(i).pos);
+ newBody.update( {j = j + 1; j} , gen.ValDef(v, n));
}
newBody.update( newBody.length - 1, cases(i).body);
- cases(i).body = cunit.global.treeGen.mkBlock( newBody );
+ cases(i).body = gen.mkBlock( newBody );
}
i = i+1;
}
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 [] {