Skip to content

Commit 6c383bb

Browse files
committed
rustc: Index only the local part of definition IDs
1 parent 3945ace commit 6c383bb

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

src/comp/middle/metadata.rs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -423,17 +423,17 @@ fn encode_info_for_native_item(@trans.crate_ctxt cx, &ebml.writer ebml_w,
423423
}
424424

425425
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();
428428

429-
ebml.start_tag(ebml_w, tag_items);
429+
ebml.start_tag(ebml_w, tag_items_data);
430430
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()));
432432
encode_info_for_item(cx, ebml_w, kvp._1);
433433
}
434434
for each (@tup(ast.def_id, @ast.native_item) kvp in
435435
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()));
437437
encode_info_for_native_item(cx, ebml_w, kvp._1);
438438
}
439439
ebml.end_tag(ebml_w);
@@ -444,24 +444,26 @@ fn encode_info_for_items(@trans.crate_ctxt cx, &ebml.writer ebml_w)
444444

445445
// Definition ID indexing
446446

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 177573u ^ (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();
450453
for each (uint i in _uint.range(0u, 256u)) {
451-
let vec[tup(ast.def_id, uint)] bucket = vec();
454+
let vec[tup(int, uint)] bucket = vec();
452455
buckets += vec(bucket);
453456
}
454457

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);
457460
buckets.(h % 256u) += vec(elt);
458461
}
459462

460463
ret buckets;
461464
}
462465

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) {
465467
auto writer = io.new_writer_(ebml_w.writer);
466468

467469
auto buckets = create_index(index);
@@ -470,14 +472,14 @@ impure fn encode_index(&ebml.writer ebml_w,
470472

471473
let vec[uint] bucket_locs = vec();
472474
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) {
474476
bucket_locs += vec(ebml_w.writer.tell());
475477

476478
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) {
478480
ebml.start_tag(ebml_w, tag_items_index_buckets_bucket_elt);
479481
writer.write_be_uint(elt._1, 4u);
480-
writer.write_str(def_to_str(elt._0));
482+
writer.write_be_uint(elt._0 as uint, 4u);
481483
ebml.end_tag(ebml_w);
482484
}
483485
ebml.end_tag(ebml_w);
@@ -501,8 +503,11 @@ impure fn encode_metadata(@trans.crate_ctxt cx, @ast.crate crate)
501503
auto ebml_w = ebml.create_writer(buf_w);
502504

503505
encode_item_paths(ebml_w, crate);
506+
507+
ebml.start_tag(ebml_w, tag_items);
504508
auto index = encode_info_for_items(cx, ebml_w);
505509
encode_index(ebml_w, index);
510+
ebml.end_tag(ebml_w);
506511

507512
ret C_postr(string_w.get_str());
508513
}

0 commit comments

Comments
 (0)