From bde2506df7d21778859a65d14c3e32cb15a223dc Mon Sep 17 00:00:00 2001 From: may Date: Sun, 26 Oct 2025 01:23:43 +0200 Subject: [PATCH 1/2] fix: don't allow _ after the . in a float --- src/scanner.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scanner.c b/src/scanner.c index 269f6b2a..49096a02 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -132,8 +132,8 @@ static inline bool process_float_literal(TSLexer *lexer) { if (lexer->lookahead == '.') { has_fraction = true; advance(lexer); - if (iswalpha(lexer->lookahead)) { - // The dot is followed by a letter: 1.max(2) => not a float but an integer + if (iswalpha(lexer->lookahead) || lexer->lookahead == '_') { + // The dot is followed by a letter or _: 1.max(2) => not a float but an integer return false; } From 551f7e594f57f3e4782598f93e44e4fb6173a61a Mon Sep 17 00:00:00 2001 From: may Date: Sun, 26 Oct 2025 01:24:04 +0200 Subject: [PATCH 2/2] chore: add test for `._method()` --- test/corpus/expressions.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index 998d590a..8c229045 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -994,6 +994,7 @@ mystruct.myfield; foo().x; value.0.1.iter(); 1.max(2); +1._method(); -------------------------------------------------------------------------------- @@ -1024,7 +1025,13 @@ value.0.1.iter(); (integer_literal) (field_identifier)) (arguments - (integer_literal))))) + (integer_literal)))) + (expression_statement + (call_expression + (field_expression + (integer_literal) + (field_identifier)) + (arguments)))) ================================================================================ Method call expressions