implemented and, not, and or

This commit is contained in:
Kyler Olsen 2025-11-29 15:11:42 -07:00
parent aa8a69b261
commit 2f36271439
1 changed files with 64 additions and 4 deletions

View File

@ -26,6 +26,7 @@ Boolean builtin_equal_to(InterpreterState *interpreter_state);
Boolean builtin_not_equal_to(InterpreterState *interpreter_state); Boolean builtin_not_equal_to(InterpreterState *interpreter_state);
Boolean builtin_abs(InterpreterState *interpreter_state); Boolean builtin_abs(InterpreterState *interpreter_state);
Boolean builtin_acos(InterpreterState *interpreter_state); Boolean builtin_acos(InterpreterState *interpreter_state);
Boolean builtin_and(InterpreterState *interpreter_state);
Boolean builtin_asin(InterpreterState *interpreter_state); Boolean builtin_asin(InterpreterState *interpreter_state);
// Boolean builtin_assert(InterpreterState *interpreter_state); // Boolean builtin_assert(InterpreterState *interpreter_state);
// Boolean builtin_at(InterpreterState *interpreter_state); // Boolean builtin_at(InterpreterState *interpreter_state);
@ -204,6 +205,12 @@ Boolean load_builtins(InterpreterState *interpreter_state) {
if (!hash_table_put_funcs(interpreter_state->functions, SLS_STR("acos"), func)) if (!hash_table_put_funcs(interpreter_state->functions, SLS_STR("acos"), func))
return FALSE; return FALSE;
func = (FunctionItem *)malloc(sizeof(FunctionItem));
if (func == NULL) return FALSE;
*func = (FunctionItem){ .type = FUNCTION_BUILTIN, .builtin = *builtin_and};
if (!hash_table_put_funcs(interpreter_state->functions, SLS_STR("acos"), func))
return FALSE;
func = (FunctionItem *)malloc(sizeof(FunctionItem)); func = (FunctionItem *)malloc(sizeof(FunctionItem));
if (func == NULL) return FALSE; if (func == NULL) return FALSE;
*func = (FunctionItem){ .type = FUNCTION_BUILTIN, .builtin = *builtin_asin}; *func = (FunctionItem){ .type = FUNCTION_BUILTIN, .builtin = *builtin_asin};
@ -1049,6 +1056,27 @@ Boolean builtin_acos(InterpreterState *interpreter_state) {
FLOAT_FUNCTION(acos); FLOAT_FUNCTION(acos);
} }
Boolean builtin_and(InterpreterState *interpreter_state) {
NUMERIC_TYPES;
StackItem *node = interpreter_state->stack;
interpreter_state->stack = interpreter_state->stack->next->next;
node->next->next = NULL;
clean_stack(node);
if (type & NUMERIC_FLOAT) {
return push_token(interpreter_state, (Token){
.type = TOKEN_BOOLEAN,
.boolean_literal = (Boolean){ bf && af },
});
} else {
return push_token(interpreter_state, (Token){
.type = TOKEN_BOOLEAN,
.boolean_literal = (Boolean){ bi && ai },
});
}
}
Boolean builtin_asin(InterpreterState *interpreter_state) { Boolean builtin_asin(InterpreterState *interpreter_state) {
NUMERIC_TYPE; NUMERIC_TYPE;
if (af < -1 || af > 1) return FALSE; if (af < -1 || af > 1) return FALSE;
@ -1180,13 +1208,45 @@ Boolean builtin_min(InterpreterState *interpreter_state) {
} }
Boolean builtin_not(InterpreterState *interpreter_state) { Boolean builtin_not(InterpreterState *interpreter_state) {
(void)interpreter_state; NUMERIC_TYPE;
return FALSE;
StackItem *node = interpreter_state->stack;
interpreter_state->stack = interpreter_state->stack->next->next;
node->next->next = NULL;
clean_stack(node);
if (type & NUMERIC_FLOAT) {
return push_token(interpreter_state, (Token){
.type = TOKEN_BOOLEAN,
.boolean_literal = (Boolean){ !af },
});
} else {
return push_token(interpreter_state, (Token){
.type = TOKEN_BOOLEAN,
.boolean_literal = (Boolean){ !ai },
});
}
} }
Boolean builtin_or(InterpreterState *interpreter_state) { Boolean builtin_or(InterpreterState *interpreter_state) {
(void)interpreter_state; NUMERIC_TYPES;
return FALSE;
StackItem *node = interpreter_state->stack;
interpreter_state->stack = interpreter_state->stack->next->next;
node->next->next = NULL;
clean_stack(node);
if (type & NUMERIC_FLOAT) {
return push_token(interpreter_state, (Token){
.type = TOKEN_BOOLEAN,
.boolean_literal = (Boolean){ bf || af },
});
} else {
return push_token(interpreter_state, (Token){
.type = TOKEN_BOOLEAN,
.boolean_literal = (Boolean){ bi || ai },
});
}
} }
Boolean builtin_pick(InterpreterState *interpreter_state) { Boolean builtin_pick(InterpreterState *interpreter_state) {