about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2012-05-31 15:31:13 -0700
committerGraydon Hoare <graydon@mozilla.com>2012-05-31 15:32:29 -0700
commit57f399bd638c211005e8565609e928db33ebf864 (patch)
tree05d9289af9058f1509f976c1c73e722ab87cec1b /src/libsyntax/parse
parentc2ce2741a773b94d3a8f7293cb598322bc61f89d (diff)
downloadrust-57f399bd638c211005e8565609e928db33ebf864.tar.gz
rust-57f399bd638c211005e8565609e928db33ebf864.zip
Implement 2 kinds of char / str escaping. Use in rustc. Close #2306.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/lexer.rs1
-rw-r--r--src/libsyntax/parse/token.rs13
2 files changed, 6 insertions, 8 deletions
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs
index 63dc85e865d..bef5f6d1fd8 100644
--- a/src/libsyntax/parse/lexer.rs
+++ b/src/libsyntax/parse/lexer.rs
@@ -434,6 +434,7 @@ fn next_token_inner(rdr: reader) -> token::token {
               't' { c2 = '\t'; }
               '\\' { c2 = '\\'; }
               '\'' { c2 = '\''; }
+              '"' { c2 = '"'; }
               'x' { c2 = scan_numeric_escape(rdr, 2u); }
               'u' { c2 = scan_numeric_escape(rdr, 4u); }
               'U' { c2 = scan_numeric_escape(rdr, 8u); }
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs
index 1c6f240cf82..044509a5144 100644
--- a/src/libsyntax/parse/token.rs
+++ b/src/libsyntax/parse/token.rs
@@ -122,11 +122,7 @@ fn to_str(in: interner<str>, t: token) -> str {
 
       /* Literals */
       LIT_INT(c, ast::ty_char) {
-        // FIXME: escape.
-        let mut tmp = "'";
-        str::push_char(tmp, c as char);
-        str::push_char(tmp, '\'');
-        ret tmp;
+        ret "'" + char::escape_default(c as char) + "'";
       }
       LIT_INT(i, t) {
         ret int::to_str(i as int, 10u) + ast_util::int_ty_to_str(t);
@@ -138,10 +134,11 @@ fn to_str(in: interner<str>, t: token) -> str {
         ret interner::get::<str>(in, s) +
             ast_util::float_ty_to_str(t);
       }
-      LIT_STR(s) { // FIXME: escape.
-        ret "\"" + interner::get::<str>(in, s) + "\"";
+      LIT_STR(s) {
+        ret "\""
+            + str::escape_default(interner::get::<str>(in, s))
+            + "\"";
       }
-
       /* Name components */
       IDENT(s, _) {
         ret interner::get::<str>(in, s);