return (PyObject *)ig;
}
+static int
+itemgetter_clear(itemgetterobject *ig)
+{
+ Py_CLEAR(ig->item);
+ return 0;
+}
+
static void
itemgetter_dealloc(itemgetterobject *ig)
{
PyTypeObject *tp = Py_TYPE(ig);
PyObject_GC_UnTrack(ig);
- Py_XDECREF(ig->item);
+ (void)itemgetter_clear(ig);
tp->tp_free(ig);
Py_DECREF(tp);
}
static int
itemgetter_traverse(itemgetterobject *ig, visitproc visit, void *arg)
{
+ Py_VISIT(Py_TYPE(ig));
Py_VISIT(ig->item);
return 0;
}
{Py_tp_dealloc, itemgetter_dealloc},
{Py_tp_call, itemgetter_call},
{Py_tp_traverse, itemgetter_traverse},
+ {Py_tp_clear, itemgetter_clear},
{Py_tp_methods, itemgetter_methods},
{Py_tp_new, itemgetter_new},
{Py_tp_getattro, PyObject_GenericGetAttr},
return (PyObject *)ag;
}
+static int
+attrgetter_clear(attrgetterobject *ag)
+{
+ Py_CLEAR(ag->attr);
+ return 0;
+}
+
static void
attrgetter_dealloc(attrgetterobject *ag)
{
PyTypeObject *tp = Py_TYPE(ag);
PyObject_GC_UnTrack(ag);
- Py_XDECREF(ag->attr);
+ (void)attrgetter_clear(ag);
tp->tp_free(ag);
Py_DECREF(tp);
}
attrgetter_traverse(attrgetterobject *ag, visitproc visit, void *arg)
{
Py_VISIT(ag->attr);
+ Py_VISIT(Py_TYPE(ag));
return 0;
}
{Py_tp_dealloc, attrgetter_dealloc},
{Py_tp_call, attrgetter_call},
{Py_tp_traverse, attrgetter_traverse},
+ {Py_tp_clear, attrgetter_clear},
{Py_tp_methods, attrgetter_methods},
{Py_tp_new, attrgetter_new},
{Py_tp_getattro, PyObject_GenericGetAttr},
return (PyObject *)mc;
}
+static int
+methodcaller_clear(methodcallerobject *mc)
+{
+ Py_CLEAR(mc->name);
+ Py_CLEAR(mc->args);
+ Py_CLEAR(mc->kwds);
+ return 0;
+}
+
static void
methodcaller_dealloc(methodcallerobject *mc)
{
PyTypeObject *tp = Py_TYPE(mc);
PyObject_GC_UnTrack(mc);
- Py_XDECREF(mc->name);
- Py_XDECREF(mc->args);
- Py_XDECREF(mc->kwds);
+ (void)methodcaller_clear(mc);
tp->tp_free(mc);
Py_DECREF(tp);
}
static int
methodcaller_traverse(methodcallerobject *mc, visitproc visit, void *arg)
{
+ Py_VISIT(mc->name);
Py_VISIT(mc->args);
Py_VISIT(mc->kwds);
+ Py_VISIT(Py_TYPE(mc));
return 0;
}
{Py_tp_dealloc, methodcaller_dealloc},
{Py_tp_call, methodcaller_call},
{Py_tp_traverse, methodcaller_traverse},
+ {Py_tp_clear, methodcaller_clear},
{Py_tp_methods, methodcaller_methods},
{Py_tp_new, methodcaller_new},
{Py_tp_getattro, PyObject_GenericGetAttr},