From 727f461fb60fd98ba1d754f618a00ec61777b4d2 Mon Sep 17 00:00:00 2001 From: Kyler Date: Thu, 27 Nov 2025 17:12:29 -0700 Subject: [PATCH] Fixed lexing error inside token string not being on heap --- SLS_C/src/lexer.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/SLS_C/src/lexer.c b/SLS_C/src/lexer.c index f95436b..ea7f865 100644 --- a/SLS_C/src/lexer.c +++ b/SLS_C/src/lexer.c @@ -761,14 +761,15 @@ static LexerResult parse_token_string(LexerInfo *lexer_info, char c, size_t star } if (current->type == SLS_ERROR) { - LexerResult e = (LexerResult){SLS_RESULT, .result = &(LexerTokenResult){ + LexerTokenResult *e = (LexerTokenResult *)malloc(sizeof(LexerTokenResult)); + *e = (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; + return (LexerResult){SLS_RESULT, .result = e}; } if (current->result.type == TOKEN_EOF) break; @@ -921,16 +922,16 @@ static void clean_token_string(TokenString token_string) { void clean_token_result(LexerTokenResult *head) { // Deallocates a LexerTokenResult linked list if (head == NULL) return; - if (head->type == SLS_ERROR) sls_str_free(&head->error.message); - else { + 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); - } + } clean_token_result(head->next); head->next = NULL; - if (head) free(head); + if (head) free(head); } LexerTokenResult *get_token(LexerTokenResult *head, size_t i) {