From 4cd5115d4bc9549fedda623946256f2fe39c6d14 Mon Sep 17 00:00:00 2001 From: Kyler Date: Thu, 12 Jun 2025 22:22:56 -0600 Subject: [PATCH] Changed double_peek to far_peek and broke out is_digit_after --- src/lexer.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/lexer.c b/src/lexer.c index 223c32d..6cac10a 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -25,18 +25,18 @@ static char peek(Lexer *lexer) { return lexer->source[lexer->pos]; } -static char double_peek(Lexer *lexer) { - return lexer->source[lexer->pos+1]; +static char far_peek(Lexer *lexer, size_t index) { + return lexer->source[lexer->pos + index]; } -static char advance(Lexer *lexer) { +static void advance(Lexer *lexer) { if (lexer->source[lexer->pos] == '\n') { lexer->line++; lexer->column = 1; } else { lexer->column++; } - return lexer->source[lexer->pos++]; + lexer->source[lexer->pos++]; } typedef enum { @@ -56,6 +56,20 @@ static char is_digit_char(char c, DigitFlags flags) { return isdigit(c) || c == '_'; } +static char is_digit_after(char c) { + return + isspace(c) || + c == '\0' || + c == ',' || + c == ')' || + c == '(' || + c == '}' || + c == '{' || + c == ']' || + c == '[' || + c == ';'; +} + static char is_identifier_start(char c) { return isalpha(c) || c == '_'; } @@ -77,7 +91,7 @@ TokenResult lexer_next(Lexer *lexer) { while (isspace(peek(lexer)) || peek(lexer) == '/') { // Skip Comments - if (peek(lexer) == '/' && double_peek(lexer) == '/') + if (peek(lexer) == '/' && far_peek(lexer, 1) == '/') while (peek(lexer) != '\n') advance(lexer); // Skip whitespace while (isspace(peek(lexer))) advance(lexer); @@ -108,7 +122,7 @@ TokenResult lexer_next(Lexer *lexer) { } } while (is_digit_char(peek(lexer), flags)) advance(lexer); - if (isspace(peek(lexer)) || peek(lexer) == ';' || peek(lexer) == '\0' || peek(lexer) == ')' || peek(lexer) == '(' || peek(lexer) == ',') { + if (is_digit_after(peek(lexer))) { return lexer_result(lexer, TOKEN_NUMBER, start, start_line); } else { return lexer_error(lexer, "Invalid number format", start, start_line);