diff options
| author | Graydon Hoare <graydon@mozilla.com> | 2012-09-19 13:13:24 -0700 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2012-09-19 15:51:44 -0700 |
| commit | bac89eae4844f030b0b3e219e114a1b79212fe7f (patch) | |
| tree | 884fdf081a9c61a405ec7e790be94abadedddcfd /src | |
| parent | c6ed447221303be59381f91852e0fcd50f60be06 (diff) | |
Remove hokey-hashes from metadata indexes.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rustc/metadata/common.rs | 11 | ||||
| -rw-r--r-- | src/rustc/metadata/decoder.rs | 4 | ||||
| -rw-r--r-- | src/rustc/metadata/encoder.rs | 13 |
3 files changed, 10 insertions, 18 deletions
diff --git a/src/rustc/metadata/common.rs b/src/rustc/metadata/common.rs index a95862a978b..2d62bf7b4a2 100644 --- a/src/rustc/metadata/common.rs +++ b/src/rustc/metadata/common.rs @@ -123,16 +123,5 @@ enum astencode_tag { // Reserves 0x50 -- 0x6f tag_table_adjustments = 0x62 } -// djb's cdb hashes. -fn hash_node_id(&&node_id: int) -> uint { - return 177573u ^ (node_id as uint); -} - -fn hash_path(&&s: ~str) -> uint { - let mut h = 5381u; - for str::each(s) |ch| { h = (h << 5u) + h ^ (ch as uint); } - return h; -} - type link_meta = {name: ~str, vers: ~str, extras_hash: ~str}; diff --git a/src/rustc/metadata/decoder.rs b/src/rustc/metadata/decoder.rs index a0b6912cd6d..14244b08208 100644 --- a/src/rustc/metadata/decoder.rs +++ b/src/rustc/metadata/decoder.rs @@ -16,7 +16,7 @@ use util::ppaux::ty_to_str; use syntax::diagnostic::span_handler; use common::*; use syntax::parse::token::ident_interner; - +use hash::{Hash, HashUtil}; export class_dtor; export get_class_fields; @@ -88,7 +88,7 @@ fn maybe_find_item(item_id: int, items: ebml::Doc) -> Option<ebml::Doc> { } lookup_hash(items, |a| eq_item(a, item_id), - hash_node_id(item_id)) + item_id.hash() as uint) } fn find_item(item_id: int, items: ebml::Doc) -> ebml::Doc { diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs index 86ec0fe8747..04f2bdcf636 100644 --- a/src/rustc/metadata/encoder.rs +++ b/src/rustc/metadata/encoder.rs @@ -20,6 +20,9 @@ use str::to_bytes; use syntax::ast; use syntax::diagnostic::span_handler; +use hash::{Hash, HashUtil}; +use to_bytes::IterBytes; + export encode_parms; export encode_metadata; export encoded_ty; @@ -679,7 +682,7 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: ebml::Writer, item: @item, } } /* Each class has its own index -- encode it */ - let bkts = create_index(idx, hash_node_id); + let bkts = create_index(idx); encode_index(ebml_w, bkts, write_int); ebml_w.end_tag(); @@ -865,13 +868,13 @@ fn encode_info_for_items(ecx: @encode_ctxt, ebml_w: ebml::Writer, // Path and definition ID indexing -fn create_index<T: Copy>(index: ~[entry<T>], hash_fn: fn@(T) -> uint) -> +fn create_index<T: Copy Hash IterBytes>(index: ~[entry<T>]) -> ~[@~[entry<T>]] { let mut buckets: ~[@mut ~[entry<T>]] = ~[]; for uint::range(0u, 256u) |_i| { vec::push(buckets, @mut ~[]); }; for index.each |elt| { - let h = hash_fn(elt.val); - vec::push(*buckets[h % 256u], elt); + let h = elt.val.hash() as uint; + vec::push(*buckets[h % 256], elt); } let mut buckets_frozen = ~[]; @@ -1135,7 +1138,7 @@ fn encode_metadata(parms: encode_parms, crate: @crate) -> ~[u8] { ecx.stats.item_bytes = wr.pos - i; i = wr.pos; - let items_buckets = create_index(items_index, hash_node_id); + let items_buckets = create_index(items_index); encode_index(ebml_w, items_buckets, write_int); ecx.stats.index_bytes = wr.pos - i; ebml_w.end_tag(); |
