diff --git a/SLS_C/src/builtin.c b/SLS_C/src/builtin.c index ce13d5a..19e7160 100644 --- a/SLS_C/src/builtin.c +++ b/SLS_C/src/builtin.c @@ -656,6 +656,20 @@ Boolean load_builtins(InterpreterState *interpreter_state) { return FALSE; \ } \ +#define FLOAT_FUNCTION(func) \ + (void)ai; \ + (void)type; \ + \ + StackItem *node = interpreter_state->stack; \ + interpreter_state->stack = interpreter_state->stack->next; \ + node->next = NULL; \ + clean_stack(node); \ + \ + return push_token(interpreter_state, (Token){ \ + .type = TOKEN_DOUBLE, \ + .double_literal = func(af), \ + }); \ + #define ARITHMETIC(op) \ StackItem *node = interpreter_state->stack; \ interpreter_state->stack = interpreter_state->stack->next->next; \ @@ -988,18 +1002,18 @@ Boolean builtin_abs(InterpreterState *interpreter_state) { } Boolean builtin_acos(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(acos); } Boolean builtin_asin(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(asin); } Boolean builtin_atan(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(atan); } Boolean builtin_atan2(InterpreterState *interpreter_state) { @@ -1033,8 +1047,8 @@ Boolean builtin_ceil(InterpreterState *interpreter_state) { } Boolean builtin_cos(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(cos); } Boolean builtin_depth(InterpreterState *interpreter_state) { @@ -1090,13 +1104,13 @@ Boolean builtin_lambda(InterpreterState *interpreter_state) { } Boolean builtin_ln(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(log); } Boolean builtin_log(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(log10); } Boolean builtin_logb(InterpreterState *interpreter_state) { @@ -1170,13 +1184,13 @@ Boolean builtin_shr(InterpreterState *interpreter_state) { } Boolean builtin_sin(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(sin); } Boolean builtin_sqrt(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(sqrt); } Boolean builtin_swap(InterpreterState *interpreter_state) { @@ -1185,8 +1199,8 @@ Boolean builtin_swap(InterpreterState *interpreter_state) { } Boolean builtin_tan(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + NUMERIC_TYPE; + FLOAT_FUNCTION(tan); } Boolean builtin_type_of(InterpreterState *interpreter_state) {