1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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 ]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2018-01-27 21:04:42 +00:00
parent 6cf78f0e67
commit 46bfa65fcc
2 changed files with 14 additions and 7 deletions

View file

@ -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 */

View file

@ -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 {