about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-27 18:07:16 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-27 18:07:16 -0800
commit98c31aaaffcd98ab708acd095cc0202fa49ce2dd (patch)
treea2a7b18a6e47b964b30bc1ca0adddc401e5481ed
parent7e9aa6c3c2ae054e32dfcc7c5e4830ce7c4c6921 (diff)
downloadrust-98c31aaaffcd98ab708acd095cc0202fa49ce2dd.tar.gz
rust-98c31aaaffcd98ab708acd095cc0202fa49ce2dd.zip
rustdoc: Time passes
-rw-r--r--src/rustdoc/attr_pass.rs9
-rw-r--r--src/rustdoc/desc_pass.rs11
-rw-r--r--src/rustdoc/desc_to_brief_pass.rs7
-rw-r--r--src/rustdoc/markdown_pass.rs21
-rw-r--r--src/rustdoc/path_pass.rs7
-rw-r--r--src/rustdoc/prune_undoc_details_pass.rs11
-rw-r--r--src/rustdoc/prune_undoc_items_pass.rs7
-rw-r--r--src/rustdoc/prune_unexported_pass.rs7
-rw-r--r--src/rustdoc/reexport_pass.rs13
-rwxr-xr-xsrc/rustdoc/rustdoc.rs35
-rw-r--r--src/rustdoc/sort_item_name_pass.rs4
-rw-r--r--src/rustdoc/sort_item_type_pass.rs4
-rw-r--r--src/rustdoc/sort_pass.rs15
-rw-r--r--src/rustdoc/trim_pass.rs4
-rw-r--r--src/rustdoc/tystr_pass.rs5
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(