From 024af6a7785012551aa829adf3270837d1aef7c1 Mon Sep 17 00:00:00 2001 From: Kyler Date: Sun, 30 Nov 2025 22:10:28 -0700 Subject: [PATCH] Added TRUTHY preprocessor macro --- SLS_C/src/builtin.c | 95 +++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 46 deletions(-) diff --git a/SLS_C/src/builtin.c b/SLS_C/src/builtin.c index 5d484e1..31b9fc2 100644 --- a/SLS_C/src/builtin.c +++ b/SLS_C/src/builtin.c @@ -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) { NUMERIC_TYPES; ARITHMETIC(+); @@ -1549,52 +1597,7 @@ Boolean builtin_if(InterpreterState *interpreter_state) { interpreter_state->stack = conditional->next; conditional->next = NULL; - Boolean value = FALSE; - 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; - } + TRUTHY; Boolean return_value = FALSE; if (value) {