@@ -21,20 +21,28 @@ inline PyObject *make_object_base_type(PyTypeObject *metaclass);
2121// The old Python Thread Local Storage (TLS) API is deprecated in Python 3.7 in favor of the new
2222// Thread Specific Storage (TSS) API.
2323#if PY_VERSION_HEX >= 0x03070000
24- # define PYBIND11_TLS_KEY_INIT (var ) Py_tss_t *var = nullptr
25- # define PYBIND11_TLS_GET_VALUE (key ) PyThread_tss_get((key))
26- # define PYBIND11_TLS_REPLACE_VALUE (key, value ) PyThread_tss_set((key), (tstate))
27- # define PYBIND11_TLS_DELETE_VALUE (key ) PyThread_tss_set((key), nullptr )
24+ # define PYBIND11_TLS_KEY_INIT (var ) Py_tss_t *var = nullptr
25+ # define PYBIND11_TLS_GET_VALUE (key ) PyThread_tss_get((key))
26+ # define PYBIND11_TLS_REPLACE_VALUE (key, value ) PyThread_tss_set((key), (tstate))
27+ # define PYBIND11_TLS_DELETE_VALUE (key ) PyThread_tss_set((key), nullptr )
2828#else
2929 // Usually an int but a long on Cygwin64 with Python 3.x
30- #define PYBIND11_TLS_KEY_INIT (var ) decltype (PyThread_create_key()) var = 0
31- #define PYBIND11_TLS_GET_VALUE (key ) PyThread_get_key_value((key))
32- #if PY_MAJOR_VERSION < 3
33- #define PYBIND11_TLS_REPLACE_VALUE (key, value ) do { PyThread_delete_key_value ((key)); PyThread_set_key_value ((key), (value)); } while (false )
34- #else
35- #define PYBIND11_TLS_REPLACE_VALUE (key, value ) PyThread_set_key_value((key), (value))
36- #endif
37- #define PYBIND11_TLS_DELETE_VALUE (key ) PyThread_set_key_value((key), nullptr )
30+ # define PYBIND11_TLS_KEY_INIT (var ) decltype (PyThread_create_key()) var = 0
31+ # define PYBIND11_TLS_GET_VALUE (key ) PyThread_get_key_value((key))
32+ # if PY_MAJOR_VERSION < 3
33+ # define PYBIND11_TLS_DELETE_VALUE (key ) \
34+ PyThread_delete_key_value (key)
35+ # define PYBIND11_TLS_REPLACE_VALUE (key, value ) \
36+ do { \
37+ PyThread_delete_key_value ((key)); \
38+ PyThread_set_key_value ((key), (value)); \
39+ } while (false )
40+ # else
41+ # define PYBIND11_TLS_DELETE_VALUE (key ) \
42+ PyThread_set_key_value ((key), nullptr)
43+ # define PYBIND11_TLS_REPLACE_VALUE (key, value ) \
44+ PyThread_set_key_value ((key), (value))
45+ # endif
3846#endif
3947
4048// Python loads modules by default with dlopen with the RTLD_LOCAL flag; under libc++ and possibly
@@ -108,7 +116,7 @@ struct internals {
108116struct type_info {
109117 PyTypeObject *type;
110118 const std::type_info *cpptype;
111- size_t type_size, holder_size_in_ptrs;
119+ size_t type_size, type_align, holder_size_in_ptrs;
112120 void *(*operator_new)(size_t );
113121 void (*init_instance)(instance *, const void *);
114122 void (*dealloc)(value_and_holder &v_h);
@@ -130,7 +138,13 @@ struct type_info {
130138};
131139
132140// / Tracks the `internals` and `type_info` ABI version independent of the main library version
133- #define PYBIND11_INTERNALS_VERSION 2
141+ #define PYBIND11_INTERNALS_VERSION 3
142+
143+ #if defined(_DEBUG)
144+ # define PYBIND11_BUILD_TYPE " _debug"
145+ #else
146+ # define PYBIND11_BUILD_TYPE " "
147+ #endif
134148
135149#if defined(WITH_THREAD)
136150# define PYBIND11_INTERNALS_KIND " "
@@ -139,10 +153,10 @@ struct type_info {
139153#endif
140154
141155#define PYBIND11_INTERNALS_ID " __pybind11_internals_v" \
142- PYBIND11_TOSTRING (PYBIND11_INTERNALS_VERSION) PYBIND11_INTERNALS_KIND "__"
156+ PYBIND11_TOSTRING (PYBIND11_INTERNALS_VERSION) PYBIND11_INTERNALS_KIND PYBIND11_BUILD_TYPE "__"
143157
144158#define PYBIND11_MODULE_LOCAL_ID " __pybind11_module_local_v" \
145- PYBIND11_TOSTRING (PYBIND11_INTERNALS_VERSION) PYBIND11_INTERNALS_KIND "__"
159+ PYBIND11_TOSTRING (PYBIND11_INTERNALS_VERSION) PYBIND11_INTERNALS_KIND PYBIND11_BUILD_TYPE "__"
146160
147161// / Each module locally stores a pointer to the `internals` data. The data
148162// / itself is shared among modules with the same `PYBIND11_INTERNALS_ID`.
0 commit comments