@@ -423,17 +423,17 @@ fn encode_info_for_native_item(@trans.crate_ctxt cx, &ebml.writer ebml_w,
423
423
}
424
424
425
425
fn encode_info_for_items ( @trans. crate_ctxt cx , & ebml. writer ebml_w )
426
- -> vec [ tup ( ast . def_id , uint) ] {
427
- let vec[ tup ( ast . def_id , uint) ] index = vec ( ) ;
426
+ -> vec[ tup ( int , uint ) ] {
427
+ let vec[ tup( int , uint) ] index = vec ( ) ;
428
428
429
- ebml. start_tag ( ebml_w, tag_items ) ;
429
+ ebml. start_tag ( ebml_w, tag_items_data ) ;
430
430
for each ( @tup( ast. def_id, @ast. item) kvp in cx. items . items ( ) ) {
431
- index += vec ( tup ( kvp. _0 , ebml_w. writer . tell ( ) ) ) ;
431
+ index += vec ( tup ( kvp. _0 . _1 , ebml_w. writer . tell ( ) ) ) ;
432
432
encode_info_for_item ( cx, ebml_w, kvp. _1 ) ;
433
433
}
434
434
for each ( @tup( ast. def_id, @ast. native_item) kvp in
435
435
cx. native_items . items ( ) ) {
436
- index += vec ( tup ( kvp. _0 , ebml_w. writer . tell ( ) ) ) ;
436
+ index += vec ( tup ( kvp. _0 . _1 , ebml_w. writer . tell ( ) ) ) ;
437
437
encode_info_for_native_item ( cx, ebml_w, kvp. _1 ) ;
438
438
}
439
439
ebml. end_tag ( ebml_w) ;
@@ -444,24 +444,26 @@ fn encode_info_for_items(@trans.crate_ctxt cx, &ebml.writer ebml_w)
444
444
445
445
// Definition ID indexing
446
446
447
- fn create_index ( vec[ tup( ast. def_id, uint) ] index )
448
- -> vec [ vec[ tup ( ast. def_id , uint) ] ] {
449
- let vec[ vec[ tup ( ast. def_id , uint) ] ] buckets = vec ( ) ;
447
+ fn hash_def_num ( int def_num ) -> uint {
448
+ ret 177573 u ^ ( def_num as uint ) ;
449
+ }
450
+
451
+ fn create_index ( vec[ tup( int, uint) ] index ) -> vec [ vec[ tup ( int, uint) ] ] {
452
+ let vec[ vec[ tup ( int, uint) ] ] buckets = vec ( ) ;
450
453
for each ( uint i in _uint. range( 0 u, 256 u) ) {
451
- let vec[ tup ( ast . def_id , uint) ] bucket = vec ( ) ;
454
+ let vec[ tup( int , uint) ] bucket = vec ( ) ;
452
455
buckets += vec ( bucket) ;
453
456
}
454
457
455
- for ( tup( ast . def_id , uint) elt in index) {
456
- auto h = common . hash_def ( elt. _0) ;
458
+ for ( tup( int , uint) elt in index) {
459
+ auto h = hash_def_num ( elt. _0) ;
457
460
buckets. ( h % 256 u) += vec( elt) ;
458
461
}
459
462
460
463
ret buckets;
461
464
}
462
465
463
- impure fn encode_index( & ebml. writer ebml_w,
464
- vec[ tup( ast. def_id, uint) ] index) {
466
+ impure fn encode_index( & ebml. writer ebml_w, vec[ tup( int, uint) ] index) {
465
467
auto writer = io. new_writer_( ebml_w. writer) ;
466
468
467
469
auto buckets = create_index( index) ;
@@ -470,14 +472,14 @@ impure fn encode_index(&ebml.writer ebml_w,
470
472
471
473
let vec[ uint] bucket_locs = vec( ) ;
472
474
ebml. start_tag( ebml_w, tag_items_index_buckets) ;
473
- for ( vec[ tup( ast . def_id , uint) ] bucket in buckets) {
475
+ for ( vec[ tup( int , uint) ] bucket in buckets) {
474
476
bucket_locs += vec( ebml_w. writer. tell( ) ) ;
475
477
476
478
ebml. start_tag( ebml_w, tag_items_index_buckets_bucket) ;
477
- for ( tup( ast . def_id , uint) elt in bucket) {
479
+ for ( tup( int , uint) elt in bucket) {
478
480
ebml. start_tag( ebml_w, tag_items_index_buckets_bucket_elt) ;
479
481
writer. write_be_uint( elt. _1, 4 u) ;
480
- writer. write_str ( def_to_str ( elt. _0) ) ;
482
+ writer. write_be_uint ( elt. _0 as uint , 4 u ) ;
481
483
ebml. end_tag( ebml_w) ;
482
484
}
483
485
ebml. end_tag( ebml_w) ;
@@ -501,8 +503,11 @@ impure fn encode_metadata(@trans.crate_ctxt cx, @ast.crate crate)
501
503
auto ebml_w = ebml. create_writer( buf_w) ;
502
504
503
505
encode_item_paths( ebml_w, crate ) ;
506
+
507
+ ebml. start_tag( ebml_w, tag_items) ;
504
508
auto index = encode_info_for_items( cx, ebml_w) ;
505
509
encode_index( ebml_w, index) ;
510
+ ebml. end_tag( ebml_w) ;
506
511
507
512
ret C_postr ( string_w. get_str( ) ) ;
508
513
}
0 commit comments