pub(crate) enum TupleArgumentsFlag {
DontTupleArguments,
TupleAllCallArgs,
TupleSplattedSelfArg,
TupleSplattedArg(u8),
}Expand description
Controls whether all arguments are tupled. This is used for the call operator only.
Tupling means that all call-side arguments are packed into a tuple and passed as a single parameter. For example, if tupling is enabled, this function:
fn f(x: (isize, isize)) {}Can be called as:
f(1, 2);Instead of:
f((1, 2));Note: splatted arguments are handled separately.
Variants§
DontTupleArguments
Arguments are typechecked unchanged.
TupleAllCallArgs
This is a call operator: all caller arguments are tupled before typechecking. Set based on the “rust-call” ABI and Fn* traits.
TupleSplattedSelfArg
The self method argument is splatted, so Self should be tupled before typechecking.
TupleSplattedArg(u8)
A non-self argument is splatted, so that argument should be tupled before typechecking.
Implementations§
Source§impl TupleArgumentsFlag
impl TupleArgumentsFlag
Sourcepub(crate) fn rust_fn_trait_call() -> Self
pub(crate) fn rust_fn_trait_call() -> Self
Returns the TupleArgumentsFlag for a known RustCall function.
Sourcepub(crate) fn with_fn_sig_kind<'tcx>(
fn_sig_kind: FnSigKind<'tcx>,
is_method: bool,
) -> Self
pub(crate) fn with_fn_sig_kind<'tcx>( fn_sig_kind: FnSigKind<'tcx>, is_method: bool, ) -> Self
Returns the appropriate TupleArgumentsFlag for the given FnSigKind and method flag.
Sourcepub(crate) fn is_tupled(self) -> bool
pub(crate) fn is_tupled(self) -> bool
Returns true if the arguments are tupled through “rust-call” or splatting.
Sourcepub(crate) fn is_splatted(self) -> bool
pub(crate) fn is_splatted(self) -> bool
Returns true if the arguments are tupled through splatting. (But false if they are “rust-call” or not tupled.)
Sourcepub(crate) fn tupled_arg_index(self) -> (Option<usize>, bool)
pub(crate) fn tupled_arg_index(self) -> (Option<usize>, bool)
Returns the tupled argument index, and whether the self argument is splatted.
Returns None if the arguments are not tupled, or if the self argument is splatted.
Trait Implementations§
Source§impl Clone for TupleArgumentsFlag
impl Clone for TupleArgumentsFlag
Source§fn clone(&self) -> TupleArgumentsFlag
fn clone(&self) -> TupleArgumentsFlag
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for TupleArgumentsFlag
Source§impl Debug for TupleArgumentsFlag
impl Debug for TupleArgumentsFlag
impl Eq for TupleArgumentsFlag
Source§impl PartialEq for TupleArgumentsFlag
impl PartialEq for TupleArgumentsFlag
Source§fn eq(&self, other: &TupleArgumentsFlag) -> bool
fn eq(&self, other: &TupleArgumentsFlag) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for TupleArgumentsFlag
Auto Trait Implementations§
impl DynSend for TupleArgumentsFlag
impl DynSync for TupleArgumentsFlag
impl Freeze for TupleArgumentsFlag
impl RefUnwindSafe for TupleArgumentsFlag
impl Send for TupleArgumentsFlag
impl Sync for TupleArgumentsFlag
impl Unpin for TupleArgumentsFlag
impl UnsafeUnpin for TupleArgumentsFlag
impl UnwindSafe for TupleArgumentsFlag
Blanket Implementations§
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
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<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 moreSource§impl<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> 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>
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: 2 bytes
Size for each variant:
DontTupleArguments: 0 bytesTupleAllCallArgs: 0 bytesTupleSplattedSelfArg: 0 bytesTupleSplattedArg: 1 byte