diff --git a/Cargo.toml b/Cargo.toml index 6d5113a4c..7ae638899 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -99,7 +99,7 @@ required-features = ["smt", "zokc"] [[example]] name = "zxc" -required-features = ["smt", "zok"] +required-features = ["smt", "zok", "r1cs"] [[example]] name = "opa_bench" diff --git a/src/front/datalog/error.rs b/src/front/datalog/error.rs index 3e8023fc0..be401f332 100644 --- a/src/front/datalog/error.rs +++ b/src/front/datalog/error.rs @@ -29,7 +29,7 @@ pub enum ErrorKind { /// An error with an optional span pub struct Error<'ast> { /// The error - pub kind: ErrorKind, + pub kind: Box, /// The span pub span: Option>, } @@ -50,7 +50,7 @@ impl Display for Error<'_> { impl From for Error<'_> { fn from(error_kind: ErrorKind) -> Self { Error { - kind: error_kind, + kind: Box::new(error_kind), span: None, } } @@ -59,7 +59,7 @@ impl From for Error<'_> { impl From for Error<'_> { fn from(circ: crate::circify::CircError) -> Self { Error { - kind: ErrorKind::Circify(circ), + kind: Box::new(ErrorKind::Circify(circ)), span: None, } } @@ -76,7 +76,7 @@ impl<'ast> Error<'ast> { /// New error, with span pub fn new(kind: ErrorKind, span: Span<'ast>) -> Self { Error { - kind, + kind: Box::new(kind), span: Some(span), } } diff --git a/src/front/zsharp/term.rs b/src/front/zsharp/term.rs index 9cbcdcc12..484c53e4a 100644 --- a/src/front/zsharp/term.rs +++ b/src/front/zsharp/term.rs @@ -270,10 +270,10 @@ impl T { } pub fn pretty(&self, f: &mut W) -> Result<(), std::io::Error> { - use std::io::{Error, ErrorKind}; + use std::io::Error; let val = match &self.term.op() { Op::Const(v) => Ok(v), - _ => Err(Error::new(ErrorKind::Other, "not a const val")), + _ => Err(Error::other("not a const val")), }?; match &**val { Value::Bool(b) => write!(f, "{b}"), @@ -289,10 +289,7 @@ impl T { let (n, fl) = if let Ty::Struct(n, fl) = &self.ty { Ok((n, fl)) } else { - Err(Error::new( - ErrorKind::Other, - "expected struct, got something else", - )) + Err(Error::other("expected struct, got something else")) }?; write!(f, "{n} {{ ")?; fl.fields().zip(vs.iter()).try_for_each(|((n, ty), v)| { @@ -306,10 +303,7 @@ impl T { let inner_ty = if let Ty::Array(_, ty) = &self.ty { Ok(ty) } else { - Err(Error::new( - ErrorKind::Other, - "expected array, got something else", - )) + Err(Error::other("expected array, got something else")) }?; write!(f, "[")?; arr.key_sort @@ -1229,7 +1223,7 @@ impl Embeddable for ZSharp { let ps: Vec> = match precompute.map(|p| p.unwrap_array()) { Some(Ok(v)) => v.into_iter().map(Some).collect(), Some(Err(e)) => panic!("{}", e), - None => std::iter::repeat(None).take(*n).collect(), + None => std::iter::repeat_n(None, *n).collect(), }; debug_assert_eq!(*n, ps.len()); array( @@ -1243,7 +1237,7 @@ impl Embeddable for ZSharp { let ps: Vec> = match precompute.map(|p| p.unwrap_array()) { Some(Ok(v)) => v.into_iter().map(Some).collect(), Some(Err(e)) => panic!("{}", e), - None => std::iter::repeat(None).take(*n).collect(), + None => std::iter::repeat_n(None, *n).collect(), }; debug_assert_eq!(*n, ps.len()); array(ps.into_iter().enumerate().map(|(i, p)| { diff --git a/src/front/zsharpcurly/term.rs b/src/front/zsharpcurly/term.rs index af5ed6470..e43b026e2 100644 --- a/src/front/zsharpcurly/term.rs +++ b/src/front/zsharpcurly/term.rs @@ -252,10 +252,10 @@ impl T { } pub fn pretty(&self, f: &mut W) -> Result<(), std::io::Error> { - use std::io::{Error, ErrorKind}; + use std::io::Error; let val = match &self.term.op() { Op::Const(v) => Ok(v), - _ => Err(Error::new(ErrorKind::Other, "not a const val")), + _ => Err(Error::other("not a const val")), }?; match &**val { Value::Bool(b) => write!(f, "{b}"), @@ -285,19 +285,13 @@ impl T { })?; write!(f, ")") } - _ => Err(Error::new( - ErrorKind::Other, - "expected struct or tuple, got something else", - )), + _ => Err(Error::other("expected struct or tuple, got something else")), }, Value::Array(arr) => { let inner_ty = if let Ty::Array(_, ty) = &self.ty { Ok(ty) } else { - Err(Error::new( - ErrorKind::Other, - "expected array, got something else", - )) + Err(Error::other("expected array, got something else")) }?; write!(f, "[")?; arr.key_sort @@ -1246,7 +1240,7 @@ impl Embeddable for ZSharp { let ps: Vec> = match precompute.map(|p| p.unwrap_array()) { Some(Ok(v)) => v.into_iter().map(Some).collect(), Some(Err(e)) => panic!("{}", e), - None => std::iter::repeat(None).take(*n).collect(), + None => std::iter::repeat_n(None, *n).collect(), }; debug_assert_eq!(*n, ps.len()); array( @@ -1260,7 +1254,7 @@ impl Embeddable for ZSharp { let ps: Vec> = match precompute.map(|p| p.unwrap_array()) { Some(Ok(v)) => v.into_iter().map(Some).collect(), Some(Err(e)) => panic!("{}", e), - None => std::iter::repeat(None).take(*n).collect(), + None => std::iter::repeat_n(None, *n).collect(), }; debug_assert_eq!(*n, ps.len()); array( @@ -1304,7 +1298,7 @@ impl Embeddable for ZSharp { panic!("Precompute type doesn't match expected tuple type"); } }, - None => std::iter::repeat(None).take(tys.len()).collect(), + None => std::iter::repeat_n(None, tys.len()).collect(), }; debug_assert_eq!(tys.len(), ps.len()); T::new( diff --git a/src/ir/term/dist.rs b/src/ir/term/dist.rs index 0032dddd8..c839206d8 100644 --- a/src/ir/term/dist.rs +++ b/src/ir/term/dist.rs @@ -4,7 +4,7 @@ use super::*; use circ_fields::{FieldT, FieldV}; use rand::{distributions::Distribution, prelude::SliceRandom, Rng}; -use std::iter::repeat; +use std::iter::repeat_n; // A distribution of boolean terms with some size. // All subterms are booleans. @@ -210,9 +210,9 @@ impl FixedSizeDist { let s = Sort::BitVector(self.bv_width.unwrap()); vec![s.clone(), s] } - o if o.arity().is_none() && o != &Op::BvConcat => repeat(sort.clone()) - .take(rng.gen_range(1..self.size)) - .collect(), + o if o.arity().is_none() && o != &Op::BvConcat => { + repeat_n(sort.clone(), rng.gen_range(1..self.size)).collect() + } // perhaps allow concat? Op::BvBinOp(_) => vec![sort.clone(), sort.clone()], Op::BvUnOp(_) => vec![sort.clone()], diff --git a/src/target/aby/utils.rs b/src/target/aby/utils.rs index 6fcf42613..ed5fec063 100644 --- a/src/target/aby/utils.rs +++ b/src/target/aby/utils.rs @@ -6,7 +6,7 @@ use std::path::Path; /// Given Path `path` and String denominator `lang`, return the filename of the path pub fn get_path(path: &Path, lang: &str, t: &str, create: bool) -> String { - let filename = Path::new(&path.iter().last().unwrap()) + let filename = Path::new(path.iter().next_back().unwrap()) .file_stem() .unwrap() .to_os_string() diff --git a/src/target/ilp/trans.rs b/src/target/ilp/trans.rs index 64092e7e3..15dd2bd3e 100644 --- a/src/target/ilp/trans.rs +++ b/src/target/ilp/trans.rs @@ -291,7 +291,7 @@ impl ToMilp { Op::BvUext(extra_n) => { if self.bv_has_bits(&bv.cs()[0]) { let bits = self.get_bv_bits(&bv.cs()[0]); - let ext_bits = std::iter::repeat(Expression::from(0)).take(*extra_n); + let ext_bits = std::iter::repeat_n(Expression::from(0), *extra_n); self.set_bv_bits(bv, bits.into_iter().chain(ext_bits).collect()); } else { let x = self.get_bv_uint(&bv.cs()[0]); @@ -300,9 +300,8 @@ impl ToMilp { } Op::BvSext(extra_n) => { let mut bits = self.get_bv_bits(&bv.cs()[0]).into_iter().rev(); - let ext_bits = std::iter::repeat(bits.next().expect("sign ext empty")) - .take(extra_n + 1); - + let ext_bits = + std::iter::repeat_n(bits.next().expect("sign ext empty"), extra_n + 1); self.set_bv_bits(bv, bits.rev().chain(ext_bits).collect()); } Op::BoolToBv => { diff --git a/src/target/r1cs/trans.rs b/src/target/r1cs/trans.rs index 4c7f8868a..9d6cd81b7 100644 --- a/src/target/r1cs/trans.rs +++ b/src/target/r1cs/trans.rs @@ -740,7 +740,7 @@ impl<'cfg> ToR1cs<'cfg> { Op::BvUext(extra_n) => { if self.bv_has_bits(&bv.cs()[0]) { let bits = self.get_bv_bits(&bv.cs()[0]); - let ext_bits = std::iter::repeat(self.zero.clone()).take(*extra_n); + let ext_bits = std::iter::repeat_n(self.zero.clone(), *extra_n); self.set_bv_bits(bv, bits.into_iter().chain(ext_bits).collect()); } else { let x = self.get_bv_uint(&bv.cs()[0]); @@ -749,9 +749,8 @@ impl<'cfg> ToR1cs<'cfg> { } Op::BvSext(extra_n) => { let mut bits = self.get_bv_bits(&bv.cs()[0]).into_iter().rev(); - let ext_bits = std::iter::repeat(bits.next().expect("sign ext empty")) - .take(extra_n + 1); - + let ext_bits = + std::iter::repeat_n(bits.next().expect("sign ext empty"), extra_n + 1); self.set_bv_bits(bv, bits.rev().chain(ext_bits).collect()); } Op::PfToBv(nbits) => { diff --git a/third_party/ZoKratesCurly/zokrates_pest_ast/src/lib.rs b/third_party/ZoKratesCurly/zokrates_pest_ast/src/lib.rs index 174adce1f..9f58f574a 100644 --- a/third_party/ZoKratesCurly/zokrates_pest_ast/src/lib.rs +++ b/third_party/ZoKratesCurly/zokrates_pest_ast/src/lib.rs @@ -1,5 +1,5 @@ // disable a clippy lint as pest_ast generates improper code -#![allow(clippy::clone_on_copy)] +#![allow(clippy::clone_on_copy, deprecated)] use from_pest::FromPest; use pest::error::Error as PestError;