diff options
author | Marcus Klaas de Vries <[email protected]> | 2019-01-28 22:06:11 +0000 |
---|---|---|
committer | Marcus Klaas de Vries <[email protected]> | 2019-01-28 22:09:14 +0000 |
commit | 3daca3eb4d843199540edfb1092f57f49938d0f6 (patch) | |
tree | 4cdc5c921b024d8b348b73e1a7c3e6a56fc11305 /crates/ra_hir/src/expr.rs | |
parent | 3f4f50baaa21cb2d0f6c102f1ca521946071a8dc (diff) |
Infer type of match guard
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r-- | crates/ra_hir/src/expr.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 60d997bbe..b01d53e5c 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs | |||
@@ -215,7 +215,7 @@ pub use ra_syntax::ast::BinOp as BinaryOp; | |||
215 | #[derive(Debug, Clone, Eq, PartialEq)] | 215 | #[derive(Debug, Clone, Eq, PartialEq)] |
216 | pub struct MatchArm { | 216 | pub struct MatchArm { |
217 | pub pats: Vec<PatId>, | 217 | pub pats: Vec<PatId>, |
218 | // guard: Option<ExprId>, // TODO | 218 | pub guard: Option<ExprId>, |
219 | pub expr: ExprId, | 219 | pub expr: ExprId, |
220 | } | 220 | } |
221 | 221 | ||
@@ -511,10 +511,12 @@ impl ExprCollector { | |||
511 | MatchArm { | 511 | MatchArm { |
512 | pats: vec![pat], | 512 | pats: vec![pat], |
513 | expr: then_branch, | 513 | expr: then_branch, |
514 | guard: None, | ||
514 | }, | 515 | }, |
515 | MatchArm { | 516 | MatchArm { |
516 | pats: vec![placeholder_pat], | 517 | pats: vec![placeholder_pat], |
517 | expr: else_branch, | 518 | expr: else_branch, |
519 | guard: None, | ||
518 | }, | 520 | }, |
519 | ]; | 521 | ]; |
520 | self.alloc_expr( | 522 | self.alloc_expr( |
@@ -613,6 +615,10 @@ impl ExprCollector { | |||
613 | .map(|arm| MatchArm { | 615 | .map(|arm| MatchArm { |
614 | pats: arm.pats().map(|p| self.collect_pat(p)).collect(), | 616 | pats: arm.pats().map(|p| self.collect_pat(p)).collect(), |
615 | expr: self.collect_expr_opt(arm.expr()), | 617 | expr: self.collect_expr_opt(arm.expr()), |
618 | guard: arm.guard().map(|guard| { | ||
619 | let e = guard.expr().expect("every guard should have an expr"); | ||
620 | self.collect_expr(e) | ||
621 | }), | ||
616 | }) | 622 | }) |
617 | .collect() | 623 | .collect() |
618 | } else { | 624 | } else { |