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)) 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))) 1794 unsigned long ruby_strtoul(
const char *str,
char **endptr,
int base);
1795 #define STRTOUL(str, endptr, base) (ruby_strtoul((str), (endptr), (base))) 1797 #define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();} 1800 int ruby_vsnprintf(
char *str,
size_t n,
char const *fmt, va_list ap);
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) RUBY_EXTERN VALUE rb_cString
void rb_define_global_const(const char *, VALUE)
unsigned long ruby_strtoul(const char *str, char **endptr, int base)
int ruby_run_node(void *n)
Runs the given compiled source and exits this process.
void(* RUBY_DATA_FUNC)(void *)
void rb_glob(const char *, void(*)(const char *, VALUE, void *), VALUE)
RUBY_EXTERN VALUE rb_mProcess
ID rb_check_id(volatile VALUE *)
Returns ID for the given name if it is interned already, or 0.
RUBY_EXTERN VALUE rb_eRangeError
RUBY_EXTERN VALUE rb_cData
int ruby_cleanup(volatile int)
Destructs the VM.
const VALUE ary[RARRAY_EMBED_LEN_MAX]
RUBY_EXTERN VALUE rb_cFalseClass
RUBY_EXTERN VALUE rb_cFloat
void rb_bug(const char *fmt,...)
char * rb_string_value_ptr(volatile VALUE *)
VALUE(* rb_block_call_func_t)(ANYARGS)
int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n)
void rb_gvar_undef_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
struct RObject::@107::@108 heap
void rb_free_tmp_buffer(volatile VALUE *store)
void rb_syserr_fail(int e, const char *mesg)
void ruby_finalize(void)
Runs the VM finalization processes.
void rb_define_virtual_variable(const char *, VALUE(*)(ANYARGS), void(*)(ANYARGS))
VALUE rb_yield_values(int n,...)
ID rb_intern2(const char *, long)
void rb_global_variable(VALUE *)
int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap)
void rb_throw(const char *tag, VALUE val)
RUBY_EXTERN VALUE rb_cUnboundMethod
size_t ruby_stack_length(VALUE **)
SIGNED_VALUE rb_num2long(VALUE)
struct st_table * iv_index_tbl
VALUE rb_str_export(VALUE)
void * ruby_options(int argc, char **argv)
Processes command line arguments and compiles the Ruby source to execute.
int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent)
void ruby_show_version(void)
Prints the version information of the CRuby interpreter to stdout.
int rb_remove_event_hook(rb_event_hook_func_t func)
RUBY_EXTERN VALUE rb_eNoMethodError
void rb_gc_register_address(VALUE *)
RUBY_EXTERN VALUE rb_cRandom
int ruby_glob(const char *, int, ruby_glob_func *, VALUE)
void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
VALUE rb_iterate(VALUE(*)(VALUE), VALUE, VALUE(*)(ANYARGS), VALUE)
struct RArray::@112::@113 heap
RUBY_EXTERN VALUE rb_stdin
static VALUE rb_uint2num_inline(unsigned int v)
VALUE rb_catch_obj(VALUE, VALUE(*)(ANYARGS), VALUE)
int ruby_exec_node(void *n)
Runs the given compiled source.
void ruby_show_copyright(void)
Prints the copyright notice of the CRuby interpreter to stdout and exits this process successfully...
void rb_gc_writebarrier_unprotect_promoted(VALUE obj)
SSL_METHOD *(* func)(void)
static short rb_num2short_inline(VALUE x)
RUBY_EXTERN VALUE rb_eMathDomainError
char ruby_check_sizeof_int[SIZEOF_INT==sizeof(int) ? 1 :-1]
short rb_fix2short(VALUE)
RUBY_EXTERN VALUE rb_eInterrupt
ID rb_intern(const char *)
RUBY_EXTERN VALUE rb_eThreadError
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
VALUE rb_iv_set(VALUE, const char *, VALUE)
VALUE rb_iv_get(VALUE, const char *)
VALUE rb_define_class_under(VALUE, const char *, VALUE)
Defines a class under the namespace of outer.
void rb_raise(VALUE exc, const char *fmt,...)
RUBY_EXTERN VALUE rb_cDir
union RString::@109::@110::@111 aux
VALUE rb_funcall_with_block(VALUE, ID, int, const VALUE *, VALUE)
const rb_data_type_t * parent
void rb_compile_warn(const char *file, int line, const char *fmt,...)
void * rb_check_typeddata(VALUE, const rb_data_type_t *)
VALUE rb_float_new(double)
struct RBignum::@118::@119 heap
void rb_include_module(VALUE, VALUE)
VALUE rb_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE)
VALUE rb_syserr_new_str(int n, VALUE arg)
int ruby_snprintf(char *str, size_t n, char const *fmt,...)
void rb_define_global_function(const char *, VALUE(*)(ANYARGS), int)
Defines a global function.
RUBY_EXTERN VALUE rb_mMath
VALUE rb_rescue(VALUE(*)(ANYARGS), VALUE, VALUE(*)(ANYARGS), VALUE)
RUBY_EXTERN VALUE rb_cProc
void rb_gc_register_mark_object(VALUE)
VALUE rb_data_object_alloc(VALUE, void *, RUBY_DATA_FUNC, RUBY_DATA_FUNC)
int ruby_native_thread_p(void)
#define RUBY_ATTR_ALLOC_SIZE(params)
RUBY_EXTERN VALUE rb_cMethod
void rb_undef_method(VALUE, const char *)
RUBY_EXTERN VALUE rb_eZeroDivError
VALUE rb_string_value(volatile VALUE *)
int ruby_stack_check(void)
const char * rb_obj_classname(VALUE)
static VALUE rb_class_of(VALUE obj)
VALUE rb_gv_set(const char *, VALUE)
void rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
void ruby_incpush(const char *)
RUBY_EXTERN VALUE rb_cComplex
RUBY_EXTERN VALUE rb_eIndexError
RUBY_EXTERN VALUE rb_cFile
static VALUE rb_long2num_inline(long v)
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)
volatile VALUE * rb_gc_guarded_ptr(volatile VALUE *ptr)
void rb_gc_unprotect_logging(void *objptr, const char *filename, int line)
RUBY_EXTERN VALUE rb_eEncCompatError
void rb_prepend_module(VALUE, VALUE)
void rb_set_errinfo(VALUE)
RUBY_EXTERN VALUE rb_cCont
int rb_block_given_p(void)
VALUE rb_gv_get(const char *)
void rb_set_safe_level(int)
RUBY_EXTERN VALUE rb_eEncodingError
VALUE rb_require(const char *)
RUBY_EXTERN VALUE rb_mWaitReadable
VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
int st_locale_insensitive_strcasecmp(const char *s1, const char *s2)
VALUE rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *)
RUBY_EXTERN VALUE rb_cBinding
static int rb_type(VALUE obj)
static VALUE rb_ulong2num_inline(unsigned long v)
int ruby_brace_glob(const char *, int, ruby_glob_func *, VALUE)
RUBY_EXTERN VALUE rb_cObject
RUBY_EXTERN VALUE rb_cNameErrorMesg
char * rb_string_value_cstr(volatile VALUE *)
RUBY_EXTERN VALUE rb_cArray
void rb_gc_writebarrier(VALUE a, VALUE b)
VALUE rb_eval_string_protect(const char *, int *)
Evaluates the given string in an isolated binding.
void rb_obj_infect(VALUE, VALUE)
int ruby_safe_level_4_warning(void)
RUBY_EXTERN VALUE rb_eLoadError
static VALUE rb_obj_write(VALUE a, VALUE *slot, VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line))
RUBY_EXTERN VALUE rb_cStat
RUBY_EXTERN VALUE rb_cBasicObject
RUBY_EXTERN VALUE rb_cRange
RUBY_EXTERN VALUE rb_eFatal
RUBY_EXTERN VALUE rb_mKernel
void rb_secure_update(VALUE)
VALUE rb_define_class(const char *, VALUE)
Defines a top-level class.
RUBY_EXTERN VALUE rb_cTrueClass
RUBY_EXTERN VALUE rb_eStopIteration
void rb_define_const(VALUE, const char *, VALUE)
#define PRINTF_ARGS(decl, string_index, first_to_check)
void rb_sys_fail_str(VALUE mesg)
VALUE rb_eval_string(const char *)
Evaluates the given string in an isolated binding.
RUBY_EXTERN VALUE rb_eLocalJumpError
static long rb_num2long_inline(VALUE x)
void(* rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass)
char ary[RSTRING_EMBED_LEN_MAX+1]
RUBY_EXTERN VALUE rb_eKeyError
RUBY_EXTERN VALUE rb_eTypeError
RUBY_EXTERN VALUE rb_cModule
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))
size_t(* dsize)(const void *)
void ruby_stop(int ex)
Calls ruby_cleanup() and exits the process.
VALUE rb_obj_reveal(VALUE obj, VALUE klass)
VALUE rb_get_path_no_checksafe(VALUE)
void rb_throw_obj(VALUE tag, VALUE value)
RUBY_EXTERN VALUE rb_eNameError
VALUE rb_float_new_in_heap(double)
VALUE rb_gvar_getter_t(ID id, void *data, struct rb_global_variable *gvar)
RUBY_EXTERN VALUE rb_cEnumerator
VALUE rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *gvar)
RUBY_EXTERN VALUE rb_eRegexpError
void ruby_set_script_name(VALUE name)
Sets the current script name to this value.
static unsigned long rb_num2ulong_inline(VALUE x)
void rb_define_alias(VALUE, const char *, const char *)
Defines an alias of a method.
RUBY_EXTERN VALUE rb_cRegexp
struct re_pattern_buffer * ptr
VALUE rb_int2big(SIGNED_VALUE)
void rb_define_module_function(VALUE, const char *, VALUE(*)(ANYARGS), int)
Defines a module function for module.
VALUE rb_funcallv_public(VALUE, ID, int, const VALUE *)
Calls a method.
void rb_gvar_var_marker(VALUE *var)
void rb_define_readonly_variable(const char *, VALUE *)
RUBY_EXTERN VALUE rb_mEnumerable
RUBY_EXTERN VALUE rb_cEncoding
long rb_fix2int(VALUE val)
RUBY_EXTERN VALUE rb_cMatch
void rb_fatal(const char *fmt,...)
void ruby_prog_init(void)
Defines built-in variables.
#define RSTRING_EMBED_LEN_MAX
#define RUBY_SYMBOL_EXPORT_END
RUBY_EXTERN VALUE rb_mWaitWritable
short rb_num2short(VALUE)
int ruby_glob_func(const char *, VALUE, void *)
VALUE rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *gvar)
int rb_scan_args(int, const VALUE *, const char *,...)
RUBY_EXTERN VALUE rb_eArgError
static char rb_num2char_inline(VALUE x)
VALUE rb_catch(const char *, VALUE(*)(ANYARGS), VALUE)
#define RBIGNUM_EMBED_LEN_MAX
unsigned short rb_fix2ushort(VALUE)
RUBY_EXTERN VALUE rb_eNotImpError
VALUE rb_str_export_locale(VALUE)
#define FL_TEST_RAW(x, f)
VALUE * rb_ruby_debug_ptr(void)
RUBY_EXTERN VALUE rb_cThread
RUBY_EXTERN VALUE rb_eSecurityError
void rb_readwrite_sys_fail(int writable, const char *mesg)
const char * rb_class2name(VALUE)
VALUE rb_obj_hide(VALUE obj)
RUBY_EXTERN VALUE rb_cInteger
#define RUBY_SYMBOL_EXPORT_BEGIN
ID rb_intern_str(VALUE str)
void rb_mod_syserr_fail(VALUE mod, int e, const char *mesg)
void rb_bug_errno(const char *mesg, int errno_arg)
VALUE rb_uint2inum(VALUE)
VALUE rb_call_super(int, const VALUE *)
void ruby_init_stack(volatile VALUE *)
const char * rb_id2name(ID)
RUBY_EXTERN VALUE rb_mErrno
RUBY_EXTERN VALUE rb_cNumeric
RUBY_EXTERN VALUE rb_cClass
void rb_sys_fail(const char *mesg)
RUBY_EXTERN VALUE rb_eScriptError
RUBY_EXTERN VALUE rb_mFileTest
BDIGIT ary[RBIGNUM_EMBED_LEN_MAX]
VALUE ary[ROBJECT_EMBED_LEN_MAX]
void rb_define_hooked_variable(const char *, VALUE *, VALUE(*)(ANYARGS), void(*)(ANYARGS))
int rb_typeddata_is_kind_of(VALUE, const rb_data_type_t *)
VALUE rb_define_module_under(VALUE, const char *)
void rb_set_safe_level_force(int)
#define RSTRUCT_EMBED_LEN_MAX
void rb_iter_break_value(VALUE val)
VALUE rb_syserr_new(int, const char *)
void rb_extend_object(VALUE, VALUE)
VALUE rb_equal(VALUE, VALUE)
void rb_mod_sys_fail_str(VALUE mod, VALUE mesg)
VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type)
void rb_insecure_operation(void)
RUBY_EXTERN VALUE rb_stderr
VALUE rb_funcallv(VALUE, ID, int, const VALUE *)
Calls a method.
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))
VALUE rb_int2inum(SIGNED_VALUE)
VALUE rb_yield_values2(int n, const VALUE *argv)
VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE *)
void rb_gc_unregister_address(VALUE *)
struct RStruct::@116::@117 heap
static VALUE rb_int2num_inline(int v)
VALUE rb_newobj_of(VALUE, VALUE)
const VALUE ary[RSTRUCT_EMBED_LEN_MAX]
long rb_num2int(VALUE val)
RUBY_EXTERN VALUE rb_eSyntaxError
RUBY_EXTERN VALUE rb_cStruct
void * ruby_process_options(int, char **)
void ruby_script(const char *name)
Sets the current script name to this value.
void rb_define_attr(VALUE, const char *, int, int)
Defines (a) public accessor method(s) for an attribute.
#define ROBJECT_EMBED_LEN_MAX
void rb_mod_sys_fail(VALUE mod, const char *mesg)
RUBY_EXTERN VALUE rb_cBignum
unsigned long rb_event_flag_t
void ruby_sig_finalize(void)
void rb_syserr_fail_str(int e, VALUE mesg)
void rb_compile_warning(const char *file, int line, const char *fmt,...)
void ruby_init_loadpath(void)
void rb_gvar_readonly_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
VALUE rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar)
static int rb_special_const_p(VALUE obj)
void ruby_set_argv(int, char **)
RUBY_EXTERN VALUE rb_eSysStackError
RUBY_EXTERN VALUE rb_eRuntimeError
void rb_gvar_marker_t(VALUE *var)
VALUE rb_rescue2(VALUE(*)(ANYARGS), VALUE, VALUE(*)(ANYARGS), VALUE,...)
void rb_check_safe_str(VALUE x)
struct method_table_wrapper * m_tbl_wrapper
void rb_check_safe_obj(VALUE)
VALUE rb_ensure(VALUE(*)(ANYARGS), VALUE, VALUE(*)(ANYARGS), VALUE)
void rb_define_variable(const char *, VALUE *)
void rb_check_type(VALUE, int)
RUBY_EXTERN VALUE rb_eException
#define RARRAY_EMBED_LEN_MAX
union RArray::@112::@113::@114 aux
void rb_notimplement(void)
RUBY_EXTERN VALUE rb_eSystemExit
VALUE rb_yield_splat(VALUE)
VALUE rb_yield_block(VALUE, VALUE, int, const VALUE *, VALUE)
RUBY_EXTERN VALUE rb_eNoMemError
RUBY_EXTERN VALUE rb_cRational
RUBY_EXTERN VALUE rb_eIOError
RUBY_EXTERN VALUE rb_eStandardError
RUBY_EXTERN VALUE rb_eSystemCallError
RUBY_EXTERN VALUE rb_cHash
struct RString::@109::@110 heap
void ruby_sysinit(int *argc, char ***argv)
Initializes the process for ruby(1).
RUBY_SYMBOL_EXPORT_BEGIN void * alloca()
RUBY_EXTERN VALUE rb_eFloatDomainError
char ruby_check_sizeof_voidp[SIZEOF_VOIDP==sizeof(void *) ? 1 :-1]
VALUE rb_eval_string_wrap(const char *, int *)
Evaluates the given string under a module binding in an isolated binding.
const rb_data_type_t * type
VALUE rb_num2ulong(VALUE)
void rb_warning(const char *fmt,...)
RUBY_EXTERN VALUE rb_eEOFError
const char * wrap_struct_name
RUBY_EXTERN VALUE rb_stdout
VALUE * rb_ruby_verbose_ptr(void)
#define SPECIAL_CONST_P(x)
VALUE rb_define_module(const char *)
RUBY_EXTERN VALUE rb_cSymbol
RUBY_EXTERN VALUE rb_mComparable
double rb_float_value(VALUE)
void rb_gvar_setter_t(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
RUBY_EXTERN VALUE rb_cFixnum
RUBY_EXTERN VALUE rb_cTime
unsigned short rb_num2ushort(VALUE)
void rb_define_method(VALUE, const char *, VALUE(*)(ANYARGS), int)
void rb_warn(const char *fmt,...)
VALUE rb_str_to_str(VALUE)
void rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar)
RUBY_EXTERN VALUE rb_eSignal
RUBY_EXTERN VALUE rb_cNilClass
void * rb_alloc_tmp_buffer(volatile VALUE *store, long len) RUBY_ATTR_ALLOC_SIZE((2))
int ruby_executable_node(void *n, int *status)
Checks the return value of ruby_options().
void rb_sys_warning(const char *fmt,...)
void rb_gvar_val_marker(VALUE *var)
char ruby_check_sizeof_long[SIZEOF_LONG==sizeof(long) ? 1 :-1]
void rb_gvar_undef_marker(VALUE *var)