update interpreter
This commit is contained in:
parent
dc68ac40b6
commit
bc791e043a
1 changed files with 33 additions and 21 deletions
|
@ -1,4 +1,5 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use zokrates_abi::{Decode, Value};
|
use zokrates_abi::{Decode, Value};
|
||||||
use zokrates_ast::ir::{
|
use zokrates_ast::ir::{
|
||||||
|
@ -175,29 +176,40 @@ impl Interpreter {
|
||||||
.arguments
|
.arguments
|
||||||
.iter()
|
.iter()
|
||||||
.zip(inputs)
|
.zip(inputs)
|
||||||
.map(|(a, v)| {
|
.map(|(a, v)| match &a.id._type {
|
||||||
(
|
zir::Type::FieldElement => Ok((
|
||||||
a.id.id.clone(),
|
a.id.id.clone(),
|
||||||
match &a.id._type {
|
zokrates_ast::zir::FieldElementExpression::Number(v.clone()).into(),
|
||||||
zir::Type::FieldElement => {
|
)),
|
||||||
zokrates_ast::zir::FieldElementExpression::Number(v.clone())
|
zir::Type::Boolean => match v {
|
||||||
.into()
|
v if *v == T::from(0) => Ok((
|
||||||
}
|
a.id.id.clone(),
|
||||||
zir::Type::Boolean => {
|
zokrates_ast::zir::BooleanExpression::Value(false).into(),
|
||||||
zokrates_ast::zir::BooleanExpression::Value(*v == T::from(1))
|
)),
|
||||||
.into()
|
v if *v == T::from(1) => Ok((
|
||||||
}
|
a.id.id.clone(),
|
||||||
zir::Type::Uint(bitwidth) => {
|
zokrates_ast::zir::BooleanExpression::Value(true).into(),
|
||||||
zokrates_ast::zir::UExpressionInner::Value(
|
)),
|
||||||
v.to_dec_string().parse::<u128>().unwrap(),
|
v => Err(format!("`{}` has unexpected value `{}`", a.id, v)),
|
||||||
)
|
},
|
||||||
.annotate(*bitwidth)
|
zir::Type::Uint(bitwidth) => match v.bits() <= bitwidth.to_usize() as u32 {
|
||||||
.into()
|
true => Ok((
|
||||||
}
|
a.id.id.clone(),
|
||||||
},
|
zokrates_ast::zir::UExpressionInner::Value(
|
||||||
)
|
v.to_dec_string().parse::<u128>().unwrap(),
|
||||||
|
)
|
||||||
|
.annotate(*bitwidth)
|
||||||
|
.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);
|
let mut propagator = zokrates_analysis::ZirPropagator::with_constants(constants);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue