Use macro to generate tryDereference

This commit is contained in:
Lucas Schumacher 2024-07-11 16:20:55 -04:00
parent 324231b00f
commit 11e9135f06

26
mem.c
View File

@ -16,19 +16,21 @@ void segfault_handler(int signal_num) {
exit(signal_num); exit(signal_num);
} }
} }
int tryDereference(uint8_t* pointer, uint8_t* output) { #define IMPL_TRY_DEREF(type) \
uintptr_t val; int tryDereference(type* pointer, type* output) { \
if (setjmp(env_buffer) == 0) { type val;\
enable_handler = 1; if(setjmp(env_buffer) == 0) {\
*output = *pointer; enable_handler = 1;\
enable_handler = 0; *output = *pointer;\
return 1; enable_handler = 0;\
return 1;\
} else {\
enable_handler = 0;\
return 0;\
}\
} }
else { IMPL_TRY_DEREF(uint8_t)
enable_handler = 0;
return 0;
}
}
void printMem(uint8_t* location) { void printMem(uint8_t* location) {
uint8_t value; uint8_t value;
if(tryDereference(location, &value)) { if(tryDereference(location, &value)) {