aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/infer/expr.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2021-04-03 19:22:59 +0100
committerFlorian Diebold <[email protected]>2021-04-04 12:16:38 +0100
commitb0fe3d929f6f8764f371970b9f9ca9e7c415dafd (patch)
tree384bd17e3428b591f1c82d1b061ceecee529c044 /crates/hir_ty/src/infer/expr.rs
parentb15152c430237d6850ec709ac75aab269c4b7dee (diff)
Add TyBuilder::unit() and TyExt::is_unit()
Diffstat (limited to 'crates/hir_ty/src/infer/expr.rs')
-rw-r--r--crates/hir_ty/src/infer/expr.rs22
1 files changed, 11 insertions, 11 deletions
diff --git a/crates/hir_ty/src/infer/expr.rs b/crates/hir_ty/src/infer/expr.rs
index dd3914ec3..db8aeead2 100644
--- a/crates/hir_ty/src/infer/expr.rs
+++ b/crates/hir_ty/src/infer/expr.rs
@@ -23,7 +23,7 @@ use crate::{
23 traits::{chalk::from_chalk, FnTrait, InEnvironment}, 23 traits::{chalk::from_chalk, FnTrait, InEnvironment},
24 utils::{generics, variant_data, Generics}, 24 utils::{generics, variant_data, Generics},
25 AdtId, Binders, CallableDefId, DomainGoal, FnPointer, FnSig, Interner, Rawness, Scalar, 25 AdtId, Binders, CallableDefId, DomainGoal, FnPointer, FnSig, Interner, Rawness, Scalar,
26 Substitution, TraitRef, Ty, TyKind, 26 Substitution, TraitRef, Ty, TyBuilder, TyKind,
27}; 27};
28 28
29use super::{ 29use super::{
@@ -138,7 +138,7 @@ impl<'a> InferenceContext<'a> {
138 both_arms_diverge &= mem::replace(&mut self.diverges, Diverges::Maybe); 138 both_arms_diverge &= mem::replace(&mut self.diverges, Diverges::Maybe);
139 let else_ty = match else_branch { 139 let else_ty = match else_branch {
140 Some(else_branch) => self.infer_expr_inner(*else_branch, &expected), 140 Some(else_branch) => self.infer_expr_inner(*else_branch, &expected),
141 None => Ty::unit(), 141 None => TyBuilder::unit(),
142 }; 142 };
143 both_arms_diverge &= self.diverges; 143 both_arms_diverge &= self.diverges;
144 144
@@ -193,7 +193,7 @@ impl<'a> InferenceContext<'a> {
193 break_ty: self.table.new_type_var(), 193 break_ty: self.table.new_type_var(),
194 label: label.map(|label| self.body[label].name.clone()), 194 label: label.map(|label| self.body[label].name.clone()),
195 }); 195 });
196 self.infer_expr(*body, &Expectation::has_type(Ty::unit())); 196 self.infer_expr(*body, &Expectation::has_type(TyBuilder::unit()));
197 197
198 let ctxt = self.breakables.pop().expect("breakable stack broken"); 198 let ctxt = self.breakables.pop().expect("breakable stack broken");
199 if ctxt.may_break { 199 if ctxt.may_break {
@@ -217,11 +217,11 @@ impl<'a> InferenceContext<'a> {
217 *condition, 217 *condition,
218 &Expectation::has_type(TyKind::Scalar(Scalar::Bool).intern(&Interner)), 218 &Expectation::has_type(TyKind::Scalar(Scalar::Bool).intern(&Interner)),
219 ); 219 );
220 self.infer_expr(*body, &Expectation::has_type(Ty::unit())); 220 self.infer_expr(*body, &Expectation::has_type(TyBuilder::unit()));
221 let _ctxt = self.breakables.pop().expect("breakable stack broken"); 221 let _ctxt = self.breakables.pop().expect("breakable stack broken");
222 // the body may not run, so it diverging doesn't mean we diverge 222 // the body may not run, so it diverging doesn't mean we diverge
223 self.diverges = Diverges::Maybe; 223 self.diverges = Diverges::Maybe;
224 Ty::unit() 224 TyBuilder::unit()
225 } 225 }
226 Expr::For { iterable, body, pat, label } => { 226 Expr::For { iterable, body, pat, label } => {
227 let iterable_ty = self.infer_expr(*iterable, &Expectation::none()); 227 let iterable_ty = self.infer_expr(*iterable, &Expectation::none());
@@ -236,11 +236,11 @@ impl<'a> InferenceContext<'a> {
236 236
237 self.infer_pat(*pat, &pat_ty, BindingMode::default()); 237 self.infer_pat(*pat, &pat_ty, BindingMode::default());
238 238
239 self.infer_expr(*body, &Expectation::has_type(Ty::unit())); 239 self.infer_expr(*body, &Expectation::has_type(TyBuilder::unit()));
240 let _ctxt = self.breakables.pop().expect("breakable stack broken"); 240 let _ctxt = self.breakables.pop().expect("breakable stack broken");
241 // the body may not run, so it diverging doesn't mean we diverge 241 // the body may not run, so it diverging doesn't mean we diverge
242 self.diverges = Diverges::Maybe; 242 self.diverges = Diverges::Maybe;
243 Ty::unit() 243 TyBuilder::unit()
244 } 244 }
245 Expr::Lambda { body, args, ret_type, arg_types } => { 245 Expr::Lambda { body, args, ret_type, arg_types } => {
246 assert_eq!(args.len(), arg_types.len()); 246 assert_eq!(args.len(), arg_types.len());
@@ -360,7 +360,7 @@ impl<'a> InferenceContext<'a> {
360 let val_ty = if let Some(expr) = expr { 360 let val_ty = if let Some(expr) = expr {
361 self.infer_expr(*expr, &Expectation::none()) 361 self.infer_expr(*expr, &Expectation::none())
362 } else { 362 } else {
363 Ty::unit() 363 TyBuilder::unit()
364 }; 364 };
365 365
366 let last_ty = 366 let last_ty =
@@ -386,7 +386,7 @@ impl<'a> InferenceContext<'a> {
386 if let Some(expr) = expr { 386 if let Some(expr) = expr {
387 self.infer_expr_coerce(*expr, &Expectation::has_type(self.return_ty.clone())); 387 self.infer_expr_coerce(*expr, &Expectation::has_type(self.return_ty.clone()));
388 } else { 388 } else {
389 let unit = Ty::unit(); 389 let unit = TyBuilder::unit();
390 self.coerce(&unit, &self.return_ty.clone()); 390 self.coerce(&unit, &self.return_ty.clone());
391 } 391 }
392 TyKind::Never.intern(&Interner) 392 TyKind::Never.intern(&Interner)
@@ -828,8 +828,8 @@ impl<'a> InferenceContext<'a> {
828 // we don't even make an attempt at coercion 828 // we don't even make an attempt at coercion
829 self.table.new_maybe_never_var() 829 self.table.new_maybe_never_var()
830 } else { 830 } else {
831 self.coerce(&Ty::unit(), &expected.coercion_target()); 831 self.coerce(&TyBuilder::unit(), &expected.coercion_target());
832 Ty::unit() 832 TyBuilder::unit()
833 } 833 }
834 }; 834 };
835 ty 835 ty