about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-09-07 14:52:31 -0400
committerDaniel Micay <danielmicay@gmail.com>2013-09-07 15:31:48 -0400
commitf87578d9fbf37f76fc1ccd3eb92ef24f8b2a0b31 (patch)
tree5bb7fd6fad7367f3993668d5b10c70580567c643 /src/libstd
parentaa1d4ef55a1f544c245f0ef163a3292dbbb9393a (diff)
downloadrust-f87578d9fbf37f76fc1ccd3eb92ef24f8b2a0b31.tar.gz
rust-f87578d9fbf37f76fc1ccd3eb92ef24f8b2a0b31.zip
fix repr of strings/chars with quotes
Closes #8743
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/repr.rs27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs
index c03d7bdf6a7..9873317738d 100644
--- a/src/libstd/repr.rs
+++ b/src/libstd/repr.rs
@@ -178,7 +178,7 @@ impl<'self> ReprVisitor<'self> {
     pub fn write_escaped_slice(&mut self, slice: &str) {
         self.writer.write(['"' as u8]);
         for ch in slice.iter() {
-            self.write_escaped_char(ch);
+            self.write_escaped_char(ch, true);
         }
         self.writer.write(['"' as u8]);
     }
@@ -230,14 +230,26 @@ impl<'self> ReprVisitor<'self> {
                              v.fill, inner)
     }
 
-    fn write_escaped_char(&mut self, ch: char) {
+    fn write_escaped_char(&mut self, ch: char, is_str: bool) {
         match ch {
             '\t' => self.writer.write("\\t".as_bytes()),
             '\r' => self.writer.write("\\r".as_bytes()),
             '\n' => self.writer.write("\\n".as_bytes()),
             '\\' => self.writer.write("\\\\".as_bytes()),
-            '\'' => self.writer.write("\\'".as_bytes()),
-            '"' => self.writer.write("\\\"".as_bytes()),
+            '\'' => {
+                if is_str {
+                    self.writer.write("'".as_bytes())
+                } else {
+                    self.writer.write("\\'".as_bytes())
+                }
+            }
+            '"' => {
+                if is_str {
+                    self.writer.write("\\\"".as_bytes())
+                } else {
+                    self.writer.write("\"".as_bytes())
+                }
+            }
             '\x20'..'\x7e' => self.writer.write([ch as u8]),
             _ => {
                 do char::escape_unicode(ch) |c| {
@@ -274,7 +286,7 @@ impl<'self> TyVisitor for ReprVisitor<'self> {
     fn visit_char(&mut self) -> bool {
         do self.get::<char> |this, &ch| {
             this.writer.write(['\'' as u8]);
-            this.write_escaped_char(ch);
+            this.write_escaped_char(ch, false);
             this.writer.write(['\'' as u8]);
         }
     }
@@ -684,6 +696,11 @@ fn test_repr() {
     exact_test(&(10u64, ~"hello"),
                "(10u64, ~\"hello\")");
 
+    exact_test(&'\'', "'\\''");
+    exact_test(&'"', "'\"'");
+    exact_test(&("'"), "\"'\"");
+    exact_test(&("\""), "\"\\\"\"");
+
     exact_test(&println, "fn(&str)");
     exact_test(&swap::<int>, "fn(&mut int, &mut int)");
     exact_test(&is_alphabetic, "fn(char) -> bool");