@@ -21,7 +21,8 @@ use metadata::common::*;
21
21
use metadata:: csearch:: MethodInfo ;
22
22
use metadata:: csearch;
23
23
use 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,
25
26
parse_type_param_def_data, parse_bare_fn_ty_data,
26
27
parse_trait_ref_data, parse_predicate_data} ;
27
28
use middle:: def;
@@ -190,29 +191,32 @@ fn item_symbol(item: rbml::Doc) -> String {
190
191
reader:: get_doc ( item, tag_items_data_item_symbol) . as_str ( ) . to_string ( )
191
192
}
192
193
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 > {
194
201
let mut ret = None ;
195
202
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 ) ) ;
197
204
false
198
205
} ) ;
199
206
ret
200
207
}
201
208
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) )
206
211
}
207
212
208
213
fn 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) )
211
215
}
212
216
213
217
fn get_provided_source ( d : rbml:: Doc , cdata : Cmd ) -> Option < ast:: DefId > {
214
218
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)
216
220
} )
217
221
}
218
222
@@ -261,14 +265,12 @@ fn item_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
261
265
}
262
266
263
267
fn 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) ) ;
269
271
true
270
272
} ) ;
271
- return ids;
273
+ ids
272
274
}
273
275
274
276
fn item_path ( item_doc : rbml:: Doc ) -> Vec < ast_map:: PathElem > {
@@ -303,8 +305,7 @@ fn item_name(intr: &IdentInterner, item: rbml::Doc) -> ast::Name {
303
305
}
304
306
}
305
307
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 {
308
309
let fam = item_family ( item) ;
309
310
match fam {
310
311
Constant => {
@@ -314,11 +315,9 @@ fn item_to_def_like(item: rbml::Doc, did: ast::DefId, cnum: ast::CrateNum)
314
315
// See the comment for methods below.
315
316
let provenance = if reader:: maybe_get_doc (
316
317
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) )
319
319
} else {
320
- def:: FromImpl ( item_reqd_and_translated_parent_item ( cnum,
321
- item) )
320
+ def:: FromImpl ( item_require_parent_item ( cdata, item) )
322
321
} ;
323
322
DlDef ( def:: DefAssociatedConst ( did, provenance) )
324
323
} else {
@@ -339,17 +338,15 @@ fn item_to_def_like(item: rbml::Doc, did: ast::DefId, cnum: ast::CrateNum)
339
338
// a trait_parent_sort.
340
339
let provenance = if reader:: maybe_get_doc (
341
340
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) )
344
342
} else {
345
- def:: FromImpl ( item_reqd_and_translated_parent_item ( cnum,
346
- item) )
343
+ def:: FromImpl ( item_require_parent_item ( cdata, item) )
347
344
} ;
348
345
DlDef ( def:: DefMethod ( did, provenance) )
349
346
}
350
347
Type => {
351
348
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) ;
353
350
DlDef ( def:: DefAssociatedTy ( trait_did, did) )
354
351
} else {
355
352
DlDef ( def:: DefTy ( did, false ) )
@@ -358,11 +355,11 @@ fn item_to_def_like(item: rbml::Doc, did: ast::DefId, cnum: ast::CrateNum)
358
355
Mod => DlDef ( def:: DefMod ( did) ) ,
359
356
ForeignMod => DlDef ( def:: DefForeignMod ( did) ) ,
360
357
StructVariant => {
361
- let enum_did = item_reqd_and_translated_parent_item ( cnum , item) ;
358
+ let enum_did = item_require_parent_item ( cdata , item) ;
362
359
DlDef ( def:: DefVariant ( enum_did, did, true ) )
363
360
}
364
361
TupleVariant => {
365
- let enum_did = item_reqd_and_translated_parent_item ( cnum , item) ;
362
+ let enum_did = item_require_parent_item ( cdata , item) ;
366
363
DlDef ( def:: DefVariant ( enum_did, did, false ) )
367
364
}
368
365
Trait => DlDef ( def:: DefTrait ( did) ) ,
@@ -560,9 +557,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
560
557
{
561
558
// Iterate over all children.
562
559
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) ;
566
561
567
562
// This item may be in yet another crate if it was the child of a
568
563
// reexport.
@@ -584,9 +579,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
584
579
Some ( child_item_doc) => {
585
580
// Hand off the item to the callback.
586
581
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) ;
590
583
let visibility = item_visibility ( child_item_doc) ;
591
584
callback ( def_like, child_name, visibility) ;
592
585
@@ -615,9 +608,8 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
615
608
if let StaticMethod = item_family ( impl_method_doc) {
616
609
// Hand off the static method to the callback.
617
610
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) ;
621
613
callback ( static_method_def_like,
622
614
static_method_name,
623
615
item_visibility ( impl_method_doc) ) ;
@@ -633,9 +625,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
633
625
let _ = each_reexport ( item_doc, |reexport_doc| {
634
626
let def_id_doc = reader:: get_doc ( reexport_doc,
635
627
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) ;
639
629
640
630
let name_doc = reader:: get_doc ( reexport_doc,
641
631
tag_items_data_item_reexport_name) ;
@@ -657,9 +647,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
657
647
// Get the item.
658
648
if let Some ( child_item_doc) = maybe_find_item ( child_def_id. node , other_crates_items) {
659
649
// 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) ;
663
651
// These items have a public visibility because they're part of
664
652
// a public re-export.
665
653
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
733
721
match decode_inlined_item ( cdata, tcx, path, item_doc) {
734
722
Ok ( ii) => csearch:: FoundAst :: Found ( ii) ,
735
723
Err ( path) => {
736
- match item_parent_item ( item_doc) {
724
+ match item_parent_item ( cdata , item_doc) {
737
725
Some ( did) => {
738
- let did = translate_def_id ( cdata, did) ;
739
726
let parent_item = lookup_item ( did. node , cdata. data ( ) ) ;
740
727
match decode_inlined_item ( cdata, tcx, path, parent_item) {
741
728
Ok ( ii) => csearch:: FoundAst :: FoundParent ( did, ii) ,
@@ -759,7 +746,7 @@ pub fn get_enum_variant_defs(intr: &IdentInterner,
759
746
let item = find_item ( did. node , items) ;
760
747
let name = item_name ( intr, item) ;
761
748
let visibility = item_visibility ( item) ;
762
- match item_to_def_like ( item, * did, cdata . cnum ) {
749
+ match item_to_def_like ( cdata , item, * did) {
763
750
DlDef ( def @ def:: DefVariant ( ..) ) => ( def, name, visibility) ,
764
751
_ => unreachable ! ( )
765
752
}
@@ -889,8 +876,7 @@ pub fn get_impl_or_trait_item<'tcx>(intr: Rc<IdentInterner>,
889
876
890
877
let def_id = item_def_id ( method_doc, cdata) ;
891
878
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) ;
894
880
let container_doc = lookup_item ( container_id. node , cdata. data ( ) ) ;
895
881
let container = match item_family ( container_doc) {
896
882
Trait => TraitContainer ( container_id) ,
@@ -1094,7 +1080,7 @@ pub fn get_tuple_struct_definition_if_ctor(cdata: Cmd,
1094
1080
let item = lookup_item ( node_id, cdata. data ( ) ) ;
1095
1081
let mut ret = None ;
1096
1082
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) ) ;
1098
1084
false
1099
1085
} ) ;
1100
1086
ret
@@ -1144,7 +1130,7 @@ pub fn get_struct_fields(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::NodeId)
1144
1130
let name = item_name ( & * intr, an_item) ;
1145
1131
let did = item_def_id ( an_item, cdata) ;
1146
1132
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) ;
1148
1134
result. push ( ty:: field_ty {
1149
1135
name : name,
1150
1136
id : did,
@@ -1158,7 +1144,7 @@ pub fn get_struct_fields(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::NodeId)
1158
1144
let did = item_def_id ( an_item, cdata) ;
1159
1145
let tagdoc = reader:: get_doc ( an_item, tag_item_field_origin) ;
1160
1146
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) ;
1162
1148
result. push ( ty:: field_ty {
1163
1149
name : special_idents:: unnamed_field. name ,
1164
1150
id : did,
@@ -1386,11 +1372,10 @@ pub fn each_implementation_for_trait<F>(cdata: Cmd,
1386
1372
pub fn get_trait_of_item ( cdata : Cmd , id : ast:: NodeId , tcx : & ty:: ctxt )
1387
1373
-> Option < ast:: DefId > {
1388
1374
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) {
1390
1376
None => return None ,
1391
1377
Some ( item_id) => item_id,
1392
1378
} ;
1393
- let parent_item_id = translate_def_id ( cdata, parent_item_id) ;
1394
1379
let parent_item_doc = lookup_item ( parent_item_id. node , cdata. data ( ) ) ;
1395
1380
match item_family ( parent_item_doc) {
1396
1381
Trait => Some ( item_def_id ( parent_item_doc, cdata) ) ,
@@ -1538,8 +1523,7 @@ fn doc_generics<'tcx>(base_doc: rbml::Doc,
1538
1523
let name = item_name ( & * token:: get_ident_interner ( ) , ident_str_doc) ;
1539
1524
let def_id_doc = reader:: get_doc ( rp_doc,
1540
1525
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) ;
1543
1527
1544
1528
let doc = reader:: get_doc ( rp_doc, tag_region_param_def_space) ;
1545
1529
let space = subst:: ParamSpace :: from_uint ( reader:: doc_as_u64 ( doc) as usize ) ;
0 commit comments