1#ifndef RBIMPL_RTYPEDDATA_H
2#define RBIMPL_RTYPEDDATA_H
41#define HAVE_TYPE_RB_DATA_TYPE_T 1
42#define HAVE_RB_DATA_TYPE_T_FUNCTION 1
43#define HAVE_RB_DATA_TYPE_T_PARENT 1
44#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
45#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
46#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
47#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
48#define Check_TypedStruct(v, t) \
49 rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
52#define RTYPEDDATA_P RTYPEDDATA_P
53#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
54#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
55#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE
56#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
57#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
101#define TypedData_Wrap_Struct(klass,data_type,sval)\
102 rb_data_typed_object_wrap((klass),(sval),(data_type))
104#define TypedData_Make_Struct0(result, klass, type, size, data_type, sval) \
105 VALUE result = rb_data_typed_object_zalloc(klass, size, data_type); \
106 (sval) = RBIMPL_CAST((type *)RTYPEDDATA_DATA(result)); \
107 RBIMPL_CAST((void)(sval))
109#ifdef HAVE_STMT_AND_DECL_IN_EXPR
110#define TypedData_Make_Struct(klass, type, data_type, sval) \
111 RB_GNUC_EXTENSION({ \
112 TypedData_Make_Struct0( \
122#define TypedData_Make_Struct(klass, type, data_type, sval) \
123 rb_data_typed_object_make( \
126 RBIMPL_CAST((void **)&(sval)), \
130#define TypedData_Get_Struct(obj,type,data_type,sval) \
131 ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
136rbimpl_rtypeddata_p(
VALUE obj)
144RTYPEDDATA_P(
VALUE obj)
153 return rbimpl_rtypeddata_p(obj);
160RTYPEDDATA_TYPE(
VALUE obj)
Defines RBIMPL_ATTR_ARTIFICIAL.
#define RBIMPL_ATTR_ARTIFICIAL()
Wraps (or simulates) __attribute__((artificial))
#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_typed_object_alloc
int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent)
int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type)
void rb_unexpected_type(VALUE x, int t)
void * rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type)
Thin wrapper to ruby/config.h.
Defines RBIMPL_ASSUME / RBIMPL_UNREACHABLE.
#define RBIMPL_UNREACHABLE_RETURN(_)
Wraps (or simulates) __builtin_unreachable.
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE()
Wraps (or simulates) __attribute__((pure))
#define RBIMPL_ATTR_PURE_UNLESS_DEBUG()
Enables RBIMPL_ATTR_PURE iff.
void(* RUBY_DATA_FUNC)(void *)
VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type)
#define TypedData_Make_Struct0(result, klass, type, size, data_type, sval)
VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *)
@ RUBY_TYPED_FREE_IMMEDIATELY
@ RUBY_TYPED_FROZEN_SHAREABLE
@ RUBY_TYPED_WB_PROTECTED
const rb_data_type_t * type
size_t(* dsize)(const void *)
const rb_data_type_t * parent
struct rb_data_type_struct::@103 function
const char * wrap_struct_name
Defines enum ruby_value_type.