use leo_ast::*;
use crate::Unroller;
impl ProgramReconstructor for Unroller<'_> {
fn reconstruct_function(&mut self, function: Function) -> Function {
let function_index = self.symbol_table.borrow().lookup_fn_symbol(function.identifier.name).unwrap().id;
let previous_function_index = self.enter_scope(function_index);
let previous_scope_index = self.enter_scope(self.scope_index);
let block = self.reconstruct_block(function.block).0;
self.exit_scope(previous_scope_index);
let finalize = function.finalize.map(|finalize| {
let previous_scope_index = self.enter_scope(self.scope_index);
let block = self.reconstruct_block(finalize.block).0;
self.exit_scope(previous_scope_index);
Finalize {
identifier: finalize.identifier,
input: finalize.input,
output: finalize.output,
output_type: finalize.output_type,
block,
span: finalize.span,
}
});
let reconstructed_function = 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,
};
self.exit_scope(previous_function_index);
reconstructed_function
}
}