Updated memory management in clean_token_string and clean_token_result functions
This commit is contained in:
parent
3512f00f30
commit
76a89fe03f
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue