]> Repositorios git - scryer-prolog.git/commitdiff
Implement $cpu_now in wasm32
authorAdrián Arroyo Calle <[email protected]>
Tue, 28 Nov 2023 22:11:52 +0000 (23:11 +0100)
committerAdrián Arroyo Calle <[email protected]>
Tue, 28 Nov 2023 22:30:02 +0000 (23:30 +0100)
Cargo.toml
src/machine/system_calls.rs

index ae273b0d34ce9b4652849fd79d2fcaffc22e159a..922ecdec41887372b91bc76b45ca554cda2e3895 100644 (file)
@@ -98,7 +98,7 @@ console_error_panic_hook = "0.1"
 wasm-bindgen = "0.2.87"
 wasm-bindgen-futures = "0.4"
 serde-wasm-bindgen = "0.5"
-web-sys = { version = "0.3", features = ["Document", "Window", "Element"] }
+web-sys = { version = "0.3", features = ["Document", "Window", "Element", "Performance"] }
 js-sys = "0.3"
 
 [target.'cfg(target_os = "wasi")'.dependencies]
index 5a956e18367f7da5e5a3b6632fa24dd965210fae..758bbc9d8d064fff4f89757072a3c3def2693376 100644 (file)
@@ -4191,7 +4191,14 @@ impl Machine {
     #[cfg(target_arch = "wasm32")]
     #[inline(always)]
     pub(crate) fn cpu_now(&mut self) {
-        // TODO
+        let millisecs = web_sys::window()
+            .expect("window global object should be available")
+            .performance()
+            .expect("performance property in window should be available")
+            .now();
+        let secs = float_alloc!(millisecs / 1000.0, self.machine_st.arena);
+
+        self.machine_st.unify_f64(secs, self.deref_register(1));
     }
 
     #[inline(always)]
@@ -4894,7 +4901,7 @@ impl Machine {
         let code = self.deref_register(1);
         let result_reg = self.deref_register(2);
         if let Some(code) = self.machine_st.value_to_str_like(code) {
-            let result = match js_sys::eval(&code.as_str()) {
+            match js_sys::eval(&code.as_str()) {
                 Ok(result) => self.unify_js_value(result, result_reg),
                 Err(result) => self.unify_js_value(result, result_reg),
             };