From: bakaq Date: Thu, 20 Feb 2025 03:33:11 +0000 (-0300) Subject: Consult modules X-Git-Tag: v0.10.0~69^2~1 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=3b89c1124d454dba73623f15517058d2e30de6dd;p=scryer-prolog.git Consult modules --- diff --git a/src/wasm.rs b/src/wasm.rs index cdfa6e91..08383318 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -38,8 +38,7 @@ pub struct WasmMachine { #[wasm_bindgen(js_class = Machine)] impl WasmMachine { - #[wasm_bindgen(js_name = runQuery)] - pub fn run_query(&mut self, query: String) -> Result { + fn ensure_machine_ownership(&mut self) -> Result<(), JsValue> { if self.inner.is_err() { // We have a receiver, try to get the Machine let machine = self @@ -50,7 +49,12 @@ impl WasmMachine { .map_err(|_| js_sys::Error::new("Another query is still active"))?; let _ = mem::replace(&mut self.inner, Ok(machine)); } + Ok(()) + } + #[wasm_bindgen(js_name = runQuery)] + pub fn run_query(&mut self, query: String) -> Result { + self.ensure_machine_ownership()?; assert!(self.inner.is_ok()); // Installs a receiver and gets the machine @@ -71,6 +75,21 @@ impl WasmMachine { Ok(query_state) } + + #[wasm_bindgen(js_name = consultModuleString)] + pub fn consult_module_string( + &mut self, + module: String, + program: String, + ) -> Result<(), JsValue> { + self.ensure_machine_ownership()?; + assert!(self.inner.is_ok()); + + let inner = self.inner.as_mut().unwrap(); + inner.consult_module_string(&module, program); + + Ok(()) + } } #[self_referencing]