summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/matching/PatternMatcher.java
diff options
context:
space:
mode:
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 ] );