aboutsummaryrefslogtreecommitdiff
path: root/src/library.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-04-12 11:34:53 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-04-12 11:34:53 -0700
commit2d9dd53139cfa452d4eaa4c2df7ac70ddac640c9 (patch)
treeae08d03d7ecdd54277fc8d1eb2694f472cb6afaf /src/library.js
parent835c1e426ab0967d65bd41303c646c8e904a82d3 (diff)
move exception resuming into a dedicated function
Diffstat (limited to 'src/library.js')
-rw-r--r--src/library.js11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/library.js b/src/library.js
index 294ab200..2e0f3afb 100644
--- a/src/library.js
+++ b/src/library.js
@@ -5156,7 +5156,7 @@ LibraryManager.library = {
// functionality boils down to picking a suitable 'catch' block.
// We'll do that here, instead, to keep things simpler.
- __cxa_find_matching_catch__deps: ['__cxa_does_inherit', '__cxa_is_number_type'],
+ __cxa_find_matching_catch__deps: ['__cxa_does_inherit', '__cxa_is_number_type', '__resumeException'],
__cxa_find_matching_catch: function(thrown, throwntype) {
if (thrown == -1) thrown = {{{ makeGetValue('_llvm_eh_exception.buf', '0', 'void*') }}};
if (throwntype == -1) throwntype = {{{ makeGetValue('_llvm_eh_exception.buf', QUANTUM_SIZE, 'void*') }}};
@@ -5185,6 +5185,15 @@ LibraryManager.library = {
{{{ makeStructuralReturn(['thrown', 'throwntype']) }}};
},
+ __resumeException__deps: [function() { Functions.libraryFunctions['__resumeException'] = 1 }], // will be called directly from compiled code
+ __resumeException: function(ptr) {
+#if EXCEPTION_DEBUG
+ Module.print("Resuming exception");
+#endif
+ if ({{{ makeGetValue('_llvm_eh_exception.buf', 0, 'void*') }}} == 0) {{{ makeSetValue('_llvm_eh_exception.buf', 0, 'ptr', 'void*') }}};
+ {{{ makeThrow('ptr') }}};
+ },
+
// Recursively walks up the base types of 'possibilityType'
// to see if any of them match 'definiteType'.
__cxa_does_inherit__deps: ['__cxa_is_number_type'],