@@ -1564,19 +1564,19 @@ impl<'a> Resolver<'a> {
1564
1564
}
1565
1565
ast:: TypeTraitItem ( ref associated_type) => {
1566
1566
let def = DefAssociatedTy ( local_def (
1567
- associated_type. id ) ) ;
1567
+ associated_type. ty_param . id ) ) ;
1568
1568
1569
1569
let name_bindings =
1570
- self . add_child ( associated_type. ident . name ,
1570
+ self . add_child ( associated_type. ty_param . ident . name ,
1571
1571
module_parent. clone ( ) ,
1572
1572
ForbidDuplicateTypesAndValues ,
1573
- associated_type. span ) ;
1573
+ associated_type. ty_param . span ) ;
1574
1574
// NB: not IMPORTABLE
1575
1575
name_bindings. define_type ( def,
1576
- associated_type. span ,
1576
+ associated_type. ty_param . span ,
1577
1577
PUBLIC ) ;
1578
1578
1579
- ( associated_type. ident . name , TypeTraitItemKind )
1579
+ ( associated_type. ty_param . ident . name , TypeTraitItemKind )
1580
1580
}
1581
1581
} ;
1582
1582
@@ -4223,7 +4223,7 @@ impl<'a> Resolver<'a> {
4223
4223
impl_items. as_slice ( ) ) ;
4224
4224
}
4225
4225
4226
- ItemTrait ( ref generics, ref unbound, ref bounds, ref methods ) => {
4226
+ ItemTrait ( ref generics, ref unbound, ref bounds, ref trait_items ) => {
4227
4227
// Create a new rib for the self type.
4228
4228
let mut self_type_rib = Rib :: new ( ItemRibKind ) ;
4229
4229
@@ -4251,13 +4251,13 @@ impl<'a> Resolver<'a> {
4251
4251
_ => { }
4252
4252
}
4253
4253
4254
- for method in ( * methods ) . iter ( ) {
4255
- // Create a new rib for the method -specific type
4254
+ for trait_item in ( * trait_items ) . iter ( ) {
4255
+ // Create a new rib for the trait_item -specific type
4256
4256
// parameters.
4257
4257
//
4258
4258
// FIXME #4951: Do we need a node ID here?
4259
4259
4260
- match * method {
4260
+ match * trait_item {
4261
4261
ast:: RequiredMethod ( ref ty_m) => {
4262
4262
this. with_type_parameter_rib
4263
4263
( HasTypeParameters ( & ty_m. generics ,
@@ -4292,8 +4292,9 @@ impl<'a> Resolver<'a> {
4292
4292
ProvidedMethod ( m. id ) ) ,
4293
4293
& * * m)
4294
4294
}
4295
- ast:: TypeTraitItem ( _) => {
4296
- visit:: walk_trait_item ( this, method) ;
4295
+ ast:: TypeTraitItem ( ref data) => {
4296
+ this. resolve_type_parameter ( & data. ty_param ) ;
4297
+ visit:: walk_trait_item ( this, trait_item) ;
4297
4298
}
4298
4299
}
4299
4300
}
@@ -4482,20 +4483,25 @@ impl<'a> Resolver<'a> {
4482
4483
fn resolve_type_parameters ( & mut self ,
4483
4484
type_parameters : & OwnedSlice < TyParam > ) {
4484
4485
for type_parameter in type_parameters. iter ( ) {
4485
- for bound in type_parameter. bounds . iter ( ) {
4486
- self . resolve_type_parameter_bound ( type_parameter. id , bound,
4487
- TraitBoundingTypeParameter ) ;
4488
- }
4489
- match & type_parameter. unbound {
4490
- & Some ( ref unbound) =>
4491
- self . resolve_type_parameter_bound (
4492
- type_parameter. id , unbound, TraitBoundingTypeParameter ) ,
4493
- & None => { }
4494
- }
4495
- match type_parameter. default {
4496
- Some ( ref ty) => self . resolve_type ( & * * ty) ,
4497
- None => { }
4498
- }
4486
+ self . resolve_type_parameter ( type_parameter) ;
4487
+ }
4488
+ }
4489
+
4490
+ fn resolve_type_parameter ( & mut self ,
4491
+ type_parameter : & TyParam ) {
4492
+ for bound in type_parameter. bounds . iter ( ) {
4493
+ self . resolve_type_parameter_bound ( type_parameter. id , bound,
4494
+ TraitBoundingTypeParameter ) ;
4495
+ }
4496
+ match & type_parameter. unbound {
4497
+ & Some ( ref unbound) =>
4498
+ self . resolve_type_parameter_bound (
4499
+ type_parameter. id , unbound, TraitBoundingTypeParameter ) ,
4500
+ & None => { }
4501
+ }
4502
+ match type_parameter. default {
4503
+ Some ( ref ty) => self . resolve_type ( & * * ty) ,
4504
+ None => { }
4499
4505
}
4500
4506
}
4501
4507
@@ -4582,14 +4588,14 @@ impl<'a> Resolver<'a> {
4582
4588
self . resolve_error ( trait_reference. path . span ,
4583
4589
format ! ( "`{}` is not a trait" ,
4584
4590
self . path_names_to_string(
4585
- & trait_reference. path) ) ) ;
4591
+ & trait_reference. path) ) ) ;
4586
4592
4587
4593
// If it's a typedef, give a note
4588
4594
match def {
4589
4595
DefTy ( ..) => {
4590
4596
self . session . span_note (
4591
- trait_reference. path . span ,
4592
- format ! ( "`type` aliases cannot \
4597
+ trait_reference. path . span ,
4598
+ format ! ( "`type` aliases cannot \
4593
4599
be used for traits")
4594
4600
. as_slice ( ) ) ;
4595
4601
}
0 commit comments