mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-03-16 18:20:51 +00:00
Merge pull request #1179 from alexcrichton/catch-all-errors
In debug mode log all imported uncaught exceptions
This commit is contained in:
commit
715b4f4ced
@ -2420,6 +2420,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