Refactor parse_expr_res
.
This removes the final `Option<AttrWrapper>` argument.
This commit is contained in:
parent
43eae4cef4
commit
8170acb197
5 changed files with 33 additions and 28 deletions
|
@ -2502,7 +2502,8 @@ impl<'a> Parser<'a> {
|
|||
/// wrapped in braces.
|
||||
pub(super) fn handle_unambiguous_unbraced_const_arg(&mut self) -> PResult<'a, P<Expr>> {
|
||||
let start = self.token.span;
|
||||
let expr = self.parse_expr_res(Restrictions::CONST_EXPR, None).map_err(|mut err| {
|
||||
let attrs = self.parse_outer_attributes()?;
|
||||
let expr = self.parse_expr_res(Restrictions::CONST_EXPR, attrs).map_err(|mut err| {
|
||||
err.span_label(
|
||||
start.shrink_to_lo(),
|
||||
"while parsing a const generic argument starting here",
|
||||
|
@ -2624,7 +2625,10 @@ impl<'a> Parser<'a> {
|
|||
if is_op_or_dot {
|
||||
self.bump();
|
||||
}
|
||||
match self.parse_expr_res(Restrictions::CONST_EXPR, None) {
|
||||
match (|| {
|
||||
let attrs = self.parse_outer_attributes()?;
|
||||
self.parse_expr_res(Restrictions::CONST_EXPR, attrs)
|
||||
})() {
|
||||
Ok(expr) => {
|
||||
// Find a mistake like `MyTrait<Assoc == S::Assoc>`.
|
||||
if token::EqEq == snapshot.token.kind {
|
||||
|
@ -2678,7 +2682,10 @@ impl<'a> Parser<'a> {
|
|||
&mut self,
|
||||
mut snapshot: SnapshotParser<'a>,
|
||||
) -> Option<P<ast::Expr>> {
|
||||
match snapshot.parse_expr_res(Restrictions::CONST_EXPR, None) {
|
||||
match (|| {
|
||||
let attrs = self.parse_outer_attributes()?;
|
||||
snapshot.parse_expr_res(Restrictions::CONST_EXPR, attrs)
|
||||
})() {
|
||||
// Since we don't know the exact reason why we failed to parse the type or the
|
||||
// expression, employ a simple heuristic to weed out some pathological cases.
|
||||
Ok(expr) if let token::Comma | token::Gt = snapshot.token.kind => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue