From 4c795018b469f670a104b764668c699aeb029dd5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Adri=C3=A1n=20Arroyo=20Calle?= Date: Tue, 28 Nov 2023 23:11:52 +0100 Subject: [PATCH] Implement $cpu_now in wasm32 --- Cargo.toml | 2 +- src/machine/system_calls.rs | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ae273b0d..922ecdec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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] diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 5a956e18..758bbc9d 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -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), }; -- 2.54.0