d85f5a4816
Example from issue: ```php <?php # # Comment # $a = 100; ``` The problem with the example from the issue is that `#` is immediately followed by a line break. And since the rule in the lexer for such comments was changed, this case was handled incorrectly. ``` (('#' ^'[') | '//') any_line* when is_not_comment_end => { lex.ungetStr("?>") lex.addFreeFloatingToken(tkn, token.T_COMMENT, lex.ts, lex.te) }; ``` This rule has one problem, it checks two characters at once, first for the match `#`, and then for the mismatch `[`, which leads to the fact that in the case of an empty comment, the first matcher will capture `#`, and the second line break (`\n`), which will lead to the fact that `any_line` matcher will not work and will not increase the line number. The next rule added is specifically for this case. ``` '#' newline when is_not_comment_end => { lex.ungetStr("?>") lex.addFreeFloatingToken(tkn, token.T_COMMENT, lex.ts, lex.te) }; ``` |
||
---|---|---|
.. | ||
builder.go | ||
lexer.go | ||
newline.go | ||
node.go | ||
parser_php8_1_test.go | ||
parser_php8_test.go | ||
parser_test.go | ||
parser.go | ||
php8_bench_test.go | ||
php8.go | ||
php8.y | ||
scanner_php8_1_test.go | ||
scanner_php8_test.go | ||
scanner_test.go | ||
scanner.go | ||
scanner.rl | ||
test.php |