Reid/src/main.rs

52 lines
1.3 KiB
Rust
Raw Normal View History

2020-06-23 20:08:54 +02:00
#![forbid(unsafe_code)]
2020-06-22 20:49:21 +02:00
mod compiler;
2020-06-21 00:21:24 +02:00
mod errors;
mod file_io;
mod parser;
mod vm;
2020-06-21 00:21:24 +02:00
use file_io::open_file;
use std::path::Path;
use compiler::Compiler;
use parser::Parser;
2020-06-24 20:58:16 +02:00
use vm::{BuiltinFunctionDef, BuiltinFunctions, Value, VariableType, VirtualMachine};
2020-06-18 17:06:57 +02:00
fn main() {
2020-06-21 00:21:24 +02:00
let path = Path::new("reid_src/test.reid");
2020-06-22 20:49:21 +02:00
let parsed = Parser::from(open_file(&path).ok().unwrap()).parse();
if let Err(error) = parsed {
eprintln!("Syntax error: {}", error);
std::process::exit(1);
}
2020-06-24 23:39:18 +02:00
dbg!(&parsed);
2020-06-24 20:58:16 +02:00
let print = BuiltinFunctionDef::new(
"print",
vec![VariableType::TypeString],
Box::new(move |args| {
2020-06-24 23:39:18 +02:00
if let Value::StringVal(string) = &args[0] {
println!("{}", string);
}
2020-06-24 20:58:16 +02:00
}),
);
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);
}
2020-06-24 23:39:18 +02:00
dbg!(&compiled);
let mut vm = VirtualMachine::from(compiled.unwrap());
2020-06-24 20:58:16 +02:00
vm.add_builtin_functions(builtin_functions);
if let Err(error) = vm.run() {
eprintln!("Runtime panic: {:#?}", error);
std::process::exit(1);
2020-06-21 00:37:56 +02:00
}
2020-06-18 17:06:57 +02:00
}