[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51139] trunk/blender/source/blender: add type checking for more error prone macros.
Campbell Barton
ideasman42 at gmail.com
Sun Oct 7 09:27:09 CEST 2012
Revision: 51139
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51139
Author: campbellbarton
Date: 2012-10-07 07:27:09 +0000 (Sun, 07 Oct 2012)
Log Message:
-----------
add type checking for more error prone macros.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_armature.h
trunk/blender/source/blender/blenkernel/BKE_sequencer.h
trunk/blender/source/blender/blenlib/BLI_utildefines.h
trunk/blender/source/blender/editors/include/ED_anim_api.h
trunk/blender/source/blender/editors/include/ED_armature.h
Modified: trunk/blender/source/blender/blenkernel/BKE_armature.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_armature.h 2012-10-07 06:27:31 UTC (rev 51138)
+++ trunk/blender/source/blender/blenkernel/BKE_armature.h 2012-10-07 07:27:09 UTC (rev 51139)
@@ -131,9 +131,15 @@
Mat4 *b_bone_spline_setup(struct bPoseChannel *pchan, int rest);
/* like EBONE_VISIBLE */
-#define PBONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P))
-#define PBONE_SELECTABLE(arm, bone) (PBONE_VISIBLE(arm, bone) && !((bone)->flag & BONE_UNSELECTABLE))
+#define PBONE_VISIBLE(arm, bone) ( \
+ CHECK_TYPE_INLINE(arm, bArmature), \
+ CHECK_TYPE_INLINE(bone, Bone), \
+ (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P)) \
+ )
+#define PBONE_SELECTABLE(arm, bone) \
+ (PBONE_VISIBLE(arm, bone) && !((bone)->flag & BONE_UNSELECTABLE))
+
#ifdef __cplusplus
}
#endif
Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2012-10-07 06:27:31 UTC (rev 51138)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2012-10-07 07:27:09 UTC (rev 51139)
@@ -73,15 +73,17 @@
SeqIterator iter; \
for (BKE_sequence_iterator_begin(ed, &iter, 1); \
iter.valid; \
- BKE_sequence_iterator_next(&iter)) { \
+ BKE_sequence_iterator_next(&iter)) \
+ { \
_seq = iter.seq;
-
+
#define SEQ_BEGIN(ed, _seq) \
{ \
SeqIterator iter; \
for (BKE_sequence_iterator_begin(ed, &iter, 0); \
iter.valid; \
- BKE_sequence_iterator_next(&iter)) { \
+ BKE_sequence_iterator_next(&iter)) \
+ { \
_seq = iter.seq;
#define SEQ_END \
Modified: trunk/blender/source/blender/blenlib/BLI_utildefines.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_utildefines.h 2012-10-07 06:27:31 UTC (rev 51138)
+++ trunk/blender/source/blender/blenlib/BLI_utildefines.h 2012-10-07 07:27:09 UTC (rev 51139)
@@ -128,6 +128,10 @@
#endif
#endif
+/* can be used in simple macros */
+#define CHECK_TYPE_INLINE(val, type) \
+ ((void)(((type *)0) == (val)))
+
#ifndef SWAP
# define SWAP(type, a, b) { \
type sw_ap; \
Modified: trunk/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_anim_api.h 2012-10-07 06:27:31 UTC (rev 51138)
+++ trunk/blender/source/blender/editors/include/ED_anim_api.h 2012-10-07 07:27:09 UTC (rev 51139)
@@ -232,28 +232,28 @@
/* Dopesheet only */
/* 'Scene' channels */
-#define SEL_SCEC(sce) ((sce->flag & SCE_DS_SELECTED))
-#define EXPANDED_SCEC(sce) ((sce->flag & SCE_DS_COLLAPSED) == 0)
+#define SEL_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene), ((sce->flag & SCE_DS_SELECTED)))
+#define EXPANDED_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene), ((sce->flag & SCE_DS_COLLAPSED) == 0))
/* 'Sub-Scene' channels (flags stored in Data block) */
-#define FILTER_WOR_SCED(wo) ((wo->flag & WO_DS_EXPAND))
+#define FILTER_WOR_SCED(wo) (CHECK_TYPE_INLINE(wo, World), (wo->flag & WO_DS_EXPAND))
/* 'Object' channels */
-#define SEL_OBJC(base) ((base->flag & SELECT))
-#define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED) == 0)
+#define SEL_OBJC(base) (CHECK_TYPE_INLINE(base, Base), ((base->flag & SELECT)))
+#define EXPANDED_OBJC(ob) (CHECK_TYPE_INLINE(ob, Object), ((ob->nlaflag & OB_ADS_COLLAPSED) == 0))
/* 'Sub-object' channels (flags stored in Data block) */
-#define FILTER_SKE_OBJD(key) ((key->flag & KEY_DS_EXPAND))
-#define FILTER_MAT_OBJD(ma) ((ma->flag & MA_DS_EXPAND))
-#define FILTER_LAM_OBJD(la) ((la->flag & LA_DS_EXPAND))
-#define FILTER_CAM_OBJD(ca) ((ca->flag & CAM_DS_EXPAND))
-#define FILTER_CUR_OBJD(cu) ((cu->flag & CU_DS_EXPAND))
-#define FILTER_PART_OBJD(part) ((part->flag & PART_DS_EXPAND))
-#define FILTER_MBALL_OBJD(mb) ((mb->flag2 & MB_DS_EXPAND))
-#define FILTER_ARM_OBJD(arm) ((arm->flag & ARM_DS_EXPAND))
-#define FILTER_MESH_OBJD(me) ((me->flag & ME_DS_EXPAND))
-#define FILTER_LATTICE_OBJD(lt) ((lt->flag & LT_DS_EXPAND))
-#define FILTER_SPK_OBJD(spk) ((spk->flag & SPK_DS_EXPAND))
+#define FILTER_SKE_OBJD(key) (CHECK_TYPE_INLINE(key, Key), ((key->flag & KEY_DS_EXPAND)))
+#define FILTER_MAT_OBJD(ma) (CHECK_TYPE_INLINE(ma, Material), ((ma->flag & MA_DS_EXPAND)))
+#define FILTER_LAM_OBJD(la) (CHECK_TYPE_INLINE(la, Lamp), ((la->flag & LA_DS_EXPAND)))
+#define FILTER_CAM_OBJD(ca) (CHECK_TYPE_INLINE(ca, Camera), ((ca->flag & CAM_DS_EXPAND)))
+#define FILTER_CUR_OBJD(cu) (CHECK_TYPE_INLINE(cu, Curve), ((cu->flag & CU_DS_EXPAND)))
+#define FILTER_PART_OBJD(part) (CHECK_TYPE_INLINE(part, ParticleSettings), ((part->flag & PART_DS_EXPAND)))
+#define FILTER_MBALL_OBJD(mb) (CHECK_TYPE_INLINE(mb, MetaBall), ((mb->flag2 & MB_DS_EXPAND)))
+#define FILTER_ARM_OBJD(arm) (CHECK_TYPE_INLINE(arm, bArmature), ((arm->flag & ARM_DS_EXPAND)))
+#define FILTER_MESH_OBJD(me) (CHECK_TYPE_INLINE(me, Mesh), ((me->flag & ME_DS_EXPAND)))
+#define FILTER_LATTICE_OBJD(lt) (CHECK_TYPE_INLINE(lt, Lattice), ((lt->flag & LT_DS_EXPAND)))
+#define FILTER_SPK_OBJD(spk) (CHECK_TYPE_INLINE(spk, Speaker), ((spk->flag & SPK_DS_EXPAND)))
/* Variable use expanders */
-#define FILTER_NTREE_DATA(ntree) ((ntree->flag & NTREE_DS_EXPAND))
-#define FILTER_TEX_DATA(tex) ((tex->flag & TEX_DS_EXPAND))
+#define FILTER_NTREE_DATA(ntree) (CHECK_TYPE_INLINE(ntree, bNodeTree), ((ntree->flag & NTREE_DS_EXPAND)))
+#define FILTER_TEX_DATA(tex) (CHECK_TYPE_INLINE(tex, Tex), ((tex->flag & TEX_DS_EXPAND)))
/* 'Sub-object/Action' channels (flags stored in Action) */
#define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED))
Modified: trunk/blender/source/blender/editors/include/ED_armature.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_armature.h 2012-10-07 06:27:31 UTC (rev 51138)
+++ trunk/blender/source/blender/editors/include/ED_armature.h 2012-10-07 07:27:09 UTC (rev 51139)
@@ -93,10 +93,19 @@
#define BONESEL_NOSEL (1 << 31) /* Indicates a negative number */
/* useful macros */
-#define EBONE_VISIBLE(arm, ebone) (((arm)->layer & (ebone)->layer) && !((ebone)->flag & BONE_HIDDEN_A))
+#define EBONE_VISIBLE(arm, ebone) ( \
+ CHECK_TYPE_INLINE(arm, bArmature), \
+ CHECK_TYPE_INLINE(ebone, EditBone), \
+ (((arm)->layer & (ebone)->layer) && !((ebone)->flag & BONE_HIDDEN_A)) \
+ )
+
#define EBONE_SELECTABLE(arm, ebone) (EBONE_VISIBLE(arm, ebone) && !(ebone->flag & BONE_UNSELECTABLE))
-#define EBONE_EDITABLE(ebone) (((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & BONE_EDITMODE_LOCKED))
+#define EBONE_EDITABLE(ebone) ( \
+ CHECK_TYPE_INLINE(ebone, EditBone), \
+ (((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & BONE_EDITMODE_LOCKED)) \
+ )
+
/* used in bone_select_hierachy() */
#define BONE_SELECT_PARENT 0
#define BONE_SELECT_CHILD 1
More information about the Bf-blender-cvs
mailing list