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> 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> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreLayout§
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