aiken/crates/aiken-project/src/blueprint/memo_program.rs

31 lines
725 B
Rust

use aiken_lang::{ast::TypedValidator, gen_uplc::CodeGenerator};
use uplc::ast::{DeBruijn, Program};
pub struct MemoProgram {
program: Option<Program<DeBruijn>>,
}
impl MemoProgram {
pub fn new() -> Self {
Self { program: None }
}
pub fn get(
&mut self,
generator: &mut CodeGenerator,
def: &TypedValidator,
module_name: &str,
) -> Program<DeBruijn> {
match self.program.take() {
None => {
let new_program = generator.generate(def, module_name).to_debruijn().unwrap();
self.program.replace(new_program.clone());
new_program
}
Some(program) => program,
}
}
}