40#ifdef RUBY_UNTYPED_DATA_WARNING
42#elif defined(RUBY_EXPORT)
43# define RUBY_UNTYPED_DATA_WARNING 1
45# define RUBY_UNTYPED_DATA_WARNING 0
49#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
50#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() \
51 RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) \
52 RBIMPL_ATTR_DEPRECATED(("by TypedData"))
55#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj))
56#define DATA_PTR(obj) RDATA(obj)->data
57#define RUBY_MACRO_SELECT RBIMPL_TOKEN_PASTE
58#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1)
59#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0)
60#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
80#define Data_Wrap_Struct(klass, mark, free, sval) \
81 rb_data_object_wrap( \
84 RBIMPL_DATA_FUNC(mark), \
85 RBIMPL_DATA_FUNC(free))
87#define Data_Make_Struct0(result, klass, type, size, mark, free, sval) \
88 VALUE result = rb_data_object_zalloc( \
91 RBIMPL_DATA_FUNC(mark), \
92 RBIMPL_DATA_FUNC(free)); \
93 (sval) = RBIMPL_CAST((type *)DATA_PTR(result)); \
94 RBIMPL_CAST((void)(sval))
96#ifdef HAVE_STMT_AND_DECL_IN_EXPR
97#define Data_Make_Struct(klass, type, mark, free, sval) \
110#define Data_Make_Struct(klass, type, mark, free, sval) \
111 rb_data_object_make( \
113 RBIMPL_DATA_FUNC(mark), \
114 RBIMPL_DATA_FUNC(free), \
115 RBIMPL_CAST((void **)&(sval)), \
119#define Data_Get_Struct(obj, type, sval) \
120 ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))
122RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
136RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
138rb_data_object_get_warning(
VALUE obj)
143#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
144# define rb_data_object_wrap_warning(klass, ptr, mark, free) \
146 __builtin_choose_expr( \
147 __builtin_constant_p(klass) && !(klass), \
148 rb_data_object_wrap(klass, ptr, mark, free), \
149 (rb_data_object_wrap_warning)(klass, ptr, mark, free)))
173#define rb_cData rb_cData()
175#define rb_data_object_wrap_0 rb_data_object_wrap
176#define rb_data_object_wrap_1 rb_data_object_wrap_warning
177#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_, RUBY_UNTYPED_DATA_WARNING)
178#define rb_data_object_get_0 rb_data_object_get
179#define rb_data_object_get_1 rb_data_object_get_warning
180#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_, RUBY_UNTYPED_DATA_WARNING)
181#define rb_data_object_make_0 rb_data_object_make
182#define rb_data_object_make_1 rb_data_object_make_warning
183#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_, RUBY_UNTYPED_DATA_WARNING)
Defines RBIMPL_ATTR_WARNING.
Defines RBIMPL_ATTR_DEPRECATED.
#define RBIMPL_ATTR_DEPRECATED(msg)
Wraps (or simulates) [[deprecated]]
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" {.
Defines enum ruby_fl_type.
#define rb_data_object_alloc
VALUE rb_cObject
Object class.
Thin wrapper to ruby/config.h.
#define RBIMPL_ATTR_PURE()
Wraps (or simulates) __attribute__((pure))
#define rb_data_object_get
VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
void(* RUBY_DATA_FUNC)(void *)
#define Data_Make_Struct0(result, klass, type, size, mark, free, sval)
#define rb_data_object_wrap
#define rb_data_object_make
Defines RBIMPL_TOKEN_PASTE.
Defines enum ruby_value_type.