[Python-checkins] cpython: Argument Clinic: Use METH_FASTCALL for boring positionals
victor.stinner
python-checkins at python.org
Mon Jan 16 20:48:45 EST 2017
https://hg.python.org/cpython/rev/905e902bd47e
changeset: 106181:905e902bd47e
user: Victor Stinner <victor.stinner at gmail.com>
date: Tue Jan 17 02:35:41 2017 +0100
summary:
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().
files:
Tools/clinic/clinic.py | 36 +++++++++++++++++++++--------
1 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -825,16 +825,32 @@
# and nothing but normal objects:
# PyArg_UnpackTuple!
- 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))
+ if not new_or_init:
+ flags = "METH_FASTCALL"
+ parser_prototype = parser_prototype_fastcall
+
+ parser_definition = parser_body(parser_prototype, normalize_snippet("""
+ if (!_PyArg_UnpackStack(args, nargs, "{name}",
+ {unpack_min}, {unpack_max},
+ {parse_arguments})) {{
+ goto exit;
+ }}
+
+ 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:
if not new_or_init:
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list