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

merge member, remove clones

This commit is contained in:
schaeff 2021-05-20 10:02:33 +02:00
commit 6ca97136d1

View file

@ -82,8 +82,8 @@ impl<'ast, T: Field> Flattener<T> {
}
fn fold_variable(&mut self, v: typed_absy::Variable<'ast, T>) -> Vec<zir::Variable<'ast>> {
let id = self.fold_name(v.id.clone());
let ty = v.get_type();
let id = self.fold_name(v.id);
let ty = typed_absy::types::ConcreteType::try_from(ty).unwrap();
@ -543,9 +543,7 @@ pub fn fold_member_expression<'ast, T: Field, E>(
let s = *m.struc;
let id = m.id;
let members = s.ty().clone();
let s = f.fold_struct_expression(statements_buffer, s);
let members = s.ty();
let size = typed_absy::types::ConcreteType::try_from(
*members
@ -568,6 +566,8 @@ pub fn fold_member_expression<'ast, T: Field, E>(
})
.sum();
let s = f.fold_struct_expression(statements_buffer, s);
s[offset..offset + size].to_vec()
}
@ -605,9 +605,10 @@ pub fn fold_field_expression<'ast, T: Field>(
flatten_identifier_rec(
f.fold_name(id),
&typed_absy::types::ConcreteType::FieldElement,
)[0]
.id
.clone(),
)
.pop()
.unwrap()
.id,
)
}
typed_absy::FieldElementExpression::Add(box e1, box e2) => {
@ -667,29 +668,16 @@ pub fn fold_field_expression<'ast, T: Field>(
zir::FieldElementExpression::IfElse(box condition, box consequence, box alternative)
}
typed_absy::FieldElementExpression::FunctionCall(..) => unreachable!(""),
typed_absy::FieldElementExpression::Member(m) => {
let s = *m.struc;
let id = m.id;
let members = s.ty().clone();
let s = f.fold_struct_expression(statements_buffer, s);
let offset: usize = members
.iter()
.take_while(|member| member.id != id)
.map(|member| {
typed_absy::types::ConcreteType::try_from(*member.ty.clone())
.unwrap()
.get_primitive_count()
})
.sum();
s[offset].clone().try_into().unwrap()
}
typed_absy::FieldElementExpression::Select(select) => f
.fold_select_expression(statements_buffer, select)[0]
.clone()
.fold_select_expression(statements_buffer, select)
.pop()
.unwrap()
.try_into()
.unwrap(),
typed_absy::FieldElementExpression::Member(m) => f
.fold_member_expression(statements_buffer, m)
.pop()
.unwrap()
.try_into()
.unwrap(),
typed_absy::FieldElementExpression::Block(block) => {
@ -717,9 +705,10 @@ pub fn fold_boolean_expression<'ast, T: Field>(
}
typed_absy::BooleanExpression::Value(v) => zir::BooleanExpression::Value(v),
typed_absy::BooleanExpression::Identifier(id) => zir::BooleanExpression::Identifier(
flatten_identifier_rec(f.fold_name(id), &typed_absy::types::ConcreteType::Boolean)[0]
.id
.clone(),
flatten_identifier_rec(f.fold_name(id), &typed_absy::types::ConcreteType::Boolean)
.pop()
.unwrap()
.id,
),
typed_absy::BooleanExpression::FieldEq(box e1, box e2) => {
let e1 = f.fold_field_expression(statements_buffer, e1);
@ -864,14 +853,16 @@ pub fn fold_boolean_expression<'ast, T: Field>(
zir::BooleanExpression::IfElse(box condition, box consequence, box alternative)
}
typed_absy::BooleanExpression::FunctionCall(..) => unreachable!(),
typed_absy::BooleanExpression::Member(m) => f.fold_member_expression(statements_buffer, m)
[0]
.clone()
.try_into()
.unwrap(),
typed_absy::BooleanExpression::Select(select) => f
.fold_select_expression(statements_buffer, select)[0]
.clone()
.fold_select_expression(statements_buffer, select)
.pop()
.unwrap()
.try_into()
.unwrap(),
typed_absy::BooleanExpression::Member(m) => f
.fold_member_expression(statements_buffer, m)
.pop()
.unwrap()
.try_into()
.unwrap(),
}
@ -906,9 +897,10 @@ pub fn fold_uint_expression_inner<'ast, T: Field>(
flatten_identifier_rec(
f.fold_name(id),
&typed_absy::types::ConcreteType::Uint(bitwidth),
)[0]
.id
.clone(),
)
.pop()
.unwrap()
.id,
),
typed_absy::UExpressionInner::Add(box left, box right) => {
let left = f.fold_uint_expression(statements_buffer, left);
@ -1003,15 +995,19 @@ pub fn fold_uint_expression_inner<'ast, T: Field>(
unreachable!("function calls should have been removed")
}
typed_absy::UExpressionInner::Select(select) => zir::UExpression::try_from(
f.fold_select_expression(statements_buffer, select)[0].clone(),
f.fold_select_expression(statements_buffer, select)
.pop()
.unwrap(),
)
.unwrap()
.into_inner(),
typed_absy::UExpressionInner::Member(m) => zir::UExpression::try_from(
f.fold_member_expression(statements_buffer, m)
.pop()
.unwrap(),
)
.unwrap()
.into_inner(),
typed_absy::UExpressionInner::Member(m) => {
zir::UExpression::try_from(f.fold_member_expression(statements_buffer, m)[0].clone())
.unwrap()
.into_inner()
}
typed_absy::UExpressionInner::IfElse(box condition, box consequence, box alternative) => {
let mut consequence_statements = vec![];
let mut alternative_statements = vec![];