aheejin wrote:
I'm not sure if I understand why this is necessary.
> This is a setjmp-like API that catches JavaScript errors. Its signature is
> `externref_t __builtin_wasm_js_catch(int *status);` The first time it
> returns, the return value is `null` and *status is set to 0. If we later call
> a function that raises a JavaScript error, control jumps back to the most
> recently executed call to `__builtin_wasm_js_catch()` which this time sets
> `*status` to 1 and returns the caught JS error.
Why this peculiar workflow? Why don't we catch something in a normal way, like,
wrapping something with a JS `try` block?
> I think this is a generally useful thing to be able to do to handle errors in
> `EM_JS` functions, but it is possible to use JS try/catch for that. However,
> this is necessary in order to catch a SuspendError since it is generated
> within the import wrapper internally to the runtime and there is no way to
> catch the SuspendError in JavaScript.
Maybe I don't have the right context on what you're referring to, but
```js
try {
jsfunc1();
} catch (e) {
if (e instanceof WebAssembly.SuspendError) {
// Do something...
}
}
```
Why doesn't this work?
https://github.com/llvm/llvm-project/pull/153767
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits