Skip to content

Commit a5f0982

Browse files
committed
---
yaml --- r: 7339 b: refs/heads/master c: 4978146 h: refs/heads/master i: 7337: 9556283 7335: 71c96d6 v: v3
1 parent 3b7e214 commit a5f0982

File tree

2 files changed

+61
-37
lines changed

2 files changed

+61
-37
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 5457b4d3fbdcedef80176eeb44d2acd575bf5d3f
2+
refs/heads/master: 497814642f2ce491baa79f310932f358757ad2fc

trunk/src/rustdoc/fold.rs

Lines changed: 60 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,57 @@
11
export fold;
22
export fold_crate, fold_mod, fold_fn, fold_modlist, fold_fnlist;
33
export default_seq_fold;
4+
export default_seq_fold_fn;
45

5-
tag fold = t;
6+
tag fold<T> = t<T>;
67

7-
type fold_crate = fn~(fold: fold, doc: doc::cratedoc) -> doc::cratedoc;
8-
type fold_mod = fn~(fold: fold, doc: doc::moddoc) -> doc::moddoc;
9-
type fold_fn = fn~(fold: fold, doc: doc::fndoc) -> doc::fndoc;
10-
type fold_modlist = fn~(fold: fold, list: doc::modlist) -> doc::modlist;
11-
type fold_fnlist = fn~(fold: fold, list: doc::fnlist) -> doc::fnlist;
8+
type fold_crate<T> = fn~(
9+
fold: fold<T>,
10+
doc: doc::cratedoc
11+
) -> doc::cratedoc;
12+
13+
type fold_mod<T> = fn~(
14+
fold: fold<T>,
15+
doc: doc::moddoc
16+
) -> doc::moddoc;
17+
18+
type fold_fn<T> = fn~(
19+
fold: fold<T>,
20+
doc: doc::fndoc
21+
) -> doc::fndoc;
22+
23+
type fold_modlist<T> = fn~(
24+
fold: fold<T>,
25+
list: doc::modlist
26+
) -> doc::modlist;
27+
28+
type fold_fnlist<T> = fn~(
29+
fold: fold<T>,
30+
list: doc::fnlist
31+
) -> doc::fnlist;
1232

13-
type t = {
14-
fold_crate: fold_crate,
15-
fold_mod: fold_mod,
16-
fold_fn: fold_fn,
17-
fold_modlist: fold_modlist,
18-
fold_fnlist: fold_fnlist
33+
type t<T> = {
34+
ctxt: T,
35+
fold_crate: fold_crate<T>,
36+
fold_mod: fold_mod<T>,
37+
fold_fn: fold_fn<T>,
38+
fold_modlist: fold_modlist<T>,
39+
fold_fnlist: fold_fnlist<T>
1940
};
2041

2142

2243
// This exists because fn types don't infer correctly as record
2344
// initializers, but they do as function arguments
24-
fn mk_fold(
25-
fold_crate: fold_crate,
26-
fold_mod: fold_mod,
27-
fold_fn: fold_fn,
28-
fold_modlist: fold_modlist,
29-
fold_fnlist: fold_fnlist
30-
) -> fold {
45+
fn mk_fold<T:copy>(
46+
ctxt: T,
47+
fold_crate: fold_crate<T>,
48+
fold_mod: fold_mod<T>,
49+
fold_fn: fold_fn<T>,
50+
fold_modlist: fold_modlist<T>,
51+
fold_fnlist: fold_fnlist<T>
52+
) -> fold<T> {
3153
fold({
54+
ctxt: ctxt,
3255
fold_crate: fold_crate,
3356
fold_mod: fold_mod,
3457
fold_fn: fold_fn,
@@ -37,27 +60,28 @@ fn mk_fold(
3760
})
3861
}
3962

40-
fn default_seq_fold() -> fold {
63+
fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> {
4164
mk_fold(
42-
default_seq_fold_crate,
43-
default_seq_fold_mod,
44-
default_seq_fold_fn,
45-
default_seq_fold_modlist,
46-
default_seq_fold_fnlist
65+
ctxt,
66+
{|f, d| default_seq_fold_crate(f, d)},
67+
{|f, d| default_seq_fold_mod(f, d)},
68+
{|f, d| default_seq_fold_fn(f, d)},
69+
{|f, d| default_seq_fold_modlist(f, d)},
70+
{|f, d| default_seq_fold_fnlist(f, d)}
4771
)
4872
}
4973

50-
fn default_seq_fold_crate(
51-
fold: fold,
74+
fn default_seq_fold_crate<T>(
75+
fold: fold<T>,
5276
doc: doc::cratedoc
5377
) -> doc::cratedoc {
5478
~{
5579
topmod: fold.fold_mod(fold, doc.topmod)
5680
}
5781
}
5882

59-
fn default_seq_fold_mod(
60-
fold: fold,
83+
fn default_seq_fold_mod<T>(
84+
fold: fold<T>,
6185
doc: doc::moddoc
6286
) -> doc::moddoc {
6387
~{
@@ -67,24 +91,24 @@ fn default_seq_fold_mod(
6791
}
6892
}
6993

70-
fn default_seq_fold_fn(
71-
_fold: fold,
94+
fn default_seq_fold_fn<T>(
95+
_fold: fold<T>,
7296
doc: doc::fndoc
7397
) -> doc::fndoc {
7498
doc
7599
}
76100

77-
fn default_seq_fold_modlist(
78-
fold: fold,
101+
fn default_seq_fold_modlist<T>(
102+
fold: fold<T>,
79103
list: doc::modlist
80104
) -> doc::modlist {
81105
doc::modlist(vec::map(*list) {|doc|
82106
fold.fold_mod(fold, doc)
83107
})
84108
}
85109

86-
fn default_seq_fold_fnlist(
87-
fold: fold,
110+
fn default_seq_fold_fnlist<T>(
111+
fold: fold<T>,
88112
list: doc::fnlist
89113
) -> doc::fnlist {
90114
doc::fnlist(vec::map(*list) {|doc|
@@ -99,7 +123,7 @@ mod tests {
99123
let source = "mod a { fn b() { } mod c { fn d() { } } }";
100124
let ast = parse::from_str(source);
101125
let doc = extract::extract(ast, "");
102-
let fld = default_seq_fold();
126+
let fld = default_seq_fold(());
103127
let folded = fld.fold_crate(fld, doc);
104128
assert doc == folded;
105129
}

0 commit comments

Comments
 (0)