diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-02-27 18:07:16 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-02-27 18:07:16 -0800 |
| commit | 98c31aaaffcd98ab708acd095cc0202fa49ce2dd (patch) | |
| tree | a2a7b18a6e47b964b30bc1ca0adddc401e5481ed | |
| parent | 7e9aa6c3c2ae054e32dfcc7c5e4830ce7c4c6921 (diff) | |
| download | rust-98c31aaaffcd98ab708acd095cc0202fa49ce2dd.tar.gz rust-98c31aaaffcd98ab708acd095cc0202fa49ce2dd.zip | |
rustdoc: Time passes
| -rw-r--r-- | src/rustdoc/attr_pass.rs | 9 | ||||
| -rw-r--r-- | src/rustdoc/desc_pass.rs | 11 | ||||
| -rw-r--r-- | src/rustdoc/desc_to_brief_pass.rs | 7 | ||||
| -rw-r--r-- | src/rustdoc/markdown_pass.rs | 21 | ||||
| -rw-r--r-- | src/rustdoc/path_pass.rs | 7 | ||||
| -rw-r--r-- | src/rustdoc/prune_undoc_details_pass.rs | 11 | ||||
| -rw-r--r-- | src/rustdoc/prune_undoc_items_pass.rs | 7 | ||||
| -rw-r--r-- | src/rustdoc/prune_unexported_pass.rs | 7 | ||||
| -rw-r--r-- | src/rustdoc/reexport_pass.rs | 13 | ||||
| -rwxr-xr-x | src/rustdoc/rustdoc.rs | 35 | ||||
| -rw-r--r-- | src/rustdoc/sort_item_name_pass.rs | 4 | ||||
| -rw-r--r-- | src/rustdoc/sort_item_type_pass.rs | 4 | ||||
| -rw-r--r-- | src/rustdoc/sort_pass.rs | 15 | ||||
| -rw-r--r-- | src/rustdoc/trim_pass.rs | 4 | ||||
| -rw-r--r-- | src/rustdoc/tystr_pass.rs | 5 |
15 files changed, 113 insertions, 47 deletions
diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs index 6f25ae4fbab..9c2f3fa13fd 100644 --- a/src/rustdoc/attr_pass.rs +++ b/src/rustdoc/attr_pass.rs @@ -12,7 +12,10 @@ import rustc::middle::ast_map; export mk_pass; fn mk_pass() -> pass { - run + { + name: "attr", + f: run + } } fn run( @@ -198,7 +201,7 @@ fn should_extract_fn_return_attributes() { let source = "#[doc(return = \"what\")] fn a() -> int { }"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = tystr_pass::mk_pass()(srv, doc); + let doc = tystr_pass::mk_pass().f(srv, doc); let fold = fold::default_any_fold(srv); let doc = fold_fn(fold, doc.topmod.fns()[0]); assert doc.return.desc == some("what"); @@ -210,7 +213,7 @@ fn should_preserve_fn_sig() { let source = "fn a() -> int { }"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = tystr_pass::mk_pass()(srv, doc); + let doc = tystr_pass::mk_pass().f(srv, doc); let fold = fold::default_any_fold(srv); let doc = fold_fn(fold, doc.topmod.fns()[0]); assert doc.sig == some("fn a() -> int"); diff --git a/src/rustdoc/desc_pass.rs b/src/rustdoc/desc_pass.rs index 8295f927050..3061caf4520 100644 --- a/src/rustdoc/desc_pass.rs +++ b/src/rustdoc/desc_pass.rs @@ -3,8 +3,11 @@ export mk_pass; fn mk_pass(op: fn~(str) -> str) -> pass { - fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc { - run(srv, doc, op) + { + name: "desc", + f: fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc { + run(srv, doc, op) + } } } @@ -284,8 +287,8 @@ mod test { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = attr_pass::mk_pass()(srv, doc); - mk_pass({|s| str::trim(s)})(srv, doc) + let doc = attr_pass::mk_pass().f(srv, doc); + mk_pass({|s| str::trim(s)}).f(srv, doc) } } } \ No newline at end of file diff --git a/src/rustdoc/desc_to_brief_pass.rs b/src/rustdoc/desc_to_brief_pass.rs index f463852703e..bf53cdcdca6 100644 --- a/src/rustdoc/desc_to_brief_pass.rs +++ b/src/rustdoc/desc_to_brief_pass.rs @@ -10,7 +10,10 @@ is interpreted as the brief description. export mk_pass; fn mk_pass() -> pass { - run + { + name: "desc_to_brief", + f: run + } } fn run( @@ -149,7 +152,7 @@ mod test { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = attr_pass::mk_pass()(srv, doc); + let doc = attr_pass::mk_pass().f(srv, doc); run(srv, doc) } } diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs index 95e1b670060..d57cc3d7e18 100644 --- a/src/rustdoc/markdown_pass.rs +++ b/src/rustdoc/markdown_pass.rs @@ -11,7 +11,7 @@ export mk_pass; fn mk_pass( give_writer: fn~(fn(io::writer)) ) -> pass { - fn~( + let f = fn~( srv: astsrv::srv, doc: doc::cratedoc ) -> doc::cratedoc { @@ -32,11 +32,18 @@ fn mk_pass( // Sort the items so mods come last. All mods will be // output at the same header level so sorting mods last // makes the headers come out nested correctly. - let sorted_doc = sort_pass::mk_pass(mods_last)(srv, doc); + let sorted_doc = sort_pass::mk_pass( + "mods last", mods_last + ).f(srv, doc); write_markdown(sorted_doc, writer); } doc + }; + + { + name: "markdown", + f: f } } @@ -820,11 +827,11 @@ mod test { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); #debug("doc (extract): %?", doc); - let doc = tystr_pass::mk_pass()(srv, doc); + let doc = tystr_pass::mk_pass().f(srv, doc); #debug("doc (tystr): %?", doc); - let doc = path_pass::mk_pass()(srv, doc); + let doc = path_pass::mk_pass().f(srv, doc); #debug("doc (path): %?", doc); - let doc = attr_pass::mk_pass()(srv, doc); + let doc = attr_pass::mk_pass().f(srv, doc); #debug("doc (attr): %?", doc); (srv, doc) } @@ -858,7 +865,7 @@ mod test { let result = io::mem_buffer_str(buffer); comm::send(chan, result); }; - pass(srv, doc); + pass.f(srv, doc); ret comm::recv(port); } @@ -866,7 +873,7 @@ mod test { fn write_markdown_should_write_crate_header() { astsrv::from_str("") {|srv| let doc = extract::from_srv(srv, "belch"); - let doc = attr_pass::mk_pass()(srv, doc); + let doc = attr_pass::mk_pass().f(srv, doc); let markdown = write_markdown_str(doc); assert str::contains(markdown, "# Crate belch"); } diff --git a/src/rustdoc/path_pass.rs b/src/rustdoc/path_pass.rs index 737c7419084..76f213b108a 100644 --- a/src/rustdoc/path_pass.rs +++ b/src/rustdoc/path_pass.rs @@ -2,7 +2,12 @@ export mk_pass; -fn mk_pass() -> pass { run } +fn mk_pass() -> pass { + { + name: "path", + f: run + } +} type ctxt = { srv: astsrv::srv, diff --git a/src/rustdoc/prune_undoc_details_pass.rs b/src/rustdoc/prune_undoc_details_pass.rs index 5fbb24fc5c9..ea2be022899 100644 --- a/src/rustdoc/prune_undoc_details_pass.rs +++ b/src/rustdoc/prune_undoc_details_pass.rs @@ -4,7 +4,10 @@ export mk_pass; fn mk_pass() -> pass { - run + { + name: "prune_undoc_details", + f: run + } } fn run( @@ -66,8 +69,8 @@ fn should_elide_undocumented_return_values() { let source = "#[doc = \"fonz\"] fn a() -> int { }"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = tystr_pass::mk_pass()(srv, doc); - let doc = attr_pass::mk_pass()(srv, doc); + let doc = tystr_pass::mk_pass().f(srv, doc); + let doc = attr_pass::mk_pass().f(srv, doc); let doc = run(srv, doc); assert doc.topmod.fns()[0].return.ty == none; } @@ -157,7 +160,7 @@ mod test { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = attr_pass::mk_pass()(srv, doc); + let doc = attr_pass::mk_pass().f(srv, doc); run(srv, doc) } } diff --git a/src/rustdoc/prune_undoc_items_pass.rs b/src/rustdoc/prune_undoc_items_pass.rs index d1f94dbb108..a05754fd1d8 100644 --- a/src/rustdoc/prune_undoc_items_pass.rs +++ b/src/rustdoc/prune_undoc_items_pass.rs @@ -3,7 +3,10 @@ export mk_pass; fn mk_pass() -> pass { - run + { + name: "prune_undoc_items", + f: run + } } type ctxt = { @@ -367,7 +370,7 @@ mod test { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = attr_pass::mk_pass()(srv, doc); + let doc = attr_pass::mk_pass().f(srv, doc); run(srv, doc) } } diff --git a/src/rustdoc/prune_unexported_pass.rs b/src/rustdoc/prune_unexported_pass.rs index c64b4dd6bcd..42d281a04d5 100644 --- a/src/rustdoc/prune_unexported_pass.rs +++ b/src/rustdoc/prune_unexported_pass.rs @@ -7,7 +7,10 @@ import rustc::middle::ast_map; export mk_pass; fn mk_pass() -> pass { - run + { + name: "prune_unexperted", + f: run + } } fn run(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc { @@ -232,7 +235,7 @@ fn should_not_prune_reexports() { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = reexport_pass::mk_pass()(srv, doc); + let doc = reexport_pass::mk_pass().f(srv, doc); run(srv, doc) } } diff --git a/src/rustdoc/reexport_pass.rs b/src/rustdoc/reexport_pass.rs index 60ff4a7c798..975bfb54dbf 100644 --- a/src/rustdoc/reexport_pass.rs +++ b/src/rustdoc/reexport_pass.rs @@ -8,7 +8,10 @@ import rustc::util::common; export mk_pass; fn mk_pass() -> pass { - run + { + name: "reexport", + f: run + } } type def_set = map::set<ast::def_id>; @@ -332,10 +335,10 @@ fn should_duplicate_multiple_reexported_items() { }"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = path_pass::mk_pass()(srv, doc); + let doc = path_pass::mk_pass().f(srv, doc); let doc = run(srv, doc); // Reexports may not be in any specific order - let doc = sort_item_name_pass::mk_pass()(srv, doc); + let doc = sort_item_name_pass::mk_pass().f(srv, doc); assert doc.topmod.mods()[1].fns()[0].name() == "b"; assert doc.topmod.mods()[1].fns()[1].name() == "c"; } @@ -354,7 +357,7 @@ fn should_reexport_in_topmod() { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, "core"); - let doc = path_pass::mk_pass()(srv, doc); + let doc = path_pass::mk_pass().f(srv, doc); run(srv, doc) } } @@ -385,7 +388,7 @@ mod test { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = path_pass::mk_pass()(srv, doc); + let doc = path_pass::mk_pass().f(srv, doc); run(srv, doc) } } diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs index f00f0d0726a..00213c57003 100755 --- a/src/rustdoc/rustdoc.rs +++ b/src/rustdoc/rustdoc.rs @@ -7,7 +7,10 @@ import doc::item; import doc::util; #[doc = "A single operation on the document model"] -type pass = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc; +type pass = { + name: str, + f: fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc +}; fn run_passes( srv: astsrv::srv, @@ -36,7 +39,9 @@ fn run_passes( log(debug, #fmt("pass #%d", passno)); passno += 1; log(debug, doc); - pass(srv, doc) + time(pass.name) {|| + pass.f(srv, doc) + } } } @@ -72,7 +77,16 @@ fn test_run_passes() { } let source = ""; astsrv::from_str(source) {|srv| - let passes = [pass1, pass2]; + let passes = [ + { + name: "", + f: pass1 + }, + { + name: "", + f: pass2 + } + ]; let doc = extract::from_srv(srv, "one"); let doc = run_passes(srv, doc, passes); assert doc.topmod.name() == "onetwothree"; @@ -90,12 +104,25 @@ fn main(argv: [str]) { run(source_file); } +fn time<T>(what: str, f: fn() -> T) -> T { + let start = std::time::precise_time_s(); + let rv = f(); + let end = std::time::precise_time_s(); + #info("time: %3.3f s %s", end - start, what); + ret rv; +} + #[doc = "Runs rustdoc over the given file"] fn run(source_file: str) { let default_name = source_file; astsrv::from_file(source_file) {|srv| - let doc = extract::from_srv(srv, default_name); + time("wait") {|| + astsrv::exec(srv) {|_ctxt| () } + }; + let doc = time("extract") {|| + extract::from_srv(srv, default_name) + }; run_passes(srv, doc, [ reexport_pass::mk_pass(), prune_unexported_pass::mk_pass(), diff --git a/src/rustdoc/sort_item_name_pass.rs b/src/rustdoc/sort_item_name_pass.rs index 73a5143e699..196f7badee8 100644 --- a/src/rustdoc/sort_item_name_pass.rs +++ b/src/rustdoc/sort_item_name_pass.rs @@ -3,7 +3,7 @@ export mk_pass; fn mk_pass() -> pass { - sort_pass::mk_pass { |item1, item2| + sort_pass::mk_pass("sort_item_name") { |item1, item2| str::le(item1.name(), item2.name()) } } @@ -13,7 +13,7 @@ fn test() { let source = "mod z { } fn y() { }"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = mk_pass()(srv, doc); + let doc = mk_pass().f(srv, doc); assert doc.topmod.items[0].name() == "y"; assert doc.topmod.items[1].name() == "z"; } diff --git a/src/rustdoc/sort_item_type_pass.rs b/src/rustdoc/sort_item_type_pass.rs index fde4c27a3f8..5bd0fa150e0 100644 --- a/src/rustdoc/sort_item_type_pass.rs +++ b/src/rustdoc/sort_item_type_pass.rs @@ -3,7 +3,7 @@ export mk_pass; fn mk_pass() -> pass { - sort_pass::mk_pass { |item1, item2| + sort_pass::mk_pass("sort_item_type") { |item1, item2| fn score(item: doc::itemtag) -> int { alt item { doc::consttag(_) { 0 } @@ -36,7 +36,7 @@ fn test() { type itype = int;"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = mk_pass()(srv, doc); + let doc = mk_pass().f(srv, doc); assert doc.topmod.items[0].name() == "iconst"; assert doc.topmod.items[1].name() == "itype"; assert doc.topmod.items[2].name() == "ienum"; diff --git a/src/rustdoc/sort_pass.rs b/src/rustdoc/sort_pass.rs index 0dcefe4bcbe..dbe7a7e19db 100644 --- a/src/rustdoc/sort_pass.rs +++ b/src/rustdoc/sort_pass.rs @@ -6,9 +6,12 @@ export item_lteq, mk_pass; type item_lteq = fn~(doc::itemtag, doc::itemtag) -> bool; -fn mk_pass(lteq: item_lteq) -> pass { - fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc { - run(srv, doc, lteq) +fn mk_pass(name: str, lteq: item_lteq) -> pass { + { + name: name, + f: fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc { + run(srv, doc, lteq) + } } } @@ -44,7 +47,7 @@ fn test() { let source = "mod z { mod y { } fn x() { } } mod w { }"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = mk_pass(name_lteq)(srv, doc); + let doc = mk_pass("", name_lteq).f(srv, doc); assert doc.topmod.mods()[0].name() == "w"; assert doc.topmod.mods()[1].items[0].name() == "x"; assert doc.topmod.mods()[1].items[1].name() == "y"; @@ -61,10 +64,10 @@ fn should_be_stable() { let source = "mod a { mod b { } } mod c { mod d { } }"; astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = mk_pass(always_eq)(srv, doc); + let doc = mk_pass("", always_eq).f(srv, doc); assert doc.topmod.mods()[0].items[0].name() == "b"; assert doc.topmod.mods()[1].items[0].name() == "d"; - let doc = mk_pass(always_eq)(srv, doc); + let doc = mk_pass("", always_eq).f(srv, doc); assert doc.topmod.mods()[0].items[0].name() == "b"; assert doc.topmod.mods()[1].items[0].name() == "d"; } diff --git a/src/rustdoc/trim_pass.rs b/src/rustdoc/trim_pass.rs index aabb60c396e..55d2f5eea2a 100644 --- a/src/rustdoc/trim_pass.rs +++ b/src/rustdoc/trim_pass.rs @@ -63,8 +63,8 @@ mod test { fn mk_doc(source: str) -> doc::cratedoc { astsrv::from_str(source) {|srv| let doc = extract::from_srv(srv, ""); - let doc = attr_pass::mk_pass()(srv, doc); - mk_pass()(srv, doc) + let doc = attr_pass::mk_pass().f(srv, doc); + mk_pass().f(srv, doc) } } } \ No newline at end of file diff --git a/src/rustdoc/tystr_pass.rs b/src/rustdoc/tystr_pass.rs index 5f3c1496bff..94f02e4ddb5 100644 --- a/src/rustdoc/tystr_pass.rs +++ b/src/rustdoc/tystr_pass.rs @@ -8,7 +8,10 @@ import rustc::middle::ast_map; export mk_pass; fn mk_pass() -> pass { - run + { + name: "tystr", + f: run + } } fn run( |
