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

update interpreter

This commit is contained in:
dark64 2022-11-22 21:57:49 +01:00
parent dc68ac40b6
commit bc791e043a

View file

@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fmt;
use zokrates_abi::{Decode, Value};
use zokrates_ast::ir::{
@ -175,29 +176,40 @@ impl Interpreter {
.arguments
.iter()
.zip(inputs)
.map(|(a, v)| {
(
.map(|(a, v)| match &a.id._type {
zir::Type::FieldElement => Ok((
a.id.id.clone(),
zokrates_ast::zir::FieldElementExpression::Number(v.clone()).into(),
)),
zir::Type::Boolean => match v {
v if *v == T::from(0) => Ok((
a.id.id.clone(),
zokrates_ast::zir::BooleanExpression::Value(false).into(),
)),
v if *v == T::from(1) => Ok((
a.id.id.clone(),
zokrates_ast::zir::BooleanExpression::Value(true).into(),
)),
v => Err(format!("`{}` has unexpected value `{}`", a.id, v)),
},
zir::Type::Uint(bitwidth) => match v.bits() <= bitwidth.to_usize() as u32 {
true => Ok((
a.id.id.clone(),
match &a.id._type {
zir::Type::FieldElement => {
zokrates_ast::zir::FieldElementExpression::Number(v.clone())
.into()
}
zir::Type::Boolean => {
zokrates_ast::zir::BooleanExpression::Value(*v == T::from(1))
.into()
}
zir::Type::Uint(bitwidth) => {
zokrates_ast::zir::UExpressionInner::Value(
v.to_dec_string().parse::<u128>().unwrap(),
)
.annotate(*bitwidth)
.into()
}
.into(),
)),
false => Err(format!(
"`{}` has unexpected bitwidth (got {} but expected {})",
a.id,
v.bits(),
bitwidth
)),
},
)
})
.collect();
.collect::<Result<HashMap<_, _>, _>>()?;
let mut propagator = zokrates_analysis::ZirPropagator::with_constants(constants);