diff --git a/src/expr.rs b/src/expr.rs index 62ebdad857..8e1e461d8e 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1741,6 +1741,8 @@ pub(crate) mod parsing { input.parse().map(Expr::Continue) } else if input.peek(Token![return]) { input.parse().map(Expr::Return) + } else if input.peek(Token![become]) { + expr_become(input) } else if input.peek(token::Bracket) { array_or_repeat(input) } else if input.peek(Token![let]) { @@ -2393,6 +2395,16 @@ pub(crate) mod parsing { } } + #[cfg(feature = "full")] + fn expr_become(input: ParseStream) -> Result { + let begin = input.fork(); + input.parse::()?; + if can_begin_expr(input) { + input.parse::()?; + } + Ok(Expr::Verbatim(verbatim::between(&begin, input))) + } + #[cfg(feature = "full")] #[cfg_attr(docsrs, doc(cfg(feature = "parsing")))] impl Parse for ExprTryBlock { diff --git a/tests/repo/mod.rs b/tests/repo/mod.rs index d7a1f5dc1f..6c367c944c 100644 --- a/tests/repo/mod.rs +++ b/tests/repo/mod.rs @@ -32,19 +32,6 @@ static EXCLUDE_FILES: &[&str] = &[ "tests/ui/attributes/unsafe/unsafe-attributes.rs", "tests/ui/rust-2024/unsafe-attributes/unsafe-attribute-marked.rs", - // TODO: explicit tail calls: `become _g()` - // https://github.com/dtolnay/syn/issues/1501 - "src/tools/miri/tests/fail/tail_calls/cc-mismatch.rs", - "src/tools/miri/tests/fail/tail_calls/signature-mismatch-arg.rs", - "src/tools/miri/tests/pass/tail_call.rs", - "src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/0209_become_expr.rs", - "tests/mir-opt/tail_call_drops.rs", - "tests/ui/explicit-tail-calls/ctfe-arg-good-borrow.rs", - "tests/ui/explicit-tail-calls/ctfe-arg-move.rs", - "tests/ui/explicit-tail-calls/ctfe-collatz-multi-rec.rs", - "tests/ui/explicit-tail-calls/drop-order.rs", - "tests/ui/explicit-tail-calls/return-lifetime-sub.rs", - // TODO: non-lifetime binders: `where for<'a, T> &'a Struct: Trait` // https://github.com/dtolnay/syn/issues/1435 "src/tools/rustfmt/tests/source/issue_5721.rs", diff --git a/tests/test_precedence.rs b/tests/test_precedence.rs index 07f9139480..99c935f247 100644 --- a/tests/test_precedence.rs +++ b/tests/test_precedence.rs @@ -238,7 +238,7 @@ fn librustc_parenthesize(mut librustc_expr: P) -> P { fn noop_visit_expr(e: &mut Expr, vis: &mut T) { match &mut e.kind { - ExprKind::AddrOf(BorrowKind::Raw, ..) => {} + ExprKind::AddrOf(BorrowKind::Raw, ..) | ExprKind::Become(..) => {} ExprKind::Struct(expr) => { let StructExpr { qself,