Struct rustc_typeck::expr_use_visitor::ExprUseVisitor [−][src]
pub struct ExprUseVisitor<'a, 'tcx> {
mc: MemCategorizationContext<'a, 'tcx>,
body_owner: LocalDefId,
delegate: &'a mut dyn Delegate<'tcx>,
}Fields
mc: MemCategorizationContext<'a, 'tcx>body_owner: LocalDefIddelegate: &'a mut dyn Delegate<'tcx>Implementations
pub fn new(
delegate: &'a mut (dyn Delegate<'tcx> + 'a),
infcx: &'a InferCtxt<'a, 'tcx>,
body_owner: LocalDefId,
param_env: ParamEnv<'tcx>,
typeck_results: &'a TypeckResults<'tcx>
) -> Self
pub fn new(
delegate: &'a mut (dyn Delegate<'tcx> + 'a),
infcx: &'a InferCtxt<'a, 'tcx>,
body_owner: LocalDefId,
param_env: ParamEnv<'tcx>,
typeck_results: &'a TypeckResults<'tcx>
) -> Self
Creates the ExprUseVisitor, configuring it with the various options provided:
delegate– who receives the callbacksparam_env— parameter environment for trait lookups (esp. pertaining toCopy)typeck_results— typeck results for the code being analyzed
Indicates that the value of blk will be consumed, meaning either copied or moved
depending on its type.
fn walk_autoref(
&mut self,
expr: &Expr<'_>,
base_place: &PlaceWithHirId<'tcx>,
autoref: &AutoBorrow<'tcx>
)
fn walk_autoref(
&mut self,
expr: &Expr<'_>,
base_place: &PlaceWithHirId<'tcx>,
autoref: &AutoBorrow<'tcx>
)
Walks the autoref autoref applied to the autoderef’d
expr. base_place is the mem-categorized form of expr
after all relevant autoderefs have occurred.
Walks a pat that occurs in isolation (i.e., top-level of fn argument or let binding, and not a match arm or nested pat.)
The core driver for walking a pattern
Handle the case where the current body contains a closure.
When the current body being handled is a closure, then we must make sure that
- The parent closure only captures Places from the nested closure that are not local to it.
In the following example the closures c only captures p.x even though incr
is a capture of the nested closure
let p = ..; let c = || { let incr = 10; let nested = || p.x += incr; }
- When reporting the Place back to the Delegate, ensure that the UpvarId uses the enclosing closure as the DefId.
Auto Trait Implementations
impl<'a, 'tcx> !RefUnwindSafe for ExprUseVisitor<'a, 'tcx>
impl<'a, 'tcx> !Send for ExprUseVisitor<'a, 'tcx>
impl<'a, 'tcx> !Sync for ExprUseVisitor<'a, 'tcx>
impl<'a, 'tcx> Unpin for ExprUseVisitor<'a, 'tcx> where
'tcx: 'a,
impl<'a, 'tcx> !UnwindSafe for ExprUseVisitor<'a, 'tcx>
Blanket Implementations
Layout
Note: Most layout information is completely unstable and may be different between compiler versions and platforms. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 64 bytes