PyObject *prefix##_result; \
PyObject *prefix##_source_tb; \
PyObject *prefix##_cancel_msg; \
- fut_state prefix##_state; \
- int prefix##_log_tb; \
- int prefix##_blocking; \
PyObject *prefix##_weakreflist; \
- PyObject *prefix##_cancelled_exc;
+ PyObject *prefix##_cancelled_exc; \
+ fut_state prefix##_state; \
+ /* These bitfields need to be at the end of the struct
+ so that these and bitfields from TaskObj are contiguous.
+ */ \
+ unsigned prefix##_log_tb: 1; \
+ unsigned prefix##_blocking: 1;
typedef struct {
FutureObj_HEAD(fut)
typedef struct {
FutureObj_HEAD(task)
+ unsigned task_must_cancel: 1;
+ unsigned task_log_destroy_pending: 1;
+ int task_num_cancels_requested;
PyObject *task_fut_waiter;
PyObject *task_coro;
PyObject *task_name;
PyObject *task_context;
- int task_must_cancel;
- int task_log_destroy_pending;
- int task_num_cancels_requested;
} TaskObj;
typedef struct {