@@ -21,7 +21,8 @@ use metadata::common::*;
2121use metadata:: csearch:: MethodInfo ;
2222use metadata:: csearch;
2323use metadata:: cstore;
24- use metadata:: tydecode:: { parse_ty_data, parse_region_data, parse_def_id,
24+ use metadata:: encoder:: def_to_u64;
25+ use metadata:: tydecode:: { parse_ty_data, parse_region_data,
2526 parse_type_param_def_data, parse_bare_fn_ty_data,
2627 parse_trait_ref_data, parse_predicate_data} ;
2728use middle:: def;
@@ -190,29 +191,32 @@ fn item_symbol(item: rbml::Doc) -> String {
190191 reader:: get_doc ( item, tag_items_data_item_symbol) . as_str ( ) . to_string ( )
191192}
192193
193- fn item_parent_item ( d : rbml:: Doc ) -> Option < ast:: DefId > {
194+ fn translated_def_id ( cdata : Cmd , d : rbml:: Doc ) -> ast:: DefId {
195+ let id = reader:: doc_as_u64 ( d) ;
196+ let def_id = ast:: DefId { krate : ( id >> 32 ) as u32 , node : id as u32 } ;
197+ translate_def_id ( cdata, def_id)
198+ }
199+
200+ fn item_parent_item ( cdata : Cmd , d : rbml:: Doc ) -> Option < ast:: DefId > {
194201 let mut ret = None ;
195202 reader:: tagged_docs ( d, tag_items_data_parent_item, |did| {
196- ret = Some ( reader :: with_doc_data ( did , parse_def_id ) ) ;
203+ ret = Some ( translated_def_id ( cdata , did ) ) ;
197204 false
198205 } ) ;
199206 ret
200207}
201208
202- fn item_reqd_and_translated_parent_item ( cnum : ast:: CrateNum ,
203- d : rbml:: Doc ) -> ast:: DefId {
204- let trait_did = item_parent_item ( d) . expect ( "item without parent" ) ;
205- ast:: DefId { krate : cnum, node : trait_did. node }
209+ fn item_require_parent_item ( cdata : Cmd , d : rbml:: Doc ) -> ast:: DefId {
210+ translated_def_id ( cdata, reader:: get_doc ( d, tag_items_data_parent_item) )
206211}
207212
208213fn item_def_id ( d : rbml:: Doc , cdata : Cmd ) -> ast:: DefId {
209- let tagdoc = reader:: get_doc ( d, tag_def_id) ;
210- return translate_def_id ( cdata, reader:: with_doc_data ( tagdoc, parse_def_id) ) ;
214+ translated_def_id ( cdata, reader:: get_doc ( d, tag_def_id) )
211215}
212216
213217fn get_provided_source ( d : rbml:: Doc , cdata : Cmd ) -> Option < ast:: DefId > {
214218 reader:: maybe_get_doc ( d, tag_item_method_provided_source) . map ( |doc| {
215- translate_def_id ( cdata, reader :: with_doc_data ( doc, parse_def_id ) )
219+ translated_def_id ( cdata, doc)
216220 } )
217221}
218222
@@ -261,14 +265,12 @@ fn item_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
261265}
262266
263267fn enum_variant_ids ( item : rbml:: Doc , cdata : Cmd ) -> Vec < ast:: DefId > {
264- let mut ids: Vec < ast:: DefId > = Vec :: new ( ) ;
265- let v = tag_items_data_item_variant;
266- reader:: tagged_docs ( item, v, |p| {
267- let ext = reader:: with_doc_data ( p, parse_def_id) ;
268- ids. push ( ast:: DefId { krate : cdata. cnum , node : ext. node } ) ;
268+ let mut ids = vec ! [ ] ;
269+ reader:: tagged_docs ( item, tag_items_data_item_variant, |p| {
270+ ids. push ( translated_def_id ( cdata, p) ) ;
269271 true
270272 } ) ;
271- return ids;
273+ ids
272274}
273275
274276fn item_path ( item_doc : rbml:: Doc ) -> Vec < ast_map:: PathElem > {
@@ -303,8 +305,7 @@ fn item_name(intr: &IdentInterner, item: rbml::Doc) -> ast::Name {
303305 }
304306}
305307
306- fn item_to_def_like ( item : rbml:: Doc , did : ast:: DefId , cnum : ast:: CrateNum )
307- -> DefLike {
308+ fn item_to_def_like ( cdata : Cmd , item : rbml:: Doc , did : ast:: DefId ) -> DefLike {
308309 let fam = item_family ( item) ;
309310 match fam {
310311 Constant => {
@@ -314,11 +315,9 @@ fn item_to_def_like(item: rbml::Doc, did: ast::DefId, cnum: ast::CrateNum)
314315 // See the comment for methods below.
315316 let provenance = if reader:: maybe_get_doc (
316317 item, tag_item_trait_parent_sort) . is_some ( ) {
317- def:: FromTrait ( item_reqd_and_translated_parent_item ( cnum,
318- item) )
318+ def:: FromTrait ( item_require_parent_item ( cdata, item) )
319319 } else {
320- def:: FromImpl ( item_reqd_and_translated_parent_item ( cnum,
321- item) )
320+ def:: FromImpl ( item_require_parent_item ( cdata, item) )
322321 } ;
323322 DlDef ( def:: DefAssociatedConst ( did, provenance) )
324323 } else {
@@ -339,17 +338,15 @@ fn item_to_def_like(item: rbml::Doc, did: ast::DefId, cnum: ast::CrateNum)
339338 // a trait_parent_sort.
340339 let provenance = if reader:: maybe_get_doc (
341340 item, tag_item_trait_parent_sort) . is_some ( ) {
342- def:: FromTrait ( item_reqd_and_translated_parent_item ( cnum,
343- item) )
341+ def:: FromTrait ( item_require_parent_item ( cdata, item) )
344342 } else {
345- def:: FromImpl ( item_reqd_and_translated_parent_item ( cnum,
346- item) )
343+ def:: FromImpl ( item_require_parent_item ( cdata, item) )
347344 } ;
348345 DlDef ( def:: DefMethod ( did, provenance) )
349346 }
350347 Type => {
351348 if item_sort ( item) == Some ( 't' ) {
352- let trait_did = item_reqd_and_translated_parent_item ( cnum , item) ;
349+ let trait_did = item_require_parent_item ( cdata , item) ;
353350 DlDef ( def:: DefAssociatedTy ( trait_did, did) )
354351 } else {
355352 DlDef ( def:: DefTy ( did, false ) )
@@ -358,11 +355,11 @@ fn item_to_def_like(item: rbml::Doc, did: ast::DefId, cnum: ast::CrateNum)
358355 Mod => DlDef ( def:: DefMod ( did) ) ,
359356 ForeignMod => DlDef ( def:: DefForeignMod ( did) ) ,
360357 StructVariant => {
361- let enum_did = item_reqd_and_translated_parent_item ( cnum , item) ;
358+ let enum_did = item_require_parent_item ( cdata , item) ;
362359 DlDef ( def:: DefVariant ( enum_did, did, true ) )
363360 }
364361 TupleVariant => {
365- let enum_did = item_reqd_and_translated_parent_item ( cnum , item) ;
362+ let enum_did = item_require_parent_item ( cdata , item) ;
366363 DlDef ( def:: DefVariant ( enum_did, did, false ) )
367364 }
368365 Trait => DlDef ( def:: DefTrait ( did) ) ,
@@ -560,9 +557,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
560557{
561558 // Iterate over all children.
562559 let _ = reader:: tagged_docs ( item_doc, tag_mod_child, |child_info_doc| {
563- let child_def_id = reader:: with_doc_data ( child_info_doc,
564- parse_def_id) ;
565- let child_def_id = translate_def_id ( cdata, child_def_id) ;
560+ let child_def_id = translated_def_id ( cdata, child_info_doc) ;
566561
567562 // This item may be in yet another crate if it was the child of a
568563 // reexport.
@@ -584,9 +579,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
584579 Some ( child_item_doc) => {
585580 // Hand off the item to the callback.
586581 let child_name = item_name ( & * intr, child_item_doc) ;
587- let def_like = item_to_def_like ( child_item_doc,
588- child_def_id,
589- cdata. cnum ) ;
582+ let def_like = item_to_def_like ( crate_data, child_item_doc, child_def_id) ;
590583 let visibility = item_visibility ( child_item_doc) ;
591584 callback ( def_like, child_name, visibility) ;
592585
@@ -615,9 +608,8 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
615608 if let StaticMethod = item_family ( impl_method_doc) {
616609 // Hand off the static method to the callback.
617610 let static_method_name = item_name ( & * intr, impl_method_doc) ;
618- let static_method_def_like = item_to_def_like ( impl_method_doc,
619- impl_item_def_id,
620- cdata. cnum ) ;
611+ let static_method_def_like = item_to_def_like ( cdata, impl_method_doc,
612+ impl_item_def_id) ;
621613 callback ( static_method_def_like,
622614 static_method_name,
623615 item_visibility ( impl_method_doc) ) ;
@@ -633,9 +625,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
633625 let _ = each_reexport ( item_doc, |reexport_doc| {
634626 let def_id_doc = reader:: get_doc ( reexport_doc,
635627 tag_items_data_item_reexport_def_id) ;
636- let child_def_id = reader:: with_doc_data ( def_id_doc,
637- parse_def_id) ;
638- let child_def_id = translate_def_id ( cdata, child_def_id) ;
628+ let child_def_id = translated_def_id ( cdata, def_id_doc) ;
639629
640630 let name_doc = reader:: get_doc ( reexport_doc,
641631 tag_items_data_item_reexport_name) ;
@@ -657,9 +647,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
657647 // Get the item.
658648 if let Some ( child_item_doc) = maybe_find_item ( child_def_id. node , other_crates_items) {
659649 // Hand off the item to the callback.
660- let def_like = item_to_def_like ( child_item_doc,
661- child_def_id,
662- child_def_id. krate ) ;
650+ let def_like = item_to_def_like ( crate_data, child_item_doc, child_def_id) ;
663651 // These items have a public visibility because they're part of
664652 // a public re-export.
665653 callback ( def_like, token:: intern ( name) , ast:: Public ) ;
@@ -733,9 +721,8 @@ pub fn maybe_get_item_ast<'tcx>(cdata: Cmd, tcx: &ty::ctxt<'tcx>, id: ast::NodeI
733721 match decode_inlined_item ( cdata, tcx, path, item_doc) {
734722 Ok ( ii) => csearch:: FoundAst :: Found ( ii) ,
735723 Err ( path) => {
736- match item_parent_item ( item_doc) {
724+ match item_parent_item ( cdata , item_doc) {
737725 Some ( did) => {
738- let did = translate_def_id ( cdata, did) ;
739726 let parent_item = lookup_item ( did. node , cdata. data ( ) ) ;
740727 match decode_inlined_item ( cdata, tcx, path, parent_item) {
741728 Ok ( ii) => csearch:: FoundAst :: FoundParent ( did, ii) ,
@@ -759,7 +746,7 @@ pub fn get_enum_variant_defs(intr: &IdentInterner,
759746 let item = find_item ( did. node , items) ;
760747 let name = item_name ( intr, item) ;
761748 let visibility = item_visibility ( item) ;
762- match item_to_def_like ( item, * did, cdata . cnum ) {
749+ match item_to_def_like ( cdata , item, * did) {
763750 DlDef ( def @ def:: DefVariant ( ..) ) => ( def, name, visibility) ,
764751 _ => unreachable ! ( )
765752 }
@@ -889,8 +876,7 @@ pub fn get_impl_or_trait_item<'tcx>(intr: Rc<IdentInterner>,
889876
890877 let def_id = item_def_id ( method_doc, cdata) ;
891878
892- let container_id = item_reqd_and_translated_parent_item ( cdata. cnum ,
893- method_doc) ;
879+ let container_id = item_require_parent_item ( cdata, method_doc) ;
894880 let container_doc = lookup_item ( container_id. node , cdata. data ( ) ) ;
895881 let container = match item_family ( container_doc) {
896882 Trait => TraitContainer ( container_id) ,
@@ -1094,7 +1080,7 @@ pub fn get_tuple_struct_definition_if_ctor(cdata: Cmd,
10941080 let item = lookup_item ( node_id, cdata. data ( ) ) ;
10951081 let mut ret = None ;
10961082 reader:: tagged_docs ( item, tag_items_data_item_is_tuple_struct_ctor, |_| {
1097- ret = Some ( item_reqd_and_translated_parent_item ( cdata. cnum , item) ) ;
1083+ ret = Some ( item_require_parent_item ( cdata, item) ) ;
10981084 false
10991085 } ) ;
11001086 ret
@@ -1144,7 +1130,7 @@ pub fn get_struct_fields(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::NodeId)
11441130 let name = item_name ( & * intr, an_item) ;
11451131 let did = item_def_id ( an_item, cdata) ;
11461132 let tagdoc = reader:: get_doc ( an_item, tag_item_field_origin) ;
1147- let origin_id = translate_def_id ( cdata, reader :: with_doc_data ( tagdoc, parse_def_id ) ) ;
1133+ let origin_id = translated_def_id ( cdata, tagdoc) ;
11481134 result. push ( ty:: field_ty {
11491135 name : name,
11501136 id : did,
@@ -1158,7 +1144,7 @@ pub fn get_struct_fields(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::NodeId)
11581144 let did = item_def_id ( an_item, cdata) ;
11591145 let tagdoc = reader:: get_doc ( an_item, tag_item_field_origin) ;
11601146 let f = item_family ( an_item) ;
1161- let origin_id = translate_def_id ( cdata, reader :: with_doc_data ( tagdoc, parse_def_id ) ) ;
1147+ let origin_id = translated_def_id ( cdata, tagdoc) ;
11621148 result. push ( ty:: field_ty {
11631149 name : special_idents:: unnamed_field. name ,
11641150 id : did,
@@ -1386,11 +1372,10 @@ pub fn each_implementation_for_trait<F>(cdata: Cmd,
13861372pub fn get_trait_of_item ( cdata : Cmd , id : ast:: NodeId , tcx : & ty:: ctxt )
13871373 -> Option < ast:: DefId > {
13881374 let item_doc = lookup_item ( id, cdata. data ( ) ) ;
1389- let parent_item_id = match item_parent_item ( item_doc) {
1375+ let parent_item_id = match item_parent_item ( cdata , item_doc) {
13901376 None => return None ,
13911377 Some ( item_id) => item_id,
13921378 } ;
1393- let parent_item_id = translate_def_id ( cdata, parent_item_id) ;
13941379 let parent_item_doc = lookup_item ( parent_item_id. node , cdata. data ( ) ) ;
13951380 match item_family ( parent_item_doc) {
13961381 Trait => Some ( item_def_id ( parent_item_doc, cdata) ) ,
@@ -1538,8 +1523,7 @@ fn doc_generics<'tcx>(base_doc: rbml::Doc,
15381523 let name = item_name ( & * token:: get_ident_interner ( ) , ident_str_doc) ;
15391524 let def_id_doc = reader:: get_doc ( rp_doc,
15401525 tag_region_param_def_def_id) ;
1541- let def_id = reader:: with_doc_data ( def_id_doc, parse_def_id) ;
1542- let def_id = translate_def_id ( cdata, def_id) ;
1526+ let def_id = translated_def_id ( cdata, def_id_doc) ;
15431527
15441528 let doc = reader:: get_doc ( rp_doc, tag_region_param_def_space) ;
15451529 let space = subst:: ParamSpace :: from_uint ( reader:: doc_as_u64 ( doc) as usize ) ;
0 commit comments