1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00

more aggressive propagation

This commit is contained in:
schaeff 2022-01-11 17:22:04 +01:00
parent a40cc6eed8
commit fa14e382b0
3 changed files with 9 additions and 10 deletions

View file

@ -1133,7 +1133,7 @@ impl<'ast, 'a, T: Field> ResultFolder<'ast, T> for Propagator<'ast, 'a, T> {
}
}
fn fold_eq_expression<E: Expr<'ast, T> + Typed<'ast, T> + ResultFold<'ast, T>>(
fn fold_eq_expression<E: Expr<'ast, T> + PartialEq + Typed<'ast, T> + ResultFold<'ast, T>>(
&mut self,
e: EqExpression<E>,
) -> Result<EqOrBoolean<'ast, T, E>, Self::Error> {
@ -1152,6 +1152,10 @@ impl<'ast, 'a, T: Field> ResultFolder<'ast, T> for Propagator<'ast, 'a, T> {
}
};
if left == right {
return Ok(EqOrBoolean::Boolean(BooleanExpression::Value(true)));
}
Ok(EqOrBoolean::Eq(EqExpression::new(left, right)))
}

View file

@ -315,7 +315,7 @@ pub trait Folder<'ast, T: Field>: Sized {
fold_member_expression(self, ty, e)
}
fn fold_eq_expression<E: Expr<'ast, T> + Fold<'ast, T>>(
fn fold_eq_expression<E: Expr<'ast, T> + PartialEq + Fold<'ast, T>>(
&mut self,
e: EqExpression<E>,
) -> EqOrBoolean<'ast, T, E> {
@ -691,7 +691,7 @@ pub fn fold_member_expression<
))
}
pub fn fold_eq_expression<'ast, T: Field, E: Expr<'ast, T> + Fold<'ast, T>, F: Folder<'ast, T>>(
pub fn fold_eq_expression<'ast, T: Field, E: Fold<'ast, T>, F: Folder<'ast, T>>(
f: &mut F,
e: EqExpression<E>,
) -> EqOrBoolean<'ast, T, E> {

View file

@ -218,7 +218,7 @@ pub trait ResultFolder<'ast, T: Field>: Sized {
fold_member_expression(self, ty, e)
}
fn fold_eq_expression<E: Expr<'ast, T> + Typed<'ast, T> + ResultFold<'ast, T>>(
fn fold_eq_expression<E: Expr<'ast, T> + Typed<'ast, T> + PartialEq + ResultFold<'ast, T>>(
&mut self,
e: EqExpression<E>,
) -> Result<EqOrBoolean<'ast, T, E>, Self::Error> {
@ -743,12 +743,7 @@ pub fn fold_member_expression<
)))
}
pub fn fold_eq_expression<
'ast,
T: Field,
E: Expr<'ast, T> + ResultFold<'ast, T>,
F: ResultFolder<'ast, T>,
>(
pub fn fold_eq_expression<'ast, T: Field, E: ResultFold<'ast, T>, F: ResultFolder<'ast, T>>(
f: &mut F,
e: EqExpression<E>,
) -> Result<EqOrBoolean<'ast, T, E>, F::Error> {