Function rustc_ast::util::classify::expr_requires_semi_to_be_stmt
source · pub fn expr_requires_semi_to_be_stmt(e: &Expr) -> bool
Expand description
Does this expression require a semicolon to be treated as a statement?
The negation of this: “can this expression be used as a statement without a semicolon” – is used as an early bail-out when parsing statements so that, for instance,
ⓘ
if true {...} else {...}
|x| 5
isn’t parsed as (if true {...} else {...} | x) | 5
.
Surprising special case: even though braced macro calls like m! {}
normally do not introduce a boundary when found at the head of a match arm,
they do terminate the parsing of a statement.
ⓘ
match ... {
_ => m! {} (), // macro that expands to a function, which is then called
}
let _ = { m! {} () }; // macro call followed by unit