diff options
author | buraq <buraq@epfl.ch> | 2003-10-07 16:57:57 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-10-07 16:57:57 +0000 |
commit | 791345238b62c96f0800d00284426fe797d45145 (patch) | |
tree | 71676643e27a0fe9ca33a56c6fc63055663cb979 /sources/scalac | |
parent | 51fb00e99f95016033236534526d3cf26c84083a (diff) | |
download | scala-791345238b62c96f0800d00284426fe797d45145.tar.gz scala-791345238b62c96f0800d00284426fe797d45145.tar.bz2 scala-791345238b62c96f0800d00284426fe797d45145.zip |
scala version of test reg traverser
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/transformer/matching/TestRegTraverser.scala | 45 |
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 + } +} |