cpython: 01c57ef1b651 (original) (raw)

--- a/Include/modsupport.h +++ b/Include/modsupport.h @@ -79,17 +79,27 @@ typedef struct _PyArg_Parser { } _PyArg_Parser; #ifdef PY_SSIZE_T_CLEAN #define _PyArg_ParseTupleAndKeywordsFast _PyArg_ParseTupleAndKeywordsFast_SizeT +#define _PyArg_ParseStack _PyArg_ParseStack_SizeT #define _PyArg_ParseStackAndKeywords _PyArg_ParseStackAndKeywords_SizeT #define _PyArg_VaParseTupleAndKeywordsFast _PyArg_VaParseTupleAndKeywordsFast_SizeT #endif PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *, struct _PyArg_Parser *, ...); -PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords(PyObject **args, Py_ssize_t nargs, PyObject *kwnames,

+PyAPI_FUNC(int) _PyArg_ParseStack(

+PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords(

PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *, struct _PyArg_Parser , va_list); void _PyArg_Fini(void); -#endif +#endif / Py_LIMITED_API */ PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *); PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);

--- a/Python/getargs.c +++ b/Python/getargs.c @@ -26,6 +26,8 @@ int _PyArg_VaParseTupleAndKeywordsFast(P #ifdef HAVE_DECLSPEC_DLL /* Export functions */ PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, const char *, ...); +PyAPI_FUNC(int) _PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs,

PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords_SizeT(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, struct _PyArg_Parser *parser, ...); PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, const char , ...); @@ -66,6 +68,8 @@ typedef struct { #define STATIC_FREELIST_ENTRIES 8 / Forward */ +static int vgetargs1_impl(PyObject *args, PyObject **stack, Py_ssize_t nargs,

static int vgetargs1(PyObject *, const char *, va_list *, int); static void seterror(Py_ssize_t, const char *, int *, const char *, const char *); static const char *convertitem(PyObject *, const char **, va_list *, int, int *, @@ -138,6 +142,31 @@ int int +_PyArg_ParseStack(PyObject **args, Py_ssize_t nargs, const char *format, ...) +{

+

+} + +int +_PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs, const char *format, ...) +{

+

+} + + +int PyArg_VaParse(PyObject *args, const char *format, va_list va) { va_list lva; @@ -220,7 +249,8 @@ cleanreturn(int retval, freelist_t *free static int -vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) +vgetargs1_impl(PyObject *compat_args, PyObject **stack, Py_ssize_t nargs, const char *format,

{ char msgbuf[256]; int levels[32]; @@ -231,17 +261,18 @@ vgetargs1(PyObject *args, const char *fo int level = 0; int endfmt = 0; const char *formatsave = format;

+ freelist.entries = static_entries; freelist.first_available = 0; freelist.entries_malloced = 0;

@@ -314,14 +345,14 @@ vgetargs1(PyObject *args, const char *fo return cleanreturn(0, &freelist); } else if (min == 1 && max == 1) {

@@ -335,34 +366,26 @@ vgetargs1(PyObject *args, const char *fo } }

-

-

@@ -382,6 +405,31 @@ vgetargs1(PyObject *args, const char *fo return cleanreturn(1, &freelist); } +static int +vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) +{

+

+

+

+

+} static void