diff options
author | Matthias Zenger <mzenger@gmail.com> | 2003-09-11 11:11:19 +0000 |
---|---|---|
committer | Matthias Zenger <mzenger@gmail.com> | 2003-09-11 11:11:19 +0000 |
commit | 731b6785009f625c93ca2f796dccc8b5f3a966e4 (patch) | |
tree | c7a80de58b46d503b85ca6a86d20ada4df522343 | |
parent | 271e180836026743d8670910d3836942de1f3eef (diff) | |
download | scala-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.java | 64 |
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; } - } |