diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2016-05-21 08:13:56 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2016-05-31 19:44:04 -0400 |
| commit | de6c52d5ead59349b8286d1a8a63d794af55a52f (patch) | |
| tree | 690f8fbaabba0dcf0b9973a4e7e5b753067f56be /src/librustc_metadata/decoder.rs | |
| parent | 8770d0f34a9bee2691517ab95803a277c453dfda (diff) | |
| download | rust-de6c52d5ead59349b8286d1a8a63d794af55a52f.tar.gz rust-de6c52d5ead59349b8286d1a8a63d794af55a52f.zip | |
make region-param-def encoding more DRY
we used to have two separate routines, one in tyencode/tydecode, and one in encode/decode.
Diffstat (limited to 'src/librustc_metadata/decoder.rs')
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index d1153fe2d06..1131e409aa0 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 } |
