diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index 6cacb7d0d48..fe1225ffa59 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -79,6 +79,23 @@ fn mk_fold( }) } +fn default_any_fold(ctxt: T) -> fold { + mk_fold( + ctxt, + {|f, d| default_seq_fold_crate(f, d)}, + {|f, d| default_seq_fold_item(f, d)}, + {|f, d| default_any_fold_mod(f, d)}, + {|f, d| default_seq_fold_nmod(f, d)}, + {|f, d| default_seq_fold_fn(f, d)}, + {|f, d| default_seq_fold_const(f, d)}, + {|f, d| default_seq_fold_enum(f, d)}, + {|f, d| default_seq_fold_res(f, d)}, + {|f, d| default_seq_fold_iface(f, d)}, + {|f, d| default_seq_fold_impl(f, d)}, + {|f, d| default_seq_fold_type(f, d)} + ) +} + fn default_seq_fold(ctxt: T) -> fold { mk_fold( ctxt, @@ -113,12 +130,6 @@ fn default_par_fold(ctxt: T) -> fold { ) } -// Just a convenient wrapper to convert back and forth between -// parallel and sequential folds for perf testing -fn default_any_fold(ctxt: T) -> fold { - default_seq_fold(ctxt) -} - fn default_seq_fold_crate( fold: fold, doc: doc::cratedoc @@ -135,27 +146,27 @@ fn default_seq_fold_item( doc } -fn default_seq_fold_mod( +fn default_any_fold_mod( fold: fold, doc: doc::moddoc ) -> doc::moddoc { { item: fold.fold_item(fold, doc.item), - items: vec::map(doc.items) {|itemtag| + items: util::anymap(doc.items) {|itemtag| fold_itemtag(fold, itemtag) } with doc } } -fn default_seq_fold_nmod( +fn default_seq_fold_mod( fold: fold, - doc: doc::nmoddoc -) -> doc::nmoddoc { + doc: doc::moddoc +) -> doc::moddoc { { item: fold.fold_item(fold, doc.item), - fns: vec::map(doc.fns) {|fndoc| - fold.fold_fn(fold, fndoc) + items: util::seqmap(doc.items) {|itemtag| + fold_itemtag(fold, itemtag) } with doc } @@ -174,11 +185,17 @@ fn default_par_fold_mod( } } -fn default_any_fold_mod( +fn default_seq_fold_nmod( fold: fold, - doc: doc::moddoc -) -> doc::moddoc { - default_seq_fold_mod(fold, doc) + doc: doc::nmoddoc +) -> doc::nmoddoc { + { + item: fold.fold_item(fold, doc.item), + fns: vec::map(doc.fns) {|fndoc| + fold.fold_fn(fold, fndoc) + } + with doc + } } fn fold_itemtag(fold: fold, doc: doc::itemtag) -> doc::itemtag { diff --git a/src/rustdoc/util.rs b/src/rustdoc/util.rs index dbc143bcc87..861dea83bc6 100644 --- a/src/rustdoc/util.rs +++ b/src/rustdoc/util.rs @@ -1,4 +1,12 @@ -export parmap; +export anymap, seqmap, parmap; + +fn anymap(v: [T], f: fn(T) -> U) -> [U] { + seqmap(v, f) +} + +fn seqmap(v: [T], f: fn(T) -> U) -> [U] { + vec::map(v, f) +} fn parmap(v: [T], f: fn~(T) -> U) -> [U] unsafe { let futures = vec::map(v) {|elt|