more aggressive propagation
This commit is contained in:
parent
a40cc6eed8
commit
fa14e382b0
3 changed files with 9 additions and 10 deletions
|
@ -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)))
|
||||
}
|
||||
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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> {
|
||||
|
|
Loading…
Reference in a new issue