diff --git a/src/parser.cpp b/src/parser.cpp index c977db0..9e754a6 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -773,20 +773,14 @@ class CJSLexer { const char* endPos = pos; ch = commentWhitespace(); - // Check if this is a getter syntax: get identifier() - if (ch != ':' && endPos - startPos == 3 && matchesAt(startPos, end, "get")) { - // Skip getter: get identifier() { ... } - if (identifier(ch)) { - ch = commentWhitespace(); - if (ch == '(') { - // This is a getter, stop parsing here (early termination) - pos = revertPos; - return; - } + // Check if this is a getter syntax: get identifier() { ... } + if (ch != ':' && endPos - startPos == 3 && matchesAt(startPos, end, "get") && identifier(ch)) { + ch = commentWhitespace(); + if (ch == '(') { + // This is a getter, stop parsing here (early termination) + pos = revertPos; + return; } - // Not a getter, revert and fail - pos = revertPos; - return; } if (ch == ':') { diff --git a/tests/real_world_tests.cpp b/tests/real_world_tests.cpp index 08e54f4..87e5c4a 100644 --- a/tests/real_world_tests.cpp +++ b/tests/real_world_tests.cpp @@ -1133,6 +1133,18 @@ TEST(real_world_tests, exports_shorthand_syntax) { SUCCEED(); } +TEST(real_world_tests, exports_shorthand_syntax_get) { + auto result = lexer::parse_commonjs("\ + const get = 1, set = 2;\ + module.exports = { get, set };\ + "); + ASSERT_TRUE(result.has_value()); + ASSERT_EQ(result->exports.size(), 2); + ASSERT_EQ(lexer::get_string_view(result->exports[0]), "get"); + ASSERT_EQ(lexer::get_string_view(result->exports[1]), "set"); + SUCCEED(); +} + TEST(real_world_tests, line_numbers_lf) { auto result = lexer::parse_commonjs( "// line 1\n"