diff options
Diffstat (limited to 'source/blender/python/mathutils')
-rw-r--r-- | source/blender/python/mathutils/mathutils.c | 56 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils.h | 14 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_Color.c | 23 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_Euler.c | 13 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_Matrix.c | 13 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_Quaternion.c | 12 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_Vector.c | 13 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_bvhtree.c | 10 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_geometry.c | 11 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_interpolate.c | 2 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_kdtree.c | 2 | ||||
-rw-r--r-- | source/blender/python/mathutils/mathutils_noise.c | 2 |
12 files changed, 118 insertions, 53 deletions
diff --git a/source/blender/python/mathutils/mathutils.c b/source/blender/python/mathutils/mathutils.c index 1aa2cec861c..c4c0659100b 100644 --- a/source/blender/python/mathutils/mathutils.c +++ b/source/blender/python/mathutils/mathutils.c @@ -47,8 +47,7 @@ static int mathutils_array_parse_fast(float *array, i = size; do { i--; - if (((array[i] = PyFloat_AsDouble((item = value_fast_items[i]))) == -1.0f) && - PyErr_Occurred()) { + if (((array[i] = PyFloat_AsDouble(item = value_fast_items[i])) == -1.0f) && PyErr_Occurred()) { PyErr_Format(PyExc_TypeError, "%.200s: sequence index %d expected a number, " "found '%.200s' type, ", @@ -317,7 +316,7 @@ int mathutils_int_array_parse(int *array, int array_dim, PyObject *value, const i = size; while (i > 0) { i--; - if (((array[i] = PyC_Long_AsI32((item = value_fast_items[i]))) == -1) && PyErr_Occurred()) { + if (((array[i] = PyC_Long_AsI32(item = value_fast_items[i])) == -1) && PyErr_Occurred()) { PyErr_Format(PyExc_TypeError, "%.200s: sequence index %d expected an int", error_prefix, i); size = -1; break; @@ -698,6 +697,18 @@ int BaseMathObject_clear(BaseMathObject *self) return 0; } +/** Only to validate assumptions when debugging. */ +#ifndef NDEBUG +static bool BaseMathObject_is_tracked(BaseMathObject *self) +{ + PyObject *cb_user = self->cb_user; + self->cb_user = (void *)(uintptr_t)-1; + bool is_tracked = PyObject_GC_IsTracked((PyObject *)self); + self->cb_user = cb_user; + return is_tracked; +} +#endif /* NDEBUG */ + void BaseMathObject_dealloc(BaseMathObject *self) { /* only free non wrapped */ @@ -706,11 +717,46 @@ void BaseMathObject_dealloc(BaseMathObject *self) } if (self->cb_user) { + BLI_assert(BaseMathObject_is_tracked(self) == true); PyObject_GC_UnTrack(self); BaseMathObject_clear(self); } + else if (!BaseMathObject_CheckExact(self)) { + /* Sub-classed types get an extra track (in Pythons internal `subtype_dealloc` function). */ + BLI_assert(BaseMathObject_is_tracked(self) == true); + PyObject_GC_UnTrack(self); + BLI_assert(BaseMathObject_is_tracked(self) == false); + } + + Py_TYPE(self)->tp_free(self); // PyObject_DEL(self); /* breaks sub-types. */ +} + +int BaseMathObject_is_gc(BaseMathObject *self) +{ + return self->cb_user != NULL; +} + +PyObject *_BaseMathObject_new_impl(PyTypeObject *root_type, PyTypeObject *base_type) +{ + PyObject *obj; + if (ELEM(base_type, NULL, root_type)) { + obj = _PyObject_GC_New(root_type); + if (obj) { + BLI_assert(BaseMathObject_is_tracked((BaseMathObject *)obj) == false); + } + } + else { + /* Calls Generic allocation function which always tracks + * (because `root_type` is flagged for GC). */ + obj = base_type->tp_alloc(base_type, 0); + if (obj) { + BLI_assert(BaseMathObject_is_tracked((BaseMathObject *)obj) == true); + PyObject_GC_UnTrack(obj); + BLI_assert(BaseMathObject_is_tracked((BaseMathObject *)obj) == false); + } + } - Py_TYPE(self)->tp_free(self); // PyObject_DEL(self); /* breaks subtypes. */ + return obj; } /*----------------------------MODULE INIT-------------------------*/ @@ -724,7 +770,7 @@ static struct PyModuleDef M_Mathutils_module_def = { M_Mathutils_doc, /* m_doc */ 0, /* m_size */ M_Mathutils_methods, /* m_methods */ - NULL, /* m_reload */ + NULL, /* m_slots */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ diff --git a/source/blender/python/mathutils/mathutils.h b/source/blender/python/mathutils/mathutils.h index 84386e99d18..f4beaf92ad4 100644 --- a/source/blender/python/mathutils/mathutils.h +++ b/source/blender/python/mathutils/mathutils.h @@ -6,7 +6,7 @@ * \ingroup pymathutils */ -/* Can cast different mathutils types to this, use for generic funcs */ +/* Can cast different mathutils types to this, use for generic functions. */ #include "BLI_compiler_attrs.h" @@ -17,11 +17,12 @@ extern char BaseMathObject_is_frozen_doc[]; extern char BaseMathObject_is_valid_doc[]; extern char BaseMathObject_owner_doc[]; +PyObject *_BaseMathObject_new_impl(PyTypeObject *root_type, PyTypeObject *base_type); + #define BASE_MATH_NEW(struct_name, root_type, base_type) \ - ((struct_name *)((base_type ? (base_type)->tp_alloc(base_type, 0) : \ - _PyObject_GC_New(&(root_type))))) + ((struct_name *)_BaseMathObject_new_impl(&root_type, base_type)) -/** BaseMathObject.flag */ +/** #BaseMathObject.flag */ enum { /** * Do not own the memory used in this vector, @@ -43,9 +44,9 @@ enum { float *_data; \ /** If this vector references another object, otherwise NULL, *Note* this owns its reference */ \ PyObject *cb_user; \ - /** Which user funcs do we adhere to, RNA, etc */ \ + /** Which user functions do we adhere to, RNA, etc */ \ unsigned char cb_type; \ - /** Subtype: location, rotation... \ + /** Sub-type: location, rotation... \ * to avoid defining many new functions for every attribute of the same type */ \ unsigned char cb_subtype; \ /** Wrapped data type. */ \ @@ -76,6 +77,7 @@ PyObject *BaseMathObject_freeze(BaseMathObject *self); int BaseMathObject_traverse(BaseMathObject *self, visitproc visit, void *arg); int BaseMathObject_clear(BaseMathObject *self); void BaseMathObject_dealloc(BaseMathObject *self); +int BaseMathObject_is_gc(BaseMathObject *self); PyMODINIT_FUNC PyInit_mathutils(void); diff --git a/source/blender/python/mathutils/mathutils_Color.c b/source/blender/python/mathutils/mathutils_Color.c index 88e8d880360..5218ea68f7b 100644 --- a/source/blender/python/mathutils/mathutils_Color.c +++ b/source/blender/python/mathutils/mathutils_Color.c @@ -14,7 +14,9 @@ #include "../generic/py_capi_utils.h" #include "../generic/python_utildefines.h" -#include "IMB_colormanagement.h" +#ifndef MATH_STANDALONE +# include "IMB_colormanagement.h" +#endif #ifndef MATH_STANDALONE # include "BLI_dynstr.h" @@ -71,9 +73,8 @@ static PyObject *Color_new(PyTypeObject *type, PyObject *args, PyObject *kwds) case 0: break; case 1: - if ((mathutils_array_parse( - col, COLOR_SIZE, COLOR_SIZE, PyTuple_GET_ITEM(args, 0), "mathutils.Color()")) == - -1) { + if (mathutils_array_parse( + col, COLOR_SIZE, COLOR_SIZE, PyTuple_GET_ITEM(args, 0), "mathutils.Color()") == -1) { return NULL; } break; @@ -92,6 +93,8 @@ static PyObject *Color_new(PyTypeObject *type, PyObject *args, PyObject *kwds) /** \name Color Methods: Color Space Conversion * \{ */ +#ifndef MATH_STANDALONE + PyDoc_STRVAR(Color_from_scene_linear_to_srgb_doc, ".. function:: from_scene_linear_to_srgb()\n" "\n" @@ -204,6 +207,8 @@ static PyObject *Color_from_rec709_linear_to_scene_linear(ColorObject *self) return Color_CreatePyObject(col, Py_TYPE(self)); } +#endif /* MATH_STANDALONE */ + /** \} */ /* -------------------------------------------------------------------- */ @@ -1050,7 +1055,8 @@ static struct PyMethodDef Color_methods[] = { /* base-math methods */ {"freeze", (PyCFunction)BaseMathObject_freeze, METH_NOARGS, BaseMathObject_freeze_doc}, - /* Color-space methods. */ +/* Color-space methods. */ +#ifndef MATH_STANDALONE {"from_scene_linear_to_srgb", (PyCFunction)Color_from_scene_linear_to_srgb, METH_NOARGS, @@ -1083,6 +1089,8 @@ static struct PyMethodDef Color_methods[] = { (PyCFunction)Color_from_rec709_linear_to_scene_linear, METH_NOARGS, Color_from_rec709_linear_to_scene_linear_doc}, +#endif /* MATH_STANDALONE */ + {NULL, NULL, 0, NULL}, }; @@ -1102,7 +1110,7 @@ PyDoc_STRVAR( " the OpenColorIO configuration. The notable exception is user interface theming colors, " " which are in sRGB color space.\n" "\n" - " :param rgb: (r, g, b) color values\n" + " :arg rgb: (r, g, b) color values\n" " :type rgb: 3d vector\n"); PyTypeObject color_Type = { PyVarObject_HEAD_INIT(NULL, 0) "Color", /* tp_name */ @@ -1147,7 +1155,7 @@ PyTypeObject color_Type = { NULL, /* tp_alloc */ Color_new, /* tp_new */ NULL, /* tp_free */ - NULL, /* tp_is_gc */ + (inquiry)BaseMathObject_is_gc, /* tp_is_gc */ NULL, /* tp_bases */ NULL, /* tp_mro */ NULL, /* tp_cache */ @@ -1226,6 +1234,7 @@ PyObject *Color_CreatePyObject_cb(PyObject *cb_user, uchar cb_type, uchar cb_sub self->cb_user = cb_user; self->cb_type = cb_type; self->cb_subtype = cb_subtype; + BLI_assert(!PyObject_GC_IsTracked((PyObject *)self)); PyObject_GC_Track(self); } diff --git a/source/blender/python/mathutils/mathutils_Euler.c b/source/blender/python/mathutils/mathutils_Euler.c index f49868dfba7..ddc0f115742 100644 --- a/source/blender/python/mathutils/mathutils_Euler.c +++ b/source/blender/python/mathutils/mathutils_Euler.c @@ -32,10 +32,10 @@ static const char *euler_order_str(EulerObject *self) short euler_order_from_string(const char *str, const char *error_prefix) { - if ((str[0] && str[1] && str[2] && str[3] == '\0')) { + if (str[0] && str[1] && str[2] && str[3] == '\0') { #ifdef __LITTLE_ENDIAN__ -# define MAKE_ID3(a, b, c) (((a)) | ((b) << 8) | ((c) << 16)) +# define MAKE_ID3(a, b, c) ((a) | ((b) << 8) | ((c) << 16)) #else # define MAKE_ID3(a, b, c) (((a) << 24) | ((b) << 16) | ((c) << 8)) #endif @@ -215,7 +215,7 @@ static PyObject *Euler_rotate_axis(EulerObject *self, PyObject *args) return NULL; } - if (!(ELEM(axis, 'X', 'Y', 'Z'))) { + if (!ELEM(axis, 'X', 'Y', 'Z')) { PyErr_SetString(PyExc_ValueError, "Euler.rotate_axis(): " "expected axis to be 'X', 'Y' or 'Z'"); @@ -774,9 +774,9 @@ PyDoc_STRVAR( "\n" " .. seealso:: `Euler angles <https://en.wikipedia.org/wiki/Euler_angles>`__ on Wikipedia.\n" "\n" - " :param angles: Three angles, in radians.\n" + " :arg angles: Three angles, in radians.\n" " :type angles: 3d vector\n" - " :param order: Optional order of the angles, a permutation of ``XYZ``.\n" + " :arg order: Optional order of the angles, a permutation of ``XYZ``.\n" " :type order: str\n"); PyTypeObject euler_Type = { PyVarObject_HEAD_INIT(NULL, 0) "Euler", /* tp_name */ @@ -821,7 +821,7 @@ PyTypeObject euler_Type = { NULL, /* tp_alloc */ Euler_new, /* tp_new */ NULL, /* tp_free */ - NULL, /* tp_is_gc */ + (inquiry)BaseMathObject_is_gc, /* tp_is_gc */ NULL, /* tp_bases */ NULL, /* tp_mro */ NULL, /* tp_cache */ @@ -904,6 +904,7 @@ PyObject *Euler_CreatePyObject_cb(PyObject *cb_user, self->cb_user = cb_user; self->cb_type = cb_type; self->cb_subtype = cb_subtype; + BLI_assert(!PyObject_GC_IsTracked((PyObject *)self)); PyObject_GC_Track(self); } diff --git a/source/blender/python/mathutils/mathutils_Matrix.c b/source/blender/python/mathutils/mathutils_Matrix.c index 1e85ece124d..a44f42bc337 100644 --- a/source/blender/python/mathutils/mathutils_Matrix.c +++ b/source/blender/python/mathutils/mathutils_Matrix.c @@ -725,7 +725,7 @@ static PyObject *C_Matrix_Rotation(PyObject *cls, PyObject *args) "cannot create a 2x2 rotation matrix around arbitrary axis"); return NULL; } - if ((ELEM(matSize, 3, 4)) && (axis == NULL) && (vec == NULL)) { + if (ELEM(matSize, 3, 4) && (axis == NULL) && (vec == NULL)) { PyErr_SetString(PyExc_ValueError, "Matrix.Rotation(): " "axis of rotation for 3d and 4d matrices is required"); @@ -1244,12 +1244,11 @@ static PyObject *Matrix_to_quaternion(MatrixObject *self) return NULL; } if (self->row_num == 3) { - mat3_to_quat(quat, (float(*)[3])self->matrix); + mat3_to_quat(quat, (const float(*)[3])self->matrix); } else { mat4_to_quat(quat, (const float(*)[4])self->matrix); } - return Quaternion_CreatePyObject(quat, NULL); } @@ -1888,7 +1887,7 @@ static PyObject *Matrix_decompose(MatrixObject *self) } mat4_to_loc_rot_size(loc, rot, size, (const float(*)[4])self->matrix); - mat3_to_quat(quat, rot); + mat3_normalized_to_quat_fast(quat, rot); ret = PyTuple_New(3); PyTuple_SET_ITEMS(ret, @@ -3322,8 +3321,7 @@ PyDoc_STRVAR( " This object gives access to Matrices in Blender, supporting square and rectangular\n" " matrices from 2x2 up to 4x4.\n" "\n" - " :param rows: Sequence of rows.\n" - " When omitted, a 4x4 identity matrix is constructed.\n" + " :arg rows: Sequence of rows. When omitted, a 4x4 identity matrix is constructed.\n" " :type rows: 2d number sequence\n"); PyTypeObject matrix_Type = { PyVarObject_HEAD_INIT(NULL, 0) "Matrix", /*tp_name*/ @@ -3368,7 +3366,7 @@ PyTypeObject matrix_Type = { NULL, /*tp_alloc*/ Matrix_new, /*tp_new*/ NULL, /*tp_free*/ - NULL, /*tp_is_gc*/ + (inquiry)BaseMathObject_is_gc, /*tp_is_gc*/ NULL, /*tp_bases*/ NULL, /*tp_mro*/ NULL, /*tp_cache*/ @@ -3476,6 +3474,7 @@ PyObject *Matrix_CreatePyObject_cb( self->cb_user = cb_user; self->cb_type = cb_type; self->cb_subtype = cb_subtype; + BLI_assert(!PyObject_GC_IsTracked((PyObject *)self)); PyObject_GC_Track(self); } return (PyObject *)self; diff --git a/source/blender/python/mathutils/mathutils_Quaternion.c b/source/blender/python/mathutils/mathutils_Quaternion.c index 6994a313237..976c1da1916 100644 --- a/source/blender/python/mathutils/mathutils_Quaternion.c +++ b/source/blender/python/mathutils/mathutils_Quaternion.c @@ -543,7 +543,6 @@ static PyObject *Quaternion_rotate(QuaternionObject *self, PyObject *value) length = normalize_qt_qt(tquat, self->quat); quat_to_mat3(self_rmat, tquat); mul_m3_m3m3(rmat, other_rmat, self_rmat); - mat3_to_quat(self->quat, rmat); mul_qt_fl(self->quat, length); /* maintain length after rotating */ @@ -831,7 +830,7 @@ static PyObject *Quaternion_richcmpr(PyObject *a, PyObject *b, int op) return NULL; } - ok = (EXPP_VectorsAreEqual(quatA->quat, quatB->quat, QUAT_SIZE, 1)) ? 0 : -1; + ok = EXPP_VectorsAreEqual(quatA->quat, quatB->quat, QUAT_SIZE, 1) ? 0 : -1; } switch (op) { @@ -1178,7 +1177,7 @@ static PyObject *Quaternion_mul(PyObject *q1, PyObject *q2) } } else if (quat1) { /* QUAT * FLOAT */ - if ((((scalar = PyFloat_AsDouble(q2)) == -1.0f && PyErr_Occurred()) == 0)) { + if (((scalar = PyFloat_AsDouble(q2)) == -1.0f && PyErr_Occurred()) == 0) { return quat_mul_float(quat1, scalar); } } @@ -1663,9 +1662,9 @@ PyDoc_STRVAR(quaternion_doc, "\n" " This object gives access to Quaternions in Blender.\n" "\n" - " :param seq: size 3 or 4\n" + " :arg seq: size 3 or 4\n" " :type seq: :class:`Vector`\n" - " :param angle: rotation angle, in radians\n" + " :arg angle: rotation angle, in radians\n" " :type angle: float\n" "\n" " The constructor takes arguments in various forms:\n" @@ -1725,7 +1724,7 @@ PyTypeObject quaternion_Type = { NULL, /* tp_alloc */ Quaternion_new, /* tp_new */ NULL, /* tp_free */ - NULL, /* tp_is_gc */ + (inquiry)BaseMathObject_is_gc, /* tp_is_gc */ NULL, /* tp_bases */ NULL, /* tp_mro */ NULL, /* tp_cache */ @@ -1801,6 +1800,7 @@ PyObject *Quaternion_CreatePyObject_cb(PyObject *cb_user, uchar cb_type, uchar c self->cb_user = cb_user; self->cb_type = cb_type; self->cb_subtype = cb_subtype; + BLI_assert(!PyObject_GC_IsTracked((PyObject *)self)); PyObject_GC_Track(self); } diff --git a/source/blender/python/mathutils/mathutils_Vector.c b/source/blender/python/mathutils/mathutils_Vector.c index 0c9cbd6ccfa..290be771c90 100644 --- a/source/blender/python/mathutils/mathutils_Vector.c +++ b/source/blender/python/mathutils/mathutils_Vector.c @@ -2680,7 +2680,7 @@ static int Vector_swizzle_set(VectorObject *self, PyObject *value, void *closure size_from = axis_from; } - else if (((void)PyErr_Clear()), /* run but ignore the result */ + else if ((void)PyErr_Clear(), /* run but ignore the result */ (size_from = mathutils_array_parse( vec_assign, 2, 4, value, "mathutils.Vector.**** = swizzle assignment")) == -1) { return -1; @@ -3188,7 +3188,7 @@ PyDoc_STRVAR(vector_doc, "\n" " This object gives access to Vectors in Blender.\n" "\n" - " :param seq: Components of the vector, must be a sequence of at least two\n" + " :arg seq: Components of the vector, must be a sequence of at least two\n" " :type seq: sequence of numbers\n"); PyTypeObject vector_Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -3265,8 +3265,8 @@ PyTypeObject vector_Type = { /* Low-level free-memory routine */ NULL, /* freefunc tp_free; */ /* For PyObject_IS_GC */ - NULL, /* inquiry tp_is_gc; */ - NULL, /* PyObject *tp_bases; */ + (inquiry)BaseMathObject_is_gc, /* inquiry tp_is_gc; */ + NULL, /* PyObject *tp_bases; */ /* method resolution order */ NULL, /* PyObject *tp_mro; */ NULL, /* PyObject *tp_cache; */ @@ -3304,7 +3304,7 @@ PyObject *Vector_CreatePyObject(const float *vec, const int vec_num, PyTypeObjec self->vec = vec_alloc; self->vec_num = vec_num; - /* init callbacks as NULL */ + /* Initialize callbacks as NULL. */ self->cb_user = NULL; self->cb_type = self->cb_subtype = 0; @@ -3339,7 +3339,7 @@ PyObject *Vector_CreatePyObject_wrap(float *vec, const int vec_num, PyTypeObject if (self) { self->vec_num = vec_num; - /* init callbacks as NULL */ + /* Initialize callbacks as NULL. */ self->cb_user = NULL; self->cb_type = self->cb_subtype = 0; @@ -3357,6 +3357,7 @@ PyObject *Vector_CreatePyObject_cb(PyObject *cb_user, int vec_num, uchar cb_type self->cb_user = cb_user; self->cb_type = cb_type; self->cb_subtype = cb_subtype; + BLI_assert(!PyObject_GC_IsTracked((PyObject *)self)); PyObject_GC_Track(self); } diff --git a/source/blender/python/mathutils/mathutils_bvhtree.c b/source/blender/python/mathutils/mathutils_bvhtree.c index ead255a6716..4bdb1adcdde 100644 --- a/source/blender/python/mathutils/mathutils_bvhtree.c +++ b/source/blender/python/mathutils/mathutils_bvhtree.c @@ -1148,12 +1148,12 @@ static PyObject *C_BVHTree_FromObject(PyObject *UNUSED(cls), PyObject *args, PyO coords = MEM_mallocN(sizeof(*coords) * (size_t)coords_len, __func__); tris = MEM_mallocN(sizeof(*tris) * (size_t)tris_len, __func__); - MVert *mv = mesh->mvert; - for (int i = 0; i < mesh->totvert; i++, mv++) { - copy_v3_v3(coords[i], mv->co); + const MVert *verts = BKE_mesh_verts(mesh); + for (int i = 0; i < mesh->totvert; i++) { + copy_v3_v3(coords[i], verts[i].co); } - mloop = mesh->mloop; + mloop = BKE_mesh_loops(mesh); } { @@ -1294,7 +1294,7 @@ static struct PyModuleDef bvhtree_moduledef = { py_bvhtree_doc, /* m_doc */ 0, /* m_size */ NULL, /* m_methods */ - NULL, /* m_reload */ + NULL, /* m_slots */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ diff --git a/source/blender/python/mathutils/mathutils_geometry.c b/source/blender/python/mathutils/mathutils_geometry.c index 1e492574903..52ea2a9ed31 100644 --- a/source/blender/python/mathutils/mathutils_geometry.c +++ b/source/blender/python/mathutils/mathutils_geometry.c @@ -185,6 +185,13 @@ static PyObject *M_Geometry_intersect_line_line(PyObject *UNUSED(self), PyObject return NULL; } + /* Zero 3rd axis of 2D vectors. */ + if (ix_vec_num == 2) { + lines[1][2] = 0.0f; + lines[2][2] = 0.0f; + lines[3][2] = 0.0f; + } + result = isect_line_line_v3(UNPACK4(lines), i1, i2); /* The return-code isn't exposed, * this way we can check know how close the lines are. */ @@ -1465,7 +1472,7 @@ static PyObject *M_Geometry_convex_hull_2d(PyObject *UNUSED(self), PyObject *poi int *index_map; Py_ssize_t len_ret, i; - index_map = MEM_mallocN(sizeof(*index_map) * len * 2, __func__); + index_map = MEM_mallocN(sizeof(*index_map) * len, __func__); /* Non Python function */ len_ret = BLI_convexhull_2d(points, len, index_map); @@ -1790,7 +1797,7 @@ static struct PyModuleDef M_Geometry_module_def = { M_Geometry_doc, /* m_doc */ 0, /* m_size */ M_Geometry_methods, /* m_methods */ - NULL, /* m_reload */ + NULL, /* m_slots */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ diff --git a/source/blender/python/mathutils/mathutils_interpolate.c b/source/blender/python/mathutils/mathutils_interpolate.c index 6523b3f7259..10f42d9b070 100644 --- a/source/blender/python/mathutils/mathutils_interpolate.c +++ b/source/blender/python/mathutils/mathutils_interpolate.c @@ -93,7 +93,7 @@ static struct PyModuleDef M_Interpolate_module_def = { M_Interpolate_doc, /* m_doc */ 0, /* m_size */ M_Interpolate_methods, /* m_methods */ - NULL, /* m_reload */ + NULL, /* m_slots */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ diff --git a/source/blender/python/mathutils/mathutils_kdtree.c b/source/blender/python/mathutils/mathutils_kdtree.c index 66c48697b6b..f5a27c6f90f 100644 --- a/source/blender/python/mathutils/mathutils_kdtree.c +++ b/source/blender/python/mathutils/mathutils_kdtree.c @@ -428,7 +428,7 @@ static struct PyModuleDef kdtree_moduledef = { py_kdtree_doc, /* m_doc */ 0, /* m_size */ NULL, /* m_methods */ - NULL, /* m_reload */ + NULL, /* m_slots */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ diff --git a/source/blender/python/mathutils/mathutils_noise.c b/source/blender/python/mathutils/mathutils_noise.c index e1282e90c48..3a3297f27f7 100644 --- a/source/blender/python/mathutils/mathutils_noise.c +++ b/source/blender/python/mathutils/mathutils_noise.c @@ -1089,7 +1089,7 @@ static struct PyModuleDef M_Noise_module_def = { M_Noise_doc, /* m_doc */ 0, /* m_size */ M_Noise_methods, /* m_methods */ - NULL, /* m_reload */ + NULL, /* m_slots */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ |