From 230e8f0e84f7b123c91b53382aaa00089033552d Mon Sep 17 00:00:00 2001 From: schaeff Date: Mon, 26 Sep 2022 15:22:13 +0200 Subject: [PATCH] fix utils --- zokrates_ast/src/typed/utils/mod.rs | 23 +++++++++++++++++-- .../boolean_array_comparator.rs | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/zokrates_ast/src/typed/utils/mod.rs b/zokrates_ast/src/typed/utils/mod.rs index 1603d043..3720113c 100644 --- a/zokrates_ast/src/typed/utils/mod.rs +++ b/zokrates_ast/src/typed/utils/mod.rs @@ -1,6 +1,7 @@ use super::{ - ArrayExpression, ArrayExpressionInner, BooleanExpression, Conditional, ConditionalKind, - FieldElementExpression, Identifier, Select, UBitwidth, UExpression, UExpressionInner, + ArrayExpression, ArrayExpressionInner, ArrayValue, BooleanExpression, Conditional, + ConditionalKind, Expr, FieldElementExpression, Identifier, Select, Typed, TypedExpression, + TypedExpressionOrSpread, UBitwidth, UExpression, UExpressionInner, }; pub fn f<'ast, T, U: TryInto>(v: U) -> FieldElementExpression<'ast, T> { @@ -11,6 +12,24 @@ pub fn a_id<'ast, T, I: TryInto>>(v: I) -> ArrayExpressionInner ArrayExpressionInner::Identifier(v.try_into().map_err(|_| ()).unwrap()) } +pub fn a< + 'ast, + T, + E: Typed<'ast, T> + Expr<'ast, T> + Into>, + const N: usize, +>( + values: [E; N], +) -> ArrayExpression<'ast, T> { + let ty = values[0].get_type(); + ArrayExpressionInner::Value(ArrayValue( + values + .into_iter() + .map(|e| TypedExpressionOrSpread::Expression(e.into())) + .collect(), + )) + .annotate(ty, N as u32) +} + pub fn u_32<'ast, T, U: TryInto>(v: U) -> UExpression<'ast, T> { UExpressionInner::Value(v.try_into().map_err(|_| ()).unwrap() as u128).annotate(UBitwidth::B32) } diff --git a/zokrates_core/src/static_analysis/boolean_array_comparator.rs b/zokrates_core/src/static_analysis/boolean_array_comparator.rs index b3530b50..f33d07b4 100644 --- a/zokrates_core/src/static_analysis/boolean_array_comparator.rs +++ b/zokrates_core/src/static_analysis/boolean_array_comparator.rs @@ -109,7 +109,7 @@ impl<'ast, T: Field> Folder<'ast, T> for BooleanArrayComparator { #[cfg(test)] mod tests { - use zokrates_ast::typed::{BooleanExpression, EqExpression, FieldElementExpression, Type}; + use zokrates_ast::typed::{BooleanExpression, EqExpression, Type}; use zokrates_field::DummyCurveField; use zokrates_ast::typed::utils::{a, a_id, conditional, f, select, u_32};