]> git.lizzy.rs Git - rust.git/commitdiff
Return the iterator from reader::docs.
authorMs2ger <ms2ger@gmail.com>
Sun, 17 May 2015 16:14:40 +0000 (18:14 +0200)
committerMs2ger <ms2ger@gmail.com>
Tue, 19 May 2015 17:31:54 +0000 (19:31 +0200)
src/librbml/lib.rs
src/librustc/metadata/decoder.rs
src/librustc/middle/astencode.rs

index 66fb579b1800fb2f0dde7b2c4f14fc0f35ae72ea..65433c528bc52b92cc6679d0669585471fbaf75d 100644 (file)
@@ -397,12 +397,10 @@ pub fn get_doc<'a>(d: Doc<'a>, tg: usize) -> Doc<'a> {
         }
     }
 
-    pub fn docs<F>(d: Doc, mut it: F) -> bool where
-        F: FnMut(usize, Doc) -> bool,
-    {
-        DocsIterator { d: d }.all(|(value, doc)| {
-            it(value, doc)
-        })
+    pub fn docs<'a>(d: Doc<'a>) -> DocsIterator<'a> {
+        DocsIterator {
+            d: d
+        }
     }
 
     pub struct DocsIterator<'a> {
index 2f2a5d31c9f77aaf25087c681d255061bbd3acbf..2c11ee8baa9d6503ca079265c97c454e9d936c0d 100644 (file)
@@ -275,25 +275,18 @@ fn enum_variant_ids(item: rbml::Doc, cdata: Cmd) -> Vec<ast::DefId> {
 
 fn item_path(item_doc: rbml::Doc) -> Vec<ast_map::PathElem> {
     let path_doc = reader::get_doc(item_doc, tag_path);
-
-    let len_doc = reader::get_doc(path_doc, tag_path_len);
-    let len = reader::doc_as_u32(len_doc) as usize;
-
-    let mut result = Vec::with_capacity(len);
-    reader::docs(path_doc, |tag, elt_doc| {
+    reader::docs(path_doc).filter_map(|(tag, elt_doc)| {
         if tag == tag_path_elem_mod {
             let s = elt_doc.as_str_slice();
-            result.push(ast_map::PathMod(token::intern(s)));
+            Some(ast_map::PathMod(token::intern(s)))
         } else if tag == tag_path_elem_name {
             let s = elt_doc.as_str_slice();
-            result.push(ast_map::PathName(token::intern(s)));
+            Some(ast_map::PathName(token::intern(s)))
         } else {
             // ignore tag_path_len element
+            None
         }
-        true
-    });
-
-    result
+    }).collect()
 }
 
 fn item_name(intr: &IdentInterner, item: rbml::Doc) -> ast::Name {
index 328972c54e377f25972da3883364d48ec89199e0..894a7db21be1db49dc7640523adb5eebcccd1671 100644 (file)
@@ -1706,7 +1706,7 @@ fn convert_def_id(&mut self,
 fn decode_side_tables(dcx: &DecodeContext,
                       ast_doc: rbml::Doc) {
     let tbl_doc = ast_doc.get(c::tag_table as usize);
-    reader::docs(tbl_doc, |tag, entry_doc| {
+    for (tag, entry_doc) in reader::docs(tbl_doc) {
         let mut entry_dsr = reader::Decoder::new(entry_doc);
         let id0: ast::NodeId = Decodable::decode(&mut entry_dsr).unwrap();
         let id = dcx.tr_id(id0);
@@ -1815,8 +1815,7 @@ fn decode_side_tables(dcx: &DecodeContext,
         }
 
         debug!(">< Side table doc loaded");
-        true
-    });
+    }
 }
 
 // ______________________________________________________________________