mirror of
https://github.com/python/cpython
synced 2026-09-29 09:50:29 +03:00
gh-91321: Add _Py_NULL macro (#92253)
Fix C++ compiler warnings: "zero as null pointer constant" (clang -Wzero-as-null-pointer-constant). * Add the _Py_NULL macro used by static inline functions to use nullptr in C++. * Replace NULL with nullptr in _testcppext.cpp.
This commit is contained in:
parent
456cd513e3
commit
551d02b3e6
6 changed files with 28 additions and 18 deletions
|
|
@ -103,8 +103,8 @@ PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod(
|
|||
static inline PyObject *
|
||||
PyObject_CallMethodNoArgs(PyObject *self, PyObject *name)
|
||||
{
|
||||
return PyObject_VectorcallMethod(name, &self,
|
||||
1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
|
||||
size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
|
||||
return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
|
||||
}
|
||||
|
||||
static inline PyObject *
|
||||
|
|
@ -113,8 +113,8 @@ PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg)
|
|||
PyObject *args[2] = {self, arg};
|
||||
|
||||
assert(arg != NULL);
|
||||
return PyObject_VectorcallMethod(name, args,
|
||||
2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
|
||||
size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
|
||||
return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
|
||||
}
|
||||
|
||||
PyAPI_FUNC(PyObject *) _PyObject_CallMethod(PyObject *obj,
|
||||
|
|
@ -144,7 +144,7 @@ _PyObject_VectorcallMethodId(
|
|||
{
|
||||
PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
|
||||
if (!oname) {
|
||||
return NULL;
|
||||
return _Py_NULL;
|
||||
}
|
||||
return PyObject_VectorcallMethod(oname, args, nargsf, kwnames);
|
||||
}
|
||||
|
|
@ -152,8 +152,8 @@ _PyObject_VectorcallMethodId(
|
|||
static inline PyObject *
|
||||
_PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name)
|
||||
{
|
||||
return _PyObject_VectorcallMethodId(name, &self,
|
||||
1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
|
||||
size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
|
||||
return _PyObject_VectorcallMethodId(name, &self, nargsf, _Py_NULL);
|
||||
}
|
||||
|
||||
static inline PyObject *
|
||||
|
|
@ -162,8 +162,8 @@ _PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg
|
|||
PyObject *args[2] = {self, arg};
|
||||
|
||||
assert(arg != NULL);
|
||||
return _PyObject_VectorcallMethodId(name, args,
|
||||
2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
|
||||
size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
|
||||
return _PyObject_VectorcallMethodId(name, args, nargsf, _Py_NULL);
|
||||
}
|
||||
|
||||
PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
|
||||
|
|
|
|||
|
|
@ -642,9 +642,9 @@ static inline Py_ssize_t PyUnicode_GET_SIZE(PyObject *op)
|
|||
{
|
||||
_Py_COMP_DIAG_PUSH
|
||||
_Py_COMP_DIAG_IGNORE_DEPR_DECLS
|
||||
if (_PyASCIIObject_CAST(op)->wstr == NULL) {
|
||||
if (_PyASCIIObject_CAST(op)->wstr == _Py_NULL) {
|
||||
(void)PyUnicode_AsUnicode(op);
|
||||
assert(_PyASCIIObject_CAST(op)->wstr != NULL);
|
||||
assert(_PyASCIIObject_CAST(op)->wstr != _Py_NULL);
|
||||
}
|
||||
return PyUnicode_WSTR_LENGTH(op);
|
||||
_Py_COMP_DIAG_POP
|
||||
|
|
@ -674,7 +674,7 @@ Py_DEPRECATED(3.3)
|
|||
static inline Py_UNICODE* PyUnicode_AS_UNICODE(PyObject *op)
|
||||
{
|
||||
wchar_t *wstr = _PyASCIIObject_CAST(op)->wstr;
|
||||
if (wstr != NULL) {
|
||||
if (wstr != _Py_NULL) {
|
||||
return wstr;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -587,7 +587,7 @@ static inline void Py_DECREF(PyObject *op)
|
|||
/* Function to use in case the object pointer can be NULL: */
|
||||
static inline void Py_XINCREF(PyObject *op)
|
||||
{
|
||||
if (op != NULL) {
|
||||
if (op != _Py_NULL) {
|
||||
Py_INCREF(op);
|
||||
}
|
||||
}
|
||||
|
|
@ -597,7 +597,7 @@ static inline void Py_XINCREF(PyObject *op)
|
|||
|
||||
static inline void Py_XDECREF(PyObject *op)
|
||||
{
|
||||
if (op != NULL) {
|
||||
if (op != _Py_NULL) {
|
||||
Py_DECREF(op);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,14 @@
|
|||
# define _Py_CAST(type, expr) ((type)(expr))
|
||||
#endif
|
||||
|
||||
// Static inline functions should use _Py_NULL rather than using directly NULL
|
||||
// to prevent C++ compiler warnings. In C++, _Py_NULL uses nullptr.
|
||||
#ifdef __cplusplus
|
||||
# define _Py_NULL nullptr
|
||||
#else
|
||||
# define _Py_NULL NULL
|
||||
#endif
|
||||
|
||||
|
||||
/* Defines to build Python and its standard library:
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue