From f2bc5274bb55bc2b180efae274ada107ea4716d1 Mon Sep 17 00:00:00 2001 From: Johnny Richard Date: Fri, 14 Apr 2023 23:38:43 +0200 Subject: parser: Show filepath row and col when parsing fails In order to find out where a parsing error occurred, this patch introduces the exactly location following the format 'file:row:col'. Signed-off-by: Johnny Richard --- src/lexer.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/lexer.c') diff --git a/src/lexer.c b/src/lexer.c index 0327ad5..f58b0ea 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -57,6 +57,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_NUMBER; token->value = (char *) malloc(sizeof(char) * (lexer->cur - begin + 1)); strncpy(token->value, lexer->src + begin, lexer->cur - begin); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = begin - lexer->bol; return; @@ -71,6 +72,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_NAME; token->value = (char *) malloc(sizeof(char) * (lexer->cur - begin + 1)); strncpy(token->value, lexer->src + begin, lexer->cur - begin); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = begin - lexer->bol; return; @@ -80,6 +82,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_OPAREN; token->value = (char *) malloc(sizeof(char) + 1); strcpy(token->value, "("); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; lexer_drop_char(lexer); @@ -90,6 +93,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_CPAREN; token->value = (char *) malloc(sizeof(char) + 1); strcpy(token->value, ")"); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; lexer_drop_char(lexer); @@ -100,6 +104,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_COLON; token->value = (char *) malloc(sizeof(char) + 1); strcpy(token->value, ":"); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; lexer_drop_char(lexer); @@ -110,6 +115,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_SEMICOLON; token->value = (char *) malloc(sizeof(char) + 1); strcpy(token->value, ";"); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; lexer_drop_char(lexer); @@ -120,6 +126,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_OCURLY; token->value = (char *) malloc(sizeof(char) + 1); strcpy(token->value, "{"); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; lexer_drop_char(lexer); @@ -130,6 +137,7 @@ lexer_next_token(lexer_t *lexer, token_t *token) token->kind = TOKEN_CCURLY; token->value = (char *) malloc(sizeof(char) + 1); strcpy(token->value, "}"); + token->filepath = lexer->filepath; token->row = lexer->row; token->col = lexer->cur - lexer->bol; lexer_drop_char(lexer); -- cgit v1.2.3