about summary refs log tree commit diff
path: root/src/libproc_macro
diff options
context:
space:
mode:
authorLymia Aluysia <lymia@lymiahugs.com>2018-03-09 23:56:40 -0600
committerLymia Aluysia <lymia@lymiahugs.com>2018-03-18 10:07:19 -0500
commitfad1648e0f8299a8b108f85c2b1055eb37bdab9e (patch)
tree1a54c05782a65c39d2a01d3afe7a210e3dbe2c2f /src/libproc_macro
parent8aa27ee30972f16320ae4a8887c8f54616fff819 (diff)
Initial implementation of RFC 2151, Raw Identifiers
Diffstat (limited to 'src/libproc_macro')
-rw-r--r--src/libproc_macro/lib.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libproc_macro/lib.rs b/src/libproc_macro/lib.rs
index b239f8018be..d6e679bad48 100644
--- a/src/libproc_macro/lib.rs
+++ b/src/libproc_macro/lib.rs
@@ -681,7 +681,8 @@ impl TokenTree {
             Dollar => op!('$'),
             Question => op!('?'),
 
-            Ident(ident) | Lifetime(ident) => TokenNode::Term(Term(ident.name)),
+            Ident(ident, false) | Lifetime(ident) => TokenNode::Term(Term(ident.name)),
+            Ident(ident, true) => TokenNode::Term(Term(Symbol::intern(&format!("r#{}", ident)))),
             Literal(..) | DocComment(..) => TokenNode::Literal(self::Literal(token)),
 
             Interpolated(_) => {
@@ -713,8 +714,14 @@ impl TokenTree {
             },
             TokenNode::Term(symbol) => {
                 let ident = ast::Ident { name: symbol.0, ctxt: self.span.0.ctxt() };
+                let sym_str = symbol.0.as_str();
                 let token =
-                    if symbol.0.as_str().starts_with("'") { Lifetime(ident) } else { Ident(ident) };
+                    if sym_str.starts_with("'") { Lifetime(ident) }
+                    else if sym_str.starts_with("r#") {
+                        let name = Symbol::intern(&sym_str[2..]);
+                        let ident = ast::Ident { name, ctxt: self.span.0.ctxt() };
+                        Ident(ident, true)
+                    } else { Ident(ident, false) };
                 return TokenTree::Token(self.span.0, token).into();
             }
             TokenNode::Literal(token) => return TokenTree::Token(self.span.0, token.0).into(),