From ff0f9b62f64cea6474e93667f93b91c05e3be57f Mon Sep 17 00:00:00 2001 From: Kevin Ballard Date: Sun, 25 May 2014 18:33:52 -0700 Subject: Allow $foo:block nonterminals in expression position Fixes #13678. --- src/libsyntax/parse/parser.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index bfdf0361f05..ae5f16c2580 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -135,17 +135,21 @@ at INTERPOLATED tokens */ macro_rules! maybe_whole_expr ( ($p:expr) => ( { - let mut maybe_path = match ($p).token { - INTERPOLATED(token::NtPath(ref pt)) => Some((**pt).clone()), - _ => None, - }; - let found = match ($p).token { + let found = match $p.token { INTERPOLATED(token::NtExpr(e)) => { Some(e) } INTERPOLATED(token::NtPath(_)) => { - let pt = maybe_path.take_unwrap(); - Some($p.mk_expr(($p).span.lo, ($p).span.hi, ExprPath(pt))) + // FIXME: The following avoids an issue with lexical borrowck scopes, + // but the clone is unfortunate. + let pt = match $p.token { + INTERPOLATED(token::NtPath(ref pt)) => (**pt).clone(), + _ => unreachable!() + }; + Some($p.mk_expr($p.span.lo, $p.span.hi, ExprPath(pt))) + } + INTERPOLATED(token::NtBlock(b)) => { + Some($p.mk_expr($p.span.lo, $p.span.hi, ExprBlock(b))) } _ => None }; -- cgit 1.4.1-3-g733a5