PyObject_Init[Var] is almost always called from the PyObject_NEW[_VAR]

macros.  The 'op' argument is then the result from PyObject_MALLOC,
and that can of course be NULL.  In that case, PyObject_Init[Var]
would raise a SystemError with "NULL object passed to
PyObject_Init[Var]".  But there's nothing the caller of the macro can
do about this.  So PyObject_Init[Var] should call just PyErr_NoMemory.

Will backport.
This commit is contained in:
Guido van Rossum 2002-10-11 20:37:24 +00:00
parent c78462fb94
commit 6e08c1460c
1 changed files with 4 additions and 10 deletions

View File

@ -109,11 +109,8 @@ _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
PyObject *
PyObject_Init(PyObject *op, PyTypeObject *tp)
{
if (op == NULL) {
PyErr_SetString(PyExc_SystemError,
"NULL object passed to PyObject_Init");
return op;
}
if (op == NULL)
return PyErr_NoMemory();
/* Any changes should be reflected in PyObject_INIT (objimpl.h) */
op->ob_type = tp;
_Py_NewReference(op);
@ -123,11 +120,8 @@ PyObject_Init(PyObject *op, PyTypeObject *tp)
PyVarObject *
PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, int size)
{
if (op == NULL) {
PyErr_SetString(PyExc_SystemError,
"NULL object passed to PyObject_InitVar");
return op;
}
if (op == NULL)
return (PyVarObject *) PyErr_NoMemory();
/* Any changes should be reflected in PyObject_INIT_VAR */
op->ob_size = size;
op->ob_type = tp;