diff --git a/Userland/Libraries/LibJS/Lexer.cpp b/Userland/Libraries/LibJS/Lexer.cpp index dc70354ed1..a439d0c684 100644 --- a/Userland/Libraries/LibJS/Lexer.cpp +++ b/Userland/Libraries/LibJS/Lexer.cpp @@ -530,6 +530,7 @@ Token Lexer::next() consume(); } while (!is_eof() && !is_line_terminator()); } else if (is_block_comment_start()) { + size_t start_line_number = m_line_number; consume(); do { consume(); @@ -540,6 +541,9 @@ Token Lexer::next() if (is_eof()) unterminated_comment = true; consume(); // consume / + + if (start_line_number != m_line_number) + line_has_token_yet = false; } else { break; } diff --git a/Userland/Libraries/LibJS/Tests/comments-basic.js b/Userland/Libraries/LibJS/Tests/comments-basic.js index 7ad452bf29..86d9d68a32 100644 --- a/Userland/Libraries/LibJS/Tests/comments-basic.js +++ b/Userland/Libraries/LibJS/Tests/comments-basic.js @@ -26,6 +26,15 @@ i;`; expect(source).toEvalTo(2); }); +test("html comments directly after block comment", () => { + expect("0 /* */-->i").not.toEval(); + expect(`0 /* + */-->i`).toEval(); + expect(`0 /* + */-->i + 'a'`).toEvalTo("a"); +}); + test("unterminated multi-line comment", () => { expect("/*").not.toEval(); expect("/**").not.toEval();