paralegal_flow::ana::inline_judge

Struct SafetyChecker

Source
struct SafetyChecker<'tcx> {
    tcx: TyCtxt<'tcx>,
    emit_err: bool,
    typing_env: TypingEnv<'tcx>,
    resolved: Instance<'tcx>,
    call_span: Span,
    marker_ctx: MarkerCtx<'tcx>,
    reason: &'static str,
}
Expand description

A check for the abstraction safety of a given instance.

It looks at each trait predicate on the function and how they are instantiated, then checks the methods defined on those traits and whether they may attach markers. Each time a potential marker is found a diagnostic message is emitted.

The main entrypoint is Self::check.

Fields§

§tcx: TyCtxt<'tcx>§emit_err: bool

Emit errors if true, otherwise emit warnings

§typing_env: TypingEnv<'tcx>§resolved: Instance<'tcx>

Instance under scrutiny

§call_span: Span§marker_ctx: MarkerCtx<'tcx>§reason: &'static str

Why a call we check wasn’t inlined

Implementations§

Source§

impl<'tcx> SafetyChecker<'tcx>

Source

fn err(&self, s: &str, span: Span)

Emit an error or a warning with some preformatted messaging.

Source

fn err_markers(&self, s: &str, markers: &[Identifier], span: Span)

Emit an error that mentions the markers found

Source

fn check_projection_predicate( &self, predicate: &ProjectionPredicate<'tcx>, span: Span, )

Source

fn check_trait_predicate(&self, predicate: &TraitPredicate<'tcx>, span: Span)

Source

fn check_impl(&self, impl: DefId, span: Span)

Source

fn check_predicate(&self, clause: Clause<'tcx>, span: Span)

Source

fn check(&self)

Main entry point for the check

Auto Trait Implementations§

§

impl<'tcx> Freeze for SafetyChecker<'tcx>

§

impl<'tcx> !RefUnwindSafe for SafetyChecker<'tcx>

§

impl<'tcx> !Send for SafetyChecker<'tcx>

§

impl<'tcx> !Sync for SafetyChecker<'tcx>

§

impl<'tcx> Unpin for SafetyChecker<'tcx>

§

impl<'tcx> !UnwindSafe for SafetyChecker<'tcx>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Captures<'_> for T
where T: ?Sized,