summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Zenger <mzenger@gmail.com>2003-09-11 11:11:19 +0000
committerMatthias Zenger <mzenger@gmail.com>2003-09-11 11:11:19 +0000
commit731b6785009f625c93ca2f796dccc8b5f3a966e4 (patch)
treec7a80de58b46d503b85ca6a86d20ada4df522343
parent271e180836026743d8670910d3836942de1f3eef (diff)
downloadscala-731b6785009f625c93ca2f796dccc8b5f3a966e4.tar.gz
scala-731b6785009f625c93ca2f796dccc8b5f3a966e4.tar.bz2
scala-731b6785009f625c93ca2f796dccc8b5f3a966e4.zip
Allow non-recursive bindings for the "old" patt...
Allow non-recursive bindings for the "old" pattern matcher.
-rw-r--r--sources/scalac/transformer/matching/TestRegTraverser.java64
1 files changed, 36 insertions, 28 deletions
diff --git a/sources/scalac/transformer/matching/TestRegTraverser.java b/sources/scalac/transformer/matching/TestRegTraverser.java
index 9991daf48a..feffbba4f7 100644
--- a/sources/scalac/transformer/matching/TestRegTraverser.java
+++ b/sources/scalac/transformer/matching/TestRegTraverser.java
@@ -1,38 +1,46 @@
-package scalac.transformer.matching ;
+/* ____ ____ ____ ____ ______ *\
+** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
+** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
+** /_____/\____/\___/\____/____/ **
+** **
+** $Id$
+\* */
-import scalac.ast.Tree;
-import scalac.util.Name;
-import scalac.symtab.Symbol ;
-import scalac.ast.Traverser ;
+package scalac.transformer.matching;
-import Tree.Ident;
-import Tree.Bind;
+import scalac.ast.*;
+import scalac.util.*;
+import scalac.symtab.*;
+import java.util.*;
-public class TestRegTraverser extends Traverser {
-
- boolean result;
- public TestRegTraverser() {
- super();
- result = false;
- }
+public class TestRegTraverser extends Traverser {
+ boolean result = false;
+ Set variables = new HashSet();
public void traverse(Tree tree) {
- switch (tree) {
- case Alternative(Tree[] ts):
- case Bind(_, _):
- result = true;
- break;
- default:
- super.traverse( tree );
- }
+ if (!result)
+ switch (tree) {
+ case Alternative(Tree[] ts):
+ result = true;
+ break;
+ case Bind(_, Tree pat):
+ variables.add(tree.symbol());
+ traverse(pat);
+ break;
+ case Ident(_):
+ if (variables.contains(tree.symbol()))
+ result = true;
+ break;
+ default:
+ super.traverse( tree );
+ }
}
- public static boolean apply( Tree t ) {
- TestRegTraverser trt = new TestRegTraverser();
- trt.traverse( t );
- //System.err.println("TestRegTraverser says "+t+" -> "+trt.result);
- return trt.result;
+ public static boolean apply(Tree t) {
+ TestRegTraverser trt = new TestRegTraverser();
+ trt.traverse(t);
+ //System.err.println("TestRegTraverser says "+t+" -> "+trt.result);
+ return trt.result;
}
-
}