提交 2b7d8588 编写于 作者: G Gary Guo

Add some comments related to place op typeck

上级 5cedf5df
......@@ -3219,10 +3219,9 @@ pub fn apply_adjustments(&self, expr: &hir::Expr<'_>, adj: Vec<Adjustment<'tcx>>
}
}
// When there is an auto mutable borrow, it is equivalent to `&mut expr`,
// thus `expr` is ought to be typechecked with needs = [`Needs::MutPlace`].
// However in many cases it might not be checked this way originally, e.g.
// the receiver of a method call. We need to fix them up.
// If there is an mutable auto-borrow, it is equivalent to `&mut <expr>`.
// In this case implicit use of `Deref` and `Index` within `<expr>` should
// instead be `DerefMut` and `IndexMut`, so fix those up.
if autoborrow_mut {
self.convert_place_derefs_to_mutable(expr);
}
......
......@@ -11,10 +11,11 @@
use rustc_span::Span;
impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
/// Type-check `*oprnd_expr` with `oprnd_expr` type-checked already.
pub(super) fn lookup_derefing(
&self,
expr: &hir::Expr<'_>,
oprnd: &'tcx hir::Expr<'tcx>,
oprnd_expr: &'tcx hir::Expr<'tcx>,
oprnd_ty: Ty<'tcx>,
) -> Option<Ty<'tcx>> {
if let Some(mt) = oprnd_ty.builtin_deref(true) {
......@@ -25,7 +26,7 @@ pub(super) fn lookup_derefing(
let method = self.register_infer_ok_obligations(ok);
if let ty::Ref(region, _, hir::Mutability::Not) = method.sig.inputs()[0].kind {
self.apply_adjustments(
oprnd,
oprnd_expr,
vec![Adjustment {
kind: Adjust::Borrow(AutoBorrow::Ref(region, AutoBorrowMutability::Not)),
target: method.sig.inputs()[0],
......@@ -39,6 +40,7 @@ pub(super) fn lookup_derefing(
Some(ty)
}
/// Type-check `*base_expr[index_expr]` with `base_expr` and `index_expr` type-checked already.
pub(super) fn lookup_indexing(
&self,
expr: &hir::Expr<'_>,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册