Hi,
In my library I have to catch errors in JS and let C++ do something with them.
A typical catch block in JS looks like this:
catch (re) {
if (re instanceof RecognitionException) {
this.getErrorHandler().reportError(this, re);
this.getErrorHandler().recover(this);
} else {
throw re;
}
}
The call to `recover` prints this message, however (-s ASSERTION used with -O3):
Aborted(native code called abort())
The native code is:
void BailErrorStrategy::recover(Parser *recognizer, std::exception_ptr e) {
ParserRuleContext *context = recognizer->getContext();
do {
context->exception = e;
if (context->parent == nullptr)
break;
context = static_cast<ParserRuleContext *>(context->parent);
} while (true);
try {
std::rethrow_exception(e); // Throw the exception to be able to catch and
rethrow nested.
} catch (RecognitionException & /*inner*/) {
std::throw_with_nested(ParseCancellationException());
}
}
I traced the execution to the `std::rethrow_exception` line, which ends this
call prematurely with the above error. To see if it is just a different
exception I added a catch(...) clause, but that is never executed, so to me it
looks as if `std::rethrow_exception` is something that cannot be used in
WebAssembly. Is that assumption correct and what can I do to overcome that
problem?
Mike
--
www.soft-gems.net
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/emscripten-discuss/3E0EEA6F-D458-4771-8443-FD4E242808D4%40googlemail.com.