summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-11-12 09:48:46 +0000
committerpaltherr <paltherr@epfl.ch>2003-11-12 09:48:46 +0000
commitc743c68faa7ea719df74394bd744808e2f6090f6 (patch)
tree4cc9da53a0d1fffd0e0b420d0b7ea7c2aabcb793 /sources
parent4f86e73bfe663233ff734a3cbd47c5cb20431c0d (diff)
downloadscala-c743c68faa7ea719df74394bd744808e2f6090f6.tar.gz
scala-c743c68faa7ea719df74394bd744808e2f6090f6.tar.bz2
scala-c743c68faa7ea719df74394bd744808e2f6090f6.zip
- Fixed type of generated lists
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/transformer/matching/LeftTracerInScala.java17
-rw-r--r--sources/scalac/transformer/matching/RightTracerInScala.java2
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 [] {