Skip to content

Commit 8939a89

Browse files
committed
Review (part 1)
1 parent 9e02b3f commit 8939a89

File tree

4 files changed

+59
-19
lines changed

4 files changed

+59
-19
lines changed

Modules/clinic/_testclinic_kwds.c.h

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

Tools/clinic/libclinic/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"argsbuf",
8585
"fastargs",
8686
"kwargs",
87+
"kwds",
8788
"kwnames",
8889
"nargs",
8990
"noptargs",

Tools/clinic/libclinic/converters.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1304,5 +1304,11 @@ def cleanup(self) -> str:
13041304
def parse_var_keyword(self) -> str:
13051305
param_name = self.parser_name
13061306
return f"""
1307-
{param_name} = (kwargs != NULL) ? Py_NewRef(kwargs) : PyDict_New();
1307+
if (kwargs == NULL) {{{{
1308+
{param_name} = PyDict_New();
1309+
if ({param_name} == NULL) goto exit;
1310+
}}}}
1311+
else {{{{
1312+
{param_name} = Py_NewRef(kwargs);
1313+
}}}}
13081314
"""

Tools/clinic/libclinic/dsl_parser.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ def dedent(self, line: str) -> str:
246246
class DSLParser:
247247
function: Function | None
248248
state: StateKeeper
249+
expecting_parameters: bool
249250
keyword_only: bool
250251
positional_only: bool
251252
deprecated_positional: VersionTuple | None
@@ -285,6 +286,7 @@ def __init__(self, clinic: Clinic) -> None:
285286
def reset(self) -> None:
286287
self.function = None
287288
self.state = self.state_dsl_start
289+
self.expecting_parameters = True
288290
self.keyword_only = False
289291
self.positional_only = False
290292
self.deprecated_positional = None
@@ -848,6 +850,10 @@ def state_parameter(self, line: str) -> None:
848850
# we indented, must be to new parameter docstring column
849851
return self.next(self.state_parameter_docstring_start, line)
850852

853+
if not self.expecting_parameters:
854+
fail('Encountered parameter line when not expecting '
855+
f'parameters: {line}')
856+
851857
line = line.rstrip()
852858
if line.endswith('\\'):
853859
self.parameter_continuation = line[:-1]
@@ -1128,8 +1134,10 @@ def bad_node(self, node: ast.AST) -> None:
11281134
key = f"{parameter_name}_as_{c_name}" if c_name else parameter_name
11291135
self.function.parameters[key] = p
11301136

1131-
if is_vararg or is_var_keyword:
1137+
if is_vararg:
11321138
self.keyword_only = True
1139+
if is_var_keyword:
1140+
self.expecting_parameters = False
11331141

11341142
@staticmethod
11351143
def parse_converter(

0 commit comments

Comments
 (0)