Skip to content

Commit

Permalink
use Subdatatypes than Result
Browse files Browse the repository at this point in the history
  • Loading branch information
yihozhang committed Oct 10, 2024
1 parent 820631a commit e331da6
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 11 deletions.
14 changes: 9 additions & 5 deletions src/ast/desugar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,24 +49,28 @@ pub(crate) fn desugar_command(
for datatype in datatypes.iter() {
let span = datatype.0.clone();
let name = datatype.1;
if datatype.2.is_ok() {
if let Subdatatypes::NewSort(..) = datatype.2 {
res.push(NCommand::Sort(span, name, None));
}
}
let (variants_vec, sorts): (Vec<_>, Vec<_>) = datatypes
.into_iter()
.partition(|datatype| datatype.2.is_ok());
.partition(|datatype| matches!(datatype.2, Subdatatypes::NewSort(..)));

for sort in sorts {
let span = sort.0.clone();
let name = sort.1;
let constructor = sort.2.unwrap_err();
res.push(NCommand::Sort(span, name, Some(constructor)));
let Subdatatypes::NewSort(sort, args) = sort.2 else {
unreachable!()
};
res.push(NCommand::Sort(span, name, Some((sort, args))));
}

for variants in variants_vec {
let datatype = variants.1;
let variants = variants.2.unwrap();
let Subdatatypes::Variants(variants) = variants.2 else {
unreachable!();
};
for variant in variants {
res.push(NCommand::Function(FunctionDecl {
name: variant.name,
Expand Down
12 changes: 9 additions & 3 deletions src/ast/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,11 @@ pub type Command = GenericCommand<Symbol, Symbol>;

pub type Subsume = bool;

pub type Subdatatypes = Result<Vec<Variant>, (Symbol, Vec<Expr>)>;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Subdatatypes {
Variants(Vec<Variant>),
NewSort(Symbol, Vec<Expr>),
}

/// A [`Command`] is the top-level construct in egglog.
/// It includes defining rules, declaring functions,
Expand Down Expand Up @@ -893,8 +897,10 @@ where
let datatypes: Vec<_> = datatypes
.iter()
.map(|(_, name, variants)| match variants {
Ok(variants) => list!(name, ++ variants),
Err((head, args)) => list!("sort", name, list!(head, ++ args)),
Subdatatypes::Variants(variants) => list!(name, ++ variants),
Subdatatypes::NewSort(head, args) => {
list!("sort", name, list!(head, ++ args))
}
})
.collect();
list!("datatypes", ++ datatypes)
Expand Down
6 changes: 3 additions & 3 deletions src/ast/parse.lalrpop
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ Comma<T>: Vec<T> = {
}
};

RecDatatype: (Span, Symbol, Result<Vec<Variant>, (Symbol, Vec<Expr>)>) = {
<lo:LParen> <name:Ident> <variants:(Variant)*> <hi:RParen> => (Span(srcfile.clone(), lo, hi), name, Ok(variants)),
<lo:LParen> "sort" <name:Ident> LParen <head:Ident> <exprs:(Expr)*> RParen <hi:RParen> => (Span(srcfile.clone(), lo, hi), name, Err((head, exprs))),
RecDatatype: (Span, Symbol, Subdatatypes) = {
<lo:LParen> <name:Ident> <variants:(Variant)*> <hi:RParen> => (Span(srcfile.clone(), lo, hi), name, Subdatatypes::Variants(variants)),
<lo:LParen> "sort" <name:Ident> LParen <head:Ident> <exprs:(Expr)*> RParen <hi:RParen> => (Span(srcfile.clone(), lo, hi), name, Subdatatypes::NewSort(head, exprs)),
}

Command: Command = {
Expand Down

0 comments on commit e331da6

Please sign in to comment.