diff options
| author | Alon Zakai <alonzakai@gmail.com> | 2013-09-09 13:18:22 -0700 | 
|---|---|---|
| committer | Alon Zakai <alonzakai@gmail.com> | 2013-09-09 13:18:22 -0700 | 
| commit | cf0d875a089916b63d051b2e36d7cc00510e0c84 (patch) | |
| tree | 800d1cf74bfc4354e686ae5597dd5046732eb32b | |
| parent | 1d6d0572192981def4b7d4ec5d25285bb4d82183 (diff) | |
| parent | 23d3488895071f1b8f71f45509ee36f40662cedd (diff) | |
Merge pull request #1578 from inolen/browser_exception
gracefully handle ExitStatus exception in async main loops
| -rw-r--r-- | src/library_browser.js | 10 | ||||
| -rw-r--r-- | src/postamble.js | 10 | 
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 d3212767..94b60288 100644 --- a/src/postamble.js +++ b/src/postamble.js @@ -128,7 +128,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);  }  | 
