chore(users): grfn -> aspen
Change-Id: I6c6847fac56f0a9a1a2209792e00a3aec5e672b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10809 Autosubmit: aspen <root@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
This commit is contained in:
parent
0ba476a426
commit
82ecd61f5c
478 changed files with 75 additions and 77 deletions
39
users/aspen/achilles/src/commands/check.rs
Normal file
39
users/aspen/achilles/src/commands/check.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
use clap::Clap;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use crate::ast::Type;
|
||||
use crate::{parser, tc, Result};
|
||||
|
||||
/// Typecheck a file or expression
|
||||
#[derive(Clap)]
|
||||
pub struct Check {
|
||||
/// File to check
|
||||
path: Option<PathBuf>,
|
||||
|
||||
/// Expression to check
|
||||
#[clap(long, short = 'e')]
|
||||
expr: Option<String>,
|
||||
}
|
||||
|
||||
fn run_expr(expr: String) -> Result<Type<'static>> {
|
||||
let (_, parsed) = parser::expr(&expr)?;
|
||||
let hir_expr = tc::typecheck_expr(parsed)?;
|
||||
Ok(hir_expr.type_().to_owned())
|
||||
}
|
||||
|
||||
fn run_path(path: PathBuf) -> Result<Type<'static>> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
impl Check {
|
||||
pub fn run(self) -> Result<()> {
|
||||
let type_ = match (self.path, self.expr) {
|
||||
(None, None) => Err("Must specify either a file or expression to check".into()),
|
||||
(Some(_), Some(_)) => Err("Cannot specify both a file and expression to check".into()),
|
||||
(None, Some(expr)) => run_expr(expr),
|
||||
(Some(path), None) => run_path(path),
|
||||
}?;
|
||||
println!("type: {}", type_);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
31
users/aspen/achilles/src/commands/compile.rs
Normal file
31
users/aspen/achilles/src/commands/compile.rs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
use std::path::PathBuf;
|
||||
|
||||
use clap::Clap;
|
||||
|
||||
use crate::common::Result;
|
||||
use crate::compiler::{self, CompilerOptions};
|
||||
|
||||
/// Compile a source file
|
||||
#[derive(Clap)]
|
||||
pub struct Compile {
|
||||
/// File to compile
|
||||
file: PathBuf,
|
||||
|
||||
/// Output file
|
||||
#[clap(short = 'o')]
|
||||
out_file: PathBuf,
|
||||
|
||||
#[clap(flatten)]
|
||||
options: CompilerOptions,
|
||||
}
|
||||
|
||||
impl Compile {
|
||||
pub fn run(self) -> Result<()> {
|
||||
eprintln!(
|
||||
">>> {} -> {}",
|
||||
&self.file.to_string_lossy(),
|
||||
self.out_file.to_string_lossy()
|
||||
);
|
||||
compiler::compile_file(&self.file, &self.out_file, &self.options)
|
||||
}
|
||||
}
|
||||
28
users/aspen/achilles/src/commands/eval.rs
Normal file
28
users/aspen/achilles/src/commands/eval.rs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
use clap::Clap;
|
||||
|
||||
use crate::{codegen, interpreter, parser, tc, Result};
|
||||
|
||||
/// Evaluate an expression and print its result
|
||||
#[derive(Clap)]
|
||||
pub struct Eval {
|
||||
/// JIT-compile with LLVM instead of interpreting
|
||||
#[clap(long)]
|
||||
jit: bool,
|
||||
|
||||
/// Expression to evaluate
|
||||
expr: String,
|
||||
}
|
||||
|
||||
impl Eval {
|
||||
pub fn run(self) -> Result<()> {
|
||||
let (_, parsed) = parser::expr(&self.expr)?;
|
||||
let hir = tc::typecheck_expr(parsed)?;
|
||||
let result = if self.jit {
|
||||
codegen::jit_eval::<i64>(&hir)?.into()
|
||||
} else {
|
||||
interpreter::eval(&hir)?
|
||||
};
|
||||
println!("{}", result);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
7
users/aspen/achilles/src/commands/mod.rs
Normal file
7
users/aspen/achilles/src/commands/mod.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
pub mod check;
|
||||
pub mod compile;
|
||||
pub mod eval;
|
||||
|
||||
pub use check::Check;
|
||||
pub use compile::Compile;
|
||||
pub use eval::Eval;
|
||||
Loading…
Add table
Add a link
Reference in a new issue