pub enum GenericAction<Head, Leaf>{
Let(Span, Leaf, GenericExpr<Head, Leaf>),
Set(Span, Head, Vec<GenericExpr<Head, Leaf>>, GenericExpr<Head, Leaf>),
Change(Span, Change, Head, Vec<GenericExpr<Head, Leaf>>),
Union(Span, GenericExpr<Head, Leaf>, GenericExpr<Head, Leaf>),
Panic(Span, String),
Expr(Span, GenericExpr<Head, Leaf>),
}
Variants§
Let(Span, Leaf, GenericExpr<Head, Leaf>)
Bind a variable to a particular datatype or primitive.
At the top level (in a Command::Action
), this defines a global variable.
In a Command::Rule
, this defines a local variable in the actions.
Set(Span, Head, Vec<GenericExpr<Head, Leaf>>, GenericExpr<Head, Leaf>)
set
a function to a particular result.
set
should not be used on datatypes-
instead, use union
.
Change(Span, Change, Head, Vec<GenericExpr<Head, Leaf>>)
Delete or subsume (mark as hidden from future rewrites and unextractable) an entry from a function.
Union(Span, GenericExpr<Head, Leaf>, GenericExpr<Head, Leaf>)
union
two datatypes, making them equal
in the implicit, global equality relation
of egglog.
All rules match modulo this equality relation.
Example:
(datatype Math (Num i64))
(union (Num 1) (Num 2)); Define that Num 1 and Num 2 are equivalent
(extract (Num 1)); Extracts Num 1
(extract (Num 2)); Extracts Num 1
Panic(Span, String)
Expr(Span, GenericExpr<Head, Leaf>)
Implementations§
Source§impl<Head, Leaf> GenericAction<Head, Leaf>
impl<Head, Leaf> GenericAction<Head, Leaf>
pub fn map_exprs( &self, f: &mut impl FnMut(&GenericExpr<Head, Leaf>) -> GenericExpr<Head, Leaf>, ) -> Self
Sourcepub fn visit_exprs(
self,
f: &mut impl FnMut(GenericExpr<Head, Leaf>) -> GenericExpr<Head, Leaf>,
) -> Self
pub fn visit_exprs( self, f: &mut impl FnMut(GenericExpr<Head, Leaf>) -> GenericExpr<Head, Leaf>, ) -> Self
Applys f
to all sub-expressions (including self
)
bottom-up, collecting the results.
pub fn subst( &self, subst: &mut impl FnMut(&Span, &Leaf) -> GenericExpr<Head, Leaf>, ) -> Self
pub fn map_def_use(self, fvar: &mut impl FnMut(Leaf, bool) -> Leaf) -> Self
Trait Implementations§
Source§impl<Head, Leaf> Clone for GenericAction<Head, Leaf>
impl<Head, Leaf> Clone for GenericAction<Head, Leaf>
Source§fn clone(&self) -> GenericAction<Head, Leaf>
fn clone(&self) -> GenericAction<Head, Leaf>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<Head, Leaf> Debug for GenericAction<Head, Leaf>
impl<Head, Leaf> Debug for GenericAction<Head, Leaf>
Source§impl<Head, Leaf> Display for GenericAction<Head, Leaf>
impl<Head, Leaf> Display for GenericAction<Head, Leaf>
Source§impl<Head, Leaf> Hash for GenericAction<Head, Leaf>
impl<Head, Leaf> Hash for GenericAction<Head, Leaf>
Source§impl<Head, Leaf> PartialEq for GenericAction<Head, Leaf>
impl<Head, Leaf> PartialEq for GenericAction<Head, Leaf>
impl<Head, Leaf> Eq for GenericAction<Head, Leaf>
impl<Head, Leaf> StructuralPartialEq for GenericAction<Head, Leaf>
Auto Trait Implementations§
impl<Head, Leaf> Freeze for GenericAction<Head, Leaf>
impl<Head, Leaf> RefUnwindSafe for GenericAction<Head, Leaf>where
Leaf: RefUnwindSafe,
Head: RefUnwindSafe,
impl<Head, Leaf> Send for GenericAction<Head, Leaf>
impl<Head, Leaf> Sync for GenericAction<Head, Leaf>
impl<Head, Leaf> Unpin for GenericAction<Head, Leaf>
impl<Head, Leaf> UnwindSafe for GenericAction<Head, Leaf>where
Leaf: UnwindSafe,
Head: UnwindSafe,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. 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