summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-07-05 17:57:07 +0000
committerburaq <buraq@epfl.ch>2003-07-05 17:57:07 +0000
commit1554123d308c751738e030403688ab179f72636b (patch)
tree5228b72102920cc99da172c4ef379b691b34fc21 /sources/scalac/transformer
parent4912b7dd537895020673d4c560cff5bd8ca579f6 (diff)
downloadscala-1554123d308c751738e030403688ab179f72636b.tar.gz
scala-1554123d308c751738e030403688ab179f72636b.tar.bz2
scala-1554123d308c751738e030403688ab179f72636b.zip
*** empty log message ***
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r--sources/scalac/transformer/matching/BerrySethi.java25
-rw-r--r--sources/scalac/transformer/matching/CodeFactory.java2
-rw-r--r--sources/scalac/transformer/matching/PatternMatcher.java10
-rw-r--r--sources/scalac/transformer/matching/SplitNested.java4
-rw-r--r--sources/scalac/transformer/matching/TestRegTraverser.java1
5 files changed, 22 insertions, 20 deletions
diff --git a/sources/scalac/transformer/matching/BerrySethi.java b/sources/scalac/transformer/matching/BerrySethi.java
index 1d2bc1ec87..72b39ff106 100644
--- a/sources/scalac/transformer/matching/BerrySethi.java
+++ b/sources/scalac/transformer/matching/BerrySethi.java
@@ -48,9 +48,9 @@ class BerrySethi {
case Apply(_, _):
return false;
case Sequence( Tree[] trees ):
- return trees.length == 0;
- case Subsequence( Tree[] trees ):
- return nullable( trees );
+ return (trees.length == 0) || nullable( trees );
+ //case Subsequence( Tree[] trees ):
+ //return
case Bind(Name n, Tree t):
/*
if( isStar( n ) ) // generated for star/plus(?)
@@ -110,8 +110,8 @@ class BerrySethi {
TreeSet tmp = new TreeSet();
tmp.add( (Integer) posMap.get( pat )); // singleton set
return tmp;
- case Subsequence( Tree[] trees ):
- return compFirst( trees );
+ //case Subsequence( Tree[] trees ):
+ //return compFirst( trees );
case Alternative( Tree[] trees ):
TreeSet tmp = new TreeSet();
for( int i = 0; i < trees.length; i++ ) {
@@ -149,8 +149,8 @@ class BerrySethi {
TreeSet tmp = new TreeSet();
tmp.add( (Integer) posMap.get( pat )); // singleton set
return tmp;
- case Subsequence( Tree[] trees ):
- return compLast( trees );
+ //case Subsequence( Tree[] trees ):
+ //return compLast( trees );
case Alternative( Tree[] trees ):
TreeSet tmp = new TreeSet();
for( int i = 0; i < trees.length; i++ ) {
@@ -250,7 +250,7 @@ class BerrySethi {
*/
TreeSet compFollow1( TreeSet fol, Tree pat ) {
switch( pat ) {
- case Subsequence(Tree[] trees):
+ case Sequence(Tree[] trees):
TreeSet first = null;
int i = trees.length;
if( i > 0 ) { // is nonempty
@@ -265,6 +265,7 @@ class BerrySethi {
}
if( null == first ) first = new TreeSet();
return first;
+
case Alternative(Tree[] choices):
TreeSet first = new TreeSet();
for( int i = choices.length - 1; i >= 0; --i ) {
@@ -327,7 +328,6 @@ class BerrySethi {
//System.out.println("Ident("+n+",...) follow:"+tset);
return first;
- case Sequence( _ ):
case Apply(_, _):
case Literal( _ ):
case Typed(_,_):
@@ -369,7 +369,6 @@ class BerrySethi {
switch( pat ) {
// (is tree automaton stuff, more than Berry-Sethi)
- case Sequence( _ ):
case Apply( _, _ ):
case Typed( _, _ ):
case Select( _, _ ):
@@ -384,7 +383,7 @@ class BerrySethi {
return ;
- case Subsequence( Tree[] trees ):
+ case Sequence( Tree[] trees ):
for( int i = 0; i < trees.length; i++ ) {
traverse( trees[ i ] );
}
@@ -553,8 +552,8 @@ class BerrySethi {
*/
//System.out.println( nullableSequence( pat )); // UNIT TEST
switch( pat ) {
- case Subsequence( Tree[] subexpr ): // NEW VERSION
- return automatonFrom( new Tree.Sequence( subexpr ), finalTag ); // NEW VERSION
+ //case Subsequence( Tree[] subexpr ): // NEW VERSION
+ //return automatonFrom( new Tree.Sequence( subexpr ), finalTag ); // NEW VERSION
case Sequence( Tree[] subexpr ):
initialize( subexpr );
diff --git a/sources/scalac/transformer/matching/CodeFactory.java b/sources/scalac/transformer/matching/CodeFactory.java
index 9d8d4c174b..b3240dfbbf 100644
--- a/sources/scalac/transformer/matching/CodeFactory.java
+++ b/sources/scalac/transformer/matching/CodeFactory.java
@@ -267,7 +267,7 @@ class CodeFactory extends PatternTool {
}
Type getElemType( Type seqType ) {
- System.err.println("getElemType("+seqType+")");
+ //System.err.println("getElemType("+seqType+")");
Symbol seqClass = defs.getType( Name.fromString("scala.Seq") ).symbol();
assert seqClass != Symbol.NONE : "did not find Seq";
diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java
index 784a96377b..bebab020f8 100644
--- a/sources/scalac/transformer/matching/PatternMatcher.java
+++ b/sources/scalac/transformer/matching/PatternMatcher.java
@@ -301,6 +301,8 @@ public class PatternMatcher extends PatternTool {
}
return args;
case Sequence(Tree[] ts):
+ //if( TestRegTraverser.apply( tree ) )
+ // return Tree.EMPTY_ARRAY; // let sequence matcher handle it
return ts;
default:
return Tree.EMPTY_ARRAY;
@@ -382,8 +384,6 @@ public class PatternMatcher extends PatternTool {
return mk.ConstantPat(tree.pos, getConstrType(tree.type), value);
case Sequence(Tree[] ts):
return mk.SequencePat(tree.pos, tree.type, ts.length, tree);
- case Subsequence(Tree[] ts):
- return mk.SequencePat(tree.pos, tree.type, ts.length, tree);
case Alternative(Tree[] ts): // CAN THIS WORK ?
assert ts.length > 0;
PatternNode res = patternNode( ts[ 0 ], header, env );
@@ -687,6 +687,8 @@ public class PatternMatcher extends PatternTool {
toTree(node.and)}, defs.BOOLEAN_TYPE),
toTree(node.or, selector.duplicate())).setType(defs.BOOLEAN_TYPE);
case SequencePat(Symbol casted, int len, Tree tree):
+ //return callSequenceMatcher( node, selector );
+
if( TestRegTraverser.apply( tree ) )
{
//System.err.println("calling sequence matcher");
@@ -766,12 +768,14 @@ public class PatternMatcher extends PatternTool {
defaultNode = node;
}
} while (defaultNode == null) ;
-
+ System.out.println("collectSeqPats(1):"+seqPatNodes);
+ System.out.println("collectSeqPats(2):"+bodies);
return defaultNode;
}
Tree callSequenceMatcher( PatternNode node,
Tree selector) {
+ System.out.println("callSequenceMatcher("+node+","+selector+")");
/* ???????????????????????? necessary to test whether is a Seq?
make.If(selector.pos,
diff --git a/sources/scalac/transformer/matching/SplitNested.java b/sources/scalac/transformer/matching/SplitNested.java
index 39e6225eb9..4f9ee29123 100644
--- a/sources/scalac/transformer/matching/SplitNested.java
+++ b/sources/scalac/transformer/matching/SplitNested.java
@@ -51,8 +51,8 @@ public class SplitNested {
return new Tree.Alternative( split( trees )) ;
- case Subsequence(Tree[] trees):
- return new Tree.Subsequence( split( trees )) ;
+ //case Subsequence(Tree[] trees):
+ //return new Tree.Subsequence( split( trees )) ;
default:
return pat;
diff --git a/sources/scalac/transformer/matching/TestRegTraverser.java b/sources/scalac/transformer/matching/TestRegTraverser.java
index b9d070ea85..050fcf931b 100644
--- a/sources/scalac/transformer/matching/TestRegTraverser.java
+++ b/sources/scalac/transformer/matching/TestRegTraverser.java
@@ -21,7 +21,6 @@ import Tree.Bind;
switch (tree) {
case Alternative(Tree[] ts):
case Bind(_, _):
- case Subsequence(_):
result = true;
break;
default: