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>,
}
Expand description

The ExprUseVisitor type

This is the code that actually walks the tree.

Fields

mc: MemCategorizationContext<'a, 'tcx>body_owner: LocalDefIddelegate: &'a mut dyn Delegate<'tcx>

Implementations

Creates the ExprUseVisitor, configuring it with the various options provided:

  • delegate – who receives the callbacks
  • param_env — parameter environment for trait lookups (esp. pertaining to Copy)
  • 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.

Invoke the appropriate delegate calls for anything that gets consumed or borrowed as part of the automatic adjustment process.

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

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Layout

Note: Most layout information is completely unstable and may even differ between compilations. 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