naga::proc::overloads::regular

Struct Regular

Source
pub(super) struct Regular {
    pub arity: usize,
    pub constructors: ConstructorSet,
    pub scalars: ScalarSet,
    pub conclude: ConclusionRule,
}
Expand description

Overload sets represented as sets of scalars and constructors.

This type represents an OverloadSet using a bitset of scalar types and a bitset of type constructors that might be applied to those scalars. The overload set contains a rule for every possible combination of scalars and constructors, essentially the cartesian product of the two sets.

For example, if the arity is 2, set of scalars is { AbstractFloat, f32 }, and the set of constructors is { vec2, vec3 }, then that represents the set of overloads:

  • (vec2<AbstractFloat>, vec2<AbstractFloat>) -> vec2<AbstractFloat>
  • (vec2<f32>, vec2<f32>) -> vec2<f32>
  • (vec3<AbstractFloat>, vec3<AbstractFloat>) -> vec3<AbstractFloat>
  • (vec3<f32>, vec3<f32>) -> vec3<f32>

The conclude value says how to determine the return type from the argument type.

Restrictions:

  • All overloads must take the same number of arguments.

  • For any given overload, all its arguments must have the same type.

Fields§

§arity: usize

The number of arguments in the rules.

§constructors: ConstructorSet

The set of type constructors to apply.

§scalars: ScalarSet

The set of scalars to apply them to.

§conclude: ConclusionRule

How to determine a member rule’s return type given the type of its arguments.

Implementations§

Source§

impl Regular

Source

pub(super) const EMPTY: Regular = _

Source

fn members(&self) -> impl Iterator<Item = (ConstructorSize, Scalar)>

Return an iterator over all the argument types allowed by self.

Return an iterator that produces, for each overload in self, the constructor and scalar of its argument types and return type.

A Regular value can only represent overload sets where, in each overload, all the arguments have the same type, and the return type is always going to be a determined by the argument types, so giving the constructor and scalar is sufficient to characterize the entire rule.

Source

fn rules(&self) -> impl Iterator<Item = Rule>

Trait Implementations§

Source§

impl Clone for Regular

Source§

fn clone(&self) -> Regular

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl ForDebugWithTypes for &Regular

Source§

fn for_debug( self, types: &UniqueArena<Type>, ) -> DiagnosticDebug<(Self, &UniqueArena<Type>)>

Format this type using core::fmt::Debug. Read more
Source§

impl From<Regular> for AnyOverloadSet

Source§

fn from(concrete: Regular) -> Self

Converts to this type from the input type.
Source§

impl OverloadSet for Regular

Source§

fn is_empty(&self) -> bool

Return true if self is the empty set of overloads.
Source§

fn min_arguments(&self) -> usize

Return the smallest number of arguments in any type rule in the set. Read more
Source§

fn max_arguments(&self) -> usize

Return the largest number of arguments in any type rule in the set. Read more
Source§

fn arg(&self, i: usize, ty: &TypeInner, types: &UniqueArena<Type>) -> Self

Find the overloads that could accept a given argument. Read more
Source§

fn concrete_only(self, _types: &UniqueArena<Type>) -> Self

Limit self to overloads whose arguments are all concrete types. Read more
Source§

fn most_preferred(&self) -> Rule

Return the most preferred candidate. Read more
Source§

fn overload_list(&self, _gctx: &GlobalCtx<'_>) -> Vec<Rule>

Return a type rule for each of the overloads in self.
Source§

fn allowed_args(&self, i: usize, _gctx: &GlobalCtx<'_>) -> Vec<TypeResolution>

Return a list of the types allowed for argument i.
Source§

fn for_debug(&self, types: &UniqueArena<Type>) -> impl Debug

Return an object that can be formatted with core::fmt::Debug.

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.