use crate::Flattener;
use leo_ast::{Finalize, Function, ProgramReconstructor, StatementReconstructor, Type};
impl ProgramReconstructor for Flattener<'_> {
fn reconstruct_function(&mut self, function: Function) -> Function {
let finalize = function.finalize.map(|finalize| {
self.structs = Default::default();
for input in &finalize.input {
if let Type::Identifier(struct_name) = input.type_() {
self.structs.insert(input.identifier().name, struct_name.name);
}
}
let mut block = self.reconstruct_block(finalize.block).0;
let returns = self.clear_early_returns();
self.fold_returns(&mut block, returns);
Finalize {
identifier: finalize.identifier,
input: finalize.input,
output: finalize.output,
output_type: finalize.output_type,
block,
span: finalize.span,
id: finalize.id,
}
});
self.structs = Default::default();
for input in &function.input {
if let Type::Identifier(struct_name) = input.type_() {
self.structs.insert(input.identifier().name, struct_name.name);
}
}
let mut block = self.reconstruct_block(function.block).0;
let returns = self.clear_early_returns();
self.fold_returns(&mut block, returns);
Function {
annotations: function.annotations,
variant: function.variant,
identifier: function.identifier,
input: function.input,
output: function.output,
output_type: function.output_type,
block,
finalize,
span: function.span,
id: function.id,
}
}
}