diff options
-rw-r--r-- | sources/scalac/transformer/matching/PatternMatcher.java | 6 | ||||
-rw-r--r-- | sources/scalac/transformer/matching/TestRegTraverser.java | 10 |
2 files changed, 11 insertions, 5 deletions
diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java index b82ff72aea..7b944a2fec 100644 --- a/sources/scalac/transformer/matching/PatternMatcher.java +++ b/sources/scalac/transformer/matching/PatternMatcher.java @@ -309,10 +309,12 @@ public class PatternMatcher extends PatternTool { } return node; case Ident(Name name): // pattern without args or variable - if (tree.symbol().isPrimaryConstructor()) + if (name == Names.WILDCARD) + return mk.DefaultPat(tree.pos, header.type); + else if (tree.symbol().isPrimaryConstructor()) return mk.ConstrPat(tree.pos, tree.type); else if (name.isVariable()) { - if ((env != null) && (name != Names.WILDCARD)) + if (env != null) env.newBoundVar(tree.pos, tree.symbol(), tree.type, diff --git a/sources/scalac/transformer/matching/TestRegTraverser.java b/sources/scalac/transformer/matching/TestRegTraverser.java index feffbba4f7..cea429eb03 100644 --- a/sources/scalac/transformer/matching/TestRegTraverser.java +++ b/sources/scalac/transformer/matching/TestRegTraverser.java @@ -21,17 +21,21 @@ 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): variables.add(tree.symbol()); traverse(pat); break; - case Ident(_): - if (variables.contains(tree.symbol())) + case Ident(Name name): + if ((name != Names.WILDCARD) && + variables.contains(tree.symbol())) result = true; break; + case CaseDef(Tree pat, _, _): + traverse(pat); + break; default: super.traverse( tree ); } |