@@ -27,6 +27,7 @@ use print::pp::{breaks, consistent, inconsistent, eof};
27
27
use print:: pp;
28
28
use print:: pprust;
29
29
30
+ use std:: cast;
30
31
use std:: char;
31
32
use std:: str;
32
33
use std:: io;
@@ -86,11 +87,11 @@ pub fn end(s: &mut ps) {
86
87
pp:: end ( & mut s. s ) ;
87
88
}
88
89
89
- pub fn rust_printer ( writer : @ mut io:: Writer , intr : @ident_interner ) -> ps {
90
+ pub fn rust_printer ( writer : ~ io:: Writer , intr : @ident_interner ) -> ps {
90
91
return rust_printer_annotated ( writer, intr, @no_ann:: new ( ) as @pp_ann ) ;
91
92
}
92
93
93
- pub fn rust_printer_annotated ( writer : @ mut io:: Writer ,
94
+ pub fn rust_printer_annotated ( writer : ~ io:: Writer ,
94
95
intr : @ident_interner ,
95
96
ann : @pp_ann )
96
97
-> ps {
@@ -122,7 +123,7 @@ pub fn print_crate(cm: @CodeMap,
122
123
crate : & ast:: Crate ,
123
124
filename : @str ,
124
125
input : @mut io:: Reader ,
125
- out : @ mut io:: Writer ,
126
+ out : ~ io:: Writer ,
126
127
ann : @pp_ann ,
127
128
is_expanded : bool ) {
128
129
let ( cmnts, lits) = comments:: gather_comments_and_literals (
@@ -203,26 +204,40 @@ pub fn path_to_str(p: &ast::Path, intr: @ident_interner) -> ~str {
203
204
pub fn fun_to_str ( decl : & ast:: fn_decl , purity : ast:: purity , name : ast:: Ident ,
204
205
opt_explicit_self : Option < ast:: explicit_self_ > ,
205
206
generics : & ast:: Generics , intr : @ident_interner ) -> ~str {
206
- let wr = @ mut MemWriter :: new ( ) ;
207
- let mut s = rust_printer ( wr as @ mut io:: Writer , intr) ;
207
+ let wr = ~ MemWriter :: new ( ) ;
208
+ let mut s = rust_printer ( wr as ~ io:: Writer , intr) ;
208
209
print_fn ( & mut s, decl, Some ( purity) , AbiSet :: Rust ( ) ,
209
210
name, generics, opt_explicit_self, ast:: inherited) ;
210
211
end ( & mut s) ; // Close the head box
211
212
end ( & mut s) ; // Close the outer box
212
213
eof ( & mut s. s ) ;
213
- str:: from_utf8_owned ( wr. inner_ref ( ) . to_owned ( ) )
214
+
215
+ // XXX(pcwalton): Need checked downcasts.
216
+ unsafe {
217
+ let ( _, wr) : ( uint , ~MemWriter ) = cast:: transmute ( s. s . out ) ;
218
+ let result = str:: from_utf8_owned ( wr. inner_ref ( ) . to_owned ( ) ) ;
219
+ cast:: forget ( wr) ;
220
+ result
221
+ }
214
222
}
215
223
216
224
pub fn block_to_str ( blk : & ast:: Block , intr : @ident_interner ) -> ~str {
217
- let wr = @ mut MemWriter :: new ( ) ;
218
- let mut s = rust_printer ( wr as @ mut io:: Writer , intr) ;
225
+ let wr = ~ MemWriter :: new ( ) ;
226
+ let mut s = rust_printer ( wr as ~ io:: Writer , intr) ;
219
227
// containing cbox, will be closed by print-block at }
220
228
cbox ( & mut s, indent_unit) ;
221
229
// head-ibox, will be closed by print-block after {
222
230
ibox ( & mut s, 0 u) ;
223
231
print_block ( & mut s, blk) ;
224
232
eof ( & mut s. s ) ;
225
- str:: from_utf8_owned ( wr. inner_ref ( ) . to_owned ( ) )
233
+
234
+ // XXX(pcwalton): Need checked downcasts.
235
+ unsafe {
236
+ let ( _, wr) : ( uint , ~MemWriter ) = cast:: transmute ( s. s . out ) ;
237
+ let result = str:: from_utf8_owned ( wr. inner_ref ( ) . to_owned ( ) ) ;
238
+ cast:: forget ( wr) ;
239
+ result
240
+ }
226
241
}
227
242
228
243
pub fn meta_item_to_str ( mi : & ast:: MetaItem , intr : @ident_interner ) -> ~str {
@@ -2304,11 +2319,17 @@ pub fn print_string(s: &mut ps, st: &str, style: ast::StrStyle) {
2304
2319
}
2305
2320
2306
2321
pub fn to_str < T > ( t : & T , f : |& mut ps , & T |, intr: @ident_interner ) -> ~str {
2307
- let wr = @ mut MemWriter :: new ( ) ;
2308
- let mut s = rust_printer ( wr as @ mut io:: Writer , intr) ;
2322
+ let wr = ~ MemWriter :: new ( ) ;
2323
+ let mut s = rust_printer ( wr as ~ io:: Writer , intr) ;
2309
2324
f ( & mut s, t) ;
2310
2325
eof ( & mut s. s ) ;
2311
- str:: from_utf8_owned ( wr. inner_ref ( ) . to_owned ( ) )
2326
+ // XXX(pcwalton): Need checked downcasts.
2327
+ unsafe {
2328
+ let ( _, wr) : ( uint , ~MemWriter ) = cast:: transmute ( s. s . out ) ;
2329
+ let result = str:: from_utf8_owned ( wr. inner_ref ( ) . to_owned ( ) ) ;
2330
+ cast:: forget ( wr) ;
2331
+ result
2332
+ }
2312
2333
}
2313
2334
2314
2335
pub fn next_comment ( s : & mut ps ) -> Option < comments:: cmnt > {
0 commit comments