From cac119338d03e8574239dfcfc3686ebce4e2e274 Mon Sep 17 00:00:00 2001 From: rvcas Date: Thu, 4 Apr 2024 17:01:01 -0400 Subject: [PATCH] feat(blueprint): a memoized program that only runs code gen every other time --- .../src/blueprint/memo_program.rs | 30 +++++++++++++++++++ crates/aiken-project/src/blueprint/mod.rs | 1 + 2 files changed, 31 insertions(+) create mode 100644 crates/aiken-project/src/blueprint/memo_program.rs diff --git a/crates/aiken-project/src/blueprint/memo_program.rs b/crates/aiken-project/src/blueprint/memo_program.rs new file mode 100644 index 00000000..32c89bb6 --- /dev/null +++ b/crates/aiken-project/src/blueprint/memo_program.rs @@ -0,0 +1,30 @@ +use aiken_lang::{ast::TypedValidator, gen_uplc::CodeGenerator}; +use uplc::ast::{DeBruijn, Program}; + +pub struct MemoProgram { + program: Option>, +} + +impl MemoProgram { + pub fn new() -> Self { + Self { program: None } + } + + pub fn get( + &mut self, + generator: &mut CodeGenerator, + def: &TypedValidator, + module_name: &str, + ) -> Program { + 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, + } + } +} diff --git a/crates/aiken-project/src/blueprint/mod.rs b/crates/aiken-project/src/blueprint/mod.rs index 780b9f2e..51abee58 100644 --- a/crates/aiken-project/src/blueprint/mod.rs +++ b/crates/aiken-project/src/blueprint/mod.rs @@ -1,5 +1,6 @@ pub mod definitions; pub mod error; +mod memo_program; pub mod parameter; pub mod schema; pub mod validator;