From c743c68faa7ea719df74394bd744808e2f6090f6 Mon Sep 17 00:00:00 2001 From: paltherr Date: Wed, 12 Nov 2003 09:48:46 +0000 Subject: - Fixed type of generated lists --- .../scalac/transformer/matching/LeftTracerInScala.java | 17 ++++++++++------- .../scalac/transformer/matching/RightTracerInScala.java | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) (limited to 'sources/scalac/transformer') 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 [] { -- cgit v1.2.3