Struct clippy_utils::consts::ConstEvalLateContext
source · pub struct ConstEvalLateContext<'a, 'tcx> {
lcx: &'a LateContext<'tcx>,
typeck_results: &'a TypeckResults<'tcx>,
param_env: ParamEnv<'tcx>,
source: ConstantSource,
args: GenericArgsRef<'tcx>,
}
Fields§
§lcx: &'a LateContext<'tcx>
§typeck_results: &'a TypeckResults<'tcx>
§param_env: ParamEnv<'tcx>
§source: ConstantSource
§args: GenericArgsRef<'tcx>
Implementations§
source§impl<'a, 'tcx> ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> ConstEvalLateContext<'a, 'tcx>
pub fn new( lcx: &'a LateContext<'tcx>, typeck_results: &'a TypeckResults<'tcx> ) -> Self
sourcepub fn expr(&mut self, e: &Expr<'_>) -> Option<Constant<'tcx>>
pub fn expr(&mut self, e: &Expr<'_>) -> Option<Constant<'tcx>>
Simple constant folding: Insert an expression, get a constant or none.
sourcepub fn expr_is_empty(&mut self, e: &Expr<'_>) -> Option<bool>
pub fn expr_is_empty(&mut self, e: &Expr<'_>) -> Option<bool>
Simple constant folding to determine if an expression is an empty slice, str, array, …
None
will be returned if the constness cannot be determined, or if the resolution
leaves the local crate.
fn constant_not(&self, o: &Constant<'tcx>, ty: Ty<'_>) -> Option<Constant<'tcx>>
fn constant_negate( &self, o: &Constant<'tcx>, ty: Ty<'_> ) -> Option<Constant<'tcx>>
sourcefn multi(&mut self, vec: &[Expr<'_>]) -> Option<Vec<Constant<'tcx>>>
fn multi(&mut self, vec: &[Expr<'_>]) -> Option<Vec<Constant<'tcx>>>
Create Some(Vec![..])
of all constants, unless there is any
non-constant part.
sourcefn fetch_path_and_apply<T, F>(
&mut self,
qpath: &QPath<'_>,
id: HirId,
ty: Ty<'tcx>,
f: F
) -> Option<T>
fn fetch_path_and_apply<T, F>( &mut self, qpath: &QPath<'_>, id: HirId, ty: Ty<'tcx>, f: F ) -> Option<T>
Lookup a possibly constant expression from an ExprKind::Path
and apply a function on it.
fn index(&mut self, lhs: &Expr<'_>, index: &Expr<'_>) -> Option<Constant<'tcx>>
sourcefn block(&mut self, block: &Block<'_>) -> Option<Constant<'tcx>>
fn block(&mut self, block: &Block<'_>) -> Option<Constant<'tcx>>
A block can only yield a constant if it only has one constant expression.
fn ifthenelse( &mut self, cond: &Expr<'_>, then: &Expr<'_>, otherwise: Option<&Expr<'_>> ) -> Option<Constant<'tcx>>
fn binop( &mut self, op: BinOp, left: &Expr<'_>, right: &Expr<'_> ) -> Option<Constant<'tcx>>
Auto Trait Implementations§
impl<'a, 'tcx> !DynSend for ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> !DynSync for ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> Freeze for ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> !RefUnwindSafe for ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> !Send for ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> !Sync for ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> Unpin for ConstEvalLateContext<'a, 'tcx>
impl<'a, 'tcx> !UnwindSafe for ConstEvalLateContext<'a, 'tcx>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
§impl<T> Filterable for T
impl<T> Filterable for T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed ) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
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: 40 bytes