Skip to content

Commit 172e8b8

Browse files
committed
Bug 1933140 - [devtools] Add shared module for GenerateReservedWordsJS.py and GenerateReservedWords.py to read reserved words list. r=arai.
This adds a ReservedWordReader module that will return the list of reserved words defined in ReservedWords.h. This is especially helpful for devtools as we should automatically get any new/updated keywords on the platform. Differential Revision: https://phabricator.services.mozilla.com/D254938
1 parent b67a219 commit 172e8b8

File tree

4 files changed

+71
-59
lines changed

4 files changed

+71
-59
lines changed

devtools/shared/webconsole/GenerateReservedWordsJS.py

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,27 @@
22
# License, v. 2.0. If a copy of the MPL was not distributed with this
33
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
44

5-
import re
5+
import buildconfig
6+
import os
67
import sys
78

8-
9-
def read_reserved_word_list(filename):
10-
macro_pat = re.compile(r"^\s*MACRO\(([^,]+), *[^,]+, *[^\)]+\)\s*\\?$")
11-
12-
reserved_word_list = []
13-
with open(filename, "r") as f:
14-
for line in f:
15-
m = macro_pat.search(line)
16-
if m:
17-
reserved_word_list.append(m.group(1))
18-
19-
assert len(reserved_word_list) != 0
20-
21-
return reserved_word_list
9+
sys.path.append(os.path.join(buildconfig.topsrcdir, "js", "src", "frontend"))
10+
import ReservedWordReader
2211

2312

2413
def line(opt, s):
2514
opt["output"].write("{}\n".format(s))
2615

2716

28-
def main(output, reserved_words_h):
29-
reserved_word_list = read_reserved_word_list(reserved_words_h)
17+
def main(output, reserved_words_h, *args):
18+
reserved_word_list = ReservedWordReader.read_reserved_word_list(
19+
reserved_words_h, *args
20+
)
21+
3022
opt = {"output": output}
3123

3224
line(opt, "const JS_RESERVED_WORDS = [")
33-
for word in reserved_word_list:
25+
for index, word in reserved_word_list:
3426
line(opt, ' "{}",'.format(word))
3527
line(opt, "];")
3628
line(opt, "module.exports = JS_RESERVED_WORDS;")

devtools/shared/webconsole/moz.build

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,25 @@ for dir in RELATIVEDIR.split("/"):
1919
base = base[dir]
2020
base += ["!reserved-js-words.js"]
2121

22-
GeneratedFile(
23-
"reserved-js-words.js",
24-
script="GenerateReservedWordsJS.py",
25-
inputs=["/js/src/frontend/ReservedWords.h"],
26-
)
22+
# Generate reserved-js-words.js from /js/src/frontend/ReservedWords.h
23+
flags = []
24+
if CONFIG["ENABLE_DECORATORS"]:
25+
flags.append("--enable-decorators")
26+
if CONFIG["ENABLE_EXPLICIT_RESOURCE_MANAGEMENT"]:
27+
flags.append("--enable-explicit-resource-management")
28+
if flags:
29+
GeneratedFile(
30+
"reserved-js-words.js",
31+
script="GenerateReservedWordsJS.py",
32+
inputs=["/js/src/frontend/ReservedWords.h"],
33+
flags=flags,
34+
)
35+
else:
36+
GeneratedFile(
37+
"reserved-js-words.js",
38+
script="GenerateReservedWordsJS.py",
39+
inputs=["/js/src/frontend/ReservedWords.h"],
40+
)
2741

2842
DevToolsModules(
2943
"analyze-input-string.js",

js/src/frontend/GenerateReservedWords.py

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,9 @@
22
# License, v. 2.0. If a copy of the MPL was not distributed with this
33
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
44

5-
import re
65
import sys
76

8-
9-
def read_reserved_word_list(
10-
filename, enable_decorators, enable_explicit_resource_management
11-
):
12-
macro_pat = re.compile(r"MACRO\(([^,]+), *[^,]+, *[^\)]+\)\s*\\?")
13-
14-
reserved_word_list = []
15-
index = 0
16-
with open(filename) as f:
17-
for line in f:
18-
m = macro_pat.search(line)
19-
if m:
20-
reserved_word = m.group(1)
21-
if reserved_word == "accessor" and not enable_decorators:
22-
continue
23-
if reserved_word == "using" and not enable_explicit_resource_management:
24-
continue
25-
reserved_word_list.append((index, reserved_word))
26-
index += 1
27-
28-
assert len(reserved_word_list) != 0
29-
30-
return reserved_word_list
7+
import ReservedWordReader
318

329

3310
def line(opt, s):
@@ -219,18 +196,8 @@ def generate_switch(opt, reserved_word_list):
219196

220197

221198
def main(output, reserved_words_h, *args):
222-
enable_decorators = False
223-
enable_explicit_resource_management = False
224-
for arg in args:
225-
if arg == "--enable-decorators":
226-
enable_decorators = True
227-
elif arg == "--enable-explicit-resource-management":
228-
enable_explicit_resource_management = True
229-
else:
230-
raise ValueError("Unknown argument: " + arg)
231-
232-
reserved_word_list = read_reserved_word_list(
233-
reserved_words_h, enable_decorators, enable_explicit_resource_management
199+
reserved_word_list = ReservedWordReader.read_reserved_word_list(
200+
reserved_words_h, *args
234201
)
235202

236203
opt = {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# This Source Code Form is subject to the terms of the Mozilla Public
2+
# License, v. 2.0. If a copy of the MPL was not distributed with this
3+
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
4+
5+
import re
6+
7+
8+
def read_reserved_word_list(filename, *args):
9+
10+
enable_decorators = False
11+
enable_explicit_resource_management = False
12+
13+
for arg in args:
14+
if arg == "--enable-decorators":
15+
enable_decorators = True
16+
elif arg == "--enable-explicit-resource-management":
17+
enable_explicit_resource_management = True
18+
else:
19+
raise ValueError("Unknown argument: " + arg)
20+
21+
macro_pat = re.compile(r"MACRO\(([^,]+), *[^,]+, *[^\)]+\)\s*\\?")
22+
23+
reserved_word_list = []
24+
index = 0
25+
with open(filename) as f:
26+
for line in f:
27+
m = macro_pat.search(line)
28+
if m:
29+
reserved_word = m.group(1)
30+
if reserved_word == "accessor" and not enable_decorators:
31+
continue
32+
if reserved_word == "using" and not enable_explicit_resource_management:
33+
continue
34+
reserved_word_list.append((index, reserved_word))
35+
index += 1
36+
37+
assert len(reserved_word_list) != 0
38+
39+
return reserved_word_list

0 commit comments

Comments
 (0)