Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/infer/expr.rs')
-rw-r--r--crates/hir-ty/src/infer/expr.rs43
1 files changed, 23 insertions, 20 deletions
diff --git a/crates/hir-ty/src/infer/expr.rs b/crates/hir-ty/src/infer/expr.rs
index db631c8517..842f7bdafe 100644
--- a/crates/hir-ty/src/infer/expr.rs
+++ b/crates/hir-ty/src/infer/expr.rs
@@ -39,9 +39,9 @@ use crate::{
static_lifetime, to_chalk_trait_id,
traits::FnTrait,
utils::{generics, Generics},
- Adjust, Adjustment, AdtId, AutoBorrow, Binders, CallableDefId, FnPointer, FnSig, FnSubst,
- Interner, Rawness, Scalar, Substitution, TraitEnvironment, TraitRef, Ty, TyBuilder, TyExt,
- TyKind,
+ Adjust, Adjustment, AdtId, AutoBorrow, Binders, CallableDefId, FnAbi, FnPointer, FnSig,
+ FnSubst, Interner, Rawness, Scalar, Substitution, TraitEnvironment, TraitRef, Ty, TyBuilder,
+ TyExt, TyKind,
};
use super::{
@@ -224,7 +224,11 @@ impl InferenceContext<'_> {
let sig_ty = TyKind::Function(FnPointer {
num_binders: 0,
- sig: FnSig { abi: (), safety: chalk_ir::Safety::Safe, variadic: false },
+ sig: FnSig {
+ abi: FnAbi::RustCall,
+ safety: chalk_ir::Safety::Safe,
+ variadic: false,
+ },
substitution: FnSubst(
Substitution::from_iter(Interner, sig_tys.iter().cloned())
.shifted_in(Interner),
@@ -233,7 +237,7 @@ impl InferenceContext<'_> {
.intern(Interner);
let (id, ty, resume_yield_tys) = match closure_kind {
- ClosureKind::Generator(_) => {
+ ClosureKind::Coroutine(_) => {
// FIXME: report error when there are more than 1 parameter.
let resume_ty = match sig_tys.first() {
// When `sig_tys.len() == 1` the first type is the return type, not the
@@ -243,16 +247,16 @@ impl InferenceContext<'_> {
};
let yield_ty = self.table.new_type_var();
- let subst = TyBuilder::subst_for_generator(self.db, self.owner)
+ let subst = TyBuilder::subst_for_coroutine(self.db, self.owner)
.push(resume_ty.clone())
.push(yield_ty.clone())
.push(ret_ty.clone())
.build();
- let generator_id = self.db.intern_generator((self.owner, tgt_expr)).into();
- let generator_ty = TyKind::Generator(generator_id, subst).intern(Interner);
+ let coroutine_id = self.db.intern_coroutine((self.owner, tgt_expr)).into();
+ let coroutine_ty = TyKind::Coroutine(coroutine_id, subst).intern(Interner);
- (None, generator_ty, Some((resume_ty, yield_ty)))
+ (None, coroutine_ty, Some((resume_ty, yield_ty)))
}
ClosureKind::Closure | ClosureKind::Async => {
let closure_id = self.db.intern_closure((self.owner, tgt_expr)).into();
@@ -276,7 +280,7 @@ impl InferenceContext<'_> {
// Now go through the argument patterns
for (arg_pat, arg_ty) in args.iter().zip(&sig_tys) {
- self.infer_top_pat(*arg_pat, &arg_ty);
+ self.infer_top_pat(*arg_pat, arg_ty);
}
// FIXME: lift these out into a struct
@@ -435,7 +439,7 @@ impl InferenceContext<'_> {
ty
}
&Expr::Continue { label } => {
- if let None = find_continuable(&mut self.breakables, label) {
+ if find_continuable(&mut self.breakables, label).is_none() {
self.push_diagnostic(InferenceDiagnostic::BreakOutsideOfLoop {
expr: tgt_expr,
is_break: false,
@@ -503,7 +507,7 @@ impl InferenceContext<'_> {
}
resume_ty
} else {
- // FIXME: report error (yield expr in non-generator)
+ // FIXME: report error (yield expr in non-coroutine)
self.result.standard_types.unknown.clone()
}
}
@@ -942,7 +946,7 @@ impl InferenceContext<'_> {
derefed_callee: &Ty,
adjustments: &mut Vec<Adjustment>,
callee_ty: &Ty,
- params: &Vec<Ty>,
+ params: &[Ty],
tgt_expr: ExprId,
) {
match fn_x {
@@ -1081,8 +1085,7 @@ impl InferenceContext<'_> {
let inner_exp = expected
.to_option(table)
.as_ref()
- .map(|e| e.as_adt())
- .flatten()
+ .and_then(|e| e.as_adt())
.filter(|(e_adt, _)| e_adt == &box_id)
.map(|(_, subts)| {
let g = subts.at(Interner, 0);
@@ -1245,7 +1248,7 @@ impl InferenceContext<'_> {
.build();
self.write_method_resolution(tgt_expr, func, subst.clone());
- let method_ty = self.db.value_ty(func.into()).substitute(Interner, &subst);
+ let method_ty = self.db.value_ty(func.into()).unwrap().substitute(Interner, &subst);
self.register_obligations_for_call(&method_ty);
self.infer_expr_coerce(rhs, &Expectation::has_type(rhs_ty.clone()));
@@ -1320,7 +1323,7 @@ impl InferenceContext<'_> {
.unwrap_or_else(|| this.table.new_type_var());
let ty = if let Some(expr) = initializer {
- let ty = if contains_explicit_ref_binding(&this.body, *pat) {
+ let ty = if contains_explicit_ref_binding(this.body, *pat) {
this.infer_expr(*expr, &Expectation::has_type(decl_ty.clone()))
} else {
this.infer_expr_coerce(
@@ -1541,7 +1544,7 @@ impl InferenceContext<'_> {
self.check_method_call(
tgt_expr,
&[],
- self.db.value_ty(func.into()),
+ self.db.value_ty(func.into()).unwrap(),
substs,
ty,
expected,
@@ -1586,7 +1589,7 @@ impl InferenceContext<'_> {
item: func.into(),
})
}
- (ty, self.db.value_ty(func.into()), substs)
+ (ty, self.db.value_ty(func.into()).unwrap(), substs)
}
None => {
let field_with_same_name_exists = match self.lookup_field(&receiver_ty, method_name)
@@ -1716,7 +1719,7 @@ impl InferenceContext<'_> {
// that we have more information about the types of arguments when we
// type-check the functions. This isn't really the right way to do this.
for check_closures in [false, true] {
- let mut skip_indices = skip_indices.into_iter().copied().fuse().peekable();
+ let mut skip_indices = skip_indices.iter().copied().fuse().peekable();
let param_iter = param_tys.iter().cloned().chain(repeat(self.err_ty()));
let expected_iter = expected_inputs
.iter()