Skip to content

Commit

Permalink
Merge pull request #1179 from alexcrichton/catch-all-errors
Browse files Browse the repository at this point in the history
In debug mode log all imported uncaught exceptions
  • Loading branch information
alexcrichton committed Jan 15, 2019
2 parents 5c04427 + f2f11a0 commit 715b4f4
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
3 changes: 3 additions & 0 deletions crates/cli-support/src/js/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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())?;
Expand Down
25 changes: 24 additions & 1 deletion crates/cli-support/src/js/rust2js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
}
}
Expand All @@ -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
Expand Down Expand Up @@ -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,
Expand All @@ -520,6 +528,7 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
} = self;

!catch &&
!catch_and_rethrow &&
!variadic &&
prelude.is_empty() &&
finally.is_empty() &&
Expand Down Expand Up @@ -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!(
Expand Down

0 comments on commit 715b4f4

Please sign in to comment.