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 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);