Newer
Older
use forge_script_lang::format_forge_error;
use forge_script_lang::parse::parse_program;
use forge_script_lang::runtime::executor::{TreePrinter, Visitor};
use wasm_bindgen::prelude::*;
#[wasm_bindgen(start)]
pub fn init() {
std::panic::set_hook(Box::new(console_error_panic_hook::hook));
}
#[wasm_bindgen]
pub fn compile_ast(program: &str) -> Result<JsValue, serde_wasm_bindgen::Error> {
match parse_program(program) {
Ok(val) => serde_wasm_bindgen::to_value(&val),
Err(e) => Err(serde_wasm_bindgen::Error::new(format_forge_error(
program, &e,
))),
}
}
#[wasm_bindgen]
pub fn format_script(program: &str) -> Result<String, serde_wasm_bindgen::Error> {
let ast = match parse_program(program) {
Ok(val) => val,
Err(e) => {
return Err(serde_wasm_bindgen::Error::new(format_forge_error(
program, &e,
)));
}
};
writer.evaluate_program(&ast);