Skip to content

Commit b58c8b0

Browse files
committed
---
yaml --- r: 24538 b: refs/heads/try2 c: af38333 h: refs/heads/master v: v3
1 parent 6abe5b6 commit b58c8b0

File tree

4 files changed

+17
-11
lines changed

4 files changed

+17
-11
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: cd6f24f9d14ac90d167386a56e7a6ac1f0318195
55
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 0f5eaef5fb2443acd3ea67250c953839c3d04d38
8+
refs/heads/try2: af38333f75416e8599d6534ded7d73ae121f3207
99
refs/heads/incoming: 05543fd04dfb3f63b453a331e239ceb1a9a219f9
1010
refs/heads/dist-snap: 2f32a1581f522e524009138b33b1c7049ced668d
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/try2/src/libstd/ebml.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export writer;
2626
export serializer;
2727
export ebml_deserializer;
2828
export deserializer;
29+
export with_doc_data;
2930

3031
type ebml_tag = {id: uint, size: uint};
3132

@@ -121,6 +122,10 @@ fn tagged_docs(d: doc, tg: uint, it: fn(doc)) {
121122

122123
fn doc_data(d: doc) -> ~[u8] { vec::slice::<u8>(*d.data, d.start, d.end) }
123124

125+
fn with_doc_data<T>(d: doc, f: fn(x:&[u8]) -> T) -> T {
126+
ret f(vec::view::<u8>(*d.data, d.start, d.end));
127+
}
128+
124129
fn doc_as_str(d: doc) -> str { ret str::from_bytes(doc_data(d)); }
125130

126131
fn doc_as_u8(d: doc) -> u8 {

branches/try2/src/rustc/metadata/decoder.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,16 @@ fn item_symbol(item: ebml::doc) -> str {
118118
fn item_parent_item(d: ebml::doc) -> option<ast::def_id> {
119119
let mut found = none;
120120
do ebml::tagged_docs(d, tag_items_data_parent_item) |did| {
121-
found = some(parse_def_id(ebml::doc_data(did)));
121+
found = some(ebml::with_doc_data(did, |d| parse_def_id(d)));
122122
}
123123
found
124124
}
125125

126126
// XXX: This has nothing to do with classes.
127127
fn class_member_id(d: ebml::doc, cdata: cmd) -> ast::def_id {
128128
let tagdoc = ebml::get_doc(d, tag_def_id);
129-
ret translate_def_id(cdata, parse_def_id(ebml::doc_data(tagdoc)));
129+
ret translate_def_id(cdata, ebml::with_doc_data(tagdoc,
130+
|d| parse_def_id(d)));
130131
}
131132

132133
fn field_mutability(d: ebml::doc) -> ast::class_mutability {
@@ -207,7 +208,7 @@ fn enum_variant_ids(item: ebml::doc, cdata: cmd) -> ~[ast::def_id] {
207208
let mut ids: ~[ast::def_id] = ~[];
208209
let v = tag_items_data_item_variant;
209210
do ebml::tagged_docs(item, v) |p| {
210-
let ext = parse_def_id(ebml::doc_data(p));
211+
let ext = ebml::with_doc_data(p, |d| parse_def_id(d));
211212
vec::push(ids, {crate: cdata.cnum, node: ext.node});
212213
};
213214
ret ids;
@@ -240,7 +241,7 @@ fn resolve_path(path: ~[ast::ident], data: @~[u8]) -> ~[ast::def_id] {
240241
#debug("resolve_path: looking up %s", s);
241242
for lookup_hash(paths, eqer, hash_path(s)).each |doc| {
242243
let did_doc = ebml::get_doc(doc, tag_def_id);
243-
vec::push(result, parse_def_id(ebml::doc_data(did_doc)));
244+
vec::push(result, ebml::with_doc_data(did_doc, |d| parse_def_id(d)));
244245
}
245246
ret result;
246247
}
@@ -337,7 +338,7 @@ fn get_impl_method(cdata: cmd, id: ast::node_id,
337338
let items = ebml::get_doc(ebml::doc(cdata.data), tag_items);
338339
let mut found = none;
339340
do ebml::tagged_docs(find_item(id, items), tag_item_impl_method) |mid| {
340-
let m_did = parse_def_id(ebml::doc_data(mid));
341+
let m_did = ebml::with_doc_data(mid, |d| parse_def_id(d));
341342
if item_name(find_item(m_did.node, items)) == name {
342343
found = some(translate_def_id(cdata, m_did));
343344
}
@@ -375,7 +376,7 @@ fn class_dtor(cdata: cmd, id: ast::node_id) -> option<ast::def_id> {
375376
};
376377
do ebml::tagged_docs(cls_items, tag_item_dtor) |doc| {
377378
let doc1 = ebml::get_doc(doc, tag_def_id);
378-
let did = parse_def_id(ebml::doc_data(doc1));
379+
let did = ebml::with_doc_data(doc1, |d| parse_def_id(d));
379380
found = some(translate_def_id(cdata, did));
380381
};
381382
found
@@ -558,7 +559,7 @@ fn item_impl_methods(cdata: cmd, item: ebml::doc, base_tps: uint)
558559
-> ~[@method_info] {
559560
let mut rslt = ~[];
560561
do ebml::tagged_docs(item, tag_item_impl_method) |doc| {
561-
let m_did = parse_def_id(ebml::doc_data(doc));
562+
let m_did = ebml::with_doc_data(doc, |d| parse_def_id(d));
562563
let mth_item = lookup_item(m_did.node, cdata.data);
563564
vec::push(rslt, @{did: translate_def_id(cdata, m_did),
564565
/* FIXME (maybe #2323) tjc: take a look at this. */
@@ -578,7 +579,7 @@ fn get_impls_for_mod(cdata: cmd,
578579
let mod_item = lookup_item(m_id, data);
579580
let mut result = ~[];
580581
do ebml::tagged_docs(mod_item, tag_mod_impl) |doc| {
581-
let did = parse_def_id(ebml::doc_data(doc));
582+
let did = ebml::with_doc_data(doc, |d| parse_def_id(d));
582583
let local_did = translate_def_id(cdata, did);
583584
// The impl may be defined in a different crate. Ask the caller
584585
// to give us the metadata
@@ -839,7 +840,7 @@ fn iter_crate_items(bytes: @~[u8], proc: fn(str, ast::def_id)) {
839840
let data = read_path(elt);
840841
let {tag:_, doc:def} = ebml::doc_at(bytes, data.pos);
841842
let did_doc = ebml::get_doc(def, tag_def_id);
842-
let did = parse_def_id(ebml::doc_data(did_doc));
843+
let did = ebml::with_doc_data(did_doc, |d| parse_def_id(d));
843844
proc(data.path, did);
844845
};
845846
};

branches/try2/src/rustc/metadata/tydecode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ fn parse_ty_fn(st: @pstate, conv: conv_did) -> ty::fn_ty {
467467

468468

469469
// Rust metadata parsing
470-
fn parse_def_id(buf: ~[u8]) -> ast::def_id {
470+
fn parse_def_id(buf: &[u8]) -> ast::def_id {
471471
let mut colon_idx = 0u;
472472
let len = vec::len(buf);
473473
while colon_idx < len && buf[colon_idx] != ':' as u8 { colon_idx += 1u; }

0 commit comments

Comments
 (0)