Implement apply evaluate

Co-authored-by: rvcas <x@rvcas.dev>
This commit is contained in:
Kasey White
2022-07-06 23:12:26 -04:00
committed by Kasey White
parent 650a789194
commit 0e2214a908
6 changed files with 77 additions and 5 deletions

View File

@@ -33,6 +33,13 @@ pub enum UplcCommand {
},
/// Format an Untyped Plutus Core program
Fmt { input: PathBuf },
/// Evaluate an Untyped Plutus Core program
Eval {
input: PathBuf,
#[clap(short, long)]
flat: bool,
},
}
impl Default for Args {

View File

@@ -1,7 +1,7 @@
use std::fs;
use uplc::{
ast::{DeBruijn, Name, Program},
ast::{DeBruijn, FakeNamedDeBruijn, Name, NamedDeBruijn, Program, Term},
parser,
};
@@ -77,6 +77,27 @@ fn main() -> anyhow::Result<()> {
fs::write(&out_name, pretty)?;
}
}
UplcCommand::Eval { input, flat } => {
let program = if flat {
let bytes = std::fs::read(&input)?;
let prog = Program::<FakeNamedDeBruijn>::from_flat(&bytes)?;
prog.into()
} else {
let code = std::fs::read_to_string(&input)?;
let prog = parser::program(&code)?;
Program::<NamedDeBruijn>::try_from(prog)?
};
let term = program.eval()?;
let term: Term<Name> = term.try_into()?;
println!("{}", term.to_pretty());
}
},
}