From de40cc9b8a3c79d6e13470c53ffd11604cd9ce17 Mon Sep 17 00:00:00 2001 From: Dmitry Vasilev Date: Thu, 7 Dec 2023 00:44:15 +0800 Subject: [PATCH] fix parser reserved words --- src/parse_js.js | 5 ++++- src/reserved.js | 12 +++--------- test/test.js | 6 ++++++ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/parse_js.js b/src/parse_js.js index ea4968b..4af05ce 100644 --- a/src/parse_js.js +++ b/src/parse_js.js @@ -724,7 +724,10 @@ const function_call_or_member_access = nested => ), // Adjust identifier to string literal if_ok( - identifier, + either( + identifier, + by_type('keyword'), + ), iden => ({...iden, type: 'string_literal', value: '"' + iden.value + '"', diff --git a/src/reserved.js b/src/reserved.js index 6d9149d..2c76d9f 100644 --- a/src/reserved.js +++ b/src/reserved.js @@ -3,9 +3,7 @@ export const reserved = [ 'break', 'case', -// TODO: fix parser to allow catch be an Object key, as other reserved words. -// Currently we make exception for promise.catch -// 'catch', +'catch', 'class', 'const', 'continue', @@ -16,9 +14,7 @@ export const reserved = [ 'else', 'export', 'extends', -// TODO: fix parser to allow finally be an Object key, as other reserved words. -// Currently we make exception for promise.finally -// 'finally', +'finally', 'for', 'function', 'if', @@ -36,9 +32,7 @@ export const reserved = [ 'var', 'void', 'while', -// TODO: fix parser to allow 'with' be an Object key, as other reserved words. -// Currently we make exception for Array.with -// 'with', +'with', 'yield', 'enum', 'implements', diff --git a/test/test.js b/test/test.js index b92a685..90eed5b 100644 --- a/test/test.js +++ b/test/test.js @@ -32,6 +32,12 @@ import { export const tests = [ + test('reserved words', () => { + const result = do_parse('let catch') + assert_equal(result.ok, false) + assert_equal(result.problems[0].index, 4) + }), + test('invalid token in the beginning', () => { const result = do_parse('# import') assert_equal(result, {