Commit: a93cbb70cd6ac32193ca3b656c47f620ef10a4d2
Author: Campbell Barton
Date:   Tue Jan 22 14:26:15 2019 +1100
Branches: master
https://developer.blender.org/rBa93cbb70cd6ac32193ca3b656c47f620ef10a4d2

Fix T60643: BMesh operator enum args fail when unset from Python

Error introduced with bmesh operator enum support: 1e6a5eb087911

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

M       source/blender/bmesh/intern/bmesh_operator_api.h
M       source/blender/bmesh/intern/bmesh_operators.c
M       source/blender/python/bmesh/bmesh_py_ops_call.c

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

diff --git a/source/blender/bmesh/intern/bmesh_operator_api.h 
b/source/blender/bmesh/intern/bmesh_operator_api.h
index e609500ddc3..c4e3ea7a436 100644
--- a/source/blender/bmesh/intern/bmesh_operator_api.h
+++ b/source/blender/bmesh/intern/bmesh_operator_api.h
@@ -228,7 +228,11 @@ typedef struct BMOpSlot {
                float vec[3];
                void **buf;
                GHash *ghash;
-               BMO_FlagSet *enum_flags;
+               struct {
+                       /** Don't clobber (i) when assigning flags, see 
#eBMOpSlotSubType_Int. */
+                       int _i;
+                       BMO_FlagSet *flags;
+               } enum_data;
        } data;
 } BMOpSlot;
 
diff --git a/source/blender/bmesh/intern/bmesh_operators.c 
b/source/blender/bmesh/intern/bmesh_operators.c
index 60de182499b..e4e8039c89f 100644
--- a/source/blender/bmesh/intern/bmesh_operators.c
+++ b/source/blender/bmesh/intern/bmesh_operators.c
@@ -142,7 +142,7 @@ static void bmo_op_slots_init(const BMOSlotType 
*slot_types, BMOpSlot *slot_args
                                break;
                        case BMO_OP_SLOT_INT:
                                if (ELEM(slot->slot_subtype.intg, 
BMO_OP_SLOT_SUBTYPE_INT_ENUM, BMO_OP_SLOT_SUBTYPE_INT_FLAG)) {
-                                       slot->data.enum_flags = 
slot_types[i].enum_flags;
+                                       slot->data.enum_data.flags = 
slot_types[i].enum_flags;
                                }
                        default:
                                break;
diff --git a/source/blender/python/bmesh/bmesh_py_ops_call.c 
b/source/blender/python/bmesh/bmesh_py_ops_call.c
index ac328e852ac..dd90a491192 100644
--- a/source/blender/python/bmesh/bmesh_py_ops_call.c
+++ b/source/blender/python/bmesh/bmesh_py_ops_call.c
@@ -173,7 +173,7 @@ static int bpy_slot_from_py(
                {
                        if (slot->slot_subtype.intg == 
BMO_OP_SLOT_SUBTYPE_INT_ENUM) {
                                int enum_val = -1;
-                               PyC_FlagSet *items = (PyC_FlagSet 
*)slot->data.enum_flags;
+                               PyC_FlagSet *items = (PyC_FlagSet 
*)slot->data.enum_data.flags;
                                const char *enum_str = 
_PyUnicode_AsString(value);
 
                                if (enum_str == NULL) {
@@ -191,7 +191,7 @@ static int bpy_slot_from_py(
                        }
                        else if (slot->slot_subtype.intg == 
BMO_OP_SLOT_SUBTYPE_INT_FLAG) {
                                int flag = 0;
-                               PyC_FlagSet *items = (PyC_FlagSet 
*)slot->data.enum_flags;
+                               PyC_FlagSet *items = (PyC_FlagSet 
*)slot->data.enum_data.flags;
 
                                if (PyC_FlagSet_ToBitfield(items, value, &flag, 
slot_name) == -1) {
                                        return -1;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to