Skip to content

Commit 52db6f7

Browse files
committed
Disable combining vectorcall and option groups
1 parent 5488010 commit 52db6f7

3 files changed

Lines changed: 19 additions & 0 deletions

File tree

Lib/test/test_clinic.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2981,6 +2981,20 @@ class Foo "FooObject *" "Foo_Type"
29812981
"""
29822982
self.expect_failure(block, err, lineno=6)
29832983

2984+
def test_vectorcall_with_option_groups(self):
2985+
err = "@vectorcall does not support optional groups"
2986+
block = """
2987+
module m
2988+
class Foo "FooObject *" "Foo_Type"
2989+
@vectorcall
2990+
Foo.__init__
2991+
[
2992+
a: object
2993+
]
2994+
/
2995+
"""
2996+
self.expect_failure(block, err, lineno=7)
2997+
29842998
def test_unused_param(self):
29852999
block = self.parse("""
29863000
module foo

Tools/clinic/libclinic/dsl_parser.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,9 @@ def check_vectorcall_parameters(self, lineno: int) -> None:
15491549
if not self.function.vectorcall:
15501550
return
15511551
for i, p in enumerate(self.function.parameters.values()):
1552+
if p.group:
1553+
fail("@vectorcall does not support optional groups",
1554+
line_number=lineno)
15521555
if p.is_vararg() or p.is_var_keyword():
15531556
continue
15541557
if isinstance(p.converter, (self_converter,

Tools/clinic/libclinic/parse_args.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,6 +1602,8 @@ def parse_vectorcall(self) -> None:
16021602
16031603
Dispatch to specific parser-code builders based on parameter shape.
16041604
"""
1605+
# The DSL parser rejects @vectorcall with optional groups.
1606+
assert not self.has_option_groups()
16051607
if not self.parameters and not self.varpos and not self.var_keyword:
16061608
self.parse_vectorcall_no_args()
16071609
elif (self.pos_only == len(self.parameters)

0 commit comments

Comments
 (0)