stuff
This commit is contained in:
@@ -61,3 +61,15 @@ void freeSolsToken(SolsToken* token) {
|
|||||||
freeSolsType(&token->as.type);
|
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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -50,5 +50,9 @@ typedef struct SolsTokens {
|
|||||||
size_t capacity;
|
size_t capacity;
|
||||||
} SolsTokens;
|
} SolsTokens;
|
||||||
|
|
||||||
|
Result(SolsTokens, charptr);
|
||||||
|
// Creates a SolsTokens holder.
|
||||||
|
ResultType(SolsTokens, charptr) createSolsTokens();
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "lexer.h"
|
#include "lexer.h"
|
||||||
|
#include "SolsToken.h"
|
||||||
#include "../include/error.h"
|
#include "../include/error.h"
|
||||||
|
#include "../include/estr.h"
|
||||||
|
|
||||||
ResultType(SolsLexer, charptr) createLexer(char* input) {
|
ResultType(SolsLexer, charptr) createLexer(char* input) {
|
||||||
char* inputcopy = malloc(strlen(input) + 1);
|
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)");
|
return Error(SolsLexer, charptr, "Couldn't copy string into lexer (in createLexer() function)");
|
||||||
}
|
}
|
||||||
strcpy(inputcopy, input);
|
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 = {
|
SolsLexer lexer = {
|
||||||
.input = inputcopy,
|
.input = inputcopy,
|
||||||
|
.output = tokens.as.success,
|
||||||
.current = 0,
|
.current = 0,
|
||||||
};
|
};
|
||||||
return Success(SolsLexer, charptr, lexer);
|
return Success(SolsLexer, charptr, lexer);
|
||||||
|
|||||||
Reference in New Issue
Block a user