about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/tt/macro_rules.rs3
-rw-r--r--src/libsyntax/parse/parser.rs5
-rw-r--r--src/libsyntax/parse/token.rs7
3 files changed, 12 insertions, 3 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs
index 7655d7c970c..b4fc1f5c484 100644
--- a/src/libsyntax/ext/tt/macro_rules.rs
+++ b/src/libsyntax/ext/tt/macro_rules.rs
@@ -73,7 +73,8 @@ fn add_new_extension(cx: ext_ctxt, sp: span, name: ident,
                                                ~[rhs]);
                     let p = parser(cx.parse_sess(), cx.cfg(),
                                    trncbr as reader, SOURCE_FILE);
-                    return mr_expr(p.parse_expr());
+                    let e = p.parse_expr();
+                    return mr_expr(e);
                   }
                   failure(sp, msg) => if sp.lo >= best_fail_spot.lo {
                     best_fail_spot = sp;
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 71bd87981bc..4a34b667937 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -3,7 +3,8 @@ import print::pprust::expr_to_str;
 import result::result;
 import either::{either, left, right};
 import std::map::{hashmap, str_hash};
-import token::{can_begin_expr, is_ident, is_plain_ident, INTERPOLATED};
+import token::{can_begin_expr, is_ident, is_ident_or_path, is_plain_ident,
+               INTERPOLATED};
 import codemap::{span,fss_none};
 import util::interner;
 import ast_util::{spanned, respan, mk_sp, ident_to_path, operator_prec};
@@ -1748,7 +1749,7 @@ class parser {
             }
           }
           tok => {
-            if !is_ident(tok) ||
+            if !is_ident_or_path(tok) ||
                     self.is_keyword(~"true") || self.is_keyword(~"false") {
                 let val = self.parse_expr_res(RESTRICT_NO_BAR_OP);
                 if self.eat_keyword(~"to") {
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs
index d69ff7f1668..9e9a3bbca56 100644
--- a/src/libsyntax/parse/token.rs
+++ b/src/libsyntax/parse/token.rs
@@ -262,6 +262,13 @@ pure fn is_ident(t: token) -> bool {
     alt t { IDENT(_, _) => true, _ => false }
 }
 
+pure fn is_ident_or_path(t: token) -> bool {
+    alt t {
+      IDENT(_, _) | INTERPOLATED(nt_path(*)) => true,
+      _ => false
+    }
+}
+
 pure fn is_plain_ident(t: token) -> bool {
     alt t { IDENT(_, false) => true, _ => false }
 }