Skip to content

Commit 6713fae

Browse files
committed
---
yaml --- r: 53854 b: refs/heads/dist-snap c: aa4c19b h: refs/heads/master v: v3
1 parent 71695c2 commit 6713fae

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c
99
refs/heads/incoming: 44d4d6de762f3f9aae1fedcf454c66b79b3ad58d
10-
refs/heads/dist-snap: 2ccc6e0a57660aaf84c70208bb98c5eb4285de3a
10+
refs/heads/dist-snap: aa4c19b6abb86d93077fa63d3f0f893f8a3cb355
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1313
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/src/librustc/middle/resolve.rs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4290,17 +4290,24 @@ pub impl Resolver {
42904290
}
42914291
}
42924292

4293-
pat_ident(_, path, _) | pat_enum(path, _) => {
4294-
// These two must be enum variants or structs.
4293+
pat_ident(binding_mode, path, _) => {
4294+
// This must be an enum variant, struct, or constant.
42954295
match self.resolve_path(path, ValueNS, false, visitor) {
42964296
Some(def @ def_variant(*)) |
42974297
Some(def @ def_struct(*)) => {
42984298
self.record_def(pattern.id, def);
42994299
}
4300+
Some(def @ def_const(*)) => {
4301+
self.enforce_default_binding_mode(
4302+
pattern,
4303+
binding_mode,
4304+
"a constant");
4305+
self.record_def(pattern.id, def);
4306+
}
43004307
Some(_) => {
43014308
self.session.span_err(
43024309
path.span,
4303-
fmt!("not an enum variant: %s",
4310+
fmt!("not an enum variant or constant: %s",
43044311
*self.session.str_of(
43054312
*path.idents.last())));
43064313
}
@@ -4316,6 +4323,33 @@ pub impl Resolver {
43164323
}
43174324
}
43184325

4326+
pat_enum(path, _) => {
4327+
// This must be an enum variant or struct.
4328+
match self.resolve_path(path, ValueNS, false, visitor) {
4329+
Some(def @ def_variant(*)) |
4330+
Some(def @ def_struct(*)) => {
4331+
self.record_def(pattern.id, def);
4332+
}
4333+
Some(_) => {
4334+
self.session.span_err(
4335+
path.span,
4336+
fmt!("not an enum variant or struct: %s",
4337+
*self.session.str_of(
4338+
*path.idents.last())));
4339+
}
4340+
None => {
4341+
self.session.span_err(path.span,
4342+
~"unresolved enum variant \
4343+
or struct");
4344+
}
4345+
}
4346+
4347+
// Check the types in the path pattern.
4348+
for path.types.each |ty| {
4349+
self.resolve_type(*ty, visitor);
4350+
}
4351+
}
4352+
43194353
pat_lit(expr) => {
43204354
self.resolve_expr(expr, visitor);
43214355
}

0 commit comments

Comments
 (0)