_PyAsyncGenWrappedValue *o;
o = ag_value_freelist[--ag_value_freelist_free];
assert(_PyAsyncGenWrappedValue_CheckExact(o));
- PyObject_Del(o);
+ PyObject_GC_Del(o);
}
while (ag_asend_freelist_free) {
PyAsyncGenASend *o;
o = ag_asend_freelist[--ag_asend_freelist_free];
assert(Py_TYPE(o) == &_PyAsyncGenASend_Type);
- PyObject_Del(o);
+ PyObject_GC_Del(o);
}
return ret;
static void
async_gen_asend_dealloc(PyAsyncGenASend *o)
{
+ _PyObject_GC_UNTRACK((PyObject *)o);
Py_CLEAR(o->ags_gen);
Py_CLEAR(o->ags_sendval);
if (ag_asend_freelist_free < _PyAsyncGen_MAXFREELIST) {
assert(PyAsyncGenASend_CheckExact(o));
ag_asend_freelist[ag_asend_freelist_free++] = o;
} else {
- PyObject_Del(o);
+ PyObject_GC_Del(o);
}
}
+static int
+async_gen_asend_traverse(PyAsyncGenASend *o, visitproc visit, void *arg)
+{
+ Py_VISIT(o->ags_gen);
+ Py_VISIT(o->ags_sendval);
+ return 0;
+}
+
static PyObject *
async_gen_asend_send(PyAsyncGenASend *o, PyObject *arg)
PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
0, /* tp_doc */
- 0, /* tp_traverse */
+ (traverseproc)async_gen_asend_traverse, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
o = ag_asend_freelist[ag_asend_freelist_free];
_Py_NewReference((PyObject *)o);
} else {
- o = PyObject_New(PyAsyncGenASend, &_PyAsyncGenASend_Type);
+ o = PyObject_GC_New(PyAsyncGenASend, &_PyAsyncGenASend_Type);
if (o == NULL) {
return NULL;
}
o->ags_sendval = sendval;
o->ags_state = AWAITABLE_STATE_INIT;
+
+ _PyObject_GC_TRACK((PyObject*)o);
return (PyObject*)o;
}
static void
async_gen_wrapped_val_dealloc(_PyAsyncGenWrappedValue *o)
{
+ _PyObject_GC_UNTRACK((PyObject *)o);
Py_CLEAR(o->agw_val);
if (ag_value_freelist_free < _PyAsyncGen_MAXFREELIST) {
assert(_PyAsyncGenWrappedValue_CheckExact(o));
ag_value_freelist[ag_value_freelist_free++] = o;
} else {
- PyObject_Del(o);
+ PyObject_GC_Del(o);
}
}
+static int
+async_gen_wrapped_val_traverse(_PyAsyncGenWrappedValue *o,
+ visitproc visit, void *arg)
+{
+ Py_VISIT(o->agw_val);
+ return 0;
+}
+
+
PyTypeObject _PyAsyncGenWrappedValue_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"async_generator_wrapped_value", /* tp_name */
PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
0, /* tp_doc */
- 0, /* tp_traverse */
+ (traverseproc)async_gen_wrapped_val_traverse, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
assert(_PyAsyncGenWrappedValue_CheckExact(o));
_Py_NewReference((PyObject*)o);
} else {
- o = PyObject_New(_PyAsyncGenWrappedValue, &_PyAsyncGenWrappedValue_Type);
+ o = PyObject_GC_New(_PyAsyncGenWrappedValue,
+ &_PyAsyncGenWrappedValue_Type);
if (o == NULL) {
return NULL;
}
}
o->agw_val = val;
Py_INCREF(val);
+ _PyObject_GC_TRACK((PyObject*)o);
return (PyObject*)o;
}
static void
async_gen_athrow_dealloc(PyAsyncGenAThrow *o)
{
+ _PyObject_GC_UNTRACK((PyObject *)o);
Py_CLEAR(o->agt_gen);
Py_CLEAR(o->agt_args);
- PyObject_Del(o);
+ PyObject_GC_Del(o);
+}
+
+
+static int
+async_gen_athrow_traverse(PyAsyncGenAThrow *o, visitproc visit, void *arg)
+{
+ Py_VISIT(o->agt_gen);
+ Py_VISIT(o->agt_args);
+ return 0;
}
PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
0, /* tp_doc */
- 0, /* tp_traverse */
+ (traverseproc)async_gen_athrow_traverse, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
async_gen_athrow_new(PyAsyncGenObject *gen, PyObject *args)
{
PyAsyncGenAThrow *o;
- o = PyObject_New(PyAsyncGenAThrow, &_PyAsyncGenAThrow_Type);
+ o = PyObject_GC_New(PyAsyncGenAThrow, &_PyAsyncGenAThrow_Type);
if (o == NULL) {
return NULL;
}
o->agt_state = AWAITABLE_STATE_INIT;
Py_INCREF(gen);
Py_XINCREF(args);
+ _PyObject_GC_TRACK((PyObject*)o);
return (PyObject*)o;
}