summaryrefslogtreecommitdiffstats
path: root/Tools/clinic/clinic.py
diff options
context:
space:
mode:
authorneonene <53406459+neonene@users.noreply.github.com>2024-04-17 21:11:17 (GMT)
committerGitHub <noreply@github.com>2024-04-17 21:11:17 (GMT)
commit9f4ae13d2a432faa80e76e3948aec43f856fd320 (patch)
tree6e9d677c5199edfb403a09c8ad91d4ca4cc2fcdd /Tools/clinic/clinic.py
parenta72c4a93ef2babb6f49a5b8869bc6c40997df081 (diff)
downloadcpython-9f4ae13d2a432faa80e76e3948aec43f856fd320.zip
cpython-9f4ae13d2a432faa80e76e3948aec43f856fd320.tar.gz
cpython-9f4ae13d2a432faa80e76e3948aec43f856fd320.tar.bz2
[3.12] gh-117613: Argument Clinic: ensure that defining class params are positional-only (#117939)
Diffstat (limited to 'Tools/clinic/clinic.py')
-rwxr-xr-xTools/clinic/clinic.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index d2ff422..efd519f 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -4997,6 +4997,9 @@ class DSLParser:
fail("A 'defining_class' parameter cannot have a default value.")
if self.group:
fail("A 'defining_class' parameter cannot be in an optional group.")
+ if self.function.cls is None:
+ fail("A 'defining_class' parameter cannot be defined at module level.")
+ kind = inspect.Parameter.POSITIONAL_ONLY
else:
fail("A 'defining_class' parameter, if specified, must either be the first thing in the parameter block, or come just after 'self'.")
@@ -5074,7 +5077,10 @@ class DSLParser:
for p in self.function.parameters.values():
if p.is_vararg():
continue
- if (p.kind != inspect.Parameter.POSITIONAL_OR_KEYWORD and not isinstance(p.converter, self_converter)):
+ if (p.kind != inspect.Parameter.POSITIONAL_OR_KEYWORD and
+ not isinstance(p.converter, self_converter) and
+ not isinstance(p.converter, defining_class_converter)
+ ):
fail("Function " + self.function.name + " mixes keyword-only and positional-only parameters, which is unsupported.")
p.kind = inspect.Parameter.POSITIONAL_ONLY