about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs10
-rw-r--r--src/libsyntax/parse/token.rs12
2 files changed, 17 insertions, 5 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index d31d4762c7b..4d564563d10 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -1070,9 +1070,10 @@ class parser {
 
         fn parse_tt_flat(p: parser, delim_ok: bool) -> token_tree {
             if p.eat_keyword("many") && p.quote_depth > 0u {
-                ret tt_dotdotdot(
-                    p.parse_seq(token::LPAREN, token::RPAREN, seq_sep_none(),
-                                |p| p.parse_token_tree()).node);
+                let seq = p.parse_seq(token::LPAREN, token::RPAREN,
+                                      seq_sep_none(),
+                                      |p| p.parse_token_tree());
+                ret tt_dotdotdot(seq.span, seq.node);
             }
             alt p.token {
               token::RPAREN | token::RBRACE | token::RBRACKET
@@ -1086,7 +1087,8 @@ class parser {
               /* we ought to allow different depths of unquotation */
               token::DOLLAR if p.quote_depth > 0u {
                 p.bump();
-                ret tt_interpolate(p.parse_ident());
+                let sp = p.span;
+                ret tt_interpolate(sp, p.parse_ident());
               }
               _ { /* ok */ }
             }
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs
index c4ae9269914..29a8fb18ebc 100644
--- a/src/libsyntax/parse/token.rs
+++ b/src/libsyntax/parse/token.rs
@@ -78,7 +78,8 @@ enum token {
     IDENT(str_num, bool),
     UNDERSCORE,
 
-    //ACTUALLY(whole_nonterminal),
+    /* For interpolation */
+    ACTUALLY(whole_nt),
 
     DOC_COMMENT(str_num),
     EOF,
@@ -181,6 +182,15 @@ fn to_str(in: interner<@str>, t: token) -> str {
       /* Other */
       DOC_COMMENT(s) { *interner::get(in, s) }
       EOF { "<eof>" }
+      ACTUALLY(w_nt) {
+        "an interpolated " +
+            alt w_nt {
+              w_item(*) { "item" } w_block(*) { "block" }
+              w_stmt(*) { "statement" } w_pat(*) { "pattern" }
+              w_expr(*) { "expression" } w_ty(*) { "type" }
+              w_ident(*) { "identifier" } w_path(*) { "path" }
+        }
+      }
     }
 }