From d951985665bf3e0248286a30c67c28f505eb27c9 Mon Sep 17 00:00:00 2001 From: Johnny Richard Date: Sun, 16 Apr 2023 03:29:02 +0200 Subject: Start using string_view on lexer and parser This change fixes the memory leak when token got created. Signed-off-by: Johnny Richard --- src/lexer.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'src/lexer.c') diff --git a/src/lexer.c b/src/lexer.c index f58b0ea..9be96a8 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -55,8 +55,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) lexer_drop_char(lexer); } token->kind = TOKEN_NUMBER; - token->value = (char *) malloc(sizeof(char) * (lexer->cur - begin + 1)); - strncpy(token->value, lexer->src + begin, lexer->cur - begin); + token->value = string_view_new(lexer->src + begin, lexer->cur - begin); token->filepath = lexer->filepath; token->row = lexer->row; token->col = begin - lexer->bol; @@ -70,8 +69,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) lexer_drop_char(lexer); } token->kind = TOKEN_NAME; - token->value = (char *) malloc(sizeof(char) * (lexer->cur - begin + 1)); - strncpy(token->value, lexer->src + begin, lexer->cur - begin); + token->value = string_view_new(lexer->src + begin, lexer->cur - begin); token->filepath = lexer->filepath; token->row = lexer->row; token->col = begin - lexer->bol; @@ -80,8 +78,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) if (lexer_is_not_eof(lexer) && lexer_current_char(lexer) == '(') { token->kind = TOKEN_OPAREN; - token->value = (char *) malloc(sizeof(char) + 1); - strcpy(token->value, "("); + token->value = string_view_new(lexer->src, 1); token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; @@ -91,8 +88,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) if (lexer_is_not_eof(lexer) && lexer_current_char(lexer) == ')') { token->kind = TOKEN_CPAREN; - token->value = (char *) malloc(sizeof(char) + 1); - strcpy(token->value, ")"); + token->value = string_view_new(lexer->src, 1); token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; @@ -102,8 +98,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) if (lexer_is_not_eof(lexer) && lexer_current_char(lexer) == ':') { token->kind = TOKEN_COLON; - token->value = (char *) malloc(sizeof(char) + 1); - strcpy(token->value, ":"); + token->value = string_view_new(lexer->src, 1); token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; @@ -113,8 +108,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) if (lexer_is_not_eof(lexer) && lexer_current_char(lexer) == ';') { token->kind = TOKEN_SEMICOLON; - token->value = (char *) malloc(sizeof(char) + 1); - strcpy(token->value, ";"); + token->value = string_view_new(lexer->src, 1); token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; @@ -124,8 +118,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) if (lexer_is_not_eof(lexer) && lexer_current_char(lexer) == '{') { token->kind = TOKEN_OCURLY; - token->value = (char *) malloc(sizeof(char) + 1); - strcpy(token->value, "{"); + token->value = string_view_new(lexer->src, 1); token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; @@ -135,8 +128,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) if (lexer_is_not_eof(lexer) && lexer_current_char(lexer) == '}') { token->kind = TOKEN_CCURLY; - token->value = (char *) malloc(sizeof(char) + 1); - strcpy(token->value, "}"); + token->value = string_view_new(lexer->src, 1); token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; -- cgit v1.2.3