]> git.lizzy.rs Git - rust.git/commitdiff
Add some comments related to place op typeck
authorGary Guo <gary@garyguo.net>
Tue, 16 Jun 2020 21:48:35 +0000 (22:48 +0100)
committerGary Guo <gary@garyguo.net>
Tue, 16 Jun 2020 21:50:21 +0000 (22:50 +0100)
src/librustc_typeck/check/mod.rs
src/librustc_typeck/check/place_op.rs

index b1d32213b729e3a70fa5bee71d311a7da5d23293..fa7dd2156edfa8ca9fc89c09b8740204c5e5e3ff 100644 (file)
@@ -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);
         }
index ce4b6f8baf917116710b4f3c5505deaef1a32dac..d1c22cd1ac03ebe0d18747d73f5a0b6e38198517 100644 (file)
 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<'_>,