Struct PartialSymbolStack

Source
#[repr(C)]
pub struct PartialSymbolStack { /* private fields */ }
Expand description

A pattern that might match against a symbol stack. Consists of a (possibly empty) list of partial scoped symbols, along with an optional symbol stack variable.

Implementations§

Source§

impl PartialSymbolStack

Source

pub fn can_match_empty(&self) -> bool

Returns whether this partial symbol stack can match the empty symbol stack.

Source

pub fn can_only_match_empty(&self) -> bool

Returns whether this partial symbol stack can only match the empty symbol stack.

Source

pub fn contains_symbols(&self) -> bool

Returns whether this partial symbol stack contains any symbols.

Source

pub fn has_variable(&self) -> bool

Returns whether this partial symbol stack has a symbol stack variable.

Source

pub fn len(&self) -> usize

Source

pub fn empty() -> PartialSymbolStack

Returns an empty partial symbol stack.

Source

pub fn from_variable(variable: SymbolStackVariable) -> PartialSymbolStack

Returns a partial symbol stack containing only a symbol stack variable.

Source

pub fn have_reversal(&self, partials: &PartialPaths) -> bool

Returns whether this partial symbol stack is iterable in both directions without needing mutable access to the arena.

Source

pub fn with_offset( self, partials: &mut PartialPaths, symbol_variable_offset: u32, scope_variable_offset: u32, ) -> PartialSymbolStack

Applies an offset to this partial symbol stack.

When concatenating partial paths, we have to ensure that the left- and right-hand sides have non-overlapping sets of variables. To do this, we find the maximum value of any variable on the left-hand side, and add this “offset” to the values of all of the variables on the right-hand side.

Source

pub fn push_front( &mut self, partials: &mut PartialPaths, symbol: PartialScopedSymbol, )

Pushes a new PartialScopedSymbol onto the front of this partial symbol stack.

Source

pub fn push_back( &mut self, partials: &mut PartialPaths, symbol: PartialScopedSymbol, )

Pushes a new PartialScopedSymbol onto the back of this partial symbol stack.

Source

pub fn pop_front( &mut self, partials: &mut PartialPaths, ) -> Option<PartialScopedSymbol>

Removes and returns the PartialScopedSymbol at the front of this partial symbol stack. If the stack is empty, returns None.

Source

pub fn pop_back( &mut self, partials: &mut PartialPaths, ) -> Option<PartialScopedSymbol>

Removes and returns the PartialScopedSymbol at the back of this partial symbol stack. If the stack is empty, returns None.

Source

pub fn display<'a>( self, graph: &'a StackGraph, partials: &'a mut PartialPaths, ) -> impl Display + 'a

Source

pub fn matches( self, partials: &mut PartialPaths, other: PartialSymbolStack, ) -> bool

Returns whether two partial symbol stacks “match”. They must be the same length, and each respective partial scoped symbol must match.

Source

pub fn apply_partial_bindings( self, partials: &mut PartialPaths, symbol_bindings: &PartialSymbolStackBindings, scope_bindings: &PartialScopeStackBindings, ) -> Result<PartialSymbolStack, PathResolutionError>

Applies a set of bindings to this partial symbol stack, producing a new partial symbol stack.

Source

pub fn unify( self, partials: &mut PartialPaths, rhs: PartialSymbolStack, symbol_bindings: &mut PartialSymbolStackBindings, scope_bindings: &mut PartialScopeStackBindings, ) -> Result<PartialSymbolStack, PathResolutionError>

Given two partial symbol stacks, returns the largest possible partial symbol stack such that any symbol stack that satisfies the result also satisfies both inputs. This takes into account any existing variable assignments, and updates those variable assignments with whatever constraints are necessary to produce a correct result.

Note that this operation is commutative. (Concatenating partial paths, defined in PartialPath::concatenate, is not.)

Source

pub fn equals( self, partials: &mut PartialPaths, other: PartialSymbolStack, ) -> bool

Source

pub fn cmp( self, graph: &StackGraph, partials: &mut PartialPaths, other: PartialSymbolStack, ) -> Ordering

Source

pub fn iter<'a>( &self, partials: &'a mut PartialPaths, ) -> impl Iterator<Item = PartialScopedSymbol> + 'a

Returns an iterator over the contents of this partial symbol stack.

Source

pub fn iter_unordered<'a>( &self, partials: &'a PartialPaths, ) -> impl Iterator<Item = PartialScopedSymbol> + 'a

Returns an iterator over the contents of this partial symbol stack, with no guarantee about the ordering of the elements.

Source

pub fn variable(&self) -> Option<SymbolStackVariable>

Source

pub fn largest_symbol_stack_variable(&self) -> u32

Returns the largest value of any symbol stack variable in this partial symbol stack.

Source

pub fn largest_scope_stack_variable(&self, partials: &PartialPaths) -> u32

Returns the largest value of any scope stack variable in this partial symbol stack.

Trait Implementations§

Source§

impl Clone for PartialSymbolStack

Source§

fn clone(&self) -> PartialSymbolStack

Returns a duplicate 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 From<PartialSymbolStack> for sg_partial_symbol_stack

Source§

fn from(stack: PartialSymbolStack) -> sg_partial_symbol_stack

Converts to this type from the input type.
Source§

impl Niche for PartialSymbolStack

Source§

type Output = MaybeUninit<PartialSymbolStack>

The type that is used to store values of Self inside of a ControlledOption. This might be Self itself, if your niche is a valid instance of the type, but which violates some runtime constraint. But if you cannot easily create your niche as an instance of Self, you can use some other type, you can use some other type instead. Read more
Source§

fn none() -> Self::Output

Returns the niche value for this type that should be used to represent None for a ControlledOption.
Source§

fn is_none(value: &Self::Output) -> bool

Returns whether value is the niche value for this type.
Source§

fn into_some(value: Self) -> Self::Output

Transforms a non-niche value of this type into its Output type. When Output is Self, this will be the identity function.
Source§

fn from_some(value: Self::Output) -> Self

Transforms a non-niche value of this type from its Output type. When Output is Self, this will be the identity function.
Source§

impl Copy for PartialSymbolStack

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, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.