aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--internal.h13
-rw-r--r--method.h8
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 {