aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-07-31 15:52:08 +0100
committerAleksey Kladov <[email protected]>2020-07-31 15:52:08 +0100
commitbfcee63e75d6feb21cafbdf3887e0efd508b6b2e (patch)
treef581a142abd56ff49c84f1b0c3f0b32ef8be5639 /crates/ra_hir_def
parentd4d986c7f850e1f535bb4c22e3a7f7fba5483628 (diff)
Work on expressions grammar
Diffstat (limited to 'crates/ra_hir_def')
-rw-r--r--crates/ra_hir_def/src/body/lower.rs22
1 files changed, 17 insertions, 5 deletions
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs
index 5816bf566..67d7041fc 100644
--- a/crates/ra_hir_def/src/body/lower.rs
+++ b/crates/ra_hir_def/src/body/lower.rs
@@ -224,9 +224,22 @@ impl ExprCollector<'_> {
224 self.alloc_expr(Expr::Unsafe { body }, syntax_ptr) 224 self.alloc_expr(Expr::Unsafe { body }, syntax_ptr)
225 } 225 }
226 // FIXME: we need to record these effects somewhere... 226 // FIXME: we need to record these effects somewhere...
227 ast::Effect::Async(_) | ast::Effect::Label(_) => { 227 ast::Effect::Label(label) => match e.block_expr() {
228 self.collect_block_opt(e.block_expr()) 228 Some(block) => {
229 } 229 let res = self.collect_block(block);
230 match &mut self.body.exprs[res] {
231 Expr::Block { label: block_label, .. } => {
232 *block_label =
233 label.lifetime_token().map(|t| Name::new_lifetime(&t))
234 }
235 _ => unreachable!(),
236 }
237 res
238 }
239 None => self.missing_expr(),
240 },
241 // FIXME: we need to record these effects somewhere...
242 ast::Effect::Async(_) => self.collect_block_opt(e.block_expr()),
230 }, 243 },
231 ast::Expr::BlockExpr(e) => self.collect_block(e), 244 ast::Expr::BlockExpr(e) => self.collect_block(e),
232 ast::Expr::LoopExpr(e) => { 245 ast::Expr::LoopExpr(e) => {
@@ -618,8 +631,7 @@ impl ExprCollector<'_> {
618 }) 631 })
619 .collect(); 632 .collect();
620 let tail = block.expr().map(|e| self.collect_expr(e)); 633 let tail = block.expr().map(|e| self.collect_expr(e));
621 let label = block.label().and_then(|l| l.lifetime_token()).map(|t| Name::new_lifetime(&t)); 634 self.alloc_expr(Expr::Block { statements, tail, label: None }, syntax_node_ptr)
622 self.alloc_expr(Expr::Block { statements, tail, label }, syntax_node_ptr)
623 } 635 }
624 636
625 fn collect_block_items(&mut self, block: &ast::BlockExpr) { 637 fn collect_block_items(&mut self, block: &ast::BlockExpr) {