diff options
author | buraq <buraq@epfl.ch> | 2003-07-05 17:57:07 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-07-05 17:57:07 +0000 |
commit | 1554123d308c751738e030403688ab179f72636b (patch) | |
tree | 5228b72102920cc99da172c4ef379b691b34fc21 /sources/scalac/transformer | |
parent | 4912b7dd537895020673d4c560cff5bd8ca579f6 (diff) | |
download | scala-1554123d308c751738e030403688ab179f72636b.tar.gz scala-1554123d308c751738e030403688ab179f72636b.tar.bz2 scala-1554123d308c751738e030403688ab179f72636b.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac/transformer')
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: |