Skip to content

Commit 5de4a0b

Browse files
committed
All tests passing with resugaring
1 parent 6794a68 commit 5de4a0b

File tree

9 files changed

+176
-385
lines changed

9 files changed

+176
-385
lines changed

src/ast/desugar.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ pub(crate) fn desugar_command(
102102

103103
res
104104
}
105-
Command::Rewrite(ruleset, rewrite, subsume) => {
106-
desugar_rewrite(ruleset, rewrite_name(&rewrite).into(), &rewrite, subsume)
105+
Command::Rewrite(ruleset, ref rewrite, subsume) => {
106+
desugar_rewrite(ruleset, rule_name(&command), rewrite, subsume)
107107
}
108-
Command::BiRewrite(ruleset, rewrite) => {
109-
desugar_birewrite(ruleset, rewrite_name(&rewrite).into(), &rewrite)
108+
Command::BiRewrite(ruleset, ref rewrite) => {
109+
desugar_birewrite(ruleset, rule_name(&command), rewrite)
110110
}
111111
Command::Include(span, file) => {
112112
let s = std::fs::read_to_string(&file)
@@ -120,10 +120,10 @@ pub(crate) fn desugar_command(
120120
Command::Rule {
121121
ruleset,
122122
mut name,
123-
rule,
123+
ref rule,
124124
} => {
125125
if name == "".into() {
126-
name = rule.to_string().replace('\"', "'").into();
126+
name = rule_name(&command);
127127
}
128128

129129
let result = vec![NCommand::NormRule {
@@ -349,6 +349,10 @@ fn desugar_simplify(
349349
res
350350
}
351351

352-
pub(crate) fn rewrite_name(rewrite: &Rewrite) -> String {
353-
rewrite.to_string().replace('\"', "'")
352+
pub fn rule_name<Head, Leaf>(command: &GenericCommand<Head, Leaf>) -> Symbol
353+
where
354+
Head: Clone + Display,
355+
Leaf: Clone + PartialEq + Eq + Hash + Display,
356+
{
357+
command.to_string().replace('\"', "'").into()
354358
}

src/ast/expr.rs

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use super::ToSexp;
21
use crate::{core::ResolvedCall, *};
32
use ordered_float::OrderedFloat;
43
use std::{fmt::Display, hash::Hasher};
@@ -97,12 +96,6 @@ impl Display for ResolvedVar {
9796
}
9897
}
9998

100-
impl ToSexp for ResolvedVar {
101-
fn to_sexp(&self) -> Sexp {
102-
Sexp::Symbol(self.name.to_string())
103-
}
104-
}
105-
10699
pub type Expr = GenericExpr<Symbol, Symbol>;
107100
/// A generated expression is an expression that is generated by the system
108101
/// and does not have annotations.
@@ -250,31 +243,18 @@ impl<Head: Clone + Display, Leaf: Hash + Clone + Display + Eq> GenericExpr<Head,
250243
}
251244
}
252245

253-
impl<Head: Display, Leaf: Display> GenericExpr<Head, Leaf> {
254-
/// Converts this expression into a
255-
/// s-expression (symbolic expression).
256-
/// Example: `(Add (Add 2 3) 4)`
257-
pub fn to_sexp(&self) -> Sexp {
258-
let res = match self {
259-
GenericExpr::Lit(_ann, lit) => Sexp::Symbol(lit.to_string()),
260-
GenericExpr::Var(_ann, v) => Sexp::Symbol(v.to_string()),
261-
GenericExpr::Call(_ann, op, children) => Sexp::List(
262-
vec![Sexp::Symbol(op.to_string())]
263-
.into_iter()
264-
.chain(children.iter().map(|c| c.to_sexp()))
265-
.collect(),
266-
),
267-
};
268-
res
269-
}
270-
}
271-
272246
impl<Head, Leaf> Display for GenericExpr<Head, Leaf>
273247
where
274248
Head: Display,
275249
Leaf: Display,
276250
{
277-
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
278-
write!(f, "{}", self.to_sexp())
251+
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
252+
match self {
253+
GenericExpr::Lit(_ann, lit) => write!(f, "{lit}"),
254+
GenericExpr::Var(_ann, var) => write!(f, "{var}"),
255+
GenericExpr::Call(_ann, op, children) => {
256+
write!(f, "({} {})", op, ListDisplay(children, " "))
257+
}
258+
}
279259
}
280260
}

0 commit comments

Comments
 (0)