@@ -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 {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user