From 3a61e250a90f55aa776d52210c9e3b5622116758 Mon Sep 17 00:00:00 2001 From: Kyler Date: Thu, 27 Nov 2025 01:16:37 -0700 Subject: [PATCH] Worked on token_string and memory errors --- SLS_C/src/lexer.c | 12 ++++++++++- SLS_C/tests/lexer_test_helpers.c | 36 ++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/SLS_C/src/lexer.c b/SLS_C/src/lexer.c index c963395..9a41eb2 100644 --- a/SLS_C/src/lexer.c +++ b/SLS_C/src/lexer.c @@ -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); diff --git a/SLS_C/tests/lexer_test_helpers.c b/SLS_C/tests/lexer_test_helpers.c index 180c310..04f1950 100644 --- a/SLS_C/tests/lexer_test_helpers.c +++ b/SLS_C/tests/lexer_test_helpers.c @@ -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 };