diff --git a/SLS_C/src/lexer.c b/SLS_C/src/lexer.c index 3a5d90a..f95436b 100644 --- a/SLS_C/src/lexer.c +++ b/SLS_C/src/lexer.c @@ -907,26 +907,30 @@ static LexerResult lexer_next(LexerInfo *lexer_info) { } static void clean_token_string(TokenString token_string) { + if (token_string.tokens == NULL) return; 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) clean_token_string(token_string.tokens[i].token_string); } free(token_string.tokens); + token_string.tokens = NULL; } void clean_token_result(LexerTokenResult *head) { // Deallocates a LexerTokenResult linked list - LexerTokenResult *next; - while (head) { - next = head->next; + if (head == NULL) return; if (head->type == SLS_ERROR) sls_str_free(&head->error.message); else { - if (head->result.type == TOKEN_STRING) sls_str_free(&head->result.string_literal); - if (head->result.type == TOKEN_TOKEN_STRING) clean_token_string(head->result.token_string); + if (head->result.type == 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); - head = next; - } } LexerTokenResult *get_token(LexerTokenResult *head, size_t i) {