diff options
author | buraq <buraq@epfl.ch> | 2003-10-29 14:24:53 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-10-29 14:24:53 +0000 |
commit | 2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff (patch) | |
tree | 871455435668281d69fca84fc40f113d72619cd3 /sources/scalac | |
parent | f381bdba78f74f5baa41c597bc5f1cffef4c290c (diff) | |
download | scala-2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff.tar.gz scala-2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff.tar.bz2 scala-2a4fe8cf434d52f9a47ba51457d68b5cea6be4ff.zip |
fixed bug196 with a wild hack
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/transformer/matching/TestRegTraverser.java | 60 |
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; + } } |