.double_format = _py_float_format_unknown, \
}, \
.types = { \
- .next_version_tag = 1, \
+ .next_version_tag = _Py_TYPE_VERSION_NEXT, \
}, \
.static_objects = { \
.singletons = { \
/* state */
+#define _Py_TYPE_VERSION_INT 1
+#define _Py_TYPE_VERSION_FLOAT 2
+#define _Py_TYPE_VERSION_LIST 3
+#define _Py_TYPE_VERSION_TUPLE 4
+#define _Py_TYPE_VERSION_STR 5
+#define _Py_TYPE_VERSION_SET 6
+#define _Py_TYPE_VERSION_FROZEN_SET 7
+#define _Py_TYPE_VERSION_DICT 8
+#define _Py_TYPE_VERSION_BYTEARRAY 9
+#define _Py_TYPE_VERSION_BYTES 10
+#define _Py_TYPE_VERSION_COMPLEX 11
+
+#define _Py_TYPE_VERSION_NEXT 16
+
+
#define _Py_TYPE_BASE_VERSION_TAG (2<<16)
#define _Py_MAX_GLOBAL_TYPE_VERSION_TAG (_Py_TYPE_BASE_VERSION_TAG - 1)
PyType_GenericAlloc, /* tp_alloc */
PyType_GenericNew, /* tp_new */
PyObject_Free, /* tp_free */
+ .tp_version_tag = _Py_TYPE_VERSION_BYTEARRAY,
};
/*********************** Bytearray Iterator ****************************/
bytes_alloc, /* tp_alloc */
bytes_new, /* tp_new */
PyObject_Free, /* tp_free */
+ .tp_version_tag = _Py_TYPE_VERSION_BYTES,
};
void
PyType_GenericAlloc, /* tp_alloc */
actual_complex_new, /* tp_new */
PyObject_Free, /* tp_free */
+ .tp_version_tag = _Py_TYPE_VERSION_COMPLEX,
};
dict_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
.tp_vectorcall = dict_vectorcall,
+ .tp_version_tag = _Py_TYPE_VERSION_DICT,
};
/* For backward compatibility with old dictionary interface */
0, /* tp_alloc */
float_new, /* tp_new */
.tp_vectorcall = (vectorcallfunc)float_vectorcall,
+ .tp_version_tag = _Py_TYPE_VERSION_FLOAT,
};
static void
PyType_GenericNew, /* tp_new */
PyObject_GC_Del, /* tp_free */
.tp_vectorcall = list_vectorcall,
+ .tp_version_tag = _Py_TYPE_VERSION_LIST,
};
/*********************** List Iterator **************************/
long_new, /* tp_new */
PyObject_Free, /* tp_free */
.tp_vectorcall = long_vectorcall,
+ .tp_version_tag = _Py_TYPE_VERSION_INT,
};
static PyTypeObject Int_InfoType;
set_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
.tp_vectorcall = set_vectorcall,
+ .tp_version_tag = _Py_TYPE_VERSION_SET,
};
/* frozenset object ********************************************************/
frozenset_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
.tp_vectorcall = frozenset_vectorcall,
+ .tp_version_tag = _Py_TYPE_VERSION_FROZEN_SET,
};
tuple_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
.tp_vectorcall = tuple_vectorcall,
+ .tp_version_tag = _Py_TYPE_VERSION_TUPLE,
};
/* The following function breaks the notion that tuples are immutable:
self->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE;
assert(NEXT_GLOBAL_VERSION_TAG <= _Py_MAX_GLOBAL_TYPE_VERSION_TAG);
- _PyType_SetVersion(self, NEXT_GLOBAL_VERSION_TAG++);
+ if (self->tp_version_tag == 0) {
+ _PyType_SetVersion(self, NEXT_GLOBAL_VERSION_TAG++);
+ }
}
else {
assert(!initial);