1#ifndef RBIMPL_FL_TYPE_H
2#define RBIMPL_FL_TYPE_H
41# define RBIMPL_WIDER_ENUM 1
42#elif SIZEOF_INT * CHAR_BIT > 12+19+1
43# define RBIMPL_WIDER_ENUM 1
45# define RBIMPL_WIDER_ENUM 0
49#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
50#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
51#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
52#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
53#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
54#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
55#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
56#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
57#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
58#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
59#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
61#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
63#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
64#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
65#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
66#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
67#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
68#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
69#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
70#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
71#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
72#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
73#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
74#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
75#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
76#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
77#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
78#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
79#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
80#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
81#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
82#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
84#define ELTS_SHARED RUBY_ELTS_SHARED
85#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
86#define RB_OBJ_FREEZE rb_obj_freeze_inline
89#define RB_FL_ABLE RB_FL_ABLE
90#define RB_FL_ALL RB_FL_ALL
91#define RB_FL_ALL_RAW RB_FL_ALL_RAW
92#define RB_FL_ANY RB_FL_ANY
93#define RB_FL_ANY_RAW RB_FL_ANY_RAW
94#define RB_FL_REVERSE RB_FL_REVERSE
95#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
96#define RB_FL_SET RB_FL_SET
97#define RB_FL_SET_RAW RB_FL_SET_RAW
98#define RB_FL_TEST RB_FL_TEST
99#define RB_FL_TEST_RAW RB_FL_TEST_RAW
100#define RB_FL_UNSET RB_FL_UNSET
101#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
102#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
103#define RB_OBJ_FROZEN RB_OBJ_FROZEN
104#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
105#define RB_OBJ_INFECT RB_OBJ_INFECT
106#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
107#define RB_OBJ_TAINT RB_OBJ_TAINT
108#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
109#define RB_OBJ_TAINTED RB_OBJ_TAINTED
110#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
111#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
112#define RB_OBJ_UNTRUST RB_OBJ_UNTRUST
113#define RB_OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
121#define FL_ABLE RB_FL_ABLE
122#define FL_ALL RB_FL_ALL
123#define FL_ALL_RAW RB_FL_ALL_RAW
124#define FL_ANY RB_FL_ANY
125#define FL_ANY_RAW RB_FL_ANY_RAW
126#define FL_REVERSE RB_FL_REVERSE
127#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
128#define FL_SET RB_FL_SET
129#define FL_SET_RAW RB_FL_SET_RAW
130#define FL_TEST RB_FL_TEST
131#define FL_TEST_RAW RB_FL_TEST_RAW
132#define FL_UNSET RB_FL_UNSET
133#define FL_UNSET_RAW RB_FL_UNSET_RAW
134#define OBJ_FREEZE RB_OBJ_FREEZE
135#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
136#define OBJ_FROZEN RB_OBJ_FROZEN
137#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
138#define OBJ_INFECT RB_OBJ_INFECT
139#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
140#define OBJ_TAINT RB_OBJ_TAINT
141#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
142#define OBJ_TAINTED RB_OBJ_TAINTED
143#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
144#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
145#define OBJ_UNTRUST RB_OBJ_UNTRUST
146#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
198# define RUBY_FL_USER19 (RBIMPL_VALUE_ONE<<(RUBY_FL_USHIFT+19))
200#undef RBIMPL_FL_USER_N
201#undef RBIMPL_WIDER_ENUM
220 if (RB_SPECIAL_CONST_P(obj)) {
237 return RBASIC(obj)->flags & flags;
245 if (RB_FL_ABLE(obj)) {
246 return RB_FL_TEST_RAW(obj, flags);
258 return RB_FL_TEST_RAW(obj, flags);
266 return RB_FL_TEST(obj, flags);
274 return RB_FL_TEST_RAW(obj, flags) == flags;
282 return RB_FL_TEST(obj, flags) == flags;
288rbimpl_fl_set_raw_raw(struct
RBasic *obj,
VALUE flags)
298 rbimpl_fl_set_raw_raw(
RBASIC(obj), flags);
305 if (RB_FL_ABLE(obj)) {
306 RB_FL_SET_RAW(obj, flags);
313rbimpl_fl_unset_raw_raw(struct
RBasic *obj,
VALUE flags)
315 obj->flags &= ~flags;
323 rbimpl_fl_unset_raw_raw(
RBASIC(obj), flags);
330 if (RB_FL_ABLE(obj)) {
331 RB_FL_UNSET_RAW(obj, flags);
338rbimpl_fl_reverse_raw_raw(struct
RBasic *obj,
VALUE flags)
348 rbimpl_fl_reverse_raw_raw(
RBASIC(obj), flags);
355 if (RB_FL_ABLE(obj)) {
356 RB_FL_REVERSE_RAW(obj, flags);
363RB_OBJ_TAINTABLE(
VALUE obj)
365 if (! RB_FL_ABLE(obj)) {
382RB_OBJ_TAINTED_RAW(
VALUE obj)
390RB_OBJ_TAINTED(
VALUE obj)
397RB_OBJ_TAINT_RAW(
VALUE obj)
404RB_OBJ_TAINT(
VALUE obj)
406 if (RB_OBJ_TAINTABLE(obj)) {
407 RB_OBJ_TAINT_RAW(obj);
417 RB_FL_SET_RAW(dst, RB_OBJ_TAINTED_RAW(src));
424 if (RB_OBJ_TAINTABLE(dst) && RB_FL_ABLE(src)) {
425 RB_OBJ_INFECT_RAW(dst, src);
435RB_OBJ_FROZEN_RAW(
VALUE obj)
443RB_OBJ_FROZEN(
VALUE obj)
445 if (! RB_FL_ABLE(obj)) {
449 return RB_OBJ_FROZEN_RAW(obj);
455RB_OBJ_FREEZE_RAW(
VALUE obj)
461rb_obj_freeze_inline(
VALUE x)
464 RB_OBJ_FREEZE_RAW(x);
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.
#define RB_GNUC_EXTENSION
Tewaking 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" {.
#define RBIMPL_FL_USER_N(n)
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)
void rb_obj_infect(VALUE victim, VALUE carrier)
Does nothing.
Thin wrapper to ruby/config.h.
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 iff.
Defines enum ruby_special_consts.
#define RBIMPL_VALUE_NULL
Defines enum ruby_value_type.