Ruby
2.7.1p83(2020-03-31revisiona0c7c23c9cec0d0ffcba012279cd652d28ad5bf3)
|
Go to the documentation of this file.
17 #if defined(__cplusplus)
24 #include "ruby/config.h"
26 #include RUBY_EXTCONF_H
34 #if defined(MJIT_HEADER) && defined(_WIN32) && defined(__GNUC__)
36 # define RUBY_EXTERN extern __declspec(dllimport)
39 #if defined(__cplusplus)
42 # undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
43 # undef HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P
44 #elif GCC_VERSION_BEFORE(4,8,6)
45 # undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
50 # define ASSUME(x) (RB_LIKELY(!!(x)) ? (void)0 : UNREACHABLE)
52 # define ASSUME(x) ((void)(x))
55 #ifndef UNREACHABLE_RETURN
57 # define UNREACHABLE_RETURN(val) UNREACHABLE
59 # define UNREACHABLE_RETURN(val) return (val)
63 # define UNREACHABLE ((void)0)
66 #define RUBY_MACRO_SELECT(base, n) TOKEN_PASTE(base, n)
68 #ifdef HAVE_INTRINSICS_H
69 # include <intrinsics.h>
79 # define alloca __builtin_alloca
95 #if defined HAVE_UINTPTR_T && 0
98 # define SIGNED_VALUE intptr_t
99 # define SIZEOF_VALUE SIZEOF_UINTPTR_T
100 # undef PRI_VALUE_PREFIX
101 #elif SIZEOF_LONG == SIZEOF_VOIDP
103 typedef unsigned long ID;
104 # define SIGNED_VALUE long
105 # define SIZEOF_VALUE SIZEOF_LONG
106 # define PRI_VALUE_PREFIX "l"
107 #elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
110 # define SIGNED_VALUE LONG_LONG
111 # define LONG_LONG_VALUE 1
112 # define SIZEOF_VALUE SIZEOF_LONG_LONG
113 # define PRI_VALUE_PREFIX PRI_LL_PREFIX
115 # error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<----
120 #ifdef HAVE_LONG_LONG
125 #ifndef PRI_INT_PREFIX
126 #define PRI_INT_PREFIX ""
128 #ifndef PRI_LONG_PREFIX
129 #define PRI_LONG_PREFIX "l"
131 #ifndef PRI_SHORT_PREFIX
132 #define PRI_SHORT_PREFIX "h"
135 #ifndef PRI_64_PREFIX
137 #define PRI_64_PREFIX PRI_LONG_PREFIX
138 #elif SIZEOF_LONG_LONG == 8
139 #define PRI_64_PREFIX PRI_LL_PREFIX
144 #define PRIdPTR PRI_PTR_PREFIX"d"
145 #define PRIiPTR PRI_PTR_PREFIX"i"
146 #define PRIoPTR PRI_PTR_PREFIX"o"
147 #define PRIuPTR PRI_PTR_PREFIX"u"
148 #define PRIxPTR PRI_PTR_PREFIX"x"
149 #define PRIXPTR PRI_PTR_PREFIX"X"
152 #define RUBY_PRI_VALUE_MARK "\v"
153 #if defined PRIdPTR && !defined PRI_VALUE_PREFIX
154 #define PRIdVALUE PRIdPTR
155 #define PRIoVALUE PRIoPTR
156 #define PRIuVALUE PRIuPTR
157 #define PRIxVALUE PRIxPTR
158 #define PRIXVALUE PRIXPTR
159 #define PRIsVALUE PRIiPTR"" RUBY_PRI_VALUE_MARK
161 #define PRIdVALUE PRI_VALUE_PREFIX"d"
162 #define PRIoVALUE PRI_VALUE_PREFIX"o"
163 #define PRIuVALUE PRI_VALUE_PREFIX"u"
164 #define PRIxVALUE PRI_VALUE_PREFIX"x"
165 #define PRIXVALUE PRI_VALUE_PREFIX"X"
166 #define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
168 #ifndef PRI_VALUE_PREFIX
169 # define PRI_VALUE_PREFIX ""
172 #ifndef PRI_TIMET_PREFIX
173 # if SIZEOF_TIME_T == SIZEOF_INT
174 # define PRI_TIMET_PREFIX
175 # elif SIZEOF_TIME_T == SIZEOF_LONG
176 # define PRI_TIMET_PREFIX "l"
177 # elif SIZEOF_TIME_T == SIZEOF_LONG_LONG
178 # define PRI_TIMET_PREFIX PRI_LL_PREFIX
182 #if defined PRI_PTRDIFF_PREFIX
183 #elif SIZEOF_PTRDIFF_T == SIZEOF_INT
184 # define PRI_PTRDIFF_PREFIX ""
185 #elif SIZEOF_PTRDIFF_T == SIZEOF_LONG
186 # define PRI_PTRDIFF_PREFIX "l"
187 #elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG
188 # define PRI_PTRDIFF_PREFIX PRI_LL_PREFIX
190 #define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
191 #define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
192 #define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
193 #define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
194 #define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
195 #define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
197 #if defined PRI_SIZE_PREFIX
198 #elif SIZEOF_SIZE_T == SIZEOF_INT
199 # define PRI_SIZE_PREFIX ""
200 #elif SIZEOF_SIZE_T == SIZEOF_LONG
201 # define PRI_SIZE_PREFIX "l"
202 #elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
203 # define PRI_SIZE_PREFIX PRI_LL_PREFIX
205 #define PRIdSIZE PRI_SIZE_PREFIX"d"
206 #define PRIiSIZE PRI_SIZE_PREFIX"i"
207 #define PRIoSIZE PRI_SIZE_PREFIX"o"
208 #define PRIuSIZE PRI_SIZE_PREFIX"u"
209 #define PRIxSIZE PRI_SIZE_PREFIX"x"
210 #define PRIXSIZE PRI_SIZE_PREFIX"X"
216 # ifdef HAVE_LIMITS_H
220 # define LONG_MAX 2147483647
224 # define LONG_MIN (-LONG_MAX-1)
231 #ifdef HAVE_LONG_LONG
233 # ifdef LONG_LONG_MAX
234 # define LLONG_MAX LONG_LONG_MAX
237 # define LLONG_MAX _I64_MAX
240 # define LLONG_MAX 9223372036854775807LL
245 # ifdef LONG_LONG_MIN
246 # define LLONG_MIN LONG_LONG_MIN
249 # define LLONG_MIN _I64_MIN
251 # define LLONG_MIN (-LLONG_MAX-1)
257 #define RUBY_FIXNUM_MAX (LONG_MAX>>1)
258 #define RUBY_FIXNUM_MIN RSHIFT((long)LONG_MIN,1)
259 #define FIXNUM_MAX RUBY_FIXNUM_MAX
260 #define FIXNUM_MIN RUBY_FIXNUM_MIN
262 #define RB_INT2FIX(i) (((VALUE)(i))<<1 | RUBY_FIXNUM_FLAG)
263 #define INT2FIX(i) RB_INT2FIX(i)
264 #define RB_LONG2FIX(i) RB_INT2FIX(i)
265 #define LONG2FIX(i) RB_INT2FIX(i)
266 #define rb_fix_new(v) RB_INT2FIX(v)
269 #define rb_int_new(v) rb_int2inum(v)
272 #define rb_uint_new(v) rb_uint2inum(v)
274 #ifdef HAVE_LONG_LONG
276 #define LL2NUM(v) rb_ll2inum(v)
278 #define ULL2NUM(v) rb_ull2inum(v)
282 #if SIZEOF_OFF_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
283 # define OFFT2NUM(v) LL2NUM(v)
284 #elif SIZEOF_OFF_T == SIZEOF_LONG
285 # define OFFT2NUM(v) LONG2NUM(v)
287 # define OFFT2NUM(v) INT2NUM(v)
291 #if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
292 # define SIZET2NUM(v) ULL2NUM(v)
293 # define SSIZET2NUM(v) LL2NUM(v)
294 #elif SIZEOF_SIZE_T == SIZEOF_LONG
295 # define SIZET2NUM(v) ULONG2NUM(v)
296 # define SSIZET2NUM(v) LONG2NUM(v)
298 # define SIZET2NUM(v) UINT2NUM(v)
299 # define SSIZET2NUM(v) INT2NUM(v)
303 # if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
304 # define SIZE_MAX ULLONG_MAX
305 # define SIZE_MIN ULLONG_MIN
306 # elif SIZEOF_SIZE_T == SIZEOF_LONG
307 # define SIZE_MAX ULONG_MAX
308 # define SIZE_MIN ULONG_MIN
309 # elif SIZEOF_SIZE_T == SIZEOF_INT
310 # define SIZE_MAX UINT_MAX
311 # define SIZE_MIN UINT_MIN
313 # define SIZE_MAX USHRT_MAX
314 # define SIZE_MIN USHRT_MIN
319 # if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
320 # define SSIZE_MAX LLONG_MAX
321 # define SSIZE_MIN LLONG_MIN
322 # elif SIZEOF_SIZE_T == SIZEOF_LONG
323 # define SSIZE_MAX LONG_MAX
324 # define SSIZE_MIN LONG_MIN
325 # elif SIZEOF_SIZE_T == SIZEOF_INT
326 # define SSIZE_MAX INT_MAX
327 # define SSIZE_MIN INT_MIN
329 # define SSIZE_MAX SHRT_MAX
330 # define SSIZE_MIN SHRT_MIN
334 #if SIZEOF_INT < SIZEOF_VALUE
338 #if SIZEOF_INT < SIZEOF_LONG
340 rb_long2int_inline(
long n)
348 #define rb_long2int(n) rb_long2int_inline(n)
350 #define rb_long2int(n) ((int)(n))
354 #define PIDT2NUM(v) LONG2NUM(v)
357 #define NUM2PIDT(v) NUM2LONG(v)
360 #define UIDT2NUM(v) LONG2NUM(v)
363 #define NUM2UIDT(v) NUM2LONG(v)
366 #define GIDT2NUM(v) LONG2NUM(v)
369 #define NUM2GIDT(v) NUM2LONG(v)
372 #define NUM2MODET(v) NUM2INT(v)
375 #define MODET2NUM(v) INT2NUM(v)
378 #define RB_FIX2LONG(x) ((long)RSHIFT((SIGNED_VALUE)(x),1))
384 #define RB_FIX2ULONG(x) ((unsigned long)RB_FIX2LONG(x))
385 static inline unsigned long
386 rb_fix2ulong(
VALUE x)
390 #define RB_FIXNUM_P(f) (((int)(SIGNED_VALUE)(f))&RUBY_FIXNUM_FLAG)
391 #define RB_POSFIXABLE(f) ((f) < RUBY_FIXNUM_MAX+1)
392 #define RB_NEGFIXABLE(f) ((f) >= RUBY_FIXNUM_MIN)
393 #define RB_FIXABLE(f) (RB_POSFIXABLE(f) && RB_NEGFIXABLE(f))
394 #define FIX2LONG(x) RB_FIX2LONG(x)
395 #define FIX2ULONG(x) RB_FIX2ULONG(x)
396 #define FIXNUM_P(f) RB_FIXNUM_P(f)
397 #define POSFIXABLE(f) RB_POSFIXABLE(f)
398 #define NEGFIXABLE(f) RB_NEGFIXABLE(f)
399 #define FIXABLE(f) RB_FIXABLE(f)
401 #define RB_IMMEDIATE_P(x) ((VALUE)(x) & RUBY_IMMEDIATE_MASK)
402 #define IMMEDIATE_P(x) RB_IMMEDIATE_P(x)
406 #define RB_STATIC_SYM_P(x) (((VALUE)(x)&~((~(VALUE)0)<<RUBY_SPECIAL_SHIFT)) == RUBY_SYMBOL_FLAG)
407 #define RB_DYNAMIC_SYM_P(x) (!RB_SPECIAL_CONST_P(x) && RB_BUILTIN_TYPE(x) == (RUBY_T_SYMBOL))
408 #define RB_SYMBOL_P(x) (RB_STATIC_SYM_P(x)||RB_DYNAMIC_SYM_P(x))
409 #define RB_ID2SYM(x) (rb_id2sym(x))
410 #define RB_SYM2ID(x) (rb_sym2id(x))
411 #define STATIC_SYM_P(x) RB_STATIC_SYM_P(x)
412 #define DYNAMIC_SYM_P(x) RB_DYNAMIC_SYM_P(x)
413 #define SYMBOL_P(x) RB_SYMBOL_P(x)
414 #define ID2SYM(x) RB_ID2SYM(x)
415 #define SYM2ID(x) RB_SYM2ID(x)
418 #if SIZEOF_VALUE >= SIZEOF_DOUBLE
426 #define RB_FLONUM_P(x) ((((int)(SIGNED_VALUE)(x))&RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG)
428 #define RB_FLONUM_P(x) 0
430 #define FLONUM_P(x) RB_FLONUM_P(x)
433 #define USE_SYMBOL_AS_METHOD_NAME 1
463 #define RUBY_Qfalse ((VALUE)RUBY_Qfalse)
464 #define RUBY_Qtrue ((VALUE)RUBY_Qtrue)
465 #define RUBY_Qnil ((VALUE)RUBY_Qnil)
466 #define RUBY_Qundef ((VALUE)RUBY_Qundef)
467 #define Qfalse RUBY_Qfalse
468 #define Qtrue RUBY_Qtrue
469 #define Qnil RUBY_Qnil
470 #define Qundef RUBY_Qundef
471 #define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
472 #define FIXNUM_FLAG RUBY_FIXNUM_FLAG
474 #define FLONUM_MASK RUBY_FLONUM_MASK
475 #define FLONUM_FLAG RUBY_FLONUM_FLAG
477 #define SYMBOL_FLAG RUBY_SYMBOL_FLAG
479 #define RB_TEST(v) !(((VALUE)(v) & (VALUE)~RUBY_Qnil) == 0)
480 #define RB_NIL_P(v) !((VALUE)(v) != RUBY_Qnil)
481 #define RTEST(v) RB_TEST(v)
482 #define NIL_P(v) RB_NIL_P(v)
484 #define CLASS_OF(v) rb_class_of((VALUE)(v))
521 #define T_NONE RUBY_T_NONE
522 #define T_NIL RUBY_T_NIL
523 #define T_OBJECT RUBY_T_OBJECT
524 #define T_CLASS RUBY_T_CLASS
525 #define T_ICLASS RUBY_T_ICLASS
526 #define T_MODULE RUBY_T_MODULE
527 #define T_FLOAT RUBY_T_FLOAT
528 #define T_STRING RUBY_T_STRING
529 #define T_REGEXP RUBY_T_REGEXP
530 #define T_ARRAY RUBY_T_ARRAY
531 #define T_HASH RUBY_T_HASH
532 #define T_STRUCT RUBY_T_STRUCT
533 #define T_BIGNUM RUBY_T_BIGNUM
534 #define T_FILE RUBY_T_FILE
535 #define T_FIXNUM RUBY_T_FIXNUM
536 #define T_TRUE RUBY_T_TRUE
537 #define T_FALSE RUBY_T_FALSE
538 #define T_DATA RUBY_T_DATA
539 #define T_MATCH RUBY_T_MATCH
540 #define T_SYMBOL RUBY_T_SYMBOL
541 #define T_RATIONAL RUBY_T_RATIONAL
542 #define T_COMPLEX RUBY_T_COMPLEX
543 #define T_IMEMO RUBY_T_IMEMO
544 #define T_UNDEF RUBY_T_UNDEF
545 #define T_NODE RUBY_T_NODE
546 #define T_ZOMBIE RUBY_T_ZOMBIE
547 #define T_MOVED RUBY_T_MOVED
548 #define T_MASK RUBY_T_MASK
550 #define RB_BUILTIN_TYPE(x) (int)(((struct RBasic*)(x))->flags & RUBY_T_MASK)
551 #define BUILTIN_TYPE(x) RB_BUILTIN_TYPE(x)
553 static inline int rb_type(
VALUE obj);
554 #define TYPE(x) rb_type((VALUE)(x))
556 #define RB_FLOAT_TYPE_P(obj) (\
557 RB_FLONUM_P(obj) || \
558 (!RB_SPECIAL_CONST_P(obj) && RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT))
560 #define RB_TYPE_P(obj, type) ( \
561 ((type) == RUBY_T_FIXNUM) ? RB_FIXNUM_P(obj) : \
562 ((type) == RUBY_T_TRUE) ? ((obj) == RUBY_Qtrue) : \
563 ((type) == RUBY_T_FALSE) ? ((obj) == RUBY_Qfalse) : \
564 ((type) == RUBY_T_NIL) ? ((obj) == RUBY_Qnil) : \
565 ((type) == RUBY_T_UNDEF) ? ((obj) == RUBY_Qundef) : \
566 ((type) == RUBY_T_SYMBOL) ? RB_SYMBOL_P(obj) : \
567 ((type) == RUBY_T_FLOAT) ? RB_FLOAT_TYPE_P(obj) : \
568 (!RB_SPECIAL_CONST_P(obj) && RB_BUILTIN_TYPE(obj) == (type)))
571 #define RB_GC_GUARD(v) \
573 volatile VALUE *rb_gc_guarded_ptr = &(v); \
574 __asm__("" : : "m"(rb_gc_guarded_ptr)); \
577 #elif defined _MSC_VER
578 #pragma optimize("", off)
579 static inline volatile VALUE *rb_gc_guarded_ptr(
volatile VALUE *
ptr) {
return ptr;}
580 #pragma optimize("", on)
581 #define RB_GC_GUARD(v) (*rb_gc_guarded_ptr(&(v)))
584 #define HAVE_RB_GC_GUARDED_PTR_VAL 1
585 #define RB_GC_GUARD(v) (*rb_gc_guarded_ptr_val(&(v),(v)))
589 #define RB_UNUSED_VAR(x) x __attribute__ ((unused))
591 #define RB_UNUSED_VAR(x) x
595 #define Check_Type(v,t) rb_check_type((VALUE)(v),(t))
602 #define StringValue(v) rb_string_value(&(v))
603 #define StringValuePtr(v) rb_string_value_ptr(&(v))
604 #define StringValueCStr(v) rb_string_value_cstr(&(v))
607 #define SafeStringValue(v) StringValue(v)
608 #if GCC_VERSION_SINCE(4,4,0)
610 # define Check_SafeStr(v) rb_check_safe_str((VALUE)(v))
612 # define rb_check_safe_str(x) [<"rb_check_safe_str() is obsolete; use StringValue() instead">]
613 # define Check_SafeStr(v) [<"Check_SafeStr() is obsolete; use StringValue() instead">]
617 #define ExportStringValue(v) do {\
619 (v) = rb_str_export(v);\
624 #define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
627 #define FilePathStringValue(v) ((v) = rb_get_path(v))
630 #define RUBY_SAFE_LEVEL_MAX 1
634 #if GCC_VERSION_SINCE(4,4,0)
638 # define ruby_safe_level_2_warning() ruby_safe_level_2_error()
640 # if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
641 # define RUBY_SAFE_LEVEL_INVALID_P(level) \
643 __builtin_choose_expr(\
644 __builtin_constant_p(level), \
645 ((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level)), 0))
646 # define RUBY_SAFE_LEVEL_CHECK(level, type) \
647 __extension__(__builtin_choose_expr(RUBY_SAFE_LEVEL_INVALID_P(level), ruby_safe_level_2_##type(), (level)))
652 # define RUBY_SAFE_LEVEL_INVALID_P(level) \
653 __extension__(__builtin_constant_p(level) && \
654 ((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level)))
655 # define RUBY_SAFE_LEVEL_CHECK(level, type) \
656 (RUBY_SAFE_LEVEL_INVALID_P(level) ? ruby_safe_level_2_##type() : (level))
658 # define rb_secure(level) rb_secure(RUBY_SAFE_LEVEL_CHECK(level, warning))
659 # define rb_set_safe_level(level) rb_set_safe_level(RUBY_SAFE_LEVEL_CHECK(level, error))
671 rb_num2long_inline(
VALUE x)
678 #define RB_NUM2LONG(x) rb_num2long_inline(x)
679 #define NUM2LONG(x) RB_NUM2LONG(x)
680 static inline unsigned long
681 rb_num2ulong_inline(
VALUE x)
688 #define RB_NUM2ULONG(x) rb_num2ulong_inline(x)
689 #define NUM2ULONG(x) RB_NUM2ULONG(x)
690 #if SIZEOF_INT < SIZEOF_LONG
693 #define RB_FIX2INT(x) ((int)rb_fix2int((VALUE)(x)))
696 rb_num2int_inline(
VALUE x)
703 #define RB_NUM2INT(x) rb_num2int_inline(x)
705 unsigned long rb_num2uint(
VALUE);
706 #define RB_NUM2UINT(x) ((unsigned int)rb_num2uint(x))
707 unsigned long rb_fix2uint(
VALUE);
708 #define RB_FIX2UINT(x) ((unsigned int)rb_fix2uint(x))
710 #define RB_NUM2INT(x) ((int)RB_NUM2LONG(x))
711 #define RB_NUM2UINT(x) ((unsigned int)RB_NUM2ULONG(x))
712 #define RB_FIX2INT(x) ((int)RB_FIX2LONG(x))
713 #define RB_FIX2UINT(x) ((unsigned int)RB_FIX2ULONG(x))
715 #define NUM2INT(x) RB_NUM2INT(x)
716 #define NUM2UINT(x) RB_NUM2UINT(x)
717 #define FIX2INT(x) RB_FIX2INT(x)
718 #define FIX2UINT(x) RB_FIX2UINT(x)
724 #define RB_FIX2SHORT(x) (rb_fix2short((VALUE)(x)))
725 #define FIX2SHORT(x) RB_FIX2SHORT(x)
727 rb_num2short_inline(
VALUE x)
735 #define RB_NUM2SHORT(x) rb_num2short_inline(x)
736 #define RB_NUM2USHORT(x) rb_num2ushort(x)
737 #define NUM2SHORT(x) RB_NUM2SHORT(x)
738 #define NUM2USHORT(x) RB_NUM2USHORT(x)
740 #ifdef HAVE_LONG_LONG
744 rb_num2ll_inline(
VALUE x)
751 # define RB_NUM2LL(x) rb_num2ll_inline(x)
752 # define RB_NUM2ULL(x) rb_num2ull(x)
753 # define NUM2LL(x) RB_NUM2LL(x)
754 # define NUM2ULL(x) RB_NUM2ULL(x)
757 #if !defined(NUM2OFFT)
758 # if defined(HAVE_LONG_LONG) && SIZEOF_OFF_T > SIZEOF_LONG
759 # define NUM2OFFT(x) ((off_t)NUM2LL(x))
761 # define NUM2OFFT(x) NUM2LONG(x)
765 #if defined(HAVE_LONG_LONG) && SIZEOF_SIZE_T > SIZEOF_LONG
766 # define NUM2SIZET(x) ((size_t)NUM2ULL(x))
767 # define NUM2SSIZET(x) ((ssize_t)NUM2LL(x))
769 # define NUM2SIZET(x) NUM2ULONG(x)
770 # define NUM2SSIZET(x) NUM2LONG(x)
774 #define NUM2DBL(x) rb_num2dbl((VALUE)(x))
782 #define RB_NEWOBJ(obj,type) type *(obj) = (type*)rb_newobj()
783 #define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = (type*)rb_newobj_of(klass, flags)
784 #define NEWOBJ(obj,type) RB_NEWOBJ(obj,type)
785 #define NEWOBJ_OF(obj,type,klass,flags) RB_NEWOBJ_OF(obj,type,klass,flags)
786 #define OBJSETUP(obj,c,t) rb_obj_setup(obj, c, t)
787 #define CLONESETUP(clone,obj) rb_clone_setup(clone,obj)
788 #define DUPSETUP(dup,obj) rb_dup_setup(dup,obj)
801 #ifndef RGENGC_WB_PROTECTED_ARRAY
802 #define RGENGC_WB_PROTECTED_ARRAY 1
804 #ifndef RGENGC_WB_PROTECTED_HASH
805 #define RGENGC_WB_PROTECTED_HASH 1
807 #ifndef RGENGC_WB_PROTECTED_STRUCT
808 #define RGENGC_WB_PROTECTED_STRUCT 1
810 #ifndef RGENGC_WB_PROTECTED_STRING
811 #define RGENGC_WB_PROTECTED_STRING 1
813 #ifndef RGENGC_WB_PROTECTED_OBJECT
814 #define RGENGC_WB_PROTECTED_OBJECT 1
816 #ifndef RGENGC_WB_PROTECTED_REGEXP
817 #define RGENGC_WB_PROTECTED_REGEXP 1
819 #ifndef RGENGC_WB_PROTECTED_CLASS
820 #define RGENGC_WB_PROTECTED_CLASS 1
822 #ifndef RGENGC_WB_PROTECTED_FLOAT
823 #define RGENGC_WB_PROTECTED_FLOAT 1
825 #ifndef RGENGC_WB_PROTECTED_COMPLEX
826 #define RGENGC_WB_PROTECTED_COMPLEX 1
828 #ifndef RGENGC_WB_PROTECTED_RATIONAL
829 #define RGENGC_WB_PROTECTED_RATIONAL 1
831 #ifndef RGENGC_WB_PROTECTED_BIGNUM
832 #define RGENGC_WB_PROTECTED_BIGNUM 1
834 #ifndef RGENGC_WB_PROTECTED_NODE_CREF
835 #define RGENGC_WB_PROTECTED_NODE_CREF 1
855 #define RUBY_FL_USER_N(n) RUBY_FL_USER##n = (1<<(RUBY_FL_USHIFT+n))
875 #if defined ENUM_OVER_INT || SIZEOF_INT*CHAR_BIT>12+19+1
878 #define RUBY_FL_USER19 (((VALUE)1)<<(RUBY_FL_USHIFT+19))
886 struct RUBY_ALIGNAS(SIZEOF_VALUE) RBasic {
894 #if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
895 # define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \
897 __builtin_choose_expr( \
898 RGENGC_WB_PROTECTED_##type, \
899 OBJ_WB_UNPROTECT((VALUE)(obj)), ((VALUE)(obj))))
901 # define RB_OBJ_WB_UNPROTECT_FOR(type, obj) \
902 (RGENGC_WB_PROTECTED_##type ? \
903 OBJ_WB_UNPROTECT((VALUE)(obj)) : ((VALUE)(obj)))
906 #define RBASIC_CLASS(obj) (RBASIC(obj)->klass)
908 #define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
913 #define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
914 #define ROBJECT_EMBED ROBJECT_EMBED
933 #define ROBJECT_NUMIV(o) \
934 ((RBASIC(o)->flags & ROBJECT_EMBED) ? \
935 ROBJECT_EMBED_LEN_MAX : \
936 ROBJECT(o)->as.heap.numiv)
937 #define ROBJECT_IVPTR(o) \
938 ((RBASIC(o)->flags & ROBJECT_EMBED) ? \
939 ROBJECT(o)->as.ary : \
940 ROBJECT(o)->as.heap.ivptr)
941 #define ROBJECT_IV_INDEX_TBL(o) \
942 ((RBASIC(o)->flags & ROBJECT_EMBED) ? \
943 RCLASS_IV_INDEX_TBL(rb_obj_class(o)) : \
944 ROBJECT(o)->as.heap.iv_index_tbl)
946 #define RCLASS_SUPER(c) rb_class_get_superclass(c)
947 #define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m)
948 #define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m)
949 #define RMODULE_M_TBL(m) RCLASS_M_TBL(m)
950 #define RMODULE_SUPER(m) RCLASS_SUPER(m)
951 #define RMODULE_IS_OVERLAID RMODULE_IS_OVERLAID
952 #define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT
953 #define RMODULE_INCLUDED_INTO_REFINEMENT RMODULE_INCLUDED_INTO_REFINEMENT
966 #define RFLOAT_VALUE(v) rb_float_value(v)
967 #define DBL2NUM(dbl) rb_float_new(dbl)
969 #define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
970 #define ELTS_SHARED RUBY_ELTS_SHARED
972 #define RSTRING_NOEMBED RSTRING_NOEMBED
973 #define RSTRING_EMBED_LEN_MASK RSTRING_EMBED_LEN_MASK
974 #define RSTRING_EMBED_LEN_SHIFT RSTRING_EMBED_LEN_SHIFT
975 #define RSTRING_EMBED_LEN_MAX RSTRING_EMBED_LEN_MAX
976 #define RSTRING_FSTR RSTRING_FSTR
980 RUBY_FL_USER5|RUBY_FL_USER6),
1002 #define RSTRING_EMBED_LEN(str) \
1003 (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \
1004 (RSTRING_EMBED_LEN_MASK >> RSTRING_EMBED_LEN_SHIFT))
1005 #define RSTRING_LEN(str) \
1006 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
1007 RSTRING_EMBED_LEN(str) : \
1008 RSTRING(str)->as.heap.len)
1009 #define RSTRING_PTR(str) \
1010 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
1011 RSTRING(str)->as.ary : \
1012 RSTRING(str)->as.heap.ptr)
1013 #define RSTRING_END(str) \
1014 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
1015 (RSTRING(str)->as.ary + RSTRING_EMBED_LEN(str)) : \
1016 (RSTRING(str)->as.heap.ptr + RSTRING(str)->as.heap.len))
1017 #define RSTRING_LENINT(str) rb_long2int(RSTRING_LEN(str))
1018 #define RSTRING_GETMEM(str, ptrvar, lenvar) \
1019 (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \
1020 ((ptrvar) = RSTRING(str)->as.ary, (lenvar) = RSTRING_EMBED_LEN(str)) : \
1021 ((ptrvar) = RSTRING(str)->as.heap.ptr, (lenvar) = RSTRING(str)->as.heap.len))
1023 #ifndef USE_TRANSIENT_HEAP
1024 #define USE_TRANSIENT_HEAP 1
1034 #if USE_TRANSIENT_HEAP
1036 #define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG
1038 #define RARRAY_TRANSIENT_FLAG 0
1043 #define RARRAY_EMBED_FLAG (VALUE)RARRAY_EMBED_FLAG
1044 #define RARRAY_EMBED_LEN_MASK (VALUE)RARRAY_EMBED_LEN_MASK
1045 #define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX
1046 #define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
1049 struct RBasic basic;
1055 #if defined(__clang__) || \
1056 !defined(__cplusplus) || \
1057 (__cplusplus > 199711L)
1067 #define RARRAY_EMBED_LEN(a) \
1068 (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \
1069 (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT))
1070 #define RARRAY_LEN(a) rb_array_len(a)
1071 #define RARRAY_LENINT(ary) rb_long2int(RARRAY_LEN(ary))
1072 #define RARRAY_CONST_PTR(a) rb_array_const_ptr(a)
1073 #define RARRAY_CONST_PTR_TRANSIENT(a) rb_array_const_ptr_transient(a)
1075 #if USE_TRANSIENT_HEAP
1076 #define RARRAY_TRANSIENT_P(ary) FL_TEST_RAW((ary), RARRAY_TRANSIENT_FLAG)
1078 #define RARRAY_TRANSIENT_P(ary) 0
1081 #define RARRAY_PTR_USE_START_TRANSIENT(a) rb_array_ptr_use_start(a, 1)
1082 #define RARRAY_PTR_USE_END_TRANSIENT(a) rb_array_ptr_use_end(a, 1)
1084 #define RARRAY_PTR_USE_TRANSIENT(ary, ptr_name, expr) do { \
1085 const VALUE _ary = (ary); \
1086 VALUE *ptr_name = (VALUE *)RARRAY_PTR_USE_START_TRANSIENT(_ary); \
1088 RARRAY_PTR_USE_END_TRANSIENT(_ary); \
1091 #define RARRAY_PTR_USE_START(a) rb_array_ptr_use_start(a, 0)
1092 #define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0)
1094 #define RARRAY_PTR_USE(ary, ptr_name, expr) do { \
1095 const VALUE _ary = (ary); \
1096 VALUE *ptr_name = (VALUE *)RARRAY_PTR_USE_START(_ary); \
1098 RARRAY_PTR_USE_END(_ary); \
1101 #define RARRAY_AREF(a, i) (RARRAY_CONST_PTR_TRANSIENT(a)[i])
1102 #define RARRAY_ASET(a, i, v) do { \
1103 const VALUE _ary = (a); \
1104 const VALUE _v = (v); \
1105 VALUE *ptr = (VALUE *)RARRAY_PTR_USE_START_TRANSIENT(_ary); \
1106 RB_OBJ_WRITE(_ary, &ptr[i], _v); \
1107 RARRAY_PTR_USE_END_TRANSIENT(_ary); \
1110 #define RARRAY_PTR(a) ((VALUE *)RARRAY_CONST_PTR(RB_OBJ_WB_UNPROTECT_FOR(ARRAY, a)))
1113 struct RBasic basic;
1118 #define RREGEXP_PTR(r) (RREGEXP(r)->ptr)
1119 #define RREGEXP_SRC(r) (RREGEXP(r)->src)
1120 #define RREGEXP_SRC_PTR(r) RSTRING_PTR(RREGEXP(r)->src)
1121 #define RREGEXP_SRC_LEN(r) RSTRING_LEN(RREGEXP(r)->src)
1122 #define RREGEXP_SRC_END(r) RSTRING_END(RREGEXP(r)->src)
1127 #define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
1128 #define RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
1129 #define RHASH_IFNONE(h) rb_hash_ifnone(h)
1130 #define RHASH_SIZE(h) rb_hash_size_num(h)
1131 #define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
1132 #define RHASH_SET_IFNONE(h, ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
1135 struct RBasic basic;
1140 struct RBasic basic;
1164 #define HAVE_TYPE_RB_DATA_TYPE_T 1
1165 #define HAVE_RB_DATA_TYPE_T_FUNCTION 1
1166 #define HAVE_RB_DATA_TYPE_T_PARENT 1
1169 struct RBasic basic;
1175 #define DATA_PTR(dta) (RDATA(dta)->data)
1177 #define RTYPEDDATA_P(v) (RTYPEDDATA(v)->typed_flag == 1)
1178 #define RTYPEDDATA_TYPE(v) (RTYPEDDATA(v)->type)
1179 #define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
1186 #ifndef RUBY_UNTYPED_DATA_WARNING
1187 # if defined RUBY_EXPORT
1188 # define RUBY_UNTYPED_DATA_WARNING 1
1190 # define RUBY_UNTYPED_DATA_WARNING 0
1200 #define Check_TypedStruct(v,t) rb_check_typeddata((VALUE)(v),(t))
1201 #define RUBY_DEFAULT_FREE ((RUBY_DATA_FUNC)-1)
1202 #define RUBY_NEVER_FREE ((RUBY_DATA_FUNC)0)
1203 #define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
1204 #define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
1207 #define RUBY_TYPED_FREE_IMMEDIATELY 1
1208 #define RUBY_TYPED_WB_PROTECTED RUBY_FL_WB_PROTECTED
1209 #define RUBY_TYPED_PROMOTED1 RUBY_FL_PROMOTED1
1211 #define Data_Wrap_Struct(klass,mark,free,sval)\
1212 rb_data_object_wrap((klass),(sval),(RUBY_DATA_FUNC)(mark),(RUBY_DATA_FUNC)(free))
1214 #define Data_Make_Struct0(result, klass, type, size, mark, free, sval) \
1215 VALUE result = rb_data_object_zalloc((klass), (size), \
1216 (RUBY_DATA_FUNC)(mark), \
1217 (RUBY_DATA_FUNC)(free)); \
1218 (void)((sval) = (type *)DATA_PTR(result));
1221 #define Data_Make_Struct(klass,type,mark,free,sval) RB_GNUC_EXTENSION_BLOCK(\
1222 Data_Make_Struct0(data_struct_obj, klass, type, sizeof(type), mark, free, sval); \
1226 #define Data_Make_Struct(klass,type,mark,free,sval) (\
1227 rb_data_object_make((klass),(RUBY_DATA_FUNC)(mark),(RUBY_DATA_FUNC)(free),(void **)&(sval),sizeof(type)) \
1231 #define TypedData_Wrap_Struct(klass,data_type,sval)\
1232 rb_data_typed_object_wrap((klass),(sval),(data_type))
1234 #define TypedData_Make_Struct0(result, klass, type, size, data_type, sval) \
1235 VALUE result = rb_data_typed_object_zalloc(klass, size, data_type); \
1236 (void)((sval) = (type *)DATA_PTR(result));
1239 #define TypedData_Make_Struct(klass, type, data_type, sval) RB_GNUC_EXTENSION_BLOCK(\
1240 TypedData_Make_Struct0(data_struct_obj, klass, type, sizeof(type), data_type, sval); \
1244 #define TypedData_Make_Struct(klass, type, data_type, sval) (\
1245 rb_data_typed_object_make((klass),(data_type),(void **)&(sval),sizeof(type)) \
1249 #define Data_Get_Struct(obj,type,sval) \
1250 ((sval) = (type*)rb_data_object_get(obj))
1252 #define TypedData_Get_Struct(obj,type,data_type,sval) \
1253 ((sval) = (type*)rb_check_typeddata((obj), (data_type)))
1255 #define RSTRUCT_LEN(st) NUM2LONG(rb_struct_size(st))
1256 #define RSTRUCT_PTR(st) rb_struct_ptr(st)
1257 #define RSTRUCT_SET(st, idx, v) rb_struct_aset(st, INT2NUM(idx), (v))
1258 #define RSTRUCT_GET(st, idx) rb_struct_aref(st, INT2NUM(idx))
1261 #define RBIGNUM_SIGN(b) (rb_big_sign(b))
1262 #define RBIGNUM_POSITIVE_P(b) (RBIGNUM_SIGN(b)!=0)
1263 #define RBIGNUM_NEGATIVE_P(b) (RBIGNUM_SIGN(b)==0)
1265 #define R_CAST(st) (struct st*)
1266 #define RMOVED(obj) (R_CAST(RMoved)(obj))
1267 #define RBASIC(obj) (R_CAST(RBasic)(obj))
1268 #define ROBJECT(obj) (R_CAST(RObject)(obj))
1269 #define RCLASS(obj) (R_CAST(RClass)(obj))
1270 #define RMODULE(obj) RCLASS(obj)
1271 #define RSTRING(obj) (R_CAST(RString)(obj))
1272 #define RREGEXP(obj) (R_CAST(RRegexp)(obj))
1273 #define RARRAY(obj) (R_CAST(RArray)(obj))
1274 #define RDATA(obj) (R_CAST(RData)(obj))
1275 #define RTYPEDDATA(obj) (R_CAST(RTypedData)(obj))
1276 #define RFILE(obj) (R_CAST(RFile)(obj))
1278 #define FL_SINGLETON ((VALUE)RUBY_FL_SINGLETON)
1279 #define FL_WB_PROTECTED ((VALUE)RUBY_FL_WB_PROTECTED)
1280 #define FL_PROMOTED0 ((VALUE)RUBY_FL_PROMOTED0)
1281 #define FL_PROMOTED1 ((VALUE)RUBY_FL_PROMOTED1)
1282 #define FL_FINALIZE ((VALUE)RUBY_FL_FINALIZE)
1283 #define FL_TAINT ((VALUE)RUBY_FL_TAINT)
1284 #define FL_UNTRUSTED ((VALUE)RUBY_FL_UNTRUSTED)
1285 #define FL_SEEN_OBJ_ID ((VALUE)RUBY_FL_SEEN_OBJ_ID)
1286 #define FL_EXIVAR ((VALUE)RUBY_FL_EXIVAR)
1287 #define FL_FREEZE ((VALUE)RUBY_FL_FREEZE)
1289 #define FL_USHIFT ((VALUE)RUBY_FL_USHIFT)
1291 #define FL_USER0 ((VALUE)RUBY_FL_USER0)
1292 #define FL_USER1 ((VALUE)RUBY_FL_USER1)
1293 #define FL_USER2 ((VALUE)RUBY_FL_USER2)
1294 #define FL_USER3 ((VALUE)RUBY_FL_USER3)
1295 #define FL_USER4 ((VALUE)RUBY_FL_USER4)
1296 #define FL_USER5 ((VALUE)RUBY_FL_USER5)
1297 #define FL_USER6 ((VALUE)RUBY_FL_USER6)
1298 #define FL_USER7 ((VALUE)RUBY_FL_USER7)
1299 #define FL_USER8 ((VALUE)RUBY_FL_USER8)
1300 #define FL_USER9 ((VALUE)RUBY_FL_USER9)
1301 #define FL_USER10 ((VALUE)RUBY_FL_USER10)
1302 #define FL_USER11 ((VALUE)RUBY_FL_USER11)
1303 #define FL_USER12 ((VALUE)RUBY_FL_USER12)
1304 #define FL_USER13 ((VALUE)RUBY_FL_USER13)
1305 #define FL_USER14 ((VALUE)RUBY_FL_USER14)
1306 #define FL_USER15 ((VALUE)RUBY_FL_USER15)
1307 #define FL_USER16 ((VALUE)RUBY_FL_USER16)
1308 #define FL_USER17 ((VALUE)RUBY_FL_USER17)
1309 #define FL_USER18 ((VALUE)RUBY_FL_USER18)
1310 #define FL_USER19 ((VALUE)(unsigned int)RUBY_FL_USER19)
1312 #define RB_SPECIAL_CONST_P(x) (RB_IMMEDIATE_P(x) || !RB_TEST(x))
1313 #define SPECIAL_CONST_P(x) RB_SPECIAL_CONST_P(x)
1315 #define RB_FL_ABLE(x) (!RB_SPECIAL_CONST_P(x) && RB_BUILTIN_TYPE(x) != RUBY_T_NODE)
1316 #define RB_FL_TEST_RAW(x,f) (RBASIC(x)->flags&(f))
1317 #define RB_FL_TEST(x,f) (RB_FL_ABLE(x)?RB_FL_TEST_RAW((x),(f)):0)
1318 #define RB_FL_ANY_RAW(x,f) RB_FL_TEST_RAW((x),(f))
1319 #define RB_FL_ANY(x,f) RB_FL_TEST((x),(f))
1320 #define RB_FL_ALL_RAW(x,f) (RB_FL_TEST_RAW((x),(f)) == (f))
1321 #define RB_FL_ALL(x,f) (RB_FL_TEST((x),(f)) == (f))
1322 #define RB_FL_SET_RAW(x,f) (void)(RBASIC(x)->flags |= (f))
1323 #define RB_FL_SET(x,f) (RB_FL_ABLE(x) ? RB_FL_SET_RAW(x, f) : (void)0)
1324 #define RB_FL_UNSET_RAW(x,f) (void)(RBASIC(x)->flags &= ~(VALUE)(f))
1325 #define RB_FL_UNSET(x,f) (RB_FL_ABLE(x) ? RB_FL_UNSET_RAW(x, f) : (void)0)
1326 #define RB_FL_REVERSE_RAW(x,f) (void)(RBASIC(x)->flags ^= (f))
1327 #define RB_FL_REVERSE(x,f) (RB_FL_ABLE(x) ? RB_FL_REVERSE_RAW(x, f) : (void)0)
1329 #define RB_OBJ_TAINTABLE(x) (RB_FL_ABLE(x) && RB_BUILTIN_TYPE(x) != RUBY_T_BIGNUM && RB_BUILTIN_TYPE(x) != RUBY_T_FLOAT)
1330 #define RB_OBJ_TAINTED_RAW(x) RB_FL_TEST_RAW(x, RUBY_FL_TAINT)
1331 #define RB_OBJ_TAINTED(x) (!!RB_FL_TEST((x), RUBY_FL_TAINT))
1332 #define RB_OBJ_TAINT_RAW(x) RB_FL_SET_RAW(x, RUBY_FL_TAINT)
1333 #define RB_OBJ_TAINT(x) (RB_OBJ_TAINTABLE(x) ? RB_OBJ_TAINT_RAW(x) : (void)0)
1334 #define RB_OBJ_UNTRUSTED(x) RB_OBJ_TAINTED(x)
1335 #define RB_OBJ_UNTRUST(x) RB_OBJ_TAINT(x)
1336 #define RB_OBJ_INFECT_RAW(x,s) RB_FL_SET_RAW(x, RB_OBJ_TAINTED_RAW(s))
1337 #define RB_OBJ_INFECT(x,s) ( \
1338 (RB_OBJ_TAINTABLE(x) && RB_FL_ABLE(s)) ? \
1339 RB_OBJ_INFECT_RAW(x, s) : (void)0)
1341 #define RB_OBJ_FROZEN_RAW(x) (RBASIC(x)->flags&RUBY_FL_FREEZE)
1342 #define RB_OBJ_FROZEN(x) (!RB_FL_ABLE(x) || RB_OBJ_FROZEN_RAW(x))
1343 #define RB_OBJ_FREEZE_RAW(x) (void)(RBASIC(x)->flags |= RUBY_FL_FREEZE)
1344 #define RB_OBJ_FREEZE(x) rb_obj_freeze_inline((VALUE)x)
1351 #define FL_ABLE(x) RB_FL_ABLE(x)
1352 #define FL_TEST_RAW(x,f) RB_FL_TEST_RAW(x,f)
1353 #define FL_TEST(x,f) RB_FL_TEST(x,f)
1354 #define FL_ANY_RAW(x,f) RB_FL_ANY_RAW(x,f)
1355 #define FL_ANY(x,f) RB_FL_ANY(x,f)
1356 #define FL_ALL_RAW(x,f) RB_FL_ALL_RAW(x,f)
1357 #define FL_ALL(x,f) RB_FL_ALL(x,f)
1358 #define FL_SET_RAW(x,f) RB_FL_SET_RAW(x,f)
1359 #define FL_SET(x,f) RB_FL_SET(x,f)
1360 #define FL_UNSET_RAW(x,f) RB_FL_UNSET_RAW(x,f)
1361 #define FL_UNSET(x,f) RB_FL_UNSET(x,f)
1362 #define FL_REVERSE_RAW(x,f) RB_FL_REVERSE_RAW(x,f)
1363 #define FL_REVERSE(x,f) RB_FL_REVERSE(x,f)
1365 #define OBJ_TAINTABLE(x) RB_OBJ_TAINTABLE(x)
1366 #define OBJ_TAINTED_RAW(x) RB_OBJ_TAINTED_RAW(x)
1367 #define OBJ_TAINTED(x) RB_OBJ_TAINTED(x)
1368 #define OBJ_TAINT_RAW(x) RB_OBJ_TAINT_RAW(x)
1369 #define OBJ_TAINT(x) RB_OBJ_TAINT(x)
1370 #define OBJ_UNTRUSTED(x) RB_OBJ_UNTRUSTED(x)
1371 #define OBJ_UNTRUST(x) RB_OBJ_UNTRUST(x)
1372 #define OBJ_INFECT_RAW(x,s) RB_OBJ_INFECT_RAW(x,s)
1373 #define OBJ_INFECT(x,s) RB_OBJ_INFECT(x,s)
1374 #define OBJ_FROZEN_RAW(x) RB_OBJ_FROZEN_RAW(x)
1375 #define OBJ_FROZEN(x) RB_OBJ_FROZEN(x)
1376 #define OBJ_FREEZE_RAW(x) RB_OBJ_FREEZE_RAW(x)
1377 #define OBJ_FREEZE(x) RB_OBJ_FREEZE(x)
1384 rb_obj_freeze_inline(
VALUE x)
1394 #if GCC_VERSION_SINCE(4,4,0)
1395 # define RUBY_UNTYPED_DATA_FUNC(func) func __attribute__((warning("untyped Data is unsafe; use TypedData instead")))
1397 # define RUBY_UNTYPED_DATA_FUNC(func) DEPRECATED(func)
1400 #if defined(__GNUC__) && !defined(__NO_INLINE__)
1401 #if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
1412 #if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
1413 #define rb_data_object_wrap_warning(klass, ptr, mark, free) \
1415 __builtin_choose_expr( \
1416 __builtin_constant_p(klass) && !(klass), \
1417 rb_data_object_wrap(klass, ptr, mark, free), \
1418 rb_data_object_wrap_warning(klass, ptr, mark, free)))
1422 static inline void *
1426 return ((
struct RData *)
obj)->data;
1429 #if defined(__GNUC__) && !defined(__NO_INLINE__)
1430 static inline void *
1431 rb_data_object_get_warning(
VALUE obj)
1451 #ifndef rb_data_object_alloc
1460 #ifndef rb_data_typed_object_alloc
1469 #if defined(__GNUC__) && !defined(__NO_INLINE__)
1470 #define rb_data_object_wrap_0 rb_data_object_wrap
1471 #define rb_data_object_wrap_1 rb_data_object_wrap_warning
1472 #define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_, RUBY_UNTYPED_DATA_WARNING)
1473 #define rb_data_object_get_0 rb_data_object_get
1474 #define rb_data_object_get_1 rb_data_object_get_warning
1475 #define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_, RUBY_UNTYPED_DATA_WARNING)
1476 #define rb_data_object_make_0 rb_data_object_make
1477 #define rb_data_object_make_1 rb_data_object_make_warning
1478 #define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_, RUBY_UNTYPED_DATA_WARNING)
1482 #define RB_OBJ_PROMOTED_RAW(x) RB_FL_ALL_RAW(x, RUBY_FL_PROMOTED)
1483 #define RB_OBJ_PROMOTED(x) (RB_SPECIAL_CONST_P(x) ? 0 : RB_OBJ_PROMOTED_RAW(x))
1484 #define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
1490 #define RB_OBJ_PROMOTED(x) 0
1491 #define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
1493 #define OBJ_PROMOTED_RAW(x) RB_OBJ_PROMOTED_RAW(x)
1494 #define OBJ_PROMOTED(x) RB_OBJ_PROMOTED(x)
1495 #define OBJ_WB_UNPROTECT(x) RB_OBJ_WB_UNPROTECT(x)
1508 #define RB_OBJ_WRITE(a, slot, b) rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__)
1509 #define RB_OBJ_WRITTEN(a, oldv, b) rb_obj_written((VALUE)(a), (VALUE)(oldv), (VALUE)(b), __FILE__, __LINE__)
1511 #ifndef USE_RGENGC_LOGGING_WB_UNPROTECT
1512 #define USE_RGENGC_LOGGING_WB_UNPROTECT 0
1515 #if USE_RGENGC_LOGGING_WB_UNPROTECT
1517 #define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
1523 #ifdef RGENGC_LOGGING_WB_UNPROTECT
1524 RGENGC_LOGGING_WB_UNPROTECT((
void *)x, filename, line);
1535 #ifdef RGENGC_LOGGING_OBJ_WRITTEN
1536 RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line);
1551 #ifdef RGENGC_LOGGING_WRITE
1552 RGENGC_LOGGING_WRITE(a, slot, b, filename, line);
1558 rb_obj_written(a,
RUBY_Qundef , b, filename, line);
1563 #define RUBY_INTEGER_UNIFICATION 1
1564 #define RB_INTEGER_TYPE_P(obj) rb_integer_type_p(obj)
1565 #if defined __GNUC__ && !GCC_VERSION_SINCE(4, 3, 0)
1568 #define rb_integer_type_p(obj) \
1570 const VALUE integer_type_obj = (obj); \
1571 (RB_FIXNUM_P(integer_type_obj) || \
1572 (!RB_SPECIAL_CONST_P(integer_type_obj) && \
1573 RB_BUILTIN_TYPE(integer_type_obj) == RUBY_T_BIGNUM)); \
1585 #if SIZEOF_INT < SIZEOF_LONG
1586 # define RB_INT2NUM(v) RB_INT2FIX((int)(v))
1587 # define RB_UINT2NUM(v) RB_LONG2FIX((unsigned int)(v))
1590 rb_int2num_inline(
int v)
1597 #define RB_INT2NUM(x) rb_int2num_inline(x)
1600 rb_uint2num_inline(
unsigned int v)
1607 #define RB_UINT2NUM(x) rb_uint2num_inline(x)
1609 #define INT2NUM(x) RB_INT2NUM(x)
1610 #define UINT2NUM(x) RB_UINT2NUM(x)
1613 rb_long2num_inline(
long v)
1620 #define RB_LONG2NUM(x) rb_long2num_inline(x)
1623 rb_ulong2num_inline(
unsigned long v)
1630 #define RB_ULONG2NUM(x) rb_ulong2num_inline(x)
1633 rb_num2char_inline(
VALUE x)
1638 return (
char)(
NUM2INT(x) & 0xff);
1640 #define RB_NUM2CHR(x) rb_num2char_inline(x)
1642 #define RB_CHR2FIX(x) RB_INT2FIX((long)((x)&0xff))
1644 #define LONG2NUM(x) RB_LONG2NUM(x)
1645 #define ULONG2NUM(x) RB_ULONG2NUM(x)
1646 #define USHORT2NUM(x) RB_INT2FIX(x)
1647 #define NUM2CHR(x) RB_NUM2CHR(x)
1648 #define CHR2FIX(x) RB_CHR2FIX(x)
1650 #if SIZEOF_LONG < SIZEOF_VALUE
1651 #define RB_ST2FIX(h) RB_LONG2FIX((long)((h) > 0 ? (h) & (unsigned long)-1 >> 2 : (h) | ~((unsigned long)-1 >> 2)))
1653 #define RB_ST2FIX(h) RB_LONG2FIX((long)(h))
1655 #define ST2FIX(h) RB_ST2FIX(h)
1657 #define RB_ALLOC_N(type,n) ((type*)ruby_xmalloc2((size_t)(n),sizeof(type)))
1658 #define RB_ALLOC(type) ((type*)ruby_xmalloc(sizeof(type)))
1659 #define RB_ZALLOC_N(type,n) ((type*)ruby_xcalloc((size_t)(n),sizeof(type)))
1660 #define RB_ZALLOC(type) (RB_ZALLOC_N(type,1))
1661 #define RB_REALLOC_N(var,type,n) ((var)=(type*)ruby_xrealloc2((char*)(var),(size_t)(n),sizeof(type)))
1663 #define ALLOC_N(type,n) RB_ALLOC_N(type,n)
1664 #define ALLOC(type) RB_ALLOC(type)
1665 #define ZALLOC_N(type,n) RB_ZALLOC_N(type,n)
1666 #define ZALLOC(type) RB_ZALLOC(type)
1667 #define REALLOC_N(var,type,n) RB_REALLOC_N(var,type,n)
1669 #if GCC_VERSION_BEFORE(4,9,5)
1674 # undef HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN
1677 #if defined(HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN) && defined(RUBY_ALIGNOF)
1680 #define ALLOCA_N(type, n) \
1681 (type*)__builtin_alloca_with_align((sizeof(type)*(n)), \
1682 RUBY_ALIGNOF(type) * CHAR_BIT)
1684 #define ALLOCA_N(type,n) ((type*)alloca(sizeof(type)*(n)))
1691 #if HAVE_LONG_LONG && SIZEOF_SIZE_T * 2 <= SIZEOF_LONG_LONG
1692 # define DSIZE_T unsigned LONG_LONG
1693 #elif defined(HAVE_INT128_T)
1694 # define DSIZE_T uint128_t
1697 rb_mul_size_overflow(
size_t a,
size_t b,
size_t max,
size_t *c)
1704 if (c2 > max)
return 1;
1707 if (b != 0 && a > max / b)
return 1;
1712 static inline void *
1713 rb_alloc_tmp_buffer2(
volatile VALUE *store,
long count,
size_t elsize)
1716 if (elsize ==
sizeof(
VALUE)) {
1733 # define RB_ALLOCV(v, n) rb_alloc_tmp_buffer(&(v), (n))
1734 # define RB_ALLOCV_N(type, v, n) \
1735 rb_alloc_tmp_buffer2(&(v), (n), sizeof(type))
1737 # define RUBY_ALLOCV_LIMIT 1024
1738 # define RB_ALLOCV(v, n) ((n) < RUBY_ALLOCV_LIMIT ? \
1739 ((v) = 0, alloca(n)) : \
1740 rb_alloc_tmp_buffer(&(v), (n)))
1741 # define RB_ALLOCV_N(type, v, n) \
1742 ((type*)(((size_t)(n) < RUBY_ALLOCV_LIMIT / sizeof(type)) ? \
1743 ((v) = 0, alloca((size_t)(n) * sizeof(type))) : \
1744 rb_alloc_tmp_buffer2(&(v), (long)(n), sizeof(type))))
1746 #define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))
1748 #define ALLOCV(v, n) RB_ALLOCV(v, n)
1749 #define ALLOCV_N(type, v, n) RB_ALLOCV_N(type, v, n)
1750 #define ALLOCV_END(v) RB_ALLOCV_END(v)
1752 #define MEMZERO(p,type,n) memset((p), 0, sizeof(type)*(size_t)(n))
1753 #define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(size_t)(n))
1754 #define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(size_t)(n))
1755 #define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(size_t)(n))
1757 static inline void *
1758 ruby_nonempty_memcpy(
void *dest,
const void *
src,
size_t n)
1763 #define memcpy(p1,p2,n) ruby_nonempty_memcpy(p1, p2, n)
1831 #define RUBY_CONST_ID_CACHE(result, str) \
1833 static ID rb_intern_id_cache; \
1834 if (!rb_intern_id_cache) \
1835 rb_intern_id_cache = rb_intern2((str), (long)strlen(str)); \
1836 result rb_intern_id_cache; \
1838 #define RUBY_CONST_ID(var, str) \
1839 do RUBY_CONST_ID_CACHE((var) =, (str)) while (0)
1840 #define CONST_ID_CACHE(result, str) RUBY_CONST_ID_CACHE(result, str)
1841 #define CONST_ID(var, str) RUBY_CONST_ID(var, str)
1842 #if defined(HAVE_BUILTIN___BUILTIN_CONSTANT_P) && defined(HAVE_STMT_AND_DECL_IN_EXPR)
1845 #define rb_intern(str) \
1846 (__builtin_constant_p(str) ? \
1847 __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
1849 #define rb_intern_const(str) \
1850 (__builtin_constant_p(str) ? \
1851 __extension__ (rb_intern2((str), (long)strlen(str))) : \
1854 # define rb_varargs_argc_check_runtime(argc, vargc) \
1855 (((argc) <= (vargc)) ? (argc) : \
1856 (rb_fatal("argc(%d) exceeds actual arguments(%d)", \
1858 # define rb_varargs_argc_valid_p(argc, vargc) \
1859 ((argc) == 0 ? (vargc) <= 1 : \
1861 # if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
1862 # if HAVE_ATTRIBUTE_ERRORFUNC
1863 ERRORFUNC((
" argument length doesn't match"),
int rb_varargs_bad_length(
int,
int));
1865 # define rb_varargs_bad_length(argc, vargc) \
1866 ((argc)/rb_varargs_argc_valid_p(argc, vargc))
1868 # define rb_varargs_argc_check(argc, vargc) \
1869 __builtin_choose_expr(__builtin_constant_p(argc), \
1870 (rb_varargs_argc_valid_p(argc, vargc) ? (argc) : \
1871 rb_varargs_bad_length(argc, vargc)), \
1872 rb_varargs_argc_check_runtime(argc, vargc))
1874 # define rb_varargs_argc_check(argc, vargc) \
1875 rb_varargs_argc_check_runtime(argc, vargc)
1879 #define rb_intern_const(str) rb_intern2((str), (long)strlen(str))
1895 #define rb_funcall2 rb_funcallv
1896 #define rb_funcall3 rb_funcallv_public
1902 #define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0
1903 #define RB_SCAN_ARGS_KEYWORDS 1
1904 #define RB_SCAN_ARGS_EMPTY_KEYWORDS 2
1905 #define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3
1914 #define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
1925 #define ruby_verbose (*rb_ruby_verbose_ptr())
1926 #define ruby_debug (*rb_ruby_debug_ptr())
1930 #define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
1931 #define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
1962 #define RB_BLOCK_CALL_FUNC_STRICT 1
1963 #define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
1964 #define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg) \
1965 VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
1977 #define RB_NO_KEYWORDS 0
1978 #define RB_PASS_KEYWORDS 1
1979 #define RB_PASS_EMPTY_KEYWORDS 2
1980 #define RB_PASS_CALLED_KEYWORDS 3
2012 #ifndef RUBY_INTEGER_UNIFICATION
2024 #ifndef RUBY_INTEGER_UNIFICATION
2126 #define rb_type_p(obj, type) \
2127 __extension__ (__builtin_constant_p(type) ? RB_TYPE_P((obj), (type)) : \
2128 rb_type(obj) == (type))
2130 #define rb_type_p(obj, type) (rb_type(obj) == (type))
2134 #define rb_special_const_p(obj) \
2136 VALUE special_const_obj = (obj); \
2137 (int)(RB_SPECIAL_CONST_P(special_const_obj) ? RUBY_Qtrue : RUBY_Qfalse); \
2167 rb_array_len(
VALUE a)
2173 #if defined(__fcc__) || defined(__fcc_version) || \
2174 defined(__FCC__) || defined(__FCC_VERSION)
2176 # define FIX_CONST_VALUE_PTR(x) ((const VALUE *)(x))
2178 # define FIX_CONST_VALUE_PTR(x) (x)
2182 static inline const VALUE *
2183 rb_array_const_ptr_transient(
VALUE a)
2190 static inline const VALUE *
2191 rb_array_const_ptr(
VALUE a)
2193 #if USE_TRANSIENT_HEAP
2200 return rb_array_const_ptr_transient(a);
2204 static inline VALUE *
2205 rb_array_ptr_use_start(
VALUE a,
int allow_transient)
2209 #if USE_TRANSIENT_HEAP
2210 if (!allow_transient) {
2217 (
void)allow_transient;
2224 rb_array_ptr_use_end(
VALUE a,
int allow_transient)
2228 (
void)allow_transient;
2231 #if defined(EXTLIB) && defined(USE_DLN_A_OUT)
2233 static char *dln_libs_to_be_linked[] = { EXTLIB, 0 };
2237 #define HAVE_NATIVETHREAD
2241 #define RUBY_EVENT_NONE 0x0000
2242 #define RUBY_EVENT_LINE 0x0001
2243 #define RUBY_EVENT_CLASS 0x0002
2244 #define RUBY_EVENT_END 0x0004
2245 #define RUBY_EVENT_CALL 0x0008
2246 #define RUBY_EVENT_RETURN 0x0010
2247 #define RUBY_EVENT_C_CALL 0x0020
2248 #define RUBY_EVENT_C_RETURN 0x0040
2249 #define RUBY_EVENT_RAISE 0x0080
2250 #define RUBY_EVENT_ALL 0x00ff
2253 #define RUBY_EVENT_B_CALL 0x0100
2254 #define RUBY_EVENT_B_RETURN 0x0200
2255 #define RUBY_EVENT_THREAD_BEGIN 0x0400
2256 #define RUBY_EVENT_THREAD_END 0x0800
2257 #define RUBY_EVENT_FIBER_SWITCH 0x1000
2258 #define RUBY_EVENT_SCRIPT_COMPILED 0x2000
2259 #define RUBY_EVENT_TRACEPOINT_ALL 0xffff
2262 #define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
2265 #define RUBY_INTERNAL_EVENT_SWITCH 0x040000
2266 #define RUBY_EVENT_SWITCH 0x040000
2268 #define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
2269 #define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
2270 #define RUBY_INTERNAL_EVENT_GC_START 0x400000
2271 #define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
2272 #define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
2273 #define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
2274 #define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
2275 #define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
2276 #define RUBY_INTERNAL_EVENT_MASK 0xffff0000
2281 #define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
2287 static inline int rb_isascii(
int c){
return '\0' <= c && c <=
'\x7f'; }
2288 static inline int rb_isupper(
int c){
return 'A' <= c && c <=
'Z'; }
2289 static inline int rb_islower(
int c){
return 'a' <= c && c <=
'z'; }
2290 static inline int rb_isalpha(
int c){
return rb_isupper(c) || rb_islower(c); }
2291 static inline int rb_isdigit(
int c){
return '0' <= c && c <=
'9'; }
2292 static inline int rb_isalnum(
int c){
return rb_isalpha(c) || rb_isdigit(c); }
2293 static inline int rb_isxdigit(
int c){
return rb_isdigit(c) || (
'A' <= c && c <=
'F') || (
'a' <= c && c <=
'f'); }
2294 static inline int rb_isblank(
int c){
return c ==
' ' || c ==
'\t'; }
2295 static inline int rb_isspace(
int c){
return c ==
' ' || (
'\t' <= c && c <=
'\r'); }
2296 static inline int rb_iscntrl(
int c){
return (
'\0' <= c && c <
' ') || c ==
'\x7f'; }
2297 static inline int rb_isprint(
int c){
return ' ' <= c && c <=
'\x7e'; }
2298 static inline int rb_ispunct(
int c){
return !rb_isalnum(c); }
2299 static inline int rb_isgraph(
int c){
return '!' <= c && c <=
'\x7e'; }
2300 static inline int rb_tolower(
int c) {
return rb_isupper(c) ? (c|0x20) : c; }
2301 static inline int rb_toupper(
int c) {
return rb_islower(c) ? (c&0x5f) : c; }
2304 #define ISASCII(c) rb_isascii(c)
2305 #define ISPRINT(c) rb_isprint(c)
2306 #define ISGRAPH(c) rb_isgraph(c)
2307 #define ISSPACE(c) rb_isspace(c)
2308 #define ISUPPER(c) rb_isupper(c)
2309 #define ISLOWER(c) rb_islower(c)
2310 #define ISALNUM(c) rb_isalnum(c)
2311 #define ISALPHA(c) rb_isalpha(c)
2312 #define ISDIGIT(c) rb_isdigit(c)
2313 #define ISXDIGIT(c) rb_isxdigit(c)
2314 #define ISBLANK(c) rb_isblank(c)
2315 #define ISCNTRL(c) rb_iscntrl(c)
2316 #define ISPUNCT(c) rb_ispunct(c)
2318 #define TOUPPER(c) rb_toupper(c)
2319 #define TOLOWER(c) rb_tolower(c)
2323 #define STRCASECMP(s1, s2) (st_locale_insensitive_strcasecmp((s1), (s2)))
2324 #define STRNCASECMP(s1, s2, n) (st_locale_insensitive_strncasecmp((s1), (s2), (n)))
2327 #define STRTOUL(str, endptr, base) (ruby_strtoul((str), (endptr), (base)))
2329 #define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();}
2337 #if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P) && defined(HAVE_VA_ARGS_MACRO) && defined(__OPTIMIZE__)
2338 # define rb_scan_args(argc,argvp,fmt,...) \
2339 __builtin_choose_expr(__builtin_constant_p(fmt), \
2340 rb_scan_args0(argc,argvp,fmt,\
2341 (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), \
2342 ((VALUE*[]){__VA_ARGS__})), \
2343 rb_scan_args(argc,argvp,fmt,##__VA_ARGS__))
2344 # if HAVE_ATTRIBUTE_ERRORFUNC
2345 ERRORFUNC((
"bad scan arg format"),
void rb_scan_args_bad_format(
const char*));
2346 ERRORFUNC((
"variable argument length doesn't match"),
void rb_scan_args_length_mismatch(
const char*,
int));
2348 # define rb_scan_args_bad_format(fmt) ((void)0)
2349 # define rb_scan_args_length_mismatch(fmt, varc) ((void)0)
2352 # define rb_scan_args_isdigit(c) ((unsigned char)((c)-'0')<10)
2354 # define rb_scan_args_count_end(fmt, ofs, vari) \
2355 (fmt[ofs] ? -1 : (vari))
2357 # define rb_scan_args_count_block(fmt, ofs, vari) \
2359 rb_scan_args_count_end(fmt, ofs, vari) : \
2360 rb_scan_args_count_end(fmt, ofs+1, vari+1))
2362 # define rb_scan_args_count_hash(fmt, ofs, vari) \
2364 rb_scan_args_count_block(fmt, ofs, vari) : \
2365 rb_scan_args_count_block(fmt, ofs+1, vari+1))
2367 # define rb_scan_args_count_trail(fmt, ofs, vari) \
2368 (!rb_scan_args_isdigit(fmt[ofs]) ? \
2369 rb_scan_args_count_hash(fmt, ofs, vari) : \
2370 rb_scan_args_count_hash(fmt, ofs+1, vari+(fmt[ofs]-'0')))
2372 # define rb_scan_args_count_var(fmt, ofs, vari) \
2374 rb_scan_args_count_trail(fmt, ofs, vari) : \
2375 rb_scan_args_count_trail(fmt, ofs+1, vari+1))
2377 # define rb_scan_args_count_opt(fmt, ofs, vari) \
2378 (!rb_scan_args_isdigit(fmt[ofs]) ? \
2379 rb_scan_args_count_var(fmt, ofs, vari) : \
2380 rb_scan_args_count_var(fmt, ofs+1, vari+fmt[ofs]-'0'))
2382 # define rb_scan_args_count_lead(fmt, ofs, vari) \
2383 (!rb_scan_args_isdigit(fmt[ofs]) ? \
2384 rb_scan_args_count_var(fmt, ofs, vari) : \
2385 rb_scan_args_count_opt(fmt, ofs+1, vari+fmt[ofs]-'0'))
2387 # define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)
2389 # if defined(__has_attribute) && __has_attribute(diagnose_if)
2390 # define rb_scan_args_verify(fmt, varc) (void)0
2392 # define rb_scan_args_verify(fmt, varc) \
2393 (sizeof(char[1-2*(rb_scan_args_count(fmt)<0)])!=1 ? \
2394 rb_scan_args_bad_format(fmt) : \
2395 sizeof(char[1-2*(rb_scan_args_count(fmt)!=(varc))])!=1 ? \
2396 rb_scan_args_length_mismatch(fmt, varc) : \
2402 rb_scan_args_lead_p(
const char *
fmt)
2409 rb_scan_args_n_lead(
const char *
fmt)
2411 return (rb_scan_args_lead_p(
fmt) ?
fmt[0]-
'0' : 0);
2416 rb_scan_args_opt_p(
const char *
fmt)
2423 rb_scan_args_n_opt(
const char *
fmt)
2425 return (rb_scan_args_opt_p(
fmt) ?
fmt[1]-
'0' : 0);
2430 rb_scan_args_var_idx(
const char *
fmt)
2437 rb_scan_args_f_var(
const char *
fmt)
2439 return (
fmt[rb_scan_args_var_idx(
fmt)]==
'*');
2444 rb_scan_args_trail_idx(
const char *
fmt)
2446 const int idx = rb_scan_args_var_idx(
fmt);
2447 return idx+(
fmt[idx]==
'*');
2452 rb_scan_args_n_trail(
const char *
fmt)
2454 const int idx = rb_scan_args_trail_idx(
fmt);
2460 rb_scan_args_hash_idx(
const char *
fmt)
2462 const int idx = rb_scan_args_trail_idx(
fmt);
2468 rb_scan_args_f_hash(
const char *
fmt)
2470 return (
fmt[rb_scan_args_hash_idx(
fmt)]==
':');
2475 rb_scan_args_block_idx(
const char *
fmt)
2477 const int idx = rb_scan_args_hash_idx(
fmt);
2478 return idx+(
fmt[idx]==
':');
2483 rb_scan_args_f_block(
const char *
fmt)
2485 return (
fmt[rb_scan_args_block_idx(
fmt)]==
'&');
2491 rb_scan_args_end_idx(
const char *
fmt)
2493 const int idx = rb_scan_args_block_idx(
fmt);
2494 return idx+(
fmt[idx]==
'&');
2500 # define rb_scan_args0(argc, argv, fmt, varc, vars) \
2501 rb_scan_args_set(argc, argv, \
2502 rb_scan_args_n_lead(fmt), \
2503 rb_scan_args_n_opt(fmt), \
2504 rb_scan_args_n_trail(fmt), \
2505 rb_scan_args_f_var(fmt), \
2506 rb_scan_args_f_hash(fmt), \
2507 rb_scan_args_f_block(fmt), \
2508 (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
2520 # if defined(__has_attribute) && __has_attribute(diagnose_if)
2525 int i, argi = 0, vari = 0, last_idx = -1;
2529 int empty_keyword_given = 0;
2530 VALUE tmp_buffer = 0;
2532 if (!keyword_given) {
2538 if (
argc > 0 && !(
f_hash && empty_keyword_given)) {
2542 if (keyword_given) {
2544 rb_warn(
"Keyword flag set when calling rb_scan_args, but last entry is not a hash");
2556 rb_warn(
"The last argument is nil, treating as empty keywords");
2568 if (!(last_hash = hash)) {
2569 if (!keyword_given) {
2572 rb_warn(
"Using the last argument as keyword parameters is deprecated");
2579 rb_warn(
"The last argument is split into positional and keyword parameters");
2580 last_idx =
argc - 1;
2582 hash = opts ? opts :
Qnil;
2585 else if (
f_hash && keyword_given && n_mand ==
argc) {
2587 rb_warn(
"Passing the keyword argument as the last hash parameter is deprecated");
2590 if (
f_hash && n_mand > 0 && n_mand ==
argc+1 && empty_keyword_given) {
2596 rb_warn(
"Passing the keyword argument as the last hash parameter is deprecated");
2600 if (
argc < n_mand) {
2607 if (var) *var = (argi == last_idx) ? last_hash :
argv[argi];
2614 if (var) *var = (argi == last_idx) ? last_hash :
argv[argi];
2618 if (var) *var =
Qnil;
2641 if (var) *var = (argi == last_idx) ? last_hash :
argv[argi];
2647 if (var) *var = hash;
2671 #if defined(__GNUC__) && defined(HAVE_VA_ARGS_MACRO) && defined(__OPTIMIZE__)
2672 # define rb_yield_values(argc, ...) \
2674 const int rb_yield_values_argc = (argc); \
2675 const VALUE rb_yield_values_args[] = {__VA_ARGS__}; \
2676 const int rb_yield_values_nargs = \
2677 (int)(sizeof(rb_yield_values_args) / sizeof(VALUE)); \
2679 rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), \
2680 rb_yield_values_nargs ? rb_yield_values_args : NULL); \
2683 # define rb_funcall(recv, mid, argc, ...) \
2685 const int rb_funcall_argc = (argc); \
2686 const VALUE rb_funcall_args[] = {__VA_ARGS__}; \
2687 const int rb_funcall_nargs = \
2688 (int)(sizeof(rb_funcall_args) / sizeof(VALUE)); \
2689 rb_funcallv(recv, mid, \
2690 rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), \
2691 rb_funcall_nargs ? rb_funcall_args : NULL); \
2695 #ifndef RUBY_DONT_SUBST
2728 #define RUBY_INIT_STACK \
2729 VALUE variable_in_this_stack_frame; \
2730 ruby_init_stack(&variable_in_this_stack_frame);
2759 #if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY
2765 #if defined(__cplusplus)
2773 #ifdef RB_METHOD_DEFINITION_DECL
2777 #define rb_define_method(m, n, f, a) rb_define_method_tmpl<a>::define(m, n, f)
2779 #define rb_define_method_if_constexpr(x, t, f) __builtin_choose_expr(__builtin_choose_expr(__builtin_constant_p(x),(x),0),(t),(f))
2780 #define rb_define_method_choose_prototype15(n) rb_define_method_if_constexpr((n)==15,rb_define_method15,rb_define_methodm3)
2781 #define rb_define_method_choose_prototype14(n) rb_define_method_if_constexpr((n)==14,rb_define_method14,rb_define_method_choose_prototype15(n))
2782 #define rb_define_method_choose_prototype13(n) rb_define_method_if_constexpr((n)==13,rb_define_method13,rb_define_method_choose_prototype14(n))
2783 #define rb_define_method_choose_prototype12(n) rb_define_method_if_constexpr((n)==12,rb_define_method12,rb_define_method_choose_prototype13(n))
2784 #define rb_define_method_choose_prototype11(n) rb_define_method_if_constexpr((n)==11,rb_define_method11,rb_define_method_choose_prototype12(n))
2785 #define rb_define_method_choose_prototype10(n) rb_define_method_if_constexpr((n)==10,rb_define_method10,rb_define_method_choose_prototype11(n))
2786 #define rb_define_method_choose_prototype9(n) rb_define_method_if_constexpr((n)== 9,rb_define_method9, rb_define_method_choose_prototype10(n))
2787 #define rb_define_method_choose_prototype8(n) rb_define_method_if_constexpr((n)== 8,rb_define_method8, rb_define_method_choose_prototype9(n))
2788 #define rb_define_method_choose_prototype7(n) rb_define_method_if_constexpr((n)== 7,rb_define_method7, rb_define_method_choose_prototype8(n))
2789 #define rb_define_method_choose_prototype6(n) rb_define_method_if_constexpr((n)== 6,rb_define_method6, rb_define_method_choose_prototype7(n))
2790 #define rb_define_method_choose_prototype5(n) rb_define_method_if_constexpr((n)== 5,rb_define_method5, rb_define_method_choose_prototype6(n))
2791 #define rb_define_method_choose_prototype4(n) rb_define_method_if_constexpr((n)== 4,rb_define_method4, rb_define_method_choose_prototype5(n))
2792 #define rb_define_method_choose_prototype3(n) rb_define_method_if_constexpr((n)== 3,rb_define_method3, rb_define_method_choose_prototype4(n))
2793 #define rb_define_method_choose_prototype2(n) rb_define_method_if_constexpr((n)== 2,rb_define_method2, rb_define_method_choose_prototype3(n))
2794 #define rb_define_method_choose_prototype1(n) rb_define_method_if_constexpr((n)== 1,rb_define_method1, rb_define_method_choose_prototype2(n))
2795 #define rb_define_method_choose_prototype0(n) rb_define_method_if_constexpr((n)== 0,rb_define_method0, rb_define_method_choose_prototype1(n))
2796 #define rb_define_method_choose_prototypem1(n) rb_define_method_if_constexpr((n)==-1,rb_define_methodm1,rb_define_method_choose_prototype0(n))
2797 #define rb_define_method_choose_prototypem2(n) rb_define_method_if_constexpr((n)==-2,rb_define_methodm2,rb_define_method_choose_prototypem1(n))
2798 #define rb_define_method_choose_prototypem3(n, f) rb_define_method_if_constexpr(rb_f_notimplement_p(f),rb_define_methodm3,rb_define_method_choose_prototypem2(n))
2799 #define rb_define_method(klass, mid, func, arity) rb_define_method_choose_prototypem3((arity),(func))((klass),(mid),(func),(arity));
2804 #define rb_define_module_function(m, n, f, a) rb_define_module_function_tmpl<a>::define(m, n, f)
2806 #define rb_define_module_function_choose_prototype15(n) rb_define_method_if_constexpr((n)==15,rb_define_module_function15,rb_define_module_functionm3)
2807 #define rb_define_module_function_choose_prototype14(n) rb_define_method_if_constexpr((n)==14,rb_define_module_function14,rb_define_module_function_choose_prototype15(n))
2808 #define rb_define_module_function_choose_prototype13(n) rb_define_method_if_constexpr((n)==13,rb_define_module_function13,rb_define_module_function_choose_prototype14(n))
2809 #define rb_define_module_function_choose_prototype12(n) rb_define_method_if_constexpr((n)==12,rb_define_module_function12,rb_define_module_function_choose_prototype13(n))
2810 #define rb_define_module_function_choose_prototype11(n) rb_define_method_if_constexpr((n)==11,rb_define_module_function11,rb_define_module_function_choose_prototype12(n))
2811 #define rb_define_module_function_choose_prototype10(n) rb_define_method_if_constexpr((n)==10,rb_define_module_function10,rb_define_module_function_choose_prototype11(n))
2812 #define rb_define_module_function_choose_prototype9(n) rb_define_method_if_constexpr((n)== 9,rb_define_module_function9, rb_define_module_function_choose_prototype10(n))
2813 #define rb_define_module_function_choose_prototype8(n) rb_define_method_if_constexpr((n)== 8,rb_define_module_function8, rb_define_module_function_choose_prototype9(n))
2814 #define rb_define_module_function_choose_prototype7(n) rb_define_method_if_constexpr((n)== 7,rb_define_module_function7, rb_define_module_function_choose_prototype8(n))
2815 #define rb_define_module_function_choose_prototype6(n) rb_define_method_if_constexpr((n)== 6,rb_define_module_function6, rb_define_module_function_choose_prototype7(n))
2816 #define rb_define_module_function_choose_prototype5(n) rb_define_method_if_constexpr((n)== 5,rb_define_module_function5, rb_define_module_function_choose_prototype6(n))
2817 #define rb_define_module_function_choose_prototype4(n) rb_define_method_if_constexpr((n)== 4,rb_define_module_function4, rb_define_module_function_choose_prototype5(n))
2818 #define rb_define_module_function_choose_prototype3(n) rb_define_method_if_constexpr((n)== 3,rb_define_module_function3, rb_define_module_function_choose_prototype4(n))
2819 #define rb_define_module_function_choose_prototype2(n) rb_define_method_if_constexpr((n)== 2,rb_define_module_function2, rb_define_module_function_choose_prototype3(n))
2820 #define rb_define_module_function_choose_prototype1(n) rb_define_method_if_constexpr((n)== 1,rb_define_module_function1, rb_define_module_function_choose_prototype2(n))
2821 #define rb_define_module_function_choose_prototype0(n) rb_define_method_if_constexpr((n)== 0,rb_define_module_function0, rb_define_module_function_choose_prototype1(n))
2822 #define rb_define_module_function_choose_prototypem1(n) rb_define_method_if_constexpr((n)==-1,rb_define_module_functionm1,rb_define_module_function_choose_prototype0(n))
2823 #define rb_define_module_function_choose_prototypem2(n) rb_define_method_if_constexpr((n)==-2,rb_define_module_functionm2,rb_define_module_function_choose_prototypem1(n))
2824 #define rb_define_module_function_choose_prototypem3(n, f) rb_define_method_if_constexpr(rb_f_notimplement_p(f),rb_define_module_functionm3,rb_define_module_function_choose_prototypem2(n))
2825 #define rb_define_module_function(klass, mid, func, arity) rb_define_module_function_choose_prototypem3((arity),(func))((klass),(mid),(func),(arity));
2830 #define rb_define_global_function(n, f, a) rb_define_global_function_tmpl<a>::define(n, f)
2832 #define rb_define_global_function_choose_prototype15(n) rb_define_method_if_constexpr((n)==15,rb_define_global_function15,rb_define_global_functionm3)
2833 #define rb_define_global_function_choose_prototype14(n) rb_define_method_if_constexpr((n)==14,rb_define_global_function14,rb_define_global_function_choose_prototype15(n))
2834 #define rb_define_global_function_choose_prototype13(n) rb_define_method_if_constexpr((n)==13,rb_define_global_function13,rb_define_global_function_choose_prototype14(n))
2835 #define rb_define_global_function_choose_prototype12(n) rb_define_method_if_constexpr((n)==12,rb_define_global_function12,rb_define_global_function_choose_prototype13(n))
2836 #define rb_define_global_function_choose_prototype11(n) rb_define_method_if_constexpr((n)==11,rb_define_global_function11,rb_define_global_function_choose_prototype12(n))
2837 #define rb_define_global_function_choose_prototype10(n) rb_define_method_if_constexpr((n)==10,rb_define_global_function10,rb_define_global_function_choose_prototype11(n))
2838 #define rb_define_global_function_choose_prototype9(n) rb_define_method_if_constexpr((n)== 9,rb_define_global_function9, rb_define_global_function_choose_prototype10(n))
2839 #define rb_define_global_function_choose_prototype8(n) rb_define_method_if_constexpr((n)== 8,rb_define_global_function8, rb_define_global_function_choose_prototype9(n))
2840 #define rb_define_global_function_choose_prototype7(n) rb_define_method_if_constexpr((n)== 7,rb_define_global_function7, rb_define_global_function_choose_prototype8(n))
2841 #define rb_define_global_function_choose_prototype6(n) rb_define_method_if_constexpr((n)== 6,rb_define_global_function6, rb_define_global_function_choose_prototype7(n))
2842 #define rb_define_global_function_choose_prototype5(n) rb_define_method_if_constexpr((n)== 5,rb_define_global_function5, rb_define_global_function_choose_prototype6(n))
2843 #define rb_define_global_function_choose_prototype4(n) rb_define_method_if_constexpr((n)== 4,rb_define_global_function4, rb_define_global_function_choose_prototype5(n))
2844 #define rb_define_global_function_choose_prototype3(n) rb_define_method_if_constexpr((n)== 3,rb_define_global_function3, rb_define_global_function_choose_prototype4(n))
2845 #define rb_define_global_function_choose_prototype2(n) rb_define_method_if_constexpr((n)== 2,rb_define_global_function2, rb_define_global_function_choose_prototype3(n))
2846 #define rb_define_global_function_choose_prototype1(n) rb_define_method_if_constexpr((n)== 1,rb_define_global_function1, rb_define_global_function_choose_prototype2(n))
2847 #define rb_define_global_function_choose_prototype0(n) rb_define_method_if_constexpr((n)== 0,rb_define_global_function0, rb_define_global_function_choose_prototype1(n))
2848 #define rb_define_global_function_choose_prototypem1(n) rb_define_method_if_constexpr((n)==-1,rb_define_global_functionm1,rb_define_global_function_choose_prototype0(n))
2849 #define rb_define_global_function_choose_prototypem2(n) rb_define_method_if_constexpr((n)==-2,rb_define_global_functionm2,rb_define_global_function_choose_prototypem1(n))
2850 #define rb_define_global_function_choose_prototypem3(n, f) rb_define_method_if_constexpr(rb_f_notimplement_p(f),rb_define_global_functionm3,rb_define_global_function_choose_prototypem2(n))
2851 #define rb_define_global_function(mid, func, arity) rb_define_global_function_choose_prototypem3((arity),(func))((mid),(func),(arity));
2856 #if defined(RUBY_DEVEL) && RUBY_DEVEL && (!defined(__cplusplus) || defined(RB_METHOD_DEFINITION_DECL))
2857 # define RUBY_METHOD_FUNC(func) (func)
2859 # define RUBY_METHOD_FUNC(func) ((VALUE (*)(ANYARGS))(func))
void rb_obj_infect(VALUE victim, VALUE carrier)
Does nothing.
int ruby_brace_glob(const char *, int, ruby_glob_func *, VALUE)
VALUE rb_gv_set(const char *, VALUE)
VALUE rb_check_symbol(volatile VALUE *namep)
VALUE rb_str_export_locale(VALUE)
unsigned int UINT8 __attribute__((__mode__(__QI__)))
void ruby_stop(int ex)
Calls ruby_cleanup() and exits the process.
#define RARRAY_TRANSIENT_P(ary)
RUBY_EXTERN VALUE rb_eSystemCallError
#define RUBY_SYMBOL_EXPORT_END
short rb_num2short(VALUE)
size_t ruby_stack_length(VALUE **)
const char * rb_id2name(ID)
RUBY_EXTERN VALUE rb_cDir
void ruby_set_stack_size(size_t)
ID rb_check_id(volatile VALUE *)
Returns ID for the given name if it is interned already, or 0.
int ruby_safe_level_2_warning(void)
RUBY_EXTERN VALUE rb_cHash
#define FIX_CONST_VALUE_PTR(x)
int ruby_snprintf(char *str, size_t n, char const *fmt,...)
const rb_data_type_t * type
VALUE rb_obj_hide(VALUE obj)
Make the object invisible from Ruby code.
VALUE rb_rescue2(VALUE(*)(VALUE), VALUE, VALUE(*)(VALUE, VALUE), VALUE,...)
An equivalent of rescue clause.
RUBY_EXTERN VALUE rb_mEnumerable
void * ruby_options(int argc, char **argv)
Processes command line arguments and compiles the Ruby source to execute.
RUBY_EXTERN VALUE rb_cData
void rb_check_type(VALUE, int)
VALUE rb_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE)
RUBY_EXTERN VALUE rb_cUnboundMethod
RUBY_EXTERN VALUE rb_eTypeError
void rb_gc_register_mark_object(VALUE)
void ruby_malloc_size_overflow(size_t count, size_t elsize)
VALUE rb_iterate(VALUE(*)(VALUE), VALUE, rb_block_call_func_t, VALUE)
void ruby_show_version(void)
Prints the version information of the CRuby interpreter to stdout.
void rb_warn(const char *fmt,...)
VALUE rb_yield_block(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
ID rb_intern(const char *)
void rb_check_safe_obj(VALUE)
int ruby_exec_node(void *n)
Runs the given compiled source.
RUBY_EXTERN VALUE rb_stderr
VALUE rb_current_receiver(void)
void rb_warning(const char *fmt,...)
#define RMODULE_IS_REFINEMENT
#define RB_BUILTIN_TYPE(x)
RUBY_EXTERN VALUE rb_eFatal
#define RARRAY_EMBED_FLAG
RUBY_EXTERN VALUE rb_cNumeric
VALUE rb_funcallv_kw(VALUE, ID, int, const VALUE *, int)
VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat)
short rb_fix2short(VALUE)
RUBY_EXTERN VALUE rb_eNameError
RUBY_EXTERN VALUE rb_eStopIteration
#define RB_IO_WAIT_WRITABLE
RUBY_EXTERN VALUE rb_mComparable
VALUE rb_to_symbol(VALUE name)
VALUE rb_funcallv(VALUE, ID, int, const VALUE *)
Calls a method.
#define RUBY_ATTR_ALLOC_SIZE(params)
int rb_empty_keyword_given_p(void)
RUBY_EXTERN VALUE rb_cComplex
void rb_bug_errno(const char *mesg, int errno_arg)
VALUE rb_uint2inum(uintptr_t)
rb_gvar_setter_t rb_gvar_var_setter
const rb_data_type_t * parent
void rb_throw_obj(VALUE tag, VALUE value)
RUBY_EXTERN VALUE rb_eLoadError
VALUE rb_equal(VALUE, VALUE)
Same as Object#===, case equality.
RUBY_EXTERN VALUE rb_eInterrupt
VALUE rb_singleton_class_clone(VALUE obj)
VALUE rb_float_new(double)
void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_)
VALUE rb_funcallv_public(VALUE, ID, int, const VALUE *)
Calls a method.
RUBY_EXTERN VALUE rb_cMethod
void(* RUBY_DATA_FUNC)(void *)
#define RB_TYPE_P(obj, type)
RUBY_EXTERN VALUE rb_eSystemExit
int ruby_run_node(void *n)
Runs the given compiled source and exits this process.
RUBY_EXTERN VALUE rb_cModule
RUBY_EXTERN VALUE rb_cTime
RUBY_EXTERN VALUE rb_cProc
double rb_float_value(VALUE v)
VALUE rb_define_module_under(VALUE, const char *)
VALUE * rb_ary_ptr_use_start(VALUE ary)
RUBY_EXTERN VALUE rb_eRuntimeError
RUBY_EXTERN VALUE rb_cFloat
VALUE rb_call_super(int, const VALUE *)
VALUE rb_funcall_passing_block_kw(VALUE, ID, int, const VALUE *, int)
PRINTF_ARGS(NORETURN(void rb_raise(VALUE, const char *,...)), 2, 3)
int ruby_stack_check(void)
RUBY_EXTERN VALUE rb_stdin
struct re_pattern_buffer * ptr
void rb_define_readonly_variable(const char *, const VALUE *)
RUBY_EXTERN VALUE rb_mWaitReadable
VALUE rb_gvar_getter_t(ID id, VALUE *data)
void rb_mod_syserr_fail(VALUE mod, int e, const char *mesg)
VALUE rb_catch_obj(VALUE, rb_block_call_func_t, VALUE)
VALUE * rb_ruby_debug_ptr(void)
RUBY_EXTERN VALUE rb_eIOError
void rb_prepend_module(VALUE, VALUE)
#define RSTRING_EMBED_LEN_MAX
void rb_define_attr(VALUE, const char *, int, int)
Defines (a) public accessor method(s) for an attribute.
RUBY_EXTERN VALUE rb_stdout
RUBY_EXTERN VALUE rb_cClass
void rb_gvar_setter_t(VALUE val, ID id, VALUE *data)
RUBY_EXTERN VALUE rb_cRational
RUBY_EXTERN VALUE rb_cInteger
rb_gvar_setter_t rb_gvar_undef_setter
void ruby_finalize(void)
Runs the VM finalization processes.
int ruby_setup(void)
Initializes the VM and builtin libraries.
unsigned short rb_fix2ushort(VALUE)
VALUE rb_eval_string_wrap(const char *, int *)
Evaluates the given string under a module binding in an isolated binding.
VALUE rb_float_new_in_heap(double)
int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent)
#define RB_OBJ_FREEZE_RAW(x)
#define ERRORFUNC(mesg, x)
#define RUBY_UNTYPED_DATA_FUNC(func)
VALUE rb_funcallv_public_kw(VALUE, ID, int, const VALUE *, int)
VALUE rb_uint2big(uintptr_t)
RUBY_EXTERN VALUE rb_eEncCompatError
void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite writable, int n, const char *mesg)
void rb_fatal(const char *fmt,...)
void rb_gvar_marker_t(VALUE *var)
#define RB_FL_TEST_RAW(x, f)
void rb_define_hooked_variable(const char *, VALUE *, rb_gvar_getter_t *, rb_gvar_setter_t *)
Define a function-backended global variable.
volatile VALUE * rb_gc_guarded_ptr_val(volatile VALUE *ptr, VALUE val)
VALUE rb_funcall_with_block_kw(VALUE, ID, int, const VALUE *, VALUE, int)
void void rb_free_tmp_buffer(volatile VALUE *store)
VALUE rb_syserr_new(int, const char *)
void * rb_alloc_tmp_buffer(volatile VALUE *store, long len) RUBY_ATTR_ALLOC_SIZE((2))
RUBY_EXTERN VALUE rb_eException
char ruby_check_sizeof_voidp[SIZEOF_VOIDP==sizeof(void *) ? 1 :-1]
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)
const char * wrap_struct_name
int ruby_cleanup(volatile int)
Destructs the VM.
RUBY_EXTERN VALUE rb_cRange
VALUE rb_extract_keywords(VALUE *orighash)
VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE *)
void rb_gc_writebarrier(VALUE a, VALUE b)
VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *)
#define UNLIMITED_ARGUMENTS
void ruby_init(void)
Calls ruby_setup() and check error.
void rb_raise(VALUE exc, const char *fmt,...)
RUBY_EXTERN VALUE rb_eNoMatchingPatternError
#define RARRAY_EMBED_LEN_SHIFT
void rb_notimplement(void)
void rb_set_safe_level_force(int)
RUBY_EXTERN VALUE rb_cMatch
VALUE rb_obj_class(VALUE)
Equivalent to Object#class in Ruby.
NORETURN(void rb_insecure_operation(void))
RUBY_EXTERN VALUE rb_eKeyError
VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type)
RUBY_EXTERN VALUE rb_eSysStackError
void ruby_prog_init(void)
Defines built-in variables.
void ruby_incpush(const char *)
RUBY_EXTERN VALUE rb_cNilClass
void rb_syserr_fail(int e, const char *mesg)
VALUE rb_define_class(const char *, VALUE)
Defines a top-level class.
size_t rb_hash_size_num(VALUE hash)
rb_gvar_marker_t rb_gvar_undef_marker
void rb_gc_unregister_address(VALUE *)
void * ruby_process_options(int, char **)
char ruby_check_sizeof_long[SIZEOF_LONG==sizeof(long) ? 1 :-1]
RUBY_EXTERN VALUE rb_cBasicObject
#define TypedData_Make_Struct0(result, klass, type, size, data_type, sval)
int rb_block_given_p(void)
Determines if the current method is given a block.
void ruby_init_stack(volatile VALUE *)
VALUE rb_iv_get(VALUE, const char *)
#define RSTRING_EMBED_LEN_SHIFT
int rb_scan_args_kw(int, int, const VALUE *, const char *,...)
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *)
void rb_insecure_operation(void)
void rb_singleton_class_attached(VALUE klass, VALUE obj)
Attach a object to a singleton class.
RUBY_EXTERN VALUE rb_eRegexpError
RUBY_EXTERN VALUE rb_cSymbol
void rb_extend_object(VALUE, VALUE)
Extend the object with the module.
RUBY_EXTERN VALUE rb_eFloatDomainError
RUBY_EXTERN VALUE rb_eEOFError
void * rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len, size_t count) RUBY_ATTR_ALLOC_SIZE((2
VALUE rb_yield_splat(VALUE)
void rb_compile_warning(const char *file, int line, const char *fmt,...)
VALUE rb_int2big(intptr_t)
unsigned long ruby_strtoul(const char *str, char **endptr, int base)
long rb_fix2int(VALUE val)
void rb_gc_writebarrier_unprotect(VALUE obj)
RUBY_EXTERN VALUE rb_eSecurityError
RUBY_EXTERN VALUE rb_eArgError
VALUE rb_errinfo(void)
The current exception in the current thread.
VALUE rb_ary_push(VALUE ary, VALUE item)
unsigned short rb_num2ushort(VALUE)
int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n)
VALUE rb_newobj_of(VALUE, VALUE)
rb_gvar_getter_t rb_gvar_undef_getter
#define RUBY_FL_USER_N(n)
unsigned long rb_num2ulong(VALUE)
RUBY_EXTERN VALUE rb_eZeroDivError
rb_atomic_t cnt[RUBY_NSIG]
VALUE rb_vrescue2(VALUE(*)(VALUE), VALUE, VALUE(*)(VALUE, VALUE), VALUE, va_list)
An equivalent of rescue clause.
VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
void rb_mod_sys_fail(VALUE mod, const char *mesg)
void ruby_show_copyright(void)
Prints the copyright notice of the CRuby interpreter to stdout.
void ruby_script(const char *name)
Sets the current script name to this value.
void rb_sys_fail(const char *mesg)
rb_gvar_getter_t rb_gvar_val_getter
VALUE rb_require(const char *)
#define RBASIC_CLASS(obj)
#define ROBJECT_EMBED_LEN_MAX
void rb_copy_generic_ivar(VALUE, VALUE)
RUBY_EXTERN VALUE rb_cFalseClass
rb_gvar_getter_t rb_gvar_var_getter
RUBY_EXTERN VALUE rb_eNotImpError
#define rb_check_safe_str(x)
rb_gvar_marker_t rb_gvar_val_marker
VALUE rb_yield_splat_kw(VALUE, int)
long rb_num2int(VALUE val)
void ruby_set_argv(int, char **)
#define RVALUE_EMBED_LEN_MAX
VALUE rb_string_value(volatile VALUE *)
const char * rb_class2name(VALUE)
void rb_gc_register_address(VALUE *)
MJIT_STATIC void rb_error_arity(int argc, int min, int max)
void rb_define_variable(const char *, VALUE *)
void ruby_init_loadpath(void)
void(* rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass)
RUBY_EXTERN VALUE rb_cEncoding
RUBY_EXTERN VALUE rb_cCont
VALUE rb_data_object_zalloc(VALUE, size_t, RUBY_DATA_FUNC, RUBY_DATA_FUNC)
RUBY_EXTERN VALUE rb_eMathDomainError
void rb_sys_warning(const char *fmt,...)
void ruby_set_script_name(VALUE name)
Sets the current script name to this value.
void rb_freeze_singleton_class(VALUE klass)
VALUE rb_yield_values2(int n, const VALUE *argv)
int rb_remove_event_hook(rb_event_hook_func_t func)
RUBY_EXTERN VALUE rb_cThread
void rb_glob(const char *, void(*)(const char *, VALUE, void *), VALUE)
void rb_global_variable(VALUE *)
int rb_typeddata_is_kind_of(VALUE, const rb_data_type_t *)
void rb_mod_syserr_fail_str(VALUE mod, int e, VALUE mesg)
RUBY_EXTERN VALUE rb_mFileTest
DEPRECATED_BY(rb_data_object_wrap, static inline VALUE rb_data_object_alloc(VALUE, void *, RUBY_DATA_FUNC, RUBY_DATA_FUNC))
#define Data_Make_Struct0(result, klass, type, size, mark, free, sval)
#define RMODULE_INCLUDED_INTO_REFINEMENT
VALUE rb_str_to_str(VALUE)
void rb_ary_ptr_use_end(VALUE ary)
VALUE rb_str_export(VALUE)
#define RARRAY_EMBED_LEN(a)
VALUE rb_check_hash_type(VALUE hash)
VALUE rb_eval_string(const char *)
Evaluates the given string in an isolated binding.
void rb_throw(const char *tag, VALUE val)
RUBY_EXTERN VALUE rb_cObject
RUBY_EXTERN VALUE rb_eStandardError
RUBY_EXTERN VALUE rb_mProcess
ID rb_intern2(const char *, long)
void rb_bug(const char *fmt,...)
VALUE rb_data_object_wrap(VALUE, void *, RUBY_DATA_FUNC, RUBY_DATA_FUNC)
rb_block_call_func * rb_block_call_func_t
RUBY_EXTERN VALUE rb_mKernel
void rb_define_alias(VALUE, const char *, const char *)
Defines an alias of a method.
void ruby_sig_finalize(void)
void rb_set_errinfo(VALUE)
Sets the current exception ($!) to the given value.
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
VALUE rb_int2inum(intptr_t)
void rb_define_global_const(const char *, VALUE)
#define RB_STATIC_SYM_P(x)
#define rb_data_typed_object_alloc
#define RUBY_SYMBOL_EXPORT_BEGIN
char ruby_check_sizeof_int[SIZEOF_INT==sizeof(int) ? 1 :-1]
char str[HTML_ESCAPE_MAX_LEN+1]
void rb_ary_detransient(VALUE ary)
int ruby_glob(const char *, int, ruby_glob_func *, VALUE)
void rb_readwrite_sys_fail(enum rb_io_wait_readwrite writable, const char *mesg)
void rb_define_global_function(const char *, VALUE(*)(ANYARGS), int)
Defines a global function.
RUBY_EXTERN VALUE rb_eSignal
int ruby_native_thread_p(void)
void rb_define_module_function(VALUE, const char *, VALUE(*)(ANYARGS), int)
Defines a module function for module.
VALUE rb_define_class_under(VALUE, const char *, VALUE)
Defines a class under the namespace of outer.
#define RARRAY_EMBED_LEN_MAX
RUBY_EXTERN VALUE rb_mMath
void rb_secure_update(VALUE)
RUBY_EXTERN VALUE rb_eLocalJumpError
int ruby_executable_node(void *n, int *status)
Checks the return value of ruby_options().
RUBY_EXTERN VALUE rb_cString
VALUE rb_eval_string_protect(const char *, int *)
Evaluates the given string in an isolated binding.
#define RMODULE_IS_OVERLAID
double rb_num2dbl(VALUE)
Converts a Numeric object to double.
int st_locale_insensitive_strcasecmp(const char *s1, const char *s2)
RUBY_EXTERN VALUE rb_cStat
const char * rb_obj_classname(VALUE)
void rb_sys_fail_str(VALUE mesg)
int rb_scan_args(int, const VALUE *, const char *,...)
void rb_define_const(VALUE, const char *, VALUE)
RUBY_EXTERN VALUE rb_eScriptError
VALUE rb_catch(const char *, rb_block_call_func_t, VALUE)
RUBY_EXTERN VALUE rb_mWaitWritable
RUBY_EXTERN VALUE rb_cTrueClass
char * rb_string_value_cstr(volatile VALUE *)
int ruby_glob_func(const char *, VALUE, void *)
RUBY_EXTERN VALUE rb_eNoMemError
RUBY_EXTERN VALUE rb_cNameErrorMesg
RUBY_EXTERN VALUE rb_eEncodingError
VALUE rb_ensure(VALUE(*)(VALUE), VALUE, VALUE(*)(VALUE), VALUE)
An equivalent to ensure clause.
void ruby_sysinit(int *argc, char ***argv)
Initializes the process for libruby.
void * rb_check_typeddata(VALUE, const rb_data_type_t *)
void rb_iter_break_value(VALUE val)
VALUE rb_define_module(const char *)
void rb_compile_warn(const char *file, int line, const char *fmt,...)
VALUE rb_rescue(VALUE(*)(VALUE), VALUE, VALUE(*)(VALUE, VALUE), VALUE)
An equivalent of rescue clause.
#define RB_IO_WAIT_READABLE
VALUE rb_call_super_kw(int, const VALUE *, int)
#define RB_IMMEDIATE_P(x)
int rb_keyword_given_p(void)
VALUE rb_funcall_with_block(VALUE, ID, int, const VALUE *, VALUE)
RUBY_EXTERN VALUE rb_cBinding
VALUE rb_yield_values(int n,...)
#define RARRAY_EMBED_LEN_MASK
void rb_gc_unprotect_logging(void *objptr, const char *filename, int line)
void rb_undef_method(VALUE, const char *)
int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap)
char * rb_string_value_ptr(volatile VALUE *)
RUBY_EXTERN VALUE rb_eSyntaxError
RUBY_EXTERN VALUE rb_cStruct
RUBY_EXTERN VALUE rb_eRangeError
VALUE rb_gv_get(const char *)
VALUE rb_block_call_kw(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE, int)
#define RARRAY_TRANSIENT_FLAG
rb_gvar_marker_t rb_gvar_var_marker
VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type)
Fills common (RBasic) fields in obj.
void rb_set_safe_level(int)
VALUE rb_syserr_new_str(int n, VALUE arg)
rb_gvar_setter_t rb_gvar_val_setter
RUBY_EXTERN VALUE rb_eIndexError
void rb_define_virtual_variable(const char *, rb_gvar_getter_t *, rb_gvar_setter_t *)
Define a function-backended global variable.
void rb_define_method(VALUE, const char *, VALUE(*)(ANYARGS), int)
VALUE * rb_ruby_verbose_ptr(void)
RUBY_EXTERN VALUE rb_eFrozenError
PUREFUNC(double rb_float_value(VALUE))
RUBY_EXTERN VALUE rb_cEnumerator
RUBY_EXTERN VALUE rb_cRegexp
#define RSTRING_EMBED_LEN_MASK
ID rb_intern_str(VALUE str)
RUBY_SYMBOL_EXPORT_BEGIN void * alloca()
RUBY_EXTERN VALUE rb_cArray
RUBY_EXTERN VALUE rb_eNoMethodError
RUBY_EXTERN VALUE rb_cFile
void rb_need_block(void)
Declares that the current method needs a block.
RUBY_EXTERN VALUE rb_eThreadError
VALUE rb_obj_reveal(VALUE obj, VALUE klass)
Make a hidden object visible again.
RUBY_EXTERN VALUE rb_mErrno
#define rb_data_object_alloc
VALUE type(ANYARGS)
ANYARGS-ed function type.
#define RB_SPECIAL_CONST_P(x)
VALUE rb_iv_set(VALUE, const char *, VALUE)
RUBY_EXTERN VALUE rb_cRandom
void rb_include_module(VALUE, VALUE)
void rb_mod_sys_fail_str(VALUE mod, VALUE mesg)
VALUE rb_get_path_no_checksafe(VALUE)
Provides old prototypes for C++ programs.
void rb_syserr_fail_str(int e, VALUE mesg)
void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
VALUE rb_block_proc(void)