From 0017f495783324b036ffcaafedf7881725ba1e02 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 20 Jan 2020 07:38:05 +0900 Subject: [PATCH] Replace `walk_callee` with `consume_expr` --- src/librustc_typeck/expr_use_visitor.rs | 60 +------------------------ 1 file changed, 1 insertion(+), 59 deletions(-) diff --git a/src/librustc_typeck/expr_use_visitor.rs b/src/librustc_typeck/expr_use_visitor.rs index 47635209b08..1d3ace933cc 100644 --- a/src/librustc_typeck/expr_use_visitor.rs +++ b/src/librustc_typeck/expr_use_visitor.rs @@ -3,7 +3,6 @@ //! `ExprUseVisitor` determines how expressions are being used. pub use self::ConsumeMode::*; -use self::OverloadedCallType::*; // Export these here so that Clippy can use them. pub use mc::{Place, PlaceBase, Projection}; @@ -48,35 +47,6 @@ pub enum MutateMode { WriteAndRead, // x += y } -#[derive(Copy, Clone)] -enum OverloadedCallType { - FnOverloadedCall, - FnMutOverloadedCall, - FnOnceOverloadedCall, -} - -impl OverloadedCallType { - fn from_trait_id(tcx: TyCtxt<'_>, trait_id: DefId) -> OverloadedCallType { - for &(maybe_function_trait, overloaded_call_type) in &[ - (tcx.lang_items().fn_once_trait(), FnOnceOverloadedCall), - (tcx.lang_items().fn_mut_trait(), FnMutOverloadedCall), - (tcx.lang_items().fn_trait(), FnOverloadedCall), - ] { - match maybe_function_trait { - Some(function_trait) if function_trait == trait_id => return overloaded_call_type, - _ => continue, - } - } - - bug!("overloaded call didn't map to known function trait") - } - - fn from_method_id(tcx: TyCtxt<'_>, method_id: DefId) -> OverloadedCallType { - let method = tcx.associated_item(method_id); - OverloadedCallType::from_trait_id(tcx, method.container.id()) - } -} - /////////////////////////////////////////////////////////////////////////// // The ExprUseVisitor type // @@ -211,7 +181,7 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> { hir::ExprKind::Call(ref callee, ref args) => { // callee(args) - self.walk_callee(expr, callee); + self.consume_expr(callee); self.consume_exprs(args); } @@ -326,34 +296,6 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> { } } - fn walk_callee(&mut self, call: &hir::Expr<'_>, callee: &hir::Expr<'_>) { - let callee_ty = self.mc.tables.expr_ty_adjusted(callee); - debug!("walk_callee: callee={:?} callee_ty={:?}", callee, callee_ty); - match callee_ty.kind { - ty::FnDef(..) | ty::FnPtr(_) | ty::Closure(..) => { - self.consume_expr(callee); - } - ty::Error => {} - _ => { - if let Some(def_id) = self.mc.tables.type_dependent_def_id(call.hir_id) { - match OverloadedCallType::from_method_id(self.tcx(), def_id) { - FnMutOverloadedCall => { - self.borrow_expr(callee, ty::MutBorrow); - } - FnOverloadedCall => { - self.borrow_expr(callee, ty::ImmBorrow); - } - FnOnceOverloadedCall => self.consume_expr(callee), - } - } else { - self.tcx() - .sess - .delay_span_bug(call.span, "no type-dependent def for overloaded call"); - } - } - } - } - fn walk_stmt(&mut self, stmt: &hir::Stmt<'_>) { match stmt.kind { hir::StmtKind::Local(ref local) => {