Struct ra_ap_hir_ty::Adjustment
source · [−]Expand description
Represents coercing a value to a different type of value.
We transform values by following a number of Adjust
steps in order.
See the documentation on variants of Adjust
for more details.
Here are some common scenarios:
-
The simplest cases are where a pointer is not adjusted fat vs thin. Here the pointer will be dereferenced N times (where a dereference can happen to raw or borrowed pointers or any smart pointer which implements Deref, including Box<_>). The types of dereferences is given by
autoderefs
. It can then be auto-referenced zero or one times, indicated byautoref
, to either a raw or borrowed pointer. In these cases unsize isfalse
. -
A thin-to-fat coercion involves unsizing the underlying data. We start with a thin pointer, deref a number of times, unsize the underlying data, then autoref. The ‘unsize’ phase may change a fixed length array to a dynamically sized one, a concrete object to a trait object, or statically sized struct to a dynamically sized one. E.g., &[i32; 4] -> &i32 is represented by:
Deref(None) -> [i32; 4], Borrow(AutoBorrow::Ref) -> &[i32; 4], Unsize -> &[i32],
Note that for a struct, the ‘deep’ unsizing of the struct is not recorded. E.g.,
struct Foo<T> { x: T }
we can coerce &Foo<[i32; 4]> to &Foo<i32> The autoderef and -ref are the same as in the above example, but the type stored inunsize
isFoo<[i32]>
, we don’t store any further detail about the underlying conversions from[i32; 4]
to[i32]
. -
Coercing a
Box<T>
toBox<dyn Trait>
is an interesting special case. In that case, we have the pointer we need coming in, so there are no autoderefs, and no autoref. Instead we just do theUnsize
transformation. At some point, of course,Box
should move out of the compiler, in which case this is analogous to transforming a struct. E.g., Box<[i32; 4]> -> Box<i32> is anAdjust::Unsize
with the targetBox<[i32]>
.
Fields
kind: Adjust
target: Ty
Trait Implementations
sourceimpl Clone for Adjustment
impl Clone for Adjustment
sourcefn clone(&self) -> Adjustment
fn clone(&self) -> Adjustment
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for Adjustment
impl Debug for Adjustment
sourceimpl Hash for Adjustment
impl Hash for Adjustment
sourceimpl PartialEq<Adjustment> for Adjustment
impl PartialEq<Adjustment> for Adjustment
sourcefn eq(&self, other: &Adjustment) -> bool
fn eq(&self, other: &Adjustment) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &Adjustment) -> bool
fn ne(&self, other: &Adjustment) -> bool
This method tests for !=
.
impl Eq for Adjustment
impl StructuralEq for Adjustment
impl StructuralPartialEq for Adjustment
Auto Trait Implementations
impl RefUnwindSafe for Adjustment
impl Send for Adjustment
impl Sync for Adjustment
impl Unpin for Adjustment
impl UnwindSafe for Adjustment
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Cast for T
impl<T> Cast for T
sourcefn cast<U>(self, interner: <U as HasInterner>::Interner) -> U where
Self: CastTo<U>,
U: HasInterner,
fn cast<U>(self, interner: <U as HasInterner>::Interner) -> U where
Self: CastTo<U>,
U: HasInterner,
Cast a value to type U
using CastTo
.
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more