Skip to content

Commit 2507e67

Browse files
committed
Fix the string literal parsing
1 parent 4f7db2c commit 2507e67

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/libsyntax/ext/tt/macro_parser.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,8 @@ fn parse_nt<'a>(p: &mut Parser<'a>, sp: Span, name: &str) -> Nonterminal {
586586
}
587587
},
588588
"pat" => token::NtPat(panictry!(p.parse_pat())),
589-
"expr" | "str" => token::NtExpr(panictry!(p.parse_expr())),
589+
"str" => token::NtExpr(panictry!(p.parse_lit_as_expr())),
590+
"expr" => token::NtExpr(panictry!(p.parse_expr())),
590591
"ty" => token::NtTy(panictry!(p.parse_ty())),
591592
// this could be handled like a token, since it is one
592593
"ident" => match p.token {

src/libsyntax/parse/parser.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -1758,16 +1758,20 @@ impl<'a> Parser<'a> {
17581758
Ok(codemap::Spanned { node: lit, span: lo.to(self.prev_span) })
17591759
}
17601760

1761+
pub fn parse_lit_as_expr(&mut self) -> PResult<'a, P<Expr>> {
1762+
let lo = self.span;
1763+
let literal = P(self.parse_lit()?);
1764+
let hi = self.prev_span;
1765+
Ok(self.mk_expr(lo.to(hi), ExprKind::Lit(literal), ThinVec::new()))
1766+
}
1767+
17611768
/// matches '-' lit | lit (cf. ast_validation::AstValidator::check_expr_within_pat)
17621769
pub fn parse_pat_literal_maybe_minus(&mut self) -> PResult<'a, P<Expr>> {
17631770
maybe_whole_expr!(self);
17641771

17651772
let minus_lo = self.span;
17661773
let minus_present = self.eat(&token::BinOp(token::Minus));
1767-
let lo = self.span;
1768-
let literal = P(self.parse_lit()?);
1769-
let hi = self.prev_span;
1770-
let expr = self.mk_expr(lo.to(hi), ExprKind::Lit(literal), ThinVec::new());
1774+
let expr = self.parse_lit_as_expr()?;
17711775

17721776
if minus_present {
17731777
let minus_hi = self.prev_span;

0 commit comments

Comments
 (0)