Skip to content

Commit 2ab472b

Browse files
in token.c
1 parent 63000ab commit 2ab472b

File tree

7 files changed

+51
-38
lines changed

7 files changed

+51
-38
lines changed

Include/internal/pycore_global_objects_fini_generated.h

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_global_strings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ struct _Py_global_strings {
4949
STRUCT_FOR_STR(PERCENTEQUAL, "%=")
5050
STRUCT_FOR_STR(PLUSEQUAL, "+=")
5151
STRUCT_FOR_STR(RARROW, "->")
52-
STRUCT_FOR_STR(REPLSHIFT, ">>>")
5352
STRUCT_FOR_STR(RIGHTSHIFT, ">>")
5453
STRUCT_FOR_STR(RIGHTSHIFTEQUAL, ">>=")
5554
STRUCT_FOR_STR(SLASHEQUAL, "/=")

Include/internal/pycore_runtime_init_generated.h

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_unicodeobject_generated.h

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Parser/token.c

Lines changed: 28 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Tools/build/generate_global_objects.py

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ def generate_global_strings(identifiers, strings):
261261
outfile.write('\n')
262262
with printer.block('struct', ' identifiers;'):
263263
for name in sorted(identifiers):
264-
# assert name.isidentifier(), name
264+
assert name.isidentifier(), name
265265
printer.write(f'STRUCT_FOR_ID({name})')
266266
with printer.block('struct', ' ascii[128];'):
267267
printer.write("PyASCIIObject _ascii;")
@@ -324,7 +324,7 @@ def generate_runtime_init(identifiers, strings):
324324
printer.write('')
325325
with printer.block('#define _Py_str_identifiers_INIT', continuation=True):
326326
for name in sorted(identifiers):
327-
# assert name.isidentifier(), name
327+
assert name.isidentifier(), name
328328
printer.write(f'INIT_ID({name}),')
329329
immortal_objects.append(f'(PyObject *)&_Py_ID({name})')
330330
printer.write('')
@@ -453,33 +453,6 @@ def get_identifiers_and_strings() -> 'tuple[set[str], dict[str, str]]':
453453

454454
def main() -> None:
455455
identifiers, strings = get_identifiers_and_strings()
456-
strings.update([
457-
("==", "EQEQUAL"),
458-
("!=", "NOTEQUAL"),
459-
("<=", "LESSEQUAL"),
460-
(">=", "GREATEREQUAL"),
461-
("<<", "LEFTSHIFT"),
462-
(">>", "RIGHTSHIFT"),
463-
("**", "DOUBLESTAR"),
464-
("+=", "PLUSEQUAL"),
465-
("-=", "MINEQUAL"),
466-
("*=", "STAREQUAL"),
467-
("/=", "SLASHEQUAL"),
468-
("%=", "PERCENTEQUAL"),
469-
("&=", "AMPEREQUAL"),
470-
("|=", "VBAREQUAL"),
471-
("^=", "CIRCUMFLEXEQUAL"),
472-
("<<=", "LEFTSHIFTEQUAL"),
473-
(">>=", "RIGHTSHIFTEQUAL"),
474-
("**=", "DOUBLESTAREQUAL"),
475-
("//", "DOUBLESLASH"),
476-
("//=", "DOUBLESLASHEQUAL"),
477-
("@=", "ATEQUAL"),
478-
("->", "RARROW"),
479-
("...", "ELLIPSIS"),
480-
(":=", "COLONEQUAL"),
481-
(">>>", "REPLSHIFT"),
482-
])
483456
generate_global_strings(identifiers, strings)
484457
generated_immortal_objects = generate_runtime_init(identifiers, strings)
485458
generate_static_strings_initializer(identifiers, strings)

Tools/build/generate_token.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,12 @@ def make_h(infile, outfile='Include/internal/pycore_token.h'):
125125
126126
#include "Python.h"
127127
#include "pycore_token.h"
128+
#include "pycore_global_strings.h"
129+
130+
/* Interning tokens */
131+
132+
%s\
133+
128134
129135
/* Token names */
130136
@@ -176,10 +182,23 @@ def generate_chars_to_token(mapping, n=1):
176182
write('}\n')
177183
return ''.join(result)
178184

185+
def declate_tokens(tok_name_to_string):
186+
return "\n".join(
187+
f'_Py_DECLARE_STR({name}, "{token}");'
188+
for name, token in tok_name_to_string.items()
189+
)
190+
191+
179192
def make_c(infile, outfile='Parser/token.c'):
180193
tok_names, ERRORTOKEN, string_to_tok = load_tokens(infile)
181-
string_to_tok['<>'] = string_to_tok['!=']
194+
# string_to_tok['<>'] = string_to_tok['!=']
182195
chars_to_token = {}
196+
tok_name_to_string = {
197+
tok_names[name_idx]: token
198+
for token, name_idx in string_to_tok.items()
199+
if len(token) > 1
200+
}
201+
183202
for string, value in string_to_tok.items():
184203
assert 1 <= len(string) <= 3
185204
name = tok_names[value]
@@ -196,6 +215,7 @@ def make_c(infile, outfile='Parser/token.c'):
196215
names.append(' "<N_TOKENS>",\n')
197216

198217
if update_file(outfile, token_c_template % (
218+
declate_tokens(tok_name_to_string),
199219
''.join(names),
200220
generate_chars_to_token(chars_to_token[1]),
201221
generate_chars_to_token(chars_to_token[2]),

0 commit comments

Comments
 (0)