15
15
16
16
use std:: cell:: RefCell ;
17
17
use std:: collections:: HashMap ;
18
- use std:: io:: MemWriter ;
19
18
20
19
use middle:: subst;
21
20
use middle:: subst:: VecPerParamSpace ;
@@ -28,6 +27,8 @@ use syntax::ast::*;
28
27
use syntax:: diagnostic:: SpanHandler ;
29
28
use syntax:: parse:: token;
30
29
30
+ use util:: io:: SeekableMemWriter ;
31
+
31
32
macro_rules! mywrite( ( $( $arg: tt) * ) => ( { write!( $( $arg) * ) ; } ) )
32
33
33
34
pub struct ctxt < ' a > {
@@ -48,7 +49,7 @@ pub struct ty_abbrev {
48
49
49
50
pub type abbrev_map = RefCell < HashMap < ty:: t , ty_abbrev > > ;
50
51
51
- pub fn enc_ty ( w : & mut MemWriter , cx : & ctxt , t : ty:: t ) {
52
+ pub fn enc_ty ( w : & mut SeekableMemWriter , cx : & ctxt , t : ty:: t ) {
52
53
match cx. abbrevs . borrow_mut ( ) . find ( & t) {
53
54
Some ( a) => { w. write ( a. s . as_bytes ( ) ) ; return ; }
54
55
None => { }
@@ -72,19 +73,19 @@ pub fn enc_ty(w: &mut MemWriter, cx: &ctxt, t: ty::t) {
72
73
}
73
74
}
74
75
75
- fn enc_mutability ( w : & mut MemWriter , mt : ast:: Mutability ) {
76
+ fn enc_mutability ( w : & mut SeekableMemWriter , mt : ast:: Mutability ) {
76
77
match mt {
77
78
MutImmutable => ( ) ,
78
79
MutMutable => mywrite ! ( w, "m" ) ,
79
80
}
80
81
}
81
82
82
- fn enc_mt ( w : & mut MemWriter , cx : & ctxt , mt : ty:: mt ) {
83
+ fn enc_mt ( w : & mut SeekableMemWriter , cx : & ctxt , mt : ty:: mt ) {
83
84
enc_mutability ( w, mt. mutbl ) ;
84
85
enc_ty ( w, cx, mt. ty ) ;
85
86
}
86
87
87
- fn enc_opt < T > ( w : & mut MemWriter , t : Option < T > , enc_f : |& mut MemWriter , T |) {
88
+ fn enc_opt < T > ( w : & mut SeekableMemWriter , t : Option < T > , enc_f : |& mut SeekableMemWriter , T |) {
88
89
match t {
89
90
None => mywrite ! ( w, "n" ) ,
90
91
Some ( v) => {
@@ -94,10 +95,10 @@ fn enc_opt<T>(w: &mut MemWriter, t: Option<T>, enc_f: |&mut MemWriter, T|) {
94
95
}
95
96
}
96
97
97
- fn enc_vec_per_param_space < T > ( w : & mut MemWriter ,
98
+ fn enc_vec_per_param_space < T > ( w : & mut SeekableMemWriter ,
98
99
cx : & ctxt ,
99
100
v : & VecPerParamSpace < T > ,
100
- op : |& mut MemWriter , & ctxt , & T |) {
101
+ op : |& mut SeekableMemWriter , & ctxt , & T |) {
101
102
for & space in subst:: ParamSpace :: all ( ) . iter ( ) {
102
103
mywrite ! ( w, "[" ) ;
103
104
for t in v. get_slice ( space) . iter ( ) {
@@ -107,13 +108,13 @@ fn enc_vec_per_param_space<T>(w: &mut MemWriter,
107
108
}
108
109
}
109
110
110
- pub fn enc_substs ( w : & mut MemWriter , cx : & ctxt , substs : & subst:: Substs ) {
111
+ pub fn enc_substs ( w : & mut SeekableMemWriter , cx : & ctxt , substs : & subst:: Substs ) {
111
112
enc_region_substs ( w, cx, & substs. regions ) ;
112
113
enc_vec_per_param_space ( w, cx, & substs. types ,
113
114
|w, cx, & ty| enc_ty ( w, cx, ty) ) ;
114
115
}
115
116
116
- fn enc_region_substs ( w : & mut MemWriter , cx : & ctxt , substs : & subst:: RegionSubsts ) {
117
+ fn enc_region_substs ( w : & mut SeekableMemWriter , cx : & ctxt , substs : & subst:: RegionSubsts ) {
117
118
match * substs {
118
119
subst:: ErasedRegions => {
119
120
mywrite ! ( w, "e" ) ;
@@ -126,7 +127,7 @@ fn enc_region_substs(w: &mut MemWriter, cx: &ctxt, substs: &subst::RegionSubsts)
126
127
}
127
128
}
128
129
129
- fn enc_region ( w : & mut MemWriter , cx : & ctxt , r : ty:: Region ) {
130
+ fn enc_region ( w : & mut SeekableMemWriter , cx : & ctxt , r : ty:: Region ) {
130
131
match r {
131
132
ty:: ReLateBound ( id, br) => {
132
133
mywrite ! ( w, "b[{}|" , id) ;
@@ -161,7 +162,7 @@ fn enc_region(w: &mut MemWriter, cx: &ctxt, r: ty::Region) {
161
162
}
162
163
}
163
164
164
- fn enc_bound_region ( w : & mut MemWriter , cx : & ctxt , br : ty:: BoundRegion ) {
165
+ fn enc_bound_region ( w : & mut SeekableMemWriter , cx : & ctxt , br : ty:: BoundRegion ) {
165
166
match br {
166
167
ty:: BrAnon ( idx) => {
167
168
mywrite ! ( w, "a{}|" , idx) ;
@@ -177,12 +178,12 @@ fn enc_bound_region(w: &mut MemWriter, cx: &ctxt, br: ty::BoundRegion) {
177
178
}
178
179
}
179
180
180
- pub fn enc_trait_ref ( w : & mut MemWriter , cx : & ctxt , s : & ty:: TraitRef ) {
181
+ pub fn enc_trait_ref ( w : & mut SeekableMemWriter , cx : & ctxt , s : & ty:: TraitRef ) {
181
182
mywrite ! ( w, "{}|" , ( cx. ds) ( s. def_id) ) ;
182
183
enc_substs ( w, cx, & s. substs ) ;
183
184
}
184
185
185
- pub fn enc_trait_store ( w : & mut MemWriter , cx : & ctxt , s : ty:: TraitStore ) {
186
+ pub fn enc_trait_store ( w : & mut SeekableMemWriter , cx : & ctxt , s : ty:: TraitStore ) {
186
187
match s {
187
188
ty:: UniqTraitStore => mywrite ! ( w, "~" ) ,
188
189
ty:: RegionTraitStore ( re, m) => {
@@ -193,7 +194,7 @@ pub fn enc_trait_store(w: &mut MemWriter, cx: &ctxt, s: ty::TraitStore) {
193
194
}
194
195
}
195
196
196
- fn enc_sty ( w : & mut MemWriter , cx : & ctxt , st : & ty:: sty ) {
197
+ fn enc_sty ( w : & mut SeekableMemWriter , cx : & ctxt , st : & ty:: sty ) {
197
198
match * st {
198
199
ty:: ty_nil => mywrite ! ( w, "n" ) ,
199
200
ty:: ty_bot => mywrite ! ( w, "z" ) ,
@@ -293,33 +294,33 @@ fn enc_sty(w: &mut MemWriter, cx: &ctxt, st: &ty::sty) {
293
294
}
294
295
}
295
296
296
- fn enc_fn_style ( w : & mut MemWriter , p : FnStyle ) {
297
+ fn enc_fn_style ( w : & mut SeekableMemWriter , p : FnStyle ) {
297
298
match p {
298
299
NormalFn => mywrite ! ( w, "n" ) ,
299
300
UnsafeFn => mywrite ! ( w, "u" ) ,
300
301
}
301
302
}
302
303
303
- fn enc_abi ( w : & mut MemWriter , abi : Abi ) {
304
+ fn enc_abi ( w : & mut SeekableMemWriter , abi : Abi ) {
304
305
mywrite ! ( w, "[" ) ;
305
306
mywrite ! ( w, "{}" , abi. name( ) ) ;
306
307
mywrite ! ( w, "]" )
307
308
}
308
309
309
- fn enc_onceness ( w : & mut MemWriter , o : Onceness ) {
310
+ fn enc_onceness ( w : & mut SeekableMemWriter , o : Onceness ) {
310
311
match o {
311
312
Once => mywrite ! ( w, "o" ) ,
312
313
Many => mywrite ! ( w, "m" )
313
314
}
314
315
}
315
316
316
- pub fn enc_bare_fn_ty ( w : & mut MemWriter , cx : & ctxt , ft : & ty:: BareFnTy ) {
317
+ pub fn enc_bare_fn_ty ( w : & mut SeekableMemWriter , cx : & ctxt , ft : & ty:: BareFnTy ) {
317
318
enc_fn_style ( w, ft. fn_style ) ;
318
319
enc_abi ( w, ft. abi ) ;
319
320
enc_fn_sig ( w, cx, & ft. sig ) ;
320
321
}
321
322
322
- pub fn enc_closure_ty ( w : & mut MemWriter , cx : & ctxt , ft : & ty:: ClosureTy ) {
323
+ pub fn enc_closure_ty ( w : & mut SeekableMemWriter , cx : & ctxt , ft : & ty:: ClosureTy ) {
323
324
enc_fn_style ( w, ft. fn_style ) ;
324
325
enc_onceness ( w, ft. onceness ) ;
325
326
enc_trait_store ( w, cx, ft. store ) ;
@@ -330,7 +331,7 @@ pub fn enc_closure_ty(w: &mut MemWriter, cx: &ctxt, ft: &ty::ClosureTy) {
330
331
enc_abi ( w, ft. abi ) ;
331
332
}
332
333
333
- fn enc_fn_sig ( w : & mut MemWriter , cx : & ctxt , fsig : & ty:: FnSig ) {
334
+ fn enc_fn_sig ( w : & mut SeekableMemWriter , cx : & ctxt , fsig : & ty:: FnSig ) {
334
335
mywrite ! ( w, "[{}|" , fsig. binder_id) ;
335
336
for ty in fsig. inputs . iter ( ) {
336
337
enc_ty ( w, cx, * ty) ;
@@ -344,7 +345,7 @@ fn enc_fn_sig(w: &mut MemWriter, cx: &ctxt, fsig: &ty::FnSig) {
344
345
enc_ty ( w, cx, fsig. output ) ;
345
346
}
346
347
347
- fn enc_bounds ( w : & mut MemWriter , cx : & ctxt , bs : & ty:: ParamBounds ) {
348
+ fn enc_bounds ( w : & mut SeekableMemWriter , cx : & ctxt , bs : & ty:: ParamBounds ) {
348
349
for bound in bs. builtin_bounds . iter ( ) {
349
350
match bound {
350
351
ty:: BoundSend => mywrite ! ( w, "S" ) ,
@@ -363,7 +364,7 @@ fn enc_bounds(w: &mut MemWriter, cx: &ctxt, bs: &ty::ParamBounds) {
363
364
mywrite ! ( w, "." ) ;
364
365
}
365
366
366
- pub fn enc_type_param_def ( w : & mut MemWriter , cx : & ctxt , v : & ty:: TypeParameterDef ) {
367
+ pub fn enc_type_param_def ( w : & mut SeekableMemWriter , cx : & ctxt , v : & ty:: TypeParameterDef ) {
367
368
mywrite ! ( w, "{}:{}|{}|{}|" ,
368
369
token:: get_ident( v. ident) , ( cx. ds) ( v. def_id) ,
369
370
v. space. to_uint( ) , v. index) ;
0 commit comments