[−][src]Macro abi_stable::extern_fn_panic_handling
Use this to make sure that you handle panics inside extern fn
correctly.
This macro causes an abort if a panic reaches this point.
It does not prevent functions inside from using ::std::panic::catch_unwind
to catch the panic.
Early returns
This macro by default wraps the passed code in a closure so that any early returns that happen inside don't interfere with the macro generated code.
If you don't have an early return (a return
/continue
/break
)
in the code passed to this macro you can use
extern_fn_panic_handling!{no_early_return; <code here> }
,
which might be cheaper(this has not been tested yet).
Example
use std::fmt; use abi_stable::{ extern_fn_panic_handling, std_types::RString, }; pub extern "C" fn print_debug<T>(this: &T,buf: &mut RString) where T: fmt::Debug, { extern_fn_panic_handling! { use std::fmt::Write; println!("{:?}",this); } }
Example, no_early_return
use std::fmt; use abi_stable::{ extern_fn_panic_handling, std_types::RString, }; pub extern "C" fn print_debug<T>(this: &T,buf: &mut RString) where T: fmt::Debug, { extern_fn_panic_handling!{no_early_return; use std::fmt::Write; println!("{:?}",this); } }