Skip to content

Commit

Permalink
Add some comments related to place op typeck
Browse files Browse the repository at this point in the history
  • Loading branch information
nbdd0121 committed Jun 16, 2020
1 parent 5cedf5d commit 2b7d858
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 6 deletions.
7 changes: 3 additions & 4 deletions src/librustc_typeck/check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3219,10 +3219,9 @@ impl<'a, 'tcx> FnCtxt<'a, '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);
}
Expand Down
6 changes: 4 additions & 2 deletions src/librustc_typeck/check/place_op.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ use rustc_span::symbol::{sym, Ident};
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) {
Expand All @@ -25,7 +26,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
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],
Expand All @@ -39,6 +40,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
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<'_>,
Expand Down

0 comments on commit 2b7d858

Please sign in to comment.