aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-04-18 21:04:54 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-04-18 21:04:54 -0700
commit544b922fd0059996989cc8aa12237d97bf5125bb (patch)
tree15a838ca3a9618af9c3b2beff6d3bbf4fd057aba
parentc0074e01ac06a66faf3e9d91f1cecb4ff02c7ee9 (diff)
throw in longjmp, do not overwrite previous throw data in setThrew, and enable test_longjmp in asm
-rwxr-xr-xemscripten.py6
-rw-r--r--src/library.js1
-rwxr-xr-xtests/runner.py2
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>