Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/expr_store/lower.rs')
-rw-r--r--crates/hir-def/src/expr_store/lower.rs19
1 files changed, 13 insertions, 6 deletions
diff --git a/crates/hir-def/src/expr_store/lower.rs b/crates/hir-def/src/expr_store/lower.rs
index 21b5b19986..242a0b0b4f 100644
--- a/crates/hir-def/src/expr_store/lower.rs
+++ b/crates/hir-def/src/expr_store/lower.rs
@@ -49,9 +49,9 @@ use crate::{
},
hir::{
Array, Binding, BindingAnnotation, BindingId, BindingProblems, CaptureBy, ClosureKind,
- CoroutineKind, CoroutineSource, Expr, ExprId, Item, Label, LabelId, Literal, MatchArm,
- Movability, OffsetOf, Pat, PatId, RecordFieldPat, RecordLitField, RecordSpread, Statement,
- generics::GenericParams,
+ CoroutineKind, CoroutineSource, Expr, ExprId, Item, Label, LabelId, Literal, LoopSource,
+ MatchArm, Movability, OffsetOf, Pat, PatId, RecordFieldPat, RecordLitField, RecordSpread,
+ Statement, generics::GenericParams,
},
item_scope::BuiltinShadowMode,
item_tree::FieldsShape,
@@ -1351,7 +1351,7 @@ impl<'db> ExprCollector<'db> {
(self.hygiene_id_for(label.syntax().text_range()), self.collect_label(label))
});
let body = self.collect_labelled_block_opt(label, e.loop_body());
- self.alloc_expr(Expr::Loop { body, label: label.map(|it| it.1) }, syntax_ptr)
+ self.alloc_expr(Expr::Loop { body, label: label.map(|it| it.1), source: LoopSource::Loop }, syntax_ptr)
}
ast::Expr::WhileExpr(e) => self.collect_while_loop(syntax_ptr, e),
ast::Expr::ForExpr(e) => self.collect_for_loop(syntax_ptr, e),
@@ -2133,7 +2133,10 @@ impl<'db> ExprCollector<'db> {
Expr::If { condition, then_branch: body, else_branch: Some(break_expr) },
syntax_ptr,
);
- self.alloc_expr(Expr::Loop { body: if_expr, label: label.map(|it| it.1) }, syntax_ptr)
+ self.alloc_expr(
+ Expr::Loop { body: if_expr, label: label.map(|it| it.1), source: LoopSource::While },
+ syntax_ptr,
+ )
}
/// Desugar `ast::ForExpr` from: `[opt_ident]: for <pat> in <head> <body>` into:
@@ -2215,7 +2218,11 @@ impl<'db> ExprCollector<'db> {
syntax_ptr,
);
let loop_outer = self.alloc_expr_desugared_with_ptr(
- Expr::Loop { body: loop_inner, label: label.map(|it| it.1) },
+ Expr::Loop {
+ body: loop_inner,
+ label: label.map(|it| it.1),
+ source: LoopSource::ForLoop,
+ },
syntax_ptr,
);
let iter_binding =