Working ish runtime

This commit is contained in:
2026-03-13 23:44:58 +01:00
parent 2cc6ff7e96
commit 0ad745c6d5
3 changed files with 82 additions and 17 deletions
+71
View File
@@ -0,0 +1,71 @@
use std::{collections::HashMap, path::Path};
use crate::parser::{self, ast::Statement};
#[derive(Debug, Clone)]
pub struct Registry {}
pub struct Function {
pub registry: Registry,
pub body: Vec<Statement>,
pub params: Vec<String>,
}
pub struct Runtime {
pub registry: Registry,
pub functions: HashMap<String, Function>,
}
impl Registry {
pub fn new() -> Self {
Self {}
}
}
impl Runtime {
pub fn new() -> Self {
Self {
registry: Registry::new(),
functions: HashMap::new(),
}
}
}
impl Runtime {
pub fn execute_script(&mut self, path: &Path) {
let src = std::fs::read_to_string(path).unwrap();
let ast = parser::parse_program(&src).unwrap();
for func in ast.functions {
self.functions.insert(
func.name,
Function {
registry: Registry::new(),
body: func.body,
params: func.params,
},
);
}
}
pub fn execute(&mut self, statements: Vec<Statement>, reg: Registry) {
for statement in statements {
match statement {
Statement::Instruction(inst) => {
println!("{inst:#?}");
}
_ => {}
}
}
}
pub fn call_function(&mut self, fn_name: &str, params: Vec<u8>) {
let f = self
.functions
.get(fn_name)
.expect("Function does not exist");
self.execute(f.body.clone(), f.registry.clone());
}
}