From 46bfa65fccf58cee280bf552193f93388b00d16d Mon Sep 17 00:00:00 2001 From: normal Date: Sat, 27 Jan 2018 21:04:42 +0000 Subject: [PATCH] internal.h: add BITFIELD macro to aid C99 users I plan to use this macro to pack other enums in the VM. * internal.h: add BITFIELD macro * method.h: use BITFIELD for rb_method_visibility_t [ruby-core:85074] [Misc #14395] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- internal.h | 13 +++++++++++++ method.h | 8 +------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/internal.h b/internal.h index 59f5d640cc..f6742cd458 100644 --- a/internal.h +++ b/internal.h @@ -2066,6 +2066,19 @@ rb_obj_builtin_type(VALUE obj) # define FLEX_ARY_LEN 1 /* VALUE ary[1]; */ #endif +/* + * For declaring bitfields out of non-unsigned int types: + * struct date { + * BITFIELD(enum months) month:4; + * ... + * }; + */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +# define BITFIELD(type) type +#else +# define BITFIELD(type) unsigned int +#endif + #if defined(__cplusplus) #if 0 { /* satisfy cc-mode */ diff --git a/method.h b/method.h index 83f3acac06..e2d121d9b8 100644 --- a/method.h +++ b/method.h @@ -32,16 +32,10 @@ typedef enum { METHOD_VISI_MASK = 0x03 } rb_method_visibility_t; -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) -#define bits_t rb_method_visibility_t -#else -#define bits_t unsigned int -#endif typedef struct rb_scope_visi_struct { - bits_t method_visi : 3; + BITFIELD(rb_method_visibility_t) method_visi : 3; unsigned int module_func : 1; } rb_scope_visibility_t; -#undef bits_t /*! CREF (Class REFerence) */ typedef struct rb_cref_struct {