diff options
author | Aleksey Kladov <[email protected]> | 2020-07-31 15:52:08 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-07-31 15:52:08 +0100 |
commit | bfcee63e75d6feb21cafbdf3887e0efd508b6b2e (patch) | |
tree | f581a142abd56ff49c84f1b0c3f0b32ef8be5639 /crates/ra_hir_def | |
parent | d4d986c7f850e1f535bb4c22e3a7f7fba5483628 (diff) |
Work on expressions grammar
Diffstat (limited to 'crates/ra_hir_def')
-rw-r--r-- | crates/ra_hir_def/src/body/lower.rs | 22 |
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) { |