aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Pesch <inolen@gmail.com>2013-09-01 11:32:33 -0700
committerAnthony Pesch <inolen@gmail.com>2013-09-01 13:10:00 -0700
commit23d3488895071f1b8f71f45509ee36f40662cedd (patch)
treee2faaa21d5543c3fc6be19c218cb388039dee051
parent02cfae8fdda8f6916ae12c6cda947a7aa2084014 (diff)
gracefully handle ExitStatus exception in async main loops
-rw-r--r--src/library_browser.js10
-rw-r--r--src/postamble.js10
2 files changed, 18 insertions, 2 deletions
diff --git a/src/library_browser.js b/src/library_browser.js
index 235ccc78..e4966e15 100644
--- a/src/library_browser.js
+++ b/src/library_browser.js
@@ -724,7 +724,15 @@ mergeInto(LibraryManager.library, {
Module['preMainLoop']();
}
- Runtime.dynCall('v', func);
+ try {
+ Runtime.dynCall('v', func);
+ } catch (e) {
+ if (e instanceof ExitStatus) {
+ return;
+ } else {
+ throw e;
+ }
+ }
if (Module['postMainLoop']) {
Module['postMainLoop']();
diff --git a/src/postamble.js b/src/postamble.js
index df844121..897bb269 100644
--- a/src/postamble.js
+++ b/src/postamble.js
@@ -126,7 +126,15 @@ function exit(status) {
// exit the runtime
exitRuntime();
-
+
+ // TODO We should handle this differently based on environment.
+ // In the browser, the best we can do is throw an exception
+ // to halt execution, but in node we could process.exit and
+ // I'd imagine SM shell would have something equivalent.
+ // This would let us set a proper exit status (which
+ // would be great for checking test exit statuses).
+ // https://github.com/kripken/emscripten/issues/1371
+
// throw an exception to halt the current execution
throw new ExitStatus(status);
}