Skip to content

Commit d782c82

Browse files
committed
---
yaml --- r: 50678 b: refs/heads/try c: aa4c19b h: refs/heads/master v: v3
1 parent 94dc829 commit d782c82

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
@@ -2,7 +2,7 @@
22
refs/heads/master: 5f13e9ccc2e3328d4cd8ca49f84e6840dd998346
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: f7a2371c176663d59062ec5158f39faecba45768
5-
refs/heads/try: 2ccc6e0a57660aaf84c70208bb98c5eb4285de3a
5+
refs/heads/try: aa4c19b6abb86d93077fa63d3f0f893f8a3cb355
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c

branches/try/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)