uint64_t tp_name;
uint64_t tp_repr;
uint64_t tp_flags;
+ uint64_t tp_basicsize;
+ uint64_t tp_dictoffset;
} type_object;
+ // PyHeapTypeObject offset;
+ struct _heap_type_object {
+ uint64_t size;
+ uint64_t ht_cached_keys;
+ } heap_type_object;
+
// PyTuple object offset;
struct _tuple_object {
uint64_t size;
.tp_name = offsetof(PyTypeObject, tp_name), \
.tp_repr = offsetof(PyTypeObject, tp_repr), \
.tp_flags = offsetof(PyTypeObject, tp_flags), \
+ .tp_basicsize = offsetof(PyTypeObject, tp_basicsize), \
+ .tp_dictoffset = offsetof(PyTypeObject, tp_dictoffset), \
+ }, \
+ .heap_type_object = { \
+ .size = sizeof(PyHeapTypeObject), \
+ .ht_cached_keys = offsetof(PyHeapTypeObject, ht_cached_keys), \
}, \
.tuple_object = { \
.size = sizeof(PyTupleObject), \
--- /dev/null
+Added ``PyTypeObject.tp_basicsize``, ``PyTypeObject.tp_dictoffset``, and
+``PyHeapTypeObject.ht_cached_keys`` offsets to :c:type:`!_Py_DebugOffsets` to
+support version-independent read-only dict introspection tools.
#define FIELD_SIZE(type, member) sizeof(((type *)0)->member)
enum {
- PY_REMOTE_DEBUG_OFFSETS_TOTAL_SIZE = 848,
+ PY_REMOTE_DEBUG_OFFSETS_TOTAL_SIZE = 880,
PY_REMOTE_ASYNC_DEBUG_OFFSETS_TOTAL_SIZE = 104,
};