diff options
author | Matthias Zenger <mzenger@gmail.com> | 2003-09-11 12:55:50 +0000 |
---|---|---|
committer | Matthias Zenger <mzenger@gmail.com> | 2003-09-11 12:55:50 +0000 |
commit | d14fd54e1b85dfe3a47d36dd55b5b5f47cf9dbe2 (patch) | |
tree | 543338583f49609f2efabf6561fbd212ab9fd33b | |
parent | 0eec3d4087b680b63cf0ae77d41e4624d4e4198b (diff) | |
download | scala-d14fd54e1b85dfe3a47d36dd55b5b5f47cf9dbe2.tar.gz scala-d14fd54e1b85dfe3a47d36dd55b5b5f47cf9dbe2.tar.bz2 scala-d14fd54e1b85dfe3a47d36dd55b5b5f47cf9dbe2.zip |
Implemented variable binding for the "old" patt...
Implemented variable binding for the "old" pattern matcher.
-rw-r--r-- | sources/scalac/transformer/matching/PatternMatcher.java | 11 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/TestRegTraverser.java | 5 |
2 files changed, 14 insertions, 2 deletions
diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java index 1ee3b2574f..6548ce619e 100644 --- a/sources/scalac/transformer/matching/PatternMatcher.java +++ b/sources/scalac/transformer/matching/PatternMatcher.java @@ -9,7 +9,6 @@ package scalac.transformer.matching; import ch.epfl.lamp.util.Position; - import scalac.*; import scalac.ast.*; import scalac.util.*; @@ -254,6 +253,8 @@ public class PatternMatcher extends PatternTool { protected Tree[] patternArgs(Tree tree) { switch (tree) { + case Bind(_, Tree pat): + return patternArgs(pat); case Apply(_, Tree[] args): if (args.length == 1 && (tree.type.symbol().flags & Modifiers.CASE) == 0) switch (args[0]) { @@ -270,6 +271,14 @@ public class PatternMatcher extends PatternTool { protected PatternNode patternNode(Tree tree, Header header, CaseEnv env) { switch (tree) { + case Bind(Name name, Tree pat): + PatternNode node = patternNode(pat, header, env); + if ((env != null) && (name != Names.WILDCARD)) + env.newBoundVar(tree.pos, + tree.symbol(), + tree.type, + header.selector); + return node; case Apply(Tree fn, Tree[] args): // pattern with args if (args.length == 1 && (tree.type.symbol().flags & Modifiers.CASE) == 0) switch (args[0]) { diff --git a/sources/scalac/transformer/matching/TestRegTraverser.java b/sources/scalac/transformer/matching/TestRegTraverser.java index feffbba4f7..edee4672b6 100644 --- a/sources/scalac/transformer/matching/TestRegTraverser.java +++ b/sources/scalac/transformer/matching/TestRegTraverser.java @@ -21,7 +21,7 @@ public class TestRegTraverser extends Traverser { public void traverse(Tree tree) { if (!result) switch (tree) { - case Alternative(Tree[] ts): + case Alternative(_): result = true; break; case Bind(_, Tree pat): @@ -32,6 +32,9 @@ public class TestRegTraverser extends Traverser { if (variables.contains(tree.symbol())) result = true; break; + case CaseDef(Tree pat, _, _): + traverse(pat); + break; default: super.traverse( tree ); } |