[Bf-blender-cvs] [33b265c4fb5] blender2.8: PyAPI: use PyC_Long_As... for gawain

Campbell Barton noreply at git.blender.org
Sun Aug 20 07:55:44 CEST 2017


Commit: 33b265c4fb532523b8707d99799bf36b25b7b1e3
Author: Campbell Barton
Date:   Sun Aug 20 15:58:37 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB33b265c4fb532523b8707d99799bf36b25b7b1e3

PyAPI: use PyC_Long_As... for gawain

Avoids inline overflow checks.

===================================================================

M	source/blender/python/gawain/gwn_py_types.c

===================================================================

diff --git a/source/blender/python/gawain/gwn_py_types.c b/source/blender/python/gawain/gwn_py_types.c
index 32e14371076..602c615738f 100644
--- a/source/blender/python/gawain/gwn_py_types.c
+++ b/source/blender/python/gawain/gwn_py_types.c
@@ -180,28 +180,15 @@ success:
 /** \name Utility Functions
  * \{ */
 
-#ifdef __GNUC__
-#  define WARN_TYPE_LIMIT_PUSH \
-	_Pragma("warning(push)") _Pragma("GCC diagnostic ignored \"-Wtype-limits\"") ((void)0)
-#  define WARN_TYPE_LIMIT_POP \
-	_Pragma("warning(pop)") ((void)0)
-#else
-#  define WARN_TYPE_LIMIT_PUSH ((void)0)
-#  define WARN_TYPE_LIMIT_POP  ((void)0)
-#endif
-
-/* Use for both tuple and single item, TODO: GWN_COMP_I10 */
-static const char *fill_format_elem_range_error = "Value out of range";
-
 #define PY_AS_NATIVE_SWITCH(attr) \
 	switch (attr->comp_type) { \
-		case GWN_COMP_I8:  { PY_AS_NATIVE(int8_t,   INT8_MIN,  INT8_MAX,   int,  PyLong_AsLong); break; } \
-		case GWN_COMP_U8:  { PY_AS_NATIVE(uint8_t,  0,         UINT8_MAX,  uint, PyLong_AsUnsignedLong); break; } \
-		case GWN_COMP_I16: { PY_AS_NATIVE(int16_t,  INT16_MIN, INT16_MAX,  int,  PyLong_AsLong); break; } \
-		case GWN_COMP_U16: { PY_AS_NATIVE(uint16_t, 0,         UINT16_MAX, uint, PyLong_AsUnsignedLong); break; } \
-		case GWN_COMP_I32: { PY_AS_NATIVE(int32_t,  INT32_MIN, INT32_MAX,  int,  PyLong_AsLong); break; } \
-		case GWN_COMP_U32: { PY_AS_NATIVE(uint32_t, 0,         UINT32_MAX, uint, PyLong_AsUnsignedLong); break; } \
-		case GWN_COMP_F32: { PY_AS_NATIVE(float, 0, 0, float, PyFloat_AsDouble); break; } \
+		case GWN_COMP_I8:  { PY_AS_NATIVE(int8_t,   PyC_Long_AsI8); break; } \
+		case GWN_COMP_U8:  { PY_AS_NATIVE(uint8_t,  PyC_Long_AsU8); break; } \
+		case GWN_COMP_I16: { PY_AS_NATIVE(int16_t,  PyC_Long_AsI16); break; } \
+		case GWN_COMP_U16: { PY_AS_NATIVE(uint16_t, PyC_Long_AsU16); break; } \
+		case GWN_COMP_I32: { PY_AS_NATIVE(int32_t,  PyC_Long_AsI32); break; } \
+		case GWN_COMP_U32: { PY_AS_NATIVE(uint32_t, PyC_Long_AsU32); break; } \
+		case GWN_COMP_F32: { PY_AS_NATIVE(float, PyFloat_AsDouble); break; } \
 		default: \
 			BLI_assert(0); \
 	} ((void)0)
@@ -209,16 +196,10 @@ static const char *fill_format_elem_range_error = "Value out of range";
 /* No error checking, callers must run PyErr_Occurred */
 static void fill_format_elem(void *data_dst_void, PyObject *py_src, const Gwn_VertAttr *attr)
 {
-#define PY_AS_NATIVE(ty_dst, ty_dst_min, ty_dst_max, ty_src, py_as_native) \
+#define PY_AS_NATIVE(ty_dst, py_as_native) \
 { \
 	ty_dst *data_dst = data_dst_void; \
-	ty_src v = py_as_native(py_src); \
-	WARN_TYPE_LIMIT_PUSH; \
-	if ((ty_dst_min != ty_dst_max) && (v < ty_dst_min || v > ty_dst_max)) { \
-		PyErr_SetString(PyExc_OverflowError, fill_format_elem_range_error); \
-	} \
-	WARN_TYPE_LIMIT_POP; \
-	*data_dst = v; \
+	*data_dst = py_as_native(py_src); \
 } ((void)0)
 
 	PY_AS_NATIVE_SWITCH(attr);
@@ -234,16 +215,10 @@ static void fill_format_tuple(void *data_dst_void, PyObject *py_src, const Gwn_V
 /**
  * Args are constants, so range checks will be optimized out if they're nop's.
  */
-#define PY_AS_NATIVE(ty_dst, ty_dst_min, ty_dst_max, ty_src, py_as_native) \
+#define PY_AS_NATIVE(ty_dst, py_as_native) \
 	ty_dst *data_dst = data_dst_void; \
 	for (uint i = 0; i < len; i++) { \
-		ty_src v = py_as_native(PyTuple_GET_ITEM(py_src, i)); \
-		WARN_TYPE_LIMIT_PUSH; \
-		if ((ty_dst_min != ty_dst_max) && (v < ty_dst_min || v > ty_dst_max)) { \
-			PyErr_SetString(PyExc_OverflowError, fill_format_elem_range_error); \
-		} \
-		WARN_TYPE_LIMIT_POP; \
-		data_dst[i] = v; \
+		data_dst[i] = py_as_native(PyTuple_GET_ITEM(py_src, i)); \
 	} ((void)0)
 
 	PY_AS_NATIVE_SWITCH(attr);



More information about the Bf-blender-cvs mailing list