diff --git a/SLS_C/src/builtin.c b/SLS_C/src/builtin.c index 24f1b1c..0f24b9c 100644 --- a/SLS_C/src/builtin.c +++ b/SLS_C/src/builtin.c @@ -1506,8 +1506,20 @@ Boolean builtin_dup(InterpreterState *interpreter_state) { } Boolean builtin_eval(InterpreterState *interpreter_state) { - (void)interpreter_state; - return FALSE; + if (interpreter_state->stack == NULL) return FALSE; + StackItem *code_target = interpreter_state->stack; + + interpreter_state->stack = code_target->next; + code_target->next = NULL; + + Boolean return_value = FALSE; + if (code_target->type == STACK_TOKEN_STRING || code_target->type == STACK_CODE_BLOCK) + return_value = execute_token_string(interpreter_state, code_target->token_string); + else if (code_target->type == STACK_IDENTIFIER) + return_value = execute_func(interpreter_state, code_target->identifier.name); + + clean_stack(code_target); + return return_value; } Boolean builtin_floor(InterpreterState *interpreter_state) {