@@ -288,10 +288,10 @@ impl AllowCapturingSelfFlag : cmp::Eq {
288
288
pure fn ne ( other : & AllowCapturingSelfFlag ) -> bool { !self . eq ( other) }
289
289
}
290
290
291
- enum EnumVariantOrConstResolution {
292
- FoundEnumVariant ( def ) ,
291
+ enum BareIdentifierPatternResolution {
292
+ FoundStructOrEnumVariant ( def ) ,
293
293
FoundConst ,
294
- EnumVariantOrConstNotFound
294
+ BareIdentifierPatternUnresolved
295
295
}
296
296
297
297
// Specifies how duplicates should be handled when adding a child item if
@@ -4187,28 +4187,31 @@ impl Resolver {
4187
4187
if !path.global && path.idents.len() == 1u => {
4188
4188
4189
4189
// The meaning of pat_ident with no type parameters
4190
- // depends on whether an enum variant with that name is in
4191
- // scope. The probing lookup has to be careful not to emit
4192
- // spurious errors. Only matching patterns (match) can
4193
- // match nullary variants. For binding patterns (let),
4194
- // matching such a variant is simply disallowed (since
4195
- // it's rarely what you want).
4190
+ // depends on whether an enum variant or unit-like struct
4191
+ // with that name is in scope. The probing lookup has to
4192
+ // be careful not to emit spurious errors. Only matching
4193
+ // patterns (match) can match nullary variants or
4194
+ // unit-like structs. For binding patterns (let), matching
4195
+ // such a value is simply disallowed (since it's rarely
4196
+ // what you want).
4196
4197
4197
4198
let ident = path.idents[0];
4198
4199
4199
- match self.resolve_enum_variant_or_const(ident) {
4200
- FoundEnumVariant(def) if mode == RefutableMode => {
4200
+ match self.resolve_bare_identifier_pattern(ident) {
4201
+ FoundStructOrEnumVariant(def)
4202
+ if mode == RefutableMode => {
4201
4203
debug!(" ( resolving pattern) resolving `%s` to \
4202
- enum variant",
4204
+ struct or enum variant",
4203
4205
self.session.str_of(ident));
4204
4206
4205
4207
self.record_def(pattern.id, def);
4206
4208
}
4207
- FoundEnumVariant (_) => {
4209
+ FoundStructOrEnumVariant (_) => {
4208
4210
self.session.span_err(pattern.span,
4209
4211
fmt!(" declaration of `%s` \
4210
4212
shadows an enum \
4211
- that' s in scope",
4213
+ variant or unit-like \
4214
+ struct in scope",
4212
4215
self.session
4213
4216
.str_of(ident)));
4214
4217
}
@@ -4218,7 +4221,7 @@ impl Resolver {
4218
4221
conflicts with a constant \
4219
4222
in scope");
4220
4223
}
4221
- EnumVariantOrConstNotFound => {
4224
+ BareIdentifierPatternUnresolved => {
4222
4225
debug!(" ( resolving pattern) binding `%s`",
4223
4226
self . session. str_of( ident) ) ;
4224
4227
@@ -4349,13 +4352,11 @@ impl Resolver {
4349
4352
}
4350
4353
}
4351
4354
4352
- fn resolve_enum_variant_or_const(name: ident)
4353
- -> EnumVariantOrConstResolution {
4354
-
4355
+ fn resolve_bare_identifier_pattern(name: ident)
4356
+ -> BareIdentifierPatternResolution {
4355
4357
match self.resolve_item_in_lexical_scope(self.current_module,
4356
- name,
4357
- ValueNS) {
4358
-
4358
+ name,
4359
+ ValueNS) {
4359
4360
Success(target) => {
4360
4361
match target.bindings.value_def {
4361
4362
None => {
@@ -4364,14 +4365,14 @@ impl Resolver {
4364
4365
}
4365
4366
Some(def) => {
4366
4367
match def.def {
4367
- def @ def_variant(*) => {
4368
- return FoundEnumVariant (def);
4368
+ def @ def_variant(*) | def @ def_class(*) => {
4369
+ return FoundStructOrEnumVariant (def);
4369
4370
}
4370
4371
def_const(*) => {
4371
4372
return FoundConst;
4372
4373
}
4373
4374
_ => {
4374
- return EnumVariantOrConstNotFound ;
4375
+ return BareIdentifierPatternUnresolved ;
4375
4376
}
4376
4377
}
4377
4378
}
@@ -4383,7 +4384,7 @@ impl Resolver {
4383
4384
}
4384
4385
4385
4386
Failed => {
4386
- return EnumVariantOrConstNotFound ;
4387
+ return BareIdentifierPatternUnresolved ;
4387
4388
}
4388
4389
}
4389
4390
}
0 commit comments