pub struct CallStringResolver<'tcx, 'a> {
cache: Cache<CallString, Instance<'tcx>>,
tcx: TyCtxt<'tcx>,
entrypoint_is_async: bool,
body_cache: &'a BodyCache<'tcx>,
marker_context: MarkerCtx<'tcx>,
base: OnceCell<Instance<'tcx>>,
}
Expand description
Cached resolution of CallString
s to Instance
s.
Only valid for a single controller. Each controller should initialize a new resolver.
Fields§
§cache: Cache<CallString, Instance<'tcx>>
§tcx: TyCtxt<'tcx>
§entrypoint_is_async: bool
§body_cache: &'a BodyCache<'tcx>
§marker_context: MarkerCtx<'tcx>
§base: OnceCell<Instance<'tcx>>
Implementations§
Source§impl<'tcx, 'a> CallStringResolver<'tcx, 'a>
impl<'tcx, 'a> CallStringResolver<'tcx, 'a>
Sourcepub fn resolve(&self, cs: CallString) -> Instance<'tcx>
pub fn resolve(&self, cs: CallString) -> Instance<'tcx>
Tries to resolve to the monomophized function in which this call
site exists. That is to say that return.def_id() == cs.leaf().function
.
Unlike Self::resolve_internal
this can be called on any valid
CallString
.
pub fn new( tcx: TyCtxt<'tcx>, entrypoint: Endpoint, body_cache: &'a BodyCache<'tcx>, marker_context: MarkerCtx<'tcx>, ) -> Self
Sourcefn resolve_internal(&self, cs: CallString) -> Instance<'tcx>
fn resolve_internal(&self, cs: CallString) -> Instance<'tcx>
This resolves the monomorphized function being called at this call site.
This function is internal because it panics if cs.leaf().location
is not either a function call or a statement where an async closure
is created and assigned.
Auto Trait Implementations§
impl<'tcx, 'a> !Freeze for CallStringResolver<'tcx, 'a>
impl<'tcx, 'a> !RefUnwindSafe for CallStringResolver<'tcx, 'a>
impl<'tcx, 'a> !Send for CallStringResolver<'tcx, 'a>
impl<'tcx, 'a> !Sync for CallStringResolver<'tcx, 'a>
impl<'tcx, 'a> Unpin for CallStringResolver<'tcx, 'a>
impl<'tcx, 'a> !UnwindSafe for CallStringResolver<'tcx, 'a>
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
Mutably borrows from an owned value. Read more
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>
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 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>
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