Skip to content

Commit 3082360

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 3082360

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

Tools/clinic/clinic.py

Lines changed: 17 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,16 @@ 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+
converter_list: list[tuple[str, Any]] = []
5011+
return_converter_list: list[tuple[str, Any]] = []
50065012

50075013
for name, converter in converters.items():
50085014
converter_list.append((
5009-
f'{name}_converter',
50105015
name,
50115016
converter,
50125017
))
50135018
for name, return_converter in return_converters.items():
50145019
return_converter_list.append((
5015-
f'{name}_return_converter',
50165020
name,
50175021
return_converter
50185022
))
@@ -5031,9 +5035,9 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
50315035
):
50325036
print(title + ":")
50335037
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()):
5038+
for name, converter in ids:
5039+
longest = max(longest, len(name))
5040+
for name, cls in sorted(ids, key=lambda x: x[1].lower()):
50375041
callable = getattr(cls, attribute, None)
50385042
if not callable:
50395043
continue
@@ -5046,7 +5050,7 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
50465050
else:
50475051
s = parameter_name
50485052
parameters.append(s)
5049-
print(' {}({})'.format(short_name, ', '.join(parameters)))
5053+
print(' {}({})'.format(name, ', '.join(parameters)))
50505054
print()
50515055
print("All converters also accept (c_default=None, py_default=None, annotation=None).")
50525056
print("All return converters also accept (py_default=None).")

0 commit comments

Comments
 (0)