Worked on token_string and memory errors

This commit is contained in:
Kyler Olsen 2025-11-27 01:16:37 -07:00
parent 2a03107e94
commit 3a61e250a9
2 changed files with 45 additions and 3 deletions

View File

@ -743,7 +743,17 @@ static LexerResult parse_token_string(LexerInfo *lexer_info, char c, size_t star
return (LexerResult){SLS_ERROR, .error = (SlsError){SLS_STR("Unknown Error."), 1}};
}
if (current->type == SLS_ERROR || current->result.type == TOKEN_EOF) break;
if (current->type == SLS_ERROR) {
LexerResult e = (LexerResult){SLS_RESULT, .result = &(LexerTokenResult){
.type = SLS_ERROR,
.error = (SlsError){sls_str_cpy(current->error.message), 1},
.file_info = current->file_info,
.next = NULL
}};
clean_token_result(head);
return e;
}
if (current->result.type == TOKEN_EOF) break;
c = peek(lexer_info);

View File

@ -494,9 +494,41 @@ Boolean test_array_struct_inline_value(LexerTest *test, LexerResult result, size
static LexerResult token_string_to_lexer_result(TokenString token_string, FileInfo file_info) {
LexerTokenResult *new, *head;
head = 0;
for (size_t i = 0; i < token_string.length; i++) {
for (size_t i = token_string.length; i > 0; i--) {
new = (LexerTokenResult *)malloc(sizeof(LexerTokenResult));
*new = (LexerTokenResult) { .type = SLS_RESULT, .result = token_string.tokens[i], .file_info = file_info, .next = head };
if (new == 0) return (LexerResult) { .type = SLS_ERROR, .error = (SlsError){SLS_STR("Out Of Memory Error."), 1} };
if (token_string.tokens[i-1].type == TOKEN_STRING) {
*new = (LexerTokenResult) {
.type = SLS_RESULT,
.result = (Token){
.type = TOKEN_STRING,
.string_literal = sls_str_cpy(token_string.tokens[i-1].string_literal)
},
.file_info = file_info,
.next = head
};
} else if (token_string.tokens[i-1].type == TOKEN_TOKEN_STRING) {
*new = (LexerTokenResult) {
.type = SLS_RESULT,
.result = (Token){
.type = TOKEN_TOKEN_STRING,
.token_string = (TokenString){
.length = token_string.tokens[i-1].token_string.length,
.tokens = (Token *)malloc(sizeof(Token) * token_string.tokens[i-1].token_string.length),
}
},
.file_info = file_info,
.next = head
};
memcpy(new->result.token_string.tokens, token_string.tokens[i-1].token_string.tokens, token_string.tokens[i-1].token_string.length);
} else {
*new = (LexerTokenResult) {
.type = SLS_RESULT,
.result = token_string.tokens[i-1],
.file_info = file_info,
.next = head
};
}
head = new;
}
return (LexerResult) { .type = SLS_RESULT, .result = head };