From 7f39c0ccfcaba95de1eaba87f117b89b032b1fa0 Mon Sep 17 00:00:00 2001
From: Victor Stinner <victor.stinner@gmail.com>
Date: Fri, 9 Dec 2016 00:40:33 +0100
Subject: [PATCH] Add _PyObject_VaCallFunctionObjArgs() private function

Issue #28915: Similar to _PyObject_CallFunctionObjArgs() but use va_list to
pass arguments.
---
 Include/abstract.h |  6 ++++++
 Objects/abstract.c | 10 +++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/Include/abstract.h b/Include/abstract.h
index 09efd119bf..5981d69e83 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -437,6 +437,12 @@ PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj,
 PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
                                                     ...);
 
+#ifndef Py_LIMITED_API
+PyAPI_FUNC(PyObject *) _PyObject_VaCallFunctionObjArgs(
+    PyObject *callable,
+    va_list vargs);
+#endif
+
   /*
 Call the method named 'name' of object 'obj' with a variable number of
 C arguments.  The C arguments are provided as PyObject *
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 5c3344cb38..2c5057d133 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2706,8 +2706,8 @@ _PyObject_CallMethodId_SizeT(PyObject *obj, _Py_Identifier *name,
     return retval;
 }
 
-static PyObject *
-_PyObject_FastCallVa(PyObject *callable, va_list vargs)
+PyObject *
+_PyObject_VaCallFunctionObjArgs(PyObject *callable, va_list vargs)
 {
     PyObject *small_stack[5];
     PyObject **stack;
@@ -2773,7 +2773,7 @@ PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
     }
 
     va_start(vargs, name);
-    result = _PyObject_FastCallVa(callable, vargs);
+    result = _PyObject_VaCallFunctionObjArgs(callable, vargs);
     va_end(vargs);
 
     Py_DECREF(callable);
@@ -2797,7 +2797,7 @@ _PyObject_CallMethodIdObjArgs(PyObject *obj,
     }
 
     va_start(vargs, name);
-    result = _PyObject_FastCallVa(callable, vargs);
+    result = _PyObject_VaCallFunctionObjArgs(callable, vargs);
     va_end(vargs);
 
     Py_DECREF(callable);
@@ -2811,7 +2811,7 @@ PyObject_CallFunctionObjArgs(PyObject *callable, ...)
     PyObject *result;
 
     va_start(vargs, callable);
-    result = _PyObject_FastCallVa(callable, vargs);
+    result = _PyObject_VaCallFunctionObjArgs(callable, vargs);
     va_end(vargs);
 
     return result;
-- 
2.49.0