mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
C: fix exception handling semantics with longjmp
This commit is contained in:
parent
bb4315e486
commit
00fba54d7b
|
@ -16,18 +16,18 @@
|
|||
jmp_buf* teavm_oldTryBuffer = teavm_shadowStack.header.jmpTarget; \
|
||||
teavm_shadowStack.header.jmpTarget = &teavm_tryBuffer; \
|
||||
int teavm_exceptionHandler = setjmp(teavm_tryBuffer); \
|
||||
switch (teavm_exceptionHandler) { \
|
||||
case 0: {
|
||||
if (teavm_exceptionHandler == 0) {
|
||||
#define TEAVM_CATCH \
|
||||
break; \
|
||||
} \
|
||||
default: { \
|
||||
longjmp(*teavm_oldTryBuffer, teavm_exceptionHandler); \
|
||||
break; \
|
||||
}
|
||||
teavm_shadowStack.header.jmpTarget = teavm_oldTryBuffer; \
|
||||
} else { \
|
||||
teavm_shadowStack.header.jmpTarget = teavm_oldTryBuffer; \
|
||||
switch (teavm_exceptionHandler) {
|
||||
#define TEAVM_END_TRY \
|
||||
default: \
|
||||
longjmp(*teavm_oldTryBuffer, teavm_exceptionHandler); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
teavm_shadowStack.header.jmpTarget = teavm_oldTryBuffer; \
|
||||
} while (0);
|
||||
|
||||
#define TEAVM_JUMP_TO_FRAME(frame, id) \
|
||||
|
|
Loading…
Reference in New Issue
Block a user