Skip to content

Commit eb79361

Browse files
committed
rollup merge of #18506 : nikomatsakis/assoc-type-bounds
2 parents 8494368 + 3c84e31 commit eb79361

25 files changed

+520
-434
lines changed

src/librustc/middle/astencode.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ pub fn encode_inlined_item(ecx: &e::EncodeContext,
7979
e::IIForeignRef(i) => i.id,
8080
e::IITraitItemRef(_, &ast::ProvidedMethod(ref m)) => m.id,
8181
e::IITraitItemRef(_, &ast::RequiredMethod(ref m)) => m.id,
82-
e::IITraitItemRef(_, &ast::TypeTraitItem(ref ti)) => ti.id,
82+
e::IITraitItemRef(_, &ast::TypeTraitItem(ref ti)) => ti.ty_param.id,
8383
e::IIImplItemRef(_, &ast::MethodImplItem(ref m)) => m.id,
8484
e::IIImplItemRef(_, &ast::TypeImplItem(ref ti)) => ti.id,
8585
};
@@ -154,7 +154,7 @@ pub fn decode_inlined_item<'tcx>(cdata: &cstore::crate_metadata,
154154
match *ti {
155155
ast::ProvidedMethod(ref m) => m.pe_ident(),
156156
ast::RequiredMethod(ref ty_m) => ty_m.ident,
157-
ast::TypeTraitItem(ref ti) => ti.ident,
157+
ast::TypeTraitItem(ref ti) => ti.ty_param.ident,
158158
}
159159
},
160160
ast::IIImplItem(_, ref m) => {
@@ -709,8 +709,9 @@ impl<'a> vtable_decoder_helpers for reader::Decoder<'a> {
709709
{
710710
let types = self.read_to_vec(|this| Ok(f(this))).unwrap();
711711
let selfs = self.read_to_vec(|this| Ok(f(this))).unwrap();
712+
let assocs = self.read_to_vec(|this| Ok(f(this))).unwrap();
712713
let fns = self.read_to_vec(|this| Ok(f(this))).unwrap();
713-
VecPerParamSpace::new(types, selfs, fns)
714+
VecPerParamSpace::new(types, selfs, assocs, fns)
714715
}
715716

716717
fn read_vtable_res_with_key(&mut self,

src/librustc/middle/privacy.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,8 @@ impl<'a, 'tcx, 'v> Visitor<'v> for EmbargoVisitor<'a, 'tcx> {
296296
self.exported_items.insert(m.id);
297297
}
298298
ast::TypeTraitItem(ref t) => {
299-
debug!("typedef {}", t.id);
300-
self.exported_items.insert(t.id);
299+
debug!("typedef {}", t.ty_param.id);
300+
self.exported_items.insert(t.ty_param.id);
301301
}
302302
}
303303
}

src/librustc/middle/resolve.rs

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1564,19 +1564,19 @@ impl<'a> Resolver<'a> {
15641564
}
15651565
ast::TypeTraitItem(ref associated_type) => {
15661566
let def = DefAssociatedTy(local_def(
1567-
associated_type.id));
1567+
associated_type.ty_param.id));
15681568

15691569
let name_bindings =
1570-
self.add_child(associated_type.ident.name,
1570+
self.add_child(associated_type.ty_param.ident.name,
15711571
module_parent.clone(),
15721572
ForbidDuplicateTypesAndValues,
1573-
associated_type.span);
1573+
associated_type.ty_param.span);
15741574
// NB: not IMPORTABLE
15751575
name_bindings.define_type(def,
1576-
associated_type.span,
1576+
associated_type.ty_param.span,
15771577
PUBLIC);
15781578

1579-
(associated_type.ident.name, TypeTraitItemKind)
1579+
(associated_type.ty_param.ident.name, TypeTraitItemKind)
15801580
}
15811581
};
15821582

@@ -4223,7 +4223,7 @@ impl<'a> Resolver<'a> {
42234223
impl_items.as_slice());
42244224
}
42254225

4226-
ItemTrait(ref generics, ref unbound, ref bounds, ref methods) => {
4226+
ItemTrait(ref generics, ref unbound, ref bounds, ref trait_items) => {
42274227
// Create a new rib for the self type.
42284228
let mut self_type_rib = Rib::new(ItemRibKind);
42294229

@@ -4251,13 +4251,13 @@ impl<'a> Resolver<'a> {
42514251
_ => {}
42524252
}
42534253

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
42564256
// parameters.
42574257
//
42584258
// FIXME #4951: Do we need a node ID here?
42594259

4260-
match *method {
4260+
match *trait_item {
42614261
ast::RequiredMethod(ref ty_m) => {
42624262
this.with_type_parameter_rib
42634263
(HasTypeParameters(&ty_m.generics,
@@ -4292,8 +4292,9 @@ impl<'a> Resolver<'a> {
42924292
ProvidedMethod(m.id)),
42934293
&**m)
42944294
}
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);
42974298
}
42984299
}
42994300
}
@@ -4482,20 +4483,25 @@ impl<'a> Resolver<'a> {
44824483
fn resolve_type_parameters(&mut self,
44834484
type_parameters: &OwnedSlice<TyParam>) {
44844485
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 => {}
44994505
}
45004506
}
45014507

@@ -4582,14 +4588,14 @@ impl<'a> Resolver<'a> {
45824588
self.resolve_error(trait_reference.path.span,
45834589
format!("`{}` is not a trait",
45844590
self.path_names_to_string(
4585-
&trait_reference.path)));
4591+
&trait_reference.path)));
45864592

45874593
// If it's a typedef, give a note
45884594
match def {
45894595
DefTy(..) => {
45904596
self.session.span_note(
4591-
trait_reference.path.span,
4592-
format!("`type` aliases cannot \
4597+
trait_reference.path.span,
4598+
format!("`type` aliases cannot \
45934599
be used for traits")
45944600
.as_slice());
45954601
}

src/librustc/middle/stability.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl<'v> Visitor<'v> for Annotator {
8686
}
8787
}
8888

89-
TypeTraitItem(ref typedef) => (typedef.id, &typedef.attrs),
89+
TypeTraitItem(ref typedef) => (typedef.ty_param.id, &typedef.attrs),
9090
};
9191
self.annotate(id, attrs, |v| visit::walk_trait_item(v, t));
9292
}

0 commit comments

Comments
 (0)