mirror of https://github.com/python/cpython
Issue #26200: Added Py_SETREF and replaced Py_XSETREF with Py_SETREF
in places where Py_DECREF was used.
This commit is contained in:
parent
e0805cf10e
commit
57a01d3a0e
|
@ -851,18 +851,28 @@ PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
|
||||||
*
|
*
|
||||||
* As in case of Py_CLEAR "the obvious" code can be deadly:
|
* As in case of Py_CLEAR "the obvious" code can be deadly:
|
||||||
*
|
*
|
||||||
* Py_XDECREF(op);
|
* Py_DECREF(op);
|
||||||
* op = op2;
|
* op = op2;
|
||||||
*
|
*
|
||||||
* The safe way is:
|
* The safe way is:
|
||||||
*
|
*
|
||||||
* Py_XSETREF(op, op2);
|
* Py_SETREF(op, op2);
|
||||||
*
|
*
|
||||||
* That arranges to set `op` to `op2` _before_ decref'ing, so that any code
|
* That arranges to set `op` to `op2` _before_ decref'ing, so that any code
|
||||||
* triggered as a side-effect of `op` getting torn down no longer believes
|
* triggered as a side-effect of `op` getting torn down no longer believes
|
||||||
* `op` points to a valid object.
|
* `op` points to a valid object.
|
||||||
|
*
|
||||||
|
* Py_XSETREF is a variant of Py_SETREF that uses Py_XDECREF instead of
|
||||||
|
* Py_DECREF.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define Py_SETREF(op, op2) \
|
||||||
|
do { \
|
||||||
|
PyObject *_py_tmp = (PyObject *)(op); \
|
||||||
|
(op) = (op2); \
|
||||||
|
Py_DECREF(_py_tmp); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define Py_XSETREF(op, op2) \
|
#define Py_XSETREF(op, op2) \
|
||||||
do { \
|
do { \
|
||||||
PyObject *_py_tmp = (PyObject *)(op); \
|
PyObject *_py_tmp = (PyObject *)(op); \
|
||||||
|
|
|
@ -391,7 +391,7 @@ StructUnionType_new(PyTypeObject *type, PyObject *args, PyObject *kwds, int isSt
|
||||||
Py_DECREF((PyObject *)dict);
|
Py_DECREF((PyObject *)dict);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_XSETREF(result->tp_dict, (PyObject *)dict);
|
Py_SETREF(result->tp_dict, (PyObject *)dict);
|
||||||
dict->format = _ctypes_alloc_format_string(NULL, "B");
|
dict->format = _ctypes_alloc_format_string(NULL, "B");
|
||||||
if (dict->format == NULL) {
|
if (dict->format == NULL) {
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
|
@ -960,7 +960,7 @@ PyCPointerType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
Py_DECREF((PyObject *)stgdict);
|
Py_DECREF((PyObject *)stgdict);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_XSETREF(result->tp_dict, (PyObject *)stgdict);
|
Py_SETREF(result->tp_dict, (PyObject *)stgdict);
|
||||||
|
|
||||||
return (PyObject *)result;
|
return (PyObject *)result;
|
||||||
}
|
}
|
||||||
|
@ -1403,7 +1403,7 @@ PyCArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
/* replace the class dict by our updated spam dict */
|
/* replace the class dict by our updated spam dict */
|
||||||
if (-1 == PyDict_Update((PyObject *)stgdict, result->tp_dict))
|
if (-1 == PyDict_Update((PyObject *)stgdict, result->tp_dict))
|
||||||
goto error;
|
goto error;
|
||||||
Py_XSETREF(result->tp_dict, (PyObject *)stgdict); /* steal the reference */
|
Py_SETREF(result->tp_dict, (PyObject *)stgdict); /* steal the reference */
|
||||||
stgdict = NULL;
|
stgdict = NULL;
|
||||||
|
|
||||||
/* Special case for character arrays.
|
/* Special case for character arrays.
|
||||||
|
@ -1816,7 +1816,7 @@ static PyObject *CreateSwappedType(PyTypeObject *type, PyObject *args, PyObject
|
||||||
Py_DECREF((PyObject *)stgdict);
|
Py_DECREF((PyObject *)stgdict);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_XSETREF(result->tp_dict, (PyObject *)stgdict);
|
Py_SETREF(result->tp_dict, (PyObject *)stgdict);
|
||||||
|
|
||||||
return (PyObject *)result;
|
return (PyObject *)result;
|
||||||
}
|
}
|
||||||
|
@ -1944,7 +1944,7 @@ PyCSimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
Py_DECREF((PyObject *)stgdict);
|
Py_DECREF((PyObject *)stgdict);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_XSETREF(result->tp_dict, (PyObject *)stgdict);
|
Py_SETREF(result->tp_dict, (PyObject *)stgdict);
|
||||||
|
|
||||||
/* Install from_param class methods in ctypes base classes.
|
/* Install from_param class methods in ctypes base classes.
|
||||||
Overrides the PyCSimpleType_from_param generic method.
|
Overrides the PyCSimpleType_from_param generic method.
|
||||||
|
@ -2307,7 +2307,7 @@ PyCFuncPtrType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
Py_DECREF((PyObject *)stgdict);
|
Py_DECREF((PyObject *)stgdict);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_XSETREF(result->tp_dict, (PyObject *)stgdict);
|
Py_SETREF(result->tp_dict, (PyObject *)stgdict);
|
||||||
|
|
||||||
if (-1 == make_funcptrtype_dict(stgdict)) {
|
if (-1 == make_funcptrtype_dict(stgdict)) {
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
|
@ -5152,7 +5152,7 @@ comerror_init(PyObject *self, PyObject *args, PyObject *kwds)
|
||||||
|
|
||||||
bself = (PyBaseExceptionObject *)self;
|
bself = (PyBaseExceptionObject *)self;
|
||||||
Py_INCREF(args);
|
Py_INCREF(args);
|
||||||
Py_XSETREF(bself->args, args);
|
Py_SETREF(bself->args, args);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -313,7 +313,7 @@ PyCursesPanel_replace_panel(PyCursesPanelObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_INCREF(temp);
|
Py_INCREF(temp);
|
||||||
Py_XSETREF(po->wo, temp);
|
Py_SETREF(po->wo, temp);
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1943,7 +1943,7 @@ element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value)
|
||||||
|
|
||||||
if (strcmp(name, "tag") == 0) {
|
if (strcmp(name, "tag") == 0) {
|
||||||
Py_INCREF(value);
|
Py_INCREF(value);
|
||||||
Py_XSETREF(self->tag, value);
|
Py_SETREF(self->tag, value);
|
||||||
} else if (strcmp(name, "text") == 0) {
|
} else if (strcmp(name, "text") == 0) {
|
||||||
Py_DECREF(JOIN_OBJ(self->text));
|
Py_DECREF(JOIN_OBJ(self->text));
|
||||||
self->text = value;
|
self->text = value;
|
||||||
|
@ -1958,7 +1958,7 @@ element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
Py_INCREF(value);
|
Py_INCREF(value);
|
||||||
Py_XSETREF(self->extra->attrib, value);
|
Py_SETREF(self->extra->attrib, value);
|
||||||
} else {
|
} else {
|
||||||
PyErr_SetString(PyExc_AttributeError,
|
PyErr_SetString(PyExc_AttributeError,
|
||||||
"Can't set arbitrary attributes on Element");
|
"Can't set arbitrary attributes on Element");
|
||||||
|
@ -2551,9 +2551,9 @@ treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag,
|
||||||
self->index++;
|
self->index++;
|
||||||
|
|
||||||
Py_INCREF(node);
|
Py_INCREF(node);
|
||||||
Py_XSETREF(self->this, node);
|
Py_SETREF(self->this, node);
|
||||||
Py_INCREF(node);
|
Py_INCREF(node);
|
||||||
Py_XSETREF(self->last, node);
|
Py_SETREF(self->last, node);
|
||||||
|
|
||||||
if (treebuilder_append_event(self, self->start_event_obj, node) < 0)
|
if (treebuilder_append_event(self, self->start_event_obj, node) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
@ -204,7 +204,7 @@ void pysqlite_flush_statement_cache(pysqlite_Connection* self)
|
||||||
node = node->next;
|
node = node->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_XSETREF(self->statement_cache,
|
Py_SETREF(self->statement_cache,
|
||||||
(pysqlite_Cache *)PyObject_CallFunction((PyObject *)&pysqlite_CacheType, "O", self));
|
(pysqlite_Cache *)PyObject_CallFunction((PyObject *)&pysqlite_CacheType, "O", self));
|
||||||
Py_DECREF(self);
|
Py_DECREF(self);
|
||||||
self->statement_cache->decref_factory = 0;
|
self->statement_cache->decref_factory = 0;
|
||||||
|
@ -794,7 +794,7 @@ static void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_XSETREF(self->statements, new_list);
|
Py_SETREF(self->statements, new_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self)
|
static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self)
|
||||||
|
@ -825,7 +825,7 @@ static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_XSETREF(self->cursors, new_list);
|
Py_SETREF(self->cursors, new_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
|
PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
|
||||||
|
|
|
@ -510,7 +510,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
|
||||||
|
|
||||||
/* reset description and rowcount */
|
/* reset description and rowcount */
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
Py_XSETREF(self->description, Py_None);
|
Py_SETREF(self->description, Py_None);
|
||||||
self->rowcount = -1L;
|
self->rowcount = -1L;
|
||||||
|
|
||||||
func_args = PyTuple_New(1);
|
func_args = PyTuple_New(1);
|
||||||
|
@ -535,7 +535,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->statement->in_use) {
|
if (self->statement->in_use) {
|
||||||
Py_XSETREF(self->statement,
|
Py_SETREF(self->statement,
|
||||||
PyObject_New(pysqlite_Statement, &pysqlite_StatementType));
|
PyObject_New(pysqlite_Statement, &pysqlite_StatementType));
|
||||||
if (!self->statement) {
|
if (!self->statement) {
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -652,7 +652,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
|
||||||
numcols = sqlite3_column_count(self->statement->st);
|
numcols = sqlite3_column_count(self->statement->st);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
|
|
||||||
Py_XSETREF(self->description, PyTuple_New(numcols));
|
Py_SETREF(self->description, PyTuple_New(numcols));
|
||||||
if (!self->description) {
|
if (!self->description) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -756,7 +756,7 @@ deepcopy(PyObject** object, PyObject* memo)
|
||||||
if (!copy)
|
if (!copy)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Py_XSETREF(*object, copy);
|
Py_SETREF(*object, copy);
|
||||||
|
|
||||||
return 1; /* success */
|
return 1; /* success */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1589,7 +1589,7 @@ static int PySSL_set_context(PySSLSocket *self, PyObject *value,
|
||||||
return -1;
|
return -1;
|
||||||
#else
|
#else
|
||||||
Py_INCREF(value);
|
Py_INCREF(value);
|
||||||
Py_XSETREF(self->ctx, (PySSLContext *)value);
|
Py_SETREF(self->ctx, (PySSLContext *)value);
|
||||||
SSL_set_SSL_CTX(self->ssl, self->ctx->ctx);
|
SSL_set_SSL_CTX(self->ssl, self->ctx->ctx);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -631,7 +631,7 @@ tee_next(teeobject *to)
|
||||||
link = teedataobject_jumplink(to->dataobj);
|
link = teedataobject_jumplink(to->dataobj);
|
||||||
if (link == NULL)
|
if (link == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_XSETREF(to->dataobj, (teedataobject *)link);
|
Py_SETREF(to->dataobj, (teedataobject *)link);
|
||||||
to->index = 0;
|
to->index = 0;
|
||||||
}
|
}
|
||||||
value = teedataobject_getitem(to->dataobj, to->index);
|
value = teedataobject_getitem(to->dataobj, to->index);
|
||||||
|
|
|
@ -1266,7 +1266,7 @@ PyInit__signal(void)
|
||||||
if (Handlers[SIGINT].func == DefaultHandler) {
|
if (Handlers[SIGINT].func == DefaultHandler) {
|
||||||
/* Install default int handler */
|
/* Install default int handler */
|
||||||
Py_INCREF(IntHandler);
|
Py_INCREF(IntHandler);
|
||||||
Py_XSETREF(Handlers[SIGINT].func, IntHandler);
|
Py_SETREF(Handlers[SIGINT].func, IntHandler);
|
||||||
old_siginthandler = PyOS_setsig(SIGINT, signal_handler);
|
old_siginthandler = PyOS_setsig(SIGINT, signal_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,7 @@ zipimporter_init(ZipImporter *self, PyObject *args, PyObject *kwds)
|
||||||
tmp = PyUnicode_FromFormat("%U%c", self->prefix, SEP);
|
tmp = PyUnicode_FromFormat("%U%c", self->prefix, SEP);
|
||||||
if (tmp == NULL)
|
if (tmp == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
Py_XSETREF(self->prefix, tmp);
|
Py_SETREF(self->prefix, tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -668,7 +668,7 @@ save_unconsumed_input(compobject *self, int err)
|
||||||
PyBytes_AS_STRING(self->unused_data), old_size);
|
PyBytes_AS_STRING(self->unused_data), old_size);
|
||||||
Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size,
|
Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size,
|
||||||
self->zst.next_in, self->zst.avail_in);
|
self->zst.next_in, self->zst.avail_in);
|
||||||
Py_XSETREF(self->unused_data, new_data);
|
Py_SETREF(self->unused_data, new_data);
|
||||||
self->zst.avail_in = 0;
|
self->zst.avail_in = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -680,7 +680,7 @@ save_unconsumed_input(compobject *self, int err)
|
||||||
(char *)self->zst.next_in, self->zst.avail_in);
|
(char *)self->zst.next_in, self->zst.avail_in);
|
||||||
if (new_data == NULL)
|
if (new_data == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
Py_XSETREF(self->unconsumed_tail, new_data);
|
Py_SETREF(self->unconsumed_tail, new_data);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3520,7 +3520,7 @@ PyBytes_Concat(PyObject **pv, PyObject *w)
|
||||||
/* Multiple references, need to create new object */
|
/* Multiple references, need to create new object */
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
v = bytes_concat(*pv, w);
|
v = bytes_concat(*pv, w);
|
||||||
Py_XSETREF(*pv, v);
|
Py_SETREF(*pv, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -527,7 +527,7 @@ func_new(PyTypeObject* type, PyObject* args, PyObject* kw)
|
||||||
|
|
||||||
if (name != Py_None) {
|
if (name != Py_None) {
|
||||||
Py_INCREF(name);
|
Py_INCREF(name);
|
||||||
Py_XSETREF(newfunc->func_name, name);
|
Py_SETREF(newfunc->func_name, name);
|
||||||
}
|
}
|
||||||
if (defaults != Py_None) {
|
if (defaults != Py_None) {
|
||||||
Py_INCREF(defaults);
|
Py_INCREF(defaults);
|
||||||
|
|
|
@ -1064,7 +1064,7 @@ longrangeiter_next(longrangeiterobject *r)
|
||||||
result = PyNumber_Add(r->start, product);
|
result = PyNumber_Add(r->start, product);
|
||||||
Py_DECREF(product);
|
Py_DECREF(product);
|
||||||
if (result) {
|
if (result) {
|
||||||
Py_XSETREF(r->index, new_index);
|
Py_SETREF(r->index, new_index);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Py_DECREF(new_index);
|
Py_DECREF(new_index);
|
||||||
|
|
|
@ -424,7 +424,7 @@ type_set_name(PyTypeObject *type, PyObject *value, void *context)
|
||||||
|
|
||||||
type->tp_name = tp_name;
|
type->tp_name = tp_name;
|
||||||
Py_INCREF(value);
|
Py_INCREF(value);
|
||||||
Py_XSETREF(((PyHeapTypeObject*)type)->ht_name, value);
|
Py_SETREF(((PyHeapTypeObject*)type)->ht_name, value);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -445,7 +445,7 @@ type_set_qualname(PyTypeObject *type, PyObject *value, void *context)
|
||||||
|
|
||||||
et = (PyHeapTypeObject*)type;
|
et = (PyHeapTypeObject*)type;
|
||||||
Py_INCREF(value);
|
Py_INCREF(value);
|
||||||
Py_XSETREF(et->ht_qualname, value);
|
Py_SETREF(et->ht_qualname, value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2897,7 +2897,7 @@ _PyType_Lookup(PyTypeObject *type, PyObject *name)
|
||||||
else
|
else
|
||||||
method_cache_misses++;
|
method_cache_misses++;
|
||||||
#endif
|
#endif
|
||||||
Py_XSETREF(method_cache[h].name, name);
|
Py_SETREF(method_cache[h].name, name);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1667,7 +1667,7 @@ unicode_resize(PyObject **p_unicode, Py_ssize_t length)
|
||||||
_Py_INCREF_UNICODE_EMPTY();
|
_Py_INCREF_UNICODE_EMPTY();
|
||||||
if (!unicode_empty)
|
if (!unicode_empty)
|
||||||
return -1;
|
return -1;
|
||||||
Py_XSETREF(*p_unicode, unicode_empty);
|
Py_SETREF(*p_unicode, unicode_empty);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1675,7 +1675,7 @@ unicode_resize(PyObject **p_unicode, Py_ssize_t length)
|
||||||
PyObject *copy = resize_copy(unicode, length);
|
PyObject *copy = resize_copy(unicode, length);
|
||||||
if (copy == NULL)
|
if (copy == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
Py_XSETREF(*p_unicode, copy);
|
Py_SETREF(*p_unicode, copy);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13326,7 +13326,7 @@ _PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer,
|
||||||
return -1;
|
return -1;
|
||||||
_PyUnicode_FastCopyCharacters(newbuffer, 0,
|
_PyUnicode_FastCopyCharacters(newbuffer, 0,
|
||||||
writer->buffer, 0, writer->pos);
|
writer->buffer, 0, writer->pos);
|
||||||
Py_XSETREF(writer->buffer, newbuffer);
|
Py_SETREF(writer->buffer, newbuffer);
|
||||||
}
|
}
|
||||||
_PyUnicodeWriter_Update(writer);
|
_PyUnicodeWriter_Update(writer);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -15012,7 +15012,7 @@ PyUnicode_InternInPlace(PyObject **p)
|
||||||
|
|
||||||
if (t) {
|
if (t) {
|
||||||
Py_INCREF(t);
|
Py_INCREF(t);
|
||||||
Py_XSETREF(*p, t);
|
Py_SETREF(*p, t);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -680,7 +680,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
}
|
}
|
||||||
else if (!is_true) {
|
else if (!is_true) {
|
||||||
Py_XSETREF(*filename, PyUnicode_FromString("__main__"));
|
Py_SETREF(*filename, PyUnicode_FromString("__main__"));
|
||||||
if (*filename == NULL)
|
if (*filename == NULL)
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3229,7 +3229,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
Py_INCREF(self);
|
Py_INCREF(self);
|
||||||
func = PyMethod_GET_FUNCTION(func);
|
func = PyMethod_GET_FUNCTION(func);
|
||||||
Py_INCREF(func);
|
Py_INCREF(func);
|
||||||
Py_XSETREF(*pfunc, self);
|
Py_SETREF(*pfunc, self);
|
||||||
na++;
|
na++;
|
||||||
/* n++; */
|
/* n++; */
|
||||||
} else
|
} else
|
||||||
|
@ -4682,7 +4682,7 @@ call_function(PyObject ***pp_stack, int oparg
|
||||||
Py_INCREF(self);
|
Py_INCREF(self);
|
||||||
func = PyMethod_GET_FUNCTION(func);
|
func = PyMethod_GET_FUNCTION(func);
|
||||||
Py_INCREF(func);
|
Py_INCREF(func);
|
||||||
Py_XSETREF(*pfunc, self);
|
Py_SETREF(*pfunc, self);
|
||||||
na++;
|
na++;
|
||||||
n++;
|
n++;
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -311,9 +311,9 @@ finally:
|
||||||
--tstate->recursion_depth;
|
--tstate->recursion_depth;
|
||||||
/* throw away the old exception and use the recursion error instead */
|
/* throw away the old exception and use the recursion error instead */
|
||||||
Py_INCREF(PyExc_RecursionError);
|
Py_INCREF(PyExc_RecursionError);
|
||||||
Py_XSETREF(*exc, PyExc_RecursionError);
|
Py_SETREF(*exc, PyExc_RecursionError);
|
||||||
Py_INCREF(PyExc_RecursionErrorInst);
|
Py_INCREF(PyExc_RecursionErrorInst);
|
||||||
Py_XSETREF(*val, PyExc_RecursionErrorInst);
|
Py_SETREF(*val, PyExc_RecursionErrorInst);
|
||||||
/* just keeping the old traceback */
|
/* just keeping the old traceback */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue