summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorMatthias Zenger <mzenger@gmail.com>2003-09-11 17:16:38 +0000
committerMatthias Zenger <mzenger@gmail.com>2003-09-11 17:16:38 +0000
commit874773fde6c2f9309125348583d64faf7ab14e1d (patch)
tree683597ec22921d6655eab44761d047534e780d73 /sources
parent499216593cf14cd504eeea5ace995cecdea8a5fe (diff)
downloadscala-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.java6
-rw-r--r--sources/scalac/transformer/matching/TestRegTraverser.java10
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 );
}