quickscript/cmd/
run.rs

1use std::{fs, path::PathBuf};
2
3use anyhow::Result;
4use clap::Parser;
5use qsc_cranelift_jit::JITModule;
6use target_lexicon::Triple;
7
8use crate::{ast::AstParser, codegen::backend::CraneliftBackend, tokenizer::Tokenizer};
9
10use super::Command;
11
12#[derive(Debug, Clone, Parser)]
13pub struct RunCommand {
14    /// The path to the file to compile.
15    pub file: PathBuf,
16}
17
18impl Command for RunCommand {
19    fn execute(&mut self) -> Result<()> {
20        let content = fs::read_to_string(self.file.clone())?;
21        let mut tokenizer = Tokenizer::from(content);
22
23        tokenizer.tokenize();
24
25        let mut parser = AstParser::new(tokenizer.tokens);
26
27        parser.parse()?;
28
29        let mut back = CraneliftBackend::<JITModule>::new(Triple::host(), false)?;
30
31        back.compile(parser.exprs)?;
32
33        back.run()?;
34
35        Ok(())
36    }
37}