Skip to content
Snippets Groups Projects
lib.rs 936 B
Newer Older
use forge_script_lang::format_forge_error;
Louis's avatar
Louis committed
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,
		))),
	}
Louis's avatar
Louis committed
}

#[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,
			)));
		}
	};

Louis's avatar
Louis committed
	let mut writer = TreePrinter::new();
	writer.evaluate_program(&ast);
Louis's avatar
Louis committed
	Ok(writer.take_value())
}