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.rs20
1 files changed, 13 insertions, 7 deletions
diff --git a/crates/hir-ty/src/infer/expr.rs b/crates/hir-ty/src/infer/expr.rs
index 75e6440334..5f752da3d0 100644
--- a/crates/hir-ty/src/infer/expr.rs
+++ b/crates/hir-ty/src/infer/expr.rs
@@ -269,7 +269,8 @@ impl<'db> InferenceContext<'_, 'db> {
| Expr::Box { .. }
| Expr::RecordLit { .. }
| Expr::Yeet { .. }
- | Expr::Missing => false,
+ | Expr::Missing
+ | Expr::IncludeBytes => false,
}
}
@@ -893,6 +894,11 @@ impl<'db> InferenceContext<'_, 'db> {
self.types.types.unit
}
}
+ Expr::IncludeBytes => {
+ let len = self.table.next_const_var(Span::Dummy);
+ let arr = Ty::new_array_with_const_len(self.interner(), self.types.types.u8, len);
+ Ty::new_ref(self.interner(), self.types.regions.statik, arr, Mutability::Not)
+ }
};
let ty = self.insert_type_vars_shallow(ty);
self.write_expr_ty(tgt_expr, ty);
@@ -1055,14 +1061,14 @@ impl<'db> InferenceContext<'_, 'db> {
});
}
- variant_field_tys[i].get().instantiate(interner, args).skip_norm_wip()
+ variant_field_tys[i].ty().instantiate(interner, args).skip_norm_wip()
} else {
if let Some(field_idx) = seen_fields.get(&name) {
self.push_diagnostic(InferenceDiagnostic::DuplicateField {
field: field.expr.into(),
variant,
});
- variant_field_tys[*field_idx].get().instantiate(interner, args).skip_norm_wip()
+ variant_field_tys[*field_idx].ty().instantiate(interner, args).skip_norm_wip()
} else {
self.push_diagnostic(InferenceDiagnostic::NoSuchField {
field: field.expr.into(),
@@ -1118,12 +1124,12 @@ impl<'db> InferenceContext<'_, 'db> {
// type we expect from the expectation value.
for (field_idx, field) in variant_fields.fields().iter() {
let fru_ty = variant_field_tys[field_idx]
- .get()
+ .ty()
.instantiate(interner, fresh_args)
.skip_norm_wip();
if remaining_fields.remove(&field.name).is_some() {
let target_ty = variant_field_tys[field_idx]
- .get()
+ .ty()
.instantiate(interner, args)
.skip_norm_wip();
let cause = ObligationCause::new(expr);
@@ -1678,7 +1684,7 @@ impl<'db> InferenceContext<'_, 'db> {
return None;
}
let ty = self.db.field_types(field_id.parent)[field_id.local_id]
- .get()
+ .ty()
.instantiate(interner, parameters)
.skip_norm_wip();
Some((Either::Left(field_id), ty))
@@ -1697,7 +1703,7 @@ impl<'db> InferenceContext<'_, 'db> {
let adjustments =
self.table.register_infer_ok(autoderef.adjust_steps_as_infer_ok());
let ty = self.db.field_types(field_id.parent)[field_id.local_id]
- .get()
+ .ty()
.instantiate(self.interner(), subst)
.skip_norm_wip();
let ty = self.process_remote_user_written_ty(ty);