Merge pull request #535 from HigherOrderCO/hvm-path-option

Hvm path option
This commit is contained in:
Nicolas Abril 2024-05-31 19:19:03 +00:00 committed by GitHub
commit a5066181c5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 7 deletions

View File

@ -173,7 +173,7 @@ pub fn run_book(
// cancel the run if a problem is detected.
eprint!("{diagnostics}");
let out = run_hvm(&core_book, cmd)?;
let out = run_hvm(&core_book, cmd, &run_opts)?;
let (net, stats) = parse_hvm_output(&out)?;
let (term, diags) =
readback_hvm_net(&net, &book, &labels, run_opts.linear_readback, compile_opts.adt_encoding);
@ -198,7 +198,7 @@ pub fn readback_hvm_net(
}
/// Runs an HVM book by invoking HVM as a subprocess.
fn run_hvm(book: &::hvm::ast::Book, cmd: &str) -> Result<String, String> {
fn run_hvm(book: &::hvm::ast::Book, cmd: &str, run_opts: &RunOpts) -> Result<String, String> {
fn filter_hvm_output(
mut stream: impl std::io::Read + Send,
mut output: impl std::io::Write + Send,
@ -247,7 +247,7 @@ fn run_hvm(book: &::hvm::ast::Book, cmd: &str) -> Result<String, String> {
let out_path = ".out.hvm";
std::fs::write(out_path, display_hvm_book(book).to_string()).map_err(|x| x.to_string())?;
let mut process = std::process::Command::new("hvm")
let mut process = std::process::Command::new(run_opts.hvm_path.clone())
.arg(cmd)
.arg(out_path)
.stdout(std::process::Stdio::piped())
@ -281,10 +281,17 @@ fn parse_hvm_output(out: &str) -> Result<(::hvm::ast::Net, String), String> {
Ok((net, stats.to_string()))
}
#[derive(Clone, Copy, Debug, Default)]
#[derive(Clone, Debug)]
pub struct RunOpts {
pub linear_readback: bool,
pub pretty: bool,
pub hvm_path: String,
}
impl Default for RunOpts {
fn default() -> Self {
RunOpts { linear_readback: false, pretty: false, hvm_path: "hvm".to_string() }
}
}
#[derive(Clone, Copy, Debug, Default)]

View File

@ -20,6 +20,9 @@ struct Cli {
#[arg(short, long, global = true)]
pub verbose: bool,
#[arg(long, global = true, default_value = "hvm", help = "Path to hvm binary")]
pub hvm_path: String,
#[arg(short = 'e', long, global = true, help = "Use other entrypoint rather than main or Main")]
pub entrypoint: Option<String>,
}
@ -303,7 +306,7 @@ fn execute_cli_mode(mut cli: Cli) -> Result<(), Diagnostics> {
.map_err(|x| x.to_string())?;
let gen_fn = |out_path: &str| {
let mut process = std::process::Command::new("hvm");
let mut process = std::process::Command::new(cli.hvm_path);
process.arg(gen_cmd).arg(out_path);
process.output().map_err(|e| format!("While running hvm: {e}"))
};
@ -350,7 +353,7 @@ fn execute_cli_mode(mut cli: Cli) -> Result<(), Diagnostics> {
compile_opts.check_for_strict();
let run_opts = RunOpts { linear_readback: linear, pretty };
let run_opts = RunOpts { linear_readback: linear, pretty, hvm_path: cli.hvm_path };
let book = load_book(&path)?;
if let Some((term, stats, diags)) =

View File

@ -175,7 +175,8 @@ fn run_file() {
for adt_encoding in [AdtEncoding::NumScott, AdtEncoding::Scott] {
let compile_opts = CompileOpts { adt_encoding, ..CompileOpts::default() };
let (term, _, diags) = run_book_simple(book.clone(), run_opts, compile_opts, diagnostics_cfg, None)?;
let (term, _, diags) =
run_book_simple(book.clone(), run_opts.clone(), compile_opts, diagnostics_cfg, None)?;
res.push_str(&format!("{adt_encoding}:\n{diags}{term}\n\n"));
}
Ok(res)