diff --git a/src/lexer/SolsToken.c b/src/lexer/SolsToken.c index 986cb07..3404e92 100644 --- a/src/lexer/SolsToken.c +++ b/src/lexer/SolsToken.c @@ -61,3 +61,15 @@ void freeSolsToken(SolsToken* token) { freeSolsType(&token->as.type); } } + +ResultType(SolsTokens, charptr) createSolsTokens() { + SolsTokens tokens = { + .at = malloc(sizeof(SolsToken) * 32), + .capacity = 32, + .count = 0 + }; + if (tokens.at == NULL) { + return Error(SolsTokens, charptr, "Failed to allocate memory (in createSolsTokens() function)"); + } + return Success(SolsTokens, charptr, tokens); +} diff --git a/src/lexer/SolsToken.h b/src/lexer/SolsToken.h index 9437f97..d5c9f12 100644 --- a/src/lexer/SolsToken.h +++ b/src/lexer/SolsToken.h @@ -50,5 +50,9 @@ typedef struct SolsTokens { size_t capacity; } SolsTokens; +Result(SolsTokens, charptr); +// Creates a SolsTokens holder. +ResultType(SolsTokens, charptr) createSolsTokens(); + #endif diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 51e335a..6c063ba 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -1,5 +1,7 @@ #include "lexer.h" +#include "SolsToken.h" #include "../include/error.h" +#include "../include/estr.h" ResultType(SolsLexer, charptr) createLexer(char* input) { char* inputcopy = malloc(strlen(input) + 1); @@ -7,8 +9,15 @@ ResultType(SolsLexer, charptr) createLexer(char* input) { return Error(SolsLexer, charptr, "Couldn't copy string into lexer (in createLexer() function)"); } strcpy(inputcopy, input); + ResultType(SolsTokens, charptr) tokens = createSolsTokens(); + if (tokens.error) { + Estr e = CREATE_ESTR(tokens.as.error); + APPEND_ESTR(e, " (in createLexer() function)"); + return Error(SolsLexer, charptr, e.str); + } SolsLexer lexer = { .input = inputcopy, + .output = tokens.as.success, .current = 0, }; return Success(SolsLexer, charptr, lexer);