diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-04-18 21:04:54 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-04-18 21:04:54 -0700 |
commit | 544b922fd0059996989cc8aa12237d97bf5125bb (patch) | |
tree | 15a838ca3a9618af9c3b2beff6d3bbf4fd057aba | |
parent | c0074e01ac06a66faf3e9d91f1cecb4ff02c7ee9 (diff) |
throw in longjmp, do not overwrite previous throw data in setThrew, and enable test_longjmp in asm
-rwxr-xr-x | emscripten.py | 6 | ||||
-rw-r--r-- | src/library.js | 1 | ||||
-rwxr-xr-x | tests/runner.py | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/emscripten.py b/emscripten.py index 0fa6ac30..6d384a96 100755 --- a/emscripten.py +++ b/emscripten.py @@ -514,8 +514,10 @@ var asm = (function(global, env, buffer) { function setThrew(threw, value) { threw = threw|0; value = value|0; - __THREW__ = threw; - threwValue = value; + if ((__THREW__|0) == 0) { + __THREW__ = threw; + threwValue = value; + } } ''' + ''.join([''' function setTempRet%d(value) { diff --git a/src/library.js b/src/library.js index 95aa2ede..f9ed3ee6 100644 --- a/src/library.js +++ b/src/library.js @@ -6281,6 +6281,7 @@ LibraryManager.library = { longjmp: function(env, value) { #if ASM_JS asm.setThrew(env, value || 1); + throw 'longjmp'; #else throw { longjmp: true, id: {{{ makeGetValue('env', '0', 'i32') }}}, value: value || 1 }; #endif diff --git a/tests/runner.py b/tests/runner.py index b3d995bf..f6614048 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -2310,8 +2310,6 @@ cat |umber one top notchfi FI FO FUM WHEN WHERE WHY HOW WHO|''', ['wowie', 'too' self.do_run(src, 'Assertion failed: 1 == false') def test_longjmp(self): - if Settings.ASM_JS: return self.skip('asm does not support longjmp') - src = r''' #include <stdio.h> #include <setjmp.h> |