diff options
author | buraq <buraq@epfl.ch> | 2003-07-04 20:07:28 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-07-04 20:07:28 +0000 |
commit | 1481659b350c019ee60a20e1cea936451d966864 (patch) | |
tree | 70efc3385518e5f5fa01bf108577706491486b3b /sources | |
parent | fe7e260075dc9c27b31c0ec535a139e3744fdbb7 (diff) | |
download | scala-1481659b350c019ee60a20e1cea936451d966864.tar.gz scala-1481659b350c019ee60a20e1cea936451d966864.tar.bz2 scala-1481659b350c019ee60a20e1cea936451d966864.zip |
typechecking for patterns
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scalac/typechecker/Analyzer.java | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java index abb6b7067f..a68f420361 100644 --- a/sources/scalac/typechecker/Analyzer.java +++ b/sources/scalac/typechecker/Analyzer.java @@ -1725,6 +1725,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { .setType(owntype); case Sequence(Tree[] trees): + //System.err.println("sequence with pt "+pt); Symbol seqClass = definitions.getType( Name.fromString("scala.Seq") ).symbol(); assert seqClass != Symbol.NONE : "did not find Seq"; @@ -1749,6 +1750,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { pt, pt, elemType); + System.err.println("subtree ["+i+"] has tpe "+tpe); trees[ i ] = transform( trees[ i ], this.mode | SEQUENCEmode, tpe); @@ -1756,27 +1758,32 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { return copy.Sequence( tree, trees ).setType( pt ); case Subsequence(Tree[] trees): - Type seqType = pt; + //System.err.println("subsequence with pt "+pt); + + Type seqType = pt; + Type elemType; switch( seqType ) { case TypeRef(_, _, Type[] args): - //assert args.length == 1:"encountered "+seqType.toString(); - // HACK - Type elemType; - if( args.length == 1 ) - elemType = args[ 0 ]; - else - elemType = pt; - for( int i = 0; i < trees.length; i++ ) { - Type tpe = revealSeqOrElemType( trees[ i ], pt, seqType, elemType); - //System.out.println("hello"); - trees[ i ] = transform( trees[ i ], this.mode, tpe); - } - return copy.Subsequence( tree, trees ).setType( pt ); + //assert args.length == 1:"encountered "+seqType.toString(); + // HACK + if( args.length == 1 ) + elemType = args[ 0 ]; + else + elemType = pt; + break; default: return error( tree.pos, "not a (sub)sequence" ); - } + } + for( int i = 0; i < trees.length; i++ ) { + Type tpe = revealSeqOrElemType( trees[ i ], pt, seqType, elemType); + //System.out.println("hello"); + trees[ i ] = transform( trees[ i ], this.mode, tpe); + } + System.err.println("subsequence pattern with type: "+seqType); + return copy.Subsequence( tree, trees ).setType( seqType ); case Alternative(Tree[] choices): + //System.err.println("alternative with pt "+pt); boolean save = this.inAlternative; this.inAlternative = true; |