summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-10-29 14:24:53 +0000
committerburaq <buraq@epfl.ch>2003-10-29 14:24:53 +0000
commit2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff (patch)
tree871455435668281d69fca84fc40f113d72619cd3
parentf381bdba78f74f5baa41c597bc5f1cffef4c290c (diff)
downloadscala-2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff.tar.gz
scala-2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff.tar.bz2
scala-2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff.zip
fixed bug196 with a wild hack
-rw-r--r--sources/scalac/transformer/matching/TestRegTraverser.java60
1 files changed, 39 insertions, 21 deletions
diff --git a/sources/scalac/transformer/matching/TestRegTraverser.java b/sources/scalac/transformer/matching/TestRegTraverser.java
index d7c5a6239f..6df9c486e2 100644
--- a/sources/scalac/transformer/matching/TestRegTraverser.java
+++ b/sources/scalac/transformer/matching/TestRegTraverser.java
@@ -17,30 +17,44 @@ import java.util.*;
public class TestRegTraverser extends Traverser {
boolean result = false;
- Set variables = new HashSet();
+ Set variables = new HashSet();
+ static Set nilVariables = new HashSet();
public void traverse(Tree tree) {
if (!result)
- switch (tree) {
- case Alternative(_):
- result = true;
- break;
- case Bind(_, Tree pat):
- variables.add(tree.symbol());
- traverse(pat);
- break;
- case Ident(_):
- Symbol symbol = tree.symbol();
- if ((symbol != Global.instance.definitions.PATTERN_WILDCARD) &&
- variables.contains(symbol))
- result = true;
- break;
- case CaseDef(Tree pat, _, _):
- traverse(pat);
- break;
- default:
- super.traverse( tree );
- }
+ switch (tree) {
+ case Alternative(_):
+ result = true;
+ break;
+ case Bind(_, Tree pat):
+ if( TreeInfo.isEmptySequence( pat ) ) {
+ // annoying special case: b@() [or b@(()|()) after normalization]
+ //System.err.println("bindin empty "+tree.symbol());
+ nilVariables.add(tree.symbol());
+ } else {
+ variables.add(tree.symbol());
+ }
+ traverse(pat);
+ break;
+ case Ident(_):
+ Symbol symbol = tree.symbol();
+ if ((symbol != Global.instance.definitions.PATTERN_WILDCARD) &&
+ variables.contains(symbol))
+ result = true;
+ break;
+ case CaseDef(Tree pat, _, _):
+ traverse(pat);
+ break;
+
+ case Sequence( Tree[] trees):
+ //result = true;
+ traverse( trees );
+ result = true;
+ break;
+
+ default:
+ super.traverse( tree );
+ }
}
public static boolean apply(Tree t) {
@@ -49,4 +63,8 @@ public class TestRegTraverser extends Traverser {
//System.err.println("TestRegTraverser says "+t+" -> "+trt.result);
return trt.result;
}
+
+ public static Set getNilVariables() {
+ return nilVariables;
+ }
}