mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-03-16 18:20:51 +00:00
In debug mode log all imported uncaught exceptions
This commit updates the `--debug` output of `wasm-bindgen` from the CLI to catch all JS exceptions from imported functions, log such, and then rethrow. It's hoped that this can be used when necessary to learn more information about thrown exceptions and where an uncaught exception could be causing issues with Rust code. Closes #1176
This commit is contained in:
parent
666c1e4584
commit
f2f11a01a2
@ -2410,6 +2410,9 @@ impl<'a, 'b> SubContext<'a, 'b> {
|
||||
// Build up our shim's state, and we'll use that to guide whether we
|
||||
// actually emit an import here or not.
|
||||
let mut shim = Rust2Js::new(self.cx);
|
||||
if shim.cx.config.debug {
|
||||
shim.catch_and_rethrow(true);
|
||||
}
|
||||
shim.catch(import.catch)
|
||||
.variadic(import.variadic)
|
||||
.process(descriptor.unwrap_function())?;
|
||||
|
@ -36,6 +36,7 @@ pub struct Rust2Js<'a, 'b: 'a> {
|
||||
|
||||
/// Whether or not we're catching JS exceptions
|
||||
catch: bool,
|
||||
catch_and_rethrow: bool,
|
||||
|
||||
/// Whether or not the last argument is a slice representing variadic arguments.
|
||||
variadic: bool,
|
||||
@ -53,6 +54,7 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
|
||||
arg_idx: 0,
|
||||
ret_expr: String::new(),
|
||||
catch: false,
|
||||
catch_and_rethrow: false,
|
||||
variadic: false,
|
||||
}
|
||||
}
|
||||
@ -62,6 +64,11 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn catch_and_rethrow(&mut self, catch_and_rethrow: bool) -> &mut Self {
|
||||
self.catch_and_rethrow = catch_and_rethrow;
|
||||
self
|
||||
}
|
||||
|
||||
pub fn variadic(&mut self, variadic: bool) -> &mut Self {
|
||||
self.variadic = variadic;
|
||||
self
|
||||
@ -505,6 +512,7 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
|
||||
let Rust2Js {
|
||||
// fields which may affect whether we do nontrivial work
|
||||
catch,
|
||||
catch_and_rethrow,
|
||||
finally,
|
||||
js_arguments,
|
||||
prelude,
|
||||
@ -520,6 +528,7 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
|
||||
} = self;
|
||||
|
||||
!catch &&
|
||||
!catch_and_rethrow &&
|
||||
!variadic &&
|
||||
prelude.is_empty() &&
|
||||
finally.is_empty() &&
|
||||
@ -639,7 +648,21 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
|
||||
",
|
||||
&invoc, catch
|
||||
);
|
||||
};
|
||||
} else if self.catch_and_rethrow {
|
||||
invoc = format!(
|
||||
"\
|
||||
try {{\n\
|
||||
{}
|
||||
}} catch (e) {{\n\
|
||||
console.error(\"wasm-bindgen: imported JS function that \
|
||||
was not marked as `catch` threw an error:\", \
|
||||
e);
|
||||
throw e;
|
||||
}}\
|
||||
",
|
||||
&invoc,
|
||||
);
|
||||
}
|
||||
|
||||
if self.finally.len() > 0 {
|
||||
invoc = format!(
|
||||
|
Loading…
x
Reference in New Issue
Block a user