diff options
Diffstat (limited to 'crates/hir_ty/src/infer')
-rw-r--r-- | crates/hir_ty/src/infer/expr.rs | 22 |
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 | ||
29 | use super::{ | 29 | use 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 |