Add useful comments on ExprKind::If variants.

Things that aren't obvious and took me a while to work out.
This commit is contained in:
Nicholas Nethercote 2025-04-28 06:33:22 +10:00
parent 251cda5e1f
commit 0ea204a5ff
3 changed files with 9 additions and 0 deletions

View File

@ -1633,6 +1633,9 @@ pub enum ExprKind {
/// An `if` block, with an optional `else` block.
///
/// `if expr { block } else { expr }`
///
/// If present, the "else" expr is always `ExprKind::Block` (for `else`) or
/// `ExprKind::If` (for `else if`).
If(P<Expr>, P<Block>, Option<P<Expr>>),
/// A while loop, with an optional label.
///

View File

@ -2730,6 +2730,9 @@ pub enum ExprKind<'hir> {
/// An `if` block, with an optional else block.
///
/// I.e., `if <expr> { <expr> } else { <expr> }`.
///
/// The "then" expr is always `ExprKind::Block`. If present, the "else" expr is always
/// `ExprKind::Block` (for `else`) or `ExprKind::If` (for `else if`).
If(&'hir Expr<'hir>, &'hir Expr<'hir>, Option<&'hir Expr<'hir>>),
/// A conditionless loop (can be exited with `break`, `continue`, or `return`).
///

View File

@ -292,7 +292,10 @@ pub enum ExprKind<'tcx> {
If {
if_then_scope: region::Scope,
cond: ExprId,
/// `then` is always `ExprKind::Block`.
then: ExprId,
/// If present, the `else_opt` expr is always `ExprKind::Block` (for
/// `else`) or `ExprKind::If` (for `else if`).
else_opt: Option<ExprId>,
},
/// A function call. Method calls and overloaded operators are converted to plain function calls.