Commit 093119e4 authored by Victor Stinner's avatar Victor Stinner

Argument Clinic: Use METH_FASTCALL for boring positionals

Issue #29286. Use METH_FASTCALL calling convention instead of METH_VARARGS to
parse "boring" position arguments. METH_FASTCALL is faster since it avoids the
creation of a temporary tuple to pass positional arguments.

Replace PyArg_UnpackTuple() with _PyArg_UnpackStack()+_PyArg_NoStackKeywords().
parent fe54dd8a
...@@ -825,16 +825,32 @@ class CLanguage(Language): ...@@ -825,16 +825,32 @@ class CLanguage(Language):
# and nothing but normal objects: # and nothing but normal objects:
# PyArg_UnpackTuple! # PyArg_UnpackTuple!
flags = "METH_VARARGS" if not new_or_init:
parser_prototype = parser_prototype_varargs flags = "METH_FASTCALL"
parser_prototype = parser_prototype_fastcall
parser_definition = parser_body(parser_prototype, normalize_snippet(""" parser_definition = parser_body(parser_prototype, normalize_snippet("""
if (!PyArg_UnpackTuple(args, "{name}", if (!_PyArg_UnpackStack(args, nargs, "{name}",
{unpack_min}, {unpack_max}, {unpack_min}, {unpack_max},
{parse_arguments})) {{ {parse_arguments})) {{
goto exit; goto exit;
}} }}
""", indent=4))
if ({self_type_check}!_PyArg_NoStackKeywords("{name}", kwnames)) {{
goto exit;
}}
""", indent=4))
else:
flags = "METH_VARARGS"
parser_prototype = parser_prototype_varargs
parser_definition = parser_body(parser_prototype, normalize_snippet("""
if (!PyArg_UnpackTuple(args, "{name}",
{unpack_min}, {unpack_max},
{parse_arguments})) {{
goto exit;
}}
""", indent=4))
elif positional: elif positional:
if not new_or_init: if not new_or_init:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment