Added TRUTHY preprocessor macro

This commit is contained in:
Kyler Olsen 2025-11-30 22:10:28 -07:00
parent 50f90dcf84
commit 024af6a778
1 changed files with 49 additions and 46 deletions

View File

@ -755,6 +755,54 @@ Boolean load_builtins(InterpreterState *interpreter_state) {
}); \ }); \
} \ } \
#define TRUTHY \
Boolean value = FALSE; \
switch (conditional->type) { \
case STACK_IDENTIFIER: \
value = FALSE; \
break; \
case STACK_I64: \
value = (conditional->i64) ? TRUE : FALSE; \
break; \
case STACK_I32: \
value = (conditional->i32) ? TRUE : FALSE; \
break; \
case STACK_I16: \
value = (conditional->i16) ? TRUE : FALSE; \
break; \
case STACK_I8: \
value = (conditional->i8) ? TRUE : FALSE; \
break; \
case STACK_U64: \
value = (conditional->u64) ? TRUE : FALSE; \
break; \
case STACK_U32: \
value = (conditional->u32) ? TRUE : FALSE; \
break; \
case STACK_U16: \
value = (conditional->u16) ? TRUE : FALSE; \
break; \
case STACK_U8: \
value = (conditional->u8) ? TRUE : FALSE; \
break; \
case STACK_FLOAT: \
value = (conditional->f32) ? TRUE : FALSE; \
break; \
case STACK_DOUBLE: \
value = (conditional->f64) ? TRUE : FALSE; \
break; \
case STACK_CHARACTER: \
value = (conditional->character) ? TRUE : FALSE; \
break; \
case STACK_BOOLEAN: \
value = conditional->boolean; \
break; \
case STACK_TOKEN_STRING: \
case STACK_CALLABLE: \
value = (conditional->token_string.length && conditional->token_string.tokens[0].type != TOKEN_EOF) ? TRUE : FALSE; \
break; \
} \
Boolean builtin_addition(InterpreterState *interpreter_state) { Boolean builtin_addition(InterpreterState *interpreter_state) {
NUMERIC_TYPES; NUMERIC_TYPES;
ARITHMETIC(+); ARITHMETIC(+);
@ -1549,52 +1597,7 @@ Boolean builtin_if(InterpreterState *interpreter_state) {
interpreter_state->stack = conditional->next; interpreter_state->stack = conditional->next;
conditional->next = NULL; conditional->next = NULL;
Boolean value = FALSE; TRUTHY;
switch (conditional->type) {
case STACK_IDENTIFIER:
value = TRUE;
break;
case STACK_I64:
value = (conditional->i64) ? TRUE : FALSE;
break;
case STACK_I32:
value = (conditional->i32) ? TRUE : FALSE;
break;
case STACK_I16:
value = (conditional->i16) ? TRUE : FALSE;
break;
case STACK_I8:
value = (conditional->i8) ? TRUE : FALSE;
break;
case STACK_U64:
value = (conditional->u64) ? TRUE : FALSE;
break;
case STACK_U32:
value = (conditional->u32) ? TRUE : FALSE;
break;
case STACK_U16:
value = (conditional->u16) ? TRUE : FALSE;
break;
case STACK_U8:
value = (conditional->u8) ? TRUE : FALSE;
break;
case STACK_FLOAT:
value = (conditional->f32) ? TRUE : FALSE;
break;
case STACK_DOUBLE:
value = (conditional->f64) ? TRUE : FALSE;
break;
case STACK_CHARACTER:
value = (conditional->character) ? TRUE : FALSE;
break;
case STACK_BOOLEAN:
value = conditional->boolean;
break;
case STACK_TOKEN_STRING:
case STACK_CALLABLE:
value = (conditional->token_string.length && conditional->token_string.tokens[0].type != TOKEN_EOF) ? TRUE : FALSE;
break;
}
Boolean return_value = FALSE; Boolean return_value = FALSE;
if (value) { if (value) {