52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
#![forbid(unsafe_code)]
|
|
|
|
mod compiler;
|
|
mod errors;
|
|
mod file_io;
|
|
mod parser;
|
|
mod vm;
|
|
|
|
use file_io::open_file;
|
|
use std::path::Path;
|
|
|
|
use compiler::Compiler;
|
|
use parser::Parser;
|
|
use vm::{BuiltinFunctionDef, BuiltinFunctions, Value, VariableType, VirtualMachine};
|
|
|
|
fn main() {
|
|
let path = Path::new("reid_src/test.reid");
|
|
let parsed = Parser::from(open_file(&path).ok().unwrap()).parse();
|
|
if let Err(error) = parsed {
|
|
eprintln!("Syntax error: {}", error);
|
|
std::process::exit(1);
|
|
}
|
|
dbg!(&parsed);
|
|
|
|
let print = BuiltinFunctionDef::new(
|
|
"print",
|
|
vec![VariableType::TypeString],
|
|
Box::new(move |args| {
|
|
if let Value::StringVal(string) = &args[0] {
|
|
println!("{}", string);
|
|
}
|
|
}),
|
|
);
|
|
let builtin_functions = BuiltinFunctions(vec![print]);
|
|
|
|
let compiled = Compiler::from(parsed.unwrap())
|
|
.with_builtin_functions(builtin_functions.signatures())
|
|
.compile();
|
|
if let Err(error) = compiled {
|
|
eprintln!("Compilation error: {}", error);
|
|
std::process::exit(1);
|
|
}
|
|
dbg!(&compiled);
|
|
|
|
let mut vm = VirtualMachine::from(compiled.unwrap());
|
|
vm.add_builtin_functions(builtin_functions);
|
|
if let Err(error) = vm.run() {
|
|
eprintln!("Runtime panic: {:#?}", error);
|
|
std::process::exit(1);
|
|
}
|
|
}
|