17 #if defined(__cplusplus)
24 #include "ruby/config.h"
26 #include RUBY_EXTCONF_H
31 #define NORETURN_STYLE_NEW 1
33 # define NORETURN(x) x
36 # define DEPRECATED(x) x
39 # define NOINLINE(x) x
46 #define PRINTF_ARGS(decl, string_index, first_to_check) \
47 decl __attribute__((format(printf, string_index, first_to_check)))
49 #define PRINTF_ARGS(decl, string_index, first_to_check) decl
52 #ifdef HAVE_INTRINSICS_H
53 # include <intrinsics.h>
64 # define alloca __builtin_alloca
81 #if defined HAVE_UINTPTR_T && 0
84 # define SIGNED_VALUE intptr_t
85 # define SIZEOF_VALUE SIZEOF_UINTPTR_T
86 # undef PRI_VALUE_PREFIX
87 #elif SIZEOF_LONG == SIZEOF_VOIDP
89 typedef unsigned long ID;
90 # define SIGNED_VALUE long
91 # define SIZEOF_VALUE SIZEOF_LONG
92 # define PRI_VALUE_PREFIX "l"
93 #elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
94 typedef unsigned LONG_LONG
VALUE;
95 typedef unsigned LONG_LONG
ID;
96 # define SIGNED_VALUE LONG_LONG
97 # define LONG_LONG_VALUE 1
98 # define SIZEOF_VALUE SIZEOF_LONG_LONG
99 # define PRI_VALUE_PREFIX PRI_LL_PREFIX
101 # error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<----
106 #ifdef HAVE_LONG_LONG
107 typedef char ruby_check_sizeof_long_long[SIZEOF_LONG_LONG ==
sizeof(LONG_LONG) ? 1 : -1];
111 #ifndef PRI_INT_PREFIX
112 #define PRI_INT_PREFIX ""
114 #ifndef PRI_LONG_PREFIX
115 #define PRI_LONG_PREFIX "l"
119 #define PRI_64_PREFIX PRI_LONG_PREFIX
120 #elif SIZEOF_LONG_LONG == 8
121 #define PRI_64_PREFIX PRI_LL_PREFIX
124 #if defined PRIdPTR && !defined PRI_VALUE_PREFIX
125 #define PRIdVALUE PRIdPTR
126 #define PRIoVALUE PRIoPTR
127 #define PRIuVALUE PRIuPTR
128 #define PRIxVALUE PRIxPTR
129 #define PRIXVALUE PRIXPTR
130 #define PRIsVALUE PRIiPTR
132 #define PRIdVALUE PRI_VALUE_PREFIX"d"
133 #define PRIoVALUE PRI_VALUE_PREFIX"o"
134 #define PRIuVALUE PRI_VALUE_PREFIX"u"
135 #define PRIxVALUE PRI_VALUE_PREFIX"x"
136 #define PRIXVALUE PRI_VALUE_PREFIX"X"
137 #define PRIsVALUE PRI_VALUE_PREFIX"i"
139 #ifndef PRI_VALUE_PREFIX
140 # define PRI_VALUE_PREFIX ""
143 #ifndef PRI_TIMET_PREFIX
144 # if SIZEOF_TIME_T == SIZEOF_INT
145 # define PRI_TIMET_PREFIX
146 # elif SIZEOF_TIME_T == SIZEOF_LONG
147 # define PRI_TIMET_PREFIX "l"
148 # elif SIZEOF_TIME_T == SIZEOF_LONG_LONG
149 # define PRI_TIMET_PREFIX PRI_LL_PREFIX
153 #if defined PRI_PTRDIFF_PREFIX
154 #elif SIZEOF_PTRDIFF_T == SIZEOF_INT
155 # define PRI_PTRDIFF_PREFIX ""
156 #elif SIZEOF_PTRDIFF_T == SIZEOF_LONG
157 # define PRI_PTRDIFF_PREFIX "l"
158 #elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG
159 # define PRI_PTRDIFF_PREFIX PRI_LL_PREFIX
161 #define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
162 #define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
163 #define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
164 #define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
165 #define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
166 #define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
168 #if defined PRI_SIZE_PREFIX
169 #elif SIZEOF_SIZE_T == SIZEOF_INT
170 # define PRI_SIZE_PREFIX ""
171 #elif SIZEOF_SIZE_T == SIZEOF_LONG
172 # define PRI_SIZE_PREFIX "l"
173 #elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
174 # define PRI_SIZE_PREFIX PRI_LL_PREFIX
176 #define PRIdSIZE PRI_SIZE_PREFIX"d"
177 #define PRIiSIZE PRI_SIZE_PREFIX"i"
178 #define PRIoSIZE PRI_SIZE_PREFIX"o"
179 #define PRIuSIZE PRI_SIZE_PREFIX"u"
180 #define PRIxSIZE PRI_SIZE_PREFIX"x"
181 #define PRIXSIZE PRI_SIZE_PREFIX"X"
187 # ifdef HAVE_LIMITS_H
191 # define LONG_MAX 2147483647
195 # define LONG_MIN (-LONG_MAX-1)
202 #ifdef HAVE_LONG_LONG
204 # ifdef LONG_LONG_MAX
205 # define LLONG_MAX LONG_LONG_MAX
208 # define LLONG_MAX _I64_MAX
211 # define LLONG_MAX 9223372036854775807LL
216 # ifdef LONG_LONG_MIN
217 # define LLONG_MIN LONG_LONG_MIN
220 # define LLONG_MIN _I64_MIN
222 # define LLONG_MIN (-LLONG_MAX-1)
228 #define FIXNUM_MAX (LONG_MAX>>1)
229 #define FIXNUM_MIN RSHIFT((long)LONG_MIN,1)
231 #define INT2FIX(i) ((VALUE)(((SIGNED_VALUE)(i))<<1 | FIXNUM_FLAG))
232 #define LONG2FIX(i) INT2FIX(i)
233 #define rb_fix_new(v) INT2FIX(v)
236 #define rb_int_new(v) rb_int2inum(v)
239 #define rb_uint_new(v) rb_uint2inum(v)
241 #ifdef HAVE_LONG_LONG
242 VALUE rb_ll2inum(LONG_LONG);
243 #define LL2NUM(v) rb_ll2inum(v)
244 VALUE rb_ull2inum(
unsigned LONG_LONG);
245 #define ULL2NUM(v) rb_ull2inum(v)
249 #if SIZEOF_OFF_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
250 # define OFFT2NUM(v) LL2NUM(v)
251 #elif SIZEOF_OFF_T == SIZEOF_LONG
252 # define OFFT2NUM(v) LONG2NUM(v)
254 # define OFFT2NUM(v) INT2NUM(v)
258 #if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
259 # define SIZET2NUM(v) ULL2NUM(v)
260 # define SSIZET2NUM(v) LL2NUM(v)
261 #elif SIZEOF_SIZE_T == SIZEOF_LONG
262 # define SIZET2NUM(v) ULONG2NUM(v)
263 # define SSIZET2NUM(v) LONG2NUM(v)
265 # define SIZET2NUM(v) UINT2NUM(v)
266 # define SSIZET2NUM(v) INT2NUM(v)
270 # if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
271 # define SIZE_MAX ULLONG_MAX
272 # define SIZE_MIN ULLONG_MIN
273 # elif SIZEOF_SIZE_T == SIZEOF_LONG
274 # define SIZE_MAX ULONG_MAX
275 # define SIZE_MIN ULONG_MIN
276 # elif SIZEOF_SIZE_T == SIZEOF_INT
277 # define SIZE_MAX UINT_MAX
278 # define SIZE_MIN UINT_MIN
280 # define SIZE_MAX USHRT_MAX
281 # define SIZE_MIN USHRT_MIN
286 # if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
287 # define SSIZE_MAX LLONG_MAX
288 # define SSIZE_MIN LLONG_MIN
289 # elif SIZEOF_SIZE_T == SIZEOF_LONG
290 # define SSIZE_MAX LONG_MAX
291 # define SSIZE_MIN LONG_MIN
292 # elif SIZEOF_SIZE_T == SIZEOF_INT
293 # define SSIZE_MAX INT_MAX
294 # define SSIZE_MIN INT_MIN
296 # define SSIZE_MAX SHRT_MAX
297 # define SSIZE_MIN SHRT_MIN
301 #if SIZEOF_INT < SIZEOF_VALUE
305 #if SIZEOF_INT < SIZEOF_LONG
307 rb_long2int_inline(
long n)
315 #define rb_long2int(n) rb_long2int_inline(n)
317 #define rb_long2int(n) ((int)(n))
321 #define PIDT2NUM(v) LONG2NUM(v)
324 #define NUM2PIDT(v) NUM2LONG(v)
327 #define UIDT2NUM(v) LONG2NUM(v)
330 #define NUM2UIDT(v) NUM2LONG(v)
333 #define GIDT2NUM(v) LONG2NUM(v)
336 #define NUM2GIDT(v) NUM2LONG(v)
339 #define NUM2MODET(v) NUM2INT(v)
342 #define MODET2NUM(v) INT2NUM(v)
345 #define FIX2LONG(x) ((long)RSHIFT((SIGNED_VALUE)(x),1))
346 #define FIX2ULONG(x) ((unsigned long)FIX2LONG(x))
347 #define FIXNUM_P(f) (((int)(SIGNED_VALUE)(f))&FIXNUM_FLAG)
348 #define POSFIXABLE(f) ((f) < FIXNUM_MAX+1)
349 #define NEGFIXABLE(f) ((f) >= FIXNUM_MIN)
350 #define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f))
352 #define IMMEDIATE_P(x) ((VALUE)(x) & IMMEDIATE_MASK)
354 #define SYMBOL_P(x) (((VALUE)(x)&~((~(VALUE)0)<<RUBY_SPECIAL_SHIFT))==SYMBOL_FLAG)
355 #define ID2SYM(x) (((VALUE)(x)<<RUBY_SPECIAL_SHIFT)|SYMBOL_FLAG)
356 #define SYM2ID(x) RSHIFT((unsigned long)(x),RUBY_SPECIAL_SHIFT)
359 #if SIZEOF_VALUE >= SIZEOF_DOUBLE
367 #define FLONUM_P(x) ((((int)(SIGNED_VALUE)(x))&FLONUM_MASK) == FLONUM_FLAG)
369 #define FLONUM_P(x) 0
373 #define USE_SYMBOL_AS_METHOD_NAME 1
425 #define Qfalse ((VALUE)RUBY_Qfalse)
426 #define Qtrue ((VALUE)RUBY_Qtrue)
427 #define Qnil ((VALUE)RUBY_Qnil)
428 #define Qundef ((VALUE)RUBY_Qundef)
429 #define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
430 #define FIXNUM_FLAG RUBY_FIXNUM_FLAG
432 #define FLONUM_MASK RUBY_FLONUM_MASK
433 #define FLONUM_FLAG RUBY_FLONUM_FLAG
435 #define SYMBOL_FLAG RUBY_SYMBOL_FLAG
437 #define RTEST(v) !(((VALUE)(v) & ~Qnil) == 0)
438 #define NIL_P(v) !((VALUE)(v) != Qnil)
440 #define CLASS_OF(v) rb_class_of((VALUE)(v))
475 #define T_NONE RUBY_T_NONE
476 #define T_NIL RUBY_T_NIL
477 #define T_OBJECT RUBY_T_OBJECT
478 #define T_CLASS RUBY_T_CLASS
479 #define T_ICLASS RUBY_T_ICLASS
480 #define T_MODULE RUBY_T_MODULE
481 #define T_FLOAT RUBY_T_FLOAT
482 #define T_STRING RUBY_T_STRING
483 #define T_REGEXP RUBY_T_REGEXP
484 #define T_ARRAY RUBY_T_ARRAY
485 #define T_HASH RUBY_T_HASH
486 #define T_STRUCT RUBY_T_STRUCT
487 #define T_BIGNUM RUBY_T_BIGNUM
488 #define T_FILE RUBY_T_FILE
489 #define T_FIXNUM RUBY_T_FIXNUM
490 #define T_TRUE RUBY_T_TRUE
491 #define T_FALSE RUBY_T_FALSE
492 #define T_DATA RUBY_T_DATA
493 #define T_MATCH RUBY_T_MATCH
494 #define T_SYMBOL RUBY_T_SYMBOL
495 #define T_RATIONAL RUBY_T_RATIONAL
496 #define T_COMPLEX RUBY_T_COMPLEX
497 #define T_UNDEF RUBY_T_UNDEF
498 #define T_NODE RUBY_T_NODE
499 #define T_ZOMBIE RUBY_T_ZOMBIE
500 #define T_MASK RUBY_T_MASK
502 #define BUILTIN_TYPE(x) (int)(((struct RBasic*)(x))->flags & T_MASK)
505 #define TYPE(x) rb_type((VALUE)(x))
510 #define RB_GC_GUARD_PTR(ptr) \
511 __extension__ ({volatile VALUE *rb_gc_guarded_ptr = (ptr); rb_gc_guarded_ptr;})
514 #pragma optimize("", off)
516 #pragma optimize("", on)
519 #define HAVE_RB_GC_GUARDED_PTR 1
521 #define RB_GC_GUARD_PTR(ptr) rb_gc_guarded_ptr(ptr)
523 #define RB_GC_GUARD(v) (*RB_GC_GUARD_PTR(&(v)))
526 #define RB_UNUSED_VAR(x) x __attribute__ ((unused))
528 #define RB_UNUSED_VAR(x) x
532 #define Check_Type(v,t) rb_check_type((VALUE)(v),(t))
539 #define StringValue(v) rb_string_value(&(v))
540 #define StringValuePtr(v) rb_string_value_ptr(&(v))
541 #define StringValueCStr(v) rb_string_value_cstr(&(v))
545 #define SafeStringValue(v) do {\
547 rb_check_safe_obj(v);\
550 #define Check_SafeStr(v) rb_check_safe_str((VALUE)(v))
553 #define ExportStringValue(v) do {\
555 (v) = rb_str_export(v);\
560 #define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
563 #define FilePathStringValue(v) ((v) = rb_get_path_no_checksafe(v))
565 #define RUBY_SAFE_LEVEL_MAX 3
569 #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
570 int ruby_safe_level_4_error(
void) __attribute__((error("$SAFE=4 is obsolete")));
573 # define ruby_safe_level_4_warning() ruby_safe_level_4_error()
575 #define RUBY_SAFE_LEVEL_INVALID_P(level) \
576 __extension__(__builtin_constant_p(level) && \
577 ((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level)))
578 #define RUBY_SAFE_LEVEL_CHECK(level, type) \
579 (RUBY_SAFE_LEVEL_INVALID_P(level) ? ruby_safe_level_4_##type() : (level))
580 #define rb_secure(level) rb_secure(RUBY_SAFE_LEVEL_CHECK(level, warning))
581 #define rb_set_safe_level(level) rb_set_safe_level(RUBY_SAFE_LEVEL_CHECK(level, error))
600 #define NUM2LONG(x) rb_num2long_inline(x)
601 static inline unsigned long
609 #define NUM2ULONG(x) rb_num2ulong_inline(x)
610 #if SIZEOF_INT < SIZEOF_LONG
613 #define FIX2INT(x) ((int)rb_fix2int((VALUE)(x)))
616 rb_num2int_inline(
VALUE x)
623 #define NUM2INT(x) rb_num2int_inline(x)
625 unsigned long rb_num2uint(
VALUE);
626 #define NUM2UINT(x) ((unsigned int)rb_num2uint(x))
627 unsigned long rb_fix2uint(
VALUE);
628 #define FIX2UINT(x) ((unsigned int)rb_fix2uint(x))
630 #define NUM2INT(x) ((int)NUM2LONG(x))
631 #define NUM2UINT(x) ((unsigned int)NUM2ULONG(x))
632 #define FIX2INT(x) ((int)FIX2LONG(x))
633 #define FIX2UINT(x) ((unsigned int)FIX2ULONG(x))
640 #define FIX2SHORT(x) (rb_fix2short((VALUE)(x)))
650 #define NUM2SHORT(x) rb_num2short_inline(x)
651 #define NUM2USHORT(x) rb_num2ushort(x)
653 #ifdef HAVE_LONG_LONG
654 LONG_LONG rb_num2ll(
VALUE);
655 unsigned LONG_LONG rb_num2ull(
VALUE);
656 static inline LONG_LONG
657 rb_num2ll_inline(
VALUE x)
664 # define NUM2LL(x) rb_num2ll_inline(x)
665 # define NUM2ULL(x) rb_num2ull(x)
668 #if !defined(NUM2OFFT)
669 # if defined(HAVE_LONG_LONG) && SIZEOF_OFF_T > SIZEOF_LONG
670 # define NUM2OFFT(x) ((off_t)NUM2LL(x))
672 # define NUM2OFFT(x) NUM2LONG(x)
676 #if defined(HAVE_LONG_LONG) && SIZEOF_SIZE_T > SIZEOF_LONG
677 # define NUM2SIZET(x) ((size_t)NUM2ULL(x))
678 # define NUM2SSIZET(x) ((ssize_t)NUM2LL(x))
680 # define NUM2SIZET(x) NUM2ULONG(x)
681 # define NUM2SSIZET(x) NUM2LONG(x)
685 #define NUM2DBL(x) rb_num2dbl((VALUE)(x))
693 #define NEWOBJ(obj,type) type *(obj) = (type*)rb_newobj()
694 #define NEWOBJ_OF(obj,type,klass,flags) type *(obj) = (type*)rb_newobj_of(klass, flags)
695 #define OBJSETUP(obj,c,t) rb_obj_setup(obj, c, t)
696 #define CLONESETUP(clone,obj) do {\
697 OBJSETUP((clone),rb_singleton_class_clone((VALUE)(obj)),RBASIC(obj)->flags);\
698 rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)(clone));\
699 if (FL_TEST((obj), FL_EXIVAR)) rb_copy_generic_ivar((VALUE)(clone),(VALUE)(obj));\
701 #define DUPSETUP(dup,obj) do {\
702 OBJSETUP((dup),rb_obj_class(obj), (RBASIC(obj)->flags)&(T_MASK|FL_EXIVAR|FL_TAINT)); \
703 if (FL_TEST((obj), FL_EXIVAR)) rb_copy_generic_ivar((VALUE)(dup),(VALUE)(obj));\
710 #ifndef RGENGC_WB_PROTECTED_ARRAY
711 #define RGENGC_WB_PROTECTED_ARRAY 1
713 #ifndef RGENGC_WB_PROTECTED_HASH
714 #define RGENGC_WB_PROTECTED_HASH 1
716 #ifndef RGENGC_WB_PROTECTED_STRUCT
717 #define RGENGC_WB_PROTECTED_STRUCT 1
719 #ifndef RGENGC_WB_PROTECTED_STRING
720 #define RGENGC_WB_PROTECTED_STRING 1
722 #ifndef RGENGC_WB_PROTECTED_OBJECT
723 #define RGENGC_WB_PROTECTED_OBJECT 1
725 #ifndef RGENGC_WB_PROTECTED_REGEXP
726 #define RGENGC_WB_PROTECTED_REGEXP 1
728 #ifndef RGENGC_WB_PROTECTED_CLASS
729 #define RGENGC_WB_PROTECTED_CLASS 1
731 #ifndef RGENGC_WB_PROTECTED_FLOAT
732 #define RGENGC_WB_PROTECTED_FLOAT 1
734 #ifndef RGENGC_WB_PROTECTED_COMPLEX
735 #define RGENGC_WB_PROTECTED_COMPLEX 1
737 #ifndef RGENGC_WB_PROTECTED_RATIONAL
738 #define RGENGC_WB_PROTECTED_RATIONAL 1
740 #ifndef RGENGC_WB_PROTECTED_BIGNUM
741 #define RGENGC_WB_PROTECTED_BIGNUM 1
743 #ifndef RGENGC_WB_PROTECTED_NODE_CREF
744 #define RGENGC_WB_PROTECTED_NODE_CREF 1
752 __attribute__((aligned(
sizeof(
VALUE))))
759 #define RBASIC_CLASS(obj) (RBASIC(obj)->klass)
761 #define ROBJECT_EMBED_LEN_MAX 3
773 #define ROBJECT_EMBED FL_USER1
774 #define ROBJECT_NUMIV(o) \
775 ((RBASIC(o)->flags & ROBJECT_EMBED) ? \
776 ROBJECT_EMBED_LEN_MAX : \
777 ROBJECT(o)->as.heap.numiv)
778 #define ROBJECT_IVPTR(o) \
779 ((RBASIC(o)->flags & ROBJECT_EMBED) ? \
780 ROBJECT(o)->as.ary : \
781 ROBJECT(o)->as.heap.ivptr)
782 #define ROBJECT_IV_INDEX_TBL(o) \
783 ((RBASIC(o)->flags & ROBJECT_EMBED) ? \
784 RCLASS_IV_INDEX_TBL(rb_obj_class(o)) : \
785 ROBJECT(o)->as.heap.iv_index_tbl)
796 #define RCLASS_SUPER(c) rb_class_get_superclass(c)
797 #define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m)
798 #define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m)
799 #define RMODULE_M_TBL(m) RCLASS_M_TBL(m)
800 #define RMODULE_SUPER(m) RCLASS_SUPER(m)
801 #define RMODULE_IS_OVERLAID FL_USER2
802 #define RMODULE_IS_REFINEMENT FL_USER3
803 #define RMODULE_INCLUDED_INTO_REFINEMENT FL_USER4
814 #define RFLOAT_VALUE(v) rb_float_value(v)
815 #define DBL2NUM(dbl) rb_float_new(dbl)
817 #define ELTS_SHARED FL_USER2
819 #define RSTRING_EMBED_LEN_MAX ((int)((sizeof(VALUE)*3)/sizeof(char)-1))
834 #define RSTRING_NOEMBED FL_USER1
835 #define RSTRING_FSTR FL_USER17
836 #define RSTRING_EMBED_LEN_MASK (FL_USER2|FL_USER3|FL_USER4|FL_USER5|FL_USER6)
837 #define RSTRING_EMBED_LEN_SHIFT (FL_USHIFT+2)
838 #define RSTRING_EMBED_LEN(str) \
839 (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \
840 (RSTRING_EMBED_LEN_MASK >> RSTRING_EMBED_LEN_SHIFT))
841 #define RSTRING_LEN(str) \
842 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
843 RSTRING_EMBED_LEN(str) : \
844 RSTRING(str)->as.heap.len)
845 #define RSTRING_PTR(str) \
846 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
847 RSTRING(str)->as.ary : \
848 RSTRING(str)->as.heap.ptr)
849 #define RSTRING_END(str) \
850 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
851 (RSTRING(str)->as.ary + RSTRING_EMBED_LEN(str)) : \
852 (RSTRING(str)->as.heap.ptr + RSTRING(str)->as.heap.len))
853 #define RSTRING_LENINT(str) rb_long2int(RSTRING_LEN(str))
854 #define RSTRING_GETMEM(str, ptrvar, lenvar) \
855 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
856 ((ptrvar) = RSTRING(str)->as.ary, (lenvar) = RSTRING_EMBED_LEN(str)) : \
857 ((ptrvar) = RSTRING(str)->as.heap.ptr, (lenvar) = RSTRING(str)->as.heap.len))
859 #define RARRAY_EMBED_LEN_MAX 3
874 #define RARRAY_EMBED_FLAG FL_USER1
876 #define RARRAY_EMBED_LEN_MASK (FL_USER4|FL_USER3)
877 #define RARRAY_EMBED_LEN_SHIFT (FL_USHIFT+3)
878 #define RARRAY_LEN(a) \
879 ((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? \
880 (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \
881 (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)) : \
882 RARRAY(a)->as.heap.len)
884 #define RARRAY_LENINT(ary) rb_long2int(RARRAY_LEN(ary))
886 #define RARRAY_CONST_PTR(a) \
887 ((const VALUE *)((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? \
888 RARRAY(a)->as.ary : \
889 RARRAY(a)->as.heap.ptr))
891 #define RARRAY_PTR_USE_START(a) ((VALUE *)RARRAY_CONST_PTR(a))
892 #define RARRAY_PTR_USE_END(a)
894 #define RARRAY_PTR_USE(ary, ptr_name, expr) do { \
895 const VALUE _ary = (ary); \
896 VALUE *ptr_name = (VALUE *)RARRAY_PTR_USE_START(_ary); \
898 RARRAY_PTR_USE_END(_ary); \
901 #define RARRAY_AREF(a, i) (RARRAY_CONST_PTR(a)[i])
902 #define RARRAY_ASET(a, i, v) do { \
903 const VALUE _ary_ = (a); \
904 RB_OBJ_WRITE(_ary_, &RARRAY_CONST_PTR(_ary_)[i], (v)); \
907 #define RARRAY_PTR(a) ((VALUE *)RARRAY_CONST_PTR(RGENGC_WB_PROTECTED_ARRAY ? OBJ_WB_UNPROTECT((VALUE)a) : ((VALUE)a)))
915 #define RREGEXP_SRC(r) RREGEXP(r)->src
916 #define RREGEXP_SRC_PTR(r) RSTRING_PTR(RREGEXP(r)->src)
917 #define RREGEXP_SRC_LEN(r) RSTRING_LEN(RREGEXP(r)->src)
918 #define RREGEXP_SRC_END(r) RSTRING_END(RREGEXP(r)->src)
927 #define RHASH_TBL(h) rb_hash_tbl(h)
928 #define RHASH_ITER_LEV(h) (RHASH(h)->iter_lev)
929 #define RHASH_IFNONE(h) (RHASH(h)->ifnone)
930 #define RHASH_SIZE(h) (RHASH(h)->ntbl ? (st_index_t)RHASH(h)->ntbl->num_entries : 0)
931 #define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
932 #define RHASH_SET_IFNONE(h, ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
945 #define RRATIONAL_SET_NUM(rat, n) RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->num,(n))
946 #define RRATIONAL_SET_DEN(rat, d) RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->den,(d))
954 #define RCOMPLEX_SET_REAL(cmp, r) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->real,(r))
955 #define RCOMPLEX_SET_IMAG(cmp, i) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->imag,(i))
971 size_t (*
dsize)(
const void *);
981 #define HAVE_TYPE_RB_DATA_TYPE_T 1
982 #define HAVE_RB_DATA_TYPE_T_FUNCTION 1
983 #define HAVE_RB_DATA_TYPE_T_PARENT 1
992 #define DATA_PTR(dta) (RDATA(dta)->data)
994 #define RTYPEDDATA_P(v) (RTYPEDDATA(v)->typed_flag == 1)
995 #define RTYPEDDATA_TYPE(v) (RTYPEDDATA(v)->type)
996 #define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
1008 #define Check_TypedStruct(v,t) rb_check_typeddata((VALUE)(v),(t))
1009 #define RUBY_DEFAULT_FREE ((RUBY_DATA_FUNC)-1)
1010 #define RUBY_NEVER_FREE ((RUBY_DATA_FUNC)0)
1011 #define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
1012 #define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
1015 #define RUBY_TYPED_FREE_IMMEDIATELY 1
1016 #define RUBY_TYPED_WB_PROTECTED FL_WB_PROTECTED
1018 #define Data_Wrap_Struct(klass,mark,free,sval)\
1019 rb_data_object_alloc((klass),(sval),(RUBY_DATA_FUNC)(mark),(RUBY_DATA_FUNC)(free))
1021 #define Data_Make_Struct(klass,type,mark,free,sval) (\
1022 (sval) = ALLOC(type),\
1023 memset((sval), 0, sizeof(type)),\
1024 Data_Wrap_Struct((klass),(mark),(free),(sval))\
1027 #define TypedData_Wrap_Struct(klass,data_type,sval)\
1028 rb_data_typed_object_alloc((klass),(sval),(data_type))
1030 #define TypedData_Make_Struct(klass, type, data_type, sval) (\
1031 (sval) = ALLOC(type),\
1032 memset((sval), 0, sizeof(type)),\
1033 TypedData_Wrap_Struct((klass),(data_type),(sval))\
1036 #define Data_Get_Struct(obj,type,sval) do {\
1037 Check_Type((obj), T_DATA); \
1038 (sval) = (type*)DATA_PTR(obj);\
1041 #define TypedData_Get_Struct(obj,type,data_type,sval) do {\
1042 (sval) = (type*)rb_check_typeddata((obj), (data_type)); \
1045 #define RSTRUCT_EMBED_LEN_MAX 3
1056 #define RSTRUCT_EMBED_LEN_MASK (FL_USER2|FL_USER1)
1057 #define RSTRUCT_EMBED_LEN_SHIFT (FL_USHIFT+1)
1058 #define RSTRUCT_LEN(st) \
1059 ((RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ? \
1060 (long)((RBASIC(st)->flags >> RSTRUCT_EMBED_LEN_SHIFT) & \
1061 (RSTRUCT_EMBED_LEN_MASK >> RSTRUCT_EMBED_LEN_SHIFT)) : \
1062 RSTRUCT(st)->as.heap.len)
1063 #define RSTRUCT_LENINT(st) rb_long2int(RSTRUCT_LEN(st))
1064 #define RSTRUCT_CONST_PTR(st) \
1065 ((RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ? \
1066 RSTRUCT(st)->as.ary : \
1067 RSTRUCT(st)->as.heap.ptr)
1068 #define RSTRUCT_PTR(st) ((VALUE *)RSTRUCT_CONST_PTR(RGENGC_WB_PROTECTED_STRUCT ? OBJ_WB_UNPROTECT((VALUE)st) : (VALUE)st))
1070 #define RSTRUCT_SET(st, idx, v) RB_OBJ_WRITE(st, &RSTRUCT_CONST_PTR(st)[idx], (v))
1071 #define RSTRUCT_GET(st, idx) (RSTRUCT_CONST_PTR(st)[idx])
1073 #define RBIGNUM_EMBED_LEN_NUMBITS 3
1074 #ifndef RBIGNUM_EMBED_LEN_MAX
1075 # if (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) < (1 << RBIGNUM_EMBED_LEN_NUMBITS)-1
1076 # define RBIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT)
1078 # define RBIGNUM_EMBED_LEN_MAX ((1 << RBIGNUM_EMBED_LEN_NUMBITS)-1)
1091 #define RBIGNUM_SIGN_BIT FL_USER1
1093 #define RBIGNUM_SIGN(b) ((RBASIC(b)->flags & RBIGNUM_SIGN_BIT) != 0)
1094 #define RBIGNUM_SET_SIGN(b,sign) \
1095 ((sign) ? (RBASIC(b)->flags |= RBIGNUM_SIGN_BIT) \
1096 : (RBASIC(b)->flags &= ~RBIGNUM_SIGN_BIT))
1097 #define RBIGNUM_POSITIVE_P(b) RBIGNUM_SIGN(b)
1098 #define RBIGNUM_NEGATIVE_P(b) (!RBIGNUM_SIGN(b))
1100 #define RBIGNUM_EMBED_FLAG FL_USER2
1101 #define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
1102 #define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+RBIGNUM_EMBED_LEN_NUMBITS)
1103 #define RBIGNUM_LEN(b) \
1104 ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
1105 (long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \
1106 (RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT)) : \
1107 RBIGNUM(b)->as.heap.len)
1109 #define RBIGNUM_DIGITS(b) \
1110 ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
1111 RBIGNUM(b)->as.ary : \
1112 RBIGNUM(b)->as.heap.digits)
1113 #define RBIGNUM_LENINT(b) rb_long2int(RBIGNUM_LEN(b))
1115 #define R_CAST(st) (struct st*)
1116 #define RBASIC(obj) (R_CAST(RBasic)(obj))
1117 #define ROBJECT(obj) (R_CAST(RObject)(obj))
1118 #define RCLASS(obj) (R_CAST(RClass)(obj))
1119 #define RMODULE(obj) RCLASS(obj)
1120 #define RFLOAT(obj) (R_CAST(RFloat)(obj))
1121 #define RSTRING(obj) (R_CAST(RString)(obj))
1122 #define RREGEXP(obj) (R_CAST(RRegexp)(obj))
1123 #define RARRAY(obj) (R_CAST(RArray)(obj))
1124 #define RHASH(obj) (R_CAST(RHash)(obj))
1125 #define RDATA(obj) (R_CAST(RData)(obj))
1126 #define RTYPEDDATA(obj) (R_CAST(RTypedData)(obj))
1127 #define RSTRUCT(obj) (R_CAST(RStruct)(obj))
1128 #define RBIGNUM(obj) (R_CAST(RBignum)(obj))
1129 #define RFILE(obj) (R_CAST(RFile)(obj))
1130 #define RRATIONAL(obj) (R_CAST(RRational)(obj))
1131 #define RCOMPLEX(obj) (R_CAST(RComplex)(obj))
1133 #define FL_SINGLETON FL_USER0
1134 #define FL_WB_PROTECTED (((VALUE)1)<<5)
1135 #define FL_PROMOTED (((VALUE)1)<<6)
1136 #define FL_FINALIZE (((VALUE)1)<<7)
1137 #define FL_TAINT (((VALUE)1)<<8)
1138 #define FL_UNTRUSTED FL_TAINT
1139 #define FL_EXIVAR (((VALUE)1)<<10)
1140 #define FL_FREEZE (((VALUE)1)<<11)
1142 #define FL_USHIFT 12
1144 #define FL_USER0 (((VALUE)1)<<(FL_USHIFT+0))
1145 #define FL_USER1 (((VALUE)1)<<(FL_USHIFT+1))
1146 #define FL_USER2 (((VALUE)1)<<(FL_USHIFT+2))
1147 #define FL_USER3 (((VALUE)1)<<(FL_USHIFT+3))
1148 #define FL_USER4 (((VALUE)1)<<(FL_USHIFT+4))
1149 #define FL_USER5 (((VALUE)1)<<(FL_USHIFT+5))
1150 #define FL_USER6 (((VALUE)1)<<(FL_USHIFT+6))
1151 #define FL_USER7 (((VALUE)1)<<(FL_USHIFT+7))
1152 #define FL_USER8 (((VALUE)1)<<(FL_USHIFT+8))
1153 #define FL_USER9 (((VALUE)1)<<(FL_USHIFT+9))
1154 #define FL_USER10 (((VALUE)1)<<(FL_USHIFT+10))
1155 #define FL_USER11 (((VALUE)1)<<(FL_USHIFT+11))
1156 #define FL_USER12 (((VALUE)1)<<(FL_USHIFT+12))
1157 #define FL_USER13 (((VALUE)1)<<(FL_USHIFT+13))
1158 #define FL_USER14 (((VALUE)1)<<(FL_USHIFT+14))
1159 #define FL_USER15 (((VALUE)1)<<(FL_USHIFT+15))
1160 #define FL_USER16 (((VALUE)1)<<(FL_USHIFT+16))
1161 #define FL_USER17 (((VALUE)1)<<(FL_USHIFT+17))
1162 #define FL_USER18 (((VALUE)1)<<(FL_USHIFT+18))
1163 #define FL_USER19 (((VALUE)1)<<(FL_USHIFT+19))
1165 #define SPECIAL_CONST_P(x) (IMMEDIATE_P(x) || !RTEST(x))
1167 #define FL_ABLE(x) (!SPECIAL_CONST_P(x) && BUILTIN_TYPE(x) != T_NODE)
1168 #define FL_TEST_RAW(x,f) (RBASIC(x)->flags&(f))
1169 #define FL_TEST(x,f) (FL_ABLE(x)?FL_TEST_RAW((x),(f)):0)
1170 #define FL_ANY_RAW(x,f) FL_TEST_RAW((x),(f))
1171 #define FL_ANY(x,f) FL_TEST((x),(f))
1172 #define FL_ALL_RAW(x,f) (FL_TEST_RAW((x),(f)) == (f))
1173 #define FL_ALL(x,f) (FL_TEST((x),(f)) == (f))
1174 #define FL_SET_RAW(x,f) (RBASIC(x)->flags |= (f))
1175 #define FL_SET(x,f) (FL_ABLE(x) ? FL_SET_RAW(x, f) : 0)
1176 #define FL_UNSET_RAW(x,f) (RBASIC(x)->flags &= ~(f))
1177 #define FL_UNSET(x,f) (FL_ABLE(x) ? FL_UNSET_RAW(x, f) : 0)
1178 #define FL_REVERSE_RAW(x,f) (RBASIC(x)->flags ^= (f))
1179 #define FL_REVERSE(x,f) (FL_ABLE(x) ? FL_REVERSE_RAW(x, f) : 0)
1181 #define OBJ_TAINTED_RAW(x) FL_TEST_RAW(x, FL_TAINT)
1182 #define OBJ_TAINTED(x) (!!FL_TEST((x), FL_TAINT))
1183 #define OBJ_TAINT_RAW(x) FL_SET_RAW(x, FL_TAINT)
1184 #define OBJ_TAINT(x) FL_SET((x), FL_TAINT)
1185 #define OBJ_UNTRUSTED(x) OBJ_TAINTED(x)
1186 #define OBJ_UNTRUST(x) OBJ_TAINT(x)
1187 #define OBJ_INFECT_RAW(x,s) FL_SET_RAW(x, OBJ_TAINTED_RAW(s))
1188 #define OBJ_INFECT(x,s) do { \
1189 if (FL_ABLE(x) && FL_ABLE(s)) \
1190 FL_SET_RAW(x, OBJ_TAINTED_RAW(s)); \
1193 #define OBJ_FROZEN(x) (!!(FL_ABLE(x)?(RBASIC(x)->flags&(FL_FREEZE)):(FIXNUM_P(x)||FLONUM_P(x)||SYMBOL_P(x))))
1194 #define OBJ_FREEZE(x) FL_SET((x), FL_FREEZE)
1197 #define OBJ_PROMOTED(x) (SPECIAL_CONST_P(x) ? 0 : FL_TEST_RAW((x), FL_PROMOTED))
1198 #define OBJ_WB_PROTECTED(x) (SPECIAL_CONST_P(x) ? 1 : FL_TEST_RAW((x), FL_WB_PROTECTED))
1199 #define OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
1205 #define OBJ_PROMOTED(x) 0
1206 #define OBJ_WB_PROTECTED(x) 0
1207 #define OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
1221 #define RB_OBJ_WRITE(a, slot, b) rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__)
1222 #define RB_OBJ_WRITTEN(a, oldv, b) rb_obj_written((VALUE)(a), (VALUE)(oldv), (VALUE)(b), __FILE__, __LINE__)
1224 #ifndef USE_RGENGC_LOGGING_WB_UNPROTECT
1225 #define USE_RGENGC_LOGGING_WB_UNPROTECT 0
1228 #if USE_RGENGC_LOGGING_WB_UNPROTECT
1230 #define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
1236 #ifdef RGENGC_LOGGING_WB_UNPROTECT
1237 RGENGC_LOGGING_WB_UNPROTECT((
void *)x, filename, line);
1255 #ifdef RGENGC_LOGGING_OBJ_WRITTEN
1256 RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line);
1272 #ifdef RGENGC_LOGGING_WRITE
1273 RGENGC_LOGGING_WRITE(a, slot, b, filename, line);
1284 #if SIZEOF_INT < SIZEOF_LONG
1285 # define INT2NUM(v) INT2FIX((int)(v))
1286 # define UINT2NUM(v) LONG2FIX((unsigned int)(v))
1296 #define INT2NUM(x) rb_int2num_inline(x)
1306 #define UINT2NUM(x) rb_uint2num_inline(x)
1317 #define LONG2NUM(x) rb_long2num_inline(x)
1327 #define ULONG2NUM(x) rb_ulong2num_inline(x)
1335 return (
char)(
NUM2INT(x) & 0xff);
1337 #define NUM2CHR(x) rb_num2char_inline(x)
1339 #define CHR2FIX(x) INT2FIX((long)((x)&0xff))
1341 #define ALLOC_N(type,n) ((type*)xmalloc2((n),sizeof(type)))
1342 #define ALLOC(type) ((type*)xmalloc(sizeof(type)))
1343 #define REALLOC_N(var,type,n) ((var)=(type*)xrealloc2((char*)(var),(n),sizeof(type)))
1345 #define ALLOCA_N(type,n) ((type*)alloca(sizeof(type)*(n)))
1352 # define ALLOCV(v, n) rb_alloc_tmp_buffer(&(v), (n))
1354 # define ALLOCV(v, n) ((n) < 1024 ? (RB_GC_GUARD(v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n)))
1356 #define ALLOCV_N(type, v, n) ((type*)ALLOCV((v), sizeof(type)*(n)))
1357 #define ALLOCV_END(v) rb_free_tmp_buffer(&(v))
1359 #define MEMZERO(p,type,n) memset((p), 0, sizeof(type)*(n))
1360 #define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(n))
1361 #define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(n))
1362 #define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(n))
1407 #define RUBY_METHOD_FUNC(func) ((VALUE (*)(ANYARGS))(func))
1429 #define CONST_ID_CACHE(result, str) \
1431 static ID rb_intern_id_cache; \
1432 if (!rb_intern_id_cache) \
1433 rb_intern_id_cache = rb_intern2((str), (long)strlen(str)); \
1434 result rb_intern_id_cache; \
1436 #define CONST_ID(var, str) \
1437 do CONST_ID_CACHE((var) =, (str)) while (0)
1441 #define rb_intern(str) \
1442 (__builtin_constant_p(str) ? \
1443 __extension__ (CONST_ID_CACHE((ID), (str))) : \
1445 #define rb_intern_const(str) \
1446 (__builtin_constant_p(str) ? \
1447 __extension__ (rb_intern2((str), (long)strlen(str))) : \
1450 #define rb_intern_const(str) rb_intern2((str), (long)strlen(str))
1464 #define rb_funcall2 rb_funcallv
1465 #define rb_funcall3 rb_funcallv_public
1472 #define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
1483 #define ruby_verbose (*rb_ruby_verbose_ptr())
1484 #define ruby_debug (*rb_ruby_debug_ptr())
1515 #define RB_IO_WAIT_READABLE 0
1516 #define RB_IO_WAIT_WRITABLE 1
1518 #define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
1519 #define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg) \
1520 VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
1523 #if defined RB_BLOCK_CALL_FUNC_STRICT && RB_BLOCK_CALL_FUNC_STRICT
1646 else if (!
RTEST(obj)) {
1650 return RBASIC(obj)->klass;
1663 else if (!
RTEST(obj)) {
1670 #define RB_FLOAT_TYPE_P(obj) (FLONUM_P(obj) || (!SPECIAL_CONST_P(obj) && BUILTIN_TYPE(obj) == T_FLOAT))
1672 #define RB_TYPE_P(obj, type) ( \
1673 ((type) == T_FIXNUM) ? FIXNUM_P(obj) : \
1674 ((type) == T_TRUE) ? ((obj) == Qtrue) : \
1675 ((type) == T_FALSE) ? ((obj) == Qfalse) : \
1676 ((type) == T_NIL) ? ((obj) == Qnil) : \
1677 ((type) == T_UNDEF) ? ((obj) == Qundef) : \
1678 ((type) == T_SYMBOL) ? SYMBOL_P(obj) : \
1679 ((type) == T_FLOAT) ? RB_FLOAT_TYPE_P(obj) : \
1680 (!SPECIAL_CONST_P(obj) && BUILTIN_TYPE(obj) == (type)))
1683 #define rb_type_p(obj, type) \
1684 __extension__ (__builtin_constant_p(type) ? RB_TYPE_P((obj), (type)) : \
1685 rb_type(obj) == (type))
1687 #define rb_type_p(obj, type) (rb_type(obj) == (type))
1691 #define rb_special_const_p(obj) \
1692 __extension__ ({VALUE special_const_obj = (obj); (int)(SPECIAL_CONST_P(special_const_obj) ? Qtrue : Qfalse);})
1704 #if defined(EXTLIB) && defined(USE_DLN_A_OUT)
1706 static char *dln_libs_to_be_linked[] = { EXTLIB, 0 };
1710 #define HAVE_NATIVETHREAD
1714 #define RUBY_EVENT_NONE 0x0000
1715 #define RUBY_EVENT_LINE 0x0001
1716 #define RUBY_EVENT_CLASS 0x0002
1717 #define RUBY_EVENT_END 0x0004
1718 #define RUBY_EVENT_CALL 0x0008
1719 #define RUBY_EVENT_RETURN 0x0010
1720 #define RUBY_EVENT_C_CALL 0x0020
1721 #define RUBY_EVENT_C_RETURN 0x0040
1722 #define RUBY_EVENT_RAISE 0x0080
1723 #define RUBY_EVENT_ALL 0x00ff
1726 #define RUBY_EVENT_B_CALL 0x0100
1727 #define RUBY_EVENT_B_RETURN 0x0200
1728 #define RUBY_EVENT_THREAD_BEGIN 0x0400
1729 #define RUBY_EVENT_THREAD_END 0x0800
1730 #define RUBY_EVENT_TRACEPOINT_ALL 0xffff
1733 #define RUBY_EVENT_SPECIFIED_LINE 0x010000
1734 #define RUBY_EVENT_COVERAGE 0x020000
1737 #define RUBY_INTERNAL_EVENT_SWITCH 0x040000
1738 #define RUBY_EVENT_SWITCH 0x040000
1740 #define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
1741 #define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
1742 #define RUBY_INTERNAL_EVENT_GC_START 0x400000
1743 #define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
1744 #define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
1745 #define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x1f00000
1746 #define RUBY_INTERNAL_EVENT_MASK 0xfffe0000
1751 #define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
1757 #define rb_isascii(c) ((unsigned long)(c) < 128)
1774 #define ISASCII(c) rb_isascii((unsigned char)(c))
1776 #define ISPRINT(c) rb_isprint((unsigned char)(c))
1777 #define ISGRAPH(c) rb_isgraph((unsigned char)(c))
1778 #define ISSPACE(c) rb_isspace((unsigned char)(c))
1779 #define ISUPPER(c) rb_isupper((unsigned char)(c))
1780 #define ISLOWER(c) rb_islower((unsigned char)(c))
1781 #define ISALNUM(c) rb_isalnum((unsigned char)(c))
1782 #define ISALPHA(c) rb_isalpha((unsigned char)(c))
1783 #define ISDIGIT(c) rb_isdigit((unsigned char)(c))
1784 #define ISXDIGIT(c) rb_isxdigit((unsigned char)(c))
1786 #define TOUPPER(c) rb_toupper((unsigned char)(c))
1787 #define TOLOWER(c) rb_tolower((unsigned char)(c))
1791 #define STRCASECMP(s1, s2) (st_locale_insensitive_strcasecmp((s1), (s2)))
1792 #define STRNCASECMP(s1, s2, n) (st_locale_insensitive_strncasecmp((s1), (s2), (n)))
1795 #define STRTOUL(str, endptr, base) (ruby_strtoul((str), (endptr), (base)))
1797 #define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();}
1802 #ifndef RUBY_DONT_SUBST
1835 #define RUBY_INIT_STACK \
1836 VALUE variable_in_this_stack_frame; \
1837 ruby_init_stack(&variable_in_this_stack_frame);
1842 #define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp())
1846 #define Init_stack(addr) ruby_init_stack(addr)
1874 #if defined(__cplusplus)
void rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
void(* rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass)
RUBY_SYMBOL_EXPORT_BEGIN void * alloca()
int ruby_cleanup(volatile int ex)
Destructs the VM.
RUBY_EXTERN VALUE rb_cBasicObject
const VALUE ary[RARRAY_EMBED_LEN_MAX]
void rb_bug(const char *fmt,...)
RUBY_EXTERN VALUE rb_cMatch
VALUE rb_uint2big(VALUE n)
RUBY_EXTERN VALUE rb_cNilClass
RUBY_EXTERN VALUE rb_cModule
RUBY_EXTERN VALUE rb_cStat
const char * rb_obj_classname(VALUE)
VALUE rb_iv_set(VALUE, const char *, VALUE)
void rb_syserr_fail(int e, const char *mesg)
void ruby_finalize(void)
Runs the VM finalization processes.
void(* RUBY_DATA_FUNC)(void *)
VALUE rb_gv_set(const char *, VALUE)
const rb_data_type_t * type
void rb_throw(const char *tag, VALUE val)
struct RString::@95::@96 heap
VALUE(* rb_block_call_func_t)(ANYARGS)
RUBY_EXTERN VALUE rb_stdout
size_t ruby_stack_length(VALUE **)
VALUE rb_string_value(volatile VALUE *)
struct st_table * iv_index_tbl
rb_funcall(memo->yielder, id_lshift, 1, rb_assoc_new(memo->prev_value, memo->prev_elts))
SSL_METHOD *(* func)(void)
RUBY_EXTERN VALUE rb_mWaitReadable
VALUE rb_eval_string_wrap(const char *, int *)
Evaluates the given string under a module binding in an isolated binding.
void ruby_show_version(void)
Prints the version information of the CRuby interpreter to stdout.
void rb_define_global_const(const char *, VALUE)
struct RStruct::@102::@103 heap
char * rb_string_value_ptr(volatile VALUE *)
VALUE rb_syserr_new_str(int n, VALUE arg)
RUBY_EXTERN VALUE rb_cTime
VALUE rb_gv_get(const char *)
RUBY_EXTERN VALUE rb_eZeroDivError
RUBY_EXTERN VALUE rb_cBinding
VALUE rb_iv_get(VALUE, const char *)
RUBY_EXTERN VALUE rb_cSymbol
void rb_gvar_undef_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
void rb_define_hooked_variable(const char *, VALUE *, VALUE(*)(ANYARGS), void(*)(ANYARGS))
static VALUE rb_uint2num_inline(unsigned int v)
int ruby_exec_node(void *n)
Runs the given compiled source.
unsigned long ruby_strtoul(const char *str, char **endptr, int base)
void ruby_show_copyright(void)
Prints the copyright notice of the CRuby interpreter to stdout and exits this process successfully...
VALUE rb_require(const char *)
VALUE rb_yield_values2(int n, const VALUE *argv)
#define PRINTF_ARGS(decl, string_index, first_to_check)
static short rb_num2short_inline(VALUE x)
VALUE rb_str_export(VALUE)
RUBY_EXTERN VALUE rb_cTrueClass
VALUE * rb_ruby_debug_ptr(void)
int ruby_glob(const char *path, int flags, ruby_glob_func *func, VALUE arg)
struct RArray::@98::@99 heap
RUBY_EXTERN VALUE rb_cFloat
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_funcall_with_block(VALUE, ID, int, const VALUE *, VALUE)
void rb_compile_warn(const char *file, int line, const char *fmt,...)
size_t(* dsize)(const void *)
void rb_check_safe_obj(VALUE)
RUBY_EXTERN VALUE rb_eIOError
void rb_include_module(VALUE klass, VALUE module)
VALUE rb_obj_reveal(VALUE obj, VALUE klass)
void rb_gvar_setter_t(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
int ruby_snprintf(char *str, size_t n, char const *fmt,...)
VALUE rb_catch_obj(VALUE, VALUE(*)(ANYARGS), VALUE)
void rb_define_global_function(const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a global function.
VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE *)
VALUE rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *gvar)
ID rb_check_id(volatile VALUE *namep)
Returns ID for the given name if it is interned already, or 0.
struct RBignum::@104::@105 heap
VALUE rb_catch(const char *, VALUE(*)(ANYARGS), VALUE)
VALUE rb_iterate(VALUE(*)(VALUE), VALUE, VALUE(*)(ANYARGS), VALUE)
void rb_undef_method(VALUE klass, const char *name)
struct re_pattern_buffer * ptr
VALUE rb_equal(VALUE, VALUE)
int ruby_stack_check(void)
VALUE rb_str_to_str(VALUE)
static VALUE rb_class_of(VALUE obj)
RUBY_EXTERN VALUE rb_mWaitWritable
RUBY_EXTERN VALUE rb_cRegexp
unsigned long rb_event_flag_t
void rb_gvar_undef_marker(VALUE *var)
void ruby_incpush(const char *)
void rb_gvar_marker_t(VALUE *var)
VALUE rb_get_path_no_checksafe(VALUE)
VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
static VALUE rb_long2num_inline(long v)
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)
void rb_gc_unprotect_logging(void *objptr, const char *filename, int line)
void rb_prepend_module(VALUE klass, VALUE module)
int ruby_glob_func(const char *, VALUE, void *)
void rb_define_readonly_variable(const char *, VALUE *)
RUBY_EXTERN VALUE rb_mMath
RUBY_EXTERN VALUE rb_mFileTest
VALUE rb_rescue(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*r_proc)(ANYARGS), VALUE data2)
#define rb_intern_str(string)
static int rb_type(VALUE obj)
static VALUE rb_ulong2num_inline(unsigned long v)
int rb_block_given_p(void)
VALUE rb_yield_splat(VALUE)
VALUE rb_funcallv(VALUE, ID, int, const VALUE *)
Calls a method.
void rb_free_tmp_buffer(volatile VALUE *store)
const rb_data_type_t * parent
int ruby_safe_level_4_warning(void)
VALUE rb_eval_string_protect(const char *, int *)
Evaluates the given string in an isolated binding.
RUBY_EXTERN VALUE rb_mKernel
VALUE rb_syserr_new(int n, const char *mesg)
RUBY_EXTERN VALUE rb_cRational
static VALUE rb_obj_write(VALUE a, VALUE *slot, VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line))
int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type)
RUBY_EXTERN VALUE rb_cHash
VALUE rb_yield_block(VALUE, VALUE, int, const VALUE *, VALUE)
RUBY_EXTERN VALUE rb_cMethod
void rb_gvar_val_marker(VALUE *var)
char ruby_check_sizeof_voidp[SIZEOF_VOIDP==sizeof(void *)?1:-1]
int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap)
short rb_num2short(VALUE)
void rb_define_const(VALUE, const char *, VALUE)
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
void rb_sys_fail_str(VALUE mesg)
void rb_gvar_readonly_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
void rb_check_type(VALUE x, int t)
void rb_gc_unregister_address(VALUE *)
static long rb_num2long_inline(VALUE x)
VALUE rb_call_super(int, const VALUE *)
char ary[RSTRING_EMBED_LEN_MAX+1]
void rb_gvar_var_marker(VALUE *var)
void rb_mod_syserr_fail_str(VALUE mod, int e, VALUE mesg)
static VALUE rb_obj_wb_unprotect(VALUE x, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line))
void ruby_stop(int ex)
Calls ruby_cleanup() and exits the process.
void rb_throw_obj(VALUE tag, VALUE value)
void * ruby_process_options(int, char **)
VALUE rb_eval_string(const char *)
Evaluates the given string in an isolated binding.
void ruby_set_script_name(VALUE name)
Sets the current script name to this value.
static unsigned long rb_num2ulong_inline(VALUE x)
VALUE rb_data_object_alloc(VALUE, void *, RUBY_DATA_FUNC, RUBY_DATA_FUNC)
VALUE rb_obj_hide(VALUE obj)
RUBY_EXTERN VALUE rb_cInteger
VALUE rb_newobj_of(VALUE, VALUE)
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for module.
union RString::@95::@96::@97 aux
int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n)
long rb_fix2int(VALUE val)
RUBY_EXTERN VALUE rb_cFixnum
rb_block_call(enumerable, id_each, 0, 0, chunk_ii, arg)
void rb_fatal(const char *fmt,...)
void ruby_prog_init(void)
Defines built-in variables.
VALUE rb_eSystemCallError
#define RSTRING_EMBED_LEN_MAX
void rb_gc_register_mark_object(VALUE)
#define RUBY_SYMBOL_EXPORT_END
unsigned short rb_num2ushort(VALUE)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
VALUE rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *gvar)
char * rb_string_value_cstr(volatile VALUE *)
RUBY_EXTERN VALUE rb_cUnboundMethod
static char rb_num2char_inline(VALUE x)
SIGNED_VALUE rb_num2long(VALUE)
#define RBIGNUM_EMBED_LEN_MAX
#define FL_TEST_RAW(x, f)
RUBY_EXTERN VALUE rb_mProcess
int rb_remove_event_hook(rb_event_hook_func_t func)
union RArray::@98::@99::@100 aux
void rb_set_safe_level_force(int)
void rb_readwrite_sys_fail(int writable, const char *mesg)
RUBY_EXTERN VALUE rb_cCont
void rb_extend_object(VALUE obj, VALUE module)
#define RUBY_SYMBOL_EXPORT_BEGIN
void rb_mod_syserr_fail(VALUE mod, int e, const char *mesg)
void rb_bug_errno(const char *mesg, int errno_arg)
VALUE rb_gvar_getter_t(ID id, void *data, struct rb_global_variable *gvar)
VALUE rb_rescue2(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*r_proc)(ANYARGS), VALUE data2,...)
char ruby_check_sizeof_int[SIZEOF_INT==sizeof(int)?1:-1]
RUBY_EXTERN VALUE rb_stdin
void ruby_init_stack(volatile VALUE *)
RUBY_EXTERN VALUE rb_eMathDomainError
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
void rb_sys_fail(const char *mesg)
BDIGIT ary[RBIGNUM_EMBED_LEN_MAX]
RUBY_EXTERN VALUE rb_cString
VALUE ary[ROBJECT_EMBED_LEN_MAX]
void rb_glob(const char *path, void(*func)(const char *, VALUE, void *), VALUE arg)
VALUE rb_define_module_under(VALUE outer, const char *name)
VALUE rb_str_export_locale(VALUE)
#define RSTRUCT_EMBED_LEN_MAX
void rb_iter_break_value(VALUE val)
RUBY_EXTERN VALUE rb_cFile
const char * rb_class2name(VALUE)
RUBY_EXTERN VALUE rb_stderr
void rb_gc_register_address(VALUE *)
VALUE rb_funcallv_public(VALUE, ID, int, const VALUE *)
Calls a method.
void * rb_alloc_tmp_buffer(volatile VALUE *store, long len) RUBY_ATTR_ALLOC_SIZE((2))
void rb_mod_sys_fail_str(VALUE mod, VALUE mesg)
void rb_insecure_operation(void)
void ruby_set_stack_size(size_t)
static VALUE rb_obj_written(VALUE a, RB_UNUSED_VAR(VALUE oldv), VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line))
static VALUE rb_int2num_inline(int v)
void rb_gc_writebarrier_unprotect_promoted(VALUE obj)
const VALUE ary[RSTRUCT_EMBED_LEN_MAX]
long rb_num2int(VALUE val)
VALUE rb_float_new_in_heap(double)
void rb_secure_update(VALUE)
#define RUBY_ATTR_ALLOC_SIZE(params)
void * rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type)
void ruby_script(const char *name)
Sets the current script name to this value.
void rb_define_attr(VALUE klass, const char *name, int read, int write)
Defines (a) public accessor method(s) for an attribute.
short rb_fix2short(VALUE)
#define ROBJECT_EMBED_LEN_MAX
void rb_set_errinfo(VALUE err)
void rb_mod_sys_fail(VALUE mod, const char *mesg)
void ruby_sig_finalize(void)
RUBY_EXTERN VALUE rb_cClass
void rb_set_safe_level(int)
void rb_syserr_fail_str(int e, VALUE mesg)
void rb_compile_warning(const char *file, int line, const char *fmt,...)
RUBY_EXTERN VALUE rb_cObject
void ruby_init_loadpath(void)
static int rb_special_const_p(VALUE obj)
const char * wrap_struct_name
void ruby_set_argv(int, char **)
void rb_check_safe_str(VALUE x)
VALUE rb_uint2inum(VALUE n)
void rb_define_variable(const char *, VALUE *)
VALUE rb_num2ulong(VALUE)
void rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
#define RARRAY_EMBED_LEN_MAX
int ruby_brace_glob(const char *str, int flags, ruby_glob_func *func, VALUE arg)
void rb_notimplement(void)
void rb_define_virtual_variable(const char *, VALUE(*)(ANYARGS), void(*)(ANYARGS))
VALUE rb_int2big(SIGNED_VALUE n)
unsigned short rb_fix2ushort(VALUE)
VALUE * rb_ruby_verbose_ptr(void)
int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent)
int st_locale_insensitive_strcasecmp(const char *s1, const char *s2)
RUBY_EXTERN VALUE rb_cProc
const char * rb_id2name(ID id)
void rb_gc_writebarrier(VALUE a, VALUE b)
#define ruby_native_thread_p()
void rb_global_variable(VALUE *)
VALUE rb_int2inum(SIGNED_VALUE n)
RUBY_EXTERN VALUE rb_cRandom
char ruby_check_sizeof_long[SIZEOF_LONG==sizeof(long)?1:-1]
RUBY_EXTERN VALUE rb_eEOFError
void rb_warning(const char *fmt,...)
VALUE rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *)
#define SPECIAL_CONST_P(x)
VALUE rb_define_module(const char *name)
RUBY_EXTERN VALUE rb_cFalseClass
volatile VALUE * rb_gc_guarded_ptr(volatile VALUE *ptr)
return rb_yield_values(2, rb_enum_values_pack(argc, argv), INT2NUM(n))
ID rb_intern2(const char *name, long len)
RUBY_EXTERN VALUE rb_cData
void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
#define rb_float_value(v)
VALUE rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar)
RUBY_EXTERN VALUE rb_eFloatDomainError
RUBY_EXTERN VALUE rb_cRange
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
struct RObject::@93::@94 heap
void rb_warn(const char *fmt,...)
RUBY_EXTERN VALUE rb_cNumeric
RUBY_EXTERN VALUE rb_cThread
int ruby_executable_node(void *n, int *status)
Checks the return value of ruby_options().
void rb_sys_warning(const char *fmt,...)
VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type)
RUBY_EXTERN VALUE rb_eRegexpError
void rb_obj_infect(VALUE, VALUE)
struct method_table_wrapper * m_tbl_wrapper
RUBY_EXTERN VALUE rb_cStruct