@@ -162,18 +162,19 @@ fn item_visibility(item: ebml::Doc) -> ast::visibility {
162
162
163
163
fn item_method_sort ( item : ebml:: Doc ) -> char {
164
164
for reader:: tagged_docs( item, tag_item_trait_method_sort) |doc| {
165
- return doc . as_str_slice ( ) [ 0 ] as char ;
165
+ return str :: from_bytes ( reader :: doc_data ( doc ) ) [ 0 ] as char;
166
166
}
167
167
return 'r' ;
168
168
}
169
169
170
170
fn item_symbol ( item : ebml:: Doc ) -> ~str {
171
- reader:: get_doc ( item, tag_items_data_item_symbol) . as_str ( )
171
+ let sym = reader:: get_doc ( item, tag_items_data_item_symbol) ;
172
+ return str:: from_bytes ( reader:: doc_data ( sym) ) ;
172
173
}
173
174
174
175
fn item_parent_item ( d : ebml:: Doc ) -> Option < ast:: def_id > {
175
176
for reader:: tagged_docs( d, tag_items_data_parent_item) |did| {
176
- return Some ( reader:: with_doc_data( did, parse_def_id) ) ;
177
+ return Some ( reader:: with_doc_data( did, |d| parse_def_id( d ) ) ) ;
177
178
}
178
179
None
179
180
}
@@ -194,7 +195,8 @@ fn item_reqd_and_translated_parent_item(cnum: ast::crate_num,
194
195
195
196
fn item_def_id ( d : ebml:: Doc , cdata : cmd ) -> ast:: def_id {
196
197
let tagdoc = reader:: get_doc ( d, tag_def_id) ;
197
- return translate_def_id ( cdata, reader:: with_doc_data ( tagdoc, parse_def_id) ) ;
198
+ return translate_def_id ( cdata, reader:: with_doc_data ( tagdoc,
199
+ |d| parse_def_id ( d) ) ) ;
198
200
}
199
201
200
202
fn each_reexport ( d : ebml:: Doc , f : & fn ( ebml:: Doc ) -> bool ) -> bool {
@@ -208,19 +210,19 @@ fn each_reexport(d: ebml::Doc, f: &fn(ebml::Doc) -> bool) -> bool {
208
210
209
211
fn variant_disr_val ( d : ebml:: Doc ) -> Option < int > {
210
212
do reader:: maybe_get_doc ( d, tag_disr_val) . chain |val_doc| {
211
- do reader :: with_doc_data ( val_doc ) |data| { int :: parse_bytes ( data , 10 u) }
213
+ int :: parse_bytes ( reader :: doc_data ( val_doc ) , 10 u)
212
214
}
213
215
}
214
216
215
217
fn doc_type ( doc : ebml:: Doc , tcx : ty:: ctxt , cdata : cmd ) -> ty:: t {
216
218
let tp = reader:: get_doc ( doc, tag_items_data_item_type) ;
217
- parse_ty_data ( * tp. data , cdata. cnum , tp. start , tcx,
219
+ parse_ty_data ( tp. data , cdata. cnum , tp. start , tcx,
218
220
|_, did| translate_def_id ( cdata, did) )
219
221
}
220
222
221
223
fn doc_method_fty ( doc : ebml:: Doc , tcx : ty:: ctxt , cdata : cmd ) -> ty:: BareFnTy {
222
224
let tp = reader:: get_doc ( doc, tag_item_method_fty) ;
223
- parse_bare_fn_ty_data ( * tp. data , cdata. cnum , tp. start , tcx,
225
+ parse_bare_fn_ty_data ( tp. data , cdata. cnum , tp. start , tcx,
224
226
|_, did| translate_def_id ( cdata, did) )
225
227
}
226
228
@@ -229,7 +231,7 @@ fn doc_transformed_self_ty(doc: ebml::Doc,
229
231
cdata : cmd ) -> Option < ty:: t >
230
232
{
231
233
do reader:: maybe_get_doc ( doc, tag_item_method_transformed_self_ty) . map |tp| {
232
- parse_ty_data ( * tp. data , cdata. cnum , tp. start , tcx,
234
+ parse_ty_data ( tp. data , cdata. cnum , tp. start , tcx,
233
235
|_, did| translate_def_id ( cdata, did) )
234
236
}
235
237
}
@@ -240,7 +242,7 @@ pub fn item_type(_item_id: ast::def_id, item: ebml::Doc,
240
242
}
241
243
242
244
fn doc_trait_ref ( doc : ebml:: Doc , tcx : ty:: ctxt , cdata : cmd ) -> ty:: TraitRef {
243
- parse_trait_ref_data ( * doc. data , cdata. cnum , doc. start , tcx,
245
+ parse_trait_ref_data ( doc. data , cdata. cnum , doc. start , tcx,
244
246
|_, did| translate_def_id ( cdata, did) )
245
247
}
246
248
@@ -255,7 +257,7 @@ fn item_ty_param_defs(item: ebml::Doc, tcx: ty::ctxt, cdata: cmd,
255
257
let mut bounds = ~[ ] ;
256
258
for reader:: tagged_docs( item, tag) |p| {
257
259
let bd = parse_type_param_def_data (
258
- * p. data , p. start , cdata. cnum , tcx,
260
+ p. data , p. start , cdata. cnum , tcx,
259
261
|_, did| translate_def_id ( cdata, did) ) ;
260
262
bounds. push ( bd) ;
261
263
}
@@ -280,7 +282,7 @@ fn enum_variant_ids(item: ebml::Doc, cdata: cmd) -> ~[ast::def_id] {
280
282
let mut ids: ~[ ast:: def_id ] = ~[ ] ;
281
283
let v = tag_items_data_item_variant;
282
284
for reader:: tagged_docs( item, v) |p| {
283
- let ext = reader:: with_doc_data ( p, parse_def_id) ;
285
+ let ext = reader:: with_doc_data ( p, |d| parse_def_id ( d ) ) ;
284
286
ids. push ( ast:: def_id { crate : cdata. cnum , node : ext. node } ) ;
285
287
} ;
286
288
return ids;
@@ -295,10 +297,10 @@ fn item_path(item_doc: ebml::Doc) -> ast_map::path {
295
297
let mut result = vec:: with_capacity ( len) ;
296
298
for reader:: docs( path_doc) |tag, elt_doc| {
297
299
if tag == tag_path_elt_mod {
298
- let str = elt_doc . as_str_slice ( ) ;
300
+ let str = reader :: doc_as_str ( elt_doc ) ;
299
301
result. push ( ast_map:: path_mod ( token:: str_to_ident ( str) ) ) ;
300
302
} else if tag == tag_path_elt_name {
301
- let str = elt_doc . as_str_slice ( ) ;
303
+ let str = reader :: doc_as_str ( elt_doc ) ;
302
304
result. push ( ast_map:: path_name ( token:: str_to_ident ( str) ) ) ;
303
305
} else {
304
306
// ignore tag_path_len element
@@ -310,10 +312,12 @@ fn item_path(item_doc: ebml::Doc) -> ast_map::path {
310
312
311
313
fn item_name ( intr : @ident_interner , item : ebml:: Doc ) -> ast:: ident {
312
314
let name = reader:: get_doc ( item, tag_paths_data_name) ;
313
- let string = name. as_str_slice ( ) ;
314
- match intr. find_equiv ( & StringRef ( string) ) {
315
- None => token:: str_to_ident ( string) ,
316
- Some ( val) => ast:: new_ident ( val) ,
315
+ do reader:: with_doc_data ( name) |data| {
316
+ let string = str:: from_bytes_slice ( data) ;
317
+ match intr. find_equiv ( & StringRef ( string) ) {
318
+ None => token:: str_to_ident ( string) ,
319
+ Some ( val) => ast:: new_ident ( val) ,
320
+ }
317
321
}
318
322
}
319
323
@@ -409,9 +413,15 @@ pub fn get_impl_trait(cdata: cmd,
409
413
tcx : ty:: ctxt ) -> Option < @ty:: TraitRef >
410
414
{
411
415
let item_doc = lookup_item ( id, cdata. data ) ;
412
- do reader:: maybe_get_doc ( item_doc, tag_item_trait_ref) . map |& tp| {
413
- @doc_trait_ref ( tp, tcx, cdata)
414
- }
416
+ let mut result = None ;
417
+ for reader:: tagged_docs( item_doc, tag_item_trait_ref) |tp| {
418
+ let trait_ref =
419
+ @parse_trait_ref_data ( tp. data , cdata. cnum , tp. start , tcx,
420
+ |_, did| translate_def_id ( cdata, did) ) ;
421
+ result = Some ( trait_ref) ;
422
+ break ;
423
+ } ;
424
+ result
415
425
}
416
426
417
427
pub fn get_impl_method ( intr : @ident_interner , cdata : cmd , id : ast:: node_id ,
@@ -420,7 +430,7 @@ pub fn get_impl_method(intr: @ident_interner, cdata: cmd, id: ast::node_id,
420
430
let mut found = None ;
421
431
for reader:: tagged_docs( find_item( id, items) , tag_item_impl_method)
422
432
|mid| {
423
- let m_did = reader:: with_doc_data ( mid, parse_def_id) ;
433
+ let m_did = reader:: with_doc_data ( mid, |d| parse_def_id ( d ) ) ;
424
434
if item_name ( intr, find_item ( m_did. node , items) ) == name {
425
435
found = Some ( translate_def_id ( cdata, m_did) ) ;
426
436
}
@@ -503,17 +513,19 @@ pub fn each_path(intr: @ident_interner,
503
513
let def_id_doc =
504
514
reader:: get_doc ( reexport_doc,
505
515
tag_items_data_item_reexport_def_id) ;
506
- let def_id = reader:: with_doc_data ( def_id_doc, parse_def_id) ;
516
+ let def_id =
517
+ reader:: with_doc_data ( def_id_doc,
518
+ |d| parse_def_id ( d) ) ;
507
519
let def_id = translate_def_id ( cdata, def_id) ;
508
520
509
521
let reexport_name_doc =
510
522
reader:: get_doc ( reexport_doc,
511
523
tag_items_data_item_reexport_name) ;
512
- let reexport_name = reexport_name_doc . as_str_slice ( ) ;
524
+ let reexport_name = reader :: doc_as_str ( reexport_name_doc ) ;
513
525
514
526
let reexport_path;
515
527
if path_is_empty {
516
- reexport_path = reexport_name. to_owned ( ) ;
528
+ reexport_path = reexport_name;
517
529
} else {
518
530
reexport_path = path + "::" + reexport_name;
519
531
}
@@ -634,7 +646,7 @@ fn get_explicit_self(item: ebml::Doc) -> ast::explicit_self_ {
634
646
}
635
647
636
648
let explicit_self_doc = reader:: get_doc ( item, tag_item_trait_method_explicit_self) ;
637
- let string = explicit_self_doc . as_str_slice ( ) ;
649
+ let string = reader :: doc_as_str ( explicit_self_doc ) ;
638
650
639
651
let explicit_self_kind = string[ 0 ] ;
640
652
match explicit_self_kind as char {
@@ -656,7 +668,7 @@ fn item_impl_methods(intr: @ident_interner, cdata: cmd, item: ebml::Doc,
656
668
base_tps : uint ) -> ~[ @resolve:: MethodInfo ] {
657
669
let mut rslt = ~[ ] ;
658
670
for reader:: tagged_docs( item, tag_item_impl_method) |doc| {
659
- let m_did = reader:: with_doc_data ( doc, parse_def_id) ;
671
+ let m_did = reader:: with_doc_data ( doc, |d| parse_def_id ( d ) ) ;
660
672
let mth_item = lookup_item ( m_did. node , cdata. data ) ;
661
673
let explicit_self = get_explicit_self ( mth_item) ;
662
674
rslt. push ( @resolve:: MethodInfo {
@@ -678,7 +690,7 @@ pub fn get_impls_for_mod(intr: @ident_interner,
678
690
let mod_item = lookup_item ( m_id, data) ;
679
691
let mut result = ~[ ] ;
680
692
for reader:: tagged_docs( mod_item, tag_mod_impl) |doc| {
681
- let did = reader:: with_doc_data ( doc, parse_def_id) ;
693
+ let did = reader:: with_doc_data ( doc, |d| parse_def_id ( d ) ) ;
682
694
let local_did = translate_def_id ( cdata, did) ;
683
695
debug ! ( "(get impls for mod) getting did %? for '%?'" ,
684
696
local_did, name) ;
@@ -819,7 +831,7 @@ pub fn get_type_name_if_impl(cdata: cmd,
819
831
}
820
832
821
833
for reader:: tagged_docs( item, tag_item_impl_type_basename) |doc| {
822
- return Some ( token:: str_to_ident ( doc . as_str_slice ( ) ) ) ;
834
+ return Some ( token:: str_to_ident( str :: from_bytes ( reader :: doc_data ( doc ) ) ) ) ;
823
835
}
824
836
825
837
return None ;
@@ -841,7 +853,7 @@ pub fn get_static_methods_if_impl(intr: @ident_interner,
841
853
842
854
let mut impl_method_ids = ~[ ] ;
843
855
for reader:: tagged_docs( item, tag_item_impl_method) |impl_method_doc| {
844
- impl_method_ids. push ( reader:: with_doc_data ( impl_method_doc, parse_def_id ) ) ;
856
+ impl_method_ids. push ( parse_def_id ( reader:: doc_data ( impl_method_doc) ) ) ;
845
857
}
846
858
847
859
let mut static_impl_methods = ~[ ] ;
@@ -938,13 +950,12 @@ fn family_names_type(fam: Family) -> bool {
938
950
}
939
951
940
952
fn read_path ( d : ebml:: Doc ) -> ( ~str , uint ) {
941
- do reader:: with_doc_data ( d) |desc| {
942
- let pos = io:: u64_from_be_bytes ( desc, 0 u, 4 u) as uint ;
943
- let pathbytes = desc . slice ( 4 u, desc . len ( ) ) ;
944
- let path = str:: from_bytes ( pathbytes) ;
953
+ let desc = reader:: doc_data ( d) ;
954
+ let pos = io:: u64_from_be_bytes ( desc, 0 u, 4 u) as uint ;
955
+ let pathbytes = vec :: slice :: < u8 > ( desc , 4 u, vec :: len :: < u8 > ( desc ) ) ;
956
+ let path = str:: from_bytes ( pathbytes) ;
945
957
946
- ( path, pos)
947
- }
958
+ ( path, pos)
948
959
}
949
960
950
961
fn describe_def ( items : ebml:: Doc , id : ast:: def_id ) -> ~str {
@@ -985,21 +996,21 @@ fn get_meta_items(md: ebml::Doc) -> ~[@ast::meta_item] {
985
996
let mut items: ~[ @ast:: meta_item ] = ~[ ] ;
986
997
for reader:: tagged_docs( md, tag_meta_item_word) |meta_item_doc| {
987
998
let nd = reader:: get_doc ( meta_item_doc, tag_meta_item_name) ;
988
- let n = nd . as_str ( ) ;
999
+ let n = str :: from_bytes ( reader :: doc_data ( nd ) ) ;
989
1000
items. push ( attr:: mk_word_item ( @n) ) ;
990
1001
} ;
991
1002
for reader:: tagged_docs( md, tag_meta_item_name_value) |meta_item_doc| {
992
1003
let nd = reader:: get_doc ( meta_item_doc, tag_meta_item_name) ;
993
1004
let vd = reader:: get_doc ( meta_item_doc, tag_meta_item_value) ;
994
- let n = nd . as_str ( ) ;
995
- let v = vd . as_str ( ) ;
1005
+ let n = str :: from_bytes ( reader :: doc_data ( nd ) ) ;
1006
+ let v = str :: from_bytes ( reader :: doc_data ( vd ) ) ;
996
1007
// FIXME (#623): Should be able to decode meta_name_value variants,
997
1008
// but currently the encoder just drops them
998
1009
items. push ( attr:: mk_name_value_item_str ( @n, @v) ) ;
999
1010
} ;
1000
1011
for reader:: tagged_docs( md, tag_meta_item_list) |meta_item_doc| {
1001
1012
let nd = reader:: get_doc ( meta_item_doc, tag_meta_item_name) ;
1002
- let n = nd . as_str ( ) ;
1013
+ let n = str :: from_bytes ( reader :: doc_data ( nd ) ) ;
1003
1014
let subitems = get_meta_items ( meta_item_doc) ;
1004
1015
items. push ( attr:: mk_list_item ( @n, subitems) ) ;
1005
1016
} ;
@@ -1068,7 +1079,7 @@ pub fn get_crate_deps(data: @~[u8]) -> ~[crate_dep] {
1068
1079
let depsdoc = reader:: get_doc ( cratedoc, tag_crate_deps) ;
1069
1080
let mut crate_num = 1 ;
1070
1081
fn docstr ( doc : ebml:: Doc , tag_ : uint ) -> ~str {
1071
- reader:: get_doc ( doc, tag_) . as_str ( )
1082
+ str :: from_bytes ( reader:: doc_data ( reader :: get_doc ( doc, tag_) ) )
1072
1083
}
1073
1084
for reader:: tagged_docs( depsdoc, tag_crate_dep) |depdoc| {
1074
1085
deps. push ( crate_dep { cnum : crate_num,
@@ -1095,7 +1106,7 @@ fn list_crate_deps(data: @~[u8], out: @io::Writer) {
1095
1106
pub fn get_crate_hash ( data : @~[ u8 ] ) -> @~str {
1096
1107
let cratedoc = reader:: Doc ( data) ;
1097
1108
let hashdoc = reader:: get_doc ( cratedoc, tag_crate_hash) ;
1098
- @hashdoc . as_str ( )
1109
+ @str :: from_bytes ( reader :: doc_data ( hashdoc ) )
1099
1110
}
1100
1111
1101
1112
pub fn get_crate_vers ( data : @~[ u8 ] ) -> @~str {
@@ -1150,7 +1161,7 @@ pub fn get_link_args_for_crate(cdata: cmd) -> ~[~str] {
1150
1161
let link_args = reader:: get_doc ( reader:: Doc ( cdata. data ) , tag_link_args) ;
1151
1162
let mut result = ~[ ] ;
1152
1163
for reader:: tagged_docs( link_args, tag_link_args_arg) |arg_doc| {
1153
- result. push ( arg_doc . as_str ( ) ) ;
1164
+ result. push ( reader :: doc_as_str ( arg_doc ) ) ;
1154
1165
}
1155
1166
result
1156
1167
}
0 commit comments