mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-05 03:23:25 +00:00
make region-param-def encoding more DRY
we used to have two separate routines, one in tyencode/tydecode, and one in encode/decode.
This commit is contained in:
parent
8770d0f34a
commit
de6c52d5ea
@ -1662,31 +1662,12 @@ fn doc_generics<'a, 'tcx>(base_doc: rbml::Doc,
|
||||
}
|
||||
|
||||
let mut regions = subst::VecPerParamSpace::empty();
|
||||
for rp_doc in reader::tagged_docs(doc, tag_region_param_def) {
|
||||
let ident_str_doc = reader::get_doc(rp_doc,
|
||||
tag_region_param_def_ident);
|
||||
let name = item_name(&token::get_ident_interner(), ident_str_doc);
|
||||
let def_id_doc = reader::get_doc(rp_doc,
|
||||
tag_region_param_def_def_id);
|
||||
let def_id = translated_def_id(cdata, def_id_doc);
|
||||
|
||||
let doc = reader::get_doc(rp_doc, tag_region_param_def_space);
|
||||
let space = subst::ParamSpace::from_uint(reader::doc_as_u64(doc) as usize);
|
||||
|
||||
let doc = reader::get_doc(rp_doc, tag_region_param_def_index);
|
||||
let index = reader::doc_as_u64(doc) as u32;
|
||||
|
||||
let bounds = reader::tagged_docs(rp_doc, tag_items_data_region).map(|p| {
|
||||
for p in reader::tagged_docs(doc, tag_region_param_def) {
|
||||
let bd =
|
||||
TyDecoder::with_doc(tcx, cdata.cnum, p,
|
||||
&mut |did| translate_def_id(cdata, did))
|
||||
.parse_region()
|
||||
}).collect();
|
||||
|
||||
regions.push(space, ty::RegionParameterDef { name: name,
|
||||
def_id: def_id,
|
||||
space: space,
|
||||
index: index,
|
||||
bounds: bounds });
|
||||
.parse_region_param_def();
|
||||
regions.push(bd.space, bd);
|
||||
}
|
||||
|
||||
ty::Generics { types: types, regions: regions }
|
||||
|
@ -203,15 +203,6 @@ fn encode_type<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
|
||||
rbml_w.end_tag();
|
||||
}
|
||||
|
||||
fn encode_region(ecx: &EncodeContext,
|
||||
rbml_w: &mut Encoder,
|
||||
r: ty::Region) {
|
||||
rbml_w.start_tag(tag_items_data_region);
|
||||
tyencode::enc_region(rbml_w.writer, &ecx.ty_str_ctxt(), r);
|
||||
rbml_w.mark_stable_position();
|
||||
rbml_w.end_tag();
|
||||
}
|
||||
|
||||
fn encode_disr_val(_: &EncodeContext,
|
||||
rbml_w: &mut Encoder,
|
||||
disr_val: ty::Disr) {
|
||||
@ -535,24 +526,8 @@ fn encode_generics<'a, 'tcx>(rbml_w: &mut Encoder,
|
||||
// Region parameters
|
||||
for param in &generics.regions {
|
||||
rbml_w.start_tag(tag_region_param_def);
|
||||
|
||||
rbml_w.start_tag(tag_region_param_def_ident);
|
||||
encode_name(rbml_w, param.name);
|
||||
rbml_w.end_tag();
|
||||
|
||||
rbml_w.wr_tagged_u64(tag_region_param_def_def_id,
|
||||
def_to_u64(param.def_id));
|
||||
|
||||
rbml_w.wr_tagged_u64(tag_region_param_def_space,
|
||||
param.space.to_uint() as u64);
|
||||
|
||||
rbml_w.wr_tagged_u64(tag_region_param_def_index,
|
||||
param.index as u64);
|
||||
|
||||
for &bound_region in ¶m.bounds {
|
||||
encode_region(ecx, rbml_w, bound_region);
|
||||
}
|
||||
|
||||
tyencode::enc_region_param_def(rbml_w.writer, &ecx.ty_str_ctxt(), param);
|
||||
rbml_w.mark_stable_position();
|
||||
rbml_w.end_tag();
|
||||
}
|
||||
|
||||
|
@ -636,7 +636,7 @@ impl<'a,'tcx> TyDecoder<'a,'tcx> {
|
||||
def_id: def_id,
|
||||
space: space,
|
||||
index: index,
|
||||
bounds: bounds
|
||||
bounds: bounds,
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user