use crate::DeadCodeEliminator;
use leo_ast::{Expression, ExpressionReconstructor, Identifier};
impl ExpressionReconstructor for DeadCodeEliminator<'_> {
type AdditionalOutput = ();
fn reconstruct_identifier(&mut self, input: Identifier) -> (Expression, Self::AdditionalOutput) {
self.used_variables.insert(input.name);
(Expression::Identifier(input), Default::default())
}
fn reconstruct_struct_init(
&mut self,
mut input: leo_ast::StructExpression,
) -> (Expression, Self::AdditionalOutput) {
for member in input.members.iter_mut() {
if let Some(expr) = std::mem::take(&mut member.expression) {
member.expression = Some(self.reconstruct_expression(expr).0);
} else {
self.reconstruct_identifier(member.identifier);
}
}
(Expression::Struct(input), Default::default())
}
}