1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#[cfg(all(feature = "debug-print", target_arch = "wasm32"))]
mod inner {
    use crate::memory::{build_region, Region};

    extern "C" {
        fn debug_print(text: u32);
    }

    pub fn _debug_print<S: AsRef<str>>(message: S) {
        let message_ref = message.as_ref();
        let region = build_region(message_ref.as_bytes());
        let message_ptr = &*region as *const Region as u32;
        unsafe { debug_print(message_ptr) }
    }
}

#[cfg(all(feature = "debug-print", target_arch = "wasm32"))]
pub use inner::_debug_print as debug_print;

#[cfg(not(all(feature = "debug-print", target_arch = "wasm32")))]
#[inline(always)]
pub fn debug_print<S: AsRef<str>>(_message: S) {}

#[macro_export]
macro_rules! debug_print {
    ($($tts: tt)*) => {
        $crate::debug_print(&format!($($tts)*))
    };
}