8000 Update · python/cpython@dfce0e2 · GitHub
[go: up one dir, main page]

Skip to content

Commit dfce0e2

Browse files
committed
Update
* Use also create_parser_namespace() in eval_ast_expr(). * Only createa the parser namespace once: add _BASE_PARSER_NAMESPACE. * run_clinic(): remove the first tuple item in converter_list and return_converter_list. Rename the new first tuple item from 'short_name' to 'name'.
1 parent 52da03c commit dfce0e2

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

Tools/clinic/clinic.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,7 +1988,7 @@ def parse_file(
19881988
libclinic.write_file(output, cooked)
19891989

19901990

1991-
def create_parser_namespace() -> dict[str, Any]:
1991+
def _create_parser_namespace() -> dict[str, Any]:
19921992
ns = dict(
19931993
CConverter=CConverter,
19941994
CReturnConverter=CReturnConverter,
@@ -2002,16 +2002,21 @@ def create_parser_namespace() -> dict[str, Any]:
20022002
for name, return_converter in return_converters.items():
20032003
ns[f'{name}_return_converter'] = return_converter
20042004
return ns
2005+
_BASE_PARSER_NAMESPACE = _create_parser_namespace()
2006+
2007+
2008+
def create_parser_namespace() -> dict[str, Any]:
2009+
return _BASE_PARSER_NAMESPACE.copy()
20052010

20062011

20072012
class PythonParser:
20082013
def __init__(self, clinic: Clinic) -> None:
2009-
self.namespace = create_parser_namespace()
2014+
pass
20102015

20112016
def parse(self, block: Block) -> None:
2012-
ns = dict(self.namespace)
2017+
namespace = create_parser_namespace()
20132018
with contextlib.redirect_stdout(io.StringIO()) as s:
2014-
exec(block.input, ns)
2019+
exec(block.input, namespace)
20152020
block.output = s.getvalue()
20162021

20172022

@@ -3477,8 +3482,9 @@ def eval_ast_expr(
34773482
node = node.value
34783483

34793484
expr = ast.Expression(node)
3485+
namespace = create_parser_namespace()
34803486
co = compile(expr, filename, 'eval')
3481-
fn = FunctionType(co, globals)
3487+
fn = FunctionType(co, namespace)
34823488
return fn()
34833489

34843490

@@ -5001,18 +5007,17 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
50015007
parser.error(
50025008
"can't specify --converters and a filename at the same time"
50035009
)
5004-
converter_list: list[tuple[str, str, ConverterType]] = []
5005-
return_converter_list: list[tuple[str, str, ReturnConverterType]] = []
5010+
any_converter_type = ConverterType | ReturnConverterType
5011+
converter_list: list[tuple[str, any_converter_type]] = []
5012+
return_converter_list: list[tuple[str, any_converter_type]] = []
50065013

50075014
for name, converter in converters.items():
50085015
converter_list.append((
5009-
f'{name}_converter',
50105016
name,
50115017
converter,
50125018
))
50135019
for name, return_converter in return_converters.items():
50145020
return_converter_list.append((
5015-
f'{name}_return_converter',
50165021
name,
50175022
return_converter
50185023
))
@@ -5030,10 +5035,13 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
50305035
("Return converters", 'return_converter_init', return_converter_list),
50315036
):
50325037
print(title + ":")
5038+
5039+
ids.sort(key=lambda item: item[0].lower())
50335040
longest = -1
5034-
for name, short_name, converter in ids:
5035-
longest = max(longest, len(short_name))
5036-
for name, short_name, cls in sorted(ids, key=lambda x: x[1].lower()):
5041+
for name, _ in ids:
5042+
longest = max(longest, len(name))
5043+
5044+
for name, cls in ids:
50375045
callable = getattr(cls, attribute, None)
50385046
if not callable:
50395047
continue
@@ -5046,7 +5054,7 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
50465054
else:
50475055
s = parameter_name
50485056
parameters.append(s)
5049-
print(' {}({})'.format(short_name, ', '.join(parameters)))
5057+
print(' {}({})'.format(name, ', '.join(parameters)))
50505058
print()
50515059
print("All converters also accept (c_default=None, py_default=None, annotation=None).")
50525060
print("All return converters also accept (py_default=None).")

0 commit comments

Comments
 (0)
0