Skip to content

Commit

Permalink
Replace walk_callee with consume_expr
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnTitor committed Jan 19, 2020
1 parent 2ecc48f commit 0017f49
Showing 1 changed file with 1 addition and 59 deletions.
60 changes: 1 addition & 59 deletions src/librustc_typeck/expr_use_visitor.rs
Expand Up @@ -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};
Expand Down Expand Up @@ -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
//
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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) => {
Expand Down

0 comments on commit 0017f49

Please sign in to comment.