summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/matching/PatternMatcher.java
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-10-30 11:06:14 +0000
committerburaq <buraq@epfl.ch>2003-10-30 11:06:14 +0000
commiteb7da0de46695829b4459250c19bfa25b3dda75b (patch)
tree1554d19fb95437b941110774e7ced92d7f037448 /sources/scalac/transformer/matching/PatternMatcher.java
parentc48e8b69eb030c8ad0b62ae1b41b64a871af80c7 (diff)
downloadscala-eb7da0de46695829b4459250c19bfa25b3dda75b.tar.gz
scala-eb7da0de46695829b4459250c19bfa25b3dda75b.tar.bz2
scala-eb7da0de46695829b4459250c19bfa25b3dda75b.zip
fixed bugs and cleaned up code in AlgMatcher th...
fixed bugs and cleaned up code in AlgMatcher that was duplicated of Pattern Matcher
Diffstat (limited to 'sources/scalac/transformer/matching/PatternMatcher.java')
-rw-r--r--sources/scalac/transformer/matching/PatternMatcher.java14
1 files changed, 6 insertions, 8 deletions
diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java
index 4572d565ba..6445034f10 100644
--- a/sources/scalac/transformer/matching/PatternMatcher.java
+++ b/sources/scalac/transformer/matching/PatternMatcher.java
@@ -187,8 +187,9 @@ public class PatternMatcher extends PatternTool {
target.and = mk.Body(caseDef.pos, env.boundVars(), guard, body);
else if (target.and instanceof Body)
updateBody((Body)target.and, env.boundVars(), guard, body);
- else
+ else {
unit.error(pat.pos, "duplicate case");
+ }
}
}
@@ -257,14 +258,16 @@ public class PatternMatcher extends PatternTool {
case Bind(_, Tree pat):
return patternArgs(pat);
case Apply(_, Tree[] args):
- if ( isSeqApply((Apply) tree) )// && !delegateSequenceMatching)
+ if ( isSeqApply((Apply) tree) && !delegateSequenceMatching)
switch (args[0]) {
case Sequence(Tree[] ts):
return ts;
}
return args;
case Sequence(Tree[] ts):
- return ts;
+ if (!delegateSequenceMatching)
+ return ts;
+ return Tree.EMPTY_ARRAY;
default:
return Tree.EMPTY_ARRAY;
}
@@ -286,17 +289,12 @@ public class PatternMatcher extends PatternTool {
return node;
case Apply(Tree fn, Tree[] args): // pattern with args
if( isSeqApply((Apply) tree ) ) {
- //System.err.println( "isSeqApply!"+tree);
- //System.err.println( "deleg ?"+delegateSequenceMatching);
-
if ( !delegateSequenceMatching ) {
switch (args[0]) {
case Sequence(Tree[] ts):
return mk.SequencePat( tree.pos, tree.type, ts.length );
}
} else {
- //System.err.println( "CONTAIN");
-
PatternNode res = mk.ConstrPat(tree.pos, tree.type);
res.and = mk.Header(tree.pos, header.type, header.selector);
res.and.and = mk.SeqContainerPat( tree.pos, tree.type, args[ 0 ] );