Updated memory management in clean_token_string and clean_token_result functions

This commit is contained in:
Kyler Olsen 2025-11-27 17:11:42 -07:00
parent 3512f00f30
commit 76a89fe03f
1 changed files with 11 additions and 7 deletions

View File

@ -907,26 +907,30 @@ static LexerResult lexer_next(LexerInfo *lexer_info) {
} }
static void clean_token_string(TokenString token_string) { static void clean_token_string(TokenString token_string) {
if (token_string.tokens == NULL) return;
for (size_t i = 0; i < token_string.length; i++) { for (size_t i = 0; i < token_string.length; i++) {
if (token_string.tokens[i].type == TOKEN_STRING)
sls_str_free(&token_string.tokens[i].string_literal);
if (token_string.tokens[i].type == TOKEN_TOKEN_STRING) if (token_string.tokens[i].type == TOKEN_TOKEN_STRING)
clean_token_string(token_string.tokens[i].token_string); clean_token_string(token_string.tokens[i].token_string);
} }
free(token_string.tokens); free(token_string.tokens);
token_string.tokens = NULL;
} }
void clean_token_result(LexerTokenResult *head) { void clean_token_result(LexerTokenResult *head) {
// Deallocates a LexerTokenResult linked list // Deallocates a LexerTokenResult linked list
LexerTokenResult *next; if (head == NULL) return;
while (head) {
next = head->next;
if (head->type == SLS_ERROR) sls_str_free(&head->error.message); if (head->type == SLS_ERROR) sls_str_free(&head->error.message);
else { else {
if (head->result.type == TOKEN_STRING) sls_str_free(&head->result.string_literal); if (head->result.type == TOKEN_STRING)
if (head->result.type == TOKEN_TOKEN_STRING) clean_token_string(head->result.token_string); sls_str_free(&head->result.string_literal);
if (head->result.type == TOKEN_TOKEN_STRING)
clean_token_string(head->result.token_string);
} }
clean_token_result(head->next);
head->next = NULL;
if (head) free(head); if (head) free(head);
head = next;
}
} }
LexerTokenResult *get_token(LexerTokenResult *head, size_t i) { LexerTokenResult *get_token(LexerTokenResult *head, size_t i) {