@@ -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