diff options
-rw-r--r-- | wasm/asyncify.h | 10 | ||||
-rw-r--r-- | wasm/setjmp.c | 70 | ||||
-rw-r--r-- | wasm/setjmp.h | 34 |
3 files changed, 114 insertions, 0 deletions
@@ -3,8 +3,18 @@ __attribute__((import_module("asyncify"), import_name("start_unwind"))) void asyncify_start_unwind(void *buf); __attribute__((import_module("asyncify"), import_name("stop_unwind"))) void asyncify_stop_unwind(void); __attribute__((import_module("asyncify"), import_name("start_rewind"))) void asyncify_start_rewind(void *buf); __attribute__((import_module("asyncify"), import_name("stop_rewind"))) @@ -57,6 +57,7 @@ async_buf_init(struct __rb_wasm_asyncify_jmp_buf* buf) // Global unwinding/rewinding jmpbuf state static rb_wasm_jmp_buf *_rb_wasm_active_jmpbuf; __attribute__((noinline)) int @@ -106,6 +107,75 @@ _rb_wasm_longjmp(rb_wasm_jmp_buf* env, int value) asyncify_start_unwind(&env->longjmp_buf); } void * rb_wasm_handle_jmp_unwind(void) { @@ -58,4 +58,38 @@ typedef rb_wasm_jmp_buf jmp_buf; #define setjmp(env) rb_wasm_setjmp(env) #define longjmp(env, payload) rb_wasm_longjmp(env, payload) #endif |