diff options
author | Matthias Zenger <mzenger@gmail.com> | 2003-09-11 17:16:38 +0000 |
---|---|---|
committer | Matthias Zenger <mzenger@gmail.com> | 2003-09-11 17:16:38 +0000 |
commit | 874773fde6c2f9309125348583d64faf7ab14e1d (patch) | |
tree | 683597ec22921d6655eab44761d047534e780d73 /sources | |
parent | 499216593cf14cd504eeea5ace995cecdea8a5fe (diff) | |
download | scala-874773fde6c2f9309125348583d64faf7ab14e1d.tar.gz scala-874773fde6c2f9309125348583d64faf7ab14e1d.tar.bz2 scala-874773fde6c2f9309125348583d64faf7ab14e1d.zip |
Fixed a bug.
not having a symbol. But obviously, _ tree nodes seem to have null as
their symbol. Is this a contract or a bug in the Analyzer?
Diffstat (limited to 'sources')
-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 ); } |