summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorEric Holk <eric.holk@gmail.com>2012-08-06 13:09:10 -0700
committerEric Holk <eric.holk@gmail.com>2012-08-06 13:25:34 -0700
commit517ad983f9f5ac7f805dd15cf6c6a156e02e3ec8 (patch)
tree194520faef38ce641175fbef688c9c0b68837a15 /src/libsyntax/parse
parent4544c015b3bd45b18612ede3e0c091ec3ee27e8a (diff)
Handle interpolated paths in pattern parsing. Fixes #3007.
We might need to use is_ident_or_path in a for other places too.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs5
-rw-r--r--src/libsyntax/parse/token.rs7
2 files changed, 10 insertions, 2 deletions
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 }
 }