diff --git a/SLS_C/include/sls/interpreter.h b/SLS_C/include/sls/interpreter.h index 75ec261..9b3c1d2 100644 --- a/SLS_C/include/sls/interpreter.h +++ b/SLS_C/include/sls/interpreter.h @@ -57,7 +57,7 @@ typedef struct { HashTable *functions; } InterpreterState; -void execute(InterpreterState *interpreter_state, LexerTokenResult *token); +Boolean execute(InterpreterState *interpreter_state, LexerTokenResult *token); InterpreterState *interpreter_create(); void interpreter_delete(InterpreterState *interpreter_state); diff --git a/SLS_C/src/interpreter.c b/SLS_C/src/interpreter.c index 3393c6d..a589c78 100644 --- a/SLS_C/src/interpreter.c +++ b/SLS_C/src/interpreter.c @@ -3,6 +3,8 @@ // Interpreter // November 2025 +#include + #include "sls/string.h" #include "sls/interpreter.h" #include "sls/lexer.h" @@ -37,8 +39,19 @@ static TokenString *hash_table_get_funcs(const HashTable *ht, SlsStr key, TokenS return (TokenString*)hash_table_get(ht, key, (void *)default_item); } -void execute(InterpreterState *interpreter_state, LexerTokenResult *token) { - +static Boolean push_token(InterpreterState *interpreter_state, Token token) { + +} + +static Boolean execute_func(InterpreterState *interpreter_state, SlsStr key) { + +} + +Boolean execute(InterpreterState *interpreter_state, LexerTokenResult *token) { + if (token->result.type == TOKEN_IDENTIFIER && !token->result.identifier.is_literal) + return execute_func(interpreter_state, token->result.identifier.name); + else + return push_token(interpreter_state, token->result); } InterpreterState *interpreter_create() { diff --git a/SLS_C/src/repl.c b/SLS_C/src/repl.c index 1245109..fc31b21 100644 --- a/SLS_C/src/repl.c +++ b/SLS_C/src/repl.c @@ -49,7 +49,10 @@ int repl(int argc, char *argv[]) { printf("%s\n", head->error.message.str); break; } else - execute(interpreter_state, head); + if (!execute(interpreter_state, head)) { + printf("A runtime error occurred!"); + break; + } head = head->next; } clean_token_result(result.result);