Skip to content

Commit

Permalink
pull out encode_field
Browse files Browse the repository at this point in the history
  • Loading branch information
nikomatsakis committed Aug 17, 2016
1 parent f351963 commit c716ad8
Showing 1 changed file with 31 additions and 18 deletions.
49 changes: 31 additions & 18 deletions src/librustc_metadata/encoder.rs
Expand Up @@ -203,10 +203,8 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
debug!("encode_enum_variant_info(enum_did={:?})", enum_did);
let ecx = self.ecx();
let def = ecx.tcx.lookup_adt_def(enum_did);
self.encode_fields(enum_did);
for (i, variant) in def.variants.iter().enumerate() {
for field in &variant.fields {
self.encode_field(field);
}
self.record(variant.did, |this| this.encode_enum_variant_info(enum_did, i, vis));
}
}
Expand Down Expand Up @@ -415,25 +413,42 @@ fn encode_item_sort(rbml_w: &mut Encoder, sort: char) {
}

impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
fn encode_fields(&mut self,
adt_def_id: DefId) {
let def = self.ecx.tcx.lookup_adt_def(adt_def_id);
for (variant_index, variant) in def.variants.iter().enumerate() {
for (field_index, field) in variant.fields.iter().enumerate() {
self.record(field.did, |this| this.encode_field(adt_def_id,
variant_index,
field_index));
}
}
}
}

impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
fn encode_field(&mut self,
field: ty::FieldDef<'tcx>) {
adt_def_id: DefId,
variant_index: usize,
field_index: usize) {
let ecx = self.ecx();
let def = ecx.tcx.lookup_adt_def(adt_def_id);
let variant = &def.variants[variant_index];
let field = &variant.fields[field_index];

let nm = field.name;
let id = ecx.local_id(field.did);
debug!("encode_field: encoding {} {}", nm, id);

self.record(field.did, |this| {
debug!("encode_field: encoding {} {}", nm, id);
this.encode_struct_field_family(field.vis);
encode_name(this.rbml_w, nm);
this.encode_bounds_and_type_for_item(id);
encode_def_id_and_key(ecx, this.rbml_w, field.did);
self.encode_struct_field_family(field.vis);
encode_name(self.rbml_w, nm);
self.encode_bounds_and_type_for_item(id);
encode_def_id_and_key(ecx, self.rbml_w, field.did);

let stab = ecx.tcx.lookup_stability(field.did);
let depr = ecx.tcx.lookup_deprecation(field.did);
encode_stability(this.rbml_w, stab);
encode_deprecation(this.rbml_w, depr);
});
let stab = ecx.tcx.lookup_stability(field.did);
let depr = ecx.tcx.lookup_deprecation(field.did);
encode_stability(self.rbml_w, stab);
encode_deprecation(self.rbml_w, depr);
}
}

Expand Down Expand Up @@ -1064,9 +1079,7 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
let def = ecx.tcx.lookup_adt_def(def_id);
let variant = def.struct_variant();

for field in &variant.fields {
self.encode_field(field);
}
self.encode_fields(def_id);

// If this is a tuple-like struct, encode the type of the constructor.
match variant.kind {
Expand Down

0 comments on commit c716ad8

Please sign in to comment.