$p.token.span, ExprKind::Block(block, None), ThinVec::new()
));
}
+ // N.B: `NtIdent(ident)` is normalized to `Ident` in `fn bump`.
_ => {},
};
}
// can't continue an expression after an ident
token::Ident(name, is_raw) => token::ident_can_begin_expr(name, t.span, is_raw),
token::Literal(..) | token::Pound => true,
- token::Interpolated(ref nt) => match **nt {
- token::NtIdent(..) | token::NtExpr(..) |
- token::NtBlock(..) | token::NtPath(..) => true,
- _ => false,
- },
- _ => false
+ _ => t.is_whole_expr(),
};
let cannot_continue_expr = self.look_ahead(1, token_cannot_continue_expr);
if cannot_continue_expr {
/// Would `maybe_whole_expr` in `parser.rs` return `Ok(..)`?
/// That is, is this a pre-parsed expression dropped into the token stream
- /// (which happens while parsing the result ofmacro expansion)?
+ /// (which happens while parsing the result of macro expansion)?
crate fn is_whole_expr(&self) -> bool {
if let Interpolated(ref nt) = self.kind {
- if let NtExpr(_) | NtLiteral(_) | NtPath(_) | NtBlock(_) = **nt {
+ if let NtExpr(_) | NtLiteral(_) | NtPath(_) | NtIdent(..) | NtBlock(_) = **nt {
return true;
}
}