1 #ifndef RBIMPL_FL_TYPE_H
2 #define RBIMPL_FL_TYPE_H
23 #include "ruby/internal/config.h"
30 #include "ruby/internal/cast.h"
43 #if RBIMPL_HAS_EXTENSION(enumerator_attributes)
44 # define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
45 #elif RBIMPL_COMPILER_SINCE(GCC, 6, 0, 0)
46 # define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
50 # define RBIMPL_WIDER_ENUM 1
51 #elif SIZEOF_INT * CHAR_BIT > 12+19+1
52 # define RBIMPL_WIDER_ENUM 1
54 # define RBIMPL_WIDER_ENUM 0
58 #define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
59 #define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
60 #define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
61 #define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
62 #define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
63 #define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
64 #define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
65 #define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
66 #define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
67 #define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
68 #define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
70 #define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
72 #define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
73 #define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
74 #define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
75 #define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
76 #define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
77 #define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
78 #define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
79 #define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
80 #define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
81 #define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
82 #define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
83 #define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
84 #define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
85 #define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
86 #define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
87 #define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
88 #define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
89 #define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
90 #define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
91 #define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
93 #define ELTS_SHARED RUBY_ELTS_SHARED
94 #define RB_OBJ_FREEZE rb_obj_freeze_inline
97 #define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
98 #define RB_FL_ABLE RB_FL_ABLE
99 #define RB_FL_ALL RB_FL_ALL
100 #define RB_FL_ALL_RAW RB_FL_ALL_RAW
101 #define RB_FL_ANY RB_FL_ANY
102 #define RB_FL_ANY_RAW RB_FL_ANY_RAW
103 #define RB_FL_REVERSE RB_FL_REVERSE
104 #define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
105 #define RB_FL_SET RB_FL_SET
106 #define RB_FL_SET_RAW RB_FL_SET_RAW
107 #define RB_FL_TEST RB_FL_TEST
108 #define RB_FL_TEST_RAW RB_FL_TEST_RAW
109 #define RB_FL_UNSET RB_FL_UNSET
110 #define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
111 #define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
112 #define RB_OBJ_FROZEN RB_OBJ_FROZEN
113 #define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
114 #define RB_OBJ_INFECT RB_OBJ_INFECT
115 #define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
116 #define RB_OBJ_TAINT RB_OBJ_TAINT
117 #define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
118 #define RB_OBJ_TAINTED RB_OBJ_TAINTED
119 #define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
120 #define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
121 #define RB_OBJ_UNTRUST RB_OBJ_TAINT
122 #define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED
130 #define FL_ABLE RB_FL_ABLE
131 #define FL_ALL RB_FL_ALL
132 #define FL_ALL_RAW RB_FL_ALL_RAW
133 #define FL_ANY RB_FL_ANY
134 #define FL_ANY_RAW RB_FL_ANY_RAW
135 #define FL_REVERSE RB_FL_REVERSE
136 #define FL_REVERSE_RAW RB_FL_REVERSE_RAW
137 #define FL_SET RB_FL_SET
138 #define FL_SET_RAW RB_FL_SET_RAW
139 #define FL_TEST RB_FL_TEST
140 #define FL_TEST_RAW RB_FL_TEST_RAW
141 #define FL_UNSET RB_FL_UNSET
142 #define FL_UNSET_RAW RB_FL_UNSET_RAW
143 #define OBJ_FREEZE RB_OBJ_FREEZE
144 #define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
145 #define OBJ_FROZEN RB_OBJ_FROZEN
146 #define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
147 #define OBJ_INFECT RB_OBJ_INFECT
148 #define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
149 #define OBJ_TAINT RB_OBJ_TAINT
150 #define OBJ_TAINTABLE RB_OBJ_TAINTABLE
151 #define OBJ_TAINTED RB_OBJ_TAINTED
152 #define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
153 #define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
154 #define OBJ_UNTRUST RB_OBJ_UNTRUST
155 #define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
280 #if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE)
282 #elif defined(_MSC_VER)
283 # pragma deprecated(RUBY_FL_TAINT)
307 #if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE)
309 #elif defined(_MSC_VER)
310 # pragma deprecated(RUBY_FL_UNTRUSTED)
359 #define RBIMPL_FL_USER_N(n) RUBY_FL_USER##n = (1<<(RUBY_FL_USHIFT+n))
382 # define RUBY_FL_USER19 (RBIMPL_VALUE_ONE<<(RUBY_FL_USHIFT+19))
384 #undef RBIMPL_FL_USER_N
385 #undef RBIMPL_WIDER_ENUM
441 #if defined(RBIMPL_HAVE_ENUM_ATTRIBUTE)
443 #elif defined(_MSC_VER)
444 # pragma deprecated(RUBY_FL_DUPPED)
450 #undef RBIMPL_HAVE_ENUM_ATTRIBUTE
510 return RBASIC(obj)->flags & flags;
629 rbimpl_fl_set_raw_raw(struct
RBasic *obj,
VALUE flags)
647 rbimpl_fl_set_raw_raw(
RBASIC(obj), flags);
689 rbimpl_fl_unset_raw_raw(struct
RBasic *obj,
VALUE flags)
691 obj->flags &= ~flags;
707 rbimpl_fl_unset_raw_raw(
RBASIC(obj), flags);
744 rbimpl_fl_reverse_raw_raw(struct
RBasic *obj,
VALUE flags)
762 rbimpl_fl_reverse_raw_raw(
RBASIC(obj), flags);
Defines RBIMPL_ATTR_ARTIFICIAL.
#define RBIMPL_ATTR_ARTIFICIAL()
Wraps (or simulates) __attribute__((artificial))
#define RBIMPL_ASSERT_OR_ASSUME(expr)
This is either RUBY_ASSERT or RBIMPL_ASSUME, depending on RUBY_DEBUG.
Defines RBIMPL_COMPILER_SINCE.
#define RB_GNUC_EXTENSION
This is expanded to nothing for non-GCC compilers.
Defines RBIMPL_ATTR_DEPRECATED.
#define RBIMPL_ATTR_DEPRECATED(msg)
Wraps (or simulates) [[deprecated]]
Tweaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Defines RBIMPL_HAS_EXTENSION.
ruby_fl_ushift
This is an enum because GDB wants it (rather than a macro).
@ RUBY_FL_USHIFT
Number of bits in ruby_fl_type that are not open to users.
static VALUE RB_OBJ_FROZEN_RAW(VALUE obj)
This is an implenentation detail of RB_OBJ_FROZEN().
static bool RB_OBJ_TAINTABLE(VALUE obj)
static VALUE RB_FL_TEST(VALUE obj, VALUE flags)
Tests if the given flag(s) are set or not.
static VALUE RB_FL_TEST_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_TEST().
static bool RB_FL_ABLE(VALUE obj)
Checks if the object is flaggable.
static bool RB_FL_ANY_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_ANY().
static void rb_obj_freeze_inline(VALUE x)
Prevents further modifications to the given object.
static bool RB_FL_ANY(VALUE obj, VALUE flags)
Identical to RB_FL_TEST(), except it returns bool.
static void RB_FL_SET_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_SET().
static bool RB_FL_ALL(VALUE obj, VALUE flags)
Identical to RB_FL_ANY(), except it mandates all passed flags be set.
static bool RB_OBJ_FROZEN(VALUE obj)
Checks if an object is frozen.
static bool RB_OBJ_TAINTED(VALUE obj)
static VALUE RB_OBJ_TAINTED_RAW(VALUE obj)
static void RB_OBJ_INFECT(VALUE dst, VALUE src)
static void RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_UNSET().
static void RB_FL_SET(VALUE obj, VALUE flags)
Sets the given flag(s).
static void RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
static void RB_FL_REVERSE(VALUE obj, VALUE flags)
Reverses the flags.
static void RB_FL_UNSET(VALUE obj, VALUE flags)
Clears the given flag(s).
static void RB_OBJ_FREEZE_RAW(VALUE obj)
This is an implenentation detail of RB_OBJ_FREEZE().
static void RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_REVERSE().
static bool RB_FL_ALL_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_ALL().
@ RUBY_FL_PROMOTED1
This flag has something to do with our garbage collector.
@ RUBY_ELTS_SHARED
This flag has something to do with data structures.
@ RUBY_FL_SINGLETON
This flag has something to do with an object's class.
@ RUBY_FL_PROMOTED0
This flag has something to do with our garbage collector.
@ RUBY_FL_EXIVAR
This flag has something to do with instance variables.
@ RUBY_FL_PROMOTED
This flag has something to do with our garbage collector.
@ RUBY_FL_USER0
User-defined flag.
@ RUBY_FL_FREEZE
This flag has something to do with data immutability.
@ RUBY_FL_SEEN_OBJ_ID
This flag has something to do with object IDs.
@ RUBY_FL_USER2
User-defined flag.
@ RUBY_FL_SHAREABLE
This flag has something to do with Ractor.
@ RUBY_FL_FINALIZE
This flag has something to do with finalisers.
static void RB_OBJ_TAINT_RAW(VALUE obj)
#define RBIMPL_FL_USER_N(n)
(@shyouhei doesn't know how to excude this macro from doxygen).
static void RB_OBJ_TAINT(VALUE obj)
Defines RBIMPL_ATTR_FLAG_ENUM.
#define RBIMPL_ATTR_FLAG_ENUM()
Wraps (or simulates) __attribute__((flag_enum)
Defines RBIMPL_ATTR_FORCEINLINE.
#define RBIMPL_ATTR_FORCEINLINE()
Wraps (or simulates) __forceinline.
void rb_freeze_singleton_class(VALUE klass)
This is an implementation detail of RB_OBJ_FREEZE().
void rb_obj_infect(VALUE victim, VALUE carrier)
Defines RBIMPL_ATTR_NOALIAS.
#define RBIMPL_ATTR_NOALIAS()
Wraps (or simulates) __declspec((noalias))
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE_UNLESS_DEBUG()
Enables RBIMPL_ATTR_PURE if and only if.
static VALUE RBASIC_CLASS(VALUE obj)
Queries the class of an object.
#define RBASIC(obj)
Convenient casting macro.
Defines enum ruby_special_consts.
static bool RB_SPECIAL_CONST_P(VALUE obj)
Checks if the given object is of enum ruby_special_consts.
Ruby's object's, base components.
#define RBIMPL_VALUE_NULL
A compile-time constant of type VALUE whose value is 0.
uintptr_t VALUE
Type that represents a Ruby object.
Defines enum ruby_value_type.
static bool RB_TYPE_P(VALUE obj, enum ruby_value_type t)
Queries if the given object is of given type.
@ RUBY_T_MASK
Bitmask of ruby_value_type.