diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-04-12 11:34:53 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-04-12 11:34:53 -0700 |
commit | 2d9dd53139cfa452d4eaa4c2df7ac70ddac640c9 (patch) | |
tree | ae08d03d7ecdd54277fc8d1eb2694f472cb6afaf /src/library.js | |
parent | 835c1e426ab0967d65bd41303c646c8e904a82d3 (diff) |
move exception resuming into a dedicated function
Diffstat (limited to 'src/library.js')
-rw-r--r-- | src/library.js | 11 |
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'], |