fut_state prefix##_state; \
int prefix##_log_tb; \
int prefix##_blocking; \
- PyObject *dict; \
PyObject *prefix##_weakreflist; \
PyObject *prefix##_cancelled_exc;
PyObject *res;
int is_true;
- // Same to FutureObj_clear() but not clearing fut->dict
Py_CLEAR(fut->fut_loop);
Py_CLEAR(fut->fut_callback0);
Py_CLEAR(fut->fut_context0);
Py_CLEAR(fut->fut_source_tb);
Py_CLEAR(fut->fut_cancel_msg);
Py_CLEAR(fut->fut_cancelled_exc);
- Py_CLEAR(fut->dict);
+ _PyObject_ClearManagedDict((PyObject *)fut);
return 0;
}
Py_VISIT(fut->fut_source_tb);
Py_VISIT(fut->fut_cancel_msg);
Py_VISIT(fut->fut_cancelled_exc);
- Py_VISIT(fut->dict);
+ _PyObject_VisitManagedDict((PyObject *)fut, visit, arg);
return 0;
}
static PyMemberDef FutureType_members[] = {
{"__weaklistoffset__", T_PYSSIZET, offsetof(FutureObj, fut_weakreflist), READONLY},
- {"__dictoffset__", T_PYSSIZET, offsetof(FutureObj, dict), READONLY},
{NULL},
};
.name = "_asyncio.Future",
.basicsize = sizeof(FutureObj),
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
- Py_TPFLAGS_IMMUTABLETYPE),
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT),
.slots = Future_slots,
};
Py_VISIT(fut->fut_source_tb);
Py_VISIT(fut->fut_cancel_msg);
Py_VISIT(fut->fut_cancelled_exc);
- Py_VISIT(fut->dict);
+ _PyObject_VisitManagedDict((PyObject *)fut, visit, arg);
return 0;
}
static PyMemberDef TaskType_members[] = {
{"__weaklistoffset__", T_PYSSIZET, offsetof(TaskObj, task_weakreflist), READONLY},
- {"__dictoffset__", T_PYSSIZET, offsetof(TaskObj, dict), READONLY},
{NULL},
};
.name = "_asyncio.Task",
.basicsize = sizeof(TaskObj),
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
- Py_TPFLAGS_IMMUTABLETYPE),
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT),
.slots = Task_slots,
};