1
+ // FIXME: Random import to solve the mystery resolve bug
2
+ import std;
3
+
1
4
export fold;
2
5
export fold_crate, fold_mod, fold_fn, fold_modlist, fold_fnlist;
3
6
export default_seq_fold;
@@ -11,16 +14,23 @@ enum fold<T> = t<T>;
11
14
type fold_crate < T > = fn ~( fold : fold < T > , doc : doc:: cratedoc ) -> doc:: cratedoc ;
12
15
type fold_mod < T > = fn ~( fold : fold < T > , doc : doc:: moddoc ) -> doc:: moddoc ;
13
16
type fold_fn < T > = fn ~( fold : fold < T > , doc : doc:: fndoc ) -> doc:: fndoc ;
14
- type fold_modlist < T > = fn ~( fold : fold < T > , list : doc:: modlist ) -> doc:: modlist ;
15
- type fold_fnlist < T > = fn ~( fold : fold < T > , list : doc:: fnlist ) -> doc:: fnlist ;
17
+ type fold_const < T > = fn ~( fold : fold < T > , doc : doc:: constdoc ) -> doc:: constdoc ;
18
+ type fold_modlist < T > = fn ~( fold : fold < T > , list : doc:: modlist ) -> doc:: modlist ;
19
+ type fold_fnlist < T > = fn ~( fold : fold < T > , list : doc:: fnlist ) -> doc:: fnlist ;
20
+ type fold_constlist < T > = fn ~(
21
+ fold : fold < T > ,
22
+ list : doc:: constlist
23
+ ) -> doc:: constlist ;
16
24
17
25
type t < T > = {
18
26
ctxt : T ,
19
27
fold_crate : fold_crate < T > ,
20
28
fold_mod : fold_mod < T > ,
21
29
fold_fn : fold_fn < T > ,
30
+ fold_const : fold_const < T > ,
22
31
fold_modlist : fold_modlist < T > ,
23
- fold_fnlist : fold_fnlist < T >
32
+ fold_fnlist : fold_fnlist < T > ,
33
+ fold_constlist : fold_constlist < T >
24
34
} ;
25
35
26
36
@@ -31,16 +41,20 @@ fn mk_fold<T:copy>(
31
41
fold_crate : fold_crate < T > ,
32
42
fold_mod : fold_mod < T > ,
33
43
fold_fn : fold_fn < T > ,
44
+ fold_const : fold_const < T > ,
34
45
fold_modlist : fold_modlist < T > ,
35
- fold_fnlist : fold_fnlist < T >
46
+ fold_fnlist : fold_fnlist < T > ,
47
+ fold_constlist : fold_constlist < T >
36
48
) -> fold < T > {
37
49
fold ( {
38
50
ctxt: ctxt,
39
51
fold_crate: fold_crate,
40
52
fold_mod: fold_mod,
41
53
fold_fn: fold_fn,
54
+ fold_const: fold_const,
42
55
fold_modlist: fold_modlist,
43
- fold_fnlist: fold_fnlist
56
+ fold_fnlist: fold_fnlist,
57
+ fold_constlist: fold_constlist
44
58
} )
45
59
}
46
60
@@ -50,8 +64,10 @@ fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> {
50
64
{ |f, d| default_seq_fold_crate ( f, d) } ,
51
65
{ |f, d| default_seq_fold_mod ( f, d) } ,
52
66
{ |f, d| default_seq_fold_fn ( f, d) } ,
67
+ { |f, d| default_seq_fold_const ( f, d) } ,
53
68
{ |f, d| default_seq_fold_modlist ( f, d) } ,
54
- { |f, d| default_seq_fold_fnlist ( f, d) }
69
+ { |f, d| default_seq_fold_fnlist ( f, d) } ,
70
+ { |f, d| default_seq_fold_constlist ( f, d) }
55
71
)
56
72
}
57
73
@@ -82,6 +98,13 @@ fn default_seq_fold_fn<T>(
82
98
doc
83
99
}
84
100
101
+ fn default_seq_fold_const < T > (
102
+ _fold : fold < T > ,
103
+ doc : doc:: constdoc
104
+ ) -> doc:: constdoc {
105
+ doc
106
+ }
107
+
85
108
fn default_seq_fold_modlist < T > (
86
109
fold : fold < T > ,
87
110
list : doc:: modlist
@@ -100,15 +123,31 @@ fn default_seq_fold_fnlist<T>(
100
123
} )
101
124
}
102
125
103
- #[ cfg( test) ]
104
- mod tests {
105
- #[ test]
106
- fn default_fold_should_produce_same_doc ( ) {
107
- let source = "mod a { fn b() { } mod c { fn d() { } } }" ;
108
- let ast = parse:: from_str ( source) ;
109
- let doc = extract:: extract ( ast, "" ) ;
110
- let fld = default_seq_fold ( ( ) ) ;
111
- let folded = fld. fold_crate ( fld, doc) ;
112
- assert doc == folded;
113
- }
126
+ fn default_seq_fold_constlist < T > (
127
+ fold : fold < T > ,
128
+ list : doc:: constlist
129
+ ) -> doc:: constlist {
130
+ doc:: constlist ( vec:: map ( * list) { |doc|
131
+ fold. fold_const ( fold, doc)
132
+ } )
133
+ }
134
+
135
+ #[ test]
136
+ fn default_fold_should_produce_same_doc ( ) {
137
+ let source = "mod a { fn b() { } mod c { fn d() { } } }" ;
138
+ let ast = parse:: from_str ( source) ;
139
+ let doc = extract:: extract ( ast, "" ) ;
140
+ let fld = default_seq_fold ( ( ) ) ;
141
+ let folded = fld. fold_crate ( fld, doc) ;
142
+ assert doc == folded;
143
+ }
144
+
145
+ #[ test]
146
+ fn default_fold_should_produce_same_consts ( ) {
147
+ let source = "const a: int = 0;" ;
148
+ let ast = parse:: from_str ( source) ;
149
+ let doc = extract:: extract ( ast, "" ) ;
150
+ let fld = default_seq_fold ( ( ) ) ;
151
+ let folded = fld. fold_crate ( fld, doc) ;
152
+ assert doc == folded;
114
153
}
0 commit comments