Handle interpolated paths in pattern parsing. Fixes #3007.
We might need to use is_ident_or_path in a for other places too.
This commit is contained in:
parent
4544c015b3
commit
517ad983f9
@ -73,7 +73,8 @@ fn generic_extension(cx: ext_ctxt, sp: span, arg: ~[ast::token_tree],
|
||||
~[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;
|
||||
|
@ -3,7 +3,8 @@
|
||||
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 @@ fn parse_pat(refutable: bool) -> @pat {
|
||||
}
|
||||
}
|
||||
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") {
|
||||
|
@ -262,6 +262,13 @@ fn is_lit(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 }
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user