From de6c52d5ead59349b8286d1a8a63d794af55a52f Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sat, 21 May 2016 08:13:56 -0400 Subject: [PATCH] make region-param-def encoding more DRY we used to have two separate routines, one in tyencode/tydecode, and one in encode/decode. --- src/librustc_metadata/decoder.rs | 27 ++++----------------------- src/librustc_metadata/encoder.rs | 29 ++--------------------------- src/librustc_metadata/tydecode.rs | 2 +- 3 files changed, 7 insertions(+), 51 deletions(-) diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index d1153fe2d060..1131e409aa05 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -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 } diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index e0c35a6fba84..b14be158197e 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -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(); } diff --git a/src/librustc_metadata/tydecode.rs b/src/librustc_metadata/tydecode.rs index 984ac226d85b..797af8964a14 100644 --- a/src/librustc_metadata/tydecode.rs +++ b/src/librustc_metadata/tydecode.rs @@ -636,7 +636,7 @@ impl<'a,'tcx> TyDecoder<'a,'tcx> { def_id: def_id, space: space, index: index, - bounds: bounds + bounds: bounds, } }