summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-10-07 16:57:57 +0000
committerburaq <buraq@epfl.ch>2003-10-07 16:57:57 +0000
commit791345238b62c96f0800d00284426fe797d45145 (patch)
tree71676643e27a0fe9ca33a56c6fc63055663cb979
parent51fb00e99f95016033236534526d3cf26c84083a (diff)
downloadscala-791345238b62c96f0800d00284426fe797d45145.tar.gz
scala-791345238b62c96f0800d00284426fe797d45145.tar.bz2
scala-791345238b62c96f0800d00284426fe797d45145.zip
scala version of test reg traverser
-rw-r--r--sources/scalac/transformer/matching/TestRegTraverser.scala45
1 files changed, 45 insertions, 0 deletions
diff --git a/sources/scalac/transformer/matching/TestRegTraverser.scala b/sources/scalac/transformer/matching/TestRegTraverser.scala
new file mode 100644
index 0000000000..9db9dac492
--- /dev/null
+++ b/sources/scalac/transformer/matching/TestRegTraverser.scala
@@ -0,0 +1,45 @@
+/* ____ ____ ____ ____ ______ *\
+** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
+** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
+** /_____/\____/\___/\____/____/ **
+** **
+** $Id$
+\* */
+
+package scalac.transformer.matching;
+
+import scalac.ast._;
+import scalac.util._;
+import scalac.symtab._;
+
+import java.util.{Set,HashSet};
+
+object TestRegTraverser extends Traverser {
+
+ var result:boolean = false;
+ var variables:Set = null:Set;
+
+ override def traverse( tree:Tree ):Unit = {
+
+ tree.match {
+ case Tree$Alternative(_) =>
+ result = true;
+ case Tree$Bind(_, pat) =>
+ variables.add(tree.symbol());
+ traverse(pat);
+ case Tree$Ident( name ) =>
+ result = ((name != Names.WILDCARD)
+ && variables.contains(tree.symbol()))
+ case Tree$CaseDef(pat, _, _) =>
+ traverse(pat);
+ case _ =>
+ super.traverse( tree );
+ }
+ }
+
+ def apply(t:Tree):boolean = {
+ variables = new HashSet();
+ traverse(t);
+ result
+ }
+}