summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-07-04 20:07:28 +0000
committerburaq <buraq@epfl.ch>2003-07-04 20:07:28 +0000
commit1481659b350c019ee60a20e1cea936451d966864 (patch)
tree70efc3385518e5f5fa01bf108577706491486b3b
parentfe7e260075dc9c27b31c0ec535a139e3744fdbb7 (diff)
downloadscala-1481659b350c019ee60a20e1cea936451d966864.tar.gz
scala-1481659b350c019ee60a20e1cea936451d966864.tar.bz2
scala-1481659b350c019ee60a20e1cea936451d966864.zip
typechecking for patterns
-rw-r--r--sources/scalac/typechecker/Analyzer.java37
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;