diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-08-01 15:59:42 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-08-01 16:03:03 +0400 |
commit | 7f32cf46054ceb924afcfef4ebf7c26822aa524d (patch) | |
tree | acb49bfe2dcf6cac95fbac2e39f657d1f7255248 /source/blender/blenkernel/BKE_idprop.h | |
parent | c9366a29693082555c1388717d7a99c08da5477c (diff) |
Prevent macros hiding casts from `const` pointers
Diffstat (limited to 'source/blender/blenkernel/BKE_idprop.h')
-rw-r--r-- | source/blender/blenkernel/BKE_idprop.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h index 3cf944fa236..0f3f4ef1018 100644 --- a/source/blender/blenkernel/BKE_idprop.h +++ b/source/blender/blenkernel/BKE_idprop.h @@ -121,11 +121,27 @@ void IDP_ClearProperty(IDProperty *prop); void IDP_UnlinkProperty(struct IDProperty *prop); #define IDP_Int(prop) ((prop)->data.val) -#define IDP_Float(prop) (*(float *)&(prop)->data.val) -#define IDP_Double(prop) (*(double *)&(prop)->data.val) -#define IDP_String(prop) ((char *) (prop)->data.pointer) #define IDP_Array(prop) ((prop)->data.pointer) -#define IDP_IDPArray(prop) ((IDProperty *) (prop)->data.pointer) +/* C11 const correctness for casts */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +# define IDP_Float(prop) _Generic(prop, \ + IDProperty *: (*(float *)&(prop)->data.val), \ + const IDProperty *: (*(const float *)&(prop)->data.val)) +# define IDP_Double(prop) _Generic(prop, \ + IDProperty *: (*(double *)&(prop)->data.val), \ + const IDProperty *: (*(const double *)&(prop)->data.val)) +# define IDP_String(prop) _Generic(prop, \ + IDProperty *: ((char *) (prop)->data.pointer), \ + const IDProperty *: ((const char *) (prop)->data.pointer)) +# define IDP_IDPArray(prop) _Generic(prop, \ + IDProperty *: ((IDProperty *) (prop)->data.pointer), \ + const IDProperty *: ((const IDProperty *) (prop)->data.pointer)) +#else +# define IDP_Float(prop) (*(float *)&(prop)->data.val) +# define IDP_Double(prop) (*(double *)&(prop)->data.val) +# define IDP_String(prop) ((char *) (prop)->data.pointer) +# define IDP_IDPArray(prop) ((IDProperty *) (prop)->data.pointer) +#endif #ifdef DEBUG /* for printout only */ |