From b3a27bed381425b826b57c5bf6eaabfcef058090 Mon Sep 17 00:00:00 2001 From: dark64 Date: Tue, 8 Nov 2022 19:32:55 +0100 Subject: [PATCH] implement from instead of try_from on zir expression --- zokrates_ast/src/zir/mod.rs | 43 ++++++++----------- zokrates_core/src/flatten/mod.rs | 5 +-- .../src/static_analysis/zir_propagation.rs | 7 +-- 3 files changed, 19 insertions(+), 36 deletions(-) diff --git a/zokrates_ast/src/zir/mod.rs b/zokrates_ast/src/zir/mod.rs index ee886ef3..d8f32593 100644 --- a/zokrates_ast/src/zir/mod.rs +++ b/zokrates_ast/src/zir/mod.rs @@ -15,7 +15,6 @@ use crate::typed::ConcreteType; pub use crate::zir::uint::{ShouldReduce, UExpression, UExpressionInner, UMetadata}; use crate::zir::types::Signature; -use std::convert::TryFrom; use std::fmt; use std::marker::PhantomData; use zokrates_field::Field; @@ -464,37 +463,29 @@ impl<'ast, T> BooleanExpression<'ast, T> { } // Downcasts -impl<'ast, T> TryFrom> for FieldElementExpression<'ast, T> { - type Error = (); - - fn try_from( - te: ZirExpression<'ast, T>, - ) -> Result, Self::Error> { - match te { - ZirExpression::FieldElement(e) => Ok(e), - _ => Err(()), +impl<'ast, T> From> for FieldElementExpression<'ast, T> { + fn from(e: ZirExpression<'ast, T>) -> FieldElementExpression<'ast, T> { + match e { + ZirExpression::FieldElement(e) => e, + _ => unreachable!("downcast failed"), } } } -impl<'ast, T> TryFrom> for BooleanExpression<'ast, T> { - type Error = (); - - fn try_from(te: ZirExpression<'ast, T>) -> Result, Self::Error> { - match te { - ZirExpression::Boolean(e) => Ok(e), - _ => Err(()), +impl<'ast, T> From> for BooleanExpression<'ast, T> { + fn from(e: ZirExpression<'ast, T>) -> BooleanExpression<'ast, T> { + match e { + ZirExpression::Boolean(e) => e, + _ => unreachable!("downcast failed"), } } } -impl<'ast, T> TryFrom> for UExpression<'ast, T> { - type Error = (); - - fn try_from(te: ZirExpression<'ast, T>) -> Result, Self::Error> { - match te { - ZirExpression::Uint(e) => Ok(e), - _ => Err(()), +impl<'ast, T> From> for UExpression<'ast, T> { + fn from(e: ZirExpression<'ast, T>) -> UExpression<'ast, T> { + match e { + ZirExpression::Uint(e) => e, + _ => unreachable!("downcast failed"), } } } @@ -609,8 +600,8 @@ impl<'ast, T: fmt::Debug> fmt::Debug for ZirExpressionList<'ast, T> { } } -// Common behaviour accross expressions -pub trait Expr<'ast, T>: fmt::Display + PartialEq + TryFrom> { +// Common behaviour across expressions +pub trait Expr<'ast, T>: fmt::Display + PartialEq + From> { type Inner; type Ty: Clone + IntoType; diff --git a/zokrates_core/src/flatten/mod.rs b/zokrates_core/src/flatten/mod.rs index 6352af7e..2e3e95b8 100644 --- a/zokrates_core/src/flatten/mod.rs +++ b/zokrates_core/src/flatten/mod.rs @@ -18,7 +18,6 @@ use std::collections::{ hash_map::{Entry, HashMap}, VecDeque, }; -use std::convert::TryFrom; use zokrates_ast::common::embed::*; use zokrates_ast::common::FlatEmbed; use zokrates_ast::common::{RuntimeError, Variable}; @@ -119,9 +118,7 @@ impl FlattenOutput for FlatUExpression { // We introduce a trait in order to make it possible to make flattening `e` generic over the type of `e` -trait Flatten<'ast, T: Field>: - TryFrom, Error = ()> + Conditional<'ast, T> -{ +trait Flatten<'ast, T: Field>: From> + Conditional<'ast, T> { type Output: FlattenOutput; fn flatten( diff --git a/zokrates_core/src/static_analysis/zir_propagation.rs b/zokrates_core/src/static_analysis/zir_propagation.rs index d628467a..40355558 100644 --- a/zokrates_core/src/static_analysis/zir_propagation.rs +++ b/zokrates_core/src/static_analysis/zir_propagation.rs @@ -132,12 +132,7 @@ impl<'ast, T: Field> ResultFolder<'ast, T> for ZirPropagator<'ast, T> { id: IdentifierExpression<'ast, E>, ) -> Result, Self::Error> { match self.constants.get(&id.id).cloned() { - Some(e) => Ok(IdentifierOrExpression::Expression( - E::try_from(e) - .map_err(|_| "downcast failed") - .unwrap() - .into_inner(), - )), + Some(e) => Ok(IdentifierOrExpression::Expression(E::from(e).into_inner())), None => Ok(IdentifierOrExpression::Identifier(id)), } }