diff options
author | paltherr <paltherr@epfl.ch> | 2003-11-12 09:48:46 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-11-12 09:48:46 +0000 |
commit | c743c68faa7ea719df74394bd744808e2f6090f6 (patch) | |
tree | 4cc9da53a0d1fffd0e0b420d0b7ea7c2aabcb793 | |
parent | 4f86e73bfe663233ff734a3cbd47c5cb20431c0d (diff) | |
download | scala-c743c68faa7ea719df74394bd744808e2f6090f6.tar.gz scala-c743c68faa7ea719df74394bd744808e2f6090f6.tar.bz2 scala-c743c68faa7ea719df74394bd744808e2f6090f6.zip |
- Fixed type of generated lists
-rw-r--r-- | sources/scalac/transformer/matching/LeftTracerInScala.java | 17 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/RightTracerInScala.java | 2 |
2 files changed, 11 insertions, 8 deletions
diff --git a/sources/scalac/transformer/matching/LeftTracerInScala.java b/sources/scalac/transformer/matching/LeftTracerInScala.java index fec2d4dc9a..8146daa898 100644 --- a/sources/scalac/transformer/matching/LeftTracerInScala.java +++ b/sources/scalac/transformer/matching/LeftTracerInScala.java @@ -20,6 +20,8 @@ public class LeftTracerInScala extends TracerInScala { /** symbol of the accumulator ( scala.SequenceList ) */ Symbol accumSym; + Type accumType; + Type accumTypeArg; Type _accumType( Type elemType ) { return cf.SeqTraceType( elemType ); @@ -82,14 +84,15 @@ public class LeftTracerInScala extends TracerInScala { nestedMap = new HashMap(); super.initializeSyms(); - + this.accumType = _accumType( elementType ); + this.accumTypeArg = accumType.typeArgs()[0]; this.accumSym = newParam("accum") // accumulator - .setType( _accumType( elementType )); + .setType( accumType ); this.funSym .setType( new Type.MethodType( new Symbol[] { accumSym, iterSym, stateSym}, - _accumType( elementType ))); + accumType)); // 2 do: rename switchresultsym to something else... @@ -98,7 +101,7 @@ public class LeftTracerInScala extends TracerInScala { cf.fresh.newName("trace"), owner, 0 ) - .setType( _accumType( elementType ) ) ; + .setType( accumType ) ; } // should throw an exception here really, e.g. MatchError @@ -132,7 +135,7 @@ public class LeftTracerInScala extends TracerInScala { */ Tree hd = cf.newPair( gen.mkIntLit(cf.pos, i), currentElem() ); Tree newAcc = gen.Cons(cf.pos, - hd.type, + accumTypeArg, hd, gen.Ident( cf.pos, accumSym )); @@ -221,7 +224,7 @@ public class LeftTracerInScala extends TracerInScala { cf.fresh.newName("acc"), owner, 0 ) - .setType( _accumType( elementType ) ) ; + .setType( accumType ) ; // `val acc = SeqNil[ elementType ]' init accumulator v.add( gen.ValDef( emptyAccSym, emptyAcc) ); @@ -307,7 +310,7 @@ public class LeftTracerInScala extends TracerInScala { elementType)); //System.err.println(hd.type); return gen.Cons( cf.pos, - hd.type(), + accumTypeArg, hd, gen.Ident( cf.pos, accumSym )); } diff --git a/sources/scalac/transformer/matching/RightTracerInScala.java b/sources/scalac/transformer/matching/RightTracerInScala.java index 3f84b33aaf..b3ee33b8d7 100644 --- a/sources/scalac/transformer/matching/RightTracerInScala.java +++ b/sources/scalac/transformer/matching/RightTracerInScala.java @@ -127,7 +127,7 @@ public class RightTracerInScala extends TracerInScala { Tree prependToHelpVar( Symbol realVar, Tree elem ) { Tree hv = refHelpVar( realVar ); - return gen.Assign( hv, gen.Cons( cf.pos, elem.type(), elem, hv )); + return gen.Assign( hv, gen.Cons( cf.pos, elementType, elem, hv )); /* return cf.Block(pos, new Tree [] { |