summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-23 23:40:30 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-24 00:38:35 -0800
commitf9a6b3731fc44ba7b6e612ca80353aba592ea769 (patch)
tree574f6e53619294b0cf4c50780235ecf1da1edcbf /src
parentd66ac392feb7b7a26ae98823e7bf9d47cef533fe (diff)
downloadrust-f9a6b3731fc44ba7b6e612ca80353aba592ea769.tar.gz
rust-f9a6b3731fc44ba7b6e612ca80353aba592ea769.zip
rustdoc: Add fold_const and fold_constlist to fold
Diffstat (limited to 'src')
-rw-r--r--src/rustdoc/fold.rs73
1 files changed, 56 insertions, 17 deletions
diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs
index 0a778ba3d54..0aea4744ba4 100644
--- a/src/rustdoc/fold.rs
+++ b/src/rustdoc/fold.rs
@@ -1,3 +1,6 @@
+// FIXME: Random import to solve the mystery resolve bug
+import std;
+
 export fold;
 export fold_crate, fold_mod, fold_fn, fold_modlist, fold_fnlist;
 export default_seq_fold;
@@ -11,16 +14,23 @@ enum fold<T> = t<T>;
 type fold_crate<T> = fn~(fold: fold<T>, doc: doc::cratedoc) -> doc::cratedoc;
 type fold_mod<T> = fn~(fold: fold<T>, doc: doc::moddoc) -> doc::moddoc;
 type fold_fn<T> = fn~(fold: fold<T>, doc: doc::fndoc) -> doc::fndoc;
-type fold_modlist<T> = fn~(fold: fold<T>,list: doc::modlist) -> doc::modlist;
-type fold_fnlist<T> = fn~(fold: fold<T>,list: doc::fnlist) -> doc::fnlist;
+type fold_const<T> = fn~(fold: fold<T>, doc: doc::constdoc) -> doc::constdoc;
+type fold_modlist<T> = fn~(fold: fold<T>, list: doc::modlist) -> doc::modlist;
+type fold_fnlist<T> = fn~(fold: fold<T>, list: doc::fnlist) -> doc::fnlist;
+type fold_constlist<T> = fn~(
+    fold: fold<T>,
+    list: doc::constlist
+) -> doc::constlist;
 
 type t<T> = {
     ctxt: T,
     fold_crate: fold_crate<T>,
     fold_mod: fold_mod<T>,
     fold_fn: fold_fn<T>,
+    fold_const: fold_const<T>,
     fold_modlist: fold_modlist<T>,
-    fold_fnlist: fold_fnlist<T>
+    fold_fnlist: fold_fnlist<T>,
+    fold_constlist: fold_constlist<T>
 };
 
 
@@ -31,16 +41,20 @@ fn mk_fold<T:copy>(
     fold_crate: fold_crate<T>,
     fold_mod: fold_mod<T>,
     fold_fn: fold_fn<T>,
+    fold_const: fold_const<T>,
     fold_modlist: fold_modlist<T>,
-    fold_fnlist: fold_fnlist<T>
+    fold_fnlist: fold_fnlist<T>,
+    fold_constlist: fold_constlist<T>
 ) -> fold<T> {
     fold({
         ctxt: ctxt,
         fold_crate: fold_crate,
         fold_mod: fold_mod,
         fold_fn: fold_fn,
+        fold_const: fold_const,
         fold_modlist: fold_modlist,
-        fold_fnlist: fold_fnlist
+        fold_fnlist: fold_fnlist,
+        fold_constlist: fold_constlist
     })
 }
 
@@ -50,8 +64,10 @@ fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> {
         {|f, d| default_seq_fold_crate(f, d)},
         {|f, d| default_seq_fold_mod(f, d)},
         {|f, d| default_seq_fold_fn(f, d)},
+        {|f, d| default_seq_fold_const(f, d)},
         {|f, d| default_seq_fold_modlist(f, d)},
-        {|f, d| default_seq_fold_fnlist(f, d)}
+        {|f, d| default_seq_fold_fnlist(f, d)},
+        {|f, d| default_seq_fold_constlist(f, d)}
     )
 }
 
@@ -82,6 +98,13 @@ fn default_seq_fold_fn<T>(
     doc
 }
 
+fn default_seq_fold_const<T>(
+    _fold: fold<T>,
+    doc: doc::constdoc
+) -> doc::constdoc {
+    doc
+}
+
 fn default_seq_fold_modlist<T>(
     fold: fold<T>,
     list: doc::modlist
@@ -100,15 +123,31 @@ fn default_seq_fold_fnlist<T>(
     })
 }
 
-#[cfg(test)]
-mod tests {
-    #[test]
-    fn default_fold_should_produce_same_doc() {
-        let source = "mod a { fn b() { } mod c { fn d() { } } }";
-        let ast = parse::from_str(source);
-        let doc = extract::extract(ast, "");
-        let fld = default_seq_fold(());
-        let folded = fld.fold_crate(fld, doc);
-        assert doc == folded;
-    }
+fn default_seq_fold_constlist<T>(
+    fold: fold<T>,
+    list: doc::constlist
+) -> doc::constlist {
+    doc::constlist(vec::map(*list) {|doc|
+        fold.fold_const(fold, doc)
+    })
+}
+
+#[test]
+fn default_fold_should_produce_same_doc() {
+    let source = "mod a { fn b() { } mod c { fn d() { } } }";
+    let ast = parse::from_str(source);
+    let doc = extract::extract(ast, "");
+    let fld = default_seq_fold(());
+    let folded = fld.fold_crate(fld, doc);
+    assert doc == folded;
+}
+
+#[test]
+fn default_fold_should_produce_same_consts() {
+    let source = "const a: int = 0;";
+    let ast = parse::from_str(source);
+    let doc = extract::extract(ast, "");
+    let fld = default_seq_fold(());
+    let folded = fld.fold_crate(fld, doc);
+    assert doc == folded;
 }
\ No newline at end of file