Skip to content

Commit 6a9a792

Browse files
committed
---
yaml --- r: 138991 b: refs/heads/try2 c: aa4c19b h: refs/heads/master i: 138989: 9e73866 138987: e121bf2 138983: 2008a90 138975: 75acddc v: v3
1 parent 9498043 commit 6a9a792

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
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 2ccc6e0a57660aaf84c70208bb98c5eb4285de3a
8+
refs/heads/try2: aa4c19b6abb86d93077fa63d3f0f893f8a3cb355
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

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