From f1141a1a24dfcaa2e917ca1bf43355d778e9f70d Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 25 May 2023 18:44:28 +0900 Subject: [PATCH] fixup --- Include/abstract.h | 9 --- Include/cpython/abstract.h | 7 --- Include/cpython/modsupport.h | 28 +++++---- Include/modsupport.h | 3 - Objects/call.c | 35 +++--------- Python/getargs.c | 108 +++++++++-------------------------- Python/modsupport.c | 9 ++- Python/sysmodule.c | 2 +- 8 files changed, 55 insertions(+), 146 deletions(-) diff --git a/Include/abstract.h b/Include/abstract.h index 2cd9d0761975e25..73a55e1e16c397a 100644 --- a/Include/abstract.h +++ b/Include/abstract.h @@ -193,15 +193,6 @@ PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...); -PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable, - const char *format, - ...); - -PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj, - const char *name, - const char *format, - ...); - /* Call a callable Python object 'callable' with a variable number of C arguments. The C arguments are provided as PyObject* values, terminated by a NULL. diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h index cc5a7093a1a8e73..992dd068db90ea6 100644 --- a/Include/cpython/abstract.h +++ b/Include/cpython/abstract.h @@ -4,8 +4,6 @@ /* === Object Protocol ================================================== */ -#define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT - /* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple) format to a Python dictionary ("kwargs" dict). @@ -111,11 +109,6 @@ PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj, _Py_Identifier *name, const char *format, ...); -PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj, - _Py_Identifier *name, - const char *format, - ...); - PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs( PyObject *obj, _Py_Identifier *name, diff --git a/Include/cpython/modsupport.h b/Include/cpython/modsupport.h index e49e3ece34098db..2cea105ce7ac97e 100644 --- a/Include/cpython/modsupport.h +++ b/Include/cpython/modsupport.h @@ -2,9 +2,19 @@ # error "this header file must not be included directly" #endif -/* Each functions treats #-specifier to mean Py_ssize_t - * regardless PY_SSIZE_T_CLEAN */ -#define _Py_VaBuildStack _Py_VaBuildStack_SizeT +PyAPI_FUNC(PyObject **) _Py_VaBuildStack( + PyObject **small_stack, + Py_ssize_t small_stack_len, + const char *format, + va_list va, + Py_ssize_t *p_nargs); + +PyAPI_FUNC(PyObject **) _Py_VaBuildStack_SizeT( + PyObject **small_stack, + Py_ssize_t small_stack_len, + const char *format, + va_list va, + Py_ssize_t *p_nargs); PyAPI_FUNC(int) _PyArg_UnpackStack( PyObject *const *args, @@ -33,13 +43,6 @@ PyAPI_FUNC(int) _PyArg_CheckPositional(const char *, Py_ssize_t, ((!_Py_ANY_VARARGS(max) && (min) <= (nargs) && (nargs) <= (max)) \ || _PyArg_CheckPositional((funcname), (nargs), (min), (max))) -PyAPI_FUNC(PyObject **) _Py_VaBuildStack( - PyObject **small_stack, - Py_ssize_t small_stack_len, - const char *format, - va_list va, - Py_ssize_t *p_nargs); - typedef struct _PyArg_Parser { int initialized; const char *format; @@ -53,11 +56,6 @@ typedef struct _PyArg_Parser { struct _PyArg_Parser *next; } _PyArg_Parser; -#define _PyArg_ParseTupleAndKeywordsFast _PyArg_ParseTupleAndKeywordsFast_SizeT -#define _PyArg_ParseStack _PyArg_ParseStack_SizeT -#define _PyArg_ParseStackAndKeywords _PyArg_ParseStackAndKeywords_SizeT -#define _PyArg_VaParseTupleAndKeywordsFast _PyArg_VaParseTupleAndKeywordsFast_SizeT - PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *, struct _PyArg_Parser *, ...); PyAPI_FUNC(int) _PyArg_ParseStack( diff --git a/Include/modsupport.h b/Include/modsupport.h index 39444616c640b43..4c3ceca596c7eec 100644 --- a/Include/modsupport.h +++ b/Include/modsupport.h @@ -33,9 +33,6 @@ PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, PyAPI_FUNC(int) PyArg_ValidateKeywordArguments(PyObject *); PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...); PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...); -PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); - - PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list); // Add an attribute with name 'name' and value 'obj' to the module 'mod. diff --git a/Objects/call.c b/Objects/call.c index 0d548dcd5e1aed7..0f6cf569121bb35 100644 --- a/Objects/call.c +++ b/Objects/call.c @@ -572,8 +572,9 @@ _PyObject_CallFunctionVa(PyThreadState *tstate, PyObject *callable, return result; } - -PyObject * +// Export for the stable ABI +#undef PyObject_CallFunction +PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable, const char *format, ...) { va_list va; @@ -634,7 +635,9 @@ callmethod(PyThreadState *tstate, PyObject* callable, const char *format, va_lis return _PyObject_CallFunctionVa(tstate, callable, format, va, is_size_t); } -PyObject * +// Export for the stable ABI +#undef PyObject_CallMethod +PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...) { PyThreadState *tstate = _PyThreadState_GET(); @@ -724,7 +727,7 @@ _PyObject_CallMethodId(PyObject *obj, _Py_Identifier *name, va_list va; va_start(va, format); - PyObject *retval = callmethod(tstate, callable, format, va, 0); + PyObject *retval = callmethod(tstate, callable, format, va, 1); va_end(va); Py_DECREF(callable); @@ -767,30 +770,6 @@ _PyObject_CallMethod_SizeT(PyObject *obj, const char *name, } -PyObject * -_PyObject_CallMethodId_SizeT(PyObject *obj, _Py_Identifier *name, - const char *format, ...) -{ - PyThreadState *tstate = _PyThreadState_GET(); - if (obj == NULL || name == NULL) { - return null_error(tstate); - } - - PyObject *callable = _PyObject_GetAttrId(obj, name); - if (callable == NULL) { - return NULL; - } - - va_list va; - va_start(va, format); - PyObject *retval = callmethod(tstate, callable, format, va, 1); - va_end(va); - - Py_DECREF(callable); - return retval; -} - - /* --- Call with "..." arguments ---------------------------------- */ static PyObject * diff --git a/Python/getargs.c b/Python/getargs.c index 4568ec7235c0fe9..2c63e069ff7f9a6 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -12,28 +12,31 @@ #ifdef __cplusplus extern "C" { #endif -int PyArg_Parse(PyObject *, const char *, ...); -int PyArg_ParseTuple(PyObject *, const char *, ...); -int PyArg_VaParse(PyObject *, const char *, va_list); - -int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, - const char *, char **, ...); -int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, - const char *, char **, va_list); - -int _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *, - struct _PyArg_Parser *, ...); -int _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *, - struct _PyArg_Parser *, va_list); +// Remove alias to _SizeT version in modsupport.h +#undef PyArg_Parse +#undef PyArg_ParseTuple +#undef PyArg_ParseTupleAndKeywords +#undef PyArg_VaParse +#undef PyArg_VaParseTupleAndKeywords +PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...); +PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...); +PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list); + +PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords( + PyObject *, PyObject *, const char *, char **, ...); +PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords( + PyObject *, PyObject *, const char *, char **, va_list); + +PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast( + PyObject *, PyObject *, struct _PyArg_Parser *, ...); +PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast( + PyObject *, PyObject *, struct _PyArg_Parser *, va_list); #ifdef HAVE_DECLSPEC_DLL /* Export functions */ PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, const char *, ...); PyAPI_FUNC(int) _PyArg_ParseStack_SizeT(PyObject *const *args, Py_ssize_t nargs, const char *format, ...); -PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords_SizeT(PyObject *const *args, Py_ssize_t nargs, - PyObject *kwnames, - struct _PyArg_Parser *parser, ...); PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, const char *, ...); PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywords_SizeT(PyObject *, PyObject *, const char *, char **, ...); @@ -41,11 +44,6 @@ PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); PyAPI_FUNC(int) _PyArg_VaParse_SizeT(PyObject *, const char *, va_list); PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *, PyObject *, const char *, char **, va_list); - -PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *, PyObject *, - struct _PyArg_Parser *, ...); -PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *, PyObject *, - struct _PyArg_Parser *, va_list); #endif #define FLAG_COMPAT 1 @@ -95,6 +93,7 @@ static int vgetargskeywordsfast_impl(PyObject *const *args, Py_ssize_t nargs, va_list *p_va, int flags); static const char *skipitem(const char **, va_list *, int); +#undef PyArg_Parse int PyArg_Parse(PyObject *args, const char *format, ...) { @@ -120,6 +119,7 @@ _PyArg_Parse_SizeT(PyObject *args, const char *format, ...) } +#undef PyArg_ParseTuple int PyArg_ParseTuple(PyObject *args, const char *format, ...) { @@ -151,25 +151,13 @@ _PyArg_ParseStack(PyObject *const *args, Py_ssize_t nargs, const char *format, . int retval; va_list va; - va_start(va, format); - retval = vgetargs1_impl(NULL, args, nargs, format, &va, 0); - va_end(va); - return retval; -} - -PyAPI_FUNC(int) -_PyArg_ParseStack_SizeT(PyObject *const *args, Py_ssize_t nargs, const char *format, ...) -{ - int retval; - va_list va; - va_start(va, format); retval = vgetargs1_impl(NULL, args, nargs, format, &va, FLAG_SIZE_T); va_end(va); return retval; } - +#undef PyArg_VaParse int PyArg_VaParse(PyObject *args, const char *format, va_list va) { @@ -1322,6 +1310,7 @@ getbuffer(PyObject *arg, Py_buffer *view, const char **errmsg) /* Support for keyword arguments donated by Geoff Philbrick */ +#undef PyArg_ParseTupleAndKeywords /* Remove alias to _SizeT version */ /* Return false (0) for error, else true. */ int PyArg_ParseTupleAndKeywords(PyObject *args, @@ -1372,7 +1361,7 @@ _PyArg_ParseTupleAndKeywords_SizeT(PyObject *args, return retval; } - +#undef PyArg_VaParseTupleAndKeywords /* Remove alias to _SizeT version */ int PyArg_VaParseTupleAndKeywords(PyObject *args, PyObject *keywords, @@ -1424,60 +1413,33 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args, return retval; } -PyAPI_FUNC(int) +int _PyArg_ParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, struct _PyArg_Parser *parser, ...) { int retval; va_list va; - va_start(va, parser); - retval = vgetargskeywordsfast(args, keywords, parser, &va, 0); - va_end(va); - return retval; -} - -PyAPI_FUNC(int) -_PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, - struct _PyArg_Parser *parser, ...) -{ - int retval; - va_list va; - va_start(va, parser); retval = vgetargskeywordsfast(args, keywords, parser, &va, FLAG_SIZE_T); va_end(va); return retval; } -PyAPI_FUNC(int) +int _PyArg_ParseStackAndKeywords(PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames, struct _PyArg_Parser *parser, ...) { int retval; va_list va; - va_start(va, parser); - retval = vgetargskeywordsfast_impl(args, nargs, NULL, kwnames, parser, &va, 0); - va_end(va); - return retval; -} - -PyAPI_FUNC(int) -_PyArg_ParseStackAndKeywords_SizeT(PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames, - struct _PyArg_Parser *parser, ...) -{ - int retval; - va_list va; - va_start(va, parser); retval = vgetargskeywordsfast_impl(args, nargs, NULL, kwnames, parser, &va, FLAG_SIZE_T); va_end(va); return retval; } - -PyAPI_FUNC(int) +int _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, struct _PyArg_Parser *parser, va_list va) { @@ -1486,20 +1448,6 @@ _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, va_copy(lva, va); - retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0); - va_end(lva); - return retval; -} - -PyAPI_FUNC(int) -_PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, - struct _PyArg_Parser *parser, va_list va) -{ - int retval; - va_list lva; - - va_copy(lva, va); - retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T); va_end(lva); return retval; @@ -2322,7 +2270,6 @@ vgetargskeywordsfast(PyObject *args, PyObject *keywords, #undef _PyArg_UnpackKeywords - PyObject * const * _PyArg_UnpackKeywords(PyObject *const *args, Py_ssize_t nargs, PyObject *kwargs, PyObject *kwnames, @@ -2785,7 +2732,6 @@ skipitem(const char **p_format, va_list *p_va, int flags) #undef _PyArg_CheckPositional - int _PyArg_CheckPositional(const char *name, Py_ssize_t nargs, Py_ssize_t min, Py_ssize_t max) diff --git a/Python/modsupport.c b/Python/modsupport.c index d6d6de4934c874b..e12c313ac1bf0d8 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -5,6 +5,12 @@ #include "pycore_abstract.h" // _PyIndex_Check() #include "pycore_object.h" // _PyType_IsReady() +// Remove alias to _SizeT version in modsupport.h +#undef Py_BuildValue +#undef Py_VaBuildValue +PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...); +PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list); + #define FLAG_SIZE_T 1 typedef double va_double; @@ -507,8 +513,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) #undef ERROR_NEED_PY_SSIZE_T_CLEAN } - -PyObject * +PyAPI_FUNC(PyObject *) Py_BuildValue(const char *format, ...) { va_list va; diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 33147f012b611d6..32be7ec09ebfd6c 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -211,7 +211,7 @@ sys_audit_tstate(PyThreadState *ts, const char *event, /* Initialize event args now */ if (argFormat && argFormat[0]) { - eventArgs = _Py_VaBuildValue_SizeT(argFormat, vargs); + eventArgs = Py_VaBuildValue(argFormat, vargs); if (eventArgs && !PyTuple_Check(eventArgs)) { PyObject *argTuple = PyTuple_Pack(1, eventArgs); Py_SETREF(eventArgs, argTuple);