Ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e0ba6b95ab71a441357ed5484e33498)
rb_mjit_min_header-3.1.3.h
1#ifdef __GNUC__
2# pragma GCC system_header
3#endif
4#define ALWAYS_INLINE(x) __attribute__ ((__always_inline__)) x
5typedef __builtin_va_list __gnuc_va_list;
6typedef __gnuc_va_list va_list;
7typedef signed char __int8_t;
8typedef unsigned char __uint8_t;
9typedef short int __int16_t;
10typedef short unsigned int __uint16_t;
11typedef int __int32_t;
12typedef unsigned int __uint32_t;
13typedef long int __int64_t;
14typedef long unsigned int __uint64_t;
15typedef signed char __int_least8_t;
16typedef unsigned char __uint_least8_t;
17typedef short int __int_least16_t;
18typedef short unsigned int __uint_least16_t;
19typedef int __int_least32_t;
20typedef unsigned int __uint_least32_t;
21typedef long int __int_least64_t;
22typedef long unsigned int __uint_least64_t;
23typedef long int __intmax_t;
24typedef long unsigned int __uintmax_t;
25typedef long int __intptr_t;
26typedef long unsigned int __uintptr_t;
27typedef long unsigned int size_t;
28typedef long int ptrdiff_t;
29typedef short unsigned int wchar_t;
30typedef struct {
31 long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
32 long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
34typedef unsigned int wint_t;
35typedef __int64_t __blkcnt_t;
36typedef __int32_t __blksize_t;
37typedef __uint32_t __dev_t;
38typedef unsigned long __fsblkcnt_t;
39typedef unsigned long __fsfilcnt_t;
40typedef __uint32_t __uid_t;
41typedef __uint32_t __gid_t;
42typedef __uint64_t __ino_t;
43typedef long long __key_t;
44typedef __uint16_t __sa_family_t;
45typedef int __socklen_t;
46typedef long _off_t;
47typedef int __pid_t;
48typedef __uint32_t __id_t;
49typedef __uint32_t __mode_t;
50__extension__ typedef long long _off64_t;
51typedef _off_t __off_t;
52typedef _off64_t __loff_t;
53typedef long _fpos_t;
54typedef _off64_t _fpos64_t;
55typedef long unsigned int __size_t;
56typedef long signed int _ssize_t;
57typedef _ssize_t __ssize_t;
58typedef struct
59{
60 int __count;
61 union
62 {
63 wint_t __wch;
64 unsigned char __wchb[4];
65 } __value;
67typedef void *_iconv_t;
68typedef unsigned long __clock_t;
69typedef long __time_t;
70typedef unsigned long __clockid_t;
71typedef unsigned long __timer_t;
72typedef int __nl_item;
73typedef unsigned short __nlink_t;
74typedef long __suseconds_t;
75typedef unsigned long __useconds_t;
76typedef __builtin_va_list __va_list;
77typedef unsigned int __ULong;
78typedef void *_LOCK_T;
79void __cygwin_lock_init(_LOCK_T *);
80void __cygwin_lock_init_recursive(_LOCK_T *);
81void __cygwin_lock_fini(_LOCK_T *);
82void __cygwin_lock_lock(_LOCK_T *);
83int __cygwin_lock_trylock(_LOCK_T *);
84void __cygwin_lock_unlock(_LOCK_T *);
85typedef _LOCK_T _flock_t;
86struct _reent;
87struct __locale_t;
88struct _Bigint
89{
90 struct _Bigint *_next;
91 int _k, _maxwds, _sign, _wds;
92 __ULong _x[1];
93};
94struct __tm
95{
96 int __tm_sec;
97 int __tm_min;
98 int __tm_hour;
99 int __tm_mday;
100 int __tm_mon;
101 int __tm_year;
102 int __tm_wday;
103 int __tm_yday;
104 int __tm_isdst;
105};
107 void * _fnargs[32];
108 void * _dso_handle[32];
109 __ULong _fntypes;
110 __ULong _is_cxa;
111};
112struct _atexit {
113 struct _atexit *_next;
114 int _ind;
115 void (*_fns[32])(void);
117};
118struct __sbuf {
119 unsigned char *_base;
120 int _size;
121};
122struct __sFILE {
123 unsigned char *_p;
124 int _r;
125 int _w;
126 short _flags;
127 short _file;
128 struct __sbuf _bf;
129 int _lbfsize;
130 void * _cookie;
131 _ssize_t (*_read) (struct _reent *, void *,
132 char *, size_t);
133 _ssize_t (*_write) (struct _reent *, void *,
134 const char *,
135 size_t);
136 _fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
137 int (*_close) (struct _reent *, void *);
138 struct __sbuf _ub;
139 unsigned char *_up;
140 int _ur;
141 unsigned char _ubuf[3];
142 unsigned char _nbuf[1];
143 struct __sbuf _lb;
144 int _blksize;
145 _off_t _offset;
146 struct _reent *_data;
147 _flock_t _lock;
148 _mbstate_t _mbstate;
149 int _flags2;
150};
151struct __sFILE64 {
152 unsigned char *_p;
153 int _r;
154 int _w;
155 short _flags;
156 short _file;
157 struct __sbuf _bf;
158 int _lbfsize;
159 struct _reent *_data;
160 void * _cookie;
161 _ssize_t (*_read) (struct _reent *, void *,
162 char *, size_t);
163 _ssize_t (*_write) (struct _reent *, void *,
164 const char *,
165 size_t);
166 _fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
167 int (*_close) (struct _reent *, void *);
168 struct __sbuf _ub;
169 unsigned char *_up;
170 int _ur;
171 unsigned char _ubuf[3];
172 unsigned char _nbuf[1];
173 struct __sbuf _lb;
174 int _blksize;
175 int _flags2;
176 _off64_t _offset;
177 _fpos64_t (*_seek64) (struct _reent *, void *, _fpos64_t, int);
178 _flock_t _lock;
179 _mbstate_t _mbstate;
180};
181typedef struct __sFILE64 __FILE;
182struct _glue
183{
184 struct _glue *_next;
185 int _niobs;
186 __FILE *_iobs;
187};
188struct _rand48 {
189 unsigned short _seed[3];
190 unsigned short _mult[3];
191 unsigned short _add;
192};
193struct _reent
194{
195 int _errno;
196 __FILE *_stdin, *_stdout, *_stderr;
197 int _inc;
198 char _emergency[25];
199 int _unspecified_locale_info;
200 struct __locale_t *_locale;
201 int __sdidinit;
202 void (*__cleanup) (struct _reent *);
203 struct _Bigint *_result;
204 int _result_k;
205 struct _Bigint *_p5s;
206 struct _Bigint **_freelist;
207 int _cvtlen;
208 char *_cvtbuf;
209 union
210 {
211 struct
212 {
213 unsigned int _unused_rand;
214 char * _strtok_last;
215 char _asctime_buf[26];
216 struct __tm _localtime_buf;
217 int _gamma_signgam;
218 __extension__ unsigned long long _rand_next;
219 struct _rand48 _r48;
220 _mbstate_t _mblen_state;
221 _mbstate_t _mbtowc_state;
222 _mbstate_t _wctomb_state;
223 char _l64a_buf[8];
224 char _signal_buf[24];
225 int _getdate_err;
226 _mbstate_t _mbrlen_state;
227 _mbstate_t _mbrtowc_state;
228 _mbstate_t _mbsrtowcs_state;
229 _mbstate_t _wcrtomb_state;
230 _mbstate_t _wcsrtombs_state;
231 int _h_errno;
232 } _reent;
233 struct
234 {
235 unsigned char * _nextf[30];
236 unsigned int _nmalloc[30];
237 } _unused;
238 } _new;
239 struct _atexit *_atexit;
240 struct _atexit _atexit0;
241 void (**_sig_func)(int);
242 struct _glue __sglue;
243 __FILE __sf[3];
244};
245extern struct _reent *_impure_ptr ;
246extern struct _reent *const _global_impure_ptr ;
247void _reclaim_reent (struct _reent *);
248 struct _reent * __getreent (void);
249typedef __uint8_t u_int8_t;
250typedef __uint16_t u_int16_t;
251typedef __uint32_t u_int32_t;
252typedef __uint64_t u_int64_t;
253typedef __intptr_t register_t;
254typedef __int8_t int8_t ;
255typedef __uint8_t uint8_t ;
256typedef __int16_t int16_t ;
257typedef __uint16_t uint16_t ;
258typedef __int32_t int32_t ;
259typedef __uint32_t uint32_t ;
260typedef __int64_t int64_t ;
261typedef __uint64_t uint64_t ;
262typedef __intmax_t intmax_t;
263typedef __uintmax_t uintmax_t;
264typedef __intptr_t intptr_t;
265typedef __uintptr_t uintptr_t;
266static __inline__ __uint32_t __ntohl(__uint32_t);
267static __inline__ __uint16_t __ntohs(__uint16_t);
268static __inline__ __uint32_t
269__ntohl(__uint32_t _x)
270{
271 __asm__("bswap %0" : "=r" (_x) : "0" (_x));
272 return _x;
273}
274static __inline__ __uint16_t
275__ntohs(__uint16_t _x)
276{
277 __asm__("xchgb %b0,%h0"
278 : "=Q" (_x)
279 : "0" (_x));
280 return _x;
281}
282typedef unsigned long __sigset_t;
283typedef __suseconds_t suseconds_t;
284typedef long time_t;
285struct timeval {
286 time_t tv_sec;
287 suseconds_t tv_usec;
288};
289struct timespec {
290 time_t tv_sec;
291 long tv_nsec;
292};
294 struct timespec it_interval;
295 struct timespec it_value;
296};
297typedef __sigset_t sigset_t;
298typedef unsigned long __fd_mask;
299typedef __fd_mask fd_mask;
300typedef struct fd_set {
301 __fd_mask __fds_bits[(((64) + ((((int)sizeof(__fd_mask) * 8)) - 1)) / (((int)sizeof(__fd_mask) * 8)))];
302} fd_set;
303
304int select (int __n, fd_set *__readfds, fd_set *__writefds, fd_set *__exceptfds, struct timeval *__timeout);
305int pselect (int __n, fd_set *__readfds, fd_set *__writefds, fd_set *__exceptfds, const struct timespec *__timeout, const sigset_t *__set);
306
307typedef __uint32_t in_addr_t;
308typedef __uint16_t in_port_t;
309typedef __uintptr_t u_register_t;
310typedef unsigned char u_char;
311typedef unsigned short u_short;
312typedef unsigned int u_int;
313typedef unsigned long u_long;
314typedef unsigned short ushort;
315typedef unsigned int uint;
316typedef unsigned long ulong;
317typedef __blkcnt_t blkcnt_t;
318typedef __blksize_t blksize_t;
319typedef unsigned long clock_t;
320typedef long daddr_t;
321typedef char * caddr_t;
322typedef __fsblkcnt_t fsblkcnt_t;
323typedef __fsfilcnt_t fsfilcnt_t;
324typedef __id_t id_t;
325typedef __ino_t ino_t;
326typedef __off_t off_t;
327typedef __dev_t dev_t;
328typedef __uid_t uid_t;
329typedef __gid_t gid_t;
330typedef __pid_t pid_t;
331typedef __key_t key_t;
332typedef _ssize_t ssize_t;
333typedef __mode_t mode_t;
334typedef __nlink_t nlink_t;
335typedef __clockid_t clockid_t;
336typedef __timer_t timer_t;
337typedef __useconds_t useconds_t;
338typedef __int64_t sbintime_t;
339typedef long unsigned int __cpu_mask;
340typedef struct
341{
342 __cpu_mask __bits[(1024 / (8 * sizeof (__cpu_mask)))];
343} cpu_set_t;
344int __sched_getaffinity_sys (pid_t, size_t, cpu_set_t *);
345typedef struct __pthread_t {char __dummy;} *pthread_t;
346typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
347typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
348typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
349typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
350typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
351typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
352typedef struct __pthread_barrierattr_t {char __dummy;} *pthread_barrierattr_t;
353typedef struct __pthread_barrier_t {char __dummy;} *pthread_barrier_t;
354typedef struct
355{
356 pthread_mutex_t mutex;
357 int state;
358}
360typedef struct __pthread_spinlock_t {char __dummy;} *pthread_spinlock_t;
361typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
362typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
363static __inline unsigned short
364__bswap_16 (unsigned short __x)
365{
366 return (__x >> 8) | (__x << 8);
367}
368static __inline unsigned int
369__bswap_32 (unsigned int __x)
370{
371 return (__bswap_16 (__x & 0xffff) << 16) | (__bswap_16 (__x >> 16));
372}
373static __inline unsigned long long
374__bswap_64 (unsigned long long __x)
375{
376 return (((unsigned long long) __bswap_32 (__x & 0xffffffffull)) << 32) | (__bswap_32 (__x >> 32));
377}
378typedef struct timespec timespec_t;
379typedef struct timespec timestruc_t;
380typedef __loff_t loff_t;
381struct flock {
382 short l_type;
383 short l_whence;
384 off_t l_start;
385 off_t l_len;
386 pid_t l_pid;
387};
388typedef unsigned long vm_offset_t;
389typedef unsigned long vm_size_t;
390typedef void *vm_object_t;
391typedef char *addr_t;
392static __inline__ int gnu_dev_major(dev_t);
393static __inline__ int gnu_dev_minor(dev_t);
394static __inline__ dev_t gnu_dev_makedev(int, int);
395static __inline__ int
396gnu_dev_major(dev_t dev)
397{
398 return (int)(((dev) >> 16) & 0xffff);
399}
400static __inline__ int
401gnu_dev_minor(dev_t dev)
402{
403 return (int)((dev) & 0xffff);
404}
405static __inline__ dev_t
406gnu_dev_makedev(int maj, int min)
407{
408 return (((maj) << 16) | ((min) & 0xffff));
409}
410
411typedef __FILE FILE;
412typedef _fpos64_t fpos_t;
413
414ssize_t getline (char **, size_t *, FILE *);
415ssize_t getdelim (char **, size_t *, int, FILE *);
416
417char * ctermid (char *);
418char * cuserid (char *);
419FILE * tmpfile (void);
420char * tmpnam (char *);
421char * tempnam (const char *, const char *) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
422int fclose (FILE *);
423int fflush (FILE *);
424FILE * freopen (const char *__restrict__, const char *__restrict__, FILE *__restrict__);
425void setbuf (FILE *__restrict__, char *__restrict__);
426int setvbuf (FILE *__restrict__, char *__restrict__, int, size_t);
427int fprintf (FILE *__restrict__, const char *__restrict__, ...)
428 __attribute__ ((__format__ (__printf__, 2, 3)));
429int fscanf (FILE *__restrict__, const char *__restrict__, ...)
430 __attribute__ ((__format__ (__scanf__, 2, 3)));
431int printf (const char *__restrict__, ...)
432 __attribute__ ((__format__ (__printf__, 1, 2)));
433int scanf (const char *__restrict__, ...)
434 __attribute__ ((__format__ (__scanf__, 1, 2)));
435int sscanf (const char *__restrict__, const char *__restrict__, ...)
436 __attribute__ ((__format__ (__scanf__, 2, 3)));
437int vfprintf (FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
438 __attribute__ ((__format__ (__printf__, 2, 0)));
439int vprintf (const char *, __gnuc_va_list)
440 __attribute__ ((__format__ (__printf__, 1, 0)));
441int vsprintf (char *__restrict__, const char *__restrict__, __gnuc_va_list)
442 __attribute__ ((__format__ (__printf__, 2, 0)));
443int fgetc (FILE *);
444char * fgets (char *__restrict__, int, FILE *__restrict__);
445int fputc (int, FILE *);
446int fputs (const char *__restrict__, FILE *__restrict__);
447int getc (FILE *);
448int getchar (void);
449char * gets (char *);
450int putc (int, FILE *);
451int putchar (int);
452int puts (const char *);
453int ungetc (int, FILE *);
454size_t fread (void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
455size_t fwrite (const void *__restrict__ , size_t _size, size_t _n, FILE *);
456int fgetpos (FILE *__restrict__, fpos_t *__restrict__);
457int fseek (FILE *, long, int);
458int fsetpos (FILE *, const fpos_t *);
459long ftell ( FILE *);
460void rewind (FILE *);
461void clearerr (FILE *);
462int feof (FILE *);
463int ferror (FILE *);
464void perror (const char *);
465FILE * fopen (const char *__restrict__ _name, const char *__restrict__ _type);
466int sprintf (char *__restrict__, const char *__restrict__, ...)
467 __attribute__ ((__format__ (__printf__, 2, 3)));
468int remove (const char *);
469int rename (const char *, const char *);
470int fseeko (FILE *, off_t, int);
471off_t ftello (FILE *);
472int fcloseall (void);
473int snprintf (char *__restrict__, size_t, const char *__restrict__, ...)
474 __attribute__ ((__format__ (__printf__, 3, 4)));
475int vsnprintf (char *__restrict__, size_t, const char *__restrict__, __gnuc_va_list)
476 __attribute__ ((__format__ (__printf__, 3, 0)));
477int vfscanf (FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
478 __attribute__ ((__format__ (__scanf__, 2, 0)));
479int vscanf (const char *, __gnuc_va_list)
480 __attribute__ ((__format__ (__scanf__, 1, 0)));
481int vsscanf (const char *__restrict__, const char *__restrict__, __gnuc_va_list)
482 __attribute__ ((__format__ (__scanf__, 2, 0)));
483int asprintf (char **__restrict__, const char *__restrict__, ...)
484 __attribute__ ((__format__ (__printf__, 2, 3)));
485int vasprintf (char **, const char *, __gnuc_va_list)
486 __attribute__ ((__format__ (__printf__, 2, 0)));
487int asiprintf (char **, const char *, ...)
488 __attribute__ ((__format__ (__printf__, 2, 3)));
489char * asniprintf (char *, size_t *, const char *, ...)
490 __attribute__ ((__format__ (__printf__, 3, 4)));
491char * asnprintf (char *__restrict__, size_t *__restrict__, const char *__restrict__, ...)
492 __attribute__ ((__format__ (__printf__, 3, 4)));
493int diprintf (int, const char *, ...)
494 __attribute__ ((__format__ (__printf__, 2, 3)));
495int fiprintf (FILE *, const char *, ...)
496 __attribute__ ((__format__ (__printf__, 2, 3)));
497int fiscanf (FILE *, const char *, ...)
498 __attribute__ ((__format__ (__scanf__, 2, 3)));
499int iprintf (const char *, ...)
500 __attribute__ ((__format__ (__printf__, 1, 2)));
501int iscanf (const char *, ...)
502 __attribute__ ((__format__ (__scanf__, 1, 2)));
503int siprintf (char *, const char *, ...)
504 __attribute__ ((__format__ (__printf__, 2, 3)));
505int siscanf (const char *, const char *, ...)
506 __attribute__ ((__format__ (__scanf__, 2, 3)));
507int sniprintf (char *, size_t, const char *, ...)
508 __attribute__ ((__format__ (__printf__, 3, 4)));
509int vasiprintf (char **, const char *, __gnuc_va_list)
510 __attribute__ ((__format__ (__printf__, 2, 0)));
511char * vasniprintf (char *, size_t *, const char *, __gnuc_va_list)
512 __attribute__ ((__format__ (__printf__, 3, 0)));
513char * vasnprintf (char *, size_t *, const char *, __gnuc_va_list)
514 __attribute__ ((__format__ (__printf__, 3, 0)));
515int vdiprintf (int, const char *, __gnuc_va_list)
516 __attribute__ ((__format__ (__printf__, 2, 0)));
517int vfiprintf (FILE *, const char *, __gnuc_va_list)
518 __attribute__ ((__format__ (__printf__, 2, 0)));
519int vfiscanf (FILE *, const char *, __gnuc_va_list)
520 __attribute__ ((__format__ (__scanf__, 2, 0)));
521int viprintf (const char *, __gnuc_va_list)
522 __attribute__ ((__format__ (__printf__, 1, 0)));
523int viscanf (const char *, __gnuc_va_list)
524 __attribute__ ((__format__ (__scanf__, 1, 0)));
525int vsiprintf (char *, const char *, __gnuc_va_list)
526 __attribute__ ((__format__ (__printf__, 2, 0)));
527int vsiscanf (const char *, const char *, __gnuc_va_list)
528 __attribute__ ((__format__ (__scanf__, 2, 0)));
529int vsniprintf (char *, size_t, const char *, __gnuc_va_list)
530 __attribute__ ((__format__ (__printf__, 3, 0)));
531FILE * fdopen (int, const char *);
532int fileno (FILE *);
533int pclose (FILE *);
534FILE * popen (const char *, const char *);
535void setbuffer (FILE *, char *, int);
536int setlinebuf (FILE *);
537int getw (FILE *);
538int putw (int, FILE *);
539int getc_unlocked (FILE *);
540int getchar_unlocked (void);
541void flockfile (FILE *);
542int ftrylockfile (FILE *);
543void funlockfile (FILE *);
544int putc_unlocked (int, FILE *);
545int putchar_unlocked (int);
546int dprintf (int, const char *__restrict__, ...)
547 __attribute__ ((__format__ (__printf__, 2, 3)));
548FILE * fmemopen (void *__restrict__, size_t, const char *__restrict__);
549FILE * open_memstream (char **, size_t *);
550int vdprintf (int, const char *__restrict__, __gnuc_va_list)
551 __attribute__ ((__format__ (__printf__, 2, 0)));
552int renameat (int, const char *, int, const char *);
553int renameat2 (int, const char *, int, const char *, unsigned int);
554int _asiprintf_r (struct _reent *, char **, const char *, ...)
555 __attribute__ ((__format__ (__printf__, 3, 4)));
556char * _asniprintf_r (struct _reent *, char *, size_t *, const char *, ...)
557 __attribute__ ((__format__ (__printf__, 4, 5)));
558char * _asnprintf_r (struct _reent *, char *__restrict__, size_t *__restrict__, const char *__restrict__, ...)
559 __attribute__ ((__format__ (__printf__, 4, 5)));
560int _asprintf_r (struct _reent *, char **__restrict__, const char *__restrict__, ...)
561 __attribute__ ((__format__ (__printf__, 3, 4)));
562int _diprintf_r (struct _reent *, int, const char *, ...)
563 __attribute__ ((__format__ (__printf__, 3, 4)));
564int _dprintf_r (struct _reent *, int, const char *__restrict__, ...)
565 __attribute__ ((__format__ (__printf__, 3, 4)));
566int _fclose_r (struct _reent *, FILE *);
567int _fcloseall_r (struct _reent *);
568FILE * _fdopen_r (struct _reent *, int, const char *);
569int _fflush_r (struct _reent *, FILE *);
570int _fgetc_r (struct _reent *, FILE *);
571int _fgetc_unlocked_r (struct _reent *, FILE *);
572char * _fgets_r (struct _reent *, char *__restrict__, int, FILE *__restrict__);
573char * _fgets_unlocked_r (struct _reent *, char *__restrict__, int, FILE *__restrict__);
574int _fgetpos_r (struct _reent *, FILE *, fpos_t *);
575int _fsetpos_r (struct _reent *, FILE *, const fpos_t *);
576int _fiprintf_r (struct _reent *, FILE *, const char *, ...)
577 __attribute__ ((__format__ (__printf__, 3, 4)));
578int _fiscanf_r (struct _reent *, FILE *, const char *, ...)
579 __attribute__ ((__format__ (__scanf__, 3, 4)));
580FILE * _fmemopen_r (struct _reent *, void *__restrict__, size_t, const char *__restrict__);
581FILE * _fopen_r (struct _reent *, const char *__restrict__, const char *__restrict__);
582FILE * _freopen_r (struct _reent *, const char *__restrict__, const char *__restrict__, FILE *__restrict__);
583int _fprintf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, ...)
584 __attribute__ ((__format__ (__printf__, 3, 4)));
585int _fpurge_r (struct _reent *, FILE *);
586int _fputc_r (struct _reent *, int, FILE *);
587int _fputc_unlocked_r (struct _reent *, int, FILE *);
588int _fputs_r (struct _reent *, const char *__restrict__, FILE *__restrict__);
589int _fputs_unlocked_r (struct _reent *, const char *__restrict__, FILE *__restrict__);
590size_t _fread_r (struct _reent *, void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
591size_t _fread_unlocked_r (struct _reent *, void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
592int _fscanf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, ...)
593 __attribute__ ((__format__ (__scanf__, 3, 4)));
594int _fseek_r (struct _reent *, FILE *, long, int);
595int _fseeko_r (struct _reent *, FILE *, _off_t, int);
596long _ftell_r (struct _reent *, FILE *);
597_off_t _ftello_r (struct _reent *, FILE *);
598void _rewind_r (struct _reent *, FILE *);
599size_t _fwrite_r (struct _reent *, const void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
600size_t _fwrite_unlocked_r (struct _reent *, const void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
601int _getc_r (struct _reent *, FILE *);
602int _getc_unlocked_r (struct _reent *, FILE *);
603int _getchar_r (struct _reent *);
604int _getchar_unlocked_r (struct _reent *);
605char * _gets_r (struct _reent *, char *);
606int _iprintf_r (struct _reent *, const char *, ...)
607 __attribute__ ((__format__ (__printf__, 2, 3)));
608int _iscanf_r (struct _reent *, const char *, ...)
609 __attribute__ ((__format__ (__scanf__, 2, 3)));
610FILE * _open_memstream_r (struct _reent *, char **, size_t *);
611void _perror_r (struct _reent *, const char *);
612int _printf_r (struct _reent *, const char *__restrict__, ...)
613 __attribute__ ((__format__ (__printf__, 2, 3)));
614int _putc_r (struct _reent *, int, FILE *);
615int _putc_unlocked_r (struct _reent *, int, FILE *);
616int _putchar_unlocked_r (struct _reent *, int);
617int _putchar_r (struct _reent *, int);
618int _puts_r (struct _reent *, const char *);
619int _remove_r (struct _reent *, const char *);
620int _rename_r (struct _reent *,
621 const char *_old, const char *_new);
622int _scanf_r (struct _reent *, const char *__restrict__, ...)
623 __attribute__ ((__format__ (__scanf__, 2, 3)));
624int _siprintf_r (struct _reent *, char *, const char *, ...)
625 __attribute__ ((__format__ (__printf__, 3, 4)));
626int _siscanf_r (struct _reent *, const char *, const char *, ...)
627 __attribute__ ((__format__ (__scanf__, 3, 4)));
628int _sniprintf_r (struct _reent *, char *, size_t, const char *, ...)
629 __attribute__ ((__format__ (__printf__, 4, 5)));
630int _snprintf_r (struct _reent *, char *__restrict__, size_t, const char *__restrict__, ...)
631 __attribute__ ((__format__ (__printf__, 4, 5)));
632int _sprintf_r (struct _reent *, char *__restrict__, const char *__restrict__, ...)
633 __attribute__ ((__format__ (__printf__, 3, 4)));
634int _sscanf_r (struct _reent *, const char *__restrict__, const char *__restrict__, ...)
635 __attribute__ ((__format__ (__scanf__, 3, 4)));
636char * _tempnam_r (struct _reent *, const char *, const char *);
637FILE * _tmpfile_r (struct _reent *);
638char * _tmpnam_r (struct _reent *, char *);
639int _ungetc_r (struct _reent *, int, FILE *);
640int _vasiprintf_r (struct _reent *, char **, const char *, __gnuc_va_list)
641 __attribute__ ((__format__ (__printf__, 3, 0)));
642char * _vasniprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list)
643 __attribute__ ((__format__ (__printf__, 4, 0)));
644char * _vasnprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list)
645 __attribute__ ((__format__ (__printf__, 4, 0)));
646int _vasprintf_r (struct _reent *, char **, const char *, __gnuc_va_list)
647 __attribute__ ((__format__ (__printf__, 3, 0)));
648int _vdiprintf_r (struct _reent *, int, const char *, __gnuc_va_list)
649 __attribute__ ((__format__ (__printf__, 3, 0)));
650int _vdprintf_r (struct _reent *, int, const char *__restrict__, __gnuc_va_list)
651 __attribute__ ((__format__ (__printf__, 3, 0)));
652int _vfiprintf_r (struct _reent *, FILE *, const char *, __gnuc_va_list)
653 __attribute__ ((__format__ (__printf__, 3, 0)));
654int _vfiscanf_r (struct _reent *, FILE *, const char *, __gnuc_va_list)
655 __attribute__ ((__format__ (__scanf__, 3, 0)));
656int _vfprintf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
657 __attribute__ ((__format__ (__printf__, 3, 0)));
658int _vfscanf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
659 __attribute__ ((__format__ (__scanf__, 3, 0)));
660int _viprintf_r (struct _reent *, const char *, __gnuc_va_list)
661 __attribute__ ((__format__ (__printf__, 2, 0)));
662int _viscanf_r (struct _reent *, const char *, __gnuc_va_list)
663 __attribute__ ((__format__ (__scanf__, 2, 0)));
664int _vprintf_r (struct _reent *, const char *__restrict__, __gnuc_va_list)
665 __attribute__ ((__format__ (__printf__, 2, 0)));
666int _vscanf_r (struct _reent *, const char *__restrict__, __gnuc_va_list)
667 __attribute__ ((__format__ (__scanf__, 2, 0)));
668int _vsiprintf_r (struct _reent *, char *, const char *, __gnuc_va_list)
669 __attribute__ ((__format__ (__printf__, 3, 0)));
670int _vsiscanf_r (struct _reent *, const char *, const char *, __gnuc_va_list)
671 __attribute__ ((__format__ (__scanf__, 3, 0)));
672int _vsniprintf_r (struct _reent *, char *, size_t, const char *, __gnuc_va_list)
673 __attribute__ ((__format__ (__printf__, 4, 0)));
674int _vsnprintf_r (struct _reent *, char *__restrict__, size_t, const char *__restrict__, __gnuc_va_list)
675 __attribute__ ((__format__ (__printf__, 4, 0)));
676int _vsprintf_r (struct _reent *, char *__restrict__, const char *__restrict__, __gnuc_va_list)
677 __attribute__ ((__format__ (__printf__, 3, 0)));
678int _vsscanf_r (struct _reent *, const char *__restrict__, const char *__restrict__, __gnuc_va_list)
679 __attribute__ ((__format__ (__scanf__, 3, 0)));
680int fpurge (FILE *);
681ssize_t __getdelim (char **, size_t *, int, FILE *);
682ssize_t __getline (char **, size_t *, FILE *);
683void clearerr_unlocked (FILE *);
684int feof_unlocked (FILE *);
685int ferror_unlocked (FILE *);
686int fileno_unlocked (FILE *);
687int fflush_unlocked (FILE *);
688int fgetc_unlocked (FILE *);
689int fputc_unlocked (int, FILE *);
690size_t fread_unlocked (void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
691size_t fwrite_unlocked (const void *__restrict__ , size_t _size, size_t _n, FILE *);
692char * fgets_unlocked (char *__restrict__, int, FILE *__restrict__);
693int fputs_unlocked (const char *__restrict__, FILE *__restrict__);
694int __srget_r (struct _reent *, FILE *);
695int __swbuf_r (struct _reent *, int, FILE *);
696FILE *funopen (const void *__cookie,
697 int (*__readfn)(void *__c, char *__buf,
698 size_t __n),
699 int (*__writefn)(void *__c, const char *__buf,
700 size_t __n),
701 _fpos64_t (*__seekfn)(void *__c, _fpos64_t __off, int __whence),
702 int (*__closefn)(void *__c));
703FILE *_funopen_r (struct _reent *, const void *__cookie,
704 int (*__readfn)(void *__c, char *__buf,
705 size_t __n),
706 int (*__writefn)(void *__c, const char *__buf,
707 size_t __n),
708 _fpos64_t (*__seekfn)(void *__c, _fpos64_t __off, int __whence),
709 int (*__closefn)(void *__c));
710typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n);
711typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf,
712 size_t __n);
713typedef int cookie_seek_function_t(void *__cookie, _off64_t *__off,
714 int __whence);
715typedef int cookie_close_function_t(void *__cookie);
716typedef struct
717{
718 cookie_read_function_t *read;
719 cookie_write_function_t *write;
720 cookie_seek_function_t *seek;
721 cookie_close_function_t *close;
723FILE *fopencookie (void *__cookie,
724 const char *__mode, cookie_io_functions_t __functions);
725FILE *_fopencookie_r (struct _reent *, void *__cookie,
726 const char *__mode, cookie_io_functions_t __functions);
727static __inline__ int __sgetc_r(struct _reent *__ptr, FILE *__p);
728static __inline__ int __sgetc_r(struct _reent *__ptr, FILE *__p)
729 {
730 int __c = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
731 if ((__p->_flags & 0x4000) && (__c == '\r'))
732 {
733 int __c2 = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
734 if (__c2 == '\n')
735 __c = __c2;
736 else
737 ungetc(__c2, __p);
738 }
739 return __c;
740 }
741static __inline__ int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
742 if ((_p->_flags & 0x4000) && _c == '\n')
743 __sputc_r (_ptr, '\r', _p);
744 if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
745 return (*_p->_p++ = _c);
746 else
747 return (__swbuf_r(_ptr, _c, _p));
748}
749static __inline int
750_getchar_unlocked(void)
751{
752 struct _reent *_ptr;
753 _ptr = (__getreent());
754 return (__sgetc_r(_ptr, ((_ptr)->_stdin)));
755}
756static __inline int
757_putchar_unlocked(int _c)
758{
759 struct _reent *_ptr;
760 _ptr = (__getreent());
761 return (__sputc_r(_ptr, _c, ((_ptr)->_stdout)));
762}
763
764
765void __stack_chk_fail(void) __attribute__((__noreturn__));
766void __chk_fail(void) __attribute__((__noreturn__));
767
768
769int __sprintf_chk(char *__restrict__, int, size_t, const char *__restrict__, ...)
770 __attribute__((__format__ (__printf__, 4, 5)));
771int __vsprintf_chk(char *__restrict__, int, size_t, const char *__restrict__,
772 __va_list)
773 __attribute__((__format__ (__printf__, 4, 0)));
774int __snprintf_chk(char *__restrict__, size_t, int, size_t,
775 const char *__restrict__, ...)
776 __attribute__((__format__ (__printf__, 5, 6)));
777int __vsnprintf_chk(char *__restrict__, size_t, int, size_t,
778 const char *__restrict__, __va_list)
779 __attribute__((__format__ (__printf__, 5, 0)));
780char *__gets_chk(char *, size_t);
781
782char * __ssp_real_fgets (char *__restrict__ __buf, int __len, FILE *__fp) __asm__("" "fgets"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * fgets (char *__restrict__ __buf, int __len, FILE *__fp)
783{
784 if (__len > 0)
785 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && (size_t)__len > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
786 return __ssp_real_fgets(__buf, __len, __fp);
787}
788char * __ssp_real_fgets_unlocked (char *__restrict__ __buf, int __len, FILE *__fp) __asm__("" "fgets_unlocked"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * fgets_unlocked (char *__restrict__ __buf, int __len, FILE *__fp)
789{
790 if (__len > 0)
791 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && (size_t)__len > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
792 return __ssp_real_fgets_unlocked(__buf, __len, __fp);
793}
794size_t __ssp_real_fread (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp) __asm__("" "fread"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) size_t fread (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp)
795{
796 if (__builtin_object_size(__ptr, 0) != (size_t)-1 && __size * __n > __builtin_object_size(__ptr, 0)) __chk_fail();
797 return __ssp_real_fread(__ptr, __size, __n, __fp);
798}
799size_t __ssp_real_fread_unlocked (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp) __asm__("" "fread_unlocked"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) size_t fread_unlocked (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp)
800{
801 if (__builtin_object_size(__ptr, 0) != (size_t)-1 && __size * __n > __builtin_object_size(__ptr, 0)) __chk_fail();
802 return __ssp_real_fread_unlocked(__ptr, __size, __n, __fp);
803}
804struct __locale_t;
805typedef struct __locale_t *locale_t;
806
807struct tm
808{
809 int tm_sec;
810 int tm_min;
811 int tm_hour;
812 int tm_mday;
813 int tm_mon;
814 int tm_year;
815 int tm_wday;
816 int tm_yday;
817 int tm_isdst;
818 long tm_gmtoff;
819 const char *tm_zone;
820};
821clock_t clock (void);
822double difftime (time_t _time2, time_t _time1);
823time_t mktime (struct tm *_timeptr);
824time_t time (time_t *_timer);
825char *asctime (const struct tm *_tblock);
826char *ctime (const time_t *_time);
827struct tm *gmtime (const time_t *_timer);
828struct tm *localtime (const time_t *_timer);
829size_t strftime (char *__restrict__ _s,
830 size_t _maxsize, const char *__restrict__ _fmt,
831 const struct tm *__restrict__ _t);
832extern size_t strftime_l (char *__restrict__ _s, size_t _maxsize,
833 const char *__restrict__ _fmt,
834 const struct tm *__restrict__ _t, locale_t _l);
835char *asctime_r (const struct tm *__restrict__,
836 char *__restrict__);
837char *ctime_r (const time_t *, char *);
838struct tm *gmtime_r (const time_t *__restrict__,
839 struct tm *__restrict__);
840struct tm *localtime_r (const time_t *__restrict__,
841 struct tm *__restrict__);
842
843char *strptime (const char *__restrict__,
844 const char *__restrict__,
845 struct tm *__restrict__);
846char *strptime_l (const char *__restrict__, const char *__restrict__,
847 struct tm *__restrict__, locale_t);
848void tzset (void);
849void _tzset_r (struct _reent *);
850extern __attribute__((dllimport)) long _timezone;
851extern __attribute__((dllimport)) int _daylight;
852extern __attribute__((dllimport)) char *_tzname[2];
853int __attribute__((__cdecl__)) clock_setres (clockid_t, struct timespec *);
854time_t __attribute__((__cdecl__)) timelocal (struct tm *);
855time_t __attribute__((__cdecl__)) timegm (struct tm *);
856extern int stime (const time_t *);
857extern int daylight __asm__ ( "_daylight");
858extern long timezone __asm__ ( "_timezone");
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875typedef __int_least8_t int_least8_t;
876typedef __uint_least8_t uint_least8_t;
877typedef __int_least16_t int_least16_t;
878typedef __uint_least16_t uint_least16_t;
879typedef __int_least32_t int_least32_t;
880typedef __uint_least32_t uint_least32_t;
881typedef __int_least64_t int_least64_t;
882typedef __uint_least64_t uint_least64_t;
883 typedef signed char int_fast8_t;
884 typedef unsigned char uint_fast8_t;
885 typedef long int int_fast16_t;
886 typedef long unsigned int uint_fast16_t;
887 typedef long int int_fast32_t;
888 typedef long unsigned int uint_fast32_t;
889 typedef long int int_fast64_t;
890 typedef long unsigned int uint_fast64_t;
892 __uint16_t significand[4];
893 __uint16_t exponent;
894 __uint16_t padding[3];
895};
897 __uint32_t element[4];
898};
900{
901 __uint16_t cwd;
902 __uint16_t swd;
903 __uint16_t ftw;
904 __uint16_t fop;
905 __uint64_t rip;
906 __uint64_t rdp;
907 __uint32_t mxcsr;
908 __uint32_t mxcr_mask;
909 struct _uc_fpxreg st[8];
910 struct _uc_xmmreg xmm[16];
911 __uint32_t padding[24];
912};
913struct __attribute__ ((__aligned__ (16))) __mcontext
914{
915 __uint64_t p1home;
916 __uint64_t p2home;
917 __uint64_t p3home;
918 __uint64_t p4home;
919 __uint64_t p5home;
920 __uint64_t p6home;
921 __uint32_t ctxflags;
922 __uint32_t mxcsr;
923 __uint16_t cs;
924 __uint16_t ds;
925 __uint16_t es;
926 __uint16_t fs;
927 __uint16_t gs;
928 __uint16_t ss;
929 __uint32_t eflags;
930 __uint64_t dr0;
931 __uint64_t dr1;
932 __uint64_t dr2;
933 __uint64_t dr3;
934 __uint64_t dr6;
935 __uint64_t dr7;
936 __uint64_t rax;
937 __uint64_t rcx;
938 __uint64_t rdx;
939 __uint64_t rbx;
940 __uint64_t rsp;
941 __uint64_t rbp;
942 __uint64_t rsi;
943 __uint64_t rdi;
944 __uint64_t r8;
945 __uint64_t r9;
946 __uint64_t r10;
947 __uint64_t r11;
948 __uint64_t r12;
949 __uint64_t r13;
950 __uint64_t r14;
951 __uint64_t r15;
952 __uint64_t rip;
953 struct _fpstate fpregs;
954 __uint64_t vregs[52];
955 __uint64_t vcx;
956 __uint64_t dbc;
957 __uint64_t btr;
958 __uint64_t bfr;
959 __uint64_t etr;
960 __uint64_t efr;
961 __uint64_t oldmask;
962 __uint64_t cr2;
963};
964typedef union sigval
965{
966 int sival_int;
967 void *sival_ptr;
968} sigval_t;
969typedef struct sigevent
970{
971 sigval_t sigev_value;
972 int sigev_signo;
973 int sigev_notify;
974 void (*sigev_notify_function) (sigval_t);
975 pthread_attr_t *sigev_notify_attributes;
976} sigevent_t;
978{
979 __uint32_t _si_code;
980 void *_si_read_handle;
981 void *_si_write_handle;
982 void *_si_process_handle;
983 __extension__ union
984 {
985 struct {
986 int _si_fd;
987 uint32_t _si_flags;
988 };
989 int64_t _si_pipe_unique_id;
990 char *_si_str;
991 };
992};
993typedef struct
994{
995 int si_signo;
996 int si_code;
997 pid_t si_pid;
998 uid_t si_uid;
999 int si_errno;
1000 __extension__ union
1001 {
1002 __uint32_t __pad[32];
1003 struct _sigcommune _si_commune;
1004 __extension__ struct
1005 {
1006 __extension__ union
1007 {
1008 sigval_t si_sigval;
1009 sigval_t si_value;
1010 };
1011 __extension__ struct
1012 {
1013 timer_t si_tid;
1014 unsigned int si_overrun;
1015 };
1016 };
1017 __extension__ struct
1018 {
1019 int si_status;
1020 clock_t si_utime;
1021 clock_t si_stime;
1022 };
1023 void *si_addr;
1024 };
1025} siginfo_t;
1026enum
1027{
1028 SI_USER = 0,
1029 SI_ASYNCIO = 2,
1030 SI_MESGQ,
1031 SI_TIMER,
1032 SI_QUEUE,
1033 SI_KERNEL,
1034 ILL_ILLOPC = 7,
1035 ILL_ILLOPN,
1036 ILL_ILLADR,
1037 ILL_ILLTRP,
1038 ILL_PRVOPC,
1039 ILL_PRVREG,
1040 ILL_COPROC,
1041 ILL_BADSTK,
1042 FPE_INTDIV = 15,
1043 FPE_INTOVF,
1044 FPE_FLTDIV,
1045 FPE_FLTOVF,
1046 FPE_FLTUND,
1047 FPE_FLTRES,
1048 FPE_FLTINV,
1049 FPE_FLTSUB,
1050 SEGV_MAPERR = 23,
1051 SEGV_ACCERR,
1052 BUS_ADRALN = 25,
1053 BUS_ADRERR,
1054 BUS_OBJERR,
1055 CLD_EXITED = 28,
1056 CLD_KILLED,
1057 CLD_DUMPED,
1058 CLD_TRAPPED,
1059 CLD_STOPPED,
1060 CLD_CONTINUED
1061};
1062enum
1063{
1064 SIGEV_SIGNAL = 0,
1065 SIGEV_NONE,
1066 SIGEV_THREAD
1067};
1068typedef void (*_sig_func_ptr)(int);
1070{
1071 __extension__ union
1072 {
1073 _sig_func_ptr sa_handler;
1074 void (*sa_sigaction) ( int, siginfo_t *, void * );
1075 };
1076 sigset_t sa_mask;
1077 int sa_flags;
1078};
1079void psiginfo (const siginfo_t *, const char *);
1080int sigwait (const sigset_t *, int *);
1081int sigwaitinfo (const sigset_t *, siginfo_t *);
1082int sighold (int);
1083int sigignore (int);
1084int sigrelse (int);
1085_sig_func_ptr sigset (int, _sig_func_ptr);
1086int sigqueue(pid_t, int, const union sigval);
1087int siginterrupt (int, int);
1088extern const char __attribute__((dllimport)) *sys_sigabbrev[];
1089extern const char __attribute__((dllimport)) *sys_siglist[];
1090typedef struct sigaltstack {
1091 void *ss_sp;
1092 int ss_flags;
1093 size_t ss_size;
1094} stack_t;
1095int sigprocmask (int, const sigset_t *, sigset_t *);
1096int pthread_sigmask (int, const sigset_t *, sigset_t *);
1097int kill (pid_t, int);
1098int killpg (pid_t, int);
1099int sigaction (int, const struct sigaction *, struct sigaction *);
1100int sigaddset (sigset_t *, const int);
1101int sigdelset (sigset_t *, const int);
1102int sigismember (const sigset_t *, int);
1103int sigfillset (sigset_t *);
1104int sigemptyset (sigset_t *);
1105int sigpending (sigset_t *);
1106int sigsuspend (const sigset_t *);
1107int sigwait (const sigset_t *, int *);
1108int sigpause (int) __asm__ ("" "__xpg_sigpause");
1109int sigaltstack (const stack_t *__restrict__, stack_t *__restrict__);
1110int pthread_kill (pthread_t, int);
1111int sigwaitinfo (const sigset_t *, siginfo_t *);
1112int sigtimedwait (const sigset_t *, siginfo_t *, const struct timespec *);
1113int sigqueue (pid_t, int, const union sigval);
1114int sig2str(int, char *);
1115int str2sig(const char *__restrict__, int *__restrict__);
1116typedef struct __mcontext mcontext_t;
1117typedef __attribute__ ((__aligned__ (16))) struct __ucontext {
1118 mcontext_t uc_mcontext;
1119 struct __ucontext *uc_link;
1120 sigset_t uc_sigmask;
1121 stack_t uc_stack;
1122 unsigned long int uc_flags;
1123} ucontext_t;
1124
1125typedef int sig_atomic_t;
1126typedef _sig_func_ptr sig_t;
1127typedef _sig_func_ptr sighandler_t;
1128struct _reent;
1129_sig_func_ptr _signal_r (struct _reent *, int, _sig_func_ptr);
1130int _raise_r (struct _reent *, int);
1131_sig_func_ptr signal (int, _sig_func_ptr);
1132int raise (int);
1133void psignal (int, const char *);
1134
1135int clock_settime (clockid_t clock_id, const struct timespec *tp);
1136int clock_gettime (clockid_t clock_id, struct timespec *tp);
1137int clock_getres (clockid_t clock_id, struct timespec *res);
1138int timer_create (clockid_t clock_id,
1139 struct sigevent *__restrict__ evp,
1140 timer_t *__restrict__ timerid);
1141int timer_delete (timer_t timerid);
1142int timer_settime (timer_t timerid, int flags,
1143 const struct itimerspec *__restrict__ value,
1144 struct itimerspec *__restrict__ ovalue);
1145int timer_gettime (timer_t timerid, struct itimerspec *value);
1146int timer_getoverrun (timer_t timerid);
1147int nanosleep (const struct timespec *rqtp, struct timespec *rmtp);
1148int clock_nanosleep (clockid_t clock_id, int flags,
1149 const struct timespec *rqtp, struct timespec *rmtp);
1150int clock_getcpuclockid (pid_t pid, clockid_t *clock_id);
1151int clock_setenable_attr (clockid_t clock_id, int attr);
1152int clock_getenable_attr (clockid_t clock_id, int *attr);
1153struct stat
1154{
1155 dev_t st_dev;
1156 ino_t st_ino;
1157 mode_t st_mode;
1158 nlink_t st_nlink;
1159 uid_t st_uid;
1160 gid_t st_gid;
1161 dev_t st_rdev;
1162 off_t st_size;
1163 timestruc_t st_atim;
1164 timestruc_t st_mtim;
1165 timestruc_t st_ctim;
1166 blksize_t st_blksize;
1167 blkcnt_t st_blocks;
1168 timestruc_t st_birthtim;
1169};
1170int chmod (const char *__path, mode_t __mode );
1171int fchmod (int __fd, mode_t __mode);
1172int fstat (int __fd, struct stat *__sbuf );
1173int mkdir (const char *_path, mode_t __mode );
1174int mkfifo (const char *__path, mode_t __mode );
1175int stat (const char *__restrict__ __path, struct stat *__restrict__ __sbuf );
1176mode_t umask (mode_t __mask );
1177int lstat (const char *__restrict__ __path, struct stat *__restrict__ __buf );
1178int mknod (const char *__path, mode_t __mode, dev_t __dev );
1179int fchmodat (int, const char *, mode_t, int);
1180int fstatat (int, const char *__restrict__ , struct stat *__restrict__, int);
1181int mkdirat (int, const char *, mode_t);
1182int mkfifoat (int, const char *, mode_t);
1183int mknodat (int, const char *, mode_t, dev_t);
1184int utimensat (int, const char *, const struct timespec [2], int);
1185int futimens (int, const struct timespec [2]);
1186char *mkdtemp (char *);
1187const char *getprogname (void);
1188void setprogname (const char *);
1189char *canonicalize_file_name (const char *);
1190int unsetenv (const char *);
1191int clearenv (void);
1192char *ptsname (int);
1193int grantpt (int);
1194int unlockpt (int);
1195int ptsname_r(int, char *, size_t);
1196int getpt (void);
1197int posix_openpt (int);
1198extern void *memalign (size_t, size_t);
1199extern void *valloc (size_t);
1200int getloadavg(double loadavg[], int nelem);
1201
1202typedef struct
1203{
1204 int quot;
1205 int rem;
1206} div_t;
1207typedef struct
1208{
1209 long quot;
1210 long rem;
1211} ldiv_t;
1212typedef struct
1213{
1214 long long int quot;
1215 long long int rem;
1216} lldiv_t;
1217typedef int (*__compar_fn_t) (const void *, const void *);
1218int __locale_mb_cur_max (void);
1219void abort (void) __attribute__ ((__noreturn__));
1220int abs (int);
1221__uint32_t arc4random (void);
1222__uint32_t arc4random_uniform (__uint32_t);
1223void arc4random_buf (void *, size_t);
1224int atexit (void (*__func)(void));
1225double atof (const char *__nptr);
1226float atoff (const char *__nptr);
1227int atoi (const char *__nptr);
1228int _atoi_r (struct _reent *, const char *__nptr);
1229long atol (const char *__nptr);
1230long _atol_r (struct _reent *, const char *__nptr);
1231void * bsearch (const void *__key,
1232 const void *__base,
1233 size_t __nmemb,
1234 size_t __size,
1235 __compar_fn_t _compar);
1236void *calloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__))
1237 __attribute__((__alloc_size__(1, 2))) ;
1238div_t div (int __numer, int __denom);
1239void exit (int __status) __attribute__ ((__noreturn__));
1240void free (void *) ;
1241char * getenv (const char *__string);
1242char * _getenv_r (struct _reent *, const char *__string);
1243char * secure_getenv (const char *__string);
1244char * _findenv (const char *, int *);
1245char * _findenv_r (struct _reent *, const char *, int *);
1246extern char *suboptarg;
1247int getsubopt (char **, char * const *, char **);
1248long labs (long);
1249ldiv_t ldiv (long __numer, long __denom);
1250void *malloc(size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(1))) ;
1251int mblen (const char *, size_t);
1252int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
1253int mbtowc (wchar_t *__restrict__, const char *__restrict__, size_t);
1254int _mbtowc_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
1255int wctomb (char *, wchar_t);
1256int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
1257size_t mbstowcs (wchar_t *__restrict__, const char *__restrict__, size_t);
1258size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
1259size_t wcstombs (char *__restrict__, const wchar_t *__restrict__, size_t);
1260size_t _wcstombs_r (struct _reent *, char *__restrict__, const wchar_t *__restrict__, size_t, _mbstate_t *);
1261char * mkdtemp (char *);
1262int mkostemp (char *, int);
1263int mkostemps (char *, int, int);
1264int mkstemp (char *);
1265int mkstemps (char *, int);
1266char * mktemp (char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
1267char * _mkdtemp_r (struct _reent *, char *);
1268int _mkostemp_r (struct _reent *, char *, int);
1269int _mkostemps_r (struct _reent *, char *, int, int);
1270int _mkstemp_r (struct _reent *, char *);
1271int _mkstemps_r (struct _reent *, char *, int);
1272char * _mktemp_r (struct _reent *, char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
1273void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar);
1274int rand (void);
1275void *realloc(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2))) ;
1276void *reallocarray(void *, size_t, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2, 3)));
1277void *reallocf(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2)));
1278char * realpath (const char *__restrict__ path, char *__restrict__ resolved_path);
1279int rpmatch (const char *response);
1280void setkey (const char *__key);
1281void srand (unsigned __seed);
1282double strtod (const char *__restrict__ __n, char **__restrict__ __end_PTR);
1283double _strtod_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR);
1284float strtof (const char *__restrict__ __n, char **__restrict__ __end_PTR);
1285long strtol (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1286long _strtol_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1287unsigned long strtoul (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1288unsigned long _strtoul_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1289double strtod_l (const char *__restrict__, char **__restrict__, locale_t);
1290float strtof_l (const char *__restrict__, char **__restrict__, locale_t);
1291extern long double strtold_l (const char *__restrict__, char **__restrict__,
1292 locale_t);
1293long strtol_l (const char *__restrict__, char **__restrict__, int, locale_t);
1294unsigned long strtoul_l (const char *__restrict__, char **__restrict__, int,
1295 locale_t __loc);
1296long long strtoll_l (const char *__restrict__, char **__restrict__, int, locale_t);
1297unsigned long long strtoull_l (const char *__restrict__, char **__restrict__, int,
1298 locale_t __loc);
1299int system (const char *__string);
1300long a64l (const char *__input);
1301char * l64a (long __input);
1302char * _l64a_r (struct _reent *,long __input);
1303int on_exit (void (*__func)(int, void *),void *__arg);
1304void _Exit (int __status) __attribute__ ((__noreturn__));
1305int putenv (char *__string);
1306int _putenv_r (struct _reent *, char *__string);
1307void * _reallocf_r (struct _reent *, void *, size_t);
1308int setenv (const char *__string, const char *__value, int __overwrite);
1309int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);
1310char * __itoa (int, char *, int);
1311char * __utoa (unsigned, char *, int);
1312char * itoa (int, char *, int);
1313char * utoa (unsigned, char *, int);
1314int rand_r (unsigned *__seed);
1315double drand48 (void);
1316double _drand48_r (struct _reent *);
1317double erand48 (unsigned short [3]);
1318double _erand48_r (struct _reent *, unsigned short [3]);
1319long jrand48 (unsigned short [3]);
1320long _jrand48_r (struct _reent *, unsigned short [3]);
1321void lcong48 (unsigned short [7]);
1322void _lcong48_r (struct _reent *, unsigned short [7]);
1323long lrand48 (void);
1324long _lrand48_r (struct _reent *);
1325long mrand48 (void);
1326long _mrand48_r (struct _reent *);
1327long nrand48 (unsigned short [3]);
1328long _nrand48_r (struct _reent *, unsigned short [3]);
1329unsigned short *
1330 seed48 (unsigned short [3]);
1331unsigned short *
1332 _seed48_r (struct _reent *, unsigned short [3]);
1333void srand48 (long);
1334void _srand48_r (struct _reent *, long);
1335char * initstate (unsigned, char *, size_t);
1336long random (void);
1337char * setstate (char *);
1338void srandom (unsigned);
1339long long atoll (const char *__nptr);
1340long long _atoll_r (struct _reent *, const char *__nptr);
1341long long llabs (long long);
1342lldiv_t lldiv (long long __numer, long long __denom);
1343long long strtoll (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1344long long _strtoll_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1345unsigned long long strtoull (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1346unsigned long long _strtoull_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1347int posix_memalign (void **, size_t, size_t) __attribute__((__nonnull__ (1)))
1348 __attribute__((__warn_unused_result__));
1349char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);
1350int _system_r (struct _reent *, const char *);
1351void __eprintf (const char *, const char *, unsigned int, const char *);
1352void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk);
1353extern long double _strtold_r (struct _reent *, const char *__restrict__, char **__restrict__);
1354extern long double strtold (const char *__restrict__, char **__restrict__);
1355void * aligned_alloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__alloc_align__(1)))
1356 __attribute__((__alloc_size__(2))) __attribute__((__warn_unused_result__));
1357int at_quick_exit(void (*)(void));
1358_Noreturn void
1359 quick_exit(int);
1360
1361
1362size_t __ssp_real_mbstowcs (wchar_t *__buf, const char *__src, size_t __n) __asm__("" "mbstowcs"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) size_t mbstowcs (wchar_t *__buf, const char *__src, size_t __n)
1363{
1364 if (__buf != ((void *)0))
1365 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(wchar_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1366 return __ssp_real_mbstowcs (__buf, __src, __n);
1367}
1368size_t __ssp_real_wcstombs (char *__buf, const wchar_t *__src, size_t __len) __asm__("" "wcstombs"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) size_t wcstombs (char *__buf, const wchar_t *__src, size_t __len) { if (__buf != ((void *)0)) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_wcstombs (__buf, __src, __len); };
1369int __ssp_real_wctomb (char *__buf, wchar_t __wc) __asm__("" "wctomb"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int wctomb (char *__buf, wchar_t __wc)
1370{
1371 if (__buf != ((void *)0))
1372 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __locale_mb_cur_max() > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1373 return __ssp_real_wctomb (__buf, __wc);
1374}
1375
1376
1377int bcmp(const void *, const void *, size_t) __attribute__((__pure__));
1378void bcopy(const void *, void *, size_t);
1379void bzero(void *, size_t);
1380void explicit_bzero(void *, size_t);
1381int ffs(int) __attribute__((__const__));
1382int ffsl(long) __attribute__((__const__));
1383int ffsll(long long) __attribute__((__const__));
1384int fls(int) __attribute__((__const__));
1385int flsl(long) __attribute__((__const__));
1386int flsll(long long) __attribute__((__const__));
1387char *index(const char *, int) __attribute__((__pure__));
1388char *rindex(const char *, int) __attribute__((__pure__));
1389int strcasecmp(const char *, const char *) __attribute__((__pure__));
1390int strncasecmp(const char *, const char *, size_t) __attribute__((__pure__));
1391int strcasecmp_l (const char *, const char *, locale_t);
1392int strncasecmp_l (const char *, const char *, size_t, locale_t);
1393
1394void __ssp_real_explicit_bzero (void *__buf, size_t __len) __asm__("" "explicit_bzero"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void explicit_bzero (void *__buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 0) != (size_t)-1 && __len > __builtin_object_size(__buf, 0)) __chk_fail(); return __ssp_real_explicit_bzero (__buf, __len); };
1395
1396void * memchr (const void *, int, size_t);
1397int memcmp (const void *, const void *, size_t);
1398void * memcpy (void *__restrict__, const void *__restrict__, size_t);
1399void * memmove (void *, const void *, size_t);
1400void * memset (void *, int, size_t);
1401char *strcat (char *__restrict__, const char *__restrict__);
1402char *strchr (const char *, int);
1403int strcmp (const char *, const char *);
1404int strcoll (const char *, const char *);
1405char *strcpy (char *__restrict__, const char *__restrict__);
1406size_t strcspn (const char *, const char *);
1407char *strerror (int);
1408size_t strlen (const char *);
1409char *strncat (char *__restrict__, const char *__restrict__, size_t);
1410int strncmp (const char *, const char *, size_t);
1411char *strncpy (char *__restrict__, const char *__restrict__, size_t);
1412char *strpbrk (const char *, const char *);
1413char *strrchr (const char *, int);
1414size_t strspn (const char *, const char *);
1415char *strstr (const char *, const char *);
1416char *strtok (char *__restrict__, const char *__restrict__);
1417size_t strxfrm (char *__restrict__, const char *__restrict__, size_t);
1418int strcoll_l (const char *, const char *, locale_t);
1419char *strerror_l (int, locale_t);
1420size_t strxfrm_l (char *__restrict__, const char *__restrict__, size_t, locale_t);
1421char *strtok_r (char *__restrict__, const char *__restrict__, char **__restrict__);
1422int timingsafe_bcmp (const void *, const void *, size_t);
1423int timingsafe_memcmp (const void *, const void *, size_t);
1424void * memccpy (void *__restrict__, const void *__restrict__, int, size_t);
1425void * mempcpy (void *, const void *, size_t);
1426void * memmem (const void *, size_t, const void *, size_t);
1427void * memrchr (const void *, int, size_t);
1428void * rawmemchr (const void *, int);
1429char *stpcpy (char *__restrict__, const char *__restrict__);
1430char *stpncpy (char *__restrict__, const char *__restrict__, size_t);
1431char *strcasestr (const char *, const char *);
1432char *strchrnul (const char *, int);
1433char *strdup (const char *) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
1434char *_strdup_r (struct _reent *, const char *);
1435char *strndup (const char *, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
1436char *_strndup_r (struct _reent *, const char *, size_t);
1437char *strerror_r (int, char *, size_t);
1438char * _strerror_r (struct _reent *, int, int, int *);
1439size_t strlcat (char *, const char *, size_t);
1440size_t strlcpy (char *, const char *, size_t);
1441size_t strnlen (const char *, size_t);
1442char *strsep (char **, const char *);
1443char *strnstr(const char *, const char *, size_t) __attribute__((__pure__));
1444char *strlwr (char *);
1445char *strupr (char *);
1446char *strsignal (int __signo);
1447int strtosigno (const char *__name);
1448int strverscmp (const char *, const char *);
1449char *__attribute__((__nonnull__ (1))) basename (const char *) __asm__("" "__gnu_basename");
1450
1451
1452void *__memcpy_chk(void *, const void *, size_t, size_t);
1453void *__memmove_chk(void *, void *, size_t, size_t);
1454void *__mempcpy_chk(void *, const void *, size_t, size_t);
1455void *__memset_chk(void *, int, size_t, size_t);
1456char *__stpcpy_chk(char *, const char *, size_t);
1457char *__strcat_chk(char *, const char *, size_t);
1458char *__strcpy_chk(char *, const char *, size_t);
1459char *__strncat_chk(char *, const char *, size_t, size_t);
1460char *__strncpy_chk(char *, const char *, size_t, size_t);
1461
1462
1463extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __memcpy_ichk(void * __restrict__, const void * __restrict__, size_t); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __memcpy_ichk(void * __restrict__ dst, const void * __restrict__ src, size_t len) { return __builtin___memcpy_chk(dst, src, len, __builtin_object_size(dst, 0)); }
1464extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __memmove_ichk(void *, const void *, size_t); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __memmove_ichk(void * dst, const void * src, size_t len) { return __builtin___memmove_chk(dst, src, len, __builtin_object_size(dst, 0)); }
1465extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __mempcpy_ichk(void * __restrict__, const void * __restrict__, size_t); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __mempcpy_ichk(void * __restrict__ dst, const void * __restrict__ src, size_t len) { return __builtin___mempcpy_chk(dst, src, len, __builtin_object_size(dst, 0)); }
1466extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __memset_ichk(void *, int, size_t); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) void * __memset_ichk(void * dst, int src, size_t len) { return __builtin___memset_chk(dst, src, len, __builtin_object_size(dst, 0)); }
1467extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __stpcpy_ichk(char *, const char *); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __stpcpy_ichk(char * __restrict__ dst, const char * __restrict__ src) { return __builtin___stpcpy_chk(dst, src, __builtin_object_size(dst, 0)); }
1468extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __stpncpy_ichk(char * __restrict__, const char * __restrict__, size_t); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __stpncpy_ichk(char * __restrict__ dst, const char * __restrict__ src, size_t len) { return __builtin___stpncpy_chk(dst, src, len, __builtin_object_size(dst, 0)); }
1469extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strcpy_ichk(char *, const char *); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strcpy_ichk(char * __restrict__ dst, const char * __restrict__ src) { return __builtin___strcpy_chk(dst, src, __builtin_object_size(dst, 0)); }
1470extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strcat_ichk(char *, const char *); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strcat_ichk(char * __restrict__ dst, const char * __restrict__ src) { return __builtin___strcat_chk(dst, src, __builtin_object_size(dst, 0)); }
1471extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strncpy_ichk(char * __restrict__, const char * __restrict__, size_t); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strncpy_ichk(char * __restrict__ dst, const char * __restrict__ src, size_t len) { return __builtin___strncpy_chk(dst, src, len, __builtin_object_size(dst, 0)); }
1472extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strncat_ichk(char * __restrict__, const char * __restrict__, size_t); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * __strncat_ichk(char * __restrict__ dst, const char * __restrict__ src, size_t len) { return __builtin___strncat_chk(dst, src, len, __builtin_object_size(dst, 0)); }
1473
1474typedef struct {
1475 intmax_t quot;
1476 intmax_t rem;
1477} imaxdiv_t;
1478struct _reent;
1479extern intmax_t imaxabs(intmax_t);
1480extern imaxdiv_t imaxdiv(intmax_t __numer, intmax_t __denomer);
1481extern intmax_t strtoimax(const char *__restrict__, char **__restrict__, int);
1482extern intmax_t _strtoimax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1483extern uintmax_t strtoumax(const char *__restrict__, char **__restrict__, int);
1484extern uintmax_t _strtoumax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1485extern intmax_t wcstoimax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1486extern intmax_t _wcstoimax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1487extern uintmax_t wcstoumax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1488extern uintmax_t _wcstoumax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1489extern intmax_t strtoimax_l(const char *__restrict__, char **_restrict, int, locale_t);
1490extern uintmax_t strtoumax_l(const char *__restrict__, char **_restrict, int, locale_t);
1491extern intmax_t wcstoimax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1492extern uintmax_t wcstoumax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1493extern char **environ;
1494void _exit (int __status) __attribute__ ((__noreturn__));
1495int access (const char *__path, int __amode);
1496unsigned alarm (unsigned __secs);
1497int chdir (const char *__path);
1498int chmod (const char *__path, mode_t __mode);
1499int chown (const char *__path, uid_t __owner, gid_t __group);
1500int chroot (const char *__path);
1501int close (int __fildes);
1502size_t confstr (int __name, char *__buf, size_t __len);
1503char * crypt (const char *__key, const char *__salt);
1504int daemon (int nochdir, int noclose);
1505int dup (int __fildes);
1506int dup2 (int __fildes, int __fildes2);
1507int dup3 (int __fildes, int __fildes2, int flags);
1508int eaccess (const char *__path, int __mode);
1509void encrypt (char *__block, int __edflag);
1510void endusershell (void);
1511int euidaccess (const char *__path, int __mode);
1512int execl (const char *__path, const char *, ...);
1513int execle (const char *__path, const char *, ...);
1514int execlp (const char *__file, const char *, ...);
1515int execlpe (const char *__file, const char *, ...);
1516int execv (const char *__path, char * const __argv[]);
1517int execve (const char *__path, char * const __argv[], char * const __envp[]);
1518int execvp (const char *__file, char * const __argv[]);
1519int execvpe (const char *__file, char * const __argv[], char * const __envp[]);
1520int faccessat (int __dirfd, const char *__path, int __mode, int __flags);
1521int fchdir (int __fildes);
1522int fchmod (int __fildes, mode_t __mode);
1523int fchown (int __fildes, uid_t __owner, gid_t __group);
1524int fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags);
1525int fexecve (int __fd, char * const __argv[], char * const __envp[]);
1526pid_t fork (void);
1527long fpathconf (int __fd, int __name);
1528int fsync (int __fd);
1529int fdatasync (int __fd);
1530char * get_current_dir_name (void);
1531char * getcwd (char *__buf, size_t __size);
1532int getdomainname (char *__name, size_t __len);
1533int getentropy (void *, size_t);
1534gid_t getegid (void);
1535uid_t geteuid (void);
1536gid_t getgid (void);
1537int getgroups (int __gidsetsize, gid_t __grouplist[]);
1538long gethostid (void);
1539char * getlogin (void);
1540int getlogin_r (char *name, size_t namesize) ;
1541char * getpass (const char *__prompt);
1542int getpagesize (void);
1543int getpeereid (int, uid_t *, gid_t *);
1544pid_t getpgid (pid_t);
1545pid_t getpgrp (void);
1546pid_t getpid (void);
1547pid_t getppid (void);
1548pid_t getsid (pid_t);
1549uid_t getuid (void);
1550char * getusershell (void);
1551char * getwd (char *__buf);
1552int iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser);
1553int isatty (int __fildes);
1554int issetugid (void);
1555int lchown (const char *__path, uid_t __owner, gid_t __group);
1556int link (const char *__path1, const char *__path2);
1557int linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags);
1558int nice (int __nice_value);
1559off_t lseek (int __fildes, off_t __offset, int __whence);
1560int lockf (int __fd, int __cmd, off_t __len);
1561long pathconf (const char *__path, int __name);
1562int pause (void);
1563int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
1564int pipe (int __fildes[2]);
1565int pipe2 (int __fildes[2], int flags);
1566ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
1567ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset);
1568_ssize_t read (int __fd, void *__buf, size_t __nbyte);
1569int rresvport (int *__alport);
1570int revoke (char *__path);
1571int rmdir (const char *__path);
1572int ruserok (const char *rhost, int superuser, const char *ruser, const char *luser);
1573void * sbrk (ptrdiff_t __incr);
1574int setegid (gid_t __gid);
1575int seteuid (uid_t __uid);
1576int setgid (gid_t __gid);
1577int setgroups (int ngroups, const gid_t *grouplist);
1578int sethostname (const char *, size_t);
1579int setpgid (pid_t __pid, pid_t __pgid);
1580int setpgrp (void);
1581int setregid (gid_t __rgid, gid_t __egid);
1582int setreuid (uid_t __ruid, uid_t __euid);
1583pid_t setsid (void);
1584int setuid (uid_t __uid);
1585void setusershell (void);
1586unsigned sleep (unsigned int __seconds);
1587void swab (const void *__restrict__, void *__restrict__, ssize_t);
1588long sysconf (int __name);
1589pid_t tcgetpgrp (int __fildes);
1590int tcsetpgrp (int __fildes, pid_t __pgrp_id);
1591char * ttyname (int __fildes);
1592int ttyname_r (int, char *, size_t);
1593int unlink (const char *__path);
1594int usleep (useconds_t __useconds);
1595int vhangup (void);
1596_ssize_t write (int __fd, const void *__buf, size_t __nbyte);
1597extern int __attribute__((dllimport)) opterr;
1598extern int __attribute__((dllimport)) optind;
1599extern int __attribute__((dllimport)) optopt;
1600extern int __attribute__((dllimport)) optreset;
1601extern char __attribute__((dllimport)) *optarg;
1602int getopt (int, char * const *, const char *);
1603pid_t vfork (void);
1604int ftruncate (int __fd, off_t __length);
1605int truncate (const char *, off_t __length);
1606int getdtablesize (void);
1607useconds_t ualarm (useconds_t __useconds, useconds_t __interval);
1608 int gethostname (char *__name, size_t __len);
1609int setdtablesize (int);
1610void sync (void);
1611ssize_t readlink (const char *__restrict__ __path,
1612 char *__restrict__ __buf, size_t __buflen);
1613int symlink (const char *__name1, const char *__name2);
1614ssize_t readlinkat (int __dirfd1, const char *__restrict__ __path,
1615 char *__restrict__ __buf, size_t __buflen);
1616int symlinkat (const char *, int, const char *);
1617int unlinkat (int, const char *, int);
1618
1619size_t __ssp_real_confstr (int __name, char *__buf, size_t __len) __asm__("" "confstr"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) size_t confstr (int __name, char *__buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_confstr (__name, __buf, __len); };
1620char * __ssp_real_getcwd (char *__buf, size_t __len) __asm__("" "getcwd"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * getcwd (char *__buf, size_t __len) { if (__buf != 0) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_getcwd (__buf, __len); };
1621int __ssp_real_getdomainname (char *__buf, size_t __len) __asm__("" "getdomainname"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int getdomainname (char *__buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_getdomainname (__buf, __len); };
1622int __ssp_real_getgroups (int __n, gid_t __buf[]) __asm__("" "getgroups"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int getgroups (int __n, gid_t __buf[])
1623{
1624 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(gid_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1625 return __ssp_real_getgroups (__n, __buf);
1626}
1627int __ssp_real_gethostname (char *__buf, size_t __len) __asm__("" "gethostname"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int gethostname (char *__buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_gethostname (__buf, __len); };
1628int __ssp_real_getlogin_r (char *__buf, size_t __len) __asm__("" "getlogin_r"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int getlogin_r (char *__buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_getlogin_r (__buf, __len); };
1629ssize_t __ssp_real_pread (int __fd, void *__buf, size_t __len, off_t __off) __asm__("" "pread"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) ssize_t pread (int __fd, void *__buf, size_t __len, off_t __off) { if (1) if (__builtin_object_size(__buf, 0) != (size_t)-1 && __len > __builtin_object_size(__buf, 0)) __chk_fail(); return __ssp_real_pread (__fd, __buf, __len, __off); };
1630_ssize_t __ssp_real_read (int __fd, void *__buf, size_t __len) __asm__("" "read"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) _ssize_t read (int __fd, void *__buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 0) != (size_t)-1 && __len > __builtin_object_size(__buf, 0)) __chk_fail(); return __ssp_real_read (__fd, __buf, __len); };
1631ssize_t __ssp_real_readlink (const char *__restrict__ __path, char *__restrict__ __buf, size_t __len) __asm__("" "readlink"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) ssize_t readlink (const char *__restrict__ __path, char *__restrict__ __buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_readlink (__path, __buf, __len); };
1632ssize_t __ssp_real_readlinkat (int __dirfd1, const char *__restrict__ __path, char *__restrict__ __buf, size_t __len) __asm__("" "readlinkat"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) ssize_t readlinkat (int __dirfd1, const char *__restrict__ __path, char *__restrict__ __buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_readlinkat (__dirfd1, __path, __buf, __len); };
1633int __ssp_real_ttyname_r (int __fd, char *__buf, size_t __len) __asm__("" "ttyname_r"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int ttyname_r (int __fd, char *__buf, size_t __len) { if (1) if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __len > __builtin_object_size(__buf, 2 > 1)) __chk_fail(); return __ssp_real_ttyname_r (__fd, __buf, __len); };
1634
1635
1636
1637[[nodiscard]]
1638__attribute__((__malloc__))
1639__attribute__((__returns_nonnull__))
1640__attribute__((__alloc_size__ (1)))
1641void *ruby_xmalloc(size_t size)
1642
1643;
1644[[nodiscard]]
1645__attribute__((__malloc__))
1646__attribute__((__returns_nonnull__))
1647__attribute__((__alloc_size__ (1,2)))
1648void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
1649
1650;
1651[[nodiscard]]
1652__attribute__((__malloc__))
1653__attribute__((__returns_nonnull__))
1654__attribute__((__alloc_size__ (1,2)))
1655void *ruby_xcalloc(size_t nelems, size_t elemsiz)
1656
1657;
1658[[nodiscard]]
1659__attribute__((__returns_nonnull__))
1660__attribute__((__alloc_size__ (2)))
1661void *ruby_xrealloc(void *ptr, size_t newsiz)
1662
1663;
1664[[nodiscard]]
1665__attribute__((__returns_nonnull__))
1666__attribute__((__alloc_size__ (2,3)))
1667void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
1668
1669;
1670void ruby_xfree(void *ptr)
1671
1672;
1673
1674
1675#define RBIMPL_ATTR_COLD_H
1676#define RBIMPL_ATTR_COLD() __attribute__((__cold__))
1677
1678
1679__attribute__((__noreturn__))
1680__attribute__((__cold__))
1681void rb_assert_failure(const char *file, int line, const char *name, const char *expr);
1682
1683
1684#define COLDFUNC RBIMPL_ATTR_COLD()
1685
1686extern double atan (double);
1687extern double cos (double);
1688extern double sin (double);
1689extern double tan (double);
1690extern double tanh (double);
1691extern double frexp (double, int *);
1692extern double modf (double, double *);
1693extern double ceil (double);
1694extern double fabs (double);
1695extern double floor (double);
1696extern double acos (double);
1697extern double asin (double);
1698extern double atan2 (double, double);
1699extern double cosh (double);
1700extern double sinh (double);
1701extern double exp (double);
1702extern double ldexp (double, int);
1703extern double log (double);
1704extern double log10 (double);
1705extern double pow (double, double);
1706extern double sqrt (double);
1707extern double fmod (double, double);
1708extern int finite (double);
1709extern int finitef (float);
1710extern int finitel (long double);
1711extern int isinff (float);
1712extern int isnanf (float);
1713extern int isinfl (long double);
1714extern int isnanl (long double);
1715extern int isinf (double);
1716extern int isnan (double);
1717 typedef float float_t;
1718 typedef double double_t;
1719extern int __isinff (float);
1720extern int __isinfd (double);
1721extern int __isnanf (float);
1722extern int __isnand (double);
1723extern int __fpclassifyf (float);
1724extern int __fpclassifyd (double);
1725extern int __signbitf (float);
1726extern int __signbitd (double);
1727extern double infinity (void);
1728extern double nan (const char *);
1729extern double copysign (double, double);
1730extern double logb (double);
1731extern int ilogb (double);
1732extern double asinh (double);
1733extern double cbrt (double);
1734extern double nextafter (double, double);
1735extern double rint (double);
1736extern double scalbn (double, int);
1737extern double exp2 (double);
1738extern double scalbln (double, long int);
1739extern double tgamma (double);
1740extern double nearbyint (double);
1741extern long int lrint (double);
1742extern long long int llrint (double);
1743extern double round (double);
1744extern long int lround (double);
1745extern long long int llround (double);
1746extern double trunc (double);
1747extern double remquo (double, double, int *);
1748extern double fdim (double, double);
1749extern double fmax (double, double);
1750extern double fmin (double, double);
1751extern double fma (double, double, double);
1752extern double log1p (double);
1753extern double expm1 (double);
1754extern double acosh (double);
1755extern double atanh (double);
1756extern double remainder (double, double);
1757extern double gamma (double);
1758extern double lgamma (double);
1759extern double erf (double);
1760extern double erfc (double);
1761extern double log2 (double);
1762extern double hypot (double, double);
1763extern float atanf (float);
1764extern float cosf (float);
1765extern float sinf (float);
1766extern float tanf (float);
1767extern float tanhf (float);
1768extern float frexpf (float, int *);
1769extern float modff (float, float *);
1770extern float ceilf (float);
1771extern float fabsf (float);
1772extern float floorf (float);
1773extern float acosf (float);
1774extern float asinf (float);
1775extern float atan2f (float, float);
1776extern float coshf (float);
1777extern float sinhf (float);
1778extern float expf (float);
1779extern float ldexpf (float, int);
1780extern float logf (float);
1781extern float log10f (float);
1782extern float powf (float, float);
1783extern float sqrtf (float);
1784extern float fmodf (float, float);
1785extern float exp2f (float);
1786extern float scalblnf (float, long int);
1787extern float tgammaf (float);
1788extern float nearbyintf (float);
1789extern long int lrintf (float);
1790extern long long int llrintf (float);
1791extern float roundf (float);
1792extern long int lroundf (float);
1793extern long long int llroundf (float);
1794extern float truncf (float);
1795extern float remquof (float, float, int *);
1796extern float fdimf (float, float);
1797extern float fmaxf (float, float);
1798extern float fminf (float, float);
1799extern float fmaf (float, float, float);
1800extern float infinityf (void);
1801extern float nanf (const char *);
1802extern float copysignf (float, float);
1803extern float logbf (float);
1804extern int ilogbf (float);
1805extern float asinhf (float);
1806extern float cbrtf (float);
1807extern float nextafterf (float, float);
1808extern float rintf (float);
1809extern float scalbnf (float, int);
1810extern float log1pf (float);
1811extern float expm1f (float);
1812extern float acoshf (float);
1813extern float atanhf (float);
1814extern float remainderf (float, float);
1815extern float gammaf (float);
1816extern float lgammaf (float);
1817extern float erff (float);
1818extern float erfcf (float);
1819extern float log2f (float);
1820extern float hypotf (float, float);
1821extern long double atanl (long double);
1822extern long double cosl (long double);
1823extern long double sinl (long double);
1824extern long double tanl (long double);
1825extern long double tanhl (long double);
1826extern long double frexpl (long double, int *);
1827extern long double modfl (long double, long double *);
1828extern long double ceill (long double);
1829extern long double fabsl (long double);
1830extern long double floorl (long double);
1831extern long double log1pl (long double);
1832extern long double expm1l (long double);
1833extern long double acosl (long double);
1834extern long double asinl (long double);
1835extern long double atan2l (long double, long double);
1836extern long double coshl (long double);
1837extern long double sinhl (long double);
1838extern long double expl (long double);
1839extern long double ldexpl (long double, int);
1840extern long double logl (long double);
1841extern long double log10l (long double);
1842extern long double powl (long double, long double);
1843extern long double sqrtl (long double);
1844extern long double fmodl (long double, long double);
1845extern long double hypotl (long double, long double);
1846extern long double copysignl (long double, long double);
1847extern long double nanl (const char *);
1848extern int ilogbl (long double);
1849extern long double asinhl (long double);
1850extern long double cbrtl (long double);
1851extern long double nextafterl (long double, long double);
1852extern float nexttowardf (float, long double);
1853extern double nexttoward (double, long double);
1854extern long double nexttowardl (long double, long double);
1855extern long double logbl (long double);
1856extern long double log2l (long double);
1857extern long double rintl (long double);
1858extern long double scalbnl (long double, int);
1859extern long double exp2l (long double);
1860extern long double scalblnl (long double, long);
1861extern long double tgammal (long double);
1862extern long double nearbyintl (long double);
1863extern long int lrintl (long double);
1864extern long long int llrintl (long double);
1865extern long double roundl (long double);
1866extern long lroundl (long double);
1867extern long long int llroundl (long double);
1868extern long double truncl (long double);
1869extern long double remquol (long double, long double, int *);
1870extern long double fdiml (long double, long double);
1871extern long double fmaxl (long double, long double);
1872extern long double fminl (long double, long double);
1873extern long double fmal (long double, long double, long double);
1874extern long double acoshl (long double);
1875extern long double atanhl (long double);
1876extern long double remainderl (long double, long double);
1877extern long double lgammal (long double);
1878extern long double erfl (long double);
1879extern long double erfcl (long double);
1880extern double drem (double, double);
1881extern float dremf (float, float);
1882extern float dreml (long double, long double);
1883extern double gamma_r (double, int *);
1884extern double lgamma_r (double, int *);
1885extern float gammaf_r (float, int *);
1886extern float lgammaf_r (float, int *);
1887extern double y0 (double);
1888extern double y1 (double);
1889extern double yn (int, double);
1890extern double j0 (double);
1891extern double j1 (double);
1892extern double jn (int, double);
1893extern float y0f (float);
1894extern float y1f (float);
1895extern float ynf (int, float);
1896extern float j0f (float);
1897extern float j1f (float);
1898extern float jnf (int, float);
1899extern void sincos (double, double *, double *);
1900extern void sincosf (float, float *, float *);
1901extern void sincosl (long double, long double *, long double *);
1902extern double exp10 (double);
1903extern double pow10 (double);
1904extern float exp10f (float);
1905extern float pow10f (float);
1906extern float exp10l (float);
1907extern float pow10l (float);
1908extern int *__signgam (void);
1909
1910struct timezone {
1911 int tz_minuteswest;
1912 int tz_dsttime;
1913};
1914struct bintime {
1915 time_t sec;
1916 uint64_t frac;
1917};
1918static __inline void
1919bintime_addx(struct bintime *_bt, uint64_t _x)
1920{
1921 uint64_t _u;
1922 _u = _bt->frac;
1923 _bt->frac += _x;
1924 if (_u > _bt->frac)
1925 _bt->sec++;
1926}
1927static __inline void
1928bintime_add(struct bintime *_bt, const struct bintime *_bt2)
1929{
1930 uint64_t _u;
1931 _u = _bt->frac;
1932 _bt->frac += _bt2->frac;
1933 if (_u > _bt->frac)
1934 _bt->sec++;
1935 _bt->sec += _bt2->sec;
1936}
1937static __inline void
1938bintime_sub(struct bintime *_bt, const struct bintime *_bt2)
1939{
1940 uint64_t _u;
1941 _u = _bt->frac;
1942 _bt->frac -= _bt2->frac;
1943 if (_u < _bt->frac)
1944 _bt->sec--;
1945 _bt->sec -= _bt2->sec;
1946}
1947static __inline void
1948bintime_mul(struct bintime *_bt, u_int _x)
1949{
1950 uint64_t _p1, _p2;
1951 _p1 = (_bt->frac & 0xffffffffull) * _x;
1952 _p2 = (_bt->frac >> 32) * _x + (_p1 >> 32);
1953 _bt->sec *= _x;
1954 _bt->sec += (_p2 >> 32);
1955 _bt->frac = (_p2 << 32) | (_p1 & 0xffffffffull);
1956}
1957static __inline void
1958bintime_shift(struct bintime *_bt, int _exp)
1959{
1960 if (_exp > 0) {
1961 _bt->sec <<= _exp;
1962 _bt->sec |= _bt->frac >> (64 - _exp);
1963 _bt->frac <<= _exp;
1964 } else if (_exp < 0) {
1965 _bt->frac >>= -_exp;
1966 _bt->frac |= (uint64_t)_bt->sec << (64 + _exp);
1967 _bt->sec >>= -_exp;
1968 }
1969}
1970static __inline int
1971sbintime_getsec(sbintime_t _sbt)
1972{
1973 return (_sbt >> 32);
1974}
1975static __inline sbintime_t
1976bttosbt(const struct bintime _bt)
1977{
1978 return (((sbintime_t)_bt.sec << 32) + (_bt.frac >> 32));
1979}
1980static __inline struct bintime
1981sbttobt(sbintime_t _sbt)
1982{
1983 struct bintime _bt;
1984 _bt.sec = _sbt >> 32;
1985 _bt.frac = _sbt << 32;
1986 return (_bt);
1987}
1988static __inline int64_t
1989sbttons(sbintime_t _sbt)
1990{
1991 uint64_t ns;
1992 ns = _sbt;
1993 if (ns >= ((sbintime_t)1 << 32))
1994 ns = (ns >> 32) * 1000000000;
1995 else
1996 ns = 0;
1997 return (ns + (1000000000 * (_sbt & 0xffffffffu) >> 32));
1998}
1999static __inline sbintime_t
2000nstosbt(int64_t _ns)
2001{
2002 sbintime_t sb = 0;
2003 if (_ns >= ((sbintime_t)1 << 32)) {
2004 sb = (_ns / 1000000000) * ((sbintime_t)1 << 32);
2005 _ns = _ns % 1000000000;
2006 }
2007 sb += ((_ns * 9223372037ull) + 0x7fffffff) >> 31;
2008 return (sb);
2009}
2010static __inline int64_t
2011sbttous(sbintime_t _sbt)
2012{
2013 return ((1000000 * _sbt) >> 32);
2014}
2015static __inline sbintime_t
2016ustosbt(int64_t _us)
2017{
2018 sbintime_t sb = 0;
2019 if (_us >= ((sbintime_t)1 << 32)) {
2020 sb = (_us / 1000000) * ((sbintime_t)1 << 32);
2021 _us = _us % 1000000;
2022 }
2023 sb += ((_us * 9223372036855ull) + 0x7fffffff) >> 31;
2024 return (sb);
2025}
2026static __inline int64_t
2027sbttoms(sbintime_t _sbt)
2028{
2029 return ((1000 * _sbt) >> 32);
2030}
2031static __inline sbintime_t
2032mstosbt(int64_t _ms)
2033{
2034 sbintime_t sb = 0;
2035 if (_ms >= ((sbintime_t)1 << 32)) {
2036 sb = (_ms / 1000) * ((sbintime_t)1 << 32);
2037 _ms = _ms % 1000;
2038 }
2039 sb += ((_ms * 9223372036854776ull) + 0x7fffffff) >> 31;
2040 return (sb);
2041}
2042static __inline void
2043bintime2timespec(const struct bintime *_bt, struct timespec *_ts)
2044{
2045 _ts->tv_sec = _bt->sec;
2046 _ts->tv_nsec = ((uint64_t)1000000000 *
2047 (uint32_t)(_bt->frac >> 32)) >> 32;
2048}
2049static __inline void
2050timespec2bintime(const struct timespec *_ts, struct bintime *_bt)
2051{
2052 _bt->sec = _ts->tv_sec;
2053 _bt->frac = _ts->tv_nsec * (uint64_t)18446744073LL;
2054}
2055static __inline void
2056bintime2timeval(const struct bintime *_bt, struct timeval *_tv)
2057{
2058 _tv->tv_sec = _bt->sec;
2059 _tv->tv_usec = ((uint64_t)1000000 * (uint32_t)(_bt->frac >> 32)) >> 32;
2060}
2061static __inline void
2062timeval2bintime(const struct timeval *_tv, struct bintime *_bt)
2063{
2064 _bt->sec = _tv->tv_sec;
2065 _bt->frac = _tv->tv_usec * (uint64_t)18446744073709LL;
2066}
2067static __inline struct timespec
2068sbttots(sbintime_t _sbt)
2069{
2070 struct timespec _ts;
2071 _ts.tv_sec = _sbt >> 32;
2072 _ts.tv_nsec = sbttons((uint32_t)_sbt);
2073 return (_ts);
2074}
2075static __inline sbintime_t
2076tstosbt(struct timespec _ts)
2077{
2078 return (((sbintime_t)_ts.tv_sec << 32) + nstosbt(_ts.tv_nsec));
2079}
2080static __inline struct timeval
2081sbttotv(sbintime_t _sbt)
2082{
2083 struct timeval _tv;
2084 _tv.tv_sec = _sbt >> 32;
2085 _tv.tv_usec = sbttous((uint32_t)_sbt);
2086 return (_tv);
2087}
2088static __inline sbintime_t
2089tvtosbt(struct timeval _tv)
2090{
2091 return (((sbintime_t)_tv.tv_sec << 32) + ustosbt(_tv.tv_usec));
2092}
2094 struct timeval it_interval;
2095 struct timeval it_value;
2096};
2097
2098int utimes (const char *, const struct timeval [2]);
2099int adjtime (const struct timeval *, struct timeval *);
2100int futimes (int, const struct timeval [2]);
2101int lutimes (const char *, const struct timeval [2]);
2102int settimeofday (const struct timeval *, const struct timezone *);
2103int getitimer (int __which, struct itimerval *__value);
2104int setitimer (int __which, const struct itimerval *__restrict__ __value,
2105 struct itimerval *__restrict__ __ovalue);
2106int gettimeofday (struct timeval *__restrict__ __p,
2107 void *__restrict__ __tz);
2108int futimesat (int, const char *, const struct timeval [2]);
2109
2110
2111typedef union
2112{
2113 double value;
2114 struct
2115 {
2116 unsigned int fraction1:32;
2117 unsigned int fraction0:20;
2118 unsigned int exponent :11;
2119 unsigned int sign : 1;
2120 } number;
2121 struct
2122 {
2123 unsigned int function1:32;
2124 unsigned int function0:19;
2125 unsigned int quiet:1;
2126 unsigned int exponent: 11;
2127 unsigned int sign : 1;
2128 } nan;
2129 struct
2130 {
2131 unsigned long lsw;
2132 unsigned long msw;
2133 } parts;
2134 long aslong[2];
2136typedef union
2137{
2138 float value;
2139 struct
2140 {
2141 unsigned int fraction0: 7;
2142 unsigned int fraction1: 16;
2143 unsigned int exponent: 8;
2144 unsigned int sign : 1;
2145 } number;
2146 struct
2147 {
2148 unsigned int function1:16;
2149 unsigned int function0:6;
2150 unsigned int quiet:1;
2151 unsigned int exponent:8;
2152 unsigned int sign:1;
2153 } nan;
2154 long p1;
2156typedef struct ieee_ext
2157{
2158 unsigned int ext_fracl : 32;
2159 unsigned int ext_frach : 32;
2160 unsigned int ext_exp : 15;
2161 unsigned int ext_sign : 1;
2162} ieee_ext;
2163typedef union ieee_ext_u
2164{
2165 long double extu_ld;
2166 struct ieee_ext extu_ext;
2167} ieee_ext_u;
2168typedef int fp_rnd;
2169fp_rnd fpgetround (void);
2170fp_rnd fpsetround (fp_rnd);
2171typedef int fp_except;
2172fp_except fpgetmask (void);
2173fp_except fpsetmask (fp_except);
2174fp_except fpgetsticky (void);
2175fp_except fpsetsticky (fp_except);
2176typedef int fp_rdi;
2177fp_rdi fpgetroundtoi (void);
2178fp_rdi fpsetroundtoi (fp_rdi);
2179
2180
2181
2182__attribute__((__format__(__printf__, 1, 2)))
2183extern void setproctitle(const char *fmt, ...);
2184
2185
2186void __assert (const char *, int, const char *)
2187 __attribute__ ((__noreturn__));
2188void __assert_func (const char *, int, const char *, const char *)
2189 __attribute__ ((__noreturn__));
2190typedef unsigned long VALUE;
2191typedef unsigned long ID;
2192__extension__ _Static_assert(4 == sizeof(int), "sizeof_int" ": " "SIZEOF_INT == sizeof(int)");
2193__extension__ _Static_assert(8 == sizeof(long), "sizeof_long" ": " "SIZEOF_LONG == sizeof(long)");
2194__extension__ _Static_assert(8 == sizeof(long long), "sizeof_long_long" ": " "SIZEOF_LONG_LONG == sizeof(LONG_LONG)");
2195__extension__ _Static_assert(8 == sizeof(void *), "sizeof_voidp" ": " "SIZEOF_VOIDP == sizeof(void *)");
2196
2197
2198VALUE rb_class_new(VALUE super);
2199VALUE rb_mod_init_copy(VALUE clone, VALUE orig);
2200void rb_check_inheritable(VALUE super);
2201VALUE rb_define_class_id(ID id, VALUE super);
2202VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super);
2203VALUE rb_module_new(void);
2204VALUE rb_refinement_new(void);
2205VALUE rb_define_module_id(ID id);
2206VALUE rb_define_module_id_under(VALUE outer, ID id);
2207VALUE rb_mod_included_modules(VALUE mod);
2208VALUE rb_mod_include_p(VALUE child, VALUE parent);
2209VALUE rb_mod_ancestors(VALUE mod);
2210VALUE rb_class_descendants(VALUE klass);
2211VALUE rb_class_subclasses(VALUE klass);
2212VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod);
2213VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod);
2214VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod);
2215VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod);
2216VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj);
2217void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(), int arity);
2218void rb_undef(VALUE mod, ID mid);
2219__attribute__((__nonnull__ ()))
2220void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2221__attribute__((__nonnull__ ()))
2222void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2223__attribute__((__nonnull__ ()))
2224void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(), int arity);
2225VALUE rb_singleton_class(VALUE obj);
2226
2227
2228
2229
2230int rb_sourceline(void);
2231const char *rb_sourcefile(void);
2232int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);
2233VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv);
2234VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
2235VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat);
2236VALUE rb_apply(VALUE recv, ID mid, VALUE args);
2237VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv);
2238VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv);
2239VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod);
2240VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod);
2241typedef VALUE (*rb_alloc_func_t)(VALUE klass);
2242void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func);
2243void rb_undef_alloc_func(VALUE klass);
2245void rb_clear_constant_cache(void);
2246void rb_alias(VALUE klass, ID dst, ID src);
2247void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility);
2248__attribute__((__nonnull__ ()))
2249void rb_remove_method(VALUE klass, const char *name);
2250void rb_remove_method_id(VALUE klass, ID mid);
2251int rb_method_boundp(VALUE klass, ID id, int ex);
2252int rb_method_basic_definition_p(VALUE klass, ID mid);
2253int rb_obj_respond_to(VALUE obj, ID mid, int private_p);
2254int rb_respond_to(VALUE obj, ID mid);
2255__attribute__((__noreturn__))
2256VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker);
2257void rb_backtrace(void);
2258VALUE rb_make_backtrace(void);
2259
2260
2261
2262
2263__attribute__((__nonnull__ ()))
2264void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2265__attribute__((__nonnull__ ()))
2266void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2267__attribute__((__nonnull__ ()))
2268void rb_define_global_function(const char *mid, VALUE (*func)(), int arity);
2269__attribute__((__nonnull__ ()))
2270void rb_undef_method(VALUE klass, const char *name);
2271__attribute__((__nonnull__ ()))
2272void rb_define_alias(VALUE klass, const char *dst, const char *src);
2273__attribute__((__nonnull__ ()))
2274void rb_define_attr(VALUE klass, const char *name, int read, int write);
2275
2276
2277
2278
2279VALUE rb_int2big(intptr_t i);
2280VALUE rb_int2inum(intptr_t i);
2281VALUE rb_uint2big(uintptr_t i);
2282VALUE rb_uint2inum(uintptr_t i);
2283
2284
2285enum
2286
2287ruby_special_consts {
2288 RUBY_Qfalse = 0x00,
2289 RUBY_Qtrue = 0x14,
2290 RUBY_Qnil = 0x08,
2291 RUBY_Qundef = 0x34,
2292 RUBY_IMMEDIATE_MASK = 0x07,
2293 RUBY_FIXNUM_FLAG = 0x01,
2294 RUBY_FLONUM_MASK = 0x03,
2295 RUBY_FLONUM_FLAG = 0x02,
2296 RUBY_SYMBOL_FLAG = 0x0c,
2298};
2299__attribute__((__const__))
2300
2301__attribute__((__artificial__))
2302static inline _Bool
2303RB_TEST(VALUE obj)
2304{
2305 return obj & ~RUBY_Qnil;
2306}
2307__attribute__((__const__))
2308
2309__attribute__((__artificial__))
2310static inline _Bool
2311RB_NIL_P(VALUE obj)
2312{
2313 return obj == RUBY_Qnil;
2314}
2315__attribute__((__const__))
2316
2317__attribute__((__artificial__))
2318static inline _Bool
2319RB_FIXNUM_P(VALUE obj)
2320{
2321 return obj & RUBY_FIXNUM_FLAG;
2322}
2323__attribute__((__const__))
2324
2325__attribute__((__artificial__))
2326static inline _Bool
2327RB_STATIC_SYM_P(VALUE obj)
2328{
2329
2330 const VALUE mask = ~((0x7fffffffffffffffL * 2UL + 1) << RUBY_SPECIAL_SHIFT);
2331 return (obj & mask) == RUBY_SYMBOL_FLAG;
2332}
2333__attribute__((__const__))
2334
2335__attribute__((__artificial__))
2336static inline _Bool
2337RB_FLONUM_P(VALUE obj)
2338{
2339 return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG;
2340}
2341__attribute__((__const__))
2342
2343__attribute__((__artificial__))
2344static inline _Bool
2345RB_IMMEDIATE_P(VALUE obj)
2346{
2347 return obj & RUBY_IMMEDIATE_MASK;
2348}
2349__attribute__((__const__))
2350
2351__attribute__((__artificial__))
2352static inline _Bool
2353RB_SPECIAL_CONST_P(VALUE obj)
2354{
2355 return RB_IMMEDIATE_P(obj) || ! RB_TEST(obj);
2356}
2357__attribute__((__const__))
2358
2359static inline VALUE
2360rb_special_const_p(VALUE obj)
2361{
2362 return RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue;
2363}
2364
2365
2366__attribute__((__noreturn__))
2367__attribute__((__cold__))
2368void rb_out_of_int(long num);
2369long rb_num2long(VALUE num);
2370unsigned long rb_num2ulong(VALUE num);
2371
2372
2373__attribute__((__const__))
2374
2375__attribute__((__artificial__))
2376static inline VALUE
2377RB_INT2FIX(long i)
2378{
2379 ((void)0);
2380 const unsigned long j = i;
2381 const unsigned long k = 2 * j + RUBY_FIXNUM_FLAG;
2382 const long l = k;
2383 const long m = l;
2384 const VALUE n = m;
2385 ((void)0);
2386 return n;
2387}
2388static inline int
2389rb_long2int_inline(long n)
2390{
2391 int i = ((int)n);
2392 if (sizeof(long) <= sizeof(int)) {
2393 ((__builtin_expect(!!(!!(i == n)), 1)) ? ((void)0) : __builtin_unreachable());
2394 }
2395 if (i != n)
2396 rb_out_of_int(n);
2397 return i;
2398}
2399__attribute__((__const__))
2400
2401static inline long
2402rbimpl_fix2long_by_idiv(VALUE x)
2403{
2404 ((void)0);
2405 const long y = x - RUBY_FIXNUM_FLAG;
2406 const long z = y / 2;
2407 const long w = ((long)z);
2408 ((void)0);
2409 return w;
2410}
2411__attribute__((__const__))
2412
2413static inline long
2414rbimpl_fix2long_by_shift(VALUE x)
2415{
2416 ((void)0);
2417 const long y = x;
2418 const long z = y >> 1;
2419 const long w = ((long)z);
2420 ((void)0);
2421 return w;
2422}
2423__attribute__((__const__))
2424
2425static inline _Bool
2426rbimpl_right_shift_is_arithmetic_p(void)
2427{
2428 return (-1 >> 1) == -1;
2429}
2430__attribute__((__const__))
2431
2432static inline long
2433rb_fix2long(VALUE x)
2434{
2435 if (rbimpl_right_shift_is_arithmetic_p()) {
2436 return rbimpl_fix2long_by_shift(x);
2437 }
2438 else {
2439 return rbimpl_fix2long_by_idiv(x);
2440 }
2441}
2442__attribute__((__const__))
2443
2444static inline unsigned long
2445rb_fix2ulong(VALUE x)
2446{
2447 ((void)0);
2448 return rb_fix2long(x);
2449}
2450static inline long
2451rb_num2long_inline(VALUE x)
2452{
2453 if (RB_FIXNUM_P(x))
2454 return rb_fix2long(x);
2455 else
2456 return rb_num2long(x);
2457}
2458static inline unsigned long
2459rb_num2ulong_inline(VALUE x)
2460{
2461 if (RB_FIXNUM_P(x))
2462 return rb_fix2ulong(x);
2463 else
2464 return rb_num2ulong(x);
2465}
2466static inline VALUE
2467rb_long2num_inline(long v)
2468{
2469 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2470 return RB_INT2FIX(v);
2471 else
2472 return rb_int2big(v);
2473}
2474static inline VALUE
2475rb_ulong2num_inline(unsigned long v)
2476{
2477 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2478 return RB_INT2FIX(v);
2479 else
2480 return rb_uint2big(v);
2481}
2482
2483
2484long rb_num2int(VALUE num);
2485long rb_fix2int(VALUE num);
2486unsigned long rb_num2uint(VALUE num);
2487unsigned long rb_fix2uint(VALUE num);
2488
2489
2490__attribute__((__artificial__))
2491static inline int
2492RB_FIX2INT(VALUE x)
2493{
2494 long ret;
2495 if (sizeof(int) < sizeof(long)) {
2496 ret = rb_fix2int(x);
2497 }
2498 else {
2499 ret = rb_fix2long(x);
2500 }
2501 return ((int)ret);
2502}
2503static inline int
2504rb_num2int_inline(VALUE x)
2505{
2506 long ret;
2507 if (sizeof(int) == sizeof(long)) {
2508 ret = rb_num2long_inline(x);
2509 }
2510 else if (RB_FIXNUM_P(x)) {
2511 ret = rb_fix2int(x);
2512 }
2513 else {
2514 ret = rb_num2int(x);
2515 }
2516 return ((int)ret);
2517}
2518__attribute__((__artificial__))
2519static inline unsigned int
2520RB_NUM2UINT(VALUE x)
2521{
2522 unsigned long ret;
2523 if (sizeof(int) < sizeof(long)) {
2524 ret = rb_num2uint(x);
2525 }
2526 else {
2527 ret = rb_num2ulong_inline(x);
2528 }
2529 return ((unsigned int)ret);
2530}
2531__attribute__((__artificial__))
2532static inline unsigned int
2533RB_FIX2UINT(VALUE x)
2534{
2535 unsigned long ret;
2536 if (sizeof(int) < sizeof(long)) {
2537 ret = rb_fix2uint(x);
2538 }
2539 else {
2540 ret = rb_fix2ulong(x);
2541 }
2542 return ((unsigned int)ret);
2543}
2544
2545
2546
2547
2548static inline VALUE
2549rb_int2num_inline(int v)
2550{
2551 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2552 return RB_INT2FIX(v);
2553 else
2554 return rb_int2big(v);
2555}
2556static inline VALUE
2557rb_uint2num_inline(unsigned int v)
2558{
2559 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2560 return RB_INT2FIX(v);
2561 else
2562 return rb_uint2big(v);
2563}
2564
2565
2566enum ruby_rvalue_flags {
2568};
2569struct
2570__attribute__((__aligned__(8)))
2571RBasic {
2572 VALUE flags;
2573 const VALUE klass;
2574};
2575
2576
2577VALUE rb_obj_hide(VALUE obj);
2578VALUE rb_obj_reveal(VALUE obj, VALUE klass);
2579
2580
2581__attribute__((__pure__))
2582__attribute__((__artificial__))
2583static inline VALUE
2584RBASIC_CLASS(VALUE obj)
2585{
2586 ((void)0);
2587 return ((struct RBasic *)(obj))->klass;
2588}
2589typedef enum {
2593 RB_WARN_CATEGORY_ALL_BITS = 0x6
2595enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
2596
2597
2598VALUE rb_errinfo(void);
2599void rb_set_errinfo(VALUE err);
2600__attribute__((__noreturn__))
2601__attribute__((__nonnull__ (2)))
2602__attribute__((__format__(__printf__, 2, 3)))
2603void rb_raise(VALUE exc, const char *fmt, ...);
2604__attribute__((__noreturn__))
2605__attribute__((__nonnull__ (1)))
2606__attribute__((__format__(__printf__, 1, 2)))
2607void rb_fatal(const char *fmt, ...);
2608__attribute__((__cold__))
2609__attribute__((__noreturn__))
2610__attribute__((__nonnull__ (1)))
2611__attribute__((__format__(__printf__, 1, 2)))
2612void rb_bug(const char *fmt, ...);
2613__attribute__((__noreturn__))
2614__attribute__((__nonnull__ ()))
2615void rb_bug_errno(const char *msg, int err);
2616__attribute__((__noreturn__))
2617void rb_sys_fail(const char *msg);
2618__attribute__((__noreturn__))
2619void rb_sys_fail_str(VALUE msg);
2620__attribute__((__noreturn__))
2621__attribute__((__nonnull__ (2)))
2622void rb_mod_sys_fail(VALUE mod, const char *msg);
2623__attribute__((__noreturn__))
2624void rb_mod_sys_fail_str(VALUE mod, VALUE msg);
2625__attribute__((__noreturn__))
2626void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg);
2627__attribute__((__noreturn__))
2628void rb_iter_break(void);
2629__attribute__((__noreturn__))
2630void rb_iter_break_value(VALUE val);
2631__attribute__((__noreturn__))
2632void rb_exit(int status);
2633__attribute__((__noreturn__))
2634void rb_notimplement(void);
2635VALUE rb_syserr_new(int err, const char * msg);
2636VALUE rb_syserr_new_str(int n, VALUE arg);
2637__attribute__((__noreturn__))
2638void rb_syserr_fail(int err, const char *msg);
2639__attribute__((__noreturn__))
2640void rb_syserr_fail_str(int err, VALUE msg);
2641__attribute__((__noreturn__))
2642__attribute__((__nonnull__ ()))
2643void rb_mod_syserr_fail(VALUE mod, int err, const char *msg);
2644__attribute__((__noreturn__))
2645void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg);
2646__attribute__((__noreturn__))
2647void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg);
2648__attribute__((__cold__))
2649__attribute__((__noreturn__))
2650void rb_unexpected_type(VALUE self, int t);
2651VALUE *rb_ruby_verbose_ptr(void);
2652VALUE *rb_ruby_debug_ptr(void);
2653__attribute__((__nonnull__ (1)))
2654__attribute__((__format__(__printf__, 1, 2)))
2655void rb_warning(const char *fmt, ...);
2656__attribute__((__nonnull__ (2)))
2657__attribute__((__format__(__printf__, 2, 3)))
2658void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...);
2659__attribute__((__nonnull__ (1, 3)))
2660__attribute__((__format__(__printf__, 3, 4)))
2661void rb_compile_warning(const char *file, int line, const char *fmt, ...);
2662__attribute__((__nonnull__ (1)))
2663__attribute__((__format__(__printf__, 1, 2)))
2664void rb_sys_warning(const char *fmt, ...);
2665__attribute__((__cold__))
2666__attribute__((__nonnull__ (1)))
2667__attribute__((__format__(__printf__, 1, 2)))
2668void rb_warn(const char *fmt, ...);
2669__attribute__((__cold__))
2670__attribute__((__nonnull__ (2)))
2671__attribute__((__format__(__printf__, 2, 3)))
2672void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...);
2673__attribute__((__nonnull__ (1, 3)))
2674__attribute__((__format__(__printf__, 3, 4)))
2675void rb_compile_warn(const char *file, int line, const char *fmt, ...);
2676__attribute__((__nonnull__ (2, 4)))
2677__attribute__((__format__(__printf__, 4, 5)))
2678void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...);
2679
2680
2681enum
2682
2683ruby_value_type {
2684 RUBY_T_NONE = 0x00,
2685 RUBY_T_OBJECT = 0x01,
2686 RUBY_T_CLASS = 0x02,
2687 RUBY_T_MODULE = 0x03,
2688 RUBY_T_FLOAT = 0x04,
2689 RUBY_T_STRING = 0x05,
2690 RUBY_T_REGEXP = 0x06,
2691 RUBY_T_ARRAY = 0x07,
2692 RUBY_T_HASH = 0x08,
2693 RUBY_T_STRUCT = 0x09,
2694 RUBY_T_BIGNUM = 0x0a,
2695 RUBY_T_FILE = 0x0b,
2696 RUBY_T_DATA = 0x0c,
2697 RUBY_T_MATCH = 0x0d,
2698 RUBY_T_COMPLEX = 0x0e,
2699 RUBY_T_RATIONAL = 0x0f,
2700 RUBY_T_NIL = 0x11,
2701 RUBY_T_TRUE = 0x12,
2702 RUBY_T_FALSE = 0x13,
2703 RUBY_T_SYMBOL = 0x14,
2704 RUBY_T_FIXNUM = 0x15,
2705 RUBY_T_UNDEF = 0x16,
2706 RUBY_T_IMEMO = 0x1a,
2707 RUBY_T_NODE = 0x1b,
2708 RUBY_T_ICLASS = 0x1c,
2709 RUBY_T_ZOMBIE = 0x1d,
2710 RUBY_T_MOVED = 0x1e,
2711 RUBY_T_MASK = 0x1f
2712};
2713
2714
2715__attribute__((__cold__))
2716void rb_check_type(VALUE obj, int t);
2717
2718
2719__attribute__((__pure__))
2720__attribute__((__artificial__))
2721static inline enum ruby_value_type
2722RB_BUILTIN_TYPE(VALUE obj)
2723{
2724 ((void)0);
2725 VALUE ret = ((struct RBasic *)(obj))->flags & RUBY_T_MASK;
2726 return ((enum ruby_value_type)ret);
2727}
2728__attribute__((__pure__))
2729static inline _Bool
2730rb_integer_type_p(VALUE obj)
2731{
2732 if (RB_FIXNUM_P(obj)) {
2733 return 1;
2734 }
2735 else if (RB_SPECIAL_CONST_P(obj)) {
2736 return 0;
2737 }
2738 else {
2739 return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM;
2740 }
2741}
2742__attribute__((__pure__))
2743static inline enum ruby_value_type
2744rb_type(VALUE obj)
2745{
2746 if (! RB_SPECIAL_CONST_P(obj)) {
2747 return RB_BUILTIN_TYPE(obj);
2748 }
2749 else if (obj == ((VALUE)RUBY_Qfalse)) {
2750 return RUBY_T_FALSE;
2751 }
2752 else if (obj == ((VALUE)RUBY_Qnil)) {
2753 return RUBY_T_NIL;
2754 }
2755 else if (obj == ((VALUE)RUBY_Qtrue)) {
2756 return RUBY_T_TRUE;
2757 }
2758 else if (obj == ((VALUE)RUBY_Qundef)) {
2759 return RUBY_T_UNDEF;
2760 }
2761 else if (RB_FIXNUM_P(obj)) {
2762 return RUBY_T_FIXNUM;
2763 }
2764 else if (RB_STATIC_SYM_P(obj)) {
2765 return RUBY_T_SYMBOL;
2766 }
2767 else {
2768 ((__builtin_expect(!!(!!(RB_FLONUM_P(obj))), 1)) ? ((void)0) : __builtin_unreachable());
2769 return RUBY_T_FLOAT;
2770 }
2771}
2772__attribute__((__pure__))
2773__attribute__((__artificial__))
2774static inline _Bool
2775RB_FLOAT_TYPE_P(VALUE obj)
2776{
2777 if (RB_FLONUM_P(obj)) {
2778 return 1;
2779 }
2780 else if (RB_SPECIAL_CONST_P(obj)) {
2781 return 0;
2782 }
2783 else {
2784 return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT;
2785 }
2786}
2787__attribute__((__pure__))
2788__attribute__((__artificial__))
2789static inline _Bool
2790RB_DYNAMIC_SYM_P(VALUE obj)
2791{
2792 if (RB_SPECIAL_CONST_P(obj)) {
2793 return 0;
2794 }
2795 else {
2796 return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL;
2797 }
2798}
2799__attribute__((__pure__))
2800__attribute__((__artificial__))
2801static inline _Bool
2802RB_SYMBOL_P(VALUE obj)
2803{
2804 return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj);
2805}
2806__attribute__((__pure__))
2807__attribute__((__artificial__))
2808__attribute__((__always_inline__)) inline
2809static _Bool
2810rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t)
2811{
2812 if (t == RUBY_T_TRUE) {
2813 return obj == ((VALUE)RUBY_Qtrue);
2814 }
2815 else if (t == RUBY_T_FALSE) {
2816 return obj == ((VALUE)RUBY_Qfalse);
2817 }
2818 else if (t == RUBY_T_NIL) {
2819 return obj == ((VALUE)RUBY_Qnil);
2820 }
2821 else if (t == RUBY_T_UNDEF) {
2822 return obj == ((VALUE)RUBY_Qundef);
2823 }
2824 else if (t == RUBY_T_FIXNUM) {
2825 return RB_FIXNUM_P(obj);
2826 }
2827 else if (t == RUBY_T_SYMBOL) {
2828 return RB_SYMBOL_P(obj);
2829 }
2830 else if (t == RUBY_T_FLOAT) {
2831 return RB_FLOAT_TYPE_P(obj);
2832 }
2833 else if (RB_SPECIAL_CONST_P(obj)) {
2834 return 0;
2835 }
2836 else if (t == RB_BUILTIN_TYPE(obj)) {
2837 return 1;
2838 }
2839 else {
2840 return 0;
2841 }
2842}
2843__attribute__((__pure__))
2844__attribute__((__artificial__))
2845static inline _Bool
2846RB_TYPE_P(VALUE obj, enum ruby_value_type t)
2847{
2848 if (__builtin_constant_p(t)) {
2849 return rbimpl_RB_TYPE_P_fastpath(obj, t);
2850 }
2851 else {
2852 return t == rb_type(obj);
2853 }
2854}
2855__attribute__((__pure__))
2856__attribute__((__artificial__))
2857static inline _Bool rbimpl_rtypeddata_p(VALUE obj);
2858__attribute__((__artificial__))
2859static inline void
2860Check_Type(VALUE v, enum ruby_value_type t)
2861{
2862 if ((__builtin_expect(!!(! RB_TYPE_P(v, t)), 0))) {
2863 goto unexpected_type;
2864 }
2865 else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) {
2866 goto unexpected_type;
2867 }
2868 else {
2869 return;
2870 }
2871 unexpected_type:
2872 rb_unexpected_type(v, t);
2873}
2874enum ruby_fl_ushift {
2875 RUBY_FL_USHIFT = 12
2876};
2877__extension__
2878enum
2879
2880ruby_fl_type {
2881 RUBY_FL_WB_PROTECTED = (1<<5),
2882 RUBY_FL_PROMOTED0 = (1<<5),
2883 RUBY_FL_PROMOTED1 = (1<<6),
2885 RUBY_FL_FINALIZE = (1<<7),
2887 __attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
2888 = (1<<8),
2889 RUBY_FL_SHAREABLE = (1<<8),
2891 __attribute__((__deprecated__ ("trustedness turned out to be a wrong idea.")))
2892 = (1<<8),
2893 RUBY_FL_SEEN_OBJ_ID = (1<<9),
2894 RUBY_FL_EXIVAR = (1<<10),
2895 RUBY_FL_FREEZE = (1<<11),
2896 RUBY_FL_USER0 = (1<<(RUBY_FL_USHIFT+0)),
2897 RUBY_FL_USER1 = (1<<(RUBY_FL_USHIFT+1)),
2898 RUBY_FL_USER2 = (1<<(RUBY_FL_USHIFT+2)),
2899 RUBY_FL_USER3 = (1<<(RUBY_FL_USHIFT+3)),
2900 RUBY_FL_USER4 = (1<<(RUBY_FL_USHIFT+4)),
2901 RUBY_FL_USER5 = (1<<(RUBY_FL_USHIFT+5)),
2902 RUBY_FL_USER6 = (1<<(RUBY_FL_USHIFT+6)),
2903 RUBY_FL_USER7 = (1<<(RUBY_FL_USHIFT+7)),
2904 RUBY_FL_USER8 = (1<<(RUBY_FL_USHIFT+8)),
2905 RUBY_FL_USER9 = (1<<(RUBY_FL_USHIFT+9)),
2906 RUBY_FL_USER10 = (1<<(RUBY_FL_USHIFT+10)),
2907 RUBY_FL_USER11 = (1<<(RUBY_FL_USHIFT+11)),
2908 RUBY_FL_USER12 = (1<<(RUBY_FL_USHIFT+12)),
2909 RUBY_FL_USER13 = (1<<(RUBY_FL_USHIFT+13)),
2910 RUBY_FL_USER14 = (1<<(RUBY_FL_USHIFT+14)),
2911 RUBY_FL_USER15 = (1<<(RUBY_FL_USHIFT+15)),
2912 RUBY_FL_USER16 = (1<<(RUBY_FL_USHIFT+16)),
2913 RUBY_FL_USER17 = (1<<(RUBY_FL_USHIFT+17)),
2914 RUBY_FL_USER18 = (1<<(RUBY_FL_USHIFT+18)),
2915 RUBY_FL_USER19 = (1<<(RUBY_FL_USHIFT+19)),
2918};
2919enum {
2921 __attribute__((__deprecated__ ("It seems there is no actual usage of this enum.")))
2922 = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR
2923};
2924
2925
2926void rb_obj_infect(VALUE victim, VALUE carrier);
2927void rb_freeze_singleton_class(VALUE klass);
2928
2929
2930__attribute__((__pure__))
2931__attribute__((__artificial__))
2932__attribute__((__always_inline__)) inline
2933static _Bool
2934RB_FL_ABLE(VALUE obj)
2935{
2936 if (RB_SPECIAL_CONST_P(obj)) {
2937 return 0;
2938 }
2939 else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
2940 return 0;
2941 }
2942 else {
2943 return 1;
2944 }
2945}
2946__attribute__((__pure__))
2947__attribute__((__artificial__))
2948static inline VALUE
2949RB_FL_TEST_RAW(VALUE obj, VALUE flags)
2950{
2951 ((void)0);
2952 return ((struct RBasic *)(obj))->flags & flags;
2953}
2954__attribute__((__pure__))
2955__attribute__((__artificial__))
2956static inline VALUE
2957RB_FL_TEST(VALUE obj, VALUE flags)
2958{
2959 if (RB_FL_ABLE(obj)) {
2960 return RB_FL_TEST_RAW(obj, flags);
2961 }
2962 else {
2963 return 0UL;
2964 }
2965}
2966__attribute__((__pure__))
2967__attribute__((__artificial__))
2968static inline _Bool
2969RB_FL_ANY_RAW(VALUE obj, VALUE flags)
2970{
2971 return RB_FL_TEST_RAW(obj, flags);
2972}
2973__attribute__((__pure__))
2974__attribute__((__artificial__))
2975static inline _Bool
2976RB_FL_ANY(VALUE obj, VALUE flags)
2977{
2978 return RB_FL_TEST(obj, flags);
2979}
2980__attribute__((__pure__))
2981__attribute__((__artificial__))
2982static inline _Bool
2983RB_FL_ALL_RAW(VALUE obj, VALUE flags)
2984{
2985 return RB_FL_TEST_RAW(obj, flags) == flags;
2986}
2987__attribute__((__pure__))
2988__attribute__((__artificial__))
2989static inline _Bool
2990RB_FL_ALL(VALUE obj, VALUE flags)
2991{
2992 return RB_FL_TEST(obj, flags) == flags;
2993}
2994
2995__attribute__((__artificial__))
2996static inline void
2997rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
2998{
2999 obj->flags |= flags;
3000}
3001__attribute__((__artificial__))
3002static inline void
3003RB_FL_SET_RAW(VALUE obj, VALUE flags)
3004{
3005 ((void)0);
3006 rbimpl_fl_set_raw_raw(((struct RBasic *)(obj)), flags);
3007}
3008__attribute__((__artificial__))
3009static inline void
3010RB_FL_SET(VALUE obj, VALUE flags)
3011{
3012 if (RB_FL_ABLE(obj)) {
3013 RB_FL_SET_RAW(obj, flags);
3014 }
3015}
3016
3017__attribute__((__artificial__))
3018static inline void
3019rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
3020{
3021 obj->flags &= ~flags;
3022}
3023__attribute__((__artificial__))
3024static inline void
3025RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
3026{
3027 ((void)0);
3028 rbimpl_fl_unset_raw_raw(((struct RBasic *)(obj)), flags);
3029}
3030__attribute__((__artificial__))
3031static inline void
3032RB_FL_UNSET(VALUE obj, VALUE flags)
3033{
3034 if (RB_FL_ABLE(obj)) {
3035 RB_FL_UNSET_RAW(obj, flags);
3036 }
3037}
3038
3039__attribute__((__artificial__))
3040static inline void
3041rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
3042{
3043 obj->flags ^= flags;
3044}
3045__attribute__((__artificial__))
3046static inline void
3047RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
3048{
3049 ((void)0);
3050 rbimpl_fl_reverse_raw_raw(((struct RBasic *)(obj)), flags);
3051}
3052__attribute__((__artificial__))
3053static inline void
3054RB_FL_REVERSE(VALUE obj, VALUE flags)
3055{
3056 if (RB_FL_ABLE(obj)) {
3058 }
3059}
3060__attribute__((__pure__))
3061__attribute__((__artificial__))
3062__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3063static inline _Bool
3064RB_OBJ_TAINTABLE(VALUE obj)
3065{
3066 return 0;
3067}
3068__attribute__((__pure__))
3069__attribute__((__artificial__))
3070__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3071static inline VALUE
3072RB_OBJ_TAINTED_RAW(VALUE obj)
3073{
3074 return 0;
3075}
3076__attribute__((__pure__))
3077__attribute__((__artificial__))
3078__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3079static inline _Bool
3080RB_OBJ_TAINTED(VALUE obj)
3081{
3082 return 0;
3083}
3084__attribute__((__artificial__))
3085__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3086static inline void
3087RB_OBJ_TAINT_RAW(VALUE obj)
3088{
3089 return;
3090}
3091__attribute__((__artificial__))
3092__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3093static inline void
3094RB_OBJ_TAINT(VALUE obj)
3095{
3096 return;
3097}
3098__attribute__((__artificial__))
3099__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3100static inline void
3101RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
3102{
3103 return;
3104}
3105__attribute__((__artificial__))
3106__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3107static inline void
3108RB_OBJ_INFECT(VALUE dst, VALUE src)
3109{
3110 return;
3111}
3112__attribute__((__pure__))
3113__attribute__((__artificial__))
3114static inline VALUE
3115RB_OBJ_FROZEN_RAW(VALUE obj)
3116{
3117 return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
3118}
3119__attribute__((__pure__))
3120__attribute__((__artificial__))
3121static inline _Bool
3122RB_OBJ_FROZEN(VALUE obj)
3123{
3124 if (! RB_FL_ABLE(obj)) {
3125 return 1;
3126 }
3127 else {
3128 return RB_OBJ_FROZEN_RAW(obj);
3129 }
3130}
3131__attribute__((__artificial__))
3132static inline void
3133RB_OBJ_FREEZE_RAW(VALUE obj)
3134{
3136}
3137static inline void
3138rb_obj_freeze_inline(VALUE x)
3139{
3140 if (RB_FL_ABLE(x)) {
3142 if (RBASIC_CLASS(x) && !(((struct RBasic *)(x))->flags & RUBY_FL_SINGLETON)) {
3143 rb_freeze_singleton_class(x);
3144 }
3145 }
3146}
3147enum ruby_rstring_flags {
3148 RSTRING_NOEMBED = RUBY_FL_USER1,
3149 RSTRING_EMBED_LEN_MASK = RUBY_FL_USER2 | RUBY_FL_USER3 | RUBY_FL_USER4 |
3151 RSTRING_FSTR = RUBY_FL_USER17
3152};
3153enum ruby_rstring_consts {
3155 RSTRING_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(char)))) - 1
3156};
3157struct RString {
3159 union {
3160 struct {
3161 long len;
3162 char *ptr;
3163 union {
3164 long capa;
3165 VALUE shared;
3166 } aux;
3167 } heap;
3168 struct {
3170 } embed;
3171 } as;
3172};
3173
3174
3175VALUE rb_str_to_str(VALUE obj);
3176VALUE rb_string_value(volatile VALUE *ptr);
3177char *rb_string_value_ptr(volatile VALUE *ptr);
3178char *rb_string_value_cstr(volatile VALUE *ptr);
3179VALUE rb_str_export(VALUE obj);
3180VALUE rb_str_export_locale(VALUE obj);
3181__attribute__((__error__ ("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead")))
3182void rb_check_safe_str(VALUE);
3183void rb_debug_rstring_null_ptr(const char *func);
3184
3185
3186__attribute__((__pure__))
3187__attribute__((__artificial__))
3188static inline long
3189RSTRING_EMBED_LEN(VALUE str)
3190{
3191 ((void)0);
3192 ((void)0);
3193 VALUE f = ((struct RBasic *)(str))->flags;
3194 f &= RSTRING_EMBED_LEN_MASK;
3196 return ((long)f);
3197}
3198
3199
3200__attribute__((__pure__))
3201__attribute__((__artificial__))
3202static inline struct RString
3203rbimpl_rstring_getmem(VALUE str)
3204{
3205 ((void)0);
3206 if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) {
3207 return *((struct RString *)(str));
3208 }
3209 else {
3210 struct RString retval;
3211 retval.as.heap.len = RSTRING_EMBED_LEN(str);
3212 retval.as.heap.ptr = ((struct RString *)(str))->as.embed.ary;
3213 return retval;
3214 }
3215}
3216
3217
3218__attribute__((__pure__))
3219__attribute__((__artificial__))
3220static inline long
3221RSTRING_LEN(VALUE str)
3222{
3223 return rbimpl_rstring_getmem(str).as.heap.len;
3224}
3225__attribute__((__artificial__))
3226static inline char *
3227RSTRING_PTR(VALUE str)
3228{
3229 char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr;
3230 if ((__builtin_expect(!!(! ptr), 0))) {
3231 rb_debug_rstring_null_ptr("RSTRING_PTR");
3232 }
3233 return ptr;
3234}
3235__attribute__((__artificial__))
3236static inline char *
3237RSTRING_END(VALUE str)
3238{
3239 struct RString buf = rbimpl_rstring_getmem(str);
3240 if ((__builtin_expect(!!(! buf.as.heap.ptr), 0))) {
3241 rb_debug_rstring_null_ptr("RSTRING_END");
3242 }
3243 return &buf.as.heap.ptr[buf.as.heap.len];
3244}
3245__attribute__((__artificial__))
3246static inline int
3247RSTRING_LENINT(VALUE str)
3248{
3249 return rb_long2int_inline(RSTRING_LEN(str));
3250}
3251__attribute__((__const__))
3252
3253__attribute__((__artificial__))
3254static inline VALUE
3255RB_CHR2FIX(unsigned char c)
3256{
3257 return RB_INT2FIX(c);
3258}
3259static inline char
3260rb_num2char_inline(VALUE x)
3261{
3262 if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
3263 return RSTRING_PTR(x)[0];
3264 else
3265 return ((char)rb_num2int_inline(x));
3266}
3267
3268
3269double rb_num2dbl(VALUE num);
3270__attribute__((__pure__))
3271double rb_float_value(VALUE num);
3272VALUE rb_float_new(double d);
3273VALUE rb_float_new_in_heap(double d);
3274
3275
3276
3277
3278VALUE rb_ll2inum(long long num);
3279VALUE rb_ull2inum(unsigned long long num);
3280long long rb_num2ll(VALUE num);
3281unsigned long long rb_num2ull(VALUE num);
3282
3283
3284static inline VALUE
3285rb_ll2num_inline(long long n)
3286{
3287 if ((((n) < (0x7fffffffffffffffL / 2) + 1) && ((n) >= ((-0x7fffffffffffffffL -1L) / 2)))) return RB_INT2FIX((long)n);
3288 return rb_ll2inum(n);
3289}
3290static inline VALUE
3291rb_ull2num_inline(unsigned long long n)
3292{
3293 if (((n) < (0x7fffffffffffffffL / 2) + 1)) return RB_INT2FIX((long)n);
3294 return rb_ull2inum(n);
3295}
3296static inline long long
3297rb_num2ll_inline(VALUE x)
3298{
3299 if (RB_FIXNUM_P(x))
3300 return rb_fix2long(x);
3301 else
3302 return rb_num2ll(x);
3303}
3304static inline unsigned long long
3305rb_num2ull_inline(VALUE x)
3306{
3307 if (RB_FIXNUM_P(x))
3308 return rb_fix2long(x);
3309 else
3310 return rb_num2ull(x);
3311}
3312
3313
3314short rb_num2short(VALUE num);
3315unsigned short rb_num2ushort(VALUE num);
3316short rb_fix2short(VALUE num);
3317unsigned short rb_fix2ushort(VALUE num);
3318
3319
3320static inline short
3321rb_num2short_inline(VALUE x)
3322{
3323 if (RB_FIXNUM_P(x))
3324 return rb_fix2short(x);
3325 else
3326 return rb_num2short(x);
3327}
3328
3329
3330typedef unsigned long st_data_t;
3331typedef struct st_table st_table;
3332typedef st_data_t st_index_t;
3333typedef int st_compare_func(st_data_t, st_data_t);
3334typedef st_index_t st_hash_func(st_data_t);
3335typedef char st_check_for_sizeof_st_index_t[8 == (int)sizeof(st_index_t) ? 1 : -1];
3337 int (*compare)(st_data_t, st_data_t);
3338 st_index_t (*hash)(st_data_t);
3339};
3340typedef struct st_table_entry st_table_entry;
3341struct st_table_entry;
3342struct st_table {
3343 unsigned char entry_power, bin_power, size_ind;
3344 unsigned int rebuilds_num;
3345 const struct st_hash_type *type;
3346 st_index_t num_entries;
3347 st_index_t *bins;
3348 st_index_t entries_start, entries_bound;
3349 st_table_entry *entries;
3350};
3351enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE};
3352st_table *rb_st_init_table(const struct st_hash_type *);
3353st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t);
3354st_table *rb_st_init_numtable(void);
3355st_table *rb_st_init_numtable_with_size(st_index_t);
3356st_table *rb_st_init_strtable(void);
3357st_table *rb_st_init_strtable_with_size(st_index_t);
3358st_table *rb_st_init_strcasetable(void);
3359st_table *rb_st_init_strcasetable_with_size(st_index_t);
3360int rb_st_delete(st_table *, st_data_t *, st_data_t *);
3361int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
3362int rb_st_shift(st_table *, st_data_t *, st_data_t *);
3363int rb_st_insert(st_table *, st_data_t, st_data_t);
3364int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
3365int rb_st_lookup(st_table *, st_data_t, st_data_t *);
3366int rb_st_get_key(st_table *, st_data_t, st_data_t *);
3367typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
3368int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
3369typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t);
3370typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int);
3371int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
3372int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t);
3373int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t);
3374st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size);
3375st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
3376st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size);
3377st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
3378void rb_st_add_direct(st_table *, st_data_t, st_data_t);
3379void rb_st_free_table(st_table *);
3380void rb_st_cleanup_safe(st_table *, st_data_t);
3381void rb_st_clear(st_table *);
3382st_table *rb_st_copy(st_table *);
3383__attribute__((__const__)) int rb_st_numcmp(st_data_t, st_data_t);
3384__attribute__((__const__)) st_index_t rb_st_numhash(st_data_t);
3385__attribute__((__pure__)) int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3386__attribute__((__pure__)) int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3387__attribute__((__pure__)) size_t rb_st_memsize(const st_table *);
3388__attribute__((__pure__)) st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h);
3389__attribute__((__const__)) st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i);
3390__attribute__((__const__)) st_index_t rb_st_hash_uint(st_index_t h, st_index_t i);
3391__attribute__((__const__)) st_index_t rb_st_hash_end(st_index_t h);
3392__attribute__((__const__)) st_index_t rb_st_hash_start(st_index_t h);
3393void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE);
3394
3395
3396__attribute__((__const__))
3397
3398__attribute__((__artificial__))
3399static inline VALUE
3400RB_ST2FIX(st_data_t i)
3401{
3402 long x = i;
3403 if (x >= 0) {
3404 x &= (0x7fffffffffffffffL / 2);
3405 }
3406 else {
3407 x |= ((-0x7fffffffffffffffL -1L) / 2);
3408 }
3409 ((void)0);
3410 unsigned long y = ((unsigned long)x);
3411 return RB_INT2FIX(y);
3412}
3413
3414
3415void rb_gc_writebarrier(VALUE old, VALUE young);
3416void rb_gc_writebarrier_unprotect(VALUE obj);
3417
3418
3419__attribute__((__pure__))
3420__attribute__((__artificial__))
3421static inline _Bool
3422RB_OBJ_PROMOTED_RAW(VALUE obj)
3423{
3424 ((void)0);
3425 return RB_FL_ANY_RAW(obj, RUBY_FL_PROMOTED);
3426}
3427__attribute__((__pure__))
3428__attribute__((__artificial__))
3429static inline _Bool
3430RB_OBJ_PROMOTED(VALUE obj)
3431{
3432 if (! RB_FL_ABLE(obj)) {
3433 return 0;
3434 }
3435 else {
3436 return RB_OBJ_PROMOTED_RAW(obj);
3437 }
3438}
3439static inline VALUE
3441 VALUE x,
3442 [[maybe_unused]]
3443 const char *filename,
3444 [[maybe_unused]]
3445 int line)
3446{
3448 return x;
3449}
3450static inline VALUE
3451rb_obj_written(
3452 VALUE a,
3453 [[maybe_unused]]
3454 VALUE oldv,
3455 VALUE b,
3456 [[maybe_unused]]
3457 const char *filename,
3458 [[maybe_unused]]
3459 int line)
3460{
3461 if (!RB_SPECIAL_CONST_P(b)) {
3462 rb_gc_writebarrier(a, b);
3463 }
3464 return a;
3465}
3466static inline VALUE
3467rb_obj_write(
3468 VALUE a, VALUE *slot, VALUE b,
3469 [[maybe_unused]]
3470 const char *filename,
3471 [[maybe_unused]]
3472 int line)
3473{
3474 *slot = b;
3475 rb_obj_written(a, ((VALUE)RUBY_Qundef) , b, filename, line);
3476 return a;
3477}
3478enum ruby_rarray_flags {
3479 RARRAY_EMBED_FLAG = RUBY_FL_USER1,
3480 RARRAY_EMBED_LEN_MASK = RUBY_FL_USER4 | RUBY_FL_USER3
3481 ,
3482 RARRAY_TRANSIENT_FLAG = RUBY_FL_USER13
3483};
3484enum ruby_rarray_consts {
3486 RARRAY_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(VALUE))))
3487};
3488struct RArray {
3490 union {
3491 struct {
3492 long len;
3493 union {
3494 long capa;
3495 const
3497 } aux;
3498 const VALUE *ptr;
3499 } heap;
3501 } as;
3502};
3503
3504
3505VALUE *rb_ary_ptr_use_start(VALUE ary);
3506void rb_ary_ptr_use_end(VALUE a);
3507void rb_ary_detransient(VALUE a);
3508
3509
3510__attribute__((__pure__))
3511__attribute__((__artificial__))
3512static inline long
3513RARRAY_EMBED_LEN(VALUE ary)
3514{
3515 ((void)0);
3516 ((void)0);
3517 VALUE f = ((struct RBasic *)(ary))->flags;
3518 f &= RARRAY_EMBED_LEN_MASK;
3520 return ((long)f);
3521}
3522__attribute__((__pure__))
3523static inline long
3524rb_array_len(VALUE a)
3525{
3526 ((void)0);
3527 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3528 return RARRAY_EMBED_LEN(a);
3529 }
3530 else {
3531 return ((struct RArray *)(a))->as.heap.len;
3532 }
3533}
3534__attribute__((__artificial__))
3535static inline int
3536RARRAY_LENINT(VALUE ary)
3537{
3538 return rb_long2int_inline(rb_array_len(ary));
3539}
3540__attribute__((__pure__))
3541__attribute__((__artificial__))
3542static inline _Bool
3543RARRAY_TRANSIENT_P(VALUE ary)
3544{
3545 ((void)0);
3546 return RB_FL_ANY_RAW(ary, RARRAY_TRANSIENT_FLAG);
3547}
3548__attribute__((__pure__))
3549static inline const VALUE *
3550rb_array_const_ptr_transient(VALUE a)
3551{
3552 ((void)0);
3553 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3554 return (((struct RArray *)(a))->as.ary);
3555 }
3556 else {
3557 return (((struct RArray *)(a))->as.heap.ptr);
3558 }
3559}
3560static inline const VALUE *
3561rb_array_const_ptr(VALUE a)
3562{
3563 ((void)0);
3564 if (RARRAY_TRANSIENT_P(a)) {
3566 }
3567 return rb_array_const_ptr_transient(a);
3568}
3569static inline VALUE *
3570rb_array_ptr_use_start(VALUE a,
3571 [[maybe_unused]]
3572 int allow_transient)
3573{
3574 ((void)0);
3575 if (!allow_transient) {
3576 if (RARRAY_TRANSIENT_P(a)) {
3578 }
3579 }
3580 return rb_ary_ptr_use_start(a);
3581}
3582static inline void
3583rb_array_ptr_use_end(VALUE a,
3584 [[maybe_unused]]
3585 int allow_transient)
3586{
3587 ((void)0);
3588 rb_ary_ptr_use_end(a);
3589}
3590static inline VALUE *
3591RARRAY_PTR(VALUE ary)
3592{
3593 ((void)0);
3594 VALUE tmp = (1 ? rb_obj_wb_unprotect(ary, "../ruby-3.1.3/include/ruby/internal/core/rarray.h", 555) : ary);
3595 return ((VALUE *)rb_array_const_ptr(tmp));
3596}
3597static inline void
3598RARRAY_ASET(VALUE ary, long i, VALUE v)
3599{
3600 do { ((void)0); const VALUE rbimpl_ary = (ary); VALUE *ptr = rb_array_ptr_use_start(rbimpl_ary, (1)); (rb_obj_write((VALUE)(ary), (VALUE *)(&ptr[i]), (VALUE)(v), "../ruby-3.1.3/include/ruby/internal/core/rarray.h", 574)); rb_array_ptr_use_end(rbimpl_ary, (1)); } while (0);
3601}
3602
3603
3604int rb_big_sign(VALUE num);
3605
3606
3607static inline _Bool
3608RBIGNUM_POSITIVE_P(VALUE b)
3609{
3610 ((void)0);
3611 return rb_big_sign(b);
3612}
3613static inline _Bool
3614RBIGNUM_NEGATIVE_P(VALUE b)
3615{
3616 ((void)0);
3617 return ! RBIGNUM_POSITIVE_P(b);
3618}
3619enum ruby_rmodule_flags {
3620 RMODULE_IS_OVERLAID = RUBY_FL_USER2,
3621 RMODULE_IS_REFINEMENT = RUBY_FL_USER3,
3622 RMODULE_INCLUDED_INTO_REFINEMENT = RUBY_FL_USER4
3623};
3624struct RClass;
3625
3626
3627VALUE rb_class_get_superclass(VALUE klass);
3628
3629
3630typedef void (*RUBY_DATA_FUNC)(void*);
3631struct RData {
3635 void *data;
3636};
3637
3638
3639VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3640VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3641extern VALUE rb_cObject;
3642
3643
3644__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3645static inline VALUE
3646rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free)
3647{
3648 return rb_data_object_wrap(klass, ptr, mark, free);
3649}
3650static inline void *
3651rb_data_object_get(VALUE obj)
3652{
3653 Check_Type(obj, RUBY_T_DATA);
3654 return ((struct RData *)(obj))->data;
3655}
3656__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3657static inline void *
3658rb_data_object_get_warning(VALUE obj)
3659{
3660 return rb_data_object_get(obj);
3661}
3662static inline VALUE
3663rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
3664{
3665 VALUE result = rb_data_object_zalloc( (klass), (size), ((void (*)(void *))(mark_func)), ((void (*)(void *))(free_func))); (*datap) = ((void *)((struct RData *)(result))->data); ((void)(*datap));
3666 return result;
3667}
3668__attribute__((__deprecated__ ("by: rb_data_object_wrap")))
3669static inline VALUE
3670rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
3671{
3672 return rb_data_object_wrap(klass, data, dmark, dfree);
3673}
3674__attribute__((__deprecated__ ("by: rb_cObject. Will be removed in 3.1.")))
3675__attribute__((__pure__))
3676static inline VALUE
3677rb_cData(void)
3678{
3679 return rb_cObject;
3680}
3681struct rb_io_t;
3682struct RFile {
3684 struct rb_io_t *fptr;
3685};
3686struct st_table;
3687
3688
3689size_t rb_hash_size_num(VALUE hash);
3690struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line);
3691VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone);
3692
3693
3694enum ruby_robject_flags {
3695 ROBJECT_EMBED = RUBY_FL_USER1
3696};
3697enum ruby_robject_consts {
3698 ROBJECT_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(VALUE))))
3699};
3700struct st_table;
3701struct RObject {
3703 union {
3704 struct {
3705 uint32_t numiv;
3706 VALUE *ivptr;
3708 } heap;
3710 } as;
3711};
3712__attribute__((__pure__))
3713__attribute__((__artificial__))
3714static inline uint32_t
3715ROBJECT_NUMIV(VALUE obj)
3716{
3717 ((void)0);
3718 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
3719 return ROBJECT_EMBED_LEN_MAX;
3720 }
3721 else {
3722 return ((struct RObject *)(obj))->as.heap.numiv;
3723 }
3724}
3725__attribute__((__pure__))
3726__attribute__((__artificial__))
3727static inline VALUE *
3728ROBJECT_IVPTR(VALUE obj)
3729{
3730 ((void)0);
3731 struct RObject *const ptr = ((struct RObject *)(obj));
3732 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
3733 return ptr->as.ary;
3734 }
3735 else {
3736 return ptr->as.heap.ivptr;
3737 }
3738}
3739struct re_patter_buffer;
3740struct RRegexp {
3743 const VALUE src;
3744 unsigned long usecnt;
3745};
3746__attribute__((__pure__))
3747__attribute__((__artificial__))
3748static inline VALUE
3749RREGEXP_SRC(VALUE rexp)
3750{
3751 ((void)0);
3752 VALUE ret = ((struct RRegexp *)(rexp))->src;
3753 ((void)0);
3754 return ret;
3755}
3756__attribute__((__pure__))
3757__attribute__((__artificial__))
3758static inline char *
3759RREGEXP_SRC_PTR(VALUE rexp)
3760{
3761 return RSTRING_PTR(RREGEXP_SRC(rexp));
3762}
3763__attribute__((__pure__))
3764__attribute__((__artificial__))
3765static inline long
3766RREGEXP_SRC_LEN(VALUE rexp)
3767{
3768 return RSTRING_LEN(RREGEXP_SRC(rexp));
3769}
3770__attribute__((__pure__))
3771__attribute__((__artificial__))
3772static inline char *
3773RREGEXP_SRC_END(VALUE rexp)
3774{
3775 return RSTRING_END(RREGEXP_SRC(rexp));
3776}
3777
3778
3779VALUE rb_struct_size(VALUE st);
3780VALUE rb_struct_aref(VALUE st, VALUE k);
3781VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v);
3782
3783
3784__attribute__((__artificial__))
3785static inline long
3786RSTRUCT_LEN(VALUE st)
3787{
3788 ((void)0);
3790}
3791__attribute__((__artificial__))
3792static inline VALUE
3793RSTRUCT_SET(VALUE st, int k, VALUE v)
3794{
3795 ((void)0);
3796 return rb_struct_aset(st, rb_int2num_inline(k), (v));
3797}
3798__attribute__((__artificial__))
3799static inline VALUE
3800RSTRUCT_GET(VALUE st, int k)
3801{
3802 ((void)0);
3803 return rb_struct_aref(st, rb_int2num_inline(k));
3804}
3805enum
3806
3807rbimpl_typeddata_flags {
3808 RUBY_TYPED_FREE_IMMEDIATELY = 1,
3809 RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE,
3810 RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED,
3811 RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1
3812};
3813typedef struct rb_data_type_struct rb_data_type_t;
3815 const char *wrap_struct_name;
3816 struct {
3819 size_t (*dsize)(const void *);
3821 void *reserved[1];
3822 } function;
3824 void *data;
3825 VALUE flags;
3826};
3831 void *data;
3832};
3833
3834
3835__attribute__((__nonnull__ (3)))
3836VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type);
3837VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);
3838int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);
3839int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);
3840void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
3841
3842
3843__attribute__((__pure__))
3844__attribute__((__artificial__))
3845static inline _Bool
3846rbimpl_rtypeddata_p(VALUE obj)
3847{
3848 return ((struct RTypedData *)(obj))->typed_flag == 1;
3849}
3850__attribute__((__pure__))
3851__attribute__((__artificial__))
3852static inline _Bool
3853RTYPEDDATA_P(VALUE obj)
3854{
3855 return rbimpl_rtypeddata_p(obj);
3856}
3857__attribute__((__pure__))
3858__attribute__((__artificial__))
3859static inline const struct rb_data_type_struct *
3860RTYPEDDATA_TYPE(VALUE obj)
3861{
3862 return ((struct RTypedData *)(obj))->type;
3863}
3864static inline VALUE
3865rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
3866{
3867 VALUE result = rb_data_typed_object_zalloc(klass, size, type); (*datap) = ((void *)(((struct RTypedData *)(result))->data)); ((void)(*datap));
3868 return result;
3869}
3870__attribute__((__deprecated__ ("by: rb_data_typed_object_wrap")))
3871static inline VALUE
3872rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
3873{
3874 return rb_data_typed_object_wrap(klass, datap, type);
3875}
3876
3877int isalnum (int __c);
3878int isalpha (int __c);
3879int iscntrl (int __c);
3880int isdigit (int __c);
3881int isgraph (int __c);
3882int islower (int __c);
3883int isprint (int __c);
3884int ispunct (int __c);
3885int isspace (int __c);
3886int isupper (int __c);
3887int isxdigit (int __c);
3888int tolower (int __c);
3889int toupper (int __c);
3890int isblank (int __c);
3891int isascii (int __c);
3892int toascii (int __c);
3893extern int isalnum_l (int __c, locale_t __l);
3894extern int isalpha_l (int __c, locale_t __l);
3895extern int isblank_l (int __c, locale_t __l);
3896extern int iscntrl_l (int __c, locale_t __l);
3897extern int isdigit_l (int __c, locale_t __l);
3898extern int isgraph_l (int __c, locale_t __l);
3899extern int islower_l (int __c, locale_t __l);
3900extern int isprint_l (int __c, locale_t __l);
3901extern int ispunct_l (int __c, locale_t __l);
3902extern int isspace_l (int __c, locale_t __l);
3903extern int isupper_l (int __c, locale_t __l);
3904extern int isxdigit_l(int __c, locale_t __l);
3905extern int tolower_l (int __c, locale_t __l);
3906extern int toupper_l (int __c, locale_t __l);
3907extern int isascii_l (int __c, locale_t __l);
3908extern int toascii_l (int __c, locale_t __l);
3909extern __attribute__((dllimport)) const char _ctype_[];
3910const char *__locale_ctype_ptr (void);
3911const char *__locale_ctype_ptr_l (locale_t);
3912
3913
3914
3915__attribute__((__nonnull__ ()))
3916int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3917__attribute__((__nonnull__ ()))
3918int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3919__attribute__((__nonnull__ (1)))
3920unsigned long ruby_strtoul(const char *str, char **endptr, int base);
3921
3922
3923__attribute__((__const__))
3924
3925__attribute__((__artificial__))
3926static inline int
3927rb_isascii(int c)
3928{
3929 return '\0' <= c && c <= '\x7f';
3930}
3931__attribute__((__const__))
3932
3933__attribute__((__artificial__))
3934static inline int
3935rb_isupper(int c)
3936{
3937 return 'A' <= c && c <= 'Z';
3938}
3939__attribute__((__const__))
3940
3941__attribute__((__artificial__))
3942static inline int
3943rb_islower(int c)
3944{
3945 return 'a' <= c && c <= 'z';
3946}
3947__attribute__((__const__))
3948
3949__attribute__((__artificial__))
3950static inline int
3951rb_isalpha(int c)
3952{
3953 return rb_isupper(c) || rb_islower(c);
3954}
3955__attribute__((__const__))
3956
3957__attribute__((__artificial__))
3958static inline int
3959rb_isdigit(int c)
3960{
3961 return '0' <= c && c <= '9';
3962}
3963__attribute__((__const__))
3964
3965__attribute__((__artificial__))
3966static inline int
3967rb_isalnum(int c)
3968{
3969 return rb_isalpha(c) || rb_isdigit(c);
3970}
3971__attribute__((__const__))
3972
3973__attribute__((__artificial__))
3974static inline int
3975rb_isxdigit(int c)
3976{
3977 return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
3978}
3979__attribute__((__const__))
3980
3981__attribute__((__artificial__))
3982static inline int
3983rb_isblank(int c)
3984{
3985 return c == ' ' || c == '\t';
3986}
3987__attribute__((__const__))
3988
3989__attribute__((__artificial__))
3990static inline int
3991rb_isspace(int c)
3992{
3993 return c == ' ' || ('\t' <= c && c <= '\r');
3994}
3995__attribute__((__const__))
3996
3997__attribute__((__artificial__))
3998static inline int
3999rb_iscntrl(int c)
4000{
4001 return ('\0' <= c && c < ' ') || c == '\x7f';
4002}
4003__attribute__((__const__))
4004
4005__attribute__((__artificial__))
4006static inline int
4007rb_isprint(int c)
4008{
4009 return ' ' <= c && c <= '\x7e';
4010}
4011__attribute__((__const__))
4012
4013__attribute__((__artificial__))
4014static inline int
4015rb_ispunct(int c)
4016{
4017 return !rb_isalnum(c);
4018}
4019__attribute__((__const__))
4020
4021__attribute__((__artificial__))
4022static inline int
4023rb_isgraph(int c)
4024{
4025 return '!' <= c && c <= '\x7e';
4026}
4027__attribute__((__const__))
4028
4029__attribute__((__artificial__))
4030static inline int
4031rb_tolower(int c)
4032{
4033 return rb_isupper(c) ? (c|0x20) : c;
4034}
4035__attribute__((__const__))
4036
4037__attribute__((__artificial__))
4038static inline int
4039rb_toupper(int c)
4040{
4041 return rb_islower(c) ? (c&0x5f) : c;
4042}
4043
4044
4045__attribute__((__nonnull__ ()))
4046VALUE rb_eval_string(const char *str);
4047__attribute__((__nonnull__ (1)))
4048VALUE rb_eval_string_protect(const char *str, int *state);
4049__attribute__((__nonnull__ (1)))
4050VALUE rb_eval_string_wrap(const char *str, int *state);
4051VALUE rb_funcall(VALUE recv, ID mid, int n, ...);
4052VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv);
4053VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4054VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv);
4055VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4056VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv);
4057VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4058VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval);
4059VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat);
4060VALUE rb_call_super(int argc, const VALUE *argv);
4061VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat);
4062VALUE rb_current_receiver(void);
4063__attribute__((__nonnull__ (2)))
4064int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values);
4065__attribute__((__nonnull__ ()))
4066VALUE rb_extract_keywords(VALUE *orighash);
4067
4068
4069typedef uint32_t rb_event_flag_t;
4070typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);
4071
4072
4073void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
4075
4076
4077
4078
4079void rb_gc_register_address(VALUE *valptr);
4080void rb_global_variable(VALUE *);
4081void rb_gc_unregister_address(VALUE *valptr);
4082void rb_gc_register_mark_object(VALUE object);
4083
4084
4085
4086
4087typedef int ruby_glob_func(const char *path, VALUE arg, void *enc);
4088__attribute__((__nonnull__ ()))
4089void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg);
4090__attribute__((__nonnull__ ()))
4091int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4092__attribute__((__nonnull__ ()))
4093int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4094
4095
4096
4097
4098extern VALUE rb_mKernel;
4099extern VALUE rb_mComparable;
4100extern VALUE rb_mEnumerable;
4101extern VALUE rb_mErrno;
4102extern VALUE rb_mFileTest;
4103extern VALUE rb_mGC;
4104extern VALUE rb_mMath;
4105extern VALUE rb_mProcess;
4106extern VALUE rb_mWaitReadable;
4107extern VALUE rb_mWaitWritable;
4108extern VALUE rb_cBasicObject;
4109extern VALUE rb_cObject;
4110extern VALUE rb_cArray;
4111extern VALUE rb_cBinding;
4112extern VALUE rb_cClass;
4113extern VALUE rb_cDir;
4114extern VALUE rb_cEncoding;
4115extern VALUE rb_cEnumerator;
4116extern VALUE rb_cFalseClass;
4117extern VALUE rb_cFile;
4118extern VALUE rb_cComplex;
4119extern VALUE rb_cFloat;
4120extern VALUE rb_cHash;
4121extern VALUE rb_cIO;
4122extern VALUE rb_cInteger;
4123extern VALUE rb_cMatch;
4124extern VALUE rb_cMethod;
4125extern VALUE rb_cModule;
4126extern VALUE rb_cRefinement;
4127extern VALUE rb_cNameErrorMesg;
4128extern VALUE rb_cNilClass;
4129extern VALUE rb_cNumeric;
4130extern VALUE rb_cProc;
4131extern VALUE rb_cRandom;
4132extern VALUE rb_cRange;
4133extern VALUE rb_cRational;
4134extern VALUE rb_cRegexp;
4135extern VALUE rb_cStat;
4136extern VALUE rb_cString;
4137extern VALUE rb_cStruct;
4138extern VALUE rb_cSymbol;
4139extern VALUE rb_cThread;
4140extern VALUE rb_cTime;
4141extern VALUE rb_cTrueClass;
4142extern VALUE rb_cUnboundMethod;
4143extern VALUE rb_eException;
4144extern VALUE rb_eStandardError;
4145extern VALUE rb_eSystemExit;
4146extern VALUE rb_eInterrupt;
4147extern VALUE rb_eSignal;
4148extern VALUE rb_eFatal;
4149extern VALUE rb_eArgError;
4150extern VALUE rb_eEOFError;
4151extern VALUE rb_eIndexError;
4152extern VALUE rb_eStopIteration;
4153extern VALUE rb_eKeyError;
4154extern VALUE rb_eRangeError;
4155extern VALUE rb_eIOError;
4156extern VALUE rb_eRuntimeError;
4157extern VALUE rb_eFrozenError;
4158extern VALUE rb_eSecurityError;
4159extern VALUE rb_eSystemCallError;
4160extern VALUE rb_eThreadError;
4161extern VALUE rb_eTypeError;
4162extern VALUE rb_eZeroDivError;
4163extern VALUE rb_eNotImpError;
4164extern VALUE rb_eNoMemError;
4165extern VALUE rb_eNoMethodError;
4166extern VALUE rb_eFloatDomainError;
4167extern VALUE rb_eLocalJumpError;
4168extern VALUE rb_eSysStackError;
4169extern VALUE rb_eRegexpError;
4170extern VALUE rb_eEncodingError;
4171extern VALUE rb_eEncCompatError;
4172extern VALUE rb_eNoMatchingPatternError;
4173extern VALUE rb_eNoMatchingPatternKeyError;
4174extern VALUE rb_eScriptError;
4175extern VALUE rb_eNameError;
4176extern VALUE rb_eSyntaxError;
4177extern VALUE rb_eLoadError;
4178extern VALUE rb_eMathDomainError;
4179extern VALUE rb_stdin;
4180extern VALUE rb_stdout;
4181extern VALUE rb_stderr;
4182__attribute__((__pure__))
4183static inline VALUE
4184rb_class_of(VALUE obj)
4185{
4186 if (! RB_SPECIAL_CONST_P(obj)) {
4187 return RBASIC_CLASS(obj);
4188 }
4189 else if (obj == ((VALUE)RUBY_Qfalse)) {
4190 return rb_cFalseClass;
4191 }
4192 else if (obj == ((VALUE)RUBY_Qnil)) {
4193 return rb_cNilClass;
4194 }
4195 else if (obj == ((VALUE)RUBY_Qtrue)) {
4196 return rb_cTrueClass;
4197 }
4198 else if (RB_FIXNUM_P(obj)) {
4199 return rb_cInteger;
4200 }
4201 else if (RB_STATIC_SYM_P(obj)) {
4202 return rb_cSymbol;
4203 }
4204 else if (RB_FLONUM_P(obj)) {
4205 return rb_cFloat;
4206 }
4207 __builtin_unreachable();
4208}
4209
4210
4211
4212
4213__attribute__((__nonnull__ ()))
4214void ruby_sysinit(int *argc, char ***argv);
4215void ruby_init(void);
4216void* ruby_options(int argc, char** argv);
4217int ruby_executable_node(void *n, int *status);
4218int ruby_run_node(void *n);
4219void ruby_show_version(void);
4220void ruby_show_copyright(void);
4221void ruby_init_stack(volatile VALUE *addr);
4222int ruby_setup(void);
4223int ruby_cleanup(int ex);
4224void ruby_finalize(void);
4225__attribute__((__noreturn__))
4226void ruby_stop(int);
4227int ruby_stack_check(void);
4228size_t ruby_stack_length(VALUE **topnotch);
4229int ruby_exec_node(void *n);
4230void ruby_script(const char* name);
4231void ruby_set_script_name(VALUE name);
4232void ruby_prog_init(void);
4233void ruby_set_argv(int argc, char **argv);
4234void *ruby_process_options(int argc, char **argv);
4235void ruby_init_loadpath(void);
4236void ruby_incpush(const char *path);
4237void ruby_sig_finalize(void);
4238
4239
4240
4241
4242typedef VALUE rb_block_call_func(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4243typedef rb_block_call_func *rb_block_call_func_t;
4244VALUE rb_each(VALUE obj);
4245VALUE rb_yield(VALUE val);
4246VALUE rb_yield_values(int n, ...);
4247VALUE rb_yield_values2(int n, const VALUE *argv);
4248VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat);
4249VALUE rb_yield_splat(VALUE ary);
4250VALUE rb_yield_splat_kw(VALUE ary, int kw_splat);
4251VALUE rb_yield_block(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4252int rb_keyword_given_p(void);
4253int rb_block_given_p(void);
4254void rb_need_block(void);
4255__attribute__((__deprecated__ ("by: rb_block_call since 1.9")))
4256VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);
4257VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2);
4258VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat);
4259VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);
4260VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...);
4261VALUE rb_vrescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, va_list ap);
4262VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
4263VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data);
4264VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data);
4265__attribute__((__noreturn__))
4266void rb_throw(const char *tag, VALUE val);
4267__attribute__((__noreturn__))
4268void rb_throw_obj(VALUE tag, VALUE val);
4269
4270
4272 _Bool left;
4273 size_t right;
4274};
4275
4276
4277__attribute__((__malloc__))
4278__attribute__((__returns_nonnull__))
4279__attribute__((__alloc_size__ (2)))
4280__attribute__((__nonnull__ ()))
4281void *rb_alloc_tmp_buffer(volatile VALUE *store, long len);
4282__attribute__((__malloc__))
4283__attribute__((__returns_nonnull__))
4284__attribute__((__alloc_size__ (2,3)))
4285__attribute__((__nonnull__ ()))
4286void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count);
4287void rb_free_tmp_buffer(volatile VALUE *store);
4288__attribute__((__noreturn__))
4289void ruby_malloc_size_overflow(size_t x, size_t y);
4290
4291
4292static inline int
4293rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
4294{
4295 __extension__ unsigned __int128 da, db, c2;
4296 da = a;
4297 db = b;
4298 c2 = da * db;
4299 if (c2 > max) return 1;
4300 *c = ((size_t)c2);
4301 return 0;
4302}
4303
4304__attribute__((__const__))
4305static inline struct rbimpl_size_mul_overflow_tag
4306rbimpl_size_mul_overflow(size_t x, size_t y)
4307{
4308 struct rbimpl_size_mul_overflow_tag ret = { 0, 0, };
4309 ret.left = __builtin_mul_overflow(x, y, &ret.right);
4310 return ret;
4311}
4312static inline size_t
4313rbimpl_size_mul_or_raise(size_t x, size_t y)
4314{
4315 struct rbimpl_size_mul_overflow_tag size =
4316 rbimpl_size_mul_overflow(x, y);
4317 if ((__builtin_expect(!!(! size.left), 1))) {
4318 return size.right;
4319 }
4320 else {
4321 ruby_malloc_size_overflow(x, y);
4322 __builtin_unreachable();
4323 }
4324}
4325static inline void *
4326rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
4327{
4328 const size_t total_size = rbimpl_size_mul_or_raise(count, elsize);
4329 const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
4330 return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
4331}
4332
4333
4334
4335__attribute__((__nonnull__ (1)))
4336__attribute__((__returns_nonnull__))
4337static inline void *
4338ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
4339{
4340 if (n) {
4341 return ((__builtin_object_size(dest, 0) != (size_t)-1) ? __builtin___memcpy_chk(dest, src, n, __builtin_object_size(dest, 0)) : __memcpy_ichk(dest, src, n));
4342 }
4343 else {
4344 return dest;
4345 }
4346}
4347
4348
4349
4350
4351__attribute__((__nonnull__ ()))
4352VALUE rb_define_class(const char *name, VALUE super);
4353__attribute__((__nonnull__ ()))
4354VALUE rb_define_module(const char *name);
4355__attribute__((__nonnull__ ()))
4356VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super);
4357__attribute__((__nonnull__ ()))
4358VALUE rb_define_module_under(VALUE outer, const char *name);
4359void rb_include_module(VALUE klass, VALUE module);
4360void rb_extend_object(VALUE obj, VALUE mod);
4361void rb_prepend_module(VALUE klass, VALUE module);
4362
4363
4364
4365
4366VALUE rb_newobj(void);
4367VALUE rb_newobj_of(VALUE klass, VALUE flags);
4368VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);
4369VALUE rb_obj_class(VALUE obj);
4370VALUE rb_singleton_class_clone(VALUE obj);
4371void rb_singleton_class_attached(VALUE klass, VALUE obj);
4372void rb_copy_generic_ivar(VALUE clone, VALUE obj);
4373
4374
4375__attribute__((__deprecated__ ("This is no longer how Object#clone works.")))
4376static inline void
4377rb_clone_setup(VALUE clone, VALUE obj)
4378{
4379 return;
4380}
4381__attribute__((__deprecated__ ("This is no longer how Object#dup works.")))
4382static inline void
4383rb_dup_setup(VALUE dup, VALUE obj)
4384{
4385 return;
4386}
4387
4388
4389__attribute__((__nonnull__ ()))
4390
4391void rb_mem_clear(VALUE *buf, long len)
4392
4393 ;
4394VALUE rb_assoc_new(VALUE car, VALUE cdr);
4395VALUE rb_check_array_type(VALUE obj);
4396VALUE rb_ary_new(void);
4397VALUE rb_ary_new_capa(long capa);
4398VALUE rb_ary_new_from_args(long n, ...);
4399VALUE rb_ary_new_from_values(long n, const VALUE *elts);
4400VALUE rb_ary_tmp_new(long capa);
4401void rb_ary_free(VALUE ary);
4402void rb_ary_modify(VALUE ary);
4403VALUE rb_ary_freeze(VALUE obj);
4404__attribute__((__pure__))
4405VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs);
4406VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary);
4407VALUE rb_ary_subseq(VALUE ary, long beg, long len);
4408void rb_ary_store(VALUE ary, long key, VALUE val);
4409VALUE rb_ary_dup(VALUE ary);
4410VALUE rb_ary_resurrect(VALUE ary);
4411VALUE rb_ary_to_ary(VALUE obj);
4412VALUE rb_ary_to_s(VALUE ary);
4413VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len);
4414VALUE rb_ary_push(VALUE ary, VALUE elem);
4415VALUE rb_ary_pop(VALUE ary);
4416VALUE rb_ary_shift(VALUE ary);
4417VALUE rb_ary_unshift(VALUE ary, VALUE elem);
4418__attribute__((__pure__))
4419VALUE rb_ary_entry(VALUE ary, long off);
4420VALUE rb_ary_each(VALUE ary);
4421VALUE rb_ary_join(VALUE ary, VALUE sep);
4422VALUE rb_ary_reverse(VALUE ary);
4423VALUE rb_ary_rotate(VALUE ary, long rot);
4424VALUE rb_ary_sort(VALUE ary);
4425VALUE rb_ary_sort_bang(VALUE ary);
4426VALUE rb_ary_delete(VALUE ary, VALUE elem);
4427VALUE rb_ary_delete_at(VALUE ary, long pos);
4428VALUE rb_ary_clear(VALUE ary);
4429VALUE rb_ary_plus(VALUE lhs, VALUE rhs);
4430VALUE rb_ary_concat(VALUE lhs, VALUE rhs);
4431VALUE rb_ary_assoc(VALUE alist, VALUE key);
4432VALUE rb_ary_rassoc(VALUE alist, VALUE key);
4433VALUE rb_ary_includes(VALUE ary, VALUE elem);
4434VALUE rb_ary_cmp(VALUE lhs, VALUE rhs);
4435VALUE rb_ary_replace(VALUE copy, VALUE orig);
4436VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx));
4437VALUE rb_ary_resize(VALUE ary, long len);
4438
4439
4440
4441
4442VALUE rb_exc_new(VALUE etype, const char *ptr, long len);
4443__attribute__((__nonnull__ ()))
4444VALUE rb_exc_new_cstr(VALUE etype, const char *str);
4445VALUE rb_exc_new_str(VALUE etype, VALUE str);
4446__attribute__((__noreturn__))
4447__attribute__((__nonnull__ (1)))
4448__attribute__((__format__(__printf__, 1, 2)))
4449void rb_loaderror(const char *fmt, ...);
4450__attribute__((__noreturn__))
4451__attribute__((__nonnull__ (2)))
4452__attribute__((__format__(__printf__, 2, 3)))
4453void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
4454__attribute__((__noreturn__))
4455__attribute__((__nonnull__ (2)))
4456__attribute__((__format__(__printf__, 2, 3)))
4457void rb_name_error(ID name, const char *fmt, ...);
4458__attribute__((__noreturn__))
4459__attribute__((__nonnull__ (2)))
4460__attribute__((__format__(__printf__, 2, 3)))
4461void rb_name_error_str(VALUE name, const char *fmt, ...);
4462__attribute__((__noreturn__))
4463__attribute__((__nonnull__ (2)))
4464__attribute__((__format__(__printf__, 2, 3)))
4465void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);
4466__attribute__((__noreturn__))
4467__attribute__((__nonnull__ ()))
4468void rb_invalid_str(const char *str, const char *type);
4469__attribute__((__noreturn__))
4470__attribute__((__nonnull__ ()))
4471void rb_error_frozen(const char *what);
4472__attribute__((__noreturn__))
4473void rb_error_frozen_object(VALUE what);
4474void rb_error_untrusted(VALUE);
4475void rb_check_frozen(VALUE obj);
4476void rb_check_trusted(VALUE);
4477void rb_check_copyable(VALUE obj, VALUE orig);
4478__attribute__((__noreturn__))
4479static void rb_error_arity(int argc, int min, int max);
4480
4481
4482static inline void
4483rb_check_frozen_inline(VALUE obj)
4484{
4485 if ((__builtin_expect(!!(RB_OBJ_FROZEN(obj)), 0))) {
4486 rb_error_frozen_object(obj);
4487 }
4488}
4489static inline int
4490rb_check_arity(int argc, int min, int max)
4491{
4492 if ((argc < min) || (max != (-1) && argc > max))
4493 rb_error_arity(argc, min, max);
4494 return argc;
4495}
4496
4497
4498__attribute__((__nonnull__ ()))
4499void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg);
4500VALUE rb_check_hash_type(VALUE obj);
4501__attribute__((__nonnull__ ()))
4502void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg);
4503VALUE rb_hash(VALUE obj);
4504VALUE rb_hash_new(void);
4505VALUE rb_hash_dup(VALUE hash);
4506VALUE rb_hash_freeze(VALUE obj);
4507VALUE rb_hash_aref(VALUE hash, VALUE key);
4508VALUE rb_hash_lookup(VALUE hash, VALUE key);
4509VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def);
4510VALUE rb_hash_fetch(VALUE hash, VALUE key);
4511VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val);
4512VALUE rb_hash_clear(VALUE hash);
4513VALUE rb_hash_delete_if(VALUE hash);
4514VALUE rb_hash_delete(VALUE hash, VALUE key);
4515void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash);
4516typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value);
4517VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func);
4518int rb_path_check(const char *path);
4519int rb_env_path_tainted(void);
4520VALUE rb_env_clear(void);
4521VALUE rb_hash_size(VALUE hash);
4522
4523
4524
4525
4526VALUE rb_block_proc(void);
4527VALUE rb_block_lambda(void);
4528VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg);
4529VALUE rb_obj_is_proc(VALUE recv);
4530VALUE rb_proc_call(VALUE recv, VALUE args);
4531VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat);
4532VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc);
4533VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat);
4534int rb_proc_arity(VALUE recv);
4535VALUE rb_proc_lambda_p(VALUE recv);
4536VALUE rb_binding_new(void);
4537VALUE rb_obj_method(VALUE recv, VALUE mid);
4538VALUE rb_obj_is_method(VALUE recv);
4539VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv);
4540VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat);
4541VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc);
4542VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat);
4543int rb_mod_method_arity(VALUE mod, ID mid);
4544int rb_obj_method_arity(VALUE obj, ID mid);
4545__attribute__((__nonnull__ (1)))
4546VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state);
4547
4548
4549
4550
4551__attribute__((__nonnull__ (2, 3)))
4552int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...);
4553__attribute__((__nonnull__ (3, 4)))
4554int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...);
4555__attribute__((__error__ ("bad scan arg format")))
4556void rb_scan_args_bad_format(const char*);
4557__attribute__((__error__ ("variable argument length doesn't match")))
4558void rb_scan_args_length_mismatch(const char*,int);
4559
4560
4561static inline _Bool
4562rb_scan_args_keyword_p(int kw_flag, VALUE last)
4563{
4564 switch (kw_flag) {
4565 case 0:
4566 return !! rb_keyword_given_p();
4567 case 1:
4568 return 1;
4569 case 3:
4570 return RB_TYPE_P(last, RUBY_T_HASH);
4571 default:
4572 return 0;
4573 }
4574}
4575__attribute__((__always_inline__)) inline
4576static _Bool
4577rb_scan_args_lead_p(const char *fmt)
4578{
4579 return (((unsigned char)((fmt[0])-'0'))<10);
4580}
4581__attribute__((__always_inline__)) inline
4582static int
4583rb_scan_args_n_lead(const char *fmt)
4584{
4585 return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0);
4586}
4587__attribute__((__always_inline__)) inline
4588static _Bool
4589rb_scan_args_opt_p(const char *fmt)
4590{
4591 return (rb_scan_args_lead_p(fmt) && (((unsigned char)((fmt[1])-'0'))<10));
4592}
4593__attribute__((__always_inline__)) inline
4594static int
4595rb_scan_args_n_opt(const char *fmt)
4596{
4597 return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0);
4598}
4599__attribute__((__always_inline__)) inline
4600static int
4601rb_scan_args_var_idx(const char *fmt)
4602{
4603 return (!rb_scan_args_lead_p(fmt) ? 0 : !(((unsigned char)((fmt[1])-'0'))<10) ? 1 : 2);
4604}
4605__attribute__((__always_inline__)) inline
4606static _Bool
4607rb_scan_args_f_var(const char *fmt)
4608{
4609 return (fmt[rb_scan_args_var_idx(fmt)]=='*');
4610}
4611__attribute__((__always_inline__)) inline
4612static int
4613rb_scan_args_trail_idx(const char *fmt)
4614{
4615 const int idx = rb_scan_args_var_idx(fmt);
4616 return idx+(fmt[idx]=='*');
4617}
4618__attribute__((__always_inline__)) inline
4619static int
4620rb_scan_args_n_trail(const char *fmt)
4621{
4622 const int idx = rb_scan_args_trail_idx(fmt);
4623 return ((((unsigned char)((fmt[idx])-'0'))<10) ? fmt[idx]-'0' : 0);
4624}
4625__attribute__((__always_inline__)) inline
4626static int
4627rb_scan_args_hash_idx(const char *fmt)
4628{
4629 const int idx = rb_scan_args_trail_idx(fmt);
4630 return idx+(((unsigned char)((fmt[idx])-'0'))<10);
4631}
4632__attribute__((__always_inline__)) inline
4633static _Bool
4634rb_scan_args_f_hash(const char *fmt)
4635{
4636 return (fmt[rb_scan_args_hash_idx(fmt)]==':');
4637}
4638__attribute__((__always_inline__)) inline
4639static int
4640rb_scan_args_block_idx(const char *fmt)
4641{
4642 const int idx = rb_scan_args_hash_idx(fmt);
4643 return idx+(fmt[idx]==':');
4644}
4645__attribute__((__always_inline__)) inline
4646static _Bool
4647rb_scan_args_f_block(const char *fmt)
4648{
4649 return (fmt[rb_scan_args_block_idx(fmt)]=='&');
4650}
4651__attribute__((__always_inline__)) inline
4652static int
4653rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
4654 int n_lead, int n_opt, int n_trail,
4655 _Bool f_var, _Bool f_hash, _Bool f_block,
4656 VALUE *vars[], const char *fmt [[maybe_unused]], int varc [[maybe_unused]])
4657
4658
4659{
4660 int i, argi = 0, vari = 0;
4661 VALUE *var, hash = ((VALUE)RUBY_Qnil);
4662 const int n_mand = n_lead + n_trail;
4663 if (f_hash && argc > 0) {
4664 VALUE last = argv[argc - 1];
4665 if (rb_scan_args_keyword_p(kw_flag, last)) {
4666 hash = rb_hash_dup(last);
4667 argc--;
4668 }
4669 }
4670 if (argc < n_mand) {
4671 goto argc_error;
4672 }
4673 for (i = 0; i < n_lead; i++) {
4674 var = vars[vari++];
4675 if (var) *var = argv[argi];
4676 argi++;
4677 }
4678 for (i = 0; i < n_opt; i++) {
4679 var = vars[vari++];
4680 if (argi < argc - n_trail) {
4681 if (var) *var = argv[argi];
4682 argi++;
4683 }
4684 else {
4685 if (var) *var = ((VALUE)RUBY_Qnil);
4686 }
4687 }
4688 if (f_var) {
4689 int n_var = argc - argi - n_trail;
4690 var = vars[vari++];
4691 if (0 < n_var) {
4692 if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
4693 argi += n_var;
4694 }
4695 else {
4696 if (var) *var = rb_ary_new();
4697 }
4698 }
4699 for (i = 0; i < n_trail; i++) {
4700 var = vars[vari++];
4701 if (var) *var = argv[argi];
4702 argi++;
4703 }
4704 if (f_hash) {
4705 var = vars[vari++];
4706 if (var) *var = hash;
4707 }
4708 if (f_block) {
4709 var = vars[vari++];
4710 if (rb_block_given_p()) {
4711 *var = rb_block_proc();
4712 }
4713 else {
4714 *var = ((VALUE)RUBY_Qnil);
4715 }
4716 }
4717 if (argi == argc) {
4718 return argc;
4719 }
4720 argc_error:
4721 rb_error_arity(argc, n_mand, f_var ? (-1) : n_mand + n_opt);
4722 __builtin_unreachable();
4723}
4724
4725
4726ID rb_sym2id(VALUE obj);
4727VALUE rb_id2sym(ID id);
4728__attribute__((__nonnull__ ()))
4729ID rb_intern(const char *name);
4730ID rb_intern2(const char *name, long len);
4731ID rb_intern_str(VALUE str);
4732const char *rb_id2name(ID id);
4733__attribute__((__nonnull__ ()))
4734ID rb_check_id(volatile VALUE *namep);
4735ID rb_to_id(VALUE str);
4736VALUE rb_id2str(ID id);
4737VALUE rb_sym2str(VALUE id);
4738VALUE rb_to_symbol(VALUE name);
4739__attribute__((__nonnull__ ()))
4740VALUE rb_check_symbol(volatile VALUE *namep);
4741
4742
4743__attribute__((__pure__))
4744__attribute__((__nonnull__ ()))
4745static inline ID
4746rb_intern_const(const char *str)
4747{
4748 size_t len = strlen(str);
4749 return rb_intern2(str, ((long)len));
4750}
4751
4752__attribute__((__nonnull__ ()))
4753static inline ID
4754rbimpl_intern_const(ID *ptr, const char *str)
4755{
4756 while (! *ptr) {
4757 *ptr = rb_intern_const(str);
4758 }
4759 return *ptr;
4760}
4761
4762
4763typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);
4764typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data);
4765typedef void rb_gvar_marker_t(VALUE *var);
4766rb_gvar_getter_t rb_gvar_undef_getter;
4767rb_gvar_setter_t rb_gvar_undef_setter;
4768rb_gvar_marker_t rb_gvar_undef_marker;
4769rb_gvar_getter_t rb_gvar_val_getter;
4770rb_gvar_setter_t rb_gvar_val_setter;
4771rb_gvar_marker_t rb_gvar_val_marker;
4772rb_gvar_getter_t rb_gvar_var_getter;
4773rb_gvar_setter_t rb_gvar_var_setter;
4774rb_gvar_marker_t rb_gvar_var_marker;
4775__attribute__((__noreturn__))
4776rb_gvar_setter_t rb_gvar_readonly_setter;
4777__attribute__((__nonnull__ ()))
4778void rb_define_variable(const char *name, VALUE *var);
4779__attribute__((__nonnull__ (1)))
4780void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4781__attribute__((__nonnull__ (1)))
4782void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4783__attribute__((__nonnull__ ()))
4784void rb_define_readonly_variable(const char *name, const VALUE *var);
4785__attribute__((__nonnull__ ()))
4786void rb_define_const(VALUE klass, const char *name, VALUE val);
4787__attribute__((__nonnull__ ()))
4788void rb_define_global_const(const char *name, VALUE val);
4789__attribute__((__nonnull__ ()))
4790void rb_deprecate_constant(VALUE mod, const char *name);
4791__attribute__((__nonnull__ ()))
4792VALUE rb_gv_set(const char *name, VALUE val);
4793__attribute__((__nonnull__ ()))
4794VALUE rb_gv_get(const char *name);
4795__attribute__((__nonnull__ ()))
4796VALUE rb_iv_get(VALUE obj, const char *name);
4797__attribute__((__nonnull__ ()))
4798VALUE rb_iv_set(VALUE obj, const char *name, VALUE val);
4799
4800
4801
4802
4803VALUE rb_get_path(VALUE obj);
4804VALUE rb_get_path_no_checksafe(VALUE);
4805__attribute__((__error__ (" argument length doesn't match"))) int rb_varargs_bad_length(int,int);
4806const char *rb_class2name(VALUE klass);
4807const char *rb_obj_classname(VALUE obj);
4808void rb_p(VALUE obj);
4809VALUE rb_equal(VALUE lhs, VALUE rhs);
4810VALUE rb_require(const char *feature);
4811
4812
4813VALUE rb_big_new(size_t len, int sign);
4814int rb_bigzero_p(VALUE x);
4815VALUE rb_big_clone(VALUE num);
4816void rb_big_2comp(VALUE num);
4817VALUE rb_big_norm(VALUE x);
4818void rb_big_resize(VALUE big, size_t len);
4819__attribute__((__nonnull__ ()))
4820VALUE rb_cstr_to_inum(const char *str, int base, int badcheck);
4821VALUE rb_str_to_inum(VALUE str, int base, int badcheck);
4822__attribute__((__nonnull__ ()))
4823VALUE rb_cstr2inum(const char *str, int base);
4824VALUE rb_str2inum(VALUE str, int base);
4825VALUE rb_big2str(VALUE x, int base);
4826long rb_big2long(VALUE x);
4827unsigned long rb_big2ulong(VALUE x);
4828long long rb_big2ll(VALUE);
4829unsigned long long rb_big2ull(VALUE);
4830__attribute__((__nonnull__ ()))
4831void rb_big_pack(VALUE val, unsigned long *buf, long num_longs);
4832__attribute__((__nonnull__ ()))
4833VALUE rb_big_unpack(unsigned long *buf, long num_longs);
4834__attribute__((__nonnull__ ()))
4835int rb_uv_to_utf8(char buf[6], unsigned long uv);
4836VALUE rb_dbl2big(double d);
4837double rb_big2dbl(VALUE x);
4838VALUE rb_big_cmp(VALUE lhs, VALUE rhs);
4839VALUE rb_big_eq(VALUE lhs, VALUE rhs);
4840VALUE rb_big_eql(VALUE lhs, VALUE rhs);
4841VALUE rb_big_plus(VALUE x, VALUE y);
4842VALUE rb_big_minus(VALUE x, VALUE y);
4843VALUE rb_big_mul(VALUE x, VALUE y);
4844VALUE rb_big_div(VALUE x, VALUE y);
4845VALUE rb_big_idiv(VALUE x, VALUE y);
4846VALUE rb_big_modulo(VALUE x, VALUE y);
4847VALUE rb_big_divmod(VALUE x, VALUE y);
4848VALUE rb_big_pow(VALUE x, VALUE y);
4849VALUE rb_big_and(VALUE x, VALUE y);
4850VALUE rb_big_or(VALUE x, VALUE y);
4851VALUE rb_big_xor(VALUE x, VALUE y);
4852VALUE rb_big_lshift(VALUE x, VALUE y);
4853VALUE rb_big_rshift(VALUE x, VALUE y);
4854__attribute__((__nonnull__ ()))
4855int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4856__attribute__((__nonnull__ ()))
4857VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4858size_t rb_absint_size(VALUE val, int *nlz_bits_ret);
4859size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret);
4860int rb_absint_singlebit_p(VALUE val);
4861
4862
4863
4864
4865int rb_cmpint(VALUE val, VALUE a, VALUE b);
4866__attribute__((__cold__))
4867__attribute__((__noreturn__))
4868void rb_cmperr(VALUE a, VALUE b);
4869
4870
4871
4872
4873VALUE rb_complex_raw(VALUE real, VALUE imag);
4874VALUE rb_complex_new(VALUE real, VALUE imag);
4875VALUE rb_complex_new_polar(VALUE abs, VALUE arg);
4876__attribute__((__deprecated__ ("by: rb_complex_new_polar")))
4877VALUE rb_complex_polar(VALUE abs, VALUE arg);
4878__attribute__((__pure__))
4879VALUE rb_complex_real(VALUE z);
4880__attribute__((__pure__))
4881VALUE rb_complex_imag(VALUE z);
4882VALUE rb_complex_plus(VALUE x, VALUE y);
4883VALUE rb_complex_minus(VALUE x, VALUE y);
4884VALUE rb_complex_mul(VALUE x, VALUE y);
4885VALUE rb_complex_div(VALUE x, VALUE y);
4886VALUE rb_complex_uminus(VALUE z);
4887VALUE rb_complex_conjugate(VALUE z);
4888VALUE rb_complex_abs(VALUE z);
4889VALUE rb_complex_arg(VALUE z);
4890VALUE rb_complex_pow(VALUE base, VALUE exp);
4891VALUE rb_dbl_complex_new(double real, double imag);
4892VALUE rb_Complex(VALUE real, VALUE imag);
4893
4894
4895
4896
4897VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj);
4898VALUE rb_fiber_current(void);
4899VALUE rb_fiber_alive_p(VALUE fiber);
4900VALUE rb_obj_is_fiber(VALUE obj);
4901VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv);
4902VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4903VALUE rb_fiber_yield(int argc, const VALUE *argv);
4904VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat);
4905VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv);
4906VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4907VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv);
4908
4909
4910
4911
4912VALUE rb_dir_getwd(void);
4913
4914
4915
4916
4917VALUE rb_enum_values_pack(int argc, const VALUE *argv);
4918
4919
4920
4921
4922__attribute__((__noreturn__))
4923void rb_exc_raise(VALUE exc);
4924__attribute__((__noreturn__))
4925void rb_exc_fatal(VALUE exc);
4926__attribute__((__noreturn__))
4927VALUE rb_f_exit(int argc, const VALUE *argv);
4928__attribute__((__noreturn__))
4929VALUE rb_f_abort(int argc, const VALUE *argv);
4930__attribute__((__noreturn__))
4931void rb_interrupt(void);
4932ID rb_frame_this_func(void);
4933__attribute__((__noreturn__))
4934void rb_jump_tag(int state);
4935void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv);
4936void rb_obj_call_init_kw(VALUE, int, const VALUE*, int);
4937ID rb_frame_callee(void);
4938VALUE rb_make_exception(int argc, const VALUE *argv);
4939void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg);
4940
4941
4942
4943
4944typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj);
4945typedef struct {
4946 VALUE begin;
4947 VALUE end;
4948 VALUE step;
4949 int exclude_end;
4950} rb_arithmetic_sequence_components_t;
4951VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv);
4952VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func);
4953VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat);
4954__attribute__((__nonnull__ ()))
4955int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf);
4956__attribute__((__nonnull__ ()))
4957VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err);
4958
4959
4960
4961
4962__attribute__((__nonnull__ ()))
4963VALUE rb_file_s_expand_path(int argc, const VALUE *argv);
4964VALUE rb_file_expand_path(VALUE fname, VALUE dname);
4965__attribute__((__nonnull__ ()))
4966VALUE rb_file_s_absolute_path(int argc, const VALUE *argv);
4967VALUE rb_file_absolute_path(VALUE fname, VALUE dname);
4968VALUE rb_file_dirname(VALUE fname);
4969__attribute__((__nonnull__ ()))
4970int rb_find_file_ext(VALUE *feature, const char *const *exts);
4971VALUE rb_find_file(VALUE path);
4972VALUE rb_file_directory_p(VALUE _, VALUE path);
4973VALUE rb_str_encode_ospath(VALUE path);
4974__attribute__((__nonnull__ ()))
4975__attribute__((__pure__))
4976int rb_is_absolute_path(const char *path);
4977off_t rb_file_size(VALUE file);
4978
4979
4980
4981
4982__attribute__((__cold__))
4983__attribute__((__noreturn__))
4984void rb_memerror(void);
4985__attribute__((__pure__))
4986int rb_during_gc(void);
4987__attribute__((__nonnull__ (1)))
4988void rb_gc_mark_locations(const VALUE *start, const VALUE *end);
4989void rb_mark_tbl(struct st_table *tbl);
4990void rb_mark_tbl_no_pin(struct st_table *tbl);
4991void rb_mark_set(struct st_table *tbl);
4992void rb_mark_hash(struct st_table *tbl);
4993void rb_gc_update_tbl_refs(st_table *ptr);
4994void rb_gc_mark_maybe(VALUE obj);
4995void rb_gc_mark(VALUE obj);
4996void rb_gc_mark_movable(VALUE obj);
4997VALUE rb_gc_location(VALUE obj);
4998__attribute__((__deprecated__ ("this is now a no-op function")))
4999void rb_gc_force_recycle(VALUE obj);
5000void rb_gc(void);
5001void rb_gc_copy_finalizer(VALUE dst, VALUE src);
5002VALUE rb_gc_enable(void);
5003VALUE rb_gc_disable(void);
5004VALUE rb_gc_start(void);
5005VALUE rb_define_finalizer(VALUE obj, VALUE block);
5006VALUE rb_undefine_finalizer(VALUE obj);
5007size_t rb_gc_count(void);
5008size_t rb_gc_stat(VALUE key_or_buf);
5009VALUE rb_gc_latest_gc_info(VALUE key_or_buf);
5010void rb_gc_adjust_memory_usage(ssize_t diff);
5011
5012
5013
5014
5015extern VALUE rb_fs;
5016extern VALUE rb_output_fs;
5017extern VALUE rb_rs;
5018extern VALUE rb_default_rs;
5019extern VALUE rb_output_rs;
5020VALUE rb_io_write(VALUE io, VALUE str);
5021VALUE rb_io_gets(VALUE io);
5022VALUE rb_io_getbyte(VALUE io);
5023VALUE rb_io_ungetc(VALUE io, VALUE c);
5024VALUE rb_io_ungetbyte(VALUE io, VALUE b);
5025VALUE rb_io_close(VALUE io);
5026VALUE rb_io_flush(VALUE io);
5027VALUE rb_io_eof(VALUE io);
5028VALUE rb_io_binmode(VALUE io);
5029VALUE rb_io_ascii8bit_binmode(VALUE io);
5030VALUE rb_io_addstr(VALUE io, VALUE str);
5031VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io);
5032VALUE rb_io_print(int argc, const VALUE *argv, VALUE io);
5033VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io);
5034VALUE rb_io_fdopen(int fd, int flags, const char *path);
5035__attribute__((__nonnull__ ()))
5036VALUE rb_file_open(const char *fname, const char *fmode);
5037__attribute__((__nonnull__ ()))
5038VALUE rb_file_open_str(VALUE fname, const char *fmode);
5039VALUE rb_gets(void);
5040__attribute__((__nonnull__ ()))
5041void rb_write_error(const char *str);
5042void rb_write_error2(const char *str, long len);
5043void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
5044__attribute__((__nonnull__ ()))
5045int rb_pipe(int *pipes);
5046int rb_reserved_fd_p(int fd);
5047int rb_cloexec_open(const char *pathname, int flags, mode_t mode);
5048int rb_cloexec_dup(int oldfd);
5049int rb_cloexec_dup2(int oldfd, int newfd);
5050__attribute__((__nonnull__ ()))
5051int rb_cloexec_pipe(int fildes[2]);
5052int rb_cloexec_fcntl_dupfd(int fd, int minfd);
5053void rb_update_max_fd(int fd);
5054void rb_fd_fix_cloexec(int fd);
5055
5056
5057
5058
5059void rb_load(VALUE path, int wrap);
5060void rb_load_protect(VALUE path, int wrap, int *state);
5061__attribute__((__nonnull__ ()))
5062int rb_provided(const char *feature);
5063__attribute__((__nonnull__ (1)))
5064int rb_feature_provided(const char *feature, const char **loading);
5065__attribute__((__nonnull__ ()))
5066void rb_provide(const char *feature);
5067VALUE rb_f_require(VALUE self, VALUE feature);
5068VALUE rb_require_string(VALUE feature);
5069void rb_ext_ractor_safe(_Bool flag);
5070
5071
5072
5073
5074VALUE rb_marshal_dump(VALUE obj, VALUE port);
5075VALUE rb_marshal_load(VALUE port);
5076void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));
5077
5078
5079
5080
5081__attribute__((__noreturn__))
5082__attribute__((__cold__))
5083void rb_num_zerodiv(void);
5084VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op);
5085VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op);
5086VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op);
5087VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op);
5088VALUE rb_num2fix(VALUE val);
5089VALUE rb_fix2str(VALUE val, int base);
5090__attribute__((__const__))
5091VALUE rb_dbl_cmp(double lhs, double rhs);
5092extern VALUE rb_int_positive_pow(long x, unsigned long y);
5093
5094
5095
5096
5097VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);
5098VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);
5099VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);
5100int rb_eql(VALUE lhs, VALUE rhs);
5101VALUE rb_any_to_s(VALUE obj);
5102VALUE rb_inspect(VALUE obj);
5103VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);
5104VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);
5105VALUE rb_obj_alloc(VALUE klass);
5106VALUE rb_obj_clone(VALUE obj);
5107VALUE rb_obj_dup(VALUE obj);
5108VALUE rb_obj_init_copy(VALUE src, VALUE dst);
5109
5110VALUE rb_obj_taint(VALUE obj);
5111__attribute__((__pure__))
5112
5113VALUE rb_obj_tainted(VALUE obj);
5114
5115VALUE rb_obj_untaint(VALUE obj);
5116
5117VALUE rb_obj_untrust(VALUE obj);
5118__attribute__((__pure__))
5119
5120VALUE rb_obj_untrusted(VALUE obj);
5121
5122VALUE rb_obj_trust(VALUE obj);
5123VALUE rb_obj_freeze(VALUE obj);
5124__attribute__((__pure__))
5125VALUE rb_obj_frozen_p(VALUE obj);
5126VALUE rb_obj_id(VALUE obj);
5127__attribute__((__const__))
5128VALUE rb_memory_id(VALUE obj);
5129__attribute__((__pure__))
5130VALUE rb_class_real(VALUE klass);
5131__attribute__((__pure__))
5132VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant);
5133__attribute__((__pure__))
5134VALUE rb_class_superclass(VALUE klass);
5135__attribute__((__nonnull__ ()))
5136VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid);
5137__attribute__((__nonnull__ ()))
5138VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid);
5139__attribute__((__nonnull__ ()))
5140VALUE rb_check_to_integer(VALUE val, const char *mid);
5141VALUE rb_check_to_float(VALUE val);
5142VALUE rb_to_int(VALUE val);
5143VALUE rb_check_to_int(VALUE val);
5144VALUE rb_Integer(VALUE val);
5145VALUE rb_to_float(VALUE val);
5146VALUE rb_Float(VALUE val);
5147VALUE rb_String(VALUE val);
5148VALUE rb_Array(VALUE val);
5149VALUE rb_Hash(VALUE val);
5150__attribute__((__nonnull__ ()))
5151double rb_cstr_to_dbl(const char *str, int mode);
5152double rb_str_to_dbl(VALUE str, int mode);
5153
5154
5155
5156
5157ID rb_id_attrset(ID id);
5158__attribute__((__const__))
5159int rb_is_const_id(ID id);
5160__attribute__((__const__))
5161int rb_is_global_id(ID id);
5162__attribute__((__const__))
5163int rb_is_instance_id(ID id);
5164__attribute__((__const__))
5165int rb_is_attrset_id(ID id);
5166__attribute__((__const__))
5167int rb_is_class_id(ID id);
5168__attribute__((__const__))
5169int rb_is_local_id(ID id);
5170__attribute__((__const__))
5171int rb_is_junk_id(ID);
5172__attribute__((__nonnull__ ()))
5173int rb_symname_p(const char *str);
5174VALUE rb_backref_get(void);
5175void rb_backref_set(VALUE md);
5176VALUE rb_lastline_get(void);
5177void rb_lastline_set(VALUE str);
5178VALUE rb_sym_all_symbols(void);
5179
5180
5181
5182
5183void rb_last_status_set(int status, pid_t pid);
5184VALUE rb_last_status_get(void);
5185__attribute__((__nonnull__ ()))
5186int rb_proc_exec(const char *cmd);
5187__attribute__((__noreturn__))
5188VALUE rb_f_exec(int argc, const VALUE *argv);
5189pid_t rb_waitpid(pid_t pid, int *status, int flags);
5190void rb_syswait(pid_t pid);
5191pid_t rb_spawn(int argc, const VALUE *argv);
5192pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen);
5193VALUE rb_proc_times(VALUE _);
5194VALUE rb_detach_process(pid_t pid);
5195
5196
5197
5198
5199unsigned int rb_genrand_int32(void);
5200double rb_genrand_real(void);
5201void rb_reset_random_seed(void);
5202VALUE rb_random_bytes(VALUE rnd, long n);
5203unsigned int rb_random_int32(VALUE rnd);
5204double rb_random_real(VALUE rnd);
5205unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit);
5206unsigned long rb_genrand_ulong_limited(unsigned long i);
5207
5208
5209
5210
5211VALUE rb_range_new(VALUE beg, VALUE end, int excl);
5212__attribute__((__nonnull__ ()))
5213VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err);
5214__attribute__((__nonnull__ ()))
5215int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp);
5216
5217
5218
5219
5220VALUE rb_rational_raw(VALUE num, VALUE den);
5221VALUE rb_rational_new(VALUE num, VALUE den);
5222VALUE rb_Rational(VALUE num, VALUE den);
5223__attribute__((__pure__))
5224VALUE rb_rational_num(VALUE rat);
5225__attribute__((__pure__))
5226VALUE rb_rational_den(VALUE rat);
5227VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec);
5228VALUE rb_flt_rationalize(VALUE flt);
5229
5230
5231
5232
5233int rb_memcicmp(const void *s1,const void *s2, long n);
5234void rb_match_busy(VALUE md);
5235VALUE rb_reg_nth_defined(int n, VALUE md);
5236VALUE rb_reg_nth_match(int n, VALUE md);
5237int rb_reg_backref_number(VALUE match, VALUE backref);
5238VALUE rb_reg_last_match(VALUE md);
5239VALUE rb_reg_match_pre(VALUE md);
5240VALUE rb_reg_match_post(VALUE md);
5241VALUE rb_reg_match_last(VALUE md);
5242VALUE rb_reg_new_str(VALUE src, int opts);
5243__attribute__((__nonnull__ ()))
5244VALUE rb_reg_new(const char *src, long len, int opts);
5245VALUE rb_reg_alloc(void);
5246VALUE rb_reg_init_str(VALUE re, VALUE s, int options);
5247VALUE rb_reg_match(VALUE re, VALUE str);
5248VALUE rb_reg_match2(VALUE re);
5249int rb_reg_options(VALUE re);
5250
5251
5252
5253
5254extern VALUE rb_argv0;
5255VALUE rb_get_argv(void);
5256__attribute__((__nonnull__ ()))
5257void *rb_load_file(const char *file);
5258void *rb_load_file_str(VALUE file);
5259
5260
5261struct timeval;
5262typedef struct {
5263 int maxfd;
5264 fd_set *fdset;
5265} rb_fdset_t;
5266
5267
5268__attribute__((__nonnull__ ()))
5269void rb_fd_init(rb_fdset_t *f);
5270__attribute__((__nonnull__ ()))
5271void rb_fd_term(rb_fdset_t *f);
5272__attribute__((__nonnull__ ()))
5273void rb_fd_zero(rb_fdset_t *f);
5274__attribute__((__nonnull__ ()))
5275void rb_fd_set(int fd, rb_fdset_t *f);
5276__attribute__((__nonnull__ ()))
5277void rb_fd_clr(int fd, rb_fdset_t *f);
5278__attribute__((__nonnull__ ()))
5279__attribute__((__pure__))
5280int rb_fd_isset(int fd, const rb_fdset_t *f);
5281void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max);
5282void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
5283int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5284
5285
5286__attribute__((__nonnull__ ()))
5287__attribute__((__pure__))
5288static inline fd_set *
5289rb_fd_ptr(const rb_fdset_t *f)
5290{
5291 return f->fdset;
5292}
5293__attribute__((__nonnull__ ()))
5294__attribute__((__pure__))
5295static inline int
5296rb_fd_max(const rb_fdset_t *f)
5297{
5298 return f->maxfd;
5299}
5300
5301
5302struct timeval;
5303int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5304
5305
5306
5307
5308__attribute__((__nonnull__ ()))
5309VALUE rb_f_kill(int argc, const VALUE *argv);
5310void (*ruby_posix_signal(int, void (*)(int)))(int);
5311__attribute__((__pure__))
5312const char *ruby_signal_name(int signo);
5313void ruby_default_signal(int sig);
5314
5315
5316
5317
5318VALUE rb_f_sprintf(int argc, const VALUE *argv);
5319__attribute__((__nonnull__ (1)))
5320__attribute__((__format__(__printf__, 1, 2)))
5321VALUE rb_sprintf(const char *fmt, ...);
5322__attribute__((__nonnull__ (1)))
5323__attribute__((__format__(__printf__, 1, 0)))
5324VALUE rb_vsprintf(const char *fmt, va_list ap);
5325__attribute__((__nonnull__ (2)))
5326__attribute__((__format__(__printf__, 2, 3)))
5327VALUE rb_str_catf(VALUE dst, const char *fmt, ...);
5328__attribute__((__nonnull__ (2)))
5329__attribute__((__format__(__printf__, 2, 0)))
5330VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap);
5331VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt);
5332
5333
5334
5335
5336VALUE rb_str_new(const char *ptr, long len);
5337VALUE rb_str_new_cstr(const char *ptr);
5338VALUE rb_str_new_shared(VALUE str);
5339VALUE rb_str_new_frozen(VALUE str);
5340VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);
5341VALUE rb_tainted_str_new_cstr(const char *ptr);
5342VALUE rb_tainted_str_new(const char *ptr, long len);
5343VALUE rb_external_str_new(const char *ptr, long len);
5344__attribute__((__nonnull__ ()))
5345VALUE rb_external_str_new_cstr(const char *ptr);
5346VALUE rb_locale_str_new(const char *ptr, long len);
5347__attribute__((__nonnull__ ()))
5348VALUE rb_locale_str_new_cstr(const char *ptr);
5349VALUE rb_filesystem_str_new(const char *ptr, long len);
5350__attribute__((__nonnull__ ()))
5351VALUE rb_filesystem_str_new_cstr(const char *ptr);
5352VALUE rb_str_buf_new(long capa);
5353__attribute__((__nonnull__ ()))
5354VALUE rb_str_buf_new_cstr(const char *ptr);
5355VALUE rb_str_tmp_new(long len);
5356VALUE rb_usascii_str_new(const char *ptr, long len);
5357VALUE rb_usascii_str_new_cstr(const char *ptr);
5358VALUE rb_utf8_str_new(const char *ptr, long len);
5359VALUE rb_utf8_str_new_cstr(const char *ptr);
5360VALUE rb_str_new_static(const char *ptr, long len);
5361VALUE rb_usascii_str_new_static(const char *ptr, long len);
5362VALUE rb_utf8_str_new_static(const char *ptr, long len);
5363VALUE rb_str_to_interned_str(VALUE str);
5364VALUE rb_interned_str(const char *ptr, long len);
5365__attribute__((__nonnull__ ()))
5366VALUE rb_interned_str_cstr(const char *ptr);
5367void rb_str_free(VALUE str);
5368void rb_str_shared_replace(VALUE dst, VALUE src);
5369VALUE rb_str_buf_append(VALUE dst, VALUE src);
5370VALUE rb_str_buf_cat(VALUE, const char*, long);
5371VALUE rb_str_buf_cat2(VALUE, const char*);
5372__attribute__((__nonnull__ ()))
5373VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src);
5374VALUE rb_obj_as_string(VALUE obj);
5375VALUE rb_check_string_type(VALUE obj);
5376void rb_must_asciicompat(VALUE obj);
5377VALUE rb_str_dup(VALUE str);
5378VALUE rb_str_resurrect(VALUE str);
5379VALUE rb_str_locktmp(VALUE str);
5380VALUE rb_str_unlocktmp(VALUE str);
5381VALUE rb_str_dup_frozen(VALUE);
5382VALUE rb_str_plus(VALUE lhs, VALUE rhs);
5383VALUE rb_str_times(VALUE str, VALUE num);
5384long rb_str_sublen(VALUE str, long pos);
5385VALUE rb_str_substr(VALUE str, long beg, long len);
5386VALUE rb_str_subseq(VALUE str, long beg, long len);
5387char *rb_str_subpos(VALUE str, long beg, long *len);
5388void rb_str_modify(VALUE str);
5389void rb_str_modify_expand(VALUE str, long capa);
5390VALUE rb_str_freeze(VALUE str);
5391void rb_str_set_len(VALUE str, long len);
5392VALUE rb_str_resize(VALUE str, long len);
5393VALUE rb_str_cat(VALUE dst, const char *src, long srclen);
5394VALUE rb_str_cat_cstr(VALUE dst, const char *src);
5395VALUE rb_str_cat2(VALUE, const char*);
5396VALUE rb_str_append(VALUE dst, VALUE src);
5397VALUE rb_str_concat(VALUE dst, VALUE src);
5398st_index_t rb_memhash(const void *ptr, long len);
5399st_index_t rb_hash_start(st_index_t i);
5400st_index_t rb_str_hash(VALUE str);
5401int rb_str_hash_cmp(VALUE str1, VALUE str2);
5402int rb_str_comparable(VALUE str1, VALUE str2);
5403int rb_str_cmp(VALUE lhs, VALUE rhs);
5404VALUE rb_str_equal(VALUE str1, VALUE str2);
5405VALUE rb_str_drop_bytes(VALUE str, long len);
5406void rb_str_update(VALUE dst, long beg, long len, VALUE src);
5407VALUE rb_str_replace(VALUE dst, VALUE src);
5408VALUE rb_str_inspect(VALUE str);
5409VALUE rb_str_dump(VALUE str);
5410VALUE rb_str_split(VALUE str, const char *delim);
5411rb_gvar_setter_t rb_str_setter;
5412VALUE rb_str_intern(VALUE str);
5413VALUE rb_sym_to_s(VALUE sym);
5414long rb_str_strlen(VALUE str);
5415VALUE rb_str_length(VALUE);
5416long rb_str_offset(VALUE str, long pos);
5417__attribute__((__pure__))
5418size_t rb_str_capacity(VALUE str);
5419VALUE rb_str_ellipsize(VALUE str, long len);
5420VALUE rb_str_scrub(VALUE str, VALUE repl);
5421VALUE rb_str_succ(VALUE orig);
5422__attribute__((__nonnull__ ()))
5423static inline long
5424rbimpl_strlen(const char *str)
5425{
5426 return ((long)strlen(str));
5427}
5428__attribute__((__nonnull__ ()))
5429static inline VALUE
5430rbimpl_str_new_cstr(const char *str)
5431{
5432 long len = rbimpl_strlen(str);
5433 return rb_str_new_static(str, len);
5434}
5435__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
5436static inline VALUE
5437rbimpl_tainted_str_new_cstr(const char *str)
5438{
5439 long len = rbimpl_strlen(str);
5440 return rb_tainted_str_new(str, len);
5441}
5442__attribute__((__nonnull__ ()))
5443static inline VALUE
5444rbimpl_usascii_str_new_cstr(const char *str)
5445{
5446 long len = rbimpl_strlen(str);
5447 return rb_usascii_str_new_static(str, len);
5448}
5449__attribute__((__nonnull__ ()))
5450static inline VALUE
5451rbimpl_utf8_str_new_cstr(const char *str)
5452{
5453 long len = rbimpl_strlen(str);
5454 return rb_utf8_str_new_static(str, len);
5455}
5456__attribute__((__nonnull__ ()))
5457static inline VALUE
5458rbimpl_external_str_new_cstr(const char *str)
5459{
5460 long len = rbimpl_strlen(str);
5461 return rb_external_str_new(str, len);
5462}
5463__attribute__((__nonnull__ ()))
5464static inline VALUE
5465rbimpl_locale_str_new_cstr(const char *str)
5466{
5467 long len = rbimpl_strlen(str);
5468 return rb_locale_str_new(str, len);
5469}
5470__attribute__((__nonnull__ ()))
5471static inline VALUE
5472rbimpl_str_buf_new_cstr(const char *str)
5473{
5474 long len = rbimpl_strlen(str);
5475 VALUE buf = rb_str_buf_new(len);
5476 return rb_str_buf_cat(buf, str, len);
5477}
5478__attribute__((__nonnull__ ()))
5479static inline VALUE
5480rbimpl_str_cat_cstr(VALUE buf, const char *str)
5481{
5482 long len = rbimpl_strlen(str);
5483 return rb_str_cat(buf, str, len);
5484}
5485__attribute__((__nonnull__ ()))
5486static inline VALUE
5487rbimpl_exc_new_cstr(VALUE exc, const char *str)
5488{
5489 long len = rbimpl_strlen(str);
5490 return rb_exc_new(exc, str, len);
5491}
5492
5493
5494
5495
5496VALUE rb_struct_new(VALUE klass, ...);
5497VALUE rb_struct_define(const char *name, ...);
5498__attribute__((__nonnull__ (2)))
5499VALUE rb_struct_define_under(VALUE space, const char *name, ...);
5500VALUE rb_struct_alloc(VALUE klass, VALUE values);
5501VALUE rb_struct_initialize(VALUE self, VALUE values);
5502VALUE rb_struct_getmember(VALUE self, ID key);
5503VALUE rb_struct_s_members(VALUE klass);
5504VALUE rb_struct_members(VALUE self);
5505VALUE rb_struct_alloc_noinit(VALUE klass);
5506VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...);
5507__attribute__((__nonnull__ (2)))
5508VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...);
5509
5510
5511
5512
5513struct timeval;
5514void rb_thread_schedule(void);
5515int rb_thread_wait_fd(int fd);
5516int rb_thread_fd_writable(int fd);
5517void rb_thread_fd_close(int fd);
5518int rb_thread_alone(void);
5519void rb_thread_sleep(int sec);
5520void rb_thread_sleep_forever(void);
5521void rb_thread_sleep_deadly(void);
5522VALUE rb_thread_stop(void);
5523VALUE rb_thread_wakeup(VALUE thread);
5524VALUE rb_thread_wakeup_alive(VALUE thread);
5525VALUE rb_thread_run(VALUE thread);
5526VALUE rb_thread_kill(VALUE thread);
5527__attribute__((__nonnull__ (1)))
5528VALUE rb_thread_create(VALUE (*f)(void *g), void *g);
5529void rb_thread_wait_for(struct timeval time);
5530VALUE rb_thread_current(void);
5531VALUE rb_thread_main(void);
5532VALUE rb_thread_local_aref(VALUE thread, ID key);
5533VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val);
5534void rb_thread_atfork(void);
5535void rb_thread_atfork_before_exec(void);
5536VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5537VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5538VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5539VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5540typedef void rb_unblock_function_t(void *);
5541typedef VALUE rb_blocking_function_t(void *);
5542void rb_thread_check_ints(void);
5543int rb_thread_interrupted(VALUE thval);
5544VALUE rb_mutex_new(void);
5545VALUE rb_mutex_locked_p(VALUE mutex);
5546VALUE rb_mutex_trylock(VALUE mutex);
5547VALUE rb_mutex_lock(VALUE mutex);
5548VALUE rb_mutex_unlock(VALUE mutex);
5549VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
5550VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
5551
5552
5553
5554
5555struct timespec;
5556struct timeval;
5557__attribute__((__nonnull__ ()))
5558void rb_timespec_now(struct timespec *ts);
5559VALUE rb_time_new(time_t sec, long usec);
5560VALUE rb_time_nano_new(time_t sec, long nsec);
5561__attribute__((__nonnull__ ()))
5562VALUE rb_time_timespec_new(const struct timespec *ts, int offset);
5563VALUE rb_time_num_new(VALUE timev, VALUE off);
5564struct timeval rb_time_interval(VALUE num);
5565struct timeval rb_time_timeval(VALUE time);
5566struct timespec rb_time_timespec(VALUE time);
5567struct timespec rb_time_timespec_interval(VALUE num);
5568VALUE rb_time_utc_offset(VALUE time);
5569
5570
5571
5572
5573VALUE rb_mod_name(VALUE mod);
5574VALUE rb_class_path(VALUE mod);
5575VALUE rb_class_path_cached(VALUE mod);
5576__attribute__((__nonnull__ ()))
5577void rb_set_class_path(VALUE klass, VALUE space, const char *name);
5578void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);
5579VALUE rb_path_to_class(VALUE path);
5580__attribute__((__nonnull__ ()))
5581VALUE rb_path2class(const char *path);
5582VALUE rb_class_name(VALUE obj);
5583VALUE rb_autoload_load(VALUE space, ID name);
5584VALUE rb_autoload_p(VALUE space, ID name);
5585VALUE rb_f_trace_var(int argc, const VALUE *argv);
5586VALUE rb_f_untrace_var(int argc, const VALUE *argv);
5587VALUE rb_f_global_variables(void);
5588void rb_alias_variable(ID dst, ID src);
5589void rb_free_generic_ivar(VALUE obj);
5590VALUE rb_ivar_get(VALUE obj, ID name);
5591VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);
5592VALUE rb_ivar_defined(VALUE obj, ID name);
5593void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);
5594st_index_t rb_ivar_count(VALUE obj);
5595VALUE rb_attr_get(VALUE obj, ID name);
5596VALUE rb_obj_instance_variables(VALUE obj);
5597VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name);
5598void *rb_mod_const_at(VALUE, void*);
5599void *rb_mod_const_of(VALUE, void*);
5600VALUE rb_const_list(void*);
5601VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv);
5602VALUE rb_mod_remove_const(VALUE space, VALUE name);
5603int rb_const_defined(VALUE space, ID name);
5604int rb_const_defined_at(VALUE space, ID name);
5605int rb_const_defined_from(VALUE space, ID name);
5606VALUE rb_const_get(VALUE space, ID name);
5607VALUE rb_const_get_at(VALUE space, ID name);
5608VALUE rb_const_get_from(VALUE space, ID name);
5609void rb_const_set(VALUE space, ID name, VALUE val);
5610VALUE rb_const_remove(VALUE space, ID name);
5611VALUE rb_cvar_defined(VALUE klass, ID name);
5612void rb_cvar_set(VALUE klass, ID name, VALUE val);
5613VALUE rb_cvar_get(VALUE klass, ID name);
5614__attribute__((__nonnull__ ()))
5615VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front);
5616__attribute__((__nonnull__ ()))
5617void rb_cv_set(VALUE klass, const char *name, VALUE val);
5618__attribute__((__nonnull__ ()))
5619VALUE rb_cv_get(VALUE klass, const char *name);
5620__attribute__((__nonnull__ ()))
5621void rb_define_class_variable(VALUE, const char*, VALUE);
5622VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv);
5623VALUE rb_mod_remove_cvar(VALUE mod, VALUE name);
5624
5625
5626int ruby_native_thread_p(void);
5627__attribute__((__nonnull__ (3)))
5628__attribute__((__format__(__printf__, 3, 4)))
5629int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
5630__attribute__((__nonnull__ (3)))
5631__attribute__((__format__(__printf__, 3, 0)))
5632int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
5633
5634
5635
5636typedef long jmp_buf[32];
5637
5638typedef long sigjmp_buf[32 +1+((sizeof (long) + sizeof (sigset_t) - 1)
5639 /sizeof (long))];
5640extern void siglongjmp (sigjmp_buf, int) __attribute__ ((__noreturn__));
5641extern int sigsetjmp (sigjmp_buf, int);
5642extern void _longjmp (jmp_buf, int) __attribute__ ((__noreturn__));
5643extern int _setjmp (jmp_buf);
5644
5645void longjmp (jmp_buf __jmpb, int __retval)
5646 __attribute__ ((__noreturn__));
5647int setjmp (jmp_buf __jmpb);
5648
5649void __assert (const char *, int, const char *)
5650 __attribute__ ((__noreturn__));
5651void __assert_func (const char *, int, const char *, const char *)
5652 __attribute__ ((__noreturn__));
5653static inline char *container_of_or_null_(void *member_ptr, size_t offset)
5654{
5655 return member_ptr ? (char *)member_ptr - offset : ((void *)0);
5656}
5657struct list_node
5658{
5659 struct list_node *next, *prev;
5660};
5661struct list_head
5662{
5663 struct list_node n;
5664};
5665static inline void list_head_init(struct list_head *h)
5666{
5667 h->n.next = h->n.prev = &h->n;
5668}
5669static inline void list_node_init(struct list_node *n)
5670{
5671 n->next = n->prev = n;
5672}
5673static inline void list_add_after_(struct list_head *h,
5674 struct list_node *p,
5675 struct list_node *n,
5676 const char *abortstr)
5677{
5678 n->next = p->next;
5679 n->prev = p;
5680 p->next->prev = n;
5681 p->next = n;
5682 (void)((void)abortstr, h);
5683}
5684static inline void list_add_(struct list_head *h,
5685 struct list_node *n,
5686 const char *abortstr)
5687{
5688 list_add_after_(h, &h->n, n, abortstr);
5689}
5690static inline void list_add_before_(struct list_head *h,
5691 struct list_node *p,
5692 struct list_node *n,
5693 const char *abortstr)
5694{
5695 n->next = p;
5696 n->prev = p->prev;
5697 p->prev->next = n;
5698 p->prev = n;
5699 (void)((void)abortstr, h);
5700}
5701static inline void list_add_tail_(struct list_head *h,
5702 struct list_node *n,
5703 const char *abortstr)
5704{
5705 list_add_before_(h, &h->n, n, abortstr);
5706}
5707static inline int list_empty_(const struct list_head *h, const char* abortstr)
5708{
5709 (void)((void)abortstr, h);
5710 return h->n.next == &h->n;
5711}
5712static inline _Bool list_empty_nocheck(const struct list_head *h)
5713{
5714 return h->n.next == &h->n;
5715}
5716static inline void list_del_(struct list_node *n, const char* abortstr)
5717{
5718 (void)((void)abortstr, n);
5719 n->next->prev = n->prev;
5720 n->prev->next = n->next;
5721}
5722static inline void list_del_init_(struct list_node *n, const char *abortstr)
5723{
5724 list_del_(n, abortstr);
5725 list_node_init(n);
5726}
5727static inline void list_del_from(struct list_head *h, struct list_node *n)
5728{
5729 ((void)0);
5730 list_del_(n, "../ruby-3.1.3/ccan/list/list.h" ":" "329");
5731}
5732static inline void list_swap_(struct list_node *o,
5733 struct list_node *n,
5734 const char* abortstr)
5735{
5736 (void)((void)abortstr, o);
5737 *n = *o;
5738 n->next->prev = n;
5739 n->prev->next = n;
5740}
5741static inline const void *list_top_(const struct list_head *h, size_t off)
5742{
5743 if (list_empty_(h, "../ruby-3.1.3/ccan/list/list.h" ":" "399"))
5744 return ((void *)0);
5745 return (const char *)h->n.next - off;
5746}
5747static inline const void *list_pop_(const struct list_head *h, size_t off)
5748{
5749 struct list_node *n;
5750 if (list_empty_(h, "../ruby-3.1.3/ccan/list/list.h" ":" "425"))
5751 return ((void *)0);
5752 n = h->n.next;
5753 list_del_(n, "../ruby-3.1.3/ccan/list/list.h" ":" "428");
5754 return (const char *)n - off;
5755}
5756static inline const void *list_tail_(const struct list_head *h, size_t off)
5757{
5758 if (list_empty_(h, "../ruby-3.1.3/ccan/list/list.h" ":" "451"))
5759 return ((void *)0);
5760 return (const char *)h->n.prev - off;
5761}
5762static inline void list_append_list_(struct list_head *to,
5763 struct list_head *from,
5764 const char *abortstr)
5765{
5766 struct list_node *from_tail = ((void)abortstr, from)->n.prev;
5767 struct list_node *to_tail = ((void)abortstr, to)->n.prev;
5768 to->n.prev = from_tail;
5769 from_tail->next = &to->n;
5770 to_tail->next = &from->n;
5771 from->n.prev = to_tail;
5772 list_del_(&from->n, "../ruby-3.1.3/ccan/list/list.h" ":" "600");
5773 list_head_init(from);
5774}
5775static inline void list_prepend_list_(struct list_head *to,
5776 struct list_head *from,
5777 const char *abortstr)
5778{
5779 struct list_node *from_tail = ((void)abortstr, from)->n.prev;
5780 struct list_node *to_head = ((void)abortstr, to)->n.next;
5781 to->n.next = &from->n;
5782 from->n.prev = &to->n;
5783 to_head->prev = from_tail;
5784 from_tail->next = to_head;
5785 list_del_(&from->n, "../ruby-3.1.3/ccan/list/list.h" ":" "632");
5786 list_head_init(from);
5787}
5788static inline void *list_node_to_off_(struct list_node *node, size_t off)
5789{
5790 return (void *)((char *)node - off);
5791}
5792static inline struct list_node *list_node_from_off_(void *ptr, size_t off)
5793{
5794 return (struct list_node *)((char *)ptr + off);
5795}
5796static inline void *list_entry_or_null(const struct list_head *h,
5797 const struct list_node *n,
5798 size_t off)
5799{
5800 if (n == &h->n)
5801 return ((void *)0);
5802 return (char *)n - off;
5803}
5804enum ruby_id_types {
5805 RUBY_ID_STATIC_SYM = 0x01,
5806 RUBY_ID_LOCAL = 0x00,
5807 RUBY_ID_INSTANCE = (0x01<<1),
5808 RUBY_ID_GLOBAL = (0x03<<1),
5809 RUBY_ID_ATTRSET = (0x04<<1),
5810 RUBY_ID_CONST = (0x05<<1),
5811 RUBY_ID_CLASS = (0x06<<1),
5812 RUBY_ID_JUNK = (0x07<<1),
5813 RUBY_ID_INTERNAL = RUBY_ID_JUNK,
5814 RUBY_ID_SCOPE_SHIFT = 4,
5815 RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1)
5816};
5817enum ruby_method_ids {
5818 idDot2 = 128,
5819 idDot3 = 129,
5820 idUPlus = 132,
5821 idUMinus = 133,
5822 idPow = 134,
5823 idCmp = 135,
5824 idPLUS = '+',
5825 idMINUS = '-',
5826 idMULT = '*',
5827 idDIV = '/',
5828 idMOD = '%',
5829 idLTLT = 136,
5830 idGTGT = 137,
5831 idLT = '<',
5832 idLE = 138,
5833 idGT = '>',
5834 idGE = 139,
5835 idEq = 140,
5836 idEqq = 141,
5837 idNeq = 142,
5838 idNot = '!',
5839 idAnd = '&',
5840 idOr = '|',
5841 idBackquote = '`',
5842 idEqTilde = 143,
5843 idNeqTilde = 144,
5844 idAREF = 145,
5845 idASET = 146,
5846 idCOLON2 = 147,
5847 idANDOP = 148,
5848 idOROP = 149,
5849 idANDDOT = 150,
5850 tPRESERVED_ID_BEGIN = 150,
5851 idNilP,
5852 idNULL,
5853 idEmptyP,
5854 idEqlP,
5855 idRespond_to,
5856 idRespond_to_missing,
5857 idIFUNC,
5858 idCFUNC,
5859 id_core_set_method_alias,
5860 id_core_set_variable_alias,
5861 id_core_undef_method,
5862 id_core_define_method,
5863 id_core_define_singleton_method,
5864 id_core_set_postexe,
5865 id_core_hash_merge_ptr,
5866 id_core_hash_merge_kwd,
5867 id_core_raise,
5868 id_core_sprintf,
5869 id_debug_created_info,
5870 tPRESERVED_ID_END,
5871 tTOKEN_LOCAL_BEGIN = tPRESERVED_ID_END-1,
5872 tMax,
5873 tMin,
5874 tFreeze,
5875 tInspect,
5876 tIntern,
5877 tObject_id,
5878 tConst_missing,
5879 tMethodMissing,
5880 tMethod_added,
5881 tSingleton_method_added,
5882 tMethod_removed,
5883 tSingleton_method_removed,
5884 tMethod_undefined,
5885 tSingleton_method_undefined,
5886 tLength,
5887 tSize,
5888 tGets,
5889 tSucc,
5890 tEach,
5891 tProc,
5892 tLambda,
5893 tSend,
5894 t__send__,
5895 t__attached__,
5896 t__recursive_key__,
5897 tInitialize,
5898 tInitialize_copy,
5899 tInitialize_clone,
5900 tInitialize_dup,
5901 tTo_int,
5902 tTo_ary,
5903 tTo_str,
5904 tTo_sym,
5905 tTo_hash,
5906 tTo_proc,
5907 tTo_io,
5908 tTo_a,
5909 tTo_s,
5910 tTo_i,
5911 tTo_f,
5912 tTo_r,
5913 tBt,
5914 tBt_locations,
5915 tCall,
5916 tMesg,
5917 tException,
5918 tLocals,
5919 tNOT,
5920 tAND,
5921 tOR,
5922 tDiv,
5923 tDivmod,
5924 tFdiv,
5925 tQuo,
5926 tName,
5927 tNil,
5928 tUScore,
5929 tNUMPARAM_1,
5930 tNUMPARAM_2,
5931 tNUMPARAM_3,
5932 tNUMPARAM_4,
5933 tNUMPARAM_5,
5934 tNUMPARAM_6,
5935 tNUMPARAM_7,
5936 tNUMPARAM_8,
5937 tNUMPARAM_9,
5938 tTOKEN_LOCAL_END,
5939 tTOKEN_INSTANCE_BEGIN = tTOKEN_LOCAL_END-1,
5940 tTOKEN_INSTANCE_END,
5941 tTOKEN_GLOBAL_BEGIN = tTOKEN_INSTANCE_END-1,
5942 tLASTLINE,
5943 tBACKREF,
5944 tERROR_INFO,
5945 tTOKEN_GLOBAL_END,
5946 tTOKEN_CONST_BEGIN = tTOKEN_GLOBAL_END-1,
5947 tTOKEN_CONST_END,
5948 tTOKEN_CLASS_BEGIN = tTOKEN_CONST_END-1,
5949 tTOKEN_CLASS_END,
5950 tTOKEN_ATTRSET_BEGIN = tTOKEN_CLASS_END-1,
5951 tTOKEN_ATTRSET_END,
5952 tNEXT_ID = tTOKEN_ATTRSET_END,
5953 idMax = ((tMax<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5954 idMin = ((tMin<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5955 idFreeze = ((tFreeze<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5956 idInspect = ((tInspect<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5957 idIntern = ((tIntern<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5958 idObject_id = ((tObject_id<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5959 idConst_missing = ((tConst_missing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5960 idMethodMissing = ((tMethodMissing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5961 idMethod_added = ((tMethod_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5962 idSingleton_method_added = ((tSingleton_method_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5963 idMethod_removed = ((tMethod_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5964 idSingleton_method_removed = ((tSingleton_method_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5965 idMethod_undefined = ((tMethod_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5966 idSingleton_method_undefined = ((tSingleton_method_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5967 idLength = ((tLength<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5968 idSize = ((tSize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5969 idGets = ((tGets<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5970 idSucc = ((tSucc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5971 idEach = ((tEach<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5972 idProc = ((tProc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5973 idLambda = ((tLambda<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5974 idSend = ((tSend<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5975 id__send__ = ((t__send__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5976 id__attached__ = ((t__attached__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5977 id__recursive_key__ = ((t__recursive_key__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5978 idInitialize = ((tInitialize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5979 idInitialize_copy = ((tInitialize_copy<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5980 idInitialize_clone = ((tInitialize_clone<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5981 idInitialize_dup = ((tInitialize_dup<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5982 idTo_int = ((tTo_int<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5983 idTo_ary = ((tTo_ary<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5984 idTo_str = ((tTo_str<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5985 idTo_sym = ((tTo_sym<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5986 idTo_hash = ((tTo_hash<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5987 idTo_proc = ((tTo_proc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5988 idTo_io = ((tTo_io<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5989 idTo_a = ((tTo_a<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5990 idTo_s = ((tTo_s<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5991 idTo_i = ((tTo_i<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5992 idTo_f = ((tTo_f<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5993 idTo_r = ((tTo_r<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5994 idBt = ((tBt<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5995 idBt_locations = ((tBt_locations<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5996 idCall = ((tCall<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5997 idMesg = ((tMesg<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5998 idException = ((tException<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5999 idLocals = ((tLocals<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6000 idNOT = ((tNOT<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6001 idAND = ((tAND<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6002 idOR = ((tOR<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6003 idDiv = ((tDiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6004 idDivmod = ((tDivmod<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6005 idFdiv = ((tFdiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6006 idQuo = ((tQuo<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6007 idName = ((tName<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6008 idNil = ((tNil<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6009 idUScore = ((tUScore<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6010 idNUMPARAM_1 = ((tNUMPARAM_1<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6011 idNUMPARAM_2 = ((tNUMPARAM_2<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6012 idNUMPARAM_3 = ((tNUMPARAM_3<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6013 idNUMPARAM_4 = ((tNUMPARAM_4<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6014 idNUMPARAM_5 = ((tNUMPARAM_5<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6015 idNUMPARAM_6 = ((tNUMPARAM_6<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6016 idNUMPARAM_7 = ((tNUMPARAM_7<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6017 idNUMPARAM_8 = ((tNUMPARAM_8<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6018 idNUMPARAM_9 = ((tNUMPARAM_9<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6019 idLASTLINE = ((tLASTLINE<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6020 idBACKREF = ((tBACKREF<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6021 idERROR_INFO = ((tERROR_INFO<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6022 tLAST_OP_ID = tPRESERVED_ID_END-1,
6023 idLAST_OP_ID = tLAST_OP_ID >> RUBY_ID_SCOPE_SHIFT
6024};
6025void rb_obj_info_dump(VALUE obj);
6026void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
6027
6028
6029void ruby_debug_breakpoint(void);
6030__attribute__((__format__(__printf__, (1), (2)))) void ruby_debug_printf(const char*, ...);
6031
6032
6033VALUE rb_ary_last(int, const VALUE *, VALUE);
6034void rb_ary_set_len(VALUE, long);
6035void rb_ary_delete_same(VALUE, VALUE);
6036VALUE rb_ary_tmp_new_fill(long capa);
6037VALUE rb_ary_at(VALUE, VALUE);
6038size_t rb_ary_memsize(VALUE);
6039VALUE rb_to_array_type(VALUE obj);
6040VALUE rb_to_array(VALUE obj);
6041void rb_ary_cancel_sharing(VALUE ary);
6042static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
6043static inline _Bool ARY_PTR_USING_P(VALUE ary);
6044static inline void RARY_TRANSIENT_SET(VALUE ary);
6045static inline void RARY_TRANSIENT_UNSET(VALUE ary);
6046
6047
6048VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
6049VALUE rb_check_to_array(VALUE ary);
6050VALUE rb_ary_behead(VALUE, long);
6051VALUE rb_ary_aref1(VALUE ary, VALUE i);
6052struct rb_execution_context_struct;
6053VALUE rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts);
6054
6055
6056static inline VALUE
6057rb_ary_entry_internal(VALUE ary, long offset)
6058{
6059 long len = rb_array_len(ary);
6060 const VALUE *ptr = rb_array_const_ptr_transient(ary);
6061 if (len == 0) return ((VALUE)RUBY_Qnil);
6062 if (offset < 0) {
6063 offset += len;
6064 if (offset < 0) return ((VALUE)RUBY_Qnil);
6065 }
6066 else if (len <= offset) {
6067 return ((VALUE)RUBY_Qnil);
6068 }
6069 return ptr[offset];
6070}
6071static inline _Bool
6072ARY_PTR_USING_P(VALUE ary)
6073{
6074 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER14));
6075}
6076static inline void
6077RARY_TRANSIENT_SET(VALUE ary)
6078{
6079 RB_FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6080}
6081static inline void
6082RARY_TRANSIENT_UNSET(VALUE ary)
6083{
6084 RB_FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6085}
6086__attribute__((__pure__))
6087__attribute__((__artificial__))
6088static inline VALUE
6089RARRAY_AREF(VALUE ary, long i)
6090{
6091 ((void)0);
6092 return rb_array_const_ptr_transient(ary)[i];
6093}
6094typedef unsigned long long rb_serial_t;
6095struct rb_callable_method_entry_struct;
6096struct rb_method_definition_struct;
6097struct rb_execution_context_struct;
6098struct rb_control_frame_struct;
6099struct rb_callinfo;
6100enum method_missing_reason {
6101 MISSING_NOENTRY = 0x00,
6102 MISSING_PRIVATE = 0x01,
6103 MISSING_PROTECTED = 0x02,
6104 MISSING_FCALL = 0x04,
6105 MISSING_VCALL = 0x08,
6106 MISSING_SUPER = 0x10,
6107 MISSING_MISSING = 0x20,
6108 MISSING_NONE = 0x40
6109};
6110rb_serial_t rb_next_class_serial(void);
6111VALUE rb_obj_is_thread(VALUE obj);
6112void rb_vm_mark(void *ptr);
6113void rb_vm_each_stack_value(void *ptr, void (*cb)(VALUE, void*), void *ctx);
6114__attribute__((__pure__)) VALUE rb_vm_top_self(void);
6115void rb_vm_inc_const_missing_count(void);
6116const void **rb_vm_get_insns_address_table(void);
6117VALUE rb_source_location(int *pline);
6118const char *rb_source_location_cstr(int *pline);
6119static void rb_vm_pop_cfunc_frame(void);
6120int rb_vm_add_root_module(VALUE module);
6121void rb_vm_check_redefinition_by_prepend(VALUE klass);
6122int rb_vm_check_optimizable_mid(VALUE mid);
6123VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
6124static VALUE ruby_vm_special_exception_copy(VALUE);
6125__attribute__((__pure__)) st_table *rb_vm_fstring_table(void);
6126
6127
6128VALUE rb_vm_exec(struct rb_execution_context_struct *, _Bool);
6129
6130
6131VALUE rb_current_realfilepath(void);
6132VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
6133typedef void rb_check_funcall_hook(int, VALUE, ID, int, const VALUE *, VALUE);
6134VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
6135 rb_check_funcall_hook *hook, VALUE arg);
6136VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *argv,
6137 rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
6138const char *rb_type_str(enum ruby_value_type type);
6139VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
6140VALUE rb_check_funcall_basic_kw(VALUE, ID, VALUE, int, const VALUE*, int);
6141VALUE rb_yield_1(VALUE val);
6142VALUE rb_yield_force_blockarg(VALUE values);
6143VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
6144 rb_block_call_func_t bl_proc, int min_argc, int max_argc,
6145 VALUE data2);
6146void rb_check_stack_overflow(void);
6147VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
6148VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
6149struct rb_iseq_struct;
6150
6151
6152const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass);
6153
6154
6155struct rb_execution_context_struct;
6156
6157
6158int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE obj, ID id, int priv);
6159
6160
6161void rb_print_backtrace(void);
6162VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
6163VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval);
6164VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6165VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6166VALUE rb_make_backtrace(void);
6167void rb_backtrace_print_as_bugreport(void);
6168int rb_backtrace_p(VALUE obj);
6169VALUE rb_backtrace_to_str_ary(VALUE obj);
6170VALUE rb_backtrace_to_location_ary(VALUE obj);
6171void rb_backtrace_each(VALUE (*iter)(VALUE recv, VALUE str), VALUE output);
6172int rb_frame_info_p(VALUE obj);
6173int rb_get_node_id_from_frame_info(VALUE obj);
6174const struct rb_iseq_struct *rb_get_iseq_from_frame_info(VALUE obj);
6175
6176
6177VALUE rb_ec_backtrace_object(const struct rb_execution_context_struct *ec);
6178void rb_backtrace_use_iseq_first_lineno_for_last_location(VALUE self);
6179
6180
6181struct rb_execution_context_struct;
6182struct rb_objspace;
6183typedef struct ractor_newobj_size_pool_cache {
6184 struct RVALUE *freelist;
6185 struct heap_page *using_page;
6186} rb_ractor_newobj_size_pool_cache_t;
6187typedef struct ractor_newobj_cache {
6188 rb_ractor_newobj_size_pool_cache_t size_pool_caches[1];
6189} rb_ractor_newobj_cache_t;
6190extern VALUE *ruby_initial_gc_stress_ptr;
6191extern int ruby_disable_gc;
6192__attribute__((__malloc__)) void *ruby_mimmalloc(size_t size);
6193void ruby_mimfree(void *ptr);
6194void rb_objspace_set_event_hook(const rb_event_flag_t event);
6195VALUE rb_objspace_gc_enable(struct rb_objspace *);
6196VALUE rb_objspace_gc_disable(struct rb_objspace *);
6197void ruby_gc_set_params(void);
6198void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
6199__attribute__((__alloc_align__(1)))
6200__attribute__((__malloc__)) void *rb_aligned_malloc(size_t, size_t) __attribute__((__alloc_size__ (2)));
6201size_t rb_size_mul_or_raise(size_t, size_t, VALUE);
6202size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE);
6203__attribute__((__malloc__)) void *rb_xmalloc_mul_add(size_t, size_t, size_t);
6204void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
6205__attribute__((__malloc__)) void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6206__attribute__((__malloc__)) void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6207static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6208static inline void *ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2, 3)));
6209static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
6210VALUE rb_class_allocate_instance(VALUE klass);
6211void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
6212size_t rb_gc_obj_slot_size(VALUE obj);
6213_Bool rb_gc_size_allocatable_p(size_t size);
6214int rb_objspace_garbage_object_p(VALUE obj);
6215
6216
6217const char *rb_objspace_data_type_name(VALUE obj);
6218VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
6219VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
6220VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
6221size_t rb_obj_memsize_of(VALUE);
6222void rb_gc_verify_internal_consistency(void);
6223size_t rb_obj_gc_flags(VALUE, ID[], size_t);
6224void rb_gc_mark_values(long n, const VALUE *values);
6225void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
6226void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6227void *ruby_sized_xrealloc2(void *ptr, size_t new_count, size_t element_size, size_t old_count) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2, 3)));
6228void ruby_sized_xfree(void *x, size_t size);
6229
6230
6231
6232
6233int rb_ec_stack_check(struct rb_execution_context_struct *ec);
6234void rb_gc_writebarrier_remember(VALUE obj);
6235const char *rb_obj_info(VALUE obj);
6236
6237
6238static inline void *
6239ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
6240{
6241 return ruby_xrealloc(ptr, new_size);
6242}
6243static inline void *
6244ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
6245{
6246 return ruby_xrealloc2(ptr, new_count, elemsiz);
6247}
6248static inline void
6249ruby_sized_xfree_inlined(void *ptr, size_t size)
6250{
6251 ruby_xfree(ptr);
6252}
6253enum imemo_type {
6254 imemo_env = 0,
6255 imemo_cref = 1,
6256 imemo_svar = 2,
6257 imemo_throw_data = 3,
6258 imemo_ifunc = 4,
6259 imemo_memo = 5,
6260 imemo_ment = 6,
6261 imemo_iseq = 7,
6262 imemo_tmpbuf = 8,
6263 imemo_ast = 9,
6264 imemo_parser_strterm = 10,
6265 imemo_callinfo = 11,
6266 imemo_callcache = 12,
6267 imemo_constcache = 13,
6268};
6269struct vm_svar {
6270 VALUE flags;
6271 const VALUE cref_or_me;
6272 const VALUE lastline;
6273 const VALUE backref;
6274 const VALUE others;
6275};
6276struct vm_throw_data {
6277 VALUE flags;
6278 VALUE reserved;
6279 const VALUE throw_obj;
6280 const struct rb_control_frame_struct *catch_frame;
6281 int throw_state;
6282};
6283struct vm_ifunc_argc {
6284 int min, max;
6285};
6286struct vm_ifunc {
6287 VALUE flags;
6288 VALUE reserved;
6289 rb_block_call_func_t func;
6290 const void *data;
6291 struct vm_ifunc_argc argc;
6292};
6293struct rb_imemo_tmpbuf_struct {
6294 VALUE flags;
6295 VALUE reserved;
6296 VALUE *ptr;
6297 struct rb_imemo_tmpbuf_struct *next;
6298 size_t cnt;
6299};
6300struct MEMO {
6301 VALUE flags;
6302 VALUE reserved;
6303 const VALUE v1;
6304 const VALUE v2;
6305 union {
6306 long cnt;
6307 long state;
6308 const VALUE value;
6309 void (*func)(void);
6310 } u3;
6311};
6312typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
6313VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
6314rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
6315struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
6316void rb_strterm_mark(VALUE obj);
6317static inline enum imemo_type imemo_type(VALUE imemo);
6318static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
6319static inline _Bool imemo_throw_data_p(VALUE imemo);
6320static inline struct vm_ifunc *rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data);
6321static inline VALUE rb_imemo_tmpbuf_auto_free_pointer(void);
6322static inline void *RB_IMEMO_TMPBUF_PTR(VALUE v);
6323static inline void *rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr);
6324static inline VALUE rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str);
6325static inline void MEMO_V1_SET(struct MEMO *m, VALUE v);
6326static inline void MEMO_V2_SET(struct MEMO *m, VALUE v);
6327
6328
6329VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
6330const char *rb_imemo_name(enum imemo_type type);
6331
6332
6333static inline enum imemo_type
6334imemo_type(VALUE imemo)
6335{
6336 return (((struct RBasic *)(imemo))->flags >> ((VALUE)RUBY_FL_USHIFT)) & 0x0f;
6337}
6338static inline int
6339imemo_type_p(VALUE imemo, enum imemo_type imemo_type)
6340{
6341 if ((__builtin_expect(!!(!RB_SPECIAL_CONST_P(imemo)), 1))) {
6342 const VALUE mask = (0x0f << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_MASK;
6343 const VALUE expected_type = (imemo_type << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_IMEMO;
6344 return expected_type == (((struct RBasic *)(imemo))->flags & mask);
6345 }
6346 else {
6347 return 0;
6348 }
6349}
6350static inline _Bool
6351imemo_throw_data_p(VALUE imemo)
6352{
6353 return RB_TYPE_P(imemo, RUBY_T_IMEMO);
6354}
6355static inline struct vm_ifunc *
6356rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data)
6357{
6358 return rb_vm_ifunc_new(func, data, 0, (-1));
6359}
6360static inline VALUE
6361rb_imemo_tmpbuf_auto_free_pointer(void)
6362{
6363 return rb_imemo_new(imemo_tmpbuf, 0, 0, 0, 0);
6364}
6365static inline void *
6366RB_IMEMO_TMPBUF_PTR(VALUE v)
6367{
6368 const struct rb_imemo_tmpbuf_struct *p = (const void *)v;
6369 return p->ptr;
6370}
6371static inline void *
6372rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr)
6373{
6374 return ((rb_imemo_tmpbuf_t *)v)->ptr = ptr;
6375}
6376static inline VALUE
6377rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str)
6378{
6379 const void *src;
6380 VALUE imemo;
6381 rb_imemo_tmpbuf_t *tmpbuf;
6382 void *dst;
6383 size_t len;
6384 rb_string_value(&(str));
6385 imemo = rb_imemo_tmpbuf_auto_free_pointer();
6386 tmpbuf = (rb_imemo_tmpbuf_t *)imemo;
6387 len = RSTRING_LEN(str);
6388 src = RSTRING_PTR(str);
6389 dst = ruby_xmalloc(len);
6390 ruby_nonempty_memcpy(dst, src, len);
6391 tmpbuf->ptr = dst;
6392 return imemo;
6393}
6394static inline void
6395MEMO_V1_SET(struct MEMO *m, VALUE v)
6396{
6397 rb_obj_write((VALUE)(m), __extension__({
6398 ;
6399 ; __typeof__((VALUE *)(&m->v1)) unaligned_member_access_result = ((VALUE *)(&m->v1));
6400 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.1.3/internal/imemo.h", 234);
6401}
6402static inline void
6403MEMO_V2_SET(struct MEMO *m, VALUE v)
6404{
6405 rb_obj_write((VALUE)(m), __extension__({
6406 ;
6407 ; __typeof__((VALUE *)(&m->v2)) unaligned_member_access_result = ((VALUE *)(&m->v2));
6408 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.1.3/internal/imemo.h", 240);
6409}
6410typedef enum {
6411 METHOD_VISI_UNDEF = 0x00,
6412 METHOD_VISI_PUBLIC = 0x01,
6413 METHOD_VISI_PRIVATE = 0x02,
6414 METHOD_VISI_PROTECTED = 0x03,
6415 METHOD_VISI_MASK = 0x03
6416} rb_method_visibility_t;
6417typedef struct rb_scope_visi_struct {
6418 rb_method_visibility_t method_visi : 3;
6419 unsigned int module_func : 1;
6420} rb_scope_visibility_t;
6421typedef struct rb_cref_struct {
6422 VALUE flags;
6423 VALUE refinements;
6424 VALUE klass_or_self;
6425 struct rb_cref_struct * next;
6426 const rb_scope_visibility_t scope_visi;
6427} rb_cref_t;
6428typedef struct rb_method_entry_struct {
6429 VALUE flags;
6430 VALUE defined_class;
6431 struct rb_method_definition_struct * const def;
6432 ID called_id;
6433 VALUE owner;
6434} rb_method_entry_t;
6435typedef struct rb_callable_method_entry_struct {
6436 VALUE flags;
6437 const VALUE defined_class;
6438 struct rb_method_definition_struct * const def;
6439 ID called_id;
6440 const VALUE owner;
6441} rb_callable_method_entry_t;
6442static inline void
6443METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
6444{
6445 ((void)0);
6446 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) | (visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0));
6447}
6448static inline void
6449METHOD_ENTRY_BASIC_SET(rb_method_entry_t *me, unsigned int basic)
6450{
6451 ((void)0);
6452 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER6) )) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2));
6453}
6454static inline void
6455METHOD_ENTRY_FLAGS_SET(rb_method_entry_t *me, rb_method_visibility_t visi, unsigned int basic)
6456{
6457 ((void)0);
6458 ((void)0);
6459 me->flags =
6460 (me->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6461 ((visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2)));
6462}
6463static inline void
6464METHOD_ENTRY_FLAGS_COPY(rb_method_entry_t *dst, const rb_method_entry_t *src)
6465{
6466 dst->flags =
6467 (dst->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6468 (src->flags & (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)));
6469}
6470typedef enum {
6471 VM_METHOD_TYPE_ISEQ,
6472 VM_METHOD_TYPE_CFUNC,
6473 VM_METHOD_TYPE_ATTRSET,
6474 VM_METHOD_TYPE_IVAR,
6475 VM_METHOD_TYPE_BMETHOD,
6476 VM_METHOD_TYPE_ZSUPER,
6477 VM_METHOD_TYPE_ALIAS,
6478 VM_METHOD_TYPE_UNDEF,
6479 VM_METHOD_TYPE_NOTIMPLEMENTED,
6480 VM_METHOD_TYPE_OPTIMIZED,
6481 VM_METHOD_TYPE_MISSING,
6482 VM_METHOD_TYPE_REFINED,
6483
6484} rb_method_type_t;
6485__extension__ _Static_assert(VM_METHOD_TYPE_REFINED <= (1<<4), "VM_METHOD_TYPE_MINIMUM_BITS" ": " "VM_METHOD_TYPE_REFINED <= (1<<VM_METHOD_TYPE_MINIMUM_BITS)");
6486typedef struct rb_iseq_struct rb_iseq_t;
6487typedef struct rb_method_iseq_struct {
6488 const rb_iseq_t * iseqptr;
6489 rb_cref_t * cref;
6490} rb_method_iseq_t;
6491typedef struct rb_method_cfunc_struct {
6492 VALUE (*func)();
6493 VALUE (*invoker)(VALUE recv, int argc, const VALUE *argv, VALUE (*func)());
6494 int argc;
6495} rb_method_cfunc_t;
6496typedef struct rb_method_attr_struct {
6497 ID id;
6498 VALUE location;
6499} rb_method_attr_t;
6500typedef struct rb_method_alias_struct {
6501 struct rb_method_entry_struct * original_me;
6502} rb_method_alias_t;
6503typedef struct rb_method_refined_struct {
6504 struct rb_method_entry_struct * orig_me;
6505 VALUE owner;
6506} rb_method_refined_t;
6507typedef struct rb_method_bmethod_struct {
6508 VALUE proc;
6509 struct rb_hook_list_struct *hooks;
6510 VALUE defined_ractor;
6511} rb_method_bmethod_t;
6512enum method_optimized_type {
6513 OPTIMIZED_METHOD_TYPE_SEND,
6514 OPTIMIZED_METHOD_TYPE_CALL,
6515 OPTIMIZED_METHOD_TYPE_BLOCK_CALL,
6516 OPTIMIZED_METHOD_TYPE_STRUCT_AREF,
6517 OPTIMIZED_METHOD_TYPE_STRUCT_ASET,
6518 OPTIMIZED_METHOD_TYPE__MAX
6519};
6520typedef struct rb_method_optimized {
6521 enum method_optimized_type type;
6522 unsigned int index;
6523} rb_method_optimized_t;
6524struct rb_method_definition_struct {
6525 rb_method_type_t type : 4;
6526 unsigned int iseq_overload: 1;
6527 int alias_count : 27;
6528 int complemented_count : 28;
6529 unsigned int no_redef_warning: 1;
6530 union {
6531 rb_method_iseq_t iseq;
6532 rb_method_cfunc_t cfunc;
6533 rb_method_attr_t attr;
6534 rb_method_alias_t alias;
6535 rb_method_refined_t refined;
6536 rb_method_bmethod_t bmethod;
6537 rb_method_optimized_t optimized;
6538 } body;
6539 ID original_id;
6540 uintptr_t method_serial;
6541};
6542struct rb_id_table;
6543typedef struct rb_method_definition_struct rb_method_definition_t;
6544__extension__ _Static_assert(__builtin_offsetof (rb_method_definition_t, body)==8, "sizeof_method_def" ": " "offsetof(rb_method_definition_t, body)==8");
6545void rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi);
6546void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(), int argc, rb_method_visibility_t visi);
6547void rb_add_method_iseq(VALUE klass, ID mid, const rb_iseq_t *iseq, rb_cref_t *cref, rb_method_visibility_t visi);
6548void rb_add_method_optimized(VALUE klass, ID mid, enum method_optimized_type, unsigned int index, rb_method_visibility_t visi);
6549void rb_add_refined_method_entry(VALUE refined_class, ID mid);
6550rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex);
6551rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def);
6552const rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
6553const rb_method_entry_t *rb_method_entry(VALUE klass, ID id);
6554const rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6555const rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6556const rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
6557
6558
6559const rb_method_entry_t *rb_resolve_me_location(const rb_method_entry_t *, VALUE[5]);
6560
6561
6562const rb_callable_method_entry_t *rb_callable_method_entry(VALUE klass, ID id);
6563const rb_callable_method_entry_t *rb_callable_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6564const rb_callable_method_entry_t *rb_callable_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6565int rb_method_entry_arity(const rb_method_entry_t *me);
6566int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2);
6567st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
6568VALUE rb_method_entry_location(const rb_method_entry_t *me);
6569void rb_free_method_entry(const rb_method_entry_t *me);
6570const rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me);
6571const rb_callable_method_entry_t *rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID called_id, VALUE defined_class);
6572void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src);
6573void rb_method_table_insert(VALUE klass, struct rb_id_table *table, ID method_id, const rb_method_entry_t *me);
6574void rb_scope_visibility_set(rb_method_visibility_t);
6575VALUE rb_unnamed_parameters(int arity);
6576void rb_clear_method_cache(VALUE klass_or_module, ID mid);
6577void rb_clear_method_cache_all(void);
6578enum node_type {
6579 NODE_SCOPE,
6580 NODE_BLOCK,
6581 NODE_IF,
6582 NODE_UNLESS,
6583 NODE_CASE,
6584 NODE_CASE2,
6585 NODE_CASE3,
6586 NODE_WHEN,
6587 NODE_IN,
6588 NODE_WHILE,
6589 NODE_UNTIL,
6590 NODE_ITER,
6591 NODE_FOR,
6592 NODE_FOR_MASGN,
6593 NODE_BREAK,
6594 NODE_NEXT,
6595 NODE_REDO,
6596 NODE_RETRY,
6597 NODE_BEGIN,
6598 NODE_RESCUE,
6599 NODE_RESBODY,
6600 NODE_ENSURE,
6601 NODE_AND,
6602 NODE_OR,
6603 NODE_MASGN,
6604 NODE_LASGN,
6605 NODE_DASGN,
6606 NODE_GASGN,
6607 NODE_IASGN,
6608 NODE_CDECL,
6609 NODE_CVASGN,
6610 NODE_OP_ASGN1,
6611 NODE_OP_ASGN2,
6612 NODE_OP_ASGN_AND,
6613 NODE_OP_ASGN_OR,
6614 NODE_OP_CDECL,
6615 NODE_CALL,
6616 NODE_OPCALL,
6617 NODE_FCALL,
6618 NODE_VCALL,
6619 NODE_QCALL,
6620 NODE_SUPER,
6621 NODE_ZSUPER,
6622 NODE_LIST,
6623 NODE_ZLIST,
6624 NODE_VALUES,
6625 NODE_HASH,
6626 NODE_RETURN,
6627 NODE_YIELD,
6628 NODE_LVAR,
6629 NODE_DVAR,
6630 NODE_GVAR,
6631 NODE_IVAR,
6632 NODE_CONST,
6633 NODE_CVAR,
6634 NODE_NTH_REF,
6635 NODE_BACK_REF,
6636 NODE_MATCH,
6637 NODE_MATCH2,
6638 NODE_MATCH3,
6639 NODE_LIT,
6640 NODE_STR,
6641 NODE_DSTR,
6642 NODE_XSTR,
6643 NODE_DXSTR,
6644 NODE_EVSTR,
6645 NODE_DREGX,
6646 NODE_ONCE,
6647 NODE_ARGS,
6648 NODE_ARGS_AUX,
6649 NODE_OPT_ARG,
6650 NODE_KW_ARG,
6651 NODE_POSTARG,
6652 NODE_ARGSCAT,
6653 NODE_ARGSPUSH,
6654 NODE_SPLAT,
6655 NODE_BLOCK_PASS,
6656 NODE_DEFN,
6657 NODE_DEFS,
6658 NODE_ALIAS,
6659 NODE_VALIAS,
6660 NODE_UNDEF,
6661 NODE_CLASS,
6662 NODE_MODULE,
6663 NODE_SCLASS,
6664 NODE_COLON2,
6665 NODE_COLON3,
6666 NODE_DOT2,
6667 NODE_DOT3,
6668 NODE_FLIP2,
6669 NODE_FLIP3,
6670 NODE_SELF,
6671 NODE_NIL,
6672 NODE_TRUE,
6673 NODE_FALSE,
6674 NODE_ERRINFO,
6675 NODE_DEFINED,
6676 NODE_POSTEXE,
6677 NODE_DSYM,
6678 NODE_ATTRASGN,
6679 NODE_LAMBDA,
6680 NODE_ARYPTN,
6681 NODE_HSHPTN,
6682 NODE_FNDPTN,
6683 NODE_LAST
6684};
6685typedef struct rb_code_position_struct {
6686 int lineno;
6687 int column;
6688} rb_code_position_t;
6689typedef struct rb_code_location_struct {
6690 rb_code_position_t beg_pos;
6691 rb_code_position_t end_pos;
6692} rb_code_location_t;
6693static inline rb_code_location_t
6694code_loc_gen(const rb_code_location_t *loc1, const rb_code_location_t *loc2)
6695{
6696 rb_code_location_t loc;
6697 loc.beg_pos = loc1->beg_pos;
6698 loc.end_pos = loc2->end_pos;
6699 return loc;
6700}
6701typedef struct rb_ast_id_table {
6702 int size;
6703 ID ids[];
6704} rb_ast_id_table_t;
6705typedef struct RNode {
6706 VALUE flags;
6707 union {
6708 struct RNode *node;
6709 ID id;
6710 VALUE value;
6711 rb_ast_id_table_t *tbl;
6712 } u1;
6713 union {
6714 struct RNode *node;
6715 ID id;
6716 long argc;
6717 VALUE value;
6718 } u2;
6719 union {
6720 struct RNode *node;
6721 ID id;
6722 long state;
6723 struct rb_args_info *args;
6724 struct rb_ary_pattern_info *apinfo;
6725 struct rb_fnd_pattern_info *fpinfo;
6726 VALUE value;
6727 } u3;
6728 rb_code_location_t nd_loc;
6729 int node_id;
6730} NODE;
6731VALUE rb_node_case_when_optimizable_literal(const NODE *const node);
6732
6733
6734typedef struct node_buffer_struct node_buffer_t;
6735typedef struct rb_ast_body_struct {
6736 const NODE *root;
6737 VALUE compile_option;
6738 VALUE script_lines;
6739} rb_ast_body_t;
6740typedef struct rb_ast_struct {
6741 VALUE flags;
6742 node_buffer_t *node_buffer;
6743 rb_ast_body_t body;
6744} rb_ast_t;
6745rb_ast_t *rb_ast_new(void);
6746void rb_ast_mark(rb_ast_t*);
6747void rb_ast_update_references(rb_ast_t*);
6748void rb_ast_dispose(rb_ast_t*);
6749void rb_ast_free(rb_ast_t*);
6750size_t rb_ast_memsize(const rb_ast_t*);
6751void rb_ast_add_mark_object(rb_ast_t*, VALUE);
6752NODE *rb_ast_newnode(rb_ast_t*, enum node_type type);
6753void rb_ast_delete_node(rb_ast_t*, NODE *n);
6754rb_ast_id_table_t *rb_ast_new_local_table(rb_ast_t*, int);
6755rb_ast_id_table_t *rb_ast_resize_latest_local_table(rb_ast_t*, int);
6756VALUE rb_parser_new(void);
6757VALUE rb_parser_end_seen_p(VALUE);
6758VALUE rb_parser_encoding(VALUE);
6759VALUE rb_parser_set_yydebug(VALUE, VALUE);
6760VALUE rb_parser_dump_tree(const NODE *node, int comment);
6761void rb_parser_set_options(VALUE, int, int, int, int);
6762rb_ast_t *rb_parser_compile_string(VALUE, const char*, VALUE, int);
6763rb_ast_t *rb_parser_compile_string_path(VALUE vparser, VALUE fname, VALUE src, int line);
6764rb_ast_t *rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE input, int line);
6765rb_ast_t *rb_parser_compile_generic(VALUE vparser, VALUE (*lex_gets)(VALUE, int), VALUE fname, VALUE input, int line);
6766void rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2);
6767const char *ruby_node_name(int node);
6768const struct kwtable *rb_reserved_word(const char *, unsigned int);
6769struct rb_args_info {
6770 NODE *pre_init;
6771 NODE *post_init;
6772 int pre_args_num;
6773 int post_args_num;
6774 ID first_post_arg;
6775 ID rest_arg;
6776 ID block_arg;
6777 NODE *kw_args;
6778 NODE *kw_rest_arg;
6779 NODE *opt_args;
6780 unsigned int no_kwarg: 1;
6781 unsigned int ruby2_keywords: 1;
6782 VALUE imemo;
6783};
6784struct rb_ary_pattern_info {
6785 NODE *pre_args;
6786 NODE *rest_arg;
6787 NODE *post_args;
6788};
6789struct rb_fnd_pattern_info {
6790 NODE *pre_rest_arg;
6791 NODE *args;
6792 NODE *post_rest_arg;
6793};
6794struct parser_params;
6795void *rb_parser_malloc(struct parser_params *, size_t);
6796void *rb_parser_realloc(struct parser_params *, void *, size_t);
6797void *rb_parser_calloc(struct parser_params *, size_t, size_t);
6798void rb_parser_free(struct parser_params *, void *);
6799__attribute__((__format__(__printf__, (2), (3)))) void rb_parser_printf(struct parser_params *parser, const char *fmt, ...);
6800void rb_ast_node_type_change(NODE *n, enum node_type type);
6801
6802
6803static inline VALUE
6804rb_node_set_type(NODE *n, enum node_type t)
6805{
6806 return (n)->flags=(((n)->flags&~(((VALUE)0x7f)<<8))|((((unsigned long)(t))<<8)&(((VALUE)0x7f)<<8)));
6807}
6808static inline _Bool
6809nd_type_p(const NODE *n, enum node_type t)
6810{
6811 return (enum node_type)((int) (((n)->flags & (((VALUE)0x7f)<<8))>>8)) == t;
6812}
6813typedef unsigned int rb_atomic_t;
6814__attribute__((__artificial__))
6815
6816__attribute__((__nonnull__ (1)))
6817static inline rb_atomic_t
6818rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6819{
6820 return __atomic_fetch_add(ptr, val, 5);
6821}
6822__attribute__((__artificial__))
6823
6824__attribute__((__nonnull__ (1)))
6825static inline void
6826rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6827{
6828 __atomic_add_fetch(ptr, val, 5);
6829}
6830__attribute__((__artificial__))
6831
6832__attribute__((__nonnull__ (1)))
6833static inline void
6834rbimpl_atomic_size_add(volatile size_t *ptr, size_t val)
6835{
6836 __atomic_add_fetch(ptr, val, 5);
6837}
6838__attribute__((__artificial__))
6839
6840__attribute__((__nonnull__ (1)))
6841static inline void
6842rbimpl_atomic_inc(volatile rb_atomic_t *ptr)
6843{
6844 rbimpl_atomic_add(ptr, 1);
6845}
6846__attribute__((__artificial__))
6847
6848__attribute__((__nonnull__ (1)))
6849static inline void
6850rbimpl_atomic_size_inc(volatile size_t *ptr)
6851{
6852 rbimpl_atomic_size_add(ptr, 1);
6853}
6854__attribute__((__artificial__))
6855
6856__attribute__((__nonnull__ (1)))
6857static inline rb_atomic_t
6858rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6859{
6860 return __atomic_fetch_sub(ptr, val, 5);
6861}
6862__attribute__((__artificial__))
6863
6864__attribute__((__nonnull__ (1)))
6865static inline void
6866rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6867{
6868 __atomic_sub_fetch(ptr, val, 5);
6869}
6870__attribute__((__artificial__))
6871
6872__attribute__((__nonnull__ (1)))
6873static inline void
6874rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val)
6875{
6876 __atomic_sub_fetch(ptr, val, 5);
6877}
6878__attribute__((__artificial__))
6879
6880__attribute__((__nonnull__ (1)))
6881static inline void
6882rbimpl_atomic_dec(volatile rb_atomic_t *ptr)
6883{
6884 rbimpl_atomic_sub(ptr, 1);
6885}
6886__attribute__((__artificial__))
6887
6888__attribute__((__nonnull__ (1)))
6889static inline void
6890rbimpl_atomic_size_dec(volatile size_t *ptr)
6891{
6892 rbimpl_atomic_size_sub(ptr, 1);
6893}
6894__attribute__((__artificial__))
6895
6896__attribute__((__nonnull__ (1)))
6897static inline void
6898rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val)
6899{
6900 __atomic_or_fetch(ptr, val, 5);
6901}
6902__attribute__((__artificial__))
6903
6904__attribute__((__nonnull__ (1)))
6905static inline rb_atomic_t
6906rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val)
6907{
6908 return __atomic_exchange_n(ptr, val, 5);
6909}
6910__attribute__((__artificial__))
6911
6912__attribute__((__nonnull__ (1)))
6913static inline size_t
6914rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val)
6915{
6916 return __atomic_exchange_n(ptr, val, 5);
6917}
6918__attribute__((__artificial__))
6919
6920__attribute__((__nonnull__ (1)))
6921static inline void *
6922rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val)
6923{
6924 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
6925 const size_t sval = ((size_t)val);
6926 volatile size_t *const sptr = ((volatile size_t *)ptr);
6927 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
6928 return ((void *)sret);
6929}
6930__attribute__((__artificial__))
6931
6932__attribute__((__nonnull__ (1)))
6933static inline VALUE
6934rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val)
6935{
6936 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
6937 const size_t sval = ((size_t)val);
6938 volatile size_t *const sptr = ((volatile size_t *)ptr);
6939 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
6940 return ((VALUE)sret);
6941}
6942__attribute__((__artificial__))
6943
6944__attribute__((__nonnull__ (1)))
6945static inline void
6946rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val)
6947{
6948 __atomic_store_n(ptr, val, 5);
6949}
6950__attribute__((__artificial__))
6951
6952__attribute__((__nonnull__ (1)))
6953static inline rb_atomic_t
6954rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval)
6955{
6956 __atomic_compare_exchange_n(
6957 ptr, &oldval, newval, 0, 5, 5);
6958 return oldval;
6959}
6960__attribute__((__artificial__))
6961
6962__attribute__((__nonnull__ (1)))
6963static inline size_t
6964rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval)
6965{
6966 __atomic_compare_exchange_n(
6967 ptr, &oldval, newval, 0, 5, 5);
6968 return oldval;
6969}
6970__attribute__((__artificial__))
6971
6972__attribute__((__nonnull__ (1)))
6973static inline void *
6974rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval)
6975{
6976 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
6977 const size_t snew = ((size_t)newval);
6978 const size_t sold = ((size_t)oldval);
6979 volatile size_t *const sptr = ((volatile size_t *)ptr);
6980 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
6981 return ((void *)sret);
6982}
6983__attribute__((__artificial__))
6984
6985__attribute__((__nonnull__ (1)))
6986static inline VALUE
6987rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval)
6988{
6989 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
6990 const size_t snew = ((size_t)newval);
6991 const size_t sold = ((size_t)oldval);
6992 volatile size_t *const sptr = ((volatile size_t *)ptr);
6993 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
6994 return ((VALUE)sret);
6995}
6996typedef struct rb_darray_meta {
6997 int32_t size;
6998 int32_t capa;
6999} rb_darray_meta_t;
7000static inline int32_t
7001rb_darray_size(const void *ary)
7002{
7003 const rb_darray_meta_t *meta = ary;
7004 return meta ? meta->size : 0;
7005}
7006static inline int32_t
7007rb_darray_capa(const void *ary)
7008{
7009 const rb_darray_meta_t *meta = ary;
7010 return meta ? meta->capa : 0;
7011}
7012static inline void
7013rb_darray_free(void *ary)
7014{
7015 free(ary);
7016}
7017static inline size_t
7018rb_darray_buffer_size(int32_t capacity, size_t header_size, size_t element_size)
7019{
7020 if (capacity == 0) return 0;
7021 return header_size + (size_t)capacity * element_size;
7022}
7023static inline int
7024rb_darray_ensure_space(void *ptr_to_ary, size_t header_size, size_t element_size)
7025{
7026 rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
7027 rb_darray_meta_t *meta = *ptr_to_ptr_to_meta;
7028 int32_t current_capa = rb_darray_capa(meta);
7029 if (rb_darray_size(meta) < current_capa) return 1;
7030 int32_t new_capa;
7031 if (current_capa == 0) {
7032 new_capa = 1;
7033 }
7034 else {
7035 int64_t doubled = 2 * (int64_t)current_capa;
7036 new_capa = (int32_t)doubled;
7037 if (new_capa != doubled) return 0;
7038 }
7039 size_t current_buffer_size = rb_darray_buffer_size(current_capa, header_size, element_size);
7040 size_t new_buffer_size = rb_darray_buffer_size(new_capa, header_size, element_size);
7041 if (new_buffer_size <= current_buffer_size) return 0;
7042 rb_darray_meta_t *doubled_ary = realloc(meta, new_buffer_size);
7043 if (!doubled_ary) return 0;
7044 if (meta == ((void *)0)) {
7045 doubled_ary->size = 0;
7046 }
7047 doubled_ary->capa = new_capa;
7048 ruby_nonempty_memcpy(ptr_to_ary, &doubled_ary, sizeof(doubled_ary));
7049 return 1;
7050}
7051static inline int
7052rb_darray_make_impl(void *ptr_to_ary, int32_t array_size, size_t header_size, size_t element_size)
7053{
7054 rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
7055 if (array_size < 0) return 0;
7056 if (array_size == 0) {
7057 *ptr_to_ptr_to_meta = ((void *)0);
7058 return 1;
7059 }
7060 size_t buffer_size = rb_darray_buffer_size(array_size, header_size, element_size);
7061 rb_darray_meta_t *meta = calloc(buffer_size, 1);
7062 if (!meta) return 0;
7063 meta->size = array_size;
7064 meta->capa = array_size;
7065 ruby_nonempty_memcpy(ptr_to_ary, &meta, sizeof(meta));
7066 return 1;
7067}
7068struct sched_param {
7069 int sched_priority;
7070};
7071int sched_setparam(
7072 pid_t __pid,
7073 const struct sched_param *__param
7074);
7075int sched_getparam(
7076 pid_t __pid,
7077 struct sched_param *__param
7078);
7079int sched_setscheduler(
7080 pid_t __pid,
7081 int __policy,
7082 const struct sched_param *__param
7083);
7084int sched_getscheduler(
7085 pid_t __pid
7086);
7087int sched_get_priority_max(
7088 int __policy
7089);
7090int sched_get_priority_min(
7091 int __policy
7092);
7093int sched_rr_get_interval(
7094 pid_t __pid,
7095 struct timespec *__interval
7096);
7097int sched_yield( void );
7098int sched_getcpu(void);
7099int sched_getaffinity (pid_t, size_t, cpu_set_t *);
7100int sched_get_thread_affinity (void *, size_t, cpu_set_t *);
7101int sched_setaffinity (pid_t, size_t, const cpu_set_t *);
7102int sched_set_thread_affinity (void *, size_t, const cpu_set_t *);
7103int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
7104int pthread_attr_destroy (pthread_attr_t *);
7105int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
7106int pthread_attr_getguardsize (const pthread_attr_t *, size_t *);
7107int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
7108int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
7109int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
7110int pthread_attr_getscope (const pthread_attr_t *, int *);
7111int pthread_attr_init (pthread_attr_t *);
7112int pthread_attr_setdetachstate (pthread_attr_t *, int);
7113int pthread_attr_setguardsize (pthread_attr_t *, size_t);
7114int pthread_attr_setinheritsched (pthread_attr_t *, int);
7115int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
7116int pthread_attr_setschedpolicy (pthread_attr_t *, int);
7117int pthread_attr_setscope (pthread_attr_t *, int);
7118int pthread_attr_getstack (const pthread_attr_t *, void **, size_t *);
7119int pthread_attr_setstack (pthread_attr_t *, void *, size_t);
7120int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
7121int pthread_attr_setstacksize (pthread_attr_t *, size_t);
7122int pthread_cancel (pthread_t);
7123typedef void (*__cleanup_routine_type) (void *);
7124typedef struct _pthread_cleanup_handler
7125{
7126 __cleanup_routine_type function;
7127 void *arg;
7128 struct _pthread_cleanup_handler *next;
7129} __pthread_cleanup_handler;
7130void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
7131void _pthread_cleanup_pop (int execute);
7132int pthread_cond_broadcast (pthread_cond_t *);
7133int pthread_cond_destroy (pthread_cond_t *);
7134int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
7135int pthread_cond_signal (pthread_cond_t *);
7136int pthread_cond_clockwait (pthread_cond_t *, pthread_mutex_t *,
7137 clockid_t, const struct timespec *);
7138int pthread_cond_timedwait (pthread_cond_t *,
7139 pthread_mutex_t *, const struct timespec *);
7140int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
7141int pthread_condattr_destroy (pthread_condattr_t *);
7142int pthread_condattr_getclock (const pthread_condattr_t *, clockid_t *);
7143int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
7144int pthread_condattr_init (pthread_condattr_t *);
7145int pthread_condattr_setclock (pthread_condattr_t *, clockid_t);
7146int pthread_condattr_setpshared (pthread_condattr_t *, int);
7147int pthread_barrierattr_init (pthread_barrierattr_t *);
7148int pthread_barrierattr_setpshared (pthread_barrierattr_t *, int);
7149int pthread_barrierattr_getpshared (const pthread_barrierattr_t *, int *);
7150int pthread_barrierattr_destroy (pthread_barrierattr_t *);
7151int pthread_barrier_init (pthread_barrier_t *,
7152 const pthread_barrierattr_t *, unsigned);
7153int pthread_barrier_destroy (pthread_barrier_t *);
7154int pthread_barrier_wait (pthread_barrier_t *);
7155int pthread_create (pthread_t *, const pthread_attr_t *,
7156 void *(*)(void *), void *);
7157int pthread_detach (pthread_t);
7158int pthread_equal (pthread_t, pthread_t);
7159void pthread_exit (void *) __attribute__ ((__noreturn__));
7160int pthread_getcpuclockid (pthread_t, clockid_t *);
7161int pthread_getschedparam (pthread_t, int *, struct sched_param *);
7162void *pthread_getspecific (pthread_key_t);
7163int pthread_join (pthread_t, void **);
7164int pthread_key_create (pthread_key_t *, void (*)(void *));
7165int pthread_key_delete (pthread_key_t);
7166int pthread_mutex_destroy (pthread_mutex_t *);
7167int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
7168int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
7169int pthread_mutex_lock (pthread_mutex_t *);
7170int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
7171int pthread_mutex_clocklock (pthread_mutex_t *, clockid_t,
7172 const struct timespec *);
7173int pthread_mutex_timedlock (pthread_mutex_t *, const struct timespec *);
7174int pthread_mutex_trylock (pthread_mutex_t *);
7175int pthread_mutex_unlock (pthread_mutex_t *);
7176int pthread_mutexattr_destroy (pthread_mutexattr_t *);
7177int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
7178int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
7179int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
7180int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
7181int pthread_mutexattr_init (pthread_mutexattr_t *);
7182int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
7183int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
7184int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
7185int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
7186int pthread_spin_destroy (pthread_spinlock_t *);
7187int pthread_spin_init (pthread_spinlock_t *, int);
7188int pthread_spin_lock (pthread_spinlock_t *);
7189int pthread_spin_trylock (pthread_spinlock_t *);
7190int pthread_spin_unlock (pthread_spinlock_t *);
7191int pthread_rwlock_destroy (pthread_rwlock_t *);
7192int pthread_rwlock_init (pthread_rwlock_t *, const pthread_rwlockattr_t *);
7193int pthread_rwlock_rdlock (pthread_rwlock_t *);
7194int pthread_rwlock_clockrdlock (pthread_rwlock_t *, clockid_t,
7195 const struct timespec *);
7196int pthread_rwlock_timedrdlock (pthread_rwlock_t *, const struct timespec *);
7197int pthread_rwlock_tryrdlock (pthread_rwlock_t *);
7198int pthread_rwlock_wrlock (pthread_rwlock_t *);
7199int pthread_rwlock_clockwrlock (pthread_rwlock_t *, clockid_t,
7200 const struct timespec *);
7201int pthread_rwlock_timedwrlock (pthread_rwlock_t *, const struct timespec *);
7202int pthread_rwlock_trywrlock (pthread_rwlock_t *);
7203int pthread_rwlock_unlock (pthread_rwlock_t *);
7204int pthread_rwlockattr_init (pthread_rwlockattr_t *);
7205int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *, int *);
7206int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *, int);
7207int pthread_rwlockattr_destroy (pthread_rwlockattr_t *);
7208int pthread_once (pthread_once_t *, void (*)(void));
7209int pthread_getconcurrency (void);
7210int pthread_setconcurrency (int);
7211pthread_t pthread_self (void);
7212int pthread_setcancelstate (int, int *);
7213int pthread_setcanceltype (int, int *);
7214int pthread_setschedparam (pthread_t, int, const struct sched_param *);
7215int pthread_setschedprio (pthread_t, int);
7216int pthread_setspecific (pthread_key_t, const void *);
7217void pthread_testcancel (void);
7218int pthread_getaffinity_np (pthread_t, size_t, cpu_set_t *);
7219int pthread_getattr_np (pthread_t, pthread_attr_t *);
7220int pthread_getname_np (pthread_t, char *, size_t) __attribute__((__nonnull__(2)));
7221int pthread_setaffinity_np (pthread_t, size_t, const cpu_set_t *);
7222int pthread_setname_np (pthread_t, const char *) __attribute__((__nonnull__(2)));
7223int pthread_sigqueue (pthread_t *, int, const union sigval);
7224int pthread_timedjoin_np (pthread_t, void **, const struct timespec *);
7225int pthread_tryjoin_np (pthread_t, void **);
7226int pthread_yield (void);
7227int pthread_suspend (pthread_t);
7228int pthread_continue (pthread_t);
7229typedef pthread_t rb_nativethread_id_t;
7230typedef pthread_mutex_t rb_nativethread_lock_t;
7231typedef pthread_cond_t rb_nativethread_cond_t;
7232
7233
7234rb_nativethread_id_t rb_nativethread_self(void);
7235void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
7236void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
7237void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
7238void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
7239void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
7240int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
7241void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
7242void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
7243void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
7244void rb_native_cond_signal(rb_nativethread_cond_t *cond);
7245void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
7246void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
7247void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
7248void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
7249void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
7250
7251
7252typedef struct native_thread_data_struct {
7253 union {
7254 struct list_node ubf;
7255 struct list_node gvl;
7256 } node;
7257 struct
7258 {
7259 rb_nativethread_cond_t intr;
7260 rb_nativethread_cond_t gvlq;
7261 } cond;
7262} native_thread_data_t;
7263typedef struct rb_global_vm_lock_struct {
7264 const struct rb_thread_struct *owner;
7265 rb_nativethread_lock_t lock;
7266 struct list_head waitq;
7267 const struct rb_thread_struct *timer;
7268 int timer_err;
7269 rb_nativethread_cond_t switch_cond;
7270 rb_nativethread_cond_t switch_wait_cond;
7271 int need_yield;
7272 int wait_yield;
7273} rb_global_vm_lock_t;
7274
7275
7276 extern _Thread_local struct rb_execution_context_struct *ruby_current_ec;
7277
7278
7279void *rb_allocate_sigaltstack(void);
7280void *rb_register_sigaltstack(void *);
7281void rb_vm_encoded_insn_data_table_init(void);
7282typedef unsigned long rb_num_t;
7283typedef signed long rb_snum_t;
7284enum ruby_tag_type {
7285 RUBY_TAG_NONE = 0x0,
7286 RUBY_TAG_RETURN = 0x1,
7287 RUBY_TAG_BREAK = 0x2,
7288 RUBY_TAG_NEXT = 0x3,
7289 RUBY_TAG_RETRY = 0x4,
7290 RUBY_TAG_REDO = 0x5,
7291 RUBY_TAG_RAISE = 0x6,
7292 RUBY_TAG_THROW = 0x7,
7293 RUBY_TAG_FATAL = 0x8,
7294 RUBY_TAG_MASK = 0xf
7295};
7296enum ruby_vm_throw_flags {
7297 VM_THROW_NO_ESCAPE_FLAG = 0x8000,
7298 VM_THROW_STATE_MASK = 0xff
7299};
7300struct rb_thread_struct;
7301struct rb_control_frame_struct;
7302typedef struct rb_compile_option_struct rb_compile_option_t;
7303union ic_serial_entry {
7304 rb_serial_t raw;
7305 VALUE data[2];
7306};
7307struct iseq_inline_constant_cache_entry {
7308 VALUE flags;
7309 VALUE value;
7310 union ic_serial_entry ic_serial;
7311 const rb_cref_t *ic_cref;
7312};
7313__extension__ _Static_assert((__builtin_offsetof (struct iseq_inline_constant_cache_entry, ic_cref) + sizeof(const rb_cref_t *)) <= sizeof(struct RObject), "sizeof_iseq_inline_constant_cache_entry" ": " "(offsetof(struct iseq_inline_constant_cache_entry, ic_cref) + sizeof(const rb_cref_t *)) <= sizeof(struct RObject)");
7314struct iseq_inline_constant_cache {
7315 struct iseq_inline_constant_cache_entry *entry;
7316 unsigned get_insn_idx;
7317};
7318struct iseq_inline_iv_cache_entry {
7319 struct rb_iv_index_tbl_entry *entry;
7320};
7321struct iseq_inline_cvar_cache_entry {
7322 struct rb_cvar_class_tbl_entry *entry;
7323};
7324union iseq_inline_storage_entry {
7325 struct {
7326 struct rb_thread_struct *running_thread;
7327 VALUE value;
7328 } once;
7329 struct iseq_inline_constant_cache ic_cache;
7330 struct iseq_inline_iv_cache_entry iv_cache;
7331};
7332struct rb_calling_info {
7333 const struct rb_callinfo *ci;
7334 const struct rb_callcache *cc;
7335 VALUE block_handler;
7336 VALUE recv;
7337 int argc;
7338 int kw_splat;
7339};
7340struct rb_execution_context_struct;
7341typedef struct rb_iseq_location_struct {
7342 VALUE pathobj;
7343 VALUE base_label;
7344 VALUE label;
7345 VALUE first_lineno;
7346 int node_id;
7347 rb_code_location_t code_location;
7348} rb_iseq_location_t;
7349static inline VALUE
7350pathobj_path(VALUE pathobj)
7351{
7352 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7353 return pathobj;
7354 }
7355 else {
7356 ((void)0);
7357 return RARRAY_AREF(pathobj, 0);
7358 }
7359}
7360static inline VALUE
7361pathobj_realpath(VALUE pathobj)
7362{
7363 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7364 return pathobj;
7365 }
7366 else {
7367 ((void)0);
7368 return RARRAY_AREF(pathobj, 1);
7369 }
7370}
7371struct rb_mjit_unit;
7372typedef struct { rb_darray_meta_t meta; struct yjit_block_version * data[]; } * rb_yjit_block_array_t;
7373typedef struct { rb_darray_meta_t meta; rb_yjit_block_array_t data[]; } * rb_yjit_block_array_array_t;
7374struct rb_iseq_constant_body {
7375 enum iseq_type {
7376 ISEQ_TYPE_TOP,
7377 ISEQ_TYPE_METHOD,
7378 ISEQ_TYPE_BLOCK,
7379 ISEQ_TYPE_CLASS,
7380 ISEQ_TYPE_RESCUE,
7381 ISEQ_TYPE_ENSURE,
7382 ISEQ_TYPE_EVAL,
7383 ISEQ_TYPE_MAIN,
7384 ISEQ_TYPE_PLAIN
7385 } type;
7386 unsigned int iseq_size;
7387 VALUE *iseq_encoded;
7388 struct {
7389 struct {
7390 unsigned int has_lead : 1;
7391 unsigned int has_opt : 1;
7392 unsigned int has_rest : 1;
7393 unsigned int has_post : 1;
7394 unsigned int has_kw : 1;
7395 unsigned int has_kwrest : 1;
7396 unsigned int has_block : 1;
7397 unsigned int ambiguous_param0 : 1;
7398 unsigned int accepts_no_kwarg : 1;
7399 unsigned int ruby2_keywords: 1;
7400 } flags;
7401 unsigned int size;
7402 int lead_num;
7403 int opt_num;
7404 int rest_start;
7405 int post_start;
7406 int post_num;
7407 int block_start;
7408 const VALUE *opt_table;
7409 const struct rb_iseq_param_keyword {
7410 int num;
7411 int required_num;
7412 int bits_start;
7413 int rest_start;
7414 const ID *table;
7415 VALUE *default_values;
7416 } *keyword;
7417 } param;
7418 rb_iseq_location_t location;
7419 struct iseq_insn_info {
7420 const struct iseq_insn_info_entry *body;
7421 unsigned int *positions;
7422 unsigned int size;
7423 struct succ_index_table *succ_index_table;
7424 } insns_info;
7425 const ID *local_table;
7426 struct iseq_catch_table *catch_table;
7427 const struct rb_iseq_struct *parent_iseq;
7428 struct rb_iseq_struct *local_iseq;
7429 union iseq_inline_storage_entry *is_entries;
7430 struct rb_call_data *call_data;
7431 struct {
7432 rb_snum_t flip_count;
7433 VALUE script_lines;
7434 VALUE coverage;
7435 VALUE pc2branchindex;
7436 VALUE *original_iseq;
7437 } variable;
7438 unsigned int local_table_size;
7439 unsigned int is_size;
7440 unsigned int ci_size;
7441 unsigned int stack_max;
7442 char catch_except_p;
7443 _Bool builtin_inline_p;
7444 struct rb_id_table *outer_variables;
7445 const rb_iseq_t *mandatory_only_iseq;
7446 VALUE (*jit_func)(struct rb_execution_context_struct *,
7447 struct rb_control_frame_struct *);
7448 long unsigned total_calls;
7449 struct rb_mjit_unit *jit_unit;
7450 rb_yjit_block_array_array_t yjit_blocks;
7451};
7452struct rb_iseq_struct {
7453 VALUE flags;
7454 VALUE wrapper;
7455 struct rb_iseq_constant_body *body;
7456 union {
7457 struct iseq_compile_data *compile_data;
7458 struct {
7459 VALUE obj;
7460 int index;
7461 } loader;
7462 struct {
7463 struct rb_hook_list_struct *local_hooks;
7464 rb_event_flag_t global_trace_events;
7465 } exec;
7466 } aux;
7467};
7468static inline const rb_iseq_t *
7469rb_iseq_check(const rb_iseq_t *iseq)
7470{
7471 return iseq;
7472}
7473static inline const rb_iseq_t *
7474def_iseq_ptr(rb_method_definition_t *def)
7475{
7476 return rb_iseq_check(def->body.iseq.iseqptr);
7477}
7478enum ruby_special_exceptions {
7479 ruby_error_reenter,
7480 ruby_error_nomemory,
7481 ruby_error_sysstack,
7482 ruby_error_stackfatal,
7483 ruby_error_stream_closed,
7484 ruby_special_error_count
7485};
7486enum ruby_basic_operators {
7487 BOP_PLUS,
7488 BOP_MINUS,
7489 BOP_MULT,
7490 BOP_DIV,
7491 BOP_MOD,
7492 BOP_EQ,
7493 BOP_EQQ,
7494 BOP_LT,
7495 BOP_LE,
7496 BOP_LTLT,
7497 BOP_AREF,
7498 BOP_ASET,
7499 BOP_LENGTH,
7500 BOP_SIZE,
7501 BOP_EMPTY_P,
7502 BOP_NIL_P,
7503 BOP_SUCC,
7504 BOP_GT,
7505 BOP_GE,
7506 BOP_NOT,
7507 BOP_NEQ,
7508 BOP_MATCH,
7509 BOP_FREEZE,
7510 BOP_UMINUS,
7511 BOP_MAX,
7512 BOP_MIN,
7513 BOP_CALL,
7514 BOP_AND,
7515 BOP_OR,
7516 BOP_LAST_
7517};
7518struct rb_vm_struct;
7519typedef void rb_vm_at_exit_func(struct rb_vm_struct*);
7520typedef struct rb_at_exit_list {
7521 rb_vm_at_exit_func *func;
7522 struct rb_at_exit_list *next;
7523} rb_at_exit_list;
7524struct rb_objspace;
7525struct rb_objspace *rb_objspace_alloc(void);
7526void rb_objspace_free(struct rb_objspace *);
7527void rb_objspace_call_finalizer(struct rb_objspace *);
7528typedef struct rb_hook_list_struct {
7529 struct rb_event_hook_struct *hooks;
7530 rb_event_flag_t events;
7531 unsigned int running;
7532 _Bool need_clean;
7533 _Bool is_local;
7534} rb_hook_list_t;
7535typedef const struct rb_builtin_function *RB_BUILTIN;
7536typedef struct rb_vm_struct {
7537 VALUE self;
7538 struct {
7539 struct list_head set;
7540 unsigned int cnt;
7541 unsigned int blocking_cnt;
7542 struct rb_ractor_struct *main_ractor;
7543 struct rb_thread_struct *main_thread;
7544 struct {
7545 rb_nativethread_lock_t lock;
7546 struct rb_ractor_struct *lock_owner;
7547 unsigned int lock_rec;
7548 _Bool barrier_waiting;
7549 unsigned int barrier_cnt;
7550 rb_nativethread_cond_t barrier_cond;
7551 rb_nativethread_cond_t terminate_cond;
7552 _Bool terminate_waiting;
7553 } sync;
7554 } ractor;
7555 void *main_altstack;
7556 rb_serial_t fork_gen;
7557 rb_nativethread_lock_t waitpid_lock;
7558 struct list_head waiting_pids;
7559 struct list_head waiting_grps;
7560 struct list_head waiting_fds;
7561 volatile int ubf_async_safe;
7562 unsigned int running: 1;
7563 unsigned int thread_abort_on_exception: 1;
7564 unsigned int thread_report_on_exception: 1;
7565 unsigned int thread_ignore_deadlock: 1;
7566 VALUE mark_object_ary;
7567 const VALUE special_exceptions[ruby_special_error_count];
7568 VALUE top_self;
7569 VALUE load_path;
7570 VALUE load_path_snapshot;
7571 VALUE load_path_check_cache;
7572 VALUE expanded_load_path;
7573 VALUE loaded_features;
7574 VALUE loaded_features_snapshot;
7575 VALUE loaded_features_realpaths;
7576 struct st_table *loaded_features_index;
7577 struct st_table *loading_table;
7578 struct {
7579 VALUE cmd[65];
7580 } trap_list;
7581 struct st_table *ensure_rollback_table;
7582 struct rb_postponed_job_struct *postponed_job_buffer;
7583 rb_atomic_t postponed_job_index;
7584 int src_encoding_index;
7585 struct list_head workqueue;
7586 rb_nativethread_lock_t workqueue_lock;
7587 VALUE orig_progname, progname;
7588 VALUE coverages, me2counter;
7589 int coverage_mode;
7590 st_table * defined_module_hash;
7591 struct rb_objspace *objspace;
7592 rb_at_exit_list *at_exit;
7593 st_table *frozen_strings;
7594 const struct rb_builtin_function *builtin_function_table;
7595 int builtin_inline_index;
7596 struct rb_id_table *negative_cme_table;
7597 st_table *overloaded_cme_table;
7598 const struct rb_callcache *global_cc_cache_table[1023];
7599 struct {
7600 size_t thread_vm_stack_size;
7601 size_t thread_machine_stack_size;
7602 size_t fiber_vm_stack_size;
7603 size_t fiber_machine_stack_size;
7604 } default_params;
7605 short redefined_flag[BOP_LAST_];
7606} rb_vm_t;
7607struct rb_captured_block {
7608 VALUE self;
7609 const VALUE *ep;
7610 union {
7611 const rb_iseq_t *iseq;
7612 const struct vm_ifunc *ifunc;
7613 VALUE val;
7614 } code;
7615};
7616enum rb_block_handler_type {
7617 block_handler_type_iseq,
7618 block_handler_type_ifunc,
7619 block_handler_type_symbol,
7620 block_handler_type_proc
7621};
7622enum rb_block_type {
7623 block_type_iseq,
7624 block_type_ifunc,
7625 block_type_symbol,
7626 block_type_proc
7627};
7628struct rb_block {
7629 union {
7630 struct rb_captured_block captured;
7631 VALUE symbol;
7632 VALUE proc;
7633 } as;
7634 enum rb_block_type type;
7635};
7636typedef struct rb_control_frame_struct {
7637 const VALUE *pc;
7638 VALUE *sp;
7639 const rb_iseq_t *iseq;
7640 VALUE self;
7641 const VALUE *ep;
7642 const void *block_code;
7643 VALUE *__bp__;
7644 void *jit_return;
7645} rb_control_frame_t;
7646extern const rb_data_type_t ruby_threadptr_data_type;
7647static inline struct rb_thread_struct *
7648rb_thread_ptr(VALUE thval)
7649{
7650 return (struct rb_thread_struct *)rb_check_typeddata(thval, &ruby_threadptr_data_type);
7651}
7652enum rb_thread_status {
7653 THREAD_RUNNABLE,
7654 THREAD_STOPPED,
7655 THREAD_STOPPED_FOREVER,
7656 THREAD_KILLED
7657};
7658typedef void *rb_jmpbuf_t[5];
7659struct rb_vm_tag {
7660 VALUE tag;
7661 VALUE retval;
7662 rb_jmpbuf_t buf;
7663 struct rb_vm_tag *prev;
7664 enum ruby_tag_type state;
7665 unsigned int lock_rec;
7666};
7667__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) > 0, "rb_vm_tag_buf_offset" ": " "offsetof(struct rb_vm_tag, buf) > 0");
7668__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) + sizeof(rb_jmpbuf_t) < sizeof(struct rb_vm_tag), "rb_vm_tag_buf_end" ": " "offsetof(struct rb_vm_tag, buf) + sizeof(rb_jmpbuf_t) < sizeof(struct rb_vm_tag)");
7669struct rb_unblock_callback {
7670 rb_unblock_function_t *func;
7671 void *arg;
7672};
7673struct rb_mutex_struct;
7674typedef struct rb_ensure_entry {
7675 VALUE marker;
7676 VALUE (*e_proc)(VALUE);
7677 VALUE data2;
7678} rb_ensure_entry_t;
7679typedef struct rb_ensure_list {
7680 struct rb_ensure_list *next;
7681 struct rb_ensure_entry entry;
7682} rb_ensure_list_t;
7683typedef char rb_thread_id_string_t[sizeof(rb_nativethread_id_t) * 2 + 3];
7684typedef struct rb_fiber_struct rb_fiber_t;
7685struct rb_waiting_list {
7686 struct rb_waiting_list *next;
7687 struct rb_thread_struct *thread;
7688 struct rb_fiber_struct *fiber;
7689};
7690struct rb_execution_context_struct {
7691 VALUE *vm_stack;
7692 size_t vm_stack_size;
7693 rb_control_frame_t *cfp;
7694 struct rb_vm_tag *tag;
7695 rb_atomic_t interrupt_flag;
7696 rb_atomic_t interrupt_mask;
7697 rb_fiber_t *fiber_ptr;
7698 struct rb_thread_struct *thread_ptr;
7699 struct rb_id_table *local_storage;
7700 VALUE local_storage_recursive_hash;
7701 VALUE local_storage_recursive_hash_for_trace;
7702 const VALUE *root_lep;
7703 VALUE root_svar;
7704 rb_ensure_list_t *ensure_list;
7705 struct rb_trace_arg_struct *trace_arg;
7706 VALUE errinfo;
7707 VALUE passed_block_handler;
7708 uint8_t raised_flag;
7709 enum method_missing_reason method_missing_reason : 8;
7710 VALUE private_const_reference;
7711 struct {
7712 VALUE *stack_start;
7713 VALUE *stack_end;
7714 size_t stack_maxsize;
7715 __attribute__((__aligned__(8))) jmp_buf regs;
7716 } machine;
7717};
7718typedef struct rb_execution_context_struct rb_execution_context_t;
7719void rb_ec_set_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7720void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7721void rb_ec_clear_vm_stack(rb_execution_context_t *ec);
7722struct rb_ext_config {
7723 _Bool ractor_safe;
7724};
7725typedef struct rb_ractor_struct rb_ractor_t;
7726typedef struct rb_thread_struct {
7727 struct list_node lt_node;
7728 VALUE self;
7729 rb_ractor_t *ractor;
7730 rb_vm_t *vm;
7731 rb_execution_context_t *ec;
7732 VALUE last_status;
7733 struct rb_calling_info *calling;
7734 VALUE top_self;
7735 VALUE top_wrapper;
7736 rb_nativethread_id_t thread_id;
7737 enum rb_thread_status status : 2;
7738 unsigned int to_kill : 1;
7739 unsigned int abort_on_exception: 1;
7740 unsigned int report_on_exception: 1;
7741 unsigned int pending_interrupt_queue_checked: 1;
7742 int8_t priority;
7743 uint32_t running_time_us;
7744 native_thread_data_t native_thread_data;
7745 void *blocking_region_buffer;
7746 VALUE thgroup;
7747 VALUE value;
7748 VALUE pending_interrupt_queue;
7749 VALUE pending_interrupt_mask_stack;
7750 rb_nativethread_lock_t interrupt_lock;
7751 struct rb_unblock_callback unblock;
7752 VALUE locking_mutex;
7753 struct rb_mutex_struct *keeping_mutexes;
7754 struct rb_waiting_list *join_list;
7755 union {
7756 struct {
7757 VALUE proc;
7758 VALUE args;
7759 int kw_splat;
7760 } proc;
7761 struct {
7762 VALUE (*func)(void *);
7763 void *arg;
7764 } func;
7765 } invoke_arg;
7766 enum thread_invoke_type {
7767 thread_invoke_type_none = 0,
7768 thread_invoke_type_proc,
7769 thread_invoke_type_ractor_proc,
7770 thread_invoke_type_func
7771 } invoke_type;
7772 VALUE stat_insn_usage;
7773 rb_fiber_t *root_fiber;
7774 VALUE scheduler;
7775 unsigned blocking;
7776 VALUE name;
7777 struct rb_ext_config ext_config;
7778 void *altstack;
7779} rb_thread_t;
7780typedef enum {
7781 VM_DEFINECLASS_TYPE_CLASS = 0x00,
7782 VM_DEFINECLASS_TYPE_SINGLETON_CLASS = 0x01,
7783 VM_DEFINECLASS_TYPE_MODULE = 0x02,
7784 VM_DEFINECLASS_TYPE_MASK = 0x07
7785} rb_vm_defineclass_type_t;
7786
7787
7788rb_iseq_t *rb_iseq_new (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum iseq_type);
7789rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
7790rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent, int opt);
7791rb_iseq_t *rb_iseq_new_eval (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno, const rb_iseq_t *parent, int isolated_depth);
7792rb_iseq_t *rb_iseq_new_with_opt(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno, const rb_iseq_t *parent, int isolated_depth,
7793 enum iseq_type, const rb_compile_option_t*);
7794struct iseq_link_anchor;
7795struct rb_iseq_new_with_callback_callback_func {
7796 VALUE flags;
7797 VALUE reserved;
7798 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *);
7799 const void *data;
7800};
7801static inline struct rb_iseq_new_with_callback_callback_func *
7802rb_iseq_new_with_callback_new_callback(
7803 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *), const void *ptr)
7804{
7805 VALUE memo = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)ptr, ((VALUE)RUBY_Qundef), ((VALUE)RUBY_Qfalse));
7806 return (struct rb_iseq_new_with_callback_callback_func *)memo;
7807}
7808rb_iseq_t *rb_iseq_new_with_callback(const struct rb_iseq_new_with_callback_callback_func * ifunc,
7809 VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
7810 const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
7811VALUE rb_iseq_disasm(const rb_iseq_t *iseq);
7812int rb_iseq_disasm_insn(VALUE str, const VALUE *iseqval, size_t pos, const rb_iseq_t *iseq, VALUE child);
7813VALUE rb_iseq_coverage(const rb_iseq_t *iseq);
7814extern VALUE rb_cISeq;
7815extern VALUE rb_cRubyVM;
7816extern VALUE rb_mRubyVMFrozenCore;
7817extern VALUE rb_block_param_proxy;
7818
7819
7820typedef struct {
7821 const struct rb_block block;
7822 unsigned int is_from_method: 1;
7823 unsigned int is_lambda: 1;
7824 unsigned int is_isolated: 1;
7825} rb_proc_t;
7826
7827
7828VALUE rb_proc_isolate(VALUE self);
7829VALUE rb_proc_isolate_bang(VALUE self);
7830VALUE rb_proc_ractor_make_shareable(VALUE self);
7831
7832
7833typedef struct {
7834 VALUE flags;
7835 rb_iseq_t *iseq;
7836 const VALUE *ep;
7837 const VALUE *env;
7838 unsigned int env_size;
7839} rb_env_t;
7840extern const rb_data_type_t ruby_binding_data_type;
7841typedef struct {
7842 const struct rb_block block;
7843 const VALUE pathobj;
7844 unsigned short first_lineno;
7845} rb_binding_t;
7846enum vm_check_match_type {
7847 VM_CHECKMATCH_TYPE_WHEN = 1,
7848 VM_CHECKMATCH_TYPE_CASE = 2,
7849 VM_CHECKMATCH_TYPE_RESCUE = 3
7850};
7851enum vm_special_object_type {
7852 VM_SPECIAL_OBJECT_VMCORE = 1,
7853 VM_SPECIAL_OBJECT_CBASE,
7854 VM_SPECIAL_OBJECT_CONST_BASE
7855};
7856enum vm_svar_index {
7857 VM_SVAR_LASTLINE = 0,
7858 VM_SVAR_BACKREF = 1,
7859 VM_SVAR_EXTRA_START = 2,
7860 VM_SVAR_FLIPFLOP_START = 2
7861};
7862typedef struct iseq_inline_constant_cache *IC;
7863typedef struct iseq_inline_iv_cache_entry *IVC;
7864typedef struct iseq_inline_cvar_cache_entry *ICVARC;
7865typedef union iseq_inline_storage_entry *ISE;
7866typedef const struct rb_callinfo *CALL_INFO;
7867typedef const struct rb_callcache *CALL_CACHE;
7868typedef struct rb_call_data *CALL_DATA;
7869typedef VALUE CDHASH;
7870typedef rb_control_frame_t *
7871 (__attribute__ ((__fastcall__)) *rb_insn_func_t)(rb_execution_context_t *, rb_control_frame_t *);
7872enum {
7873 VM_FRAME_MAGIC_METHOD = 0x11110001,
7874 VM_FRAME_MAGIC_BLOCK = 0x22220001,
7875 VM_FRAME_MAGIC_CLASS = 0x33330001,
7876 VM_FRAME_MAGIC_TOP = 0x44440001,
7877 VM_FRAME_MAGIC_CFUNC = 0x55550001,
7878 VM_FRAME_MAGIC_IFUNC = 0x66660001,
7879 VM_FRAME_MAGIC_EVAL = 0x77770001,
7880 VM_FRAME_MAGIC_RESCUE = 0x78880001,
7881 VM_FRAME_MAGIC_DUMMY = 0x79990001,
7882 VM_FRAME_MAGIC_MASK = 0x7fff0001,
7883 VM_FRAME_FLAG_FINISH = 0x0020,
7884 VM_FRAME_FLAG_BMETHOD = 0x0040,
7885 VM_FRAME_FLAG_CFRAME = 0x0080,
7886 VM_FRAME_FLAG_LAMBDA = 0x0100,
7887 VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
7888 VM_FRAME_FLAG_CFRAME_KW = 0x0400,
7889 VM_FRAME_FLAG_PASSED = 0x0800,
7890 VM_ENV_FLAG_LOCAL = 0x0002,
7891 VM_ENV_FLAG_ESCAPED = 0x0004,
7892 VM_ENV_FLAG_WB_REQUIRED = 0x0008,
7893 VM_ENV_FLAG_ISOLATED = 0x0010,
7894};
7895static inline void VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value);
7896static inline void
7897VM_ENV_FLAGS_SET(const VALUE *ep, VALUE flag)
7898{
7899 VALUE flags = ep[( 0)];
7900 ((void)0);
7901 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags | flag);
7902}
7903static inline void
7904VM_ENV_FLAGS_UNSET(const VALUE *ep, VALUE flag)
7905{
7906 VALUE flags = ep[( 0)];
7907 ((void)0);
7908 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags & ~flag);
7909}
7910static inline unsigned long
7911VM_ENV_FLAGS(const VALUE *ep, long flag)
7912{
7913 VALUE flags = ep[( 0)];
7914 ((void)0);
7915 return flags & flag;
7916}
7917static inline unsigned long
7918VM_FRAME_TYPE(const rb_control_frame_t *cfp)
7919{
7920 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_MAGIC_MASK);
7921}
7922static inline int
7923VM_FRAME_LAMBDA_P(const rb_control_frame_t *cfp)
7924{
7925 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_LAMBDA) != 0;
7926}
7927static inline int
7928VM_FRAME_CFRAME_KW_P(const rb_control_frame_t *cfp)
7929{
7930 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME_KW) != 0;
7931}
7932static inline int
7933VM_FRAME_FINISHED_P(const rb_control_frame_t *cfp)
7934{
7935 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_FINISH) != 0;
7936}
7937static inline int
7938VM_FRAME_BMETHOD_P(const rb_control_frame_t *cfp)
7939{
7940 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BMETHOD) != 0;
7941}
7942static inline int
7943rb_obj_is_iseq(VALUE iseq)
7944{
7945 return imemo_type_p(iseq, imemo_iseq);
7946}
7947static inline int
7948VM_FRAME_CFRAME_P(const rb_control_frame_t *cfp)
7949{
7950 int cframe_p = VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME) != 0;
7951 ((void)0);
7952 return cframe_p;
7953}
7954static inline int
7955VM_FRAME_RUBYFRAME_P(const rb_control_frame_t *cfp)
7956{
7957 return !VM_FRAME_CFRAME_P(cfp);
7958}
7959static inline int
7960VM_ENV_LOCAL_P(const VALUE *ep)
7961{
7962 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_LOCAL) ? 1 : 0;
7963}
7964static inline const VALUE *
7965VM_ENV_PREV_EP(const VALUE *ep)
7966{
7967 ((void)0);
7968 return ((void *)(((ep[(-1)])) & ~0x03));
7969}
7970static inline VALUE
7971VM_ENV_BLOCK_HANDLER(const VALUE *ep)
7972{
7973 ((void)0);
7974 return ep[(-1)];
7975}
7976static inline int
7977VM_ENV_ESCAPED_P(const VALUE *ep)
7978{
7979 ((void)0);
7980 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED) ? 1 : 0;
7981}
7982__attribute__((__nonnull__ (1)))
7983static inline VALUE
7984VM_ENV_ENVVAL(const VALUE *ep)
7985{
7986 VALUE envval = ep[( 1)];
7987 ((void)0);
7988 ((void)0);
7989 return envval;
7990}
7991__attribute__((__nonnull__ (1)))
7992static inline const rb_env_t *
7993VM_ENV_ENVVAL_PTR(const VALUE *ep)
7994{
7995 return (const rb_env_t *)VM_ENV_ENVVAL(ep);
7996}
7997static inline const rb_env_t *
7998vm_env_new(VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
7999{
8000 rb_env_t *env = (rb_env_t *)rb_imemo_new(imemo_env, (VALUE)env_ep, (VALUE)env_body, 0, (VALUE)iseq);
8001 env->env_size = env_size;
8002 env_ep[( 1)] = (VALUE)env;
8003 return env;
8004}
8005static inline void
8006VM_FORCE_WRITE(const VALUE *ptr, VALUE v)
8007{
8008 *((VALUE *)ptr) = v;
8009}
8010static inline void
8011VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value)
8012{
8013 ((void)0);
8014 VM_FORCE_WRITE(ptr, special_const_value);
8015}
8016static inline void
8017VM_STACK_ENV_WRITE(const VALUE *ep, int index, VALUE v)
8018{
8019 ((void)0);
8020 VM_FORCE_WRITE(&ep[index], v);
8021}static inline
8022const VALUE *rb_vm_ep_local_ep(const VALUE *ep);
8023const VALUE *rb_vm_proc_local_ep(VALUE proc);static inline
8024void rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep);
8025void rb_vm_block_copy(VALUE obj, const struct rb_block *dst, const struct rb_block *src);static inline
8026VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
8027static inline const rb_control_frame_t *
8028RUBY_VM_END_CONTROL_FRAME(const rb_execution_context_t *ec)
8029{
8030 return (rb_control_frame_t *)(ec->vm_stack + ec->vm_stack_size);
8031}
8032static inline int
8033RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
8034{
8035 return !((void *)(RUBY_VM_END_CONTROL_FRAME(ec)) > (void *)(cfp));
8036}
8037static inline int
8038VM_BH_ISEQ_BLOCK_P(VALUE block_handler)
8039{
8040 if ((block_handler & 0x03) == 0x01) {
8041 return 1;
8042 }
8043 else {
8044 return 0;
8045 }
8046}
8047static inline VALUE
8048VM_BH_FROM_ISEQ_BLOCK(const struct rb_captured_block *captured)
8049{
8050 VALUE block_handler = ((VALUE)(captured) | (0x01));
8051 ((void)0);
8052 return block_handler;
8053}
8054static inline const struct rb_captured_block *
8055VM_BH_TO_ISEQ_BLOCK(VALUE block_handler)
8056{
8057 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8058 ((void)0);
8059 return captured;
8060}
8061static inline int
8062VM_BH_IFUNC_P(VALUE block_handler)
8063{
8064 if ((block_handler & 0x03) == 0x03) {
8065 return 1;
8066 }
8067 else {
8068 return 0;
8069 }
8070}
8071static inline VALUE
8072VM_BH_FROM_IFUNC_BLOCK(const struct rb_captured_block *captured)
8073{
8074 VALUE block_handler = ((VALUE)(captured) | (0x03));
8075 ((void)0);
8076 return block_handler;
8077}
8078static inline const struct rb_captured_block *
8079VM_BH_TO_IFUNC_BLOCK(VALUE block_handler)
8080{
8081 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8082 ((void)0);
8083 return captured;
8084}
8085static inline const struct rb_captured_block *
8086VM_BH_TO_CAPT_BLOCK(VALUE block_handler)
8087{
8088 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8089 ((void)0);
8090 return captured;
8091}
8092static inline enum rb_block_handler_type
8093vm_block_handler_type(VALUE block_handler)
8094{
8095 if (VM_BH_ISEQ_BLOCK_P(block_handler)) {
8096 return block_handler_type_iseq;
8097 }
8098 else if (VM_BH_IFUNC_P(block_handler)) {
8099 return block_handler_type_ifunc;
8100 }
8101 else if (RB_SYMBOL_P(block_handler)) {
8102 return block_handler_type_symbol;
8103 }
8104 else {
8105 ((void)0);
8106 return block_handler_type_proc;
8107 }
8108}
8109static inline void
8110vm_block_handler_verify(__attribute__ ((__unused__)) VALUE block_handler)
8111{
8112 ((void)0);
8113}
8114static inline int
8115vm_cfp_forwarded_bh_p(const rb_control_frame_t *cfp, VALUE block_handler)
8116{
8117 return ((VALUE) cfp->block_code) == block_handler;
8118}
8119static inline enum rb_block_type
8120vm_block_type(const struct rb_block *block)
8121{
8122 return block->type;
8123}
8124static inline void
8125vm_block_type_set(const struct rb_block *block, enum rb_block_type type)
8126{
8127 struct rb_block *mb = (struct rb_block *)block;
8128 mb->type = type;
8129}
8130static inline const struct rb_block *
8131vm_proc_block(VALUE procval)
8132{
8133 ((void)0);
8134 return &((rb_proc_t *)(((struct RTypedData *)(procval))->data))->block;
8135}
8136static inline const rb_iseq_t *vm_block_iseq(const struct rb_block *block);
8137static inline const VALUE *vm_block_ep(const struct rb_block *block);
8138static inline const rb_iseq_t *
8139vm_proc_iseq(VALUE procval)
8140{
8141 return vm_block_iseq(vm_proc_block(procval));
8142}
8143static inline const VALUE *
8144vm_proc_ep(VALUE procval)
8145{
8146 return vm_block_ep(vm_proc_block(procval));
8147}
8148static inline const rb_iseq_t *
8149vm_block_iseq(const struct rb_block *block)
8150{
8151 switch (vm_block_type(block)) {
8152 case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq);
8153 case block_type_proc: return vm_proc_iseq(block->as.proc);
8154 case block_type_ifunc:
8155 case block_type_symbol: return ((void *)0);
8156 }
8157 __builtin_unreachable();
8158 return ((void *)0);
8159}
8160static inline const VALUE *
8161vm_block_ep(const struct rb_block *block)
8162{
8163 switch (vm_block_type(block)) {
8164 case block_type_iseq:
8165 case block_type_ifunc: return block->as.captured.ep;
8166 case block_type_proc: return vm_proc_ep(block->as.proc);
8167 case block_type_symbol: return ((void *)0);
8168 }
8169 __builtin_unreachable();
8170 return ((void *)0);
8171}
8172static inline VALUE
8173vm_block_self(const struct rb_block *block)
8174{
8175 switch (vm_block_type(block)) {
8176 case block_type_iseq:
8177 case block_type_ifunc:
8178 return block->as.captured.self;
8179 case block_type_proc:
8180 return vm_block_self(vm_proc_block(block->as.proc));
8181 case block_type_symbol:
8182 return ((VALUE)RUBY_Qundef);
8183 }
8184 __builtin_unreachable();
8185 return ((VALUE)RUBY_Qundef);
8186}
8187static inline VALUE
8188VM_BH_TO_SYMBOL(VALUE block_handler)
8189{
8190 ((void)0);
8191 return block_handler;
8192}
8193static inline VALUE
8194VM_BH_FROM_SYMBOL(VALUE symbol)
8195{
8196 ((void)0);
8197 return symbol;
8198}
8199static inline VALUE
8200VM_BH_TO_PROC(VALUE block_handler)
8201{
8202 ((void)0);
8203 return block_handler;
8204}
8205static inline VALUE
8206VM_BH_FROM_PROC(VALUE procval)
8207{
8208 ((void)0);
8209 return procval;
8210}
8211VALUE rb_thread_alloc(VALUE klass);
8212VALUE rb_binding_alloc(VALUE klass);
8213VALUE rb_proc_alloc(VALUE klass);
8214VALUE rb_proc_dup(VALUE self);
8215extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8216extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
8217extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp
8218);
8219void rb_vm_bugreport(const void *);
8220typedef void (*ruby_sighandler_t)(int);
8221__attribute__((__format__(__printf__, 4, 5)))
8222__attribute__((__noreturn__)) void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...);
8223
8224
8225VALUE rb_iseq_eval(const rb_iseq_t *iseq);
8226VALUE rb_iseq_eval_main(const rb_iseq_t *iseq);
8227VALUE rb_iseq_path(const rb_iseq_t *iseq);
8228VALUE rb_iseq_realpath(const rb_iseq_t *iseq);
8229
8230
8231VALUE rb_iseq_pathobj_new(VALUE path, VALUE realpath);
8232void rb_iseq_pathobj_set(const rb_iseq_t *iseq, VALUE path, VALUE realpath);
8233int rb_ec_frame_method_id_and_class(const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp);
8234void rb_ec_setup_exception(const rb_execution_context_t *ec, VALUE mesg, VALUE cause);
8235VALUE rb_vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
8236VALUE rb_vm_make_proc_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
8237static inline VALUE
8238rb_vm_make_proc(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8239{
8240 return rb_vm_make_proc_lambda(ec, captured, klass, 0);
8241}
8242static inline VALUE
8243rb_vm_make_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8244{
8245 return rb_vm_make_proc_lambda(ec, captured, klass, 1);
8246}
8247VALUE rb_vm_make_binding(const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp);
8248VALUE rb_vm_env_local_variables(const rb_env_t *env);
8249const rb_env_t *rb_vm_env_prev_env(const rb_env_t *env);
8250const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars);
8251void rb_vm_inc_const_missing_count(void);
8252VALUE rb_vm_call_kw(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc,
8253 const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat);
8254static void rb_vm_pop_frame(rb_execution_context_t *ec);
8255void rb_gvl_destroy(rb_global_vm_lock_t *gvl);
8256void rb_thread_start_timer_thread(void);
8257void rb_thread_stop_timer_thread(void);
8258void rb_thread_reset_timer_thread(void);
8259void rb_thread_wakeup_timer_thread(int);
8260static inline void
8261rb_vm_living_threads_init(rb_vm_t *vm)
8262{
8263 list_head_init(&vm->waiting_fds);
8264 list_head_init(&vm->waiting_pids);
8265 list_head_init(&vm->workqueue);
8266 list_head_init(&vm->waiting_grps);
8267 list_head_init(&vm->ractor.set);
8268}
8269typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
8270rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8271rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8272int rb_vm_get_sourceline(const rb_control_frame_t *);
8273void rb_vm_stack_to_heap(rb_execution_context_t *ec);
8274void ruby_thread_init_stack(rb_thread_t *th);
8275rb_thread_t * ruby_thread_from_native(void);
8276int ruby_thread_set_native(rb_thread_t *th);
8277int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
8278void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
8279static VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
8280void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
8281void rb_gc_mark_machine_stack(const rb_execution_context_t *ec);static inline
8282void rb_vm_rewrite_cref(rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr);
8283static const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
8284VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, enum ruby_tag_type *stateptr);
8285rb_execution_context_t *rb_vm_main_ractor_ec(rb_vm_t *vm);
8286
8287
8288extern struct rb_ractor_struct *ruby_single_main_ractor;
8289extern rb_vm_t *ruby_current_vm_ptr;
8290extern rb_event_flag_t ruby_vm_event_flags;
8291extern rb_event_flag_t ruby_vm_event_enabled_global_flags;
8292extern unsigned int ruby_vm_event_local_num;
8293
8294
8295static inline rb_thread_t *
8296rb_ec_thread_ptr(const rb_execution_context_t *ec)
8297{
8298 return ec->thread_ptr;
8299}
8300static inline rb_ractor_t *
8301rb_ec_ractor_ptr(const rb_execution_context_t *ec)
8302{
8303 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8304 if (th) {
8305 ((void)0);
8306 return th->ractor;
8307 }
8308 else {
8309 return ((void *)0);
8310 }
8311}
8312static inline rb_vm_t *
8313rb_ec_vm_ptr(const rb_execution_context_t *ec)
8314{
8315 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8316 if (th) {
8317 return th->vm;
8318 }
8319 else {
8320 return ((void *)0);
8321 }
8322}
8323static inline rb_execution_context_t *
8324rb_current_execution_context(_Bool expect_ec)
8325{
8326 rb_execution_context_t *ec = ruby_current_ec;
8327 ((void)0);
8328 return ec;
8329}
8330static inline rb_thread_t *
8331rb_current_thread(void)
8332{
8333 const rb_execution_context_t *ec = rb_current_execution_context(1);
8334 return rb_ec_thread_ptr(ec);
8335}
8336static inline rb_ractor_t *
8337rb_current_ractor(void)
8338{
8339 if (ruby_single_main_ractor) {
8340 return ruby_single_main_ractor;
8341 }
8342 else {
8343 const rb_execution_context_t *ec = rb_current_execution_context(1);
8344 return rb_ec_ractor_ptr(ec);
8345 }
8346}
8347static inline rb_vm_t *
8348rb_current_vm(void)
8349{
8350 return ruby_current_vm_ptr;
8351}
8352void rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec,
8353 unsigned int recorded_lock_rec,
8354 unsigned int current_lock_rec);
8355static inline unsigned int
8356rb_ec_vm_lock_rec(const rb_execution_context_t *ec)
8357{
8358 rb_vm_t *vm = rb_ec_vm_ptr(ec);
8359 if (vm->ractor.sync.lock_owner != rb_ec_ractor_ptr(ec)) {
8360 return 0;
8361 }
8362 else {
8363 return vm->ractor.sync.lock_rec;
8364 }
8365}
8366enum {
8367 TIMER_INTERRUPT_MASK = 0x01,
8368 PENDING_INTERRUPT_MASK = 0x02,
8369 POSTPONED_JOB_INTERRUPT_MASK = 0x04,
8370 TRAP_INTERRUPT_MASK = 0x08,
8371 TERMINATE_INTERRUPT_MASK = 0x10,
8372 VM_BARRIER_INTERRUPT_MASK = 0x20,
8373};
8374static inline _Bool
8375RUBY_VM_INTERRUPTED_ANY(rb_execution_context_t *ec)
8376{
8377 return ec->interrupt_flag & ~(ec)->interrupt_mask;
8378}
8379VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
8380int rb_signal_buff_size(void);
8381int rb_signal_exec(rb_thread_t *th, int sig);
8382void rb_threadptr_check_signal(rb_thread_t *mth);
8383void rb_threadptr_signal_raise(rb_thread_t *th, int sig);
8384void rb_threadptr_signal_exit(rb_thread_t *th);
8385int rb_threadptr_execute_interrupts(rb_thread_t *, int);
8386void rb_threadptr_interrupt(rb_thread_t *th);
8387void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
8388void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
8389void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
8390VALUE rb_ec_get_errinfo(const rb_execution_context_t *ec);
8391void rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo);
8392void rb_execution_context_update(const rb_execution_context_t *ec);
8393void rb_execution_context_mark(const rb_execution_context_t *ec);
8394void rb_fiber_close(rb_fiber_t *fib);
8395void Init_native_thread(rb_thread_t *th);
8396int rb_vm_check_ints_blocking(rb_execution_context_t *ec);
8397void rb_vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond);
8398void rb_vm_cond_timedwait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec);
8399static inline void
8400rb_vm_check_ints(rb_execution_context_t *ec)
8401{
8402 ((void)0);
8403 if ((__builtin_expect(!!(RUBY_VM_INTERRUPTED_ANY(ec)), 0))) {
8404 rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);
8405 }
8406}
8407struct rb_trace_arg_struct {
8408 rb_event_flag_t event;
8409 rb_execution_context_t *ec;
8410 const rb_control_frame_t *cfp;
8411 VALUE self;
8412 ID id;
8413 ID called_id;
8414 VALUE klass;
8415 VALUE data;
8416 int klass_solved;
8417 int lineno;
8418 VALUE path;
8419};
8420void rb_hook_list_mark(rb_hook_list_t *hooks);
8421void rb_hook_list_free(rb_hook_list_t *hooks);
8422void rb_hook_list_connect_tracepoint(VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line);
8423void rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval);
8424void rb_exec_event_hooks(struct rb_trace_arg_struct *trace_arg, rb_hook_list_t *hooks, int pop_p);
8425static inline void
8426rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_event_flag_t flag,
8427 VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
8428{
8429 struct rb_trace_arg_struct trace_arg;
8430 ((void)0);
8431 trace_arg.event = flag;
8432 trace_arg.ec = ec;
8433 trace_arg.cfp = ec->cfp;
8434 trace_arg.self = self;
8435 trace_arg.id = id;
8436 trace_arg.called_id = called_id;
8437 trace_arg.klass = klass;
8438 trace_arg.data = data;
8439 trace_arg.path = ((VALUE)RUBY_Qundef);
8440 trace_arg.klass_solved = 0;
8441 rb_exec_event_hooks(&trace_arg, hooks, pop_p);
8442}
8443struct rb_ractor_pub {
8444 VALUE self;
8445 uint32_t id;
8446 rb_hook_list_t hooks;
8447};
8448static inline rb_hook_list_t *
8449rb_ec_ractor_hooks(const rb_execution_context_t *ec)
8450{
8451 struct rb_ractor_pub *cr_pub = (struct rb_ractor_pub *)rb_ec_ractor_ptr(ec);
8452 return &cr_pub->hooks;
8453}
8454static inline void
8455rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
8456{
8457 do { const rb_event_flag_t flag_arg_ = (0x2000); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, ec->cfp->self, 0, 0, 0, RB_NIL_P(eval_script) ? (VALUE)iseq : __extension__ ({ const VALUE args_to_new_ary[] = {eval_script, (VALUE)iseq}; if (__builtin_constant_p(2)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (2), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (2)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); }), 0); } } while (0);
8458}
8459void rb_vm_trap_exit(rb_vm_t *vm);
8460
8461
8462int rb_thread_check_trap_pending(void);
8463extern VALUE rb_get_coverages(void);
8464extern void rb_set_coverages(VALUE, int, VALUE);
8465extern void rb_clear_coverages(void);
8466extern void rb_reset_coverages(void);
8467extern void rb_resume_coverages(void);
8468extern void rb_suspend_coverages(void);
8469void rb_postponed_job_flush(rb_vm_t *vm);
8470extern VALUE rb_eRactorUnsafeError;
8471extern VALUE rb_eRactorIsolationError;
8472
8473
8474static inline void
8475vm_passed_block_handler_set(rb_execution_context_t *ec, VALUE block_handler)
8476{
8477 vm_block_handler_verify(block_handler);
8478 ec->passed_block_handler = block_handler;
8479}
8480static inline void
8481pass_passed_block_handler(rb_execution_context_t *ec)
8482{
8483 VALUE block_handler = rb_vm_frame_block_handler(ec->cfp);
8484 vm_passed_block_handler_set(ec, block_handler);
8485 VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_PASSED);
8486}
8487int _setjmp(jmp_buf);
8488__attribute__((__noreturn__)) void _longjmp(jmp_buf, int);
8489typedef int error_t;
8490extern int *__errno (void);
8491extern __attribute__((dllimport)) const char * const _sys_errlist[];
8492extern __attribute__((dllimport)) int _sys_nerr;
8493extern __attribute__((dllimport)) const char * const sys_errlist[];
8494extern __attribute__((dllimport)) int sys_nerr;
8495extern __attribute__((dllimport)) char *program_invocation_name;
8496extern __attribute__((dllimport)) char *program_invocation_short_name;
8497static inline void
8498rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec)
8499{
8500 unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec);
8501 if (current_lock_rec != recorded_lock_rec) {
8502 rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec);
8503 }
8504}
8505static inline int
8506rb_ec_tag_state(const rb_execution_context_t *ec)
8507{
8508 struct rb_vm_tag *tag = ec->tag;
8509 enum ruby_tag_type state = tag->state;
8510 tag->state = RUBY_TAG_NONE;
8511 rb_ec_vm_lock_rec_check(ec, tag->lock_rec);
8512 return state;
8513}
8514__attribute__((__noreturn__)) static inline void rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st);
8515static inline void
8516rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st)
8517{
8518 ec->tag->state = st;
8519 __builtin_longjmp(((ec->tag->buf)),(1));
8520}
8521static inline int CREF_SINGLETON(const rb_cref_t *cref);
8522static inline VALUE
8523CREF_CLASS(const rb_cref_t *cref)
8524{
8525 if (CREF_SINGLETON(cref)) {
8526 return rb_class_of(cref->klass_or_self);
8527 }
8528 else {
8529 return cref->klass_or_self;
8530 }
8531}
8532static inline VALUE
8533CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref)
8534{
8535 if (CREF_SINGLETON(cref)) {
8536 return rb_singleton_class(cref->klass_or_self);
8537 }
8538 else {
8539 return cref->klass_or_self;
8540 }
8541}
8542static inline rb_cref_t *
8543CREF_NEXT(const rb_cref_t *cref)
8544{
8545 return cref->next;
8546}
8547static inline const rb_scope_visibility_t *
8548CREF_SCOPE_VISI(const rb_cref_t *cref)
8549{
8550 return &cref->scope_visi;
8551}
8552static inline VALUE
8553CREF_REFINEMENTS(const rb_cref_t *cref)
8554{
8555 return cref->refinements;
8556}
8557static inline void
8558CREF_REFINEMENTS_SET(rb_cref_t *cref, VALUE refs)
8559{
8560 rb_obj_write((VALUE)(cref), __extension__({
8561 ;
8562 ; __typeof__((VALUE *)(&cref->refinements)) unaligned_member_access_result = ((VALUE *)(&cref->refinements));
8563 ; unaligned_member_access_result; }), (VALUE)(refs), "../ruby-3.1.3/eval_intern.h", 223);
8564}
8565static inline int
8566CREF_PUSHED_BY_EVAL(const rb_cref_t *cref)
8567{
8568 return cref->flags & ((VALUE)RUBY_FL_USER5);
8569}
8570static inline void
8571CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref)
8572{
8573 cref->flags |= ((VALUE)RUBY_FL_USER5);
8574}
8575static inline int
8576CREF_SINGLETON(const rb_cref_t *cref)
8577{
8578 return cref->flags & ((VALUE)RUBY_FL_USER7);
8579}
8580static inline void
8581CREF_SINGLETON_SET(rb_cref_t *cref)
8582{
8583 cref->flags |= ((VALUE)RUBY_FL_USER7);
8584}
8585static inline int
8586CREF_OMOD_SHARED(const rb_cref_t *cref)
8587{
8588 return cref->flags & ((VALUE)RUBY_FL_USER6);
8589}
8590static inline void
8591CREF_OMOD_SHARED_SET(rb_cref_t *cref)
8592{
8593 cref->flags |= ((VALUE)RUBY_FL_USER6);
8594}
8595static inline void
8596CREF_OMOD_SHARED_UNSET(rb_cref_t *cref)
8597{
8598 cref->flags &= ~((VALUE)RUBY_FL_USER6);
8599}
8600enum {
8601 RAISED_EXCEPTION = 1,
8602 RAISED_STACKOVERFLOW = 2,
8603 RAISED_NOMEMORY = 4
8604};
8605int rb_ec_set_raised(rb_execution_context_t *ec);
8606int rb_ec_reset_raised(rb_execution_context_t *ec);
8607int rb_ec_stack_check(rb_execution_context_t *ec);
8608VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
8609VALUE rb_make_exception(int argc, const VALUE *argv);
8610__attribute__((__noreturn__)) void rb_method_name_error(VALUE, VALUE);
8611__attribute__((__noreturn__)) void rb_fiber_start(rb_fiber_t*);
8612__attribute__((__noreturn__)) void rb_print_undef(VALUE, ID, rb_method_visibility_t);
8613__attribute__((__noreturn__)) void rb_print_undef_str(VALUE, VALUE);
8614__attribute__((__noreturn__)) void rb_print_inaccessible(VALUE, ID, rb_method_visibility_t);
8615__attribute__((__noreturn__)) void rb_vm_localjump_error(const char *,VALUE, int);
8616__attribute__((__noreturn__)) void rb_vm_jump_tag_but_local_jump(int);
8617VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
8618rb_cref_t *rb_vm_cref(void);
8619rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void);
8620VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename);
8621void rb_vm_set_progname(VALUE filename);
8622VALUE rb_vm_cbase(void);
8623VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec);
8624VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n);
8625VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, _Bool skip_internal);
8626static inline char *
8627rb_char_next(const char *p)
8628{
8629 if (p) {
8630 int len = mblen(p, 0x7fffffff);
8631 p += len > 0 ? len : 1;
8632 }
8633 return (char *)p;
8634}
8635static inline void
8636translit_char(char *p, int from, int to)
8637{
8638 while (*p) {
8639 if ((unsigned char)*p == from)
8640 *p = to;
8641 p = rb_char_next(p);
8642 }
8643}
8644const char *rb_obj_info(VALUE obj);
8645const char *rb_raw_obj_info(char *buff, const int buff_size, VALUE obj);
8646VALUE rb_gc_disable_no_rest(void);
8647struct rb_thread_struct;
8648
8649
8650size_t rb_objspace_data_type_memsize(VALUE obj);
8651void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
8652void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
8653int rb_objspace_markable_object_p(VALUE obj);
8654int rb_objspace_internal_object_p(VALUE obj);
8655int rb_objspace_marked_object_p(VALUE obj);
8656void rb_objspace_each_objects(
8657 int (*callback)(void *start, void *end, size_t stride, void *data),
8658 void *data);
8659void rb_objspace_each_objects_without_setup(
8660 int (*callback)(void *, void *, size_t, void *),
8661 void *data);
8662
8663
8664struct rb_iseq_struct;
8665int rb_dvar_defined(ID, const struct rb_iseq_struct *);
8666int rb_local_defined(ID, const struct rb_iseq_struct *);
8667const char *rb_insns_name(int i);
8668VALUE rb_insns_name_array(void);
8669int rb_iseq_cdhash_cmp(VALUE val, VALUE lit);
8670st_index_t rb_iseq_cdhash_hash(VALUE a);
8671int rb_vm_insn_addr2insn(const void *);
8672int rb_vm_insn_decode(const VALUE encoded);
8673extern _Bool ruby_vm_keep_script_lines;
8674
8675
8676rb_event_flag_t rb_iseq_event_flags(const struct rb_iseq_struct *iseq, size_t pos);
8677
8678
8679struct rb_thread_struct;
8680struct rb_fiber_struct;
8681void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
8682void ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(VALUE), VALUE (*rollback_func)(VALUE));
8683void rb_fiber_init_mjit_cont(struct rb_fiber_struct *fiber);
8684VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
8685unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
8686
8687
8688enum ruby_coderange_type {
8689 RUBY_ENC_CODERANGE_UNKNOWN = 0,
8690 RUBY_ENC_CODERANGE_7BIT = ((int)RUBY_FL_USER8),
8691 RUBY_ENC_CODERANGE_VALID = ((int)RUBY_FL_USER9),
8692 RUBY_ENC_CODERANGE_BROKEN = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)),
8693 RUBY_ENC_CODERANGE_MASK = (RUBY_ENC_CODERANGE_7BIT|
8694 RUBY_ENC_CODERANGE_VALID|
8695 RUBY_ENC_CODERANGE_BROKEN)
8696};
8697__attribute__((__const__))
8698static inline int
8699rb_enc_coderange_clean_p(int cr)
8700{
8701 return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT;
8702}
8703__attribute__((__const__))
8704static inline _Bool
8705RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr)
8706{
8707 return rb_enc_coderange_clean_p(cr);
8708}
8709__attribute__((__pure__))
8710static inline enum ruby_coderange_type
8711RB_ENC_CODERANGE(VALUE obj)
8712{
8713 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK);
8714 return ((enum ruby_coderange_type)ret);
8715}
8716__attribute__((__pure__))
8717static inline _Bool
8718RB_ENC_CODERANGE_ASCIIONLY(VALUE obj)
8719{
8720 return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT;
8721}
8722static inline void
8723RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr)
8724{
8725 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
8726 RB_FL_SET_RAW(obj, cr);
8727}
8728static inline void
8729RB_ENC_CODERANGE_CLEAR(VALUE obj)
8730{
8731 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
8732}
8733__attribute__((__const__))
8734static inline enum ruby_coderange_type
8735RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b)
8736{
8737 if (a == RUBY_ENC_CODERANGE_7BIT) {
8738 return b;
8739 }
8740 else if (a != RUBY_ENC_CODERANGE_VALID) {
8741 return RUBY_ENC_CODERANGE_UNKNOWN;
8742 }
8743 else if (b == RUBY_ENC_CODERANGE_7BIT) {
8744 return RUBY_ENC_CODERANGE_VALID;
8745 }
8746 else {
8747 return b;
8748 }
8749}
8750
8751
8752
8753
8754typedef unsigned char OnigUChar;
8755typedef unsigned int OnigCodePoint;
8756typedef unsigned int OnigCtype;
8757typedef size_t OnigDistance;
8758typedef ptrdiff_t OnigPosition;
8759typedef unsigned int OnigCaseFoldType;
8760extern OnigCaseFoldType OnigDefaultCaseFoldFlag;
8761typedef struct {
8762 int byte_len;
8763 int code_len;
8764 OnigCodePoint code[3];
8765} OnigCaseFoldCodeItem;
8766typedef struct {
8767 OnigCodePoint esc;
8768 OnigCodePoint anychar;
8769 OnigCodePoint anytime;
8770 OnigCodePoint zero_or_one_time;
8771 OnigCodePoint one_or_more_time;
8772 OnigCodePoint anychar_anytime;
8773} OnigMetaCharTableType;
8774typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
8775typedef struct OnigEncodingTypeST {
8776 int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
8777 const char* name;
8778 int max_enc_len;
8779 int min_enc_len;
8780 int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8781 OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8782 int (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
8783 int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
8784 int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
8785 int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
8786 int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
8787 int (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
8788 int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
8789 int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
8790 OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8791 int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8792 int (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
8793 int ruby_encoding_index;
8794 unsigned int flags;
8795} OnigEncodingType;
8796typedef const OnigEncodingType* OnigEncoding;
8797extern const OnigEncodingType OnigEncodingASCII;
8798extern
8799int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
8800extern
8801int onigenc_mbclen_approximate(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
8802extern
8803OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
8804extern
8805int onigenc_init(void);
8806extern
8807int onigenc_set_default_encoding(OnigEncoding enc);
8808extern
8809OnigEncoding onigenc_get_default_encoding(void);
8810extern
8811OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
8812extern
8813OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
8814extern
8815OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
8816extern
8817OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
8818extern
8819int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
8820extern
8821int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
8822extern
8823int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);
8824typedef unsigned int OnigOptionType;
8825typedef struct {
8826 unsigned int op;
8827 unsigned int op2;
8828 unsigned int behavior;
8829 OnigOptionType options;
8830 OnigMetaCharTableType meta_char_table;
8831} OnigSyntaxType;
8832extern const OnigSyntaxType OnigSyntaxASIS;
8833extern const OnigSyntaxType OnigSyntaxPosixBasic;
8834extern const OnigSyntaxType OnigSyntaxPosixExtended;
8835extern const OnigSyntaxType OnigSyntaxEmacs;
8836extern const OnigSyntaxType OnigSyntaxGrep;
8837extern const OnigSyntaxType OnigSyntaxGnuRegex;
8838extern const OnigSyntaxType OnigSyntaxJava;
8839extern const OnigSyntaxType OnigSyntaxPerl58;
8840extern const OnigSyntaxType OnigSyntaxPerl58_NG;
8841extern const OnigSyntaxType OnigSyntaxPerl;
8842extern const OnigSyntaxType OnigSyntaxRuby;
8843extern const OnigSyntaxType OnigSyntaxPython;
8844extern const OnigSyntaxType* OnigDefaultSyntax;
8845struct re_registers {
8846 int allocated;
8847 int num_regs;
8848 OnigPosition* beg;
8849 OnigPosition* end;
8850};
8851typedef struct re_registers OnigRegion;
8852typedef struct {
8853 OnigEncoding enc;
8854 OnigUChar* par;
8855 OnigUChar* par_end;
8856} OnigErrorInfo;
8857typedef struct {
8858 int lower;
8859 int upper;
8860} OnigRepeatRange;
8861typedef void (*OnigWarnFunc)(const char* s);
8862extern void onig_null_warn(const char* s);
8863typedef struct re_pattern_buffer {
8864 unsigned char* p;
8865 unsigned int used;
8866 unsigned int alloc;
8867 int num_mem;
8868 int num_repeat;
8869 int num_null_check;
8870 int num_comb_exp_check;
8871 int num_call;
8872 unsigned int capture_history;
8873 unsigned int bt_mem_start;
8874 unsigned int bt_mem_end;
8875 int stack_pop_level;
8876 int repeat_range_alloc;
8877 OnigOptionType options;
8878 OnigRepeatRange* repeat_range;
8879 OnigEncoding enc;
8880 const OnigSyntaxType* syntax;
8881 void* name_table;
8882 OnigCaseFoldType case_fold_flag;
8883 int optimize;
8884 int threshold_len;
8885 int anchor;
8886 OnigDistance anchor_dmin;
8887 OnigDistance anchor_dmax;
8888 int sub_anchor;
8889 unsigned char *exact;
8890 unsigned char *exact_end;
8891 unsigned char map[256];
8892 int *int_map;
8893 int *int_map_backward;
8894 OnigDistance dmin;
8895 OnigDistance dmax;
8896 struct re_pattern_buffer* chain;
8897} OnigRegexType;
8898typedef OnigRegexType* OnigRegex;
8899typedef OnigRegexType regex_t;
8900typedef struct {
8901 int num_of_elements;
8902 OnigEncoding pattern_enc;
8903 OnigEncoding target_enc;
8904 const OnigSyntaxType* syntax;
8905 OnigOptionType option;
8906 OnigCaseFoldType case_fold_flag;
8907} OnigCompileInfo;
8908extern
8909int onig_initialize(OnigEncoding encodings[], int n);
8910extern
8911int onig_init(void);
8912extern
8913int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
8914extern
8915void onig_set_warn_func(OnigWarnFunc f);
8916extern
8917void onig_set_verb_warn_func(OnigWarnFunc f);
8918extern
8919int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
8920extern
8921int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
8922extern
8923int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
8924extern
8925int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
8926extern
8927void onig_free(OnigRegex);
8928extern
8929void onig_free_body(OnigRegex);
8930extern
8931OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
8932extern
8933OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
8934extern
8935OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
8936extern
8937OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
8938extern
8939OnigRegion* onig_region_new(void);
8940extern
8941void onig_region_init(OnigRegion* region);
8942extern
8943void onig_region_free(OnigRegion* region, int free_self);
8944extern
8945void onig_region_copy(OnigRegion* to, const OnigRegion* from);
8946extern
8947void onig_region_clear(OnigRegion* region);
8948extern
8949int onig_region_resize(OnigRegion* region, int n);
8950extern
8951int onig_region_set(OnigRegion* region, int at, int beg, int end);
8952extern
8953int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
8954extern
8955int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
8956extern
8957int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
8958extern
8959int onig_number_of_names(const OnigRegexType *reg);
8960extern
8961int onig_number_of_captures(const OnigRegexType *reg);
8962extern
8963int onig_number_of_capture_histories(const OnigRegexType *reg);
8964extern
8965int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
8966extern
8967int onig_noname_group_capture_is_active(const OnigRegexType *reg);
8968extern
8969OnigEncoding onig_get_encoding(const OnigRegexType *reg);
8970extern
8971OnigOptionType onig_get_options(const OnigRegexType *reg);
8972extern
8973OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
8974extern
8975const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
8976extern
8977int onig_set_default_syntax(const OnigSyntaxType* syntax);
8978extern
8979void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
8980extern
8981unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
8982extern
8983unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
8984extern
8985unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
8986extern
8987OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
8988extern
8989void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
8990extern
8991void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
8992extern
8993void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
8994extern
8995void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
8996extern
8997int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
8998extern
8999void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
9000extern
9001OnigCaseFoldType onig_get_default_case_fold_flag(void);
9002extern
9003int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
9004extern
9005unsigned int onig_get_match_stack_limit_size(void);
9006extern
9007int onig_set_match_stack_limit_size(unsigned int size);
9008extern
9009unsigned int onig_get_parse_depth_limit(void);
9010extern
9011int onig_set_parse_depth_limit(unsigned int depth);
9012extern
9013int onig_end(void);
9014extern
9015const char* onig_version(void);
9016extern
9017const char* onig_copyright(void);
9018
9019
9020
9021
9022extern VALUE rb_cEncoding;
9023enum ruby_encoding_consts {
9024 RUBY_ENCODING_INLINE_MAX = 127,
9025 RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10),
9026 RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<<RUBY_ENCODING_SHIFT
9027 ),
9028 RUBY_ENCODING_MAXNAMELEN = 42
9029};
9030static inline void
9031RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
9032{
9033 VALUE f = encindex;
9034 f <<= RUBY_ENCODING_SHIFT;
9035 RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
9036 RB_FL_SET_RAW(obj, f);
9037}
9038static inline int
9039RB_ENCODING_GET_INLINED(VALUE obj)
9040{
9041 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT;
9042 return ((int)ret);
9043}
9044typedef const OnigEncodingType rb_encoding;
9045
9046int rb_char_to_option_kcode(int c, int *option, int *kcode);
9047int rb_enc_replicate(const char *name, rb_encoding *src);
9048int rb_define_dummy_encoding(const char *name);
9049__attribute__((__pure__))
9050int rb_enc_dummy_p(rb_encoding *enc);
9051__attribute__((__pure__))
9052int rb_enc_to_index(rb_encoding *enc);
9053int rb_enc_get_index(VALUE obj);
9054static inline int
9055RB_ENCODING_GET(VALUE obj)
9056{
9057 int encindex = RB_ENCODING_GET_INLINED(obj);
9058 if (encindex == RUBY_ENCODING_INLINE_MAX) {
9059 return rb_enc_get_index(obj);
9060 }
9061 else {
9062 return encindex;
9063 }
9064}
9065void rb_enc_set_index(VALUE obj, int encindex);
9066static inline void
9067RB_ENCODING_SET(VALUE obj, int encindex)
9068{
9069 rb_enc_set_index(obj, encindex);
9070}
9071static inline void
9072RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr)
9073{
9074 RB_ENCODING_SET(obj, encindex);
9075 RB_ENC_CODERANGE_SET(obj, cr);
9076}
9077__attribute__((__pure__))
9078int rb_enc_capable(VALUE obj);
9079int rb_enc_find_index(const char *name);
9080int rb_enc_alias(const char *alias, const char *orig);
9081int rb_to_encoding_index(VALUE obj);
9082rb_encoding *rb_to_encoding(VALUE obj);
9083rb_encoding *rb_find_encoding(VALUE obj);
9084rb_encoding *rb_enc_get(VALUE obj);
9085rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2);
9086rb_encoding *rb_enc_check(VALUE str1,VALUE str2);
9087VALUE rb_enc_associate_index(VALUE obj, int encindex);
9088VALUE rb_enc_associate(VALUE obj, rb_encoding *enc);
9089void rb_enc_copy(VALUE dst, VALUE src);
9090rb_encoding *rb_enc_from_index(int idx);
9091rb_encoding *rb_enc_find(const char *name);
9092static inline const char *
9093rb_enc_name(rb_encoding *enc)
9094{
9095 return enc->name;
9096}
9097static inline int
9098rb_enc_mbminlen(rb_encoding *enc)
9099{
9100 return enc->min_enc_len;
9101}
9102static inline int
9103rb_enc_mbmaxlen(rb_encoding *enc)
9104{
9105 return enc->max_enc_len;
9106}
9107int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);
9108int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc);
9109int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);
9110int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);
9111unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc);
9112static inline unsigned int
9113rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc)
9114{
9115 return rb_enc_codepoint_len(p, e, 0, enc);
9116}
9117static inline OnigCodePoint
9118rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc)
9119{
9120 const OnigUChar *up = ((const OnigUChar *)p);
9121 const OnigUChar *ue = ((const OnigUChar *)e);
9122 return (enc)->mbc_to_code((up),(ue),enc);
9123}
9124int rb_enc_codelen(int code, rb_encoding *enc);
9125static inline int
9126rb_enc_code_to_mbclen(int c, rb_encoding *enc)
9127{
9128 OnigCodePoint uc = ((OnigCodePoint)c);
9129 return (enc)->code_to_mbclen(uc,enc);
9130}
9131static inline int
9132rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc)
9133{
9134 OnigCodePoint uc = ((OnigCodePoint)c);
9135 OnigUChar *ubuf = ((OnigUChar *)buf);
9136 return (enc)->code_to_mbc(uc,ubuf,enc);
9137}
9138static inline char *
9139rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc)
9140{
9141 const OnigUChar *us = ((const OnigUChar *)s);
9142 const OnigUChar *up = ((const OnigUChar *)p);
9143 const OnigUChar *ue = ((const OnigUChar *)e);
9144 OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue);
9145 return ((char *)ur);
9146}
9147static inline char *
9148rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9149{
9150 const OnigUChar *us = ((const OnigUChar *)s);
9151 const OnigUChar *up = ((const OnigUChar *)p);
9152 const OnigUChar *ue = ((const OnigUChar *)e);
9153 OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue);
9154 return ((char *)ur);
9155}
9156static inline char *
9157rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9158{
9159 const OnigUChar *us = ((const OnigUChar *)s);
9160 const OnigUChar *up = ((const OnigUChar *)p);
9161 const OnigUChar *ue = ((const OnigUChar *)e);
9162 OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue);
9163 return ((char *)ur);
9164}
9165static inline char *
9166rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc)
9167{
9168 const OnigUChar *us = ((const OnigUChar *)s);
9169 const OnigUChar *up = ((const OnigUChar *)p);
9170 const OnigUChar *ue = ((const OnigUChar *)e);
9171 const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n);
9172 return ((char *)ur);
9173}
9174static inline int
9175rb_enc_asciicompat_inline(rb_encoding *enc)
9176{
9177 return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc);
9178}
9179static inline _Bool
9180rb_enc_asciicompat(rb_encoding *enc)
9181{
9182 if (rb_enc_mbminlen(enc) != 1) {
9183 return 0;
9184 }
9185 else if (rb_enc_dummy_p(enc)) {
9186 return 0;
9187 }
9188 else {
9189 return 1;
9190 }
9191}
9192static inline _Bool
9193rb_enc_str_asciicompat_p(VALUE str)
9194{
9195 rb_encoding *enc = rb_enc_get(str);
9196 return rb_enc_asciicompat(enc);
9197}
9198VALUE rb_enc_from_encoding(rb_encoding *enc);
9199__attribute__((__pure__))
9200int rb_enc_unicode_p(rb_encoding *enc);
9201__attribute__((__returns_nonnull__))
9202rb_encoding *rb_ascii8bit_encoding(void);
9203__attribute__((__returns_nonnull__))
9204rb_encoding *rb_utf8_encoding(void);
9205__attribute__((__returns_nonnull__))
9206rb_encoding *rb_usascii_encoding(void);
9207rb_encoding *rb_locale_encoding(void);
9208rb_encoding *rb_filesystem_encoding(void);
9209rb_encoding *rb_default_external_encoding(void);
9210rb_encoding *rb_default_internal_encoding(void);
9211__attribute__((__const__))
9212int rb_ascii8bit_encindex(void);
9213static inline _Bool
9214RB_ENCODING_IS_ASCII8BIT(VALUE obj)
9215{
9216 return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex();
9217}
9218__attribute__((__const__))
9219int rb_utf8_encindex(void);
9220__attribute__((__const__))
9221int rb_usascii_encindex(void);
9222int rb_locale_encindex(void);
9223int rb_filesystem_encindex(void);
9224VALUE rb_enc_default_external(void);
9225VALUE rb_enc_default_internal(void);
9226void rb_enc_set_default_external(VALUE encoding);
9227void rb_enc_set_default_internal(VALUE encoding);
9228VALUE rb_locale_charmap(VALUE klass);
9229
9230
9231
9232
9233static inline _Bool
9234rb_enc_is_newline(const char *p, const char *e, rb_encoding *enc)
9235{
9236 OnigUChar *up = ((OnigUChar *)p);
9237 OnigUChar *ue = ((OnigUChar *)e);
9238 return (enc)->is_mbc_newline((up),(ue),enc);
9239}
9240static inline _Bool
9241rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc)
9242{
9243 return (enc)->is_code_ctype(c,t,enc);
9244}
9245static inline _Bool
9246rb_enc_isascii(OnigCodePoint c, rb_encoding *enc)
9247{
9248 return ((c) < 128);
9249}
9250static inline _Bool
9251rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc)
9252{
9253 return (enc)->is_code_ctype(c,1,enc);
9254}
9255static inline _Bool
9256rb_enc_islower(OnigCodePoint c, rb_encoding *enc)
9257{
9258 return (enc)->is_code_ctype(c,6,enc);
9259}
9260static inline _Bool
9261rb_enc_isupper(OnigCodePoint c, rb_encoding *enc)
9262{
9263 return (enc)->is_code_ctype(c,10,enc);
9264}
9265static inline _Bool
9266rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc)
9267{
9268 return (enc)->is_code_ctype(c,8,enc);
9269}
9270static inline _Bool
9271rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc)
9272{
9273 return (enc)->is_code_ctype(c,13,enc);
9274}
9275static inline _Bool
9276rb_enc_isprint(OnigCodePoint c, rb_encoding *enc)
9277{
9278 return (enc)->is_code_ctype(c,7,enc);
9279}
9280static inline _Bool
9281rb_enc_isspace(OnigCodePoint c, rb_encoding *enc)
9282{
9283 return (enc)->is_code_ctype(c,9,enc);
9284}
9285static inline _Bool
9286rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc)
9287{
9288 return (enc)->is_code_ctype(c,4,enc);
9289}
9290__attribute__((__const__))
9291int rb_enc_toupper(int c, rb_encoding *enc);
9292__attribute__((__const__))
9293int rb_enc_tolower(int c, rb_encoding *enc);
9294
9295
9296
9297
9298__attribute__((__nonnull__ ()))
9299char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc);
9300__attribute__((__nonnull__ ()))
9301char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc);
9302__attribute__((__nonnull__ ()))
9303char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc);
9304__attribute__((__nonnull__ ()))
9305char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc);
9306__attribute__((__nonnull__ (1, 4)))
9307const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc);
9308__attribute__((__nonnull__ (1, 3)))
9309const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc);
9310
9311
9312
9313
9314VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts);
9315
9316
9317
9318
9319__attribute__((__nonnull__ (2)))
9320__attribute__((__format__(__printf__, 2, 3)))
9321VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...);
9322__attribute__((__nonnull__ (2)))
9323__attribute__((__format__(__printf__, 2, 0)))
9324VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap);
9325__attribute__((__noreturn__))
9326__attribute__((__nonnull__ (3)))
9327__attribute__((__format__(__printf__, 3, 4)))
9328void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...);
9329
9330
9331
9332
9333VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc);
9334__attribute__((__nonnull__ (1)))
9335VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc);
9336VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc);
9337VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc);
9338__attribute__((__nonnull__ (1)))
9339VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc);
9340long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc);
9341char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc);
9342VALUE rb_obj_encoding(VALUE obj);
9343VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);
9344VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc);
9345VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc);
9346VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc);
9347VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
9348VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
9349int rb_enc_str_coderange(VALUE str);
9350long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr);
9351int rb_enc_str_asciionly_p(VALUE str);
9352__attribute__((__nonnull__ ()))
9353long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc);
9354__attribute__((__nonnull__ ()))
9355static inline VALUE
9356rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc)
9357{
9358 long len = rbimpl_strlen(str);
9359 return rb_enc_str_new_static(str, len, enc);
9360}
9361
9362
9363
9364
9365ID rb_intern3(const char *name, long len, rb_encoding *enc);
9366__attribute__((__nonnull__ ()))
9367int rb_enc_symname_p(const char *str, rb_encoding *enc);
9368int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc);
9369ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc);
9370VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc);
9371
9372
9373
9374
9375typedef enum {
9376 econv_invalid_byte_sequence,
9377 econv_undefined_conversion,
9378 econv_destination_buffer_full,
9379 econv_source_buffer_empty,
9380 econv_finished,
9381 econv_after_output,
9382 econv_incomplete_input
9383} rb_econv_result_t;
9384typedef struct rb_econv_t rb_econv_t;
9385VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);
9386int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);
9387int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags);
9388int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);
9389rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);
9390rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);
9391rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
9392 const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
9393 unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
9394 int flags);
9395void rb_econv_close(rb_econv_t *ec);
9396int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);
9397int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);
9398int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);
9399VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);
9400int rb_econv_insert_output(rb_econv_t *ec,
9401 const unsigned char *str, size_t len, const char *str_encoding);
9402const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);
9403void rb_econv_check_error(rb_econv_t *ec);
9404VALUE rb_econv_make_exception(rb_econv_t *ec);
9405int rb_econv_putbackable(rb_econv_t *ec);
9406void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);
9407const char *rb_econv_asciicompat_encoding(const char *encname);
9408VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);
9409VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);
9410VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);
9411VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);
9412VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags);
9413void rb_econv_binmode(rb_econv_t *ec);
9414enum ruby_econv_flag_type {
9415 RUBY_ECONV_ERROR_HANDLER_MASK = 0x000000ff,
9416 RUBY_ECONV_INVALID_MASK = 0x0000000f,
9417 RUBY_ECONV_INVALID_REPLACE = 0x00000002,
9418 RUBY_ECONV_UNDEF_MASK = 0x000000f0,
9419 RUBY_ECONV_UNDEF_REPLACE = 0x00000020,
9420 RUBY_ECONV_UNDEF_HEX_CHARREF = 0x00000030,
9421 RUBY_ECONV_DECORATOR_MASK = 0x0000ff00,
9422 RUBY_ECONV_NEWLINE_DECORATOR_MASK = 0x00003f00,
9423 RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK = 0x00000f00,
9424 RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK = 0x00003000,
9425 RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR = 0x00000100,
9426 RUBY_ECONV_CRLF_NEWLINE_DECORATOR = 0x00001000,
9427 RUBY_ECONV_CR_NEWLINE_DECORATOR = 0x00002000,
9428 RUBY_ECONV_XML_TEXT_DECORATOR = 0x00004000,
9429 RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR = 0x00008000,
9430 RUBY_ECONV_STATEFUL_DECORATOR_MASK = 0x00f00000,
9431 RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR = 0x00100000,
9432 RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR =
9433 0,
9434 RUBY_ECONV_PARTIAL_INPUT = 0x00010000,
9435 RUBY_ECONV_AFTER_OUTPUT = 0x00020000,
9436 RUBY_ECONV_FLAGS_PLACEHOLDER
9437};
9438
9439
9440VALUE rb_fstring(VALUE);
9441VALUE rb_fstring_cstr(const char *str);
9442VALUE rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc);
9443int rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p);
9444int rb_str_symname_p(VALUE);
9445VALUE rb_str_quote_unprintable(VALUE);
9446char *rb_str_fill_terminator(VALUE str, const int termlen);
9447void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen);
9448VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
9449VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
9450VALUE rb_external_str_with_enc(VALUE str, rb_encoding *eenc);
9451VALUE rb_str_cat_conv_enc_opts(VALUE newstr, long ofs, const char *ptr, long len,
9452 rb_encoding *from, int ecflags, VALUE ecopts);
9453VALUE rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl);
9454VALUE rb_str_escape(VALUE str);
9455size_t rb_str_memsize(VALUE);
9456char *rb_str_to_cstr(VALUE str);
9457const char *ruby_escaped_char(int c);
9458void rb_str_make_independent(VALUE str);
9459int rb_enc_str_coderange_scan(VALUE str, rb_encoding *enc);
9460static inline _Bool STR_EMBED_P(VALUE str);
9461static inline _Bool STR_SHARED_P(VALUE str);
9462static inline VALUE QUOTE(VALUE v);
9463static inline VALUE QUOTE_ID(ID v);
9464static inline _Bool is_ascii_string(VALUE str);
9465static inline _Bool is_broken_string(VALUE str);
9466static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2);
9467
9468
9469VALUE rb_str_tmp_frozen_acquire(VALUE str);
9470void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
9471VALUE rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encoding *enc);
9472VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE);
9473VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE);
9474
9475
9476
9477
9478VALUE rb_fstring_new(const char *ptr, long len);
9479VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
9480VALUE rb_str_opt_plus(VALUE x, VALUE y);
9481VALUE rb_str_concat_literals(size_t num, const VALUE *strary);
9482VALUE rb_str_eql(VALUE str1, VALUE str2);
9483VALUE rb_id_quote_unprintable(ID);
9484VALUE rb_sym_proc_call(ID mid, int argc, const VALUE *argv, int kw_splat, VALUE passed_proc);
9485struct rb_execution_context_struct;
9486VALUE rb_ec_str_resurrect(struct rb_execution_context_struct *ec, VALUE str);
9487
9488
9489static inline VALUE
9490QUOTE(VALUE v)
9491{
9492 return rb_str_quote_unprintable(v);
9493}
9494static inline VALUE
9495QUOTE_ID(ID i)
9496{
9497 return rb_id_quote_unprintable(i);
9498}
9499static inline _Bool
9500STR_EMBED_P(VALUE str)
9501{
9502 return ! RB_FL_TEST_RAW(str, ((VALUE)RUBY_FL_USER1));
9503}
9504static inline _Bool
9505STR_SHARED_P(VALUE str)
9506{
9507 return RB_FL_ALL_RAW(str, ((VALUE)RUBY_FL_USER1) | RUBY_ELTS_SHARED);
9508}
9509static inline _Bool
9510is_ascii_string(VALUE str)
9511{
9512 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_7BIT;
9513}
9514static inline _Bool
9515is_broken_string(VALUE str)
9516{
9517 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_BROKEN;
9518}
9519static inline VALUE
9520rb_str_eql_internal(const VALUE str1, const VALUE str2)
9521{
9522 const long len = RSTRING_LEN(str1);
9523 const char *ptr1, *ptr2;
9524 if (len != RSTRING_LEN(str2)) return ((VALUE)RUBY_Qfalse);
9525 if (!rb_str_comparable(str1, str2)) return ((VALUE)RUBY_Qfalse);
9526 if ((ptr1 = RSTRING_PTR(str1)) == (ptr2 = RSTRING_PTR(str2)))
9527 return ((VALUE)RUBY_Qtrue);
9528 if (memcmp(ptr1, ptr2, len) == 0)
9529 return ((VALUE)RUBY_Qtrue);
9530 return ((VALUE)RUBY_Qfalse);
9531}
9532extern long rb_backtrace_length_limit;
9533extern VALUE rb_eEAGAIN;
9534extern VALUE rb_eEWOULDBLOCK;
9535extern VALUE rb_eEINPROGRESS;
9536__attribute__((__format__(__printf__, 3, 0)))
9537void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
9538__attribute__((__noreturn__)) void rb_async_bug_errno(const char *,int);
9539const char *rb_builtin_type_name(int t);
9540const char *rb_builtin_class_name(VALUE x);
9541__attribute__((__format__(__printf__, (1), (3)))) void rb_warn_deprecated(const char *fmt, const char *suggest, ...);
9542__attribute__((__format__(__printf__, (2), (4)))) void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...);
9543__attribute__((__format__(__printf__, 6, 0)))
9544VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
9545__attribute__((__format__(__printf__, (2), (3)))) void rb_enc_warn(rb_encoding *enc, const char *fmt, ...);
9546__attribute__((__format__(__printf__, (2), (3)))) void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...);
9547__attribute__((__format__(__printf__, (3), (4)))) void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...);
9548rb_warning_category_t rb_warning_category_from_name(VALUE category);
9549_Bool rb_warning_category_enabled_p(rb_warning_category_t category);
9550VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
9551VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int priv);
9552VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
9553__attribute__((__format__(__printf__, (1), (2)))) VALUE rb_warning_string(const char *fmt, ...);
9554__attribute__((__format__(__printf__, 2, 0)))
9555__attribute__((__noreturn__)) void rb_vraise(VALUE, const char *, va_list);
9556__attribute__((__noreturn__)) static inline void rb_raise_cstr(VALUE etype, const char *mesg);
9557__attribute__((__noreturn__)) static inline void rb_raise_cstr_i(VALUE etype, VALUE mesg);
9558__attribute__((__noreturn__)) static inline void rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name);
9559__attribute__((__noreturn__)) static inline void rb_name_err_raise(const char *mesg, VALUE recv, VALUE name);
9560__attribute__((__noreturn__)) static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name);
9561static inline void Check_Type(VALUE v, enum ruby_value_type t);
9562static inline _Bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
9563
9564
9565int rb_bug_reporter_add(void (*func)(FILE *, void *), void *data);
9566__attribute__((__noreturn__)) void rb_sys_fail_path_in(const char *func_name, VALUE path);
9567__attribute__((__noreturn__)) void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path);
9568VALUE rb_syserr_new_path_in(const char *func_name, int n, VALUE path);
9569
9570
9571static inline void
9572rb_raise_cstr_i(VALUE etype, VALUE mesg)
9573{
9574 VALUE exc = rb_exc_new_str(etype, mesg);
9575 rb_exc_raise(exc);
9576}
9577static inline void
9578rb_raise_cstr(VALUE etype, const char *mesg)
9579{
9580 VALUE str = ((__builtin_constant_p(mesg) ? rbimpl_str_new_cstr : rb_str_new_cstr) (mesg));
9581 rb_raise_cstr_i(etype, str);
9582}
9583static inline void
9584rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name)
9585{
9586 VALUE exc = rb_name_err_new(mesg, recv, name);
9587 rb_exc_raise(exc);
9588}
9589static inline void
9590rb_name_err_raise(const char *mesg, VALUE recv, VALUE name)
9591{
9592 VALUE str = (__builtin_constant_p(mesg) ? rb_fstring_new((mesg), (long)strlen(mesg)) : (rb_fstring_cstr)(mesg));
9593 rb_name_err_raise_str(str, recv, name);
9594}
9595static inline void
9596rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
9597{
9598 VALUE exc = rb_key_err_new(mesg, recv, name);
9599 rb_exc_raise(exc);
9600}
9601static inline _Bool
9602rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type)
9603{
9604 return RB_TYPE_P(obj, RUBY_T_DATA) && RTYPEDDATA_P(obj) && (RTYPEDDATA_TYPE(obj) == data_type);
9605}
9606extern ID ruby_static_id_signo;
9607extern ID ruby_static_id_status;
9608VALUE rb_refinement_module_get_refined_class(VALUE module);
9609void rb_class_modify_check(VALUE);
9610__attribute__((__noreturn__)) VALUE rb_f_raise(int argc, VALUE *argv);
9611VALUE rb_get_backtrace(VALUE info);
9612void rb_call_end_proc(VALUE data);
9613void rb_mark_end_proc(void);
9614void Init_class_hierarchy(void);
9615void Init_enc(void);
9616void Init_ext(void);
9617void Init_File(void);
9618void Init_heap(void);
9619int Init_enc_set_filesystem_encoding(void);
9620void Init_newline(void);
9621void Init_BareVM(void);
9622void Init_vm_objects(void);
9623void Init_vm_backtrace(void);
9624void Init_vm_eval(void);static inline
9625void Init_vm_stack_canary(void);
9626void Init_eval_method(void);
9627void rb_call_inits(void);
9628struct rb_id_table;
9629enum rb_id_table_iterator_result {
9630 ID_TABLE_CONTINUE = ST_CONTINUE,
9631 ID_TABLE_STOP = ST_STOP,
9632 ID_TABLE_DELETE = ST_DELETE,
9633 ID_TABLE_REPLACE = ST_REPLACE,
9634 ID_TABLE_ITERATOR_RESULT_END
9635};
9636struct rb_id_table *rb_id_table_create(size_t size);
9637void rb_id_table_free(struct rb_id_table *tbl);
9638void rb_id_table_clear(struct rb_id_table *tbl);
9639size_t rb_id_table_size(const struct rb_id_table *tbl);
9640size_t rb_id_table_memsize(const struct rb_id_table *tbl);
9641int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val);
9642int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp);
9643int rb_id_table_delete(struct rb_id_table *tbl, ID id);
9644typedef enum rb_id_table_iterator_result rb_id_table_update_callback_func_t(ID *id, VALUE *val, void *data, int existing);
9645typedef enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data);
9646typedef enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data);
9647void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data);
9648void rb_id_table_foreach_with_replace(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, rb_id_table_update_callback_func_t *replace, void *data);
9649void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data);
9650struct rb_subclass_entry {
9651 VALUE klass;
9652 struct rb_subclass_entry *next;
9653 struct rb_subclass_entry *prev;
9654};
9655struct rb_iv_index_tbl_entry {
9656 uint32_t index;
9657 rb_serial_t class_serial;
9658 VALUE class_value;
9659};
9660struct rb_cvar_class_tbl_entry {
9661 uint32_t index;
9662 rb_serial_t global_cvar_state;
9663 VALUE class_value;
9664};
9665struct rb_classext_struct {
9666 struct st_table *iv_index_tbl;
9667 struct st_table *iv_tbl;
9668 struct rb_id_table *m_tbl;
9669 struct rb_id_table *const_tbl;
9670 struct rb_id_table *callable_m_tbl;
9671 struct rb_id_table *cc_tbl;
9672 struct rb_id_table *cvc_tbl;
9673 struct rb_subclass_entry *subclasses;
9674 struct rb_subclass_entry *subclass_entry;
9675 struct rb_subclass_entry *module_subclass_entry;
9676 const VALUE origin_;
9677 const VALUE refined_class;
9678 rb_alloc_func_t allocator;
9679 const VALUE includer;
9680};
9681struct RClass {
9682 struct RBasic basic;
9683 VALUE super;
9684 struct rb_classext_struct *ptr;
9685 rb_serial_t class_serial;
9686};
9687typedef struct rb_subclass_entry rb_subclass_entry_t;
9688typedef struct rb_classext_struct rb_classext_t;
9689void rb_class_subclass_add(VALUE super, VALUE klass);
9690void rb_class_remove_from_super_subclasses(VALUE);
9691void rb_class_remove_subclass_head(VALUE);
9692int rb_singleton_class_internal_p(VALUE sklass);
9693VALUE rb_class_boot(VALUE);
9694VALUE rb_class_s_alloc(VALUE klass);
9695VALUE rb_module_s_alloc(VALUE klass);
9696void rb_module_set_initialized(VALUE module);
9697void rb_module_check_initializable(VALUE module);
9698VALUE rb_make_metaclass(VALUE, VALUE);
9699VALUE rb_include_class_new(VALUE, VALUE);
9700void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
9701void rb_class_detach_subclasses(VALUE);
9702void rb_class_detach_module_subclasses(VALUE);
9703void rb_class_remove_from_module_subclasses(VALUE);
9704VALUE rb_obj_methods(int argc, const VALUE *argv, VALUE obj);
9705VALUE rb_obj_protected_methods(int argc, const VALUE *argv, VALUE obj);
9706VALUE rb_obj_private_methods(int argc, const VALUE *argv, VALUE obj);
9707VALUE rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj);
9708VALUE rb_special_singleton_class(VALUE);
9709VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach);
9710VALUE rb_singleton_class_get(VALUE obj);
9711void rb_undef_methods_from(VALUE klass, VALUE super);
9712static inline void RCLASS_SET_ORIGIN(VALUE klass, VALUE origin);
9713static inline void RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass);
9714static inline VALUE RCLASS_SUPER(VALUE klass);
9715static inline VALUE RCLASS_SET_SUPER(VALUE klass, VALUE super);
9716static inline void RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass);
9717
9718
9719VALUE rb_class_inherited(VALUE, VALUE);
9720VALUE rb_keyword_error_new(const char *, VALUE);
9721
9722
9723static inline void
9724RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
9725{
9726 rb_obj_write((VALUE)(klass), __extension__({
9727 ;
9728 ; __typeof__((VALUE *)(&((((struct RClass *)(klass))->ptr)->origin_))) unaligned_member_access_result = ((VALUE *)(&((((struct RClass *)(klass))->ptr)->origin_)));
9729 ; unaligned_member_access_result; }), (VALUE)(origin), "../ruby-3.1.3/internal/class.h", 157);
9730 if (klass != origin) RB_FL_SET(origin, ((VALUE)RUBY_FL_USER5));
9731}
9732static inline void
9733RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass)
9734{
9735 RB_FL_SET(iclass, ((VALUE)RUBY_FL_USER8));
9736}
9737static inline _Bool
9738RICLASS_OWNS_M_TBL_P(VALUE iclass)
9739{
9740 return RB_FL_TEST_RAW(iclass, ((VALUE)RUBY_FL_USER5) | ((VALUE)RUBY_FL_USER8)) == ((VALUE)RUBY_FL_USER5);
9741}
9742static inline void
9743RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass)
9744{
9745 rb_obj_write((VALUE)(iclass), __extension__({
9746 ;
9747 ; __typeof__((VALUE *)(&((((struct RClass *)(iclass))->ptr)->includer))) unaligned_member_access_result = ((VALUE *)(&((((struct RClass *)(iclass))->ptr)->includer)));
9748 ; unaligned_member_access_result; }), (VALUE)(klass), "../ruby-3.1.3/internal/class.h", 176);
9749}
9750static inline VALUE
9751RCLASS_SUPER(VALUE klass)
9752{
9753 return ((struct RClass *)(klass))->super;
9754}
9755static inline VALUE
9756RCLASS_SET_SUPER(VALUE klass, VALUE super)
9757{
9758 if (super) {
9759 rb_class_remove_from_super_subclasses(klass);
9760 rb_class_subclass_add(super, klass);
9761 }
9762 rb_obj_write((VALUE)(klass), __extension__({
9763 ;
9764 ; __typeof__((VALUE *)(&((struct RClass *)(klass))->super)) unaligned_member_access_result = ((VALUE *)(&((struct RClass *)(klass))->super));
9765 ; unaligned_member_access_result; }), (VALUE)(super), "../ruby-3.1.3/internal/class.h", 192);
9766 return super;
9767}
9768VALUE rb_class_search_ancestor(VALUE klass, VALUE super);
9769__attribute__((__noreturn__)) void rb_undefined_alloc(VALUE klass);
9770double rb_num_to_dbl(VALUE val);
9771VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound);
9772VALUE rb_immutable_obj_clone(int, VALUE *, VALUE);
9773VALUE rb_check_convert_type_with_id(VALUE,int,const char*,ID);
9774int rb_bool_expected(VALUE, const char *);
9775static inline void RBASIC_CLEAR_CLASS(VALUE obj);
9776static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass);
9777static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass);
9778static inline struct st_table *ROBJECT_IV_INDEX_TBL_inline(VALUE obj);
9779
9780
9781int rb_opts_exception_p(VALUE opts, int default_value);
9782
9783
9784
9785
9786__attribute__((__const__)) VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
9787__attribute__((__const__)) VALUE rb_obj_not(VALUE obj);
9788VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
9789void rb_obj_copy_ivar(VALUE dest, VALUE obj);
9790VALUE rb_false(VALUE obj);
9791VALUE rb_convert_type_with_id(VALUE v, int t, const char* nam, ID mid);
9792VALUE rb_obj_size(VALUE self, VALUE args, VALUE obj);
9793VALUE rb_get_freeze_opt(int argc, VALUE *argv);
9794
9795
9796static inline void
9797RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass)
9798{
9799 const VALUE *ptr = &((struct RBasic *)(obj))->klass;
9800 *(VALUE *)ptr = klass;
9801}
9802static inline void
9803RBASIC_CLEAR_CLASS(VALUE obj)
9804{
9805 RBASIC_SET_CLASS_RAW(obj, 0);
9806}
9807static inline void
9808RBASIC_SET_CLASS(VALUE obj, VALUE klass)
9809{
9810 VALUE oldv = RBASIC_CLASS(obj);
9811 RBASIC_SET_CLASS_RAW(obj, klass);
9812 (rb_obj_written((VALUE)(obj), (VALUE)(oldv), (VALUE)(klass), "../ruby-3.1.3/internal/object.h", 65));
9813}
9814__attribute__((__pure__))
9815static inline struct st_table *
9816ROBJECT_IV_INDEX_TBL_inline(VALUE obj)
9817{
9818 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
9819 VALUE klass = rb_obj_class(obj);
9820 return ((((struct RClass *)(klass))->ptr)->iv_index_tbl);
9821 }
9822 else {
9823 const struct RObject *const ptr = ((struct RObject *)(obj));
9824 return ptr->as.heap.iv_index_tbl;
9825 }
9826}
9827struct rb_iseq_struct;
9828VALUE rb_parser_set_yydebug(VALUE, VALUE);
9829void *rb_parser_load_file(VALUE parser, VALUE name);
9830void rb_parser_keep_script_lines(VALUE vparser);
9831
9832
9833VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
9834
9835
9836struct rb_block;
9837struct rb_iseq_struct;
9838VALUE rb_proc_location(VALUE self);
9839st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
9840int rb_block_pair_yield_optimizable(void);
9841int rb_block_arity(void);
9842int rb_block_min_max_arity(int *max);
9843VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additional_info);
9844VALUE rb_callable_receiver(VALUE);
9845
9846
9847VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
9848VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
9849VALUE rb_iseq_location(const struct rb_iseq_struct *iseq);
9850VALUE rb_sym_to_proc(VALUE sym);
9851
9852
9853VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
9854VALUE rb_reg_check_preprocess(VALUE);
9855long rb_reg_search0(VALUE, VALUE, long, int, int);
9856VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
9857_Bool rb_reg_start_with_p(VALUE re, VALUE str);
9858VALUE rb_reg_hash(VALUE re);
9859VALUE rb_reg_equal(VALUE re1, VALUE re2);
9860void rb_backref_set_string(VALUE string, long pos, long len);
9861void rb_match_unbusy(VALUE);
9862int rb_match_count(VALUE match);
9863int rb_match_nth_defined(int nth, VALUE match);
9864
9865
9866VALUE rb_reg_new_ary(VALUE ary, int options);
9867
9868
9869VALUE rb_to_symbol_type(VALUE obj);
9870VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc);
9871VALUE rb_sym_intern_ascii(const char *ptr, long len);
9872VALUE rb_sym_intern_ascii_cstr(const char *ptr);
9873int rb_is_const_name(VALUE name);
9874int rb_is_class_name(VALUE name);
9875int rb_is_instance_name(VALUE name);
9876int rb_is_local_name(VALUE name);
9877__attribute__((__pure__)) int rb_is_const_sym(VALUE sym);
9878__attribute__((__pure__)) int rb_is_attrset_sym(VALUE sym);
9879ID rb_make_internal_id(void);
9880ID rb_make_temporary_id(size_t n);
9881void rb_gc_free_dsymbol(VALUE);
9882struct rb_thread_struct;
9883VALUE rb_obj_is_mutex(VALUE obj);
9884VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg);
9885void rb_thread_execute_interrupts(VALUE th);
9886VALUE rb_get_coverages(void);
9887int rb_get_coverage_mode(void);
9888VALUE rb_default_coverage(int);
9889VALUE rb_thread_shield_new(void);
9890VALUE rb_thread_shield_wait(VALUE self);
9891VALUE rb_thread_shield_release(VALUE self);
9892VALUE rb_thread_shield_destroy(VALUE self);
9893int rb_thread_to_be_killed(VALUE thread);
9894void rb_mutex_allow_trap(VALUE self, int val);
9895VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data);
9896VALUE rb_mutex_owned_p(VALUE self);
9897int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout);
9898
9899
9900VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
9901int ruby_thread_has_gvl_p(void);
9902
9903
9904
9905
9906int rb_threadptr_execute_interrupts(struct rb_thread_struct *th, int blocking_timing);
9907
9908
9909extern const int ruby_api_version[];
9910extern const ID rb_iseq_shared_exc_local_tbl[];
9911static inline rb_snum_t
9912ISEQ_FLIP_CNT_INCREMENT(const rb_iseq_t *iseq)
9913{
9914 rb_snum_t cnt = iseq->body->variable.flip_count;
9915 iseq->body->variable.flip_count += 1;
9916 return cnt;
9917}
9918static inline VALUE *
9919ISEQ_ORIGINAL_ISEQ(const rb_iseq_t *iseq)
9920{
9921 return iseq->body->variable.original_iseq;
9922}
9923static inline void
9924ISEQ_ORIGINAL_ISEQ_CLEAR(const rb_iseq_t *iseq)
9925{
9926 void *ptr = iseq->body->variable.original_iseq;
9927 iseq->body->variable.original_iseq = ((void *)0);
9928 if (ptr) {
9929 ruby_xfree(ptr);
9930 }
9931}
9932static inline VALUE *
9933ISEQ_ORIGINAL_ISEQ_ALLOC(const rb_iseq_t *iseq, long size)
9934{
9935 return iseq->body->variable.original_iseq =
9936 ((VALUE *)ruby_xmalloc2((size), sizeof(VALUE)));
9937}
9938struct iseq_compile_data {
9939 const VALUE err_info;
9940 const VALUE catch_table_ary;
9941 struct iseq_label_data *start_label;
9942 struct iseq_label_data *end_label;
9943 struct iseq_label_data *redo_label;
9944 const rb_iseq_t *current_block;
9945 struct iseq_compile_data_ensure_node_stack *ensure_node_stack;
9946 struct {
9947 struct iseq_compile_data_storage *storage_head;
9948 struct iseq_compile_data_storage *storage_current;
9949 } node;
9950 struct {
9951 struct iseq_compile_data_storage *storage_head;
9952 struct iseq_compile_data_storage *storage_current;
9953 } insn;
9954 _Bool in_rescue;
9955 int loopval_popped;
9956 int last_line;
9957 int label_no;
9958 int node_level;
9959 int isolated_depth;
9960 unsigned int ci_index;
9961 const rb_compile_option_t *option;
9962 struct rb_id_table *ivar_cache_table;
9963 const struct rb_builtin_function *builtin_function_table;
9964 const NODE *root_node;
9965};
9966static inline struct iseq_compile_data *
9967ISEQ_COMPILE_DATA(const rb_iseq_t *iseq)
9968{
9969 if (iseq->flags & ((VALUE)RUBY_FL_USER6)) {
9970 return iseq->aux.compile_data;
9971 }
9972 else {
9973 return ((void *)0);
9974 }
9975}
9976static inline void
9977ISEQ_COMPILE_DATA_ALLOC(rb_iseq_t *iseq)
9978{
9979 iseq->aux.compile_data = (((struct iseq_compile_data *)ruby_xcalloc((1), sizeof(struct iseq_compile_data))));
9980 iseq->flags |= ((VALUE)RUBY_FL_USER6);
9981}
9982static inline void
9983ISEQ_COMPILE_DATA_CLEAR(rb_iseq_t *iseq)
9984{
9985 iseq->flags &= ~((VALUE)RUBY_FL_USER6);
9986 iseq->aux.compile_data = ((void *)0);
9987}
9988static inline rb_iseq_t *
9989iseq_imemo_alloc(void)
9990{
9991 return (rb_iseq_t *)rb_imemo_new(imemo_iseq, 0, 0, 0, 0);
9992}
9993VALUE rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
9994void rb_ibf_load_iseq_complete(rb_iseq_t *iseq);
9995const rb_iseq_t *rb_iseq_ibf_load(VALUE str);
9996const rb_iseq_t *rb_iseq_ibf_load_bytes(const char *cstr, size_t);
9997VALUE rb_iseq_ibf_load_extra_data(VALUE str);
9998void rb_iseq_init_trace(rb_iseq_t *iseq);
9999int rb_iseq_add_local_tracepoint_recursively(const rb_iseq_t *iseq, rb_event_flag_t turnon_events, VALUE tpval, unsigned int target_line, _Bool target_bmethod);
10000int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval);
10001const rb_iseq_t *rb_iseq_load_iseq(VALUE fname);
10002unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
10003int rb_vm_insn_addr2opcode(const void *addr);
10004
10005
10006VALUE rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node);
10007VALUE rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc);
10008VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
10009void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
10010 VALUE locals, VALUE args,
10011 VALUE exception, VALUE body);
10012void rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *arena);
10013VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
10014VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
10015unsigned int rb_iseq_line_no(const rb_iseq_t *iseq, size_t pos);
10016int rb_iseq_node_id(const rb_iseq_t *iseq, size_t pos);
10017void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
10018void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
10019void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
10020struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
10021VALUE rb_iseqw_new(const rb_iseq_t *iseq);
10022const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
10023VALUE rb_iseq_absolute_path(const rb_iseq_t *iseq);
10024int rb_iseq_from_eval_p(const rb_iseq_t *iseq);
10025VALUE rb_iseq_type(const rb_iseq_t *iseq);
10026VALUE rb_iseq_label(const rb_iseq_t *iseq);
10027VALUE rb_iseq_base_label(const rb_iseq_t *iseq);
10028VALUE rb_iseq_first_lineno(const rb_iseq_t *iseq);
10029VALUE rb_iseq_method_name(const rb_iseq_t *iseq);
10030void rb_iseq_code_location(const rb_iseq_t *iseq, int *first_lineno, int *first_column, int *last_lineno, int *last_column);
10031void rb_iseq_remove_coverage_all(void);
10032const rb_iseq_t *rb_method_iseq(VALUE body);
10033const rb_iseq_t *rb_proc_get_iseq(VALUE proc, int *is_proc);
10034struct rb_compile_option_struct {
10035 unsigned int inline_const_cache: 1;
10036 unsigned int peephole_optimization: 1;
10037 unsigned int tailcall_optimization: 1;
10038 unsigned int specialized_instruction: 1;
10039 unsigned int operands_unification: 1;
10040 unsigned int instructions_unification: 1;
10041 unsigned int stack_caching: 1;
10042 unsigned int frozen_string_literal: 1;
10043 unsigned int debug_frozen_string_literal: 1;
10044 unsigned int coverage_enabled: 1;
10045 int debug_level;
10046};
10047struct iseq_insn_info_entry {
10048 int line_no;
10049 int node_id;
10050 rb_event_flag_t events;
10051};
10052struct iseq_catch_table_entry {
10053 enum catch_type {
10054 CATCH_TYPE_RESCUE = __builtin_choose_expr( __builtin_constant_p(1), ((VALUE)(1)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(1)),
10055 CATCH_TYPE_ENSURE = __builtin_choose_expr( __builtin_constant_p(2), ((VALUE)(2)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(2)),
10056 CATCH_TYPE_RETRY = __builtin_choose_expr( __builtin_constant_p(3), ((VALUE)(3)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(3)),
10057 CATCH_TYPE_BREAK = __builtin_choose_expr( __builtin_constant_p(4), ((VALUE)(4)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(4)),
10058 CATCH_TYPE_REDO = __builtin_choose_expr( __builtin_constant_p(5), ((VALUE)(5)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(5)),
10059 CATCH_TYPE_NEXT = __builtin_choose_expr( __builtin_constant_p(6), ((VALUE)(6)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(6))
10060 } type;
10061 rb_iseq_t *iseq;
10062 unsigned int start;
10063 unsigned int end;
10064 unsigned int cont;
10065 unsigned int sp;
10066};
10067struct iseq_catch_table { unsigned int size; struct iseq_catch_table_entry entries[]; } __attribute__((packed));
10068static inline int
10069iseq_catch_table_bytes(int n)
10070{
10071 enum {
10072 catch_table_entry_size = sizeof(struct iseq_catch_table_entry),
10073 catch_table_entries_max = (0x7fffffff - __builtin_offsetof (struct iseq_catch_table, entries)) / catch_table_entry_size
10074 };
10075 if (n > catch_table_entries_max) rb_fatal("too large iseq_catch_table - %d", n);
10076 return (int)(__builtin_offsetof (struct iseq_catch_table, entries) +
10077 n * catch_table_entry_size);
10078}
10079struct iseq_compile_data_storage {
10080 struct iseq_compile_data_storage *next;
10081 unsigned int pos;
10082 unsigned int size;
10083 char buff[];
10084};
10085enum defined_type {
10086 DEFINED_NOT_DEFINED,
10087 DEFINED_NIL = 1,
10088 DEFINED_IVAR,
10089 DEFINED_LVAR,
10090 DEFINED_GVAR,
10091 DEFINED_CVAR,
10092 DEFINED_CONST,
10093 DEFINED_METHOD,
10094 DEFINED_YIELD,
10095 DEFINED_ZSUPER,
10096 DEFINED_SELF,
10097 DEFINED_TRUE,
10098 DEFINED_FALSE,
10099 DEFINED_ASGN,
10100 DEFINED_EXPR,
10101 DEFINED_REF,
10102 DEFINED_FUNC,
10103 DEFINED_CONST_FROM
10104};
10105VALUE rb_iseq_defined_string(enum defined_type type);
10106VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
10107
10108
10109enum rb_debug_counter_type {
10110RB_DEBUG_COUNTER_mc_inline_hit,
10111RB_DEBUG_COUNTER_mc_inline_miss_klass,
10112RB_DEBUG_COUNTER_mc_inline_miss_invalidated,
10113RB_DEBUG_COUNTER_mc_inline_miss_empty,
10114RB_DEBUG_COUNTER_mc_inline_miss_same_cc,
10115RB_DEBUG_COUNTER_mc_inline_miss_same_cme,
10116RB_DEBUG_COUNTER_mc_inline_miss_same_def,
10117RB_DEBUG_COUNTER_mc_inline_miss_diff,
10118RB_DEBUG_COUNTER_cvar_write_inline_hit,
10119RB_DEBUG_COUNTER_cvar_read_inline_hit,
10120RB_DEBUG_COUNTER_cvar_inline_miss,
10121RB_DEBUG_COUNTER_cvar_class_invalidate,
10122RB_DEBUG_COUNTER_cvar_include_invalidate,
10123RB_DEBUG_COUNTER_mc_cme_complement,
10124RB_DEBUG_COUNTER_mc_cme_complement_hit,
10125RB_DEBUG_COUNTER_mc_search,
10126RB_DEBUG_COUNTER_mc_search_notfound,
10127RB_DEBUG_COUNTER_mc_search_super,
10128RB_DEBUG_COUNTER_ci_packed,
10129RB_DEBUG_COUNTER_ci_kw,
10130RB_DEBUG_COUNTER_ci_nokw,
10131RB_DEBUG_COUNTER_ci_runtime,
10132RB_DEBUG_COUNTER_cc_new,
10133RB_DEBUG_COUNTER_cc_temp,
10134RB_DEBUG_COUNTER_cc_found_in_ccs,
10135RB_DEBUG_COUNTER_cc_not_found_in_ccs,
10136RB_DEBUG_COUNTER_cc_ent_invalidate,
10137RB_DEBUG_COUNTER_cc_cme_invalidate,
10138RB_DEBUG_COUNTER_cc_invalidate_leaf,
10139RB_DEBUG_COUNTER_cc_invalidate_leaf_ccs,
10140RB_DEBUG_COUNTER_cc_invalidate_leaf_callable,
10141RB_DEBUG_COUNTER_cc_invalidate_tree,
10142RB_DEBUG_COUNTER_cc_invalidate_tree_cme,
10143RB_DEBUG_COUNTER_cc_invalidate_tree_callable,
10144RB_DEBUG_COUNTER_cc_invalidate_negative,
10145RB_DEBUG_COUNTER_ccs_free,
10146RB_DEBUG_COUNTER_ccs_maxlen,
10147RB_DEBUG_COUNTER_ccs_found,
10148RB_DEBUG_COUNTER_ccs_not_found,
10149RB_DEBUG_COUNTER_call0_public,
10150RB_DEBUG_COUNTER_call0_other,
10151RB_DEBUG_COUNTER_gccct_hit,
10152RB_DEBUG_COUNTER_gccct_miss,
10153RB_DEBUG_COUNTER_gccct_null,
10154RB_DEBUG_COUNTER_iseq_num,
10155RB_DEBUG_COUNTER_iseq_cd_num,
10156RB_DEBUG_COUNTER_ccf_general,
10157RB_DEBUG_COUNTER_ccf_iseq_setup,
10158RB_DEBUG_COUNTER_ccf_iseq_setup_0start,
10159RB_DEBUG_COUNTER_ccf_iseq_setup_tailcall_0start,
10160RB_DEBUG_COUNTER_ccf_iseq_fix,
10161RB_DEBUG_COUNTER_ccf_iseq_opt,
10162RB_DEBUG_COUNTER_ccf_iseq_kw1,
10163RB_DEBUG_COUNTER_ccf_iseq_kw2,
10164RB_DEBUG_COUNTER_ccf_cfunc,
10165RB_DEBUG_COUNTER_ccf_cfunc_with_frame,
10166RB_DEBUG_COUNTER_ccf_ivar,
10167RB_DEBUG_COUNTER_ccf_attrset,
10168RB_DEBUG_COUNTER_ccf_method_missing,
10169RB_DEBUG_COUNTER_ccf_zsuper,
10170RB_DEBUG_COUNTER_ccf_bmethod,
10171RB_DEBUG_COUNTER_ccf_opt_send,
10172RB_DEBUG_COUNTER_ccf_opt_call,
10173RB_DEBUG_COUNTER_ccf_opt_block_call,
10174RB_DEBUG_COUNTER_ccf_opt_struct_aref,
10175RB_DEBUG_COUNTER_ccf_opt_struct_aset,
10176RB_DEBUG_COUNTER_ccf_super_method,
10177RB_DEBUG_COUNTER_frame_push,
10178RB_DEBUG_COUNTER_frame_push_method,
10179RB_DEBUG_COUNTER_frame_push_block,
10180RB_DEBUG_COUNTER_frame_push_class,
10181RB_DEBUG_COUNTER_frame_push_top,
10182RB_DEBUG_COUNTER_frame_push_cfunc,
10183RB_DEBUG_COUNTER_frame_push_ifunc,
10184RB_DEBUG_COUNTER_frame_push_eval,
10185RB_DEBUG_COUNTER_frame_push_rescue,
10186RB_DEBUG_COUNTER_frame_push_dummy,
10187RB_DEBUG_COUNTER_frame_R2R,
10188RB_DEBUG_COUNTER_frame_R2C,
10189RB_DEBUG_COUNTER_frame_C2C,
10190RB_DEBUG_COUNTER_frame_C2R,
10191RB_DEBUG_COUNTER_ivar_get_ic_hit,
10192RB_DEBUG_COUNTER_ivar_get_ic_miss,
10193RB_DEBUG_COUNTER_ivar_get_ic_miss_serial,
10194RB_DEBUG_COUNTER_ivar_get_ic_miss_unset,
10195RB_DEBUG_COUNTER_ivar_get_ic_miss_noobject,
10196RB_DEBUG_COUNTER_ivar_set_ic_hit,
10197RB_DEBUG_COUNTER_ivar_set_ic_miss,
10198RB_DEBUG_COUNTER_ivar_set_ic_miss_serial,
10199RB_DEBUG_COUNTER_ivar_set_ic_miss_unset,
10200RB_DEBUG_COUNTER_ivar_set_ic_miss_iv_hit,
10201RB_DEBUG_COUNTER_ivar_set_ic_miss_noobject,
10202RB_DEBUG_COUNTER_ivar_get_base,
10203RB_DEBUG_COUNTER_ivar_set_base,
10204RB_DEBUG_COUNTER_lvar_get,
10205RB_DEBUG_COUNTER_lvar_get_dynamic,
10206RB_DEBUG_COUNTER_lvar_set,
10207RB_DEBUG_COUNTER_lvar_set_dynamic,
10208RB_DEBUG_COUNTER_lvar_set_slowpath,
10209RB_DEBUG_COUNTER_gc_count,
10210RB_DEBUG_COUNTER_gc_minor_newobj,
10211RB_DEBUG_COUNTER_gc_minor_malloc,
10212RB_DEBUG_COUNTER_gc_minor_method,
10213RB_DEBUG_COUNTER_gc_minor_capi,
10214RB_DEBUG_COUNTER_gc_minor_stress,
10215RB_DEBUG_COUNTER_gc_major_nofree,
10216RB_DEBUG_COUNTER_gc_major_oldgen,
10217RB_DEBUG_COUNTER_gc_major_shady,
10218RB_DEBUG_COUNTER_gc_major_force,
10219RB_DEBUG_COUNTER_gc_major_oldmalloc,
10220RB_DEBUG_COUNTER_gc_enter_start,
10221RB_DEBUG_COUNTER_gc_enter_mark_continue,
10222RB_DEBUG_COUNTER_gc_enter_sweep_continue,
10223RB_DEBUG_COUNTER_gc_enter_rest,
10224RB_DEBUG_COUNTER_gc_enter_finalizer,
10225RB_DEBUG_COUNTER_gc_isptr_trial,
10226RB_DEBUG_COUNTER_gc_isptr_range,
10227RB_DEBUG_COUNTER_gc_isptr_align,
10228RB_DEBUG_COUNTER_gc_isptr_maybe,
10229RB_DEBUG_COUNTER_obj_newobj,
10230RB_DEBUG_COUNTER_obj_newobj_slowpath,
10231RB_DEBUG_COUNTER_obj_newobj_wb_unprotected,
10232RB_DEBUG_COUNTER_obj_free,
10233RB_DEBUG_COUNTER_obj_promote,
10234RB_DEBUG_COUNTER_obj_wb_unprotect,
10235RB_DEBUG_COUNTER_obj_obj_embed,
10236RB_DEBUG_COUNTER_obj_obj_transient,
10237RB_DEBUG_COUNTER_obj_obj_ptr,
10238RB_DEBUG_COUNTER_obj_str_ptr,
10239RB_DEBUG_COUNTER_obj_str_embed,
10240RB_DEBUG_COUNTER_obj_str_shared,
10241RB_DEBUG_COUNTER_obj_str_nofree,
10242RB_DEBUG_COUNTER_obj_str_fstr,
10243RB_DEBUG_COUNTER_obj_ary_embed,
10244RB_DEBUG_COUNTER_obj_ary_transient,
10245RB_DEBUG_COUNTER_obj_ary_ptr,
10246RB_DEBUG_COUNTER_obj_ary_extracapa,
10247RB_DEBUG_COUNTER_obj_ary_shared_create,
10248RB_DEBUG_COUNTER_obj_ary_shared,
10249RB_DEBUG_COUNTER_obj_ary_shared_root_occupied,
10250RB_DEBUG_COUNTER_obj_hash_empty,
10251RB_DEBUG_COUNTER_obj_hash_1,
10252RB_DEBUG_COUNTER_obj_hash_2,
10253RB_DEBUG_COUNTER_obj_hash_3,
10254RB_DEBUG_COUNTER_obj_hash_4,
10255RB_DEBUG_COUNTER_obj_hash_5_8,
10256RB_DEBUG_COUNTER_obj_hash_g8,
10257RB_DEBUG_COUNTER_obj_hash_null,
10258RB_DEBUG_COUNTER_obj_hash_ar,
10259RB_DEBUG_COUNTER_obj_hash_st,
10260RB_DEBUG_COUNTER_obj_hash_transient,
10261RB_DEBUG_COUNTER_obj_hash_force_convert,
10262RB_DEBUG_COUNTER_obj_struct_embed,
10263RB_DEBUG_COUNTER_obj_struct_transient,
10264RB_DEBUG_COUNTER_obj_struct_ptr,
10265RB_DEBUG_COUNTER_obj_data_empty,
10266RB_DEBUG_COUNTER_obj_data_xfree,
10267RB_DEBUG_COUNTER_obj_data_imm_free,
10268RB_DEBUG_COUNTER_obj_data_zombie,
10269RB_DEBUG_COUNTER_obj_match_under4,
10270RB_DEBUG_COUNTER_obj_match_ge4,
10271RB_DEBUG_COUNTER_obj_match_ge8,
10272RB_DEBUG_COUNTER_obj_match_ptr,
10273RB_DEBUG_COUNTER_obj_iclass_ptr,
10274RB_DEBUG_COUNTER_obj_class_ptr,
10275RB_DEBUG_COUNTER_obj_module_ptr,
10276RB_DEBUG_COUNTER_obj_bignum_ptr,
10277RB_DEBUG_COUNTER_obj_bignum_embed,
10278RB_DEBUG_COUNTER_obj_float,
10279RB_DEBUG_COUNTER_obj_complex,
10280RB_DEBUG_COUNTER_obj_rational,
10281RB_DEBUG_COUNTER_obj_regexp_ptr,
10282RB_DEBUG_COUNTER_obj_file_ptr,
10283RB_DEBUG_COUNTER_obj_symbol,
10284RB_DEBUG_COUNTER_obj_imemo_ment,
10285RB_DEBUG_COUNTER_obj_imemo_iseq,
10286RB_DEBUG_COUNTER_obj_imemo_env,
10287RB_DEBUG_COUNTER_obj_imemo_tmpbuf,
10288RB_DEBUG_COUNTER_obj_imemo_ast,
10289RB_DEBUG_COUNTER_obj_imemo_cref,
10290RB_DEBUG_COUNTER_obj_imemo_svar,
10291RB_DEBUG_COUNTER_obj_imemo_throw_data,
10292RB_DEBUG_COUNTER_obj_imemo_ifunc,
10293RB_DEBUG_COUNTER_obj_imemo_memo,
10294RB_DEBUG_COUNTER_obj_imemo_parser_strterm,
10295RB_DEBUG_COUNTER_obj_imemo_callinfo,
10296RB_DEBUG_COUNTER_obj_imemo_callcache,
10297RB_DEBUG_COUNTER_obj_imemo_constcache,
10298RB_DEBUG_COUNTER_artable_hint_hit,
10299RB_DEBUG_COUNTER_artable_hint_miss,
10300RB_DEBUG_COUNTER_artable_hint_notfound,
10301RB_DEBUG_COUNTER_heap_xmalloc,
10302RB_DEBUG_COUNTER_heap_xrealloc,
10303RB_DEBUG_COUNTER_heap_xfree,
10304RB_DEBUG_COUNTER_theap_alloc,
10305RB_DEBUG_COUNTER_theap_alloc_fail,
10306RB_DEBUG_COUNTER_theap_evacuate,
10307RB_DEBUG_COUNTER_vm_sync_lock,
10308RB_DEBUG_COUNTER_vm_sync_lock_enter,
10309RB_DEBUG_COUNTER_vm_sync_lock_enter_nb,
10310RB_DEBUG_COUNTER_vm_sync_lock_enter_cr,
10311RB_DEBUG_COUNTER_vm_sync_barrier,
10312RB_DEBUG_COUNTER_mjit_exec,
10313RB_DEBUG_COUNTER_mjit_exec_not_added,
10314RB_DEBUG_COUNTER_mjit_exec_not_ready,
10315RB_DEBUG_COUNTER_mjit_exec_not_compiled,
10316RB_DEBUG_COUNTER_mjit_exec_call_func,
10317RB_DEBUG_COUNTER_mjit_add_iseq_to_process,
10318RB_DEBUG_COUNTER_mjit_unload_units,
10319RB_DEBUG_COUNTER_mjit_frame_VM2VM,
10320RB_DEBUG_COUNTER_mjit_frame_VM2JT,
10321RB_DEBUG_COUNTER_mjit_frame_JT2JT,
10322RB_DEBUG_COUNTER_mjit_frame_JT2VM,
10323RB_DEBUG_COUNTER_mjit_cancel,
10324RB_DEBUG_COUNTER_mjit_cancel_ivar_inline,
10325RB_DEBUG_COUNTER_mjit_cancel_exivar_inline,
10326RB_DEBUG_COUNTER_mjit_cancel_send_inline,
10327RB_DEBUG_COUNTER_mjit_cancel_opt_insn,
10328RB_DEBUG_COUNTER_mjit_cancel_invalidate_all,
10329RB_DEBUG_COUNTER_mjit_cancel_leave,
10330RB_DEBUG_COUNTER_mjit_length_unit_queue,
10331RB_DEBUG_COUNTER_mjit_length_active_units,
10332RB_DEBUG_COUNTER_mjit_length_compact_units,
10333RB_DEBUG_COUNTER_mjit_length_stale_units,
10334RB_DEBUG_COUNTER_mjit_compile_failures,
10335 RB_DEBUG_COUNTER_MAX
10336};
10337void rb_debug_counter_show_results(const char *msg);
10338
10339
10340size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
10341void ruby_debug_counter_reset(void);
10342void ruby_debug_counter_show_at_exit(int enable);
10343
10344
10345struct rb_yjit_options {
10346 _Bool yjit_enabled;
10347 unsigned exec_mem_size;
10348 unsigned call_threshold;
10349 _Bool greedy_versioning;
10350 _Bool no_type_prop;
10351 unsigned max_versions;
10352 _Bool gen_stats;
10353 _Bool test_backend;
10354};
10355_Bool rb_yjit_enabled_p(void);
10356unsigned rb_yjit_call_threshold(void);
10357void rb_yjit_invalidate_all_method_lookup_assumptions(void);
10358void rb_yjit_method_lookup_change(VALUE klass, ID mid);
10359void rb_yjit_cme_invalidate(VALUE cme);
10360void rb_yjit_collect_vm_usage_insn(int insn);
10361void rb_yjit_collect_binding_alloc(void);
10362void rb_yjit_collect_binding_set(void);
10363_Bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec);
10364void rb_yjit_init(struct rb_yjit_options *options);
10365void rb_yjit_bop_redefined(VALUE klass, const rb_method_entry_t *me, enum ruby_basic_operators bop);
10366void rb_yjit_constant_state_changed(void);
10367void rb_yjit_iseq_mark(const struct rb_iseq_constant_body *body);
10368void rb_yjit_iseq_update_references(const struct rb_iseq_constant_body *body);
10369void rb_yjit_iseq_free(const struct rb_iseq_constant_body *body);
10370void rb_yjit_before_ractor_spawn(void);
10371void rb_yjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic);
10372void rb_yjit_tracing_invalidate_all(void);
10373enum rb_mjit_iseq_func {
10374 NOT_ADDED_JIT_ISEQ_FUNC = 0,
10375 NOT_READY_JIT_ISEQ_FUNC = 1,
10376 NOT_COMPILED_JIT_ISEQ_FUNC = 2,
10377 LAST_JIT_ISEQ_FUNC = 3
10378};
10379struct mjit_options {
10380 char on;
10381 char save_temps;
10382 char warnings;
10383 char debug;
10384 char* debug_flags;
10385 unsigned int wait;
10386 unsigned int min_calls;
10387 int verbose;
10388 int max_cache_size;
10389};
10390struct rb_mjit_compile_info {
10391 _Bool disable_ivar_cache;
10392 _Bool disable_exivar_cache;
10393 _Bool disable_send_cache;
10394 _Bool disable_inlining;
10395 _Bool disable_const_cache;
10396};
10397typedef VALUE (*mjit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
10398
10399
10400extern struct mjit_options mjit_opts;
10401extern _Bool mjit_call_p;
10402extern void rb_mjit_add_iseq_to_process(const rb_iseq_t *iseq);
10403extern VALUE rb_mjit_wait_call(rb_execution_context_t *ec, struct rb_iseq_constant_body *body);
10404extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
10405extern void rb_mjit_recompile_send(const rb_iseq_t *iseq);
10406extern void rb_mjit_recompile_ivar(const rb_iseq_t *iseq);
10407extern void rb_mjit_recompile_exivar(const rb_iseq_t *iseq);
10408extern void rb_mjit_recompile_inlining(const rb_iseq_t *iseq);
10409extern void rb_mjit_recompile_const(const rb_iseq_t *iseq);
10410
10411
10412extern void mjit_cancel_all(const char *reason);
10413extern _Bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id);
10414extern void mjit_init(const struct mjit_options *opts);
10415extern void mjit_gc_start_hook(void);
10416extern void mjit_gc_exit_hook(void);
10417extern void mjit_free_iseq(const rb_iseq_t *iseq);
10418extern void mjit_update_references(const rb_iseq_t *iseq);
10419extern void mjit_mark(void);
10420extern struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec);
10421extern void mjit_cont_free(struct mjit_cont *cont);
10422extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body);
10423__attribute__((__noinline__)) static __attribute__((__cold__)) VALUE mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body);
10424static VALUE
10425mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
10426{
10427 uintptr_t func_i = (uintptr_t)(body->jit_func);
10428 ((__builtin_expect(!!(!!(func_i <= LAST_JIT_ISEQ_FUNC)), 1)) ? ((void)0) : __builtin_unreachable());
10429 switch ((enum rb_mjit_iseq_func)func_i) {
10430 case NOT_ADDED_JIT_ISEQ_FUNC:
10431 ((void)0);
10432 if (body->total_calls == mjit_opts.min_calls) {
10433 rb_mjit_add_iseq_to_process(iseq);
10434 if ((__builtin_expect(!!(mjit_opts.wait), 0))) {
10435 return rb_mjit_wait_call(ec, body);
10436 }
10437 }
10438 break;
10439 case NOT_READY_JIT_ISEQ_FUNC:
10440 ((void)0);
10441 break;
10442 case NOT_COMPILED_JIT_ISEQ_FUNC:
10443 ((void)0);
10444 break;
10445 default:
10446 break;
10447 }
10448 return ((VALUE)RUBY_Qundef);
10449}
10450static inline VALUE
10451mjit_exec(rb_execution_context_t *ec)
10452{
10453 const rb_iseq_t *iseq = ec->cfp->iseq;
10454 struct rb_iseq_constant_body *body = iseq->body;
10455 _Bool yjit_enabled = 0;
10456 if (mjit_call_p || yjit_enabled) {
10457 body->total_calls++;
10458 }
10459 if (!(mjit_call_p || yjit_enabled))
10460 return ((VALUE)RUBY_Qundef);
10461 ((void)0);
10462 mjit_func_t func = body->jit_func;
10463 if (yjit_enabled && func == 0) {
10464 return ((VALUE)RUBY_Qundef);
10465 }
10466 if ((__builtin_expect(!!((uintptr_t)func <= LAST_JIT_ISEQ_FUNC), 0))) {
10467 ((void)0);
10468 return mjit_exec_slowpath(ec, iseq, body);
10469 }
10470 ((void)0);
10471 ((void)0);
10472 return func(ec, ec->cfp);
10473}
10474void mjit_child_after_fork(void);
10475VALUE mjit_pause(_Bool wait_p);
10476VALUE mjit_resume(void);
10477void mjit_finish(_Bool close_handle_p);
10478
10479
10480typedef struct rb_vm_struct ruby_vm_t;
10481int ruby_vm_destruct(ruby_vm_t *vm);
10482void ruby_vm_at_exit(void(*func)(ruby_vm_t *));
10483
10484
10485enum vm_call_flag_bits {
10486 VM_CALL_ARGS_SPLAT_bit,
10487 VM_CALL_ARGS_BLOCKARG_bit,
10488 VM_CALL_FCALL_bit,
10489 VM_CALL_VCALL_bit,
10490 VM_CALL_ARGS_SIMPLE_bit,
10491 VM_CALL_BLOCKISEQ_bit,
10492 VM_CALL_KWARG_bit,
10493 VM_CALL_KW_SPLAT_bit,
10494 VM_CALL_TAILCALL_bit,
10495 VM_CALL_SUPER_bit,
10496 VM_CALL_ZSUPER_bit,
10497 VM_CALL_OPT_SEND_bit,
10498 VM_CALL_KW_SPLAT_MUT_bit,
10499 VM_CALL__END
10500};
10501struct rb_callinfo_kwarg {
10502 int keyword_len;
10503 VALUE keywords[];
10504};
10505static inline size_t
10506rb_callinfo_kwarg_bytes(int keyword_len)
10507{
10508 return rb_size_mul_add_or_raise(
10509 keyword_len,
10510 sizeof(VALUE),
10511 sizeof(struct rb_callinfo_kwarg),
10512 rb_eRuntimeError);
10513}
10514struct rb_callinfo {
10515 VALUE flags;
10516 const struct rb_callinfo_kwarg *kwarg;
10517 VALUE mid;
10518 VALUE flag;
10519 VALUE argc;
10520};
10521static inline _Bool
10522vm_ci_packed_p(const struct rb_callinfo *ci)
10523{
10524 if ((__builtin_expect(!!(((VALUE)ci) & 0x01), 1))) {
10525 return 1;
10526 }
10527 else {
10528 ((void)0);
10529 return 0;
10530 }
10531}
10532static inline _Bool
10533vm_ci_p(const struct rb_callinfo *ci)
10534{
10535 if (vm_ci_packed_p(ci) || imemo_type_p((VALUE)ci, imemo_callinfo)) {
10536 return 1;
10537 }
10538 else {
10539 return 0;
10540 }
10541}
10542static inline ID
10543vm_ci_mid(const struct rb_callinfo *ci)
10544{
10545 if (vm_ci_packed_p(ci)) {
10546 return (((VALUE)ci) >> (1 + 15 + 16)) & ((((VALUE)1)<<32) - 1);
10547 }
10548 else {
10549 return (ID)ci->mid;
10550 }
10551}
10552static inline unsigned int
10553vm_ci_flag(const struct rb_callinfo *ci)
10554{
10555 if (vm_ci_packed_p(ci)) {
10556 return (unsigned int)((((VALUE)ci) >> (1 + 15)) & ((((VALUE)1)<<16) - 1));
10557 }
10558 else {
10559 return (unsigned int)ci->flag;
10560 }
10561}
10562static inline unsigned int
10563vm_ci_argc(const struct rb_callinfo *ci)
10564{
10565 if (vm_ci_packed_p(ci)) {
10566 return (unsigned int)((((VALUE)ci) >> (1)) & ((((VALUE)1)<<15) - 1));
10567 }
10568 else {
10569 return (unsigned int)ci->argc;
10570 }
10571}
10572static inline const struct rb_callinfo_kwarg *
10573vm_ci_kwarg(const struct rb_callinfo *ci)
10574{
10575 if (vm_ci_packed_p(ci)) {
10576 return ((void *)0);
10577 }
10578 else {
10579 return ci->kwarg;
10580 }
10581}
10582static inline void
10583vm_ci_dump(const struct rb_callinfo *ci)
10584{
10585 if (vm_ci_packed_p(ci)) {
10586 ruby_debug_printf("packed_ci ID:%s flag:%x argc:%u\n",
10587 rb_id2name(vm_ci_mid(ci)), vm_ci_flag(ci), vm_ci_argc(ci));
10588 }
10589 else {
10590 rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.1.3/vm_callinfo.h", 175, __func__);
10591 }
10592}
10593static inline const struct rb_callinfo *
10594vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10595{
10596 if ((((mid ) & ~((((VALUE)1)<<32) - 1)) ? 0 : ((flag) & ~((((VALUE)1)<<16) - 1)) ? 0 : ((argc) & ~((((VALUE)1)<<15) - 1)) ? 0 : (kwarg) ? 0 : 1)) {
10597 ((void)0);
10598 return ((const struct rb_callinfo *) ((((VALUE)(mid )) << (1 + 15 + 16)) | (((VALUE)(flag)) << (1 + 15)) | (((VALUE)(argc)) << (1)) | RUBY_FIXNUM_FLAG));
10599 }
10600 const _Bool debug = 0;
10601 if (debug) ruby_debug_printf("%s:%d ", file, line);
10602 const struct rb_callinfo *ci = (const struct rb_callinfo *)
10603 rb_imemo_new(imemo_callinfo,
10604 (VALUE)mid,
10605 (VALUE)flag,
10606 (VALUE)argc,
10607 (VALUE)kwarg);
10608 if (debug) rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.1.3/vm_callinfo.h", 216, __func__);
10609 if (kwarg) {
10610 ((void)0);
10611 }
10612 else {
10613 ((void)0);
10614 }
10615 ((void)0);
10616 ((void)0);
10617 return ci;
10618}
10619static inline const struct rb_callinfo *
10620vm_ci_new_runtime_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10621{
10622 ((void)0);
10623 return vm_ci_new_(mid, flag, argc, kwarg, file, line);
10624}
10625static inline _Bool
10626vm_ci_markable(const struct rb_callinfo *ci)
10627{
10628 if (! ci) {
10629 return 0;
10630 }
10631 else if (vm_ci_packed_p(ci)) {
10632 return 1;
10633 }
10634 else {
10635 ((void)0);
10636 return ! RB_FL_ANY_RAW((VALUE)ci, ((VALUE)RUBY_FL_USER4));
10637 }
10638}
10639typedef VALUE (*vm_call_handler)(
10640 struct rb_execution_context_struct *ec,
10641 struct rb_control_frame_struct *cfp,
10642 struct rb_calling_info *calling);
10643struct rb_callcache {
10644 const VALUE flags;
10645 const VALUE klass;
10646 const struct rb_callable_method_entry_struct * const cme_;
10647 const vm_call_handler call_;
10648 union {
10649 const unsigned int attr_index;
10650 const enum method_missing_reason method_missing_reason;
10651 VALUE v;
10652 } aux_;
10653};
10654static inline const struct rb_callcache *
10655vm_cc_new(VALUE klass,
10656 const struct rb_callable_method_entry_struct *cme,
10657 vm_call_handler call)
10658{
10659 const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
10660 ((void)0);
10661 return cc;
10662}
10663static inline _Bool
10664vm_cc_class_check(const struct rb_callcache *cc, VALUE klass)
10665{
10666 ((void)0);
10667 ((void)0);
10668 return cc->klass == klass;
10669}
10670static inline int
10671vm_cc_markable(const struct rb_callcache *cc)
10672{
10673 ((void)0);
10674 return RB_FL_TEST_RAW((VALUE)cc, ((VALUE)RUBY_FL_USER4)) == 0;
10675}
10676static inline const struct rb_callable_method_entry_struct *
10677vm_cc_cme(const struct rb_callcache *cc)
10678{
10679 ((void)0);
10680 ((void)0);
10681 return cc->cme_;
10682}
10683static inline vm_call_handler
10684vm_cc_call(const struct rb_callcache *cc)
10685{
10686 ((void)0);
10687 ((void)0);
10688 return cc->call_;
10689}
10690static inline unsigned int
10691vm_cc_attr_index(const struct rb_callcache *cc)
10692{
10693 ((void)0);
10694 return cc->aux_.attr_index;
10695}
10696static inline unsigned int
10697vm_cc_cmethod_missing_reason(const struct rb_callcache *cc)
10698{
10699 ((void)0);
10700 return cc->aux_.method_missing_reason;
10701}
10702static inline _Bool
10703vm_cc_invalidated_p(const struct rb_callcache *cc)
10704{
10705 if (cc->klass && !((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))) {
10706 return 0;
10707 }
10708 else {
10709 return 1;
10710 }
10711}
10712static inline _Bool
10713vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass)
10714{
10715 ((void)0);
10716 if (cc->klass == klass && !((cc_cme)->flags & ((VALUE)RUBY_FL_USER9))) {
10717 return 1;
10718 }
10719 else {
10720 return 0;
10721 }
10722}
10723extern const struct rb_callcache *rb_vm_empty_cc(void);
10724extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
10725static inline void
10726vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
10727{
10728 ((void)0);
10729 ((void)0);
10730 *(vm_call_handler *)&cc->call_ = call;
10731}
10732static inline void
10733vm_cc_attr_index_set(const struct rb_callcache *cc, int index)
10734{
10735 ((void)0);
10736 ((void)0);
10737 *(int *)&cc->aux_.attr_index = index;
10738}
10739static inline void
10740vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missing_reason reason)
10741{
10742 ((void)0);
10743 ((void)0);
10744 *(enum method_missing_reason *)&cc->aux_.method_missing_reason = reason;
10745}
10746static inline void
10747vm_cc_invalidate(const struct rb_callcache *cc)
10748{
10749 ((void)0);
10750 ((void)0);
10751 ((void)0);
10752 *(VALUE *)&cc->klass = 0;
10753 ((void)0);
10754}
10755struct rb_call_data {
10756 const struct rb_callinfo *ci;
10757 const struct rb_callcache *cc;
10758};
10759struct rb_class_cc_entries {
10760 int capa;
10761 int len;
10762 const struct rb_callable_method_entry_struct *cme;
10763 struct rb_class_cc_entries_entry {
10764 const struct rb_callinfo *ci;
10765 const struct rb_callcache *cc;
10766 } *entries;
10767};
10768void rb_vm_ccs_free(struct rb_class_cc_entries *ccs);
10769
10770
10771struct RNode;
10772VALUE ruby_debug_print_value(int level, int debug_level, const char *header, VALUE v);
10773ID ruby_debug_print_id(int level, int debug_level, const char *header, ID id);
10774struct RNode *ruby_debug_print_node(int level, int debug_level, const char *header, const struct RNode *node);
10775int ruby_debug_print_indent(int level, int debug_level, int indent_level);
10776void ruby_debug_gc_check_func(void);
10777void ruby_set_debug_option(const char *str);
10778
10779
10780extern enum ruby_debug_log_mode {
10781 ruby_debug_log_disabled = 0x00,
10782 ruby_debug_log_memory = 0x01,
10783 ruby_debug_log_stderr = 0x02,
10784 ruby_debug_log_file = 0x04,
10785} ruby_debug_log_mode;
10786__attribute__((__format__(__printf__, 4, 5)))
10787void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
10788void ruby_debug_log_print(unsigned int n);
10789_Bool ruby_debug_log_filter(const char *func_name);
10790typedef long OFFSET;
10791typedef unsigned long lindex_t;
10792typedef VALUE GENTRY;
10793typedef rb_iseq_t *ISEQ;
10794
10795
10796extern VALUE ruby_vm_const_missing_count;
10797extern rb_serial_t ruby_vm_global_constant_state;
10798extern rb_serial_t ruby_vm_class_serial;
10799extern rb_serial_t ruby_vm_global_cvar_state;
10800
10801
10802static inline void
10803CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, _Bool enabled)
10804{
10805 if ((__builtin_expect(!!(enabled), 1))) {
10806 vm_cc_call_set(cc, func);
10807 }
10808}
10809static inline struct vm_throw_data *
10810THROW_DATA_NEW(VALUE val, const rb_control_frame_t *cf, int st)
10811{
10812 struct vm_throw_data *obj = (struct vm_throw_data *)rb_imemo_new(imemo_throw_data, val, (VALUE)cf, 0, 0);
10813 obj->throw_state = st;
10814 return obj;
10815}
10816static inline VALUE
10817THROW_DATA_VAL(const struct vm_throw_data *obj)
10818{
10819 ((void)0);
10820 return obj->throw_obj;
10821}
10822static inline const rb_control_frame_t *
10823THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj)
10824{
10825 ((void)0);
10826 return obj->catch_frame;
10827}
10828static inline int
10829THROW_DATA_STATE(const struct vm_throw_data *obj)
10830{
10831 ((void)0);
10832 return obj->throw_state;
10833}
10834static inline int
10835THROW_DATA_CONSUMED_P(const struct vm_throw_data *obj)
10836{
10837 ((void)0);
10838 return obj->flags & ((VALUE)RUBY_FL_USER4);
10839}
10840static inline void
10841THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
10842{
10843 ((void)0);
10844 obj->catch_frame = cfp;
10845}
10846static inline void
10847THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
10848{
10849 ((void)0);
10850 obj->throw_state = st;
10851}
10852static inline void
10853THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
10854{
10855 if (imemo_throw_data_p((VALUE)obj) &&
10856 THROW_DATA_STATE(obj) == RUBY_TAG_BREAK) {
10857 obj->flags |= ((VALUE)RUBY_FL_USER4);
10858 }
10859}
10860static inline _Bool
10861vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
10862{
10863 return !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
10864 !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED);
10865}
10866struct rb_ractor_local_storage_type {
10867 void (*mark)(void *ptr);
10868 void (*free)(void *ptr);
10869};
10870typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t;
10871
10872
10873extern VALUE rb_cRactor;
10874VALUE rb_ractor_stdin(void);
10875VALUE rb_ractor_stdout(void);
10876VALUE rb_ractor_stderr(void);
10877void rb_ractor_stdin_set(VALUE io);
10878void rb_ractor_stdout_set(VALUE io);
10879void rb_ractor_stderr_set(VALUE io);
10880rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);
10881VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);
10882_Bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);
10883void rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);
10884extern const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;
10885rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type);
10886void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);
10887void rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);
10888VALUE rb_ractor_make_shareable(VALUE obj);
10889VALUE rb_ractor_make_shareable_copy(VALUE obj);
10890
10891
10892static inline _Bool
10893rb_ractor_shareable_p(VALUE obj)
10894{
10895 _Bool rb_ractor_shareable_p_continue(VALUE obj);
10896 if (RB_SPECIAL_CONST_P(obj)) {
10897 return 1;
10898 }
10899 else if (RB_FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)) {
10900 return 1;
10901 }
10902 else {
10903 return rb_ractor_shareable_p_continue(obj);
10904 }
10905}
10906enum rb_ractor_basket_type {
10907 basket_type_none,
10908 basket_type_ref,
10909 basket_type_copy,
10910 basket_type_move,
10911 basket_type_will,
10912 basket_type_deleted,
10913 basket_type_reserved,
10914};
10915struct rb_ractor_basket {
10916 _Bool exception;
10917 enum rb_ractor_basket_type type;
10918 VALUE v;
10919 VALUE sender;
10920};
10921struct rb_ractor_queue {
10922 struct rb_ractor_basket *baskets;
10923 int start;
10924 int cnt;
10925 int size;
10926 unsigned int serial;
10927 unsigned int reserved_cnt;
10928};
10929struct rb_ractor_waiting_list {
10930 int cnt;
10931 int size;
10932 rb_ractor_t **ractors;
10933};
10934struct rb_ractor_sync {
10935 rb_nativethread_lock_t lock;
10936 rb_nativethread_cond_t cond;
10937 struct rb_ractor_queue incoming_queue;
10938 struct rb_ractor_waiting_list taking_ractors;
10939 _Bool incoming_port_closed;
10940 _Bool outgoing_port_closed;
10941 struct ractor_wait {
10942 enum ractor_wait_status {
10943 wait_none = 0x00,
10944 wait_receiving = 0x01,
10945 wait_taking = 0x02,
10946 wait_yielding = 0x04,
10947 wait_moving = 0x08,
10948 } status;
10949 enum ractor_wakeup_status {
10950 wakeup_none,
10951 wakeup_by_send,
10952 wakeup_by_yield,
10953 wakeup_by_take,
10954 wakeup_by_close,
10955 wakeup_by_interrupt,
10956 wakeup_by_retry,
10957 } wakeup_status;
10958 struct rb_ractor_basket yielded_basket;
10959 struct rb_ractor_basket taken_basket;
10960 } wait;
10961};
10962struct rb_ractor_struct {
10963 struct rb_ractor_pub pub;
10964 struct rb_ractor_sync sync;
10965 VALUE receiving_mutex;
10966 _Bool yield_atexit;
10967 rb_nativethread_cond_t barrier_wait_cond;
10968 struct {
10969 struct list_head set;
10970 unsigned int cnt;
10971 unsigned int blocking_cnt;
10972 unsigned int sleeper;
10973 rb_global_vm_lock_t gvl;
10974 rb_execution_context_t *running_ec;
10975 rb_thread_t *main;
10976 } threads;
10977 VALUE thgroup_default;
10978 VALUE name;
10979 VALUE loc;
10980 enum ractor_status {
10981 ractor_created,
10982 ractor_running,
10983 ractor_blocking,
10984 ractor_terminated,
10985 } status_;
10986 struct list_node vmlr_node;
10987 st_table *local_storage;
10988 struct rb_id_table *idkey_local_storage;
10989 VALUE r_stdin;
10990 VALUE r_stdout;
10991 VALUE r_stderr;
10992 VALUE verbose;
10993 VALUE debug;
10994 rb_ractor_newobj_cache_t newobj_cache;
10995 struct gc_mark_func_data_struct {
10996 void *data;
10997 void (*mark_func)(VALUE v, void *data);
10998 } *mfd;
10999};
11000static inline VALUE
11001rb_ractor_self(const rb_ractor_t *r)
11002{
11003 return r->pub.self;
11004}
11005rb_ractor_t *rb_ractor_main_alloc(void);
11006void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread);
11007void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result);
11008void rb_ractor_atexit_exception(rb_execution_context_t *ec);
11009void rb_ractor_teardown(rb_execution_context_t *ec);
11010void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
11011void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args);
11012VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc);
11013rb_global_vm_lock_t *rb_ractor_gvl(rb_ractor_t *);
11014int rb_ractor_living_thread_num(const rb_ractor_t *);
11015VALUE rb_ractor_thread_list(rb_ractor_t *r);
11016_Bool rb_ractor_p(VALUE rv);
11017void rb_ractor_living_threads_init(rb_ractor_t *r);
11018void rb_ractor_living_threads_insert(rb_ractor_t *r, rb_thread_t *th);
11019void rb_ractor_living_threads_remove(rb_ractor_t *r, rb_thread_t *th);
11020void rb_ractor_blocking_threads_inc(rb_ractor_t *r, const char *file, int line);
11021void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line);
11022void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r);
11023void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r);
11024void rb_ractor_terminate_all(void);
11025_Bool rb_ractor_main_p_(void);
11026void rb_ractor_finish_marking(void);
11027void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th);
11028VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name);
11029
11030
11031_Bool rb_ractor_shareable_p_continue(VALUE obj);
11032void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key);
11033
11034
11035static inline _Bool
11036rb_ractor_main_p(void)
11037{
11038 if (ruby_single_main_ractor) {
11039 return 1;
11040 }
11041 else {
11042 return rb_ractor_main_p_();
11043 }
11044}
11045static inline _Bool
11046rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status)
11047{
11048 return r->status_ == status;
11049}
11050static inline void
11051rb_ractor_sleeper_threads_inc(rb_ractor_t *r)
11052{
11053 r->threads.sleeper++;
11054}
11055static inline void
11056rb_ractor_sleeper_threads_dec(rb_ractor_t *r)
11057{
11058 r->threads.sleeper--;
11059}
11060static inline void
11061rb_ractor_sleeper_threads_clear(rb_ractor_t *r)
11062{
11063 r->threads.sleeper = 0;
11064}
11065static inline int
11066rb_ractor_sleeper_thread_num(rb_ractor_t *r)
11067{
11068 return r->threads.sleeper;
11069}
11070static inline void
11071rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
11072{
11073 if (cr->threads.running_ec != th->ec) {
11074 if (0) {
11075 ruby_debug_printf("rb_ractor_thread_switch ec:%p->%p\n",
11076 (void *)cr->threads.running_ec, (void *)th->ec);
11077 }
11078 }
11079 else {
11080 return;
11081 }
11082 if (cr->threads.running_ec != th->ec) {
11083 th->running_time_us = 0;
11084 }
11085 cr->threads.running_ec = th->ec;
11086 ((void)0);
11087}
11088static inline void
11089rb_ractor_set_current_ec(rb_ractor_t *cr, rb_execution_context_t *ec)
11090{
11091 ruby_current_ec = ec;
11092 if (cr->threads.running_ec != ec) {
11093 if (0) {
11094 ruby_debug_printf("rb_ractor_set_current_ec ec:%p->%p\n",
11095 (void *)cr->threads.running_ec, (void *)ec);
11096 }
11097 }
11098 else {
11099 ((void)0);
11100 }
11101 cr->threads.running_ec = ec;
11102}
11103void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11104void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11105static inline uint32_t
11106rb_ractor_id(const rb_ractor_t *r)
11107{
11108 return r->pub.id;
11109}
11110_Bool rb_vm_locked_p(void);
11111void rb_vm_lock_body(void);
11112void rb_vm_unlock_body(void);
11113struct rb_ractor_struct;
11114void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev );
11115void rb_vm_lock_enter_body_nb(unsigned int *lev );
11116void rb_vm_lock_enter_body(unsigned int *lev );
11117void rb_vm_lock_leave_body(unsigned int *lev );
11118void rb_vm_barrier(void);
11119extern struct rb_ractor_struct *ruby_single_main_ractor;
11120static inline _Bool
11121rb_multi_ractor_p(void)
11122{
11123 if ((__builtin_expect(!!(ruby_single_main_ractor), 1))) {
11124 ((void)0);
11125 return 0;
11126 }
11127 else {
11128 return 1;
11129 }
11130}
11131static inline void
11132rb_vm_lock(const char *file, int line)
11133{
11134 ((void)0);
11135 if (rb_multi_ractor_p()) {
11136 rb_vm_lock_body();
11137 }
11138}
11139static inline void
11140rb_vm_unlock(const char *file, int line)
11141{
11142 if (rb_multi_ractor_p()) {
11143 rb_vm_unlock_body();
11144 }
11145}
11146static inline void
11147rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
11148{
11149 ((void)0);
11150 if (rb_multi_ractor_p()) {
11151 rb_vm_lock_enter_body(lev );
11152 }
11153}
11154static inline void
11155rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
11156{
11157 ((void)0);
11158 if (rb_multi_ractor_p()) {
11159 rb_vm_lock_enter_body_nb(lev );
11160 }
11161}
11162static inline void
11163rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
11164{
11165 if (rb_multi_ractor_p()) {
11166 rb_vm_lock_leave_body(lev );
11167 }
11168}
11169static inline void
11170rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11171{
11172 ((void)0);
11173 rb_vm_lock_enter_body_cr(cr, levp );
11174}
11175static inline void
11176rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11177{
11178 rb_vm_lock_leave_body(levp );
11179}
11180struct rb_builtin_function {
11181 const void * const func_ptr;
11182 const int argc;
11183 const int index;
11184 const char * const name;
11185 void (*compiler)(FILE *, long, unsigned, _Bool);
11186};
11187void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
11188static inline void rb_builtin_function_check_arity0(VALUE (*f)(rb_execution_context_t *ec, VALUE self)){}
11189static inline void rb_builtin_function_check_arity1(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE)){}
11190static inline void rb_builtin_function_check_arity2(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE)){}
11191static inline void rb_builtin_function_check_arity3(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE)){}
11192static inline void rb_builtin_function_check_arity4(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE)){}
11193static inline void rb_builtin_function_check_arity5(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11194static inline void rb_builtin_function_check_arity6(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11195static inline void rb_builtin_function_check_arity7(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11196static inline void rb_builtin_function_check_arity8(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11197static inline void rb_builtin_function_check_arity9(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11198static inline void rb_builtin_function_check_arity10(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11199static inline void rb_builtin_function_check_arity11(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11200static inline void rb_builtin_function_check_arity12(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11201static inline void rb_builtin_function_check_arity13(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11202static inline void rb_builtin_function_check_arity14(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11203static inline void rb_builtin_function_check_arity15(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}static inline
11204__attribute__((__pure__)) VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);static inline
11205VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
11206__attribute__((__pure__)) static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index);
11207static inline VALUE
11208rb_vm_lvar(rb_execution_context_t *ec, int index)
11209{
11210 return ec->cfp->ep[index];
11211}
11212struct builtin_binary {
11213 const char *feature;
11214 const unsigned char *bin;
11215 size_t bin_size;
11216};
11217struct ruby_dtrace_method_hook_args {
11218 const char *classname;
11219 const char *methodname;
11220 const char *filename;
11221 int line_no;
11222 volatile VALUE klass;
11223 volatile VALUE name;
11224};
11225
11226
11227__attribute__((__noinline__)) int rb_dtrace_setup(rb_execution_context_t *, VALUE, ID, struct ruby_dtrace_method_hook_args *);
11228
11229
11230VALUE rb_str_concat_literals(size_t, const VALUE*);
11231__attribute__ ((__visibility__("default"))) extern
11232VALUE rb_vm_exec(rb_execution_context_t *, _Bool);
11233__attribute__((__pure__)) static inline const VALUE *VM_EP_LEP(const VALUE *);
11234static inline const VALUE *
11235VM_EP_LEP(const VALUE *ep)
11236{
11237 while (!VM_ENV_LOCAL_P(ep)) {
11238 ep = VM_ENV_PREV_EP(ep);
11239 }
11240 return ep;
11241}
11242static inline const rb_control_frame_t *
11243rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE * const ep)
11244{
11245 if (!ep) {
11246 return ((void *)0);
11247 }
11248 else {
11249 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
11250 while (cfp < eocfp) {
11251 if (cfp->ep == ep) {
11252 return cfp;
11253 }
11254 cfp = ((cfp)+1);
11255 }
11256 return ((void *)0);
11257 }
11258}static inline
11259const VALUE *
11260rb_vm_ep_local_ep(const VALUE *ep)
11261{
11262 return VM_EP_LEP(ep);
11263}
11264__attribute__((__pure__)) static inline const VALUE *VM_CF_LEP(const rb_control_frame_t * const cfp);
11265static inline const VALUE *
11266VM_CF_LEP(const rb_control_frame_t * const cfp)
11267{
11268 return VM_EP_LEP(cfp->ep);
11269}
11270static inline const VALUE *
11271VM_CF_PREV_EP(const rb_control_frame_t * const cfp)
11272{
11273 return VM_ENV_PREV_EP(cfp->ep);
11274}
11275__attribute__((__pure__)) static inline VALUE VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp);
11276static inline VALUE
11277VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp)
11278{
11279 const VALUE *ep = VM_CF_LEP(cfp);
11280 return VM_ENV_BLOCK_HANDLER(ep);
11281}static inline
11282int
11283rb_vm_cframe_keyword_p(const rb_control_frame_t *cfp)
11284{
11285 return VM_FRAME_CFRAME_KW_P(cfp);
11286}static inline
11287VALUE
11288rb_vm_frame_block_handler(const rb_control_frame_t *cfp)
11289{
11290 return VM_CF_BLOCK_HANDLER(cfp);
11291}
11292static struct rb_captured_block *
11293VM_CFP_TO_CAPTURED_BLOCK(const rb_control_frame_t *cfp)
11294{
11295 ((void)0);
11296 return (struct rb_captured_block *)&cfp->self;
11297}
11298static rb_control_frame_t *
11299VM_CAPTURED_BLOCK_TO_CFP(const struct rb_captured_block *captured)
11300{
11301 rb_control_frame_t *cfp = ((rb_control_frame_t *)((VALUE *)(captured) - 3));
11302 ((void)0);
11303 ((void)0);
11304 return cfp;
11305}
11306static int
11307VM_BH_FROM_CFP_P(VALUE block_handler, const rb_control_frame_t *cfp)
11308{
11309 const struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
11310 return ((void *)((block_handler) & ~0x03)) == captured;
11311}
11312static VALUE
11313vm_passed_block_handler(rb_execution_context_t *ec)
11314{
11315 VALUE block_handler = ec->passed_block_handler;
11316 ec->passed_block_handler = 0;
11317 vm_block_handler_verify(block_handler);
11318 return block_handler;
11319}
11320static rb_cref_t *
11321vm_cref_new0(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int use_prev_prev, int singleton)
11322{
11323 VALUE refinements = ((VALUE)RUBY_Qnil);
11324 int omod_shared = 0;
11325 rb_cref_t *cref;
11326 union {
11327 rb_scope_visibility_t visi;
11328 VALUE value;
11329 } scope_visi;
11330 scope_visi.visi.method_visi = visi;
11331 scope_visi.visi.module_func = module_func;
11332 if (prev_cref != ((void *)0) && prev_cref != (void *)1 ) {
11333 refinements = CREF_REFINEMENTS(prev_cref);
11334 if (!RB_NIL_P(refinements)) {
11335 omod_shared = 1;
11336 CREF_OMOD_SHARED_SET(prev_cref);
11337 }
11338 }
11339 ((void)0);
11340 cref = (rb_cref_t *)rb_imemo_new(imemo_cref, klass, (VALUE)(use_prev_prev ? CREF_NEXT(prev_cref) : prev_cref), scope_visi.value, refinements);
11341 if (pushed_by_eval) CREF_PUSHED_BY_EVAL_SET(cref);
11342 if (omod_shared) CREF_OMOD_SHARED_SET(cref);
11343 if (singleton) CREF_SINGLETON_SET(cref);
11344 return cref;
11345}
11346static rb_cref_t *
11347vm_cref_new(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int singleton)
11348{
11349 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 0, singleton);
11350}
11351static rb_cref_t *
11352vm_cref_new_use_prev(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval)
11353{
11354 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 1, 0);
11355}
11356static int
11357ref_delete_symkey(VALUE key, VALUE value, VALUE unused)
11358{
11359 return RB_SYMBOL_P(key) ? ST_DELETE : ST_CONTINUE;
11360}
11361static rb_cref_t *
11362vm_cref_dup(const rb_cref_t *cref)
11363{
11364 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11365 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11366 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11367 int singleton = CREF_SINGLETON(cref);
11368 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11369 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11370 VALUE ref = rb_hash_dup(CREF_REFINEMENTS(cref));
11371 rb_hash_foreach(ref, ref_delete_symkey, ((VALUE)RUBY_Qnil));
11372 CREF_REFINEMENTS_SET(new_cref, ref);
11373 CREF_OMOD_SHARED_UNSET(new_cref);
11374 }
11375 return new_cref;
11376}static inline
11377rb_cref_t *
11378rb_vm_cref_dup_without_refinements(const rb_cref_t *cref)
11379{
11380 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11381 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11382 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11383 int singleton = CREF_SINGLETON(cref);
11384 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11385 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11386 CREF_REFINEMENTS_SET(new_cref, ((VALUE)RUBY_Qnil));
11387 CREF_OMOD_SHARED_UNSET(new_cref);
11388 }
11389 return new_cref;
11390}
11391static rb_cref_t *
11392vm_cref_new_toplevel(rb_execution_context_t *ec)
11393{
11394 rb_cref_t *cref = vm_cref_new(rb_cObject, METHOD_VISI_PRIVATE , 0, ((void *)0), 0, 0);
11395 VALUE top_wrapper = rb_ec_thread_ptr(ec)->top_wrapper;
11396 if (top_wrapper) {
11397 cref = vm_cref_new(top_wrapper, METHOD_VISI_PRIVATE, 0, cref, 0, 0);
11398 }
11399 return cref;
11400}static inline
11401rb_cref_t *
11402rb_vm_cref_new_toplevel(void)
11403{
11404 return vm_cref_new_toplevel(rb_current_execution_context(1));
11405}
11406static void
11407vm_cref_dump(const char *mesg, const rb_cref_t *cref)
11408{
11409 ruby_debug_printf("vm_cref_dump: %s (%p)\n", mesg, (void *)cref);
11410 while (cref) {
11411 ruby_debug_printf("= cref| klass: %s\n", RSTRING_PTR(rb_class_path(CREF_CLASS(cref))));
11412 cref = CREF_NEXT(cref);
11413 }
11414}static inline
11415void
11416rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep)
11417{
11418 *((const VALUE **)&dst->as.captured.ep) = ep;
11419 (rb_obj_written((VALUE)(obj), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(VM_ENV_ENVVAL(ep)), "../ruby-3.1.3/vm.c", 353));
11420}
11421static void
11422vm_bind_update_env(VALUE bindval, rb_binding_t *bind, VALUE envval)
11423{
11424 const rb_env_t *env = (rb_env_t *)envval;
11425 rb_obj_write((VALUE)(bindval), __extension__({
11426 ;
11427 ; __typeof__((VALUE *)(&bind->block.as.captured.code.iseq)) unaligned_member_access_result = ((VALUE *)(&bind->block.as.captured.code.iseq));
11428 ; unaligned_member_access_result; }), (VALUE)(env->iseq), "../ruby-3.1.3/vm.c", 360);
11429 rb_vm_block_ep_update(bindval, &bind->block, env->ep);
11430}
11431static VALUE vm_make_env_object(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
11432extern VALUE rb_vm_invoke_bmethod(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self,
11433 int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
11434 const rb_callable_method_entry_t *me);
11435static VALUE vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
11436typedef enum {
11437 CONST_DEPRECATED = 0x100,
11438 CONST_VISIBILITY_MASK = 0xff,
11439 CONST_PUBLIC = 0x00,
11440 CONST_PRIVATE,
11441 CONST_VISIBILITY_MAX
11442} rb_const_flag_t;
11443typedef struct rb_const_entry_struct {
11444 rb_const_flag_t flag;
11445 int line;
11446 VALUE value;
11447 VALUE file;
11448} rb_const_entry_t;
11449VALUE rb_mod_private_constant(int argc, const VALUE *argv, VALUE obj);
11450VALUE rb_mod_public_constant(int argc, const VALUE *argv, VALUE obj);
11451VALUE rb_mod_deprecate_constant(int argc, const VALUE *argv, VALUE obj);
11452void rb_free_const_table(struct rb_id_table *tbl);
11453VALUE rb_const_source_location(VALUE, ID);
11454
11455
11456int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag);
11457rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
11458VALUE rb_public_const_get_at(VALUE klass, ID id);
11459VALUE rb_public_const_get_from(VALUE klass, ID id);
11460int rb_public_const_defined_from(VALUE klass, ID id);
11461VALUE rb_const_source_location_at(VALUE, ID);
11462
11463
11464enum {
11465 cmp_opt_Integer,
11466 cmp_opt_String,
11467 cmp_opt_Float,
11468 cmp_optimizable_count
11469};
11470struct cmp_opt_data {
11471 unsigned int opt_methods;
11472 unsigned int opt_inited;
11473};
11474VALUE rb_invcmp(VALUE, VALUE);
11475struct ar_table_struct;
11476typedef unsigned char ar_hint_t;
11477enum ruby_rhash_flags {
11478 RHASH_PASS_AS_KEYWORDS = ((VALUE)RUBY_FL_USER1),
11479 RHASH_PROC_DEFAULT = ((VALUE)RUBY_FL_USER2),
11480 RHASH_ST_TABLE_FLAG = ((VALUE)RUBY_FL_USER3),
11481 RHASH_AR_TABLE_SIZE_MASK = (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)|((VALUE)RUBY_FL_USER7)),
11482 RHASH_AR_TABLE_SIZE_SHIFT = (((VALUE)RUBY_FL_USHIFT)+4),
11483 RHASH_AR_TABLE_BOUND_MASK = (((VALUE)RUBY_FL_USER8)|((VALUE)RUBY_FL_USER9)|((VALUE)RUBY_FL_USER10)|((VALUE)RUBY_FL_USER11)),
11484 RHASH_AR_TABLE_BOUND_SHIFT = (((VALUE)RUBY_FL_USHIFT)+8),
11485 RHASH_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER12),
11486 RHASH_LEV_SHIFT = (((VALUE)RUBY_FL_USHIFT) + 13),
11487 RHASH_LEV_MAX = 127,
11488};
11489struct RHash {
11490 struct RBasic basic;
11491 union {
11492 st_table *st;
11493 struct ar_table_struct *ar;
11494 } as;
11495 const VALUE ifnone;
11496 union {
11497 ar_hint_t ary[8];
11498 VALUE word;
11499 } ar_hint;
11500};
11501void rb_hash_st_table_set(VALUE hash, st_table *st);
11502VALUE rb_hash_default_value(VALUE hash, VALUE key);
11503VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
11504long rb_dbl_long_hash(double d);
11505st_table *rb_init_identtable(void);
11506VALUE rb_to_hash_type(VALUE obj);
11507VALUE rb_hash_key_str(VALUE);
11508VALUE rb_hash_values(VALUE hash);
11509VALUE rb_hash_rehash(VALUE hash);
11510int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val);
11511VALUE rb_hash_set_pair(VALUE hash, VALUE pair);
11512int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
11513int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
11514int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
11515extern st_table *rb_hash_st_table(VALUE hash);
11516VALUE rb_ident_hash_new_with_size(st_index_t size);
11517static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
11518static inline VALUE RHASH_IFNONE(VALUE h);
11519static inline size_t RHASH_SIZE(VALUE h);
11520static inline _Bool RHASH_EMPTY_P(VALUE h);
11521static inline _Bool RHASH_AR_TABLE_P(VALUE h);
11522static inline _Bool RHASH_ST_TABLE_P(VALUE h);
11523static inline struct ar_table_struct *RHASH_AR_TABLE(VALUE h);
11524static inline st_table *RHASH_ST_TABLE(VALUE h);
11525static inline size_t RHASH_ST_SIZE(VALUE h);
11526static inline void RHASH_ST_CLEAR(VALUE h);
11527static inline _Bool RHASH_TRANSIENT_P(VALUE h);
11528static inline void RHASH_SET_TRANSIENT_FLAG(VALUE h);
11529static inline void RHASH_UNSET_TRANSIENT_FLAG(VALUE h);
11530
11531
11532VALUE rb_hash_delete_entry(VALUE hash, VALUE key);
11533VALUE rb_ident_hash_new(void);
11534int rb_hash_stlike_foreach(VALUE hash, st_foreach_callback_func *func, st_data_t arg);
11535
11536
11537
11538
11539VALUE rb_hash_new_with_size(st_index_t size);
11540VALUE rb_hash_resurrect(VALUE hash);
11541int rb_hash_stlike_lookup(VALUE hash, st_data_t key, st_data_t *pval);
11542VALUE rb_hash_keys(VALUE hash);
11543VALUE rb_hash_has_key(VALUE hash, VALUE key);
11544VALUE rb_hash_compare_by_id_p(VALUE hash);
11545st_table *rb_hash_tbl_raw(VALUE hash, const char *file, int line);
11546
11547
11548VALUE rb_hash_compare_by_id(VALUE hash);
11549static inline _Bool
11550RHASH_AR_TABLE_P(VALUE h)
11551{
11552 return ! RB_FL_TEST_RAW(h, RHASH_ST_TABLE_FLAG);
11553}
11554static inline struct ar_table_struct *
11555RHASH_AR_TABLE(VALUE h)
11556{
11557 return ((struct RHash *)(h))->as.ar;
11558}
11559static inline st_table *
11560RHASH_ST_TABLE(VALUE h)
11561{
11562 return ((struct RHash *)(h))->as.st;
11563}
11564static inline VALUE
11565RHASH_IFNONE(VALUE h)
11566{
11567 return ((struct RHash *)(h))->ifnone;
11568}
11569static inline size_t
11570RHASH_SIZE(VALUE h)
11571{
11572 if (RHASH_AR_TABLE_P(h)) {
11573 return RHASH_AR_TABLE_SIZE_RAW(h);
11574 }
11575 else {
11576 return RHASH_ST_SIZE(h);
11577 }
11578}
11579static inline _Bool
11580RHASH_EMPTY_P(VALUE h)
11581{
11582 return RHASH_SIZE(h) == 0;
11583}
11584static inline _Bool
11585RHASH_ST_TABLE_P(VALUE h)
11586{
11587 return ! RHASH_AR_TABLE_P(h);
11588}
11589static inline size_t
11590RHASH_ST_SIZE(VALUE h)
11591{
11592 return RHASH_ST_TABLE(h)->num_entries;
11593}
11594static inline void
11595RHASH_ST_CLEAR(VALUE h)
11596{
11597 RB_FL_UNSET_RAW(h, RHASH_ST_TABLE_FLAG);
11598 ((struct RHash *)(h))->as.ar = ((void *)0);
11599}
11600static inline unsigned
11601RHASH_AR_TABLE_SIZE_RAW(VALUE h)
11602{
11603 VALUE ret = RB_FL_TEST_RAW(h, RHASH_AR_TABLE_SIZE_MASK);
11604 ret >>= RHASH_AR_TABLE_SIZE_SHIFT;
11605 return (unsigned)ret;
11606}
11607static inline _Bool
11608RHASH_TRANSIENT_P(VALUE h)
11609{
11610 return RB_FL_TEST_RAW(h, RHASH_TRANSIENT_FLAG);
11611}
11612static inline void
11613RHASH_SET_TRANSIENT_FLAG(VALUE h)
11614{
11615 RB_FL_SET_RAW(h, RHASH_TRANSIENT_FLAG);
11616}
11617static inline void
11618RHASH_UNSET_TRANSIENT_FLAG(VALUE h)
11619{
11620 RB_FL_UNSET_RAW(h, RHASH_TRANSIENT_FLAG);
11621}
11622enum rb_int_parse_flags {
11623 RB_INT_PARSE_SIGN = 0x01,
11624 RB_INT_PARSE_UNDERSCORE = 0x02,
11625 RB_INT_PARSE_PREFIX = 0x04,
11626 RB_INT_PARSE_ALL = 0x07,
11627 RB_INT_PARSE_DEFAULT = 0x07,
11628};
11629struct RBignum {
11630 struct RBasic basic;
11631 union {
11632 struct {
11633 size_t len;
11634 unsigned int *digits;
11635 } heap;
11636 unsigned int ary[(8*3/4)];
11637 } as;
11638};
11639extern const char ruby_digitmap[];
11640double rb_big_fdiv_double(VALUE x, VALUE y);
11641VALUE rb_big_uminus(VALUE x);
11642VALUE rb_big_hash(VALUE);
11643VALUE rb_big_odd_p(VALUE);
11644VALUE rb_big_even_p(VALUE);
11645size_t rb_big_size(VALUE);
11646VALUE rb_integer_float_cmp(VALUE x, VALUE y);
11647VALUE rb_integer_float_eq(VALUE x, VALUE y);
11648VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
11649VALUE rb_big_comp(VALUE x);
11650VALUE rb_big_aref(VALUE x, VALUE y);
11651VALUE rb_big_abs(VALUE x);
11652VALUE rb_big_size_m(VALUE big);
11653VALUE rb_big_bit_length(VALUE big);
11654VALUE rb_big_remainder(VALUE x, VALUE y);
11655VALUE rb_big_gt(VALUE x, VALUE y);
11656VALUE rb_big_ge(VALUE x, VALUE y);
11657VALUE rb_big_lt(VALUE x, VALUE y);
11658VALUE rb_big_le(VALUE x, VALUE y);
11659VALUE rb_int_powm(int const argc, VALUE * const argv, VALUE const num);
11660VALUE rb_big_isqrt(VALUE n);
11661static inline _Bool BIGNUM_SIGN(VALUE b);
11662static inline _Bool BIGNUM_POSITIVE_P(VALUE b);
11663static inline _Bool BIGNUM_NEGATIVE_P(VALUE b);
11664static inline void BIGNUM_SET_SIGN(VALUE b, _Bool sign);
11665static inline void BIGNUM_NEGATE(VALUE b);
11666static inline size_t BIGNUM_LEN(VALUE b);
11667static inline unsigned int *BIGNUM_DIGITS(VALUE b);
11668static inline int BIGNUM_LENINT(VALUE b);
11669static inline _Bool BIGNUM_EMBED_P(VALUE b);
11670
11671
11672VALUE rb_big_mul_normal(VALUE x, VALUE y);
11673VALUE rb_big_mul_balance(VALUE x, VALUE y);
11674VALUE rb_big_mul_karatsuba(VALUE x, VALUE y);
11675VALUE rb_big_mul_toom3(VALUE x, VALUE y);
11676VALUE rb_big_sq_fast(VALUE x);
11677VALUE rb_big_divrem_normal(VALUE x, VALUE y);
11678VALUE rb_big2str_poweroftwo(VALUE x, int base);
11679VALUE rb_big2str_generic(VALUE x, int base);
11680VALUE rb_str2big_poweroftwo(VALUE arg, int base, int badcheck);
11681VALUE rb_str2big_normal(VALUE arg, int base, int badcheck);
11682VALUE rb_str2big_karatsuba(VALUE arg, int base, int badcheck);
11683VALUE rb_big_mul_gmp(VALUE x, VALUE y);
11684VALUE rb_big_divrem_gmp(VALUE x, VALUE y);
11685VALUE rb_big2str_gmp(VALUE x, int base);
11686VALUE rb_str2big_gmp(VALUE arg, int base, int badcheck);
11687VALUE rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, int base, int flags);
11688
11689
11690
11691
11692VALUE rb_int128t2big(__int128 n);
11693
11694
11695static inline _Bool
11696BIGNUM_SIGN(VALUE b)
11697{
11698 return RB_FL_TEST_RAW(b, ((VALUE)RUBY_FL_USER1));
11699}
11700static inline _Bool
11701BIGNUM_POSITIVE_P(VALUE b)
11702{
11703 return BIGNUM_SIGN(b);
11704}
11705static inline _Bool
11706BIGNUM_NEGATIVE_P(VALUE b)
11707{
11708 return ! BIGNUM_POSITIVE_P(b);
11709}
11710static inline void
11711BIGNUM_SET_SIGN(VALUE b, _Bool sign)
11712{
11713 if (sign) {
11714 RB_FL_SET_RAW(b, ((VALUE)RUBY_FL_USER1));
11715 }
11716 else {
11717 RB_FL_UNSET_RAW(b, ((VALUE)RUBY_FL_USER1));
11718 }
11719}
11720static inline void
11721BIGNUM_NEGATE(VALUE b)
11722{
11723 RB_FL_REVERSE_RAW(b, ((VALUE)RUBY_FL_USER1));
11724}
11725static inline size_t
11726BIGNUM_LEN(VALUE b)
11727{
11728 if (! BIGNUM_EMBED_P(b)) {
11729 return ((struct RBignum *)(b))->as.heap.len;
11730 }
11731 else {
11732 size_t ret = ((struct RBasic *)(b))->flags;
11733 ret &= (~(~(VALUE)0U << 3) << (((VALUE)RUBY_FL_USHIFT)+3));
11734 ret >>= (((VALUE)RUBY_FL_USHIFT)+3);
11735 return ret;
11736 }
11737}
11738static inline int
11739BIGNUM_LENINT(VALUE b)
11740{
11741 return rb_long2int_inline(BIGNUM_LEN(b));
11742}
11743static inline unsigned int *
11744BIGNUM_DIGITS(VALUE b)
11745{
11746 if (BIGNUM_EMBED_P(b)) {
11747 return ((struct RBignum *)(b))->as.ary;
11748 }
11749 else {
11750 return ((struct RBignum *)(b))->as.heap.digits;
11751 }
11752}
11753static inline _Bool
11754BIGNUM_EMBED_P(VALUE b)
11755{
11756 return RB_FL_TEST_RAW(b, ((VALUE)((VALUE)RUBY_FL_USER2)));
11757}
11758static inline uint16_t ruby_swap16(uint16_t);
11759static inline uint32_t ruby_swap32(uint32_t);
11760static inline uint64_t ruby_swap64(uint64_t);
11761static inline unsigned nlz_int(unsigned x);
11762static inline unsigned nlz_long(unsigned long x);
11763static inline unsigned nlz_long_long(unsigned long long x);
11764static inline unsigned nlz_intptr(uintptr_t x);
11765static inline unsigned nlz_int32(uint32_t x);
11766static inline unsigned nlz_int64(uint64_t x);
11767static inline unsigned nlz_int128(unsigned __int128 x);
11768static inline unsigned rb_popcount32(uint32_t x);
11769static inline unsigned rb_popcount64(uint64_t x);
11770static inline unsigned rb_popcount_intptr(uintptr_t x);
11771static inline int ntz_int32(uint32_t x);
11772static inline int ntz_int64(uint64_t x);
11773static inline int ntz_intptr(uintptr_t x);
11774static inline VALUE RUBY_BIT_ROTL(VALUE, int);
11775static inline VALUE RUBY_BIT_ROTR(VALUE, int);
11776static inline uint16_t
11777ruby_swap16(uint16_t x)
11778{
11779 return __builtin_bswap16(x);
11780}
11781static inline uint32_t
11782ruby_swap32(uint32_t x)
11783{
11784 return __builtin_bswap32(x);
11785}
11786static inline uint64_t
11787ruby_swap64(uint64_t x)
11788{
11789 return __builtin_bswap64(x);
11790}
11791static inline unsigned int
11792nlz_int32(uint32_t x)
11793{
11794 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
11795 return x ? (unsigned int)__builtin_clz(x) : 32;
11796}
11797static inline unsigned int
11798nlz_int64(uint64_t x)
11799{
11800 if (x == 0) {
11801 return 64;
11802 }
11803 else if (sizeof(long) * 8 == 64) {
11804 return (unsigned int)__builtin_clzl((unsigned long)x);
11805 }
11806 else if (sizeof(long long) * 8 == 64) {
11807 return (unsigned int)__builtin_clzll((unsigned long long)x);
11808 }
11809 else {
11810 __builtin_unreachable();
11811 }
11812}
11813static inline unsigned int
11814nlz_int128(unsigned __int128 x)
11815{
11816 uint64_t y = (uint64_t)(x >> 64);
11817 if (x == 0) {
11818 return 128;
11819 }
11820 else if (y == 0) {
11821 return (unsigned int)nlz_int64(x) + 64;
11822 }
11823 else {
11824 return (unsigned int)nlz_int64(y);
11825 }
11826}
11827static inline unsigned int
11828nlz_int(unsigned int x)
11829{
11830 if (sizeof(unsigned int) * 8 == 32) {
11831 return nlz_int32((uint32_t)x);
11832 }
11833 else if (sizeof(unsigned int) * 8 == 64) {
11834 return nlz_int64((uint64_t)x);
11835 }
11836 else {
11837 __builtin_unreachable();
11838 }
11839}
11840static inline unsigned int
11841nlz_long(unsigned long x)
11842{
11843 if (sizeof(unsigned long) * 8 == 32) {
11844 return nlz_int32((uint32_t)x);
11845 }
11846 else if (sizeof(unsigned long) * 8 == 64) {
11847 return nlz_int64((uint64_t)x);
11848 }
11849 else {
11850 __builtin_unreachable();
11851 }
11852}
11853static inline unsigned int
11854nlz_long_long(unsigned long long x)
11855{
11856 if (sizeof(unsigned long long) * 8 == 64) {
11857 return nlz_int64((uint64_t)x);
11858 }
11859 else if (sizeof(unsigned long long) * 8 == 128) {
11860 return nlz_int128((unsigned __int128)x);
11861 }
11862 else {
11863 __builtin_unreachable();
11864 }
11865}
11866static inline unsigned int
11867nlz_intptr(uintptr_t x)
11868{
11869 if (sizeof(uintptr_t) == sizeof(unsigned int)) {
11870 return nlz_int((unsigned int)x);
11871 }
11872 if (sizeof(uintptr_t) == sizeof(unsigned long)) {
11873 return nlz_long((unsigned long)x);
11874 }
11875 if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
11876 return nlz_long_long((unsigned long long)x);
11877 }
11878 else {
11879 __builtin_unreachable();
11880 }
11881}
11882static inline unsigned int
11883rb_popcount32(uint32_t x)
11884{
11885 __extension__ _Static_assert(sizeof(int) * 8 >= 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT >= 32");
11886 return (unsigned int)__builtin_popcount(x);
11887}
11888static inline unsigned int
11889rb_popcount64(uint64_t x)
11890{
11891 if (sizeof(long) * 8 == 64) {
11892 return (unsigned int)__builtin_popcountl((unsigned long)x);
11893 }
11894 else if (sizeof(long long) * 8 == 64) {
11895 return (unsigned int)__builtin_popcountll((unsigned long long)x);
11896 }
11897 else {
11898 __builtin_unreachable();
11899 }
11900}
11901static inline unsigned int
11902rb_popcount_intptr(uintptr_t x)
11903{
11904 if (sizeof(uintptr_t) * 8 == 64) {
11905 return rb_popcount64((uint64_t)x);
11906 }
11907 else if (sizeof(uintptr_t) * 8 == 32) {
11908 return rb_popcount32((uint32_t)x);
11909 }
11910 else {
11911 __builtin_unreachable();
11912 }
11913}
11914static inline int
11915ntz_int32(uint32_t x)
11916{
11917 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
11918 return x ? (unsigned)__builtin_ctz(x) : 32;
11919}
11920static inline int
11921ntz_int64(uint64_t x)
11922{
11923 if (x == 0) {
11924 return 64;
11925 }
11926 else if (sizeof(long) * 8 == 64) {
11927 return (unsigned)__builtin_ctzl((unsigned long)x);
11928 }
11929 else if (sizeof(long long) * 8 == 64) {
11930 return (unsigned)__builtin_ctzll((unsigned long long)x);
11931 }
11932 else {
11933 __builtin_unreachable();
11934 }
11935}
11936static inline int
11937ntz_intptr(uintptr_t x)
11938{
11939 if (sizeof(uintptr_t) * 8 == 64) {
11940 return ntz_int64((uint64_t)x);
11941 }
11942 else if (sizeof(uintptr_t) * 8 == 32) {
11943 return ntz_int32((uint32_t)x);
11944 }
11945 else {
11946 __builtin_unreachable();
11947 }
11948}
11949static inline VALUE
11950RUBY_BIT_ROTL(VALUE v, int n)
11951{
11952 const int m = (sizeof(VALUE) * 8) - 1;
11953 return (v << (n & m)) | (v >> (-n & m));
11954}
11955static inline VALUE
11956RUBY_BIT_ROTR(VALUE v, int n)
11957{
11958 const int m = (sizeof(VALUE) * 8) - 1;
11959 return (v << (-n & m)) | (v >> (n & m));
11960}
11961VALUE rb_int128t2big(__int128 n);
11962static inline long rb_overflowed_fix_to_int(long x);
11963static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
11964static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
11965static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
11966static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
11967static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
11968static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
11969static inline _Bool FIXNUM_POSITIVE_P(VALUE num);
11970static inline _Bool FIXNUM_NEGATIVE_P(VALUE num);
11971static inline _Bool FIXNUM_ZERO_P(VALUE num);
11972static inline long
11973rb_overflowed_fix_to_int(long x)
11974{
11975 return (long)((unsigned long)(x >> 1) ^ (1LU << (8 * 8 - 1)));
11976}
11977static inline VALUE
11978rb_fix_plus_fix(VALUE x, VALUE y)
11979{
11980 long lz;
11981 if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
11982 return rb_int2big(rb_overflowed_fix_to_int(lz));
11983 }
11984 else {
11985 return (VALUE)lz;
11986 }
11987}
11988static inline VALUE
11989rb_fix_minus_fix(VALUE x, VALUE y)
11990{
11991 long lz;
11992 if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
11993 return rb_int2big(rb_overflowed_fix_to_int(lz));
11994 }
11995 else {
11996 return (VALUE)lz;
11997 }
11998}
11999static inline VALUE
12000rb_fix_mul_fix(VALUE x, VALUE y)
12001{
12002 long lx = rb_fix2long(x);
12003 long ly = rb_fix2long(y);
12004 return (((((__int128)lx * (__int128)ly) < (0x7fffffffffffffffL / 2) + 1) && (((__int128)lx * (__int128)ly) >= ((-0x7fffffffffffffffL -1L) / 2))) ? RB_INT2FIX((__int128)lx * (__int128)ly) : rb_int128t2big((__int128)lx * (__int128)ly));
12005}
12006static inline void
12007rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
12008{
12009 long x = rb_fix2long(a);
12010 long y = rb_fix2long(b);
12011 long div, mod;
12012 if (x == ((-0x7fffffffffffffffL -1L) / 2) && y == -1) {
12013 if (divp) *divp = rb_long2num_inline(-((-0x7fffffffffffffffL -1L) / 2));
12014 if (modp) *modp = RB_INT2FIX(0);
12015 return;
12016 }
12017 div = x / y;
12018 mod = x % y;
12019 if (y > 0 ? mod < 0 : mod > 0) {
12020 mod += y;
12021 div -= 1;
12022 }
12023 if (divp) *divp = RB_INT2FIX(div);
12024 if (modp) *modp = RB_INT2FIX(mod);
12025}
12026static inline VALUE
12027rb_fix_div_fix(VALUE x, VALUE y)
12028{
12029 VALUE div;
12030 rb_fix_divmod_fix(x, y, &div, ((void *)0));
12031 return div;
12032}
12033static inline VALUE
12034rb_fix_mod_fix(VALUE x, VALUE y)
12035{
12036 VALUE mod;
12037 rb_fix_divmod_fix(x, y, ((void *)0), &mod);
12038 return mod;
12039}
12040static inline _Bool
12041FIXNUM_POSITIVE_P(VALUE num)
12042{
12043 return (long)num > (long)__builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12044}
12045static inline _Bool
12046FIXNUM_NEGATIVE_P(VALUE num)
12047{
12048 return (long)num < 0;
12049}
12050static inline _Bool
12051FIXNUM_ZERO_P(VALUE num)
12052{
12053 return num == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12054}
12055enum ruby_num_rounding_mode {
12056 RUBY_NUM_ROUND_HALF_UP,
12057 RUBY_NUM_ROUND_HALF_EVEN,
12058 RUBY_NUM_ROUND_HALF_DOWN,
12059 RUBY_NUM_ROUND_DEFAULT = RUBY_NUM_ROUND_HALF_UP,
12060};
12061typedef double rb_float_value_type;
12062struct RFloat {
12063 struct RBasic basic;
12064 rb_float_value_type float_value;
12065};
12066int rb_num_to_uint(VALUE val, unsigned int *ret);
12067VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl);
12068double ruby_float_step_size(double beg, double end, double unit, int excl);
12069int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl, int allow_endless);
12070int rb_num_negative_p(VALUE);
12071VALUE rb_int_succ(VALUE num);
12072VALUE rb_float_uminus(VALUE num);
12073VALUE rb_int_plus(VALUE x, VALUE y);
12074VALUE rb_float_plus(VALUE x, VALUE y);
12075VALUE rb_int_minus(VALUE x, VALUE y);
12076VALUE rb_float_minus(VALUE x, VALUE y);
12077VALUE rb_int_mul(VALUE x, VALUE y);
12078VALUE rb_float_mul(VALUE x, VALUE y);
12079VALUE rb_float_div(VALUE x, VALUE y);
12080VALUE rb_int_idiv(VALUE x, VALUE y);
12081VALUE rb_int_modulo(VALUE x, VALUE y);
12082VALUE rb_int2str(VALUE num, int base);
12083VALUE rb_fix_plus(VALUE x, VALUE y);
12084VALUE rb_int_gt(VALUE x, VALUE y);
12085VALUE rb_float_gt(VALUE x, VALUE y);
12086VALUE rb_int_ge(VALUE x, VALUE y);
12087enum ruby_num_rounding_mode rb_num_get_rounding_option(VALUE opts);
12088double rb_int_fdiv_double(VALUE x, VALUE y);
12089VALUE rb_int_pow(VALUE x, VALUE y);
12090VALUE rb_float_pow(VALUE x, VALUE y);
12091VALUE rb_int_cmp(VALUE x, VALUE y);
12092VALUE rb_int_equal(VALUE x, VALUE y);
12093VALUE rb_int_divmod(VALUE x, VALUE y);
12094VALUE rb_int_and(VALUE x, VALUE y);
12095VALUE rb_int_lshift(VALUE x, VALUE y);
12096VALUE rb_int_div(VALUE x, VALUE y);
12097int rb_int_positive_p(VALUE num);
12098int rb_int_negative_p(VALUE num);
12099VALUE rb_check_integer_type(VALUE);
12100VALUE rb_num_pow(VALUE x, VALUE y);
12101VALUE rb_float_ceil(VALUE num, int ndigits);
12102VALUE rb_float_floor(VALUE x, int ndigits);
12103VALUE rb_float_abs(VALUE flt);
12104static inline VALUE rb_num_compare_with_zero(VALUE num, ID mid);
12105static inline int rb_num_positive_int_p(VALUE num);
12106static inline int rb_num_negative_int_p(VALUE num);
12107static inline double rb_float_flonum_value(VALUE v);
12108static inline double rb_float_noflonum_value(VALUE v);
12109static inline double rb_float_value_inline(VALUE v);
12110static inline VALUE rb_float_new_inline(double d);
12111static inline _Bool INT_POSITIVE_P(VALUE num);
12112static inline _Bool INT_NEGATIVE_P(VALUE num);
12113static inline _Bool FLOAT_ZERO_P(VALUE num);
12114
12115
12116
12117
12118
12119
12120VALUE rb_flo_div_flo(VALUE x, VALUE y);
12121double ruby_float_mod(double x, double y);
12122VALUE rb_float_equal(VALUE x, VALUE y);
12123int rb_float_cmp(VALUE x, VALUE y);
12124VALUE rb_float_eql(VALUE x, VALUE y);
12125VALUE rb_fix_aref(VALUE fix, VALUE idx);
12126VALUE rb_int_zero_p(VALUE num);
12127VALUE rb_int_even_p(VALUE num);
12128VALUE rb_int_odd_p(VALUE num);
12129VALUE rb_int_abs(VALUE num);
12130VALUE rb_int_bit_length(VALUE num);
12131VALUE rb_int_uminus(VALUE num);
12132VALUE rb_int_comp(VALUE num);
12133
12134
12135static inline _Bool
12136INT_POSITIVE_P(VALUE num)
12137{
12138 if (RB_FIXNUM_P(num)) {
12139 return FIXNUM_POSITIVE_P(num);
12140 }
12141 else {
12142 return BIGNUM_POSITIVE_P(num);
12143 }
12144}
12145static inline _Bool
12146INT_NEGATIVE_P(VALUE num)
12147{
12148 if (RB_FIXNUM_P(num)) {
12149 return FIXNUM_NEGATIVE_P(num);
12150 }
12151 else {
12152 return BIGNUM_NEGATIVE_P(num);
12153 }
12154}
12155static inline _Bool
12156FLOAT_ZERO_P(VALUE num)
12157{
12158 return rb_float_value_inline(num) == 0.0;
12159}
12160static inline VALUE
12161rb_num_compare_with_zero(VALUE num, ID mid)
12162{
12163 VALUE zero = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12164 VALUE r = rb_check_funcall(num, mid, 1, &zero);
12165 if (r == ((VALUE)RUBY_Qundef)) {
12166 rb_cmperr(num, zero);
12167 }
12168 return r;
12169}
12170static inline int
12171rb_num_positive_int_p(VALUE num)
12172{
12173 const ID mid = '>';
12174 if (RB_FIXNUM_P(num)) {
12175 if (rb_method_basic_definition_p(rb_cInteger, mid))
12176 return FIXNUM_POSITIVE_P(num);
12177 }
12178 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12179 if (rb_method_basic_definition_p(rb_cInteger, mid))
12180 return BIGNUM_POSITIVE_P(num);
12181 }
12182 return RB_TEST(rb_num_compare_with_zero(num, mid));
12183}
12184static inline int
12185rb_num_negative_int_p(VALUE num)
12186{
12187 const ID mid = '<';
12188 if (RB_FIXNUM_P(num)) {
12189 if (rb_method_basic_definition_p(rb_cInteger, mid))
12190 return FIXNUM_NEGATIVE_P(num);
12191 }
12192 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12193 if (rb_method_basic_definition_p(rb_cInteger, mid))
12194 return BIGNUM_NEGATIVE_P(num);
12195 }
12196 return RB_TEST(rb_num_compare_with_zero(num, mid));
12197}
12198static inline double
12199rb_float_flonum_value(VALUE v)
12200{
12201 if (v != (VALUE)0x8000000000000002) {
12202 union {
12203 double d;
12204 VALUE v;
12205 } t;
12206 VALUE b63 = (v >> 63);
12207 t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~(VALUE)0x03), 3);
12208 return t.d;
12209 }
12210 return 0.0;
12211}
12212static inline double
12213rb_float_noflonum_value(VALUE v)
12214{
12215 return ((struct RFloat *)(v))->float_value;
12216}
12217static inline double
12218rb_float_value_inline(VALUE v)
12219{
12220 if (RB_FLONUM_P(v)) {
12221 return rb_float_flonum_value(v);
12222 }
12223 return rb_float_noflonum_value(v);
12224}
12225static inline VALUE
12226rb_float_new_inline(double d)
12227{
12228 union {
12229 double d;
12230 VALUE v;
12231 } t;
12232 int bits;
12233 t.d = d;
12234 bits = (int)((VALUE)(t.v >> 60) & 0x7);
12235 if (t.v != 0x3000000000000000 &&
12236 !((bits-3) & ~0x01)) {
12237 return (RUBY_BIT_ROTL(t.v, 3) & ~(VALUE)0x01) | 0x02;
12238 }
12239 else if (t.v == (VALUE)0) {
12240 return 0x8000000000000002;
12241 }
12242 return rb_float_new_in_heap(d);
12243}
12244int ruby_fill_random_bytes(void *, size_t, int);
12245void rb_gc_mark_global_tbl(void);
12246void rb_gc_update_global_tbl(void);
12247size_t rb_generic_ivar_memsize(VALUE);
12248VALUE rb_search_class_path(VALUE);
12249VALUE rb_attr_delete(VALUE, ID);
12250VALUE rb_ivar_lookup(VALUE obj, ID id, VALUE undef);
12251void rb_autoload_str(VALUE mod, ID id, VALUE file);
12252VALUE rb_autoload_at_p(VALUE, ID, int);
12253__attribute__((__noreturn__)) VALUE rb_mod_const_missing(VALUE,VALUE);
12254rb_gvar_getter_t *rb_gvar_getter_function_of(ID);
12255rb_gvar_setter_t *rb_gvar_setter_function_of(ID);
12256void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_);
12257void rb_gvar_ractor_local(const char *name);
12258static inline _Bool ROBJ_TRANSIENT_P(VALUE obj);
12259static inline void ROBJ_TRANSIENT_SET(VALUE obj);
12260static inline void ROBJ_TRANSIENT_UNSET(VALUE obj);
12261uint32_t rb_obj_ensure_iv_index_mapping(VALUE obj, ID id);
12262
12263
12264void rb_mark_generic_ivar(VALUE);
12265void rb_mv_generic_ivar(VALUE src, VALUE dst);
12266VALUE rb_const_missing(VALUE klass, VALUE name);
12267int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
12268void rb_iv_tbl_copy(VALUE dst, VALUE src);
12269
12270
12271
12272
12273VALUE rb_gvar_get(ID);
12274VALUE rb_gvar_set(ID, VALUE);
12275VALUE rb_gvar_defined(ID);
12276void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID);
12277void rb_init_iv_list(VALUE obj);
12278
12279
12280static inline _Bool
12281ROBJ_TRANSIENT_P(VALUE obj)
12282{
12283 return RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_USER13));
12284}
12285static inline void
12286ROBJ_TRANSIENT_SET(VALUE obj)
12287{
12288 RB_FL_SET_RAW(obj, ((VALUE)RUBY_FL_USER13));
12289}
12290static inline void
12291ROBJ_TRANSIENT_UNSET(VALUE obj)
12292{
12293 RB_FL_UNSET_RAW(obj, ((VALUE)RUBY_FL_USER13));
12294}
12295enum {
12296 RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
12297 RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
12298 RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1),
12299 RSTRUCT_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER3),
12300};
12301struct RStruct {
12302 struct RBasic basic;
12303 union {
12304 struct {
12305 long len;
12306 const VALUE *ptr;
12307 } heap;
12308 const VALUE ary[RSTRUCT_EMBED_LEN_MAX];
12309 } as;
12310};
12311VALUE rb_struct_init_copy(VALUE copy, VALUE s);
12312VALUE rb_struct_lookup(VALUE s, VALUE idx);
12313VALUE rb_struct_s_keyword_init(VALUE klass);
12314static inline const VALUE *rb_struct_const_heap_ptr(VALUE st);
12315static inline _Bool RSTRUCT_TRANSIENT_P(VALUE st);
12316static inline void RSTRUCT_TRANSIENT_SET(VALUE st);
12317static inline void RSTRUCT_TRANSIENT_UNSET(VALUE st);
12318static inline long RSTRUCT_EMBED_LEN(VALUE st);
12319static inline long internal_RSTRUCT_LEN(VALUE st);
12320static inline int RSTRUCT_LENINT(VALUE st);
12321static inline const VALUE *RSTRUCT_CONST_PTR(VALUE st);
12322static inline void internal_RSTRUCT_SET(VALUE st, long k, VALUE v);
12323static inline VALUE internal_RSTRUCT_GET(VALUE st, long k);
12324static inline _Bool
12325RSTRUCT_TRANSIENT_P(VALUE st)
12326{
12327 return RB_FL_TEST_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12328}
12329static inline void
12330RSTRUCT_TRANSIENT_SET(VALUE st)
12331{
12332 RB_FL_SET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12333}
12334static inline void
12335RSTRUCT_TRANSIENT_UNSET(VALUE st)
12336{
12337 RB_FL_UNSET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12338}
12339static inline long
12340RSTRUCT_EMBED_LEN(VALUE st)
12341{
12342 long ret = RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK);
12343 ret >>= RSTRUCT_EMBED_LEN_SHIFT;
12344 return ret;
12345}
12346static inline long
12347internal_RSTRUCT_LEN(VALUE st)
12348{
12349 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12350 return RSTRUCT_EMBED_LEN(st);
12351 }
12352 else {
12353 return ((struct RStruct *)(st))->as.heap.len;
12354 }
12355}
12356static inline int
12357RSTRUCT_LENINT(VALUE st)
12358{
12359 return rb_long2int_inline(internal_RSTRUCT_LEN(st));
12360}
12361static inline const VALUE *
12362RSTRUCT_CONST_PTR(VALUE st)
12363{
12364 const struct RStruct *p = ((struct RStruct *)(st));
12365 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12366 return p->as.ary;
12367 }
12368 else {
12369 return p->as.heap.ptr;
12370 }
12371}
12372static inline void
12373internal_RSTRUCT_SET(VALUE st, long k, VALUE v)
12374{
12375 rb_obj_write((VALUE)(st), __extension__({
12376 ;
12377 ; __typeof__((VALUE *)(&RSTRUCT_CONST_PTR(st)[k])) unaligned_member_access_result = ((VALUE *)(&RSTRUCT_CONST_PTR(st)[k]));
12378 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.1.3/internal/struct.h", 137);
12379}
12380static inline VALUE
12381internal_RSTRUCT_GET(VALUE st, long k)
12382{
12383 return RSTRUCT_CONST_PTR(st)[k];
12384}
12385static inline const VALUE *
12386rb_struct_const_heap_ptr(VALUE st)
12387{
12388 return ((struct RStruct *)(st))->as.heap.ptr;
12389}
12390struct gen_ivtbl {
12391 uint32_t numiv;
12392 VALUE ivptr[];
12393};
12394int rb_ivar_generic_ivtbl_lookup(VALUE obj, struct gen_ivtbl **);
12395VALUE rb_ivar_generic_lookup_with_index(VALUE obj, ID id, uint32_t index);
12396enum ruby_vminsn_type {
12397 YARVINSN_nop,
12398 YARVINSN_getlocal,
12399 YARVINSN_setlocal,
12400 YARVINSN_getblockparam,
12401 YARVINSN_setblockparam,
12402 YARVINSN_getblockparamproxy,
12403 YARVINSN_getspecial,
12404 YARVINSN_setspecial,
12405 YARVINSN_getinstancevariable,
12406 YARVINSN_setinstancevariable,
12407 YARVINSN_getclassvariable,
12408 YARVINSN_setclassvariable,
12409 YARVINSN_getconstant,
12410 YARVINSN_setconstant,
12411 YARVINSN_getglobal,
12412 YARVINSN_setglobal,
12413 YARVINSN_putnil,
12414 YARVINSN_putself,
12415 YARVINSN_putobject,
12416 YARVINSN_putspecialobject,
12417 YARVINSN_putstring,
12418 YARVINSN_concatstrings,
12419 YARVINSN_anytostring,
12420 YARVINSN_toregexp,
12421 YARVINSN_intern,
12422 YARVINSN_newarray,
12423 YARVINSN_newarraykwsplat,
12424 YARVINSN_duparray,
12425 YARVINSN_duphash,
12426 YARVINSN_expandarray,
12427 YARVINSN_concatarray,
12428 YARVINSN_splatarray,
12429 YARVINSN_newhash,
12430 YARVINSN_newrange,
12431 YARVINSN_pop,
12432 YARVINSN_dup,
12433 YARVINSN_dupn,
12434 YARVINSN_swap,
12435 YARVINSN_topn,
12436 YARVINSN_setn,
12437 YARVINSN_adjuststack,
12438 YARVINSN_defined,
12439 YARVINSN_checkmatch,
12440 YARVINSN_checkkeyword,
12441 YARVINSN_checktype,
12442 YARVINSN_defineclass,
12443 YARVINSN_definemethod,
12444 YARVINSN_definesmethod,
12445 YARVINSN_send,
12446 YARVINSN_opt_send_without_block,
12447 YARVINSN_objtostring,
12448 YARVINSN_opt_str_freeze,
12449 YARVINSN_opt_nil_p,
12450 YARVINSN_opt_str_uminus,
12451 YARVINSN_opt_newarray_max,
12452 YARVINSN_opt_newarray_min,
12453 YARVINSN_invokesuper,
12454 YARVINSN_invokeblock,
12455 YARVINSN_leave,
12456 YARVINSN_throw,
12457 YARVINSN_jump,
12458 YARVINSN_branchif,
12459 YARVINSN_branchunless,
12460 YARVINSN_branchnil,
12461 YARVINSN_opt_getinlinecache,
12462 YARVINSN_opt_setinlinecache,
12463 YARVINSN_once,
12464 YARVINSN_opt_case_dispatch,
12465 YARVINSN_opt_plus,
12466 YARVINSN_opt_minus,
12467 YARVINSN_opt_mult,
12468 YARVINSN_opt_div,
12469 YARVINSN_opt_mod,
12470 YARVINSN_opt_eq,
12471 YARVINSN_opt_neq,
12472 YARVINSN_opt_lt,
12473 YARVINSN_opt_le,
12474 YARVINSN_opt_gt,
12475 YARVINSN_opt_ge,
12476 YARVINSN_opt_ltlt,
12477 YARVINSN_opt_and,
12478 YARVINSN_opt_or,
12479 YARVINSN_opt_aref,
12480 YARVINSN_opt_aset,
12481 YARVINSN_opt_aset_with,
12482 YARVINSN_opt_aref_with,
12483 YARVINSN_opt_length,
12484 YARVINSN_opt_size,
12485 YARVINSN_opt_empty_p,
12486 YARVINSN_opt_succ,
12487 YARVINSN_opt_not,
12488 YARVINSN_opt_regexpmatch2,
12489 YARVINSN_invokebuiltin,
12490 YARVINSN_opt_invokebuiltin_delegate,
12491 YARVINSN_opt_invokebuiltin_delegate_leave,
12492 YARVINSN_getlocal_WC_0,
12493 YARVINSN_getlocal_WC_1,
12494 YARVINSN_setlocal_WC_0,
12495 YARVINSN_setlocal_WC_1,
12496 YARVINSN_putobject_INT2FIX_0_,
12497 YARVINSN_putobject_INT2FIX_1_,
12498 YARVINSN_trace_nop,
12499 YARVINSN_trace_getlocal,
12500 YARVINSN_trace_setlocal,
12501 YARVINSN_trace_getblockparam,
12502 YARVINSN_trace_setblockparam,
12503 YARVINSN_trace_getblockparamproxy,
12504 YARVINSN_trace_getspecial,
12505 YARVINSN_trace_setspecial,
12506 YARVINSN_trace_getinstancevariable,
12507 YARVINSN_trace_setinstancevariable,
12508 YARVINSN_trace_getclassvariable,
12509 YARVINSN_trace_setclassvariable,
12510 YARVINSN_trace_getconstant,
12511 YARVINSN_trace_setconstant,
12512 YARVINSN_trace_getglobal,
12513 YARVINSN_trace_setglobal,
12514 YARVINSN_trace_putnil,
12515 YARVINSN_trace_putself,
12516 YARVINSN_trace_putobject,
12517 YARVINSN_trace_putspecialobject,
12518 YARVINSN_trace_putstring,
12519 YARVINSN_trace_concatstrings,
12520 YARVINSN_trace_anytostring,
12521 YARVINSN_trace_toregexp,
12522 YARVINSN_trace_intern,
12523 YARVINSN_trace_newarray,
12524 YARVINSN_trace_newarraykwsplat,
12525 YARVINSN_trace_duparray,
12526 YARVINSN_trace_duphash,
12527 YARVINSN_trace_expandarray,
12528 YARVINSN_trace_concatarray,
12529 YARVINSN_trace_splatarray,
12530 YARVINSN_trace_newhash,
12531 YARVINSN_trace_newrange,
12532 YARVINSN_trace_pop,
12533 YARVINSN_trace_dup,
12534 YARVINSN_trace_dupn,
12535 YARVINSN_trace_swap,
12536 YARVINSN_trace_topn,
12537 YARVINSN_trace_setn,
12538 YARVINSN_trace_adjuststack,
12539 YARVINSN_trace_defined,
12540 YARVINSN_trace_checkmatch,
12541 YARVINSN_trace_checkkeyword,
12542 YARVINSN_trace_checktype,
12543 YARVINSN_trace_defineclass,
12544 YARVINSN_trace_definemethod,
12545 YARVINSN_trace_definesmethod,
12546 YARVINSN_trace_send,
12547 YARVINSN_trace_opt_send_without_block,
12548 YARVINSN_trace_objtostring,
12549 YARVINSN_trace_opt_str_freeze,
12550 YARVINSN_trace_opt_nil_p,
12551 YARVINSN_trace_opt_str_uminus,
12552 YARVINSN_trace_opt_newarray_max,
12553 YARVINSN_trace_opt_newarray_min,
12554 YARVINSN_trace_invokesuper,
12555 YARVINSN_trace_invokeblock,
12556 YARVINSN_trace_leave,
12557 YARVINSN_trace_throw,
12558 YARVINSN_trace_jump,
12559 YARVINSN_trace_branchif,
12560 YARVINSN_trace_branchunless,
12561 YARVINSN_trace_branchnil,
12562 YARVINSN_trace_opt_getinlinecache,
12563 YARVINSN_trace_opt_setinlinecache,
12564 YARVINSN_trace_once,
12565 YARVINSN_trace_opt_case_dispatch,
12566 YARVINSN_trace_opt_plus,
12567 YARVINSN_trace_opt_minus,
12568 YARVINSN_trace_opt_mult,
12569 YARVINSN_trace_opt_div,
12570 YARVINSN_trace_opt_mod,
12571 YARVINSN_trace_opt_eq,
12572 YARVINSN_trace_opt_neq,
12573 YARVINSN_trace_opt_lt,
12574 YARVINSN_trace_opt_le,
12575 YARVINSN_trace_opt_gt,
12576 YARVINSN_trace_opt_ge,
12577 YARVINSN_trace_opt_ltlt,
12578 YARVINSN_trace_opt_and,
12579 YARVINSN_trace_opt_or,
12580 YARVINSN_trace_opt_aref,
12581 YARVINSN_trace_opt_aset,
12582 YARVINSN_trace_opt_aset_with,
12583 YARVINSN_trace_opt_aref_with,
12584 YARVINSN_trace_opt_length,
12585 YARVINSN_trace_opt_size,
12586 YARVINSN_trace_opt_empty_p,
12587 YARVINSN_trace_opt_succ,
12588 YARVINSN_trace_opt_not,
12589 YARVINSN_trace_opt_regexpmatch2,
12590 YARVINSN_trace_invokebuiltin,
12591 YARVINSN_trace_opt_invokebuiltin_delegate,
12592 YARVINSN_trace_opt_invokebuiltin_delegate_leave,
12593 YARVINSN_trace_getlocal_WC_0,
12594 YARVINSN_trace_getlocal_WC_1,
12595 YARVINSN_trace_setlocal_WC_0,
12596 YARVINSN_trace_setlocal_WC_1,
12597 YARVINSN_trace_putobject_INT2FIX_0_,
12598 YARVINSN_trace_putobject_INT2FIX_1_,
12599 VM_INSTRUCTION_SIZE
12600};
12601extern rb_method_definition_t *rb_method_definition_create(rb_method_type_t type, ID mid);
12602extern void rb_method_definition_set(const rb_method_entry_t *me, rb_method_definition_t *def, void *opts);
12603extern int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2);
12604extern VALUE rb_make_no_method_exception(VALUE exc, VALUE format, VALUE obj,
12605 int argc, const VALUE *argv, int priv);
12606static rb_control_frame_t *vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
12607static VALUE
12608ruby_vm_special_exception_copy(VALUE exc)
12609{
12610 VALUE e = rb_obj_alloc(rb_class_real(RBASIC_CLASS(exc)));
12611 rb_obj_copy_ivar(e, exc);
12612 return e;
12613}
12614__attribute__((__noreturn__)) static void ec_stack_overflow(rb_execution_context_t *ec, int);
12615static void
12616ec_stack_overflow(rb_execution_context_t *ec, int setup)
12617{
12618 VALUE mesg = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_sysstack];
12619 ec->raised_flag = RAISED_STACKOVERFLOW;
12620 if (setup) {
12621 VALUE at = rb_ec_backtrace_object(ec);
12622 mesg = ruby_vm_special_exception_copy(mesg);
12623 rb_ivar_set(mesg, idBt, at);
12624 rb_ivar_set(mesg, idBt_locations, at);
12625 }
12626 ec->errinfo = mesg;
12627 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12628}
12629__attribute__((__noreturn__)) static void vm_stackoverflow(void);
12630__attribute__((__noinline__)) static __attribute__((__cold__)) void vm_stackoverflow(void);
12631static void
12632vm_stackoverflow(void)
12633{
12634 ec_stack_overflow(rb_current_execution_context(1), 1);
12635}
12636__attribute__((__noreturn__)) static void rb_ec_stack_overflow(rb_execution_context_t *ec, int crit);
12637static void
12638rb_ec_stack_overflow(rb_execution_context_t *ec, int crit)
12639{
12640 if (rb_during_gc()) {
12641 rb_bug("system stack overflow during GC. Faulty native extension?");
12642 }
12643 if (crit) {
12644 ec->raised_flag = RAISED_STACKOVERFLOW;
12645 ec->errinfo = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_stackfatal];
12646 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12647 }
12648 ec_stack_overflow(ec, 1);
12649}
12650__extension__ _Static_assert((-2) == -2, "VM_ENV_DATA_INDEX_ME_CREF" ": " "VM_ENV_DATA_INDEX_ME_CREF == -2");
12651__extension__ _Static_assert((-1) == -1, "VM_ENV_DATA_INDEX_SPECVAL" ": " "VM_ENV_DATA_INDEX_SPECVAL == -1");
12652__extension__ _Static_assert(( 0) == -0, "VM_ENV_DATA_INDEX_FLAGS" ": " "VM_ENV_DATA_INDEX_FLAGS == -0");
12653static void
12654vm_push_frame(rb_execution_context_t *ec,
12655 const rb_iseq_t *iseq,
12656 VALUE type,
12657 VALUE self,
12658 VALUE specval,
12659 VALUE cref_or_me,
12660 const VALUE *pc,
12661 VALUE *sp,
12662 int local_size,
12663 int stack_max)
12664{
12665 rb_control_frame_t *const cfp = ((ec->cfp)-1);
12666 ;
12667 ((void)0);
12668 do { __extension__ _Static_assert(sizeof(*(sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*(sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*(cfp)) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*(cfp)) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&(sp)[(local_size + stack_max)]; if ((__builtin_expect(!!((cfp) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
12669 ;
12670 for (int i=0; i < local_size; i++) {
12671 *sp++ = ((VALUE)RUBY_Qnil);
12672 }
12673 *sp++ = cref_or_me;
12674 *sp++ = specval ;
12675 *sp++ = type;
12676 *cfp = (const struct rb_control_frame_struct) {
12677 .pc = pc,
12678 .sp = sp,
12679 .iseq = iseq,
12680 .self = self,
12681 .ep = sp - 1,
12682 .block_code = ((void *)0),
12683 .__bp__ = sp,
12684 .jit_return = ((void *)0)
12685 };
12686 ec->cfp = cfp;
12687 if (0 == 2) {
12688 rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12689 }
12690 ;
12691}
12692static inline int
12693vm_pop_frame(rb_execution_context_t *ec, rb_control_frame_t *cfp, const VALUE *ep)
12694{
12695 VALUE flags = ep[( 0)];
12696 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12697 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12698 rb_vm_check_ints(ec);
12699 ec->cfp = ((cfp)+1);
12700 return flags & VM_FRAME_FLAG_FINISH;
12701}
12702static void
12703rb_vm_pop_frame(rb_execution_context_t *ec)
12704{
12705 vm_pop_frame(ec, ec->cfp, ec->cfp->ep);
12706}
12707static inline VALUE
12708rb_arity_error_new(int argc, int min, int max)
12709{
12710 VALUE err_mess = 0;
12711 if (min == max) {
12712 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d)", argc, min);
12713 }
12714 else if (max == (-1)) {
12715 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d+)", argc, min);
12716 }
12717 else {
12718 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d..%d)", argc, min, max);
12719 }
12720 return rb_exc_new_str(rb_eArgError, err_mess);
12721}
12722static void
12723rb_error_arity(int argc, int min, int max)
12724{
12725 rb_exc_raise(rb_arity_error_new(argc, min, max));
12726}
12727__attribute__((__noinline__)) static void vm_env_write_slowpath(const VALUE *ep, int index, VALUE v);
12728static void
12729vm_env_write_slowpath(const VALUE *ep, int index, VALUE v)
12730{
12731 rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep));
12732 VM_FORCE_WRITE(&ep[index], v);
12733 VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED);
12734 ((void)0);
12735}
12736static inline void
12737vm_env_write(const VALUE *ep, int index, VALUE v)
12738{
12739 VALUE flags = ep[( 0)];
12740 if ((__builtin_expect(!!((flags & VM_ENV_FLAG_WB_REQUIRED) == 0), 1))) {
12741 VM_STACK_ENV_WRITE(ep, index, v);
12742 }
12743 else {
12744 vm_env_write_slowpath(ep, index, v);
12745 }
12746}
12747static VALUE
12748rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler)
12749{
12750 if (block_handler == 0) {
12751 return ((VALUE)RUBY_Qnil);
12752 }
12753 else {
12754 switch (vm_block_handler_type(block_handler)) {
12755 case block_handler_type_iseq:
12756 case block_handler_type_ifunc:
12757 return rb_vm_make_proc(ec, VM_BH_TO_CAPT_BLOCK(block_handler), rb_cProc);
12758 case block_handler_type_symbol:
12759 return rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
12760 case block_handler_type_proc:
12761 return VM_BH_TO_PROC(block_handler);
12762 default:
12763 __builtin_unreachable();
12764 }
12765 }
12766}
12767static inline struct vm_svar *
12768lep_svar(const rb_execution_context_t *ec, const VALUE *lep)
12769{
12770 VALUE svar;
12771 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
12772 svar = lep[(-2)];
12773 }
12774 else {
12775 svar = ec->root_svar;
12776 }
12777 ((void)0);
12778 return (struct vm_svar *)svar;
12779}
12780static inline void
12781lep_svar_write(const rb_execution_context_t *ec, const VALUE *lep, const struct vm_svar *svar)
12782{
12783 ((void)0);
12784 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
12785 vm_env_write(lep, (-2), (VALUE)svar);
12786 }
12787 else {
12788 rb_obj_write((VALUE)(rb_ec_thread_ptr(ec)->self), __extension__({
12789;
12790; __typeof__((VALUE *)(&ec->root_svar)) unaligned_member_access_result = ((VALUE *)(&ec->root_svar));
12791; unaligned_member_access_result; }), (VALUE)(svar), "../ruby-3.1.3/vm_insnhelper.c", 544);
12792 }
12793}
12794static VALUE
12795lep_svar_get(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key)
12796{
12797 const struct vm_svar *svar = lep_svar(ec, lep);
12798 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) return ((VALUE)RUBY_Qnil);
12799 switch (key) {
12800 case VM_SVAR_LASTLINE:
12801 return svar->lastline;
12802 case VM_SVAR_BACKREF:
12803 return svar->backref;
12804 default: {
12805 const VALUE ary = svar->others;
12806 if (RB_NIL_P(ary)) {
12807 return ((VALUE)RUBY_Qnil);
12808 }
12809 else {
12810 return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START);
12811 }
12812 }
12813 }
12814}
12815static struct vm_svar *
12816svar_new(VALUE obj)
12817{
12818 return (struct vm_svar *)rb_imemo_new(imemo_svar, ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), obj);
12819}
12820static void
12821lep_svar_set(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, VALUE val)
12822{
12823 struct vm_svar *svar = lep_svar(ec, lep);
12824 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) {
12825 lep_svar_write(ec, lep, svar = svar_new((VALUE)svar));
12826 }
12827 switch (key) {
12828 case VM_SVAR_LASTLINE:
12829 rb_obj_write((VALUE)(svar), __extension__({
12830;
12831; __typeof__((VALUE *)(&svar->lastline)) unaligned_member_access_result = ((VALUE *)(&svar->lastline));
12832; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 590);
12833 return;
12834 case VM_SVAR_BACKREF:
12835 rb_obj_write((VALUE)(svar), __extension__({
12836;
12837; __typeof__((VALUE *)(&svar->backref)) unaligned_member_access_result = ((VALUE *)(&svar->backref));
12838; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 593);
12839 return;
12840 default: {
12841 VALUE ary = svar->others;
12842 if (RB_NIL_P(ary)) {
12843 rb_obj_write((VALUE)(svar), __extension__({
12844 ;
12845 ; __typeof__((VALUE *)(&svar->others)) unaligned_member_access_result = ((VALUE *)(&svar->others));
12846 ; unaligned_member_access_result; }), (VALUE)(ary = rb_ary_new()), "../ruby-3.1.3/vm_insnhelper.c", 599);
12847 }
12848 rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val);
12849 }
12850 }
12851}
12852static inline VALUE
12853vm_getspecial(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, rb_num_t type)
12854{
12855 VALUE val;
12856 if (type == 0) {
12857 val = lep_svar_get(ec, lep, key);
12858 }
12859 else {
12860 VALUE backref = lep_svar_get(ec, lep, VM_SVAR_BACKREF);
12861 if (type & 0x01) {
12862 switch (type >> 1) {
12863 case '&':
12864 val = rb_reg_last_match(backref);
12865 break;
12866 case '`':
12867 val = rb_reg_match_pre(backref);
12868 break;
12869 case '\'':
12870 val = rb_reg_match_post(backref);
12871 break;
12872 case '+':
12873 val = rb_reg_match_last(backref);
12874 break;
12875 default:
12876 rb_bug("unexpected back-ref");
12877 }
12878 }
12879 else {
12880 val = rb_reg_nth_match((int)(type >> 1), backref);
12881 }
12882 }
12883 return val;
12884}
12885__attribute__((__pure__)) static rb_callable_method_entry_t *check_method_entry(VALUE obj, int can_be_svar);
12886static rb_callable_method_entry_t *
12887check_method_entry(VALUE obj, int can_be_svar)
12888{
12889 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
12890 switch (imemo_type(obj)) {
12891 case imemo_ment:
12892 return (rb_callable_method_entry_t *)obj;
12893 case imemo_cref:
12894 return ((void *)0);
12895 case imemo_svar:
12896 if (can_be_svar) {
12897 return check_method_entry(((struct vm_svar *)obj)->cref_or_me, 0);
12898 }
12899 default:
12900 return ((void *)0);
12901 }
12902}
12903static const rb_callable_method_entry_t *
12904rb_vm_frame_method_entry(const rb_control_frame_t *cfp)
12905{
12906 const VALUE *ep = cfp->ep;
12907 rb_callable_method_entry_t *me;
12908 while (!VM_ENV_LOCAL_P(ep)) {
12909 if ((me = check_method_entry(ep[(-2)], 0)) != ((void *)0)) return me;
12910 ep = VM_ENV_PREV_EP(ep);
12911 }
12912 return check_method_entry(ep[(-2)], 1);
12913}
12914static const rb_iseq_t *
12915method_entry_iseqptr(const rb_callable_method_entry_t *me)
12916{
12917 switch (me->def->type) {
12918 case VM_METHOD_TYPE_ISEQ:
12919 return me->def->body.iseq.iseqptr;
12920 default:
12921 return ((void *)0);
12922 }
12923}
12924static rb_cref_t *
12925method_entry_cref(const rb_callable_method_entry_t *me)
12926{
12927 switch (me->def->type) {
12928 case VM_METHOD_TYPE_ISEQ:
12929 return me->def->body.iseq.cref;
12930 default:
12931 return ((void *)0);
12932 }
12933}
12934__attribute__((__pure__)) static rb_cref_t *check_cref(VALUE, int);
12935static rb_cref_t *
12936check_cref(VALUE obj, int can_be_svar)
12937{
12938 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
12939 switch (imemo_type(obj)) {
12940 case imemo_ment:
12941 return method_entry_cref((rb_callable_method_entry_t *)obj);
12942 case imemo_cref:
12943 return (rb_cref_t *)obj;
12944 case imemo_svar:
12945 if (can_be_svar) {
12946 return check_cref(((struct vm_svar *)obj)->cref_or_me, 0);
12947 }
12948 default:
12949 return ((void *)0);
12950 }
12951}
12952static inline rb_cref_t *
12953vm_env_cref(const VALUE *ep)
12954{
12955 rb_cref_t *cref;
12956 while (!VM_ENV_LOCAL_P(ep)) {
12957 if ((cref = check_cref(ep[(-2)], 0)) != ((void *)0)) return cref;
12958 ep = VM_ENV_PREV_EP(ep);
12959 }
12960 return check_cref(ep[(-2)], 1);
12961}
12962static int
12963is_cref(const VALUE v, int can_be_svar)
12964{
12965 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
12966 switch (imemo_type(v)) {
12967 case imemo_cref:
12968 return 1;
12969 case imemo_svar:
12970 if (can_be_svar) return is_cref(((struct vm_svar *)v)->cref_or_me, 0);
12971 default:
12972 break;
12973 }
12974 }
12975 return 0;
12976}
12977static int
12978vm_env_cref_by_cref(const VALUE *ep)
12979{
12980 while (!VM_ENV_LOCAL_P(ep)) {
12981 if (is_cref(ep[(-2)], 0)) return 1;
12982 ep = VM_ENV_PREV_EP(ep);
12983 }
12984 return is_cref(ep[(-2)], 1);
12985}
12986static rb_cref_t *
12987cref_replace_with_duplicated_cref_each_frame(const VALUE *vptr, int can_be_svar, VALUE parent)
12988{
12989 const VALUE v = *vptr;
12990 rb_cref_t *cref, *new_cref;
12991 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
12992 switch (imemo_type(v)) {
12993 case imemo_cref:
12994 cref = (rb_cref_t *)v;
12995 new_cref = vm_cref_dup(cref);
12996 if (parent) {
12997 rb_obj_write((VALUE)(parent), __extension__({
12998 ;
12999 ; __typeof__((VALUE *)(vptr)) unaligned_member_access_result = ((VALUE *)(vptr));
13000 ; unaligned_member_access_result; }), (VALUE)(new_cref), "../ruby-3.1.3/vm_insnhelper.c", 785);
13001 }
13002 else {
13003 VM_FORCE_WRITE(vptr, (VALUE)new_cref);
13004 }
13005 return (rb_cref_t *)new_cref;
13006 case imemo_svar:
13007 if (can_be_svar) {
13008 return cref_replace_with_duplicated_cref_each_frame(&((struct vm_svar *)v)->cref_or_me, 0, v);
13009 }
13010 case imemo_ment:
13011 rb_bug("cref_replace_with_duplicated_cref_each_frame: unreachable");
13012 default:
13013 break;
13014 }
13015 }
13016 return 0;
13017}
13018static rb_cref_t *
13019vm_cref_replace_with_duplicated_cref(const VALUE *ep)
13020{
13021 if (vm_env_cref_by_cref(ep)) {
13022 rb_cref_t *cref;
13023 VALUE envval;
13024 while (!VM_ENV_LOCAL_P(ep)) {
13025 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13026 if ((cref = cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 0, envval)) != ((void *)0)) {
13027 return cref;
13028 }
13029 ep = VM_ENV_PREV_EP(ep);
13030 }
13031 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13032 return cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 1, envval);
13033 }
13034 else {
13035 rb_bug("vm_cref_dup: unreachable");
13036 }
13037}
13038static rb_cref_t *
13039vm_get_cref(const VALUE *ep)
13040{
13041 rb_cref_t *cref = vm_env_cref(ep);
13042 if (cref != ((void *)0)) {
13043 return cref;
13044 }
13045 else {
13046 rb_bug("vm_get_cref: unreachable");
13047 }
13048}static inline
13049rb_cref_t *
13050rb_vm_get_cref(const VALUE *ep)
13051{
13052 return vm_get_cref(ep);
13053}
13054static rb_cref_t *
13055vm_ec_cref(const rb_execution_context_t *ec)
13056{
13057 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
13058 if (cfp == ((void *)0)) {
13059 return ((void *)0);
13060 }
13061 return vm_get_cref(cfp->ep);
13062}
13063static const rb_cref_t *
13064vm_get_const_key_cref(const VALUE *ep)
13065{
13066 const rb_cref_t *cref = vm_get_cref(ep);
13067 const rb_cref_t *key_cref = cref;
13068 while (cref) {
13069 if (RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13070 RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_USER6))) {
13071 return key_cref;
13072 }
13073 cref = CREF_NEXT(cref);
13074 }
13075 return ((void *)0);
13076}static inline
13077void
13078rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr)
13079{
13080 rb_cref_t *new_cref;
13081 while (cref) {
13082 if (CREF_CLASS(cref) == old_klass) {
13083 new_cref = vm_cref_new_use_prev(new_klass, METHOD_VISI_UNDEF, 0, cref, 0);
13084 *new_cref_ptr = new_cref;
13085 return;
13086 }
13087 new_cref = vm_cref_new_use_prev(CREF_CLASS(cref), METHOD_VISI_UNDEF, 0, cref, 0);
13088 cref = CREF_NEXT(cref);
13089 *new_cref_ptr = new_cref;
13090 new_cref_ptr = &new_cref->next;
13091 }
13092 *new_cref_ptr = ((void *)0);
13093}
13094static rb_cref_t *
13095vm_cref_push(const rb_execution_context_t *ec, VALUE klass, const VALUE *ep, int pushed_by_eval, int singleton)
13096{
13097 rb_cref_t *prev_cref = ((void *)0);
13098 if (ep) {
13099 prev_cref = vm_env_cref(ep);
13100 }
13101 else {
13102 rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(ec, ec->cfp);
13103 if (cfp) {
13104 prev_cref = vm_env_cref(cfp->ep);
13105 }
13106 }
13107 return vm_cref_new(klass, METHOD_VISI_PUBLIC, 0, prev_cref, pushed_by_eval, singleton);
13108}
13109static inline VALUE
13110vm_get_cbase(const VALUE *ep)
13111{
13112 const rb_cref_t *cref = vm_get_cref(ep);
13113 return CREF_CLASS_FOR_DEFINITION(cref);
13114}
13115static inline VALUE
13116vm_get_const_base(const VALUE *ep)
13117{
13118 const rb_cref_t *cref = vm_get_cref(ep);
13119 while (cref) {
13120 if (!CREF_PUSHED_BY_EVAL(cref)) {
13121 return CREF_CLASS_FOR_DEFINITION(cref);
13122 }
13123 cref = CREF_NEXT(cref);
13124 }
13125 return ((VALUE)RUBY_Qundef);
13126}
13127static inline void
13128vm_check_if_namespace(VALUE klass)
13129{
13130 if (!RB_TYPE_P(klass, RUBY_T_CLASS) && !RB_TYPE_P(klass, RUBY_T_MODULE)) {
13131 rb_raise(rb_eTypeError, "%+""l""i" "\v"" is not a class/module", klass);
13132 }
13133}
13134static inline void
13135vm_ensure_not_refinement_module(VALUE self)
13136{
13137 if (RB_TYPE_P(self, RUBY_T_MODULE) && RB_FL_TEST(self, RMODULE_IS_REFINEMENT)) {
13138 rb_warn("not defined at the refinement, but at the outer class/module");
13139 }
13140}
13141static inline VALUE
13142vm_get_iclass(const rb_control_frame_t *cfp, VALUE klass)
13143{
13144 return klass;
13145}
13146static inline VALUE
13147vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, _Bool allow_nil, int is_defined)
13148{
13149 void rb_const_warn_if_deprecated(const rb_const_entry_t *ce, VALUE klass, ID id);
13150 VALUE val;
13151 if (RB_NIL_P(orig_klass) && allow_nil) {
13152 const rb_cref_t *root_cref = vm_get_cref(ec->cfp->ep);
13153 const rb_cref_t *cref;
13154 VALUE klass = ((VALUE)RUBY_Qnil);
13155 while (root_cref && CREF_PUSHED_BY_EVAL(root_cref)) {
13156 root_cref = CREF_NEXT(root_cref);
13157 }
13158 cref = root_cref;
13159 while (cref && CREF_NEXT(cref)) {
13160 if (CREF_PUSHED_BY_EVAL(cref)) {
13161 klass = ((VALUE)RUBY_Qnil);
13162 }
13163 else {
13164 klass = CREF_CLASS(cref);
13165 }
13166 cref = CREF_NEXT(cref);
13167 if (!RB_NIL_P(klass)) {
13168 VALUE av, am = 0;
13169 rb_const_entry_t *ce;
13170 search_continue:
13171 if ((ce = rb_const_lookup(klass, id))) {
13172 rb_const_warn_if_deprecated(ce, klass, id);
13173 val = ce->value;
13174 if (val == ((VALUE)RUBY_Qundef)) {
13175 if (am == klass) break;
13176 am = klass;
13177 if (is_defined) return 1;
13178 if (rb_autoloading_value(klass, id, &av, ((void *)0))) return av;
13179 rb_autoload_load(klass, id);
13180 goto search_continue;
13181 }
13182 else {
13183 if (is_defined) {
13184 return 1;
13185 }
13186 else {
13187 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13188 if (!rb_ractor_shareable_p(val)) {
13189 rb_raise(rb_eRactorIsolationError,
13190 "can not access non-shareable objects in constant %""l""i" "\v""::%s by non-main ractor.", rb_class_path(klass), rb_id2name(id));
13191 }
13192 }
13193 return val;
13194 }
13195 }
13196 }
13197 }
13198 }
13199 if (root_cref && !RB_NIL_P(CREF_CLASS(root_cref))) {
13200 klass = vm_get_iclass(ec->cfp, CREF_CLASS(root_cref));
13201 }
13202 else {
13203 klass = rb_class_of(ec->cfp->self);
13204 }
13205 if (is_defined) {
13206 return rb_const_defined(klass, id);
13207 }
13208 else {
13209 return rb_const_get(klass, id);
13210 }
13211 }
13212 else {
13213 vm_check_if_namespace(orig_klass);
13214 if (is_defined) {
13215 return rb_public_const_defined_from(orig_klass, id);
13216 }
13217 else {
13218 return rb_public_const_get_from(orig_klass, id);
13219 }
13220 }
13221}
13222static inline VALUE
13223vm_get_cvar_base(const rb_cref_t *cref, const rb_control_frame_t *cfp, int top_level_raise)
13224{
13225 VALUE klass;
13226 if (!cref) {
13227 rb_bug("vm_get_cvar_base: no cref");
13228 }
13229 while (CREF_NEXT(cref) &&
13230 (RB_NIL_P(CREF_CLASS(cref)) || RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13231 CREF_PUSHED_BY_EVAL(cref) || CREF_SINGLETON(cref))) {
13232 cref = CREF_NEXT(cref);
13233 }
13234 if (top_level_raise && !CREF_NEXT(cref)) {
13235 rb_raise(rb_eRuntimeError, "class variable access from toplevel");
13236 }
13237 klass = vm_get_iclass(cfp, CREF_CLASS(cref));
13238 if (RB_NIL_P(klass)) {
13239 rb_raise(rb_eTypeError, "no class variables available");
13240 }
13241 return klass;
13242}
13243static VALUE
13244vm_search_const_defined_class(const VALUE cbase, ID id)
13245{
13246 if (rb_const_defined_at(cbase, id)) return cbase;
13247 if (cbase == rb_cObject) {
13248 VALUE tmp = RCLASS_SUPER(cbase);
13249 while (tmp) {
13250 if (rb_const_defined_at(tmp, id)) return tmp;
13251 tmp = RCLASS_SUPER(tmp);
13252 }
13253 }
13254 return 0;
13255}
13256static _Bool
13257iv_index_tbl_lookup(struct st_table *iv_index_tbl, ID id, struct rb_iv_index_tbl_entry **ent)
13258{
13259 int found;
13260 st_data_t ent_data;
13261 if (iv_index_tbl == ((void *)0)) return 0;
13262 { unsigned int _lev; rb_vm_lock_enter(&_lev, "../ruby-3.1.3/vm_insnhelper.c", 1090);;
13263 {
13264 found = rb_st_lookup(iv_index_tbl, (st_data_t)id, &ent_data);
13265 }
13266 rb_vm_lock_leave(&_lev, "../ruby-3.1.3/vm_insnhelper.c", 1094); };
13267 if (found) *ent = (struct rb_iv_index_tbl_entry *)ent_data;
13268 return found ? 1 : 0;
13269}
13270__attribute__ ((__always_inline__)) static void fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, struct rb_iv_index_tbl_entry *ent);
13271static inline void
13272fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, struct rb_iv_index_tbl_entry *ent)
13273{
13274 if (!is_attr) {
13275 ic->entry = ent;
13276 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.1.3/vm_insnhelper.c", 1108));
13277 }
13278 else {
13279 vm_cc_attr_index_set(cc, (int)ent->index + 1);
13280 }
13281}
13282__attribute__ ((__always_inline__)) static VALUE vm_getivar(VALUE, ID, const rb_iseq_t *, IVC, const struct rb_callcache *, int);
13283static inline VALUE
13284vm_getivar(VALUE obj, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13285{
13286 VALUE val = ((VALUE)RUBY_Qundef);
13287 if (RB_SPECIAL_CONST_P(obj)) {
13288 }
13289 else if ((__builtin_expect(!!(is_attr ? (!!(vm_cc_attr_index(cc) > 0)) : (!!(ic->entry && ic->entry->class_serial == (((struct RClass *)(((struct RBasic *)(obj))->klass))->class_serial)))), 1))) {
13290 uint32_t index = !is_attr ? ic->entry->index : (vm_cc_attr_index(cc) - 1);
13291 ((void)0);
13292 if ((__builtin_expect(!!(RB_BUILTIN_TYPE(obj) == RUBY_T_OBJECT), 1)) &&
13293 (__builtin_expect(!!(index < ROBJECT_NUMIV(obj)), 1))) {
13294 val = ROBJECT_IVPTR(obj)[index];
13295 ((void)0);
13296 }
13297 else if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
13298 val = rb_ivar_generic_lookup_with_index(obj, id, index);
13299 }
13300 goto ret;
13301 }
13302 else {
13303 struct rb_iv_index_tbl_entry *ent;
13304 if (RB_BUILTIN_TYPE(obj) == RUBY_T_OBJECT) {
13305 struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL_inline(obj);
13306 if (iv_index_tbl && iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
13307 fill_ivar_cache(iseq, ic, cc, is_attr, ent);
13308 if (ent->index < ROBJECT_NUMIV(obj)) {
13309 val = ROBJECT_IVPTR(obj)[ent->index];
13310 ((void)0);
13311 }
13312 }
13313 }
13314 else if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
13315 struct st_table *iv_index_tbl = ((((struct RClass *)(rb_obj_class(obj)))->ptr)->iv_index_tbl);
13316 if (iv_index_tbl && iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
13317 fill_ivar_cache(iseq, ic, cc, is_attr, ent);
13318 val = rb_ivar_generic_lookup_with_index(obj, id, ent->index);
13319 }
13320 }
13321 else {
13322 goto general_path;
13323 }
13324 ret:
13325 if ((__builtin_expect(!!(val != ((VALUE)RUBY_Qundef)), 1))) {
13326 return val;
13327 }
13328 else {
13329 return ((VALUE)RUBY_Qnil);
13330 }
13331 }
13332 general_path:
13333 ((void)0);
13334 if (is_attr) {
13335 return rb_attr_get(obj, id);
13336 }
13337 else {
13338 return rb_ivar_get(obj, id);
13339 }
13340}
13341__attribute__ ((__always_inline__)) static VALUE vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr);
13342__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic);
13343__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc);
13344static VALUE
13345vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13346{
13347 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
13348 if (RB_TYPE_P(obj, RUBY_T_OBJECT)) {
13349 struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL_inline(obj);
13350 struct rb_iv_index_tbl_entry *ent;
13351 if (iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
13352 if (!is_attr) {
13353 ic->entry = ent;
13354 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.1.3/vm_insnhelper.c", 1212));
13355 }
13356 else if (ent->index >= 0x7fffffff) {
13357 rb_raise(rb_eArgError, "too many instance variables");
13358 }
13359 else {
13360 vm_cc_attr_index_set(cc, (int)(ent->index + 1));
13361 }
13362 uint32_t index = ent->index;
13363 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
13364 rb_init_iv_list(obj);
13365 }
13366 VALUE *ptr = ROBJECT_IVPTR(obj);
13367 rb_obj_write((VALUE)(obj), __extension__({
13368 ;
13369 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13370 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 1227);
13371 ((void)0);
13372 return val;
13373 }
13374 }
13375 ((void)0);
13376 return rb_ivar_set(obj, id, val);
13377}
13378static VALUE
13379vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic)
13380{
13381 return vm_setivar_slowpath(obj, id, val, iseq, ic, ((void *)0), 0);
13382}
13383static VALUE
13384vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc)
13385{
13386 return vm_setivar_slowpath(obj, id, val, ((void *)0), ((void *)0), cc, 1);
13387}
13388static inline VALUE
13389vm_setivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13390{
13391 if ((__builtin_expect(!!(RB_TYPE_P(obj, RUBY_T_OBJECT)), 1)) &&
13392 (__builtin_expect(!!(!RB_OBJ_FROZEN_RAW(obj)), 1))) {
13393 ((void)0);
13394 if ((__builtin_expect(!!((!is_attr && (!!(ic->entry && ic->entry->class_serial == (((struct RClass *)(((struct RBasic *)(obj))->klass))->class_serial)))) || ( is_attr && (!!(vm_cc_attr_index(cc) > 0)))), 1))) {
13395 uint32_t index = !is_attr ? ic->entry->index : vm_cc_attr_index(cc)-1;
13396 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
13397 rb_init_iv_list(obj);
13398 }
13399 VALUE *ptr = ROBJECT_IVPTR(obj);
13400 rb_obj_write((VALUE)(obj), __extension__({
13401 ;
13402 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13403 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 1268);
13404 ((void)0);
13405 return val;
13406 }
13407 }
13408 else {
13409 ((void)0);
13410 }
13411 if (is_attr) {
13412 return vm_setivar_slowpath_attr(obj, id, val, cc);
13413 }
13414 else {
13415 return vm_setivar_slowpath_ivar(obj, id, val, iseq, ic);
13416 }
13417}
13418static VALUE
13419update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic)
13420{
13421 VALUE defined_class = 0;
13422 VALUE cvar_value = rb_cvar_find(klass, id, &defined_class);
13423 if (RB_TYPE_P(defined_class, RUBY_T_ICLASS)) {
13424 defined_class = ((struct RBasic *)(defined_class))->klass;
13425 }
13426 struct rb_id_table *rb_cvc_tbl = ((((struct RClass *)(defined_class))->ptr)->cvc_tbl);
13427 if (!rb_cvc_tbl) {
13428 rb_bug("the cvc table should be set");
13429 }
13430 VALUE ent_data;
13431 if (!rb_id_table_lookup(rb_cvc_tbl, id, &ent_data)) {
13432 rb_bug("should have cvar cache entry");
13433 }
13434 struct rb_cvar_class_tbl_entry *ent = (void *)ent_data;
13435 ent->global_cvar_state = (ruby_vm_global_cvar_state);
13436 ic->entry = ent;
13437 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.1.3/vm_insnhelper.c", 1309));
13438 return cvar_value;
13439}
13440static inline VALUE
13441vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, ICVARC ic)
13442{
13443 const rb_cref_t *cref;
13444 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
13445 VALUE v = ((VALUE)RUBY_Qundef);
13446 ((void)0);
13447 if (rb_st_lookup(((((struct RClass *)(ic->entry->class_value))->ptr)->iv_tbl), (st_data_t)id, &v) &&
13448 (__builtin_expect(!!(rb_ractor_main_p()), 1))) {
13449 return v;
13450 }
13451 }
13452 cref = vm_get_cref(((((reg_cfp)->ep))));
13453 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13454 return update_classvariable_cache(iseq, klass, id, ic);
13455}static inline
13456VALUE
13457rb_vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, ICVARC ic)
13458{
13459 return vm_getclassvariable(iseq, cfp, id, ic);
13460}
13461static inline void
13462vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic)
13463{
13464 const rb_cref_t *cref;
13465 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
13466 ((void)0);
13467 rb_class_ivar_set(ic->entry->class_value, id, val);
13468 return;
13469 }
13470 cref = vm_get_cref(((((reg_cfp)->ep))));
13471 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13472 rb_cvar_set(klass, id, val);
13473 update_classvariable_cache(iseq, klass, id, ic);
13474}static inline
13475void
13476rb_vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, VALUE val, ICVARC ic)
13477{
13478 vm_setclassvariable(iseq, cfp, id, val, ic);
13479}
13480static inline VALUE
13481vm_getinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, IVC ic)
13482{
13483 return vm_getivar(obj, id, iseq, ic, ((void *)0), 0);
13484}
13485static inline void
13486vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13487{
13488 vm_setivar(obj, id, val, iseq, ic, 0, 0);
13489}static inline
13490void
13491rb_vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13492{
13493 vm_setinstancevariable(iseq, obj, id, val, ic);
13494}static inline
13495VALUE
13496rb_vm_set_ivar_idx(VALUE obj, uint32_t index, VALUE val)
13497{
13498 ((void)0);
13499 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
13500 ((void)0);
13501 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
13502 rb_init_iv_list(obj);
13503 }
13504 VALUE *ptr = ROBJECT_IVPTR(obj);
13505 rb_obj_write((VALUE)(obj), __extension__({
13506 ;
13507 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13508 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 1403);
13509 return val;
13510}
13511static VALUE
13512vm_throw_continue(const rb_execution_context_t *ec, VALUE err)
13513{
13514 if (RB_FIXNUM_P(err)) {
13515 ec->tag->state = RB_FIX2INT(err);
13516 }
13517 else if (RB_SYMBOL_P(err)) {
13518 ec->tag->state = RUBY_TAG_THROW;
13519 }
13520 else if (imemo_throw_data_p((VALUE)err)) {
13521 ec->tag->state = THROW_DATA_STATE((struct vm_throw_data *)err);
13522 }
13523 else {
13524 ec->tag->state = RUBY_TAG_RAISE;
13525 }
13526 return err;
13527}
13528static VALUE
13529vm_throw_start(const rb_execution_context_t *ec, rb_control_frame_t *const reg_cfp, enum ruby_tag_type state,
13530 const int flag, const VALUE throwobj)
13531{
13532 const rb_control_frame_t *escape_cfp = ((void *)0);
13533 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
13534 if (flag != 0) {
13535 }
13536 else if (state == RUBY_TAG_BREAK) {
13537 int is_orphan = 1;
13538 const VALUE *ep = ((((reg_cfp)->ep)));
13539 const rb_iseq_t *base_iseq = ((((reg_cfp)))->iseq);
13540 escape_cfp = reg_cfp;
13541 while (base_iseq->body->type != ISEQ_TYPE_BLOCK) {
13542 if (escape_cfp->iseq->body->type == ISEQ_TYPE_CLASS) {
13543 escape_cfp = ((escape_cfp)+1);
13544 ep = escape_cfp->ep;
13545 base_iseq = escape_cfp->iseq;
13546 }
13547 else {
13548 ep = VM_ENV_PREV_EP(ep);
13549 base_iseq = base_iseq->body->parent_iseq;
13550 escape_cfp = rb_vm_search_cf_from_ep(ec, escape_cfp, ep);
13551 ((void)0);
13552 }
13553 }
13554 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13555 is_orphan = 0;
13556 state = RUBY_TAG_RETURN;
13557 }
13558 else {
13559 ep = VM_ENV_PREV_EP(ep);
13560 while (escape_cfp < eocfp) {
13561 if (escape_cfp->ep == ep) {
13562 const rb_iseq_t *const iseq = escape_cfp->iseq;
13563 const VALUE epc = escape_cfp->pc - iseq->body->iseq_encoded;
13564 const struct iseq_catch_table *const ct = iseq->body->catch_table;
13565 unsigned int i;
13566 if (!ct) break;
13567 for (i=0; i < ct->size; i++) {
13568 const struct iseq_catch_table_entry *const entry =
13569 __extension__({
13570 ;
13571 ; __typeof__(&(ct)->entries[i]) unaligned_member_access_result = (&(ct)->entries[i]);
13572 ; unaligned_member_access_result; });
13573 if (entry->type == CATCH_TYPE_BREAK &&
13574 entry->iseq == base_iseq &&
13575 entry->start < epc && entry->end >= epc) {
13576 if (entry->cont == epc) {
13577 is_orphan = 0;
13578 }
13579 break;
13580 }
13581 }
13582 break;
13583 }
13584 escape_cfp = ((escape_cfp)+1);
13585 }
13586 }
13587 if (is_orphan) {
13588 rb_vm_localjump_error("break from proc-closure", throwobj, RUBY_TAG_BREAK);
13589 }
13590 }
13591 else if (state == RUBY_TAG_RETRY) {
13592 const VALUE *ep = VM_ENV_PREV_EP(((((reg_cfp)->ep))));
13593 escape_cfp = rb_vm_search_cf_from_ep(ec, reg_cfp, ep);
13594 }
13595 else if (state == RUBY_TAG_RETURN) {
13596 const VALUE *current_ep = ((((reg_cfp)->ep)));
13597 const VALUE *target_ep = ((void *)0), *target_lep, *ep = current_ep;
13598 int in_class_frame = 0;
13599 int toplevel = 1;
13600 escape_cfp = reg_cfp;
13601 while (!VM_ENV_LOCAL_P(ep)) {
13602 if (VM_ENV_FLAGS(ep, VM_FRAME_FLAG_LAMBDA) && target_ep == ((void *)0)) {
13603 target_ep = ep;
13604 }
13605 ep = VM_ENV_PREV_EP(ep);
13606 }
13607 target_lep = ep;
13608 while (escape_cfp < eocfp) {
13609 const VALUE *lep = VM_CF_LEP(escape_cfp);
13610 if (!target_lep) {
13611 target_lep = lep;
13612 }
13613 if (lep == target_lep &&
13614 VM_FRAME_RUBYFRAME_P(escape_cfp) &&
13615 escape_cfp->iseq->body->type == ISEQ_TYPE_CLASS) {
13616 in_class_frame = 1;
13617 target_lep = 0;
13618 }
13619 if (lep == target_lep) {
13620 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13621 toplevel = 0;
13622 if (in_class_frame) {
13623 goto valid_return;
13624 }
13625 else {
13626 const VALUE *tep = current_ep;
13627 while (target_lep != tep) {
13628 if (escape_cfp->ep == tep) {
13629 if (tep == target_ep) {
13630 goto valid_return;
13631 }
13632 else {
13633 goto unexpected_return;
13634 }
13635 }
13636 tep = VM_ENV_PREV_EP(tep);
13637 }
13638 }
13639 }
13640 else if (VM_FRAME_RUBYFRAME_P(escape_cfp)) {
13641 switch (escape_cfp->iseq->body->type) {
13642 case ISEQ_TYPE_TOP:
13643 case ISEQ_TYPE_MAIN:
13644 if (toplevel) {
13645 if (in_class_frame) goto unexpected_return;
13646 if (target_ep == ((void *)0)) {
13647 goto valid_return;
13648 }
13649 else {
13650 goto unexpected_return;
13651 }
13652 }
13653 break;
13654 case ISEQ_TYPE_EVAL:
13655 case ISEQ_TYPE_CLASS:
13656 toplevel = 0;
13657 break;
13658 default:
13659 break;
13660 }
13661 }
13662 }
13663 if (escape_cfp->ep == target_lep && escape_cfp->iseq->body->type == ISEQ_TYPE_METHOD) {
13664 if (target_ep == ((void *)0)) {
13665 goto valid_return;
13666 }
13667 else {
13668 goto unexpected_return;
13669 }
13670 }
13671 escape_cfp = ((escape_cfp)+1);
13672 }
13673 unexpected_return:;
13674 rb_vm_localjump_error("unexpected return", throwobj, RUBY_TAG_RETURN);
13675 valid_return:;
13676 }
13677 else {
13678 rb_bug("isns(throw): unsupported throw type");
13679 }
13680 ec->tag->state = state;
13681 return (VALUE)THROW_DATA_NEW(throwobj, escape_cfp, state);
13682}
13683static VALUE
13684vm_throw(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
13685 rb_num_t throw_state, VALUE throwobj)
13686{
13687 const int state = (int)(throw_state & VM_THROW_STATE_MASK);
13688 const int flag = (int)(throw_state & VM_THROW_NO_ESCAPE_FLAG);
13689 if (state != 0) {
13690 return vm_throw_start(ec, reg_cfp, state, flag, throwobj);
13691 }
13692 else {
13693 return vm_throw_continue(ec, throwobj);
13694 }
13695}
13696static inline void
13697vm_expandarray(VALUE *sp, VALUE ary, rb_num_t num, int flag)
13698{
13699 int is_splat = flag & 0x01;
13700 rb_num_t space_size = num + is_splat;
13701 VALUE *base = sp - 1;
13702 const VALUE *ptr;
13703 rb_num_t len;
13704 const VALUE obj = ary;
13705 if (!RB_TYPE_P(ary, RUBY_T_ARRAY) && RB_NIL_P(ary = rb_check_array_type(ary))) {
13706 ary = obj;
13707 ptr = &ary;
13708 len = 1;
13709 }
13710 else {
13711 ptr = rb_array_const_ptr_transient(ary);
13712 len = (rb_num_t)rb_array_len(ary);
13713 }
13714 if (space_size == 0) {
13715 }
13716 else if (flag & 0x02) {
13717 rb_num_t i = 0, j;
13718 if (len < num) {
13719 for (i=0; i<num-len; i++) {
13720 *base++ = ((VALUE)RUBY_Qnil);
13721 }
13722 }
13723 for (j=0; i<num; i++, j++) {
13724 VALUE v = ptr[len - j - 1];
13725 *base++ = v;
13726 }
13727 if (is_splat) {
13728 *base = rb_ary_new_from_values(len - j, ptr);
13729 }
13730 }
13731 else {
13732 rb_num_t i;
13733 VALUE *bptr = &base[space_size - 1];
13734 for (i=0; i<num; i++) {
13735 if (len <= i) {
13736 for (; i<num; i++) {
13737 *bptr-- = ((VALUE)RUBY_Qnil);
13738 }
13739 break;
13740 }
13741 *bptr-- = ptr[i];
13742 }
13743 if (is_splat) {
13744 if (num > len) {
13745 *bptr = rb_ary_new();
13746 }
13747 else {
13748 *bptr = rb_ary_new_from_values(len - num, ptr + num);
13749 }
13750 }
13751 }
13752 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(ary); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
13753}
13754static VALUE vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
13755static VALUE vm_mtbl_dump(VALUE klass, ID target_mid);
13756static struct rb_class_cc_entries *
13757vm_ccs_create(VALUE klass, const rb_callable_method_entry_t *cme)
13758{
13759 struct rb_class_cc_entries *ccs = ((struct rb_class_cc_entries *)ruby_xmalloc(sizeof(struct rb_class_cc_entries)));
13760 ccs->capa = 0;
13761 ccs->len = 0;
13762 rb_obj_write((VALUE)(klass), __extension__({
13763 ;
13764 ; __typeof__((VALUE *)(&ccs->cme)) unaligned_member_access_result = ((VALUE *)(&ccs->cme));
13765 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.1.3/vm_insnhelper.c", 1700);
13766 (((rb_callable_method_entry_t *)cme)->flags |= ((VALUE)RUBY_FL_USER8));
13767 ccs->entries = ((void *)0);
13768 return ccs;
13769}
13770static void
13771vm_ccs_push(VALUE klass, struct rb_class_cc_entries *ccs, const struct rb_callinfo *ci, const struct rb_callcache *cc)
13772{
13773 if (! vm_cc_markable(cc)) {
13774 return;
13775 }
13776 else if (! vm_ci_markable(ci)) {
13777 return;
13778 }
13779 if ((__builtin_expect(!!(ccs->len == ccs->capa), 0))) {
13780 if (ccs->capa == 0) {
13781 ccs->capa = 1;
13782 ccs->entries = ((struct rb_class_cc_entries_entry *)ruby_xmalloc2((ccs->capa), sizeof(struct rb_class_cc_entries_entry)));
13783 }
13784 else {
13785 ccs->capa *= 2;
13786 ((ccs->entries) = ((struct rb_class_cc_entries_entry *)ruby_xrealloc2((void *)(ccs->entries), (ccs->capa), sizeof(struct rb_class_cc_entries_entry))));
13787 }
13788 }
13789 ((void)0);
13790 const int pos = ccs->len++;
13791 rb_obj_write((VALUE)(klass), __extension__({
13792 ;
13793 ; __typeof__((VALUE *)(&ccs->entries[pos].ci)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].ci));
13794 ; unaligned_member_access_result; }), (VALUE)(ci), "../ruby-3.1.3/vm_insnhelper.c", 1729);
13795 rb_obj_write((VALUE)(klass), __extension__({
13796 ;
13797 ; __typeof__((VALUE *)(&ccs->entries[pos].cc)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].cc));
13798 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.1.3/vm_insnhelper.c", 1730);
13799 if (0) {
13800 }
13801}
13802static const struct rb_callcache *
13803vm_search_method_slowpath0(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
13804{
13805 const struct rb_callcache *cc = rb_vm_search_method_slowpath(cd->ci, klass);
13806 cd->cc = cc;
13807 const struct rb_callcache *empty_cc =
13808 rb_vm_empty_cc();
13809 if (cd_owner && cc != empty_cc) (rb_obj_written((VALUE)(cd_owner), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cc), "../ruby-3.1.3/vm_insnhelper.c", 1912));
13810 ((void)0);
13811 return cc;
13812}
13813static const struct rb_callcache *
13814vm_search_method_fastpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
13815{
13816 const struct rb_callcache *cc = cd->cc;
13817 if ((__builtin_expect(!!(vm_cc_class_check(cc, klass)), 1))) {
13818 if ((__builtin_expect(!!(!((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))), 1))) {
13819 ((void)0);
13820 ((void)0);
13821 ((void)0);
13822 return cc;
13823 }
13824 ((void)0);
13825 }
13826 else {
13827 ((void)0);
13828 }
13829 return vm_search_method_slowpath0(cd_owner, cd, klass);
13830}
13831static const struct rb_callcache *
13832vm_search_method(VALUE cd_owner, struct rb_call_data *cd, VALUE recv)
13833{
13834 VALUE klass = rb_class_of(recv);
13835 ((void)0);
13836 ((void)0);
13837 return vm_search_method_fastpath(cd_owner, cd, klass);
13838}
13839static inline int
13840check_cfunc(const rb_callable_method_entry_t *me, VALUE (*func)())
13841{
13842 if (! me) {
13843 return 0;
13844 }
13845 else {
13846 ((void)0);
13847 ((void)0);
13848 ((void)0);
13849 if (me->def->type != VM_METHOD_TYPE_CFUNC) {
13850 return 0;
13851 }
13852 else {
13853 return me->def->body.cfunc.func == func;
13854 }
13855 }
13856}
13857static inline int
13858vm_method_cfunc_is(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv, VALUE (*func)())
13859{
13860 ((void)0);
13861 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
13862 return check_cfunc(vm_cc_cme(cc), func);
13863}
13864static inline _Bool
13865FIXNUM_2_P(VALUE a, VALUE b)
13866{
13867 long x = a;
13868 long y = b;
13869 long z = x & y & 1;
13870 return z == 1;
13871}
13872static inline _Bool
13873FLONUM_2_P(VALUE a, VALUE b)
13874{
13875 long x = a;
13876 long y = b;
13877 long z = ((x ^ 2) | (y ^ 2)) & 3;
13878 return !z;
13879}
13880static VALUE
13881opt_equality_specialized(VALUE recv, VALUE obj)
13882{
13883 if (FIXNUM_2_P(recv, obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 0))) == 0), 1)))) {
13884 goto compare_by_identity;
13885 }
13886 else if (FLONUM_2_P(recv, obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
13887 goto compare_by_identity;
13888 }
13889 else if (RB_STATIC_SYM_P(recv) && RB_STATIC_SYM_P(obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 6))) == 0), 1)))) {
13890 goto compare_by_identity;
13891 }
13892 else if (RB_SPECIAL_CONST_P(recv)) {
13893 }
13894 else if (RBASIC_CLASS(recv) == rb_cFloat && RB_FLOAT_TYPE_P(obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
13895 double a = rb_float_value_inline(recv);
13896 double b = rb_float_value_inline(obj);
13897 return ((a == b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13898 }
13899 else if (RBASIC_CLASS(recv) == rb_cString && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 2))) == 0), 1)))) {
13900 if (recv == obj) {
13901 return ((VALUE)RUBY_Qtrue);
13902 }
13903 else if (RB_TYPE_P(obj, RUBY_T_STRING)) {
13904 return rb_str_eql_internal(obj, recv);
13905 }
13906 }
13907 return ((VALUE)RUBY_Qundef);
13908 compare_by_identity:
13909 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13910}
13911static VALUE
13912opt_equality(const rb_iseq_t *cd_owner, VALUE recv, VALUE obj, CALL_DATA cd)
13913{
13914 ((void)0);
13915 VALUE val = opt_equality_specialized(recv, obj);
13916 if (val != ((VALUE)RUBY_Qundef)) return val;
13917 if (!vm_method_cfunc_is(cd_owner, cd, recv, rb_obj_equal)) {
13918 return ((VALUE)RUBY_Qundef);
13919 }
13920 else {
13921 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13922 }
13923}
13924extern VALUE rb_vm_call0(rb_execution_context_t *ec, VALUE, ID, int, const VALUE*, const rb_callable_method_entry_t *, int kw_splat);
13925extern VALUE rb_vm_call_with_refinements(rb_execution_context_t *, VALUE, ID, int, const VALUE *, int);
13926static VALUE
13927check_match(rb_execution_context_t *ec, VALUE pattern, VALUE target, enum vm_check_match_type type)
13928{
13929 switch (type) {
13930 case VM_CHECKMATCH_TYPE_WHEN:
13931 return pattern;
13932 case VM_CHECKMATCH_TYPE_RESCUE:
13933 if (!rb_obj_is_kind_of(pattern, rb_cModule)) {
13934 rb_raise(rb_eTypeError, "class or module required for rescue clause");
13935 }
13936 case VM_CHECKMATCH_TYPE_CASE: {
13937 return rb_vm_call_with_refinements(ec, pattern, idEqq, 1, &target, 0);
13938 }
13939 default:
13940 rb_bug("check_match: unreachable");
13941 }
13942}
13943static inline VALUE
13944double_cmp_lt(double a, double b)
13945{
13946 ;
13947 return ((a < b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13948}
13949static inline VALUE
13950double_cmp_le(double a, double b)
13951{
13952 ;
13953 return ((a <= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13954}
13955static inline VALUE
13956double_cmp_gt(double a, double b)
13957{
13958 ;
13959 return ((a > b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13960}
13961static inline VALUE
13962double_cmp_ge(double a, double b)
13963{
13964 ;
13965 return ((a >= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13966}
13967static inline VALUE *
13968vm_base_ptr(const rb_control_frame_t *cfp)
13969{
13970 return cfp->__bp__;
13971}
13972__attribute__((__noreturn__)) static void raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc);
13973__attribute__((__noreturn__)) static void argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc);
13974__attribute__((__noreturn__)) static void argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys);
13975VALUE rb_keyword_error_new(const char *error, VALUE keys);
13976static VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv,
13977 enum method_missing_reason call_status, int kw_splat);
13978__attribute__ ((__visibility__("default"))) extern
13979const rb_callable_method_entry_t *rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
13980struct args_info {
13981 VALUE *argv;
13982 int argc;
13983 int rest_index;
13984 int rest_dupped;
13985 const struct rb_callinfo_kwarg *kw_arg;
13986 VALUE *kw_argv;
13987 VALUE rest;
13988};
13989enum arg_setup_type {
13990 arg_setup_method,
13991 arg_setup_block
13992};
13993static inline void
13994arg_rest_dup(struct args_info *args)
13995{
13996 if (!args->rest_dupped) {
13997 args->rest = rb_ary_dup(args->rest);
13998 args->rest_dupped = 1;
13999 }
14000}
14001static inline int
14002args_argc(struct args_info *args)
14003{
14004 if (args->rest == ((VALUE)RUBY_Qfalse)) {
14005 return args->argc;
14006 }
14007 else {
14008 return args->argc + RARRAY_LENINT(args->rest) - args->rest_index;
14009 }
14010}
14011static inline void
14012args_extend(struct args_info *args, const int min_argc)
14013{
14014 int i;
14015 if (args->rest) {
14016 arg_rest_dup(args);
14017 ((void)0);
14018 for (i=args->argc + RARRAY_LENINT(args->rest); i<min_argc; i++) {
14019 rb_ary_push(args->rest, ((VALUE)RUBY_Qnil));
14020 }
14021 }
14022 else {
14023 for (i=args->argc; i<min_argc; i++) {
14024 args->argv[args->argc++] = ((VALUE)RUBY_Qnil);
14025 }
14026 }
14027}
14028static inline void
14029args_reduce(struct args_info *args, int over_argc)
14030{
14031 if (args->rest) {
14032 const long len = rb_array_len(args->rest);
14033 if (len > over_argc) {
14034 arg_rest_dup(args);
14035 rb_ary_resize(args->rest, len - over_argc);
14036 return;
14037 }
14038 else {
14039 args->rest = ((VALUE)RUBY_Qfalse);
14040 over_argc -= len;
14041 }
14042 }
14043 ((void)0);
14044 args->argc -= over_argc;
14045}
14046static inline int
14047args_check_block_arg0(struct args_info *args)
14048{
14049 VALUE ary = ((VALUE)RUBY_Qnil);
14050 if (args->rest && rb_array_len(args->rest) == 1) {
14051 VALUE arg0 = RARRAY_AREF(args->rest, 0);
14052 ary = rb_check_array_type(arg0);
14053 }
14054 else if (args->argc == 1) {
14055 VALUE arg0 = args->argv[0];
14056 ary = rb_check_array_type(arg0);
14057 args->argv[0] = arg0;
14058 }
14059 if (!RB_NIL_P(ary)) {
14060 args->rest = ary;
14061 args->rest_index = 0;
14062 args->argc = 0;
14063 return 1;
14064 }
14065 return 0;
14066}
14067static inline void
14068args_copy(struct args_info *args)
14069{
14070 if (args->rest != ((VALUE)RUBY_Qfalse)) {
14071 int argc = args->argc;
14072 args->argc = 0;
14073 arg_rest_dup(args);
14074 while (args->rest_index > 0 && argc > 0) {
14075 RARRAY_ASET(args->rest, --args->rest_index, args->argv[--argc]);
14076 }
14077 while (argc > 0) {
14078 rb_ary_unshift(args->rest, args->argv[--argc]);
14079 }
14080 }
14081 else if (args->argc > 0) {
14082 args->rest = rb_ary_new_from_values(args->argc, args->argv);
14083 args->rest_index = 0;
14084 args->rest_dupped = 1;
14085 args->argc = 0;
14086 }
14087}
14088static inline const VALUE *
14089args_rest_argv(struct args_info *args)
14090{
14091 return rb_array_const_ptr_transient(args->rest) + args->rest_index;
14092}
14093static inline VALUE
14094args_rest_array(struct args_info *args)
14095{
14096 VALUE ary;
14097 if (args->rest) {
14098 ary = rb_ary_behead(args->rest, args->rest_index);
14099 args->rest_index = 0;
14100 args->rest = 0;
14101 }
14102 else {
14103 ary = rb_ary_new();
14104 }
14105 return ary;
14106}
14107static int
14108args_kw_argv_to_hash(struct args_info *args)
14109{
14110 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14111 const VALUE *const passed_keywords = kw_arg->keywords;
14112 const int kw_len = kw_arg->keyword_len;
14113 VALUE h = rb_hash_new_with_size(kw_len);
14114 const int kw_start = args->argc - kw_len;
14115 const VALUE * const kw_argv = args->argv + kw_start;
14116 int i;
14117 args->argc = kw_start + 1;
14118 for (i=0; i<kw_len; i++) {
14119 rb_hash_aset(h, passed_keywords[i], kw_argv[i]);
14120 }
14121 args->argv[args->argc - 1] = h;
14122 return args->argc;
14123}
14124static inline void
14125args_setup_lead_parameters(struct args_info *args, int argc, VALUE *locals)
14126{
14127 if (args->argc >= argc) {
14128 args->argc -= argc;
14129 args->argv += argc;
14130 }
14131 else {
14132 int i, j;
14133 const VALUE *argv = args_rest_argv(args);
14134 for (i=args->argc, j=0; i<argc; i++, j++) {
14135 locals[i] = argv[j];
14136 }
14137 args->rest_index += argc - args->argc;
14138 args->argc = 0;
14139 }
14140}
14141static inline void
14142args_setup_post_parameters(struct args_info *args, int argc, VALUE *locals)
14143{
14144 long len;
14145 len = rb_array_len(args->rest);
14146 ruby_nonempty_memcpy((locals), (rb_array_const_ptr_transient(args->rest) + len - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
14147 rb_ary_resize(args->rest, len - argc);
14148}
14149static inline int
14150args_setup_opt_parameters(struct args_info *args, int opt_max, VALUE *locals)
14151{
14152 int i;
14153 if (args->argc >= opt_max) {
14154 args->argc -= opt_max;
14155 args->argv += opt_max;
14156 i = opt_max;
14157 }
14158 else {
14159 int j;
14160 i = args->argc;
14161 args->argc = 0;
14162 if (args->rest) {
14163 int len = RARRAY_LENINT(args->rest);
14164 const VALUE *argv = rb_array_const_ptr_transient(args->rest);
14165 for (; i<opt_max && args->rest_index < len; i++, args->rest_index++) {
14166 locals[i] = argv[args->rest_index];
14167 }
14168 }
14169 for (j=i; j<opt_max; j++) {
14170 locals[j] = ((VALUE)RUBY_Qnil);
14171 }
14172 }
14173 return i;
14174}
14175static inline void
14176args_setup_rest_parameter(struct args_info *args, VALUE *locals)
14177{
14178 *locals = args_rest_array(args);
14179}
14180static VALUE
14181make_unknown_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14182{
14183 int i;
14184 VALUE obj = rb_ary_tmp_new(1);
14185 for (i=0; i<passed_keyword_len; i++) {
14186 if (kw_argv[i] != ((VALUE)RUBY_Qundef)) {
14187 rb_ary_push(obj, passed_keywords[i]);
14188 }
14189 }
14190 return obj;
14191}
14192static VALUE
14193make_rest_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14194{
14195 int i;
14196 VALUE obj = rb_hash_new_with_size(passed_keyword_len);
14197 for (i=0; i<passed_keyword_len; i++) {
14198 if (kw_argv[i] != ((VALUE)RUBY_Qundef)) {
14199 rb_hash_aset(obj, passed_keywords[i], kw_argv[i]);
14200 }
14201 }
14202 return obj;
14203}
14204static inline int
14205args_setup_kw_parameters_lookup(const ID key, VALUE *ptr, const VALUE *const passed_keywords, VALUE *passed_values, const int passed_keyword_len)
14206{
14207 int i;
14208 const VALUE keyname = rb_id2sym(key);
14209 for (i=0; i<passed_keyword_len; i++) {
14210 if (keyname == passed_keywords[i]) {
14211 *ptr = passed_values[i];
14212 passed_values[i] = ((VALUE)RUBY_Qundef);
14213 return 1;
14214 }
14215 }
14216 return 0;
14217}
14218static void
14219args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
14220 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
14221 VALUE *const locals)
14222{
14223 const ID *acceptable_keywords = iseq->body->param.keyword->table;
14224 const int req_key_num = iseq->body->param.keyword->required_num;
14225 const int key_num = iseq->body->param.keyword->num;
14226 const VALUE * const default_values = iseq->body->param.keyword->default_values;
14227 VALUE missing = 0;
14228 int i, di, found = 0;
14229 int unspecified_bits = 0;
14230 VALUE unspecified_bits_value = ((VALUE)RUBY_Qnil);
14231 for (i=0; i<req_key_num; i++) {
14232 ID key = acceptable_keywords[i];
14233 if (args_setup_kw_parameters_lookup(key, &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14234 found++;
14235 }
14236 else {
14237 if (!missing) missing = rb_ary_tmp_new(1);
14238 rb_ary_push(missing, rb_id2sym(key));
14239 }
14240 }
14241 if (missing) argument_kw_error(ec, iseq, "missing", missing);
14242 for (di=0; i<key_num; i++, di++) {
14243 if (args_setup_kw_parameters_lookup(acceptable_keywords[i], &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14244 found++;
14245 }
14246 else {
14247 if (default_values[di] == ((VALUE)RUBY_Qundef)) {
14248 locals[i] = ((VALUE)RUBY_Qnil);
14249 if ((__builtin_expect(!!(i < (32-1)), 1))) {
14250 unspecified_bits |= 0x01 << di;
14251 }
14252 else {
14253 if (RB_NIL_P(unspecified_bits_value)) {
14254 int j;
14255 unspecified_bits_value = rb_hash_new();
14256 for (j=0; j<(32-1); j++) {
14257 if (unspecified_bits & (0x01 << j)) {
14258 rb_hash_aset(unspecified_bits_value, __builtin_choose_expr( __builtin_constant_p(j), ((VALUE)(j)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(j)), ((VALUE)RUBY_Qtrue));
14259 }
14260 }
14261 }
14262 rb_hash_aset(unspecified_bits_value, __builtin_choose_expr( __builtin_constant_p(di), ((VALUE)(di)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(di)), ((VALUE)RUBY_Qtrue));
14263 }
14264 }
14265 else {
14266 locals[i] = default_values[di];
14267 }
14268 }
14269 }
14270 if (iseq->body->param.flags.has_kwrest) {
14271 const int rest_hash_index = key_num + 1;
14272 locals[rest_hash_index] = make_rest_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14273 }
14274 else {
14275 if (found != passed_keyword_len) {
14276 VALUE keys = make_unknown_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14277 argument_kw_error(ec, iseq, "unknown", keys);
14278 }
14279 }
14280 if (RB_NIL_P(unspecified_bits_value)) {
14281 unspecified_bits_value = __builtin_choose_expr( __builtin_constant_p(unspecified_bits), ((VALUE)(unspecified_bits)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(unspecified_bits));
14282 }
14283 locals[key_num] = unspecified_bits_value;
14284}
14285static inline void
14286args_setup_kw_rest_parameter(VALUE keyword_hash, VALUE *locals, int kw_flag)
14287{
14288 if (RB_NIL_P(keyword_hash)) {
14289 keyword_hash = rb_hash_new();
14290 }
14291 else if (!(kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
14292 keyword_hash = rb_hash_dup(keyword_hash);
14293 }
14294 locals[0] = keyword_hash;
14295}
14296static inline void
14297args_setup_block_parameter(const rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE *locals)
14298{
14299 VALUE block_handler = calling->block_handler;
14300 *locals = rb_vm_bh_to_procval(ec, block_handler);
14301}
14302struct fill_values_arg {
14303 VALUE *keys;
14304 VALUE *vals;
14305 int argc;
14306};
14307static int
14308fill_keys_values(st_data_t key, st_data_t val, st_data_t ptr)
14309{
14310 struct fill_values_arg *arg = (struct fill_values_arg *)ptr;
14311 int i = arg->argc++;
14312 arg->keys[i] = (VALUE)key;
14313 arg->vals[i] = (VALUE)val;
14314 return ST_CONTINUE;
14315}
14316static inline int
14317ignore_keyword_hash_p(VALUE keyword_hash, const rb_iseq_t * const iseq, unsigned int * kw_flag, VALUE * converted_keyword_hash)
14318{
14319 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
14320 keyword_hash = rb_to_hash_type(keyword_hash);
14321 }
14322 if (!(*kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit)) &&
14323 (iseq->body->param.flags.has_kwrest ||
14324 iseq->body->param.flags.ruby2_keywords)) {
14325 *kw_flag |= (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14326 keyword_hash = rb_hash_dup(keyword_hash);
14327 }
14328 *converted_keyword_hash = keyword_hash;
14329 return !(iseq->body->param.flags.has_kw) &&
14330 !(iseq->body->param.flags.has_kwrest) &&
14331 RHASH_EMPTY_P(keyword_hash);
14332}
14333COLDFUNC static int
14334setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * const iseq,
14335 struct rb_calling_info *const calling,
14336 const struct rb_callinfo *ci,
14337 VALUE * const locals, const enum arg_setup_type arg_setup_type) {
14338 const int min_argc = iseq->body->param.lead_num + iseq->body->param.post_num;
14339 const int max_argc = (iseq->body->param.flags.has_rest == 0) ? min_argc + iseq->body->param.opt_num : (-1);
14340 int given_argc;
14341 unsigned int kw_flag = vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14342 int opt_pc = 0, allow_autosplat = !kw_flag;
14343 struct args_info args_body, *args;
14344 VALUE keyword_hash = ((VALUE)RUBY_Qnil);
14345 VALUE * const orig_sp = ec->cfp->sp;
14346 unsigned int i;
14347 VALUE flag_keyword_hash = 0;
14348 VALUE converted_keyword_hash = 0;
14349 ;
14350 for (i=calling->argc; i<iseq->body->param.size; i++) {
14351 locals[i] = ((VALUE)RUBY_Qnil);
14352 }
14353 ec->cfp->sp = &locals[i];
14354 args = &args_body;
14355 given_argc = args->argc = calling->argc;
14356 args->argv = locals;
14357 args->rest_dupped = 0;
14358 if (kw_flag & (0x01 << VM_CALL_KWARG_bit)) {
14359 args->kw_arg = vm_ci_kwarg(ci);
14360 if (iseq->body->param.flags.has_kw) {
14361 int kw_len = args->kw_arg->keyword_len;
14362 args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len))));
14363 args->argc -= kw_len;
14364 given_argc -= kw_len;
14365 ruby_nonempty_memcpy((args->kw_argv), (locals + args->argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len)));
14366 }
14367 else {
14368 args->kw_argv = ((void *)0);
14369 given_argc = args_kw_argv_to_hash(args);
14370 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14371 }
14372 }
14373 else {
14374 args->kw_arg = ((void *)0);
14375 args->kw_argv = ((void *)0);
14376 }
14377 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) {
14378 VALUE rest_last = 0;
14379 int len;
14380 args->rest = locals[--args->argc];
14381 args->rest_index = 0;
14382 len = RARRAY_LENINT(args->rest);
14383 given_argc += len - 1;
14384 rest_last = RARRAY_AREF(args->rest, len - 1);
14385 if (!kw_flag && len > 0) {
14386 if (RB_TYPE_P(rest_last, RUBY_T_HASH) &&
14387 (((struct RHash *)rest_last)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
14388 rest_last = rb_hash_dup(rest_last);
14389 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14390 }
14391 else {
14392 rest_last = 0;
14393 }
14394 }
14395 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14396 if (ignore_keyword_hash_p(rest_last, iseq, &kw_flag, &converted_keyword_hash)) {
14397 arg_rest_dup(args);
14398 rb_ary_pop(args->rest);
14399 given_argc--;
14400 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14401 }
14402 else {
14403 if (rest_last != converted_keyword_hash) {
14404 rest_last = converted_keyword_hash;
14405 arg_rest_dup(args);
14406 RARRAY_ASET(args->rest, len - 1, rest_last);
14407 }
14408 if (iseq->body->param.flags.ruby2_keywords && rest_last) {
14409 flag_keyword_hash = rest_last;
14410 }
14411 else if (iseq->body->param.flags.has_kw || iseq->body->param.flags.has_kwrest) {
14412 arg_rest_dup(args);
14413 rb_ary_pop(args->rest);
14414 given_argc--;
14415 keyword_hash = rest_last;
14416 }
14417 }
14418 }
14419 }
14420 else {
14421 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14422 VALUE last_arg = args->argv[args->argc-1];
14423 if (ignore_keyword_hash_p(last_arg, iseq, &kw_flag, &converted_keyword_hash)) {
14424 args->argc--;
14425 given_argc--;
14426 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14427 }
14428 else {
14429 if (last_arg != converted_keyword_hash) {
14430 last_arg = converted_keyword_hash;
14431 args->argv[args->argc-1] = last_arg;
14432 }
14433 if (iseq->body->param.flags.ruby2_keywords) {
14434 flag_keyword_hash = last_arg;
14435 }
14436 else if (iseq->body->param.flags.has_kw || iseq->body->param.flags.has_kwrest) {
14437 args->argc--;
14438 given_argc--;
14439 keyword_hash = last_arg;
14440 }
14441 }
14442 }
14443 args->rest = ((VALUE)RUBY_Qfalse);
14444 }
14445 if (flag_keyword_hash && RB_TYPE_P(flag_keyword_hash, RUBY_T_HASH)) {
14446 ((struct RHash *)flag_keyword_hash)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
14447 }
14448 if (kw_flag && iseq->body->param.flags.accepts_no_kwarg) {
14449 rb_raise(rb_eArgError, "no keywords accepted");
14450 }
14451 switch (arg_setup_type) {
14452 case arg_setup_method:
14453 break;
14454 case arg_setup_block:
14455 if (given_argc == (RB_NIL_P(keyword_hash) ? 1 : 2) &&
14456 allow_autosplat &&
14457 (min_argc > 0 || iseq->body->param.opt_num > 1) &&
14458 !iseq->body->param.flags.ambiguous_param0 &&
14459 args_check_block_arg0(args)) {
14460 given_argc = RARRAY_LENINT(args->rest);
14461 }
14462 break;
14463 }
14464 if (given_argc < min_argc) {
14465 if (arg_setup_type == arg_setup_block) {
14466 do { __extension__ _Static_assert(sizeof(*((ec->cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((ec->cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((ec->cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((ec->cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((ec->cfp)->sp)[((min_argc))]; if ((__builtin_expect(!!(((ec->cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
14467 given_argc = min_argc;
14468 args_extend(args, min_argc);
14469 }
14470 else {
14471 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14472 }
14473 }
14474 if (given_argc > max_argc && max_argc != (-1)) {
14475 if (arg_setup_type == arg_setup_block) {
14476 args_reduce(args, given_argc - max_argc);
14477 given_argc = max_argc;
14478 }
14479 else {
14480 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14481 }
14482 }
14483 if (iseq->body->param.flags.has_lead) {
14484 args_setup_lead_parameters(args, iseq->body->param.lead_num, locals + 0);
14485 }
14486 if (iseq->body->param.flags.has_rest || iseq->body->param.flags.has_post){
14487 args_copy(args);
14488 }
14489 if (iseq->body->param.flags.has_post) {
14490 args_setup_post_parameters(args, iseq->body->param.post_num, locals + iseq->body->param.post_start);
14491 }
14492 if (iseq->body->param.flags.has_opt) {
14493 int opt = args_setup_opt_parameters(args, iseq->body->param.opt_num, locals + iseq->body->param.lead_num);
14494 opt_pc = (int)iseq->body->param.opt_table[opt];
14495 }
14496 if (iseq->body->param.flags.has_rest) {
14497 args_setup_rest_parameter(args, locals + iseq->body->param.rest_start);
14498 }
14499 if (iseq->body->param.flags.has_kw) {
14500 VALUE * const klocals = locals + iseq->body->param.keyword->bits_start - iseq->body->param.keyword->num;
14501 if (args->kw_argv != ((void *)0)) {
14502 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14503 args_setup_kw_parameters(ec, iseq, args->kw_argv, kw_arg->keyword_len, kw_arg->keywords, klocals);
14504 }
14505 else if (!RB_NIL_P(keyword_hash)) {
14506 int kw_len = rb_long2int_inline(RHASH_SIZE(keyword_hash));
14507 struct fill_values_arg arg;
14508 arg.keys = args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len * 2))));
14509 arg.vals = arg.keys + kw_len;
14510 arg.argc = 0;
14511 rb_hash_foreach(keyword_hash, fill_keys_values, (VALUE)&arg);
14512 ((void)0);
14513 args_setup_kw_parameters(ec, iseq, arg.vals, kw_len, arg.keys, klocals);
14514 }
14515 else {
14516 ((void)0);
14517 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
14518 }
14519 }
14520 else if (iseq->body->param.flags.has_kwrest) {
14521 args_setup_kw_rest_parameter(keyword_hash, locals + iseq->body->param.keyword->rest_start, kw_flag);
14522 }
14523 else if (!RB_NIL_P(keyword_hash) && RHASH_SIZE(keyword_hash) > 0 && arg_setup_type == arg_setup_method) {
14524 argument_kw_error(ec, iseq, "unknown", rb_hash_keys(keyword_hash));
14525 }
14526 if (iseq->body->param.flags.has_block) {
14527 if (iseq->body->local_iseq == iseq) {
14528 }
14529 else {
14530 args_setup_block_parameter(ec, calling, locals + iseq->body->param.block_start);
14531 }
14532 }
14533 ec->cfp->sp = orig_sp;
14534 return opt_pc;
14535}
14536static void
14537raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc)
14538{
14539 VALUE at;
14540 if (iseq) {
14541 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL, ((VALUE)RUBY_Qnil) ,
14542 0 , ((VALUE)RUBY_Qfalse) ,
14543 iseq->body->iseq_encoded,
14544 ec->cfp->sp, 0, 0 );
14545 at = rb_ec_backtrace_object(ec);
14546 rb_backtrace_use_iseq_first_lineno_for_last_location(at);
14547 rb_vm_pop_frame(ec);
14548 }
14549 else {
14550 at = rb_ec_backtrace_object(ec);
14551 }
14552 rb_ivar_set(exc, idBt_locations, at);
14553 rb_exc_set_backtrace(exc, at);
14554 rb_exc_raise(exc);
14555}
14556static void
14557argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc)
14558{
14559 VALUE exc = rb_arity_error_new(miss_argc, min_argc, max_argc);
14560 if (iseq->body->param.flags.has_kw) {
14561 const struct rb_iseq_param_keyword *const kw = iseq->body->param.keyword;
14562 const ID *keywords = kw->table;
14563 int req_key_num = kw->required_num;
14564 if (req_key_num > 0) {
14565 static const char required[] = "; required keywords";
14566 VALUE mesg = rb_attr_get(exc, idMesg);
14567 rb_str_resize(mesg, RSTRING_LEN(mesg)-1);
14568 rb_str_cat(mesg, required, sizeof(required) - 1 - (req_key_num == 1));
14569 ((__builtin_constant_p(":") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (":")));
14570 do {
14571 ((__builtin_constant_p(" ") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (" ")));
14572 rb_str_append(mesg, rb_id2str(*keywords++));
14573 ((__builtin_constant_p(",") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (",")));
14574 } while (--req_key_num);
14575 RSTRING_PTR(mesg)[RSTRING_LEN(mesg)-1] = ')';
14576 }
14577 }
14578 raise_argument_error(ec, iseq, exc);
14579}
14580static void
14581argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys)
14582{
14583 raise_argument_error(ec, iseq, rb_keyword_error_new(error, keys));
14584}
14585static inline void
14586vm_caller_setup_arg_splat(rb_control_frame_t *cfp, struct rb_calling_info *calling)
14587{
14588 int argc = calling->argc;
14589 VALUE *argv = cfp->sp - argc;
14590 VALUE ary = argv[argc-1];
14591 ;
14592 cfp->sp--;
14593 if (!RB_NIL_P(ary)) {
14594 const VALUE *ptr = rb_array_const_ptr_transient(ary);
14595 long len = rb_array_len(ary), i;
14596 do { __extension__ _Static_assert(sizeof(*((cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((cfp)->sp)[((len))]; if ((__builtin_expect(!!(((cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
14597 for (i = 0; i < len; i++) {
14598 *cfp->sp++ = ptr[i];
14599 }
14600 calling->argc += i - 1;
14601 }
14602}
14603static inline void
14604vm_caller_setup_arg_kw(rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci)
14605{
14606 const VALUE *const passed_keywords = vm_ci_kwarg(ci)->keywords;
14607 const int kw_len = vm_ci_kwarg(ci)->keyword_len;
14608 const VALUE h = rb_hash_new_with_size(kw_len);
14609 VALUE *sp = cfp->sp;
14610 int i;
14611 for (i=0; i<kw_len; i++) {
14612 rb_hash_aset(h, passed_keywords[i], (sp - kw_len)[i]);
14613 }
14614 (sp-kw_len)[0] = h;
14615 cfp->sp -= kw_len - 1;
14616 calling->argc -= kw_len - 1;
14617 calling->kw_splat = 1;
14618}
14619static VALUE
14620vm_to_proc(VALUE proc)
14621{
14622 if ((__builtin_expect(!!(!rb_obj_is_proc(proc)), 0))) {
14623 VALUE b;
14624 const rb_callable_method_entry_t *me =
14625 rb_callable_method_entry_with_refinements(rb_class_of(proc), idTo_proc, ((void *)0));
14626 if (me) {
14627 b = rb_vm_call0(rb_current_execution_context(1), proc, idTo_proc, 0, ((void *)0), me, 0);
14628 }
14629 else {
14630 b = rb_check_convert_type_with_id(proc, RUBY_T_DATA, "Proc", idTo_proc);
14631 }
14632 if (RB_NIL_P(b) || !rb_obj_is_proc(b)) {
14633 rb_raise(rb_eTypeError,
14634 "wrong argument type %s (expected Proc)",
14635 rb_obj_classname(proc));
14636 }
14637 return b;
14638 }
14639 else {
14640 return proc;
14641 }
14642}
14643static VALUE
14644refine_sym_proc_call(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg)
14645{
14646 VALUE obj;
14647 ID mid;
14648 const rb_callable_method_entry_t *me = 0;
14649 rb_execution_context_t *ec;
14650 const VALUE symbol = RARRAY_AREF(callback_arg, 0);
14651 const VALUE refinements = RARRAY_AREF(callback_arg, 1);
14652 int kw_splat = rb_keyword_given_p();
14653 VALUE klass;
14654 if (argc-- < 1) {
14655 rb_raise(rb_eArgError, "no receiver given");
14656 }
14657 obj = *argv++;
14658 mid = rb_sym2id(symbol);
14659 for (klass = rb_class_of(obj); klass; klass = RCLASS_SUPER(klass)) {
14660 me = rb_callable_method_entry(klass, mid);
14661 if (me) {
14662 me = rb_resolve_refined_method_callable(refinements, me);
14663 if (me) break;
14664 }
14665 }
14666 ec = rb_current_execution_context(1);
14667 if (!RB_NIL_P(blockarg)) {
14668 vm_passed_block_handler_set(ec, blockarg);
14669 }
14670 if (!me) {
14671 return method_missing(ec, obj, mid, argc, argv, MISSING_NOENTRY, kw_splat);
14672 }
14673 return rb_vm_call0(ec, obj, mid, argc, argv, me, kw_splat);
14674}
14675static VALUE
14676vm_caller_setup_arg_block(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
14677 const struct rb_callinfo *ci, const rb_iseq_t *blockiseq, const int is_super)
14678{
14679 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_BLOCKARG_bit)) {
14680 VALUE block_code = *(--reg_cfp->sp);
14681 if (RB_NIL_P(block_code)) {
14682 return 0;
14683 }
14684 else if (block_code == rb_block_param_proxy) {
14685 ((void)0);
14686 VALUE handler = VM_CF_BLOCK_HANDLER(reg_cfp);
14687 reg_cfp->block_code = (const void *) handler;
14688 return handler;
14689 }
14690 else if (RB_SYMBOL_P(block_code) && rb_method_basic_definition_p(rb_cSymbol, idTo_proc)) {
14691 const rb_cref_t *cref = vm_env_cref(reg_cfp->ep);
14692 if (cref && !RB_NIL_P(cref->refinements)) {
14693 VALUE ref = cref->refinements;
14694 VALUE func = rb_hash_lookup(ref, block_code);
14695 if (RB_NIL_P(func)) {
14696 VALUE callback_arg = rb_ary_tmp_new(2);
14697 rb_ary_push(callback_arg, block_code);
14698 rb_ary_push(callback_arg, ref);
14699 RB_OBJ_FREEZE_RAW(callback_arg);
14700 func = rb_func_lambda_new(refine_sym_proc_call, callback_arg, 1, (-1));
14701 rb_hash_aset(ref, block_code, func);
14702 }
14703 block_code = func;
14704 }
14705 return block_code;
14706 }
14707 else {
14708 return vm_to_proc(block_code);
14709 }
14710 }
14711 else if (blockiseq != ((void *)0)) {
14712 struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(reg_cfp);
14713 captured->code.iseq = blockiseq;
14714 return VM_BH_FROM_ISEQ_BLOCK(captured);
14715 }
14716 else {
14717 if (is_super) {
14718 return ((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]);
14719 }
14720 else {
14721 return 0;
14722 }
14723 }
14724}
14725static inline VALUE vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc, int param_size, int local_size);
14726__attribute__ ((__always_inline__)) static VALUE vm_call_iseq_setup_normal(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const rb_callable_method_entry_t *me, int opt_pc, int param_size, int local_size);
14727static inline VALUE vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc);
14728static VALUE vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
14729static VALUE vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
14730static VALUE vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
14731static inline VALUE vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
14732static vm_call_handler vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size);
14733static VALUE
14734vm_call_iseq_setup_tailcall_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
14735{
14736 ((void)0);
14737 return vm_call_iseq_setup_tailcall(ec, cfp, calling, 0);
14738}
14739static VALUE
14740vm_call_iseq_setup_normal_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
14741{
14742 ((void)0);
14743 const struct rb_callcache *cc = calling->cc;
14744 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14745 int param = iseq->body->param.size;
14746 int local = iseq->body->local_table_size;
14747 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
14748}
14749static _Bool
14750rb_simple_iseq_p(const rb_iseq_t *iseq)
14751{
14752 return iseq->body->param.flags.has_opt == 0 &&
14753 iseq->body->param.flags.has_rest == 0 &&
14754 iseq->body->param.flags.has_post == 0 &&
14755 iseq->body->param.flags.has_kw == 0 &&
14756 iseq->body->param.flags.has_kwrest == 0 &&
14757 iseq->body->param.flags.accepts_no_kwarg == 0 &&
14758 iseq->body->param.flags.has_block == 0;
14759}static inline
14760__attribute__ ((__visibility__("default"))) _Bool
14761rb_iseq_only_optparam_p(const rb_iseq_t *iseq)
14762{
14763 return iseq->body->param.flags.has_opt == 1 &&
14764 iseq->body->param.flags.has_rest == 0 &&
14765 iseq->body->param.flags.has_post == 0 &&
14766 iseq->body->param.flags.has_kw == 0 &&
14767 iseq->body->param.flags.has_kwrest == 0 &&
14768 iseq->body->param.flags.accepts_no_kwarg == 0 &&
14769 iseq->body->param.flags.has_block == 0;
14770}static inline
14771__attribute__ ((__visibility__("default"))) _Bool
14772rb_iseq_only_kwparam_p(const rb_iseq_t *iseq)
14773{
14774 return iseq->body->param.flags.has_opt == 0 &&
14775 iseq->body->param.flags.has_rest == 0 &&
14776 iseq->body->param.flags.has_post == 0 &&
14777 iseq->body->param.flags.has_kw == 1 &&
14778 iseq->body->param.flags.has_kwrest == 0 &&
14779 iseq->body->param.flags.has_block == 0;
14780}
14781static _Bool
14782rb_splat_or_kwargs_p(const struct rb_callinfo *__restrict__ ci)
14783{
14784 return (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) || (vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)));
14785}
14786static inline void
14787CALLER_SETUP_ARG(struct rb_control_frame_struct *__restrict__ cfp,
14788 struct rb_calling_info *__restrict__ calling,
14789 const struct rb_callinfo *__restrict__ ci)
14790{
14791 if ((__builtin_expect(!!((vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))), 0))) {
14792 VALUE final_hash;
14793 vm_caller_setup_arg_splat(cfp, calling);
14794 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit))) &&
14795 calling->argc > 0 &&
14796 RB_TYPE_P((final_hash = *(cfp->sp - 1)), RUBY_T_HASH) &&
14797 (((struct RHash *)final_hash)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
14798 *(cfp->sp - 1) = rb_hash_dup(final_hash);
14799 calling->kw_splat = 1;
14800 }
14801 }
14802 if ((__builtin_expect(!!((vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)))), 0))) {
14803 if ((vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit))) {
14804 vm_caller_setup_arg_kw(cfp, calling, ci);
14805 }
14806 else {
14807 VALUE keyword_hash = cfp->sp[-1];
14808 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
14809 cfp->sp[-1] = rb_hash_dup(rb_to_hash_type(keyword_hash));
14810 }
14811 else if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
14812 cfp->sp[-1] = rb_hash_dup(keyword_hash);
14813 }
14814 }
14815 }
14816}
14817static inline void
14818CALLER_REMOVE_EMPTY_KW_SPLAT(struct rb_control_frame_struct *__restrict__ cfp,
14819 struct rb_calling_info *__restrict__ calling,
14820 const struct rb_callinfo *__restrict__ ci)
14821{
14822 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
14823 if (RHASH_EMPTY_P(cfp->sp[-1])) {
14824 cfp->sp--;
14825 calling->argc--;
14826 calling->kw_splat = 0;
14827 }
14828 }
14829}
14830static VALUE
14831vm_call_iseq_setup_normal_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14832 struct rb_calling_info *calling)
14833{
14834 const struct rb_callcache *cc = calling->cc;
14835 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14836 const int lead_num = iseq->body->param.lead_num;
14837 const int opt = calling->argc - lead_num;
14838 const int opt_num = iseq->body->param.opt_num;
14839 const int opt_pc = (int)iseq->body->param.opt_table[opt];
14840 const int param = iseq->body->param.size;
14841 const int local = iseq->body->local_table_size;
14842 const int delta = opt_num - opt;
14843 ((void)0);
14844 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param - delta, local);
14845}
14846static VALUE
14847vm_call_iseq_setup_tailcall_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14848 struct rb_calling_info *calling)
14849{
14850 const struct rb_callcache *cc = calling->cc;
14851 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14852 const int lead_num = iseq->body->param.lead_num;
14853 const int opt = calling->argc - lead_num;
14854 const int opt_pc = (int)iseq->body->param.opt_table[opt];
14855 ((void)0);
14856 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
14857}
14858static void
14859args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
14860 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
14861 VALUE *const locals);
14862static VALUE
14863vm_call_iseq_setup_kwparm_kwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14864 struct rb_calling_info *calling)
14865{
14866 const struct rb_callinfo *ci = calling->ci;
14867 const struct rb_callcache *cc = calling->cc;
14868 ((void)0);
14869 ((void)0);
14870 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14871 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
14872 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
14873 const int ci_kw_len = kw_arg->keyword_len;
14874 const VALUE * const ci_keywords = kw_arg->keywords;
14875 VALUE *argv = cfp->sp - calling->argc;
14876 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
14877 const int lead_num = iseq->body->param.lead_num;
14878 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
14879 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
14880 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
14881 int param = iseq->body->param.size;
14882 int local = iseq->body->local_table_size;
14883 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
14884}
14885static VALUE
14886vm_call_iseq_setup_kwparm_nokwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14887 struct rb_calling_info *calling)
14888{
14889 const struct rb_callinfo *__attribute__ ((__unused__)) ci = calling->ci;
14890 const struct rb_callcache *cc = calling->cc;
14891 ((void)0);
14892 ((void)0);
14893 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14894 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
14895 VALUE * const argv = cfp->sp - calling->argc;
14896 VALUE * const klocals = argv + kw_param->bits_start - kw_param->num;
14897 int i;
14898 for (i=0; i<kw_param->num; i++) {
14899 klocals[i] = kw_param->default_values[i];
14900 }
14901 klocals[i] = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
14902 int param = iseq->body->param.size;
14903 int local = iseq->body->local_table_size;
14904 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
14905}
14906static inline int
14907vm_callee_setup_arg(rb_execution_context_t *ec, struct rb_calling_info *calling,
14908 const rb_iseq_t *iseq, VALUE *argv, int param_size, int local_size)
14909{
14910 const struct rb_callinfo *ci = calling->ci;
14911 const struct rb_callcache *cc = calling->cc;
14912 _Bool cacheable_ci = vm_ci_markable(ci);
14913 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit))), 1))) {
14914 if ((__builtin_expect(!!(rb_simple_iseq_p(iseq)), 1))) {
14915 rb_control_frame_t *cfp = ec->cfp;
14916 CALLER_SETUP_ARG(cfp, calling, ci);
14917 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
14918 if (calling->argc != iseq->body->param.lead_num) {
14919 argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
14920 }
14921 ((void)0);
14922 ((void)0);
14923 CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size), cacheable_ci && vm_call_iseq_optimizable_p(ci, cc));
14924 return 0;
14925 }
14926 else if (rb_iseq_only_optparam_p(iseq)) {
14927 rb_control_frame_t *cfp = ec->cfp;
14928 CALLER_SETUP_ARG(cfp, calling, ci);
14929 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
14930 const int lead_num = iseq->body->param.lead_num;
14931 const int opt_num = iseq->body->param.opt_num;
14932 const int argc = calling->argc;
14933 const int opt = argc - lead_num;
14934 if (opt < 0 || opt > opt_num) {
14935 argument_arity_error(ec, iseq, argc, lead_num, lead_num + opt_num);
14936 }
14937 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
14938 CC_SET_FASTPATH(cc, vm_call_iseq_setup_normal_opt_start,
14939 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
14940 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
14941 }
14942 else {
14943 CC_SET_FASTPATH(cc, vm_call_iseq_setup_tailcall_opt_start,
14944 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
14945 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
14946 }
14947 ((void)0);
14948 for (int i=argc; i<lead_num + opt_num; i++) {
14949 argv[i] = ((VALUE)RUBY_Qnil);
14950 }
14951 return (int)iseq->body->param.opt_table[opt];
14952 }
14953 else if (rb_iseq_only_kwparam_p(iseq) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))) {
14954 const int lead_num = iseq->body->param.lead_num;
14955 const int argc = calling->argc;
14956 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
14957 if (vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) {
14958 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
14959 if (argc - kw_arg->keyword_len == lead_num) {
14960 const int ci_kw_len = kw_arg->keyword_len;
14961 const VALUE * const ci_keywords = kw_arg->keywords;
14962 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
14963 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
14964 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
14965 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
14966 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_kwarg,
14967 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
14968 return 0;
14969 }
14970 }
14971 else if (argc == lead_num) {
14972 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
14973 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
14974 if (klocals[kw_param->num] == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0))) {
14975 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_nokwarg,
14976 cacheable_ci && !((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) == METHOD_VISI_PROTECTED));
14977 }
14978 return 0;
14979 }
14980 }
14981 }
14982 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_method);
14983}
14984COLDFUNC static VALUE
14985vm_call_iseq_setup(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
14986 ((void)0);
14987 const struct rb_callcache *cc = calling->cc;
14988 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14989 const int param_size = iseq->body->param.size;
14990 const int local_size = iseq->body->local_table_size;
14991 const int opt_pc = vm_callee_setup_arg(ec, calling, def_iseq_ptr(vm_cc_cme(cc)->def), cfp->sp - calling->argc, param_size, local_size);
14992 return vm_call_iseq_setup_2(ec, cfp, calling, opt_pc, param_size, local_size);
14993}
14994COLDFUNC static VALUE
14995vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
14996 int opt_pc, int param_size, int local_size) {
14997 const struct rb_callinfo *ci = calling->ci;
14998 const struct rb_callcache *cc = calling->cc;
14999 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
15000 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param_size, local_size);
15001 }
15002 else {
15003 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
15004 }
15005}
15006static inline VALUE
15007vm_call_iseq_setup_normal(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const rb_callable_method_entry_t *me,
15008 int opt_pc, int param_size, int local_size)
15009{
15010 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15011 VALUE *argv = cfp->sp - calling->argc;
15012 VALUE *sp = argv + param_size;
15013 cfp->sp = argv - 1 ;
15014 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL, calling->recv,
15015 calling->block_handler, (VALUE)me,
15016 iseq->body->iseq_encoded + opt_pc, sp,
15017 local_size - param_size,
15018 iseq->body->stack_max);
15019 return ((VALUE)RUBY_Qundef);
15020}
15021COLDFUNC static VALUE
15022vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc) {
15023 const struct rb_callcache *cc = calling->cc;
15024 unsigned int i;
15025 VALUE *argv = cfp->sp - calling->argc;
15026 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15027 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15028 VALUE *src_argv = argv;
15029 VALUE *sp_orig, *sp;
15030 VALUE finish_flag = VM_FRAME_FINISHED_P(cfp) ? VM_FRAME_FLAG_FINISH : 0;
15031 if (VM_BH_FROM_CFP_P(calling->block_handler, cfp)) {
15032 struct rb_captured_block *dst_captured = VM_CFP_TO_CAPTURED_BLOCK(((cfp)+1));
15033 const struct rb_captured_block *src_captured = VM_BH_TO_CAPT_BLOCK(calling->block_handler);
15034 dst_captured->code.val = src_captured->code.val;
15035 if (VM_BH_ISEQ_BLOCK_P(calling->block_handler)) {
15036 calling->block_handler = VM_BH_FROM_ISEQ_BLOCK(dst_captured);
15037 }
15038 else {
15039 calling->block_handler = VM_BH_FROM_IFUNC_BLOCK(dst_captured);
15040 }
15041 }
15042 vm_pop_frame(ec, cfp, cfp->ep);
15043 cfp = ec->cfp;
15044 sp_orig = sp = cfp->sp;
15045 sp[0] = calling->recv;
15046 sp++;
15047 for (i=0; i < iseq->body->param.size; i++) {
15048 *sp++ = src_argv[i];
15049 }
15050 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL | finish_flag,
15051 calling->recv, calling->block_handler, (VALUE)me,
15052 iseq->body->iseq_encoded + opt_pc, sp,
15053 iseq->body->local_table_size - iseq->body->param.size,
15054 iseq->body->stack_max);
15055 cfp->sp = sp_orig;
15056 return ((VALUE)RUBY_Qundef);
15057}
15058static void
15059ractor_unsafe_check(void)
15060{
15061 if (!rb_ractor_main_p()) {
15062 rb_raise(rb_eRactorUnsafeError, "ractor unsafe method called from not main ractor");
15063 }
15064}
15065static VALUE
15066call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15067{
15068 ractor_unsafe_check();
15069 return (*func)(recv, rb_ary_new_from_values(argc, argv));
15070}
15071static VALUE
15072call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15073{
15074 ractor_unsafe_check();
15075 return (*func)(argc, argv, recv);
15076}
15077static VALUE
15078call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15079{
15080 ractor_unsafe_check();
15081 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15082 return (*f)(recv);
15083}
15084static VALUE
15085call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15086{
15087 ractor_unsafe_check();
15088 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15089 return (*f)(recv, argv[0]);
15090}
15091static VALUE
15092call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15093{
15094 ractor_unsafe_check();
15095 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15096 return (*f)(recv, argv[0], argv[1]);
15097}
15098static VALUE
15099call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15100{
15101 ractor_unsafe_check();
15102 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15103 return (*f)(recv, argv[0], argv[1], argv[2]);
15104}
15105static VALUE
15106call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15107{
15108 ractor_unsafe_check();
15109 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15110 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15111}
15112static VALUE
15113call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15114{
15115 ractor_unsafe_check();
15116 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15117 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15118}
15119static VALUE
15120call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15121{
15122 ractor_unsafe_check();
15123 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15124 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15125}
15126static VALUE
15127call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15128{
15129 ractor_unsafe_check();
15130 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15131 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15132}
15133static VALUE
15134call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15135{
15136 ractor_unsafe_check();
15137 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15138 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15139}
15140static VALUE
15141call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15142{
15143 ractor_unsafe_check();
15144 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15145 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15146}
15147static VALUE
15148call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15149{
15150 ractor_unsafe_check();
15151 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15152 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15153}
15154static VALUE
15155call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15156{
15157 ractor_unsafe_check();
15158 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15159 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
15160}
15161static VALUE
15162call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15163{
15164 ractor_unsafe_check();
15165 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15166 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
15167}
15168static VALUE
15169call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15170{
15171 ractor_unsafe_check();
15172 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15173 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]);
15174}
15175static VALUE
15176call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15177{
15178 ractor_unsafe_check();
15179 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15180 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
15181}
15182static VALUE
15183call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15184{
15185 ractor_unsafe_check();
15186 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15187 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]);
15188}
15189static VALUE
15190ractor_safe_call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15191{
15192 return (*func)(recv, rb_ary_new_from_values(argc, argv));
15193}
15194static VALUE
15195ractor_safe_call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15196{
15197 return (*func)(argc, argv, recv);
15198}
15199static VALUE
15200ractor_safe_call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15201{
15202 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15203 return (*f)(recv);
15204}
15205static VALUE
15206ractor_safe_call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15207{
15208 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15209 return (*f)(recv, argv[0]);
15210}
15211static VALUE
15212ractor_safe_call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15213{
15214 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15215 return (*f)(recv, argv[0], argv[1]);
15216}
15217static VALUE
15218ractor_safe_call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15219{
15220 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15221 return (*f)(recv, argv[0], argv[1], argv[2]);
15222}
15223static VALUE
15224ractor_safe_call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15225{
15226 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15227 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15228}
15229static VALUE
15230ractor_safe_call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15231{
15232 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15233 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15234}
15235static VALUE
15236ractor_safe_call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15237{
15238 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15239 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15240}
15241static VALUE
15242ractor_safe_call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15243{
15244 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15245 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15246}
15247static VALUE
15248ractor_safe_call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15249{
15250 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15251 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15252}
15253static VALUE
15254ractor_safe_call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15255{
15256 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15257 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15258}
15259static VALUE
15260ractor_safe_call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15261{
15262 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15263 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15264}
15265static VALUE
15266ractor_safe_call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15267{
15268 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15269 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
15270}
15271static VALUE
15272ractor_safe_call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15273{
15274 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15275 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
15276}
15277static VALUE
15278ractor_safe_call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15279{
15280 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15281 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]);
15282}
15283static VALUE
15284ractor_safe_call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15285{
15286 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15287 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
15288}
15289static VALUE
15290ractor_safe_call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15291{
15292 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15293 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]);
15294}
15295static inline int
15296vm_cfp_consistent_p(rb_execution_context_t *ec, const rb_control_frame_t *reg_cfp)
15297{
15298 const int ov_flags = RAISED_STACKOVERFLOW;
15299 if ((__builtin_expect(!!(reg_cfp == ec->cfp + 1), 1))) return 1;
15300 if ((((ec)->raised_flag & (ov_flags)) != 0)) {
15301 ((ec)->raised_flag &= ~(ov_flags));
15302 return 1;
15303 }
15304 return 0;
15305}
15306static inline
15307const rb_method_cfunc_t *
15308vm_method_cfunc_entry(const rb_callable_method_entry_t *me)
15309{
15310 return __extension__({
15311 ;
15312 ; __typeof__(&(me->def)->body.cfunc) unaligned_member_access_result = (&(me->def)->body.cfunc);
15313 ; unaligned_member_access_result; });
15314}
15315static VALUE
15316vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15317{
15318 ((void)0);
15319 const struct rb_callinfo *ci = calling->ci;
15320 const struct rb_callcache *cc = calling->cc;
15321 VALUE val;
15322 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15323 const rb_method_cfunc_t *cfunc = vm_method_cfunc_entry(me);
15324 int len = cfunc->argc;
15325 VALUE recv = calling->recv;
15326 VALUE block_handler = calling->block_handler;
15327 VALUE frame_type = VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL;
15328 int argc = calling->argc;
15329 int orig_argc = argc;
15330 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15331 frame_type |= VM_FRAME_FLAG_CFRAME_KW;
15332 }
15333 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, me->owner, me->def->original_id, &args)) { do {} while (0); } } } while (0);
15334 do { const rb_event_flag_t flag_arg_ = (0x0020); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, recv, me->def->original_id, vm_ci_mid(ci), me->owner, ((VALUE)RUBY_Qundef), 0); } } while (0);
15335 vm_push_frame(ec, ((void *)0), frame_type, recv,
15336 block_handler, (VALUE)me,
15337 0, ec->cfp->sp, 0, 0);
15338 if (len >= 0) rb_check_arity(argc, len, len);
15339 reg_cfp->sp -= orig_argc + 1;
15340 val = (*cfunc->invoker)(recv, argc, reg_cfp->sp + 1, cfunc->func);
15341 ((__builtin_expect(!!(vm_cfp_consistent_p(ec, reg_cfp)), 1)) ? (void)0 : rb_bug("vm_call_cfunc" ": cfp consistency error (%p, %p)", (void *)reg_cfp, (void *)(ec->cfp+1)));
15342 rb_vm_pop_frame(ec);
15343 do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, recv, me->def->original_id, vm_ci_mid(ci), me->owner, val, 0); } } while (0);
15344 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, me->owner, me->def->original_id, &args)) { do {} while (0); } } } while (0);
15345 return val;
15346}
15347static VALUE
15348vm_call_cfunc(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15349{
15350 const struct rb_callinfo *ci = calling->ci;
15351 ((void)0);
15352 CALLER_SETUP_ARG(reg_cfp, calling, ci);
15353 CALLER_REMOVE_EMPTY_KW_SPLAT(reg_cfp, calling, ci);
15354 CC_SET_FASTPATH(calling->cc, vm_call_cfunc_with_frame, !rb_splat_or_kwargs_p(ci) && !calling->kw_splat);
15355 return vm_call_cfunc_with_frame(ec, reg_cfp, calling);
15356}
15357static VALUE
15358vm_call_ivar(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15359{
15360 const struct rb_callcache *cc = calling->cc;
15361 ((void)0);
15362 cfp->sp -= 1;
15363 return vm_getivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, ((void *)0), ((void *)0), cc, 1);
15364}
15365static VALUE
15366vm_call_attrset(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15367{
15368 const struct rb_callcache *cc = calling->cc;
15369 ((void)0);
15370 VALUE val = *(cfp->sp - 1);
15371 cfp->sp -= 2;
15372 return vm_setivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, val, ((void *)0), ((void *)0), cc, 1);
15373}static inline
15374_Bool
15375rb_vm_call_ivar_attrset_p(const vm_call_handler ch)
15376{
15377 return (ch == vm_call_ivar || ch == vm_call_attrset);
15378}
15379static inline VALUE
15380vm_call_bmethod_body(rb_execution_context_t *ec, struct rb_calling_info *calling, const VALUE *argv)
15381{
15382 rb_proc_t *proc;
15383 VALUE val;
15384 const struct rb_callcache *cc = calling->cc;
15385 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15386 VALUE procv = cme->def->body.bmethod.proc;
15387 if (!RB_FL_TEST_RAW((procv), RUBY_FL_SHAREABLE) &&
15388 cme->def->body.bmethod.defined_ractor != rb_ractor_self(rb_ec_ractor_ptr(ec))) {
15389 rb_raise(rb_eRuntimeError, "defined with an un-shareable Proc in a different Ractor");
15390 }
15391 (((proc)) = (rb_proc_t*)((struct RData *)(((procv))))->data);
15392 val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat, calling->block_handler, vm_cc_cme(cc));
15393 return val;
15394}
15395static VALUE
15396vm_call_bmethod(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15397{
15398 ((void)0);
15399 VALUE *argv;
15400 int argc;
15401 const struct rb_callinfo *ci = calling->ci;
15402 CALLER_SETUP_ARG(cfp, calling, ci);
15403 argc = calling->argc;
15404 argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (argc))));
15405 ruby_nonempty_memcpy((argv), (cfp->sp - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
15406 cfp->sp += - argc - 1;
15407 return vm_call_bmethod_body(ec, calling, argv);
15408}static inline
15409__attribute__ ((__visibility__("default"))) VALUE
15410rb_find_defined_class_by_owner(VALUE current_class, VALUE target_owner)
15411{
15412 VALUE klass = current_class;
15413 if (RB_TYPE_P(klass, RUBY_T_ICLASS) && RB_FL_TEST(klass, ((VALUE)RUBY_FL_USER5)) &&
15414 RB_TYPE_P(RBASIC_CLASS(klass), RUBY_T_CLASS)) {
15415 klass = RBASIC_CLASS(klass);
15416 }
15417 while (RB_TEST(klass)) {
15418 VALUE owner = RB_TYPE_P(klass, RUBY_T_ICLASS) ? RBASIC_CLASS(klass) : klass;
15419 if (owner == target_owner) {
15420 return klass;
15421 }
15422 klass = RCLASS_SUPER(klass);
15423 }
15424 return current_class;
15425}
15426static const rb_callable_method_entry_t *
15427aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15428{
15429 const rb_method_entry_t *orig_me = me->def->body.alias.original_me;
15430 const rb_callable_method_entry_t *cme;
15431 if (orig_me->defined_class == 0) {
15432 VALUE defined_class = rb_find_defined_class_by_owner(me->defined_class, orig_me->owner);
15433 ((void)0);
15434 cme = rb_method_entry_complement_defined_class(orig_me, me->called_id, defined_class);
15435 if (me->def->alias_count + me->def->complemented_count == 0) {
15436 rb_obj_write((VALUE)(me), __extension__({
15437 ;
15438 ; __typeof__((VALUE *)(&me->def->body.alias.original_me)) unaligned_member_access_result = ((VALUE *)(&me->def->body.alias.original_me));
15439 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.1.3/vm_insnhelper.c", 3159);
15440 }
15441 else {
15442 rb_method_definition_t *def =
15443 rb_method_definition_create(VM_METHOD_TYPE_ALIAS, me->def->original_id);
15444 rb_method_definition_set((rb_method_entry_t *)me, def, (void *)cme);
15445 }
15446 }
15447 else {
15448 cme = (const rb_callable_method_entry_t *)orig_me;
15449 }
15450 ((void)0);
15451 return cme;
15452}static inline
15453const rb_callable_method_entry_t *
15454rb_aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15455{
15456 return aliased_callable_method_entry(me);
15457}
15458static VALUE
15459vm_call_alias(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15460{
15461 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = aliased_callable_method_entry(vm_cc_cme(calling->cc)), .call_ = vm_call_general, .aux_ = { 0 }, };
15462 return vm_call_method_each_type(ec, cfp, calling);
15463}
15464static enum method_missing_reason
15465ci_missing_reason(const struct rb_callinfo *ci)
15466{
15467 enum method_missing_reason stat = MISSING_NOENTRY;
15468 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
15469 if (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) stat |= MISSING_FCALL;
15470 if (vm_ci_flag(ci) & (0x01 << VM_CALL_SUPER_bit)) stat |= MISSING_SUPER;
15471 return stat;
15472}
15473static VALUE
15474vm_call_symbol(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15475 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE symbol)
15476{
15477 ((__builtin_expect(!!(!!(calling->argc >= 0)), 1)) ? ((void)0) : __builtin_unreachable());
15478 enum method_missing_reason missing_reason = MISSING_NOENTRY;
15479 int argc = calling->argc;
15480 VALUE recv = calling->recv;
15481 VALUE klass = rb_class_of(recv);
15482 ID mid = rb_check_id(&symbol);
15483 int flags = (0x01 << VM_CALL_FCALL_bit) |
15484 (0x01 << VM_CALL_OPT_SEND_bit) |
15485 (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15486 if ((__builtin_expect(!!(! mid), 0))) {
15487 mid = idMethodMissing;
15488 missing_reason = ci_missing_reason(ci);
15489 ec->method_missing_reason = missing_reason;
15490 int i = argc;
15491 do { __extension__ _Static_assert(sizeof(*((reg_cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((reg_cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((reg_cfp)->sp)[((1))]; if ((__builtin_expect(!!(((reg_cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
15492 (((reg_cfp)->sp) += (((1))));
15493 ((__builtin_object_size((&(*(((((reg_cfp)->sp)))-(i - 1)-1))), 0) != (size_t)-1) ? __builtin___memmove_chk((&(*(((((reg_cfp)->sp)))-(i - 1)-1))), (&(*(((((reg_cfp)->sp)))-(i)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (i)), __builtin_object_size((&(*(((((reg_cfp)->sp)))-(i - 1)-1))), 0)) : __memmove_ichk((&(*(((((reg_cfp)->sp)))-(i - 1)-1))), (&(*(((((reg_cfp)->sp)))-(i)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (i))));
15494 argc = ++calling->argc;
15495 if (rb_method_basic_definition_p(klass, idMethodMissing)) {
15496 (*(((((reg_cfp)->sp)))-(i)-1)) = symbol;
15497 int priv = vm_ci_flag(ci) & ((0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_VCALL_bit));
15498 const VALUE *argv = (((((reg_cfp)->sp)))-(argc));
15499 VALUE exc = rb_make_no_method_exception(
15500 rb_eNoMethodError, 0, recv, argc, argv, priv);
15501 rb_exc_raise(exc);
15502 }
15503 else {
15504 (*(((((reg_cfp)->sp)))-(i)-1)) = rb_str_intern(symbol);
15505 }
15506 }
15507 calling->ci = &(struct rb_callinfo) { .flags = RUBY_T_IMEMO | (imemo_callinfo << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4), .mid = mid, .flag = flags, .argc = argc, .kwarg = vm_ci_kwarg(ci), };
15508 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = klass, .cme_ = rb_callable_method_entry_with_refinements(klass, mid, ((void *)0)), .call_ = vm_call_general, .aux_ = { .method_missing_reason = missing_reason }, };
15509 return vm_call_method(ec, reg_cfp, calling);
15510}
15511static VALUE
15512vm_call_opt_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15513{
15514 ((void)0);
15515 int i;
15516 VALUE sym;
15517 CALLER_SETUP_ARG(reg_cfp, calling, calling->ci);
15518 i = calling->argc - 1;
15519 if (calling->argc == 0) {
15520 rb_raise(rb_eArgError, "no method name given");
15521 }
15522 else {
15523 sym = (*(((((reg_cfp)->sp)))-(i)-1));
15524 if (i > 0) {
15525 ((__builtin_object_size((&(*(((((reg_cfp)->sp)))-(i)-1))), 0) != (size_t)-1) ? __builtin___memmove_chk((&(*(((((reg_cfp)->sp)))-(i)-1))), (&(*(((((reg_cfp)->sp)))-(i-1)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (i)), __builtin_object_size((&(*(((((reg_cfp)->sp)))-(i)-1))), 0)) : __memmove_ichk((&(*(((((reg_cfp)->sp)))-(i)-1))), (&(*(((((reg_cfp)->sp)))-(i-1)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (i))));
15526 }
15527 calling->argc -= 1;
15528 (((reg_cfp)->sp) -= (((1))));
15529 return vm_call_symbol(ec, reg_cfp, calling, calling->ci, sym);
15530 }
15531}
15532static VALUE
15533vm_call_method_missing_body(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling,
15534 const struct rb_callinfo *orig_ci, enum method_missing_reason reason)
15535{
15536 ((void)0);
15537 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
15538 unsigned int argc;
15539 CALLER_SETUP_ARG(reg_cfp, calling, orig_ci);
15540 argc = calling->argc + 1;
15541 unsigned int flag = (0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15542 calling->argc = argc;
15543 do { __extension__ _Static_assert(sizeof(*((reg_cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((reg_cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((reg_cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((reg_cfp)->sp)[((1))]; if ((__builtin_expect(!!(((reg_cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
15544 ;
15545 if (argc > 1) {
15546 ((__builtin_object_size((argv+1), 0) != (size_t)-1) ? __builtin___memmove_chk((argv+1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc-1)), __builtin_object_size((argv+1), 0)) : __memmove_ichk((argv+1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc-1))));
15547 }
15548 argv[0] = rb_id2sym(vm_ci_mid(orig_ci));
15549 (((reg_cfp)->sp) += (((1))));
15550 ec->method_missing_reason = reason;
15551 calling->ci = &(struct rb_callinfo) { .flags = RUBY_T_IMEMO | (imemo_callinfo << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4), .mid = idMethodMissing, .flag = flag, .argc = argc, .kwarg = vm_ci_kwarg(orig_ci), };
15552 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = rb_callable_method_entry_without_refinements(rb_class_of(calling->recv), idMethodMissing, ((void *)0)), .call_ = vm_call_general, .aux_ = { 0 }, };
15553 return vm_call_method(ec, reg_cfp, calling);
15554}
15555static VALUE
15556vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15557{
15558 return vm_call_method_missing_body(ec, reg_cfp, calling, calling->ci, vm_cc_cmethod_missing_reason(calling->cc));
15559}
15560static const rb_callable_method_entry_t *refined_method_callable_without_refinement(const rb_callable_method_entry_t *me);
15561static VALUE
15562vm_call_zsuper(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, VALUE klass)
15563{
15564 klass = RCLASS_SUPER(klass);
15565 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, vm_ci_mid(calling->ci)) : ((void *)0);
15566 if (cme == ((void *)0)) {
15567 return vm_call_method_nome(ec, cfp, calling);
15568 }
15569 if (cme->def->type == VM_METHOD_TYPE_REFINED &&
15570 cme->def->body.refined.orig_me) {
15571 cme = refined_method_callable_without_refinement(cme);
15572 }
15573 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = cme, .call_ = vm_call_general, .aux_ = { 0 }, };
15574 return vm_call_method_each_type(ec, cfp, calling);
15575}
15576static inline VALUE
15577find_refinement(VALUE refinements, VALUE klass)
15578{
15579 if (RB_NIL_P(refinements)) {
15580 return ((VALUE)RUBY_Qnil);
15581 }
15582 return rb_hash_lookup(refinements, klass);
15583}
15584__attribute__((__pure__)) static rb_control_frame_t * current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
15585static rb_control_frame_t *
15586current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp)
15587{
15588 rb_control_frame_t *top_cfp = cfp;
15589 if (cfp->iseq && cfp->iseq->body->type == ISEQ_TYPE_BLOCK) {
15590 const rb_iseq_t *local_iseq = cfp->iseq->body->local_iseq;
15591 do {
15592 cfp = ((cfp)+1);
15593 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
15594 return top_cfp;
15595 }
15596 } while (cfp->iseq != local_iseq);
15597 }
15598 return cfp;
15599}
15600static const rb_callable_method_entry_t *
15601refined_method_callable_without_refinement(const rb_callable_method_entry_t *me)
15602{
15603 const rb_method_entry_t *orig_me = me->def->body.refined.orig_me;
15604 const rb_callable_method_entry_t *cme;
15605 if (orig_me->defined_class == 0) {
15606 cme = ((void *)0);
15607 rb_notimplement();
15608 }
15609 else {
15610 cme = (const rb_callable_method_entry_t *)orig_me;
15611 }
15612 ((void)0);
15613 if ((!(cme) || !(cme)->def || (cme)->def->type == VM_METHOD_TYPE_UNDEF)) {
15614 cme = ((void *)0);
15615 }
15616 return cme;
15617}
15618static const rb_callable_method_entry_t *
15619search_refined_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15620{
15621 ID mid = vm_ci_mid(calling->ci);
15622 const rb_cref_t *cref = vm_get_cref(cfp->ep);
15623 const struct rb_callcache * const cc = calling->cc;
15624 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15625 for (; cref; cref = CREF_NEXT(cref)) {
15626 const VALUE refinement = find_refinement(CREF_REFINEMENTS(cref), vm_cc_cme(cc)->owner);
15627 if (RB_NIL_P(refinement)) continue;
15628 const rb_callable_method_entry_t *const ref_me =
15629 rb_callable_method_entry(refinement, mid);
15630 if (ref_me) {
15631 if (vm_cc_call(cc) == vm_call_super_method) {
15632 const rb_control_frame_t *top_cfp = current_method_entry(ec, cfp);
15633 const rb_callable_method_entry_t *top_me = rb_vm_frame_method_entry(top_cfp);
15634 if (top_me && rb_method_definition_eq(ref_me->def, top_me->def)) {
15635 continue;
15636 }
15637 }
15638 if (cme->def->type != VM_METHOD_TYPE_REFINED ||
15639 cme->def != ref_me->def) {
15640 cme = ref_me;
15641 }
15642 if (ref_me->def->type != VM_METHOD_TYPE_REFINED) {
15643 return cme;
15644 }
15645 }
15646 else {
15647 return ((void *)0);
15648 }
15649 }
15650 if (vm_cc_cme(cc)->def->body.refined.orig_me) {
15651 return refined_method_callable_without_refinement(vm_cc_cme(cc));
15652 }
15653 else {
15654 VALUE klass = RCLASS_SUPER(vm_cc_cme(cc)->defined_class);
15655 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, mid) : ((void *)0);
15656 return cme;
15657 }
15658}
15659static VALUE
15660vm_call_refined(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15661{
15662 struct rb_callcache *ref_cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5), .klass = ((VALUE)RUBY_Qundef), .cme_ = search_refined_method(ec, cfp, calling), .call_ = vm_call_general, .aux_ = { 0 }, };
15663 if (vm_cc_cme(ref_cc)) {
15664 calling->cc= ref_cc;
15665 return vm_call_method(ec, cfp, calling);
15666 }
15667 else {
15668 return vm_call_method_nome(ec, cfp, calling);
15669 }
15670}
15671static inline VALUE vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci, _Bool is_lambda, VALUE block_handler);
15672__attribute__((__noinline__)) static VALUE vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler);
15673static VALUE
15674vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15675 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler)
15676{
15677 int argc = calling->argc;
15678 if (argc > 0) ((__builtin_object_size((&(*(((((reg_cfp)->sp)))-(argc)-1))), 0) != (size_t)-1) ? __builtin___memmove_chk((&(*(((((reg_cfp)->sp)))-(argc)-1))), (&(*(((((reg_cfp)->sp)))-(argc-1)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)), __builtin_object_size((&(*(((((reg_cfp)->sp)))-(argc)-1))), 0)) : __memmove_ichk((&(*(((((reg_cfp)->sp)))-(argc)-1))), (&(*(((((reg_cfp)->sp)))-(argc-1)-1))), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc))));
15679 (((reg_cfp)->sp) -= (((1))));
15680 return vm_invoke_block(ec, reg_cfp, calling, ci, 0, block_handler);
15681}
15682static VALUE
15683vm_call_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15684{
15685 ((void)0);
15686 const struct rb_callinfo *ci = calling->ci;
15687 VALUE procval = calling->recv;
15688 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, VM_BH_FROM_PROC(procval));
15689}
15690static VALUE
15691vm_call_opt_block_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15692{
15693 ((void)0);
15694 VALUE block_handler = VM_ENV_BLOCK_HANDLER(VM_CF_LEP(reg_cfp));
15695 const struct rb_callinfo *ci = calling->ci;
15696 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_CALL)]&((1 << 12))) == 0), 1)))) {
15697 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, block_handler);
15698 }
15699 else {
15700 calling->recv = rb_vm_bh_to_procval(ec, block_handler);
15701 calling->cc = rb_vm_search_method_slowpath(ci, rb_class_of(calling->recv));
15702 return vm_call_general(ec, reg_cfp, calling);
15703 }
15704}
15705static VALUE
15706vm_call_opt_struct_aref0(rb_execution_context_t *ec, struct rb_calling_info *calling)
15707{
15708 VALUE recv = calling->recv;
15709 ((void)0);
15710 ((void)0);
15711 ((void)0);
15712 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
15713 return internal_RSTRUCT_GET(recv, off);
15714}
15715static VALUE
15716vm_call_opt_struct_aref(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15717{
15718 ((void)0);
15719 VALUE ret = vm_call_opt_struct_aref0(ec, calling);
15720 reg_cfp->sp -= 1;
15721 return ret;
15722}
15723static VALUE
15724vm_call_opt_struct_aset0(rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE val)
15725{
15726 VALUE recv = calling->recv;
15727 ((void)0);
15728 ((void)0);
15729 ((void)0);
15730 rb_check_frozen_inline(recv);
15731 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
15732 internal_RSTRUCT_SET(recv, off, val);
15733 return val;
15734}
15735static VALUE
15736vm_call_opt_struct_aset(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15737{
15738 ((void)0);
15739 VALUE ret = vm_call_opt_struct_aset0(ec, calling, *(reg_cfp->sp - 1));
15740 reg_cfp->sp -= 2;
15741 return ret;
15742}
15743__attribute__((__noinline__)) static VALUE vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci, const struct rb_callcache *cc);
15744static VALUE
15745vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
15746 const struct rb_callinfo *ci, const struct rb_callcache *cc)
15747{
15748 switch (vm_cc_cme(cc)->def->body.optimized.type) {
15749 case OPTIMIZED_METHOD_TYPE_SEND:
15750 CC_SET_FASTPATH(cc, vm_call_opt_send, 1);
15751 return vm_call_opt_send(ec, cfp, calling);
15752 case OPTIMIZED_METHOD_TYPE_CALL:
15753 CC_SET_FASTPATH(cc, vm_call_opt_call, 1);
15754 return vm_call_opt_call(ec, cfp, calling);
15755 case OPTIMIZED_METHOD_TYPE_BLOCK_CALL:
15756 CC_SET_FASTPATH(cc, vm_call_opt_block_call, 1);
15757 return vm_call_opt_block_call(ec, cfp, calling);
15758 case OPTIMIZED_METHOD_TYPE_STRUCT_AREF:
15759 CALLER_SETUP_ARG(cfp, calling, ci);
15760 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15761 rb_check_arity(calling->argc, 0, 0);
15762 CC_SET_FASTPATH(cc, vm_call_opt_struct_aref, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
15763 return vm_call_opt_struct_aref(ec, cfp, calling);
15764 case OPTIMIZED_METHOD_TYPE_STRUCT_ASET:
15765 CALLER_SETUP_ARG(cfp, calling, ci);
15766 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15767 rb_check_arity(calling->argc, 1, 1);
15768 CC_SET_FASTPATH(cc, vm_call_opt_struct_aset, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
15769 return vm_call_opt_struct_aset(ec, cfp, calling);
15770 default:
15771 rb_bug("vm_call_method: unsupported optimized method type (%d)", vm_cc_cme(cc)->def->body.optimized.type);
15772 }
15773}
15774COLDFUNC static VALUE
15775vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
15776 const struct rb_callinfo *ci = calling->ci;
15777 const struct rb_callcache *cc = calling->cc;
15778 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15779 VALUE v;
15780 switch (cme->def->type) {
15781 case VM_METHOD_TYPE_ISEQ:
15782 CC_SET_FASTPATH(cc, vm_call_iseq_setup, 1);
15783 return vm_call_iseq_setup(ec, cfp, calling);
15784 case VM_METHOD_TYPE_NOTIMPLEMENTED:
15785 case VM_METHOD_TYPE_CFUNC:
15786 CC_SET_FASTPATH(cc, vm_call_cfunc, 1);
15787 return vm_call_cfunc(ec, cfp, calling);
15788 case VM_METHOD_TYPE_ATTRSET:
15789 CALLER_SETUP_ARG(cfp, calling, ci);
15790 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15791 rb_check_arity(calling->argc, 1, 1);
15792 vm_cc_attr_index_set(cc, 0);
15793 const unsigned int aset_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KWARG_bit));
15794 if ((__builtin_expect(!!(ruby_vm_event_flags & (0x0020 | 0x0040)), 0))) { do { const rb_event_flag_t flag_arg_ = (0x0020); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, ((VALUE)RUBY_Qundef), 0); } } while (0); v = vm_call_attrset(ec, cfp, calling); do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, (v), 0); } } while (0); } else { CC_SET_FASTPATH(cc, vm_call_attrset, !(vm_ci_flag(ci) & aset_mask)); v = vm_call_attrset(ec, cfp, calling); };
15795 return v;
15796 case VM_METHOD_TYPE_IVAR:
15797 CALLER_SETUP_ARG(cfp, calling, ci);
15798 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15799 rb_check_arity(calling->argc, 0, 0);
15800 vm_cc_attr_index_set(cc, 0);
15801 const unsigned int ivar_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit));
15802 if ((__builtin_expect(!!(ruby_vm_event_flags & (0x0020 | 0x0040)), 0))) { do { const rb_event_flag_t flag_arg_ = (0x0020); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, ((VALUE)RUBY_Qundef), 0); } } while (0); v = vm_call_ivar(ec, cfp, calling); do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, (v), 0); } } while (0); } else { CC_SET_FASTPATH(cc, vm_call_ivar, !(vm_ci_flag(ci) & ivar_mask)); v = vm_call_ivar(ec, cfp, calling); };
15803 return v;
15804 case VM_METHOD_TYPE_MISSING:
15805 vm_cc_method_missing_reason_set(cc, 0);
15806 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
15807 return vm_call_method_missing(ec, cfp, calling);
15808 case VM_METHOD_TYPE_BMETHOD:
15809 CC_SET_FASTPATH(cc, vm_call_bmethod, 1);
15810 return vm_call_bmethod(ec, cfp, calling);
15811 case VM_METHOD_TYPE_ALIAS:
15812 CC_SET_FASTPATH(cc, vm_call_alias, 1);
15813 return vm_call_alias(ec, cfp, calling);
15814 case VM_METHOD_TYPE_OPTIMIZED:
15815 return vm_call_optimized(ec, cfp, calling, ci, cc);
15816 case VM_METHOD_TYPE_UNDEF:
15817 break;
15818 case VM_METHOD_TYPE_ZSUPER:
15819 return vm_call_zsuper(ec, cfp, calling, ((((struct RClass *)(vm_cc_cme(cc)->defined_class))->ptr)->origin_));
15820 case VM_METHOD_TYPE_REFINED:
15821 return vm_call_refined(ec, cfp, calling);
15822 }
15823 rb_bug("vm_call_method: unsupported method type (%d)", vm_cc_cme(cc)->def->type);
15824}
15825__attribute__((__noreturn__)) static void vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj, int call_status);
15826static VALUE
15827vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15828{
15829 const struct rb_callinfo *ci = calling->ci;
15830 const int stat = ci_missing_reason(ci);
15831 if (vm_ci_mid(ci) == idMethodMissing) {
15832 rb_control_frame_t *reg_cfp = cfp;
15833 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
15834 vm_raise_method_missing(ec, calling->argc, argv, calling->recv, stat);
15835 }
15836 else {
15837 return vm_call_method_missing_body(ec, cfp, calling, ci, stat);
15838 }
15839}
15840static inline VALUE
15841vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15842{
15843 const struct rb_callinfo *ci = calling->ci;
15844 const struct rb_callcache *cc = calling->cc;
15845 ((void)0);
15846 if (vm_cc_cme(cc) != ((void *)0)) {
15847 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
15848 case METHOD_VISI_PUBLIC:
15849 return vm_call_method_each_type(ec, cfp, calling);
15850 case METHOD_VISI_PRIVATE:
15851 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit))) {
15852 enum method_missing_reason stat = MISSING_PRIVATE;
15853 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
15854 vm_cc_method_missing_reason_set(cc, stat);
15855 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
15856 return vm_call_method_missing(ec, cfp, calling);
15857 }
15858 return vm_call_method_each_type(ec, cfp, calling);
15859 case METHOD_VISI_PROTECTED:
15860 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_OPT_SEND_bit))) {
15861 if (!rb_obj_is_kind_of(cfp->self, vm_cc_cme(cc)->defined_class)) {
15862 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
15863 return vm_call_method_missing(ec, cfp, calling);
15864 }
15865 else {
15866 ((void)0);
15867 struct rb_callcache cc_on_stack = *cc;
15868 RB_FL_SET_RAW((VALUE)&cc_on_stack, ((VALUE)RUBY_FL_USER4));
15869 calling->cc = &cc_on_stack;
15870 return vm_call_method_each_type(ec, cfp, calling);
15871 }
15872 }
15873 return vm_call_method_each_type(ec, cfp, calling);
15874 default:
15875 rb_bug("unreachable");
15876 }
15877 }
15878 else {
15879 return vm_call_method_nome(ec, cfp, calling);
15880 }
15881}
15882static VALUE
15883vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15884{
15885 ((void)0);
15886 return vm_call_method(ec, reg_cfp, calling);
15887}static inline
15888void
15889rb_vm_cc_general(const struct rb_callcache *cc)
15890{
15891 ((void)0);
15892 ((void)0);
15893 *(vm_call_handler *)&cc->call_ = vm_call_general;
15894}
15895static VALUE
15896vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15897{
15898 ((void)0);
15899 if (ec == ((void *)0)) rb_bug("unreachable");
15900 ((void)0);
15901 return vm_call_method(ec, reg_cfp, calling);
15902}
15903static inline VALUE
15904vm_search_normal_superclass(VALUE klass)
15905{
15906 if (RB_BUILTIN_TYPE(klass) == RUBY_T_ICLASS &&
15907 RB_FL_TEST_RAW(((struct RBasic *)(klass))->klass, RMODULE_IS_REFINEMENT)) {
15908 klass = ((struct RBasic *)(klass))->klass;
15909 }
15910 klass = ((((struct RClass *)(klass))->ptr)->origin_);
15911 return RCLASS_SUPER(klass);
15912}
15913__attribute__((__noreturn__)) static void vm_super_outside(void);
15914static void
15915vm_super_outside(void)
15916{
15917 rb_raise(rb_eNoMethodError, "super called outside of method");
15918}
15919static const struct rb_callcache *
15920empty_cc_for_super(void)
15921{
15922 return rb_vm_empty_cc_for_super();
15923}
15924static const struct rb_callcache *
15925vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *cd, VALUE recv)
15926{
15927 VALUE current_defined_class;
15928 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
15929 if (!me) {
15930 vm_super_outside();
15931 }
15932 current_defined_class = me->defined_class;
15933 if (!RB_NIL_P(((((struct RClass *)(current_defined_class))->ptr)->refined_class))) {
15934 current_defined_class = ((((struct RClass *)(current_defined_class))->ptr)->refined_class);
15935 }
15936 if (RB_BUILTIN_TYPE(current_defined_class) != RUBY_T_MODULE &&
15937 !RB_FL_TEST_RAW(current_defined_class, RMODULE_INCLUDED_INTO_REFINEMENT) &&
15938 reg_cfp->iseq != method_entry_iseqptr(me) &&
15939 !rb_obj_is_kind_of(recv, current_defined_class)) {
15940 VALUE m = RB_TYPE_P(current_defined_class, RUBY_T_ICLASS) ?
15941 ((((struct RClass *)(current_defined_class))->ptr)->includer) : current_defined_class;
15942 if (m) {
15943 rb_raise(rb_eTypeError,
15944 "self has wrong type to call super in this context: "
15945 "%""l""i" "\v"" (expected %""l""i" "\v"")",
15946 rb_obj_class(recv), m);
15947 }
15948 }
15949 if (me->def->type == VM_METHOD_TYPE_BMETHOD && (vm_ci_flag(cd->ci) & (0x01 << VM_CALL_ZSUPER_bit))) {
15950 rb_raise(rb_eRuntimeError,
15951 "implicit argument passing of super from method defined"
15952 " by define_method() is not supported."
15953 " Specify all arguments explicitly.");
15954 }
15955 ID mid = me->def->original_id;
15956 cd->ci = vm_ci_new_runtime_(mid, vm_ci_flag(cd->ci), vm_ci_argc(cd->ci), vm_ci_kwarg(cd->ci), "../ruby-3.1.3/vm_insnhelper.c", 3867);
15957 (rb_obj_written((VALUE)(reg_cfp->iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cd->ci), "../ruby-3.1.3/vm_insnhelper.c", 3872));
15958 const struct rb_callcache *cc;
15959 VALUE klass = vm_search_normal_superclass(me->defined_class);
15960 if (!klass) {
15961 cc = vm_cc_new(klass, ((void *)0), vm_call_method_missing);
15962 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
15963 ;
15964 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
15965 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.1.3/vm_insnhelper.c", 3881);
15966 }
15967 else {
15968 cc = vm_search_method_fastpath((VALUE)reg_cfp->iseq, cd, klass);
15969 const rb_callable_method_entry_t *cached_cme = vm_cc_cme(cc);
15970 if (cached_cme == ((void *)0)) {
15971 cd->cc = empty_cc_for_super();
15972 }
15973 else if (cached_cme->called_id != mid) {
15974 const rb_callable_method_entry_t *cme = rb_callable_method_entry(klass, mid);
15975 if (cme) {
15976 cc = vm_cc_new(klass, cme, vm_call_super_method);
15977 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
15978 ;
15979 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
15980 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.1.3/vm_insnhelper.c", 3896);
15981 }
15982 else {
15983 cd->cc = cc = empty_cc_for_super();
15984 }
15985 }
15986 else {
15987 switch (cached_cme->def->type) {
15988 case VM_METHOD_TYPE_REFINED:
15989 case VM_METHOD_TYPE_ATTRSET:
15990 case VM_METHOD_TYPE_IVAR:
15991 vm_cc_call_set(cc, vm_call_super_method);
15992 break;
15993 default:
15994 break;
15995 }
15996 }
15997 }
15998 ((void)0);
15999 return cc;
16000}
16001static inline int
16002block_proc_is_lambda(const VALUE procval)
16003{
16004 rb_proc_t *proc;
16005 if (procval) {
16006 (((proc)) = (rb_proc_t*)((struct RData *)(((procval))))->data);
16007 return proc->is_lambda;
16008 }
16009 else {
16010 return 0;
16011 }
16012}
16013static VALUE
16014vm_yield_with_cfunc(rb_execution_context_t *ec,
16015 const struct rb_captured_block *captured,
16016 VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
16017 const rb_callable_method_entry_t *me)
16018{
16019 int is_lambda = 0;
16020 VALUE val, arg, blockarg;
16021 int frame_flag;
16022 const struct vm_ifunc *ifunc = captured->code.ifunc;
16023 if (is_lambda) {
16024 arg = rb_ary_new_from_values(argc, argv);
16025 }
16026 else if (argc == 0) {
16027 arg = ((VALUE)RUBY_Qnil);
16028 }
16029 else {
16030 arg = argv[0];
16031 }
16032 blockarg = rb_vm_bh_to_procval(ec, block_handler);
16033 frame_flag = VM_FRAME_MAGIC_IFUNC | VM_FRAME_FLAG_CFRAME | (me ? VM_FRAME_FLAG_BMETHOD : 0);
16034 if (kw_splat) {
16035 frame_flag |= VM_FRAME_FLAG_CFRAME_KW;
16036 }
16037 vm_push_frame(ec, (const rb_iseq_t *)captured->code.ifunc,
16038 frame_flag,
16039 self,
16040 ((VALUE)((captured->ep)) | (0x01)),
16041 (VALUE)me,
16042 0, ec->cfp->sp, 0, 0);
16043 val = (*ifunc->func)(arg, (VALUE)ifunc->data, argc, argv, blockarg);
16044 rb_vm_pop_frame(ec);
16045 return val;
16046}
16047static VALUE
16048vm_yield_with_symbol(rb_execution_context_t *ec, VALUE symbol, int argc, const VALUE *argv, int kw_splat, VALUE block_handler)
16049{
16050 return rb_sym_proc_call(rb_sym2id(symbol), argc, argv, kw_splat, rb_vm_bh_to_procval(ec, block_handler));
16051}
16052static inline int
16053vm_callee_setup_block_arg_arg0_splat(rb_control_frame_t *cfp, const rb_iseq_t *iseq, VALUE *argv, VALUE ary)
16054{
16055 int i;
16056 long len = rb_array_len(ary);
16057 do { __extension__ _Static_assert(sizeof(*((cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((cfp)->sp)[((iseq->body->param.lead_num))]; if ((__builtin_expect(!!(((cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
16058 for (i=0; i<len && i<iseq->body->param.lead_num; i++) {
16059 argv[i] = RARRAY_AREF(ary, i);
16060 }
16061 return i;
16062}
16063static inline VALUE
16064vm_callee_setup_block_arg_arg0_check(VALUE *argv)
16065{
16066 VALUE ary, arg0 = argv[0];
16067 ary = rb_check_array_type(arg0);
16068 ((void)0);
16069 return ary;
16070}
16071static int
16072vm_callee_setup_block_arg(rb_execution_context_t *ec, struct rb_calling_info *calling, const struct rb_callinfo *ci, const rb_iseq_t *iseq, VALUE *argv, const enum arg_setup_type arg_setup_type)
16073{
16074 if (rb_simple_iseq_p(iseq)) {
16075 rb_control_frame_t *cfp = ec->cfp;
16076 VALUE arg0;
16077 CALLER_SETUP_ARG(cfp, calling, ci);
16078 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16079 if (arg_setup_type == arg_setup_block &&
16080 calling->argc == 1 &&
16081 iseq->body->param.flags.has_lead &&
16082 !iseq->body->param.flags.ambiguous_param0 &&
16083 !RB_NIL_P(arg0 = vm_callee_setup_block_arg_arg0_check(argv))) {
16084 calling->argc = vm_callee_setup_block_arg_arg0_splat(cfp, iseq, argv, arg0);
16085 }
16086 if (calling->argc != iseq->body->param.lead_num) {
16087 if (arg_setup_type == arg_setup_block) {
16088 if (calling->argc < iseq->body->param.lead_num) {
16089 int i;
16090 do { __extension__ _Static_assert(sizeof(*((cfp)->sp)) == sizeof(VALUE), "sizeof_sp" ": " "sizeof(*((cfp)->sp)) == sizeof(VALUE)"); __extension__ _Static_assert(sizeof(*((cfp))) == sizeof(rb_control_frame_t), "sizeof_cfp" ": " "sizeof(*((cfp))) == sizeof(rb_control_frame_t)"); const struct rb_control_frame_struct *bound = (void *)&((cfp)->sp)[((iseq->body->param.lead_num))]; if ((__builtin_expect(!!(((cfp)) <= &bound[1]), 0))) { vm_stackoverflow(); } } while (0);
16091 for (i=calling->argc; i<iseq->body->param.lead_num; i++) argv[i] = ((VALUE)RUBY_Qnil);
16092 calling->argc = iseq->body->param.lead_num;
16093 }
16094 else if (calling->argc > iseq->body->param.lead_num) {
16095 calling->argc = iseq->body->param.lead_num;
16096 }
16097 }
16098 else {
16099 argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
16100 }
16101 }
16102 return 0;
16103 }
16104 else {
16105 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_type);
16106 }
16107}
16108static int
16109vm_yield_setup_args(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int argc, VALUE *argv, int kw_splat, VALUE block_handler, enum arg_setup_type arg_setup_type)
16110{
16111 struct rb_calling_info calling_entry, *calling;
16112 calling = &calling_entry;
16113 calling->argc = argc;
16114 calling->block_handler = block_handler;
16115 calling->kw_splat = kw_splat;
16116 calling->recv = ((VALUE)RUBY_Qundef);
16117 struct rb_callinfo dummy_ci = (struct rb_callinfo) { .flags = RUBY_T_IMEMO | (imemo_callinfo << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4), .mid = 0, .flag = (kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0), .argc = 0, .kwarg = 0, };
16118 return vm_callee_setup_block_arg(ec, calling, &dummy_ci, iseq, argv, arg_setup_type);
16119}
16120static VALUE
16121vm_invoke_iseq_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16122 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16123 _Bool is_lambda, VALUE block_handler)
16124{
16125 const struct rb_captured_block *captured = VM_BH_TO_ISEQ_BLOCK(block_handler);
16126 const rb_iseq_t *iseq = rb_iseq_check(captured->code.iseq);
16127 const int arg_size = iseq->body->param.size;
16128 VALUE * const rsp = ((((reg_cfp)->sp))) - calling->argc;
16129 int opt_pc = vm_callee_setup_block_arg(ec, calling, ci, iseq, rsp, is_lambda ? arg_setup_method : arg_setup_block);
16130 (((reg_cfp)->sp) = (((rsp))));
16131 vm_push_frame(ec, iseq,
16132 VM_FRAME_MAGIC_BLOCK | (is_lambda ? VM_FRAME_FLAG_LAMBDA : 0),
16133 captured->self,
16134 ((VALUE)((captured->ep)) | (0x01)), 0,
16135 iseq->body->iseq_encoded + opt_pc,
16136 rsp + arg_size,
16137 iseq->body->local_table_size - arg_size, iseq->body->stack_max);
16138 return ((VALUE)RUBY_Qundef);
16139}
16140static VALUE
16141vm_invoke_symbol_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16142 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16143 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16144{
16145 if (calling->argc < 1) {
16146 rb_raise(rb_eArgError, "no receiver given");
16147 }
16148 else {
16149 VALUE symbol = VM_BH_TO_SYMBOL(block_handler);
16150 CALLER_SETUP_ARG(reg_cfp, calling, ci);
16151 calling->recv = (*(((((reg_cfp)->sp)))-(--calling->argc)-1));
16152 return vm_call_symbol(ec, reg_cfp, calling, ci, symbol);
16153 }
16154}
16155static VALUE
16156vm_invoke_ifunc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16157 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16158 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16159{
16160 VALUE val;
16161 int argc;
16162 const struct rb_captured_block *captured = VM_BH_TO_IFUNC_BLOCK(block_handler);
16163 CALLER_SETUP_ARG(ec->cfp, calling, ci);
16164 CALLER_REMOVE_EMPTY_KW_SPLAT(ec->cfp, calling, ci);
16165 argc = calling->argc;
16166 val = vm_yield_with_cfunc(ec, captured, captured->self, argc, (((((reg_cfp)->sp)))-(argc)), calling->kw_splat, calling->block_handler, ((void *)0));
16167 ((((reg_cfp)->sp) -= (((argc)))));
16168 return val;
16169}
16170static VALUE
16171vm_proc_to_block_handler(VALUE procval)
16172{
16173 const struct rb_block *block = vm_proc_block(procval);
16174 switch (vm_block_type(block)) {
16175 case block_type_iseq:
16176 return VM_BH_FROM_ISEQ_BLOCK(&block->as.captured);
16177 case block_type_ifunc:
16178 return VM_BH_FROM_IFUNC_BLOCK(&block->as.captured);
16179 case block_type_symbol:
16180 return VM_BH_FROM_SYMBOL(block->as.symbol);
16181 case block_type_proc:
16182 return VM_BH_FROM_PROC(block->as.proc);
16183 }
16184 __builtin_unreachable();
16185 return ((VALUE)RUBY_Qundef);
16186}
16187static VALUE
16188vm_invoke_proc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16189 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16190 _Bool is_lambda, VALUE block_handler)
16191{
16192 while (vm_block_handler_type(block_handler) == block_handler_type_proc) {
16193 VALUE proc = VM_BH_TO_PROC(block_handler);
16194 is_lambda = block_proc_is_lambda(proc);
16195 block_handler = vm_proc_to_block_handler(proc);
16196 }
16197 return vm_invoke_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16198}
16199static inline VALUE
16200vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16201 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16202 _Bool is_lambda, VALUE block_handler)
16203{
16204 VALUE (*func)(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16205 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16206 _Bool is_lambda, VALUE block_handler);
16207 switch (vm_block_handler_type(block_handler)) {
16208 case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
16209 case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
16210 case block_handler_type_proc: func = vm_invoke_proc_block; break;
16211 case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
16212 default: rb_bug("vm_invoke_block: unreachable");
16213 }
16214 return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16215}
16216static VALUE
16217vm_make_proc_with_iseq(const rb_iseq_t *blockiseq)
16218{
16219 const rb_execution_context_t *ec = rb_current_execution_context(1);
16220 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16221 struct rb_captured_block *captured;
16222 if (cfp == 0) {
16223 rb_bug("vm_make_proc_with_iseq: unreachable");
16224 }
16225 captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
16226 captured->code.iseq = blockiseq;
16227 return rb_vm_make_proc(ec, captured, rb_cProc);
16228}
16229static VALUE
16230vm_once_exec(VALUE iseq)
16231{
16232 VALUE proc = vm_make_proc_with_iseq((rb_iseq_t *)iseq);
16233 return rb_proc_call_with_block(proc, 0, 0, ((VALUE)RUBY_Qnil));
16234}
16235static VALUE
16236vm_once_clear(VALUE data)
16237{
16238 union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)data;
16239 is->once.running_thread = ((void *)0);
16240 return ((VALUE)RUBY_Qnil);
16241}
16242static _Bool
16243check_respond_to_missing(VALUE obj, VALUE v)
16244{
16245 VALUE args[2];
16246 VALUE r;
16247 args[0] = obj; args[1] = ((VALUE)RUBY_Qfalse);
16248 r = rb_check_funcall(v, idRespond_to_missing, 2, args);
16249 if (r != ((VALUE)RUBY_Qundef) && RB_TEST(r)) {
16250 return 1;
16251 }
16252 else {
16253 return 0;
16254 }
16255}
16256static _Bool
16257vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16258{
16259 VALUE klass;
16260 enum defined_type type = (enum defined_type)op_type;
16261 switch (type) {
16262 case DEFINED_IVAR:
16263 return rb_ivar_defined((((((reg_cfp)))->self)), rb_sym2id(obj));
16264 break;
16265 case DEFINED_GVAR:
16266 return rb_gvar_defined(rb_sym2id(obj));
16267 break;
16268 case DEFINED_CVAR: {
16269 const rb_cref_t *cref = vm_get_cref(((((reg_cfp)->ep))));
16270 klass = vm_get_cvar_base(cref, (((reg_cfp))), 0);
16271 return rb_cvar_defined(klass, rb_sym2id(obj));
16272 break;
16273 }
16274 case DEFINED_CONST:
16275 case DEFINED_CONST_FROM: {
16276 _Bool allow_nil = type == DEFINED_CONST;
16277 klass = v;
16278 return vm_get_ev_const(ec, klass, rb_sym2id(obj), allow_nil, 1);
16279 break;
16280 }
16281 case DEFINED_FUNC:
16282 klass = rb_class_of(v);
16283 return rb_ec_obj_respond_to(ec, v, rb_sym2id(obj), 1);
16284 break;
16285 case DEFINED_METHOD:{
16286 VALUE klass = rb_class_of(v);
16287 const rb_method_entry_t *me = rb_method_entry_with_refinements(klass, rb_sym2id(obj), ((void *)0));
16288 if (me) {
16289 switch ((rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16290 case METHOD_VISI_PRIVATE:
16291 break;
16292 case METHOD_VISI_PROTECTED:
16293 if (!rb_obj_is_kind_of((((((reg_cfp)))->self)), rb_class_real(me->defined_class))) {
16294 break;
16295 }
16296 case METHOD_VISI_PUBLIC:
16297 return 1;
16298 break;
16299 default:
16300 rb_bug("vm_defined: unreachable: %u", (unsigned int)(rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0)));
16301 }
16302 }
16303 else {
16304 return check_respond_to_missing(obj, v);
16305 }
16306 break;
16307 }
16308 case DEFINED_YIELD:
16309 if (((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]) != 0) {
16310 return 1;
16311 }
16312 break;
16313 case DEFINED_ZSUPER:
16314 {
16315 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry((((reg_cfp))));
16316 if (me) {
16317 VALUE klass = vm_search_normal_superclass(me->defined_class);
16318 ID id = me->def->original_id;
16319 return rb_method_boundp(klass, id, 0);
16320 }
16321 }
16322 break;
16323 case DEFINED_REF:{
16324 return vm_getspecial(ec, (VM_EP_LEP(((((reg_cfp)->ep))))), ((VALUE)RUBY_Qfalse), RB_FIX2INT(obj)) != ((VALUE)RUBY_Qnil);
16325 break;
16326 }
16327 default:
16328 rb_bug("unimplemented defined? type (VM)");
16329 break;
16330 }
16331 return 0;
16332}static inline
16333_Bool
16334rb_vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16335{
16336 return vm_defined(ec, reg_cfp, op_type, obj, v);
16337}
16338static const VALUE *
16339vm_get_ep(const VALUE *const reg_ep, rb_num_t lv)
16340{
16341 rb_num_t i;
16342 const VALUE *ep = reg_ep;
16343 for (i = 0; i < lv; i++) {
16344 ep = ((VALUE *)((ep)[(-1)] & ~0x03));
16345 }
16346 return ep;
16347}
16348static VALUE
16349vm_get_special_object(const VALUE *const reg_ep,
16350 enum vm_special_object_type type)
16351{
16352 switch (type) {
16353 case VM_SPECIAL_OBJECT_VMCORE:
16354 return rb_mRubyVMFrozenCore;
16355 case VM_SPECIAL_OBJECT_CBASE:
16356 return vm_get_cbase(reg_ep);
16357 case VM_SPECIAL_OBJECT_CONST_BASE:
16358 return vm_get_const_base(reg_ep);
16359 default:
16360 rb_bug("putspecialobject insn: unknown value_type %d", type);
16361 }
16362}
16363static VALUE
16364vm_concat_array(VALUE ary1, VALUE ary2st)
16365{
16366 const VALUE ary2 = ary2st;
16367 VALUE tmp1 = rb_check_to_array(ary1);
16368 VALUE tmp2 = rb_check_to_array(ary2);
16369 if (RB_NIL_P(tmp1)) {
16370 tmp1 = __extension__ ({ const VALUE args_to_new_ary[] = {ary1}; if (__builtin_constant_p(1)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (1), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (1)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); });
16371 }
16372 if (RB_NIL_P(tmp2)) {
16373 tmp2 = __extension__ ({ const VALUE args_to_new_ary[] = {ary2}; if (__builtin_constant_p(1)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (1), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (1)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); });
16374 }
16375 if (tmp1 == ary1) {
16376 tmp1 = rb_ary_dup(ary1);
16377 }
16378 return rb_ary_concat(tmp1, tmp2);
16379}
16380static VALUE
16381vm_splat_array(VALUE flag, VALUE ary)
16382{
16383 VALUE tmp = rb_check_to_array(ary);
16384 if (RB_NIL_P(tmp)) {
16385 return __extension__ ({ const VALUE args_to_new_ary[] = {ary}; if (__builtin_constant_p(1)) { __extension__ _Static_assert(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))) == (1), "rb_ary_new_from_args" ": " "numberof(args_to_new_ary) == (1)"); } rb_ary_new_from_values(((int)(sizeof(args_to_new_ary) / sizeof((args_to_new_ary)[0]))), args_to_new_ary); });
16386 }
16387 else if (RB_TEST(flag)) {
16388 return rb_ary_dup(tmp);
16389 }
16390 else {
16391 return tmp;
16392 }
16393}static inline
16394VALUE
16395rb_vm_splat_array(VALUE flag, VALUE ary)
16396{
16397 return vm_splat_array(flag, ary);
16398}
16399static VALUE
16400vm_check_match(rb_execution_context_t *ec, VALUE target, VALUE pattern, rb_num_t flag)
16401{
16402 enum vm_check_match_type type = ((int)flag) & 0x03;
16403 if (flag & 0x04) {
16404 long i;
16405 const long n = rb_array_len(pattern);
16406 for (i = 0; i < n; i++) {
16407 VALUE v = RARRAY_AREF(pattern, i);
16408 VALUE c = check_match(ec, v, target, type);
16409 if (RB_TEST(c)) {
16410 return c;
16411 }
16412 }
16413 return ((VALUE)RUBY_Qfalse);
16414 }
16415 else {
16416 return check_match(ec, pattern, target, type);
16417 }
16418}
16419static VALUE
16420vm_check_keyword(lindex_t bits, lindex_t idx, const VALUE *ep)
16421{
16422 const VALUE kw_bits = *(ep - bits);
16423 if (RB_FIXNUM_P(kw_bits)) {
16424 unsigned int b = (unsigned int)rb_fix2ulong(kw_bits);
16425 if ((idx < (32-1)) && (b & (0x01 << idx)))
16426 return ((VALUE)RUBY_Qfalse);
16427 }
16428 else {
16429 ((void)0);
16430 if (rb_hash_has_key(kw_bits, __builtin_choose_expr( __builtin_constant_p(idx), ((VALUE)(idx)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(idx)))) return ((VALUE)RUBY_Qfalse);
16431 }
16432 return ((VALUE)RUBY_Qtrue);
16433}
16434static void
16435vm_dtrace(rb_event_flag_t flag, rb_execution_context_t *ec)
16436{
16437 if (0 ||
16438 0 ||
16439 0 ||
16440 0) {
16441 switch (flag) {
16442 case 0x0008:
16443 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
16444 return;
16445 case 0x0020:
16446 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
16447 return;
16448 case 0x0010:
16449 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
16450 return;
16451 case 0x0040:
16452 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, 0, 0, &args)) { do {} while (0); } } } while (0);
16453 return;
16454 }
16455 }
16456}
16457static VALUE
16458vm_const_get_under(ID id, rb_num_t flags, VALUE cbase)
16459{
16460 VALUE ns;
16461 if ((ns = vm_search_const_defined_class(cbase, id)) == 0) {
16462 return ns;
16463 }
16464 else if (((flags) & 0x08)) {
16465 return rb_public_const_get_at(ns, id);
16466 }
16467 else {
16468 return rb_const_get_at(ns, id);
16469 }
16470}
16471static VALUE
16472vm_check_if_class(ID id, rb_num_t flags, VALUE super, VALUE klass)
16473{
16474 if (!RB_TYPE_P(klass, RUBY_T_CLASS)) {
16475 return 0;
16476 }
16477 else if (((flags) & 0x10)) {
16478 VALUE tmp = rb_class_real(RCLASS_SUPER(klass));
16479 if (tmp != super) {
16480 rb_raise(rb_eTypeError,
16481 "superclass mismatch for class %""l""i" "\v""",
16482 rb_id2str(id));
16483 }
16484 else {
16485 return klass;
16486 }
16487 }
16488 else {
16489 return klass;
16490 }
16491}
16492static VALUE
16493vm_check_if_module(ID id, VALUE mod)
16494{
16495 if (!RB_TYPE_P(mod, RUBY_T_MODULE)) {
16496 return 0;
16497 }
16498 else {
16499 return mod;
16500 }
16501}
16502static VALUE
16503declare_under(ID id, VALUE cbase, VALUE c)
16504{
16505 rb_set_class_path_string(c, cbase, rb_id2str(id));
16506 rb_const_set(cbase, id, c);
16507 return c;
16508}
16509static VALUE
16510vm_declare_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16511{
16512 VALUE s = ((flags) & 0x10) ? super : rb_cObject;
16513 VALUE c = declare_under(id, cbase, rb_define_class_id(id, s));
16514 rb_define_alloc_func(c, rb_get_alloc_func(c));
16515 rb_class_inherited(s, c);
16516 return c;
16517}
16518static VALUE
16519vm_declare_module(ID id, VALUE cbase)
16520{
16521 return declare_under(id, cbase, rb_module_new());
16522}
16523__attribute__((__noreturn__)) static void unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old);
16524static void
16525unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old)
16526{
16527 VALUE name = rb_id2str(id);
16528 VALUE message = rb_sprintf("%""l""i" "\v"" is not a %s",
16529 name, type);
16530 VALUE location = rb_const_source_location_at(cbase, id);
16531 if (!RB_NIL_P(location)) {
16532 rb_str_catf(message, "\n%""l""i" "\v"":%""l""i" "\v"":"
16533 " previous definition of %""l""i" "\v"" was here",
16534 rb_ary_entry(location, 0), rb_ary_entry(location, 1), name);
16535 }
16536 rb_exc_raise(rb_exc_new_str(rb_eTypeError, message));
16537}
16538static VALUE
16539vm_define_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16540{
16541 VALUE klass;
16542 if (((flags) & 0x10) && !RB_TYPE_P(super, RUBY_T_CLASS)) {
16543 rb_raise(rb_eTypeError,
16544 "superclass must be an instance of Class (given an instance of %""l""i" "\v"")",
16545 rb_obj_class(super));
16546 }
16547 vm_check_if_namespace(cbase);
16548 rb_autoload_load(cbase, id);
16549 if ((klass = vm_const_get_under(id, flags, cbase)) != 0) {
16550 if (!vm_check_if_class(id, flags, super, klass))
16551 unmatched_redefinition("class", cbase, id, klass);
16552 return klass;
16553 }
16554 else {
16555 return vm_declare_class(id, flags, cbase, super);
16556 }
16557}
16558static VALUE
16559vm_define_module(ID id, rb_num_t flags, VALUE cbase)
16560{
16561 VALUE mod;
16562 vm_check_if_namespace(cbase);
16563 if ((mod = vm_const_get_under(id, flags, cbase)) != 0) {
16564 if (!vm_check_if_module(id, mod))
16565 unmatched_redefinition("module", cbase, id, mod);
16566 return mod;
16567 }
16568 else {
16569 return vm_declare_module(id, cbase);
16570 }
16571}
16572static VALUE
16573vm_find_or_create_class_by_id(ID id,
16574 rb_num_t flags,
16575 VALUE cbase,
16576 VALUE super)
16577{
16578 rb_vm_defineclass_type_t type = ((rb_vm_defineclass_type_t)(flags) & VM_DEFINECLASS_TYPE_MASK);
16579 switch (type) {
16580 case VM_DEFINECLASS_TYPE_CLASS:
16581 return vm_define_class(id, flags, cbase, super);
16582 case VM_DEFINECLASS_TYPE_SINGLETON_CLASS:
16583 return rb_singleton_class(cbase);
16584 case VM_DEFINECLASS_TYPE_MODULE:
16585 return vm_define_module(id, flags, cbase);
16586 default:
16587 rb_bug("unknown defineclass type: %d", (int)type);
16588 }
16589}
16590static rb_method_visibility_t
16591vm_scope_visibility_get(const rb_execution_context_t *ec)
16592{
16593 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16594 if (!vm_env_cref_by_cref(cfp->ep)) {
16595 return METHOD_VISI_PUBLIC;
16596 }
16597 else {
16598 return CREF_SCOPE_VISI(vm_ec_cref(ec))->method_visi;
16599 }
16600}
16601static int
16602vm_scope_module_func_check(const rb_execution_context_t *ec)
16603{
16604 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16605 if (!vm_env_cref_by_cref(cfp->ep)) {
16606 return 0;
16607 }
16608 else {
16609 return CREF_SCOPE_VISI(vm_ec_cref(ec))->module_func;
16610 }
16611}
16612static void
16613vm_define_method(const rb_execution_context_t *ec, VALUE obj, ID id, VALUE iseqval, int is_singleton)
16614{
16615 VALUE klass;
16616 rb_method_visibility_t visi;
16617 rb_cref_t *cref = vm_ec_cref(ec);
16618 if (is_singleton) {
16619 klass = rb_singleton_class(obj);
16620 visi = METHOD_VISI_PUBLIC;
16621 }
16622 else {
16623 klass = CREF_CLASS_FOR_DEFINITION(cref);
16624 visi = vm_scope_visibility_get(ec);
16625 }
16626 if (RB_NIL_P(klass)) {
16627 rb_raise(rb_eTypeError, "no class/module to add method");
16628 }
16629 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, visi);
16630 if (!is_singleton && vm_scope_module_func_check(ec)) {
16631 klass = rb_singleton_class(klass);
16632 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, METHOD_VISI_PUBLIC);
16633 }
16634}
16635static VALUE
16636vm_invokeblock_i(struct rb_execution_context_struct *ec,
16637 struct rb_control_frame_struct *reg_cfp,
16638 struct rb_calling_info *calling)
16639{
16640 const struct rb_callinfo *ci = calling->ci;
16641 VALUE block_handler = VM_CF_BLOCK_HANDLER((((reg_cfp))));
16642 if (block_handler == 0) {
16643 rb_vm_localjump_error("no block given (yield)", ((VALUE)RUBY_Qnil), 0);
16644 }
16645 else {
16646 return vm_invoke_block(ec, (((reg_cfp))), calling, ci, 0, block_handler);
16647 }
16648}
16649static const struct rb_callcache *
16650vm_search_method_wrap(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
16651{
16652 return vm_search_method((VALUE)reg_cfp->iseq, cd, recv);
16653}
16654static const struct rb_callcache *
16655vm_search_invokeblock(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
16656{
16657 static const struct rb_callcache cc = {
16658 .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4),
16659 .klass = 0,
16660 .cme_ = 0,
16661 .call_ = vm_invokeblock_i,
16662 .aux_ = {0},
16663 };
16664 return &cc;
16665}
16666static
16667VALUE
16668vm_sendish(
16669 struct rb_execution_context_struct *ec,
16670 struct rb_control_frame_struct *reg_cfp,
16671 struct rb_call_data *cd,
16672 VALUE block_handler,
16673 const struct rb_callcache *(*method_explorer)(const struct rb_control_frame_struct *cfp, struct rb_call_data *cd, VALUE recv)
16674) {
16675 VALUE val = ((VALUE)RUBY_Qundef);
16676 const struct rb_callinfo *ci = cd->ci;
16677 const struct rb_callcache *cc;
16678 int argc = vm_ci_argc(ci);
16679 VALUE recv = (*(((((reg_cfp)->sp)))-(argc)-1));
16680 struct rb_calling_info calling = {
16681 .block_handler = block_handler,
16682 .kw_splat = (vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit)) > 0,
16683 .recv = recv,
16684 .argc = argc,
16685 .ci = ci,
16686 };
16687 calling.cc = cc = method_explorer((((reg_cfp))), cd, recv);
16688 val = vm_cc_call(cc)(ec, (((reg_cfp))), &calling);
16689 if (val != ((VALUE)RUBY_Qundef)) {
16690 return val;
16691 }
16692 else {
16693 do { (reg_cfp) = ec->cfp; } while (0);
16694 }
16695 if (((((reg_cfp)))->iseq)->body->catch_except_p) {
16696 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
16697 return rb_vm_exec(ec, 1);
16698 }
16699 else if ((val = mjit_exec(ec)) == ((VALUE)RUBY_Qundef)) {
16700 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
16701 return rb_vm_exec(ec, 0);
16702 }
16703 else {
16704 return val;
16705 }
16706}
16707VALUE rb_nil_to_s(VALUE);
16708VALUE rb_true_to_s(VALUE);
16709VALUE rb_false_to_s(VALUE);
16710VALUE rb_int_to_s(int argc, VALUE *argv, VALUE x);
16711VALUE rb_fix_to_s(VALUE);
16712VALUE rb_mod_to_s(VALUE);
16713VALUE rb_mod_name(VALUE);
16714static VALUE
16715vm_objtostring(const rb_iseq_t *iseq, VALUE recv, CALL_DATA cd)
16716{
16717 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
16718 switch (((int)rb_type(recv))) {
16719 case RUBY_T_STRING:
16720 return recv;
16721 case RUBY_T_SYMBOL:
16722 if (check_cfunc(vm_cc_cme(cc), rb_sym_to_s)) {
16723 return rb_sym2str(recv);
16724 }
16725 break;
16726 case RUBY_T_MODULE:
16727 case RUBY_T_CLASS:
16728 if (check_cfunc(vm_cc_cme(cc), rb_mod_to_s)) {
16729 VALUE val = rb_mod_name(recv);
16730 if (val == ((VALUE)RUBY_Qnil)) {
16731 val = rb_mod_to_s(recv);
16732 }
16733 return val;
16734 }
16735 break;
16736 case RUBY_T_NIL:
16737 if (check_cfunc(vm_cc_cme(cc), rb_nil_to_s)) {
16738 return rb_nil_to_s(recv);
16739 }
16740 break;
16741 case RUBY_T_TRUE:
16742 if (check_cfunc(vm_cc_cme(cc), rb_true_to_s)) {
16743 return rb_true_to_s(recv);
16744 }
16745 break;
16746 case RUBY_T_FALSE:
16747 if (check_cfunc(vm_cc_cme(cc), rb_false_to_s)) {
16748 return rb_false_to_s(recv);
16749 }
16750 break;
16751 case RUBY_T_FIXNUM:
16752 if (check_cfunc(vm_cc_cme(cc), rb_int_to_s)) {
16753 return rb_fix_to_s(recv);
16754 }
16755 break;
16756 }
16757 return ((VALUE)RUBY_Qundef);
16758}
16759static VALUE
16760vm_opt_str_freeze(VALUE str, int bop, ID id)
16761{
16762 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
16763 return str;
16764 }
16765 else {
16766 return ((VALUE)RUBY_Qundef);
16767 }
16768}
16769static VALUE
16770vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
16771{
16772 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MAX)]&((1 << 3))) == 0), 1)))) {
16773 if (num == 0) {
16774 return ((VALUE)RUBY_Qnil);
16775 }
16776 else {
16777 struct cmp_opt_data cmp_opt = { 0, 0 };
16778 VALUE result = *ptr;
16779 rb_snum_t i = num - 1;
16780 while (i-- > 0) {
16781 const VALUE v = *++ptr;
16782 if (((RB_FIXNUM_P(v) && RB_FIXNUM_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Integer)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Integer)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Integer)), rb_method_basic_definition_p(rb_cInteger, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Integer))))) ? (((long)v > (long)result) ? 1 : ((long)v < (long)result) ? -1 : 0) : ((RB_TYPE_P((v), RUBY_T_STRING) && rb_class_of(v) == rb_cString) && (RB_TYPE_P((result), RUBY_T_STRING) && rb_class_of(result) == rb_cString) && (((cmp_opt).opt_inited & (1U << cmp_opt_String)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_String)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_String)), rb_method_basic_definition_p(rb_cString, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_String))))) ? rb_str_cmp(v, result) : (RB_FLOAT_TYPE_P(v) && RB_FLOAT_TYPE_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Float)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Float)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Float)), rb_method_basic_definition_p(rb_cFloat, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Float))))) ? rb_float_cmp(v, result) : rb_cmpint(rb_funcallv(v, idCmp, 1, &result), v, result)) > 0) {
16783 result = v;
16784 }
16785 }
16786 return result;
16787 }
16788 }
16789 else {
16790 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMax, 0, ((void *)0), 0);
16791 }
16792}
16793static VALUE
16794vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
16795{
16796 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MIN)]&((1 << 3))) == 0), 1)))) {
16797 if (num == 0) {
16798 return ((VALUE)RUBY_Qnil);
16799 }
16800 else {
16801 struct cmp_opt_data cmp_opt = { 0, 0 };
16802 VALUE result = *ptr;
16803 rb_snum_t i = num - 1;
16804 while (i-- > 0) {
16805 const VALUE v = *++ptr;
16806 if (((RB_FIXNUM_P(v) && RB_FIXNUM_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Integer)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Integer)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Integer)), rb_method_basic_definition_p(rb_cInteger, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Integer))))) ? (((long)v > (long)result) ? 1 : ((long)v < (long)result) ? -1 : 0) : ((RB_TYPE_P((v), RUBY_T_STRING) && rb_class_of(v) == rb_cString) && (RB_TYPE_P((result), RUBY_T_STRING) && rb_class_of(result) == rb_cString) && (((cmp_opt).opt_inited & (1U << cmp_opt_String)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_String)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_String)), rb_method_basic_definition_p(rb_cString, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_String))))) ? rb_str_cmp(v, result) : (RB_FLOAT_TYPE_P(v) && RB_FLOAT_TYPE_P(result) && (((cmp_opt).opt_inited & (1U << cmp_opt_Float)) ? ((cmp_opt).opt_methods & (1U << cmp_opt_Float)) : (((cmp_opt).opt_inited |= (1U << cmp_opt_Float)), rb_method_basic_definition_p(rb_cFloat, idCmp) && ((cmp_opt).opt_methods |= (1U << cmp_opt_Float))))) ? rb_float_cmp(v, result) : rb_cmpint(rb_funcallv(v, idCmp, 1, &result), v, result)) < 0) {
16807 result = v;
16808 }
16809 }
16810 return result;
16811 }
16812 }
16813 else {
16814 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMin, 0, ((void *)0), 0);
16815 }
16816}
16817static inline _Bool
16818vm_inlined_ic_hit_p(VALUE flags, VALUE value, const rb_cref_t *ic_cref, rb_serial_t ic_serial, const VALUE *reg_ep)
16819{
16820 if (ic_serial == (ruby_vm_global_constant_state) &&
16821 ((flags & ((VALUE)RUBY_FL_USER4)) || rb_ractor_main_p())) {
16822 ((void)0);
16823 return (ic_cref == ((void *)0) ||
16824 ic_cref == vm_get_cref(reg_ep));
16825 }
16826 return 0;
16827}
16828static _Bool
16829vm_ic_hit_p(const struct iseq_inline_constant_cache_entry *ice, const VALUE *reg_ep)
16830{
16831 ((void)0);
16832 return vm_inlined_ic_hit_p(ice->flags, ice->value, ice->ic_cref, (ice)->ic_serial.raw, reg_ep);
16833}static inline
16834_Bool
16835rb_vm_ic_hit_p(IC ic, const VALUE *reg_ep)
16836{
16837 return ic->entry && vm_ic_hit_p(ic->entry, reg_ep);
16838}
16839COLDFUNC static void
16840vm_ic_update(const rb_iseq_t *iseq, IC ic, VALUE val, const VALUE *reg_ep) {
16841 struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)rb_imemo_new(imemo_constcache, 0, 0, 0, 0);
16842 rb_obj_write((VALUE)(ice), __extension__({
16843 ;
16844 ; __typeof__((VALUE *)(&ice->value)) unaligned_member_access_result = ((VALUE *)(&ice->value));
16845 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 4963);
16846 ice->ic_cref = vm_get_const_key_cref(reg_ep);
16847 (ice)->ic_serial.raw = ((ruby_vm_global_constant_state) - ruby_vm_const_missing_count);
16848 if (rb_ractor_shareable_p(val)) ice->flags |= ((VALUE)RUBY_FL_USER4);
16849 ruby_vm_const_missing_count = 0;
16850 rb_obj_write((VALUE)(iseq), __extension__({
16851 ;
16852 ; __typeof__((VALUE *)(&ic->entry)) unaligned_member_access_result = ((VALUE *)(&ic->entry));
16853 ; unaligned_member_access_result; }), (VALUE)(ice), "../ruby-3.1.3/vm_insnhelper.c", 4968);
16854}
16855static VALUE
16856vm_once_dispatch(rb_execution_context_t *ec, ISEQ iseq, ISE is)
16857{
16858 rb_thread_t *th = rb_ec_thread_ptr(ec);
16859 rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
16860 again:
16861 if (is->once.running_thread == RUNNING_THREAD_ONCE_DONE) {
16862 return is->once.value;
16863 }
16864 else if (is->once.running_thread == ((void *)0)) {
16865 VALUE val;
16866 is->once.running_thread = th;
16867 val = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
16868 rb_obj_write((VALUE)(ec->cfp->iseq), __extension__({
16869;
16870; __typeof__((VALUE *)(&is->once.value)) unaligned_member_access_result = ((VALUE *)(&is->once.value));
16871; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 4990);
16872 is->once.running_thread = RUNNING_THREAD_ONCE_DONE;
16873 return val;
16874 }
16875 else if (is->once.running_thread == th) {
16876 return vm_once_exec((VALUE)iseq);
16877 }
16878 else {
16879 rb_vm_check_ints(ec);
16880 rb_thread_schedule();
16881 goto again;
16882 }
16883}
16884static OFFSET
16885vm_case_dispatch(CDHASH hash, OFFSET else_offset, VALUE key)
16886{
16887 switch (__extension__({ VALUE arg_obj = (key); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })) {
16888 case -1:
16889 case RUBY_T_FLOAT:
16890 case RUBY_T_SYMBOL:
16891 case RUBY_T_BIGNUM:
16892 case RUBY_T_STRING:
16893 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQQ)]&((1 << 6) | (1 << 0) | (1 << 1) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 2))) == 0), 1)))) {
16894 st_data_t val;
16895 if (RB_FLOAT_TYPE_P(key)) {
16896 double kval = rb_float_value_inline(key);
16897 if (!(__builtin_isinf_sign (kval)) && modf(kval, &kval) == 0.0) {
16898 key = (((kval) < (0x7fffffffffffffffL / 2) + 1) && ((kval) >= ((-0x7fffffffffffffffL -1L) / 2))) ? RB_INT2FIX((long)kval) : rb_dbl2big(kval);
16899 }
16900 }
16901 if (rb_hash_stlike_lookup(hash, key, &val)) {
16902 return rb_fix2long((VALUE)val);
16903 }
16904 else {
16905 return else_offset;
16906 }
16907 }
16908 }
16909 return 0;
16910}
16911__attribute__((__noreturn__)) static void vm_stack_consistency_error(const rb_execution_context_t *ec, const rb_control_frame_t *, const VALUE *);
16912static void
16913vm_stack_consistency_error(const rb_execution_context_t *ec,
16914 const rb_control_frame_t *cfp,
16915 const VALUE *bp)
16916{
16917 const ptrdiff_t nsp = ((cfp->sp) - (ec)->vm_stack);
16918 const ptrdiff_t nbp = ((bp) - (ec)->vm_stack);
16919 static const char stack_consistency_error[] =
16920 "Stack consistency error (sp: %""t""d"", bp: %""t""d"")";
16921 VALUE mesg = rb_sprintf(stack_consistency_error, nsp, nbp);
16922 ((__builtin_constant_p("\n") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), ("\n")));
16923 rb_str_append(mesg, rb_iseq_disasm(cfp->iseq));
16924 rb_exc_fatal(rb_exc_new_str(rb_eFatal, mesg));
16925}
16926ALWAYS_INLINE(static inline VALUE
16927vm_opt_plus(VALUE recv, VALUE obj));
16928static inline VALUE
16929vm_opt_plus(VALUE recv, VALUE obj) {
16930 if (FIXNUM_2_P(recv, obj) &&
16931 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 0))) == 0), 1)))) {
16932 return rb_fix_plus_fix(recv, obj);
16933 }
16934 else if (FLONUM_2_P(recv, obj) &&
16935 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
16936 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
16937 }
16938 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
16939 return ((VALUE)RUBY_Qundef);
16940 }
16941 else if (RBASIC_CLASS(recv) == rb_cFloat &&
16942 RBASIC_CLASS(obj) == rb_cFloat &&
16943 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
16944 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
16945 }
16946 else if (RBASIC_CLASS(recv) == rb_cString &&
16947 RBASIC_CLASS(obj) == rb_cString &&
16948 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 2))) == 0), 1)))) {
16949 return rb_str_opt_plus(recv, obj);
16950 }
16951 else if (RBASIC_CLASS(recv) == rb_cArray &&
16952 RBASIC_CLASS(obj) == rb_cArray &&
16953 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 3))) == 0), 1)))) {
16954 return rb_ary_plus(recv, obj);
16955 }
16956 else {
16957 return ((VALUE)RUBY_Qundef);
16958 }
16959}
16960ALWAYS_INLINE(static inline VALUE
16961vm_opt_minus(VALUE recv, VALUE obj));
16962static inline VALUE
16963vm_opt_minus(VALUE recv, VALUE obj) {
16964 if (FIXNUM_2_P(recv, obj) &&
16965 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 0))) == 0), 1)))) {
16966 return rb_fix_minus_fix(recv, obj);
16967 }
16968 else if (FLONUM_2_P(recv, obj) &&
16969 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
16970 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
16971 }
16972 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
16973 return ((VALUE)RUBY_Qundef);
16974 }
16975 else if (RBASIC_CLASS(recv) == rb_cFloat &&
16976 RBASIC_CLASS(obj) == rb_cFloat &&
16977 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
16978 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
16979 }
16980 else {
16981 return ((VALUE)RUBY_Qundef);
16982 }
16983}
16984ALWAYS_INLINE(static inline VALUE
16985vm_opt_mult(VALUE recv, VALUE obj));
16986static inline VALUE
16987vm_opt_mult(VALUE recv, VALUE obj) {
16988 if (FIXNUM_2_P(recv, obj) &&
16989 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 0))) == 0), 1)))) {
16990 return rb_fix_mul_fix(recv, obj);
16991 }
16992 else if (FLONUM_2_P(recv, obj) &&
16993 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
16994 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
16995 }
16996 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
16997 return ((VALUE)RUBY_Qundef);
16998 }
16999 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17000 RBASIC_CLASS(obj) == rb_cFloat &&
17001 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
17002 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
17003 }
17004 else {
17005 return ((VALUE)RUBY_Qundef);
17006 }
17007}
17008ALWAYS_INLINE(static inline VALUE
17009vm_opt_div(VALUE recv, VALUE obj));
17010static inline VALUE
17011vm_opt_div(VALUE recv, VALUE obj) {
17012 if (FIXNUM_2_P(recv, obj) &&
17013 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 0))) == 0), 1)))) {
17014 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_div_fix(recv, obj);
17015 }
17016 else if (FLONUM_2_P(recv, obj) &&
17017 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17018 return rb_flo_div_flo(recv, obj);
17019 }
17020 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17021 return ((VALUE)RUBY_Qundef);
17022 }
17023 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17024 RBASIC_CLASS(obj) == rb_cFloat &&
17025 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17026 return rb_flo_div_flo(recv, obj);
17027 }
17028 else {
17029 return ((VALUE)RUBY_Qundef);
17030 }
17031}
17032ALWAYS_INLINE(static inline VALUE
17033vm_opt_mod(VALUE recv, VALUE obj));
17034static inline VALUE
17035vm_opt_mod(VALUE recv, VALUE obj) {
17036 if (FIXNUM_2_P(recv, obj) &&
17037 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 0))) == 0), 1)))) {
17038 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_mod_fix(recv, obj);
17039 }
17040 else if (FLONUM_2_P(recv, obj) &&
17041 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17042 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17043 }
17044 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17045 return ((VALUE)RUBY_Qundef);
17046 }
17047 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17048 RBASIC_CLASS(obj) == rb_cFloat &&
17049 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17050 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17051 }
17052 else {
17053 return ((VALUE)RUBY_Qundef);
17054 }
17055}static inline
17056VALUE
17057rb_vm_opt_mod(VALUE recv, VALUE obj)
17058{
17059 return vm_opt_mod(recv, obj);
17060}
17061ALWAYS_INLINE(static inline VALUE
17062vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj));
17063static inline VALUE
17064vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj) {
17065 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not_equal)) {
17066 VALUE val = opt_equality(iseq, recv, obj, cd_eq);
17067 if (val != ((VALUE)RUBY_Qundef)) {
17068 return RB_TEST(val) ? ((VALUE)RUBY_Qfalse) : ((VALUE)RUBY_Qtrue);
17069 }
17070 }
17071 return ((VALUE)RUBY_Qundef);
17072}
17073ALWAYS_INLINE(static inline VALUE
17074vm_opt_lt(VALUE recv, VALUE obj));
17075static inline VALUE
17076vm_opt_lt(VALUE recv, VALUE obj) {
17077 if (FIXNUM_2_P(recv, obj) &&
17078 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 0))) == 0), 1)))) {
17079 return (((long)recv < (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17080 }
17081 else if (FLONUM_2_P(recv, obj) &&
17082 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17083 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17084 }
17085 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17086 return ((VALUE)RUBY_Qundef);
17087 }
17088 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17089 RBASIC_CLASS(obj) == rb_cFloat &&
17090 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17091 ;
17092 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17093 }
17094 else {
17095 return ((VALUE)RUBY_Qundef);
17096 }
17097}
17098ALWAYS_INLINE(static inline VALUE
17099vm_opt_le(VALUE recv, VALUE obj));
17100static inline VALUE
17101vm_opt_le(VALUE recv, VALUE obj) {
17102 if (FIXNUM_2_P(recv, obj) &&
17103 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LE)]&((1 << 0))) == 0), 1)))) {
17104 return (((long)recv <= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17105 }
17106 else if (FLONUM_2_P(recv, obj) &&
17107 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17108 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17109 }
17110 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17111 return ((VALUE)RUBY_Qundef);
17112 }
17113 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17114 RBASIC_CLASS(obj) == rb_cFloat &&
17115 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17116 ;
17117 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17118 }
17119 else {
17120 return ((VALUE)RUBY_Qundef);
17121 }
17122}
17123ALWAYS_INLINE(static inline VALUE
17124vm_opt_gt(VALUE recv, VALUE obj));
17125static inline VALUE
17126vm_opt_gt(VALUE recv, VALUE obj) {
17127 if (FIXNUM_2_P(recv, obj) &&
17128 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GT)]&((1 << 0))) == 0), 1)))) {
17129 return (((long)recv > (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17130 }
17131 else if (FLONUM_2_P(recv, obj) &&
17132 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17133 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17134 }
17135 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17136 return ((VALUE)RUBY_Qundef);
17137 }
17138 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17139 RBASIC_CLASS(obj) == rb_cFloat &&
17140 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17141 ;
17142 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17143 }
17144 else {
17145 return ((VALUE)RUBY_Qundef);
17146 }
17147}
17148ALWAYS_INLINE(static inline VALUE
17149vm_opt_ge(VALUE recv, VALUE obj));
17150static inline VALUE
17151vm_opt_ge(VALUE recv, VALUE obj) {
17152 if (FIXNUM_2_P(recv, obj) &&
17153 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GE)]&((1 << 0))) == 0), 1)))) {
17154 return (((long)recv >= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17155 }
17156 else if (FLONUM_2_P(recv, obj) &&
17157 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17158 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17159 }
17160 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17161 return ((VALUE)RUBY_Qundef);
17162 }
17163 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17164 RBASIC_CLASS(obj) == rb_cFloat &&
17165 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17166 ;
17167 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17168 }
17169 else {
17170 return ((VALUE)RUBY_Qundef);
17171 }
17172}
17173ALWAYS_INLINE(static inline VALUE
17174vm_opt_ltlt(VALUE recv, VALUE obj));
17175static inline VALUE
17176vm_opt_ltlt(VALUE recv, VALUE obj) {
17177 if (RB_SPECIAL_CONST_P(recv)) {
17178 return ((VALUE)RUBY_Qundef);
17179 }
17180 else if (RBASIC_CLASS(recv) == rb_cString &&
17181 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LTLT)]&((1 << 2))) == 0), 1)))) {
17182 return rb_str_concat(recv, obj);
17183 }
17184 else if (RBASIC_CLASS(recv) == rb_cArray &&
17185 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LTLT)]&((1 << 3))) == 0), 1)))) {
17186 return rb_ary_push(recv, obj);
17187 }
17188 else {
17189 return ((VALUE)RUBY_Qundef);
17190 }
17191}
17192ALWAYS_INLINE(static inline VALUE
17193vm_opt_and(VALUE recv, VALUE obj));
17194static inline VALUE
17195vm_opt_and(VALUE recv, VALUE obj) {
17196 if (FIXNUM_2_P(recv, obj) &&
17197 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AND)]&((1 << 0))) == 0), 1)))) {
17198 return (recv & obj) | 1;
17199 }
17200 else {
17201 return ((VALUE)RUBY_Qundef);
17202 }
17203}
17204ALWAYS_INLINE(static inline VALUE
17205vm_opt_or(VALUE recv, VALUE obj));
17206static inline VALUE
17207vm_opt_or(VALUE recv, VALUE obj) {
17208 if (FIXNUM_2_P(recv, obj) &&
17209 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_OR)]&((1 << 0))) == 0), 1)))) {
17210 return recv | obj;
17211 }
17212 else {
17213 return ((VALUE)RUBY_Qundef);
17214 }
17215}
17216ALWAYS_INLINE(static inline VALUE
17217vm_opt_aref(VALUE recv, VALUE obj));
17218static inline VALUE
17219vm_opt_aref(VALUE recv, VALUE obj) {
17220 if (RB_SPECIAL_CONST_P(recv)) {
17221 if (FIXNUM_2_P(recv, obj) &&
17222 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 0))) == 0), 1)))) {
17223 return rb_fix_aref(recv, obj);
17224 }
17225 return ((VALUE)RUBY_Qundef);
17226 }
17227 else if (RBASIC_CLASS(recv) == rb_cArray &&
17228 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 3))) == 0), 1)))) {
17229 if (RB_FIXNUM_P(obj)) {
17230 return rb_ary_entry_internal(recv, rb_fix2long(obj));
17231 }
17232 else {
17233 return rb_ary_aref1(recv, obj);
17234 }
17235 }
17236 else if (RBASIC_CLASS(recv) == rb_cHash &&
17237 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1)))) {
17238 return rb_hash_aref(recv, obj);
17239 }
17240 else {
17241 return ((VALUE)RUBY_Qundef);
17242 }
17243}
17244ALWAYS_INLINE(static inline VALUE
17245vm_opt_aset(VALUE recv, VALUE obj, VALUE set));
17246static inline VALUE
17247vm_opt_aset(VALUE recv, VALUE obj, VALUE set) {
17248 if (RB_SPECIAL_CONST_P(recv)) {
17249 return ((VALUE)RUBY_Qundef);
17250 }
17251 else if (RBASIC_CLASS(recv) == rb_cArray &&
17252 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 3))) == 0), 1))) &&
17253 RB_FIXNUM_P(obj)) {
17254 rb_ary_store(recv, rb_fix2long(obj), set);
17255 return set;
17256 }
17257 else if (RBASIC_CLASS(recv) == rb_cHash &&
17258 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1)))) {
17259 rb_hash_aset(recv, obj, set);
17260 return set;
17261 }
17262 else {
17263 return ((VALUE)RUBY_Qundef);
17264 }
17265}
17266ALWAYS_INLINE(static inline VALUE
17267vm_opt_aref_with(VALUE recv, VALUE key));
17268static inline VALUE
17269vm_opt_aref_with(VALUE recv, VALUE key) {
17270 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17271 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1))) &&
17272 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
17273 return rb_hash_aref(recv, key);
17274 }
17275 else {
17276 return ((VALUE)RUBY_Qundef);
17277 }
17278}
17279ALWAYS_INLINE(static inline VALUE
17280vm_opt_aset_with(VALUE recv, VALUE key, VALUE val));
17281static inline VALUE
17282vm_opt_aset_with(VALUE recv, VALUE key, VALUE val) {
17283 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17284 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1))) &&
17285 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
17286 return rb_hash_aset(recv, key, val);
17287 }
17288 else {
17289 return ((VALUE)RUBY_Qundef);
17290 }
17291}
17292static VALUE
17293vm_opt_length(VALUE recv, int bop)
17294{
17295 if (RB_SPECIAL_CONST_P(recv)) {
17296 return ((VALUE)RUBY_Qundef);
17297 }
17298 else if (RBASIC_CLASS(recv) == rb_cString &&
17299 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17300 if (bop == BOP_EMPTY_P) {
17301 return rb_long2num_inline(RSTRING_LEN(recv));
17302 }
17303 else {
17304 return rb_str_length(recv);
17305 }
17306 }
17307 else if (RBASIC_CLASS(recv) == rb_cArray &&
17308 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 3))) == 0), 1)))) {
17309 return rb_long2num_inline(rb_array_len(recv));
17310 }
17311 else if (RBASIC_CLASS(recv) == rb_cHash &&
17312 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 4))) == 0), 1)))) {
17313 return __builtin_choose_expr( __builtin_constant_p(RHASH_SIZE(recv)), ((VALUE)(RHASH_SIZE(recv))) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(RHASH_SIZE(recv)));
17314 }
17315 else {
17316 return ((VALUE)RUBY_Qundef);
17317 }
17318}
17319static VALUE
17320vm_opt_empty_p(VALUE recv)
17321{
17322 switch (vm_opt_length(recv, BOP_EMPTY_P)) {
17323 case ((VALUE)RUBY_Qundef): return ((VALUE)RUBY_Qundef);
17324 case __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0)): return ((VALUE)RUBY_Qtrue);
17325 default: return ((VALUE)RUBY_Qfalse);
17326 }
17327}
17328VALUE rb_false(VALUE obj);
17329static VALUE
17330vm_opt_nil_p(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv)
17331{
17332 if (RB_NIL_P(recv) &&
17333 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_NIL_P)]&((1 << 9))) == 0), 1)))) {
17334 return ((VALUE)RUBY_Qtrue);
17335 }
17336 else if (vm_method_cfunc_is(iseq, cd, recv, rb_false)) {
17337 return ((VALUE)RUBY_Qfalse);
17338 }
17339 else {
17340 return ((VALUE)RUBY_Qundef);
17341 }
17342}
17343static VALUE
17344fix_succ(VALUE x)
17345{
17346 switch (x) {
17347 case ~0UL:
17348 return __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
17349 case ((~0UL)>>(int)(1)):
17350 return rb_uint2big(1UL << (8 * 8 - 2));
17351 default:
17352 return x + 2;
17353 }
17354}
17355static VALUE
17356vm_opt_succ(VALUE recv)
17357{
17358 if (RB_FIXNUM_P(recv) &&
17359 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_SUCC)]&((1 << 0))) == 0), 1)))) {
17360 return fix_succ(recv);
17361 }
17362 else if (RB_SPECIAL_CONST_P(recv)) {
17363 return ((VALUE)RUBY_Qundef);
17364 }
17365 else if (RBASIC_CLASS(recv) == rb_cString &&
17366 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_SUCC)]&((1 << 2))) == 0), 1)))) {
17367 return rb_str_succ(recv);
17368 }
17369 else {
17370 return ((VALUE)RUBY_Qundef);
17371 }
17372}
17373ALWAYS_INLINE(static inline VALUE
17374vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv));
17375static inline VALUE
17376vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv) {
17377 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not)) {
17378 return RB_TEST(recv) ? ((VALUE)RUBY_Qfalse) : ((VALUE)RUBY_Qtrue);
17379 }
17380 else {
17381 return ((VALUE)RUBY_Qundef);
17382 }
17383}
17384static VALUE
17385vm_opt_regexpmatch2(VALUE recv, VALUE obj)
17386{
17387 if (RB_SPECIAL_CONST_P(recv)) {
17388 return ((VALUE)RUBY_Qundef);
17389 }
17390 else if (RBASIC_CLASS(recv) == rb_cString &&
17391 rb_class_of(obj) == rb_cRegexp &&
17392 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MATCH)]&((1 << 2))) == 0), 1)))) {
17393 return rb_reg_match(obj, recv);
17394 }
17395 else if (RBASIC_CLASS(recv) == rb_cRegexp &&
17396 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MATCH)]&((1 << 8))) == 0), 1)))) {
17397 return rb_reg_match(recv, obj);
17398 }
17399 else {
17400 return ((VALUE)RUBY_Qundef);
17401 }
17402}
17403rb_event_flag_t rb_iseq_event_flags(const rb_iseq_t *iseq, size_t pos);
17404__attribute__((__noinline__)) static void vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp);
17405static inline void
17406vm_trace_hook(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const VALUE *pc,
17407 rb_event_flag_t pc_events, rb_event_flag_t target_event,
17408 rb_hook_list_t *global_hooks, rb_hook_list_t *local_hooks, VALUE val)
17409{
17410 rb_event_flag_t event = pc_events & target_event;
17411 VALUE self = (((((reg_cfp)))->self));
17412 ((void)0);
17413 if (event & global_hooks->events) {
17414 reg_cfp->pc++;
17415 vm_dtrace(event, ec);
17416 rb_exec_event_hook_orig(ec, global_hooks, event, self, 0, 0, 0 , val, 0);
17417 reg_cfp->pc--;
17418 }
17419 if (local_hooks != ((void *)0)) {
17420 if (event & local_hooks->events) {
17421 reg_cfp->pc++;
17422 rb_exec_event_hook_orig(ec, local_hooks, event, self, 0, 0, 0 , val, 0);
17423 reg_cfp->pc--;
17424 }
17425 }
17426}static inline
17427_Bool
17428rb_vm_opt_cfunc_p(CALL_CACHE cc, int insn)
17429{
17430 switch (insn) {
17431 case YARVINSN_opt_eq:
17432 return check_cfunc(vm_cc_cme(cc), rb_obj_equal);
17433 case YARVINSN_opt_nil_p:
17434 return check_cfunc(vm_cc_cme(cc), rb_false);
17435 case YARVINSN_opt_not:
17436 return check_cfunc(vm_cc_cme(cc), rb_obj_not);
17437 default:
17438 return 0;
17439 }
17440}
17441static void
17442vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp)
17443{
17444 const VALUE *pc = reg_cfp->pc;
17445 rb_event_flag_t enabled_flags = ruby_vm_event_flags & (0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010| 0x0020| 0x0040| 0x0100| 0x0200| 0x010000| 0x020000);
17446 rb_event_flag_t global_events = enabled_flags;
17447 if (enabled_flags == 0 && ruby_vm_event_local_num == 0) {
17448 return;
17449 }
17450 else {
17451 const rb_iseq_t *iseq = reg_cfp->iseq;
17452 size_t pos = pc - iseq->body->iseq_encoded;
17453 rb_event_flag_t pc_events = rb_iseq_event_flags(iseq, pos);
17454 rb_hook_list_t *local_hooks = iseq->aux.exec.local_hooks;
17455 rb_event_flag_t iseq_local_events = local_hooks != ((void *)0) ? local_hooks->events : 0;
17456 rb_hook_list_t *bmethod_local_hooks = ((void *)0);
17457 rb_event_flag_t bmethod_local_events = 0;
17458 _Bool bmethod_frame = VM_FRAME_BMETHOD_P(reg_cfp);
17459 enabled_flags |= iseq_local_events;
17460 ((void)0);
17461 if (bmethod_frame) {
17462 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
17463 ((void)0);
17464 bmethod_local_hooks = me->def->body.bmethod.hooks;
17465 if (bmethod_local_hooks) {
17466 bmethod_local_events = bmethod_local_hooks->events;
17467 }
17468 }
17469 if ((pc_events & enabled_flags) == 0 && !bmethod_frame) {
17470 return;
17471 }
17472 else if (ec->trace_arg != ((void *)0)) {
17473 return;
17474 }
17475 else {
17476 rb_hook_list_t *global_hooks = rb_ec_ractor_hooks(ec);
17477 rb_event_flag_t bmethod_events = global_events | bmethod_local_events;
17478 if (0) {
17479 ruby_debug_printf("vm_trace>>%4d (%4x) - %s:%d %s\n",
17480 (int)pos,
17481 (int)pc_events,
17482 RSTRING_PTR(rb_iseq_path(iseq)),
17483 (int)rb_iseq_line_no(iseq, pos),
17484 RSTRING_PTR(rb_iseq_label(iseq)));
17485 }
17486 ((void)0);
17487 ((void)0);
17488 if ((pc_events & 0x0100) && bmethod_frame && (bmethod_events & 0x0008)) {
17489 vm_trace_hook(ec, reg_cfp, pc, 0x0008, 0x0008, global_hooks, bmethod_local_hooks, ((VALUE)RUBY_Qundef));
17490 }
17491 do { if ((pc_events & (0x0002 | 0x0008 | 0x0100)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x0002 | 0x0008 | 0x0100), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
17492 do { if ((pc_events & (0x0001)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x0001), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
17493 do { if ((pc_events & (0x010000)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x010000), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
17494 do { if ((pc_events & (0x020000)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x020000), global_hooks, local_hooks, (((VALUE)RUBY_Qundef))); } } while (0);
17495 do { if ((pc_events & (0x0004 | 0x0010 | 0x0200)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x0004 | 0x0010 | 0x0200), global_hooks, local_hooks, ((*(((((reg_cfp)->sp)))-(0)-1)))); } } while (0);
17496 if ((pc_events & 0x0200) && bmethod_frame && (bmethod_events & 0x0010)) {
17497 vm_trace_hook(ec, reg_cfp, pc, 0x0010, 0x0010, global_hooks, bmethod_local_hooks, (*(((((reg_cfp)->sp)))-(0)-1)));
17498 }
17499 }
17500 }
17501}static inline
17502void Init_vm_stack_canary(void) { }
17503static VALUE
17504builtin_invoker0(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17505{
17506 typedef VALUE (*rb_invoke_funcptr0_t)(rb_execution_context_t *ec, VALUE self);
17507 return (*(rb_invoke_funcptr0_t)funcptr)(ec, self);
17508}
17509static VALUE
17510builtin_invoker1(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17511{
17512 typedef VALUE (*rb_invoke_funcptr1_t)(rb_execution_context_t *ec, VALUE self, VALUE v1);
17513 return (*(rb_invoke_funcptr1_t)funcptr)(ec, self, argv[0]);
17514}
17515static VALUE
17516builtin_invoker2(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17517{
17518 typedef VALUE (*rb_invoke_funcptr2_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2);
17519 return (*(rb_invoke_funcptr2_t)funcptr)(ec, self, argv[0], argv[1]);
17520}
17521static VALUE
17522builtin_invoker3(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17523{
17524 typedef VALUE (*rb_invoke_funcptr3_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3);
17525 return (*(rb_invoke_funcptr3_t)funcptr)(ec, self, argv[0], argv[1], argv[2]);
17526}
17527static VALUE
17528builtin_invoker4(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17529{
17530 typedef VALUE (*rb_invoke_funcptr4_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4);
17531 return (*(rb_invoke_funcptr4_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3]);
17532}
17533static VALUE
17534builtin_invoker5(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17535{
17536 typedef VALUE (*rb_invoke_funcptr5_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5);
17537 return (*(rb_invoke_funcptr5_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4]);
17538}
17539static VALUE
17540builtin_invoker6(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17541{
17542 typedef VALUE (*rb_invoke_funcptr6_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6);
17543 return (*(rb_invoke_funcptr6_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
17544}
17545static VALUE
17546builtin_invoker7(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17547{
17548 typedef VALUE (*rb_invoke_funcptr7_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7);
17549 return (*(rb_invoke_funcptr7_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
17550}
17551static VALUE
17552builtin_invoker8(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17553{
17554 typedef VALUE (*rb_invoke_funcptr8_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8);
17555 return (*(rb_invoke_funcptr8_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
17556}
17557static VALUE
17558builtin_invoker9(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17559{
17560 typedef VALUE (*rb_invoke_funcptr9_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9);
17561 return (*(rb_invoke_funcptr9_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
17562}
17563static VALUE
17564builtin_invoker10(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17565{
17566 typedef VALUE (*rb_invoke_funcptr10_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10);
17567 return (*(rb_invoke_funcptr10_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
17568}
17569static VALUE
17570builtin_invoker11(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17571{
17572 typedef VALUE (*rb_invoke_funcptr11_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11);
17573 return (*(rb_invoke_funcptr11_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);
17574}
17575static VALUE
17576builtin_invoker12(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17577{
17578 typedef VALUE (*rb_invoke_funcptr12_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12);
17579 return (*(rb_invoke_funcptr12_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]);
17580}
17581static VALUE
17582builtin_invoker13(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17583{
17584 typedef VALUE (*rb_invoke_funcptr13_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12, VALUE v13);
17585 return (*(rb_invoke_funcptr13_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]);
17586}
17587static VALUE
17588builtin_invoker14(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17589{
17590 typedef VALUE (*rb_invoke_funcptr14_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12, VALUE v13, VALUE v14);
17591 return (*(rb_invoke_funcptr14_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
17592}
17593static VALUE
17594builtin_invoker15(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17595{
17596 typedef VALUE (*rb_invoke_funcptr15_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5, VALUE v6, VALUE v7, VALUE v8, VALUE v9, VALUE v10, VALUE v11, VALUE v12, VALUE v13, VALUE v14, VALUE v15);
17597 return (*(rb_invoke_funcptr15_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]);
17598}
17599typedef VALUE (*builtin_invoker)(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr);
17600static builtin_invoker
17601lookup_builtin_invoker(int argc)
17602{
17603 static const builtin_invoker invokers[] = {
17604 builtin_invoker0,
17605 builtin_invoker1,
17606 builtin_invoker2,
17607 builtin_invoker3,
17608 builtin_invoker4,
17609 builtin_invoker5,
17610 builtin_invoker6,
17611 builtin_invoker7,
17612 builtin_invoker8,
17613 builtin_invoker9,
17614 builtin_invoker10,
17615 builtin_invoker11,
17616 builtin_invoker12,
17617 builtin_invoker13,
17618 builtin_invoker14,
17619 builtin_invoker15,
17620 };
17621 return invokers[argc];
17622}
17623static inline VALUE
17624invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const struct rb_builtin_function* bf, const VALUE *argv)
17625{
17626 const _Bool canary_p = reg_cfp->iseq->body->builtin_inline_p;
17627 if (canary_p) {} else {};
17628 VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, (rb_insn_func_t)bf->func_ptr);
17629 if (canary_p) {(void)(YARVINSN_invokebuiltin);};
17630 return ret;
17631}
17632static VALUE
17633vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf, const VALUE *argv)
17634{
17635 return invoke_bf(ec, cfp, bf, argv);
17636}
17637static VALUE
17638vm_invoke_builtin_delegate(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function *bf, unsigned int start_index)
17639{
17640 if (0) {
17641 fputs("vm_invoke_builtin_delegate: passing -> ", ((__getreent())->_stderr));
17642 for (int i=0; i<bf->argc; i++) {
17643 ruby_debug_printf(":%s ", rb_id2name(cfp->iseq->body->local_table[i+start_index]));
17644 }
17645 ruby_debug_printf("\n" "%s %s(%d):%p\n", __func__, bf->name, bf->argc, bf->func_ptr);
17646 }
17647 if (bf->argc == 0) {
17648 return invoke_bf(ec, cfp, bf, ((void *)0));
17649 }
17650 else {
17651 const VALUE *argv = cfp->ep - cfp->iseq->body->local_table_size - ( 3) + 1 + start_index;
17652 return invoke_bf(ec, cfp, bf, argv);
17653 }
17654}static inline
17655VALUE
17656rb_vm_lvar_exposed(rb_execution_context_t *ec, int index)
17657{
17658 const rb_control_frame_t *cfp = ec->cfp;
17659 return cfp->ep[index];
17660}
17661struct local_var_list {
17662 VALUE tbl;
17663};
17664static inline VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat);
17665static inline VALUE vm_yield_with_cref(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat, const rb_cref_t *cref, int is_lambda);
17666static inline VALUE vm_yield(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat);
17667static inline VALUE vm_yield_with_block(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE block_handler, int kw_splat);
17668static inline VALUE vm_yield_force_blockarg(rb_execution_context_t *ec, VALUE args);
17669VALUE rb_vm_exec(rb_execution_context_t *ec, _Bool mjit_enable_p);
17670static void vm_set_eval_stack(rb_execution_context_t * th, const rb_iseq_t *iseq, const rb_cref_t *cref, const struct rb_block *base_block);
17671static int vm_collect_local_variables_in_heap(const VALUE *dfp, const struct local_var_list *vars);
17672static VALUE rb_eUncaughtThrow;
17673static ID id_result, id_tag, id_value;
17674typedef enum call_type {
17675 CALL_PUBLIC,
17676 CALL_FCALL,
17677 CALL_VCALL,
17678 CALL_PUBLIC_KW,
17679 CALL_FCALL_KW,
17680 CALL_TYPE_MAX
17681} call_type;
17682static VALUE send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope);
17683static VALUE vm_call0_body(rb_execution_context_t* ec, struct rb_calling_info *calling, const VALUE *argv);
17684static inline void
17685stack_check(rb_execution_context_t *ec)
17686{
17687 if (!(((ec)->raised_flag & (RAISED_STACKOVERFLOW)) != 0) &&
17688 rb_ec_stack_check(ec)) {
17689 ((ec)->raised_flag |= (RAISED_STACKOVERFLOW));
17690 rb_ec_stack_overflow(ec, 0);
17691 }
17692}
17693static void
17694raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj,
17695 enum method_missing_reason last_call_status)
17696{
17697 VALUE exc = rb_eNoMethodError;
17698 VALUE format = 0;
17699 if ((__builtin_expect(!!(argc == 0), 0))) {
17700 rb_raise(rb_eArgError, "no method name given");
17701 }
17702 else if ((__builtin_expect(!!(!RB_SYMBOL_P(argv[0])), 0))) {
17703 const VALUE e = rb_eArgError;
17704 rb_raise(e, "method name must be a Symbol but %""l""i" "\v"" is given",
17705 rb_obj_class(argv[0]));
17706 }
17707 stack_check(ec);
17708 if (last_call_status & MISSING_PRIVATE) {
17709 format = rb_fstring_new(("private method `%s' called for %s%s%s"), (sizeof("private method `%s' called for %s%s%s" "") - 1));
17710 }
17711 else if (last_call_status & MISSING_PROTECTED) {
17712 format = rb_fstring_new(("protected method `%s' called for %s%s%s"), (sizeof("protected method `%s' called for %s%s%s" "") - 1));
17713 }
17714 else if (last_call_status & MISSING_VCALL) {
17715 format = rb_fstring_new(("undefined local variable or method `%s' for %s%s%s"), (sizeof("undefined local variable or method `%s' for %s%s%s" "") - 1));
17716 exc = rb_eNameError;
17717 }
17718 else if (last_call_status & MISSING_SUPER) {
17719 format = rb_fstring_new(("super: no superclass method `%s' for %s%s%s"), (sizeof("super: no superclass method `%s' for %s%s%s" "") - 1));
17720 }
17721 {
17722 exc = rb_make_no_method_exception(exc, format, obj, argc, argv,
17723 last_call_status & (MISSING_FCALL|MISSING_VCALL));
17724 if (!(last_call_status & MISSING_MISSING)) {
17725 rb_vm_pop_cfunc_frame();
17726 }
17727 rb_exc_raise(exc);
17728 }
17729}
17730static void
17731vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv,
17732 VALUE obj, int call_status)
17733{
17734 vm_passed_block_handler_set(ec, 0);
17735 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
17736}
17737static inline VALUE
17738method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat)
17739{
17740 VALUE *nargv, result, work, klass;
17741 VALUE block_handler = vm_passed_block_handler(ec);
17742 const rb_callable_method_entry_t *me;
17743 ec->method_missing_reason = call_status;
17744 if (id == idMethodMissing) {
17745 goto missing;
17746 }
17747 nargv = ((VALUE *) (((size_t)(argc + 1) < 1024 / sizeof(VALUE)) ? ((work) = 0, __builtin_alloca((argc + 1) * sizeof(VALUE))) : rb_alloc_tmp_buffer2(&(work), (argc + 1), sizeof(VALUE))));
17748 nargv[0] = rb_id2sym(id);
17749 ruby_nonempty_memcpy((nargv + 1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
17750 ++argc;
17751 argv = nargv;
17752 klass = rb_class_of(obj);
17753 if (!klass) goto missing;
17754 me = rb_callable_method_entry(klass, idMethodMissing);
17755 if (!me || (int) (((me)->flags & (((VALUE)RUBY_FL_USER6) )) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+2))) goto missing;
17756 vm_passed_block_handler_set(ec, block_handler);
17757 result = rb_vm_call_kw(ec, obj, idMethodMissing, argc, argv, me, kw_splat);
17758 if (work) rb_free_tmp_buffer(&(work));
17759 return result;
17760 missing:
17761 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
17762 __builtin_unreachable();
17763}
17764static rb_control_frame_t *
17765vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
17766{
17767 if (VM_FRAME_RUBYFRAME_P(cfp)) {
17768 return (rb_control_frame_t *)cfp;
17769 }
17770 cfp = ((cfp)+1);
17771 while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
17772 if (VM_FRAME_RUBYFRAME_P(cfp)) {
17773 return (rb_control_frame_t *)cfp;
17774 }
17775 if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_PASSED) == 0) {
17776 break;
17777 }
17778 cfp = ((cfp)+1);
17779 }
17780 return 0;
17781}
17782static void
17783rb_vm_pop_cfunc_frame(void)
17784{
17785 rb_execution_context_t *ec = rb_current_execution_context(1);
17786 rb_control_frame_t *cfp = ec->cfp;
17787 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
17788 do { const rb_event_flag_t flag_arg_ = (0x0040); rb_hook_list_t *hooks_arg_ = (rb_ec_ractor_hooks(ec)); if ((__builtin_expect(!!((hooks_arg_)->events & (flag_arg_)), 0))) { rb_exec_event_hook_orig(ec, hooks_arg_, flag_arg_, cfp->self, me->def->original_id, me->called_id, me->owner, ((VALUE)RUBY_Qnil), 0); } } while (0);
17789 do { if ((__builtin_expect(!!(0), 0))) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, me->owner, me->def->original_id, &args)) { do {} while (0); } } } while (0);
17790 vm_pop_frame(ec, cfp, cfp->ep);
17791}
17792static VALUE
17793vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17794{
17795 ((void)0);
17796 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 0);
17797}
17798static VALUE
17799vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17800{
17801 ((void)0);
17802 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 1);
17803}
17804static VALUE
17805vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17806{
17807 ((void)0);
17808 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 2);
17809}
17810static VALUE
17811vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17812{
17813 ((void)0);
17814 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 3);
17815}
17816static VALUE
17817vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17818{
17819 ((void)0);
17820 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 4);
17821}
17822static VALUE
17823vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17824{
17825 ((void)0);
17826 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 5);
17827}
17828static VALUE
17829vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17830{
17831 ((void)0);
17832 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 0);
17833}
17834static VALUE
17835vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17836{
17837 ((void)0);
17838 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 1);
17839}
17840static VALUE
17841vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17842{
17843 ((void)0);
17844 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 2);
17845}
17846static VALUE
17847vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17848{
17849 ((void)0);
17850 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 3);
17851}
17852static VALUE
17853vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17854{
17855 ((void)0);
17856 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 4);
17857}
17858static VALUE
17859vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17860{
17861 ((void)0);
17862 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 5);
17863}
17864static VALUE
17865vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17866{
17867 ((void)0);
17868 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 0);
17869}
17870static VALUE
17871vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17872{
17873 ((void)0);
17874 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 1);
17875}
17876static VALUE
17877vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17878{
17879 ((void)0);
17880 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 2);
17881}
17882static VALUE
17883vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17884{
17885 ((void)0);
17886 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 3);
17887}
17888static VALUE
17889vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17890{
17891 ((void)0);
17892 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 4);
17893}
17894static VALUE
17895vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17896{
17897 ((void)0);
17898 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 5);
17899}
17900static VALUE
17901vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17902{
17903 ((void)0);
17904 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 0);
17905}
17906static VALUE
17907vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17908{
17909 ((void)0);
17910 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 1);
17911}
17912static VALUE
17913vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17914{
17915 ((void)0);
17916 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 2);
17917}
17918static VALUE
17919vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17920{
17921 ((void)0);
17922 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 3);
17923}
17924static VALUE
17925vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17926{
17927 ((void)0);
17928 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 4);
17929}
17930static VALUE
17931vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17932{
17933 ((void)0);
17934 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 5);
17935}
17936static const vm_call_handler vm_call_iseq_handlers[][6] = {
17937 {
17938 vm_call_iseq_setup_normal_0start_0params_0locals,
17939 vm_call_iseq_setup_normal_0start_0params_1locals,
17940 vm_call_iseq_setup_normal_0start_0params_2locals,
17941 vm_call_iseq_setup_normal_0start_0params_3locals,
17942 vm_call_iseq_setup_normal_0start_0params_4locals,
17943 vm_call_iseq_setup_normal_0start_0params_5locals,
17944 },
17945 {
17946 vm_call_iseq_setup_normal_0start_1params_0locals,
17947 vm_call_iseq_setup_normal_0start_1params_1locals,
17948 vm_call_iseq_setup_normal_0start_1params_2locals,
17949 vm_call_iseq_setup_normal_0start_1params_3locals,
17950 vm_call_iseq_setup_normal_0start_1params_4locals,
17951 vm_call_iseq_setup_normal_0start_1params_5locals,
17952 },
17953 {
17954 vm_call_iseq_setup_normal_0start_2params_0locals,
17955 vm_call_iseq_setup_normal_0start_2params_1locals,
17956 vm_call_iseq_setup_normal_0start_2params_2locals,
17957 vm_call_iseq_setup_normal_0start_2params_3locals,
17958 vm_call_iseq_setup_normal_0start_2params_4locals,
17959 vm_call_iseq_setup_normal_0start_2params_5locals,
17960 },
17961 {
17962 vm_call_iseq_setup_normal_0start_3params_0locals,
17963 vm_call_iseq_setup_normal_0start_3params_1locals,
17964 vm_call_iseq_setup_normal_0start_3params_2locals,
17965 vm_call_iseq_setup_normal_0start_3params_3locals,
17966 vm_call_iseq_setup_normal_0start_3params_4locals,
17967 vm_call_iseq_setup_normal_0start_3params_5locals,
17968 },
17969};
17970static inline vm_call_handler
17971vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size)
17972{
17973 if ((__builtin_expect(!!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit)), 0))) {
17974 return &vm_call_iseq_setup_tailcall_0start;
17975 }
17976 else if (0) {
17977 return &vm_call_iseq_setup_normal_0start;
17978 }
17979 else if (param_size <= 3 && local_size <= 5) {
17980 ((void)0);
17981 return vm_call_iseq_handlers[param_size][local_size];
17982 }
17983 else {
17984 return &vm_call_iseq_setup_normal_0start;
17985 }
17986}
17987#define MJIT_HEADER 1
17988#define _FORTIFY_SOURCE 2
17989#define RUBY_EXPORT 1
17990#define _XOPEN_SOURCE 1
17991#define _GNU_SOURCE 1
17992#define vm_exec rb_vm_exec
17993#define RUBY_EVAL_INTERN_H
17994#define RUBY_RUBY_H 1
17995#define RBIMPL_CONFIG_H
17996#define INCLUDE_RUBY_CONFIG_H 1
17997#define HAVE_STDIO_H 1
17998#define HAVE_STDLIB_H 1
17999#define HAVE_STRING_H 1
18000#define HAVE_INTTYPES_H 1
18001#define HAVE_STDINT_H 1
18002#define HAVE_STRINGS_H 1
18003#define HAVE_SYS_STAT_H 1
18004#define HAVE_SYS_TYPES_H 1
18005#define HAVE_UNISTD_H 1
18006#define HAVE_WCHAR_H 1
18007#define STDC_HEADERS 1
18008#define _ALL_SOURCE 1
18009#define _DARWIN_C_SOURCE 1
18010#define _GNU_SOURCE 1
18011#define _HPUX_ALT_XOPEN_SOCKET_API 1
18012#define _NETBSD_SOURCE 1
18013#define _OPENBSD_SOURCE 1
18014#define _POSIX_PTHREAD_SEMANTICS 1
18015#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
18016#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
18017#define __STDC_WANT_IEC_60559_DFP_EXT__ 1
18018#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
18019#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
18020#define __STDC_WANT_LIB_EXT2__ 1
18021#define __STDC_WANT_MATH_SPEC_FUNCS__ 1
18022#define _TANDEM_SOURCE 1
18023#define __EXTENSIONS__ 1
18024#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)")
18025#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop")
18026#define HAVE_STMT_AND_DECL_IN_EXPR 1
18027#define HAVE_CYGWIN_CONV_PATH 1
18028#define HAVE_LIBCRYPT 1
18029#define HAVE_LIBDL 1
18030#define HAVE_DIRENT_H 1
18031#define HAVE__BOOL 1
18032#define HAVE_STDBOOL_H 1
18033#define HAVE_SYS_WAIT_H 1
18034#define HAVE_GRP_H 1
18035#define HAVE_FCNTL_H 1
18036#define HAVE_FLOAT_H 1
18037#define HAVE_IEEEFP_H 1
18038#define HAVE_LANGINFO_H 1
18039#define HAVE_LIMITS_H 1
18040#define HAVE_LOCALE_H 1
18041#define HAVE_MALLOC_H 1
18042#define HAVE_PROCESS_H 1
18043#define HAVE_PWD_H 1
18044#define HAVE_STDALIGN_H 1
18045#define HAVE_SYS_FCNTL_H 1
18046#define HAVE_SYS_FILE_H 1
18047#define HAVE_SYS_IOCTL_H 1
18048#define HAVE_SYS_PARAM_H 1
18049#define HAVE_SYS_RANDOM_H 1
18050#define HAVE_SYS_RESOURCE_H 1
18051#define HAVE_SYS_SELECT_H 1
18052#define HAVE_SYS_SOCKET_H 1
18053#define HAVE_SYS_SYSMACROS_H 1
18054#define HAVE_SYS_TIME_H 1
18055#define HAVE_SYS_TIMES_H 1
18056#define HAVE_SYS_UIO_H 1
18057#define HAVE_SYS_UTIME_H 1
18058#define HAVE_TIME_H 1
18059#define HAVE_UCONTEXT_H 1
18060#define HAVE_UTIME_H 1
18061#define HAVE_X86INTRIN_H 1
18062#define HAVE_X86INTRIN_H 1
18063#define HAVE_GMP_H 1
18064#define HAVE_LIBGMP 1
18065#define HAVE_TYPEOF 1
18066#define restrict __restrict__
18067#define HAVE_LONG_LONG 1
18068#define HAVE_OFF_T 1
18069#define SIZEOF_INT 4
18070#define SIZEOF_SHORT 2
18071#define SIZEOF_LONG 8
18072#define SIZEOF_LONG_LONG 8
18073#define SIZEOF___INT64 0
18074#define SIZEOF___INT128 16
18075#define SIZEOF_OFF_T 8
18076#define SIZEOF_VOIDP 8
18077#define SIZEOF_FLOAT 4
18078#define SIZEOF_DOUBLE 8
18079#define SIZEOF_TIME_T 8
18080#define SIZEOF_CLOCK_T 8
18081#define PACKED_STRUCT(x) x __attribute__((packed))
18082#define USE_UNALIGNED_MEMBER_ACCESS 1
18083#define PRI_LL_PREFIX "ll"
18084#define HAVE_PID_T 1
18085#define rb_pid_t pid_t
18086#define SIGNEDNESS_OF_PID_T -1
18087#define PIDT2NUM(v) INT2NUM(v)
18088#define NUM2PIDT(v) NUM2INT(v)
18089#define PRI_PIDT_PREFIX PRI_INT_PREFIX
18090#define HAVE_UID_T 1
18091#define rb_uid_t uid_t
18092#define SIGNEDNESS_OF_UID_T +1
18093#define UIDT2NUM(v) UINT2NUM(v)
18094#define NUM2UIDT(v) NUM2UINT(v)
18095#define PRI_UIDT_PREFIX PRI_INT_PREFIX
18096#define HAVE_GID_T 1
18097#define rb_gid_t gid_t
18098#define SIGNEDNESS_OF_GID_T +1
18099#define GIDT2NUM(v) UINT2NUM(v)
18100#define NUM2GIDT(v) NUM2UINT(v)
18101#define PRI_GIDT_PREFIX PRI_INT_PREFIX
18102#define HAVE_TIME_T 1
18103#define rb_time_t time_t
18104#define SIGNEDNESS_OF_TIME_T -1
18105#define TIMET2NUM(v) LONG2NUM(v)
18106#define NUM2TIMET(v) NUM2LONG(v)
18107#define PRI_TIMET_PREFIX PRI_LONG_PREFIX
18108#define HAVE_DEV_T 1
18109#define rb_dev_t dev_t
18110#define SIGNEDNESS_OF_DEV_T +1
18111#define DEVT2NUM(v) UINT2NUM(v)
18112#define NUM2DEVT(v) NUM2UINT(v)
18113#define PRI_DEVT_PREFIX PRI_INT_PREFIX
18114#define HAVE_MODE_T 1
18115#define rb_mode_t mode_t
18116#define SIGNEDNESS_OF_MODE_T +1
18117#define MODET2NUM(v) UINT2NUM(v)
18118#define NUM2MODET(v) NUM2UINT(v)
18119#define PRI_MODET_PREFIX PRI_INT_PREFIX
18120#define HAVE_RLIM_T 1
18121#define rb_rlim_t rlim_t
18122#define SIGNEDNESS_OF_RLIM_T +1
18123#define RLIM2NUM(v) ULONG2NUM(v)
18124#define NUM2RLIM(v) NUM2ULONG(v)
18125#define PRI_RLIM_PREFIX PRI_LONG_PREFIX
18126#define HAVE_OFF_T 1
18127#define rb_off_t off_t
18128#define SIGNEDNESS_OF_OFF_T -1
18129#define OFFT2NUM(v) LONG2NUM(v)
18130#define NUM2OFFT(v) NUM2LONG(v)
18131#define PRI_OFFT_PREFIX PRI_LONG_PREFIX
18132#define HAVE_CLOCKID_T 1
18133#define rb_clockid_t clockid_t
18134#define SIGNEDNESS_OF_CLOCKID_T +1
18135#define CLOCKID2NUM(v) ULONG2NUM(v)
18136#define NUM2CLOCKID(v) NUM2ULONG(v)
18137#define PRI_CLOCKID_PREFIX PRI_LONG_PREFIX
18138#define HAVE_VA_ARGS_MACRO 1
18139#define HAVE__ALIGNOF 1
18140#define CONSTFUNC(x) __attribute__ ((__const__)) x
18141#define PUREFUNC(x) __attribute__ ((__pure__)) x
18142#define NORETURN(x) __attribute__ ((__noreturn__)) x
18143#define DEPRECATED(x) __attribute__ ((__deprecated__)) x
18144#define DEPRECATED_BY(n,x) __attribute__ ((__deprecated__("by "#n))) x
18145#define NOINLINE(x) __attribute__ ((__noinline__)) x
18146#define NO_SANITIZE(san,x) __attribute__ ((__no_sanitize__(san))) x
18147#define NO_SANITIZE_ADDRESS(x) __attribute__ ((__no_sanitize_address__)) x
18148#define NO_ADDRESS_SAFETY_ANALYSIS(x) __attribute__ ((__no_address_safety_analysis__)) x
18149#define WARN_UNUSED_RESULT(x) __attribute__ ((__warn_unused_result__)) x
18150#define MAYBE_UNUSED(x) __attribute__ ((__unused__)) x
18151#define ERRORFUNC(mesg,x) __attribute__ ((__error__ mesg)) x
18152#define WARNINGFUNC(mesg,x) __attribute__ ((__warning__ mesg)) x
18153#define WEAK(x) __attribute__ ((__weak__)) x
18154#define HAVE_FUNC_WEAK 1
18155#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
18156#define HAVE_NULLPTR 1
18157#define FUNC_STDCALL(x) __attribute__ ((__stdcall__)) x
18158#define FUNC_CDECL(x) __attribute__ ((__cdecl__)) x
18159#define FUNC_FASTCALL(x) __attribute__ ((__fastcall__)) x
18160#define FUNC_UNOPTIMIZED(x) __attribute__ ((__optimize__("O0"))) x
18161#define FUNC_MINIMIZED(x) __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
18162#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1
18163#define RUBY_ALIAS_FUNCTION_TYPE(type,prot,name,args) type prot __attribute__((alias(#name)));
18164#define RUBY_ALIAS_FUNCTION_VOID(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)
18165#define HAVE_GCC_ATOMIC_BUILTINS 1
18166#define HAVE_GCC_SYNC_BUILTINS 1
18167#define UNREACHABLE __builtin_unreachable()
18168#define RUBY_FUNC_EXPORTED __attribute__ ((__visibility__("default"))) extern
18169#define RUBY_FUNC_NONNULL(n,x) __attribute__ ((__nonnull__(n))) x
18170#define RUBY_FUNCTION_NAME_STRING __func__
18171#define ENUM_OVER_INT 1
18172#define HAVE_DECL_SYS_NERR 1
18173#define HAVE_DECL_GETENV 1
18174#define SIZEOF_SIZE_T 8
18175#define SIZEOF_PTRDIFF_T 8
18176#define SIZEOF_DEV_T 4
18177#define PRI_SIZE_PREFIX "z"
18178#define PRI_PTRDIFF_PREFIX "t"
18179#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
18180#define HAVE_STRUCT_STAT_ST_BLOCKS 1
18181#define HAVE_STRUCT_STAT_ST_RDEV 1
18182#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T
18183#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T
18184#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG
18185#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T
18186#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T
18187#define HAVE_STRUCT_STAT_ST_ATIM 1
18188#define HAVE_STRUCT_STAT_ST_MTIM 1
18189#define HAVE_STRUCT_STAT_ST_CTIM 1
18190#define HAVE_STRUCT_TIMEVAL 1
18191#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T
18192#define HAVE_STRUCT_TIMESPEC 1
18193#define HAVE_STRUCT_TIMEZONE 1
18194#define HAVE_RB_FD_INIT 1
18195#define HAVE_INT8_T 1
18196#define SIZEOF_INT8_T 1
18197#define HAVE_UINT8_T 1
18198#define SIZEOF_UINT8_T 1
18199#define HAVE_INT16_T 1
18200#define SIZEOF_INT16_T 2
18201#define HAVE_UINT16_T 1
18202#define SIZEOF_UINT16_T 2
18203#define HAVE_INT32_T 1
18204#define SIZEOF_INT32_T 4
18205#define HAVE_UINT32_T 1
18206#define SIZEOF_UINT32_T 4
18207#define HAVE_INT64_T 1
18208#define SIZEOF_INT64_T 8
18209#define HAVE_UINT64_T 1
18210#define SIZEOF_UINT64_T 8
18211#define HAVE_INT128_T 1
18212#define int128_t __int128
18213#define SIZEOF_INT128_T SIZEOF___INT128
18214#define HAVE_UINT128_T 1
18215#define uint128_t unsigned __int128
18216#define SIZEOF_UINT128_T SIZEOF___INT128
18217#define HAVE_INTPTR_T 1
18218#define SIZEOF_INTPTR_T 8
18219#define HAVE_UINTPTR_T 1
18220#define SIZEOF_UINTPTR_T 8
18221#define PRI_PTR_PREFIX "l"
18222#define HAVE_SSIZE_T 1
18223#define SIZEOF_SSIZE_T 8
18224#define PRI_64_PREFIX "l"
18225#define GETGROUPS_T gid_t
18226#define HAVE_ALLOCA_H 1
18227#define HAVE_ALLOCA 1
18228#define HAVE_DUP 1
18229#define HAVE_DUP2 1
18230#define HAVE_ACOSH 1
18231#define HAVE_CBRT 1
18232#define HAVE_CRYPT 1
18233#define HAVE_ERF 1
18234#define HAVE_EXPLICIT_BZERO 1
18235#define HAVE_FFS 1
18236#define HAVE_FLOCK 1
18237#define HAVE_HYPOT 1
18238#define HAVE_LGAMMA_R 1
18239#define HAVE_MEMMOVE 1
18240#define HAVE_NAN 1
18241#define HAVE_NEXTAFTER 1
18242#define HAVE_STRCHR 1
18243#define HAVE_STRERROR 1
18244#define HAVE_STRLCAT 1
18245#define HAVE_STRLCPY 1
18246#define HAVE_STRSTR 1
18247#define HAVE_TGAMMA 1
18248#define HAVE_ISFINITE 1
18249#define HAVE_SIGNBIT 1
18250#define HAVE_FORK 1
18251#define HAVE_VFORK 1
18252#define HAVE_WORKING_VFORK 1
18253#define HAVE_WORKING_FORK 1
18254#define HAVE__LONGJMP 1
18255#define HAVE_ARC4RANDOM_BUF 1
18256#define HAVE_ATAN2L 1
18257#define HAVE_ATAN2F 1
18258#define HAVE_CHROOT 1
18259#define HAVE_CLOCK_GETTIME 1
18260#define HAVE_COSH 1
18261#define HAVE_CRYPT_R 1
18262#define HAVE_DIRFD 1
18263#define HAVE_DLOPEN 1
18264#define HAVE_DLADDR 1
18265#define HAVE_DUP3 1
18266#define HAVE_EACCESS 1
18267#define HAVE_ENDGRENT 1
18268#define HAVE_FCHMOD 1
18269#define HAVE_FCHOWN 1
18270#define HAVE_FCNTL 1
18271#define HAVE_FDATASYNC 1
18272#define HAVE_FDOPENDIR 1
18273#define HAVE_FMOD 1
18274#define HAVE_FSTATAT 1
18275#define HAVE_FSYNC 1
18276#define HAVE_FTRUNCATE 1
18277#define HAVE_GETCWD 1
18278#define HAVE_GETENTROPY 1
18279#define HAVE_GETGRNAM 1
18280#define HAVE_GETGRNAM_R 1
18281#define HAVE_GETGROUPS 1
18282#define HAVE_GETLOGIN 1
18283#define HAVE_GETLOGIN_R 1
18284#define HAVE_GETPGID 1
18285#define HAVE_GETPGRP 1
18286#define HAVE_GETPRIORITY 1
18287#define HAVE_GETPWNAM 1
18288#define HAVE_GETPWNAM_R 1
18289#define HAVE_GETPWUID 1
18290#define HAVE_GETPWUID_R 1
18291#define HAVE_GETRANDOM 1
18292#define HAVE_GETRLIMIT 1
18293#define HAVE_GETSID 1
18294#define HAVE_GETTIMEOFDAY 1
18295#define HAVE_GMTIME_R 1
18296#define HAVE_GRANTPT 1
18297#define HAVE_INITGROUPS 1
18298#define HAVE_IOCTL 1
18299#define HAVE_ISSETUGID 1
18300#define HAVE_KILLPG 1
18301#define HAVE_LCHOWN 1
18302#define HAVE_LINK 1
18303#define HAVE_LLABS 1
18304#define HAVE_LOCKF 1
18305#define HAVE_LOG2 1
18306#define HAVE_LSTAT 1
18307#define HAVE_LUTIMES 1
18308#define HAVE_MALLOC_USABLE_SIZE 1
18309#define HAVE_MBLEN 1
18310#define HAVE_MEMALIGN 1
18311#define HAVE_WRITEV 1
18312#define HAVE_MEMRCHR 1
18313#define HAVE_MEMMEM 1
18314#define HAVE_MKFIFO 1
18315#define HAVE_MKNOD 1
18316#define HAVE_MKTIME 1
18317#define HAVE_MMAP 1
18318#define HAVE_OPENAT 1
18319#define HAVE_PIPE2 1
18320#define HAVE_POLL 1
18321#define HAVE_POSIX_FADVISE 1
18322#define HAVE_POSIX_MEMALIGN 1
18323#define HAVE_PPOLL 1
18324#define HAVE_PREAD 1
18325#define HAVE_PWRITE 1
18326#define HAVE_QSORT_R 1
18327#define HAVE_READLINK 1
18328#define HAVE_REALPATH 1
18329#define HAVE_ROUND 1
18330#define HAVE_SCHED_GETAFFINITY 1
18331#define HAVE_SEEKDIR 1
18332#define HAVE_SETEGID 1
18333#define HAVE_SETENV 1
18334#define HAVE_SETEUID 1
18335#define HAVE_SETGID 1
18336#define HAVE_SETGROUPS 1
18337#define HAVE_SETPGID 1
18338#define HAVE_SETPGRP 1
18339#define HAVE_SETREGID 1
18340#define HAVE_SETREUID 1
18341#define HAVE_SETRLIMIT 1
18342#define HAVE_SETSID 1
18343#define HAVE_SETUID 1
18344#define HAVE_SHUTDOWN 1
18345#define HAVE_SIGACTION 1
18346#define HAVE_SIGALTSTACK 1
18347#define HAVE_SIGPROCMASK 1
18348#define HAVE_SINH 1
18349#define HAVE_SPAWNV 1
18350#define HAVE_SYMLINK 1
18351#define HAVE_SYSCONF 1
18352#define HAVE_TANH 1
18353#define HAVE_TELLDIR 1
18354#define HAVE_TIMEGM 1
18355#define HAVE_TIMES 1
18356#define HAVE_TRUNCATE 1
18357#define HAVE_UNSETENV 1
18358#define HAVE_UTIMENSAT 1
18359#define HAVE_UTIMES 1
18360#define HAVE_WAIT4 1
18361#define HAVE_WAITPID 1
18362#define HAVE_CRYPT_H 1
18363#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1
18364#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1
18365#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1
18366#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
18367#define HAVE_BUILTIN___BUILTIN_BSWAP32 1
18368#define HAVE_BUILTIN___BUILTIN_BSWAP64 1
18369#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1
18370#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1
18371#define HAVE_BUILTIN___BUILTIN_CLZ 1
18372#define HAVE_BUILTIN___BUILTIN_CLZL 1
18373#define HAVE_BUILTIN___BUILTIN_CLZLL 1
18374#define HAVE_BUILTIN___BUILTIN_CTZ 1
18375#define HAVE_BUILTIN___BUILTIN_CTZLL 1
18376#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1
18377#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1
18378#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1
18379#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1
18380#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1
18381#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1
18382#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1
18383#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1
18384#define HAVE_BUILTIN___BUILTIN_TRAP 1
18385#define HAVE_BUILTIN___BUILTIN_EXPECT 1
18386#define HAVE_GNU_QSORT_R 1
18387#define ATAN2_INF_C99 1
18388#define HAVE_CLOCK_GETRES 1
18389#define HAVE_LIBRT 1
18390#define HAVE_LIBRT 1
18391#define HAVE_TIMER_CREATE 1
18392#define HAVE_TIMER_SETTIME 1
18393#define HAVE_STRUCT_TM_TM_ZONE 1
18394#define HAVE_TM_ZONE 1
18395#define HAVE_STRUCT_TM_TM_GMTOFF 1
18396#define HAVE_DAYLIGHT 1
18397#define NEGATIVE_TIME_T 1
18398#define POSIX_SIGNAL 1
18399#define HAVE_SIG_T 1
18400#define RSHIFT(x,y) ((x)>>(int)(y))
18401#define HAVE__SC_CLK_TCK 1
18402#define STACK_GROW_DIRECTION -1
18403#define HAVE_GETCONTEXT 1
18404#define HAVE_SWAPCONTEXT 1
18405#define HAVE_MAKECONTEXT 1
18406#define COROUTINE_H "coroutine/ucontext/Context.h"
18407#define _REENTRANT 1
18408#define _THREAD_SAFE 1
18409#define HAVE_LIBPTHREAD 1
18410#define HAVE_SCHED_YIELD 1
18411#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1
18412#define HAVE_PTHREAD_ATTR_GETSTACK 1
18413#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
18414#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
18415#define HAVE_PTHREAD_SETNAME_NP 1
18416#define HAVE_PTHREAD_SIGMASK 1
18417#define HAVE_PTHREAD_GETATTR_NP 1
18418#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name)
18419#define SET_ANOTHER_THREAD_NAME(thid,name) pthread_setname_np(thid, name)
18420#define DEFINE_MCONTEXT_PTR(mc,uc) mcontext_t *mc = &(uc)->uc_mcontext
18421#define HAVE_GETCONTEXT 1
18422#define HAVE_SETCONTEXT 1
18423#define HAVE_CONST_PAGE_SIZE 0
18424#define IOCTL_REQ_TYPE unsigned long
18425#define NUM2IOCTLREQ(num) NUM2ULONG(num)
18426#define DLEXT_MAXLEN 3
18427#define DLEXT ".so"
18428#define LIBDIR_BASENAME "lib"
18429#define EXECUTABLE_EXTS ".exe",".com",".cmd",".bat"
18430#define HAVE__SETJMP 1
18431#define RUBY_SETJMP(env) __builtin_setjmp((env))
18432#define RUBY_LONGJMP(env,val) __builtin_longjmp((env),val)
18433#define USE_MJIT 1
18434#define HAVE_PTHREAD_H 1
18435#define THREAD_IMPL_H "thread_pthread.h"
18436#define THREAD_IMPL_SRC "thread_pthread.c"
18437#define RUBY_PLATFORM "x86_64-cygwin"
18438#define RBIMPL_COMPILER_SINCE_H
18439#define RBIMPL_COMPILER_IS_H
18440#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc
18441#define RBIMPL_COMPILER_IS_APPLE_H
18442#define RBIMPL_COMPILER_IS_Apple 0
18443#define RBIMPL_COMPILER_IS_CLANG_H
18444#define RBIMPL_COMPILER_IS_Clang 0
18445#define RBIMPL_COMPILER_IS_GCC_H
18446#define RBIMPL_COMPILER_IS_INTEL_H
18447#define RBIMPL_COMPILER_IS_Intel 0
18448#define RBIMPL_COMPILER_IS_GCC 1
18449#define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__
18450#define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__
18451#define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__
18452#define RBIMPL_COMPILER_IS_MSVC_H
18453#define RBIMPL_COMPILER_IS_MSVC 0
18454#define RBIMPL_COMPILER_IS_SUNPRO_H
18455#define RBIMPL_COMPILER_IS_SunPro 0
18456#define RBIMPL_COMPILER_SINCE(cc,x,y,z) (RBIMPL_COMPILER_IS(cc) && ((RBIMPL_COMPILER_VERSION_MAJOR > (x)) || ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && ((RBIMPL_COMPILER_VERSION_MINOR > (y)) || ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && (RBIMPL_COMPILER_VERSION_PATCH >= (z)))))))
18457#define RBIMPL_COMPILER_BEFORE(cc,x,y,z) (RBIMPL_COMPILER_IS(cc) && ((RBIMPL_COMPILER_VERSION_MAJOR < (x)) || ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && ((RBIMPL_COMPILER_VERSION_MINOR < (y)) || ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && (RBIMPL_COMPILER_VERSION_PATCH < (z)))))))
18458#undef HAVE_PROTOTYPES
18459#define HAVE_PROTOTYPES 1
18460#undef HAVE_STDARG_PROTOTYPES
18461#define HAVE_STDARG_PROTOTYPES 1
18462#undef TOKEN_PASTE
18463#define TOKEN_PASTE(x,y) x ##y
18464#define STRINGIZE(expr) STRINGIZE0(expr)
18465#define STRINGIZE0(expr) #expr
18466#define UNALIGNED_WORD_ACCESS 1
18467#define RBIMPL_TEST3(q,w,e,...) e
18468#define RBIMPL_TEST2(...) RBIMPL_TEST3(__VA_OPT__(,),1,0,0)
18469#define RBIMPL_TEST1() RBIMPL_TEST2("ruby")
18470#define HAVE___VA_OPT__
18471#undef RBIMPL_TEST1
18472#undef RBIMPL_TEST2
18473#undef RBIMPL_TEST3
18474#define USE_RVARGC 0
18475#define _STDARG_H
18476#define _ANSI_STDARG_H_
18477#undef __need___va_list
18478#define __GNUC_VA_LIST
18479#define va_start(v,l) __builtin_va_start(v,l)
18480#define va_end(v) __builtin_va_end(v)
18481#define va_arg(v,l) __builtin_va_arg(v,l)
18482#define va_copy(d,s) __builtin_va_copy(d,s)
18483#define __va_copy(d,s) __builtin_va_copy(d,s)
18484#define _VA_LIST_
18485#define _VA_LIST
18486#define _VA_LIST_DEFINED
18487#define _VA_LIST_T_H
18488#define __va_list__
18489#define RUBY_DEFINES_H 1
18490#define _STDIO_H_
18491#define _ANSIDECL_H_
18492#define __NEWLIB_H__ 1
18493#define _NEWLIB_VERSION_H__ 1
18494#define _NEWLIB_VERSION "4.1.0"
18495#define __NEWLIB__ 4
18496#define __NEWLIB_MINOR__ 1
18497#define __NEWLIB_PATCHLEVEL__ 0
18498#define _WANT_IO_C99_FORMATS 1
18499#define _WANT_IO_LONG_LONG 1
18500#define _WANT_IO_LONG_DOUBLE 1
18501#define _WANT_IO_POS_ARGS 1
18502#define _REENT_CHECK_VERIFY 1
18503#define _MB_CAPABLE 1
18504#define _MB_LEN_MAX 8
18505#define _ATEXIT_DYNAMIC_ALLOC 1
18506#define _HAVE_LONG_DOUBLE 1
18507#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1
18508#define _FVWRITE_IN_STREAMIO 1
18509#define _FSEEK_OPTIMIZATION 1
18510#define _WIDE_ORIENT 1
18511#define _UNBUF_STREAM_OPT 1
18512#define __SYS_CONFIG_H__
18513#define __IEEE_LITTLE_ENDIAN
18514#define _SUPPORTS_ERREXCEPT
18515#define __OBSOLETE_MATH_DEFAULT 0
18516#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT
18517#define _SYS_FEATURES_H
18518#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
18519#define __GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi)
18520#undef _ATFILE_SOURCE
18521#define _ATFILE_SOURCE 1
18522#undef _DEFAULT_SOURCE
18523#define _DEFAULT_SOURCE 1
18524#undef _ISOC99_SOURCE
18525#define _ISOC99_SOURCE 1
18526#undef _ISOC11_SOURCE
18527#define _ISOC11_SOURCE 1
18528#undef _POSIX_SOURCE
18529#define _POSIX_SOURCE 1
18530#undef _POSIX_C_SOURCE
18531#define _POSIX_C_SOURCE 200809L
18532#undef _XOPEN_SOURCE
18533#define _XOPEN_SOURCE 700
18534#undef _XOPEN_SOURCE_EXTENDED
18535#define _XOPEN_SOURCE_EXTENDED 1
18536#undef _POSIX_SOURCE
18537#define _POSIX_SOURCE 1
18538#undef _POSIX_C_SOURCE
18539#define _POSIX_C_SOURCE 200809L
18540#undef _ATFILE_SOURCE
18541#define _ATFILE_SOURCE 1
18542#define __ATFILE_VISIBLE 1
18543#define __BSD_VISIBLE 1
18544#define __GNU_VISIBLE 1
18545#define __ISO_C_VISIBLE 2011
18546#define __LARGEFILE_VISIBLE 1
18547#define __MISC_VISIBLE 1
18548#define __POSIX_VISIBLE 200809
18549#define __SVID_VISIBLE 1
18550#define __XSI_VISIBLE 700
18551#define __SSP_FORTIFY_LEVEL 2
18552#define _POSIX_VERSION 200809L
18553#define _POSIX2_VERSION 200809L
18554#define _XOPEN_VERSION __XSI_VISIBLE
18555#define _POSIX_ADVISORY_INFO 200809L
18556#define _POSIX_ASYNCHRONOUS_IO 200809L
18557#define _POSIX_BARRIERS 200809L
18558#define _POSIX_CHOWN_RESTRICTED 1
18559#define _POSIX_CLOCK_SELECTION 200809L
18560#define _POSIX_CPUTIME 200809L
18561#define _POSIX_FSYNC 200809L
18562#define _POSIX_IPV6 200809L
18563#define _POSIX_JOB_CONTROL 1
18564#define _POSIX_MAPPED_FILES 200809L
18565#define _POSIX_MEMLOCK_RANGE 200809L
18566#define _POSIX_MEMORY_PROTECTION 200809L
18567#define _POSIX_MESSAGE_PASSING 200809L
18568#define _POSIX_MONOTONIC_CLOCK 200809L
18569#define _POSIX_NO_TRUNC 1
18570#define _POSIX_PRIORITY_SCHEDULING 200809L
18571#define _POSIX_RAW_SOCKETS 200809L
18572#define _POSIX_READER_WRITER_LOCKS 200809L
18573#define _POSIX_REALTIME_SIGNALS 200809L
18574#define _POSIX_REGEXP 1
18575#define _POSIX_SAVED_IDS 1
18576#define _POSIX_SEMAPHORES 200809L
18577#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
18578#define _POSIX_SHELL 1
18579#define _POSIX_SPAWN 200809L
18580#define _POSIX_SPIN_LOCKS 200809L
18581#define _POSIX_SYNCHRONIZED_IO 200809L
18582#define _POSIX_THREAD_ATTR_STACKADDR 200809L
18583#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
18584#define _POSIX_THREAD_CPUTIME 200809L
18585#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
18586#define _POSIX_THREAD_PROCESS_SHARED 200809L
18587#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
18588#define _POSIX_THREADS 200809L
18589#define _POSIX_TIMEOUTS 200809L
18590#define _POSIX_TIMERS 200809L
18591#define _POSIX_VDISABLE '\0'
18592#define _POSIX2_C_VERSION _POSIX2_VERSION
18593#define _POSIX2_C_BIND _POSIX2_VERSION
18594#define _POSIX2_C_DEV _POSIX2_VERSION
18595#define _POSIX2_CHAR_TERM _POSIX2_VERSION
18596#define _POSIX2_SW_DEV _POSIX2_VERSION
18597#define _POSIX2_UPE _POSIX2_VERSION
18598#define _POSIX_V6_ILP32_OFF32 -1
18599#define _POSIX_V6_ILP32_OFFBIG -1
18600#define _POSIX_V6_LP64_OFF64 1
18601#define _POSIX_V6_LPBIG_OFFBIG 1
18602#define _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
18603#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
18604#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64
18605#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
18606#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
18607#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
18608#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
18609#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
18610#define _XOPEN_CRYPT 1
18611#define _XOPEN_ENH_I18N 1
18612#define _XOPEN_SHM 1
18613#define __STDC_ISO_10646__ 201806L
18614#define _POINTER_INT long
18615#undef __RAND_MAX
18616#define __RAND_MAX 0x7fffffff
18617#define _CYGWIN_CONFIG_H
18618#define __DYNAMIC_REENT__
18619#define __SYMBOL_PREFIX
18620#define _SYMSTR(x) __SYMBOL_PREFIX #x
18621#define __FILENAME_MAX__ 4096
18622#define _READ_WRITE_RETURN_TYPE _ssize_t
18623#define _READ_WRITE_BUFSIZE_TYPE size_t
18624#define __LARGE64_FILES 1
18625#define __USE_INTERNAL_STAT64 1
18626#define __LINUX_ERRNO_EXTENSIONS__ 1
18627#define _MB_EXTENDED_CHARSETS_ALL 1
18628#define __HAVE_LOCALE_INFO__ 1
18629#define __HAVE_LOCALE_INFO_EXTENDED__ 1
18630#define _WANT_C99_TIME_FORMATS 1
18631#define _GLIBC_EXTENSION 1
18632#define _STDIO_BSD_SEMANTICS 1
18633#define __TM_GMTOFF tm_gmtoff
18634#define __TM_ZONE tm_zone
18635#define _USE_LONG_TIME_T 1
18636#define __EXPORT
18637#define __IMPORT __declspec(dllimport)
18638#define DEFAULT_LOCALE "C.UTF-8"
18639#define _MB_EXTENDED_CHARSETS_ISO 1
18640#define _MB_EXTENDED_CHARSETS_WINDOWS 1
18641#define _BEGIN_STD_C
18642#define _END_STD_C
18643#define _NOTHROW
18644#define _LONG_DOUBLE long double
18645#define _ATTRIBUTE(attrs) __attribute__ (attrs)
18646#define _ELIDABLE_INLINE static __inline__
18647#define _NOINLINE __attribute__ ((__noinline__))
18648#define _NOINLINE_STATIC _NOINLINE static
18649#define _FSTDIO
18650#define __need_size_t
18651#define __need_NULL
18652#define _SYS_CDEFS_H_
18653#define _MACHINE__DEFAULT_TYPES_H
18654#define __EXP(x) __ ##x ##__
18655#define __have_longlong64 1
18656#define __have_long64 1
18657#define ___int8_t_defined 1
18658#define ___int16_t_defined 1
18659#define ___int32_t_defined 1
18660#define ___int64_t_defined 1
18661#define ___int_least8_t_defined 1
18662#define ___int_least16_t_defined 1
18663#define ___int_least32_t_defined 1
18664#define ___int_least64_t_defined 1
18665#undef __EXP
18666#define __size_t__
18667#define __SIZE_T__
18668#define _SIZE_T
18669#define _SYS_SIZE_T_H
18670#define _T_SIZE_
18671#define _T_SIZE
18672#define __SIZE_T
18673#define _SIZE_T_
18674#define _BSD_SIZE_T_
18675#define _SIZE_T_DEFINED_
18676#define _SIZE_T_DEFINED
18677#define _BSD_SIZE_T_DEFINED_
18678#define _SIZE_T_DECLARED
18679#define ___int_size_t_h
18680#define _GCC_SIZE_T
18681#define _SIZET_
18682#define __size_t
18683#undef __need_size_t
18684#undef NULL
18685#define NULL ((void *)0)
18686#undef __need_NULL
18687#define __PMT(args) args
18688#define __DOTS , ...
18689#define __THROW
18690#define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
18691#define __ptr_t void *
18692#define __long_double_t long double
18693#define __attribute_malloc__
18694#define __attribute_pure__
18695#define __attribute_format_strfmon__(a,b)
18696#define __flexarr [0]
18697#define __bounded
18698#define __unbounded
18699#define __ptrvalue
18700#define __has_extension __has_feature
18701#define __has_feature(x) 0
18702#define __BEGIN_DECLS
18703#define __END_DECLS
18704#define __GNUCLIKE_ASM 3
18705#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
18706#define __GNUCLIKE___TYPEOF 1
18707#define __GNUCLIKE___OFFSETOF 1
18708#define __GNUCLIKE___SECTION 1
18709#define __GNUCLIKE_CTOR_SECTION_HANDLING 1
18710#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
18711#define __GNUCLIKE_BUILTIN_VARARGS 1
18712#define __GNUCLIKE_BUILTIN_STDARG 1
18713#define __GNUCLIKE_BUILTIN_VAALIST 1
18714#define __GNUC_VA_LIST_COMPATIBILITY 1
18715#define __compiler_membar() __asm __volatile(" " : : : "memory")
18716#define __GNUCLIKE_BUILTIN_NEXT_ARG 1
18717#define __GNUCLIKE_MATH_BUILTIN_RELOPS
18718#define __GNUCLIKE_BUILTIN_MEMCPY 1
18719#define __CC_SUPPORTS_INLINE 1
18720#define __CC_SUPPORTS___INLINE 1
18721#define __CC_SUPPORTS___INLINE__ 1
18722#define __CC_SUPPORTS___FUNC__ 1
18723#define __CC_SUPPORTS_WARNING 1
18724#define __CC_SUPPORTS_VARADIC_XXX 1
18725#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
18726#define __P(protos) protos
18727#define __CONCAT1(x,y) x ## y
18728#define __CONCAT(x,y) __CONCAT1(x,y)
18729#define __STRING(x) #x
18730#define __XSTRING(x) __STRING(x)
18731#define __const const
18732#define __signed signed
18733#define __volatile volatile
18734#define __weak_symbol __attribute__((__weak__))
18735#define __dead2 __attribute__((__noreturn__))
18736#define __pure2 __attribute__((__const__))
18737#define __unused __attribute__((__unused__))
18738#define __used __attribute__((__used__))
18739#define __packed __attribute__((__packed__))
18740#define __aligned(x) __attribute__((__aligned__(x)))
18741#define __section(x) __attribute__((__section__(x)))
18742#define __alloc_size(x) __attribute__((__alloc_size__(x)))
18743#define __alloc_size2(n,x) __attribute__((__alloc_size__(n, x)))
18744#define __alloc_align(x) __attribute__((__alloc_align__(x)))
18745#define __generic(expr,t,yes,no) _Generic(expr, t: yes, default: no)
18746#define __min_size(x) static (x)
18747#define __malloc_like __attribute__((__malloc__))
18748#define __pure __attribute__((__pure__))
18749#define __always_inline __inline__ __attribute__((__always_inline__))
18750#define __noinline __attribute__ ((__noinline__))
18751#define __nonnull(x) __attribute__((__nonnull__ x))
18752#define __nonnull_all __attribute__((__nonnull__))
18753#define __fastcall __attribute__((__fastcall__))
18754#define __result_use_check __attribute__((__warn_unused_result__))
18755#define __returns_twice __attribute__((__returns_twice__))
18756#define __unreachable() __builtin_unreachable()
18757#define __restrict restrict
18758#define __predict_true(exp) __builtin_expect((exp), 1)
18759#define __predict_false(exp) __builtin_expect((exp), 0)
18760#define __null_sentinel __attribute__((__sentinel__))
18761#define __exported __attribute__((__visibility__("default")))
18762#define __hidden
18763#define __offsetof(type,field) offsetof(type, field)
18764#define __rangeof(type,start,end) (__offsetof(type, end) - __offsetof(type, start))
18765#define __containerof(x,s,m) ({ const volatile __typeof(((s *)0)->m) *__x = (x); __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));})
18766#define __printflike(fmtarg,firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
18767#define __scanflike(fmtarg,firstvararg) __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
18768#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
18769#define __strfmonlike(fmtarg,firstvararg) __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
18770#define __strftimelike(fmtarg,firstvararg) __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
18771#define __printf0like(fmtarg,firstvararg)
18772#define __strong_reference(sym,aliassym) extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
18773#define __weak_reference(sym,alias) __asm__(".stabs \"_" #alias "\",11,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
18774#define __warn_references(sym,msg) __asm__(".stabs \"" msg "\",30,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
18775#define __FBSDID(s) struct __hack
18776#define __RCSID(s) struct __hack
18777#define __RCSID_SOURCE(s) struct __hack
18778#define __SCCSID(s) struct __hack
18779#define __COPYRIGHT(s) struct __hack
18780#define __DECONST(type,var) ((type)(__uintptr_t)(const void *)(var))
18781#define __DEVOLATILE(type,var) ((type)(__uintptr_t)(volatile void *)(var))
18782#define __DEQUALIFY(type,var) ((type)(__uintptr_t)(const volatile void *)(var))
18783#define _Nonnull
18784#define _Nullable
18785#define _Null_unspecified
18786#define __NULLABILITY_PRAGMA_PUSH
18787#define __NULLABILITY_PRAGMA_POP
18788#define __arg_type_tag(arg_kind,arg_idx,type_tag_idx)
18789#define __datatype_type_tag(kind,type)
18790#define __lock_annotate(x)
18791#define __lockable __lock_annotate(lockable)
18792#define __locks_exclusive(...) __lock_annotate(exclusive_lock_function(__VA_ARGS__))
18793#define __locks_shared(...) __lock_annotate(shared_lock_function(__VA_ARGS__))
18794#define __trylocks_exclusive(...) __lock_annotate(exclusive_trylock_function(__VA_ARGS__))
18795#define __trylocks_shared(...) __lock_annotate(shared_trylock_function(__VA_ARGS__))
18796#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
18797#define __asserts_exclusive(...) __lock_annotate(assert_exclusive_lock(__VA_ARGS__))
18798#define __asserts_shared(...) __lock_annotate(assert_shared_lock(__VA_ARGS__))
18799#define __requires_exclusive(...) __lock_annotate(exclusive_locks_required(__VA_ARGS__))
18800#define __requires_shared(...) __lock_annotate(shared_locks_required(__VA_ARGS__))
18801#define __requires_unlocked(...) __lock_annotate(locks_excluded(__VA_ARGS__))
18802#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
18803#define __nosanitizeaddress
18804#define __nosanitizethread
18805#define __guarded_by(x) __lock_annotate(guarded_by(x))
18806#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))
18807#define _STDDEF_H
18808#define _STDDEF_H_
18809#define _ANSI_STDDEF_H
18810#define _PTRDIFF_T
18811#define _T_PTRDIFF_
18812#define _T_PTRDIFF
18813#define __PTRDIFF_T
18814#define _PTRDIFF_T_
18815#define _BSD_PTRDIFF_T_
18816#define ___int_ptrdiff_t_h
18817#define _GCC_PTRDIFF_T
18818#define _PTRDIFF_T_DECLARED
18819#undef __need_ptrdiff_t
18820#undef __need_size_t
18821#define __wchar_t__
18822#define __WCHAR_T__
18823#define _WCHAR_T
18824#define _T_WCHAR_
18825#define _T_WCHAR
18826#define __WCHAR_T
18827#define _WCHAR_T_
18828#define _BSD_WCHAR_T_
18829#define _WCHAR_T_DEFINED_
18830#define _WCHAR_T_DEFINED
18831#define _WCHAR_T_H
18832#define ___int_wchar_t_h
18833#define __INT_WCHAR_T_H
18834#define _GCC_WCHAR_T
18835#define _WCHAR_T_DECLARED
18836#undef _BSD_WCHAR_T_
18837#undef __need_wchar_t
18838#undef NULL
18839#define NULL ((void *)0)
18840#undef __need_NULL
18841#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
18842#define _GCC_MAX_ALIGN_T
18843#define __need___va_list
18844#define _SYS_REENT_H_
18845#define _SYS__TYPES_H
18846#define __need_size_t
18847#define __need_wint_t
18848#undef __need_ptrdiff_t
18849#undef __need_size_t
18850#undef __need_wchar_t
18851#define _WINT_T
18852#undef __need_wint_t
18853#undef NULL
18854#define NULL ((void *)0)
18855#undef __need_NULL
18856#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
18857#define _MACHINE__TYPES_H
18858#define __machine_blkcnt_t_defined
18859#define __machine_blksize_t_defined
18860#define __machine_dev_t_defined
18861#define __machine_fsblkcnt_t_defined
18862#define __machine_fsfilcnt_t_defined
18863#define __machine_uid_t_defined
18864#define __machine_gid_t_defined
18865#define __machine_ino_t_defined
18866#define __machine_key_t_defined
18867#define __machine_sa_family_t_defined
18868#define __machine_socklen_t_defined
18869#undef __size_t
18870#define unsigned signed
18871#undef unsigned
18872#define _CLOCK_T_ unsigned long
18873#define _TIME_T_ long
18874#define _CLOCKID_T_ unsigned long
18875#define _TIMER_T_ unsigned long
18876#define _NULL 0
18877#define __Long int
18878#define _SYS_LOCK_H_
18879#define _LOCK_RECURSIVE_T _LOCK_T
18880#define _LOCK_T_RECURSIVE_INITIALIZER ((_LOCK_T)18)
18881#define _LOCK_T_INITIALIZER ((_LOCK_T)19)
18882#define __LOCK_INIT(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_INITIALIZER;
18883#define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_RECURSIVE_INITIALIZER;
18884#define __lock_init(__lock) __cygwin_lock_init(&__lock)
18885#define __lock_init_recursive(__lock) __cygwin_lock_init_recursive(&__lock)
18886#define __lock_close(__lock) __cygwin_lock_fini(&__lock)
18887#define __lock_close_recursive(__lock) __cygwin_lock_fini(&__lock)
18888#define __lock_acquire(__lock) __cygwin_lock_lock(&__lock)
18889#define __lock_acquire_recursive(__lock) __cygwin_lock_lock(&__lock)
18890#define __lock_try_acquire(lock) __cygwin_lock_trylock(&__lock)
18891#define __lock_try_acquire_recursive(lock) __cygwin_lock_trylock(&__lock)
18892#define __lock_release(__lock) __cygwin_lock_unlock(&__lock)
18893#define __lock_release_recursive(__lock) __cygwin_lock_unlock(&__lock)
18894#define _ATEXIT_SIZE 32
18895#define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
18896#define _REENT_INIT_ATEXIT _NULL, _ATEXIT_INIT,
18897#define _REENT_SMALL_CHECK_INIT(ptr)
18898#define _RAND48_SEED_0 (0x330e)
18899#define _RAND48_SEED_1 (0xabcd)
18900#define _RAND48_SEED_2 (0x1234)
18901#define _RAND48_MULT_0 (0xe66d)
18902#define _RAND48_MULT_1 (0xdeec)
18903#define _RAND48_MULT_2 (0x0005)
18904#define _RAND48_ADD (0x000b)
18905#define _REENT_EMERGENCY_SIZE 25
18906#define _REENT_ASCTIME_SIZE 26
18907#define _REENT_SIGNAL_SIZE 24
18908#define _N_LISTS 30
18909#define _REENT_STDIO_STREAM(var,index) &(var)->__sf[index]
18910#define _REENT_INIT(var) { 0, _REENT_STDIO_STREAM(&(var), 0), _REENT_STDIO_STREAM(&(var), 1), _REENT_STDIO_STREAM(&(var), 2), 0, "", 0, _NULL, 0, _NULL, _NULL, 0, _NULL, _NULL, 0, _NULL, { { 0, _NULL, "", {0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, 1, { {_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, {_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, _RAND48_ADD }, {0, {0}}, {0, {0}}, {0, {0}}, "", "", 0, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}} } }, _REENT_INIT_ATEXIT _NULL, {_NULL, 0, _NULL} }
18911#define _REENT_INIT_PTR_ZEROED(var) { (var)->_stdin = _REENT_STDIO_STREAM(var, 0); (var)->_stdout = _REENT_STDIO_STREAM(var, 1); (var)->_stderr = _REENT_STDIO_STREAM(var, 2); (var)->_new._reent._rand_next = 1; (var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; (var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; (var)->_new._reent._r48._seed[2] = _RAND48_SEED_2; (var)->_new._reent._r48._mult[0] = _RAND48_MULT_0; (var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; (var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; (var)->_new._reent._r48._add = _RAND48_ADD; }
18912#define _REENT_CHECK_RAND48(ptr)
18913#define _REENT_CHECK_MP(ptr)
18914#define _REENT_CHECK_TM(ptr)
18915#define _REENT_CHECK_ASCTIME_BUF(ptr)
18916#define _REENT_CHECK_EMERGENCY(ptr)
18917#define _REENT_CHECK_MISC(ptr)
18918#define _REENT_CHECK_SIGNAL_BUF(ptr)
18919#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
18920#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
18921#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
18922#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
18923#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
18924#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
18925#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
18926#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
18927#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
18928#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
18929#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
18930#define _REENT_EMERGENCY(ptr) ((ptr)->_emergency)
18931#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
18932#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
18933#define _REENT_MBTOWC_STATE(ptr) ((ptr)->_new._reent._mbtowc_state)
18934#define _REENT_WCTOMB_STATE(ptr) ((ptr)->_new._reent._wctomb_state)
18935#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_new._reent._mbrlen_state)
18936#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_new._reent._mbrtowc_state)
18937#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_new._reent._mbsrtowcs_state)
18938#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_new._reent._wcrtomb_state)
18939#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_new._reent._wcsrtombs_state)
18940#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
18941#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
18942#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
18943#define _REENT_INIT_PTR(var) { memset((var), 0, sizeof(*(var))); _REENT_INIT_PTR_ZEROED(var); }
18944#define _Kmax (sizeof (size_t) << 3)
18945#define __ATTRIBUTE_IMPURE_PTR__
18946#define _REENT (__getreent())
18947#define _GLOBAL_REENT _global_impure_ptr
18948#define _GLOBAL_ATEXIT (_GLOBAL_REENT->_atexit)
18949#define __BIT_TYPES_DEFINED__ 1
18950#define _SYS_TYPES_H
18951#define _SYS__STDINT_H
18952#define _INT8_T_DECLARED
18953#define _UINT8_T_DECLARED
18954#define __int8_t_defined 1
18955#define _INT16_T_DECLARED
18956#define _UINT16_T_DECLARED
18957#define __int16_t_defined 1
18958#define _INT32_T_DECLARED
18959#define _UINT32_T_DECLARED
18960#define __int32_t_defined 1
18961#define _INT64_T_DECLARED
18962#define _UINT64_T_DECLARED
18963#define __int64_t_defined 1
18964#define _INTMAX_T_DECLARED
18965#define _UINTMAX_T_DECLARED
18966#define _INTPTR_T_DECLARED
18967#define _UINTPTR_T_DECLARED
18968#define __MACHINE_ENDIAN_H__
18969#define _BITS_ENDIAN_H_
18970#define __BIG_ENDIAN 4321
18971#define __LITTLE_ENDIAN 1234
18972#define __BYTE_ORDER __LITTLE_ENDIAN
18973#define _LITTLE_ENDIAN __LITTLE_ENDIAN
18974#define _BIG_ENDIAN __BIG_ENDIAN
18975#define _PDP_ENDIAN __PDP_ENDIAN
18976#define _BYTE_ORDER __BYTE_ORDER
18977#define __machine_host_to_from_network_defined
18978#define __htonl(_x) __ntohl(_x)
18979#define __htons(_x) __ntohs(_x)
18980#define _QUAD_HIGHWORD 1
18981#define _QUAD_LOWWORD 0
18982#define LITTLE_ENDIAN _LITTLE_ENDIAN
18983#define BIG_ENDIAN _BIG_ENDIAN
18984#define PDP_ENDIAN _PDP_ENDIAN
18985#define BYTE_ORDER _BYTE_ORDER
18986#define __bswap16(_x) __builtin_bswap16(_x)
18987#define __bswap32(_x) __builtin_bswap32(_x)
18988#define __bswap64(_x) __builtin_bswap64(_x)
18989#define _SYS_SELECT_H
18990#define _SYS__SIGSET_H_
18991#define _SYS__TIMEVAL_H_
18992#define _SUSECONDS_T_DECLARED
18993#define __time_t_defined
18994#define _TIME_T_DECLARED
18995#define _TIMEVAL_DEFINED
18996#define _SYS_TIMESPEC_H_
18997#define _SYS__TIMESPEC_H_
18998#define TIMEVAL_TO_TIMESPEC(tv,ts) do { (ts)->tv_sec = (tv)->tv_sec; (ts)->tv_nsec = (tv)->tv_usec * 1000; } while (0)
18999#define TIMESPEC_TO_TIMEVAL(tv,ts) do { (tv)->tv_sec = (ts)->tv_sec; (tv)->tv_usec = (ts)->tv_nsec / 1000; } while (0)
19000#define _SIGSET_T_DECLARED
19001#define _SYS_TYPES_FD_SET
19002#define FD_SETSIZE 64
19003#define _NFDBITS ((int)sizeof(__fd_mask) * 8)
19004#define NFDBITS _NFDBITS
19005#define _howmany(x,y) (((x) + ((y) - 1)) / (y))
19006#define fds_bits __fds_bits
19007#define __fdset_mask(n) ((__fd_mask)1 << ((n) % _NFDBITS))
19008#define FD_CLR(n,p) ((p)->__fds_bits[(n)/_NFDBITS] &= ~__fdset_mask(n))
19009#define FD_COPY(f,t) (void)(*(t) = *(f))
19010#define FD_ISSET(n,p) (((p)->__fds_bits[(n)/_NFDBITS] & __fdset_mask(n)) != 0)
19011#define FD_SET(n,p) ((p)->__fds_bits[(n)/_NFDBITS] |= __fdset_mask(n))
19012#define FD_ZERO(p) do { fd_set *_p; __size_t _n; _p = (p); _n = _howmany(FD_SETSIZE, _NFDBITS); while (_n > 0) _p->__fds_bits[--_n] = 0; } while (0)
19013#define physadr physadr_t
19014#define quad quad_t
19015#define _IN_ADDR_T_DECLARED
19016#define _IN_PORT_T_DECLARED
19017#define __u_char_defined
19018#define __u_short_defined
19019#define __u_int_defined
19020#define __u_long_defined
19021#define _BSDTYPES_DEFINED
19022#define _BLKCNT_T_DECLARED
19023#define _BLKSIZE_T_DECLARED
19024#define __clock_t_defined
19025#define _CLOCK_T_DECLARED
19026#define __daddr_t_defined
19027#define __caddr_t_defined
19028#define _FSBLKCNT_T_DECLARED
19029#define _ID_T_DECLARED
19030#define _INO_T_DECLARED
19031#define _OFF_T_DECLARED
19032#define _DEV_T_DECLARED
19033#define _UID_T_DECLARED
19034#define _GID_T_DECLARED
19035#define _PID_T_DECLARED
19036#define _KEY_T_DECLARED
19037#define _SSIZE_T_DECLARED
19038#define _MODE_T_DECLARED
19039#define _NLINK_T_DECLARED
19040#define __clockid_t_defined
19041#define _CLOCKID_T_DECLARED
19042#define __timer_t_defined
19043#define _TIMER_T_DECLARED
19044#define _USECONDS_T_DECLARED
19045#define _SYS__PTHREADTYPES_H_
19046#define _SYS_CPUSET_H_
19047#define __CPU_SETSIZE 1024
19048#define __NCPUBITS (8 * sizeof (__cpu_mask))
19049#define __CPU_GROUPMAX (__CPU_SETSIZE / __NCPUBITS)
19050#define __CPUELT(cpu) ((cpu) / __NCPUBITS)
19051#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
19052#define CPU_ALLOC_SIZE(num) ((num+__NCPUBITS-1) / __NCPUBITS) * sizeof (__cpu_mask)
19053#define CPU_ALLOC(num) __builtin_malloc (CPU_ALLOC_SIZE(num))
19054#define CPU_FREE(set) __builtin_free (set)
19055#define CPU_ZERO_S(siz,set) __builtin_memset (set, 0, siz)
19056#define CPU_SET_S(cpu,siz,set) if (cpu < 8 * siz) (set)->__bits[__CPUELT(cpu)] |= __CPUMASK(cpu);
19057#define CPU_CLR_S(cpu,siz,set) if (cpu < 8 * siz) (set)->__bits[__CPUELT(cpu)] &= ~(__CPUMASK(cpu));
19058#define CPU_ISSET_S(cpu,siz,set) ({int res = 0; if (cpu < 8 * siz) res = !!((set)->__bits[__CPUELT(cpu)] & __CPUMASK(cpu)); res;})
19059#define CPU_COUNT_S(siz,set) ({int tot = 0; for (int i = 0; i < siz / sizeof (__cpu_mask); i++) tot += __builtin_popcountl ((set)->__bits[i]); tot;})
19060#define CPU_AND_S(siz,dst,src1,src2) for (int i = 0; i < siz / sizeof (__cpu_mask); i++) (dst)->__bits[i] = (src1)->__bits[i] & (src2)->__bits[i];
19061#define CPU_OR_S(siz,dst,src1,src2) for (int i = 0; i < siz / sizeof (__cpu_mask); i++) (dst)->__bits[i] = (src1)->__bits[i] | (src2)->__bits[i];
19062#define CPU_XOR_S(siz,dst,src1,src2) for (int i = 0; i < siz / sizeof (__cpu_mask); i++) (dst)->__bits[i] = (src1)->__bits[i] ^ (src2)->__bits[i];
19063#define CPU_EQUAL_S(siz,src1,src2) ({int res = 1; for (int i = 0; res && i < siz / sizeof (__cpu_mask); i++) res &= (src1)->__bits[i] == (src2)->__bits[i]; res;})
19064#define CPU_ZERO(set) CPU_ZERO_S(sizeof (cpu_set_t), set)
19065#define CPU_SET(cpu,set) CPU_SET_S(cpu, sizeof (cpu_set_t), set)
19066#define CPU_CLR(cpu,set) CPU_CLR_S(cpu, sizeof (cpu_set_t), set)
19067#define CPU_ISSET(cpu,set) CPU_ISSET_S(cpu, sizeof (cpu_set_t), set)
19068#define CPU_COUNT(set) CPU_COUNT_S(sizeof (cpu_set_t), set)
19069#define CPU_AND(dst,src1,src2) CPU_AND_S(sizeof (cpu_set_t), dst, src1, src2)
19070#define CPU_OR(dst,src1,src2) CPU_OR_S(sizeof (cpu_set_t), dst, src1, src2)
19071#define CPU_XOR(dst,src1,src2) CPU_XOR_S(sizeof (cpu_set_t), dst, src1, src2)
19072#define CPU_EQUAL(src1,src2) CPU_EQUAL_S(sizeof (cpu_set_t), src1, src2)
19073#define CPU_SETSIZE __CPU_SETSIZE
19074#define _ENDIAN_H_
19075#define __LONG_LONG_PAIR(HI,LO) LO, HI
19076#define _BITS_BYTESWAP_H
19077#define htobe16(x) __bswap_16(x)
19078#define htobe32(x) __bswap_32(x)
19079#define htobe64(x) __bswap_64(x)
19080#define be16toh(x) __bswap_16(x)
19081#define be32toh(x) __bswap_32(x)
19082#define be64toh(x) __bswap_64(x)
19083#define htole16(x) (x)
19084#define htole32(x) (x)
19085#define htole64(x) (x)
19086#define le16toh(x) (x)
19087#define le32toh(x) (x)
19088#define le64toh(x) (x)
19089#define _WORDSIZE_H 1
19090#define __WORDSIZE 64
19091#define __WORDSIZE_COMPAT32 1
19092#define __timespec_t_defined
19093#define __timestruc_t_defined
19094#define __BIT_TYPES_DEFINED__ 1
19095#define __vm_offset_t_defined
19096#define __vm_size_t_defined
19097#define __vm_object_t_defined
19098#define __addr_t_defined
19099#define _SYS_SYSMACROS_H
19100#define major(dev) gnu_dev_major(dev)
19101#define minor(dev) gnu_dev_minor(dev)
19102#define makedev(maj,min) gnu_dev_makedev(maj, min)
19103#undef __need_inttypes
19104#define __FILE_defined
19105#define _SYS_STDIO_H_
19106#define _flockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_lock ((_LOCK_T *)&(fp)->_lock); })
19107#define _ftrylockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __cygwin_lock_trylock ((_LOCK_T *)&(fp)->_lock))
19108#define _funlockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_unlock ((_LOCK_T *)&(fp)->_lock); })
19109#define __SLBF 0x0001
19110#define __SNBF 0x0002
19111#define __SRD 0x0004
19112#define __SWR 0x0008
19113#define __SRW 0x0010
19114#define __SEOF 0x0020
19115#define __SERR 0x0040
19116#define __SMBF 0x0080
19117#define __SAPP 0x0100
19118#define __SSTR 0x0200
19119#define __SOPT 0x0400
19120#define __SNPT 0x0800
19121#define __SOFF 0x1000
19122#define __SORD 0x2000
19123#define __SCLE 0x4000
19124#define __SL64 0x8000
19125#define __SNLK 0x0001
19126#define __SWID 0x2000
19127#define _IOFBF 0
19128#define _IOLBF 1
19129#define _IONBF 2
19130#define EOF (-1)
19131#define BUFSIZ 1024
19132#define FOPEN_MAX 20
19133#define FILENAME_MAX __FILENAME_MAX__
19134#define L_tmpnam FILENAME_MAX
19135#define P_tmpdir "/tmp"
19136#define SEEK_SET 0
19137#define SEEK_CUR 1
19138#define SEEK_END 2
19139#define TMP_MAX 26
19140#define stdin (_REENT->_stdin)
19141#define stdout (_REENT->_stdout)
19142#define stderr (_REENT->_stderr)
19143#define _stdin_r(x) ((x)->_stdin)
19144#define _stdout_r(x) ((x)->_stdout)
19145#define _stderr_r(x) ((x)->_stderr)
19146#define __VALIST __gnuc_va_list
19147#define fropen(__cookie,__fn) funopen(__cookie, __fn, (int (*)())0, (fpos_t (*)())0, (int (*)())0)
19148#define fwopen(__cookie,__fn) funopen(__cookie, (int (*)())0, __fn, (fpos_t (*)())0, (int (*)())0)
19149#define __sgetc_raw_r(__ptr,__f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++))
19150#define __sfeof(p) ((int)(((p)->_flags & __SEOF) != 0))
19151#define __sferror(p) ((int)(((p)->_flags & __SERR) != 0))
19152#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
19153#define __sfileno(p) ((p)->_file)
19154#define feof(p) __sfeof(p)
19155#define ferror(p) __sferror(p)
19156#define clearerr(p) __sclearerr(p)
19157#define feof_unlocked(p) __sfeof(p)
19158#define ferror_unlocked(p) __sferror(p)
19159#define clearerr_unlocked(p) __sclearerr(p)
19160#define getchar_unlocked() _getchar_unlocked()
19161#define putchar_unlocked(_c) _putchar_unlocked(_c)
19162#define fast_putc(x,p) (--(p)->_w < 0 ? __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0))
19163#define L_cuserid 9
19164#define L_ctermid 16
19165#define _SSP_STDIO_H_
19166#define _SSP_SSP_H_
19167#define __ssp_real_(fun) __ssp_real_ ## fun
19168#define __ssp_real(fun) __ssp_real_(fun)
19169#define __ssp_inline extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
19170#define __ssp_bos(ptr) __builtin_object_size(ptr, __SSP_FORTIFY_LEVEL > 1)
19171#define __ssp_bos0(ptr) __builtin_object_size(ptr, 0)
19172#define __ssp_check(buf,len,bos) if (bos(buf) != (size_t)-1 && len > bos(buf)) __chk_fail()
19173#define __ssp_decl(rtype,fun,args) rtype __ssp_real_(fun) args __asm__(__ASMNAME(#fun)); __ssp_inline rtype fun args
19174#define __ssp_redirect_raw(rtype,fun,args,call,cond,bos) __ssp_decl(rtype, fun, args) { if (cond) __ssp_check(__buf, __len, bos); return __ssp_real_(fun) call; }
19175#define __ssp_redirect(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos)
19176#define __ssp_redirect0(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos0)
19177#define __ssp_overlap(a,b,l) (((a) <= (b) && (b) < (a) + (l)) || ((b) <= (a) && (a) < (b) + (l)))
19178#define sprintf(str,...) __builtin___sprintf_chk(str, 0, __ssp_bos(str), __VA_ARGS__)
19179#define vsprintf(str,fmt,ap) __builtin___vsprintf_chk(str, 0, __ssp_bos(str), fmt, ap)
19180#define snprintf(str,len,...) __builtin___snprintf_chk(str, len, 0, __ssp_bos(str), __VA_ARGS__)
19181#define vsnprintf(str,len,fmt,ap) __builtin___vsnprintf_chk(str, len, 0, __ssp_bos(str), fmt, ap)
19182#define gets(str) __gets_chk(str, __ssp_bos(str))
19183#define _SYS_STAT_H
19184#define _TIME_H_
19185#define __need_size_t
19186#define __need_NULL
19187#undef __need_ptrdiff_t
19188#undef __need_size_t
19189#undef __need_wchar_t
19190#undef NULL
19191#define NULL ((void *)0)
19192#undef __need_NULL
19193#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19194#define _MACHTIME_H_
19195#define _CLOCKS_PER_SEC_ 1000
19196#define CLOCKS_PER_SEC _CLOCKS_PER_SEC_
19197#define CLK_TCK CLOCKS_PER_SEC
19198#define _SYS__LOCALE_H
19199#define tzname _tzname
19200#define _CYGWIN_TIME_H
19201#define TIMER_RELTIME 0
19202#define _SIGNAL_H_
19203#define _SYS_SIGNAL_H
19204#define _STDINT_H
19205#define _SYS__INTSUP_H
19206#define __STDINT_EXP(x) __ ##x ##__
19207#undef signed
19208#undef unsigned
19209#undef char
19210#undef short
19211#undef int
19212#undef __int20
19213#undef __int20__
19214#undef long
19215#define signed +0
19216#define unsigned +0
19217#define char +0
19218#define short +1
19219#define __int20 +2
19220#define __int20__ +2
19221#define int +2
19222#define long +4
19223#define _INTPTR_EQ_LONG
19224#define __INT8 "hh"
19225#define __INT16 "h"
19226#define __INT32
19227#define __INT64 "l"
19228#define __FAST8 "hh"
19229#define __FAST16 "l"
19230#define __FAST32 "l"
19231#define __FAST64 "l"
19232#define __LEAST8 "hh"
19233#define __LEAST16 "h"
19234#define __LEAST32
19235#define __LEAST64 "l"
19236#undef signed
19237#undef unsigned
19238#undef char
19239#undef short
19240#undef int
19241#undef long
19242#undef __int20
19243#undef __int20__
19244#define __int_least8_t_defined 1
19245#define __int_least16_t_defined 1
19246#define __int_least32_t_defined 1
19247#define __int_least64_t_defined 1
19248#define __int_fast8_t_defined 1
19249#define __int_fast16_t_defined 1
19250#define __int_fast32_t_defined 1
19251#define __int_fast64_t_defined 1
19252#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
19253#define INTPTR_MAX (__INTPTR_MAX__)
19254#define UINTPTR_MAX (__UINTPTR_MAX__)
19255#define INT8_MIN (-__INT8_MAX__ - 1)
19256#define INT8_MAX (__INT8_MAX__)
19257#define UINT8_MAX (__UINT8_MAX__)
19258#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
19259#define INT_LEAST8_MAX (__INT_LEAST8_MAX__)
19260#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)
19261#define INT16_MIN (-__INT16_MAX__ - 1)
19262#define INT16_MAX (__INT16_MAX__)
19263#define UINT16_MAX (__UINT16_MAX__)
19264#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
19265#define INT_LEAST16_MAX (__INT_LEAST16_MAX__)
19266#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)
19267#define INT32_MIN (-__INT32_MAX__ - 1)
19268#define INT32_MAX (__INT32_MAX__)
19269#define UINT32_MAX (__UINT32_MAX__)
19270#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
19271#define INT_LEAST32_MAX (__INT_LEAST32_MAX__)
19272#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)
19273#define INT64_MIN (-__INT64_MAX__ - 1)
19274#define INT64_MAX (__INT64_MAX__)
19275#define UINT64_MAX (__UINT64_MAX__)
19276#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
19277#define INT_LEAST64_MAX (__INT_LEAST64_MAX__)
19278#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)
19279#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
19280#define INT_FAST8_MAX (__INT_FAST8_MAX__)
19281#define UINT_FAST8_MAX (__UINT_FAST8_MAX__)
19282#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
19283#define INT_FAST16_MAX (__INT_FAST16_MAX__)
19284#define UINT_FAST16_MAX (__UINT_FAST16_MAX__)
19285#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
19286#define INT_FAST32_MAX (__INT_FAST32_MAX__)
19287#define UINT_FAST32_MAX (__UINT_FAST32_MAX__)
19288#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
19289#define INT_FAST64_MAX (__INT_FAST64_MAX__)
19290#define UINT_FAST64_MAX (__UINT_FAST64_MAX__)
19291#define INTMAX_MAX (__INTMAX_MAX__)
19292#define INTMAX_MIN (-INTMAX_MAX - 1)
19293#define UINTMAX_MAX (__UINTMAX_MAX__)
19294#define SIZE_MAX (__SIZE_MAX__)
19295#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
19296#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))
19297#define PTRDIFF_MAX (__PTRDIFF_MAX__)
19298#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
19299#define WCHAR_MIN (__WCHAR_MIN__)
19300#define WCHAR_MAX (__WCHAR_MAX__)
19301#define WINT_MAX (__WINT_MAX__)
19302#define WINT_MIN (__WINT_MIN__)
19303#define INT8_C(x) __INT8_C(x)
19304#define UINT8_C(x) __UINT8_C(x)
19305#define INT16_C(x) __INT16_C(x)
19306#define UINT16_C(x) __UINT16_C(x)
19307#define INT32_C(x) __INT32_C(x)
19308#define UINT32_C(x) __UINT32_C(x)
19309#define INT64_C(x) __INT64_C(x)
19310#define UINT64_C(x) __UINT64_C(x)
19311#define INTMAX_C(x) __INTMAX_C(x)
19312#define UINTMAX_C(x) __UINTMAX_C(x)
19313#define _GCC_WRAP_STDINT_H
19314#define _CYGWIN_SIGNAL_H
19315#define __COPY_CONTEXT_SIZE 816
19316#pragma pack(push,4)
19317#define __SI_PAD_SIZE 32
19318#pragma pack(pop)
19319#define SI_USER SI_USER
19320#define SI_ASYNCIO SI_ASYNCIO
19321#define SI_MESGQ SI_MESGQ
19322#define SI_TIMER SI_TIMER
19323#define SI_QUEUE SI_QUEUE
19324#define SI_KERNEL SI_KERNEL
19325#define ILL_ILLOPC ILL_ILLOPC
19326#define ILL_ILLOPN ILL_ILLOPN
19327#define ILL_ILLADR ILL_ILLADR
19328#define ILL_ILLTRP ILL_ILLTRP
19329#define ILL_PRVOPC ILL_PRVOPC
19330#define ILL_PRVREG ILL_PRVREG
19331#define ILL_COPROC ILL_COPROC
19332#define ILL_BADSTK ILL_BADSTK
19333#define FPE_INTDIV FPE_INTDIV
19334#define FPE_INTOVF FPE_INTOVF
19335#define FPE_FLTDIV FPE_FLTDIV
19336#define FPE_FLTOVF FPE_FLTOVF
19337#define FPE_FLTUND FPE_FLTUND
19338#define FPE_FLTRES FPE_FLTRES
19339#define FPE_FLTINV FPE_FLTINV
19340#define FPE_FLTSUB FPE_FLTSUB
19341#define SEGV_MAPERR SEGV_MAPERR
19342#define SEGV_ACCERR SEGV_ACCERR
19343#define BUS_ADRALN BUS_ADRALN
19344#define BUS_ADRERR BUS_ADRERR
19345#define BUS_OBJERR BUS_OBJERR
19346#define CLD_EXITED CLD_EXITED
19347#define CLD_KILLED CLD_KILLED
19348#define CLD_DUMPED CLD_DUMPED
19349#define CLD_TRAPPED CLD_TRAPPED
19350#define CLD_STOPPED CLD_STOPPED
19351#define CLD_CONTINUED CLD_CONTINUED
19352#define SIGEV_SIGNAL SIGEV_SIGNAL
19353#define SIGEV_NONE SIGEV_NONE
19354#define SIGEV_THREAD SIGEV_THREAD
19355#define SA_NOCLDSTOP 1
19356#define SA_SIGINFO 2
19357#define SA_RESTART 0x10000000
19358#define SA_ONSTACK 0x20000000
19359#define SA_NODEFER 0x40000000
19360#define SA_RESETHAND 0x80000000
19361#define SA_ONESHOT SA_RESETHAND
19362#define SA_NOMASK SA_NODEFER
19363#define _SA_INTERNAL_MASK 0xf000
19364#undef MINSIGSTKSZ
19365#define MINSIGSTKSZ 8192
19366#undef SIGSTKSZ
19367#define SIGSTKSZ 32768
19368#define SIGHUP 1
19369#define SIGINT 2
19370#define SIGQUIT 3
19371#define SIGILL 4
19372#define SIGTRAP 5
19373#define SIGABRT 6
19374#define SIGIOT SIGABRT
19375#define SIGEMT 7
19376#define SIGFPE 8
19377#define SIGKILL 9
19378#define SIGBUS 10
19379#define SIGSEGV 11
19380#define SIGSYS 12
19381#define SIGPIPE 13
19382#define SIGALRM 14
19383#define SIGTERM 15
19384#define SIGURG 16
19385#define SIGSTOP 17
19386#define SIGTSTP 18
19387#define SIGCONT 19
19388#define SIGCHLD 20
19389#define SIGCLD 20
19390#define SIGTTIN 21
19391#define SIGTTOU 22
19392#define SIGIO 23
19393#define SIGPOLL SIGIO
19394#define SIGXCPU 24
19395#define SIGXFSZ 25
19396#define SIGVTALRM 26
19397#define SIGPROF 27
19398#define SIGWINCH 28
19399#define SIGLOST 29
19400#define SIGPWR SIGLOST
19401#define SIGUSR1 30
19402#define SIGUSR2 31
19403#define _NSIG 65
19404#define NSIG _NSIG
19405#define SIGRTMIN 32
19406#define SIGRTMAX (_NSIG - 1)
19407#define SIG_HOLD ((_sig_func_ptr)2)
19408#define SS_ONSTACK 0x1
19409#define SS_DISABLE 0x2
19410#define SIG_SETMASK 0
19411#define SIG_BLOCK 1
19412#define SIG_UNBLOCK 2
19413#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("4294967295") - 1)
19414#define _SYS_UCONTEXT_H_
19415#define SIG_DFL ((_sig_func_ptr)0)
19416#define SIG_IGN ((_sig_func_ptr)1)
19417#define SIG_ERR ((_sig_func_ptr)-1)
19418#define CLOCK_ENABLED 1
19419#define CLOCK_DISABLED 0
19420#define CLOCK_ALLOWED 1
19421#define CLOCK_DISALLOWED 0
19422#define TIMER_ABSTIME 4
19423#define CLOCK_REALTIME_COARSE ((clockid_t) 0)
19424#define CLOCK_REALTIME ((clockid_t) 1)
19425#define CLOCK_PROCESS_CPUTIME_ID ((clockid_t) 2)
19426#define CLOCK_THREAD_CPUTIME_ID ((clockid_t) 3)
19427#define CLOCK_MONOTONIC ((clockid_t) 4)
19428#define CLOCK_MONOTONIC_RAW ((clockid_t) 5)
19429#define CLOCK_MONOTONIC_COARSE ((clockid_t) 6)
19430#define CLOCK_BOOTTIME ((clockid_t) 7)
19431#define CLOCK_REALTIME_ALARM ((clockid_t) 8)
19432#define CLOCK_BOOTTIME_ALARM ((clockid_t) 9)
19433#define _CYGWIN_STAT_H
19434#define st_atime st_atim.tv_sec
19435#define st_mtime st_mtim.tv_sec
19436#define st_ctime st_ctim.tv_sec
19437#define st_birthtime st_birthtim.tv_sec
19438#define S_TYPEISMQ(buf) ((void)(buf)->st_mode,0)
19439#define S_TYPEISSEM(buf) ((void)(buf)->st_mode,0)
19440#define S_TYPEISSHM(buf) ((void)(buf)->st_mode,0)
19441#define _IFMT 0170000
19442#define _IFDIR 0040000
19443#define _IFCHR 0020000
19444#define _IFBLK 0060000
19445#define _IFREG 0100000
19446#define _IFLNK 0120000
19447#define _IFSOCK 0140000
19448#define _IFIFO 0010000
19449#define S_BLKSIZE 1024
19450#define S_ISUID 0004000
19451#define S_ISGID 0002000
19452#define S_ISVTX 0001000
19453#define S_IREAD 0000400
19454#define S_IWRITE 0000200
19455#define S_IEXEC 0000100
19456#define S_ENFMT 0002000
19457#define S_IFMT _IFMT
19458#define S_IFDIR _IFDIR
19459#define S_IFCHR _IFCHR
19460#define S_IFBLK _IFBLK
19461#define S_IFREG _IFREG
19462#define S_IFLNK _IFLNK
19463#define S_IFSOCK _IFSOCK
19464#define S_IFIFO _IFIFO
19465#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
19466#define S_IRUSR 0000400
19467#define S_IWUSR 0000200
19468#define S_IXUSR 0000100
19469#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
19470#define S_IRGRP 0000040
19471#define S_IWGRP 0000020
19472#define S_IXGRP 0000010
19473#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
19474#define S_IROTH 0000004
19475#define S_IWOTH 0000002
19476#define S_IXOTH 0000001
19477#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
19478#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
19479#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
19480#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK)
19481#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR)
19482#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
19483#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)
19484#define S_ISREG(m) (((m)&_IFMT) == _IFREG)
19485#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK)
19486#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)
19487#define UTIME_NOW -2L
19488#define UTIME_OMIT -1L
19489#define _STDLIB_H_
19490#define __need_size_t
19491#define __need_wchar_t
19492#define __need_NULL
19493#undef __need_ptrdiff_t
19494#undef __need_size_t
19495#undef __need_wchar_t
19496#undef NULL
19497#define NULL ((void *)0)
19498#undef __need_NULL
19499#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19500#define _MACHSTDLIB_H_
19501#define _NEWLIB_ALLOCA_H
19502#undef alloca
19503#define alloca(size) __builtin_alloca(size)
19504#define _CYGWIN_STDLIB_H
19505#define _CYGWIN_WAIT_H
19506#define WAIT_ANY (pid_t)-1
19507#define WAIT_MYPGRP (pid_t)0
19508#define WNOHANG 1
19509#define WUNTRACED 2
19510#define WCONTINUED 8
19511#define __W_CONTINUED 0xffff
19512#define WIFEXITED(_w) (((_w) & 0xff) == 0)
19513#define WIFSIGNALED(_w) (((_w) & 0x7f) > 0 && (((_w) & 0x7f) < 0x7f))
19514#define WIFSTOPPED(_w) (((_w) & 0xff) == 0x7f)
19515#define WIFCONTINUED(_w) (((_w) & 0xffff) == __W_CONTINUED)
19516#define WEXITSTATUS(_w) (((_w) >> 8) & 0xff)
19517#define WTERMSIG(_w) ((_w) & 0x7f)
19518#define WSTOPSIG WEXITSTATUS
19519#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & 0x80))
19520#undef _malloc_r
19521#define _malloc_r(r,s) malloc (s)
19522#undef _free_r
19523#define _free_r(r,p) free (p)
19524#undef _realloc_r
19525#define _realloc_r(r,p,s) realloc (p, s)
19526#undef _calloc_r
19527#define _calloc_r(r,s1,s2) calloc (s1, s2);
19528#undef _memalign_r
19529#define _memalign_r(r,s1,s2) memalign (s1, s2);
19530#undef _mallinfo_r
19531#define _mallinfo_r(r) mallinfo ()
19532#undef _malloc_stats_r
19533#define _malloc_stats_r(r) malloc_stats ()
19534#undef _mallopt_r
19535#define _mallopt_r(i1,i2) mallopt (i1, i2)
19536#undef _malloc_usable_size_r
19537#define _malloc_usable_size_r(r,p) malloc_usable_size (p)
19538#undef _valloc_r
19539#define _valloc_r(r,s) valloc (s)
19540#undef _pvalloc_r
19541#define _pvalloc_r(r,s) pvalloc (s)
19542#undef _malloc_trim_r
19543#define _malloc_trim_r(r,s) malloc_trim (s)
19544#undef _mstats_r
19545#define _mstats_r(r,p) mstats (p)
19546#define __compar_fn_t_defined
19547#define EXIT_FAILURE 1
19548#define EXIT_SUCCESS 0
19549#define RAND_MAX __RAND_MAX
19550#define MB_CUR_MAX __locale_mb_cur_max()
19551#define strtodf strtof
19552#define _SSP_STDLIB_H_
19553#define _STRING_H_
19554#define __need_size_t
19555#define __need_NULL
19556#undef __need_ptrdiff_t
19557#undef __need_size_t
19558#undef __need_wchar_t
19559#undef NULL
19560#define NULL ((void *)0)
19561#undef __need_NULL
19562#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19563#define _STRINGS_H_
19564#define _SSP_STRINGS_H_
19565#define bcopy(src,dst,len) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___memmove_chk(dst, src, len, __ssp_bos0(dst)) : __memmove_ichk(dst, src, len))
19566#define bzero(dst,len) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___memset_chk(dst, 0, len, __ssp_bos0(dst)) : __memset_ichk(dst, 0, len))
19567#define strdupa(__s) (__extension__ ({const char *__sin = (__s); size_t __len = strlen (__sin) + 1; char * __sout = (char *) __builtin_alloca (__len); (char *) memcpy (__sout, __sin, __len);}))
19568#define strndupa(__s,__n) (__extension__ ({const char *__sin = (__s); size_t __len = strnlen (__sin, (__n)) + 1; char *__sout = (char *) __builtin_alloca (__len); __sout[__len-1] = '\0'; (char *) memcpy (__sout, __sin, __len-1);}))
19569#define basename basename
19570#define _SSP_STRING_H_
19571#define __ssp_bos_check3(fun,dst,src,len) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___ ## fun ## _chk(dst, src, len, __ssp_bos0(dst)) : __ ## fun ## _ichk(dst, src, len))
19572#define __ssp_bos_check2(fun,dst,src) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___ ## fun ## _chk(dst, src, __ssp_bos0(dst)) : __ ## fun ## _ichk(dst, src))
19573#define __ssp_bos_icheck3_restrict(fun,type1,type2) __ssp_inline type1 __ ## fun ## _ichk(type1 __restrict, type2 __restrict, size_t); __ssp_inline type1 __ ## fun ## _ichk(type1 __restrict dst, type2 __restrict src, size_t len) { return __builtin___ ## fun ## _chk(dst, src, len, __ssp_bos0(dst)); }
19574#define __ssp_bos_icheck3(fun,type1,type2) __ssp_inline type1 __ ## fun ## _ichk(type1, type2, size_t); __ssp_inline type1 __ ## fun ## _ichk(type1 dst, type2 src, size_t len) { return __builtin___ ## fun ## _chk(dst, src, len, __ssp_bos0(dst)); }
19575#define __ssp_bos_icheck2_restrict(fun,type1,type2) __ssp_inline type1 __ ## fun ## _ichk(type1, type2); __ssp_inline type1 __ ## fun ## _ichk(type1 __restrict dst, type2 __restrict src) { return __builtin___ ## fun ## _chk(dst, src, __ssp_bos0(dst)); }
19576#define memcpy(dst,src,len) __ssp_bos_check3(memcpy, dst, src, len)
19577#define memmove(dst,src,len) __ssp_bos_check3(memmove, dst, src, len)
19578#define mempcpy(dst,src,len) __ssp_bos_check3(mempcpy, dst, src, len)
19579#define memset(dst,val,len) __ssp_bos_check3(memset, dst, val, len)
19580#define stpcpy(dst,src) __ssp_bos_check2(stpcpy, dst, src)
19581#define stpncpy(dst,src,len) __ssp_bos_check3(stpncpy, dst, src, len)
19582#define strcpy(dst,src) __ssp_bos_check2(strcpy, dst, src)
19583#define strcat(dst,src) __ssp_bos_check2(strcat, dst, src)
19584#define strncpy(dst,src,len) __ssp_bos_check3(strncpy, dst, src, len)
19585#define strncat(dst,src,len) __ssp_bos_check3(strncat, dst, src, len)
19586#define _INTTYPES_H
19587#define __need_wchar_t
19588#undef __need_ptrdiff_t
19589#undef __need_size_t
19590#undef __need_wchar_t
19591#undef NULL
19592#define NULL ((void *)0)
19593#undef __need_NULL
19594#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19595#define __STRINGIFY(a) #a
19596#define __PRI8(x) __INT8 __STRINGIFY(x)
19597#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x)
19598#define __PRI8FAST(x) __FAST8 __STRINGIFY(x)
19599#define __SCN8(x) __INT8 __STRINGIFY(x)
19600#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x)
19601#define __SCN8FAST(x) __FAST8 __STRINGIFY(x)
19602#define PRId8 __PRI8(d)
19603#define PRIi8 __PRI8(i)
19604#define PRIo8 __PRI8(o)
19605#define PRIu8 __PRI8(u)
19606#define PRIx8 __PRI8(x)
19607#define PRIX8 __PRI8(X)
19608#define SCNd8 __SCN8(d)
19609#define SCNi8 __SCN8(i)
19610#define SCNo8 __SCN8(o)
19611#define SCNu8 __SCN8(u)
19612#define SCNx8 __SCN8(x)
19613#define PRIdLEAST8 __PRI8LEAST(d)
19614#define PRIiLEAST8 __PRI8LEAST(i)
19615#define PRIoLEAST8 __PRI8LEAST(o)
19616#define PRIuLEAST8 __PRI8LEAST(u)
19617#define PRIxLEAST8 __PRI8LEAST(x)
19618#define PRIXLEAST8 __PRI8LEAST(X)
19619#define SCNdLEAST8 __SCN8LEAST(d)
19620#define SCNiLEAST8 __SCN8LEAST(i)
19621#define SCNoLEAST8 __SCN8LEAST(o)
19622#define SCNuLEAST8 __SCN8LEAST(u)
19623#define SCNxLEAST8 __SCN8LEAST(x)
19624#define PRIdFAST8 __PRI8FAST(d)
19625#define PRIiFAST8 __PRI8FAST(i)
19626#define PRIoFAST8 __PRI8FAST(o)
19627#define PRIuFAST8 __PRI8FAST(u)
19628#define PRIxFAST8 __PRI8FAST(x)
19629#define PRIXFAST8 __PRI8FAST(X)
19630#define SCNdFAST8 __SCN8FAST(d)
19631#define SCNiFAST8 __SCN8FAST(i)
19632#define SCNoFAST8 __SCN8FAST(o)
19633#define SCNuFAST8 __SCN8FAST(u)
19634#define SCNxFAST8 __SCN8FAST(x)
19635#define __PRI16(x) __INT16 __STRINGIFY(x)
19636#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x)
19637#define __PRI16FAST(x) __FAST16 __STRINGIFY(x)
19638#define __SCN16(x) __INT16 __STRINGIFY(x)
19639#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x)
19640#define __SCN16FAST(x) __FAST16 __STRINGIFY(x)
19641#define PRId16 __PRI16(d)
19642#define PRIi16 __PRI16(i)
19643#define PRIo16 __PRI16(o)
19644#define PRIu16 __PRI16(u)
19645#define PRIx16 __PRI16(x)
19646#define PRIX16 __PRI16(X)
19647#define SCNd16 __SCN16(d)
19648#define SCNi16 __SCN16(i)
19649#define SCNo16 __SCN16(o)
19650#define SCNu16 __SCN16(u)
19651#define SCNx16 __SCN16(x)
19652#define PRIdLEAST16 __PRI16LEAST(d)
19653#define PRIiLEAST16 __PRI16LEAST(i)
19654#define PRIoLEAST16 __PRI16LEAST(o)
19655#define PRIuLEAST16 __PRI16LEAST(u)
19656#define PRIxLEAST16 __PRI16LEAST(x)
19657#define PRIXLEAST16 __PRI16LEAST(X)
19658#define SCNdLEAST16 __SCN16LEAST(d)
19659#define SCNiLEAST16 __SCN16LEAST(i)
19660#define SCNoLEAST16 __SCN16LEAST(o)
19661#define SCNuLEAST16 __SCN16LEAST(u)
19662#define SCNxLEAST16 __SCN16LEAST(x)
19663#define PRIdFAST16 __PRI16FAST(d)
19664#define PRIiFAST16 __PRI16FAST(i)
19665#define PRIoFAST16 __PRI16FAST(o)
19666#define PRIuFAST16 __PRI16FAST(u)
19667#define PRIxFAST16 __PRI16FAST(x)
19668#define PRIXFAST16 __PRI16FAST(X)
19669#define SCNdFAST16 __SCN16FAST(d)
19670#define SCNiFAST16 __SCN16FAST(i)
19671#define SCNoFAST16 __SCN16FAST(o)
19672#define SCNuFAST16 __SCN16FAST(u)
19673#define SCNxFAST16 __SCN16FAST(x)
19674#define __PRI32(x) __INT32 __STRINGIFY(x)
19675#define __SCN32(x) __INT32 __STRINGIFY(x)
19676#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x)
19677#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x)
19678#define __PRI32FAST(x) __FAST32 __STRINGIFY(x)
19679#define __SCN32FAST(x) __FAST32 __STRINGIFY(x)
19680#define PRId32 __PRI32(d)
19681#define PRIi32 __PRI32(i)
19682#define PRIo32 __PRI32(o)
19683#define PRIu32 __PRI32(u)
19684#define PRIx32 __PRI32(x)
19685#define PRIX32 __PRI32(X)
19686#define SCNd32 __SCN32(d)
19687#define SCNi32 __SCN32(i)
19688#define SCNo32 __SCN32(o)
19689#define SCNu32 __SCN32(u)
19690#define SCNx32 __SCN32(x)
19691#define PRIdLEAST32 __PRI32LEAST(d)
19692#define PRIiLEAST32 __PRI32LEAST(i)
19693#define PRIoLEAST32 __PRI32LEAST(o)
19694#define PRIuLEAST32 __PRI32LEAST(u)
19695#define PRIxLEAST32 __PRI32LEAST(x)
19696#define PRIXLEAST32 __PRI32LEAST(X)
19697#define SCNdLEAST32 __SCN32LEAST(d)
19698#define SCNiLEAST32 __SCN32LEAST(i)
19699#define SCNoLEAST32 __SCN32LEAST(o)
19700#define SCNuLEAST32 __SCN32LEAST(u)
19701#define SCNxLEAST32 __SCN32LEAST(x)
19702#define PRIdFAST32 __PRI32FAST(d)
19703#define PRIiFAST32 __PRI32FAST(i)
19704#define PRIoFAST32 __PRI32FAST(o)
19705#define PRIuFAST32 __PRI32FAST(u)
19706#define PRIxFAST32 __PRI32FAST(x)
19707#define PRIXFAST32 __PRI32FAST(X)
19708#define SCNdFAST32 __SCN32FAST(d)
19709#define SCNiFAST32 __SCN32FAST(i)
19710#define SCNoFAST32 __SCN32FAST(o)
19711#define SCNuFAST32 __SCN32FAST(u)
19712#define SCNxFAST32 __SCN32FAST(x)
19713#define __PRI64(x) __INT64 __STRINGIFY(x)
19714#define __SCN64(x) __INT64 __STRINGIFY(x)
19715#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x)
19716#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x)
19717#define __PRI64FAST(x) __FAST64 __STRINGIFY(x)
19718#define __SCN64FAST(x) __FAST64 __STRINGIFY(x)
19719#define PRId64 __PRI64(d)
19720#define PRIi64 __PRI64(i)
19721#define PRIo64 __PRI64(o)
19722#define PRIu64 __PRI64(u)
19723#define PRIx64 __PRI64(x)
19724#define PRIX64 __PRI64(X)
19725#define SCNd64 __SCN64(d)
19726#define SCNi64 __SCN64(i)
19727#define SCNo64 __SCN64(o)
19728#define SCNu64 __SCN64(u)
19729#define SCNx64 __SCN64(x)
19730#define PRIdLEAST64 __PRI64LEAST(d)
19731#define PRIiLEAST64 __PRI64LEAST(i)
19732#define PRIoLEAST64 __PRI64LEAST(o)
19733#define PRIuLEAST64 __PRI64LEAST(u)
19734#define PRIxLEAST64 __PRI64LEAST(x)
19735#define PRIXLEAST64 __PRI64LEAST(X)
19736#define SCNdLEAST64 __SCN64LEAST(d)
19737#define SCNiLEAST64 __SCN64LEAST(i)
19738#define SCNoLEAST64 __SCN64LEAST(o)
19739#define SCNuLEAST64 __SCN64LEAST(u)
19740#define SCNxLEAST64 __SCN64LEAST(x)
19741#define PRIdFAST64 __PRI64FAST(d)
19742#define PRIiFAST64 __PRI64FAST(i)
19743#define PRIoFAST64 __PRI64FAST(o)
19744#define PRIuFAST64 __PRI64FAST(u)
19745#define PRIxFAST64 __PRI64FAST(x)
19746#define PRIXFAST64 __PRI64FAST(X)
19747#define SCNdFAST64 __SCN64FAST(d)
19748#define SCNiFAST64 __SCN64FAST(i)
19749#define SCNoFAST64 __SCN64FAST(o)
19750#define SCNuFAST64 __SCN64FAST(u)
19751#define SCNxFAST64 __SCN64FAST(x)
19752#define __PRIMAX(x) __STRINGIFY(l ##x)
19753#define __SCNMAX(x) __STRINGIFY(l ##x)
19754#define PRIdMAX __PRIMAX(d)
19755#define PRIiMAX __PRIMAX(i)
19756#define PRIoMAX __PRIMAX(o)
19757#define PRIuMAX __PRIMAX(u)
19758#define PRIxMAX __PRIMAX(x)
19759#define PRIXMAX __PRIMAX(X)
19760#define SCNdMAX __SCNMAX(d)
19761#define SCNiMAX __SCNMAX(i)
19762#define SCNoMAX __SCNMAX(o)
19763#define SCNuMAX __SCNMAX(u)
19764#define SCNxMAX __SCNMAX(x)
19765#define __PRIPTR(x) __STRINGIFY(l ##x)
19766#define __SCNPTR(x) __STRINGIFY(l ##x)
19767#define PRIdPTR __PRIPTR(d)
19768#define PRIiPTR __PRIPTR(i)
19769#define PRIoPTR __PRIPTR(o)
19770#define PRIuPTR __PRIPTR(u)
19771#define PRIxPTR __PRIPTR(x)
19772#define PRIXPTR __PRIPTR(X)
19773#define SCNdPTR __SCNPTR(d)
19774#define SCNiPTR __SCNPTR(i)
19775#define SCNoPTR __SCNPTR(o)
19776#define SCNuPTR __SCNPTR(u)
19777#define SCNxPTR __SCNPTR(x)
19778#define _STDALIGN_H
19779#define alignas _Alignas
19780#define alignof _Alignof
19781#define __alignas_is_defined 1
19782#define __alignof_is_defined 1
19783#define _UNISTD_H_
19784#define _SYS_UNISTD_H
19785#define __need_size_t
19786#define __need_ptrdiff_t
19787#undef __need_ptrdiff_t
19788#undef __need_size_t
19789#undef __need_wchar_t
19790#undef NULL
19791#define NULL ((void *)0)
19792#undef __need_NULL
19793#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19794#define F_ULOCK 0
19795#define F_LOCK 1
19796#define F_TLOCK 2
19797#define F_TEST 3
19798#define __UNISTD_GETOPT__
19799#define __GETOPT_H__
19800#undef __UNISTD_GETOPT__
19801#define F_OK 0
19802#define R_OK 4
19803#define W_OK 2
19804#define X_OK 1
19805#define SEEK_SET 0
19806#define SEEK_CUR 1
19807#define SEEK_END 2
19808#define STDIN_FILENO 0
19809#define STDOUT_FILENO 1
19810#define STDERR_FILENO 2
19811#define _SC_ARG_MAX 0
19812#define _SC_CHILD_MAX 1
19813#define _SC_CLK_TCK 2
19814#define _SC_NGROUPS_MAX 3
19815#define _SC_OPEN_MAX 4
19816#define _SC_JOB_CONTROL 5
19817#define _SC_SAVED_IDS 6
19818#define _SC_VERSION 7
19819#define _SC_PAGESIZE 8
19820#define _SC_PAGE_SIZE _SC_PAGESIZE
19821#define _SC_NPROCESSORS_CONF 9
19822#define _SC_NPROCESSORS_ONLN 10
19823#define _SC_PHYS_PAGES 11
19824#define _SC_AVPHYS_PAGES 12
19825#define _SC_MQ_OPEN_MAX 13
19826#define _SC_MQ_PRIO_MAX 14
19827#define _SC_RTSIG_MAX 15
19828#define _SC_SEM_NSEMS_MAX 16
19829#define _SC_SEM_VALUE_MAX 17
19830#define _SC_SIGQUEUE_MAX 18
19831#define _SC_TIMER_MAX 19
19832#define _SC_TZNAME_MAX 20
19833#define _SC_ASYNCHRONOUS_IO 21
19834#define _SC_FSYNC 22
19835#define _SC_MAPPED_FILES 23
19836#define _SC_MEMLOCK 24
19837#define _SC_MEMLOCK_RANGE 25
19838#define _SC_MEMORY_PROTECTION 26
19839#define _SC_MESSAGE_PASSING 27
19840#define _SC_PRIORITIZED_IO 28
19841#define _SC_REALTIME_SIGNALS 29
19842#define _SC_SEMAPHORES 30
19843#define _SC_SHARED_MEMORY_OBJECTS 31
19844#define _SC_SYNCHRONIZED_IO 32
19845#define _SC_TIMERS 33
19846#define _SC_AIO_LISTIO_MAX 34
19847#define _SC_AIO_MAX 35
19848#define _SC_AIO_PRIO_DELTA_MAX 36
19849#define _SC_DELAYTIMER_MAX 37
19850#define _SC_THREAD_KEYS_MAX 38
19851#define _SC_THREAD_STACK_MIN 39
19852#define _SC_THREAD_THREADS_MAX 40
19853#define _SC_TTY_NAME_MAX 41
19854#define _SC_THREADS 42
19855#define _SC_THREAD_ATTR_STACKADDR 43
19856#define _SC_THREAD_ATTR_STACKSIZE 44
19857#define _SC_THREAD_PRIORITY_SCHEDULING 45
19858#define _SC_THREAD_PRIO_INHERIT 46
19859#define _SC_THREAD_PRIO_PROTECT 47
19860#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
19861#define _SC_THREAD_PROCESS_SHARED 48
19862#define _SC_THREAD_SAFE_FUNCTIONS 49
19863#define _SC_GETGR_R_SIZE_MAX 50
19864#define _SC_GETPW_R_SIZE_MAX 51
19865#define _SC_LOGIN_NAME_MAX 52
19866#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
19867#define _SC_ADVISORY_INFO 54
19868#define _SC_ATEXIT_MAX 55
19869#define _SC_BARRIERS 56
19870#define _SC_BC_BASE_MAX 57
19871#define _SC_BC_DIM_MAX 58
19872#define _SC_BC_SCALE_MAX 59
19873#define _SC_BC_STRING_MAX 60
19874#define _SC_CLOCK_SELECTION 61
19875#define _SC_COLL_WEIGHTS_MAX 62
19876#define _SC_CPUTIME 63
19877#define _SC_EXPR_NEST_MAX 64
19878#define _SC_HOST_NAME_MAX 65
19879#define _SC_IOV_MAX 66
19880#define _SC_IPV6 67
19881#define _SC_LINE_MAX 68
19882#define _SC_MONOTONIC_CLOCK 69
19883#define _SC_RAW_SOCKETS 70
19884#define _SC_READER_WRITER_LOCKS 71
19885#define _SC_REGEXP 72
19886#define _SC_RE_DUP_MAX 73
19887#define _SC_SHELL 74
19888#define _SC_SPAWN 75
19889#define _SC_SPIN_LOCKS 76
19890#define _SC_SPORADIC_SERVER 77
19891#define _SC_SS_REPL_MAX 78
19892#define _SC_SYMLOOP_MAX 79
19893#define _SC_THREAD_CPUTIME 80
19894#define _SC_THREAD_SPORADIC_SERVER 81
19895#define _SC_TIMEOUTS 82
19896#define _SC_TRACE 83
19897#define _SC_TRACE_EVENT_FILTER 84
19898#define _SC_TRACE_EVENT_NAME_MAX 85
19899#define _SC_TRACE_INHERIT 86
19900#define _SC_TRACE_LOG 87
19901#define _SC_TRACE_NAME_MAX 88
19902#define _SC_TRACE_SYS_MAX 89
19903#define _SC_TRACE_USER_EVENT_MAX 90
19904#define _SC_TYPED_MEMORY_OBJECTS 91
19905#define _SC_V7_ILP32_OFF32 92
19906#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
19907#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
19908#define _SC_V7_ILP32_OFFBIG 93
19909#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
19910#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
19911#define _SC_V7_LP64_OFF64 94
19912#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
19913#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
19914#define _SC_V7_LPBIG_OFFBIG 95
19915#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
19916#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
19917#define _SC_XOPEN_CRYPT 96
19918#define _SC_XOPEN_ENH_I18N 97
19919#define _SC_XOPEN_LEGACY 98
19920#define _SC_XOPEN_REALTIME 99
19921#define _SC_STREAM_MAX 100
19922#define _SC_PRIORITY_SCHEDULING 101
19923#define _SC_XOPEN_REALTIME_THREADS 102
19924#define _SC_XOPEN_SHM 103
19925#define _SC_XOPEN_STREAMS 104
19926#define _SC_XOPEN_UNIX 105
19927#define _SC_XOPEN_VERSION 106
19928#define _SC_2_CHAR_TERM 107
19929#define _SC_2_C_BIND 108
19930#define _SC_2_C_DEV 109
19931#define _SC_2_FORT_DEV 110
19932#define _SC_2_FORT_RUN 111
19933#define _SC_2_LOCALEDEF 112
19934#define _SC_2_PBS 113
19935#define _SC_2_PBS_ACCOUNTING 114
19936#define _SC_2_PBS_CHECKPOINT 115
19937#define _SC_2_PBS_LOCATE 116
19938#define _SC_2_PBS_MESSAGE 117
19939#define _SC_2_PBS_TRACK 118
19940#define _SC_2_SW_DEV 119
19941#define _SC_2_UPE 120
19942#define _SC_2_VERSION 121
19943#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
19944#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
19945#define _SC_XOPEN_UUCP 124
19946#define _SC_LEVEL1_ICACHE_SIZE 125
19947#define _SC_LEVEL1_ICACHE_ASSOC 126
19948#define _SC_LEVEL1_ICACHE_LINESIZE 127
19949#define _SC_LEVEL1_DCACHE_SIZE 128
19950#define _SC_LEVEL1_DCACHE_ASSOC 129
19951#define _SC_LEVEL1_DCACHE_LINESIZE 130
19952#define _SC_LEVEL2_CACHE_SIZE 131
19953#define _SC_LEVEL2_CACHE_ASSOC 132
19954#define _SC_LEVEL2_CACHE_LINESIZE 133
19955#define _SC_LEVEL3_CACHE_SIZE 134
19956#define _SC_LEVEL3_CACHE_ASSOC 135
19957#define _SC_LEVEL3_CACHE_LINESIZE 136
19958#define _SC_LEVEL4_CACHE_SIZE 137
19959#define _SC_LEVEL4_CACHE_ASSOC 138
19960#define _SC_LEVEL4_CACHE_LINESIZE 139
19961#define _SC_POSIX_26_VERSION 140
19962#define _PC_LINK_MAX 0
19963#define _PC_MAX_CANON 1
19964#define _PC_MAX_INPUT 2
19965#define _PC_NAME_MAX 3
19966#define _PC_PATH_MAX 4
19967#define _PC_PIPE_BUF 5
19968#define _PC_CHOWN_RESTRICTED 6
19969#define _PC_NO_TRUNC 7
19970#define _PC_VDISABLE 8
19971#define _PC_ASYNC_IO 9
19972#define _PC_PRIO_IO 10
19973#define _PC_SYNC_IO 11
19974#define _PC_FILESIZEBITS 12
19975#define _PC_2_SYMLINKS 13
19976#define _PC_SYMLINK_MAX 14
19977#define _PC_ALLOC_SIZE_MIN 15
19978#define _PC_REC_INCR_XFER_SIZE 16
19979#define _PC_REC_MAX_XFER_SIZE 17
19980#define _PC_REC_MIN_XFER_SIZE 18
19981#define _PC_REC_XFER_ALIGN 19
19982#define _PC_TIMESTAMP_RESOLUTION 20
19983#define _PC_POSIX_PERMISSIONS 90
19984#define _PC_POSIX_SECURITY 91
19985#define _PC_CASE_INSENSITIVE 92
19986#define _CS_PATH 0
19987#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
19988#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
19989#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
19990#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
19991#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
19992#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
19993#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
19994#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
19995#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
19996#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
19997#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
19998#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
19999#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
20000#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
20001#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20002#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20003#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
20004#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20005#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20006#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
20007#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
20008#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20009#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20010#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
20011#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20012#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20013#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
20014#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20015#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20016#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
20017#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
20018#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20019#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20020#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
20021#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20022#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20023#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
20024#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20025#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20026#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
20027#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
20028#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20029#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20030#define _CS_POSIX_V7_THREADS_CFLAGS 18
20031#define _CS_POSIX_V7_THREADS_LDFLAGS 19
20032#define _CS_V7_ENV 20
20033#define _CS_V6_ENV _CS_V7_ENV
20034#define _CS_LFS_CFLAGS 21
20035#define _CS_LFS_LDFLAGS 22
20036#define _CS_LFS_LIBS 23
20037#define _CS_LFS_LINTFLAGS 24
20038#define _SSP_UNISTD_H_
20039#define RBIMPL_DLLEXPORT_H
20040#undef RUBY_EXTERN
20041#define RUBY_EXTERN extern
20042#define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
20043#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN
20044#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END
20045#define MJIT_STATIC static
20046#define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
20047#define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END
20048#define RBIMPL_XMALLOC_H
20049#define RBIMPL_ATTR_ALLOC_SIZE_H
20050#define RBIMPL_HAS_ATTRIBUTE_H
20051#define RBIMPL_HAVE___HAS_ATTRIBUTE 1
20052#define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_)
20053#define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple))
20054#define RBIMPL_ATTR_NODISCARD_H
20055#define RBIMPL_HAS_C_ATTRIBUTE_H
20056#define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)
20057#define RBIMPL_HAS_CPP_ATTRIBUTE_H
20058#define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)
20059#define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
20060#define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
20061#define RBIMPL_ATTR_NOEXCEPT_H
20062#define RBIMPL_HAS_FEATURE_H
20063#define RBIMPL_HAS_FEATURE(_) __has_feature(_)
20064#define RBIMPL_ATTR_NOEXCEPT(_)
20065#define RBIMPL_ATTR_RESTRICT_H
20066#define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__))
20067#define RBIMPL_ATTR_RETURNS_NONNULL_H
20068#define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__))
20069#define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
20070#define xmalloc ruby_xmalloc
20071#define xmalloc2 ruby_xmalloc2
20072#define xcalloc ruby_xcalloc
20073#define xrealloc ruby_xrealloc
20074#define xrealloc2 ruby_xrealloc2
20075#define xfree ruby_xfree
20076#pragma GCC visibility push(default)
20077#pragma GCC visibility pop
20078#define RUBY_BACKWARD2_ASSUME_H
20079#define RBIMPL_ASSUME_H
20080#define RBIMPL_CAST_H
20081#define RBIMPL_HAS_WARNING_H
20082#define RBIMPL_HAS_WARNING(_) 0
20083#define RBIMPL_WARNING_PUSH_H
20084#define RBIMPL_WARNING_PRAGMA0(x) _Pragma(#x)
20085#define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(GCC diagnostic x)
20086#define RBIMPL_WARNING_PRAGMA2(x,y) RBIMPL_WARNING_PRAGMA1(x #y)
20087#define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push)
20088#define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop)
20089#define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag)
20090#define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)
20091#define RBIMPL_CAST(expr) (expr)
20092#define RBIMPL_HAS_BUILTIN_H
20093#define RBIMPL_HAVE___HAS_BUILTIN 1
20094#define RBIMPL_HAS_BUILTIN(_) __has_builtin(_)
20095#define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()
20096#define RBIMPL_UNREACHABLE __builtin_unreachable
20097#define RBIMPL_ASSUME(_) (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
20098#undef ASSUME
20099#undef UNREACHABLE
20100#define ASSUME RBIMPL_ASSUME
20101#define UNREACHABLE RBIMPL_UNREACHABLE()
20102#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN
20103#define RB_LIKELY(x) (__builtin_expect(!!(x), 1))
20104#define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
20105#define RUBY_BACKWARD2_ATTRIBUTES_H
20106#define RBIMPL_ATTR_CONST_H
20107#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H
20108#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _)
20109#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20110#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20111#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20112#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20113#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918)
20114#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20115#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20116#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0)
20117#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20118#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0)
20119#undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow
20120#define RBIMPL_ATTR_CONST() __attribute__((__const__))
20121#define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST()
20122#define RBIMPL_ATTR_DEPRECATED_H
20123#define RBIMPL_HAS_EXTENSION_H
20124#define RBIMPL_HAS_EXTENSION(_) __has_extension(_)
20125#define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))
20126#define RBIMPL_ATTR_DEPRECATED_EXT(msg)
20127#define RBIMPL_ATTR_ERROR_H
20128#define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg))
20129#define RBIMPL_ATTR_FORCEINLINE_H
20130#define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline
20131#define RBIMPL_ATTR_FORMAT_H
20132#define RBIMPL_ATTR_FORMAT(x,y,z) __attribute__((__format__(x, y, z)))
20133#define RBIMPL_PRINTF_FORMAT __printf__
20134#define RBIMPL_ATTR_MAYBE_UNUSED_H
20135#define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
20136#define RBIMPL_ATTR_NOINLINE_H
20137#define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__))
20138#define RBIMPL_ATTR_NONNULL_H
20139#define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list))
20140#define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING
20141#define RBIMPL_ATTR_NORETURN_H
20142#define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__))
20143#define RBIMPL_ATTR_PURE_H
20144#define RUBY_ASSERT_H
20145#define RBIMPL_RUBY_DEBUG 0
20146#define RBIMPL_NDEBUG 0
20147#undef RUBY_DEBUG
20148#undef RUBY_NDEBUG
20149#undef NDEBUG
20150#define RUBY_DEBUG 0
20151#define RUBY_NDEBUG 1
20152#define NDEBUG
20153#undef RBIMPL_NDEBUG
20154#undef RBIMPL_RUBY_DEBUG
20155#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)
20156#pragma GCC visibility push(default)
20157#pragma GCC visibility pop
20158#define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
20159#define RUBY_ASSERT_FAIL(mesg) rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
20160#define RUBY_ASSERT_MESG(expr,mesg) (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
20161#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
20162#define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
20163#define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
20164#define RUBY_ASSERT_MESG_WHEN(cond,expr,mesg) ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
20165#define RUBY_ASSERT_WHEN(cond,expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
20166#define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
20167#define RBIMPL_ATTR_PURE() __attribute__((__pure__))
20168#define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE()
20169#define RBIMPL_ATTR_WARNING_H
20170#define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg))
20171#undef CONSTFUNC
20172#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x
20173#undef PUREFUNC
20174#define PUREFUNC(x) RBIMPL_ATTR_PURE() x
20175#undef DEPRECATED
20176#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x
20177#undef DEPRECATED_BY
20178#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " #n)) x
20179#undef DEPRECATED_TYPE
20180#define DEPRECATED_TYPE(mesg,decl) _Pragma("message \"DEPRECATED_TYPE is deprecated\""); decl RBIMPL_ATTR_DEPRECATED(mseg)
20181#undef RUBY_CXX_DEPRECATED
20182#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))
20183#undef NOINLINE
20184#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x
20185#undef ERRORFUNC
20186#define ERRORFUNC(mesg,x) RBIMPL_ATTR_ERROR(mesg) x
20187#define HAVE_ATTRIBUTE_ERRORFUNC 1
20188#undef WARNINGFUNC
20189#define WARNINGFUNC(mesg,x) RBIMPL_ATTR_WARNING(mesg) x
20190#define HAVE_ATTRIBUTE_WARNINGFUNC 1
20191#undef COLDFUNC
20192#define PRINTF_ARGS(decl,string_index,first_to_check) RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) decl
20193#undef RUBY_ATTR_ALLOC_SIZE
20194#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE
20195#undef RUBY_ATTR_MALLOC
20196#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()
20197#undef RUBY_ATTR_RETURNS_NONNULL
20198#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()
20199#define RUBY_ALIAS_FUNCTION(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
20200#undef RUBY_FUNC_NONNULL
20201#define RUBY_FUNC_NONNULL(n,x) RBIMPL_ATTR_NONNULL(n) x
20202#undef NORETURN
20203#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
20204#define NORETURN_STYLE_NEW
20205#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
20206#undef RB_UNUSED_VAR
20207#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()
20208#define RUBY_BACKWARD2_BOOL_H
20209#define RBIMPL_STDBOOL_H
20210#define _STDBOOL_H
20211#define bool _Bool
20212#define true 1
20213#define false 0
20214#define __bool_true_false_are_defined 1
20215#define FALSE false
20216#define TRUE true
20217#define RUBY_BACKWARD2_LONG_LONG_H
20218#define HAVE_TRUE_LONG_LONG 1
20219#define LONG_LONG long long
20220#define RUBY_BACKWARD2_STDALIGN_H
20221#define RBIMPL_STDALIGN_H
20222#define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))
20223#define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T))
20224#undef RUBY_ALIGNAS
20225#undef RUBY_ALIGNOF
20226#define RUBY_ALIGNAS RBIMPL_ALIGNAS
20227#define RUBY_ALIGNOF RBIMPL_ALIGNOF
20228#define RUBY_BACKWARD2_STDARG_H
20229#undef _
20230#define _(args) args
20231#undef __
20232#define __(args) args
20233#define ANYARGS
20234#define RBIMPL_DOSISH_H
20235#undef _WIN32
20236#define PATH_SEP ":"
20237#define PATH_SEP_CHAR PATH_SEP[0]
20238#define PATH_ENV "PATH"
20239#define CASEFOLD_FILESYSTEM 0
20240#define RUBY_MISSING_H 1
20241#define _MATH_H_
20242#define _M_LN2 0.693147180559945309417
20243#define HUGE_VAL (__builtin_huge_val())
20244#define HUGE_VALF (__builtin_huge_valf())
20245#define HUGE_VALL (__builtin_huge_vall())
20246#define INFINITY (__builtin_inff())
20247#define NAN (__builtin_nanf(""))
20248#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
20249#define __TMP_FLT_EVAL_METHOD
20250#undef FLT_EVAL_METHOD
20251#define FP_NAN 0
20252#define FP_INFINITE 1
20253#define FP_ZERO 2
20254#define FP_SUBNORMAL 3
20255#define FP_NORMAL 4
20256#define FP_ILOGB0 (-__INT_MAX__)
20257#define FP_ILOGBNAN __INT_MAX__
20258#define MATH_ERRNO 1
20259#define MATH_ERREXCEPT 2
20260#define _MATH_ERRHANDLING_ERRNO MATH_ERRNO
20261#define _MATH_ERRHANDLING_ERREXCEPT MATH_ERREXCEPT
20262#define math_errhandling (_MATH_ERRHANDLING_ERRNO | _MATH_ERRHANDLING_ERREXCEPT)
20263#define fpclassify(__x) (__builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x))
20264#define isfinite(__x) (__builtin_isfinite (__x))
20265#define isinf(__x) (__builtin_isinf_sign (__x))
20266#define isnan(__x) (__builtin_isnan (__x))
20267#define isnormal(__x) (__builtin_isnormal (__x))
20268#define signbit(__x) ((sizeof(__x) == sizeof(float)) ? __builtin_signbitf(__x) : (sizeof(__x) == sizeof(double)) ? __builtin_signbit (__x) : __builtin_signbitl(__x))
20269#define isgreater(__x,__y) (__builtin_isgreater (__x, __y))
20270#define isgreaterequal(__x,__y) (__builtin_isgreaterequal (__x, __y))
20271#define isless(__x,__y) (__builtin_isless (__x, __y))
20272#define islessequal(__x,__y) (__builtin_islessequal (__x, __y))
20273#define islessgreater(__x,__y) (__builtin_islessgreater (__x, __y))
20274#define isunordered(__x,__y) (__builtin_isunordered (__x, __y))
20275#define log2(x) (log (x) / _M_LN2)
20276#define signgam (*__signgam())
20277#define __signgam_r(ptr) _REENT_SIGNGAM(ptr)
20278#define MAXFLOAT 3.40282347e+38F
20279#define M_E 2.7182818284590452354
20280#define M_LOG2E 1.4426950408889634074
20281#define M_LOG10E 0.43429448190325182765
20282#define M_LN2 _M_LN2
20283#define M_LN10 2.30258509299404568402
20284#define M_PI 3.14159265358979323846
20285#define M_PI_2 1.57079632679489661923
20286#define M_PI_4 0.78539816339744830962
20287#define M_1_PI 0.31830988618379067154
20288#define M_2_PI 0.63661977236758134308
20289#define M_2_SQRTPI 1.12837916709551257390
20290#define M_SQRT2 1.41421356237309504880
20291#define M_SQRT1_2 0.70710678118654752440
20292#define M_TWOPI (M_PI * 2.0)
20293#define M_3PI_4 2.3561944901923448370E0
20294#define M_SQRTPI 1.77245385090551602792981
20295#define M_LN2LO 1.9082149292705877000E-10
20296#define M_LN2HI 6.9314718036912381649E-1
20297#define M_SQRT3 1.73205080756887719000
20298#define M_IVLN10 0.43429448190325182765
20299#define M_LOG2_E _M_LN2
20300#define M_INVLN2 1.4426950408889633870E0
20301#define _SYS_TIME_H_
20302#define DST_NONE 0
20303#define DST_USA 1
20304#define DST_AUST 2
20305#define DST_WET 3
20306#define DST_MET 4
20307#define DST_EET 5
20308#define DST_CAN 6
20309#define bintime_clear(a) ((a)->sec = (a)->frac = 0)
20310#define bintime_isset(a) ((a)->sec || (a)->frac)
20311#define bintime_cmp(a,b,cmp) (((a)->sec == (b)->sec) ? ((a)->frac cmp (b)->frac) : ((a)->sec cmp (b)->sec))
20312#define SBT_1S ((sbintime_t)1 << 32)
20313#define SBT_1M (SBT_1S * 60)
20314#define SBT_1MS (SBT_1S / 1000)
20315#define SBT_1US (SBT_1S / 1000000)
20316#define SBT_1NS (SBT_1S / 1000000000)
20317#define SBT_MAX 0x7fffffffffffffffLL
20318#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
20319#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
20320#define timespeccmp(tvp,uvp,cmp) (((tvp)->tv_sec == (uvp)->tv_sec) ? ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : ((tvp)->tv_sec cmp (uvp)->tv_sec))
20321#define timespecadd(tsp,usp,vsp) do { (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; if ((vsp)->tv_nsec >= 1000000000L) { (vsp)->tv_sec++; (vsp)->tv_nsec -= 1000000000L; } } while (0)
20322#define timespecsub(tsp,usp,vsp) do { (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; if ((vsp)->tv_nsec < 0) { (vsp)->tv_sec--; (vsp)->tv_nsec += 1000000000L; } } while (0)
20323#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
20324#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
20325#define timercmp(tvp,uvp,cmp) (((tvp)->tv_sec == (uvp)->tv_sec) ? ((tvp)->tv_usec cmp (uvp)->tv_usec) : ((tvp)->tv_sec cmp (uvp)->tv_sec))
20326#define timeradd(tvp,uvp,vvp) do { (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; if ((vvp)->tv_usec >= 1000000) { (vvp)->tv_sec++; (vvp)->tv_usec -= 1000000; } } while (0)
20327#define timersub(tvp,uvp,vvp) do { (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; if ((vvp)->tv_usec < 0) { (vvp)->tv_sec--; (vvp)->tv_usec += 1000000; } } while (0)
20328#define ITIMER_REAL 0
20329#define ITIMER_VIRTUAL 1
20330#define ITIMER_PROF 2
20331#define _IEEE_FP_H_
20332#define _FLOAT_H___
20333#undef FLT_RADIX
20334#define FLT_RADIX __FLT_RADIX__
20335#undef FLT_MANT_DIG
20336#undef DBL_MANT_DIG
20337#undef LDBL_MANT_DIG
20338#define FLT_MANT_DIG __FLT_MANT_DIG__
20339#define DBL_MANT_DIG __DBL_MANT_DIG__
20340#define LDBL_MANT_DIG __LDBL_MANT_DIG__
20341#undef FLT_DIG
20342#undef DBL_DIG
20343#undef LDBL_DIG
20344#define FLT_DIG __FLT_DIG__
20345#define DBL_DIG __DBL_DIG__
20346#define LDBL_DIG __LDBL_DIG__
20347#undef FLT_MIN_EXP
20348#undef DBL_MIN_EXP
20349#undef LDBL_MIN_EXP
20350#define FLT_MIN_EXP __FLT_MIN_EXP__
20351#define DBL_MIN_EXP __DBL_MIN_EXP__
20352#define LDBL_MIN_EXP __LDBL_MIN_EXP__
20353#undef FLT_MIN_10_EXP
20354#undef DBL_MIN_10_EXP
20355#undef LDBL_MIN_10_EXP
20356#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
20357#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
20358#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
20359#undef FLT_MAX_EXP
20360#undef DBL_MAX_EXP
20361#undef LDBL_MAX_EXP
20362#define FLT_MAX_EXP __FLT_MAX_EXP__
20363#define DBL_MAX_EXP __DBL_MAX_EXP__
20364#define LDBL_MAX_EXP __LDBL_MAX_EXP__
20365#undef FLT_MAX_10_EXP
20366#undef DBL_MAX_10_EXP
20367#undef LDBL_MAX_10_EXP
20368#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
20369#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
20370#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
20371#undef FLT_MAX
20372#undef DBL_MAX
20373#undef LDBL_MAX
20374#define FLT_MAX __FLT_MAX__
20375#define DBL_MAX __DBL_MAX__
20376#define LDBL_MAX __LDBL_MAX__
20377#undef FLT_EPSILON
20378#undef DBL_EPSILON
20379#undef LDBL_EPSILON
20380#define FLT_EPSILON __FLT_EPSILON__
20381#define DBL_EPSILON __DBL_EPSILON__
20382#define LDBL_EPSILON __LDBL_EPSILON__
20383#undef FLT_MIN
20384#undef DBL_MIN
20385#undef LDBL_MIN
20386#define FLT_MIN __FLT_MIN__
20387#define DBL_MIN __DBL_MIN__
20388#define LDBL_MIN __LDBL_MIN__
20389#undef FLT_ROUNDS
20390#define FLT_ROUNDS 1
20391#undef FLT_EVAL_METHOD
20392#define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__
20393#undef DECIMAL_DIG
20394#define DECIMAL_DIG __DECIMAL_DIG__
20395#undef FLT_DECIMAL_DIG
20396#undef DBL_DECIMAL_DIG
20397#undef LDBL_DECIMAL_DIG
20398#define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
20399#define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
20400#define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
20401#undef FLT_HAS_SUBNORM
20402#undef DBL_HAS_SUBNORM
20403#undef LDBL_HAS_SUBNORM
20404#define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
20405#define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
20406#define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
20407#undef FLT_TRUE_MIN
20408#undef DBL_TRUE_MIN
20409#undef LDBL_TRUE_MIN
20410#define FLT_TRUE_MIN __FLT_DENORM_MIN__
20411#define DBL_TRUE_MIN __DBL_DENORM_MIN__
20412#define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
20413#define CR_DECIMAL_DIG __UINTMAX_MAX__
20414#undef FLT32_MANT_DIG
20415#define FLT32_MANT_DIG __FLT32_MANT_DIG__
20416#undef FLT32_DIG
20417#define FLT32_DIG __FLT32_DIG__
20418#undef FLT32_MIN_EXP
20419#define FLT32_MIN_EXP __FLT32_MIN_EXP__
20420#undef FLT32_MIN_10_EXP
20421#define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__
20422#undef FLT32_MAX_EXP
20423#define FLT32_MAX_EXP __FLT32_MAX_EXP__
20424#undef FLT32_MAX_10_EXP
20425#define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__
20426#undef FLT32_MAX
20427#define FLT32_MAX __FLT32_MAX__
20428#undef FLT32_EPSILON
20429#define FLT32_EPSILON __FLT32_EPSILON__
20430#undef FLT32_MIN
20431#define FLT32_MIN __FLT32_MIN__
20432#undef FLT32_DECIMAL_DIG
20433#define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__
20434#undef FLT32_TRUE_MIN
20435#define FLT32_TRUE_MIN __FLT32_DENORM_MIN__
20436#undef FLT64_MANT_DIG
20437#define FLT64_MANT_DIG __FLT64_MANT_DIG__
20438#undef FLT64_DIG
20439#define FLT64_DIG __FLT64_DIG__
20440#undef FLT64_MIN_EXP
20441#define FLT64_MIN_EXP __FLT64_MIN_EXP__
20442#undef FLT64_MIN_10_EXP
20443#define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__
20444#undef FLT64_MAX_EXP
20445#define FLT64_MAX_EXP __FLT64_MAX_EXP__
20446#undef FLT64_MAX_10_EXP
20447#define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__
20448#undef FLT64_MAX
20449#define FLT64_MAX __FLT64_MAX__
20450#undef FLT64_EPSILON
20451#define FLT64_EPSILON __FLT64_EPSILON__
20452#undef FLT64_MIN
20453#define FLT64_MIN __FLT64_MIN__
20454#undef FLT64_DECIMAL_DIG
20455#define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__
20456#undef FLT64_TRUE_MIN
20457#define FLT64_TRUE_MIN __FLT64_DENORM_MIN__
20458#undef FLT128_MANT_DIG
20459#define FLT128_MANT_DIG __FLT128_MANT_DIG__
20460#undef FLT128_DIG
20461#define FLT128_DIG __FLT128_DIG__
20462#undef FLT128_MIN_EXP
20463#define FLT128_MIN_EXP __FLT128_MIN_EXP__
20464#undef FLT128_MIN_10_EXP
20465#define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__
20466#undef FLT128_MAX_EXP
20467#define FLT128_MAX_EXP __FLT128_MAX_EXP__
20468#undef FLT128_MAX_10_EXP
20469#define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__
20470#undef FLT128_MAX
20471#define FLT128_MAX __FLT128_MAX__
20472#undef FLT128_EPSILON
20473#define FLT128_EPSILON __FLT128_EPSILON__
20474#undef FLT128_MIN
20475#define FLT128_MIN __FLT128_MIN__
20476#undef FLT128_DECIMAL_DIG
20477#define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__
20478#undef FLT128_TRUE_MIN
20479#define FLT128_TRUE_MIN __FLT128_DENORM_MIN__
20480#undef FLT32X_MANT_DIG
20481#define FLT32X_MANT_DIG __FLT32X_MANT_DIG__
20482#undef FLT32X_DIG
20483#define FLT32X_DIG __FLT32X_DIG__
20484#undef FLT32X_MIN_EXP
20485#define FLT32X_MIN_EXP __FLT32X_MIN_EXP__
20486#undef FLT32X_MIN_10_EXP
20487#define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__
20488#undef FLT32X_MAX_EXP
20489#define FLT32X_MAX_EXP __FLT32X_MAX_EXP__
20490#undef FLT32X_MAX_10_EXP
20491#define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__
20492#undef FLT32X_MAX
20493#define FLT32X_MAX __FLT32X_MAX__
20494#undef FLT32X_EPSILON
20495#define FLT32X_EPSILON __FLT32X_EPSILON__
20496#undef FLT32X_MIN
20497#define FLT32X_MIN __FLT32X_MIN__
20498#undef FLT32X_DECIMAL_DIG
20499#define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__
20500#undef FLT32X_TRUE_MIN
20501#define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__
20502#undef FLT64X_MANT_DIG
20503#define FLT64X_MANT_DIG __FLT64X_MANT_DIG__
20504#undef FLT64X_DIG
20505#define FLT64X_DIG __FLT64X_DIG__
20506#undef FLT64X_MIN_EXP
20507#define FLT64X_MIN_EXP __FLT64X_MIN_EXP__
20508#undef FLT64X_MIN_10_EXP
20509#define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__
20510#undef FLT64X_MAX_EXP
20511#define FLT64X_MAX_EXP __FLT64X_MAX_EXP__
20512#undef FLT64X_MAX_10_EXP
20513#define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__
20514#undef FLT64X_MAX
20515#define FLT64X_MAX __FLT64X_MAX__
20516#undef FLT64X_EPSILON
20517#define FLT64X_EPSILON __FLT64X_EPSILON__
20518#undef FLT64X_MIN
20519#define FLT64X_MIN __FLT64X_MIN__
20520#undef FLT64X_DECIMAL_DIG
20521#define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__
20522#undef FLT64X_TRUE_MIN
20523#define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__
20524#undef DEC32_MANT_DIG
20525#undef DEC64_MANT_DIG
20526#undef DEC128_MANT_DIG
20527#define DEC32_MANT_DIG __DEC32_MANT_DIG__
20528#define DEC64_MANT_DIG __DEC64_MANT_DIG__
20529#define DEC128_MANT_DIG __DEC128_MANT_DIG__
20530#undef DEC32_MIN_EXP
20531#undef DEC64_MIN_EXP
20532#undef DEC128_MIN_EXP
20533#define DEC32_MIN_EXP __DEC32_MIN_EXP__
20534#define DEC64_MIN_EXP __DEC64_MIN_EXP__
20535#define DEC128_MIN_EXP __DEC128_MIN_EXP__
20536#undef DEC32_MAX_EXP
20537#undef DEC64_MAX_EXP
20538#undef DEC128_MAX_EXP
20539#define DEC32_MAX_EXP __DEC32_MAX_EXP__
20540#define DEC64_MAX_EXP __DEC64_MAX_EXP__
20541#define DEC128_MAX_EXP __DEC128_MAX_EXP__
20542#undef DEC32_MAX
20543#undef DEC64_MAX
20544#undef DEC128_MAX
20545#define DEC32_MAX __DEC32_MAX__
20546#define DEC64_MAX __DEC64_MAX__
20547#define DEC128_MAX __DEC128_MAX__
20548#undef DEC32_EPSILON
20549#undef DEC64_EPSILON
20550#undef DEC128_EPSILON
20551#define DEC32_EPSILON __DEC32_EPSILON__
20552#define DEC64_EPSILON __DEC64_EPSILON__
20553#define DEC128_EPSILON __DEC128_EPSILON__
20554#undef DEC32_MIN
20555#undef DEC64_MIN
20556#undef DEC128_MIN
20557#define DEC32_MIN __DEC32_MIN__
20558#define DEC64_MIN __DEC64_MIN__
20559#define DEC128_MIN __DEC128_MIN__
20560#undef DEC_EVAL_METHOD
20561#define DEC_EVAL_METHOD __DEC_EVAL_METHOD__
20562#undef DEC32_TRUE_MIN
20563#undef DEC64_TRUE_MIN
20564#undef DEC128_TRUE_MIN
20565#define DEC32_TRUE_MIN __DEC32_SUBNORMAL_MIN__
20566#define DEC64_TRUE_MIN __DEC64_SUBNORMAL_MIN__
20567#define DEC128_TRUE_MIN __DEC128_SUBNORMAL_MIN__
20568#define EXT_EXPBITS 15
20569#define EXT_FRACHBITS 32
20570#define EXT_FRACLBITS 32
20571#define __ieee_ext_field_type unsigned int
20572#define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1)
20573#define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1)
20574#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS)
20575#define FP_RN 0
20576#define FP_RM 1
20577#define FP_RP 2
20578#define FP_RZ 3
20579#define FP_X_INV 0x10
20580#define FP_X_DX 0x80
20581#define FP_X_OFL 0x04
20582#define FP_X_UFL 0x02
20583#define FP_X_IMP 0x01
20584#define FP_RDI_TOZ 0
20585#define FP_RDI_RD 1
20586#define __IEEE_DBL_EXPBIAS 1023
20587#define __IEEE_FLT_EXPBIAS 127
20588#define __IEEE_DBL_EXPLEN 11
20589#define __IEEE_FLT_EXPLEN 8
20590#define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1))
20591#define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1))
20592#define __IEEE_DBL_MAXPOWTWO ((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1))
20593#define __IEEE_FLT_MAXPOWTWO ((float)(1L << (32-8) - 1))
20594#define __IEEE_DBL_NAN_EXP 0x7ff
20595#define __IEEE_FLT_NAN_EXP 0xff
20596#pragma GCC visibility push(default)
20597#define HAVE_FINITE 1
20598#define finite(x) isfinite(x)
20599#pragma GCC visibility pop
20600#define RUBY
20601#define RB_GNUC_EXTENSION __extension__
20602#define RB_GNUC_EXTENSION_BLOCK(x) __extension__ ({ x; })
20603#define RUBY_MBCHAR_MAXSIZE INT_MAX
20604#define FLUSH_REGISTER_WINDOWS ((void)0)
20605#define RBIMPL_ANYARGS_H
20606#define RBIMPL_ATTR_WEAKREF_H
20607#define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(#sym)))
20608#define RBIMPL_INTERN_CLASS_H
20609#define RBIMPL_VALUE_H
20610#define RBIMPL_STATIC_ASSERT_H
20611#undef assert
20612#define assert(__e) ((void)0)
20613#define static_assert _Static_assert
20614#define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
20615#define RBIMPL_STATIC_ASSERT(name,expr) RBIMPL_STATIC_ASSERT0(expr, #name ": " #expr)
20616#define RUBY_BACKWARD2_LIMITS_H
20617#define _GCC_LIMITS_H_
20618#define _GCC_NEXT_LIMITS_H
20619#define _FEATURES_H
20620#define _CYGWIN_LIMITS_H__
20621#define __AIO_LISTIO_MAX 32
20622#define __AIO_MAX 8
20623#define __AIO_PRIO_DELTA_MAX 0
20624#define __ARG_MAX 32000
20625#define __ATEXIT_MAX 32
20626#define __CHILD_MAX 256
20627#define __DELAYTIMER_MAX __INT_MAX__
20628#define __HOST_NAME_MAX 255
20629#define __IOV_MAX 1024
20630#define __LOGIN_NAME_MAX 256
20631#define __MQ_OPEN_MAX 256
20632#define __MQ_PRIO_MAX INT_MAX
20633#define __OPEN_MAX 3200
20634#define __PAGESIZE 65536
20635#define __PTHREAD_DESTRUCTOR_ITERATIONS 4
20636#define __PTHREAD_KEYS_MAX 1024
20637#define __PTHREAD_STACK_MIN 65536
20638#define __RTSIG_MAX 33
20639#define __SEM_VALUE_MAX 1147483648
20640#define __SIGQUEUE_MAX 32
20641#define __STREAM_MAX 20
20642#define __SYMLOOP_MAX 10
20643#define __TIMER_MAX 32
20644#define __TTY_NAME_MAX 32
20645#define __FILESIZEBITS 64
20646#define __LINK_MAX 1024
20647#define __MAX_CANON 255
20648#define __MAX_INPUT 255
20649#define __NAME_MAX 255
20650#define __PATH_MAX 4096
20651#define __PIPE_BUF 4096
20652#define _LIMITS_H___
20653#define _MACH_MACHLIMITS_H_
20654#undef CHAR_BIT
20655#define CHAR_BIT __CHAR_BIT__
20656#undef LONG_BIT
20657#define LONG_BIT (__SIZEOF_LONG__ * __CHAR_BIT__)
20658#undef WORD_BIT
20659#define WORD_BIT (__SIZEOF_INT__ * __CHAR_BIT__)
20660#define MB_LEN_MAX 8
20661#undef SCHAR_MIN
20662#define SCHAR_MIN (-128)
20663#undef SCHAR_MAX
20664#define SCHAR_MAX 127
20665#undef UCHAR_MAX
20666#define UCHAR_MAX 255
20667#undef CHAR_MIN
20668#define CHAR_MIN (-128)
20669#undef CHAR_MAX
20670#define CHAR_MAX 127
20671#undef SHRT_MIN
20672#define SHRT_MIN (-32768)
20673#undef SHRT_MAX
20674#define SHRT_MAX 32767
20675#undef USHRT_MAX
20676#define USHRT_MAX 65535
20677#undef INT_MIN
20678#define INT_MIN (-INT_MAX-1)
20679#undef INT_MAX
20680#define INT_MAX __INT_MAX__
20681#undef UINT_MAX
20682#define UINT_MAX (INT_MAX * 2U + 1)
20683#undef LONG_MIN
20684#define LONG_MIN (-LONG_MAX-1L)
20685#undef LONG_MAX
20686#define LONG_MAX __LONG_MAX__
20687#undef ULONG_MAX
20688#define ULONG_MAX (LONG_MAX * 2UL + 1)
20689#undef LONG_LONG_MIN
20690#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
20691#undef LONG_LONG_MAX
20692#define LONG_LONG_MAX __LONG_LONG_MAX__
20693#undef ULONG_LONG_MAX
20694#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
20695#undef LLONG_MIN
20696#define LLONG_MIN (-LLONG_MAX-1)
20697#undef LLONG_MAX
20698#define LLONG_MAX __LONG_LONG_MAX__
20699#undef ULLONG_MAX
20700#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
20701#undef SSIZE_MAX
20702#define SSIZE_MAX (__LONG_MAX__)
20703#define AIO_LISTIO_MAX __AIO_LISTIO_MAX
20704#define AIO_MAX __AIO_MAX
20705#define AIO_PRIO_DELTA_MAX __AIO_PRIO_DELTA_MAX
20706#undef ARG_MAX
20707#define ARG_MAX __ARG_MAX
20708#undef ATEXIT_MAX
20709#define ATEXIT_MAX __ATEXIT_MAX
20710#undef CHILD_MAX
20711#define CHILD_MAX __CHILD_MAX
20712#undef DELAYTIMER_MAX
20713#define DELAYTIMER_MAX __DELAYTIMER_MAX
20714#undef HOST_NAME_MAX
20715#define HOST_NAME_MAX __HOST_NAME_MAX
20716#undef IOV_MAX
20717#define IOV_MAX __IOV_MAX
20718#undef LOGIN_NAME_MAX
20719#define LOGIN_NAME_MAX __LOGIN_NAME_MAX
20720#undef MQ_OPEN_MAX
20721#define MQ_OPEN_MAX __MQ_OPEN_MAX
20722#undef MQ_PRIO_MAX
20723#define MQ_PRIO_MAX __MQ_PRIO_MAX
20724#undef OPEN_MAX
20725#define OPEN_MAX __OPEN_MAX
20726#undef PAGESIZE
20727#define PAGESIZE __PAGESIZE
20728#undef PAGE_SIZE
20729#define PAGE_SIZE PAGESIZE
20730#undef PTHREAD_DESTRUCTOR_ITERATIONS
20731#define PTHREAD_DESTRUCTOR_ITERATIONS __PTHREAD_DESTRUCTOR_ITERATIONS
20732#undef PTHREAD_KEYS_MAX
20733#define PTHREAD_KEYS_MAX __PTHREAD_KEYS_MAX
20734#undef PTHREAD_STACK_MIN
20735#define PTHREAD_STACK_MIN __PTHREAD_STACK_MIN
20736#undef PTHREAD_THREADS_MAX
20737#undef RTSIG_MAX
20738#define RTSIG_MAX __RTSIG_MAX
20739#undef SEM_NSEMS_MAX
20740#undef SEM_VALUE_MAX
20741#define SEM_VALUE_MAX __SEM_VALUE_MAX
20742#undef SIGQUEUE_MAX
20743#define SIGQUEUE_MAX __SIGQUEUE_MAX
20744#undef SS_REPL_MAX
20745#undef STREAM_MAX
20746#define STREAM_MAX __STREAM_MAX
20747#undef SYMLOOP_MAX
20748#define SYMLOOP_MAX __SYMLOOP_MAX
20749#undef TIMER_MAX
20750#define TIMER_MAX __TIMER_MAX
20751#undef TRACE_EVENT_NAME_MAX
20752#undef TRACE_NAME_MAX
20753#undef TRACE_SYS_MAX
20754#undef TRACE_USER_EVENT_MAX
20755#undef TTY_NAME_MAX
20756#define TTY_NAME_MAX __TTY_NAME_MAX
20757#undef TZNAME_MAX
20758#undef FILESIZEBITS
20759#define FILESIZEBITS __FILESIZEBITS
20760#undef LINK_MAX
20761#define LINK_MAX __LINK_MAX
20762#undef MAX_CANON
20763#define MAX_CANON __MAX_CANON
20764#undef MAX_INPUT
20765#define MAX_INPUT __MAX_INPUT
20766#undef NAME_MAX
20767#define NAME_MAX __NAME_MAX
20768#undef PATH_MAX
20769#define PATH_MAX __PATH_MAX
20770#undef PIPE_BUF
20771#define PIPE_BUF __PIPE_BUF
20772#undef POSIX_ALLOC_SIZE_MIN
20773#undef POSIX_REC_INCR_XFER_SIZE
20774#undef POSIX_REC_MAX_XFER_SIZE
20775#undef POSIX_REC_MIN_XFER_SIZE
20776#undef POSIX_REC_XFER_ALIGN
20777#undef SYMLINK_MAX
20778#define SYMLINK_MAX (PATH_MAX - 1)
20779#undef BC_BASE_MAX
20780#define BC_BASE_MAX 99
20781#undef BC_DIM_MAX
20782#define BC_DIM_MAX 2048
20783#undef BC_SCALE_MAX
20784#define BC_SCALE_MAX 99
20785#undef BC_STRING_MAX
20786#define BC_STRING_MAX 1000
20787#undef CHARCLASS_NAME_MAX
20788#undef COLL_WEIGHTS_MAX
20789#undef EXPR_NEST_MAX
20790#define EXPR_NEST_MAX 32
20791#undef LINE_MAX
20792#define LINE_MAX 2048
20793#undef NGROUPS_MAX
20794#define NGROUPS_MAX 1024
20795#undef RE_DUP_MAX
20796#define RE_DUP_MAX 255
20797#define _POSIX_CLOCKRES_MIN 20000000
20798#define _POSIX_AIO_LISTIO_MAX 2
20799#define _POSIX_AIO_MAX 1
20800#define _POSIX_ARG_MAX 4096
20801#define _POSIX_CHILD_MAX 25
20802#define _POSIX_DELAYTIMER_MAX 32
20803#define _POSIX_HOST_NAME_MAX 255
20804#define _POSIX_LINK_MAX 8
20805#define _POSIX_LOGIN_NAME_MAX 9
20806#define _POSIX_MAX_CANON 255
20807#define _POSIX_MAX_INPUT 255
20808#define _POSIX_MQ_OPEN_MAX 8
20809#define _POSIX_MQ_PRIO_MAX 32
20810#define _POSIX_NAME_MAX 14
20811#define _POSIX_NGROUPS_MAX 8
20812#define _POSIX_OPEN_MAX 20
20813#define _POSIX_PATH_MAX 256
20814#define _POSIX_PIPE_BUF 512
20815#define _POSIX_RE_DUP_MAX 255
20816#define _POSIX_RTSIG_MAX 8
20817#define _POSIX_SEM_NSEMS_MAX 256
20818#define _POSIX_SEM_VALUE_MAX 32767
20819#define _POSIX_SIGQUEUE_MAX 32
20820#define _POSIX_SSIZE_MAX 32767
20821#define _POSIX_STREAM_MAX 8
20822#define _POSIX_SS_REPL_MAX 4
20823#define _POSIX_SYMLINK_MAX 255
20824#define _POSIX_SYMLOOP_MAX 8
20825#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
20826#define _POSIX_THREAD_KEYS_MAX 128
20827#define _POSIX_THREAD_THREADS_MAX 64
20828#define _POSIX_TIMER_MAX 32
20829#define _POSIX_TRACE_EVENT_NAME_MAX 30
20830#define _POSIX_TRACE_NAME_MAX 8
20831#define _POSIX_TRACE_SYS_MAX 8
20832#define _POSIX_TRACE_USER_EVENT_MAX 32
20833#define _POSIX_TTY_NAME_MAX 9
20834#define _POSIX_TZNAME_MAX 6
20835#define _POSIX2_BC_BASE_MAX 99
20836#define _POSIX2_BC_DIM_MAX 2048
20837#define _POSIX2_BC_SCALE_MAX 99
20838#define _POSIX2_BC_STRING_MAX 1000
20839#define _POSIX2_COLL_WEIGHTS_MAX 2
20840#define _POSIX2_EXPR_NEST_MAX 32
20841#define _POSIX2_LINE_MAX 2048
20842#define _POSIX2_RE_DUP_MAX 255
20843#define _XOPEN_IOV_MAX 16
20844#define _XOPEN_NAME_MAX 255
20845#define _XOPEN_PATH_MAX 1024
20846#define NL_ARGMAX 9
20847#define NL_LANGMAX 14
20848#define NL_MSGMAX 32767
20849#define NL_SETMAX 255
20850#define NL_TEXTMAX _POSIX2_LINE_MAX
20851#undef NZERO
20852#define NZERO 20
20853#undef _GCC_NEXT_LIMITS_H
20854#define SIGNED_VALUE long
20855#define SIZEOF_VALUE SIZEOF_LONG
20856#define PRI_VALUE_PREFIX "l"
20857#define RBIMPL_VALUE_NULL 0UL
20858#define RBIMPL_VALUE_ONE 1UL
20859#define RBIMPL_VALUE_FULL ULONG_MAX
20860#pragma GCC visibility push(default)
20861#pragma GCC visibility pop
20862#define RBIMPL_INTERN_VM_H
20863#pragma GCC visibility push(default)
20864#define HAVE_RB_DEFINE_ALLOC_FUNC 1
20865#pragma GCC visibility pop
20866#define RBIMPL_METHOD_H
20867#pragma GCC visibility push(default)
20868#pragma GCC visibility pop
20869#define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))
20870#define RBIMPL_ARITHMETIC_H
20871#define RBIMPL_ARITHMETIC_CHAR_H
20872#define RBIMPL_ARITHMETIC_INT_H
20873#define RBIMPL_ARITHMETIC_FIXNUM_H
20874#define FIXABLE RB_FIXABLE
20875#define FIXNUM_MAX RUBY_FIXNUM_MAX
20876#define FIXNUM_MIN RUBY_FIXNUM_MIN
20877#define NEGFIXABLE RB_NEGFIXABLE
20878#define POSFIXABLE RB_POSFIXABLE
20879#define RB_POSFIXABLE(_) ((_) < RUBY_FIXNUM_MAX + 1)
20880#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN)
20881#define RB_FIXABLE(_) (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_))
20882#define RUBY_FIXNUM_MAX (LONG_MAX / 2)
20883#define RUBY_FIXNUM_MIN (LONG_MIN / 2)
20884#define RBIMPL_ARITHMETIC_INTPTR_T_H
20885#define rb_int_new rb_int2inum
20886#define rb_uint_new rb_uint2inum
20887#pragma GCC visibility push(default)
20888#pragma GCC visibility pop
20889#define RBIMPL_ARITHMETIC_LONG_H
20890#define RBIMPL_ATTR_ARTIFICIAL_H
20891#define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__))
20892#define RBIMPL_ATTR_CONSTEXPR_H
20893#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
20894#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0
20895#define RBIMPL_ATTR_CONSTEXPR(_)
20896#define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_)
20897#define RBIMPL_SPECIAL_CONSTS_H
20898#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H
20899#define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_)
20900#define USE_FLONUM 1
20901#define RTEST RB_TEST
20902#define FIXNUM_P RB_FIXNUM_P
20903#define IMMEDIATE_P RB_IMMEDIATE_P
20904#define NIL_P RB_NIL_P
20905#define SPECIAL_CONST_P RB_SPECIAL_CONST_P
20906#define STATIC_SYM_P RB_STATIC_SYM_P
20907#define Qfalse RUBY_Qfalse
20908#define Qnil RUBY_Qnil
20909#define Qtrue RUBY_Qtrue
20910#define Qundef RUBY_Qundef
20911#define FIXNUM_FLAG RUBY_FIXNUM_FLAG
20912#define FLONUM_FLAG RUBY_FLONUM_FLAG
20913#define FLONUM_MASK RUBY_FLONUM_MASK
20914#define FLONUM_P RB_FLONUM_P
20915#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
20916#define SYMBOL_FLAG RUBY_SYMBOL_FLAG
20917#define RB_FIXNUM_P RB_FIXNUM_P
20918#define RB_FLONUM_P RB_FLONUM_P
20919#define RB_IMMEDIATE_P RB_IMMEDIATE_P
20920#define RB_NIL_P RB_NIL_P
20921#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P
20922#define RB_STATIC_SYM_P RB_STATIC_SYM_P
20923#define RB_TEST RB_TEST
20924#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse)
20925#define RUBY_Qtrue RBIMPL_CAST((VALUE)RUBY_Qtrue)
20926#define RUBY_Qnil RBIMPL_CAST((VALUE)RUBY_Qnil)
20927#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef)
20928#define FIX2LONG RB_FIX2LONG
20929#define FIX2ULONG RB_FIX2ULONG
20930#define INT2FIX RB_INT2FIX
20931#define LONG2FIX RB_INT2FIX
20932#define LONG2NUM RB_LONG2NUM
20933#define NUM2LONG RB_NUM2LONG
20934#define NUM2ULONG RB_NUM2ULONG
20935#define RB_FIX2LONG rb_fix2long
20936#define RB_FIX2ULONG rb_fix2ulong
20937#define RB_LONG2FIX RB_INT2FIX
20938#define RB_LONG2NUM rb_long2num_inline
20939#define RB_NUM2LONG rb_num2long_inline
20940#define RB_NUM2ULONG rb_num2ulong_inline
20941#define RB_ULONG2NUM rb_ulong2num_inline
20942#define ULONG2NUM RB_ULONG2NUM
20943#define rb_fix_new RB_INT2FIX
20944#define rb_long2int rb_long2int_inline
20945#define RB_INT2FIX RB_INT2FIX
20946#pragma GCC visibility push(default)
20947#pragma GCC visibility pop
20948#undef INT2FIX
20949#define INT2FIX(i) __builtin_choose_expr( __builtin_constant_p(i), RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(i))
20950#define RB_INT2NUM rb_int2num_inline
20951#define RB_NUM2INT rb_num2int_inline
20952#define RB_UINT2NUM rb_uint2num_inline
20953#define FIX2INT RB_FIX2INT
20954#define FIX2UINT RB_FIX2UINT
20955#define INT2NUM RB_INT2NUM
20956#define NUM2INT RB_NUM2INT
20957#define NUM2UINT RB_NUM2UINT
20958#define UINT2NUM RB_UINT2NUM
20959#define RB_FIX2INT RB_FIX2INT
20960#define RB_NUM2UINT RB_NUM2UINT
20961#define RB_FIX2UINT RB_FIX2UINT
20962#pragma GCC visibility push(default)
20963#pragma GCC visibility pop
20964#pragma GCC diagnostic push
20965#pragma GCC diagnostic ignored "-Wtype-limits"
20966#pragma GCC diagnostic pop
20967#define RBIMPL_RSTRING_H
20968#define RBIMPL_RBASIC_H
20969#define RBIMPL_ATTR_NOALIAS_H
20970#define RBIMPL_ATTR_NOALIAS()
20971#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj))
20972#define RBASIC_CLASS RBASIC_CLASS
20973#define RBIMPL_RVALUE_EMBED_LEN_MAX 3
20974#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
20975#define RBIMPL_EMBED_LEN_MAX_OF(T) RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
20976#pragma GCC visibility push(default)
20977#pragma GCC visibility pop
20978#define RBIMPL_FL_TYPE_H
20979#define RBIMPL_ATTR_FLAG_ENUM_H
20980#define RBIMPL_ATTR_FLAG_ENUM()
20981#define RBIMPL_VALUE_TYPE_H
20982#define RBIMPL_CONSTANT_P_H
20983#define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr)
20984#define RBIMPL_ERROR_H
20985#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
20986#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
20987#pragma GCC visibility push(default)
20988#define ruby_verbose (*rb_ruby_verbose_ptr())
20989#define ruby_debug (*rb_ruby_debug_ptr())
20990#pragma GCC visibility pop
20991#define T_ARRAY RUBY_T_ARRAY
20992#define T_BIGNUM RUBY_T_BIGNUM
20993#define T_CLASS RUBY_T_CLASS
20994#define T_COMPLEX RUBY_T_COMPLEX
20995#define T_DATA RUBY_T_DATA
20996#define T_FALSE RUBY_T_FALSE
20997#define T_FILE RUBY_T_FILE
20998#define T_FIXNUM RUBY_T_FIXNUM
20999#define T_FLOAT RUBY_T_FLOAT
21000#define T_HASH RUBY_T_HASH
21001#define T_ICLASS RUBY_T_ICLASS
21002#define T_IMEMO RUBY_T_IMEMO
21003#define T_MASK RUBY_T_MASK
21004#define T_MATCH RUBY_T_MATCH
21005#define T_MODULE RUBY_T_MODULE
21006#define T_MOVED RUBY_T_MOVED
21007#define T_NIL RUBY_T_NIL
21008#define T_NODE RUBY_T_NODE
21009#define T_NONE RUBY_T_NONE
21010#define T_OBJECT RUBY_T_OBJECT
21011#define T_RATIONAL RUBY_T_RATIONAL
21012#define T_REGEXP RUBY_T_REGEXP
21013#define T_STRING RUBY_T_STRING
21014#define T_STRUCT RUBY_T_STRUCT
21015#define T_SYMBOL RUBY_T_SYMBOL
21016#define T_TRUE RUBY_T_TRUE
21017#define T_UNDEF RUBY_T_UNDEF
21018#define T_ZOMBIE RUBY_T_ZOMBIE
21019#define BUILTIN_TYPE RB_BUILTIN_TYPE
21020#define DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21021#define RB_INTEGER_TYPE_P rb_integer_type_p
21022#define SYMBOL_P RB_SYMBOL_P
21023#define rb_type_p RB_TYPE_P
21024#define RB_BUILTIN_TYPE RB_BUILTIN_TYPE
21025#define RB_DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21026#define RB_FLOAT_TYPE_P RB_FLOAT_TYPE_P
21027#define RB_SYMBOL_P RB_SYMBOL_P
21028#define RB_TYPE_P RB_TYPE_P
21029#define Check_Type Check_Type
21030#define RBIMPL_ASSERT_TYPE(v,t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P((v), (t)))
21031#define TYPE(_) RBIMPL_CAST((int)rb_type(_))
21032#pragma GCC visibility push(default)
21033#pragma GCC visibility pop
21034#define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
21035#define RBIMPL_WIDER_ENUM 1
21036#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
21037#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
21038#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
21039#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
21040#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
21041#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
21042#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
21043#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
21044#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
21045#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
21046#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
21047#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
21048#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
21049#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
21050#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
21051#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
21052#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
21053#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
21054#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
21055#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
21056#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
21057#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
21058#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
21059#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
21060#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
21061#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
21062#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
21063#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
21064#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
21065#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
21066#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
21067#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
21068#define ELTS_SHARED RUBY_ELTS_SHARED
21069#define RB_OBJ_FREEZE rb_obj_freeze_inline
21070#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
21071#define RB_FL_ABLE RB_FL_ABLE
21072#define RB_FL_ALL RB_FL_ALL
21073#define RB_FL_ALL_RAW RB_FL_ALL_RAW
21074#define RB_FL_ANY RB_FL_ANY
21075#define RB_FL_ANY_RAW RB_FL_ANY_RAW
21076#define RB_FL_REVERSE RB_FL_REVERSE
21077#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
21078#define RB_FL_SET RB_FL_SET
21079#define RB_FL_SET_RAW RB_FL_SET_RAW
21080#define RB_FL_TEST RB_FL_TEST
21081#define RB_FL_TEST_RAW RB_FL_TEST_RAW
21082#define RB_FL_UNSET RB_FL_UNSET
21083#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
21084#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21085#define RB_OBJ_FROZEN RB_OBJ_FROZEN
21086#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21087#define RB_OBJ_INFECT RB_OBJ_INFECT
21088#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21089#define RB_OBJ_TAINT RB_OBJ_TAINT
21090#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
21091#define RB_OBJ_TAINTED RB_OBJ_TAINTED
21092#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21093#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21094#define RB_OBJ_UNTRUST RB_OBJ_TAINT
21095#define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED
21096#define FL_ABLE RB_FL_ABLE
21097#define FL_ALL RB_FL_ALL
21098#define FL_ALL_RAW RB_FL_ALL_RAW
21099#define FL_ANY RB_FL_ANY
21100#define FL_ANY_RAW RB_FL_ANY_RAW
21101#define FL_REVERSE RB_FL_REVERSE
21102#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
21103#define FL_SET RB_FL_SET
21104#define FL_SET_RAW RB_FL_SET_RAW
21105#define FL_TEST RB_FL_TEST
21106#define FL_TEST_RAW RB_FL_TEST_RAW
21107#define FL_UNSET RB_FL_UNSET
21108#define FL_UNSET_RAW RB_FL_UNSET_RAW
21109#define OBJ_FREEZE RB_OBJ_FREEZE
21110#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21111#define OBJ_FROZEN RB_OBJ_FROZEN
21112#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21113#define OBJ_INFECT RB_OBJ_INFECT
21114#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21115#define OBJ_TAINT RB_OBJ_TAINT
21116#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
21117#define OBJ_TAINTED RB_OBJ_TAINTED
21118#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21119#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21120#define OBJ_UNTRUST RB_OBJ_UNTRUST
21121#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
21122#define RBIMPL_FL_USER_N(n) RUBY_FL_USER ##n = (1<<(RUBY_FL_USHIFT+n))
21123#undef RBIMPL_FL_USER_N
21124#undef RBIMPL_WIDER_ENUM
21125#undef RBIMPL_HAVE_ENUM_ATTRIBUTE
21126#pragma GCC visibility push(default)
21127#pragma GCC visibility pop
21128#define RSTRING(obj) RBIMPL_CAST((struct RString *)(obj))
21129#define RSTRING_NOEMBED RSTRING_NOEMBED
21130#define RSTRING_EMBED_LEN_MASK RSTRING_EMBED_LEN_MASK
21131#define RSTRING_EMBED_LEN_SHIFT RSTRING_EMBED_LEN_SHIFT
21132#define RSTRING_EMBED_LEN_MAX RSTRING_EMBED_LEN_MAX
21133#define RSTRING_FSTR RSTRING_FSTR
21134#define RSTRING_EMBED_LEN RSTRING_EMBED_LEN
21135#define RSTRING_LEN RSTRING_LEN
21136#define RSTRING_LENINT RSTRING_LENINT
21137#define RSTRING_PTR RSTRING_PTR
21138#define RSTRING_END RSTRING_END
21139#define StringValue(v) rb_string_value(&(v))
21140#define StringValuePtr(v) rb_string_value_ptr(&(v))
21141#define StringValueCStr(v) rb_string_value_cstr(&(v))
21142#define SafeStringValue(v) StringValue(v)
21143#define ExportStringValue(v) do { StringValue(v); (v) = rb_str_export(v); } while (0)
21144#pragma GCC visibility push(default)
21145#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v)))
21146#pragma GCC visibility pop
21147#pragma GCC diagnostic push
21148#pragma GCC diagnostic pop
21149#define RSTRING_GETMEM(str,ptrvar,lenvar) __extension__ ({ struct RString rbimpl_str = rbimpl_rstring_getmem(str); (ptrvar) = rbimpl_str.as.heap.ptr; (lenvar) = rbimpl_str.as.heap.len; })
21150#define RB_NUM2CHR rb_num2char_inline
21151#define NUM2CHR RB_NUM2CHR
21152#define CHR2FIX RB_CHR2FIX
21153#define RB_CHR2FIX RB_CHR2FIX
21154#define RBIMPL_ARITHMETIC_DOUBLE_H
21155#define NUM2DBL rb_num2dbl
21156#define RFLOAT_VALUE rb_float_value
21157#define DBL2NUM rb_float_new
21158#pragma GCC visibility push(default)
21159#pragma GCC visibility pop
21160#define RBIMPL_ARITHMETIC_GID_T_H
21161#define RBIMPL_ARITHMETIC_LONG_LONG_H
21162#define RB_LL2NUM rb_ll2num_inline
21163#define RB_ULL2NUM rb_ull2num_inline
21164#define LL2NUM RB_LL2NUM
21165#define ULL2NUM RB_ULL2NUM
21166#define RB_NUM2LL rb_num2ll_inline
21167#define RB_NUM2ULL rb_num2ull_inline
21168#define NUM2LL RB_NUM2LL
21169#define NUM2ULL RB_NUM2ULL
21170#pragma GCC visibility push(default)
21171#pragma GCC visibility pop
21172#define RBIMPL_ARITHMETIC_MODE_T_H
21173#define RBIMPL_ARITHMETIC_OFF_T_H
21174#define RBIMPL_ARITHMETIC_PID_T_H
21175#define RBIMPL_ARITHMETIC_SHORT_H
21176#define RB_NUM2SHORT rb_num2short_inline
21177#define RB_NUM2USHORT rb_num2ushort
21178#define NUM2SHORT RB_NUM2SHORT
21179#define NUM2USHORT RB_NUM2USHORT
21180#define USHORT2NUM RB_INT2FIX
21181#define RB_FIX2SHORT rb_fix2short
21182#define FIX2SHORT RB_FIX2SHORT
21183#pragma GCC visibility push(default)
21184#pragma GCC visibility pop
21185#define RBIMPL_ARITHMETIC_SIZE_T_H
21186#define RB_SIZE2NUM RB_ULL2NUM
21187#define RB_SSIZE2NUM RB_LL2NUM
21188#define RB_NUM2SIZE RB_NUM2ULL
21189#define RB_NUM2SSIZE RB_NUM2LL
21190#define NUM2SIZET RB_NUM2SIZE
21191#define SIZET2NUM RB_SIZE2NUM
21192#define NUM2SSIZET RB_NUM2SSIZE
21193#define SSIZET2NUM RB_SSIZE2NUM
21194#define RBIMPL_ARITHMERIC_ST_DATA_T_H
21195#define RUBY_ST_H 1
21196#pragma GCC visibility push(default)
21197#define ST_DATA_T_DEFINED
21198#define MAX_ST_INDEX_VAL (~(st_index_t) 0)
21199#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
21200#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
21201#define ST_DATA_COMPATIBLE_P(type) __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
21202#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)
21203#define st_init_table rb_st_init_table
21204#define st_init_table_with_size rb_st_init_table_with_size
21205#define st_init_numtable rb_st_init_numtable
21206#define st_init_numtable_with_size rb_st_init_numtable_with_size
21207#define st_init_strtable rb_st_init_strtable
21208#define st_init_strtable_with_size rb_st_init_strtable_with_size
21209#define st_init_strcasetable rb_st_init_strcasetable
21210#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size
21211#define st_delete rb_st_delete
21212#define st_delete_safe rb_st_delete_safe
21213#define st_shift rb_st_shift
21214#define st_insert rb_st_insert
21215#define st_insert2 rb_st_insert2
21216#define st_lookup rb_st_lookup
21217#define st_get_key rb_st_get_key
21218#define st_update rb_st_update
21219#define st_foreach_with_replace rb_st_foreach_with_replace
21220#define st_foreach rb_st_foreach
21221#define st_foreach_check rb_st_foreach_check
21222#define st_keys rb_st_keys
21223#define st_keys_check rb_st_keys_check
21224#define st_values rb_st_values
21225#define st_values_check rb_st_values_check
21226#define st_add_direct rb_st_add_direct
21227#define st_free_table rb_st_free_table
21228#define st_cleanup_safe rb_st_cleanup_safe
21229#define st_clear rb_st_clear
21230#define st_copy rb_st_copy
21231#define st_numcmp rb_st_numcmp
21232#define st_numhash rb_st_numhash
21233#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp
21234#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp
21235#define st_strcasecmp rb_st_locale_insensitive_strcasecmp
21236#define st_strncasecmp rb_st_locale_insensitive_strncasecmp
21237#define st_memsize rb_st_memsize
21238#define st_hash rb_st_hash
21239#define st_hash_uint32 rb_st_hash_uint32
21240#define st_hash_uint rb_st_hash_uint
21241#define st_hash_end rb_st_hash_end
21242#define st_hash_start(h) ((st_index_t)(h))
21243#pragma GCC visibility pop
21244#define ST2FIX RB_ST2FIX
21245#define RB_ST2FIX RB_ST2FIX
21246#define RBIMPL_ARITHMETIC_UID_T_H
21247#define RBIMPL_CORE_H
21248#define RBIMPL_RARRAY_H
21249#define RBIMPL_RGENGC_H
21250#undef USE_RGENGC
21251#define USE_RGENGC 1
21252#define USE_RINCGC 1
21253#define USE_RGENGC_LOGGING_WB_UNPROTECT 0
21254#define RGENGC_WB_PROTECTED_ARRAY 1
21255#define RGENGC_WB_PROTECTED_HASH 1
21256#define RGENGC_WB_PROTECTED_STRUCT 1
21257#define RGENGC_WB_PROTECTED_STRING 1
21258#define RGENGC_WB_PROTECTED_OBJECT 1
21259#define RGENGC_WB_PROTECTED_REGEXP 1
21260#define RGENGC_WB_PROTECTED_CLASS 1
21261#define RGENGC_WB_PROTECTED_FLOAT 1
21262#define RGENGC_WB_PROTECTED_COMPLEX 1
21263#define RGENGC_WB_PROTECTED_RATIONAL 1
21264#define RGENGC_WB_PROTECTED_BIGNUM 1
21265#define RGENGC_WB_PROTECTED_NODE_CREF 1
21266#define RB_OBJ_WRITE(old,slot,young) RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
21267#define RB_OBJ_WRITTEN(old,oldv,young) RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
21268#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21269#define OBJ_PROMOTED RB_OBJ_PROMOTED
21270#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
21271#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
21272#define RB_OBJ_WB_UNPROTECT_FOR(type,obj) (RGENGC_WB_PROTECTED_ ##type ? OBJ_WB_UNPROTECT(obj) : obj)
21273#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
21274#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21275#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
21276#pragma GCC visibility push(default)
21277#pragma GCC visibility pop
21278#define USE_TRANSIENT_HEAP 1
21279#define RARRAY(obj) RBIMPL_CAST((struct RArray *)(obj))
21280#define RARRAY_EMBED_FLAG RARRAY_EMBED_FLAG
21281#define RARRAY_EMBED_LEN_MASK RARRAY_EMBED_LEN_MASK
21282#define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX
21283#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
21284#define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG
21285#define RARRAY_LEN rb_array_len
21286#define RARRAY_CONST_PTR rb_array_const_ptr
21287#define RARRAY_CONST_PTR_TRANSIENT rb_array_const_ptr_transient
21288#define FIX_CONST_VALUE_PTR(x) (x)
21289#define RARRAY_EMBED_LEN RARRAY_EMBED_LEN
21290#define RARRAY_LENINT RARRAY_LENINT
21291#define RARRAY_TRANSIENT_P RARRAY_TRANSIENT_P
21292#define RARRAY_ASET RARRAY_ASET
21293#define RARRAY_PTR RARRAY_PTR
21294#pragma GCC visibility push(default)
21295#pragma GCC visibility pop
21296#define RBIMPL_RARRAY_STMT(flag,ary,var,expr) do { RBIMPL_ASSERT_TYPE((ary), RUBY_T_ARRAY); const VALUE rbimpl_ary = (ary); VALUE *var = rb_array_ptr_use_start(rbimpl_ary, (flag)); expr; rb_array_ptr_use_end(rbimpl_ary, (flag)); } while (0)
21297#define RARRAY_PTR_USE_START(a) rb_array_ptr_use_start(a, 0)
21298#define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0)
21299#define RARRAY_PTR_USE(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(0, ary, ptr_name, expr)
21300#define RARRAY_PTR_USE_START_TRANSIENT(a) rb_array_ptr_use_start(a, 1)
21301#define RARRAY_PTR_USE_END_TRANSIENT(a) rb_array_ptr_use_end(a, 1)
21302#define RARRAY_PTR_USE_TRANSIENT(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(1, ary, ptr_name, expr)
21303#define RARRAY_AREF(a,i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
21304#define RBIMPL_RBIGNUM_H
21305#define RBIGNUM_SIGN rb_big_sign
21306#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P
21307#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P
21308#pragma GCC visibility push(default)
21309#pragma GCC visibility pop
21310#define RBIMPL_RCLASS_H
21311#define RMODULE_IS_OVERLAID RMODULE_IS_OVERLAID
21312#define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT
21313#define RMODULE_INCLUDED_INTO_REFINEMENT RMODULE_INCLUDED_INTO_REFINEMENT
21314#define RCLASS(obj) RBIMPL_CAST((struct RClass *)(obj))
21315#define RMODULE RCLASS
21316#define RCLASS_SUPER rb_class_get_superclass
21317#pragma GCC visibility push(default)
21318#pragma GCC visibility pop
21319#define RBIMPL_RDATA_H
21320#define RUBY_UNTYPED_DATA_WARNING 1
21321#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
21322#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) RBIMPL_ATTR_DEPRECATED(("by TypedData"))
21323#define RBIMPL_MACRO_SELECT(x,y) x ## y
21324#define RUBY_MACRO_SELECT(x,y) RBIMPL_MACRO_SELECT(x, y)
21325#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj))
21326#define DATA_PTR(obj) RDATA(obj)->data
21327#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1)
21328#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0)
21329#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
21330#pragma GCC visibility push(default)
21331#pragma GCC visibility pop
21332#define Data_Wrap_Struct(klass,mark,free,sval) rb_data_object_wrap( (klass), (sval), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free))
21333#define Data_Make_Struct0(result,klass,type,size,mark,free,sval) VALUE result = rb_data_object_zalloc( (klass), (size), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free)); (sval) = RBIMPL_CAST((type *)DATA_PTR(result)); RBIMPL_CAST( (void)(sval))
21334#define Data_Make_Struct(klass,type,mark,free,sval) RB_GNUC_EXTENSION({ Data_Make_Struct0( data_struct_obj, klass, type, sizeof(type), mark, free, sval); data_struct_obj; })
21335#define Data_Get_Struct(obj,type,sval) ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))
21336#define rb_data_object_wrap_warning(klass,ptr,mark,free) RB_GNUC_EXTENSION( __builtin_choose_expr( __builtin_constant_p(klass) && !(klass), rb_data_object_wrap(klass, ptr, mark, free), (rb_data_object_wrap_warning)(klass, ptr, mark, free)))
21337#define rb_cData rb_cData()
21338#define rb_data_object_wrap_0 rb_data_object_wrap
21339#define rb_data_object_wrap_1 rb_data_object_wrap_warning
21340#define rb_data_object_wrap_2 rb_data_object_wrap_
21341#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING)
21342#define rb_data_object_get_0 rb_data_object_get
21343#define rb_data_object_get_1 rb_data_object_get_warning
21344#define rb_data_object_get_2 rb_data_object_get_
21345#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING)
21346#define rb_data_object_make_0 rb_data_object_make
21347#define rb_data_object_make_1 rb_data_object_make_warning
21348#define rb_data_object_make_2 rb_data_object_make_
21349#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING)
21350#define RBIMPL_RFILE_H
21351#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj))
21352#define RBIMPL_RHASH_H
21353#define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
21354#define RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
21355#define RHASH_IFNONE(h) rb_hash_ifnone(h)
21356#define RHASH_SIZE(h) rb_hash_size_num(h)
21357#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
21358#define RHASH_SET_IFNONE(h,ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
21359#pragma GCC visibility push(default)
21360#pragma GCC visibility pop
21361#define RBIMPL_ROBJECT_H
21362#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj))
21363#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
21364#define ROBJECT_EMBED ROBJECT_EMBED
21365#define ROBJECT_NUMIV ROBJECT_NUMIV
21366#define ROBJECT_IVPTR ROBJECT_IVPTR
21367#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL
21368#define RBIMPL_RREGEXP_H
21369#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj))
21370#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
21371#define RREGEXP_SRC RREGEXP_SRC
21372#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
21373#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
21374#define RREGEXP_SRC_END RREGEXP_SRC_END
21375#define RBIMPL_RSTRUCT_H
21376#define RSTRUCT_PTR(st) rb_struct_ptr(st)
21377#define RSTRUCT_LEN RSTRUCT_LEN
21378#define RSTRUCT_SET RSTRUCT_SET
21379#define RSTRUCT_GET RSTRUCT_GET
21380#pragma GCC visibility push(default)
21381#pragma GCC visibility pop
21382#define RBIMPL_RTYPEDDATA_H
21383#define HAVE_TYPE_RB_DATA_TYPE_T 1
21384#define HAVE_RB_DATA_TYPE_T_FUNCTION 1
21385#define HAVE_RB_DATA_TYPE_T_PARENT 1
21386#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
21387#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
21388#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
21389#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
21390#define Check_TypedStruct(v,t) rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
21391#define RTYPEDDATA_P RTYPEDDATA_P
21392#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
21393#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
21394#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE
21395#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
21396#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
21397#pragma GCC visibility push(default)
21398#pragma GCC visibility pop
21399#define TypedData_Wrap_Struct(klass,data_type,sval) rb_data_typed_object_wrap((klass),(sval),(data_type))
21400#define TypedData_Make_Struct0(result,klass,type,size,data_type,sval) VALUE result = rb_data_typed_object_zalloc(klass, size, data_type); (sval) = RBIMPL_CAST((type *)RTYPEDDATA_DATA(result)); RBIMPL_CAST( (void)(sval))
21401#define TypedData_Make_Struct(klass,type,data_type,sval) RB_GNUC_EXTENSION({ TypedData_Make_Struct0( data_struct_obj, klass, type, sizeof(type), data_type, sval); data_struct_obj; })
21402#define TypedData_Get_Struct(obj,type,data_type,sval) ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
21403#define RBIMPL_CTYPE_H
21404#define _CTYPE_H_
21405#define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a')
21406#define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A')
21407#define _U 01
21408#define _L 02
21409#define _N 04
21410#define _S 010
21411#define _P 020
21412#define _C 040
21413#define _X 0100
21414#define _B 0200
21415#define __CTYPE_PTR (__locale_ctype_ptr ())
21416#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)])
21417#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L))
21418#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U)
21419#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L)
21420#define isdigit(__c) (__ctype_lookup(__c)&_N)
21421#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N))
21422#define isspace(__c) (__ctype_lookup(__c)&_S)
21423#define ispunct(__c) (__ctype_lookup(__c)&_P)
21424#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N))
21425#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B))
21426#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N))
21427#define iscntrl(__c) (__ctype_lookup(__c)&_C)
21428#define isblank(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup(__x)&_B) || (int) (__x) == '\t';})
21429#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)])
21430#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L))
21431#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U)
21432#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L)
21433#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N)
21434#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N))
21435#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S)
21436#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P)
21437#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N))
21438#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B))
21439#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N))
21440#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C)
21441#define isblank_l(__c,__l) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';})
21442#define isascii(__c) ((unsigned)(__c)<=0177)
21443#define toascii(__c) ((__c)&0177)
21444#define isascii_l(__c,__l) ((__l),(unsigned)(__c)<=0177)
21445#define toascii_l(__c,__l) ((__l),(__c)&0177)
21446#define toupper(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (toupper) (__x);})
21447#define tolower(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (tolower) (__x);})
21448#define ISASCII rb_isascii
21449#define ISPRINT rb_isprint
21450#define ISGRAPH rb_isgraph
21451#define ISSPACE rb_isspace
21452#define ISUPPER rb_isupper
21453#define ISLOWER rb_islower
21454#define ISALNUM rb_isalnum
21455#define ISALPHA rb_isalpha
21456#define ISDIGIT rb_isdigit
21457#define ISXDIGIT rb_isxdigit
21458#define ISBLANK rb_isblank
21459#define ISCNTRL rb_iscntrl
21460#define ISPUNCT rb_ispunct
21461#define TOUPPER rb_toupper
21462#define TOLOWER rb_tolower
21463#define STRCASECMP st_locale_insensitive_strcasecmp
21464#define STRNCASECMP st_locale_insensitive_strncasecmp
21465#define STRTOUL ruby_strtoul
21466#pragma GCC visibility push(default)
21467#pragma GCC visibility pop
21468#define RBIMPL_EVAL_H
21469#pragma GCC visibility push(default)
21470#define rb_funcall2 rb_funcallv
21471#define rb_funcall3 rb_funcallv_public
21472#pragma GCC visibility pop
21473#define RBIMPL_EVENT_H
21474#define RUBY_EVENT_NONE 0x0000
21475#define RUBY_EVENT_LINE 0x0001
21476#define RUBY_EVENT_CLASS 0x0002
21477#define RUBY_EVENT_END 0x0004
21478#define RUBY_EVENT_CALL 0x0008
21479#define RUBY_EVENT_RETURN 0x0010
21480#define RUBY_EVENT_C_CALL 0x0020
21481#define RUBY_EVENT_C_RETURN 0x0040
21482#define RUBY_EVENT_RAISE 0x0080
21483#define RUBY_EVENT_ALL 0x00ff
21484#define RUBY_EVENT_B_CALL 0x0100
21485#define RUBY_EVENT_B_RETURN 0x0200
21486#define RUBY_EVENT_THREAD_BEGIN 0x0400
21487#define RUBY_EVENT_THREAD_END 0x0800
21488#define RUBY_EVENT_FIBER_SWITCH 0x1000
21489#define RUBY_EVENT_SCRIPT_COMPILED 0x2000
21490#define RUBY_EVENT_TRACEPOINT_ALL 0xffff
21491#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
21492#define RUBY_INTERNAL_EVENT_SWITCH 0x040000
21493#define RUBY_EVENT_SWITCH 0x040000
21494#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
21495#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
21496#define RUBY_INTERNAL_EVENT_GC_START 0x400000
21497#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
21498#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
21499#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
21500#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
21501#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
21502#define RUBY_INTERNAL_EVENT_MASK 0xffff0000
21503#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
21504#pragma GCC visibility push(default)
21505#pragma GCC visibility pop
21506#define RBIMPL_GC_H
21507#pragma GCC visibility push(default)
21508#pragma GCC visibility pop
21509#define RBIMPL_GLOB_H
21510#pragma GCC visibility push(default)
21511#pragma GCC visibility pop
21512#define RBIMPL_GLOBALS_H
21513#pragma GCC visibility push(default)
21514#define RUBY_INTEGER_UNIFICATION 1
21515#define CLASS_OF rb_class_of
21516#pragma GCC visibility pop
21517#define RBIMPL_INTERPRETER_H
21518#pragma GCC visibility push(default)
21519#define RUBY_INIT_STACK VALUE variable_in_this_stack_frame; ruby_init_stack(&variable_in_this_stack_frame);
21520#pragma GCC visibility pop
21521#define RBIMPL_ITERATOR_H
21522#pragma GCC visibility push(default)
21523#define RB_BLOCK_CALL_FUNC_STRICT 1
21524#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
21525#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg,callback_arg) VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
21526#pragma GCC visibility pop
21527#define RBIMPL_MEMORY_H
21528#define DSIZE_T uint128_t
21529#define RUBY_ALLOCV_LIMIT 1024
21530#define RB_GC_GUARD(v) (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(v); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }))
21531#define RB_ALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type)))
21532#define RB_ALLOC(type) RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type)))
21533#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type)))
21534#define RB_ZALLOC(type) (RB_ZALLOC_N(type, 1))
21535#define RB_REALLOC_N(var,type,n) ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type))))
21536#define ALLOCA_N(type,n) RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))
21537#define RB_ALLOCV(v,n) ((n) < RUBY_ALLOCV_LIMIT ? ((v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n)))
21538#define RB_ALLOCV_N(type,v,n) RBIMPL_CAST((type *) (((size_t)(n) < RUBY_ALLOCV_LIMIT / sizeof(type)) ? ((v) = 0, alloca((n) * sizeof(type))) : rb_alloc_tmp_buffer2(&(v), (n), sizeof(type))))
21539#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))
21540#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n)))
21541#define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
21542#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
21543#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
21544#define ALLOC_N RB_ALLOC_N
21545#define ALLOC RB_ALLOC
21546#define ZALLOC_N RB_ZALLOC_N
21547#define ZALLOC RB_ZALLOC
21548#define REALLOC_N RB_REALLOC_N
21549#define ALLOCV RB_ALLOCV
21550#define ALLOCV_N RB_ALLOCV_N
21551#define ALLOCV_END RB_ALLOCV_END
21552#pragma GCC visibility push(default)
21553#pragma GCC visibility pop
21554#pragma GCC visibility push(default)
21555#pragma GCC visibility pop
21556#undef memcpy
21557#define memcpy ruby_nonempty_memcpy
21558#define RBIMPL_MODULE_H
21559#pragma GCC visibility push(default)
21560#pragma GCC visibility pop
21561#define RBIMPL_NEWOBJ_H
21562#define RB_NEWOBJ(obj,type) type *(obj) = RBIMPL_CAST((type *)rb_newobj())
21563#define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = RBIMPL_CAST((type *)rb_newobj_of(klass, flags))
21564#define NEWOBJ RB_NEWOBJ
21565#define NEWOBJ_OF RB_NEWOBJ_OF
21566#define OBJSETUP rb_obj_setup
21567#define CLONESETUP rb_clone_setup
21568#define DUPSETUP rb_dup_setup
21569#pragma GCC visibility push(default)
21570#pragma GCC visibility pop
21571#define RBIMPL_SCAN_ARGS_H
21572#define RBIMPL_ATTR_DIAGNOSE_IF_H
21573#define RBIMPL_ATTR_DIAGNOSE_IF(_,__,___)
21574#define RBIMPL_INTERN_ARRAY_H
21575#pragma GCC visibility push(default)
21576#define rb_ary_new2 rb_ary_new_capa
21577#define rb_ary_new3 rb_ary_new_from_args
21578#define rb_ary_new4 rb_ary_new_from_values
21579#pragma GCC visibility pop
21580#define RBIMPL_INTERN_ERROR_H
21581#define UNLIMITED_ARGUMENTS (-1)
21582#define rb_exc_new2 rb_exc_new_cstr
21583#define rb_exc_new3 rb_exc_new_str
21584#define rb_check_trusted rb_check_trusted
21585#define rb_check_trusted_inline rb_check_trusted
21586#define rb_check_arity rb_check_arity
21587#pragma GCC visibility push(default)
21588#pragma GCC visibility pop
21589#define rb_check_frozen_internal(obj) do { VALUE frozen_obj = (obj); if (RB_UNLIKELY(RB_OBJ_FROZEN(frozen_obj))) { rb_error_frozen_object(frozen_obj); } } while (0)
21590#define rb_check_frozen rb_check_frozen_inline
21591#define RBIMPL_INTERN_HASH_H
21592#pragma GCC visibility push(default)
21593#define st_foreach_safe rb_st_foreach_safe
21594#pragma GCC visibility pop
21595#define RBIMPL_INTERN_PROC_H
21596#pragma GCC visibility push(default)
21597#pragma GCC visibility pop
21598#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0
21599#define RB_SCAN_ARGS_KEYWORDS 1
21600#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3
21601#define RB_NO_KEYWORDS 0
21602#define RB_PASS_KEYWORDS 1
21603#define RB_PASS_CALLED_KEYWORDS rb_keyword_given_p()
21604#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
21605#pragma GCC visibility push(default)
21606#pragma GCC visibility pop
21607#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10)
21608#define rb_scan_args_count_end(fmt,ofs,vari) ((fmt)[ofs] ? -1 : (vari))
21609#define rb_scan_args_count_block(fmt,ofs,vari) ((fmt)[ofs]!='&' ? rb_scan_args_count_end(fmt, ofs, vari) : rb_scan_args_count_end(fmt, (ofs)+1, (vari)+1))
21610#define rb_scan_args_count_hash(fmt,ofs,vari) ((fmt)[ofs]!=':' ? rb_scan_args_count_block(fmt, ofs, vari) : rb_scan_args_count_block(fmt, (ofs)+1, (vari)+1))
21611#define rb_scan_args_count_trail(fmt,ofs,vari) (!rb_scan_args_isdigit((fmt)[ofs]) ? rb_scan_args_count_hash(fmt, ofs, vari) : rb_scan_args_count_hash(fmt, (ofs)+1, (vari)+((fmt)[ofs]-'0')))
21612#define rb_scan_args_count_var(fmt,ofs,vari) ((fmt)[ofs]!='*' ? rb_scan_args_count_trail(fmt, ofs, vari) : rb_scan_args_count_trail(fmt, (ofs)+1, (vari)+1))
21613#define rb_scan_args_count_opt(fmt,ofs,vari) (!rb_scan_args_isdigit((fmt)[ofs]) ? rb_scan_args_count_var(fmt, ofs, vari) : rb_scan_args_count_var(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0'))
21614#define rb_scan_args_count_lead(fmt,ofs,vari) (!rb_scan_args_isdigit((fmt)[ofs]) ? rb_scan_args_count_var(fmt, ofs, vari) : rb_scan_args_count_opt(fmt, (ofs)+1, (vari)+(fmt)[ofs]-'0'))
21615#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)
21616#define rb_scan_args_verify(fmt,varc) (sizeof(char[1-2*(rb_scan_args_count(fmt)<0)])!=1 ? rb_scan_args_bad_format(fmt) : sizeof(char[1-2*(rb_scan_args_count(fmt)!=(varc))])!=1 ? rb_scan_args_length_mismatch(fmt, varc) : RBIMPL_ASSERT_NOTHING)
21617#define rb_scan_args0(argc,argv,fmt,varc,vars) rb_scan_args_set(RB_SCAN_ARGS_PASS_CALLED_KEYWORDS, argc, argv, rb_scan_args_n_lead(fmt), rb_scan_args_n_opt(fmt), rb_scan_args_n_trail(fmt), rb_scan_args_f_var(fmt), rb_scan_args_f_hash(fmt), rb_scan_args_f_block(fmt), (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
21618#define rb_scan_args_kw0(kw_flag,argc,argv,fmt,varc,vars) rb_scan_args_set(kw_flag, argc, argv, rb_scan_args_n_lead(fmt), rb_scan_args_n_opt(fmt), rb_scan_args_n_trail(fmt), rb_scan_args_f_var(fmt), rb_scan_args_f_hash(fmt), rb_scan_args_f_block(fmt), (rb_scan_args_verify(fmt, varc), vars), (char *)fmt, varc)
21619#define rb_scan_args_next_param() vars[vari++]
21620#undef rb_scan_args_next_param
21621#define rb_scan_args(argc,argvp,fmt,...) __builtin_choose_expr( __builtin_constant_p(fmt), rb_scan_args0( argc, argvp, fmt, (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), ((VALUE*[]){__VA_ARGS__})), (rb_scan_args)(argc, argvp, fmt __VA_OPT__(, __VA_ARGS__)))
21622#define rb_scan_args_kw(kw_flag,argc,argvp,fmt,...) __builtin_choose_expr( __builtin_constant_p(fmt), rb_scan_args_kw0( kw_flag, argc, argvp, fmt, (sizeof((VALUE*[]){__VA_ARGS__})/sizeof(VALUE*)), ((VALUE*[]){__VA_ARGS__})), (rb_scan_args_kw)(kw_flag, argc, argvp, fmt __VA_OPT__(, __VA_ARGS__)))
21623#define RBIMPL_SYMBOL_H
21624#define RB_ID2SYM rb_id2sym
21625#define RB_SYM2ID rb_sym2id
21626#define ID2SYM RB_ID2SYM
21627#define SYM2ID RB_SYM2ID
21628#define CONST_ID_CACHE RUBY_CONST_ID_CACHE
21629#define CONST_ID RUBY_CONST_ID
21630#define rb_intern_const rb_intern_const
21631#pragma GCC visibility push(default)
21632#pragma GCC visibility pop
21633#define RUBY_CONST_ID_CACHE(result,str) { static ID rb_intern_id_cache; rbimpl_intern_const(&rb_intern_id_cache, (str)); result rb_intern_id_cache; }
21634#define RUBY_CONST_ID(var,str) do { static ID rbimpl_id; (var) = rbimpl_intern_const(&rbimpl_id, (str)); } while (0)
21635#define rb_intern(str) (RBIMPL_CONSTANT_P(str) ? __extension__ ({ static ID rbimpl_id; rbimpl_intern_const(&rbimpl_id, (str)); }) : (rb_intern)(str))
21636#define RBIMPL_VARIABLE_H
21637#pragma GCC visibility push(default)
21638#pragma GCC visibility pop
21639#define RUBY_BACKWARD2_INTTYPES_H
21640#define PRI_INT_PREFIX ""
21641#define PRI_LONG_PREFIX "l"
21642#define PRI_SHORT_PREFIX "h"
21643#define RUBY_PRI_VALUE_MARK "\v"
21644#define PRIdVALUE PRI_VALUE_PREFIX"d"
21645#define PRIoVALUE PRI_VALUE_PREFIX"o"
21646#define PRIuVALUE PRI_VALUE_PREFIX"u"
21647#define PRIxVALUE PRI_VALUE_PREFIX"x"
21648#define PRIXVALUE PRI_VALUE_PREFIX"X"
21649#define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
21650#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
21651#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
21652#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
21653#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
21654#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
21655#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
21656#define PRIdSIZE PRI_SIZE_PREFIX"d"
21657#define PRIiSIZE PRI_SIZE_PREFIX"i"
21658#define PRIoSIZE PRI_SIZE_PREFIX"o"
21659#define PRIuSIZE PRI_SIZE_PREFIX"u"
21660#define PRIxSIZE PRI_SIZE_PREFIX"x"
21661#define PRIXSIZE PRI_SIZE_PREFIX"X"
21662#pragma GCC visibility push(default)
21663#define USE_SYMBOL_AS_METHOD_NAME 1
21664#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
21665#define FilePathStringValue(v) ((v) = rb_get_path(v))
21666#define rb_varargs_argc_check_runtime(argc,vargc) (((argc) <= (vargc)) ? (argc) : (rb_fatal("argc(%d) exceeds actual arguments(%d)", argc, vargc), 0))
21667#define rb_varargs_argc_valid_p(argc,vargc) ((argc) == 0 ? (vargc) <= 1 : (argc) == (vargc))
21668#define rb_varargs_argc_check(argc,vargc) __builtin_choose_expr(__builtin_constant_p(argc), (rb_varargs_argc_valid_p(argc, vargc) ? (argc) : rb_varargs_bad_length(argc, vargc)), rb_varargs_argc_check_runtime(argc, vargc))
21669#define RUBY_INTERN_H 1
21670#define RBIMPL_INTERN_BIGNUM_H
21671#pragma GCC visibility push(default)
21672#define rb_big2int(x) rb_big2long(x)
21673#define rb_big2uint(x) rb_big2ulong(x)
21674#define INTEGER_PACK_MSWORD_FIRST 0x01
21675#define INTEGER_PACK_LSWORD_FIRST 0x02
21676#define INTEGER_PACK_MSBYTE_FIRST 0x10
21677#define INTEGER_PACK_LSBYTE_FIRST 0x20
21678#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40
21679#define INTEGER_PACK_2COMP 0x80
21680#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400
21681#define INTEGER_PACK_FORCE_BIGNUM 0x100
21682#define INTEGER_PACK_NEGATIVE 0x200
21683#define INTEGER_PACK_LITTLE_ENDIAN (INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_LSBYTE_FIRST)
21684#define INTEGER_PACK_BIG_ENDIAN (INTEGER_PACK_MSWORD_FIRST | INTEGER_PACK_MSBYTE_FIRST)
21685#pragma GCC visibility pop
21686#define RBIMPL_INTERN_COMPAR_H
21687#pragma GCC visibility push(default)
21688#pragma GCC visibility pop
21689#define RBIMPL_INTERN_COMPLEX_H
21690#pragma GCC visibility push(default)
21691#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0))
21692#define rb_complex_raw2(x,y) rb_complex_raw((x), (y))
21693#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0))
21694#define rb_complex_new2(x,y) rb_complex_new((x), (y))
21695#define rb_complex_add rb_complex_plus
21696#define rb_complex_sub rb_complex_minus
21697#define rb_complex_nagate rb_complex_uminus
21698#define rb_Complex1(x) rb_Complex((x), INT2FIX(0))
21699#define rb_Complex2(x,y) rb_Complex((x), (y))
21700#pragma GCC visibility pop
21701#define RBIMPL_INTERN_CONT_H
21702#pragma GCC visibility push(default)
21703#pragma GCC visibility pop
21704#define RBIMPL_INTERN_DIR_H
21705#pragma GCC visibility push(default)
21706#pragma GCC visibility pop
21707#define RBIMPL_INTERN_ENUM_H
21708#pragma GCC visibility push(default)
21709#pragma GCC visibility pop
21710#define RBIMPL_INTERN_ENUMERATOR_H
21711#define RBIMPL_INTERN_EVAL_H
21712#pragma GCC visibility push(default)
21713#pragma GCC visibility pop
21714#pragma GCC visibility push(default)
21715#pragma GCC visibility pop
21716#define SIZED_ENUMERATOR(obj,argc,argv,size_fn) rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn))
21717#define SIZED_ENUMERATOR_KW(obj,argc,argv,size_fn,kw_splat) rb_enumeratorize_with_size_kw((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn), (kw_splat))
21718#define RETURN_SIZED_ENUMERATOR(obj,argc,argv,size_fn) do { if (!rb_block_given_p()) return SIZED_ENUMERATOR(obj, argc, argv, size_fn); } while (0)
21719#define RETURN_SIZED_ENUMERATOR_KW(obj,argc,argv,size_fn,kw_splat) do { if (!rb_block_given_p()) return SIZED_ENUMERATOR_KW(obj, argc, argv, size_fn, kw_splat); } while (0)
21720#define RETURN_ENUMERATOR(obj,argc,argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)
21721#define RETURN_ENUMERATOR_KW(obj,argc,argv,kw_splat) RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat)
21722#define RBIMPL_INTERN_FILE_H
21723#pragma GCC visibility push(default)
21724#pragma GCC visibility pop
21725#define RBIMPL_INTERN_GC_H
21726#pragma GCC visibility push(default)
21727#pragma GCC visibility pop
21728#define RBIMPL_INTERN_IO_H
21729#pragma GCC visibility push(default)
21730#define rb_defout rb_stdout
21731#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)
21732#pragma GCC visibility pop
21733#define RBIMPL_INTERN_LOAD_H
21734#pragma GCC visibility push(default)
21735#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f)
21736#define HAVE_RB_EXT_RACTOR_SAFE 1
21737#pragma GCC visibility pop
21738#define RBIMPL_INTERN_MARSHAL_H
21739#pragma GCC visibility push(default)
21740#pragma GCC visibility pop
21741#define RBIMPL_INTERN_NUMERIC_H
21742#define RB_NUM_COERCE_FUNCS_NEED_OPID 1
21743#pragma GCC visibility push(default)
21744#pragma GCC visibility pop
21745#define RBIMPL_INTERN_OBJECT_H
21746#pragma GCC visibility push(default)
21747#define RB_OBJ_INIT_COPY(obj,orig) ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
21748#define OBJ_INIT_COPY(obj,orig) RB_OBJ_INIT_COPY(obj, orig)
21749#pragma GCC visibility pop
21750#define RBIMPL_INTERN_PARSE_H
21751#pragma GCC visibility push(default)
21752#pragma GCC visibility pop
21753#define RBIMPL_INTERN_PROCESS_H
21754#pragma GCC visibility push(default)
21755#pragma GCC visibility pop
21756#define RBIMPL_INTERN_RANDOM_H
21757#pragma GCC visibility push(default)
21758#pragma GCC visibility pop
21759#define RBIMPL_INTERN_RANGE_H
21760#pragma GCC visibility push(default)
21761#pragma GCC visibility pop
21762#define RBIMPL_INTERN_RATIONAL_H
21763#pragma GCC visibility push(default)
21764#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1))
21765#define rb_rational_raw2(x,y) rb_rational_raw((x), (y))
21766#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1))
21767#define rb_rational_new2(x,y) rb_rational_new((x), (y))
21768#define rb_Rational1(x) rb_Rational((x), INT2FIX(1))
21769#define rb_Rational2(x,y) rb_Rational((x), (y))
21770#pragma GCC visibility pop
21771#define RBIMPL_INTERN_RE_H
21772#pragma GCC visibility push(default)
21773#define rb_memcmp memcmp
21774#define HAVE_RB_REG_NEW_STR 1
21775#pragma GCC visibility pop
21776#define RBIMPL_INTERN_RUBY_H
21777#pragma GCC visibility push(default)
21778#define rb_argv rb_get_argv()
21779#pragma GCC visibility pop
21780#define RBIMPL_INTERN_SELECT_H
21781#define RBIMPL_INTERN_SELECT_LARGESIZE_H
21782#define rb_fd_ptr rb_fd_ptr
21783#define rb_fd_max rb_fd_max
21784#pragma GCC visibility push(default)
21785#pragma GCC visibility pop
21786#pragma GCC visibility push(default)
21787#pragma GCC visibility pop
21788#define RBIMPL_INTERN_SIGNAL_H
21789#pragma GCC visibility push(default)
21790#define posix_signal ruby_posix_signal
21791#pragma GCC visibility pop
21792#define RBIMPL_INTERN_SPRINTF_H
21793#pragma GCC visibility push(default)
21794#pragma GCC visibility pop
21795#define RBIMPL_INTERN_STRING_H
21796#pragma GCC visibility push(default)
21797#define rb_str_dup_frozen rb_str_new_frozen
21798#define rb_hash_uint32(h,i) st_hash_uint32((h), (i))
21799#define rb_hash_uint(h,i) st_hash_uint((h), (i))
21800#define rb_hash_end(h) st_hash_end(h)
21801#define rb_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_str_new_static : rb_str_new) ((str), (len)))
21802#define rb_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_new_cstr : rb_str_new_cstr) (str))
21803#define rb_usascii_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_usascii_str_new_static : rb_usascii_str_new) ((str), (len)))
21804#define rb_utf8_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_utf8_str_new_static : rb_utf8_str_new) ((str), (len)))
21805#define rb_tainted_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_tainted_str_new_cstr : rb_tainted_str_new_cstr) (str))
21806#define rb_usascii_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_usascii_str_new_cstr : rb_usascii_str_new_cstr) (str))
21807#define rb_utf8_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_utf8_str_new_cstr : rb_utf8_str_new_cstr) (str))
21808#define rb_external_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_external_str_new_cstr : rb_external_str_new_cstr) (str))
21809#define rb_locale_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_locale_str_new_cstr : rb_locale_str_new_cstr) (str))
21810#define rb_str_buf_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_buf_new_cstr : rb_str_buf_new_cstr) (str))
21811#define rb_str_cat_cstr(buf,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((buf), (str)))
21812#define rb_exc_new_cstr(exc,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_exc_new_cstr : rb_exc_new_cstr) ((exc), (str)))
21813#define rb_str_new2 rb_str_new_cstr
21814#define rb_str_new3 rb_str_new_shared
21815#define rb_str_new4 rb_str_new_frozen
21816#define rb_str_new5 rb_str_new_with_class
21817#define rb_tainted_str_new2 rb_tainted_str_new_cstr
21818#define rb_str_buf_new2 rb_str_buf_new_cstr
21819#define rb_usascii_str_new2 rb_usascii_str_new_cstr
21820#define rb_str_buf_cat rb_str_cat
21821#define rb_str_buf_cat2 rb_str_cat_cstr
21822#define rb_str_cat2 rb_str_cat_cstr
21823#define rb_strlen_lit(str) (sizeof(str "") - 1)
21824#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str))
21825#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str))
21826#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str))
21827#define rb_enc_str_new_lit(str,enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc))
21828#define rb_str_new_literal(str) rb_str_new_lit(str)
21829#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str)
21830#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str)
21831#define rb_enc_str_new_literal(str,enc) rb_enc_str_new_lit(str, enc)
21832#pragma GCC visibility pop
21833#define RBIMPL_INTERN_STRUCT_H
21834#pragma GCC visibility push(default)
21835#pragma GCC visibility pop
21836#define RBIMPL_INTERN_THREAD_H
21837#pragma GCC visibility push(default)
21838#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1)
21839#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1)
21840#pragma GCC visibility pop
21841#define RBIMPL_INTERN_TIME_H
21842#pragma GCC visibility push(default)
21843#pragma GCC visibility pop
21844#define RBIMPL_INTERN_VARIABLE_H
21845#pragma GCC visibility push(default)
21846#pragma GCC visibility pop
21847#define RUBY_VM 1
21848#define HAVE_NATIVETHREAD
21849#define InitVM(ext) {void InitVM_ ##ext(void);InitVM_ ##ext();}
21850#define rb_yield_values(argc,...) __extension__({ const int rb_yield_values_argc = (argc); const VALUE rb_yield_values_args[] = {__VA_ARGS__}; const int rb_yield_values_nargs = (int)(sizeof(rb_yield_values_args) / sizeof(VALUE)); rb_yield_values2( rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), rb_yield_values_nargs ? rb_yield_values_args : NULL); })
21851#define rb_funcall(recv,mid,argc,...) __extension__({ const int rb_funcall_argc = (argc); const VALUE rb_funcall_args[] = {__VA_ARGS__}; const int rb_funcall_nargs = (int)(sizeof(rb_funcall_args) / sizeof(VALUE)); rb_funcallv(recv, mid, rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), rb_funcall_nargs ? rb_funcall_args : NULL); })
21852#define RUBY_SUBST_H 1
21853#undef snprintf
21854#undef vsnprintf
21855#define snprintf ruby_snprintf
21856#define vsnprintf ruby_vsnprintf
21857#pragma GCC visibility pop
21858#define RUBY_VM_CORE_H
21859#define N_OR_RUBY_DEBUG(n) (((n) > 0) ? (n) : RUBY_DEBUG)
21860#define VM_CHECK_MODE N_OR_RUBY_DEBUG(0)
21861#define VMDEBUG 0
21862#define RUBY_TOPLEVEL_ASSERT_H
21863#undef assert
21864#define assert RUBY_ASSERT_NDEBUG
21865#define VM_ASSERT(expr) ((void)0)
21866#define VM_UNREACHABLE(func) UNREACHABLE
21867#define _SETJMP_H_
21868#define _JBTYPE long
21869#define _JBLEN 32
21870#define _SAVEMASK _JBLEN
21871#define _SIGMASK (_JBLEN+1)
21872#define _CYGWIN_WORKING_SIGSETJMP
21873#define __SIGMASK_FUNC pthread_sigmask
21874#define sigsetjmp(env,savemask) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((*_sjbuf)[_SAVEMASK] = savemask, __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)), setjmp (*_sjbuf)); })
21875#define siglongjmp(env,val) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((((*_sjbuf)[_SAVEMASK]) ? __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0) : 0), longjmp (*_sjbuf, val)); })
21876#define CCAN_LIST_H
21877#undef assert
21878#define assert(__e) ((void)0)
21879#define static_assert _Static_assert
21880#define CCAN_STR_H
21881#define stringify(expr) stringify_1(expr)
21882#define stringify_1(expr) #expr
21883#define CCAN_CONTAINER_OF_H
21884#define CCAN_CHECK_TYPE_H
21885#define check_type(expr,type) ((typeof(expr) *)0 != (type *)0)
21886#define check_types_match(expr1,expr2) ((typeof(expr1) *)0 != (typeof(expr2) *)0)
21887#define container_of(member_ptr,containing_type,member) ((containing_type *) ((char *)(member_ptr) - container_off(containing_type, member)) + check_types_match(*(member_ptr), ((containing_type *)0)->member))
21888#define container_of_or_null(member_ptr,containing_type,member) ((containing_type *) container_of_or_null_(member_ptr, container_off(containing_type, member)) + check_types_match(*(member_ptr), ((containing_type *)0)->member))
21889#define container_off(containing_type,member) offsetof(containing_type, member)
21890#define container_of_var(member_ptr,container_var,member) container_of(member_ptr, typeof(*container_var), member)
21891#define container_off_var(var,member) container_off(typeof(*var), member)
21892#define LIST_LOC __FILE__ ":" stringify(__LINE__)
21893#define list_debug(h,loc) ((void)loc, h)
21894#define list_debug_node(n,loc) ((void)loc, n)
21895#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
21896#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)
21897#define list_add_after(h,p,n) list_add_after_(h, p, n, LIST_LOC)
21898#define list_add(h,n) list_add_(h, n, LIST_LOC)
21899#define list_add_before(h,p,n) list_add_before_(h, p, n, LIST_LOC)
21900#define list_add_tail(h,n) list_add_tail_(h, n, LIST_LOC)
21901#define list_empty(h) list_empty_(h, LIST_LOC)
21902#define list_empty_nodebug(h) list_empty(h)
21903#define list_del(n) list_del_(n, LIST_LOC)
21904#define list_del_init(n) list_del_init_(n, LIST_LOC)
21905#define list_swap(o,n) list_swap_(o, n, LIST_LOC)
21906#define list_entry(n,type,member) container_of(n, type, member)
21907#define list_top(h,type,member) ((type *)list_top_((h), list_off_(type, member)))
21908#define list_pop(h,type,member) ((type *)list_pop_((h), list_off_(type, member)))
21909#define list_tail(h,type,member) ((type *)list_tail_((h), list_off_(type, member)))
21910#define list_for_each(h,i,member) list_for_each_off(h, i, list_off_var_(i, member))
21911#define list_for_each_rev(h,i,member) list_for_each_rev_off(h, i, list_off_var_(i, member))
21912#define list_for_each_rev_safe(h,i,nxt,member) list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member))
21913#define list_for_each_safe(h,i,nxt,member) list_for_each_safe_off(h, i, nxt, list_off_var_(i, member))
21914#define list_next(h,i,member) ((list_typeof(i))list_entry_or_null(list_debug(h, __FILE__ ":" stringify(__LINE__)), (i)->member.next, list_off_var_((i), member)))
21915#define list_prev(h,i,member) ((list_typeof(i))list_entry_or_null(list_debug(h, __FILE__ ":" stringify(__LINE__)), (i)->member.prev, list_off_var_((i), member)))
21916#define list_append_list(t,f) list_append_list_(t, f, __FILE__ ":" stringify(__LINE__))
21917#define list_prepend_list(t,f) list_prepend_list_(t, f, LIST_LOC)
21918#define list_for_each_off_dir_(h,i,off,dir) for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, (off)); list_node_from_off_((void *)i, (off)) != &(h)->n; i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, (off)))
21919#define list_for_each_safe_off_dir_(h,i,nxt,off,dir) for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, (off)), nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, (off)); list_node_from_off_(i, (off)) != &(h)->n; i = nxt, nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, (off)))
21920#define list_for_each_off(h,i,off) list_for_each_off_dir_((h),(i),(off),next)
21921#define list_for_each_rev_off(h,i,off) list_for_each_off_dir_((h),(i),(off),prev)
21922#define list_for_each_safe_off(h,i,nxt,off) list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
21923#define list_for_each_rev_safe_off(h,i,nxt,off) list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
21924#define list_entry_off(n,type,off) ((type *)list_node_from_off_((n), (off)))
21925#define list_head_off(h,type,off) ((type *)list_head_off((h), (off)))
21926#define list_tail_off(h,type,off) ((type *)list_tail_((h), (off)))
21927#define list_add_off(h,n,off) list_add((h), list_node_from_off_((n), (off)))
21928#define list_del_off(n,off) list_del(list_node_from_off_((n), (off)))
21929#define list_del_from_off(h,n,off) list_del_from(h, list_node_from_off_((n), (off)))
21930#define list_off_(type,member) (container_off(type, member) + check_type(((type *)0)->member, struct list_node))
21931#define list_off_var_(var,member) (container_off_var(var, member) + check_type(var->member, struct list_node))
21932#define list_typeof(var) typeof(var)
21933#define RUBY_ID_H
21934#define ID_STATIC_SYM RUBY_ID_STATIC_SYM
21935#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT
21936#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK
21937#define ID_LOCAL RUBY_ID_LOCAL
21938#define ID_INSTANCE RUBY_ID_INSTANCE
21939#define ID_GLOBAL RUBY_ID_GLOBAL
21940#define ID_ATTRSET RUBY_ID_ATTRSET
21941#define ID_CONST RUBY_ID_CONST
21942#define ID_CLASS RUBY_ID_CLASS
21943#define ID_JUNK RUBY_ID_JUNK
21944#define ID_INTERNAL RUBY_ID_INTERNAL
21945#define symIFUNC ID2SYM(idIFUNC)
21946#define symCFUNC ID2SYM(idCFUNC)
21947#define RUBY_TOKEN_DOT2 128
21948#define RUBY_TOKEN_DOT3 129
21949#define RUBY_TOKEN_BDOT2 130
21950#define RUBY_TOKEN_BDOT3 131
21951#define RUBY_TOKEN_UPLUS 132
21952#define RUBY_TOKEN_UMINUS 133
21953#define RUBY_TOKEN_POW 134
21954#define RUBY_TOKEN_CMP 135
21955#define RUBY_TOKEN_LSHFT 136
21956#define RUBY_TOKEN_RSHFT 137
21957#define RUBY_TOKEN_LEQ 138
21958#define RUBY_TOKEN_GEQ 139
21959#define RUBY_TOKEN_EQ 140
21960#define RUBY_TOKEN_EQQ 141
21961#define RUBY_TOKEN_NEQ 142
21962#define RUBY_TOKEN_MATCH 143
21963#define RUBY_TOKEN_NMATCH 144
21964#define RUBY_TOKEN_AREF 145
21965#define RUBY_TOKEN_ASET 146
21966#define RUBY_TOKEN_COLON2 147
21967#define RUBY_TOKEN_ANDOP 148
21968#define RUBY_TOKEN_OROP 149
21969#define RUBY_TOKEN_ANDDOT 150
21970#define RUBY_TOKEN(t) RUBY_TOKEN_ ##t
21971#define RUBY_TOKEN2ID_TYPE(tok,type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM)
21972#define TOKEN2LOCALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_LOCAL)
21973#define TOKEN2INSTANCEID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_INSTANCE)
21974#define TOKEN2GLOBALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_GLOBAL)
21975#define TOKEN2CONSTID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CONST)
21976#define TOKEN2CLASSID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CLASS)
21977#define TOKEN2ATTRSETID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_ATTRSET)
21978#define DEFINE_LOCALID_FROM_TOKEN(n) id ##n = TOKEN2LOCALID(t ##n)
21979#define DEFINE_INSTANCEID_FROM_TOKEN(n) id ##n = TOKEN2INSTANCEID(t ##n)
21980#define DEFINE_GLOBALID_FROM_TOKEN(n) id ##n = TOKEN2GLOBALID(t ##n)
21981#define DEFINE_CONSTID_FROM_TOKEN(n) id ##n = TOKEN2CONSTID(t ##n)
21982#define DEFINE_CLASSID_FROM_TOKEN(n) id ##n = TOKEN2CLASSID(t ##n)
21983#define DEFINE_ATTRSETID_FROM_TOKEN(n) id ##n = TOKEN2ATTRSETID(t ##n)
21984#define RUBY_INTERNAL_H 1
21985#define LIKELY(x) RB_LIKELY(x)
21986#define UNLIKELY(x) RB_UNLIKELY(x)
21987#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
21988#define roomof(x,y) (((x) + (y) - 1) / (y))
21989#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
21990#define ACCESS_ONCE(type,x) (*((volatile type *)&(x)))
21991#undef RARRAY_AREF
21992#undef RClass
21993#undef RCLASS_SUPER
21994#undef NEWOBJ_OF
21995#undef RB_NEWOBJ_OF
21996#undef RB_OBJ_WRITE
21997#undef RHASH_IFNONE
21998#undef RHASH_SIZE
21999#undef RHASH_TBL
22000#undef RHASH_EMPTY_P
22001#undef ROBJECT_IV_INDEX_TBL
22002#undef RSTRUCT_LEN
22003#undef RSTRUCT_PTR
22004#undef RSTRUCT_SET
22005#undef RSTRUCT_GET
22006#define rb_ary_new_from_args(...) rb_nonexistent_symbol(__VA_ARGS__)
22007#define rb_io_fptr_finalize(...) rb_nonexistent_symbol(__VA_ARGS__)
22008#define rb_fstring_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22009#define rb_sym_intern_ascii_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22010#define rb_funcallv(...) rb_nonexistent_symbol(__VA_ARGS__)
22011#define rb_method_basic_definition_p(...) rb_nonexistent_symbol(__VA_ARGS__)
22012#pragma GCC visibility push(default)
22013#pragma GCC visibility pop
22014#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
22015#define rp_m(msg,obj) do { fputs((msg), stderr); rb_obj_info_dump((VALUE)(obj)); } while (0)
22016#define bp() ruby_debug_breakpoint()
22017#define RBOOL(v) ((v) ? Qtrue : Qfalse)
22018#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
22019#define INTERNAL_ARRAY_H
22020#define INTERNAL_STATIC_ASSERT_H
22021#define STATIC_ASSERT RBIMPL_STATIC_ASSERT
22022#define ARRAY_DEBUG (0+RUBY_DEBUG)
22023#define RARRAY_PTR_IN_USE_FLAG FL_USER14
22024#pragma GCC visibility push(default)
22025#pragma GCC visibility pop
22026#undef rb_ary_new_from_args
22027#define rb_ary_new_from_args(n,...) __extension__ ({ const VALUE args_to_new_ary[] = {__VA_ARGS__}; if (__builtin_constant_p(n)) { STATIC_ASSERT(rb_ary_new_from_args, numberof(args_to_new_ary) == (n)); } rb_ary_new_from_values(numberof(args_to_new_ary), args_to_new_ary); })
22028#undef RARRAY_AREF
22029#define INTERNAL_SERIAL_H
22030#define SERIALT2NUM ULL2NUM
22031#define PRI_SERIALT_PREFIX PRI_LL_PREFIX
22032#define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
22033#define INTERNAL_VM_H
22034#undef rb_funcallv
22035#undef rb_method_basic_definition_p
22036#pragma GCC visibility push(default)
22037#pragma GCC visibility pop
22038#pragma GCC visibility push(default)
22039#pragma GCC visibility pop
22040#pragma GCC visibility push(default)
22041#pragma GCC visibility pop
22042#pragma GCC visibility push(default)
22043#pragma GCC visibility pop
22044#define RUBY_DTRACE_CREATE_HOOK(name,arg) RUBY_DTRACE_HOOK(name ##_CREATE, arg)
22045#define RUBY_DTRACE_HOOK(name,arg) do { if (UNLIKELY(RUBY_DTRACE_ ##name ##_ENABLED())) { int dtrace_line; const char *dtrace_file = rb_source_location_cstr(&dtrace_line); if (!dtrace_file) dtrace_file = ""; RUBY_DTRACE_ ##name(arg, dtrace_file, dtrace_line); } } while (0)
22046#define RUBY_METHOD_H 1
22047#define INTERNAL_IMEMO_H
22048#define INTERNAL_GC_H
22049#define INTERNAL_COMPILERS_H
22050#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
22051#define GCC_VERSION_SINCE(x,y,z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
22052#define GCC_VERSION_BEFORE(x,y,z) (RBIMPL_COMPILER_BEFORE(GCC, (x), (y), (z)) || (RBIMPL_COMPILER_IS(GCC) && ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && (RBIMPL_COMPILER_VERSION_PATCH == (z))))))
22053#define MSC_VERSION_SINCE(_) RBIMPL_COMPILER_SINCE(MSVC, (_) / 100, (_) % 100, 0)
22054#define MSC_VERSION_BEFORE(_) RBIMPL_COMPILER_BEFORE(MSVC, (_) / 100, (_) % 100, 0)
22055#define __has_declspec_attribute(...) RBIMPL_HAS_DECLSPEC_ATTRIBUTE(__VA_ARGS__)
22056#define __has_warning(...) RBIMPL_HAS_WARNING(__VA_ARGS__)
22057#define RB_OBJ_BUILTIN_TYPE(obj) rb_obj_builtin_type(obj)
22058#define OBJ_BUILTIN_TYPE(obj) RB_OBJ_BUILTIN_TYPE(obj)
22059#define rb_obj_builtin_type(obj) __extension__({ VALUE arg_obj = (obj); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })
22060#define FLEX_ARY_LEN
22061#define BITFIELD(type,name,size) type name : size
22062#define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
22063#define RB_RVARGC_NEWOBJ_OF(var,T,c,f,s) T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED, s) : rb_wb_unprotected_newobj_of((c), (f), s))
22064#define RB_RVARGC_EC_NEWOBJ_OF(ec,var,T,c,f,s) T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, s) : rb_wb_unprotected_newobj_of((c), (f), s))
22065#define RB_NEWOBJ_OF(var,T,c,f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
22066#define RB_EC_NEWOBJ_OF(ec,var,T,c,f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
22067#define NEWOBJ_OF(var,T,c,f) RB_NEWOBJ_OF((var), T, (c), (f))
22068#define RVARGC_NEWOBJ_OF(var,T,c,f,s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
22069#define RB_OBJ_GC_FLAGS_MAX 6
22070#define INTERNAL_WARNINGS_H
22071#define COMPILER_WARNING_PUSH RBIMPL_WARNING_PUSH()
22072#define COMPILER_WARNING_POP RBIMPL_WARNING_POP()
22073#define COMPILER_WARNING_ERROR(flag) RBIMPL_WARNING_ERROR(flag)
22074#define COMPILER_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag)
22075#define UNALIGNED_MEMBER_ACCESS(expr) __extension__({ COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Waddress-of-packed-member); __typeof__(expr) unaligned_member_access_result = (expr); COMPILER_WARNING_POP; unaligned_member_access_result; })
22076#define UNALIGNED_MEMBER_PTR(ptr,mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
22077#define RB_OBJ_WRITE(a,slot,b) rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), (VALUE)(b), __FILE__, __LINE__)
22078#define SIZE_POOL_COUNT 1
22079#pragma GCC visibility push(default)
22080#pragma GCC visibility pop
22081#pragma GCC visibility push(default)
22082#pragma GCC visibility pop
22083#define SIZED_REALLOC_N(x,y,z,w) REALLOC_N(x, y, z)
22084#define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
22085#define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
22086#define ruby_sized_xfree ruby_sized_xfree_inlined
22087#define IMEMO_DEBUG 0
22088#define IMEMO_MASK 0x0f
22089#define IMEMO_FL_USHIFT (FL_USHIFT + 4)
22090#define IMEMO_FL_USER0 FL_USER4
22091#define IMEMO_FL_USER1 FL_USER5
22092#define IMEMO_FL_USER2 FL_USER6
22093#define IMEMO_FL_USER3 FL_USER7
22094#define IMEMO_FL_USER4 FL_USER8
22095#define IMEMO_FL_USER5 FL_USER9
22096#define THROW_DATA_CONSUMED IMEMO_FL_USER0
22097#define THROW_DATA_P(err) imemo_throw_data_p((VALUE)err)
22098#define MEMO_CAST(m) ((struct MEMO *)(m))
22099#define MEMO_NEW(a,b,c) ((struct MEMO *)rb_imemo_new(imemo_memo, (VALUE)(a), (VALUE)(b), (VALUE)(c), 0))
22100#define MEMO_FOR(type,value) ((type *)RARRAY_PTR(value))
22101#define NEW_MEMO_FOR(type,value) ((value) = rb_ary_tmp_new_fill(type_roomof(type, VALUE)), MEMO_FOR(type, value))
22102#define NEW_PARTIAL_MEMO_FOR(type,value,member) ((value) = rb_ary_tmp_new_fill(type_roomof(type, VALUE)), rb_ary_set_len((value), offsetof(type, member) / sizeof(VALUE)), MEMO_FOR(type, value))
22103#pragma GCC visibility push(default)
22104#pragma GCC visibility pop
22105#define IMEMO_TYPE_P(v,t) imemo_type_p((VALUE)v, t)
22106#pragma GCC diagnostic push
22107#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22108#pragma GCC diagnostic pop
22109#pragma GCC diagnostic push
22110#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22111#pragma GCC diagnostic pop
22112#define END_OF_ENUMERATION(key)
22113#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
22114#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
22115#define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
22116#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags |= IMEMO_FL_USER3)
22117#define METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4)
22118#define METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4)
22119#define METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5)
22120#define METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5)
22121#define METHOD_ENTRY_CACHEABLE(me) !(METHOD_ENTRY_VISI(me) == METHOD_VISI_PROTECTED)
22122#define VM_METHOD_TYPE_MINIMUM_BITS 4
22123#define rb_iseq_t rb_iseq_t
22124#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
22125#define UNDEFINED_REFINED_METHOD_P(def) ((def)->type == VM_METHOD_TYPE_REFINED && UNDEFINED_METHOD_ENTRY_P((def)->body.refined.orig_me))
22126#pragma GCC visibility push(default)
22127#pragma GCC visibility pop
22128#define RUBY_NODE_H 1
22129#define RNODE(obj) ((struct RNode *)(obj))
22130#define NODE_FL_NEWLINE (((VALUE)1)<<7)
22131#define NODE_TYPESHIFT 8
22132#define NODE_TYPEMASK (((VALUE)0x7f)<<NODE_TYPESHIFT)
22133#define nd_type(n) ((int) (((n)->flags & NODE_TYPEMASK)>>NODE_TYPESHIFT))
22134#define nd_set_type(n,t) rb_node_set_type(n, t)
22135#define nd_init_type(n,t) (n)->flags=(((n)->flags&~NODE_TYPEMASK)|((((unsigned long)(t))<<NODE_TYPESHIFT)&NODE_TYPEMASK))
22136#define NODE_LSHIFT (NODE_TYPESHIFT+7)
22137#define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
22138#define nd_line(n) (int)(((SIGNED_VALUE)(n)->flags)>>NODE_LSHIFT)
22139#define nd_set_line(n,l) (n)->flags=(((n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
22140#define nd_first_column(n) ((int)((n)->nd_loc.beg_pos.column))
22141#define nd_set_first_column(n,v) ((n)->nd_loc.beg_pos.column = (v))
22142#define nd_first_lineno(n) ((int)((n)->nd_loc.beg_pos.lineno))
22143#define nd_set_first_lineno(n,v) ((n)->nd_loc.beg_pos.lineno = (v))
22144#define nd_first_loc(n) ((n)->nd_loc.beg_pos)
22145#define nd_set_first_loc(n,v) (nd_first_loc(n) = (v))
22146#define nd_last_column(n) ((int)((n)->nd_loc.end_pos.column))
22147#define nd_set_last_column(n,v) ((n)->nd_loc.end_pos.column = (v))
22148#define nd_last_lineno(n) ((int)((n)->nd_loc.end_pos.lineno))
22149#define nd_set_last_lineno(n,v) ((n)->nd_loc.end_pos.lineno = (v))
22150#define nd_last_loc(n) ((n)->nd_loc.end_pos)
22151#define nd_set_last_loc(n,v) (nd_last_loc(n) = (v))
22152#define nd_node_id(n) ((n)->node_id)
22153#define nd_set_node_id(n,id) ((n)->node_id = (id))
22154#define nd_head u1.node
22155#define nd_alen u2.argc
22156#define nd_next u3.node
22157#define nd_cond u1.node
22158#define nd_body u2.node
22159#define nd_else u3.node
22160#define nd_resq u2.node
22161#define nd_ensr u3.node
22162#define nd_1st u1.node
22163#define nd_2nd u2.node
22164#define nd_stts u1.node
22165#define nd_entry u3.id
22166#define nd_vid u1.id
22167#define nd_var u1.node
22168#define nd_iter u3.node
22169#define nd_value u2.node
22170#define nd_aid u3.id
22171#define nd_lit u1.value
22172#define nd_recv u1.node
22173#define nd_mid u2.id
22174#define nd_args u3.node
22175#define nd_ainfo u3.args
22176#define nd_defn u3.node
22177#define nd_cpath u1.node
22178#define nd_super u3.node
22179#define nd_beg u1.node
22180#define nd_end u2.node
22181#define nd_state u3.state
22182#define nd_nth u2.argc
22183#define nd_alias u1.id
22184#define nd_orig u2.id
22185#define nd_undef u2.node
22186#define nd_brace u2.argc
22187#define nd_pconst u1.node
22188#define nd_pkwargs u2.node
22189#define nd_pkwrestarg u3.node
22190#define nd_apinfo u3.apinfo
22191#define nd_fpinfo u3.fpinfo
22192#define nd_tbl u1.tbl
22193#define nd_pid u1.id
22194#define nd_plen u2.argc
22195#define nd_cflag u2.id
22196#define nd_cval u3.value
22197#define nd_rval u2.value
22198#define nd_tag u1.id
22199#define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
22200#define NEW_NODE_WITH_LOCALS(t,a1,a2,loc) node_newnode_with_locals(p, (t),(VALUE)(a1),(VALUE)(a2),loc)
22201#define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
22202#define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
22203#define NEW_SCOPE(a,b,loc) NEW_NODE_WITH_LOCALS(NODE_SCOPE,b,a,loc)
22204#define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
22205#define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
22206#define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
22207#define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
22208#define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
22209#define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc)
22210#define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
22211#define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc)
22212#define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
22213#define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
22214#define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc)
22215#define NEW_FOR_MASGN(v,loc) NEW_NODE(NODE_FOR_MASGN,v,0,0,loc)
22216#define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
22217#define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
22218#define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
22219#define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
22220#define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
22221#define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
22222#define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
22223#define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
22224#define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
22225#define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
22226#define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
22227#define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
22228#define NEW_LIST(a,loc) NEW_NODE(NODE_LIST,a,1,0,loc)
22229#define NEW_ZLIST(loc) NEW_NODE(NODE_ZLIST,0,0,0,loc)
22230#define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
22231#define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
22232#define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,v,loc)
22233#define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
22234#define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
22235#define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
22236#define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
22237#define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
22238#define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
22239#define NEW_OP_ASGN2(r,t,i,o,val,loc) NEW_NODE(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o,t,loc),loc)
22240#define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
22241#define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
22242#define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
22243#define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
22244#define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,v,loc)
22245#define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
22246#define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
22247#define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
22248#define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
22249#define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
22250#define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
22251#define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
22252#define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
22253#define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
22254#define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
22255#define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
22256#define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
22257#define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
22258#define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
22259#define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
22260#define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
22261#define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
22262#define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
22263#define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
22264#define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
22265#define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
22266#define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
22267#define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
22268#define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
22269#define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
22270#define NEW_KW_ARG(i,v,loc) NEW_NODE(NODE_KW_ARG,i,v,0,loc)
22271#define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
22272#define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
22273#define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
22274#define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
22275#define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
22276#define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
22277#define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
22278#define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
22279#define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
22280#define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
22281#define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
22282#define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
22283#define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
22284#define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
22285#define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
22286#define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,1,loc)
22287#define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
22288#define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
22289#define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
22290#define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
22291#define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
22292#define NEW_PREEXE(b,loc) NEW_SCOPE(b,loc)
22293#define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
22294#define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
22295#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
22296#define NODE_REQUIRED_KEYWORD_P(node) ((node)->nd_value == NODE_SPECIAL_REQUIRED_KEYWORD)
22297#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
22298#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
22299#define NODE_SPECIAL_EXCESSIVE_COMMA ((ID)1)
22300#define NODE_SPECIAL_NO_REST_KEYWORD ((NODE *)-1)
22301#pragma GCC visibility push(default)
22302#pragma GCC visibility pop
22303#define RUBY_ATOMIC_H
22304#define RUBY_ATOMIC_GENERIC_MACRO 1
22305#define RUBY_ATOMIC_FETCH_ADD(var,val) rbimpl_atomic_fetch_add(&(var), (val))
22306#define RUBY_ATOMIC_FETCH_SUB(var,val) rbimpl_atomic_fetch_sub(&(var), (val))
22307#define RUBY_ATOMIC_OR(var,val) rbimpl_atomic_or(&(var), (val))
22308#define RUBY_ATOMIC_EXCHANGE(var,val) rbimpl_atomic_exchange(&(var), (val))
22309#define RUBY_ATOMIC_CAS(var,oldval,newval) rbimpl_atomic_cas(&(var), (oldval), (newval))
22310#define RUBY_ATOMIC_SET(var,val) rbimpl_atomic_set(&(var), (val))
22311#define RUBY_ATOMIC_ADD(var,val) rbimpl_atomic_add(&(var), (val))
22312#define RUBY_ATOMIC_SUB(var,val) rbimpl_atomic_sub(&(var), (val))
22313#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var))
22314#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var))
22315#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var))
22316#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var))
22317#define RUBY_ATOMIC_SIZE_EXCHANGE(var,val) rbimpl_atomic_size_exchange(&(var), (val))
22318#define RUBY_ATOMIC_SIZE_CAS(var,oldval,newval) rbimpl_atomic_size_cas(&(var), (oldval), (newval))
22319#define RUBY_ATOMIC_SIZE_ADD(var,val) rbimpl_atomic_size_add(&(var), (val))
22320#define RUBY_ATOMIC_SIZE_SUB(var,val) rbimpl_atomic_size_sub(&(var), (val))
22321#define RUBY_ATOMIC_PTR_EXCHANGE(var,val) RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val))
22322#define RUBY_ATOMIC_PTR_CAS(var,oldval,newval) RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (oldval), (newval)))
22323#define RUBY_ATOMIC_VALUE_EXCHANGE(var,val) rbimpl_atomic_value_exchange(&(var), (val))
22324#define RUBY_ATOMIC_VALUE_CAS(var,oldval,newval) rbimpl_atomic_value_cas(&(var), (oldval), (newval))
22325#define ATOMIC_ADD(var,val) RUBY_ATOMIC_ADD(var, val)
22326#define ATOMIC_CAS(var,oldval,newval) RUBY_ATOMIC_CAS(var, oldval, newval)
22327#define ATOMIC_DEC(var) RUBY_ATOMIC_DEC(var)
22328#define ATOMIC_EXCHANGE(var,val) RUBY_ATOMIC_EXCHANGE(var, val)
22329#define ATOMIC_FETCH_ADD(var,val) RUBY_ATOMIC_FETCH_ADD(var, val)
22330#define ATOMIC_FETCH_SUB(var,val) RUBY_ATOMIC_FETCH_SUB(var, val)
22331#define ATOMIC_INC(var) RUBY_ATOMIC_INC(var)
22332#define ATOMIC_OR(var,val) RUBY_ATOMIC_OR(var, val)
22333#define ATOMIC_PTR_CAS(var,oldval,newval) RUBY_ATOMIC_PTR_CAS(var, oldval, newval)
22334#define ATOMIC_PTR_EXCHANGE(var,val) RUBY_ATOMIC_PTR_EXCHANGE(var, val)
22335#define ATOMIC_SET(var,val) RUBY_ATOMIC_SET(var, val)
22336#define ATOMIC_SIZE_ADD(var,val) RUBY_ATOMIC_SIZE_ADD(var, val)
22337#define ATOMIC_SIZE_CAS(var,oldval,newval) RUBY_ATOMIC_SIZE_CAS(var, oldval, newval)
22338#define ATOMIC_SIZE_DEC(var) RUBY_ATOMIC_SIZE_DEC(var)
22339#define ATOMIC_SIZE_EXCHANGE(var,val) RUBY_ATOMIC_SIZE_EXCHANGE(var, val)
22340#define ATOMIC_SIZE_INC(var) RUBY_ATOMIC_SIZE_INC(var)
22341#define ATOMIC_SIZE_SUB(var,val) RUBY_ATOMIC_SIZE_SUB(var, val)
22342#define ATOMIC_SUB(var,val) RUBY_ATOMIC_SUB(var, val)
22343#define ATOMIC_VALUE_CAS(var,oldval,val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
22344#define ATOMIC_VALUE_EXCHANGE(var,val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
22345#define RUBY_VM_OPTS_H
22346#define OPT_TAILCALL_OPTIMIZATION 0
22347#define OPT_PEEPHOLE_OPTIMIZATION 1
22348#define OPT_SPECIALISED_INSTRUCTION 1
22349#define OPT_INLINE_CONST_CACHE 1
22350#define OPT_FROZEN_STRING_LITERAL 0
22351#define OPT_DEBUG_FROZEN_STRING_LITERAL 0
22352#define OPT_THREADED_CODE 0
22353#define OPT_DIRECT_THREADED_CODE (OPT_THREADED_CODE == 0)
22354#define OPT_TOKEN_THREADED_CODE (OPT_THREADED_CODE == 1)
22355#define OPT_CALL_THREADED_CODE (OPT_THREADED_CODE == 2)
22356#define OPT_CHECKED_RUN 1
22357#define OPT_INLINE_METHOD_CACHE 1
22358#define OPT_GLOBAL_METHOD_CACHE 1
22359#define OPT_BLOCKINLINING 0
22360#define OPT_IC_FOR_IVAR 1
22361#define OPT_OPERANDS_UNIFICATION 1
22362#define OPT_INSTRUCTIONS_UNIFICATION 0
22363#define OPT_UNIFY_ALL_COMBINATION 0
22364#define OPT_STACK_CACHING 0
22365#define OPT_SUPPORT_JOKE 0
22366#define OPT_SUPPORT_CALL_C_FUNCTION 0
22367#define VM_COLLECT_USAGE_DETAILS 0
22368#define RUBY_DARRAY_H
22369#define rb_darray(T) struct { rb_darray_meta_t meta; T data[]; } *
22370#define rb_darray_get(ary,idx) ((ary)->data[(idx)])
22371#define rb_darray_set(ary,idx,element) ((ary)->data[(idx)] = (element))
22372#define rb_darray_ref(ary,idx) (&((ary)->data[(idx)]))
22373#define rb_darray_append(ptr_to_ary,element) ( rb_darray_ensure_space((ptr_to_ary), sizeof(**(ptr_to_ary)), sizeof((*(ptr_to_ary))->data[0])) ? ( rb_darray_set(*(ptr_to_ary), (*(ptr_to_ary))->meta.size, (element)), ++((*(ptr_to_ary))->meta.size), 1 ) : 0)
22374#define rb_darray_back(ary) ((ary)->data[(ary)->meta.size - 1])
22375#define rb_darray_pop_back(ary) ((ary)->meta.size--)
22376#define rb_darray_remove_unordered(ary,idx) do { rb_darray_set(ary, idx, rb_darray_back(ary)); rb_darray_pop_back(ary); } while (0);
22377#define rb_darray_foreach(ary,idx_name,elem_ptr_var) for (int idx_name = 0; idx_name < rb_darray_size(ary) && ((elem_ptr_var) = rb_darray_ref(ary, idx_name)); ++idx_name)
22378#define rb_darray_for(ary,idx_name) for (int idx_name = 0; idx_name < rb_darray_size(ary); ++idx_name)
22379#define rb_darray_make(ptr_to_ary,size) rb_darray_make_impl((ptr_to_ary), size, sizeof(**(ptr_to_ary)), sizeof((*(ptr_to_ary))->data[0]))
22380#define rb_darray_clear(ary) (ary->meta.size = 0)
22381#define RUBY_THREAD_NATIVE_H 1
22382#define _SCHED_H_
22383#define _SYS_SCHED_H_
22384#define SCHED_OTHER 3
22385#define SCHED_FIFO 1
22386#define SCHED_RR 2
22387#define _PTHREAD_H
22388#define PTHREAD_CANCEL_ASYNCHRONOUS 1
22389#define PTHREAD_CANCEL_ENABLE 0
22390#define PTHREAD_CANCEL_DEFERRED 0
22391#define PTHREAD_CANCEL_DISABLE 1
22392#define PTHREAD_CANCELED ((void *)-1)
22393#define PTHREAD_COND_INITIALIZER (pthread_cond_t)21
22394#define PTHREAD_CREATE_DETACHED 1
22395#define PTHREAD_CREATE_JOINABLE 0
22396#define PTHREAD_EXPLICIT_SCHED 1
22397#define PTHREAD_INHERIT_SCHED 0
22398#define PTHREAD_MUTEX_RECURSIVE 0
22399#define PTHREAD_MUTEX_ERRORCHECK 1
22400#define PTHREAD_MUTEX_NORMAL 2
22401#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
22402#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pthread_mutex_t)18
22403#define PTHREAD_NORMAL_MUTEX_INITIALIZER_NP (pthread_mutex_t)19
22404#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pthread_mutex_t)20
22405#define PTHREAD_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER_NP
22406#define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 }
22407#define PTHREAD_PROCESS_SHARED 1
22408#define PTHREAD_PROCESS_PRIVATE 0
22409#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)22
22410#define PTHREAD_SCOPE_PROCESS 0
22411#define PTHREAD_SCOPE_SYSTEM 1
22412#define PTHREAD_BARRIER_SERIAL_THREAD (-1)
22413#define pthread_cleanup_push(_fn,_arg) { __pthread_cleanup_handler __cleanup_handler = { _fn, _arg, NULL }; _pthread_cleanup_push( &__cleanup_handler );
22414#define pthread_cleanup_pop(_execute) _pthread_cleanup_pop( _execute ); }
22415#pragma GCC visibility push(default)
22416#pragma GCC visibility pop
22417#define RUBY_THREAD_PTHREAD_H
22418#define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
22419#define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
22420#undef except
22421#undef try
22422#undef leave
22423#undef finally
22424#define RB_THREAD_LOCAL_SPECIFIER _Thread_local
22425#pragma GCC visibility push(default)
22426#pragma GCC visibility pop
22427#define RUBY_VM_THREAD_MODEL 2
22428#define VM_INSN_INFO_TABLE_IMPL 2
22429#define RUBY_NSIG NSIG
22430#define RUBY_SIGCHLD (SIGCLD)
22431#define SIGCHLD_LOSSY (0)
22432#define WAITPID_USE_SIGCHLD (RUBY_SIGCHLD || SIGCHLD_LOSSY)
22433#define USE_SIGALTSTACK
22434#define RB_ALTSTACK_INIT(var,altstack) var = rb_register_sigaltstack(altstack)
22435#define RB_ALTSTACK_FREE(var) free(var)
22436#define RB_ALTSTACK(var) var
22437#define TAG_NONE RUBY_TAG_NONE
22438#define TAG_RETURN RUBY_TAG_RETURN
22439#define TAG_BREAK RUBY_TAG_BREAK
22440#define TAG_NEXT RUBY_TAG_NEXT
22441#define TAG_RETRY RUBY_TAG_RETRY
22442#define TAG_REDO RUBY_TAG_REDO
22443#define TAG_RAISE RUBY_TAG_RAISE
22444#define TAG_THROW RUBY_TAG_THROW
22445#define TAG_FATAL RUBY_TAG_FATAL
22446#define TAG_MASK RUBY_TAG_MASK
22447#define GET_IC_SERIAL(ice) (ice)->ic_serial.raw
22448#define SET_IC_SERIAL(ice,v) (ice)->ic_serial.raw = (v)
22449#define CoreDataFromValue(obj,type) (type*)DATA_PTR(obj)
22450#define GetCoreDataFromValue(obj,type,ptr) ((ptr) = CoreDataFromValue((obj), type))
22451#define PATHOBJ_PATH 0
22452#define PATHOBJ_REALPATH 1
22453#define USE_LAZY_LOAD 0
22454#define GetVMPtr(obj,ptr) GetCoreDataFromValue((obj), rb_vm_t, (ptr))
22455#define VM_GLOBAL_CC_CACHE_TABLE_SIZE 1023
22456#define RUBY_VM_SIZE_ALIGN 4096
22457#define RUBY_VM_THREAD_VM_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
22458#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
22459#define RUBY_VM_THREAD_MACHINE_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
22460#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
22461#define RUBY_VM_FIBER_VM_STACK_SIZE ( 16 * 1024 * sizeof(VALUE))
22462#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
22463#define RUBY_VM_FIBER_MACHINE_STACK_SIZE ( 64 * 1024 * sizeof(VALUE))
22464#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
22465#define INTEGER_REDEFINED_OP_FLAG (1 << 0)
22466#define FLOAT_REDEFINED_OP_FLAG (1 << 1)
22467#define STRING_REDEFINED_OP_FLAG (1 << 2)
22468#define ARRAY_REDEFINED_OP_FLAG (1 << 3)
22469#define HASH_REDEFINED_OP_FLAG (1 << 4)
22470#define SYMBOL_REDEFINED_OP_FLAG (1 << 6)
22471#define TIME_REDEFINED_OP_FLAG (1 << 7)
22472#define REGEXP_REDEFINED_OP_FLAG (1 << 8)
22473#define NIL_REDEFINED_OP_FLAG (1 << 9)
22474#define TRUE_REDEFINED_OP_FLAG (1 << 10)
22475#define FALSE_REDEFINED_OP_FLAG (1 << 11)
22476#define PROC_REDEFINED_OP_FLAG (1 << 12)
22477#define BASIC_OP_UNREDEFINED_P(op,klass) (LIKELY((GET_VM()->redefined_flag[(op)]&(klass)) == 0))
22478#define VM_DEBUG_BP_CHECK 0
22479#define VM_DEBUG_VERIFY_METHOD_CACHE (VMDEBUG != 0)
22480#define rb_execution_context_t rb_execution_context_t
22481#define VM_CORE_H_EC_DEFINED 1
22482#define VM_DEFINECLASS_TYPE(x) ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)
22483#define VM_DEFINECLASS_FLAG_SCOPED 0x08
22484#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS 0x10
22485#define VM_DEFINECLASS_SCOPED_P(x) ((x) & VM_DEFINECLASS_FLAG_SCOPED)
22486#define VM_DEFINECLASS_HAS_SUPERCLASS_P(x) ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)
22487#pragma GCC visibility push(default)
22488#pragma GCC visibility pop
22489#define GetProcPtr(obj,ptr) GetCoreDataFromValue((obj), rb_proc_t, (ptr))
22490#pragma GCC visibility push(default)
22491#pragma GCC visibility pop
22492#define GetBindingPtr(obj,ptr) GetCoreDataFromValue((obj), rb_binding_t, (ptr))
22493#define VM_CHECKMATCH_TYPE_MASK 0x03
22494#define VM_CHECKMATCH_ARRAY 0x04
22495#define VM_TAGGED_PTR_SET(p,tag) ((VALUE)(p) | (tag))
22496#define VM_TAGGED_PTR_REF(v,mask) ((void *)((v) & ~mask))
22497#define GC_GUARDED_PTR(p) VM_TAGGED_PTR_SET((p), 0x01)
22498#define GC_GUARDED_PTR_REF(p) VM_TAGGED_PTR_REF((p), 0x03)
22499#define GC_GUARDED_PTR_P(p) (((VALUE)(p)) & 0x01)
22500#define VM_ENV_DATA_SIZE ( 3)
22501#define VM_ENV_DATA_INDEX_ME_CREF (-2)
22502#define VM_ENV_DATA_INDEX_SPECVAL (-1)
22503#define VM_ENV_DATA_INDEX_FLAGS ( 0)
22504#define VM_ENV_DATA_INDEX_ENV ( 1)
22505#define VM_ENV_INDEX_LAST_LVAR (-VM_ENV_DATA_SIZE)
22506#define RUBYVM_CFUNC_FRAME_P(cfp) (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)
22507#define VM_GUARDED_PREV_EP(ep) GC_GUARDED_PTR(ep)
22508#define VM_BLOCK_HANDLER_NONE 0
22509#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
22510#define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
22511#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp,ecfp) ((void *)(ecfp) > (void *)(cfp))
22512#define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
22513#define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
22514#pragma GCC visibility push(default)
22515#pragma GCC visibility pop
22516#define rb_vm_register_special_exception(sp,e,m) rb_vm_register_special_exception_str(sp, e, rb_usascii_str_new_static((m), (long)rb_strlen_lit(m)))
22517#define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]
22518#define CHECK_VM_STACK_OVERFLOW0(cfp,sp,margin) do { STATIC_ASSERT(sizeof_sp, sizeof(*(sp)) == sizeof(VALUE)); STATIC_ASSERT(sizeof_cfp, sizeof(*(cfp)) == sizeof(rb_control_frame_t)); const struct rb_control_frame_struct *bound = (void *)&(sp)[(margin)]; if (UNLIKELY((cfp) <= &bound[1])) { vm_stackoverflow(); } } while (0)
22519#define CHECK_VM_STACK_OVERFLOW(cfp,margin) CHECK_VM_STACK_OVERFLOW0((cfp), (cfp)->sp, (margin))
22520#pragma GCC visibility push(default)
22521#pragma GCC visibility pop
22522#define GET_VM() rb_current_vm()
22523#define GET_RACTOR() rb_current_ractor()
22524#define GET_THREAD() rb_current_thread()
22525#define GET_EC() rb_current_execution_context(true)
22526#define RUBY_VM_SET_TIMER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TIMER_INTERRUPT_MASK)
22527#define RUBY_VM_SET_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, PENDING_INTERRUPT_MASK)
22528#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
22529#define RUBY_VM_SET_TRAP_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TRAP_INTERRUPT_MASK)
22530#define RUBY_VM_SET_TERMINATE_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TERMINATE_INTERRUPT_MASK)
22531#define RUBY_VM_SET_VM_BARRIER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, VM_BARRIER_INTERRUPT_MASK)
22532#define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
22533#define RUBY_VM_CHECK_INTS(ec) rb_vm_check_ints(ec)
22534#define EXEC_EVENT_HOOK_ORIG(ec_,hooks_,flag_,self_,id_,called_id_,klass_,data_,pop_p_) do { const rb_event_flag_t flag_arg_ = (flag_); rb_hook_list_t *hooks_arg_ = (hooks_); if (UNLIKELY((hooks_arg_)->events & (flag_arg_))) { rb_exec_event_hook_orig(ec_, hooks_arg_, flag_arg_, self_, id_, called_id_, klass_, data_, pop_p_); } } while (0)
22535#define EXEC_EVENT_HOOK(ec_,flag_,self_,id_,called_id_,klass_,data_) EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 0)
22536#define EXEC_EVENT_HOOK_AND_POP_FRAME(ec_,flag_,self_,id_,called_id_,klass_,data_) EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 1)
22537#pragma GCC visibility push(default)
22538#define RUBY_EVENT_COVERAGE_LINE 0x010000
22539#define RUBY_EVENT_COVERAGE_BRANCH 0x020000
22540#pragma GCC visibility pop
22541#define PASS_PASSED_BLOCK_HANDLER_EC(ec) pass_passed_block_handler(ec)
22542#define PASS_PASSED_BLOCK_HANDLER() pass_passed_block_handler(GET_EC())
22543#define ruby_setjmp(env) RUBY_SETJMP(env)
22544#define ruby_longjmp(env,val) RUBY_LONGJMP((env),(val))
22545#define __ERRNO_H__
22546#define __error_t_defined 1
22547#define _SYS_ERRNO_H_
22548#define errno (*__errno())
22549#define __errno_r(ptr) ((ptr)->_errno)
22550#define EPERM 1
22551#define ENOENT 2
22552#define ESRCH 3
22553#define EINTR 4
22554#define EIO 5
22555#define ENXIO 6
22556#define E2BIG 7
22557#define ENOEXEC 8
22558#define EBADF 9
22559#define ECHILD 10
22560#define EAGAIN 11
22561#define ENOMEM 12
22562#define EACCES 13
22563#define EFAULT 14
22564#define ENOTBLK 15
22565#define EBUSY 16
22566#define EEXIST 17
22567#define EXDEV 18
22568#define ENODEV 19
22569#define ENOTDIR 20
22570#define EISDIR 21
22571#define EINVAL 22
22572#define ENFILE 23
22573#define EMFILE 24
22574#define ENOTTY 25
22575#define ETXTBSY 26
22576#define EFBIG 27
22577#define ENOSPC 28
22578#define ESPIPE 29
22579#define EROFS 30
22580#define EMLINK 31
22581#define EPIPE 32
22582#define EDOM 33
22583#define ERANGE 34
22584#define ENOMSG 35
22585#define EIDRM 36
22586#define ECHRNG 37
22587#define EL2NSYNC 38
22588#define EL3HLT 39
22589#define EL3RST 40
22590#define ELNRNG 41
22591#define EUNATCH 42
22592#define ENOCSI 43
22593#define EL2HLT 44
22594#define EDEADLK 45
22595#define ENOLCK 46
22596#define EBADE 50
22597#define EBADR 51
22598#define EXFULL 52
22599#define ENOANO 53
22600#define EBADRQC 54
22601#define EBADSLT 55
22602#define EDEADLOCK 56
22603#define EBFONT 57
22604#define ENOSTR 60
22605#define ENODATA 61
22606#define ETIME 62
22607#define ENOSR 63
22608#define ENONET 64
22609#define ENOPKG 65
22610#define EREMOTE 66
22611#define ENOLINK 67
22612#define EADV 68
22613#define ESRMNT 69
22614#define ECOMM 70
22615#define EPROTO 71
22616#define EMULTIHOP 74
22617#define ELBIN 75
22618#define EDOTDOT 76
22619#define EBADMSG 77
22620#define EFTYPE 79
22621#define ENOTUNIQ 80
22622#define EBADFD 81
22623#define EREMCHG 82
22624#define ELIBACC 83
22625#define ELIBBAD 84
22626#define ELIBSCN 85
22627#define ELIBMAX 86
22628#define ELIBEXEC 87
22629#define ENOSYS 88
22630#define ENMFILE 89
22631#define ENOTEMPTY 90
22632#define ENAMETOOLONG 91
22633#define ELOOP 92
22634#define EOPNOTSUPP 95
22635#define EPFNOSUPPORT 96
22636#define ECONNRESET 104
22637#define ENOBUFS 105
22638#define EAFNOSUPPORT 106
22639#define EPROTOTYPE 107
22640#define ENOTSOCK 108
22641#define ENOPROTOOPT 109
22642#define ESHUTDOWN 110
22643#define ECONNREFUSED 111
22644#define EADDRINUSE 112
22645#define ECONNABORTED 113
22646#define ENETUNREACH 114
22647#define ENETDOWN 115
22648#define ETIMEDOUT 116
22649#define EHOSTDOWN 117
22650#define EHOSTUNREACH 118
22651#define EINPROGRESS 119
22652#define EALREADY 120
22653#define EDESTADDRREQ 121
22654#define EMSGSIZE 122
22655#define EPROTONOSUPPORT 123
22656#define ESOCKTNOSUPPORT 124
22657#define EADDRNOTAVAIL 125
22658#define ENETRESET 126
22659#define EISCONN 127
22660#define ENOTCONN 128
22661#define ETOOMANYREFS 129
22662#define EPROCLIM 130
22663#define EUSERS 131
22664#define EDQUOT 132
22665#define ESTALE 133
22666#define ENOTSUP 134
22667#define ENOMEDIUM 135
22668#define ENOSHARE 136
22669#define ECASECLASH 137
22670#define EILSEQ 138
22671#define EOVERFLOW 139
22672#define ECANCELED 140
22673#define ENOTRECOVERABLE 141
22674#define EOWNERDEAD 142
22675#define ESTRPIPE 143
22676#define EWOULDBLOCK EAGAIN
22677#define __ELASTERROR 2000
22678#define _SYS_PARAM_H
22679#define __need_NULL
22680#undef __need_ptrdiff_t
22681#undef __need_size_t
22682#undef __need_wchar_t
22683#undef NULL
22684#define NULL ((void *)0)
22685#undef __need_NULL
22686#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
22687#define NOFILE 8192
22688#define NGROUPS NGROUPS_MAX
22689#define HZ 1000
22690#define MAXHOSTNAMELEN 128
22691#define MAXPATHLEN PATH_MAX
22692#define MAXSYMLINKS SYMLOOP_MAX
22693#define DEV_BSIZE 1024
22694#define NBBY 8
22695#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
22696#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
22697#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
22698#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
22699#define howmany(x,y) (((x)+((y)-1))/(y))
22700#define rounddown(x,y) (((x)/(y))*(y))
22701#define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
22702#define roundup2(x,y) (((x)+((y)-1))&(~((y)-1)))
22703#define powerof2(x) ((((x)-1)&(x))==0)
22704#define MIN(a,b) (((a)<(b))?(a):(b))
22705#define MAX(a,b) (((a)>(b))?(a):(b))
22706#define SAVE_ROOT_JMPBUF(th,stmt) do if (true) { stmt; } else if (th) { } while (0)
22707#define EC_PUSH_TAG(ec) do { rb_execution_context_t * const _ec = (ec); struct rb_vm_tag _tag; _tag.state = TAG_NONE; _tag.tag = Qundef; _tag.prev = _ec->tag; _tag.lock_rec = rb_ec_vm_lock_rec(_ec);
22708#define EC_POP_TAG() _ec->tag = _tag.prev; } while (0)
22709#define EC_TMPPOP_TAG() _ec->tag = _tag.prev
22710#define EC_REPUSH_TAG() (void)(_ec->tag = &_tag)
22711#define VAR_FROM_MEMORY(var) (var)
22712#define VAR_INITIALIZED(var) ((void)&(var))
22713#define VAR_NOCLOBBERED(var) var
22714#define EC_EXEC_TAG() (ruby_setjmp(_tag.buf) ? rb_ec_tag_state(VAR_FROM_MEMORY(_ec)) : (EC_REPUSH_TAG(), 0))
22715#define EC_JUMP_TAG(ec,st) rb_ec_tag_jump(ec, st)
22716#define INTERNAL_EXCEPTION_P(exc) FIXNUM_P(exc)
22717#define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1
22718#define CREF_FL_OMOD_SHARED IMEMO_FL_USER2
22719#define CREF_FL_SINGLETON IMEMO_FL_USER3
22720#pragma GCC diagnostic push
22721#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22722#pragma GCC diagnostic pop
22723#define rb_ec_raised_set(ec,f) ((ec)->raised_flag |= (f))
22724#define rb_ec_raised_reset(ec,f) ((ec)->raised_flag &= ~(f))
22725#define rb_ec_raised_p(ec,f) (((ec)->raised_flag & (f)) != 0)
22726#define rb_ec_raised_clear(ec) ((ec)->raised_flag = 0)
22727#define CharNext(p) rb_char_next(p)
22728#define RUBY_GC_H 1
22729#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
22730#define RB_GC_SAVE_MACHINE_CONTEXT(th) do { FLUSH_REGISTER_WINDOWS; setjmp((th)->ec->machine.regs); SET_MACHINE_STACK_END(&(th)->ec->machine.stack_end); } while (0)
22731#define RUBY_MARK_FREE_DEBUG 0
22732#define RUBY_MARK_ENTER(msg)
22733#define RUBY_MARK_LEAVE(msg)
22734#define RUBY_FREE_ENTER(msg)
22735#define RUBY_FREE_LEAVE(msg)
22736#define RUBY_GC_INFO if(0)printf
22737#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} } while (0)
22738#define RUBY_MARK_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark(markobj);} } while (0)
22739#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
22740#define STACK_UPPER(x,a,b) (b)
22741#define STACK_GROW_DIR_DETECTION
22742#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
22743#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
22744#pragma GCC visibility push(default)
22745#pragma GCC visibility pop
22746#define INTERNAL_COMPILE_H
22747#pragma GCC visibility push(default)
22748#pragma GCC visibility pop
22749#define INTERNAL_CONT_H
22750#define INTERNAL_ERROR_H
22751#define INTERNAL_STRING_H
22752#define RUBY_ENCODING_H 1
22753#define RUBY_INTERNAL_ENCODING_CODERANGE_H
22754#pragma GCC visibility push(default)
22755#define ENC_CODERANGE_MASK RUBY_ENC_CODERANGE_MASK
22756#define ENC_CODERANGE_UNKNOWN RUBY_ENC_CODERANGE_UNKNOWN
22757#define ENC_CODERANGE_7BIT RUBY_ENC_CODERANGE_7BIT
22758#define ENC_CODERANGE_VALID RUBY_ENC_CODERANGE_VALID
22759#define ENC_CODERANGE_BROKEN RUBY_ENC_CODERANGE_BROKEN
22760#define ENC_CODERANGE_CLEAN_P(cr) RB_ENC_CODERANGE_CLEAN_P(cr)
22761#define ENC_CODERANGE(obj) RB_ENC_CODERANGE(obj)
22762#define ENC_CODERANGE_ASCIIONLY(obj) RB_ENC_CODERANGE_ASCIIONLY(obj)
22763#define ENC_CODERANGE_SET(obj,cr) RB_ENC_CODERANGE_SET(obj,cr)
22764#define ENC_CODERANGE_CLEAR(obj) RB_ENC_CODERANGE_CLEAR(obj)
22765#define ENC_CODERANGE_AND(a,b) RB_ENC_CODERANGE_AND(a, b)
22766#define ENCODING_CODERANGE_SET(obj,encindex,cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr)
22767#define RB_ENC_CODERANGE RB_ENC_CODERANGE
22768#define RB_ENC_CODERANGE_AND RB_ENC_CODERANGE_AND
22769#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY
22770#define RB_ENC_CODERANGE_CLEAN_P RB_ENC_CODERANGE_CLEAN_P
22771#define RB_ENC_CODERANGE_CLEAR RB_ENC_CODERANGE_CLEAR
22772#define RB_ENC_CODERANGE_SET RB_ENC_CODERANGE_SET
22773#pragma GCC visibility pop
22774#define RUBY_INTERNAL_ENCODING_CTYPE_H
22775#define ONIGMO_H
22776#define ONIGMO_VERSION_MAJOR 6
22777#define ONIGMO_VERSION_MINOR 1
22778#define ONIGMO_VERSION_TEENY 3
22779#define ONIG_EXTERN RUBY_EXTERN
22780#pragma GCC visibility push(default)
22781#define UChar OnigUChar
22782#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)
22783#define OnigCodePointMaskWidth 3
22784#define OnigCodePointMask ((1<<OnigCodePointMaskWidth)-1)
22785#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
22786#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)
22787#define OnigSpecialIndexShift 3
22788#define OnigSpecialIndexWidth 10
22789#define ONIGENC_CASE_UPCASE (1<<13)
22790#define ONIGENC_CASE_DOWNCASE (1<<14)
22791#define ONIGENC_CASE_TITLECASE (1<<15)
22792#define ONIGENC_CASE_SPECIAL_OFFSET 3
22793#define ONIGENC_CASE_UP_SPECIAL (1<<16)
22794#define ONIGENC_CASE_DOWN_SPECIAL (1<<17)
22795#define ONIGENC_CASE_MODIFIED (1<<18)
22796#define ONIGENC_CASE_FOLD (1<<19)
22797#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20)
22798#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<21)
22799#define ONIGENC_CASE_ASCII_ONLY (1<<22)
22800#define ONIGENC_CASE_IS_TITLECASE (1<<23)
22801#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30)
22802#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
22803#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag
22804#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3
22805#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13
22806#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0])
22807#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1]
22808#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2]
22809#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)
22810#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)
22811#define ONIGENC_CODE_TO_MBC_MAXLEN 7
22812#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18
22813#define ONIGENC_CTYPE_NEWLINE 0
22814#define ONIGENC_CTYPE_ALPHA 1
22815#define ONIGENC_CTYPE_BLANK 2
22816#define ONIGENC_CTYPE_CNTRL 3
22817#define ONIGENC_CTYPE_DIGIT 4
22818#define ONIGENC_CTYPE_GRAPH 5
22819#define ONIGENC_CTYPE_LOWER 6
22820#define ONIGENC_CTYPE_PRINT 7
22821#define ONIGENC_CTYPE_PUNCT 8
22822#define ONIGENC_CTYPE_SPACE 9
22823#define ONIGENC_CTYPE_UPPER 10
22824#define ONIGENC_CTYPE_XDIGIT 11
22825#define ONIGENC_CTYPE_WORD 12
22826#define ONIGENC_CTYPE_ALNUM 13
22827#define ONIGENC_CTYPE_ASCII 14
22828#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII
22829#define ONIGENC_FLAG_NONE 0U
22830#define ONIGENC_FLAG_UNICODE 1U
22831#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e)
22832#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)
22833#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)
22834#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
22835#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)
22836#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
22837#define ONIGENC_IS_MBC_WORD(enc,s,end) ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
22838#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) onigenc_ascii_is_code_ctype( ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc)
22839#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE)
22840#define ONIGENC_NAME(enc) ((enc)->name)
22841#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
22842#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) (enc)->is_allowed_reverse_match(s,end,enc)
22843#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) (enc)->left_adjust_char_head(start, s, end, enc)
22844#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
22845#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc)
22846#define ONIGENC_STEP_BACK(enc,start,s,end,n) onigenc_step_back((enc),(start),(s),(end),(n))
22847#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n)
22848#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r))
22849#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r)
22850#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1)
22851#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1)
22852#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n))
22853#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1)
22854#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r))
22855#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc)
22856#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen_approximate(p,e,enc)
22857#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)
22858#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)
22859#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len)
22860#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc)
22861#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc)
22862#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc)
22863#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc)
22864#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) (enc)->property_name_to_ctype(enc,p,end)
22865#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc)
22866#define ONIGENC_IS_CODE_NEWLINE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
22867#define ONIGENC_IS_CODE_GRAPH(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
22868#define ONIGENC_IS_CODE_PRINT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
22869#define ONIGENC_IS_CODE_ALNUM(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
22870#define ONIGENC_IS_CODE_ALPHA(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
22871#define ONIGENC_IS_CODE_LOWER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
22872#define ONIGENC_IS_CODE_UPPER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
22873#define ONIGENC_IS_CODE_CNTRL(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
22874#define ONIGENC_IS_CODE_PUNCT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
22875#define ONIGENC_IS_CODE_SPACE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
22876#define ONIGENC_IS_CODE_BLANK(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
22877#define ONIGENC_IS_CODE_DIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
22878#define ONIGENC_IS_CODE_XDIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
22879#define ONIGENC_IS_CODE_WORD(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
22880#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
22881#define ONIG_NREGION 4
22882#define ONIG_MAX_CAPTURE_GROUP_NUM 32767
22883#define ONIG_MAX_BACKREF_NUM 1000
22884#define ONIG_MAX_REPEAT_NUM 100000
22885#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
22886#define ONIG_MAX_ERROR_MESSAGE_LEN 90
22887#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE
22888#define ONIG_OPTION_NONE 0U
22889#define ONIG_OPTION_IGNORECASE 1U
22890#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
22891#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
22892#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE
22893#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)
22894#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)
22895#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)
22896#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)
22897#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
22898#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
22899#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
22900#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
22901#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NOTEOL << 1)
22902#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1)
22903#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_NOTEOS << 1)
22904#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
22905#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
22906#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
22907#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF
22908#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
22909#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
22910#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))
22911#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)
22912#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
22913#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
22914#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
22915#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
22916#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
22917#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
22918#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58)
22919#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG)
22920#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
22921#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
22922#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython)
22923#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
22924#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0)
22925#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1)
22926#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2)
22927#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3)
22928#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4)
22929#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5)
22930#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6)
22931#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7)
22932#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8)
22933#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9)
22934#define ONIG_SYN_OP_VBAR_ALT (1U<<10)
22935#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11)
22936#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12)
22937#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13)
22938#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14)
22939#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15)
22940#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16)
22941#define ONIG_SYN_OP_BRACKET_CC (1U<<17)
22942#define ONIG_SYN_OP_ESC_W_WORD (1U<<18)
22943#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19)
22944#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20)
22945#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21)
22946#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22)
22947#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23)
22948#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24)
22949#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25)
22950#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26)
22951#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27)
22952#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28)
22953#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29)
22954#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30)
22955#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31)
22956#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0)
22957#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1)
22958#define ONIG_SYN_OP2_OPTION_PERL (1U<<2)
22959#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3)
22960#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4)
22961#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5)
22962#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6)
22963#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7)
22964#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8)
22965#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9)
22966#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10)
22967#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11)
22968#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12)
22969#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13)
22970#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14)
22971#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15)
22972#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16)
22973#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17)
22974#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19)
22975#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20)
22976#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21)
22977#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22)
22978#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23)
22979#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24)
22980#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25)
22981#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26)
22982#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27)
22983#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28)
22984#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29)
22985#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30)
22986#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT (1U<<31)
22987#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31)
22988#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0)
22989#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1)
22990#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2)
22991#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3)
22992#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4)
22993#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5)
22994#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6)
22995#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7)
22996#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)
22997#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9)
22998#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)
22999#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP (1U<<11)
23000#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20)
23001#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21)
23002#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22)
23003#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23)
23004#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24)
23005#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25)
23006#define ONIG_SYN_WARN_CC_DUP (1U<<26)
23007#define ONIG_META_CHAR_ESCAPE 0
23008#define ONIG_META_CHAR_ANYCHAR 1
23009#define ONIG_META_CHAR_ANYTIME 2
23010#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3
23011#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4
23012#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5
23013#define ONIG_INEFFECTIVE_META_CHAR 0
23014#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)
23015#define ONIG_NORMAL 0
23016#define ONIG_MISMATCH -1
23017#define ONIG_NO_SUPPORT_CONFIG -2
23018#define ONIGERR_MEMORY -5
23019#define ONIGERR_TYPE_BUG -6
23020#define ONIGERR_PARSER_BUG -11
23021#define ONIGERR_STACK_BUG -12
23022#define ONIGERR_UNDEFINED_BYTECODE -13
23023#define ONIGERR_UNEXPECTED_BYTECODE -14
23024#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
23025#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16
23026#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21
23027#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
23028#define ONIGERR_INVALID_ARGUMENT -30
23029#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
23030#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
23031#define ONIGERR_EMPTY_CHAR_CLASS -102
23032#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103
23033#define ONIGERR_END_PATTERN_AT_ESCAPE -104
23034#define ONIGERR_END_PATTERN_AT_META -105
23035#define ONIGERR_END_PATTERN_AT_CONTROL -106
23036#define ONIGERR_META_CODE_SYNTAX -108
23037#define ONIGERR_CONTROL_CODE_SYNTAX -109
23038#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110
23039#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111
23040#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112
23041#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113
23042#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114
23043#define ONIGERR_NESTED_REPEAT_OPERATOR -115
23044#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116
23045#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117
23046#define ONIGERR_END_PATTERN_IN_GROUP -118
23047#define ONIGERR_UNDEFINED_GROUP_OPTION -119
23048#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121
23049#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122
23050#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123
23051#define ONIGERR_INVALID_CONDITION_PATTERN -124
23052#define ONIGERR_TOO_BIG_NUMBER -200
23053#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201
23054#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202
23055#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203
23056#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204
23057#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205
23058#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206
23059#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207
23060#define ONIGERR_INVALID_BACKREF -208
23061#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209
23062#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -210
23063#define ONIGERR_TOO_SHORT_DIGITS -211
23064#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212
23065#define ONIGERR_EMPTY_GROUP_NAME -214
23066#define ONIGERR_INVALID_GROUP_NAME -215
23067#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216
23068#define ONIGERR_UNDEFINED_NAME_REFERENCE -217
23069#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218
23070#define ONIGERR_MULTIPLEX_DEFINED_NAME -219
23071#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220
23072#define ONIGERR_NEVER_ENDING_RECURSION -221
23073#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
23074#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
23075#define ONIGERR_INVALID_CODE_POINT_VALUE -400
23076#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
23077#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
23078#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402
23079#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403
23080#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
23081#define ONIG_IS_CAPTURE_HISTORY_GROUP(r,i) ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
23082#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1
23083#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2
23084#define ONIG_TRAVERSE_CALLBACK_AT_BOTH ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
23085#define ONIG_REGION_NOTPOS -1
23086#define ONIG_NULL_WARN onig_null_warn
23087#define ONIG_CHAR_TABLE_SIZE 256
23088#pragma GCC visibility pop
23089#define RUBY_INTERNAL_ENCODING_ENCODING_H
23090#define ONIGURUMA_H
23091#define ONIGURUMA
23092#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR
23093#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR
23094#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY
23095#pragma GCC visibility push(default)
23096#define ENCODING_INLINE_MAX RUBY_ENCODING_INLINE_MAX
23097#define ENCODING_SHIFT RUBY_ENCODING_SHIFT
23098#define ENCODING_MASK RUBY_ENCODING_MASK
23099#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i)
23100#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i)
23101#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj)
23102#define ENCODING_GET(obj) RB_ENCODING_GET(obj)
23103#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj)
23104#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN
23105#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret)
23106#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret)
23107#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret)
23108#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret)
23109#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret)
23110#pragma GCC visibility pop
23111#define RB_ENCODING_GET RB_ENCODING_GET
23112#define RB_ENCODING_GET_INLINED RB_ENCODING_GET_INLINED
23113#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT
23114#define RB_ENCODING_SET RB_ENCODING_SET
23115#define RB_ENCODING_SET_INLINED RB_ENCODING_SET_INLINED
23116#define rb_enc_asciicompat rb_enc_asciicompat
23117#define rb_enc_code_to_mbclen rb_enc_code_to_mbclen
23118#define rb_enc_codepoint rb_enc_codepoint
23119#define rb_enc_left_char_head rb_enc_left_char_head
23120#define rb_enc_mbc_to_codepoint rb_enc_mbc_to_codepoint
23121#define rb_enc_mbcput rb_enc_mbcput
23122#define rb_enc_mbmaxlen rb_enc_mbmaxlen
23123#define rb_enc_mbminlen rb_enc_mbminlen
23124#define rb_enc_name rb_enc_name
23125#define rb_enc_prev_char rb_enc_prev_char
23126#define rb_enc_right_char_head rb_enc_right_char_head
23127#define rb_enc_step_back rb_enc_step_back
23128#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p
23129#pragma GCC visibility push(default)
23130#pragma GCC visibility pop
23131#define rb_enc_is_newline rb_enc_is_newline
23132#define rb_enc_isalnum rb_enc_isalnum
23133#define rb_enc_isalpha rb_enc_isalpha
23134#define rb_enc_isascii rb_enc_isascii
23135#define rb_enc_isctype rb_enc_isctype
23136#define rb_enc_isdigit rb_enc_isdigit
23137#define rb_enc_islower rb_enc_islower
23138#define rb_enc_isprint rb_enc_isprint
23139#define rb_enc_ispunct rb_enc_ispunct
23140#define rb_enc_isspace rb_enc_isspace
23141#define rb_enc_isupper rb_enc_isupper
23142#define RUBY_INTERNAL_ENCODING_PATHNAME_H
23143#pragma GCC visibility push(default)
23144#pragma GCC visibility pop
23145#define RUBY_INTERNAL_ENCODING_RE_H
23146#pragma GCC visibility push(default)
23147#pragma GCC visibility pop
23148#define RUBY_INTERNAL_ENCODING_SPRINTF_H
23149#pragma GCC visibility push(default)
23150#pragma GCC visibility pop
23151#define RUBY_INTERNAL_ENCODING_STRING_H
23152#pragma GCC visibility push(default)
23153#define rb_enc_str_new(str,len,enc) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_enc_str_new_static: rb_enc_str_new) ((str), (len), (enc)))
23154#define rb_enc_str_new_cstr(str,enc) ((RBIMPL_CONSTANT_P(str) ? rbimpl_enc_str_new_cstr : rb_enc_str_new_cstr) ((str), (enc)))
23155#pragma GCC visibility pop
23156#define RUBY_INTERNAL_ENCODING_SYMBOL_H
23157#pragma GCC visibility push(default)
23158#pragma GCC visibility pop
23159#define RUBY_INTERNAL_ENCODING_TRANSCODE_H
23160#pragma GCC visibility push(default)
23161#define ECONV_ERROR_HANDLER_MASK RUBY_ECONV_ERROR_HANDLER_MASK
23162#define ECONV_INVALID_MASK RUBY_ECONV_INVALID_MASK
23163#define ECONV_INVALID_REPLACE RUBY_ECONV_INVALID_REPLACE
23164#define ECONV_UNDEF_MASK RUBY_ECONV_UNDEF_MASK
23165#define ECONV_UNDEF_REPLACE RUBY_ECONV_UNDEF_REPLACE
23166#define ECONV_UNDEF_HEX_CHARREF RUBY_ECONV_UNDEF_HEX_CHARREF
23167#define ECONV_DECORATOR_MASK RUBY_ECONV_DECORATOR_MASK
23168#define ECONV_NEWLINE_DECORATOR_MASK RUBY_ECONV_NEWLINE_DECORATOR_MASK
23169#define ECONV_NEWLINE_DECORATOR_READ_MASK RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK
23170#define ECONV_NEWLINE_DECORATOR_WRITE_MASK RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK
23171#define ECONV_UNIVERSAL_NEWLINE_DECORATOR RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR
23172#define ECONV_CRLF_NEWLINE_DECORATOR RUBY_ECONV_CRLF_NEWLINE_DECORATOR
23173#define ECONV_CR_NEWLINE_DECORATOR RUBY_ECONV_CR_NEWLINE_DECORATOR
23174#define ECONV_XML_TEXT_DECORATOR RUBY_ECONV_XML_TEXT_DECORATOR
23175#define ECONV_XML_ATTR_CONTENT_DECORATOR RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR
23176#define ECONV_STATEFUL_DECORATOR_MASK RUBY_ECONV_STATEFUL_DECORATOR_MASK
23177#define ECONV_XML_ATTR_QUOTE_DECORATOR RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR
23178#define ECONV_DEFAULT_NEWLINE_DECORATOR RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR
23179#define ECONV_PARTIAL_INPUT RUBY_ECONV_PARTIAL_INPUT
23180#define ECONV_AFTER_OUTPUT RUBY_ECONV_AFTER_OUTPUT
23181#pragma GCC visibility pop
23182#define STR_NOEMBED FL_USER1
23183#define STR_SHARED FL_USER2
23184#undef rb_fstring_cstr
23185#pragma GCC visibility push(default)
23186#pragma GCC visibility pop
23187#pragma GCC visibility push(default)
23188#pragma GCC visibility pop
23189#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
23190#define rb_fstring_literal(str) rb_fstring_lit(str)
23191#define rb_fstring_enc_lit(str,enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
23192#define rb_fstring_enc_literal(str,enc) rb_fstring_enc_lit(str, enc)
23193#define rb_fstring_cstr(str) (__builtin_constant_p(str) ? rb_fstring_new((str), (long)strlen(str)) : (rb_fstring_cstr)(str))
23194#undef Check_Type
23195#define rb_raise_static(e,m) rb_raise_cstr_i((e), rb_str_new_static((m), rb_strlen_lit(m)))
23196#define rb_sys_fail_path(path) rb_sys_fail_path_in(RUBY_FUNCTION_NAME_STRING, path)
23197#define rb_syserr_fail_path(err,path) rb_syserr_fail_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23198#define rb_syserr_new_path(err,path) rb_syserr_new_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23199#define rb_warn_deprecated_to_remove_at(removal,...) rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
23200#define RUBY_VERSION_SINCE(major,minor) 0
23201#define RUBY_VERSION_BEFORE(major,minor) 0
23202#define RBIMPL_TODO0(x)
23203#define RBIMPL_TODO(message) RBIMPL_TODO0("TODO: " message)
23204#define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
23205#pragma GCC visibility push(default)
23206#pragma GCC visibility pop
23207#define INTERNAL_EVAL_H
23208#define id_signo ruby_static_id_signo
23209#define id_status ruby_static_id_status
23210#define INTERNAL_INITS_H
23211#define INTERNAL_OBJECT_H
23212#define INTERNAL_CLASS_H
23213#define RUBY_ID_TABLE_H 1
23214#define RCLASS_EXT(c) (RCLASS(c)->ptr)
23215#define RCLASS_IV_TBL(c) (RCLASS_EXT(c)->iv_tbl)
23216#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
23217#define RCLASS_M_TBL(c) (RCLASS_EXT(c)->m_tbl)
23218#define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl)
23219#define RCLASS_CC_TBL(c) (RCLASS_EXT(c)->cc_tbl)
23220#define RCLASS_CVC_TBL(c) (RCLASS_EXT(c)->cvc_tbl)
23221#define RCLASS_IV_INDEX_TBL(c) (RCLASS_EXT(c)->iv_index_tbl)
23222#define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_)
23223#define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class)
23224#define RCLASS_SERIAL(c) (RCLASS(c)->class_serial)
23225#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
23226#define RCLASS_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->subclass_entry)
23227#define RCLASS_MODULE_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->module_subclass_entry)
23228#define RCLASS_ALLOCATOR(c) (RCLASS_EXT(c)->allocator)
23229#define RCLASS_SUBCLASSES(c) (RCLASS_EXT(c)->subclasses)
23230#define RICLASS_IS_ORIGIN FL_USER5
23231#define RCLASS_CLONED FL_USER6
23232#define RICLASS_ORIGIN_SHARED_MTBL FL_USER8
23233#pragma GCC visibility push(default)
23234#pragma GCC visibility pop
23235#pragma GCC diagnostic push
23236#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23237#pragma GCC diagnostic pop
23238#pragma GCC diagnostic push
23239#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23240#pragma GCC diagnostic pop
23241#pragma GCC diagnostic push
23242#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23243#pragma GCC diagnostic pop
23244#pragma GCC visibility push(default)
23245#pragma GCC visibility pop
23246#pragma GCC visibility push(default)
23247#pragma GCC visibility pop
23248#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL_inline
23249#define INTERNAL_PARSE_H
23250#pragma GCC visibility push(default)
23251#pragma GCC visibility pop
23252#define INTERNAL_PROC_H
23253#pragma GCC visibility push(default)
23254#pragma GCC visibility pop
23255#define INTERNAL_RE_H
23256#pragma GCC visibility push(default)
23257#pragma GCC visibility pop
23258#define INTERNAL_SYMBOL_H
23259#undef rb_sym_intern_ascii_cstr
23260#define rb_sym_intern_ascii_cstr(ptr) (__builtin_constant_p(ptr) ? rb_sym_intern_ascii((ptr), (long)strlen(ptr)) : rb_sym_intern_ascii_cstr(ptr))
23261#define INTERNAL_THREAD_H
23262#define COVERAGE_INDEX_LINES 0
23263#define COVERAGE_INDEX_BRANCHES 1
23264#define COVERAGE_TARGET_LINES 1
23265#define COVERAGE_TARGET_BRANCHES 2
23266#define COVERAGE_TARGET_METHODS 4
23267#define COVERAGE_TARGET_ONESHOT_LINES 8
23268#pragma GCC visibility push(default)
23269#pragma GCC visibility pop
23270#pragma GCC visibility push(default)
23271#pragma GCC visibility pop
23272#define INTERNAL_SANITIZERS_H
23273#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) NO_SANITIZE_ADDRESS(NOINLINE(x))
23274#undef NO_SANITIZE
23275#define NO_SANITIZE(x,y) COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Wattributes); __attribute__((__no_sanitize__(x))) y; COMPILER_WARNING_POP
23276#define __asan_poison_memory_region(x,y)
23277#define __asan_unpoison_memory_region(x,y)
23278#define __asan_region_is_poisoned(x,y) 0
23279#define __msan_allocated_memory(x,y) ((void)(x), (void)(y))
23280#define __msan_poison(x,y) ((void)(x), (void)(y))
23281#define __msan_unpoison(x,y) ((void)(x), (void)(y))
23282#define __msan_unpoison_string(x) ((void)(x))
23283#define VALGRIND_MAKE_MEM_DEFINED(p,n) 0
23284#define VALGRIND_MAKE_MEM_UNDEFINED(p,n) 0
23285#define RUBY_ISEQ_H 1
23286#define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
23287#define ISEQ_MINOR_VERSION ((unsigned int)ruby_api_version[1])
23288#define USE_ISEQ_NODE_ID 1
23289#define ISEQ_COVERAGE(iseq) iseq->body->variable.coverage
23290#define ISEQ_COVERAGE_SET(iseq,cov) RB_OBJ_WRITE(iseq, &iseq->body->variable.coverage, cov)
23291#define ISEQ_LINE_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
23292#define ISEQ_BRANCH_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_BRANCHES)
23293#define ISEQ_PC2BRANCHINDEX(iseq) iseq->body->variable.pc2branchindex
23294#define ISEQ_PC2BRANCHINDEX_SET(iseq,h) RB_OBJ_WRITE(iseq, &iseq->body->variable.pc2branchindex, h)
23295#define ISEQ_FLIP_CNT(iseq) (iseq)->body->variable.flip_count
23296#define ISEQ_TRACE_EVENTS (RUBY_EVENT_LINE | RUBY_EVENT_CLASS | RUBY_EVENT_END | RUBY_EVENT_CALL | RUBY_EVENT_RETURN| RUBY_EVENT_C_CALL| RUBY_EVENT_C_RETURN| RUBY_EVENT_B_CALL| RUBY_EVENT_B_RETURN| RUBY_EVENT_COVERAGE_LINE| RUBY_EVENT_COVERAGE_BRANCH)
23297#define ISEQ_NOT_LOADED_YET IMEMO_FL_USER1
23298#define ISEQ_USE_COMPILE_DATA IMEMO_FL_USER2
23299#define ISEQ_TRANSLATED IMEMO_FL_USER3
23300#define ISEQ_MARKABLE_ISEQ IMEMO_FL_USER4
23301#define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW(((VALUE)iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
23302#pragma GCC visibility push(default)
23303#define INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE (512)
23304#pragma GCC visibility pop
23305#define RUBY_MJIT_H 1
23306#define USE_DEBUG_COUNTER 0
23307#define RUBY_DEBUG_COUNTER_H 1
23308#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_ ##name,
23309#undef RB_DEBUG_COUNTER
23310#define RB_DEBUG_COUNTER_INC(type) ((void)0)
23311#define RB_DEBUG_COUNTER_INC_UNLESS(type,cond) (!!(cond))
23312#define RB_DEBUG_COUNTER_INC_IF(type,cond) (!!(cond))
23313#define RB_DEBUG_COUNTER_ADD(type,num) ((void)0)
23314#define RB_DEBUG_COUNTER_SETMAX(type,num) 0
23315#pragma GCC visibility push(default)
23316#pragma GCC visibility pop
23317#define RUBY_H 1
23318#define HAVE_RUBY_ATOMIC_H 1
23319#define HAVE_RUBY_DEBUG_H 1
23320#define HAVE_RUBY_DEFINES_H 1
23321#define HAVE_RUBY_ENCODING_H 1
23322#define HAVE_RUBY_FIBER_SCHEDULER_H 1
23323#define HAVE_RUBY_INTERN_H 1
23324#define HAVE_RUBY_IO_H 1
23325#define HAVE_RUBY_MEMORY_VIEW_H 1
23326#define HAVE_RUBY_MISSING_H 1
23327#define HAVE_RUBY_ONIGMO_H 1
23328#define HAVE_RUBY_ONIGURUMA_H 1
23329#define HAVE_RUBY_RACTOR_H 1
23330#define HAVE_RUBY_RANDOM_H 1
23331#define HAVE_RUBY_RE_H 1
23332#define HAVE_RUBY_REGEX_H 1
23333#define HAVE_RUBY_RUBY_H 1
23334#define HAVE_RUBY_ST_H 1
23335#define HAVE_RUBY_THREAD_H 1
23336#define HAVE_RUBY_THREAD_NATIVE_H 1
23337#define HAVE_RUBY_UTIL_H 1
23338#define HAVE_RUBY_VERSION_H 1
23339#define HAVE_RUBY_VM_H 1
23340#define YJIT_H 1
23341#define YJIT_STATS RUBY_DEBUG
23342#define YJIT_SUPPORTED_P 1
23343#pragma GCC visibility push(default)
23344#pragma GCC visibility pop
23345#define mjit_enabled true
23346#define RUBY_VM_H 1
23347#pragma GCC visibility push(default)
23348#pragma GCC visibility pop
23349#define RUBY_VM_CALLINFO_H
23350#define VM_CALL_ARGS_SPLAT (0x01 << VM_CALL_ARGS_SPLAT_bit)
23351#define VM_CALL_ARGS_BLOCKARG (0x01 << VM_CALL_ARGS_BLOCKARG_bit)
23352#define VM_CALL_FCALL (0x01 << VM_CALL_FCALL_bit)
23353#define VM_CALL_VCALL (0x01 << VM_CALL_VCALL_bit)
23354#define VM_CALL_ARGS_SIMPLE (0x01 << VM_CALL_ARGS_SIMPLE_bit)
23355#define VM_CALL_BLOCKISEQ (0x01 << VM_CALL_BLOCKISEQ_bit)
23356#define VM_CALL_KWARG (0x01 << VM_CALL_KWARG_bit)
23357#define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
23358#define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
23359#define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
23360#define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
23361#define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
23362#define VM_CALL_KW_SPLAT_MUT (0x01 << VM_CALL_KW_SPLAT_MUT_bit)
23363#define USE_EMBED_CI 1
23364#define CI_EMBED_TAG_bits 1
23365#define CI_EMBED_ARGC_bits 15
23366#define CI_EMBED_FLAG_bits 16
23367#define CI_EMBED_ID_bits 32
23368#define CI_EMBED_FLAG 0x01
23369#define CI_EMBED_ARGC_SHFT (CI_EMBED_TAG_bits)
23370#define CI_EMBED_ARGC_MASK ((((VALUE)1)<<CI_EMBED_ARGC_bits) - 1)
23371#define CI_EMBED_FLAG_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits)
23372#define CI_EMBED_FLAG_MASK ((((VALUE)1)<<CI_EMBED_FLAG_bits) - 1)
23373#define CI_EMBED_ID_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits)
23374#define CI_EMBED_ID_MASK ((((VALUE)1)<<CI_EMBED_ID_bits) - 1)
23375#define vm_ci_new(mid,flag,argc,kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23376#define vm_ci_new_runtime(mid,flag,argc,kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23377#define VM_CI_EMBEDDABLE_P(mid,flag,argc,kwarg) (((mid ) & ~CI_EMBED_ID_MASK) ? false : ((flag) & ~CI_EMBED_FLAG_MASK) ? false : ((argc) & ~CI_EMBED_ARGC_MASK) ? false : (kwarg) ? false : true)
23378#define vm_ci_new_id(mid,flag,argc,must_zero) ((const struct rb_callinfo *) ((((VALUE)(mid )) << CI_EMBED_ID_SHFT) | (((VALUE)(flag)) << CI_EMBED_FLAG_SHFT) | (((VALUE)(argc)) << CI_EMBED_ARGC_SHFT) | RUBY_FIXNUM_FLAG))
23379#define VM_CALLINFO_NOT_UNDER_GC IMEMO_FL_USER0
23380#define VM_CI_ON_STACK(mid_,flags_,argc_,kwarg_) (struct rb_callinfo) { .flags = T_IMEMO | (imemo_callinfo << FL_USHIFT) | VM_CALLINFO_NOT_UNDER_GC, .mid = mid_, .flag = flags_, .argc = argc_, .kwarg = kwarg_, }
23381#define VM_CALLCACHE_UNMARKABLE IMEMO_FL_USER0
23382#define VM_CALLCACHE_ON_STACK IMEMO_FL_USER1
23383#define VM_CC_ON_STACK(clazz,call,aux,cme) (struct rb_callcache) { .flags = T_IMEMO | (imemo_callcache << FL_USHIFT) | VM_CALLCACHE_UNMARKABLE | VM_CALLCACHE_ON_STACK, .klass = clazz, .cme_ = cme, .call_ = call, .aux_ = aux, }
23384#define vm_cc_empty() rb_vm_empty_cc()
23385#define RUBY_DEBUG_H
23386#pragma GCC visibility push(default)
23387#define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
23388#define dp(v) ruby_debug_print_value(-1, 0, "", (v))
23389#define dpi(i) ruby_debug_print_id(-1, 0, "", (i))
23390#define dpn(n) ruby_debug_print_node(-1, 0, "", (n))
23391#pragma GCC visibility pop
23392#define RUBY_DEVEL 0
23393#define _RUBY_DEBUG_LOG(...) ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__)
23394#define RUBY_DEBUG_LOG(...)
23395#define RUBY_DEBUG_LOG2(file,line,...)
23396#define RUBY_VM_EXEC_H
23397#define debugs
23398#define DEBUG_ENTER_INSN(insn)
23399#define DEBUG_END_INSN()
23400#define throwdebug if(0)ruby_debug_printf
23401#define USE_INSNS_COUNTER 0
23402#define LABEL(x) INSN_LABEL_ ##x
23403#define ELABEL(x) INSN_ELABEL_ ##x
23404#define LABEL_PTR(x) RB_GNUC_EXTENSION(&&LABEL(x))
23405#define INSN_ENTRY_SIG(insn) if (0) { ruby_debug_printf("exec: %s@(%"PRIdPTRDIFF", %"PRIdPTRDIFF")@%s:%u\n", #insn, (reg_pc - reg_cfp->iseq->body->iseq_encoded), (reg_cfp->pc - reg_cfp->iseq->body->iseq_encoded), RSTRING_PTR(rb_iseq_path(reg_cfp->iseq)), rb_iseq_line_no(reg_cfp->iseq, reg_pc - reg_cfp->iseq->body->iseq_encoded)); } if (USE_INSNS_COUNTER) vm_insns_counter_count_insn(BIN(insn));
23406#define INSN_DISPATCH_SIG(insn)
23407#define INSN_ENTRY(insn) LABEL(insn): INSN_ENTRY_SIG(insn);
23408#define TC_DISPATCH(insn) INSN_DISPATCH_SIG(insn); RB_GNUC_EXTENSION_BLOCK(goto *(void const *)GET_CURRENT_INSN()); ;
23409#define END_INSN(insn) DEBUG_END_INSN(); TC_DISPATCH(insn);
23410#define INSN_DISPATCH() TC_DISPATCH(__START__) {
23411#define END_INSNS_DISPATCH() rb_bug("unknown insn: %"PRIdVALUE, GET_CURRENT_INSN()); }
23412#define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
23413#define START_OF_ORIGINAL_INSN(x) if (0) goto start_of_ ##x; start_of_ ##x:
23414#define DISPATCH_ORIGINAL_INSN(x) goto start_of_ ##x;
23415#define VM_SP_CNT(ec,sp) ((sp) - (ec)->vm_stack)
23416#define THROW_EXCEPTION(exc) do { ec->errinfo = (VALUE)(exc); EC_JUMP_TAG(ec, ec->tag->state); } while (0)
23417#define SCREG(r) (reg_ ##r)
23418#define VM_DEBUG_STACKOVERFLOW 0
23419#define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp,margin)
23420#define INSN_LABEL2(insn,name) INSN_LABEL_ ## insn ## _ ## name
23421#define INSN_LABEL(x) INSN_LABEL2(NAME_OF_CURRENT_INSN, x)
23422#define RUBY_INSNHELPER_H
23423#pragma GCC visibility push(default)
23424#pragma GCC visibility pop
23425#define COLLECT_USAGE_INSN(insn)
23426#define COLLECT_USAGE_OPERAND(insn,n,op)
23427#define COLLECT_USAGE_REGISTER(reg,s)
23428#define PUSH(x) (SET_SV(x), INC_SP(1))
23429#define TOPN(n) (*(GET_SP()-(n)-1))
23430#define POPN(n) (DEC_SP(n))
23431#define POP() (DEC_SP(1))
23432#define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
23433#define VM_REG_CFP (reg_cfp)
23434#define VM_REG_PC (VM_REG_CFP->pc)
23435#define VM_REG_SP (VM_REG_CFP->sp)
23436#define VM_REG_EP (VM_REG_CFP->ep)
23437#define RESTORE_REGS() do { VM_REG_CFP = ec->cfp; } while (0)
23438#define COLLECT_USAGE_REGISTER_HELPER(a,b,v) (v)
23439#define GET_PC() (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))
23440#define SET_PC(x) (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))
23441#define GET_CURRENT_INSN() (*GET_PC())
23442#define GET_OPERAND(n) (GET_PC()[(n)])
23443#define ADD_PC(n) (SET_PC(VM_REG_PC + (n)))
23444#define JUMP(dst) (SET_PC(VM_REG_PC + (dst)))
23445#define GET_CFP() (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))
23446#define GET_EP() (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))
23447#define SET_EP(x) (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))
23448#define GET_LEP() (VM_EP_LEP(GET_EP()))
23449#define GET_SP() (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))
23450#define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23451#define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23452#define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23453#define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
23454#define GET_ISEQ() (GET_CFP()->iseq)
23455#define GET_PREV_EP(ep) ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))
23456#define GET_SELF() (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))
23457#define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
23458#define SETUP_CANARY(cond) if (cond) {} else {}
23459#define CHECK_CANARY(cond,insn) if (cond) {(void)(insn);}
23460#define PREV_CLASS_SERIAL() (ruby_vm_class_serial)
23461#define NEXT_CLASS_SERIAL() (++ruby_vm_class_serial)
23462#define GET_GLOBAL_CONSTANT_STATE() (ruby_vm_global_constant_state)
23463#define INC_GLOBAL_CONSTANT_STATE() (++ruby_vm_global_constant_state)
23464#define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state)
23465#define INC_GLOBAL_CVAR_STATE() (++ruby_vm_global_cvar_state)
23466#define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
23467#define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
23468#define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
23469#define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
23470#define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
23471#define RUBY_RACTOR_H 1
23472#pragma GCC visibility push(default)
23473#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free)
23474#pragma GCC visibility pop
23475#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)
23476#define RACTOR_CHECK_MODE (0 || VM_CHECK_MODE || RUBY_DEBUG)
23477#pragma GCC visibility push(default)
23478#pragma GCC visibility pop
23479#define rb_ractor_confirm_belonging(obj) obj
23480#define RUBY_VM_SYNC_H
23481#define LOCATION_ARGS void
23482#define LOCATION_PARAMS
23483#define APPEND_LOCATION_ARGS
23484#define APPEND_LOCATION_PARAMS
23485#define RB_VM_LOCKED_P() rb_vm_locked_p()
23486#define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
23487#define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
23488#define RB_VM_LOCK_ENTER_CR_LEV(cr,levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
23489#define RB_VM_LOCK_LEAVE_CR_LEV(cr,levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
23490#define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
23491#define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
23492#define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
23493#define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
23494#define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
23495#define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
23496#define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
23497#define ASSERT_vm_locking()
23498#define ASSERT_vm_unlocking()
23499#define BUILTIN_H_INCLUDED
23500#define RB_BUILTIN_FUNCTION(_i,_name,_fname,_arity,_compiler) { .name = #_name, .func_ptr = (void *)_fname, .argc = _arity, .index = _i, .compiler = _compiler, }
23501#define _PROBES_H
23502#define DTRACE_PROBES_DISABLED 1
23503#define RUBY_DTRACE_METHOD_ENTRY_ENABLED() 0
23504#define RUBY_DTRACE_METHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
23505#define RUBY_DTRACE_METHOD_RETURN_ENABLED() 0
23506#define RUBY_DTRACE_METHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
23507#define RUBY_DTRACE_CMETHOD_ENTRY_ENABLED() 0
23508#define RUBY_DTRACE_CMETHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
23509#define RUBY_DTRACE_CMETHOD_RETURN_ENABLED() 0
23510#define RUBY_DTRACE_CMETHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
23511#define RUBY_DTRACE_REQUIRE_ENTRY_ENABLED() 0
23512#define RUBY_DTRACE_REQUIRE_ENTRY(rquiredfile,filename,lineno) do {} while (0)
23513#define RUBY_DTRACE_REQUIRE_RETURN_ENABLED() 0
23514#define RUBY_DTRACE_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
23515#define RUBY_DTRACE_FIND_REQUIRE_ENTRY_ENABLED() 0
23516#define RUBY_DTRACE_FIND_REQUIRE_ENTRY(requiredfile,filename,lineno) do {} while (0)
23517#define RUBY_DTRACE_FIND_REQUIRE_RETURN_ENABLED() 0
23518#define RUBY_DTRACE_FIND_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
23519#define RUBY_DTRACE_LOAD_ENTRY_ENABLED() 0
23520#define RUBY_DTRACE_LOAD_ENTRY(loadedfile,filename,lineno) do {} while (0)
23521#define RUBY_DTRACE_LOAD_RETURN_ENABLED() 0
23522#define RUBY_DTRACE_LOAD_RETURN(loadedfile,filename,lineno) do {} while (0)
23523#define RUBY_DTRACE_RAISE_ENABLED() 0
23524#define RUBY_DTRACE_RAISE(classname,filename,lineno) do {} while (0)
23525#define RUBY_DTRACE_OBJECT_CREATE_ENABLED() 0
23526#define RUBY_DTRACE_OBJECT_CREATE(classname,filename,lineno) do {} while (0)
23527#define RUBY_DTRACE_ARRAY_CREATE_ENABLED() 0
23528#define RUBY_DTRACE_ARRAY_CREATE(length,filename,lineno) do {} while (0)
23529#define RUBY_DTRACE_HASH_CREATE_ENABLED() 0
23530#define RUBY_DTRACE_HASH_CREATE(length,filename,lineno) do {} while (0)
23531#define RUBY_DTRACE_STRING_CREATE_ENABLED() 0
23532#define RUBY_DTRACE_STRING_CREATE(length,filename,lineno) do {} while (0)
23533#define RUBY_DTRACE_SYMBOL_CREATE_ENABLED() 0
23534#define RUBY_DTRACE_SYMBOL_CREATE(str,filename,lineno) do {} while (0)
23535#define RUBY_DTRACE_PARSE_BEGIN_ENABLED() 0
23536#define RUBY_DTRACE_PARSE_BEGIN(sourcefile,lineno) do {} while (0)
23537#define RUBY_DTRACE_PARSE_END_ENABLED() 0
23538#define RUBY_DTRACE_PARSE_END(sourcefile,lineno) do {} while (0)
23539#define RUBY_DTRACE_INSN_ENABLED() 0
23540#define RUBY_DTRACE_INSN(insns_name) do {} while (0)
23541#define RUBY_DTRACE_INSN_OPERAND_ENABLED() 0
23542#define RUBY_DTRACE_INSN_OPERAND(val,insns_name) do {} while (0)
23543#define RUBY_DTRACE_GC_MARK_BEGIN_ENABLED() 0
23544#define RUBY_DTRACE_GC_MARK_BEGIN() do {} while (0)
23545#define RUBY_DTRACE_GC_MARK_END_ENABLED() 0
23546#define RUBY_DTRACE_GC_MARK_END() do {} while (0)
23547#define RUBY_DTRACE_GC_SWEEP_BEGIN_ENABLED() 0
23548#define RUBY_DTRACE_GC_SWEEP_BEGIN() do {} while (0)
23549#define RUBY_DTRACE_GC_SWEEP_END_ENABLED() 0
23550#define RUBY_DTRACE_GC_SWEEP_END() do {} while (0)
23551#define RUBY_PROBES_HELPER_H
23552#pragma GCC visibility push(default)
23553#pragma GCC visibility pop
23554#define RUBY_DTRACE_METHOD_HOOK(name,ec,klazz,id) do { if (UNLIKELY(RUBY_DTRACE_ ##name ##_ENABLED())) { struct ruby_dtrace_method_hook_args args; if (rb_dtrace_setup(ec, klazz, id, &args)) { RUBY_DTRACE_ ##name(args.classname, args.methodname, args.filename, args.line_no); } } } while (0)
23555#define RUBY_DTRACE_METHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_ENTRY, ec, klass, id)
23556#define RUBY_DTRACE_METHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_RETURN, ec, klass, id)
23557#define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_ENTRY, ec, klass, id)
23558#define RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_RETURN, ec, klass, id)
23559#pragma GCC diagnostic push
23560#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23561#pragma GCC diagnostic pop
23562#define CONSTANT_H
23563#define RB_CONST_PRIVATE_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PRIVATE)
23564#define RB_CONST_PUBLIC_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PUBLIC)
23565#define RB_CONST_DEPRECATED_P(ce) ((ce)->flag & CONST_DEPRECATED)
23566#pragma GCC visibility push(default)
23567#pragma GCC visibility pop
23568#define INTERNAL_COMPAR_H
23569#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
23570#define NEW_CMP_OPT_MEMO(type,value) NEW_PARTIAL_MEMO_FOR(type, value, cmp_opt)
23571#define CMP_OPTIMIZABLE_BIT(type) (1U << TOKEN_PASTE(cmp_opt_,type))
23572#define CMP_OPTIMIZABLE(data,type) (((data).opt_inited & CMP_OPTIMIZABLE_BIT(type)) ? ((data).opt_methods & CMP_OPTIMIZABLE_BIT(type)) : (((data).opt_inited |= CMP_OPTIMIZABLE_BIT(type)), rb_method_basic_definition_p(TOKEN_PASTE(rb_c,type), id_cmp) && ((data).opt_methods |= CMP_OPTIMIZABLE_BIT(type))))
23573#define OPTIMIZED_CMP(a,b,data) ((FIXNUM_P(a) && FIXNUM_P(b) && CMP_OPTIMIZABLE(data, Integer)) ? (((long)a > (long)b) ? 1 : ((long)a < (long)b) ? -1 : 0) : (STRING_P(a) && STRING_P(b) && CMP_OPTIMIZABLE(data, String)) ? rb_str_cmp(a, b) : (RB_FLOAT_TYPE_P(a) && RB_FLOAT_TYPE_P(b) && CMP_OPTIMIZABLE(data, Float)) ? rb_float_cmp(a, b) : rb_cmpint(rb_funcallv(a, id_cmp, 1, &b), a, b))
23574#define INTERNAL_HASH_H
23575#define RHASH_AR_TABLE_MAX_SIZE SIZEOF_VALUE
23576#define RHASH_LEV_MASK (FL_USER13 | FL_USER14 | FL_USER15 | FL_USER16 | FL_USER17 | FL_USER18 | FL_USER19)
23577#define RHASH(obj) ((struct RHash *)(obj))
23578#pragma GCC visibility push(default)
23579#pragma GCC visibility pop
23580#pragma GCC visibility push(default)
23581#define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h, __FILE__, __LINE__)
23582#pragma GCC visibility pop
23583#define INTERNAL_NUMERIC_H
23584#define INTERNAL_BIGNUM_H
23585#define BDIGIT unsigned int
23586#define SIZEOF_BDIGIT SIZEOF_INT
23587#define BDIGIT_DBL unsigned LONG_LONG
23588#define BDIGIT_DBL_SIGNED LONG_LONG
23589#define PRI_BDIGIT_PREFIX ""
23590#define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
23591#define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
23592#define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
23593#define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
23594#define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
23595#define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
23596#define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
23597#define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
23598#define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
23599#define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
23600#define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
23601#define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
23602#define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
23603#define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
23604#define RBIGNUM(obj) ((struct RBignum *)(obj))
23605#define BIGNUM_SIGN_BIT FL_USER1
23606#define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
23607#define BIGNUM_EMBED_LEN_NUMBITS 3
23608#define BIGNUM_EMBED_LEN_MASK (~(~(VALUE)0U << BIGNUM_EMBED_LEN_NUMBITS) << BIGNUM_EMBED_LEN_SHIFT)
23609#define BIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
23610#define BIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*RBIMPL_RVALUE_EMBED_LEN_MAX/SIZEOF_ACTUAL_BDIGIT)
23611#pragma GCC visibility push(default)
23612#pragma GCC visibility pop
23613#pragma GCC visibility push(default)
23614#pragma GCC visibility pop
23615#define INTERNAL_BITS_H
23616#define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
23617#define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
23618#define SIGNED_INTEGER_MIN(T) ((sizeof(T) == sizeof(int8_t)) ? ((T)INT8_MIN) : ((sizeof(T) == sizeof(int16_t)) ? ((T)INT16_MIN) : ((sizeof(T) == sizeof(int32_t)) ? ((T)INT32_MIN) : ((sizeof(T) == sizeof(int64_t)) ? ((T)INT64_MIN) : 0))))
23619#define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
23620#define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
23621#define MUL_OVERFLOW_P(a,b) __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
23622#define MUL_OVERFLOW_SIGNED_INTEGER_P(a,b,min,max) ( (a) == 0 ? 0 : (a) == -1 ? (b) < -(max) : (a) > 0 ? ((b) > 0 ? (max) / (a) < (b) : (min) / (a) > (b)) : ((b) > 0 ? (min) / (a) < (b) : (max) / (a) > (b)))
23623#define MUL_OVERFLOW_FIXNUM_P(a,b) __extension__ ({ struct { long fixnum : sizeof(long) * CHAR_BIT - 1; } c = { 0 }; __builtin_mul_overflow_p((a), (b), c.fixnum); })
23624#define MUL_OVERFLOW_LONG_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
23625#define MUL_OVERFLOW_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
23626#define MUL_OVERFLOW_INT_P(a,b) MUL_OVERFLOW_P(a, b)
23627#define bit_length(x) (unsigned int) (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : sizeof(x) <= sizeof(int64_t) ? 64 - nlz_int64((uint64_t)(x)) : 128 - nlz_int128((uint128_t)(x)))
23628#define swap16 ruby_swap16
23629#define swap32 ruby_swap32
23630#define swap64 ruby_swap64
23631#define INTERNAL_FIXNUM_H
23632#define DLONG int128_t
23633#define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
23634#define ROUND_TO(mode,even,up,down) ((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even : (mode) == RUBY_NUM_ROUND_HALF_UP ? up : down)
23635#define ROUND_FUNC(mode,name) ROUND_TO(mode, name ##_half_even, name ##_half_up, name ##_half_down)
23636#define ROUND_CALL(mode,name,args) ROUND_TO(mode, name ##_half_even args, name ##_half_up args, name ##_half_down args)
23637#define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP
23638#define RFLOAT(obj) ((struct RFloat *)(obj))
23639#define rb_float_value rb_float_value_inline
23640#define rb_float_new rb_float_new_inline
23641#pragma GCC visibility push(default)
23642#pragma GCC visibility pop
23643#pragma GCC visibility push(default)
23644#pragma GCC visibility pop
23645#define INTERNAL_RANDOM_H
23646#define INTERNAL_VARIABLE_H
23647#define ROBJECT_TRANSIENT_FLAG FL_USER13
23648#pragma GCC visibility push(default)
23649#pragma GCC visibility pop
23650#pragma GCC visibility push(default)
23651#pragma GCC visibility pop
23652#define INTERNAL_STRUCT_H
23653#define RSTRUCT(obj) ((struct RStruct *)(obj))
23654#define RSTRUCT_LEN internal_RSTRUCT_LEN
23655#define RSTRUCT_SET internal_RSTRUCT_SET
23656#define RSTRUCT_GET internal_RSTRUCT_GET
23657#pragma GCC diagnostic push
23658#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23659#pragma GCC diagnostic pop
23660#define RUBY_TOPLEVEL_VARIABLE_H
23661#define BIN(n) YARVINSN_ ##n
23662#define ASSERT_VM_INSTRUCTION_SIZE(array) STATIC_ASSERT(numberof_ ##array, numberof(array) == VM_INSTRUCTION_SIZE)
23663#define vm_check_canary(ec,sp)
23664#define vm_check_frame(a,b,c,d)
23665#define vm_push_frame_debug_counter_inc(ec,cfp,t)
23666#pragma GCC diagnostic push
23667#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23668#pragma GCC diagnostic pop
23669#pragma GCC diagnostic push
23670#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23671#pragma GCC diagnostic pop
23672#pragma GCC diagnostic push
23673#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23674#pragma GCC diagnostic pop
23675#pragma GCC diagnostic push
23676#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23677#pragma GCC diagnostic pop
23678#pragma GCC diagnostic push
23679#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23680#pragma GCC diagnostic pop
23681#pragma GCC diagnostic push
23682#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23683#pragma GCC diagnostic pop
23684#pragma GCC diagnostic push
23685#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23686#pragma GCC diagnostic pop
23687#pragma GCC diagnostic push
23688#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23689#pragma GCC diagnostic pop
23690#pragma GCC diagnostic push
23691#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23692#pragma GCC diagnostic pop
23693#pragma GCC diagnostic push
23694#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23695#pragma GCC diagnostic pop
23696#pragma GCC diagnostic push
23697#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23698#pragma GCC diagnostic pop
23699#pragma GCC diagnostic push
23700#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23701#pragma GCC diagnostic pop
23702#define EQ_UNREDEFINED_P(t) BASIC_OP_UNREDEFINED_P(BOP_EQ, t ##_REDEFINED_OP_FLAG)
23703#undef EQ_UNREDEFINED_P
23704#define CHECK_CMP_NAN(a,b)
23705#define KW_SPECIFIED_BITS_MAX (32-1)
23706#define USE_OPT_HIST 0
23707#define CHECK_CFP_CONSISTENCY(func) (LIKELY(vm_cfp_consistent_p(ec, reg_cfp)) ? (void)0 : rb_bug(func ": cfp consistency error (%p, %p)", (void *)reg_cfp, (void *)(ec->cfp+1)))
23708#pragma GCC diagnostic push
23709#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23710#pragma GCC diagnostic pop
23711#pragma GCC diagnostic push
23712#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23713#pragma GCC diagnostic pop
23714#define VM_CALL_METHOD_ATTR(var,func,nohook) if (UNLIKELY(ruby_vm_event_flags & (RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN))) { EXEC_EVENT_HOOK(ec, RUBY_EVENT_C_CALL, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, Qundef); var = func; EXEC_EVENT_HOOK(ec, RUBY_EVENT_C_RETURN, calling->recv, vm_cc_cme(cc)->def->original_id, vm_ci_mid(ci), vm_cc_cme(cc)->owner, (var)); } else { nohook; var = func; }
23715#pragma GCC diagnostic push
23716#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23717#pragma GCC diagnostic pop
23718#pragma GCC diagnostic push
23719#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23720#pragma GCC diagnostic pop
23721#define mexp_search_method vm_search_method_wrap
23722#define mexp_search_super vm_search_super_method
23723#define mexp_search_invokeblock vm_search_invokeblock
23724#define id_cmp idCmp
23725#undef id_cmp
23726#define IMEMO_CONST_CACHE_SHAREABLE IMEMO_FL_USER0
23727#pragma GCC diagnostic push
23728#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23729#pragma GCC diagnostic pop
23730#pragma GCC diagnostic push
23731#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23732#pragma GCC diagnostic pop
23733#pragma GCC diagnostic push
23734#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23735#pragma GCC diagnostic pop
23736#define VM_TRACE_HOOK(target_event,val) do { if ((pc_events & (target_event)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (target_event), global_hooks, local_hooks, (val)); } } while (0)
23737#undef VM_TRACE_HOOK
23738#define id_mesg idMesg
#define LONG_LONG
Definition: long_long.h:38
static VALUE RB_CHR2FIX(unsigned char c)
Converts a C's unsigned char into an instance of rb_cInteger.
Definition: char.h:56
static char rb_num2char_inline(VALUE x)
Converts an instance of rb_cNumeric into C's char.
Definition: char.h:73
static int rb_isdigit(int c)
Our own locale-insensitive version of isdigit(3).
Definition: ctype.h:302
static int rb_isupper(int c)
Our own locale-insensitive version of isupper(3).
Definition: ctype.h:232
static int rb_iscntrl(int c)
Our own locale-insensitive version of iscntrl(3).
Definition: ctype.h:418
static int rb_ispunct(int c)
Our own locale-insensitive version of ispunct(3).
Definition: ctype.h:465
static int rb_isalnum(int c)
Our own locale-insensitive version of isalnum(3).
Definition: ctype.h:326
static int rb_isxdigit(int c)
Our own locale-insensitive version of isxdigit(3).
Definition: ctype.h:349
static int rb_isspace(int c)
Our own locale-insensitive version of isspace(3).
Definition: ctype.h:395
static int rb_isascii(int c)
Our own locale-insensitive version of isascii(3).
Definition: ctype.h:209
static int rb_toupper(int c)
Our own locale-insensitive version of toupper(3).
Definition: ctype.h:539
unsigned long ruby_strtoul(const char *str, char **endptr, int base)
Our own locale-insensitive version of strtoul(3).
Definition: util.c:133
static int rb_tolower(int c)
Our own locale-insensitive version of tolower(3).
Definition: ctype.h:514
static int rb_isgraph(int c)
Our own locale-insensitive version of isgraph(3).
Definition: ctype.h:489
static int rb_isalpha(int c)
Our own locale-insensitive version of isalpha(3).
Definition: ctype.h:279
static int rb_islower(int c)
Our own locale-insensitive version of islower(3).
Definition: ctype.h:255
static int rb_isprint(int c)
Identical to rb_isgraph(), except it also returns true for ‘’ '`.
Definition: ctype.h:442
static int rb_isblank(int c)
Our own locale-insensitive version of isblank(3).
Definition: ctype.h:372
#define rb_define_method_id(klass, mid, func, arity)
Defines klass#mid.
Definition: cxxanyargs.hpp:673
#define rb_define_singleton_method(klass, mid, func, arity)
Defines klass.mid.
Definition: cxxanyargs.hpp:685
#define rb_define_protected_method(klass, mid, func, arity)
Defines klass#mid and makes it protected.
Definition: cxxanyargs.hpp:681
#define rb_define_private_method(klass, mid, func, arity)
Defines klass#mid and makes it private.
Definition: cxxanyargs.hpp:677
double rb_float_value(VALUE num)
Extracts its double value from an instance of rb_cFloat.
Definition: numeric.c:6424
VALUE rb_float_new_in_heap(double d)
Identical to rb_float_new(), except it does not generate Flonums.
Definition: numeric.c:1016
VALUE rb_float_new(double d)
Converts a C's double into an instance of rb_cFloat.
Definition: numeric.c:6431
void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
Registers an event hook function.
Definition: vm_trace.c:184
int rb_remove_event_hook(rb_event_hook_func_t func)
Removes the passed function from the list of event hooks.
Definition: vm_trace.c:292
void(* rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass)
Type of event hooks.
Definition: event.h:115
ruby_fl_ushift
This is an enum because GDB wants it (rather than a macro).
Definition: fl_type.h:162
@ RUBY_FL_USHIFT
Number of bits in ruby_fl_type that are not open to users.
Definition: fl_type.h:167
static VALUE RB_OBJ_FROZEN_RAW(VALUE obj)
This is an implenentation detail of RB_OBJ_FROZEN().
Definition: fl_type.h:912
static bool RB_OBJ_TAINTABLE(VALUE obj)
Definition: fl_type.h:794
static VALUE RB_FL_TEST(VALUE obj, VALUE flags)
Tests if the given flag(s) are set or not.
Definition: fl_type.h:533
static VALUE RB_FL_TEST_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_TEST().
Definition: fl_type.h:507
static bool RB_FL_ABLE(VALUE obj)
Checks if the object is flaggable.
Definition: fl_type.h:482
static bool RB_FL_ANY_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_ANY().
Definition: fl_type.h:556
@ RUBY_FL_DUPPED
Definition: fl_type.h:439
static void rb_obj_freeze_inline(VALUE x)
Prevents further modifications to the given object.
Definition: fl_type.h:957
static bool RB_FL_ANY(VALUE obj, VALUE flags)
Identical to RB_FL_TEST(), except it returns bool.
Definition: fl_type.h:572
static void RB_FL_SET_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_SET().
Definition: fl_type.h:644
static bool RB_FL_ALL(VALUE obj, VALUE flags)
Identical to RB_FL_ANY(), except it mandates all passed flags be set.
Definition: fl_type.h:606
static bool RB_OBJ_FROZEN(VALUE obj)
Checks if an object is frozen.
Definition: fl_type.h:927
static bool RB_OBJ_TAINTED(VALUE obj)
Definition: fl_type.h:828
static VALUE RB_OBJ_TAINTED_RAW(VALUE obj)
Definition: fl_type.h:811
static void RB_OBJ_INFECT(VALUE dst, VALUE src)
Definition: fl_type.h:890
static void RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_UNSET().
Definition: fl_type.h:704
static void RB_FL_SET(VALUE obj, VALUE flags)
Sets the given flag(s).
Definition: fl_type.h:664
static void RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
Definition: fl_type.h:874
static void RB_FL_REVERSE(VALUE obj, VALUE flags)
Reverses the flags.
Definition: fl_type.h:775
static void RB_FL_UNSET(VALUE obj, VALUE flags)
Clears the given flag(s).
Definition: fl_type.h:719
static void RB_OBJ_FREEZE_RAW(VALUE obj)
This is an implenentation detail of RB_OBJ_FREEZE().
Definition: fl_type.h:945
static void RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_REVERSE().
Definition: fl_type.h:759
static bool RB_FL_ALL_RAW(VALUE obj, VALUE flags)
This is an implenentation detail of RB_FL_ALL().
Definition: fl_type.h:590
@ RUBY_FL_PROMOTED1
This flag has something to do with our garbage collector.
Definition: fl_type.h:240
@ RUBY_ELTS_SHARED
This flag has something to do with data structures.
Definition: fl_type.h:405
@ RUBY_FL_USER9
User-defined flag.
Definition: fl_type.h:369
@ RUBY_FL_SINGLETON
This flag has something to do with an object's class.
Definition: fl_type.h:430
@ RUBY_FL_USER8
User-defined flag.
Definition: fl_type.h:368
@ RUBY_FL_USER11
User-defined flag.
Definition: fl_type.h:371
@ RUBY_FL_USER5
User-defined flag.
Definition: fl_type.h:365
@ RUBY_FL_TAINT
Definition: fl_type.h:278
@ RUBY_FL_USER3
User-defined flag.
Definition: fl_type.h:363
@ RUBY_FL_USER17
User-defined flag.
Definition: fl_type.h:377
@ RUBY_FL_USER10
User-defined flag.
Definition: fl_type.h:370
@ RUBY_FL_USER7
User-defined flag.
Definition: fl_type.h:367
@ RUBY_FL_WB_PROTECTED
Definition: fl_type.h:207
@ RUBY_FL_PROMOTED0
This flag has something to do with our garbage collector.
Definition: fl_type.h:223
@ RUBY_FL_USER14
User-defined flag.
Definition: fl_type.h:374
@ RUBY_FL_USER6
User-defined flag.
Definition: fl_type.h:366
@ RUBY_FL_USER16
User-defined flag.
Definition: fl_type.h:376
@ RUBY_FL_EXIVAR
This flag has something to do with instance variables.
Definition: fl_type.h:345
@ RUBY_FL_UNTRUSTED
Definition: fl_type.h:305
@ RUBY_FL_PROMOTED
This flag has something to do with our garbage collector.
Definition: fl_type.h:257
@ RUBY_FL_USER0
User-defined flag.
Definition: fl_type.h:360
@ RUBY_FL_FREEZE
This flag has something to do with data immutability.
Definition: fl_type.h:356
@ RUBY_FL_USER15
User-defined flag.
Definition: fl_type.h:375
@ RUBY_FL_SEEN_OBJ_ID
This flag has something to do with object IDs.
Definition: fl_type.h:332
@ RUBY_FL_USER2
User-defined flag.
Definition: fl_type.h:362
@ RUBY_FL_USER4
User-defined flag.
Definition: fl_type.h:364
@ RUBY_FL_USER18
User-defined flag.
Definition: fl_type.h:378
@ RUBY_FL_USER1
User-defined flag.
Definition: fl_type.h:361
@ RUBY_FL_SHAREABLE
This flag has something to do with Ractor.
Definition: fl_type.h:298
@ RUBY_FL_FINALIZE
This flag has something to do with finalisers.
Definition: fl_type.h:271
@ RUBY_FL_USER19
User-defined flag.
Definition: fl_type.h:380
@ RUBY_FL_USER13
User-defined flag.
Definition: fl_type.h:373
@ RUBY_FL_USER12
User-defined flag.
Definition: fl_type.h:372
static void RB_OBJ_TAINT_RAW(VALUE obj)
Definition: fl_type.h:843
static void RB_OBJ_TAINT(VALUE obj)
Definition: fl_type.h:858
int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg)
Identical to rb_glob(), except it returns opaque exception states instead of raising exceptions.
Definition: dir.c:2693
void rb_glob(const char *pattern, void(*func)(const char *path, VALUE arg, void *enc), VALUE arg)
The "glob" operator.
int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg)
Identical to ruby_glob(), @shyouhei currently suspects.
Definition: dir.c:2833
int ruby_glob_func(const char *path, VALUE arg, void *enc)
Type of a glob callback function.
Definition: glob.h:49
void rb_include_module(VALUE klass, VALUE module)
Includes a module to a class.
Definition: class.c:1043
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:837
void rb_extend_object(VALUE obj, VALUE module)
Extend the object with the module.
Definition: eval.c:1579
void rb_prepend_module(VALUE klass, VALUE module)
Identical to rb_include_module(), except it "prepends" the passed module to the klass,...
Definition: class.c:1289
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
Definition: class.c:869
VALUE rb_define_module(const char *name)
Defines a top-level module.
Definition: class.c:948
VALUE rb_define_module_under(VALUE outer, const char *name)
Defines a module under the namespace of outer.
Definition: class.c:972
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
Definition: class.c:2116
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for a module.
Definition: class.c:2100
VALUE rb_extract_keywords(VALUE *orighash)
Splits a hash into two.
Definition: class.c:2177
void rb_need_block(void)
Declares that the current method needs a block.
Definition: eval.c:871
void rb_define_attr(VALUE klass, const char *name, int read, int write)
Defines public accessor method(s) for an attribute.
Definition: class.c:2122
void rb_undef_method(VALUE klass, const char *name)
Defines an undef of a method.
Definition: class.c:1938
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a method.
Definition: class.c:1914
int rb_keyword_given_p(void)
Determines if the current method is given a keyword argument.
Definition: eval.c:863
int rb_block_given_p(void)
Determines if the current method is given a block.
Definition: eval.c:850
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values)
Keyword argument deconstructor.
Definition: class.c:2195
void rb_define_global_function(const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a global function.
Definition: class.c:2110
void ruby_stop(int ex)
Calls ruby_cleanup() and exits the process.
Definition: eval.c:289
int ruby_exec_node(void *n)
Identical to ruby_run_node(), except it returns an opaque execution status.
Definition: eval.c:325
int ruby_setup(void)
Initializes the VM and builtin libraries.
Definition: eval.c:65
void ruby_finalize(void)
Runs the VM finalization processes.
Definition: eval.c:168
void ruby_init_stack(volatile VALUE *addr)
Set stack bottom of Ruby implementation.
void ruby_script(const char *name)
Sets the current script name to this value.
Definition: ruby.c:2600
void ruby_set_argv(int argc, char **argv)
Sets argv that ruby understands.
Definition: ruby.c:2715
void ruby_set_script_name(VALUE name)
Identical to ruby_script(), except it takes the name as a Ruby String instance.
Definition: ruby.c:2613
int ruby_cleanup(int ex)
Destructs the VM.
Definition: eval.c:176
size_t ruby_stack_length(VALUE **p)
Queries what Ruby thinks is the machine stack.
Definition: gc.c:6140
int ruby_stack_check(void)
Checks for stack overflow.
Definition: gc.c:6180
void ruby_init_loadpath(void)
Sets up $LOAD_PATH.
Definition: ruby.c:659
void * ruby_process_options(int argc, char **argv)
Identical to ruby_options(), except it raises ruby-level exceptions on failure.
Definition: ruby.c:2730
void ruby_prog_init(void)
Defines built-in variables.
Definition: ruby.c:2683
void ruby_sig_finalize(void)
Clear signal handlers.
Definition: signal.c:1497
void ruby_incpush(const char *path)
Appends the given path to the end of the load path.
Definition: ruby.c:494
void rb_notimplement(void)
Definition: error.c:3064
void rb_mod_sys_fail(VALUE mod, const char *mesg)
Identical to rb_sys_fail(), except it takes additional module to extend the exception object before r...
Definition: error.c:3200
rb_warning_category_t
Warning categories.
Definition: error.h:43
VALUE rb_eLocalJumpError
LocalJumpError exception.
Definition: eval.c:48
void rb_category_warn(rb_warning_category_t cat, const char *fmt,...)
Identical to rb_category_warning(), except it reports always regardless of runtime -W flag.
Definition: error.c:428
void rb_raise(VALUE exc, const char *fmt,...)
Exception entry point.
Definition: error.c:3021
void rb_compile_warn(const char *file, int line, const char *fmt,...)
Identical to rb_compile_warning(), except it reports always regardless of runtime -W flag.
Definition: error.c:360
void rb_category_warning(rb_warning_category_t cat, const char *fmt,...)
Identical to rb_warning(), except it takes additional "category" parameter.
Definition: error.c:460
void rb_mod_syserr_fail(VALUE mod, int e, const char *mesg)
Identical to rb_mod_sys_fail(), except it does not depend on C global variable errno.
Definition: error.c:3214
VALUE rb_rescue2(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2,...)
An equivalent of rescue clause.
Definition: eval.c:879
void rb_syserr_fail(int e, const char *mesg)
Raises appropriate exception that represents a C errno.
Definition: error.c:3133
void rb_bug(const char *fmt,...)
Interpreter panic switch.
Definition: error.c:802
void rb_iter_break(void)
Breaks from a block.
Definition: vm.c:1821
void rb_sys_fail(const char *mesg)
Converts a C errno into a Ruby exception, then raises it.
Definition: error.c:3145
VALUE rb_eZeroDivError
ZeroDivisionError exception.
Definition: numeric.c:194
void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg)
Identical to rb_readwrite_sys_fail(), except it does not depend on C global variable errno.
Definition: io.c:13496
void rb_sys_warning(const char *fmt,...)
Identical to rb_sys_fail(), except it does not raise an exception to render a warning instead.
Definition: error.c:3282
VALUE rb_eIOError
IOError exception.
Definition: io.c:187
VALUE rb_syserr_new_str(int n, VALUE arg)
Identical to rb_syserr_new(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3127
void rb_mod_syserr_fail_str(VALUE mod, int e, VALUE mesg)
Identical to rb_mod_syserr_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3221
void rb_set_errinfo(VALUE err)
Sets the current exception ($!) to the given value.
Definition: eval.c:1760
VALUE rb_eRegexpError
RegexpError exception.
Definition: re.c:28
void rb_syserr_fail_str(int e, VALUE mesg)
Identical to rb_syserr_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3139
VALUE rb_eEOFError
EOFError exception.
Definition: io.c:186
VALUE rb_vrescue2(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2, va_list args)
Identical to rb_rescue2(), except it takes va_list instead of variadic number of arguments.
Definition: eval.c:890
void rb_fatal(const char *fmt,...)
Raises the unsung "fatal" exception.
Definition: error.c:3072
void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg)
Raises appropriate exception using the parameters.
Definition: io.c:13490
void rb_iter_break_value(VALUE val)
Identical to rb_iter_break(), except it additionally takes the "value" of this breakage.
Definition: vm.c:1827
void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt,...)
Identical to rb_compile_warn(), except it also accepts category.
Definition: error.c:389
VALUE * rb_ruby_verbose_ptr(void)
This is an implementation detail of ruby_verbose.
Definition: vm.c:3861
VALUE rb_eStopIteration
StopIteration exception.
Definition: enumerator.c:141
VALUE rb_eFloatDomainError
FloatDomainError exception.
Definition: numeric.c:195
void rb_warn(const char *fmt,...)
Identical to rb_warning(), except it reports always regardless of runtime -W flag.
Definition: error.c:418
void rb_bug_errno(const char *mesg, int errno_arg)
This is a wrapper of rb_bug() which automatically constructs appropriate message from the passed errn...
Definition: error.c:830
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Issues a compile-time warning that happens at __file__:__line__.
Definition: error.c:375
VALUE rb_rescue(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2)
Identical to rb_rescue2(), except it does not take a list of exception classes.
Definition: eval.c:950
VALUE * rb_ruby_debug_ptr(void)
This is an implementation detail of ruby_debug.
Definition: vm.c:3868
VALUE rb_ensure(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*e_proc)(VALUE), VALUE data2)
An equivalent to ensure clause.
Definition: eval.c:979
VALUE rb_errinfo(void)
This is the same as $! in Ruby.
Definition: eval.c:1754
VALUE rb_eSysStackError
SystemStackError exception.
Definition: eval.c:49
VALUE rb_syserr_new(int err, const char *msg)
Creates an exception object that represents the given C errno.
Definition: error.c:3119
void rb_sys_fail_str(VALUE mesg)
Identical to rb_sys_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3151
void rb_unexpected_type(VALUE x, int t)
Fails with the given object's type incompatibility to the type.
Definition: error.c:1029
void rb_mod_sys_fail_str(VALUE mod, VALUE mesg)
Identical to rb_mod_sys_fail(), except it takes the message in Ruby's String instead of C's.
Definition: error.c:3207
VALUE rb_eThreadError
ThreadError exception.
Definition: eval.c:868
void rb_exit(int status)
Terminates the current execution context.
Definition: process.c:4471
VALUE rb_eMathDomainError
Math::DomainError exception.
Definition: math.c:30
void rb_check_type(VALUE x, int t)
This was the old implementation of Check_Type(), but they diverged.
Definition: error.c:1006
void rb_warning(const char *fmt,...)
Issues a warning.
Definition: error.c:449
@ RB_WARN_CATEGORY_DEPRECATED
Warning is for deprecated features.
Definition: error.h:48
@ RB_WARN_CATEGORY_EXPERIMENTAL
Warning is for experimental features.
Definition: error.h:51
@ RB_WARN_CATEGORY_NONE
Category unspecified.
Definition: error.h:45
VALUE rb_cRational
Rational class.
Definition: rational.c:41
VALUE rb_cUnboundMethod
UnboundMethod class.
Definition: proc.c:49
VALUE rb_cTime
Time class.
Definition: time.c:647
VALUE rb_cDir
Dir class.
Definition: dir.c:452
VALUE rb_cComplex
Complex class.
Definition: complex.c:38
VALUE rb_cArray
Array class.
Definition: array.c:40
VALUE rb_mProcess
Process module.
Definition: process.c:8667
VALUE rb_mMath
Math module.
Definition: math.c:29
VALUE rb_cIO
IO class.
Definition: io.c:185
VALUE rb_mEnumerable
Enumerable module.
Definition: enum.c:27
VALUE rb_cMatch
MatchData class.
Definition: re.c:939
VALUE rb_cStruct
Struct class.
Definition: struct.c:31
VALUE rb_cEnumerator
Enumerator class.
Definition: enumerator.c:126
VALUE rb_cInteger
Module class.
Definition: numeric.c:192
VALUE rb_stdin
STDIN constant.
Definition: io.c:198
VALUE rb_cStat
File::Stat class.
Definition: file.c:176
VALUE rb_cBinding
Binding class.
Definition: proc.c:51
VALUE rb_cRegexp
Regexp class.
Definition: re.c:2370
VALUE rb_mGC
GC module.
Definition: gc.c:1104
VALUE rb_cHash
Hash class.
Definition: hash.c:92
VALUE rb_stderr
STDERR constant.
Definition: io.c:198
VALUE rb_cNumeric
Numeric class.
Definition: numeric.c:190
static VALUE rb_class_of(VALUE obj)
Object to class mapping function.
Definition: globals.h:172
VALUE rb_cRandom
Random class.
Definition: random.c:229
VALUE rb_cEncoding
Encoding class.
Definition: encoding.c:57
VALUE rb_cSymbol
Sumbol class.
Definition: string.c:81
VALUE rb_cThread
Thread class.
Definition: vm.c:397
VALUE rb_cRange
Range class.
Definition: range.c:31
VALUE rb_mFileTest
FileTest module.
Definition: file.c:175
VALUE rb_mWaitReadable
IO::WaitReadable module.
Definition: io.c:188
VALUE rb_mWaitWritable
IO::WaitReadable module.
Definition: io.c:189
VALUE rb_mComparable
Comparable module.
Definition: compar.c:19
VALUE rb_cFloat
Float class.
Definition: numeric.c:191
VALUE rb_cProc
Proc class.
Definition: proc.c:52
VALUE rb_cFile
File class.
Definition: file.c:174
VALUE rb_stdout
STDOUT constant.
Definition: io.c:198
VALUE rb_cString
String class.
Definition: string.c:80
VALUE rb_cMethod
Method class.
Definition: proc.c:50
int ruby_run_node(void *n)
Runs the given compiled source and exits this process.
Definition: eval.c:312
void ruby_init(void)
Calls ruby_setup() and check error.
Definition: eval.c:98
void * ruby_options(int argc, char **argv)
Processes command line arguments and compiles the Ruby source to execute.
Definition: eval.c:109
void ruby_show_copyright(void)
Prints the copyright notice of the CRuby interpreter to stdout.
Definition: version.c:145
void ruby_sysinit(int *argc, char ***argv)
Initializes the process for libruby.
Definition: ruby.c:2783
void ruby_show_version(void)
Prints the version information of the CRuby interpreter to stdout.
Definition: version.c:123
int ruby_executable_node(void *n, int *status)
Checks the return value of ruby_options().
Definition: eval.c:295
VALUE rb_eval_string_wrap(const char *str, int *state)
Identical to rb_eval_string_protect(), except it evaluates the given string under a module binding in...
Definition: vm_eval.c:1868
VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcallv_public(), except you can pass the passed block.
Definition: vm_eval.c:1165
VALUE rb_funcall(VALUE recv, ID mid, int n,...)
Calls a method.
Definition: vm_eval.c:1102
VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_funcallv(), except you can specify how to handle the last element of the given array.
Definition: vm_eval.c:1069
VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcall(), except it takes the method arguments as a C array.
Definition: vm_eval.c:1061
VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval)
Identical to rb_funcallv_public(), except you can pass a block.
Definition: vm_eval.c:1179
VALUE rb_eval_string_protect(const char *str, int *state)
Identical to rb_eval_string(), except it avoids potential global escapes.
Definition: vm_eval.c:1847
VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat)
Identical to rb_call_super(), except you can specify how to handle the last element of the given arra...
Definition: vm_eval.c:330
VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcallv(), except it only takes public methods into account.
Definition: vm_eval.c:1153
VALUE rb_current_receiver(void)
This resembles ruby's self.
Definition: vm_eval.c:344
VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_funcallv_passing_block(), except you can specify how to handle the last element of th...
Definition: vm_eval.c:1172
VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat)
Identical to rb_funcallv_with_block(), except you can specify how to handle the last element of the g...
Definition: vm_eval.c:1189
VALUE rb_eval_string(const char *str)
Evaluates the given string in an isolated binding.
Definition: vm_eval.c:1835
VALUE rb_call_super(int argc, const VALUE *argv)
This resembles ruby's super.
Definition: vm_eval.c:338
VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_funcallv_public(), except you can specify how to handle the last element of the given...
Definition: vm_eval.c:1159
void rb_gc_register_address(VALUE *valptr)
Inform the garbage collector that valptr points to a live Ruby object that should not be moved.
Definition: gc.c:8707
void rb_gc_unregister_address(VALUE *valptr)
Inform the garbage collector that a pointer previously passed to rb_gc_register_address() no longer p...
Definition: gc.c:8719
void rb_gc_register_mark_object(VALUE object)
Inform the garbage collector that object is a live Ruby object that should not be moved.
Definition: gc.c:8686
void rb_undef(VALUE mod, ID mid)
Inserts a method entry that hides previous method definition of the given name.
Definition: vm_method.c:1717
VALUE rb_class_descendants(VALUE klass)
Queries the class's descendants.
int rb_respond_to(VALUE obj, ID mid)
Queries if the object responds to the method.
Definition: vm_method.c:2765
VALUE(* rb_alloc_func_t)(VALUE klass)
This is the type of functions that ruby calls when trying to allocate an object.
Definition: vm.h:216
void rb_undef_alloc_func(VALUE klass)
Deletes the allocator function of a class.
Definition: vm_method.c:1117
const char * rb_sourcefile(void)
Resembles __FILE__.
Definition: vm.c:1606
void rb_alias(VALUE klass, ID dst, ID src)
Resembles alias.
Definition: vm_method.c:2100
int rb_method_basic_definition_p(VALUE klass, ID mid)
Well... Let us hesitate from describing what a "basic definition" is.
Definition: vm_method.c:2643
void rb_clear_constant_cache(void)
Clears the constant cache.
Definition: vm_method.c:130
void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility)
This function resembles now-deprecated Module#attr.
Definition: vm_method.c:1680
void rb_remove_method(VALUE klass, const char *name)
Removes a method.
Definition: vm_method.c:1529
VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv)
Identical to rb_funcallv(), except it returns RUBY_Qundef instead of raising rb_eNoMethodError.
Definition: vm_eval.c:664
int rb_frame_method_id_and_class(ID *idp, VALUE *klassp)
Resembles __method__.
Definition: vm.c:2496
rb_alloc_func_t rb_get_alloc_func(VALUE klass)
Queries the allocator function of a class.
Definition: vm_method.c:1123
VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat)
Identical to rb_check_funcall(), except you can specify how to handle the last element of the given a...
Definition: vm_eval.c:658
VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod)
Identical to rb_obj_instance_eval(), except it evaluates within the context of module.
Definition: vm_eval.c:2138
void rb_remove_method_id(VALUE klass, ID mid)
Identical to rb_remove_method(), except it accepts the method name as ID.
Definition: vm_method.c:1523
VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod)
Identical to rb_obj_instance_exec(), except it evaluates within the context of module.
Definition: vm_eval.c:2172
void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func)
Sets the allocator function of a class.
VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv)
Executes the given block within the context of the receiver.
Definition: vm_eval.c:2099
VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat)
This API is practically a variant of rb_proc_call_kw() now.
Definition: vm_eval.c:1900
VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker)
Raises rb_eNotImpError.
Definition: vm_method.c:327
VALUE rb_apply(VALUE recv, ID mid, VALUE args)
Identical to rb_funcallv(), except it takes Ruby's array instead of C's.
Definition: vm_eval.c:1077
VALUE rb_make_backtrace(void)
Creates the good old fashioned array-of-strings style backtrace info.
int rb_method_boundp(VALUE klass, ID id, int ex)
Queries if the klass has this method.
Definition: vm_method.c:1641
void rb_backtrace(void)
Prints the backtrace out to the standard error.
VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv)
Evaluates a string containing Ruby source code, or the given block, within the context of the receive...
Definition: vm_eval.c:2069
int rb_sourceline(void)
Resembles __LINE__.
Definition: vm.c:1620
int rb_obj_respond_to(VALUE obj, ID mid, int private_p)
Identical to rb_respond_to(), except it additionally takes the visibility parameter.
Definition: vm_method.c:2749
#define strtod(s, e)
Just another name of ruby_strtod.
Definition: util.h:212
#define strdup(s)
Just another name of ruby_strdup.
Definition: util.h:176
static unsigned int RB_FIX2UINT(VALUE x)
Converts a Fixnum into C's int.
Definition: int.h:208
unsigned long rb_num2uint(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: numeric.c:3298
long rb_fix2int(VALUE num)
Identical to rb_num2int().
Definition: numeric.c:3292
static int rb_num2int_inline(VALUE x)
Converts an instance of rb_cNumeric into C's int.
Definition: int.h:158
long rb_num2int(VALUE num)
Converts an instance of rb_cNumeric into C's long.
Definition: numeric.c:3286
static VALUE rb_uint2num_inline(unsigned int v)
Converts a C's unsigned int into an instance of rb_cInteger.
Definition: int.h:254
static int RB_FIX2INT(VALUE x)
Converts a Fixnum into C's int.
Definition: int.h:129
static unsigned int RB_NUM2UINT(VALUE x)
Converts an instance of rb_cNumeric into C's unsigned int.
Definition: int.h:185
static VALUE rb_int2num_inline(int v)
Converts a C's int into an instance of rb_cInteger.
Definition: int.h:239
unsigned long rb_fix2uint(VALUE num)
Identical to rb_num2uint().
Definition: numeric.c:3304
LONG_LONG rb_num2ll(VALUE num)
Converts an instance of rb_cNumeric into C's long long.
unsigned LONG_LONG rb_num2ull(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long long.
static VALUE rb_ull2num_inline(unsigned LONG_LONG n)
Converts a C's unsigned long long into an instance of rb_cInteger.
Definition: long_long.h:95
VALUE rb_ull2inum(unsigned LONG_LONG num)
Converts a C's unsigned long long into an instance of rb_cInteger.
static VALUE rb_ll2num_inline(LONG_LONG n)
Converts a C's long long into an instance of rb_cInteger.
Definition: long_long.h:82
VALUE rb_ll2inum(LONG_LONG num)
Converts a C's long long into an instance of rb_cInteger.
static LONG_LONG rb_num2ll_inline(VALUE x)
Converts an instance of rb_cNumeric into C's long long.
Definition: long_long.h:110
static unsigned LONG_LONG rb_num2ull_inline(VALUE x)
Converts an instance of rb_cNumeric into C's unsigned long long.
Definition: long_long.h:127
VALUE rb_int2inum(intptr_t i)
Converts a C's intptr_t into an instance of rb_cInteger.
Definition: bignum.c:3219
VALUE rb_uint2big(uintptr_t i)
Converts a C's intptr_t into an instance of rb_cInteger.
Definition: bignum.c:3169
VALUE rb_int2big(intptr_t i)
Converts a C's intptr_t into an instance of rb_cInteger.
Definition: bignum.c:3191
VALUE rb_uint2inum(uintptr_t i)
Converts a C's uintptr_t into an instance of rb_cInteger.
Definition: bignum.c:3212
VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data)
Identical to rb_catch(), except it catches arbitrary Ruby objects.
Definition: vm_eval.c:2401
VALUE rb_each(VALUE obj)
This is a shorthand of calling obj.each.
Definition: vm_eval.c:1657
VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2)
Identical to rb_funcallv(), except it additionally passes a function as a block.
Definition: vm_eval.c:1595
VALUE rb_yield_values(int n,...)
Identical to rb_yield(), except it takes variadic number of parameters and pass them to the block.
Definition: vm_eval.c:1369
VALUE rb_yield_splat(VALUE ary)
Identical to rb_yield_values(), except it splats an array to generate the list of parameters.
Definition: vm_eval.c:1403
void rb_throw(const char *tag, VALUE val)
Transfers control to the end of the active catch block waiting for tag.
Definition: vm_eval.c:2289
VALUE rb_yield_values2(int n, const VALUE *argv)
Identical to rb_yield_values(), except it takes the parameters as a C array instead of variadic argum...
Definition: vm_eval.c:1391
VALUE rb_yield(VALUE val)
Yields the block.
Definition: vm_eval.c:1357
VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat)
Identical to rb_yield_values2(), except you can specify how to handle the last element of the given a...
Definition: vm_eval.c:1397
VALUE rb_yield_block(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
Pass a passed block.
void rb_throw_obj(VALUE tag, VALUE val)
Identical to rb_throw(), except it allows arbitrary Ruby object to become a tag.
Definition: vm_eval.c:2264
VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
This is the type of a function that the interpreter expect for C-backended blocks.
Definition: iterator.h:83
VALUE rb_iterate(VALUE(*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2)
Old way to iterate a block.
Definition: vm_eval.c:1569
VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data)
Executes the passed block and catches values thrown from inside of it.
Definition: vm_eval.c:2359
VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat)
Identical to rb_funcallv_kw(), except it additionally passes a function as a block.
Definition: vm_eval.c:1602
VALUE rb_yield_splat_kw(VALUE ary, int kw_splat)
Identical to rb_yield_splat(), except you can specify how to handle the last element of the given arr...
Definition: vm_eval.c:1416
static long rb_num2long_inline(VALUE x)
Converts an instance of rb_cNumeric into C's long.
Definition: long.h:267
static VALUE RB_INT2FIX(long i)
Converts a C's long into an instance of rb_cInteger.
Definition: long.h:111
static unsigned long rb_num2ulong_inline(VALUE x)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: long.h:293
static int rb_long2int_inline(long n)
Checks if int can hold the given integer.
Definition: long.h:135
static VALUE rb_ulong2num_inline(unsigned long v)
Converts a C's unsigned long into an instance of rb_cInteger.
Definition: long.h:323
static long rb_fix2long(VALUE x)
Converts a Fixnum into C's long.
Definition: long.h:231
void rb_out_of_int(SIGNED_VALUE num)
This is an utility function to raise an rb_eRangeError.
Definition: numeric.c:3213
long rb_num2long(VALUE num)
Converts an instance of rb_cNumeric into C's long.
Definition: numeric.c:3138
unsigned long rb_num2ulong(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: numeric.c:3207
static VALUE rb_long2num_inline(long v)
Converts a C's long into an instance of rb_cInteger.
Definition: long.h:308
static unsigned long rb_fix2ulong(VALUE x)
Converts a Fixnum into C's unsigned long.
Definition: long.h:252
static void * rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
This is an implementation detail of RB_ALLOCV_N().
Definition: memory.h:640
static int rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
Definition: memory.h:525
VALUE type(ANYARGS)
ANYARGS-ed function type.
Definition: cxxanyargs.hpp:56
VALUE rb_newobj(void)
This is the implementation detail of RB_NEWOBJ.
Definition: gc.c:2594
void rb_copy_generic_ivar(VALUE clone, VALUE obj)
Copies the list of instance variables.
Definition: variable.c:1719
VALUE rb_newobj_of(VALUE klass, VALUE flags)
This is the implementation detail of RB_NEWOBJ_OF.
Definition: gc.c:2600
static long RARRAY_EMBED_LEN(VALUE ary)
Queries the length of the array.
Definition: rarray.h:278
void rb_ary_detransient(VALUE a)
Destructively converts an array of transient backend into ordinal one.
Definition: array.c:429
static long rb_array_len(VALUE a)
Queries the length of the array.
Definition: rarray.h:298
static bool RARRAY_TRANSIENT_P(VALUE ary)
Queries if the array is a transient array.
Definition: rarray.h:345
static int RARRAY_LENINT(VALUE ary)
Identical to rb_array_len(), except it differs for the return type.
Definition: rarray.h:324
static void RARRAY_ASET(VALUE ary, long i, VALUE v)
Assigns an object in an array.
Definition: rarray.h:571
static VALUE * RARRAY_PTR(VALUE ary)
Wild use of a C pointer.
Definition: rarray.h:551
@ RARRAY_EMBED_LEN_MAX
Max possible number elements that can be embedded.
Definition: rarray.h:162
@ RARRAY_EMBED_LEN_SHIFT
Where ::RARRAY_EMBED_LEN_MASK resides.
Definition: rarray.h:159
static VALUE RBASIC_CLASS(VALUE obj)
Queries the class of an object.
Definition: rbasic.h:152
@ RVALUE_EMBED_LEN_MAX
Max possible number of objects that can be embedded.
Definition: rbasic.h:55
int rb_big_sign(VALUE num)
The "sign" of a bignum.
Definition: bignum.c:6769
static bool RBIGNUM_NEGATIVE_P(VALUE b)
Checks if the bignum is negative.
Definition: rbignum.h:74
static bool RBIGNUM_POSITIVE_P(VALUE b)
Checks if the bignum is positive.
Definition: rbignum.h:61
VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
This is the primitive way to wrap an existing C struct into RData.
Definition: gc.c:2749
static VALUE rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
Definition: rdata.h:367
#define rb_cData
Definition: rdata.h:394
static VALUE rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
This is an implementation detail of Data_Make_Struct.
Definition: rdata.h:358
VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
Identical to rb_data_object_wrap(), except it allocates a new data region internally instead of takin...
Definition: gc.c:2757
void(* RUBY_DATA_FUNC)(void *)
This is the type of callbacks registered to RData.
Definition: rdata.h:108
static VALUE rb_obj_wb_unprotect(VALUE x, const char *filename, int line)
This is the implementation of RB_OBJ_WB_UNPROTECT().
Definition: rgengc.h:363
void rb_gc_writebarrier(VALUE old, VALUE young)
This is the implementation of RB_OBJ_WRITE().
Definition: gc.c:8463
void rb_gc_writebarrier_unprotect(VALUE obj)
This is the implementation of RB_OBJ_WB_UNPROTECT().
Definition: gc.c:8499
static bool RB_OBJ_PROMOTED(VALUE obj)
Tests if the object is "promoted" – that is, whether the object experienced one or more GC marks.
Definition: rgengc.h:343
static bool RB_OBJ_PROMOTED_RAW(VALUE obj)
This is the implementation of RB_OBJ_PROMOTED().
Definition: rgengc.h:323
VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone)
This is the implementation detail of RHASH_SET_IFNONE.
Definition: hash.c:99
struct st_table * rb_hash_tbl(VALUE hash, const char *file, int line)
This is the implementation detail of RHASH_TBL.
Definition: hash.c:1615
size_t rb_hash_size_num(VALUE hash)
This is the implementation detail of RHASH_SIZE.
Definition: hash.c:2981
@ ROBJECT_EMBED_LEN_MAX
Max possible number of instance variables that can be embedded.
Definition: robject.h:84
static uint32_t ROBJECT_NUMIV(VALUE obj)
Queries the number of instance variables.
Definition: robject.h:145
static VALUE * ROBJECT_IVPTR(VALUE obj)
Queries the instance variables.
Definition: robject.h:171
static VALUE RREGEXP_SRC(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:103
static char * RREGEXP_SRC_END(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:163
static long RREGEXP_SRC_LEN(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:144
static char * RREGEXP_SRC_PTR(VALUE rexp)
Convenient getter function.
Definition: rregexp.h:125
@ RSTRING_EMBED_LEN_SHIFT
Where ::RSTRING_EMBED_LEN_MASK resides.
Definition: rstring.h:212
@ RSTRING_EMBED_LEN_MAX
Max possible number of characters that can be embedded.
Definition: rstring.h:215
VALUE rb_str_export_locale(VALUE obj)
Identical to rb_str_export(), except it converts into the locale encoding instead.
Definition: string.c:1281
char * rb_string_value_cstr(volatile VALUE *ptr)
Identical to rb_string_value_ptr(), except it additionally checks for the contents for viability as a...
Definition: string.c:2636
static long RSTRING_EMBED_LEN(VALUE str)
Queries the length of the string.
Definition: rstring.h:423
static int RSTRING_LENINT(VALUE str)
Identical to RSTRING_LEN(), except it differs for the return type.
Definition: rstring.h:553
static char * RSTRING_END(VALUE str)
Queries the end of the contents pointer of the string.
Definition: rstring.h:527
VALUE rb_string_value(volatile VALUE *ptr)
Identical to rb_str_to_str(), except it fills the passed pointer with the converted object.
Definition: string.c:2520
static long RSTRING_LEN(VALUE str)
Queries the length of the string.
Definition: rstring.h:483
VALUE rb_str_export(VALUE obj)
Identical to rb_str_to_str(), except it additionally converts the string into default external encodi...
Definition: string.c:1275
char * rb_string_value_ptr(volatile VALUE *ptr)
Identical to rb_str_to_str(), except it returns the converted string's backend memory region.
Definition: string.c:2531
VALUE rb_str_to_str(VALUE obj)
Identical to rb_check_string_type(), except it raises exceptions in case of conversion failures.
Definition: string.c:1584
static char * RSTRING_PTR(VALUE str)
Queries the contents pointer of the string.
Definition: rstring.h:497
static long RSTRUCT_LEN(VALUE st)
Returns the number of struct members.
Definition: rstruct.h:94
static VALUE RSTRUCT_SET(VALUE st, int k, VALUE v)
Resembles Struct#[]=.
Definition: rstruct.h:104
static VALUE RSTRUCT_GET(VALUE st, int k)
Resembles Struct#[].
Definition: rstruct.h:114
VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v)
Resembles Struct#[]=.
Definition: struct.c:1211
VALUE rb_struct_size(VALUE st)
Returns the number of struct members.
Definition: struct.c:1464
VALUE rb_struct_aref(VALUE st, VALUE k)
Resembles Struct#[].
Definition: struct.c:1173
static bool RTYPEDDATA_P(VALUE obj)
Checks whether the passed object is RTypedData or RData.
Definition: rtypeddata.h:540
VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type)
This is the primitive way to wrap an existing C struct into RTypedData.
Definition: gc.c:2765
VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type)
Identical to rb_data_typed_object_wrap(), except it allocates a new data region internally instead of...
Definition: gc.c:2773
static VALUE rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
Definition: rtypeddata.h:599
static VALUE rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
While we don't stop you from using this function, it seems to be an implementation detail of TypedDat...
Definition: rtypeddata.h:590
static const struct rb_data_type_struct * RTYPEDDATA_TYPE(VALUE obj)
Queries for the type of given object.
Definition: rtypeddata.h:563
short rb_num2short(VALUE num)
Converts an instance of rb_cNumeric into C's short.
Definition: numeric.c:3342
unsigned short rb_num2ushort(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned short.
Definition: numeric.c:3360
short rb_fix2short(VALUE num)
Identical to rb_num2short().
Definition: numeric.c:3351
unsigned short rb_fix2ushort(VALUE num)
Identical to rb_num2ushort().
Definition: numeric.c:3370
static short rb_num2short_inline(VALUE x)
Identical to rb_num2short().
Definition: short.h:105
static bool RB_STATIC_SYM_P(VALUE obj)
Checks if the given object is a static symbol.
static bool RB_TEST(VALUE obj)
Emulates Ruby's "if" statement.
static bool RB_FIXNUM_P(VALUE obj)
Checks if the given object is a so-called Fixnum.
static bool RB_IMMEDIATE_P(VALUE obj)
Checks if the given object is an immediate i.e.
static bool RB_SPECIAL_CONST_P(VALUE obj)
Checks if the given object is of enum ruby_special_consts.
static VALUE rb_special_const_p(VALUE obj)
Identical to RB_SPECIAL_CONST_P, except it returns a VALUE.
@ RUBY_Qtrue
@ RUBY_SPECIAL_SHIFT
Least significant 8 bits are reserved.
@ RUBY_FIXNUM_FLAG
Flag to denote a fixnum.
@ RUBY_Qnil
@ RUBY_FLONUM_MASK
Bit mask detecting a flonum.
@ RUBY_FLONUM_FLAG
Flag to denote a flonum.
@ RUBY_Qundef
Represents so-called undef.
@ RUBY_SYMBOL_FLAG
Flag to denote a static symbol.
@ RUBY_IMMEDIATE_MASK
Bit mask detecting special consts.
@ RUBY_Qfalse
static bool RB_NIL_P(VALUE obj)
Checks if the given object is nil.
static bool RB_FLONUM_P(VALUE obj)
Checks if the given object is a so-called Flonum.
static VALUE RB_ST2FIX(st_data_t i)
Converts a C's st_data_t into an instance of rb_cInteger.
Definition: st_data_t.h:59
Ruby's array.
struct RBasic basic
Basic part, including flags and class.
const VALUE shared_root
Parent of the array.
const VALUE ary[RARRAY_EMBED_LEN_MAX]
Embedded elements.
long capa
Capacity of *ptr.
long len
Number of elements of the array.
const VALUE * ptr
Pointer to the C array that holds the elements of the array.
Ruby's object's, base components.
Definition: rbasic.h:64
const VALUE klass
Class of an object.
Definition: rbasic.h:88
VALUE flags
Per-object flags.
Definition: rbasic.h:77
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
void * data
Pointer to the actual C level struct that you want to wrap.
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
struct RBasic basic
Basic part, including flags and class.
Ruby's File and IO.
struct RBasic basic
Basic part, including flags and class.
struct rb_io_t * fptr
IO's specific fields.
Ruby's ordinal objects.
struct st_table * iv_index_tbl
This is a table that holds instance variable name to index mapping.
struct RBasic basic
Basic part, including flags and class.
VALUE * ivptr
Pointer to a C array that holds instance variables.
uint32_t numiv
Number of instance variables.
VALUE ary[ROBJECT_EMBED_LEN_MAX]
Embedded instance variables.
Ruby's regular expression.
struct RBasic basic
Basic part, including flags and class.
const VALUE src
Source code of this expression.
struct re_pattern_buffer * ptr
The pattern buffer.
unsigned long usecnt
Reference count.
Ruby's String.
struct RBasic basic
Basic part, including flags and class.
long capa
Capacity of *ptr.
long len
Length of the string, not including terminating NUL character.
char ary[RSTRING_EMBED_LEN_MAX+1]
When a string is short enough, it uses this area to store the contents themselves.
VALUE shared
Parent of the string.
char * ptr
Pointer to the contents of the string.
"Typed" user data.
const rb_data_type_t * type
This field stores various information about how Ruby should handle a data.
VALUE typed_flag
This has to be always 1.
void * data
Pointer to the actual C level struct that you want to wrap.
struct RBasic basic
The part that all ruby objects have in common.
This is the struct that holds necessary info for a struct.
size_t(* dsize)(const void *)
This function is to query the size of the underlying memory regions.
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
void * data
Type-specific static data.
void * reserved[1]
This field is reserved for future extension.
RUBY_DATA_FUNC dcompact
This function is called when the object is relocated.
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
const char * wrap_struct_name
Name of structs of this kind.
VALUE flags
Type-specific behavioural characteristics.
const rb_data_type_t * parent
Parent of this class.
Ruby's IO, metadata and buffers.
Definition: io.h:95
This is an implementation detail of rbimpl_size_mul_overflow().
size_t right
Multiplication result.
Definition: st.c:133
uintptr_t VALUE
Type that represents a Ruby object.
Definition: value.h:40
static enum ruby_value_type rb_type(VALUE obj)
Identical to RB_BUILTIN_TYPE(), except it can also accept special constants.
Definition: value_type.h:224
static enum ruby_value_type RB_BUILTIN_TYPE(VALUE obj)
Queries the type of the object.
Definition: value_type.h:181
static bool RB_FLOAT_TYPE_P(VALUE obj)
Queries if the object is an instance of rb_cFloat.
Definition: value_type.h:263
static bool RB_SYMBOL_P(VALUE obj)
Queries if the object is an instance of rb_cSymbol.
Definition: value_type.h:306
static void Check_Type(VALUE v, enum ruby_value_type t)
Identical to RB_TYPE_P(), except it raises exceptions on predication failure.
Definition: value_type.h:432
static bool rb_integer_type_p(VALUE obj)
Queries if the object is an instance of rb_cInteger.
Definition: value_type.h:203
static bool RB_DYNAMIC_SYM_P(VALUE obj)
Queries if the object is a dynamic symbol.
Definition: value_type.h:286
static bool RB_TYPE_P(VALUE obj, enum ruby_value_type t)
Queries if the given object is of given type.
Definition: value_type.h:375
@ RUBY_T_SYMBOL
Definition: value_type.h:134
@ RUBY_T_MATCH
Definition: value_type.h:127
@ RUBY_T_MODULE
Definition: value_type.h:117
@ RUBY_T_ICLASS
Hidden classes known as IClasses.
Definition: value_type.h:140
@ RUBY_T_MOVED
Definition: value_type.h:142
@ RUBY_T_FIXNUM
Integers formerly known as Fixnums.
Definition: value_type.h:135
@ RUBY_T_IMEMO
Definition: value_type.h:138
@ RUBY_T_NODE
Definition: value_type.h:139
@ RUBY_T_OBJECT
Definition: value_type.h:115
@ RUBY_T_DATA
Definition: value_type.h:126
@ RUBY_T_FALSE
Definition: value_type.h:133
@ RUBY_T_UNDEF
Definition: value_type.h:136
@ RUBY_T_COMPLEX
Definition: value_type.h:128
@ RUBY_T_STRING
Definition: value_type.h:119
@ RUBY_T_HASH
Definition: value_type.h:122
@ RUBY_T_NIL
Definition: value_type.h:131
@ RUBY_T_CLASS
Definition: value_type.h:116
@ RUBY_T_ARRAY
Definition: value_type.h:121
@ RUBY_T_MASK
Bitmask of ruby_value_type.
Definition: value_type.h:144
@ RUBY_T_RATIONAL
Definition: value_type.h:129
@ RUBY_T_ZOMBIE
Definition: value_type.h:141
@ RUBY_T_BIGNUM
Definition: value_type.h:124
@ RUBY_T_TRUE
Definition: value_type.h:132
@ RUBY_T_FLOAT
Definition: value_type.h:118
@ RUBY_T_STRUCT
Definition: value_type.h:123
@ RUBY_T_NONE
Non-object (swept etc.)
Definition: value_type.h:113
@ RUBY_T_REGEXP
Definition: value_type.h:120
@ RUBY_T_FILE
Definition: value_type.h:125
void * ruby_xrealloc(void *ptr, size_t newsiz)
Resize the storage instance.
Definition: gc.c:13695
void * ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
Identical to ruby_xrealloc(), except it resizes the given storage instance to newelems * newsiz bytes...
Definition: gc.c:13705
void ruby_xfree(void *ptr)
Deallocates a storage instance.
Definition: gc.c:11772
void * ruby_xmalloc2(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc(), except it allocates nelems * elemsiz bytes.
Definition: gc.c:13675
void * ruby_xmalloc(size_t size)
Allocates a storage instance.
Definition: gc.c:13665
void * ruby_xcalloc(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc2(), except it returns a zero-filled storage instance.
Definition: gc.c:13685