Enum egglog::ast::GenericAction
source · 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>),
Extract(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
Extract(Span, GenericExpr<Head, Leaf>, GenericExpr<Head, Leaf>)
extract
a datatype from the egraph, choosing
the smallest representative.
By default, each constructor costs 1 to extract
(common subexpressions are not shared in the cost
model).
The second argument is the number of variants to
extract, picking different terms in the
same equivalence class.
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>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
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>
source§fn eq(&self, other: &GenericAction<Head, Leaf>) -> bool
fn eq(&self, other: &GenericAction<Head, Leaf>) -> bool
self
and other
values to be equal, and is used
by ==
.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
§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
key
and return true
if they are equal.