]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-108494: Argument Clinic: fix option group for Limited C API (#108574)
authorVictor Stinner <vstinner@python.org>
Tue, 29 Aug 2023 11:33:28 +0000 (13:33 +0200)
committerGitHub <noreply@github.com>
Tue, 29 Aug 2023 11:33:28 +0000 (13:33 +0200)
Use PyTuple_Size() instead of PyTuple_GET_SIZE().

Tools/clinic/clinic.py

index 2b016685e84ce56434438d87a8063c241b421767..ec5bf302416ba8512d13c5f259a77007cdae28d6 100755 (executable)
@@ -1664,7 +1664,8 @@ class CLanguage(Language):
     def render_option_group_parsing(
             self,
             f: Function,
-            template_dict: TemplateDict
+            template_dict: TemplateDict,
+            limited_capi: bool,
     ) -> None:
         # positional only, grouped, optional arguments!
         # can be optional on the left or right.
@@ -1712,7 +1713,11 @@ class CLanguage(Language):
         count_min = sys.maxsize
         count_max = -1
 
-        add("switch (PyTuple_GET_SIZE(args)) {\n")
+        if limited_capi:
+            nargs = 'PyTuple_Size(args)'
+        else:
+            nargs = 'PyTuple_GET_SIZE(args)'
+        add(f"switch ({nargs}) {{\n")
         for subset in permute_optional_groups(left, required, right):
             count = len(subset)
             count_min = min(count_min, count)
@@ -1869,7 +1874,8 @@ class CLanguage(Language):
         template_dict['unpack_max'] = str(unpack_max)
 
         if has_option_groups:
-            self.render_option_group_parsing(f, template_dict)
+            self.render_option_group_parsing(f, template_dict,
+                                             limited_capi=clinic.limited_capi)
 
         # buffers, not destination
         for name, destination in clinic.destination_buffers.items():