summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-05-03 19:38:37 (GMT)
committerGitHub <noreply@github.com>2022-05-03 19:38:37 (GMT)
commit551d02b3e697098236bb3a6e0a855b2ad8dc0424 (patch)
treeffa7db7f5129f7167df4c40bf4bbed2f5481c28b /Include
parent456cd513e360ccd17e51ae3711ec48976b1be0c0 (diff)
downloadcpython-551d02b3e697098236bb3a6e0a855b2ad8dc0424.zip
cpython-551d02b3e697098236bb3a6e0a855b2ad8dc0424.tar.gz
cpython-551d02b3e697098236bb3a6e0a855b2ad8dc0424.tar.bz2
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.
Diffstat (limited to 'Include')
-rw-r--r--Include/cpython/abstract.h18
-rw-r--r--Include/cpython/unicodeobject.h6
-rw-r--r--Include/object.h4
-rw-r--r--Include/pyport.h8
4 files changed, 22 insertions, 14 deletions
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index 77e2cfa..161e2cb 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -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);
diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h
index 96bfaaf..8e182d0 100644
--- a/Include/cpython/unicodeobject.h
+++ b/Include/cpython/unicodeobject.h
@@ -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;
}
diff --git a/Include/object.h b/Include/object.h
index f93ecce..a0dba69 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -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);
}
}
diff --git a/Include/pyport.h b/Include/pyport.h
index f6270be..614a278 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -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:
*