From cf6f989a8d638b76ec7e14d00f7ed095b20ffed6 Mon Sep 17 00:00:00 2001 From: Dawer <7803845+iDawer@users.noreply.github.com> Date: Thu, 6 May 2021 19:39:27 +0500 Subject: Lower bool literals --- crates/hir_ty/src/diagnostics/pattern.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'crates/hir_ty/src/diagnostics/pattern.rs') diff --git a/crates/hir_ty/src/diagnostics/pattern.rs b/crates/hir_ty/src/diagnostics/pattern.rs index 7b0b63d0b..14dd736a6 100644 --- a/crates/hir_ty/src/diagnostics/pattern.rs +++ b/crates/hir_ty/src/diagnostics/pattern.rs @@ -67,6 +67,11 @@ pub enum PatKind { subpattern: Pat, }, + // only bool for now + LiteralBool { + value: bool, + }, + /// An or-pattern, e.g. `p | q`. /// Invariant: `pats.len() >= 2`. Or { @@ -99,6 +104,8 @@ impl<'a> PatCtxt<'a> { let kind = match self.body[pat] { hir_def::expr::Pat::Wild => PatKind::Wild, + hir_def::expr::Pat::Lit(expr) => self.lower_lit(expr), + hir_def::expr::Pat::Path(ref path) => { return self.lower_path(pat, path); } @@ -211,6 +218,18 @@ impl<'a> PatCtxt<'a> { } } } + + fn lower_lit(&mut self, expr: hir_def::expr::ExprId) -> PatKind { + use hir_def::expr::{Expr, Literal::Bool}; + + match self.body[expr] { + Expr::Literal(Bool(value)) => PatKind::LiteralBool { value }, + _ => { + self.errors.push(PatternError::Unimplemented); + PatKind::Wild + } + } + } } #[cfg(test)] -- cgit v1.2.3