2022-08-07 22:42:33 +02:00
|
|
|
use rnix::{self, types::TypedNode};
|
|
|
|
|
2022-08-10 17:53:50 +02:00
|
|
|
use crate::{errors::EvalResult, value::Value};
|
2022-08-04 15:43:51 +02:00
|
|
|
|
2022-08-10 17:53:50 +02:00
|
|
|
pub fn interpret(code: &str) -> EvalResult<Value> {
|
|
|
|
let ast = rnix::parse(code);
|
2022-08-07 22:42:33 +02:00
|
|
|
|
|
|
|
let errors = ast.errors();
|
|
|
|
if !errors.is_empty() {
|
|
|
|
todo!()
|
|
|
|
}
|
|
|
|
|
2022-08-10 18:10:57 +02:00
|
|
|
if let Ok(_) = std::env::var("TVIX_DISPLAY_AST") {
|
|
|
|
println!("{}", ast.root().dump());
|
|
|
|
}
|
2022-08-07 22:42:33 +02:00
|
|
|
|
|
|
|
let code = crate::compiler::compile(ast)?;
|
2022-08-09 15:51:37 +02:00
|
|
|
println!("code: {:?}", code);
|
2022-08-07 22:42:33 +02:00
|
|
|
|
2022-08-10 17:53:50 +02:00
|
|
|
crate::vm::run_chunk(code)
|
2022-08-04 15:43:51 +02:00
|
|
|
}
|