summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorMatthias Zenger <mzenger@gmail.com>2003-09-11 12:55:50 +0000
committerMatthias Zenger <mzenger@gmail.com>2003-09-11 12:55:50 +0000
commitd14fd54e1b85dfe3a47d36dd55b5b5f47cf9dbe2 (patch)
tree543338583f49609f2efabf6561fbd212ab9fd33b /sources/scalac
parent0eec3d4087b680b63cf0ae77d41e4624d4e4198b (diff)
downloadscala-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.
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/transformer/matching/PatternMatcher.java11
-rw-r--r--sources/scalac/transformer/matching/TestRegTraverser.java5
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 );
}