@@ -59,7 +59,7 @@ export translate_def_id;
59
59
// what crate that's in and give us a def_id that makes sense for the current
60
60
// build.
61
61
62
- fn lookup_hash ( d : ebml:: doc , eq_fn : fn @( ~ [ u8 ] ) -> bool , hash : uint ) ->
62
+ fn lookup_hash ( d : ebml:: doc , eq_fn : fn @( x : & [ u8 ] ) -> bool , hash : uint ) ->
63
63
~[ ebml:: doc ] {
64
64
let index = ebml:: get_doc ( d, tag_index) ;
65
65
let table = ebml:: get_doc ( index, tag_index_table) ;
@@ -72,16 +72,17 @@ fn lookup_hash(d: ebml::doc, eq_fn: fn@(~[u8]) -> bool, hash: uint) ->
72
72
let belt = tag_index_buckets_bucket_elt;
73
73
do ebml:: tagged_docs ( bucket, belt) |elt| {
74
74
let pos = io:: u64_from_be_bytes ( * elt. data , elt. start , 4 u) as uint ;
75
- if eq_fn ( vec:: slice :: < u8 > ( * elt. data , elt. start + 4 u, elt. end ) ) {
75
+ if eq_fn ( vec:: view :: < u8 > ( * elt. data , elt. start + 4 u, elt. end ) ) {
76
76
vec:: push ( result, ebml:: doc_at ( d. data , pos) . doc ) ;
77
77
}
78
78
} ;
79
79
ret result;
80
80
}
81
81
82
82
fn maybe_find_item ( item_id : int , items : ebml:: doc ) -> option < ebml:: doc > {
83
- fn eq_item ( bytes : ~[ u8 ] , item_id : int ) -> bool {
84
- ret io:: u64_from_be_bytes ( bytes, 0 u, 4 u) as int == item_id;
83
+ fn eq_item ( bytes : & [ u8 ] , item_id : int ) -> bool {
84
+ ret io:: u64_from_be_bytes ( vec:: slice ( bytes, 0 u, 4 u) , 0 u, 4 u) as int
85
+ == item_id;
85
86
}
86
87
let eqer = |a| eq_item ( a, item_id) ;
87
88
let found = lookup_hash ( items, eqer, hash_node_id ( item_id) ) ;
@@ -215,8 +216,21 @@ fn enum_variant_ids(item: ebml::doc, cdata: cmd) -> ~[ast::def_id] {
215
216
// Given a path and serialized crate metadata, returns the IDs of the
216
217
// definitions the path may refer to.
217
218
fn resolve_path ( path : ~[ ast:: ident ] , data : @~[ u8 ] ) -> ~[ ast:: def_id ] {
218
- fn eq_item ( data : ~[ u8 ] , s : str ) -> bool {
219
- ret str:: eq ( str:: from_bytes ( data) , s) ;
219
+ fn eq_item ( data : & [ u8 ] , s : str ) -> bool {
220
+ // XXX: Use string equality.
221
+ let data_len = data. len ( ) ;
222
+ let s_len = s. len ( ) ;
223
+ if data_len != s_len {
224
+ ret false ;
225
+ }
226
+ let mut i = 0 ;
227
+ while i < data_len {
228
+ if data[ i] != s[ i] {
229
+ ret false ;
230
+ }
231
+ i += 1 ;
232
+ }
233
+ ret true;
220
234
}
221
235
let s = ast_util:: path_name_i ( path) ;
222
236
let md = ebml:: doc ( data) ;
0 commit comments