@@ -178,7 +178,7 @@ impl<'self> ReprVisitor<'self> {
178
178
pub fn write_escaped_slice ( & mut self , slice : & str ) {
179
179
self . writer . write ( [ '"' as u8 ] ) ;
180
180
for ch in slice. iter ( ) {
181
- self . write_escaped_char ( ch) ;
181
+ self . write_escaped_char ( ch, true ) ;
182
182
}
183
183
self . writer . write ( [ '"' as u8 ] ) ;
184
184
}
@@ -230,14 +230,26 @@ impl<'self> ReprVisitor<'self> {
230
230
v. fill , inner)
231
231
}
232
232
233
- fn write_escaped_char ( & mut self , ch : char ) {
233
+ fn write_escaped_char ( & mut self , ch : char , is_str : bool ) {
234
234
match ch {
235
235
'\t' => self . writer . write ( "\\ t" . as_bytes ( ) ) ,
236
236
'\r' => self . writer . write ( "\\ r" . as_bytes ( ) ) ,
237
237
'\n' => self . writer . write ( "\\ n" . as_bytes ( ) ) ,
238
238
'\\' => self . writer . write ( "\\ \\ " . as_bytes ( ) ) ,
239
- '\'' => self . writer . write ( "\\ '" . as_bytes ( ) ) ,
240
- '"' => self . writer . write ( "\\ \" " . as_bytes ( ) ) ,
239
+ '\'' => {
240
+ if is_str {
241
+ self . writer . write ( "'" . as_bytes ( ) )
242
+ } else {
243
+ self . writer . write ( "\\ '" . as_bytes ( ) )
244
+ }
245
+ }
246
+ '"' => {
247
+ if is_str {
248
+ self . writer . write ( "\\ \" " . as_bytes ( ) )
249
+ } else {
250
+ self . writer . write ( "\" " . as_bytes ( ) )
251
+ }
252
+ }
241
253
'\x20' ..'\x7e' => self . writer . write ( [ ch as u8 ] ) ,
242
254
_ => {
243
255
do char:: escape_unicode ( ch) |c| {
@@ -274,7 +286,7 @@ impl<'self> TyVisitor for ReprVisitor<'self> {
274
286
fn visit_char ( & mut self ) -> bool {
275
287
do self . get :: < char > |this, & ch| {
276
288
this. writer . write ( [ '\'' as u8 ] ) ;
277
- this. write_escaped_char ( ch) ;
289
+ this. write_escaped_char ( ch, false ) ;
278
290
this. writer . write ( [ '\'' as u8 ] ) ;
279
291
}
280
292
}
@@ -684,6 +696,11 @@ fn test_repr() {
684
696
exact_test ( & ( 10u64 , ~"hello") ,
685
697
"(10u64, ~\" hello\" )" ) ;
686
698
699
+ exact_test ( & '\'' , "'\\ ''" ) ;
700
+ exact_test ( & '"' , "'\" '" ) ;
701
+ exact_test ( & ( "'" ) , "\" '\" " ) ;
702
+ exact_test ( & ( "\" " ) , "\" \\ \" \" " ) ;
703
+
687
704
exact_test ( & println, "fn(&str)" ) ;
688
705
exact_test ( & swap :: < int > , "fn(&mut int, &mut int)" ) ;
689
706
exact_test ( & is_alphabetic, "fn(char) -> bool" ) ;
0 commit comments