From d9282afec53d3d46d17ebc2ce8e7f64d849f1bc2 Mon Sep 17 00:00:00 2001 From: Fabian Date: Mon, 20 Aug 2018 17:38:27 -0500 Subject: [PATCH] Force logging of panic messages --- src/browser/starter.js | 4 ++++ src/rust/c_api.rs | 4 ++-- src/rust/dbg.rs | 45 +++++++++++++++++++++++++++++++++--------- src/rust/util.rs | 12 ++++++++++- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/browser/starter.js b/src/browser/starter.js index 00dc28df..55ef3784 100644 --- a/src/browser/starter.js +++ b/src/browser/starter.js @@ -258,6 +258,10 @@ function V86Starter(options) const str = v86util.read_sized_string_from_mem(v86oxide.exports.memory, offset, len); dbg_log(str, LOG_CPU); }, + "console_log_from_wasm": function(offset, len) { + const str = v86util.read_sized_string_from_mem(v86oxide.exports.memory, offset, len); + console.error(str); + }, "codegen_finalize": (wasm_table_index, start, end, first_opcode, state_flags) => cpu.codegen_finalize(wasm_table_index, start, end, first_opcode, state_flags), "__indirect_function_table": wasm_table, "floor": Math.floor, diff --git a/src/rust/c_api.rs b/src/rust/c_api.rs index 5262d781..ea8145c6 100644 --- a/src/rust/c_api.rs +++ b/src/rust/c_api.rs @@ -22,14 +22,14 @@ pub fn rust_setup() { panic::set_hook(Box::new(|panic_info| { if let Some(location) = panic_info.location() { - dbg_log!( + console_log!( "panic occurred in file '{}' at line {}", location.file(), location.line() ); } else { - dbg_log!("panic occurred but can't get location information..."); + console_log!("panic occurred but can't get location information..."); } })); } diff --git a/src/rust/dbg.rs b/src/rust/dbg.rs index d03dbb7f..bb208a25 100644 --- a/src/rust/dbg.rs +++ b/src/rust/dbg.rs @@ -8,6 +8,16 @@ macro_rules! dbg_log { } } +#[allow(unused_macros)] +macro_rules! console_log { + ($fmt:expr) => { + println!($fmt); + }; + ($fmt:expr, $($arg:tt)*) => { + println!($fmt, $($arg)*); + } +} + #[allow(unused_macros)] macro_rules! dbg_assert { ($($arg:tt)*) => { @@ -17,17 +27,34 @@ macro_rules! dbg_assert { #[cfg(target_arch = "wasm32")] #[allow(unused_macros)] -macro_rules! dbg_log { +macro_rules! console_log { ($fmt:expr) => { { - use ::util::{ DEBUG, _log_to_js_console }; - if DEBUG { _log_to_js_console($fmt); } + use ::util::{ console_log_to_js_console }; + console_log_to_js_console($fmt); } }; ($fmt:expr, $($arg:tt)*) => { { - use ::util::{ DEBUG, _log_to_js_console }; - if DEBUG { _log_to_js_console(format!($fmt, $($arg)*)); } + use ::util::{ console_log_to_js_console }; + console_log_to_js_console(format!($fmt, $($arg)*)); + } + }; +} + +#[cfg(target_arch = "wasm32")] +#[allow(unused_macros)] +macro_rules! dbg_log { + ($fmt:expr) => { + { + use ::util::{ DEBUG, log_to_js_console }; + if DEBUG { log_to_js_console($fmt); } + } + }; + ($fmt:expr, $($arg:tt)*) => { + { + use ::util::{ DEBUG, log_to_js_console }; + if DEBUG { log_to_js_console(format!($fmt, $($arg)*)); } } }; } @@ -36,9 +63,9 @@ macro_rules! dbg_log { #[allow(unused_macros)] macro_rules! dbg_assert { ($cond:expr) => {{ - use util::{_log_to_js_console, abort, DEBUG}; + use util::{abort, log_to_js_console, DEBUG}; if DEBUG && !$cond { - _log_to_js_console(format!( + log_to_js_console(format!( "Assertion failed at {}:{}:{}: '{}'", file!(), line!(), @@ -52,9 +79,9 @@ macro_rules! dbg_assert { } }}; ($cond:expr, $desc:expr) => {{ - use util::{_log_to_js_console, abort, DEBUG}; + use util::{abort, log_to_js_console, DEBUG}; if DEBUG && !$cond { - _log_to_js_console(format!( + log_to_js_console(format!( "Assertion failed at {}:{}:{}: '{}' - '{}'", file!(), line!(), diff --git a/src/rust/util.rs b/src/rust/util.rs index 98af60f6..f446195c 100644 --- a/src/rust/util.rs +++ b/src/rust/util.rs @@ -77,6 +77,7 @@ pub const DEBUG: bool = cfg!(debug_assertions); #[cfg(target_arch = "wasm32")] extern "C" { pub fn log_from_wasm(ptr: *const u8, len: usize); + pub fn console_log_from_wasm(ptr: *const u8, len: usize); pub fn abort(); } @@ -84,10 +85,19 @@ extern "C" { use std::string::ToString; #[cfg(target_arch = "wasm32")] -pub fn _log_to_js_console(s: T) { +pub fn log_to_js_console(s: T) { let s: String = s.to_string(); let len = s.len(); unsafe { log_from_wasm(s.as_bytes().as_ptr(), len); } } + +#[cfg(target_arch = "wasm32")] +pub fn console_log_to_js_console(s: T) { + let s: String = s.to_string(); + let len = s.len(); + unsafe { + console_log_from_wasm(s.as_bytes().as_ptr(), len); + } +}