@@ -4290,17 +4290,24 @@ pub impl Resolver {
4290
4290
}
4291
4291
}
4292
4292
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 .
4295
4295
match self . resolve_path( path, ValueNS , false , visitor) {
4296
4296
Some ( def @ def_variant( * ) ) |
4297
4297
Some ( def @ def_struct( * ) ) => {
4298
4298
self . record_def( pattern. id, def) ;
4299
4299
}
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
+ }
4300
4307
Some ( _) => {
4301
4308
self . session. span_err(
4302
4309
path. span,
4303
- fmt ! ( "not an enum variant: %s" ,
4310
+ fmt ! ( "not an enum variant or constant : %s" ,
4304
4311
* self . session. str_of(
4305
4312
* path. idents. last( ) ) ) ) ;
4306
4313
}
@@ -4316,6 +4323,33 @@ pub impl Resolver {
4316
4323
}
4317
4324
}
4318
4325
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
+
4319
4353
pat_lit( expr) => {
4320
4354
self . resolve_expr( expr, visitor) ;
4321
4355
}
0 commit comments