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 long unsigned int __size_t;
55typedef long signed int _ssize_t;
56typedef _ssize_t __ssize_t;
57typedef struct
58{
59 int __count;
60 union
61 {
62 wint_t __wch;
63 unsigned char __wchb[4];
64 } __value;
66typedef void *_iconv_t;
67typedef unsigned long __clock_t;
68typedef long __time_t;
69typedef unsigned long __clockid_t;
70typedef long __daddr_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 __sFILE64 {
123 unsigned char *_p;
124 int _r;
125 int _w;
126 short _flags;
127 short _file;
128 struct __sbuf _bf;
129 int _lbfsize;
130 struct _reent *_data;
131 void * _cookie;
132 _ssize_t (*_read) (struct _reent *, void *,
133 char *, size_t);
134 _ssize_t (*_write) (struct _reent *, void *,
135 const char *,
136 size_t);
137 _fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
138 int (*_close) (struct _reent *, void *);
139 struct __sbuf _ub;
140 unsigned char *_up;
141 int _ur;
142 unsigned char _ubuf[3];
143 unsigned char _nbuf[1];
144 struct __sbuf _lb;
145 int _blksize;
146 int _flags2;
147 _off64_t _offset;
148 _fpos_t (*_seek64) (struct _reent *, void *, _fpos_t, int);
149 _flock_t _lock;
150 _mbstate_t _mbstate;
151};
152typedef struct __sFILE64 __FILE;
153extern __FILE __sf[3];
154struct _glue
155{
156 struct _glue *_next;
157 int _niobs;
158 __FILE *_iobs;
159};
160extern struct _glue __sglue;
161struct _rand48 {
162 unsigned short _seed[3];
163 unsigned short _mult[3];
164 unsigned short _add;
165};
166struct _reent
167{
168 int _errno;
169 __FILE *_stdin, *_stdout, *_stderr;
170 int _inc;
171 char _emergency[25];
172 int _reserved_1;
173 struct __locale_t *_locale;
174 int _reserved_0;
175 void (*__cleanup) (struct _reent *);
176 struct _Bigint *_result;
177 int _result_k;
178 struct _Bigint *_p5s;
179 struct _Bigint **_freelist;
180 int _cvtlen;
181 char *_cvtbuf;
182 union
183 {
184 struct
185 {
186 unsigned int _reserved_2;
187 char * _strtok_last;
188 char _asctime_buf[26];
189 struct __tm _localtime_buf;
190 int _gamma_signgam;
191 __extension__ unsigned long long _rand_next;
192 struct _rand48 _r48;
193 _mbstate_t _mblen_state;
194 _mbstate_t _mbtowc_state;
195 _mbstate_t _wctomb_state;
196 char _l64a_buf[8];
197 char _signal_buf[24];
198 int _getdate_err;
199 _mbstate_t _mbrlen_state;
200 _mbstate_t _mbrtowc_state;
201 _mbstate_t _mbsrtowcs_state;
202 _mbstate_t _wcrtomb_state;
203 _mbstate_t _wcsrtombs_state;
204 int _h_errno;
205 } _reent;
206 struct
207 {
208 unsigned char * _reserved_3[30];
209 unsigned int _reserved_4[30];
210 } _reserved_5;
211 } _new;
212 struct _atexit *_reserved_6;
213 struct _atexit _reserved_7;
214 void (**_sig_func)(int);
215};
216extern struct _reent *_impure_ptr ;
217extern struct _reent _impure_data ;
218 struct _reent * __getreent (void);
219extern struct _atexit *__atexit;
220extern struct _atexit __atexit0;
221extern void (*__stdio_exit_handler) (void);
222void _reclaim_reent (struct _reent *);
223extern int _fwalk_sglue (struct _reent *, int (*)(struct _reent *, __FILE *),
224 struct _glue *);
225
226typedef __FILE FILE;
227typedef _fpos_t fpos_t;
228typedef __off_t off_t;
229typedef _ssize_t ssize_t;
230
231ssize_t getline (char **, size_t *, FILE *);
232ssize_t getdelim (char **, size_t *, int, FILE *);
233
234char * ctermid (char *);
235char * cuserid (char *);
236FILE * tmpfile (void);
237char * tmpnam (char *);
238char * tempnam (const char *, const char *) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
239int fclose (FILE *);
240int fflush (FILE *);
241FILE * freopen (const char *__restrict__, const char *__restrict__, FILE *__restrict__);
242void setbuf (FILE *__restrict__, char *__restrict__);
243int setvbuf (FILE *__restrict__, char *__restrict__, int, size_t);
244int fprintf (FILE *__restrict__, const char *__restrict__, ...)
245 __attribute__ ((__format__ (__printf__, 2, 3)));
246int fscanf (FILE *__restrict__, const char *__restrict__, ...)
247 __attribute__ ((__format__ (__scanf__, 2, 3)));
248int printf (const char *__restrict__, ...)
249 __attribute__ ((__format__ (__printf__, 1, 2)));
250int scanf (const char *__restrict__, ...)
251 __attribute__ ((__format__ (__scanf__, 1, 2)));
252int sscanf (const char *__restrict__, const char *__restrict__, ...)
253 __attribute__ ((__format__ (__scanf__, 2, 3)));
254int vfprintf (FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
255 __attribute__ ((__format__ (__printf__, 2, 0)));
256int vprintf (const char *, __gnuc_va_list)
257 __attribute__ ((__format__ (__printf__, 1, 0)));
258int vsprintf (char *__restrict__, const char *__restrict__, __gnuc_va_list)
259 __attribute__ ((__format__ (__printf__, 2, 0)));
260int fgetc (FILE *);
261char * fgets (char *__restrict__, int, FILE *__restrict__);
262int fputc (int, FILE *);
263int fputs (const char *__restrict__, FILE *__restrict__);
264int getc (FILE *);
265int getchar (void);
266char * gets (char *);
267int putc (int, FILE *);
268int putchar (int);
269int puts (const char *);
270int ungetc (int, FILE *);
271size_t fread (void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
272size_t fwrite (const void *__restrict__ , size_t _size, size_t _n, FILE *);
273int fgetpos (FILE *__restrict__, fpos_t *__restrict__);
274int fseek (FILE *, long, int);
275int fsetpos (FILE *, const fpos_t *);
276long ftell ( FILE *);
277void rewind (FILE *);
278void clearerr (FILE *);
279int feof (FILE *);
280int ferror (FILE *);
281void perror (const char *);
282FILE * fopen (const char *__restrict__ _name, const char *__restrict__ _type);
283int sprintf (char *__restrict__, const char *__restrict__, ...)
284 __attribute__ ((__format__ (__printf__, 2, 3)));
285int remove (const char *);
286int rename (const char *, const char *);
287int fseeko (FILE *, off_t, int);
288off_t ftello (FILE *);
289int fcloseall (void);
290int snprintf (char *__restrict__, size_t, const char *__restrict__, ...)
291 __attribute__ ((__format__ (__printf__, 3, 4)));
292int vsnprintf (char *__restrict__, size_t, const char *__restrict__, __gnuc_va_list)
293 __attribute__ ((__format__ (__printf__, 3, 0)));
294int vfscanf (FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
295 __attribute__ ((__format__ (__scanf__, 2, 0)));
296int vscanf (const char *, __gnuc_va_list)
297 __attribute__ ((__format__ (__scanf__, 1, 0)));
298int vsscanf (const char *__restrict__, const char *__restrict__, __gnuc_va_list)
299 __attribute__ ((__format__ (__scanf__, 2, 0)));
300int asprintf (char **__restrict__, const char *__restrict__, ...)
301 __attribute__ ((__format__ (__printf__, 2, 3)));
302int vasprintf (char **, const char *, __gnuc_va_list)
303 __attribute__ ((__format__ (__printf__, 2, 0)));
304int asiprintf (char **, const char *, ...)
305 __attribute__ ((__format__ (__printf__, 2, 3)));
306char * asniprintf (char *, size_t *, const char *, ...)
307 __attribute__ ((__format__ (__printf__, 3, 4)));
308char * asnprintf (char *__restrict__, size_t *__restrict__, const char *__restrict__, ...)
309 __attribute__ ((__format__ (__printf__, 3, 4)));
310int diprintf (int, const char *, ...)
311 __attribute__ ((__format__ (__printf__, 2, 3)));
312int fiprintf (FILE *, const char *, ...)
313 __attribute__ ((__format__ (__printf__, 2, 3)));
314int fiscanf (FILE *, const char *, ...)
315 __attribute__ ((__format__ (__scanf__, 2, 3)));
316int iprintf (const char *, ...)
317 __attribute__ ((__format__ (__printf__, 1, 2)));
318int iscanf (const char *, ...)
319 __attribute__ ((__format__ (__scanf__, 1, 2)));
320int siprintf (char *, const char *, ...)
321 __attribute__ ((__format__ (__printf__, 2, 3)));
322int siscanf (const char *, const char *, ...)
323 __attribute__ ((__format__ (__scanf__, 2, 3)));
324int sniprintf (char *, size_t, const char *, ...)
325 __attribute__ ((__format__ (__printf__, 3, 4)));
326int vasiprintf (char **, const char *, __gnuc_va_list)
327 __attribute__ ((__format__ (__printf__, 2, 0)));
328char * vasniprintf (char *, size_t *, const char *, __gnuc_va_list)
329 __attribute__ ((__format__ (__printf__, 3, 0)));
330char * vasnprintf (char *, size_t *, const char *, __gnuc_va_list)
331 __attribute__ ((__format__ (__printf__, 3, 0)));
332int vdiprintf (int, const char *, __gnuc_va_list)
333 __attribute__ ((__format__ (__printf__, 2, 0)));
334int vfiprintf (FILE *, const char *, __gnuc_va_list)
335 __attribute__ ((__format__ (__printf__, 2, 0)));
336int vfiscanf (FILE *, const char *, __gnuc_va_list)
337 __attribute__ ((__format__ (__scanf__, 2, 0)));
338int viprintf (const char *, __gnuc_va_list)
339 __attribute__ ((__format__ (__printf__, 1, 0)));
340int viscanf (const char *, __gnuc_va_list)
341 __attribute__ ((__format__ (__scanf__, 1, 0)));
342int vsiprintf (char *, const char *, __gnuc_va_list)
343 __attribute__ ((__format__ (__printf__, 2, 0)));
344int vsiscanf (const char *, const char *, __gnuc_va_list)
345 __attribute__ ((__format__ (__scanf__, 2, 0)));
346int vsniprintf (char *, size_t, const char *, __gnuc_va_list)
347 __attribute__ ((__format__ (__printf__, 3, 0)));
348FILE * fdopen (int, const char *);
349int fileno (FILE *);
350int pclose (FILE *);
351FILE * popen (const char *, const char *);
352void setbuffer (FILE *, char *, int);
353int setlinebuf (FILE *);
354int getw (FILE *);
355int putw (int, FILE *);
356int getc_unlocked (FILE *);
357int getchar_unlocked (void);
358void flockfile (FILE *);
359int ftrylockfile (FILE *);
360void funlockfile (FILE *);
361int putc_unlocked (int, FILE *);
362int putchar_unlocked (int);
363int dprintf (int, const char *__restrict__, ...)
364 __attribute__ ((__format__ (__printf__, 2, 3)));
365FILE * fmemopen (void *__restrict__, size_t, const char *__restrict__);
366FILE * open_memstream (char **, size_t *);
367int vdprintf (int, const char *__restrict__, __gnuc_va_list)
368 __attribute__ ((__format__ (__printf__, 2, 0)));
369int renameat (int, const char *, int, const char *);
370int renameat2 (int, const char *, int, const char *, unsigned int);
371int _asiprintf_r (struct _reent *, char **, const char *, ...)
372 __attribute__ ((__format__ (__printf__, 3, 4)));
373char * _asniprintf_r (struct _reent *, char *, size_t *, const char *, ...)
374 __attribute__ ((__format__ (__printf__, 4, 5)));
375char * _asnprintf_r (struct _reent *, char *__restrict__, size_t *__restrict__, const char *__restrict__, ...)
376 __attribute__ ((__format__ (__printf__, 4, 5)));
377int _asprintf_r (struct _reent *, char **__restrict__, const char *__restrict__, ...)
378 __attribute__ ((__format__ (__printf__, 3, 4)));
379int _diprintf_r (struct _reent *, int, const char *, ...)
380 __attribute__ ((__format__ (__printf__, 3, 4)));
381int _dprintf_r (struct _reent *, int, const char *__restrict__, ...)
382 __attribute__ ((__format__ (__printf__, 3, 4)));
383int _fclose_r (struct _reent *, FILE *);
384int _fcloseall_r (struct _reent *);
385FILE * _fdopen_r (struct _reent *, int, const char *);
386int _fflush_r (struct _reent *, FILE *);
387int _fgetc_r (struct _reent *, FILE *);
388int _fgetc_unlocked_r (struct _reent *, FILE *);
389char * _fgets_r (struct _reent *, char *__restrict__, int, FILE *__restrict__);
390char * _fgets_unlocked_r (struct _reent *, char *__restrict__, int, FILE *__restrict__);
391int _fgetpos_r (struct _reent *, FILE *, fpos_t *);
392int _fsetpos_r (struct _reent *, FILE *, const fpos_t *);
393int _fiprintf_r (struct _reent *, FILE *, const char *, ...)
394 __attribute__ ((__format__ (__printf__, 3, 4)));
395int _fiscanf_r (struct _reent *, FILE *, const char *, ...)
396 __attribute__ ((__format__ (__scanf__, 3, 4)));
397FILE * _fmemopen_r (struct _reent *, void *__restrict__, size_t, const char *__restrict__);
398FILE * _fopen_r (struct _reent *, const char *__restrict__, const char *__restrict__);
399FILE * _freopen_r (struct _reent *, const char *__restrict__, const char *__restrict__, FILE *__restrict__);
400int _fprintf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, ...)
401 __attribute__ ((__format__ (__printf__, 3, 4)));
402int _fpurge_r (struct _reent *, FILE *);
403int _fputc_r (struct _reent *, int, FILE *);
404int _fputc_unlocked_r (struct _reent *, int, FILE *);
405int _fputs_r (struct _reent *, const char *__restrict__, FILE *__restrict__);
406int _fputs_unlocked_r (struct _reent *, const char *__restrict__, FILE *__restrict__);
407size_t _fread_r (struct _reent *, void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
408size_t _fread_unlocked_r (struct _reent *, void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
409int _fscanf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, ...)
410 __attribute__ ((__format__ (__scanf__, 3, 4)));
411int _fseek_r (struct _reent *, FILE *, long, int);
412int _fseeko_r (struct _reent *, FILE *, _off_t, int);
413long _ftell_r (struct _reent *, FILE *);
414_off_t _ftello_r (struct _reent *, FILE *);
415void _rewind_r (struct _reent *, FILE *);
416size_t _fwrite_r (struct _reent *, const void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
417size_t _fwrite_unlocked_r (struct _reent *, const void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
418int _getc_r (struct _reent *, FILE *);
419int _getc_unlocked_r (struct _reent *, FILE *);
420int _getchar_r (struct _reent *);
421int _getchar_unlocked_r (struct _reent *);
422char * _gets_r (struct _reent *, char *);
423int _iprintf_r (struct _reent *, const char *, ...)
424 __attribute__ ((__format__ (__printf__, 2, 3)));
425int _iscanf_r (struct _reent *, const char *, ...)
426 __attribute__ ((__format__ (__scanf__, 2, 3)));
427FILE * _open_memstream_r (struct _reent *, char **, size_t *);
428void _perror_r (struct _reent *, const char *);
429int _printf_r (struct _reent *, const char *__restrict__, ...)
430 __attribute__ ((__format__ (__printf__, 2, 3)));
431int _putc_r (struct _reent *, int, FILE *);
432int _putc_unlocked_r (struct _reent *, int, FILE *);
433int _putchar_unlocked_r (struct _reent *, int);
434int _putchar_r (struct _reent *, int);
435int _puts_r (struct _reent *, const char *);
436int _remove_r (struct _reent *, const char *);
437int _rename_r (struct _reent *,
438 const char *_old, const char *_new);
439int _scanf_r (struct _reent *, const char *__restrict__, ...)
440 __attribute__ ((__format__ (__scanf__, 2, 3)));
441int _siprintf_r (struct _reent *, char *, const char *, ...)
442 __attribute__ ((__format__ (__printf__, 3, 4)));
443int _siscanf_r (struct _reent *, const char *, const char *, ...)
444 __attribute__ ((__format__ (__scanf__, 3, 4)));
445int _sniprintf_r (struct _reent *, char *, size_t, const char *, ...)
446 __attribute__ ((__format__ (__printf__, 4, 5)));
447int _snprintf_r (struct _reent *, char *__restrict__, size_t, const char *__restrict__, ...)
448 __attribute__ ((__format__ (__printf__, 4, 5)));
449int _sprintf_r (struct _reent *, char *__restrict__, const char *__restrict__, ...)
450 __attribute__ ((__format__ (__printf__, 3, 4)));
451int _sscanf_r (struct _reent *, const char *__restrict__, const char *__restrict__, ...)
452 __attribute__ ((__format__ (__scanf__, 3, 4)));
453char * _tempnam_r (struct _reent *, const char *, const char *);
454FILE * _tmpfile_r (struct _reent *);
455char * _tmpnam_r (struct _reent *, char *);
456int _ungetc_r (struct _reent *, int, FILE *);
457int _vasiprintf_r (struct _reent *, char **, const char *, __gnuc_va_list)
458 __attribute__ ((__format__ (__printf__, 3, 0)));
459char * _vasniprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list)
460 __attribute__ ((__format__ (__printf__, 4, 0)));
461char * _vasnprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list)
462 __attribute__ ((__format__ (__printf__, 4, 0)));
463int _vasprintf_r (struct _reent *, char **, const char *, __gnuc_va_list)
464 __attribute__ ((__format__ (__printf__, 3, 0)));
465int _vdiprintf_r (struct _reent *, int, const char *, __gnuc_va_list)
466 __attribute__ ((__format__ (__printf__, 3, 0)));
467int _vdprintf_r (struct _reent *, int, const char *__restrict__, __gnuc_va_list)
468 __attribute__ ((__format__ (__printf__, 3, 0)));
469int _vfiprintf_r (struct _reent *, FILE *, const char *, __gnuc_va_list)
470 __attribute__ ((__format__ (__printf__, 3, 0)));
471int _vfiscanf_r (struct _reent *, FILE *, const char *, __gnuc_va_list)
472 __attribute__ ((__format__ (__scanf__, 3, 0)));
473int _vfprintf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
474 __attribute__ ((__format__ (__printf__, 3, 0)));
475int _vfscanf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
476 __attribute__ ((__format__ (__scanf__, 3, 0)));
477int _viprintf_r (struct _reent *, const char *, __gnuc_va_list)
478 __attribute__ ((__format__ (__printf__, 2, 0)));
479int _viscanf_r (struct _reent *, const char *, __gnuc_va_list)
480 __attribute__ ((__format__ (__scanf__, 2, 0)));
481int _vprintf_r (struct _reent *, const char *__restrict__, __gnuc_va_list)
482 __attribute__ ((__format__ (__printf__, 2, 0)));
483int _vscanf_r (struct _reent *, const char *__restrict__, __gnuc_va_list)
484 __attribute__ ((__format__ (__scanf__, 2, 0)));
485int _vsiprintf_r (struct _reent *, char *, const char *, __gnuc_va_list)
486 __attribute__ ((__format__ (__printf__, 3, 0)));
487int _vsiscanf_r (struct _reent *, const char *, const char *, __gnuc_va_list)
488 __attribute__ ((__format__ (__scanf__, 3, 0)));
489int _vsniprintf_r (struct _reent *, char *, size_t, const char *, __gnuc_va_list)
490 __attribute__ ((__format__ (__printf__, 4, 0)));
491int _vsnprintf_r (struct _reent *, char *__restrict__, size_t, const char *__restrict__, __gnuc_va_list)
492 __attribute__ ((__format__ (__printf__, 4, 0)));
493int _vsprintf_r (struct _reent *, char *__restrict__, const char *__restrict__, __gnuc_va_list)
494 __attribute__ ((__format__ (__printf__, 3, 0)));
495int _vsscanf_r (struct _reent *, const char *__restrict__, const char *__restrict__, __gnuc_va_list)
496 __attribute__ ((__format__ (__scanf__, 3, 0)));
497int fpurge (FILE *);
498ssize_t __getdelim (char **, size_t *, int, FILE *);
499ssize_t __getline (char **, size_t *, FILE *);
500void clearerr_unlocked (FILE *);
501int feof_unlocked (FILE *);
502int ferror_unlocked (FILE *);
503int fileno_unlocked (FILE *);
504int fflush_unlocked (FILE *);
505int fgetc_unlocked (FILE *);
506int fputc_unlocked (int, FILE *);
507size_t fread_unlocked (void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
508size_t fwrite_unlocked (const void *__restrict__ , size_t _size, size_t _n, FILE *);
509char * fgets_unlocked (char *__restrict__, int, FILE *__restrict__);
510int fputs_unlocked (const char *__restrict__, FILE *__restrict__);
511int __srget_r (struct _reent *, FILE *);
512int __swbuf_r (struct _reent *, int, FILE *);
513FILE *funopen (const void *__cookie,
514 int (*__readfn)(void *__cookie, char *__buf,
515 size_t __n),
516 int (*__writefn)(void *__cookie, const char *__buf,
517 size_t __n),
518 fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence),
519 int (*__closefn)(void *__cookie));
520FILE *_funopen_r (struct _reent *, const void *__cookie,
521 int (*__readfn)(void *__cookie, char *__buf,
522 size_t __n),
523 int (*__writefn)(void *__cookie, const char *__buf,
524 size_t __n),
525 fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence),
526 int (*__closefn)(void *__cookie));
527typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n);
528typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf,
529 size_t __n);
530typedef int cookie_seek_function_t(void *__cookie, off_t *__off, int __whence);
531typedef int cookie_close_function_t(void *__cookie);
532typedef struct
533{
534 cookie_read_function_t *read;
535 cookie_write_function_t *write;
536 cookie_seek_function_t *seek;
537 cookie_close_function_t *close;
539FILE *fopencookie (void *__cookie,
540 const char *__mode, cookie_io_functions_t __functions);
541FILE *_fopencookie_r (struct _reent *, void *__cookie,
542 const char *__mode, cookie_io_functions_t __functions);
543static __inline__ int __sgetc_r(struct _reent *__ptr, FILE *__p);
544static __inline__ int __sgetc_r(struct _reent *__ptr, FILE *__p)
545 {
546 int __c = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
547 if ((__p->_flags & 0x4000) && (__c == '\r'))
548 {
549 int __c2 = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
550 if (__c2 == '\n')
551 __c = __c2;
552 else
553 ungetc(__c2, __p);
554 }
555 return __c;
556 }
557static __inline__ int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
558 if ((_p->_flags & 0x4000) && _c == '\n')
559 __sputc_r (_ptr, '\r', _p);
560 if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
561 return (*_p->_p++ = _c);
562 else
563 return (__swbuf_r(_ptr, _c, _p));
564}
565static __inline int
566_getchar_unlocked(void)
567{
568 struct _reent *_ptr;
569 _ptr = (__getreent());
570 return (__sgetc_r(_ptr, ((_ptr)->_stdin)));
571}
572static __inline int
573_putchar_unlocked(int _c)
574{
575 struct _reent *_ptr;
576 _ptr = (__getreent());
577 return (__sputc_r(_ptr, _c, ((_ptr)->_stdout)));
578}
579
580
581void __stack_chk_fail(void) __attribute__((__noreturn__));
582void __chk_fail(void) __attribute__((__noreturn__));
583
584
585int __sprintf_chk(char *__restrict__, int, size_t, const char *__restrict__, ...)
586 __attribute__((__format__ (__printf__, 4, 5)));
587int __vsprintf_chk(char *__restrict__, int, size_t, const char *__restrict__,
588 __va_list)
589 __attribute__((__format__ (__printf__, 4, 0)));
590int __snprintf_chk(char *__restrict__, size_t, int, size_t,
591 const char *__restrict__, ...)
592 __attribute__((__format__ (__printf__, 5, 6)));
593int __vsnprintf_chk(char *__restrict__, size_t, int, size_t,
594 const char *__restrict__, __va_list)
595 __attribute__((__format__ (__printf__, 5, 0)));
596char *__gets_chk(char *, size_t);
597
598char * __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)
599{
600 if (__len > 0)
601 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && (size_t)__len > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
602 return __ssp_real_fgets(__buf, __len, __fp);
603}
604char * __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)
605{
606 if (__len > 0)
607 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && (size_t)__len > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
608 return __ssp_real_fgets_unlocked(__buf, __len, __fp);
609}
610size_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)
611{
612 if (__builtin_object_size(__ptr, 0) != (size_t)-1 && __size * __n > __builtin_object_size(__ptr, 0)) __chk_fail();
613 return __ssp_real_fread(__ptr, __size, __n, __fp);
614}
615size_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)
616{
617 if (__builtin_object_size(__ptr, 0) != (size_t)-1 && __size * __n > __builtin_object_size(__ptr, 0)) __chk_fail();
618 return __ssp_real_fread_unlocked(__ptr, __size, __n, __fp);
619}
620typedef __uint8_t u_int8_t;
621typedef __uint16_t u_int16_t;
622typedef __uint32_t u_int32_t;
623typedef __uint64_t u_int64_t;
624typedef __intptr_t register_t;
625typedef __int8_t int8_t ;
626typedef __uint8_t uint8_t ;
627typedef __int16_t int16_t ;
628typedef __uint16_t uint16_t ;
629typedef __int32_t int32_t ;
630typedef __uint32_t uint32_t ;
631typedef __int64_t int64_t ;
632typedef __uint64_t uint64_t ;
633typedef __intmax_t intmax_t;
634typedef __uintmax_t uintmax_t;
635typedef __intptr_t intptr_t;
636typedef __uintptr_t uintptr_t;
637static __inline__ __uint32_t __ntohl(__uint32_t);
638static __inline__ __uint16_t __ntohs(__uint16_t);
639static __inline__ __uint32_t
640__ntohl(__uint32_t _x)
641{
642 __asm__("bswap %0" : "=r" (_x) : "0" (_x));
643 return _x;
644}
645static __inline__ __uint16_t
646__ntohs(__uint16_t _x)
647{
648 __asm__("xchgb %b0,%h0"
649 : "=Q" (_x)
650 : "0" (_x));
651 return _x;
652}
653typedef unsigned long __sigset_t;
654typedef __suseconds_t suseconds_t;
655typedef long time_t;
656struct timeval {
657 time_t tv_sec;
658 suseconds_t tv_usec;
659};
660struct timespec {
661 time_t tv_sec;
662 long tv_nsec;
663};
665 struct timespec it_interval;
666 struct timespec it_value;
667};
668typedef __sigset_t sigset_t;
669typedef unsigned long __fd_mask;
670typedef __fd_mask fd_mask;
671typedef struct fd_set {
672 __fd_mask __fds_bits[(((1024) + ((((int)sizeof(__fd_mask) * 8)) - 1)) / (((int)sizeof(__fd_mask) * 8)))];
673} fd_set;
674
675int select (int __n, fd_set *__readfds, fd_set *__writefds, fd_set *__exceptfds, struct timeval *__timeout);
676int pselect (int __n, fd_set *__readfds, fd_set *__writefds, fd_set *__exceptfds, const struct timespec *__timeout, const sigset_t *__set);
677
678typedef __uint32_t in_addr_t;
679typedef __uint16_t in_port_t;
680typedef __uintptr_t u_register_t;
681typedef unsigned char u_char;
682typedef unsigned short u_short;
683typedef unsigned int u_int;
684typedef unsigned long u_long;
685typedef unsigned short ushort;
686typedef unsigned int uint;
687typedef unsigned long ulong;
688typedef __blkcnt_t blkcnt_t;
689typedef __blksize_t blksize_t;
690typedef unsigned long clock_t;
691typedef __daddr_t daddr_t;
692typedef char * caddr_t;
693typedef __fsblkcnt_t fsblkcnt_t;
694typedef __fsfilcnt_t fsfilcnt_t;
695typedef __id_t id_t;
696typedef __ino_t ino_t;
697typedef __dev_t dev_t;
698typedef __uid_t uid_t;
699typedef __gid_t gid_t;
700typedef __pid_t pid_t;
701typedef __key_t key_t;
702typedef __mode_t mode_t;
703typedef __nlink_t nlink_t;
704typedef __clockid_t clockid_t;
705typedef __timer_t timer_t;
706typedef __useconds_t useconds_t;
707typedef __int64_t sbintime_t;
708typedef long unsigned int __cpu_mask;
709typedef struct
710{
711 __cpu_mask __bits[(1024 / (8 * sizeof (__cpu_mask)))];
712} cpu_set_t;
713int __sched_getaffinity_sys (pid_t, size_t, cpu_set_t *);
714typedef struct __pthread_t {char __dummy;} *pthread_t;
715typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
716typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
717typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
718typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
719typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
720typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
721typedef struct __pthread_barrierattr_t {char __dummy;} *pthread_barrierattr_t;
722typedef struct __pthread_barrier_t {char __dummy;} *pthread_barrier_t;
723typedef struct
724{
725 pthread_mutex_t mutex;
726 int state;
727}
729typedef struct __pthread_spinlock_t {char __dummy;} *pthread_spinlock_t;
730typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
731typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
732static __inline unsigned short
733__bswap_16 (unsigned short __x)
734{
735 return (__x >> 8) | (__x << 8);
736}
737static __inline unsigned int
738__bswap_32 (unsigned int __x)
739{
740 return (__bswap_16 (__x & 0xffff) << 16) | (__bswap_16 (__x >> 16));
741}
742static __inline unsigned long long
743__bswap_64 (unsigned long long __x)
744{
745 return (((unsigned long long) __bswap_32 (__x & 0xffffffffull)) << 32) | (__bswap_32 (__x >> 32));
746}
747typedef struct timespec timespec_t;
748typedef struct timespec timestruc_t;
749typedef __loff_t loff_t;
750struct flock {
751 short l_type;
752 short l_whence;
753 off_t l_start;
754 off_t l_len;
755 pid_t l_pid;
756};
757typedef unsigned long vm_offset_t;
758typedef unsigned long vm_size_t;
759typedef void *vm_object_t;
760typedef char *addr_t;
761static __inline__ int gnu_dev_major(dev_t);
762static __inline__ int gnu_dev_minor(dev_t);
763static __inline__ dev_t gnu_dev_makedev(int, int);
764static __inline__ int
765gnu_dev_major(dev_t dev)
766{
767 return (int)(((dev) >> 16) & 0xffff);
768}
769static __inline__ int
770gnu_dev_minor(dev_t dev)
771{
772 return (int)((dev) & 0xffff);
773}
774static __inline__ dev_t
775gnu_dev_makedev(int maj, int min)
776{
777 return (((maj) << 16) | ((min) & 0xffff));
778}
779struct __locale_t;
780typedef struct __locale_t *locale_t;
781
782struct tm
783{
784 int tm_sec;
785 int tm_min;
786 int tm_hour;
787 int tm_mday;
788 int tm_mon;
789 int tm_year;
790 int tm_wday;
791 int tm_yday;
792 int tm_isdst;
793 long tm_gmtoff;
794 const char *tm_zone;
795};
796clock_t clock (void);
797double difftime (time_t _time2, time_t _time1);
798time_t mktime (struct tm *_timeptr);
799time_t time (time_t *_timer);
800char *asctime (const struct tm *_tblock);
801char *ctime (const time_t *_time);
802struct tm *gmtime (const time_t *_timer);
803struct tm *localtime (const time_t *_timer);
804size_t strftime (char *__restrict__ _s,
805 size_t _maxsize, const char *__restrict__ _fmt,
806 const struct tm *__restrict__ _t);
807extern size_t strftime_l (char *__restrict__ _s, size_t _maxsize,
808 const char *__restrict__ _fmt,
809 const struct tm *__restrict__ _t, locale_t _l);
810char *asctime_r (const struct tm *__restrict__,
811 char *__restrict__);
812char *ctime_r (const time_t *, char *);
813struct tm *gmtime_r (const time_t *__restrict__,
814 struct tm *__restrict__);
815struct tm *localtime_r (const time_t *__restrict__,
816 struct tm *__restrict__);
817
818char *strptime (const char *__restrict__,
819 const char *__restrict__,
820 struct tm *__restrict__);
821char *strptime_l (const char *__restrict__, const char *__restrict__,
822 struct tm *__restrict__, locale_t);
823void tzset (void);
824void _tzset_r (struct _reent *);
825extern __attribute__((dllimport)) long _timezone;
826extern __attribute__((dllimport)) int _daylight;
827extern __attribute__((dllimport)) char *_tzname[2];
828int clock_setres (clockid_t, struct timespec *);
829time_t timelocal (struct tm *);
830time_t timegm (struct tm *);
831extern int stime (const time_t *);
832extern int daylight __asm__ ("_daylight");
833extern long timezone __asm__ ("_timezone");
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850typedef __int_least8_t int_least8_t;
851typedef __uint_least8_t uint_least8_t;
852typedef __int_least16_t int_least16_t;
853typedef __uint_least16_t uint_least16_t;
854typedef __int_least32_t int_least32_t;
855typedef __uint_least32_t uint_least32_t;
856typedef __int_least64_t int_least64_t;
857typedef __uint_least64_t uint_least64_t;
858 typedef signed char int_fast8_t;
859 typedef unsigned char uint_fast8_t;
860 typedef long int int_fast16_t;
861 typedef long unsigned int uint_fast16_t;
862 typedef long int int_fast32_t;
863 typedef long unsigned int uint_fast32_t;
864 typedef long int int_fast64_t;
865 typedef long unsigned int uint_fast64_t;
867 __uint16_t significand[4];
868 __uint16_t exponent;
869 __uint16_t padding[3];
870};
872 __uint32_t element[4];
873};
875{
876 __uint16_t cwd;
877 __uint16_t swd;
878 __uint16_t ftw;
879 __uint16_t fop;
880 __uint64_t rip;
881 __uint64_t rdp;
882 __uint32_t mxcsr;
883 __uint32_t mxcr_mask;
884 struct _uc_fpxreg st[8];
885 struct _uc_xmmreg xmm[16];
886 __uint32_t padding[24];
887};
888struct __attribute__ ((__aligned__ (16))) __mcontext
889{
890 __uint64_t p1home;
891 __uint64_t p2home;
892 __uint64_t p3home;
893 __uint64_t p4home;
894 __uint64_t p5home;
895 __uint64_t p6home;
896 __uint32_t ctxflags;
897 __uint32_t mxcsr;
898 __uint16_t cs;
899 __uint16_t ds;
900 __uint16_t es;
901 __uint16_t fs;
902 __uint16_t gs;
903 __uint16_t ss;
904 __uint32_t eflags;
905 __uint64_t dr0;
906 __uint64_t dr1;
907 __uint64_t dr2;
908 __uint64_t dr3;
909 __uint64_t dr6;
910 __uint64_t dr7;
911 __uint64_t rax;
912 __uint64_t rcx;
913 __uint64_t rdx;
914 __uint64_t rbx;
915 __uint64_t rsp;
916 __uint64_t rbp;
917 __uint64_t rsi;
918 __uint64_t rdi;
919 __uint64_t r8;
920 __uint64_t r9;
921 __uint64_t r10;
922 __uint64_t r11;
923 __uint64_t r12;
924 __uint64_t r13;
925 __uint64_t r14;
926 __uint64_t r15;
927 __uint64_t rip;
928 struct _fpstate fpregs;
929 __uint64_t vregs[52];
930 __uint64_t vcx;
931 __uint64_t dbc;
932 __uint64_t btr;
933 __uint64_t bfr;
934 __uint64_t etr;
935 __uint64_t efr;
936 __uint64_t oldmask;
937 __uint64_t cr2;
938};
939typedef union sigval
940{
941 int sival_int;
942 void *sival_ptr;
943} sigval_t;
944typedef struct sigevent
945{
946 sigval_t sigev_value;
947 int sigev_signo;
948 int sigev_notify;
949 void (*sigev_notify_function) (sigval_t);
950 pthread_attr_t *sigev_notify_attributes;
951} sigevent_t;
953{
954 __uint32_t _si_code;
955 void *_si_read_handle;
956 void *_si_write_handle;
957 void *_si_process_handle;
958 __extension__ union
959 {
960 struct {
961 int _si_fd;
962 uint32_t _si_flags;
963 };
964 int64_t _si_pipe_unique_id;
965 char *_si_str;
966 };
967};
968typedef struct
969{
970 int si_signo;
971 int si_code;
972 pid_t si_pid;
973 uid_t si_uid;
974 int si_errno;
975 __extension__ union
976 {
977 __uint32_t __pad[32];
978 struct _sigcommune _si_commune;
979 __extension__ struct
980 {
981 __extension__ union
982 {
983 sigval_t si_sigval;
984 sigval_t si_value;
985 };
986 __extension__ struct
987 {
988 timer_t si_tid;
989 unsigned int si_overrun;
990 };
991 };
992 __extension__ struct
993 {
994 int si_status;
995 clock_t si_utime;
996 clock_t si_stime;
997 };
998 void *si_addr;
999 };
1000} siginfo_t;
1001enum
1002{
1003 SI_USER = 0,
1004 SI_ASYNCIO = 2,
1005 SI_MESGQ,
1006 SI_TIMER,
1007 SI_QUEUE,
1008 SI_KERNEL,
1009 ILL_ILLOPC = 7,
1010 ILL_ILLOPN,
1011 ILL_ILLADR,
1012 ILL_ILLTRP,
1013 ILL_PRVOPC,
1014 ILL_PRVREG,
1015 ILL_COPROC,
1016 ILL_BADSTK,
1017 FPE_INTDIV = 15,
1018 FPE_INTOVF,
1019 FPE_FLTDIV,
1020 FPE_FLTOVF,
1021 FPE_FLTUND,
1022 FPE_FLTRES,
1023 FPE_FLTINV,
1024 FPE_FLTSUB,
1025 SEGV_MAPERR = 23,
1026 SEGV_ACCERR,
1027 BUS_ADRALN = 25,
1028 BUS_ADRERR,
1029 BUS_OBJERR,
1030 CLD_EXITED = 28,
1031 CLD_KILLED,
1032 CLD_DUMPED,
1033 CLD_TRAPPED,
1034 CLD_STOPPED,
1035 CLD_CONTINUED
1036};
1037enum
1038{
1039 SIGEV_SIGNAL = 0,
1040 SIGEV_NONE,
1041 SIGEV_THREAD
1042};
1043typedef void (*_sig_func_ptr)(int);
1045{
1046 __extension__ union
1047 {
1048 _sig_func_ptr sa_handler;
1049 void (*sa_sigaction) ( int, siginfo_t *, void * );
1050 };
1051 sigset_t sa_mask;
1052 int sa_flags;
1053};
1054void psiginfo (const siginfo_t *, const char *);
1055int sigwait (const sigset_t *, int *);
1056int sigwaitinfo (const sigset_t *, siginfo_t *);
1057int sighold (int);
1058int sigignore (int);
1059int sigrelse (int);
1060_sig_func_ptr sigset (int, _sig_func_ptr);
1061int sigqueue(pid_t, int, const union sigval);
1062int siginterrupt (int, int);
1063extern const char __attribute__((dllimport)) *sys_sigabbrev[];
1064extern const char __attribute__((dllimport)) *sys_siglist[];
1065typedef struct sigaltstack {
1066 void *ss_sp;
1067 int ss_flags;
1068 size_t ss_size;
1069} stack_t;
1070int sigprocmask (int, const sigset_t *, sigset_t *);
1071int pthread_sigmask (int, const sigset_t *, sigset_t *);
1072int kill (pid_t, int);
1073int killpg (pid_t, int);
1074int sigaction (int, const struct sigaction *, struct sigaction *);
1075int sigaddset (sigset_t *, const int);
1076int sigdelset (sigset_t *, const int);
1077int sigismember (const sigset_t *, int);
1078int sigfillset (sigset_t *);
1079int sigemptyset (sigset_t *);
1080int sigpending (sigset_t *);
1081int sigsuspend (const sigset_t *);
1082int sigwait (const sigset_t *, int *);
1083int sigpause (int) __asm__ ("" "__xpg_sigpause");
1084int sigaltstack (const stack_t *__restrict__, stack_t *__restrict__);
1085int pthread_kill (pthread_t, int);
1086int sigwaitinfo (const sigset_t *, siginfo_t *);
1087int sigtimedwait (const sigset_t *, siginfo_t *, const struct timespec *);
1088int sigqueue (pid_t, int, const union sigval);
1089int sig2str(int, char *);
1090int str2sig(const char *__restrict__, int *__restrict__);
1091typedef struct __mcontext mcontext_t;
1092typedef __attribute__ ((__aligned__ (16))) struct __ucontext {
1093 mcontext_t uc_mcontext;
1094 struct __ucontext *uc_link;
1095 sigset_t uc_sigmask;
1096 stack_t uc_stack;
1097 unsigned long int uc_flags;
1098} ucontext_t;
1099
1100typedef int sig_atomic_t;
1101typedef _sig_func_ptr sig_t;
1102typedef _sig_func_ptr sighandler_t;
1103struct _reent;
1104_sig_func_ptr _signal_r (struct _reent *, int, _sig_func_ptr);
1105int _raise_r (struct _reent *, int);
1106_sig_func_ptr signal (int, _sig_func_ptr);
1107int raise (int);
1108void psignal (int, const char *);
1109
1110int clock_settime (clockid_t clock_id, const struct timespec *tp);
1111int clock_gettime (clockid_t clock_id, struct timespec *tp);
1112int clock_getres (clockid_t clock_id, struct timespec *res);
1113int timer_create (clockid_t clock_id,
1114 struct sigevent *__restrict__ evp,
1115 timer_t *__restrict__ timerid);
1116int timer_delete (timer_t timerid);
1117int timer_settime (timer_t timerid, int flags,
1118 const struct itimerspec *__restrict__ value,
1119 struct itimerspec *__restrict__ ovalue);
1120int timer_gettime (timer_t timerid, struct itimerspec *value);
1121int timer_getoverrun (timer_t timerid);
1122int nanosleep (const struct timespec *rqtp, struct timespec *rmtp);
1123int clock_nanosleep (clockid_t clock_id, int flags,
1124 const struct timespec *rqtp, struct timespec *rmtp);
1125int clock_getcpuclockid (pid_t pid, clockid_t *clock_id);
1126int clock_setenable_attr (clockid_t clock_id, int attr);
1127int clock_getenable_attr (clockid_t clock_id, int *attr);
1128struct stat
1129{
1130 dev_t st_dev;
1131 ino_t st_ino;
1132 mode_t st_mode;
1133 nlink_t st_nlink;
1134 uid_t st_uid;
1135 gid_t st_gid;
1136 dev_t st_rdev;
1137 off_t st_size;
1138 timestruc_t st_atim;
1139 timestruc_t st_mtim;
1140 timestruc_t st_ctim;
1141 blksize_t st_blksize;
1142 blkcnt_t st_blocks;
1143 timestruc_t st_birthtim;
1144};
1145int chmod (const char *__path, mode_t __mode );
1146int fchmod (int __fd, mode_t __mode);
1147int fstat (int __fd, struct stat *__sbuf );
1148int mkdir (const char *_path, mode_t __mode );
1149int mkfifo (const char *__path, mode_t __mode );
1150int stat (const char *__restrict__ __path, struct stat *__restrict__ __sbuf );
1151mode_t umask (mode_t __mask );
1152int lstat (const char *__restrict__ __path, struct stat *__restrict__ __buf );
1153int mknod (const char *__path, mode_t __mode, dev_t __dev );
1154int fchmodat (int, const char *, mode_t, int);
1155int fstatat (int, const char *__restrict__ , struct stat *__restrict__, int);
1156int mkdirat (int, const char *, mode_t);
1157int mkfifoat (int, const char *, mode_t);
1158int mknodat (int, const char *, mode_t, dev_t);
1159int utimensat (int, const char *, const struct timespec [2], int);
1160int futimens (int, const struct timespec [2]);
1161char *mkdtemp (char *);
1162const char *getprogname (void);
1163void setprogname (const char *);
1164char *canonicalize_file_name (const char *);
1165int unsetenv (const char *);
1166int clearenv (void);
1167char *ptsname (int);
1168int grantpt (int);
1169int unlockpt (int);
1170int ptsname_r(int, char *, size_t);
1171int getpt (void);
1172int posix_openpt (int);
1173extern void *memalign (size_t, size_t);
1174extern void *valloc (size_t);
1175int getloadavg(double loadavg[], int nelem);
1176
1177typedef struct
1178{
1179 int quot;
1180 int rem;
1181} div_t;
1182typedef struct
1183{
1184 long quot;
1185 long rem;
1186} ldiv_t;
1187typedef struct
1188{
1189 long long int quot;
1190 long long int rem;
1191} lldiv_t;
1192typedef int (*__compar_fn_t) (const void *, const void *);
1193int __locale_mb_cur_max (void);
1194void abort (void) __attribute__ ((__noreturn__));
1195int abs (int);
1196__uint32_t arc4random (void);
1197__uint32_t arc4random_uniform (__uint32_t);
1198void arc4random_buf (void *, size_t);
1199int atexit (void (*__func)(void));
1200double atof (const char *__nptr);
1201float atoff (const char *__nptr);
1202int atoi (const char *__nptr);
1203int _atoi_r (struct _reent *, const char *__nptr);
1204long atol (const char *__nptr);
1205long _atol_r (struct _reent *, const char *__nptr);
1206void * bsearch (const void *__key,
1207 const void *__base,
1208 size_t __nmemb,
1209 size_t __size,
1210 __compar_fn_t _compar);
1211void *calloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__))
1212 __attribute__((__alloc_size__(1, 2))) ;
1213div_t div (int __numer, int __denom);
1214void exit (int __status) __attribute__ ((__noreturn__));
1215void free (void *) ;
1216char * getenv (const char *__string);
1217char * _getenv_r (struct _reent *, const char *__string);
1218char * secure_getenv (const char *__string);
1219char * _findenv (const char *, int *);
1220char * _findenv_r (struct _reent *, const char *, int *);
1221extern char *suboptarg;
1222int getsubopt (char **, char * const *, char **);
1223long labs (long);
1224ldiv_t ldiv (long __numer, long __denom);
1225void *malloc(size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(1))) ;
1226int mblen (const char *, size_t);
1227int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
1228int mbtowc (wchar_t *__restrict__, const char *__restrict__, size_t);
1229int _mbtowc_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
1230int wctomb (char *, wchar_t);
1231int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
1232size_t mbstowcs (wchar_t *__restrict__, const char *__restrict__, size_t);
1233size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
1234size_t wcstombs (char *__restrict__, const wchar_t *__restrict__, size_t);
1235size_t _wcstombs_r (struct _reent *, char *__restrict__, const wchar_t *__restrict__, size_t, _mbstate_t *);
1236char * mkdtemp (char *);
1237int mkostemp (char *, int);
1238int mkostemps (char *, int, int);
1239int mkstemp (char *);
1240int mkstemps (char *, int);
1241char * mktemp (char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
1242char * _mkdtemp_r (struct _reent *, char *);
1243int _mkostemp_r (struct _reent *, char *, int);
1244int _mkostemps_r (struct _reent *, char *, int, int);
1245int _mkstemp_r (struct _reent *, char *);
1246int _mkstemps_r (struct _reent *, char *, int);
1247char * _mktemp_r (struct _reent *, char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
1248void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar);
1249int rand (void);
1250void *realloc(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2))) ;
1251void *reallocarray(void *, size_t, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2, 3)));
1252void *reallocf(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2)));
1253char * realpath (const char *__restrict__ path, char *__restrict__ resolved_path);
1254int rpmatch (const char *response);
1255void setkey (const char *__key);
1256void srand (unsigned __seed);
1257double strtod (const char *__restrict__ __n, char **__restrict__ __end_PTR);
1258double _strtod_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR);
1259float strtof (const char *__restrict__ __n, char **__restrict__ __end_PTR);
1260long strtol (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1261long _strtol_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1262unsigned long strtoul (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1263unsigned long _strtoul_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1264double strtod_l (const char *__restrict__, char **__restrict__, locale_t);
1265float strtof_l (const char *__restrict__, char **__restrict__, locale_t);
1266extern long double strtold_l (const char *__restrict__, char **__restrict__,
1267 locale_t);
1268long strtol_l (const char *__restrict__, char **__restrict__, int, locale_t);
1269unsigned long strtoul_l (const char *__restrict__, char **__restrict__, int,
1270 locale_t __loc);
1271long long strtoll_l (const char *__restrict__, char **__restrict__, int, locale_t);
1272unsigned long long strtoull_l (const char *__restrict__, char **__restrict__, int,
1273 locale_t __loc);
1274int system (const char *__string);
1275long a64l (const char *__input);
1276char * l64a (long __input);
1277char * _l64a_r (struct _reent *,long __input);
1278int on_exit (void (*__func)(int, void *),void *__arg);
1279void _Exit (int __status) __attribute__ ((__noreturn__));
1280int putenv (char *__string);
1281int _putenv_r (struct _reent *, char *__string);
1282void * _reallocf_r (struct _reent *, void *, size_t);
1283int setenv (const char *__string, const char *__value, int __overwrite);
1284int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);
1285char * __itoa (int, char *, int);
1286char * __utoa (unsigned, char *, int);
1287char * itoa (int, char *, int);
1288char * utoa (unsigned, char *, int);
1289int rand_r (unsigned *__seed);
1290double drand48 (void);
1291double _drand48_r (struct _reent *);
1292double erand48 (unsigned short [3]);
1293double _erand48_r (struct _reent *, unsigned short [3]);
1294long jrand48 (unsigned short [3]);
1295long _jrand48_r (struct _reent *, unsigned short [3]);
1296void lcong48 (unsigned short [7]);
1297void _lcong48_r (struct _reent *, unsigned short [7]);
1298long lrand48 (void);
1299long _lrand48_r (struct _reent *);
1300long mrand48 (void);
1301long _mrand48_r (struct _reent *);
1302long nrand48 (unsigned short [3]);
1303long _nrand48_r (struct _reent *, unsigned short [3]);
1304unsigned short *
1305 seed48 (unsigned short [3]);
1306unsigned short *
1307 _seed48_r (struct _reent *, unsigned short [3]);
1308void srand48 (long);
1309void _srand48_r (struct _reent *, long);
1310char * initstate (unsigned, char *, size_t);
1311long random (void);
1312char * setstate (char *);
1313void srandom (unsigned);
1314long long atoll (const char *__nptr);
1315long long _atoll_r (struct _reent *, const char *__nptr);
1316long long llabs (long long);
1317lldiv_t lldiv (long long __numer, long long __denom);
1318long long strtoll (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1319long long _strtoll_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1320unsigned long long strtoull (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1321unsigned long long _strtoull_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1322int posix_memalign (void **, size_t, size_t) __attribute__((__nonnull__ (1)))
1323 __attribute__((__warn_unused_result__));
1324char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);
1325int _system_r (struct _reent *, const char *);
1326void __eprintf (const char *, const char *, unsigned int, const char *);
1327void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk);
1328extern long double _strtold_r (struct _reent *, const char *__restrict__, char **__restrict__);
1329extern long double strtold (const char *__restrict__, char **__restrict__);
1330void * aligned_alloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__alloc_align__(1)))
1331 __attribute__((__alloc_size__(2))) __attribute__((__warn_unused_result__));
1332int at_quick_exit(void (*)(void));
1333_Noreturn void
1334 quick_exit(int);
1335
1336
1337size_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)
1338{
1339 if (__buf != ((void *)0))
1340 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(wchar_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1341 return __ssp_real_mbstowcs (__buf, __src, __n);
1342}
1343size_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); };
1344int __ssp_real_wctomb (char *__buf, wchar_t __wc) __asm__("" "wctomb"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int wctomb (char *__buf, wchar_t __wc)
1345{
1346 if (__buf != ((void *)0))
1347 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __locale_mb_cur_max() > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1348 return __ssp_real_wctomb (__buf, __wc);
1349}
1350
1351
1352int bcmp(const void *, const void *, size_t) __attribute__((__pure__));
1353void bcopy(const void *, void *, size_t);
1354void bzero(void *, size_t);
1355void explicit_bzero(void *, size_t);
1356int ffs(int) __attribute__((__const__));
1357int ffsl(long) __attribute__((__const__));
1358int ffsll(long long) __attribute__((__const__));
1359int fls(int) __attribute__((__const__));
1360int flsl(long) __attribute__((__const__));
1361int flsll(long long) __attribute__((__const__));
1362char *index(const char *, int) __attribute__((__pure__));
1363char *rindex(const char *, int) __attribute__((__pure__));
1364int strcasecmp(const char *, const char *) __attribute__((__pure__));
1365int strncasecmp(const char *, const char *, size_t) __attribute__((__pure__));
1366int strcasecmp_l (const char *, const char *, locale_t);
1367int strncasecmp_l (const char *, const char *, size_t, locale_t);
1368
1369void __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); };
1370
1371void * memchr (const void *, int, size_t);
1372int memcmp (const void *, const void *, size_t);
1373void * memcpy (void *__restrict__, const void *__restrict__, size_t);
1374void * memmove (void *, const void *, size_t);
1375void * memset (void *, int, size_t);
1376char *strcat (char *__restrict__, const char *__restrict__);
1377char *strchr (const char *, int);
1378int strcmp (const char *, const char *);
1379int strcoll (const char *, const char *);
1380char *strcpy (char *__restrict__, const char *__restrict__);
1381size_t strcspn (const char *, const char *);
1382char *strerror (int);
1383size_t strlen (const char *);
1384char *strncat (char *__restrict__, const char *__restrict__, size_t);
1385int strncmp (const char *, const char *, size_t);
1386char *strncpy (char *__restrict__, const char *__restrict__, size_t);
1387char *strpbrk (const char *, const char *);
1388char *strrchr (const char *, int);
1389size_t strspn (const char *, const char *);
1390char *strstr (const char *, const char *);
1391char *strtok (char *__restrict__, const char *__restrict__);
1392size_t strxfrm (char *__restrict__, const char *__restrict__, size_t);
1393int strcoll_l (const char *, const char *, locale_t);
1394char *strerror_l (int, locale_t);
1395size_t strxfrm_l (char *__restrict__, const char *__restrict__, size_t, locale_t);
1396char *strtok_r (char *__restrict__, const char *__restrict__, char **__restrict__);
1397int timingsafe_bcmp (const void *, const void *, size_t);
1398int timingsafe_memcmp (const void *, const void *, size_t);
1399void * memccpy (void *__restrict__, const void *__restrict__, int, size_t);
1400void * mempcpy (void *, const void *, size_t);
1401void * memmem (const void *, size_t, const void *, size_t);
1402void * memrchr (const void *, int, size_t);
1403void * rawmemchr (const void *, int);
1404char *stpcpy (char *__restrict__, const char *__restrict__);
1405char *stpncpy (char *__restrict__, const char *__restrict__, size_t);
1406char *strcasestr (const char *, const char *);
1407char *strchrnul (const char *, int);
1408char *strdup (const char *) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
1409char *_strdup_r (struct _reent *, const char *);
1410char *strndup (const char *, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
1411char *_strndup_r (struct _reent *, const char *, size_t);
1412char *strerror_r (int, char *, size_t);
1413char * _strerror_r (struct _reent *, int, int, int *);
1414size_t strlcat (char *, const char *, size_t);
1415size_t strlcpy (char *, const char *, size_t);
1416size_t strnlen (const char *, size_t);
1417char *strsep (char **, const char *);
1418char *strnstr(const char *, const char *, size_t) __attribute__((__pure__));
1419char *strlwr (char *);
1420char *strupr (char *);
1421char *strsignal (int __signo);
1422int strtosigno (const char *__name);
1423int strverscmp (const char *, const char *);
1424char *__attribute__((__nonnull__ (1))) basename (const char *) __asm__("" "__gnu_basename");
1425
1426
1427void *__memcpy_chk(void *, const void *, size_t, size_t);
1428void *__memmove_chk(void *, void *, size_t, size_t);
1429void *__mempcpy_chk(void *, const void *, size_t, size_t);
1430void *__memset_chk(void *, int, size_t, size_t);
1431char *__stpcpy_chk(char *, const char *, size_t);
1432char *__strcat_chk(char *, const char *, size_t);
1433char *__strcpy_chk(char *, const char *, size_t);
1434char *__strncat_chk(char *, const char *, size_t, size_t);
1435char *__strncpy_chk(char *, const char *, size_t, size_t);
1436
1437
1438extern __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)); }
1439extern __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)); }
1440extern __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)); }
1441extern __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)); }
1442extern __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)); }
1443extern __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)); }
1444extern __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)); }
1445extern __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)); }
1446extern __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)); }
1447extern __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)); }
1448
1449typedef struct {
1450 intmax_t quot;
1451 intmax_t rem;
1452} imaxdiv_t;
1453struct _reent;
1454extern intmax_t imaxabs(intmax_t);
1455extern imaxdiv_t imaxdiv(intmax_t __numer, intmax_t __denomer);
1456extern intmax_t strtoimax(const char *__restrict__, char **__restrict__, int);
1457extern intmax_t _strtoimax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1458extern uintmax_t strtoumax(const char *__restrict__, char **__restrict__, int);
1459extern uintmax_t _strtoumax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1460extern intmax_t wcstoimax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1461extern intmax_t _wcstoimax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1462extern uintmax_t wcstoumax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1463extern uintmax_t _wcstoumax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1464extern intmax_t strtoimax_l(const char *__restrict__, char **_restrict, int, locale_t);
1465extern uintmax_t strtoumax_l(const char *__restrict__, char **_restrict, int, locale_t);
1466extern intmax_t wcstoimax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1467extern uintmax_t wcstoumax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1468extern char **environ;
1469void _exit (int __status) __attribute__ ((__noreturn__));
1470int access (const char *__path, int __amode);
1471unsigned alarm (unsigned __secs);
1472int chdir (const char *__path);
1473int chmod (const char *__path, mode_t __mode);
1474int chown (const char *__path, uid_t __owner, gid_t __group);
1475int chroot (const char *__path);
1476int close (int __fildes);
1477size_t confstr (int __name, char *__buf, size_t __len);
1478char * crypt (const char *__key, const char *__salt);
1479int daemon (int nochdir, int noclose);
1480int dup (int __fildes);
1481int dup2 (int __fildes, int __fildes2);
1482int dup3 (int __fildes, int __fildes2, int flags);
1483int eaccess (const char *__path, int __mode);
1484void encrypt (char *__block, int __edflag);
1485void endusershell (void);
1486int euidaccess (const char *__path, int __mode);
1487int execl (const char *__path, const char *, ...);
1488int execle (const char *__path, const char *, ...);
1489int execlp (const char *__file, const char *, ...);
1490int execlpe (const char *__file, const char *, ...);
1491int execv (const char *__path, char * const __argv[]);
1492int execve (const char *__path, char * const __argv[], char * const __envp[]);
1493int execvp (const char *__file, char * const __argv[]);
1494int execvpe (const char *__file, char * const __argv[], char * const __envp[]);
1495int faccessat (int __dirfd, const char *__path, int __mode, int __flags);
1496int fchdir (int __fildes);
1497int fchmod (int __fildes, mode_t __mode);
1498int fchown (int __fildes, uid_t __owner, gid_t __group);
1499int fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags);
1500int fexecve (int __fd, char * const __argv[], char * const __envp[]);
1501pid_t fork (void);
1502long fpathconf (int __fd, int __name);
1503int fsync (int __fd);
1504int fdatasync (int __fd);
1505char * get_current_dir_name (void);
1506char * getcwd (char *__buf, size_t __size);
1507int getdomainname (char *__name, size_t __len);
1508int getentropy (void *, size_t);
1509gid_t getegid (void);
1510uid_t geteuid (void);
1511gid_t getgid (void);
1512int getgroups (int __gidsetsize, gid_t __grouplist[]);
1513long gethostid (void);
1514char * getlogin (void);
1515int getlogin_r (char *name, size_t namesize) ;
1516char * getpass (const char *__prompt);
1517int getpagesize (void);
1518int getpeereid (int, uid_t *, gid_t *);
1519pid_t getpgid (pid_t);
1520pid_t getpgrp (void);
1521pid_t getpid (void);
1522pid_t getppid (void);
1523pid_t getsid (pid_t);
1524uid_t getuid (void);
1525char * getusershell (void);
1526char * getwd (char *__buf);
1527int iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser);
1528int isatty (int __fildes);
1529int issetugid (void);
1530int lchown (const char *__path, uid_t __owner, gid_t __group);
1531int link (const char *__path1, const char *__path2);
1532int linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags);
1533int nice (int __nice_value);
1534off_t lseek (int __fildes, off_t __offset, int __whence);
1535int lockf (int __fd, int __cmd, off_t __len);
1536long pathconf (const char *__path, int __name);
1537int pause (void);
1538int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
1539int pipe (int __fildes[2]);
1540int pipe2 (int __fildes[2], int flags);
1541ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
1542ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset);
1543_ssize_t read (int __fd, void *__buf, size_t __nbyte);
1544int rresvport (int *__alport);
1545int revoke (char *__path);
1546int rmdir (const char *__path);
1547int ruserok (const char *rhost, int superuser, const char *ruser, const char *luser);
1548void * sbrk (ptrdiff_t __incr);
1549int setegid (gid_t __gid);
1550int seteuid (uid_t __uid);
1551int setgid (gid_t __gid);
1552int setgroups (int ngroups, const gid_t *grouplist);
1553int sethostname (const char *, size_t);
1554int setpgid (pid_t __pid, pid_t __pgid);
1555int setpgrp (void);
1556int setregid (gid_t __rgid, gid_t __egid);
1557int setreuid (uid_t __ruid, uid_t __euid);
1558pid_t setsid (void);
1559int setuid (uid_t __uid);
1560void setusershell (void);
1561unsigned sleep (unsigned int __seconds);
1562void swab (const void *__restrict__, void *__restrict__, ssize_t);
1563long sysconf (int __name);
1564pid_t tcgetpgrp (int __fildes);
1565int tcsetpgrp (int __fildes, pid_t __pgrp_id);
1566char * ttyname (int __fildes);
1567int ttyname_r (int, char *, size_t);
1568int unlink (const char *__path);
1569int usleep (useconds_t __useconds);
1570int vhangup (void);
1571_ssize_t write (int __fd, const void *__buf, size_t __nbyte);
1572extern int __attribute__((dllimport)) opterr;
1573extern int __attribute__((dllimport)) optind;
1574extern int __attribute__((dllimport)) optopt;
1575extern int __attribute__((dllimport)) optreset;
1576extern char __attribute__((dllimport)) *optarg;
1577int getopt (int, char * const *, const char *);
1578pid_t vfork (void);
1579int ftruncate (int __fd, off_t __length);
1580int truncate (const char *, off_t __length);
1581int getdtablesize (void);
1582useconds_t ualarm (useconds_t __useconds, useconds_t __interval);
1583 int gethostname (char *__name, size_t __len);
1584int setdtablesize (int);
1585void sync (void);
1586ssize_t readlink (const char *__restrict__ __path,
1587 char *__restrict__ __buf, size_t __buflen);
1588int symlink (const char *__name1, const char *__name2);
1589ssize_t readlinkat (int __dirfd1, const char *__restrict__ __path,
1590 char *__restrict__ __buf, size_t __buflen);
1591int symlinkat (const char *, int, const char *);
1592int unlinkat (int, const char *, int);
1593
1594size_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); };
1595char * __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); };
1596int __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); };
1597int __ssp_real_getgroups (int __n, gid_t __buf[]) __asm__("" "getgroups"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int getgroups (int __n, gid_t __buf[])
1598{
1599 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(gid_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1600 return __ssp_real_getgroups (__n, __buf);
1601}
1602int __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); };
1603int __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); };
1604ssize_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); };
1605_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); };
1606ssize_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); };
1607ssize_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); };
1608int __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); };
1609
1610
1611
1612[[nodiscard]]
1613__attribute__((__malloc__))
1614__attribute__((__returns_nonnull__))
1615__attribute__((__alloc_size__ (1)))
1616void *ruby_xmalloc(size_t size)
1617
1618;
1619[[nodiscard]]
1620__attribute__((__malloc__))
1621__attribute__((__returns_nonnull__))
1622__attribute__((__alloc_size__ (1,2)))
1623void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
1624
1625;
1626[[nodiscard]]
1627__attribute__((__malloc__))
1628__attribute__((__returns_nonnull__))
1629__attribute__((__alloc_size__ (1,2)))
1630void *ruby_xcalloc(size_t nelems, size_t elemsiz)
1631
1632;
1633[[nodiscard]]
1634__attribute__((__returns_nonnull__))
1635__attribute__((__alloc_size__ (2)))
1636void *ruby_xrealloc(void *ptr, size_t newsiz)
1637
1638;
1639[[nodiscard]]
1640__attribute__((__returns_nonnull__))
1641__attribute__((__alloc_size__ (2,3)))
1642void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
1643
1644;
1645void ruby_xfree(void *ptr)
1646
1647;
1648
1649
1650#define RBIMPL_ATTR_COLD_H
1651#define RBIMPL_ATTR_COLD() __attribute__((__cold__))
1652
1653
1654__attribute__((__noreturn__))
1655__attribute__((__cold__))
1656void rb_assert_failure(const char *file, int line, const char *name, const char *expr);
1657
1658
1659#define COLDFUNC RBIMPL_ATTR_COLD()
1660
1661extern double atan (double);
1662extern double cos (double);
1663extern double sin (double);
1664extern double tan (double);
1665extern double tanh (double);
1666extern double frexp (double, int *);
1667extern double modf (double, double *);
1668extern double ceil (double);
1669extern double fabs (double);
1670extern double floor (double);
1671extern double acos (double);
1672extern double asin (double);
1673extern double atan2 (double, double);
1674extern double cosh (double);
1675extern double sinh (double);
1676extern double exp (double);
1677extern double ldexp (double, int);
1678extern double log (double);
1679extern double log10 (double);
1680extern double pow (double, double);
1681extern double sqrt (double);
1682extern double fmod (double, double);
1683extern int finite (double);
1684extern int finitef (float);
1685extern int finitel (long double);
1686extern int isinff (float);
1687extern int isnanf (float);
1688extern int isinfl (long double);
1689extern int isnanl (long double);
1690extern int isinf (double);
1691extern int isnan (double);
1692 typedef float float_t;
1693 typedef double double_t;
1694extern int __isinff (float);
1695extern int __isinfd (double);
1696extern int __isnanf (float);
1697extern int __isnand (double);
1698extern int __fpclassifyf (float);
1699extern int __fpclassifyd (double);
1700extern int __signbitf (float);
1701extern int __signbitd (double);
1702extern double infinity (void);
1703extern double nan (const char *);
1704extern double copysign (double, double);
1705extern double logb (double);
1706extern int ilogb (double);
1707extern double asinh (double);
1708extern double cbrt (double);
1709extern double nextafter (double, double);
1710extern double rint (double);
1711extern double scalbn (double, int);
1712extern double exp2 (double);
1713extern double scalbln (double, long int);
1714extern double tgamma (double);
1715extern double nearbyint (double);
1716extern long int lrint (double);
1717extern long long int llrint (double);
1718extern double round (double);
1719extern long int lround (double);
1720extern long long int llround (double);
1721extern double trunc (double);
1722extern double remquo (double, double, int *);
1723extern double fdim (double, double);
1724extern double fmax (double, double);
1725extern double fmin (double, double);
1726extern double fma (double, double, double);
1727extern double log1p (double);
1728extern double expm1 (double);
1729extern double acosh (double);
1730extern double atanh (double);
1731extern double remainder (double, double);
1732extern double gamma (double);
1733extern double lgamma (double);
1734extern double erf (double);
1735extern double erfc (double);
1736extern double log2 (double);
1737extern double hypot (double, double);
1738extern float atanf (float);
1739extern float cosf (float);
1740extern float sinf (float);
1741extern float tanf (float);
1742extern float tanhf (float);
1743extern float frexpf (float, int *);
1744extern float modff (float, float *);
1745extern float ceilf (float);
1746extern float fabsf (float);
1747extern float floorf (float);
1748extern float acosf (float);
1749extern float asinf (float);
1750extern float atan2f (float, float);
1751extern float coshf (float);
1752extern float sinhf (float);
1753extern float expf (float);
1754extern float ldexpf (float, int);
1755extern float logf (float);
1756extern float log10f (float);
1757extern float powf (float, float);
1758extern float sqrtf (float);
1759extern float fmodf (float, float);
1760extern float exp2f (float);
1761extern float scalblnf (float, long int);
1762extern float tgammaf (float);
1763extern float nearbyintf (float);
1764extern long int lrintf (float);
1765extern long long int llrintf (float);
1766extern float roundf (float);
1767extern long int lroundf (float);
1768extern long long int llroundf (float);
1769extern float truncf (float);
1770extern float remquof (float, float, int *);
1771extern float fdimf (float, float);
1772extern float fmaxf (float, float);
1773extern float fminf (float, float);
1774extern float fmaf (float, float, float);
1775extern float infinityf (void);
1776extern float nanf (const char *);
1777extern float copysignf (float, float);
1778extern float logbf (float);
1779extern int ilogbf (float);
1780extern float asinhf (float);
1781extern float cbrtf (float);
1782extern float nextafterf (float, float);
1783extern float rintf (float);
1784extern float scalbnf (float, int);
1785extern float log1pf (float);
1786extern float expm1f (float);
1787extern float acoshf (float);
1788extern float atanhf (float);
1789extern float remainderf (float, float);
1790extern float gammaf (float);
1791extern float lgammaf (float);
1792extern float erff (float);
1793extern float erfcf (float);
1794extern float log2f (float);
1795extern float hypotf (float, float);
1796extern long double atanl (long double);
1797extern long double cosl (long double);
1798extern long double sinl (long double);
1799extern long double tanl (long double);
1800extern long double tanhl (long double);
1801extern long double frexpl (long double, int *);
1802extern long double modfl (long double, long double *);
1803extern long double ceill (long double);
1804extern long double fabsl (long double);
1805extern long double floorl (long double);
1806extern long double log1pl (long double);
1807extern long double expm1l (long double);
1808extern long double acosl (long double);
1809extern long double asinl (long double);
1810extern long double atan2l (long double, long double);
1811extern long double coshl (long double);
1812extern long double sinhl (long double);
1813extern long double expl (long double);
1814extern long double ldexpl (long double, int);
1815extern long double logl (long double);
1816extern long double log10l (long double);
1817extern long double powl (long double, long double);
1818extern long double sqrtl (long double);
1819extern long double fmodl (long double, long double);
1820extern long double hypotl (long double, long double);
1821extern long double copysignl (long double, long double);
1822extern long double nanl (const char *);
1823extern int ilogbl (long double);
1824extern long double asinhl (long double);
1825extern long double cbrtl (long double);
1826extern long double nextafterl (long double, long double);
1827extern float nexttowardf (float, long double);
1828extern double nexttoward (double, long double);
1829extern long double nexttowardl (long double, long double);
1830extern long double logbl (long double);
1831extern long double log2l (long double);
1832extern long double rintl (long double);
1833extern long double scalbnl (long double, int);
1834extern long double exp2l (long double);
1835extern long double scalblnl (long double, long);
1836extern long double tgammal (long double);
1837extern long double nearbyintl (long double);
1838extern long int lrintl (long double);
1839extern long long int llrintl (long double);
1840extern long double roundl (long double);
1841extern long lroundl (long double);
1842extern long long int llroundl (long double);
1843extern long double truncl (long double);
1844extern long double remquol (long double, long double, int *);
1845extern long double fdiml (long double, long double);
1846extern long double fmaxl (long double, long double);
1847extern long double fminl (long double, long double);
1848extern long double fmal (long double, long double, long double);
1849extern long double acoshl (long double);
1850extern long double atanhl (long double);
1851extern long double remainderl (long double, long double);
1852extern long double lgammal (long double);
1853extern long double erfl (long double);
1854extern long double erfcl (long double);
1855extern double drem (double, double);
1856extern float dremf (float, float);
1857extern float dreml (long double, long double);
1858extern double gamma_r (double, int *);
1859extern double lgamma_r (double, int *);
1860extern float gammaf_r (float, int *);
1861extern float lgammaf_r (float, int *);
1862extern double y0 (double);
1863extern double y1 (double);
1864extern double yn (int, double);
1865extern double j0 (double);
1866extern double j1 (double);
1867extern double jn (int, double);
1868extern float y0f (float);
1869extern float y1f (float);
1870extern float ynf (int, float);
1871extern float j0f (float);
1872extern float j1f (float);
1873extern float jnf (int, float);
1874extern void sincos (double, double *, double *);
1875extern void sincosf (float, float *, float *);
1876extern void sincosl (long double, long double *, long double *);
1877extern double exp10 (double);
1878extern double pow10 (double);
1879extern float exp10f (float);
1880extern float pow10f (float);
1881extern float exp10l (float);
1882extern float pow10l (float);
1883extern int *__signgam (void);
1884
1885struct timezone {
1886 int tz_minuteswest;
1887 int tz_dsttime;
1888};
1889struct bintime {
1890 time_t sec;
1891 uint64_t frac;
1892};
1893static __inline void
1894bintime_addx(struct bintime *_bt, uint64_t _x)
1895{
1896 uint64_t _u;
1897 _u = _bt->frac;
1898 _bt->frac += _x;
1899 if (_u > _bt->frac)
1900 _bt->sec++;
1901}
1902static __inline void
1903bintime_add(struct bintime *_bt, const struct bintime *_bt2)
1904{
1905 uint64_t _u;
1906 _u = _bt->frac;
1907 _bt->frac += _bt2->frac;
1908 if (_u > _bt->frac)
1909 _bt->sec++;
1910 _bt->sec += _bt2->sec;
1911}
1912static __inline void
1913bintime_sub(struct bintime *_bt, const struct bintime *_bt2)
1914{
1915 uint64_t _u;
1916 _u = _bt->frac;
1917 _bt->frac -= _bt2->frac;
1918 if (_u < _bt->frac)
1919 _bt->sec--;
1920 _bt->sec -= _bt2->sec;
1921}
1922static __inline void
1923bintime_mul(struct bintime *_bt, u_int _x)
1924{
1925 uint64_t _p1, _p2;
1926 _p1 = (_bt->frac & 0xffffffffull) * _x;
1927 _p2 = (_bt->frac >> 32) * _x + (_p1 >> 32);
1928 _bt->sec *= _x;
1929 _bt->sec += (_p2 >> 32);
1930 _bt->frac = (_p2 << 32) | (_p1 & 0xffffffffull);
1931}
1932static __inline void
1933bintime_shift(struct bintime *_bt, int _exp)
1934{
1935 if (_exp > 0) {
1936 _bt->sec <<= _exp;
1937 _bt->sec |= _bt->frac >> (64 - _exp);
1938 _bt->frac <<= _exp;
1939 } else if (_exp < 0) {
1940 _bt->frac >>= -_exp;
1941 _bt->frac |= (uint64_t)_bt->sec << (64 + _exp);
1942 _bt->sec >>= -_exp;
1943 }
1944}
1945static __inline int
1946sbintime_getsec(sbintime_t _sbt)
1947{
1948 return (_sbt >> 32);
1949}
1950static __inline sbintime_t
1951bttosbt(const struct bintime _bt)
1952{
1953 return (((sbintime_t)_bt.sec << 32) + (_bt.frac >> 32));
1954}
1955static __inline struct bintime
1956sbttobt(sbintime_t _sbt)
1957{
1958 struct bintime _bt;
1959 _bt.sec = _sbt >> 32;
1960 _bt.frac = _sbt << 32;
1961 return (_bt);
1962}
1963static __inline int64_t
1964sbttons(sbintime_t _sbt)
1965{
1966 uint64_t ns;
1967 ns = _sbt;
1968 if (ns >= ((sbintime_t)1 << 32))
1969 ns = (ns >> 32) * 1000000000;
1970 else
1971 ns = 0;
1972 return (ns + (1000000000 * (_sbt & 0xffffffffu) >> 32));
1973}
1974static __inline sbintime_t
1975nstosbt(int64_t _ns)
1976{
1977 sbintime_t sb = 0;
1978 if (_ns >= ((sbintime_t)1 << 32)) {
1979 sb = (_ns / 1000000000) * ((sbintime_t)1 << 32);
1980 _ns = _ns % 1000000000;
1981 }
1982 sb += ((_ns * 9223372037ull) + 0x7fffffff) >> 31;
1983 return (sb);
1984}
1985static __inline int64_t
1986sbttous(sbintime_t _sbt)
1987{
1988 return ((1000000 * _sbt) >> 32);
1989}
1990static __inline sbintime_t
1991ustosbt(int64_t _us)
1992{
1993 sbintime_t sb = 0;
1994 if (_us >= ((sbintime_t)1 << 32)) {
1995 sb = (_us / 1000000) * ((sbintime_t)1 << 32);
1996 _us = _us % 1000000;
1997 }
1998 sb += ((_us * 9223372036855ull) + 0x7fffffff) >> 31;
1999 return (sb);
2000}
2001static __inline int64_t
2002sbttoms(sbintime_t _sbt)
2003{
2004 return ((1000 * _sbt) >> 32);
2005}
2006static __inline sbintime_t
2007mstosbt(int64_t _ms)
2008{
2009 sbintime_t sb = 0;
2010 if (_ms >= ((sbintime_t)1 << 32)) {
2011 sb = (_ms / 1000) * ((sbintime_t)1 << 32);
2012 _ms = _ms % 1000;
2013 }
2014 sb += ((_ms * 9223372036854776ull) + 0x7fffffff) >> 31;
2015 return (sb);
2016}
2017static __inline void
2018bintime2timespec(const struct bintime *_bt, struct timespec *_ts)
2019{
2020 _ts->tv_sec = _bt->sec;
2021 _ts->tv_nsec = ((uint64_t)1000000000 *
2022 (uint32_t)(_bt->frac >> 32)) >> 32;
2023}
2024static __inline void
2025timespec2bintime(const struct timespec *_ts, struct bintime *_bt)
2026{
2027 _bt->sec = _ts->tv_sec;
2028 _bt->frac = _ts->tv_nsec * (uint64_t)18446744073LL;
2029}
2030static __inline void
2031bintime2timeval(const struct bintime *_bt, struct timeval *_tv)
2032{
2033 _tv->tv_sec = _bt->sec;
2034 _tv->tv_usec = ((uint64_t)1000000 * (uint32_t)(_bt->frac >> 32)) >> 32;
2035}
2036static __inline void
2037timeval2bintime(const struct timeval *_tv, struct bintime *_bt)
2038{
2039 _bt->sec = _tv->tv_sec;
2040 _bt->frac = _tv->tv_usec * (uint64_t)18446744073709LL;
2041}
2042static __inline struct timespec
2043sbttots(sbintime_t _sbt)
2044{
2045 struct timespec _ts;
2046 _ts.tv_sec = _sbt >> 32;
2047 _ts.tv_nsec = sbttons((uint32_t)_sbt);
2048 return (_ts);
2049}
2050static __inline sbintime_t
2051tstosbt(struct timespec _ts)
2052{
2053 return (((sbintime_t)_ts.tv_sec << 32) + nstosbt(_ts.tv_nsec));
2054}
2055static __inline struct timeval
2056sbttotv(sbintime_t _sbt)
2057{
2058 struct timeval _tv;
2059 _tv.tv_sec = _sbt >> 32;
2060 _tv.tv_usec = sbttous((uint32_t)_sbt);
2061 return (_tv);
2062}
2063static __inline sbintime_t
2064tvtosbt(struct timeval _tv)
2065{
2066 return (((sbintime_t)_tv.tv_sec << 32) + ustosbt(_tv.tv_usec));
2067}
2069 struct timeval it_interval;
2070 struct timeval it_value;
2071};
2072
2073int utimes (const char *, const struct timeval [2]);
2074int adjtime (const struct timeval *, struct timeval *);
2075int futimes (int, const struct timeval [2]);
2076int lutimes (const char *, const struct timeval [2]);
2077int settimeofday (const struct timeval *, const struct timezone *);
2078int getitimer (int __which, struct itimerval *__value);
2079int setitimer (int __which, const struct itimerval *__restrict__ __value,
2080 struct itimerval *__restrict__ __ovalue);
2081int gettimeofday (struct timeval *__restrict__ __p,
2082 void *__restrict__ __tz);
2083int futimesat (int, const char *, const struct timeval [2]);
2084
2085
2086typedef union
2087{
2088 double value;
2089 struct
2090 {
2091 unsigned int fraction1:32;
2092 unsigned int fraction0:20;
2093 unsigned int exponent :11;
2094 unsigned int sign : 1;
2095 } number;
2096 struct
2097 {
2098 unsigned int function1:32;
2099 unsigned int function0:19;
2100 unsigned int quiet:1;
2101 unsigned int exponent: 11;
2102 unsigned int sign : 1;
2103 } nan;
2104 struct
2105 {
2106 unsigned long lsw;
2107 unsigned long msw;
2108 } parts;
2109 long aslong[2];
2111typedef union
2112{
2113 float value;
2114 struct
2115 {
2116 unsigned int fraction0: 7;
2117 unsigned int fraction1: 16;
2118 unsigned int exponent: 8;
2119 unsigned int sign : 1;
2120 } number;
2121 struct
2122 {
2123 unsigned int function1:16;
2124 unsigned int function0:6;
2125 unsigned int quiet:1;
2126 unsigned int exponent:8;
2127 unsigned int sign:1;
2128 } nan;
2129 long p1;
2131typedef struct ieee_ext
2132{
2133 unsigned int ext_fracl : 32;
2134 unsigned int ext_frach : 32;
2135 unsigned int ext_exp : 15;
2136 unsigned int ext_sign : 1;
2137} ieee_ext;
2138typedef union ieee_ext_u
2139{
2140 long double extu_ld;
2141 struct ieee_ext extu_ext;
2142} ieee_ext_u;
2143typedef int fp_rnd;
2144fp_rnd fpgetround (void);
2145fp_rnd fpsetround (fp_rnd);
2146typedef int fp_except;
2147fp_except fpgetmask (void);
2148fp_except fpsetmask (fp_except);
2149fp_except fpgetsticky (void);
2150fp_except fpsetsticky (fp_except);
2151typedef int fp_rdi;
2152fp_rdi fpgetroundtoi (void);
2153fp_rdi fpsetroundtoi (fp_rdi);
2154
2155
2156
2157__attribute__((__format__(__printf__, 1, 2)))
2158extern void setproctitle(const char *fmt, ...);
2159
2160
2161void __assert (const char *, int, const char *)
2162 __attribute__ ((__noreturn__));
2163void __assert_func (const char *, int, const char *, const char *)
2164 __attribute__ ((__noreturn__));
2165typedef unsigned long VALUE;
2166typedef unsigned long ID;
2167__extension__ _Static_assert(4 == sizeof(int), "sizeof_int" ": " "SIZEOF_INT == sizeof(int)");
2168__extension__ _Static_assert(8 == sizeof(long), "sizeof_long" ": " "SIZEOF_LONG == sizeof(long)");
2169__extension__ _Static_assert(8 == sizeof(long long), "sizeof_long_long" ": " "SIZEOF_LONG_LONG == sizeof(LONG_LONG)");
2170__extension__ _Static_assert(8 == sizeof(void *), "sizeof_voidp" ": " "SIZEOF_VOIDP == sizeof(void *)");
2171
2172
2173VALUE rb_class_new(VALUE super);
2174VALUE rb_mod_init_copy(VALUE clone, VALUE orig);
2175void rb_check_inheritable(VALUE super);
2176VALUE rb_define_class_id(ID id, VALUE super);
2177VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super);
2178VALUE rb_module_new(void);
2179VALUE rb_refinement_new(void);
2180VALUE rb_define_module_id(ID id);
2181VALUE rb_define_module_id_under(VALUE outer, ID id);
2182VALUE rb_mod_included_modules(VALUE mod);
2183VALUE rb_mod_include_p(VALUE child, VALUE parent);
2184VALUE rb_mod_ancestors(VALUE mod);
2185VALUE rb_class_descendants(VALUE klass);
2186VALUE rb_class_subclasses(VALUE klass);
2187VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod);
2188VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod);
2189VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod);
2190VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod);
2191VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj);
2192void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(), int arity);
2193void rb_undef(VALUE mod, ID mid);
2194__attribute__((__nonnull__ ()))
2195void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2196__attribute__((__nonnull__ ()))
2197void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2198__attribute__((__nonnull__ ()))
2199void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(), int arity);
2200VALUE rb_singleton_class(VALUE obj);
2201
2202
2203
2204
2205int rb_sourceline(void);
2206const char *rb_sourcefile(void);
2207int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);
2208VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv);
2209VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
2210VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat);
2211VALUE rb_apply(VALUE recv, ID mid, VALUE args);
2212VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv);
2213VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv);
2214VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod);
2215VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod);
2216typedef VALUE (*rb_alloc_func_t)(VALUE klass);
2217void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func);
2218void rb_undef_alloc_func(VALUE klass);
2220void rb_clear_constant_cache(void);
2221void rb_alias(VALUE klass, ID dst, ID src);
2222void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility);
2223__attribute__((__nonnull__ ()))
2224void rb_remove_method(VALUE klass, const char *name);
2225void rb_remove_method_id(VALUE klass, ID mid);
2226int rb_method_boundp(VALUE klass, ID id, int ex);
2227int rb_method_basic_definition_p(VALUE klass, ID mid);
2228int rb_obj_respond_to(VALUE obj, ID mid, int private_p);
2229int rb_respond_to(VALUE obj, ID mid);
2230__attribute__((__noreturn__))
2231VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker);
2232void rb_backtrace(void);
2233VALUE rb_make_backtrace(void);
2234
2235
2236
2237
2238__attribute__((__nonnull__ ()))
2239void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2240__attribute__((__nonnull__ ()))
2241void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2242__attribute__((__nonnull__ ()))
2243void rb_define_global_function(const char *mid, VALUE (*func)(), int arity);
2244__attribute__((__nonnull__ ()))
2245void rb_undef_method(VALUE klass, const char *name);
2246__attribute__((__nonnull__ ()))
2247void rb_define_alias(VALUE klass, const char *dst, const char *src);
2248__attribute__((__nonnull__ ()))
2249void rb_define_attr(VALUE klass, const char *name, int read, int write);
2250
2251
2252
2253
2254VALUE rb_int2big(intptr_t i);
2255VALUE rb_int2inum(intptr_t i);
2256VALUE rb_uint2big(uintptr_t i);
2257VALUE rb_uint2inum(uintptr_t i);
2258
2259
2260enum
2261
2262ruby_special_consts {
2263 RUBY_Qfalse = 0x00,
2264 RUBY_Qtrue = 0x14,
2265 RUBY_Qnil = 0x08,
2266 RUBY_Qundef = 0x34,
2267 RUBY_IMMEDIATE_MASK = 0x07,
2268 RUBY_FIXNUM_FLAG = 0x01,
2269 RUBY_FLONUM_MASK = 0x03,
2270 RUBY_FLONUM_FLAG = 0x02,
2271 RUBY_SYMBOL_FLAG = 0x0c,
2273};
2274__attribute__((__const__))
2275
2276__attribute__((__artificial__))
2277static inline _Bool
2278RB_TEST(VALUE obj)
2279{
2280 return obj & ~RUBY_Qnil;
2281}
2282__attribute__((__const__))
2283
2284__attribute__((__artificial__))
2285static inline _Bool
2286RB_NIL_P(VALUE obj)
2287{
2288 return obj == RUBY_Qnil;
2289}
2290__attribute__((__const__))
2291
2292__attribute__((__artificial__))
2293static inline _Bool
2294RB_FIXNUM_P(VALUE obj)
2295{
2296 return obj & RUBY_FIXNUM_FLAG;
2297}
2298__attribute__((__const__))
2299
2300__attribute__((__artificial__))
2301static inline _Bool
2302RB_STATIC_SYM_P(VALUE obj)
2303{
2304
2305 const VALUE mask = ~((0x7fffffffffffffffL * 2UL + 1) << RUBY_SPECIAL_SHIFT);
2306 return (obj & mask) == RUBY_SYMBOL_FLAG;
2307}
2308__attribute__((__const__))
2309
2310__attribute__((__artificial__))
2311static inline _Bool
2312RB_FLONUM_P(VALUE obj)
2313{
2314 return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG;
2315}
2316__attribute__((__const__))
2317
2318__attribute__((__artificial__))
2319static inline _Bool
2320RB_IMMEDIATE_P(VALUE obj)
2321{
2322 return obj & RUBY_IMMEDIATE_MASK;
2323}
2324__attribute__((__const__))
2325
2326__attribute__((__artificial__))
2327static inline _Bool
2328RB_SPECIAL_CONST_P(VALUE obj)
2329{
2330 return RB_IMMEDIATE_P(obj) || ! RB_TEST(obj);
2331}
2332__attribute__((__const__))
2333
2334static inline VALUE
2335rb_special_const_p(VALUE obj)
2336{
2337 return RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue;
2338}
2339
2340
2341__attribute__((__noreturn__))
2342__attribute__((__cold__))
2343void rb_out_of_int(long num);
2344long rb_num2long(VALUE num);
2345unsigned long rb_num2ulong(VALUE num);
2346
2347
2348__attribute__((__const__))
2349
2350__attribute__((__artificial__))
2351static inline VALUE
2352RB_INT2FIX(long i)
2353{
2354 ((void)0);
2355 const unsigned long j = i;
2356 const unsigned long k = 2 * j + RUBY_FIXNUM_FLAG;
2357 const long l = k;
2358 const long m = l;
2359 const VALUE n = m;
2360 ((void)0);
2361 return n;
2362}
2363static inline int
2364rb_long2int_inline(long n)
2365{
2366 int i = ((int)n);
2367 if (sizeof(long) <= sizeof(int)) {
2368 ((__builtin_expect(!!(!!(i == n)), 1)) ? ((void)0) : __builtin_unreachable());
2369 }
2370 if (i != n)
2371 rb_out_of_int(n);
2372 return i;
2373}
2374__attribute__((__const__))
2375
2376static inline long
2377rbimpl_fix2long_by_idiv(VALUE x)
2378{
2379 ((void)0);
2380 const long y = x - RUBY_FIXNUM_FLAG;
2381 const long z = y / 2;
2382 const long w = ((long)z);
2383 ((void)0);
2384 return w;
2385}
2386__attribute__((__const__))
2387
2388static inline long
2389rbimpl_fix2long_by_shift(VALUE x)
2390{
2391 ((void)0);
2392 const long y = x;
2393 const long z = y >> 1;
2394 const long w = ((long)z);
2395 ((void)0);
2396 return w;
2397}
2398__attribute__((__const__))
2399
2400static inline _Bool
2401rbimpl_right_shift_is_arithmetic_p(void)
2402{
2403 return (-1 >> 1) == -1;
2404}
2405__attribute__((__const__))
2406
2407static inline long
2408rb_fix2long(VALUE x)
2409{
2410 if (rbimpl_right_shift_is_arithmetic_p()) {
2411 return rbimpl_fix2long_by_shift(x);
2412 }
2413 else {
2414 return rbimpl_fix2long_by_idiv(x);
2415 }
2416}
2417__attribute__((__const__))
2418
2419static inline unsigned long
2420rb_fix2ulong(VALUE x)
2421{
2422 ((void)0);
2423 return rb_fix2long(x);
2424}
2425static inline long
2426rb_num2long_inline(VALUE x)
2427{
2428 if (RB_FIXNUM_P(x))
2429 return rb_fix2long(x);
2430 else
2431 return rb_num2long(x);
2432}
2433static inline unsigned long
2434rb_num2ulong_inline(VALUE x)
2435{
2436 if (RB_FIXNUM_P(x))
2437 return rb_fix2ulong(x);
2438 else
2439 return rb_num2ulong(x);
2440}
2441static inline VALUE
2442rb_long2num_inline(long v)
2443{
2444 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2445 return RB_INT2FIX(v);
2446 else
2447 return rb_int2big(v);
2448}
2449static inline VALUE
2450rb_ulong2num_inline(unsigned long v)
2451{
2452 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2453 return RB_INT2FIX(v);
2454 else
2455 return rb_uint2big(v);
2456}
2457
2458
2459long rb_num2int(VALUE num);
2460long rb_fix2int(VALUE num);
2461unsigned long rb_num2uint(VALUE num);
2462unsigned long rb_fix2uint(VALUE num);
2463
2464
2465__attribute__((__artificial__))
2466static inline int
2467RB_FIX2INT(VALUE x)
2468{
2469 long ret;
2470 if (sizeof(int) < sizeof(long)) {
2471 ret = rb_fix2int(x);
2472 }
2473 else {
2474 ret = rb_fix2long(x);
2475 }
2476 return ((int)ret);
2477}
2478static inline int
2479rb_num2int_inline(VALUE x)
2480{
2481 long ret;
2482 if (sizeof(int) == sizeof(long)) {
2483 ret = rb_num2long_inline(x);
2484 }
2485 else if (RB_FIXNUM_P(x)) {
2486 ret = rb_fix2int(x);
2487 }
2488 else {
2489 ret = rb_num2int(x);
2490 }
2491 return ((int)ret);
2492}
2493__attribute__((__artificial__))
2494static inline unsigned int
2495RB_NUM2UINT(VALUE x)
2496{
2497 unsigned long ret;
2498 if (sizeof(int) < sizeof(long)) {
2499 ret = rb_num2uint(x);
2500 }
2501 else {
2502 ret = rb_num2ulong_inline(x);
2503 }
2504 return ((unsigned int)ret);
2505}
2506__attribute__((__artificial__))
2507static inline unsigned int
2508RB_FIX2UINT(VALUE x)
2509{
2510 unsigned long ret;
2511 if (sizeof(int) < sizeof(long)) {
2512 ret = rb_fix2uint(x);
2513 }
2514 else {
2515 ret = rb_fix2ulong(x);
2516 }
2517 return ((unsigned int)ret);
2518}
2519
2520
2521
2522
2523static inline VALUE
2524rb_int2num_inline(int v)
2525{
2526 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2527 return RB_INT2FIX(v);
2528 else
2529 return rb_int2big(v);
2530}
2531static inline VALUE
2532rb_uint2num_inline(unsigned int v)
2533{
2534 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2535 return RB_INT2FIX(v);
2536 else
2537 return rb_uint2big(v);
2538}
2539
2540
2541enum ruby_rvalue_flags {
2543};
2544struct
2545__attribute__((__aligned__(8)))
2546RBasic {
2547 VALUE flags;
2548 const VALUE klass;
2549};
2550
2551
2552VALUE rb_obj_hide(VALUE obj);
2553VALUE rb_obj_reveal(VALUE obj, VALUE klass);
2554
2555
2556__attribute__((__pure__))
2557__attribute__((__artificial__))
2558static inline VALUE
2559RBASIC_CLASS(VALUE obj)
2560{
2561 ((void)0);
2562 return ((struct RBasic *)(obj))->klass;
2563}
2564typedef enum {
2568 RB_WARN_CATEGORY_ALL_BITS = 0x6
2570enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
2571
2572
2573VALUE rb_errinfo(void);
2574void rb_set_errinfo(VALUE err);
2575__attribute__((__noreturn__))
2576__attribute__((__nonnull__ (2)))
2577__attribute__((__format__(__printf__, 2, 3)))
2578void rb_raise(VALUE exc, const char *fmt, ...);
2579__attribute__((__noreturn__))
2580__attribute__((__nonnull__ (1)))
2581__attribute__((__format__(__printf__, 1, 2)))
2582void rb_fatal(const char *fmt, ...);
2583__attribute__((__cold__))
2584__attribute__((__noreturn__))
2585__attribute__((__nonnull__ (1)))
2586__attribute__((__format__(__printf__, 1, 2)))
2587void rb_bug(const char *fmt, ...);
2588__attribute__((__noreturn__))
2589__attribute__((__nonnull__ ()))
2590void rb_bug_errno(const char *msg, int err);
2591__attribute__((__noreturn__))
2592void rb_sys_fail(const char *msg);
2593__attribute__((__noreturn__))
2594void rb_sys_fail_str(VALUE msg);
2595__attribute__((__noreturn__))
2596__attribute__((__nonnull__ (2)))
2597void rb_mod_sys_fail(VALUE mod, const char *msg);
2598__attribute__((__noreturn__))
2599void rb_mod_sys_fail_str(VALUE mod, VALUE msg);
2600__attribute__((__noreturn__))
2601void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg);
2602__attribute__((__noreturn__))
2603void rb_iter_break(void);
2604__attribute__((__noreturn__))
2605void rb_iter_break_value(VALUE val);
2606__attribute__((__noreturn__))
2607void rb_exit(int status);
2608__attribute__((__noreturn__))
2609void rb_notimplement(void);
2610VALUE rb_syserr_new(int err, const char * msg);
2611VALUE rb_syserr_new_str(int n, VALUE arg);
2612__attribute__((__noreturn__))
2613void rb_syserr_fail(int err, const char *msg);
2614__attribute__((__noreturn__))
2615void rb_syserr_fail_str(int err, VALUE msg);
2616__attribute__((__noreturn__))
2617__attribute__((__nonnull__ ()))
2618void rb_mod_syserr_fail(VALUE mod, int err, const char *msg);
2619__attribute__((__noreturn__))
2620void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg);
2621__attribute__((__noreturn__))
2622void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg);
2623__attribute__((__cold__))
2624__attribute__((__noreturn__))
2625void rb_unexpected_type(VALUE self, int t);
2626VALUE *rb_ruby_verbose_ptr(void);
2627VALUE *rb_ruby_debug_ptr(void);
2628__attribute__((__nonnull__ (1)))
2629__attribute__((__format__(__printf__, 1, 2)))
2630void rb_warning(const char *fmt, ...);
2631__attribute__((__nonnull__ (2)))
2632__attribute__((__format__(__printf__, 2, 3)))
2633void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...);
2634__attribute__((__nonnull__ (1, 3)))
2635__attribute__((__format__(__printf__, 3, 4)))
2636void rb_compile_warning(const char *file, int line, const char *fmt, ...);
2637__attribute__((__nonnull__ (1)))
2638__attribute__((__format__(__printf__, 1, 2)))
2639void rb_sys_warning(const char *fmt, ...);
2640__attribute__((__cold__))
2641__attribute__((__nonnull__ (1)))
2642__attribute__((__format__(__printf__, 1, 2)))
2643void rb_warn(const char *fmt, ...);
2644__attribute__((__cold__))
2645__attribute__((__nonnull__ (2)))
2646__attribute__((__format__(__printf__, 2, 3)))
2647void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...);
2648__attribute__((__nonnull__ (1, 3)))
2649__attribute__((__format__(__printf__, 3, 4)))
2650void rb_compile_warn(const char *file, int line, const char *fmt, ...);
2651__attribute__((__nonnull__ (2, 4)))
2652__attribute__((__format__(__printf__, 4, 5)))
2653void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...);
2654
2655
2656enum
2657
2658ruby_value_type {
2659 RUBY_T_NONE = 0x00,
2660 RUBY_T_OBJECT = 0x01,
2661 RUBY_T_CLASS = 0x02,
2662 RUBY_T_MODULE = 0x03,
2663 RUBY_T_FLOAT = 0x04,
2664 RUBY_T_STRING = 0x05,
2665 RUBY_T_REGEXP = 0x06,
2666 RUBY_T_ARRAY = 0x07,
2667 RUBY_T_HASH = 0x08,
2668 RUBY_T_STRUCT = 0x09,
2669 RUBY_T_BIGNUM = 0x0a,
2670 RUBY_T_FILE = 0x0b,
2671 RUBY_T_DATA = 0x0c,
2672 RUBY_T_MATCH = 0x0d,
2673 RUBY_T_COMPLEX = 0x0e,
2674 RUBY_T_RATIONAL = 0x0f,
2675 RUBY_T_NIL = 0x11,
2676 RUBY_T_TRUE = 0x12,
2677 RUBY_T_FALSE = 0x13,
2678 RUBY_T_SYMBOL = 0x14,
2679 RUBY_T_FIXNUM = 0x15,
2680 RUBY_T_UNDEF = 0x16,
2681 RUBY_T_IMEMO = 0x1a,
2682 RUBY_T_NODE = 0x1b,
2683 RUBY_T_ICLASS = 0x1c,
2684 RUBY_T_ZOMBIE = 0x1d,
2685 RUBY_T_MOVED = 0x1e,
2686 RUBY_T_MASK = 0x1f
2687};
2688
2689
2690__attribute__((__cold__))
2691void rb_check_type(VALUE obj, int t);
2692
2693
2694__attribute__((__pure__))
2695__attribute__((__artificial__))
2696static inline enum ruby_value_type
2697RB_BUILTIN_TYPE(VALUE obj)
2698{
2699 ((void)0);
2700 VALUE ret = ((struct RBasic *)(obj))->flags & RUBY_T_MASK;
2701 return ((enum ruby_value_type)ret);
2702}
2703__attribute__((__pure__))
2704static inline _Bool
2705rb_integer_type_p(VALUE obj)
2706{
2707 if (RB_FIXNUM_P(obj)) {
2708 return 1;
2709 }
2710 else if (RB_SPECIAL_CONST_P(obj)) {
2711 return 0;
2712 }
2713 else {
2714 return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM;
2715 }
2716}
2717__attribute__((__pure__))
2718static inline enum ruby_value_type
2719rb_type(VALUE obj)
2720{
2721 if (! RB_SPECIAL_CONST_P(obj)) {
2722 return RB_BUILTIN_TYPE(obj);
2723 }
2724 else if (obj == ((VALUE)RUBY_Qfalse)) {
2725 return RUBY_T_FALSE;
2726 }
2727 else if (obj == ((VALUE)RUBY_Qnil)) {
2728 return RUBY_T_NIL;
2729 }
2730 else if (obj == ((VALUE)RUBY_Qtrue)) {
2731 return RUBY_T_TRUE;
2732 }
2733 else if (obj == ((VALUE)RUBY_Qundef)) {
2734 return RUBY_T_UNDEF;
2735 }
2736 else if (RB_FIXNUM_P(obj)) {
2737 return RUBY_T_FIXNUM;
2738 }
2739 else if (RB_STATIC_SYM_P(obj)) {
2740 return RUBY_T_SYMBOL;
2741 }
2742 else {
2743 ((__builtin_expect(!!(!!(RB_FLONUM_P(obj))), 1)) ? ((void)0) : __builtin_unreachable());
2744 return RUBY_T_FLOAT;
2745 }
2746}
2747__attribute__((__pure__))
2748__attribute__((__artificial__))
2749static inline _Bool
2750RB_FLOAT_TYPE_P(VALUE obj)
2751{
2752 if (RB_FLONUM_P(obj)) {
2753 return 1;
2754 }
2755 else if (RB_SPECIAL_CONST_P(obj)) {
2756 return 0;
2757 }
2758 else {
2759 return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT;
2760 }
2761}
2762__attribute__((__pure__))
2763__attribute__((__artificial__))
2764static inline _Bool
2765RB_DYNAMIC_SYM_P(VALUE obj)
2766{
2767 if (RB_SPECIAL_CONST_P(obj)) {
2768 return 0;
2769 }
2770 else {
2771 return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL;
2772 }
2773}
2774__attribute__((__pure__))
2775__attribute__((__artificial__))
2776static inline _Bool
2777RB_SYMBOL_P(VALUE obj)
2778{
2779 return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj);
2780}
2781__attribute__((__pure__))
2782__attribute__((__artificial__))
2783__attribute__((__always_inline__)) inline
2784static _Bool
2785rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t)
2786{
2787 if (t == RUBY_T_TRUE) {
2788 return obj == ((VALUE)RUBY_Qtrue);
2789 }
2790 else if (t == RUBY_T_FALSE) {
2791 return obj == ((VALUE)RUBY_Qfalse);
2792 }
2793 else if (t == RUBY_T_NIL) {
2794 return obj == ((VALUE)RUBY_Qnil);
2795 }
2796 else if (t == RUBY_T_UNDEF) {
2797 return obj == ((VALUE)RUBY_Qundef);
2798 }
2799 else if (t == RUBY_T_FIXNUM) {
2800 return RB_FIXNUM_P(obj);
2801 }
2802 else if (t == RUBY_T_SYMBOL) {
2803 return RB_SYMBOL_P(obj);
2804 }
2805 else if (t == RUBY_T_FLOAT) {
2806 return RB_FLOAT_TYPE_P(obj);
2807 }
2808 else if (RB_SPECIAL_CONST_P(obj)) {
2809 return 0;
2810 }
2811 else if (t == RB_BUILTIN_TYPE(obj)) {
2812 return 1;
2813 }
2814 else {
2815 return 0;
2816 }
2817}
2818__attribute__((__pure__))
2819__attribute__((__artificial__))
2820static inline _Bool
2821RB_TYPE_P(VALUE obj, enum ruby_value_type t)
2822{
2823 if (__builtin_constant_p(t)) {
2824 return rbimpl_RB_TYPE_P_fastpath(obj, t);
2825 }
2826 else {
2827 return t == rb_type(obj);
2828 }
2829}
2830__attribute__((__pure__))
2831__attribute__((__artificial__))
2832static inline _Bool rbimpl_rtypeddata_p(VALUE obj);
2833__attribute__((__artificial__))
2834static inline void
2835Check_Type(VALUE v, enum ruby_value_type t)
2836{
2837 if ((__builtin_expect(!!(! RB_TYPE_P(v, t)), 0))) {
2838 goto unexpected_type;
2839 }
2840 else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) {
2841 goto unexpected_type;
2842 }
2843 else {
2844 return;
2845 }
2846 unexpected_type:
2847 rb_unexpected_type(v, t);
2848}
2849enum ruby_fl_ushift {
2850 RUBY_FL_USHIFT = 12
2851};
2852__extension__
2853enum
2854
2855ruby_fl_type {
2856 RUBY_FL_WB_PROTECTED = (1<<5),
2857 RUBY_FL_PROMOTED0 = (1<<5),
2858 RUBY_FL_PROMOTED1 = (1<<6),
2860 RUBY_FL_FINALIZE = (1<<7),
2862 __attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
2863 = (1<<8),
2864 RUBY_FL_SHAREABLE = (1<<8),
2866 __attribute__((__deprecated__ ("trustedness turned out to be a wrong idea.")))
2867 = (1<<8),
2868 RUBY_FL_SEEN_OBJ_ID = (1<<9),
2869 RUBY_FL_EXIVAR = (1<<10),
2870 RUBY_FL_FREEZE = (1<<11),
2871 RUBY_FL_USER0 = (1<<(RUBY_FL_USHIFT+0)),
2872 RUBY_FL_USER1 = (1<<(RUBY_FL_USHIFT+1)),
2873 RUBY_FL_USER2 = (1<<(RUBY_FL_USHIFT+2)),
2874 RUBY_FL_USER3 = (1<<(RUBY_FL_USHIFT+3)),
2875 RUBY_FL_USER4 = (1<<(RUBY_FL_USHIFT+4)),
2876 RUBY_FL_USER5 = (1<<(RUBY_FL_USHIFT+5)),
2877 RUBY_FL_USER6 = (1<<(RUBY_FL_USHIFT+6)),
2878 RUBY_FL_USER7 = (1<<(RUBY_FL_USHIFT+7)),
2879 RUBY_FL_USER8 = (1<<(RUBY_FL_USHIFT+8)),
2880 RUBY_FL_USER9 = (1<<(RUBY_FL_USHIFT+9)),
2881 RUBY_FL_USER10 = (1<<(RUBY_FL_USHIFT+10)),
2882 RUBY_FL_USER11 = (1<<(RUBY_FL_USHIFT+11)),
2883 RUBY_FL_USER12 = (1<<(RUBY_FL_USHIFT+12)),
2884 RUBY_FL_USER13 = (1<<(RUBY_FL_USHIFT+13)),
2885 RUBY_FL_USER14 = (1<<(RUBY_FL_USHIFT+14)),
2886 RUBY_FL_USER15 = (1<<(RUBY_FL_USHIFT+15)),
2887 RUBY_FL_USER16 = (1<<(RUBY_FL_USHIFT+16)),
2888 RUBY_FL_USER17 = (1<<(RUBY_FL_USHIFT+17)),
2889 RUBY_FL_USER18 = (1<<(RUBY_FL_USHIFT+18)),
2890 RUBY_FL_USER19 = (1<<(RUBY_FL_USHIFT+19)),
2893};
2894enum {
2896 __attribute__((__deprecated__ ("It seems there is no actual usage of this enum.")))
2897 = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR
2898};
2899
2900
2901void rb_obj_infect(VALUE victim, VALUE carrier);
2902void rb_freeze_singleton_class(VALUE klass);
2903
2904
2905__attribute__((__pure__))
2906__attribute__((__artificial__))
2907__attribute__((__always_inline__)) inline
2908static _Bool
2909RB_FL_ABLE(VALUE obj)
2910{
2911 if (RB_SPECIAL_CONST_P(obj)) {
2912 return 0;
2913 }
2914 else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
2915 return 0;
2916 }
2917 else {
2918 return 1;
2919 }
2920}
2921__attribute__((__pure__))
2922__attribute__((__artificial__))
2923static inline VALUE
2924RB_FL_TEST_RAW(VALUE obj, VALUE flags)
2925{
2926 ((void)0);
2927 return ((struct RBasic *)(obj))->flags & flags;
2928}
2929__attribute__((__pure__))
2930__attribute__((__artificial__))
2931static inline VALUE
2932RB_FL_TEST(VALUE obj, VALUE flags)
2933{
2934 if (RB_FL_ABLE(obj)) {
2935 return RB_FL_TEST_RAW(obj, flags);
2936 }
2937 else {
2938 return 0UL;
2939 }
2940}
2941__attribute__((__pure__))
2942__attribute__((__artificial__))
2943static inline _Bool
2944RB_FL_ANY_RAW(VALUE obj, VALUE flags)
2945{
2946 return RB_FL_TEST_RAW(obj, flags);
2947}
2948__attribute__((__pure__))
2949__attribute__((__artificial__))
2950static inline _Bool
2951RB_FL_ANY(VALUE obj, VALUE flags)
2952{
2953 return RB_FL_TEST(obj, flags);
2954}
2955__attribute__((__pure__))
2956__attribute__((__artificial__))
2957static inline _Bool
2958RB_FL_ALL_RAW(VALUE obj, VALUE flags)
2959{
2960 return RB_FL_TEST_RAW(obj, flags) == flags;
2961}
2962__attribute__((__pure__))
2963__attribute__((__artificial__))
2964static inline _Bool
2965RB_FL_ALL(VALUE obj, VALUE flags)
2966{
2967 return RB_FL_TEST(obj, flags) == flags;
2968}
2969
2970__attribute__((__artificial__))
2971static inline void
2972rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
2973{
2974 obj->flags |= flags;
2975}
2976__attribute__((__artificial__))
2977static inline void
2978RB_FL_SET_RAW(VALUE obj, VALUE flags)
2979{
2980 ((void)0);
2981 rbimpl_fl_set_raw_raw(((struct RBasic *)(obj)), flags);
2982}
2983__attribute__((__artificial__))
2984static inline void
2985RB_FL_SET(VALUE obj, VALUE flags)
2986{
2987 if (RB_FL_ABLE(obj)) {
2988 RB_FL_SET_RAW(obj, flags);
2989 }
2990}
2991
2992__attribute__((__artificial__))
2993static inline void
2994rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
2995{
2996 obj->flags &= ~flags;
2997}
2998__attribute__((__artificial__))
2999static inline void
3000RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
3001{
3002 ((void)0);
3003 rbimpl_fl_unset_raw_raw(((struct RBasic *)(obj)), flags);
3004}
3005__attribute__((__artificial__))
3006static inline void
3007RB_FL_UNSET(VALUE obj, VALUE flags)
3008{
3009 if (RB_FL_ABLE(obj)) {
3010 RB_FL_UNSET_RAW(obj, flags);
3011 }
3012}
3013
3014__attribute__((__artificial__))
3015static inline void
3016rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
3017{
3018 obj->flags ^= flags;
3019}
3020__attribute__((__artificial__))
3021static inline void
3022RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
3023{
3024 ((void)0);
3025 rbimpl_fl_reverse_raw_raw(((struct RBasic *)(obj)), flags);
3026}
3027__attribute__((__artificial__))
3028static inline void
3029RB_FL_REVERSE(VALUE obj, VALUE flags)
3030{
3031 if (RB_FL_ABLE(obj)) {
3033 }
3034}
3035__attribute__((__pure__))
3036__attribute__((__artificial__))
3037__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3038static inline _Bool
3039RB_OBJ_TAINTABLE(VALUE obj)
3040{
3041 return 0;
3042}
3043__attribute__((__pure__))
3044__attribute__((__artificial__))
3045__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3046static inline VALUE
3047RB_OBJ_TAINTED_RAW(VALUE obj)
3048{
3049 return 0;
3050}
3051__attribute__((__pure__))
3052__attribute__((__artificial__))
3053__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3054static inline _Bool
3055RB_OBJ_TAINTED(VALUE obj)
3056{
3057 return 0;
3058}
3059__attribute__((__artificial__))
3060__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3061static inline void
3062RB_OBJ_TAINT_RAW(VALUE obj)
3063{
3064 return;
3065}
3066__attribute__((__artificial__))
3067__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3068static inline void
3069RB_OBJ_TAINT(VALUE obj)
3070{
3071 return;
3072}
3073__attribute__((__artificial__))
3074__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3075static inline void
3076RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
3077{
3078 return;
3079}
3080__attribute__((__artificial__))
3081__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3082static inline void
3083RB_OBJ_INFECT(VALUE dst, VALUE src)
3084{
3085 return;
3086}
3087__attribute__((__pure__))
3088__attribute__((__artificial__))
3089static inline VALUE
3090RB_OBJ_FROZEN_RAW(VALUE obj)
3091{
3092 return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
3093}
3094__attribute__((__pure__))
3095__attribute__((__artificial__))
3096static inline _Bool
3097RB_OBJ_FROZEN(VALUE obj)
3098{
3099 if (! RB_FL_ABLE(obj)) {
3100 return 1;
3101 }
3102 else {
3103 return RB_OBJ_FROZEN_RAW(obj);
3104 }
3105}
3106__attribute__((__artificial__))
3107static inline void
3108RB_OBJ_FREEZE_RAW(VALUE obj)
3109{
3111}
3112static inline void
3113rb_obj_freeze_inline(VALUE x)
3114{
3115 if (RB_FL_ABLE(x)) {
3117 if (RBASIC_CLASS(x) && !(((struct RBasic *)(x))->flags & RUBY_FL_SINGLETON)) {
3118 rb_freeze_singleton_class(x);
3119 }
3120 }
3121}
3122enum ruby_rstring_flags {
3123 RSTRING_NOEMBED = RUBY_FL_USER1,
3124 RSTRING_EMBED_LEN_MASK = RUBY_FL_USER2 | RUBY_FL_USER3 | RUBY_FL_USER4 |
3126 RSTRING_FSTR = RUBY_FL_USER17
3127};
3128enum ruby_rstring_consts {
3130 RSTRING_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(char)))) - 1
3131};
3132struct RString {
3134 union {
3135 struct {
3136 long len;
3137 char *ptr;
3138 union {
3139 long capa;
3140 VALUE shared;
3141 } aux;
3142 } heap;
3143 struct {
3145 } embed;
3146 } as;
3147};
3148
3149
3150VALUE rb_str_to_str(VALUE obj);
3151VALUE rb_string_value(volatile VALUE *ptr);
3152char *rb_string_value_ptr(volatile VALUE *ptr);
3153char *rb_string_value_cstr(volatile VALUE *ptr);
3154VALUE rb_str_export(VALUE obj);
3155VALUE rb_str_export_locale(VALUE obj);
3156__attribute__((__error__ ("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead")))
3157void rb_check_safe_str(VALUE);
3158void rb_debug_rstring_null_ptr(const char *func);
3159
3160
3161__attribute__((__pure__))
3162__attribute__((__artificial__))
3163static inline long
3164RSTRING_EMBED_LEN(VALUE str)
3165{
3166 ((void)0);
3167 ((void)0);
3168 VALUE f = ((struct RBasic *)(str))->flags;
3169 f &= RSTRING_EMBED_LEN_MASK;
3171 return ((long)f);
3172}
3173
3174
3175__attribute__((__pure__))
3176__attribute__((__artificial__))
3177static inline struct RString
3178rbimpl_rstring_getmem(VALUE str)
3179{
3180 ((void)0);
3181 if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) {
3182 return *((struct RString *)(str));
3183 }
3184 else {
3185 struct RString retval;
3186 retval.as.heap.len = RSTRING_EMBED_LEN(str);
3187 retval.as.heap.ptr = ((struct RString *)(str))->as.embed.ary;
3188 return retval;
3189 }
3190}
3191
3192
3193__attribute__((__pure__))
3194__attribute__((__artificial__))
3195static inline long
3196RSTRING_LEN(VALUE str)
3197{
3198 return rbimpl_rstring_getmem(str).as.heap.len;
3199}
3200__attribute__((__artificial__))
3201static inline char *
3202RSTRING_PTR(VALUE str)
3203{
3204 char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr;
3205 if ((__builtin_expect(!!(! ptr), 0))) {
3206 rb_debug_rstring_null_ptr("RSTRING_PTR");
3207 }
3208 return ptr;
3209}
3210__attribute__((__artificial__))
3211static inline char *
3212RSTRING_END(VALUE str)
3213{
3214 struct RString buf = rbimpl_rstring_getmem(str);
3215 if ((__builtin_expect(!!(! buf.as.heap.ptr), 0))) {
3216 rb_debug_rstring_null_ptr("RSTRING_END");
3217 }
3218 return &buf.as.heap.ptr[buf.as.heap.len];
3219}
3220__attribute__((__artificial__))
3221static inline int
3222RSTRING_LENINT(VALUE str)
3223{
3224 return rb_long2int_inline(RSTRING_LEN(str));
3225}
3226__attribute__((__const__))
3227
3228__attribute__((__artificial__))
3229static inline VALUE
3230RB_CHR2FIX(unsigned char c)
3231{
3232 return RB_INT2FIX(c);
3233}
3234static inline char
3235rb_num2char_inline(VALUE x)
3236{
3237 if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
3238 return RSTRING_PTR(x)[0];
3239 else
3240 return ((char)rb_num2int_inline(x));
3241}
3242
3243
3244double rb_num2dbl(VALUE num);
3245__attribute__((__pure__))
3246double rb_float_value(VALUE num);
3247VALUE rb_float_new(double d);
3248VALUE rb_float_new_in_heap(double d);
3249
3250
3251
3252
3253VALUE rb_ll2inum(long long num);
3254VALUE rb_ull2inum(unsigned long long num);
3255long long rb_num2ll(VALUE num);
3256unsigned long long rb_num2ull(VALUE num);
3257
3258
3259static inline VALUE
3260rb_ll2num_inline(long long n)
3261{
3262 if ((((n) < (0x7fffffffffffffffL / 2) + 1) && ((n) >= ((-0x7fffffffffffffffL -1L) / 2)))) return RB_INT2FIX((long)n);
3263 return rb_ll2inum(n);
3264}
3265static inline VALUE
3266rb_ull2num_inline(unsigned long long n)
3267{
3268 if (((n) < (0x7fffffffffffffffL / 2) + 1)) return RB_INT2FIX((long)n);
3269 return rb_ull2inum(n);
3270}
3271static inline long long
3272rb_num2ll_inline(VALUE x)
3273{
3274 if (RB_FIXNUM_P(x))
3275 return rb_fix2long(x);
3276 else
3277 return rb_num2ll(x);
3278}
3279static inline unsigned long long
3280rb_num2ull_inline(VALUE x)
3281{
3282 if (RB_FIXNUM_P(x))
3283 return rb_fix2long(x);
3284 else
3285 return rb_num2ull(x);
3286}
3287
3288
3289short rb_num2short(VALUE num);
3290unsigned short rb_num2ushort(VALUE num);
3291short rb_fix2short(VALUE num);
3292unsigned short rb_fix2ushort(VALUE num);
3293
3294
3295static inline short
3296rb_num2short_inline(VALUE x)
3297{
3298 if (RB_FIXNUM_P(x))
3299 return rb_fix2short(x);
3300 else
3301 return rb_num2short(x);
3302}
3303
3304
3305typedef unsigned long st_data_t;
3306typedef struct st_table st_table;
3307typedef st_data_t st_index_t;
3308typedef int st_compare_func(st_data_t, st_data_t);
3309typedef st_index_t st_hash_func(st_data_t);
3310typedef char st_check_for_sizeof_st_index_t[8 == (int)sizeof(st_index_t) ? 1 : -1];
3312 int (*compare)(st_data_t, st_data_t);
3313 st_index_t (*hash)(st_data_t);
3314};
3315typedef struct st_table_entry st_table_entry;
3316struct st_table_entry;
3317struct st_table {
3318 unsigned char entry_power, bin_power, size_ind;
3319 unsigned int rebuilds_num;
3320 const struct st_hash_type *type;
3321 st_index_t num_entries;
3322 st_index_t *bins;
3323 st_index_t entries_start, entries_bound;
3324 st_table_entry *entries;
3325};
3326enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE};
3327st_table *rb_st_init_table(const struct st_hash_type *);
3328st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t);
3329st_table *rb_st_init_numtable(void);
3330st_table *rb_st_init_numtable_with_size(st_index_t);
3331st_table *rb_st_init_strtable(void);
3332st_table *rb_st_init_strtable_with_size(st_index_t);
3333st_table *rb_st_init_strcasetable(void);
3334st_table *rb_st_init_strcasetable_with_size(st_index_t);
3335int rb_st_delete(st_table *, st_data_t *, st_data_t *);
3336int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
3337int rb_st_shift(st_table *, st_data_t *, st_data_t *);
3338int rb_st_insert(st_table *, st_data_t, st_data_t);
3339int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
3340int rb_st_lookup(st_table *, st_data_t, st_data_t *);
3341int rb_st_get_key(st_table *, st_data_t, st_data_t *);
3342typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
3343int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
3344typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t);
3345typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int);
3346int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
3347int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t);
3348int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t);
3349st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size);
3350st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
3351st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size);
3352st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
3353void rb_st_add_direct(st_table *, st_data_t, st_data_t);
3354void rb_st_free_table(st_table *);
3355void rb_st_cleanup_safe(st_table *, st_data_t);
3356void rb_st_clear(st_table *);
3357st_table *rb_st_copy(st_table *);
3358__attribute__((__const__)) int rb_st_numcmp(st_data_t, st_data_t);
3359__attribute__((__const__)) st_index_t rb_st_numhash(st_data_t);
3360__attribute__((__pure__)) int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3361__attribute__((__pure__)) int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3362__attribute__((__pure__)) size_t rb_st_memsize(const st_table *);
3363__attribute__((__pure__)) st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h);
3364__attribute__((__const__)) st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i);
3365__attribute__((__const__)) st_index_t rb_st_hash_uint(st_index_t h, st_index_t i);
3366__attribute__((__const__)) st_index_t rb_st_hash_end(st_index_t h);
3367__attribute__((__const__)) st_index_t rb_st_hash_start(st_index_t h);
3368void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE);
3369
3370
3371__attribute__((__const__))
3372
3373__attribute__((__artificial__))
3374static inline VALUE
3375RB_ST2FIX(st_data_t i)
3376{
3377 long x = i;
3378 if (x >= 0) {
3379 x &= (0x7fffffffffffffffL / 2);
3380 }
3381 else {
3382 x |= ((-0x7fffffffffffffffL -1L) / 2);
3383 }
3384 ((void)0);
3385 unsigned long y = ((unsigned long)x);
3386 return RB_INT2FIX(y);
3387}
3388
3389
3390void rb_gc_writebarrier(VALUE old, VALUE young);
3391void rb_gc_writebarrier_unprotect(VALUE obj);
3392
3393
3394__attribute__((__pure__))
3395__attribute__((__artificial__))
3396static inline _Bool
3397RB_OBJ_PROMOTED_RAW(VALUE obj)
3398{
3399 ((void)0);
3400 return RB_FL_ANY_RAW(obj, RUBY_FL_PROMOTED);
3401}
3402__attribute__((__pure__))
3403__attribute__((__artificial__))
3404static inline _Bool
3405RB_OBJ_PROMOTED(VALUE obj)
3406{
3407 if (! RB_FL_ABLE(obj)) {
3408 return 0;
3409 }
3410 else {
3411 return RB_OBJ_PROMOTED_RAW(obj);
3412 }
3413}
3414static inline VALUE
3416 VALUE x,
3417 [[maybe_unused]]
3418 const char *filename,
3419 [[maybe_unused]]
3420 int line)
3421{
3423 return x;
3424}
3425static inline VALUE
3426rb_obj_written(
3427 VALUE a,
3428 [[maybe_unused]]
3429 VALUE oldv,
3430 VALUE b,
3431 [[maybe_unused]]
3432 const char *filename,
3433 [[maybe_unused]]
3434 int line)
3435{
3436 if (!RB_SPECIAL_CONST_P(b)) {
3437 rb_gc_writebarrier(a, b);
3438 }
3439 return a;
3440}
3441static inline VALUE
3442rb_obj_write(
3443 VALUE a, VALUE *slot, VALUE b,
3444 [[maybe_unused]]
3445 const char *filename,
3446 [[maybe_unused]]
3447 int line)
3448{
3449 *slot = b;
3450 rb_obj_written(a, ((VALUE)RUBY_Qundef) , b, filename, line);
3451 return a;
3452}
3453enum ruby_rarray_flags {
3454 RARRAY_EMBED_FLAG = RUBY_FL_USER1,
3455 RARRAY_EMBED_LEN_MASK = RUBY_FL_USER4 | RUBY_FL_USER3
3456 ,
3457 RARRAY_TRANSIENT_FLAG = RUBY_FL_USER13
3458};
3459enum ruby_rarray_consts {
3461 RARRAY_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(VALUE))))
3462};
3463struct RArray {
3465 union {
3466 struct {
3467 long len;
3468 union {
3469 long capa;
3470 const
3472 } aux;
3473 const VALUE *ptr;
3474 } heap;
3476 } as;
3477};
3478
3479
3480VALUE *rb_ary_ptr_use_start(VALUE ary);
3481void rb_ary_ptr_use_end(VALUE a);
3482void rb_ary_detransient(VALUE a);
3483
3484
3485__attribute__((__pure__))
3486__attribute__((__artificial__))
3487static inline long
3488RARRAY_EMBED_LEN(VALUE ary)
3489{
3490 ((void)0);
3491 ((void)0);
3492 VALUE f = ((struct RBasic *)(ary))->flags;
3493 f &= RARRAY_EMBED_LEN_MASK;
3495 return ((long)f);
3496}
3497__attribute__((__pure__))
3498static inline long
3499rb_array_len(VALUE a)
3500{
3501 ((void)0);
3502 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3503 return RARRAY_EMBED_LEN(a);
3504 }
3505 else {
3506 return ((struct RArray *)(a))->as.heap.len;
3507 }
3508}
3509__attribute__((__artificial__))
3510static inline int
3511RARRAY_LENINT(VALUE ary)
3512{
3513 return rb_long2int_inline(rb_array_len(ary));
3514}
3515__attribute__((__pure__))
3516__attribute__((__artificial__))
3517static inline _Bool
3518RARRAY_TRANSIENT_P(VALUE ary)
3519{
3520 ((void)0);
3521 return RB_FL_ANY_RAW(ary, RARRAY_TRANSIENT_FLAG);
3522}
3523__attribute__((__pure__))
3524static inline const VALUE *
3525rb_array_const_ptr_transient(VALUE a)
3526{
3527 ((void)0);
3528 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3529 return (((struct RArray *)(a))->as.ary);
3530 }
3531 else {
3532 return (((struct RArray *)(a))->as.heap.ptr);
3533 }
3534}
3535static inline const VALUE *
3536rb_array_const_ptr(VALUE a)
3537{
3538 ((void)0);
3539 if (RARRAY_TRANSIENT_P(a)) {
3541 }
3542 return rb_array_const_ptr_transient(a);
3543}
3544static inline VALUE *
3545rb_array_ptr_use_start(VALUE a,
3546 [[maybe_unused]]
3547 int allow_transient)
3548{
3549 ((void)0);
3550 if (!allow_transient) {
3551 if (RARRAY_TRANSIENT_P(a)) {
3553 }
3554 }
3555 return rb_ary_ptr_use_start(a);
3556}
3557static inline void
3558rb_array_ptr_use_end(VALUE a,
3559 [[maybe_unused]]
3560 int allow_transient)
3561{
3562 ((void)0);
3563 rb_ary_ptr_use_end(a);
3564}
3565static inline VALUE *
3566RARRAY_PTR(VALUE ary)
3567{
3568 ((void)0);
3569 VALUE tmp = (1 ? rb_obj_wb_unprotect(ary, "../ruby-3.1.3/include/ruby/internal/core/rarray.h", 555) : ary);
3570 return ((VALUE *)rb_array_const_ptr(tmp));
3571}
3572static inline void
3573RARRAY_ASET(VALUE ary, long i, VALUE v)
3574{
3575 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);
3576}
3577
3578
3579int rb_big_sign(VALUE num);
3580
3581
3582static inline _Bool
3583RBIGNUM_POSITIVE_P(VALUE b)
3584{
3585 ((void)0);
3586 return rb_big_sign(b);
3587}
3588static inline _Bool
3589RBIGNUM_NEGATIVE_P(VALUE b)
3590{
3591 ((void)0);
3592 return ! RBIGNUM_POSITIVE_P(b);
3593}
3594enum ruby_rmodule_flags {
3595 RMODULE_IS_OVERLAID = RUBY_FL_USER2,
3596 RMODULE_IS_REFINEMENT = RUBY_FL_USER3,
3597 RMODULE_INCLUDED_INTO_REFINEMENT = RUBY_FL_USER4
3598};
3599struct RClass;
3600
3601
3602VALUE rb_class_get_superclass(VALUE klass);
3603
3604
3605typedef void (*RUBY_DATA_FUNC)(void*);
3606struct RData {
3610 void *data;
3611};
3612
3613
3614VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3615VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3616extern VALUE rb_cObject;
3617
3618
3619__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3620static inline VALUE
3621rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free)
3622{
3623 return rb_data_object_wrap(klass, ptr, mark, free);
3624}
3625static inline void *
3626rb_data_object_get(VALUE obj)
3627{
3628 Check_Type(obj, RUBY_T_DATA);
3629 return ((struct RData *)(obj))->data;
3630}
3631__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3632static inline void *
3633rb_data_object_get_warning(VALUE obj)
3634{
3635 return rb_data_object_get(obj);
3636}
3637static inline VALUE
3638rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
3639{
3640 VALUE result = rb_data_object_zalloc( (klass), (size), ((void (*)(void *))(mark_func)), ((void (*)(void *))(free_func))); (*datap) = ((void *)((struct RData *)(result))->data); ((void)(*datap));
3641 return result;
3642}
3643__attribute__((__deprecated__ ("by: rb_data_object_wrap")))
3644static inline VALUE
3645rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
3646{
3647 return rb_data_object_wrap(klass, data, dmark, dfree);
3648}
3649__attribute__((__deprecated__ ("by: rb_cObject. Will be removed in 3.1.")))
3650__attribute__((__pure__))
3651static inline VALUE
3652rb_cData(void)
3653{
3654 return rb_cObject;
3655}
3656struct rb_io_t;
3657struct RFile {
3659 struct rb_io_t *fptr;
3660};
3661struct st_table;
3662
3663
3664size_t rb_hash_size_num(VALUE hash);
3665struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line);
3666VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone);
3667
3668
3669enum ruby_robject_flags {
3670 ROBJECT_EMBED = RUBY_FL_USER1
3671};
3672enum ruby_robject_consts {
3673 ROBJECT_EMBED_LEN_MAX = ((int)(sizeof(VALUE[3]) / (sizeof(VALUE))))
3674};
3675struct st_table;
3676struct RObject {
3678 union {
3679 struct {
3680 uint32_t numiv;
3681 VALUE *ivptr;
3683 } heap;
3685 } as;
3686};
3687__attribute__((__pure__))
3688__attribute__((__artificial__))
3689static inline uint32_t
3690ROBJECT_NUMIV(VALUE obj)
3691{
3692 ((void)0);
3693 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
3694 return ROBJECT_EMBED_LEN_MAX;
3695 }
3696 else {
3697 return ((struct RObject *)(obj))->as.heap.numiv;
3698 }
3699}
3700__attribute__((__pure__))
3701__attribute__((__artificial__))
3702static inline VALUE *
3703ROBJECT_IVPTR(VALUE obj)
3704{
3705 ((void)0);
3706 struct RObject *const ptr = ((struct RObject *)(obj));
3707 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
3708 return ptr->as.ary;
3709 }
3710 else {
3711 return ptr->as.heap.ivptr;
3712 }
3713}
3714struct re_patter_buffer;
3715struct RRegexp {
3718 const VALUE src;
3719 unsigned long usecnt;
3720};
3721__attribute__((__pure__))
3722__attribute__((__artificial__))
3723static inline VALUE
3724RREGEXP_SRC(VALUE rexp)
3725{
3726 ((void)0);
3727 VALUE ret = ((struct RRegexp *)(rexp))->src;
3728 ((void)0);
3729 return ret;
3730}
3731__attribute__((__pure__))
3732__attribute__((__artificial__))
3733static inline char *
3734RREGEXP_SRC_PTR(VALUE rexp)
3735{
3736 return RSTRING_PTR(RREGEXP_SRC(rexp));
3737}
3738__attribute__((__pure__))
3739__attribute__((__artificial__))
3740static inline long
3741RREGEXP_SRC_LEN(VALUE rexp)
3742{
3743 return RSTRING_LEN(RREGEXP_SRC(rexp));
3744}
3745__attribute__((__pure__))
3746__attribute__((__artificial__))
3747static inline char *
3748RREGEXP_SRC_END(VALUE rexp)
3749{
3750 return RSTRING_END(RREGEXP_SRC(rexp));
3751}
3752
3753
3754VALUE rb_struct_size(VALUE st);
3755VALUE rb_struct_aref(VALUE st, VALUE k);
3756VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v);
3757
3758
3759__attribute__((__artificial__))
3760static inline long
3761RSTRUCT_LEN(VALUE st)
3762{
3763 ((void)0);
3765}
3766__attribute__((__artificial__))
3767static inline VALUE
3768RSTRUCT_SET(VALUE st, int k, VALUE v)
3769{
3770 ((void)0);
3771 return rb_struct_aset(st, rb_int2num_inline(k), (v));
3772}
3773__attribute__((__artificial__))
3774static inline VALUE
3775RSTRUCT_GET(VALUE st, int k)
3776{
3777 ((void)0);
3778 return rb_struct_aref(st, rb_int2num_inline(k));
3779}
3780enum
3781
3782rbimpl_typeddata_flags {
3783 RUBY_TYPED_FREE_IMMEDIATELY = 1,
3784 RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE,
3785 RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED,
3786 RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1
3787};
3788typedef struct rb_data_type_struct rb_data_type_t;
3790 const char *wrap_struct_name;
3791 struct {
3794 size_t (*dsize)(const void *);
3796 void *reserved[1];
3797 } function;
3799 void *data;
3800 VALUE flags;
3801};
3806 void *data;
3807};
3808
3809
3810__attribute__((__nonnull__ (3)))
3811VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type);
3812VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);
3813int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);
3814int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);
3815void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
3816
3817
3818__attribute__((__pure__))
3819__attribute__((__artificial__))
3820static inline _Bool
3821rbimpl_rtypeddata_p(VALUE obj)
3822{
3823 return ((struct RTypedData *)(obj))->typed_flag == 1;
3824}
3825__attribute__((__pure__))
3826__attribute__((__artificial__))
3827static inline _Bool
3828RTYPEDDATA_P(VALUE obj)
3829{
3830 return rbimpl_rtypeddata_p(obj);
3831}
3832__attribute__((__pure__))
3833__attribute__((__artificial__))
3834static inline const struct rb_data_type_struct *
3835RTYPEDDATA_TYPE(VALUE obj)
3836{
3837 return ((struct RTypedData *)(obj))->type;
3838}
3839static inline VALUE
3840rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
3841{
3842 VALUE result = rb_data_typed_object_zalloc(klass, size, type); (*datap) = ((void *)(((struct RTypedData *)(result))->data)); ((void)(*datap));
3843 return result;
3844}
3845__attribute__((__deprecated__ ("by: rb_data_typed_object_wrap")))
3846static inline VALUE
3847rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
3848{
3849 return rb_data_typed_object_wrap(klass, datap, type);
3850}
3851
3852int isalnum (int __c);
3853int isalpha (int __c);
3854int iscntrl (int __c);
3855int isdigit (int __c);
3856int isgraph (int __c);
3857int islower (int __c);
3858int isprint (int __c);
3859int ispunct (int __c);
3860int isspace (int __c);
3861int isupper (int __c);
3862int isxdigit (int __c);
3863int tolower (int __c);
3864int toupper (int __c);
3865int isblank (int __c);
3866int isascii (int __c);
3867int toascii (int __c);
3868extern int isalnum_l (int __c, locale_t __l);
3869extern int isalpha_l (int __c, locale_t __l);
3870extern int isblank_l (int __c, locale_t __l);
3871extern int iscntrl_l (int __c, locale_t __l);
3872extern int isdigit_l (int __c, locale_t __l);
3873extern int isgraph_l (int __c, locale_t __l);
3874extern int islower_l (int __c, locale_t __l);
3875extern int isprint_l (int __c, locale_t __l);
3876extern int ispunct_l (int __c, locale_t __l);
3877extern int isspace_l (int __c, locale_t __l);
3878extern int isupper_l (int __c, locale_t __l);
3879extern int isxdigit_l(int __c, locale_t __l);
3880extern int tolower_l (int __c, locale_t __l);
3881extern int toupper_l (int __c, locale_t __l);
3882extern int isascii_l (int __c, locale_t __l);
3883extern int toascii_l (int __c, locale_t __l);
3884extern __attribute__((dllimport)) const char _ctype_[];
3885const char *__locale_ctype_ptr (void);
3886const char *__locale_ctype_ptr_l (locale_t);
3887
3888
3889
3890__attribute__((__nonnull__ ()))
3891int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3892__attribute__((__nonnull__ ()))
3893int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3894__attribute__((__nonnull__ (1)))
3895unsigned long ruby_strtoul(const char *str, char **endptr, int base);
3896
3897
3898__attribute__((__const__))
3899
3900__attribute__((__artificial__))
3901static inline int
3902rb_isascii(int c)
3903{
3904 return '\0' <= c && c <= '\x7f';
3905}
3906__attribute__((__const__))
3907
3908__attribute__((__artificial__))
3909static inline int
3910rb_isupper(int c)
3911{
3912 return 'A' <= c && c <= 'Z';
3913}
3914__attribute__((__const__))
3915
3916__attribute__((__artificial__))
3917static inline int
3918rb_islower(int c)
3919{
3920 return 'a' <= c && c <= 'z';
3921}
3922__attribute__((__const__))
3923
3924__attribute__((__artificial__))
3925static inline int
3926rb_isalpha(int c)
3927{
3928 return rb_isupper(c) || rb_islower(c);
3929}
3930__attribute__((__const__))
3931
3932__attribute__((__artificial__))
3933static inline int
3934rb_isdigit(int c)
3935{
3936 return '0' <= c && c <= '9';
3937}
3938__attribute__((__const__))
3939
3940__attribute__((__artificial__))
3941static inline int
3942rb_isalnum(int c)
3943{
3944 return rb_isalpha(c) || rb_isdigit(c);
3945}
3946__attribute__((__const__))
3947
3948__attribute__((__artificial__))
3949static inline int
3950rb_isxdigit(int c)
3951{
3952 return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
3953}
3954__attribute__((__const__))
3955
3956__attribute__((__artificial__))
3957static inline int
3958rb_isblank(int c)
3959{
3960 return c == ' ' || c == '\t';
3961}
3962__attribute__((__const__))
3963
3964__attribute__((__artificial__))
3965static inline int
3966rb_isspace(int c)
3967{
3968 return c == ' ' || ('\t' <= c && c <= '\r');
3969}
3970__attribute__((__const__))
3971
3972__attribute__((__artificial__))
3973static inline int
3974rb_iscntrl(int c)
3975{
3976 return ('\0' <= c && c < ' ') || c == '\x7f';
3977}
3978__attribute__((__const__))
3979
3980__attribute__((__artificial__))
3981static inline int
3982rb_isprint(int c)
3983{
3984 return ' ' <= c && c <= '\x7e';
3985}
3986__attribute__((__const__))
3987
3988__attribute__((__artificial__))
3989static inline int
3990rb_ispunct(int c)
3991{
3992 return !rb_isalnum(c);
3993}
3994__attribute__((__const__))
3995
3996__attribute__((__artificial__))
3997static inline int
3998rb_isgraph(int c)
3999{
4000 return '!' <= c && c <= '\x7e';
4001}
4002__attribute__((__const__))
4003
4004__attribute__((__artificial__))
4005static inline int
4006rb_tolower(int c)
4007{
4008 return rb_isupper(c) ? (c|0x20) : c;
4009}
4010__attribute__((__const__))
4011
4012__attribute__((__artificial__))
4013static inline int
4014rb_toupper(int c)
4015{
4016 return rb_islower(c) ? (c&0x5f) : c;
4017}
4018
4019
4020__attribute__((__nonnull__ ()))
4021VALUE rb_eval_string(const char *str);
4022__attribute__((__nonnull__ (1)))
4023VALUE rb_eval_string_protect(const char *str, int *state);
4024__attribute__((__nonnull__ (1)))
4025VALUE rb_eval_string_wrap(const char *str, int *state);
4026VALUE rb_funcall(VALUE recv, ID mid, int n, ...);
4027VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv);
4028VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4029VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv);
4030VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4031VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv);
4032VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4033VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval);
4034VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat);
4035VALUE rb_call_super(int argc, const VALUE *argv);
4036VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat);
4037VALUE rb_current_receiver(void);
4038__attribute__((__nonnull__ (2)))
4039int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values);
4040__attribute__((__nonnull__ ()))
4041VALUE rb_extract_keywords(VALUE *orighash);
4042
4043
4044typedef uint32_t rb_event_flag_t;
4045typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);
4046
4047
4048void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
4050
4051
4052
4053
4054void rb_gc_register_address(VALUE *valptr);
4055void rb_global_variable(VALUE *);
4056void rb_gc_unregister_address(VALUE *valptr);
4057void rb_gc_register_mark_object(VALUE object);
4058
4059
4060
4061
4062typedef int ruby_glob_func(const char *path, VALUE arg, void *enc);
4063__attribute__((__nonnull__ ()))
4064void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg);
4065__attribute__((__nonnull__ ()))
4066int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4067__attribute__((__nonnull__ ()))
4068int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4069
4070
4071
4072
4073extern VALUE rb_mKernel;
4074extern VALUE rb_mComparable;
4075extern VALUE rb_mEnumerable;
4076extern VALUE rb_mErrno;
4077extern VALUE rb_mFileTest;
4078extern VALUE rb_mGC;
4079extern VALUE rb_mMath;
4080extern VALUE rb_mProcess;
4081extern VALUE rb_mWaitReadable;
4082extern VALUE rb_mWaitWritable;
4083extern VALUE rb_cBasicObject;
4084extern VALUE rb_cObject;
4085extern VALUE rb_cArray;
4086extern VALUE rb_cBinding;
4087extern VALUE rb_cClass;
4088extern VALUE rb_cDir;
4089extern VALUE rb_cEncoding;
4090extern VALUE rb_cEnumerator;
4091extern VALUE rb_cFalseClass;
4092extern VALUE rb_cFile;
4093extern VALUE rb_cComplex;
4094extern VALUE rb_cFloat;
4095extern VALUE rb_cHash;
4096extern VALUE rb_cIO;
4097extern VALUE rb_cInteger;
4098extern VALUE rb_cMatch;
4099extern VALUE rb_cMethod;
4100extern VALUE rb_cModule;
4101extern VALUE rb_cRefinement;
4102extern VALUE rb_cNameErrorMesg;
4103extern VALUE rb_cNilClass;
4104extern VALUE rb_cNumeric;
4105extern VALUE rb_cProc;
4106extern VALUE rb_cRandom;
4107extern VALUE rb_cRange;
4108extern VALUE rb_cRational;
4109extern VALUE rb_cRegexp;
4110extern VALUE rb_cStat;
4111extern VALUE rb_cString;
4112extern VALUE rb_cStruct;
4113extern VALUE rb_cSymbol;
4114extern VALUE rb_cThread;
4115extern VALUE rb_cTime;
4116extern VALUE rb_cTrueClass;
4117extern VALUE rb_cUnboundMethod;
4118extern VALUE rb_eException;
4119extern VALUE rb_eStandardError;
4120extern VALUE rb_eSystemExit;
4121extern VALUE rb_eInterrupt;
4122extern VALUE rb_eSignal;
4123extern VALUE rb_eFatal;
4124extern VALUE rb_eArgError;
4125extern VALUE rb_eEOFError;
4126extern VALUE rb_eIndexError;
4127extern VALUE rb_eStopIteration;
4128extern VALUE rb_eKeyError;
4129extern VALUE rb_eRangeError;
4130extern VALUE rb_eIOError;
4131extern VALUE rb_eRuntimeError;
4132extern VALUE rb_eFrozenError;
4133extern VALUE rb_eSecurityError;
4134extern VALUE rb_eSystemCallError;
4135extern VALUE rb_eThreadError;
4136extern VALUE rb_eTypeError;
4137extern VALUE rb_eZeroDivError;
4138extern VALUE rb_eNotImpError;
4139extern VALUE rb_eNoMemError;
4140extern VALUE rb_eNoMethodError;
4141extern VALUE rb_eFloatDomainError;
4142extern VALUE rb_eLocalJumpError;
4143extern VALUE rb_eSysStackError;
4144extern VALUE rb_eRegexpError;
4145extern VALUE rb_eEncodingError;
4146extern VALUE rb_eEncCompatError;
4147extern VALUE rb_eNoMatchingPatternError;
4148extern VALUE rb_eNoMatchingPatternKeyError;
4149extern VALUE rb_eScriptError;
4150extern VALUE rb_eNameError;
4151extern VALUE rb_eSyntaxError;
4152extern VALUE rb_eLoadError;
4153extern VALUE rb_eMathDomainError;
4154extern VALUE rb_stdin;
4155extern VALUE rb_stdout;
4156extern VALUE rb_stderr;
4157__attribute__((__pure__))
4158static inline VALUE
4159rb_class_of(VALUE obj)
4160{
4161 if (! RB_SPECIAL_CONST_P(obj)) {
4162 return RBASIC_CLASS(obj);
4163 }
4164 else if (obj == ((VALUE)RUBY_Qfalse)) {
4165 return rb_cFalseClass;
4166 }
4167 else if (obj == ((VALUE)RUBY_Qnil)) {
4168 return rb_cNilClass;
4169 }
4170 else if (obj == ((VALUE)RUBY_Qtrue)) {
4171 return rb_cTrueClass;
4172 }
4173 else if (RB_FIXNUM_P(obj)) {
4174 return rb_cInteger;
4175 }
4176 else if (RB_STATIC_SYM_P(obj)) {
4177 return rb_cSymbol;
4178 }
4179 else if (RB_FLONUM_P(obj)) {
4180 return rb_cFloat;
4181 }
4182 __builtin_unreachable();
4183}
4184
4185
4186
4187
4188__attribute__((__nonnull__ ()))
4189void ruby_sysinit(int *argc, char ***argv);
4190void ruby_init(void);
4191void* ruby_options(int argc, char** argv);
4192int ruby_executable_node(void *n, int *status);
4193int ruby_run_node(void *n);
4194void ruby_show_version(void);
4195void ruby_show_copyright(void);
4196void ruby_init_stack(volatile VALUE *addr);
4197int ruby_setup(void);
4198int ruby_cleanup(int ex);
4199void ruby_finalize(void);
4200__attribute__((__noreturn__))
4201void ruby_stop(int);
4202int ruby_stack_check(void);
4203size_t ruby_stack_length(VALUE **topnotch);
4204int ruby_exec_node(void *n);
4205void ruby_script(const char* name);
4206void ruby_set_script_name(VALUE name);
4207void ruby_prog_init(void);
4208void ruby_set_argv(int argc, char **argv);
4209void *ruby_process_options(int argc, char **argv);
4210void ruby_init_loadpath(void);
4211void ruby_incpush(const char *path);
4212void ruby_sig_finalize(void);
4213
4214
4215
4216
4217typedef VALUE rb_block_call_func(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4218typedef rb_block_call_func *rb_block_call_func_t;
4219VALUE rb_each(VALUE obj);
4220VALUE rb_yield(VALUE val);
4221VALUE rb_yield_values(int n, ...);
4222VALUE rb_yield_values2(int n, const VALUE *argv);
4223VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat);
4224VALUE rb_yield_splat(VALUE ary);
4225VALUE rb_yield_splat_kw(VALUE ary, int kw_splat);
4226VALUE rb_yield_block(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4227int rb_keyword_given_p(void);
4228int rb_block_given_p(void);
4229void rb_need_block(void);
4230__attribute__((__deprecated__ ("by: rb_block_call since 1.9")))
4231VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);
4232VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2);
4233VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat);
4234VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);
4235VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...);
4236VALUE rb_vrescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, va_list ap);
4237VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
4238VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data);
4239VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data);
4240__attribute__((__noreturn__))
4241void rb_throw(const char *tag, VALUE val);
4242__attribute__((__noreturn__))
4243void rb_throw_obj(VALUE tag, VALUE val);
4244
4245
4247 _Bool left;
4248 size_t right;
4249};
4250
4251
4252__attribute__((__malloc__))
4253__attribute__((__returns_nonnull__))
4254__attribute__((__alloc_size__ (2)))
4255__attribute__((__nonnull__ ()))
4256void *rb_alloc_tmp_buffer(volatile VALUE *store, long len);
4257__attribute__((__malloc__))
4258__attribute__((__returns_nonnull__))
4259__attribute__((__alloc_size__ (2,3)))
4260__attribute__((__nonnull__ ()))
4261void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count);
4262void rb_free_tmp_buffer(volatile VALUE *store);
4263__attribute__((__noreturn__))
4264void ruby_malloc_size_overflow(size_t x, size_t y);
4265
4266
4267static inline int
4268rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
4269{
4270 __extension__ unsigned __int128 da, db, c2;
4271 da = a;
4272 db = b;
4273 c2 = da * db;
4274 if (c2 > max) return 1;
4275 *c = ((size_t)c2);
4276 return 0;
4277}
4278
4279__attribute__((__const__))
4280static inline struct rbimpl_size_mul_overflow_tag
4281rbimpl_size_mul_overflow(size_t x, size_t y)
4282{
4283 struct rbimpl_size_mul_overflow_tag ret = { 0, 0, };
4284 ret.left = __builtin_mul_overflow(x, y, &ret.right);
4285 return ret;
4286}
4287static inline size_t
4288rbimpl_size_mul_or_raise(size_t x, size_t y)
4289{
4290 struct rbimpl_size_mul_overflow_tag size =
4291 rbimpl_size_mul_overflow(x, y);
4292 if ((__builtin_expect(!!(! size.left), 1))) {
4293 return size.right;
4294 }
4295 else {
4296 ruby_malloc_size_overflow(x, y);
4297 __builtin_unreachable();
4298 }
4299}
4300static inline void *
4301rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
4302{
4303 const size_t total_size = rbimpl_size_mul_or_raise(count, elsize);
4304 const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
4305 return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
4306}
4307
4308
4309
4310__attribute__((__nonnull__ (1)))
4311__attribute__((__returns_nonnull__))
4312static inline void *
4313ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
4314{
4315 if (n) {
4316 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));
4317 }
4318 else {
4319 return dest;
4320 }
4321}
4322
4323
4324
4325
4326__attribute__((__nonnull__ ()))
4327VALUE rb_define_class(const char *name, VALUE super);
4328__attribute__((__nonnull__ ()))
4329VALUE rb_define_module(const char *name);
4330__attribute__((__nonnull__ ()))
4331VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super);
4332__attribute__((__nonnull__ ()))
4333VALUE rb_define_module_under(VALUE outer, const char *name);
4334void rb_include_module(VALUE klass, VALUE module);
4335void rb_extend_object(VALUE obj, VALUE mod);
4336void rb_prepend_module(VALUE klass, VALUE module);
4337
4338
4339
4340
4341VALUE rb_newobj(void);
4342VALUE rb_newobj_of(VALUE klass, VALUE flags);
4343VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);
4344VALUE rb_obj_class(VALUE obj);
4345VALUE rb_singleton_class_clone(VALUE obj);
4346void rb_singleton_class_attached(VALUE klass, VALUE obj);
4347void rb_copy_generic_ivar(VALUE clone, VALUE obj);
4348
4349
4350__attribute__((__deprecated__ ("This is no longer how Object#clone works.")))
4351static inline void
4352rb_clone_setup(VALUE clone, VALUE obj)
4353{
4354 return;
4355}
4356__attribute__((__deprecated__ ("This is no longer how Object#dup works.")))
4357static inline void
4358rb_dup_setup(VALUE dup, VALUE obj)
4359{
4360 return;
4361}
4362
4363
4364__attribute__((__nonnull__ ()))
4365
4366void rb_mem_clear(VALUE *buf, long len)
4367
4368 ;
4369VALUE rb_assoc_new(VALUE car, VALUE cdr);
4370VALUE rb_check_array_type(VALUE obj);
4371VALUE rb_ary_new(void);
4372VALUE rb_ary_new_capa(long capa);
4373VALUE rb_ary_new_from_args(long n, ...);
4374VALUE rb_ary_new_from_values(long n, const VALUE *elts);
4375VALUE rb_ary_tmp_new(long capa);
4376void rb_ary_free(VALUE ary);
4377void rb_ary_modify(VALUE ary);
4378VALUE rb_ary_freeze(VALUE obj);
4379__attribute__((__pure__))
4380VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs);
4381VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary);
4382VALUE rb_ary_subseq(VALUE ary, long beg, long len);
4383void rb_ary_store(VALUE ary, long key, VALUE val);
4384VALUE rb_ary_dup(VALUE ary);
4385VALUE rb_ary_resurrect(VALUE ary);
4386VALUE rb_ary_to_ary(VALUE obj);
4387VALUE rb_ary_to_s(VALUE ary);
4388VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len);
4389VALUE rb_ary_push(VALUE ary, VALUE elem);
4390VALUE rb_ary_pop(VALUE ary);
4391VALUE rb_ary_shift(VALUE ary);
4392VALUE rb_ary_unshift(VALUE ary, VALUE elem);
4393__attribute__((__pure__))
4394VALUE rb_ary_entry(VALUE ary, long off);
4395VALUE rb_ary_each(VALUE ary);
4396VALUE rb_ary_join(VALUE ary, VALUE sep);
4397VALUE rb_ary_reverse(VALUE ary);
4398VALUE rb_ary_rotate(VALUE ary, long rot);
4399VALUE rb_ary_sort(VALUE ary);
4400VALUE rb_ary_sort_bang(VALUE ary);
4401VALUE rb_ary_delete(VALUE ary, VALUE elem);
4402VALUE rb_ary_delete_at(VALUE ary, long pos);
4403VALUE rb_ary_clear(VALUE ary);
4404VALUE rb_ary_plus(VALUE lhs, VALUE rhs);
4405VALUE rb_ary_concat(VALUE lhs, VALUE rhs);
4406VALUE rb_ary_assoc(VALUE alist, VALUE key);
4407VALUE rb_ary_rassoc(VALUE alist, VALUE key);
4408VALUE rb_ary_includes(VALUE ary, VALUE elem);
4409VALUE rb_ary_cmp(VALUE lhs, VALUE rhs);
4410VALUE rb_ary_replace(VALUE copy, VALUE orig);
4411VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx));
4412VALUE rb_ary_resize(VALUE ary, long len);
4413
4414
4415
4416
4417VALUE rb_exc_new(VALUE etype, const char *ptr, long len);
4418__attribute__((__nonnull__ ()))
4419VALUE rb_exc_new_cstr(VALUE etype, const char *str);
4420VALUE rb_exc_new_str(VALUE etype, VALUE str);
4421__attribute__((__noreturn__))
4422__attribute__((__nonnull__ (1)))
4423__attribute__((__format__(__printf__, 1, 2)))
4424void rb_loaderror(const char *fmt, ...);
4425__attribute__((__noreturn__))
4426__attribute__((__nonnull__ (2)))
4427__attribute__((__format__(__printf__, 2, 3)))
4428void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
4429__attribute__((__noreturn__))
4430__attribute__((__nonnull__ (2)))
4431__attribute__((__format__(__printf__, 2, 3)))
4432void rb_name_error(ID name, const char *fmt, ...);
4433__attribute__((__noreturn__))
4434__attribute__((__nonnull__ (2)))
4435__attribute__((__format__(__printf__, 2, 3)))
4436void rb_name_error_str(VALUE name, const char *fmt, ...);
4437__attribute__((__noreturn__))
4438__attribute__((__nonnull__ (2)))
4439__attribute__((__format__(__printf__, 2, 3)))
4440void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);
4441__attribute__((__noreturn__))
4442__attribute__((__nonnull__ ()))
4443void rb_invalid_str(const char *str, const char *type);
4444__attribute__((__noreturn__))
4445__attribute__((__nonnull__ ()))
4446void rb_error_frozen(const char *what);
4447__attribute__((__noreturn__))
4448void rb_error_frozen_object(VALUE what);
4449void rb_error_untrusted(VALUE);
4450void rb_check_frozen(VALUE obj);
4451void rb_check_trusted(VALUE);
4452void rb_check_copyable(VALUE obj, VALUE orig);
4453__attribute__((__noreturn__))
4454static void rb_error_arity(int argc, int min, int max);
4455
4456
4457static inline void
4458rb_check_frozen_inline(VALUE obj)
4459{
4460 if ((__builtin_expect(!!(RB_OBJ_FROZEN(obj)), 0))) {
4461 rb_error_frozen_object(obj);
4462 }
4463}
4464static inline int
4465rb_check_arity(int argc, int min, int max)
4466{
4467 if ((argc < min) || (max != (-1) && argc > max))
4468 rb_error_arity(argc, min, max);
4469 return argc;
4470}
4471
4472
4473__attribute__((__nonnull__ ()))
4474void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg);
4475VALUE rb_check_hash_type(VALUE obj);
4476__attribute__((__nonnull__ ()))
4477void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg);
4478VALUE rb_hash(VALUE obj);
4479VALUE rb_hash_new(void);
4480VALUE rb_hash_dup(VALUE hash);
4481VALUE rb_hash_freeze(VALUE obj);
4482VALUE rb_hash_aref(VALUE hash, VALUE key);
4483VALUE rb_hash_lookup(VALUE hash, VALUE key);
4484VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def);
4485VALUE rb_hash_fetch(VALUE hash, VALUE key);
4486VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val);
4487VALUE rb_hash_clear(VALUE hash);
4488VALUE rb_hash_delete_if(VALUE hash);
4489VALUE rb_hash_delete(VALUE hash, VALUE key);
4490void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash);
4491typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value);
4492VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func);
4493int rb_path_check(const char *path);
4494int rb_env_path_tainted(void);
4495VALUE rb_env_clear(void);
4496VALUE rb_hash_size(VALUE hash);
4497
4498
4499
4500
4501VALUE rb_block_proc(void);
4502VALUE rb_block_lambda(void);
4503VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg);
4504VALUE rb_obj_is_proc(VALUE recv);
4505VALUE rb_proc_call(VALUE recv, VALUE args);
4506VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat);
4507VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc);
4508VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat);
4509int rb_proc_arity(VALUE recv);
4510VALUE rb_proc_lambda_p(VALUE recv);
4511VALUE rb_binding_new(void);
4512VALUE rb_obj_method(VALUE recv, VALUE mid);
4513VALUE rb_obj_is_method(VALUE recv);
4514VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv);
4515VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat);
4516VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc);
4517VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat);
4518int rb_mod_method_arity(VALUE mod, ID mid);
4519int rb_obj_method_arity(VALUE obj, ID mid);
4520__attribute__((__nonnull__ (1)))
4521VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state);
4522
4523
4524
4525
4526__attribute__((__nonnull__ (2, 3)))
4527int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...);
4528__attribute__((__nonnull__ (3, 4)))
4529int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...);
4530__attribute__((__error__ ("bad scan arg format")))
4531void rb_scan_args_bad_format(const char*);
4532__attribute__((__error__ ("variable argument length doesn't match")))
4533void rb_scan_args_length_mismatch(const char*,int);
4534
4535
4536static inline _Bool
4537rb_scan_args_keyword_p(int kw_flag, VALUE last)
4538{
4539 switch (kw_flag) {
4540 case 0:
4541 return !! rb_keyword_given_p();
4542 case 1:
4543 return 1;
4544 case 3:
4545 return RB_TYPE_P(last, RUBY_T_HASH);
4546 default:
4547 return 0;
4548 }
4549}
4550__attribute__((__always_inline__)) inline
4551static _Bool
4552rb_scan_args_lead_p(const char *fmt)
4553{
4554 return (((unsigned char)((fmt[0])-'0'))<10);
4555}
4556__attribute__((__always_inline__)) inline
4557static int
4558rb_scan_args_n_lead(const char *fmt)
4559{
4560 return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0);
4561}
4562__attribute__((__always_inline__)) inline
4563static _Bool
4564rb_scan_args_opt_p(const char *fmt)
4565{
4566 return (rb_scan_args_lead_p(fmt) && (((unsigned char)((fmt[1])-'0'))<10));
4567}
4568__attribute__((__always_inline__)) inline
4569static int
4570rb_scan_args_n_opt(const char *fmt)
4571{
4572 return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0);
4573}
4574__attribute__((__always_inline__)) inline
4575static int
4576rb_scan_args_var_idx(const char *fmt)
4577{
4578 return (!rb_scan_args_lead_p(fmt) ? 0 : !(((unsigned char)((fmt[1])-'0'))<10) ? 1 : 2);
4579}
4580__attribute__((__always_inline__)) inline
4581static _Bool
4582rb_scan_args_f_var(const char *fmt)
4583{
4584 return (fmt[rb_scan_args_var_idx(fmt)]=='*');
4585}
4586__attribute__((__always_inline__)) inline
4587static int
4588rb_scan_args_trail_idx(const char *fmt)
4589{
4590 const int idx = rb_scan_args_var_idx(fmt);
4591 return idx+(fmt[idx]=='*');
4592}
4593__attribute__((__always_inline__)) inline
4594static int
4595rb_scan_args_n_trail(const char *fmt)
4596{
4597 const int idx = rb_scan_args_trail_idx(fmt);
4598 return ((((unsigned char)((fmt[idx])-'0'))<10) ? fmt[idx]-'0' : 0);
4599}
4600__attribute__((__always_inline__)) inline
4601static int
4602rb_scan_args_hash_idx(const char *fmt)
4603{
4604 const int idx = rb_scan_args_trail_idx(fmt);
4605 return idx+(((unsigned char)((fmt[idx])-'0'))<10);
4606}
4607__attribute__((__always_inline__)) inline
4608static _Bool
4609rb_scan_args_f_hash(const char *fmt)
4610{
4611 return (fmt[rb_scan_args_hash_idx(fmt)]==':');
4612}
4613__attribute__((__always_inline__)) inline
4614static int
4615rb_scan_args_block_idx(const char *fmt)
4616{
4617 const int idx = rb_scan_args_hash_idx(fmt);
4618 return idx+(fmt[idx]==':');
4619}
4620__attribute__((__always_inline__)) inline
4621static _Bool
4622rb_scan_args_f_block(const char *fmt)
4623{
4624 return (fmt[rb_scan_args_block_idx(fmt)]=='&');
4625}
4626__attribute__((__always_inline__)) inline
4627static int
4628rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
4629 int n_lead, int n_opt, int n_trail,
4630 _Bool f_var, _Bool f_hash, _Bool f_block,
4631 VALUE *vars[], const char *fmt [[maybe_unused]], int varc [[maybe_unused]])
4632
4633
4634{
4635 int i, argi = 0, vari = 0;
4636 VALUE *var, hash = ((VALUE)RUBY_Qnil);
4637 const int n_mand = n_lead + n_trail;
4638 if (f_hash && argc > 0) {
4639 VALUE last = argv[argc - 1];
4640 if (rb_scan_args_keyword_p(kw_flag, last)) {
4641 hash = rb_hash_dup(last);
4642 argc--;
4643 }
4644 }
4645 if (argc < n_mand) {
4646 goto argc_error;
4647 }
4648 for (i = 0; i < n_lead; i++) {
4649 var = vars[vari++];
4650 if (var) *var = argv[argi];
4651 argi++;
4652 }
4653 for (i = 0; i < n_opt; i++) {
4654 var = vars[vari++];
4655 if (argi < argc - n_trail) {
4656 if (var) *var = argv[argi];
4657 argi++;
4658 }
4659 else {
4660 if (var) *var = ((VALUE)RUBY_Qnil);
4661 }
4662 }
4663 if (f_var) {
4664 int n_var = argc - argi - n_trail;
4665 var = vars[vari++];
4666 if (0 < n_var) {
4667 if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
4668 argi += n_var;
4669 }
4670 else {
4671 if (var) *var = rb_ary_new();
4672 }
4673 }
4674 for (i = 0; i < n_trail; i++) {
4675 var = vars[vari++];
4676 if (var) *var = argv[argi];
4677 argi++;
4678 }
4679 if (f_hash) {
4680 var = vars[vari++];
4681 if (var) *var = hash;
4682 }
4683 if (f_block) {
4684 var = vars[vari++];
4685 if (rb_block_given_p()) {
4686 *var = rb_block_proc();
4687 }
4688 else {
4689 *var = ((VALUE)RUBY_Qnil);
4690 }
4691 }
4692 if (argi == argc) {
4693 return argc;
4694 }
4695 argc_error:
4696 rb_error_arity(argc, n_mand, f_var ? (-1) : n_mand + n_opt);
4697 __builtin_unreachable();
4698}
4699
4700
4701ID rb_sym2id(VALUE obj);
4702VALUE rb_id2sym(ID id);
4703__attribute__((__nonnull__ ()))
4704ID rb_intern(const char *name);
4705ID rb_intern2(const char *name, long len);
4706ID rb_intern_str(VALUE str);
4707const char *rb_id2name(ID id);
4708__attribute__((__nonnull__ ()))
4709ID rb_check_id(volatile VALUE *namep);
4710ID rb_to_id(VALUE str);
4711VALUE rb_id2str(ID id);
4712VALUE rb_sym2str(VALUE id);
4713VALUE rb_to_symbol(VALUE name);
4714__attribute__((__nonnull__ ()))
4715VALUE rb_check_symbol(volatile VALUE *namep);
4716
4717
4718__attribute__((__pure__))
4719__attribute__((__nonnull__ ()))
4720static inline ID
4721rb_intern_const(const char *str)
4722{
4723 size_t len = strlen(str);
4724 return rb_intern2(str, ((long)len));
4725}
4726
4727__attribute__((__nonnull__ ()))
4728static inline ID
4729rbimpl_intern_const(ID *ptr, const char *str)
4730{
4731 while (! *ptr) {
4732 *ptr = rb_intern_const(str);
4733 }
4734 return *ptr;
4735}
4736
4737
4738typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);
4739typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data);
4740typedef void rb_gvar_marker_t(VALUE *var);
4741rb_gvar_getter_t rb_gvar_undef_getter;
4742rb_gvar_setter_t rb_gvar_undef_setter;
4743rb_gvar_marker_t rb_gvar_undef_marker;
4744rb_gvar_getter_t rb_gvar_val_getter;
4745rb_gvar_setter_t rb_gvar_val_setter;
4746rb_gvar_marker_t rb_gvar_val_marker;
4747rb_gvar_getter_t rb_gvar_var_getter;
4748rb_gvar_setter_t rb_gvar_var_setter;
4749rb_gvar_marker_t rb_gvar_var_marker;
4750__attribute__((__noreturn__))
4751rb_gvar_setter_t rb_gvar_readonly_setter;
4752__attribute__((__nonnull__ ()))
4753void rb_define_variable(const char *name, VALUE *var);
4754__attribute__((__nonnull__ (1)))
4755void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4756__attribute__((__nonnull__ (1)))
4757void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4758__attribute__((__nonnull__ ()))
4759void rb_define_readonly_variable(const char *name, const VALUE *var);
4760__attribute__((__nonnull__ ()))
4761void rb_define_const(VALUE klass, const char *name, VALUE val);
4762__attribute__((__nonnull__ ()))
4763void rb_define_global_const(const char *name, VALUE val);
4764__attribute__((__nonnull__ ()))
4765void rb_deprecate_constant(VALUE mod, const char *name);
4766__attribute__((__nonnull__ ()))
4767VALUE rb_gv_set(const char *name, VALUE val);
4768__attribute__((__nonnull__ ()))
4769VALUE rb_gv_get(const char *name);
4770__attribute__((__nonnull__ ()))
4771VALUE rb_iv_get(VALUE obj, const char *name);
4772__attribute__((__nonnull__ ()))
4773VALUE rb_iv_set(VALUE obj, const char *name, VALUE val);
4774
4775
4776
4777
4778VALUE rb_get_path(VALUE obj);
4779VALUE rb_get_path_no_checksafe(VALUE);
4780__attribute__((__error__ (" argument length doesn't match"))) int rb_varargs_bad_length(int,int);
4781const char *rb_class2name(VALUE klass);
4782const char *rb_obj_classname(VALUE obj);
4783void rb_p(VALUE obj);
4784VALUE rb_equal(VALUE lhs, VALUE rhs);
4785VALUE rb_require(const char *feature);
4786
4787
4788VALUE rb_big_new(size_t len, int sign);
4789int rb_bigzero_p(VALUE x);
4790VALUE rb_big_clone(VALUE num);
4791void rb_big_2comp(VALUE num);
4792VALUE rb_big_norm(VALUE x);
4793void rb_big_resize(VALUE big, size_t len);
4794__attribute__((__nonnull__ ()))
4795VALUE rb_cstr_to_inum(const char *str, int base, int badcheck);
4796VALUE rb_str_to_inum(VALUE str, int base, int badcheck);
4797__attribute__((__nonnull__ ()))
4798VALUE rb_cstr2inum(const char *str, int base);
4799VALUE rb_str2inum(VALUE str, int base);
4800VALUE rb_big2str(VALUE x, int base);
4801long rb_big2long(VALUE x);
4802unsigned long rb_big2ulong(VALUE x);
4803long long rb_big2ll(VALUE);
4804unsigned long long rb_big2ull(VALUE);
4805__attribute__((__nonnull__ ()))
4806void rb_big_pack(VALUE val, unsigned long *buf, long num_longs);
4807__attribute__((__nonnull__ ()))
4808VALUE rb_big_unpack(unsigned long *buf, long num_longs);
4809__attribute__((__nonnull__ ()))
4810int rb_uv_to_utf8(char buf[6], unsigned long uv);
4811VALUE rb_dbl2big(double d);
4812double rb_big2dbl(VALUE x);
4813VALUE rb_big_cmp(VALUE lhs, VALUE rhs);
4814VALUE rb_big_eq(VALUE lhs, VALUE rhs);
4815VALUE rb_big_eql(VALUE lhs, VALUE rhs);
4816VALUE rb_big_plus(VALUE x, VALUE y);
4817VALUE rb_big_minus(VALUE x, VALUE y);
4818VALUE rb_big_mul(VALUE x, VALUE y);
4819VALUE rb_big_div(VALUE x, VALUE y);
4820VALUE rb_big_idiv(VALUE x, VALUE y);
4821VALUE rb_big_modulo(VALUE x, VALUE y);
4822VALUE rb_big_divmod(VALUE x, VALUE y);
4823VALUE rb_big_pow(VALUE x, VALUE y);
4824VALUE rb_big_and(VALUE x, VALUE y);
4825VALUE rb_big_or(VALUE x, VALUE y);
4826VALUE rb_big_xor(VALUE x, VALUE y);
4827VALUE rb_big_lshift(VALUE x, VALUE y);
4828VALUE rb_big_rshift(VALUE x, VALUE y);
4829__attribute__((__nonnull__ ()))
4830int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4831__attribute__((__nonnull__ ()))
4832VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4833size_t rb_absint_size(VALUE val, int *nlz_bits_ret);
4834size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret);
4835int rb_absint_singlebit_p(VALUE val);
4836
4837
4838
4839
4840int rb_cmpint(VALUE val, VALUE a, VALUE b);
4841__attribute__((__cold__))
4842__attribute__((__noreturn__))
4843void rb_cmperr(VALUE a, VALUE b);
4844
4845
4846
4847
4848VALUE rb_complex_raw(VALUE real, VALUE imag);
4849VALUE rb_complex_new(VALUE real, VALUE imag);
4850VALUE rb_complex_new_polar(VALUE abs, VALUE arg);
4851__attribute__((__deprecated__ ("by: rb_complex_new_polar")))
4852VALUE rb_complex_polar(VALUE abs, VALUE arg);
4853__attribute__((__pure__))
4854VALUE rb_complex_real(VALUE z);
4855__attribute__((__pure__))
4856VALUE rb_complex_imag(VALUE z);
4857VALUE rb_complex_plus(VALUE x, VALUE y);
4858VALUE rb_complex_minus(VALUE x, VALUE y);
4859VALUE rb_complex_mul(VALUE x, VALUE y);
4860VALUE rb_complex_div(VALUE x, VALUE y);
4861VALUE rb_complex_uminus(VALUE z);
4862VALUE rb_complex_conjugate(VALUE z);
4863VALUE rb_complex_abs(VALUE z);
4864VALUE rb_complex_arg(VALUE z);
4865VALUE rb_complex_pow(VALUE base, VALUE exp);
4866VALUE rb_dbl_complex_new(double real, double imag);
4867VALUE rb_Complex(VALUE real, VALUE imag);
4868
4869
4870
4871
4872VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj);
4873VALUE rb_fiber_current(void);
4874VALUE rb_fiber_alive_p(VALUE fiber);
4875VALUE rb_obj_is_fiber(VALUE obj);
4876VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv);
4877VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4878VALUE rb_fiber_yield(int argc, const VALUE *argv);
4879VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat);
4880VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv);
4881VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4882VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv);
4883
4884
4885
4886
4887VALUE rb_dir_getwd(void);
4888
4889
4890
4891
4892VALUE rb_enum_values_pack(int argc, const VALUE *argv);
4893
4894
4895
4896
4897__attribute__((__noreturn__))
4898void rb_exc_raise(VALUE exc);
4899__attribute__((__noreturn__))
4900void rb_exc_fatal(VALUE exc);
4901__attribute__((__noreturn__))
4902VALUE rb_f_exit(int argc, const VALUE *argv);
4903__attribute__((__noreturn__))
4904VALUE rb_f_abort(int argc, const VALUE *argv);
4905__attribute__((__noreturn__))
4906void rb_interrupt(void);
4907ID rb_frame_this_func(void);
4908__attribute__((__noreturn__))
4909void rb_jump_tag(int state);
4910void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv);
4911void rb_obj_call_init_kw(VALUE, int, const VALUE*, int);
4912ID rb_frame_callee(void);
4913VALUE rb_make_exception(int argc, const VALUE *argv);
4914void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg);
4915
4916
4917
4918
4919typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj);
4920typedef struct {
4921 VALUE begin;
4922 VALUE end;
4923 VALUE step;
4924 int exclude_end;
4925} rb_arithmetic_sequence_components_t;
4926VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv);
4927VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func);
4928VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat);
4929__attribute__((__nonnull__ ()))
4930int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf);
4931__attribute__((__nonnull__ ()))
4932VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err);
4933
4934
4935
4936
4937__attribute__((__nonnull__ ()))
4938VALUE rb_file_s_expand_path(int argc, const VALUE *argv);
4939VALUE rb_file_expand_path(VALUE fname, VALUE dname);
4940__attribute__((__nonnull__ ()))
4941VALUE rb_file_s_absolute_path(int argc, const VALUE *argv);
4942VALUE rb_file_absolute_path(VALUE fname, VALUE dname);
4943VALUE rb_file_dirname(VALUE fname);
4944__attribute__((__nonnull__ ()))
4945int rb_find_file_ext(VALUE *feature, const char *const *exts);
4946VALUE rb_find_file(VALUE path);
4947VALUE rb_file_directory_p(VALUE _, VALUE path);
4948VALUE rb_str_encode_ospath(VALUE path);
4949__attribute__((__nonnull__ ()))
4950__attribute__((__pure__))
4951int rb_is_absolute_path(const char *path);
4952off_t rb_file_size(VALUE file);
4953
4954
4955
4956
4957__attribute__((__cold__))
4958__attribute__((__noreturn__))
4959void rb_memerror(void);
4960__attribute__((__pure__))
4961int rb_during_gc(void);
4962__attribute__((__nonnull__ (1)))
4963void rb_gc_mark_locations(const VALUE *start, const VALUE *end);
4964void rb_mark_tbl(struct st_table *tbl);
4965void rb_mark_tbl_no_pin(struct st_table *tbl);
4966void rb_mark_set(struct st_table *tbl);
4967void rb_mark_hash(struct st_table *tbl);
4968void rb_gc_update_tbl_refs(st_table *ptr);
4969void rb_gc_mark_maybe(VALUE obj);
4970void rb_gc_mark(VALUE obj);
4971void rb_gc_mark_movable(VALUE obj);
4972VALUE rb_gc_location(VALUE obj);
4973__attribute__((__deprecated__ ("this is now a no-op function")))
4974void rb_gc_force_recycle(VALUE obj);
4975void rb_gc(void);
4976void rb_gc_copy_finalizer(VALUE dst, VALUE src);
4977VALUE rb_gc_enable(void);
4978VALUE rb_gc_disable(void);
4979VALUE rb_gc_start(void);
4980VALUE rb_define_finalizer(VALUE obj, VALUE block);
4981VALUE rb_undefine_finalizer(VALUE obj);
4982size_t rb_gc_count(void);
4983size_t rb_gc_stat(VALUE key_or_buf);
4984VALUE rb_gc_latest_gc_info(VALUE key_or_buf);
4985void rb_gc_adjust_memory_usage(ssize_t diff);
4986
4987
4988
4989
4990extern VALUE rb_fs;
4991extern VALUE rb_output_fs;
4992extern VALUE rb_rs;
4993extern VALUE rb_default_rs;
4994extern VALUE rb_output_rs;
4995VALUE rb_io_write(VALUE io, VALUE str);
4996VALUE rb_io_gets(VALUE io);
4997VALUE rb_io_getbyte(VALUE io);
4998VALUE rb_io_ungetc(VALUE io, VALUE c);
4999VALUE rb_io_ungetbyte(VALUE io, VALUE b);
5000VALUE rb_io_close(VALUE io);
5001VALUE rb_io_flush(VALUE io);
5002VALUE rb_io_eof(VALUE io);
5003VALUE rb_io_binmode(VALUE io);
5004VALUE rb_io_ascii8bit_binmode(VALUE io);
5005VALUE rb_io_addstr(VALUE io, VALUE str);
5006VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io);
5007VALUE rb_io_print(int argc, const VALUE *argv, VALUE io);
5008VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io);
5009VALUE rb_io_fdopen(int fd, int flags, const char *path);
5010__attribute__((__nonnull__ ()))
5011VALUE rb_file_open(const char *fname, const char *fmode);
5012__attribute__((__nonnull__ ()))
5013VALUE rb_file_open_str(VALUE fname, const char *fmode);
5014VALUE rb_gets(void);
5015__attribute__((__nonnull__ ()))
5016void rb_write_error(const char *str);
5017void rb_write_error2(const char *str, long len);
5018void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
5019__attribute__((__nonnull__ ()))
5020int rb_pipe(int *pipes);
5021int rb_reserved_fd_p(int fd);
5022int rb_cloexec_open(const char *pathname, int flags, mode_t mode);
5023int rb_cloexec_dup(int oldfd);
5024int rb_cloexec_dup2(int oldfd, int newfd);
5025__attribute__((__nonnull__ ()))
5026int rb_cloexec_pipe(int fildes[2]);
5027int rb_cloexec_fcntl_dupfd(int fd, int minfd);
5028void rb_update_max_fd(int fd);
5029void rb_fd_fix_cloexec(int fd);
5030
5031
5032
5033
5034void rb_load(VALUE path, int wrap);
5035void rb_load_protect(VALUE path, int wrap, int *state);
5036__attribute__((__nonnull__ ()))
5037int rb_provided(const char *feature);
5038__attribute__((__nonnull__ (1)))
5039int rb_feature_provided(const char *feature, const char **loading);
5040__attribute__((__nonnull__ ()))
5041void rb_provide(const char *feature);
5042VALUE rb_f_require(VALUE self, VALUE feature);
5043VALUE rb_require_string(VALUE feature);
5044void rb_ext_ractor_safe(_Bool flag);
5045
5046
5047
5048
5049VALUE rb_marshal_dump(VALUE obj, VALUE port);
5050VALUE rb_marshal_load(VALUE port);
5051void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));
5052
5053
5054
5055
5056__attribute__((__noreturn__))
5057__attribute__((__cold__))
5058void rb_num_zerodiv(void);
5059VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op);
5060VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op);
5061VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op);
5062VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op);
5063VALUE rb_num2fix(VALUE val);
5064VALUE rb_fix2str(VALUE val, int base);
5065__attribute__((__const__))
5066VALUE rb_dbl_cmp(double lhs, double rhs);
5067extern VALUE rb_int_positive_pow(long x, unsigned long y);
5068
5069
5070
5071
5072VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);
5073VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);
5074VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);
5075int rb_eql(VALUE lhs, VALUE rhs);
5076VALUE rb_any_to_s(VALUE obj);
5077VALUE rb_inspect(VALUE obj);
5078VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);
5079VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);
5080VALUE rb_obj_alloc(VALUE klass);
5081VALUE rb_obj_clone(VALUE obj);
5082VALUE rb_obj_dup(VALUE obj);
5083VALUE rb_obj_init_copy(VALUE src, VALUE dst);
5084
5085VALUE rb_obj_taint(VALUE obj);
5086__attribute__((__pure__))
5087
5088VALUE rb_obj_tainted(VALUE obj);
5089
5090VALUE rb_obj_untaint(VALUE obj);
5091
5092VALUE rb_obj_untrust(VALUE obj);
5093__attribute__((__pure__))
5094
5095VALUE rb_obj_untrusted(VALUE obj);
5096
5097VALUE rb_obj_trust(VALUE obj);
5098VALUE rb_obj_freeze(VALUE obj);
5099__attribute__((__pure__))
5100VALUE rb_obj_frozen_p(VALUE obj);
5101VALUE rb_obj_id(VALUE obj);
5102__attribute__((__const__))
5103VALUE rb_memory_id(VALUE obj);
5104__attribute__((__pure__))
5105VALUE rb_class_real(VALUE klass);
5106__attribute__((__pure__))
5107VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant);
5108__attribute__((__pure__))
5109VALUE rb_class_superclass(VALUE klass);
5110__attribute__((__nonnull__ ()))
5111VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid);
5112__attribute__((__nonnull__ ()))
5113VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid);
5114__attribute__((__nonnull__ ()))
5115VALUE rb_check_to_integer(VALUE val, const char *mid);
5116VALUE rb_check_to_float(VALUE val);
5117VALUE rb_to_int(VALUE val);
5118VALUE rb_check_to_int(VALUE val);
5119VALUE rb_Integer(VALUE val);
5120VALUE rb_to_float(VALUE val);
5121VALUE rb_Float(VALUE val);
5122VALUE rb_String(VALUE val);
5123VALUE rb_Array(VALUE val);
5124VALUE rb_Hash(VALUE val);
5125__attribute__((__nonnull__ ()))
5126double rb_cstr_to_dbl(const char *str, int mode);
5127double rb_str_to_dbl(VALUE str, int mode);
5128
5129
5130
5131
5132ID rb_id_attrset(ID id);
5133__attribute__((__const__))
5134int rb_is_const_id(ID id);
5135__attribute__((__const__))
5136int rb_is_global_id(ID id);
5137__attribute__((__const__))
5138int rb_is_instance_id(ID id);
5139__attribute__((__const__))
5140int rb_is_attrset_id(ID id);
5141__attribute__((__const__))
5142int rb_is_class_id(ID id);
5143__attribute__((__const__))
5144int rb_is_local_id(ID id);
5145__attribute__((__const__))
5146int rb_is_junk_id(ID);
5147__attribute__((__nonnull__ ()))
5148int rb_symname_p(const char *str);
5149VALUE rb_backref_get(void);
5150void rb_backref_set(VALUE md);
5151VALUE rb_lastline_get(void);
5152void rb_lastline_set(VALUE str);
5153VALUE rb_sym_all_symbols(void);
5154
5155
5156
5157
5158void rb_last_status_set(int status, pid_t pid);
5159VALUE rb_last_status_get(void);
5160__attribute__((__nonnull__ ()))
5161int rb_proc_exec(const char *cmd);
5162__attribute__((__noreturn__))
5163VALUE rb_f_exec(int argc, const VALUE *argv);
5164pid_t rb_waitpid(pid_t pid, int *status, int flags);
5165void rb_syswait(pid_t pid);
5166pid_t rb_spawn(int argc, const VALUE *argv);
5167pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen);
5168VALUE rb_proc_times(VALUE _);
5169VALUE rb_detach_process(pid_t pid);
5170
5171
5172
5173
5174unsigned int rb_genrand_int32(void);
5175double rb_genrand_real(void);
5176void rb_reset_random_seed(void);
5177VALUE rb_random_bytes(VALUE rnd, long n);
5178unsigned int rb_random_int32(VALUE rnd);
5179double rb_random_real(VALUE rnd);
5180unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit);
5181unsigned long rb_genrand_ulong_limited(unsigned long i);
5182
5183
5184
5185
5186VALUE rb_range_new(VALUE beg, VALUE end, int excl);
5187__attribute__((__nonnull__ ()))
5188VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err);
5189__attribute__((__nonnull__ ()))
5190int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp);
5191
5192
5193
5194
5195VALUE rb_rational_raw(VALUE num, VALUE den);
5196VALUE rb_rational_new(VALUE num, VALUE den);
5197VALUE rb_Rational(VALUE num, VALUE den);
5198__attribute__((__pure__))
5199VALUE rb_rational_num(VALUE rat);
5200__attribute__((__pure__))
5201VALUE rb_rational_den(VALUE rat);
5202VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec);
5203VALUE rb_flt_rationalize(VALUE flt);
5204
5205
5206
5207
5208int rb_memcicmp(const void *s1,const void *s2, long n);
5209void rb_match_busy(VALUE md);
5210VALUE rb_reg_nth_defined(int n, VALUE md);
5211VALUE rb_reg_nth_match(int n, VALUE md);
5212int rb_reg_backref_number(VALUE match, VALUE backref);
5213VALUE rb_reg_last_match(VALUE md);
5214VALUE rb_reg_match_pre(VALUE md);
5215VALUE rb_reg_match_post(VALUE md);
5216VALUE rb_reg_match_last(VALUE md);
5217VALUE rb_reg_new_str(VALUE src, int opts);
5218__attribute__((__nonnull__ ()))
5219VALUE rb_reg_new(const char *src, long len, int opts);
5220VALUE rb_reg_alloc(void);
5221VALUE rb_reg_init_str(VALUE re, VALUE s, int options);
5222VALUE rb_reg_match(VALUE re, VALUE str);
5223VALUE rb_reg_match2(VALUE re);
5224int rb_reg_options(VALUE re);
5225
5226
5227
5228
5229extern VALUE rb_argv0;
5230VALUE rb_get_argv(void);
5231__attribute__((__nonnull__ ()))
5232void *rb_load_file(const char *file);
5233void *rb_load_file_str(VALUE file);
5234
5235
5236struct timeval;
5237typedef struct {
5238 int maxfd;
5239 fd_set *fdset;
5240} rb_fdset_t;
5241
5242
5243__attribute__((__nonnull__ ()))
5244void rb_fd_init(rb_fdset_t *f);
5245__attribute__((__nonnull__ ()))
5246void rb_fd_term(rb_fdset_t *f);
5247__attribute__((__nonnull__ ()))
5248void rb_fd_zero(rb_fdset_t *f);
5249__attribute__((__nonnull__ ()))
5250void rb_fd_set(int fd, rb_fdset_t *f);
5251__attribute__((__nonnull__ ()))
5252void rb_fd_clr(int fd, rb_fdset_t *f);
5253__attribute__((__nonnull__ ()))
5254__attribute__((__pure__))
5255int rb_fd_isset(int fd, const rb_fdset_t *f);
5256void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max);
5257void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
5258int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5259
5260
5261__attribute__((__nonnull__ ()))
5262__attribute__((__pure__))
5263static inline fd_set *
5264rb_fd_ptr(const rb_fdset_t *f)
5265{
5266 return f->fdset;
5267}
5268__attribute__((__nonnull__ ()))
5269__attribute__((__pure__))
5270static inline int
5271rb_fd_max(const rb_fdset_t *f)
5272{
5273 return f->maxfd;
5274}
5275
5276
5277struct timeval;
5278int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5279
5280
5281
5282
5283__attribute__((__nonnull__ ()))
5284VALUE rb_f_kill(int argc, const VALUE *argv);
5285void (*ruby_posix_signal(int, void (*)(int)))(int);
5286__attribute__((__pure__))
5287const char *ruby_signal_name(int signo);
5288void ruby_default_signal(int sig);
5289
5290
5291
5292
5293VALUE rb_f_sprintf(int argc, const VALUE *argv);
5294__attribute__((__nonnull__ (1)))
5295__attribute__((__format__(__printf__, 1, 2)))
5296VALUE rb_sprintf(const char *fmt, ...);
5297__attribute__((__nonnull__ (1)))
5298__attribute__((__format__(__printf__, 1, 0)))
5299VALUE rb_vsprintf(const char *fmt, va_list ap);
5300__attribute__((__nonnull__ (2)))
5301__attribute__((__format__(__printf__, 2, 3)))
5302VALUE rb_str_catf(VALUE dst, const char *fmt, ...);
5303__attribute__((__nonnull__ (2)))
5304__attribute__((__format__(__printf__, 2, 0)))
5305VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap);
5306VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt);
5307
5308
5309
5310
5311VALUE rb_str_new(const char *ptr, long len);
5312VALUE rb_str_new_cstr(const char *ptr);
5313VALUE rb_str_new_shared(VALUE str);
5314VALUE rb_str_new_frozen(VALUE str);
5315VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);
5316VALUE rb_tainted_str_new_cstr(const char *ptr);
5317VALUE rb_tainted_str_new(const char *ptr, long len);
5318VALUE rb_external_str_new(const char *ptr, long len);
5319__attribute__((__nonnull__ ()))
5320VALUE rb_external_str_new_cstr(const char *ptr);
5321VALUE rb_locale_str_new(const char *ptr, long len);
5322__attribute__((__nonnull__ ()))
5323VALUE rb_locale_str_new_cstr(const char *ptr);
5324VALUE rb_filesystem_str_new(const char *ptr, long len);
5325__attribute__((__nonnull__ ()))
5326VALUE rb_filesystem_str_new_cstr(const char *ptr);
5327VALUE rb_str_buf_new(long capa);
5328__attribute__((__nonnull__ ()))
5329VALUE rb_str_buf_new_cstr(const char *ptr);
5330VALUE rb_str_tmp_new(long len);
5331VALUE rb_usascii_str_new(const char *ptr, long len);
5332VALUE rb_usascii_str_new_cstr(const char *ptr);
5333VALUE rb_utf8_str_new(const char *ptr, long len);
5334VALUE rb_utf8_str_new_cstr(const char *ptr);
5335VALUE rb_str_new_static(const char *ptr, long len);
5336VALUE rb_usascii_str_new_static(const char *ptr, long len);
5337VALUE rb_utf8_str_new_static(const char *ptr, long len);
5338VALUE rb_str_to_interned_str(VALUE str);
5339VALUE rb_interned_str(const char *ptr, long len);
5340__attribute__((__nonnull__ ()))
5341VALUE rb_interned_str_cstr(const char *ptr);
5342void rb_str_free(VALUE str);
5343void rb_str_shared_replace(VALUE dst, VALUE src);
5344VALUE rb_str_buf_append(VALUE dst, VALUE src);
5345VALUE rb_str_buf_cat(VALUE, const char*, long);
5346VALUE rb_str_buf_cat2(VALUE, const char*);
5347__attribute__((__nonnull__ ()))
5348VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src);
5349VALUE rb_obj_as_string(VALUE obj);
5350VALUE rb_check_string_type(VALUE obj);
5351void rb_must_asciicompat(VALUE obj);
5352VALUE rb_str_dup(VALUE str);
5353VALUE rb_str_resurrect(VALUE str);
5354VALUE rb_str_locktmp(VALUE str);
5355VALUE rb_str_unlocktmp(VALUE str);
5356VALUE rb_str_dup_frozen(VALUE);
5357VALUE rb_str_plus(VALUE lhs, VALUE rhs);
5358VALUE rb_str_times(VALUE str, VALUE num);
5359long rb_str_sublen(VALUE str, long pos);
5360VALUE rb_str_substr(VALUE str, long beg, long len);
5361VALUE rb_str_subseq(VALUE str, long beg, long len);
5362char *rb_str_subpos(VALUE str, long beg, long *len);
5363void rb_str_modify(VALUE str);
5364void rb_str_modify_expand(VALUE str, long capa);
5365VALUE rb_str_freeze(VALUE str);
5366void rb_str_set_len(VALUE str, long len);
5367VALUE rb_str_resize(VALUE str, long len);
5368VALUE rb_str_cat(VALUE dst, const char *src, long srclen);
5369VALUE rb_str_cat_cstr(VALUE dst, const char *src);
5370VALUE rb_str_cat2(VALUE, const char*);
5371VALUE rb_str_append(VALUE dst, VALUE src);
5372VALUE rb_str_concat(VALUE dst, VALUE src);
5373st_index_t rb_memhash(const void *ptr, long len);
5374st_index_t rb_hash_start(st_index_t i);
5375st_index_t rb_str_hash(VALUE str);
5376int rb_str_hash_cmp(VALUE str1, VALUE str2);
5377int rb_str_comparable(VALUE str1, VALUE str2);
5378int rb_str_cmp(VALUE lhs, VALUE rhs);
5379VALUE rb_str_equal(VALUE str1, VALUE str2);
5380VALUE rb_str_drop_bytes(VALUE str, long len);
5381void rb_str_update(VALUE dst, long beg, long len, VALUE src);
5382VALUE rb_str_replace(VALUE dst, VALUE src);
5383VALUE rb_str_inspect(VALUE str);
5384VALUE rb_str_dump(VALUE str);
5385VALUE rb_str_split(VALUE str, const char *delim);
5386rb_gvar_setter_t rb_str_setter;
5387VALUE rb_str_intern(VALUE str);
5388VALUE rb_sym_to_s(VALUE sym);
5389long rb_str_strlen(VALUE str);
5390VALUE rb_str_length(VALUE);
5391long rb_str_offset(VALUE str, long pos);
5392__attribute__((__pure__))
5393size_t rb_str_capacity(VALUE str);
5394VALUE rb_str_ellipsize(VALUE str, long len);
5395VALUE rb_str_scrub(VALUE str, VALUE repl);
5396VALUE rb_str_succ(VALUE orig);
5397__attribute__((__nonnull__ ()))
5398static inline long
5399rbimpl_strlen(const char *str)
5400{
5401 return ((long)strlen(str));
5402}
5403__attribute__((__nonnull__ ()))
5404static inline VALUE
5405rbimpl_str_new_cstr(const char *str)
5406{
5407 long len = rbimpl_strlen(str);
5408 return rb_str_new_static(str, len);
5409}
5410__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
5411static inline VALUE
5412rbimpl_tainted_str_new_cstr(const char *str)
5413{
5414 long len = rbimpl_strlen(str);
5415 return rb_tainted_str_new(str, len);
5416}
5417__attribute__((__nonnull__ ()))
5418static inline VALUE
5419rbimpl_usascii_str_new_cstr(const char *str)
5420{
5421 long len = rbimpl_strlen(str);
5422 return rb_usascii_str_new_static(str, len);
5423}
5424__attribute__((__nonnull__ ()))
5425static inline VALUE
5426rbimpl_utf8_str_new_cstr(const char *str)
5427{
5428 long len = rbimpl_strlen(str);
5429 return rb_utf8_str_new_static(str, len);
5430}
5431__attribute__((__nonnull__ ()))
5432static inline VALUE
5433rbimpl_external_str_new_cstr(const char *str)
5434{
5435 long len = rbimpl_strlen(str);
5436 return rb_external_str_new(str, len);
5437}
5438__attribute__((__nonnull__ ()))
5439static inline VALUE
5440rbimpl_locale_str_new_cstr(const char *str)
5441{
5442 long len = rbimpl_strlen(str);
5443 return rb_locale_str_new(str, len);
5444}
5445__attribute__((__nonnull__ ()))
5446static inline VALUE
5447rbimpl_str_buf_new_cstr(const char *str)
5448{
5449 long len = rbimpl_strlen(str);
5450 VALUE buf = rb_str_buf_new(len);
5451 return rb_str_buf_cat(buf, str, len);
5452}
5453__attribute__((__nonnull__ ()))
5454static inline VALUE
5455rbimpl_str_cat_cstr(VALUE buf, const char *str)
5456{
5457 long len = rbimpl_strlen(str);
5458 return rb_str_cat(buf, str, len);
5459}
5460__attribute__((__nonnull__ ()))
5461static inline VALUE
5462rbimpl_exc_new_cstr(VALUE exc, const char *str)
5463{
5464 long len = rbimpl_strlen(str);
5465 return rb_exc_new(exc, str, len);
5466}
5467
5468
5469
5470
5471VALUE rb_struct_new(VALUE klass, ...);
5472VALUE rb_struct_define(const char *name, ...);
5473__attribute__((__nonnull__ (2)))
5474VALUE rb_struct_define_under(VALUE space, const char *name, ...);
5475VALUE rb_struct_alloc(VALUE klass, VALUE values);
5476VALUE rb_struct_initialize(VALUE self, VALUE values);
5477VALUE rb_struct_getmember(VALUE self, ID key);
5478VALUE rb_struct_s_members(VALUE klass);
5479VALUE rb_struct_members(VALUE self);
5480VALUE rb_struct_alloc_noinit(VALUE klass);
5481VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...);
5482__attribute__((__nonnull__ (2)))
5483VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...);
5484
5485
5486
5487
5488struct timeval;
5489void rb_thread_schedule(void);
5490int rb_thread_wait_fd(int fd);
5491int rb_thread_fd_writable(int fd);
5492void rb_thread_fd_close(int fd);
5493int rb_thread_alone(void);
5494void rb_thread_sleep(int sec);
5495void rb_thread_sleep_forever(void);
5496void rb_thread_sleep_deadly(void);
5497VALUE rb_thread_stop(void);
5498VALUE rb_thread_wakeup(VALUE thread);
5499VALUE rb_thread_wakeup_alive(VALUE thread);
5500VALUE rb_thread_run(VALUE thread);
5501VALUE rb_thread_kill(VALUE thread);
5502__attribute__((__nonnull__ (1)))
5503VALUE rb_thread_create(VALUE (*f)(void *g), void *g);
5504void rb_thread_wait_for(struct timeval time);
5505VALUE rb_thread_current(void);
5506VALUE rb_thread_main(void);
5507VALUE rb_thread_local_aref(VALUE thread, ID key);
5508VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val);
5509void rb_thread_atfork(void);
5510void rb_thread_atfork_before_exec(void);
5511VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5512VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5513VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5514VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5515typedef void rb_unblock_function_t(void *);
5516typedef VALUE rb_blocking_function_t(void *);
5517void rb_thread_check_ints(void);
5518int rb_thread_interrupted(VALUE thval);
5519VALUE rb_mutex_new(void);
5520VALUE rb_mutex_locked_p(VALUE mutex);
5521VALUE rb_mutex_trylock(VALUE mutex);
5522VALUE rb_mutex_lock(VALUE mutex);
5523VALUE rb_mutex_unlock(VALUE mutex);
5524VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
5525VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
5526
5527
5528
5529
5530struct timespec;
5531struct timeval;
5532__attribute__((__nonnull__ ()))
5533void rb_timespec_now(struct timespec *ts);
5534VALUE rb_time_new(time_t sec, long usec);
5535VALUE rb_time_nano_new(time_t sec, long nsec);
5536__attribute__((__nonnull__ ()))
5537VALUE rb_time_timespec_new(const struct timespec *ts, int offset);
5538VALUE rb_time_num_new(VALUE timev, VALUE off);
5539struct timeval rb_time_interval(VALUE num);
5540struct timeval rb_time_timeval(VALUE time);
5541struct timespec rb_time_timespec(VALUE time);
5542struct timespec rb_time_timespec_interval(VALUE num);
5543VALUE rb_time_utc_offset(VALUE time);
5544
5545
5546
5547
5548VALUE rb_mod_name(VALUE mod);
5549VALUE rb_class_path(VALUE mod);
5550VALUE rb_class_path_cached(VALUE mod);
5551__attribute__((__nonnull__ ()))
5552void rb_set_class_path(VALUE klass, VALUE space, const char *name);
5553void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);
5554VALUE rb_path_to_class(VALUE path);
5555__attribute__((__nonnull__ ()))
5556VALUE rb_path2class(const char *path);
5557VALUE rb_class_name(VALUE obj);
5558VALUE rb_autoload_load(VALUE space, ID name);
5559VALUE rb_autoload_p(VALUE space, ID name);
5560VALUE rb_f_trace_var(int argc, const VALUE *argv);
5561VALUE rb_f_untrace_var(int argc, const VALUE *argv);
5562VALUE rb_f_global_variables(void);
5563void rb_alias_variable(ID dst, ID src);
5564void rb_free_generic_ivar(VALUE obj);
5565VALUE rb_ivar_get(VALUE obj, ID name);
5566VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);
5567VALUE rb_ivar_defined(VALUE obj, ID name);
5568void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);
5569st_index_t rb_ivar_count(VALUE obj);
5570VALUE rb_attr_get(VALUE obj, ID name);
5571VALUE rb_obj_instance_variables(VALUE obj);
5572VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name);
5573void *rb_mod_const_at(VALUE, void*);
5574void *rb_mod_const_of(VALUE, void*);
5575VALUE rb_const_list(void*);
5576VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv);
5577VALUE rb_mod_remove_const(VALUE space, VALUE name);
5578int rb_const_defined(VALUE space, ID name);
5579int rb_const_defined_at(VALUE space, ID name);
5580int rb_const_defined_from(VALUE space, ID name);
5581VALUE rb_const_get(VALUE space, ID name);
5582VALUE rb_const_get_at(VALUE space, ID name);
5583VALUE rb_const_get_from(VALUE space, ID name);
5584void rb_const_set(VALUE space, ID name, VALUE val);
5585VALUE rb_const_remove(VALUE space, ID name);
5586VALUE rb_cvar_defined(VALUE klass, ID name);
5587void rb_cvar_set(VALUE klass, ID name, VALUE val);
5588VALUE rb_cvar_get(VALUE klass, ID name);
5589__attribute__((__nonnull__ ()))
5590VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front);
5591__attribute__((__nonnull__ ()))
5592void rb_cv_set(VALUE klass, const char *name, VALUE val);
5593__attribute__((__nonnull__ ()))
5594VALUE rb_cv_get(VALUE klass, const char *name);
5595__attribute__((__nonnull__ ()))
5596void rb_define_class_variable(VALUE, const char*, VALUE);
5597VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv);
5598VALUE rb_mod_remove_cvar(VALUE mod, VALUE name);
5599
5600
5601int ruby_native_thread_p(void);
5602__attribute__((__nonnull__ (3)))
5603__attribute__((__format__(__printf__, 3, 4)))
5604int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
5605__attribute__((__nonnull__ (3)))
5606__attribute__((__format__(__printf__, 3, 0)))
5607int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
5608
5609
5610
5611typedef long jmp_buf[32];
5612
5613typedef long sigjmp_buf[32 +1+((sizeof (long) + sizeof (sigset_t) - 1)
5614 /sizeof (long))];
5615extern void siglongjmp (sigjmp_buf, int) __attribute__ ((__noreturn__));
5616extern int sigsetjmp (sigjmp_buf, int);
5617extern void _longjmp (jmp_buf, int) __attribute__ ((__noreturn__));
5618extern int _setjmp (jmp_buf);
5619
5620void longjmp (jmp_buf __jmpb, int __retval)
5621 __attribute__ ((__noreturn__));
5622int setjmp (jmp_buf __jmpb);
5623
5624void __assert (const char *, int, const char *)
5625 __attribute__ ((__noreturn__));
5626void __assert_func (const char *, int, const char *, const char *)
5627 __attribute__ ((__noreturn__));
5628static inline char *container_of_or_null_(void *member_ptr, size_t offset)
5629{
5630 return member_ptr ? (char *)member_ptr - offset : ((void *)0);
5631}
5632struct list_node
5633{
5634 struct list_node *next, *prev;
5635};
5636struct list_head
5637{
5638 struct list_node n;
5639};
5640static inline void list_head_init(struct list_head *h)
5641{
5642 h->n.next = h->n.prev = &h->n;
5643}
5644static inline void list_node_init(struct list_node *n)
5645{
5646 n->next = n->prev = n;
5647}
5648static inline void list_add_after_(struct list_head *h,
5649 struct list_node *p,
5650 struct list_node *n,
5651 const char *abortstr)
5652{
5653 n->next = p->next;
5654 n->prev = p;
5655 p->next->prev = n;
5656 p->next = n;
5657 (void)((void)abortstr, h);
5658}
5659static inline void list_add_(struct list_head *h,
5660 struct list_node *n,
5661 const char *abortstr)
5662{
5663 list_add_after_(h, &h->n, n, abortstr);
5664}
5665static inline void list_add_before_(struct list_head *h,
5666 struct list_node *p,
5667 struct list_node *n,
5668 const char *abortstr)
5669{
5670 n->next = p;
5671 n->prev = p->prev;
5672 p->prev->next = n;
5673 p->prev = n;
5674 (void)((void)abortstr, h);
5675}
5676static inline void list_add_tail_(struct list_head *h,
5677 struct list_node *n,
5678 const char *abortstr)
5679{
5680 list_add_before_(h, &h->n, n, abortstr);
5681}
5682static inline int list_empty_(const struct list_head *h, const char* abortstr)
5683{
5684 (void)((void)abortstr, h);
5685 return h->n.next == &h->n;
5686}
5687static inline _Bool list_empty_nocheck(const struct list_head *h)
5688{
5689 return h->n.next == &h->n;
5690}
5691static inline void list_del_(struct list_node *n, const char* abortstr)
5692{
5693 (void)((void)abortstr, n);
5694 n->next->prev = n->prev;
5695 n->prev->next = n->next;
5696}
5697static inline void list_del_init_(struct list_node *n, const char *abortstr)
5698{
5699 list_del_(n, abortstr);
5700 list_node_init(n);
5701}
5702static inline void list_del_from(struct list_head *h, struct list_node *n)
5703{
5704 ((void)0);
5705 list_del_(n, "../ruby-3.1.3/ccan/list/list.h" ":" "329");
5706}
5707static inline void list_swap_(struct list_node *o,
5708 struct list_node *n,
5709 const char* abortstr)
5710{
5711 (void)((void)abortstr, o);
5712 *n = *o;
5713 n->next->prev = n;
5714 n->prev->next = n;
5715}
5716static inline const void *list_top_(const struct list_head *h, size_t off)
5717{
5718 if (list_empty_(h, "../ruby-3.1.3/ccan/list/list.h" ":" "399"))
5719 return ((void *)0);
5720 return (const char *)h->n.next - off;
5721}
5722static inline const void *list_pop_(const struct list_head *h, size_t off)
5723{
5724 struct list_node *n;
5725 if (list_empty_(h, "../ruby-3.1.3/ccan/list/list.h" ":" "425"))
5726 return ((void *)0);
5727 n = h->n.next;
5728 list_del_(n, "../ruby-3.1.3/ccan/list/list.h" ":" "428");
5729 return (const char *)n - off;
5730}
5731static inline const void *list_tail_(const struct list_head *h, size_t off)
5732{
5733 if (list_empty_(h, "../ruby-3.1.3/ccan/list/list.h" ":" "451"))
5734 return ((void *)0);
5735 return (const char *)h->n.prev - off;
5736}
5737static inline void list_append_list_(struct list_head *to,
5738 struct list_head *from,
5739 const char *abortstr)
5740{
5741 struct list_node *from_tail = ((void)abortstr, from)->n.prev;
5742 struct list_node *to_tail = ((void)abortstr, to)->n.prev;
5743 to->n.prev = from_tail;
5744 from_tail->next = &to->n;
5745 to_tail->next = &from->n;
5746 from->n.prev = to_tail;
5747 list_del_(&from->n, "../ruby-3.1.3/ccan/list/list.h" ":" "600");
5748 list_head_init(from);
5749}
5750static inline void list_prepend_list_(struct list_head *to,
5751 struct list_head *from,
5752 const char *abortstr)
5753{
5754 struct list_node *from_tail = ((void)abortstr, from)->n.prev;
5755 struct list_node *to_head = ((void)abortstr, to)->n.next;
5756 to->n.next = &from->n;
5757 from->n.prev = &to->n;
5758 to_head->prev = from_tail;
5759 from_tail->next = to_head;
5760 list_del_(&from->n, "../ruby-3.1.3/ccan/list/list.h" ":" "632");
5761 list_head_init(from);
5762}
5763static inline void *list_node_to_off_(struct list_node *node, size_t off)
5764{
5765 return (void *)((char *)node - off);
5766}
5767static inline struct list_node *list_node_from_off_(void *ptr, size_t off)
5768{
5769 return (struct list_node *)((char *)ptr + off);
5770}
5771static inline void *list_entry_or_null(const struct list_head *h,
5772 const struct list_node *n,
5773 size_t off)
5774{
5775 if (n == &h->n)
5776 return ((void *)0);
5777 return (char *)n - off;
5778}
5779enum ruby_id_types {
5780 RUBY_ID_STATIC_SYM = 0x01,
5781 RUBY_ID_LOCAL = 0x00,
5782 RUBY_ID_INSTANCE = (0x01<<1),
5783 RUBY_ID_GLOBAL = (0x03<<1),
5784 RUBY_ID_ATTRSET = (0x04<<1),
5785 RUBY_ID_CONST = (0x05<<1),
5786 RUBY_ID_CLASS = (0x06<<1),
5787 RUBY_ID_JUNK = (0x07<<1),
5788 RUBY_ID_INTERNAL = RUBY_ID_JUNK,
5789 RUBY_ID_SCOPE_SHIFT = 4,
5790 RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1)
5791};
5792enum ruby_method_ids {
5793 idDot2 = 128,
5794 idDot3 = 129,
5795 idUPlus = 132,
5796 idUMinus = 133,
5797 idPow = 134,
5798 idCmp = 135,
5799 idPLUS = '+',
5800 idMINUS = '-',
5801 idMULT = '*',
5802 idDIV = '/',
5803 idMOD = '%',
5804 idLTLT = 136,
5805 idGTGT = 137,
5806 idLT = '<',
5807 idLE = 138,
5808 idGT = '>',
5809 idGE = 139,
5810 idEq = 140,
5811 idEqq = 141,
5812 idNeq = 142,
5813 idNot = '!',
5814 idAnd = '&',
5815 idOr = '|',
5816 idBackquote = '`',
5817 idEqTilde = 143,
5818 idNeqTilde = 144,
5819 idAREF = 145,
5820 idASET = 146,
5821 idCOLON2 = 147,
5822 idANDOP = 148,
5823 idOROP = 149,
5824 idANDDOT = 150,
5825 tPRESERVED_ID_BEGIN = 150,
5826 idNilP,
5827 idNULL,
5828 idEmptyP,
5829 idEqlP,
5830 idRespond_to,
5831 idRespond_to_missing,
5832 idIFUNC,
5833 idCFUNC,
5834 id_core_set_method_alias,
5835 id_core_set_variable_alias,
5836 id_core_undef_method,
5837 id_core_define_method,
5838 id_core_define_singleton_method,
5839 id_core_set_postexe,
5840 id_core_hash_merge_ptr,
5841 id_core_hash_merge_kwd,
5842 id_core_raise,
5843 id_core_sprintf,
5844 id_debug_created_info,
5845 tPRESERVED_ID_END,
5846 tTOKEN_LOCAL_BEGIN = tPRESERVED_ID_END-1,
5847 tMax,
5848 tMin,
5849 tFreeze,
5850 tInspect,
5851 tIntern,
5852 tObject_id,
5853 tConst_missing,
5854 tMethodMissing,
5855 tMethod_added,
5856 tSingleton_method_added,
5857 tMethod_removed,
5858 tSingleton_method_removed,
5859 tMethod_undefined,
5860 tSingleton_method_undefined,
5861 tLength,
5862 tSize,
5863 tGets,
5864 tSucc,
5865 tEach,
5866 tProc,
5867 tLambda,
5868 tSend,
5869 t__send__,
5870 t__attached__,
5871 t__recursive_key__,
5872 tInitialize,
5873 tInitialize_copy,
5874 tInitialize_clone,
5875 tInitialize_dup,
5876 tTo_int,
5877 tTo_ary,
5878 tTo_str,
5879 tTo_sym,
5880 tTo_hash,
5881 tTo_proc,
5882 tTo_io,
5883 tTo_a,
5884 tTo_s,
5885 tTo_i,
5886 tTo_f,
5887 tTo_r,
5888 tBt,
5889 tBt_locations,
5890 tCall,
5891 tMesg,
5892 tException,
5893 tLocals,
5894 tNOT,
5895 tAND,
5896 tOR,
5897 tDiv,
5898 tDivmod,
5899 tFdiv,
5900 tQuo,
5901 tName,
5902 tNil,
5903 tUScore,
5904 tNUMPARAM_1,
5905 tNUMPARAM_2,
5906 tNUMPARAM_3,
5907 tNUMPARAM_4,
5908 tNUMPARAM_5,
5909 tNUMPARAM_6,
5910 tNUMPARAM_7,
5911 tNUMPARAM_8,
5912 tNUMPARAM_9,
5913 tTOKEN_LOCAL_END,
5914 tTOKEN_INSTANCE_BEGIN = tTOKEN_LOCAL_END-1,
5915 tTOKEN_INSTANCE_END,
5916 tTOKEN_GLOBAL_BEGIN = tTOKEN_INSTANCE_END-1,
5917 tLASTLINE,
5918 tBACKREF,
5919 tERROR_INFO,
5920 tTOKEN_GLOBAL_END,
5921 tTOKEN_CONST_BEGIN = tTOKEN_GLOBAL_END-1,
5922 tTOKEN_CONST_END,
5923 tTOKEN_CLASS_BEGIN = tTOKEN_CONST_END-1,
5924 tTOKEN_CLASS_END,
5925 tTOKEN_ATTRSET_BEGIN = tTOKEN_CLASS_END-1,
5926 tTOKEN_ATTRSET_END,
5927 tNEXT_ID = tTOKEN_ATTRSET_END,
5928 idMax = ((tMax<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5929 idMin = ((tMin<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5930 idFreeze = ((tFreeze<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5931 idInspect = ((tInspect<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5932 idIntern = ((tIntern<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5933 idObject_id = ((tObject_id<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5934 idConst_missing = ((tConst_missing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5935 idMethodMissing = ((tMethodMissing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5936 idMethod_added = ((tMethod_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5937 idSingleton_method_added = ((tSingleton_method_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5938 idMethod_removed = ((tMethod_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5939 idSingleton_method_removed = ((tSingleton_method_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5940 idMethod_undefined = ((tMethod_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5941 idSingleton_method_undefined = ((tSingleton_method_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5942 idLength = ((tLength<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5943 idSize = ((tSize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5944 idGets = ((tGets<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5945 idSucc = ((tSucc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5946 idEach = ((tEach<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5947 idProc = ((tProc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5948 idLambda = ((tLambda<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5949 idSend = ((tSend<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5950 id__send__ = ((t__send__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5951 id__attached__ = ((t__attached__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5952 id__recursive_key__ = ((t__recursive_key__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5953 idInitialize = ((tInitialize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5954 idInitialize_copy = ((tInitialize_copy<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5955 idInitialize_clone = ((tInitialize_clone<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5956 idInitialize_dup = ((tInitialize_dup<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5957 idTo_int = ((tTo_int<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5958 idTo_ary = ((tTo_ary<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5959 idTo_str = ((tTo_str<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5960 idTo_sym = ((tTo_sym<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5961 idTo_hash = ((tTo_hash<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5962 idTo_proc = ((tTo_proc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5963 idTo_io = ((tTo_io<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5964 idTo_a = ((tTo_a<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5965 idTo_s = ((tTo_s<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5966 idTo_i = ((tTo_i<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5967 idTo_f = ((tTo_f<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5968 idTo_r = ((tTo_r<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5969 idBt = ((tBt<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5970 idBt_locations = ((tBt_locations<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5971 idCall = ((tCall<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5972 idMesg = ((tMesg<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5973 idException = ((tException<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5974 idLocals = ((tLocals<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5975 idNOT = ((tNOT<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5976 idAND = ((tAND<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5977 idOR = ((tOR<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5978 idDiv = ((tDiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5979 idDivmod = ((tDivmod<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5980 idFdiv = ((tFdiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5981 idQuo = ((tQuo<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5982 idName = ((tName<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5983 idNil = ((tNil<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5984 idUScore = ((tUScore<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5985 idNUMPARAM_1 = ((tNUMPARAM_1<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5986 idNUMPARAM_2 = ((tNUMPARAM_2<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5987 idNUMPARAM_3 = ((tNUMPARAM_3<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5988 idNUMPARAM_4 = ((tNUMPARAM_4<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5989 idNUMPARAM_5 = ((tNUMPARAM_5<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5990 idNUMPARAM_6 = ((tNUMPARAM_6<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5991 idNUMPARAM_7 = ((tNUMPARAM_7<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5992 idNUMPARAM_8 = ((tNUMPARAM_8<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5993 idNUMPARAM_9 = ((tNUMPARAM_9<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5994 idLASTLINE = ((tLASTLINE<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
5995 idBACKREF = ((tBACKREF<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
5996 idERROR_INFO = ((tERROR_INFO<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
5997 tLAST_OP_ID = tPRESERVED_ID_END-1,
5998 idLAST_OP_ID = tLAST_OP_ID >> RUBY_ID_SCOPE_SHIFT
5999};
6000void rb_obj_info_dump(VALUE obj);
6001void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
6002
6003
6004void ruby_debug_breakpoint(void);
6005__attribute__((__format__(__printf__, (1), (2)))) void ruby_debug_printf(const char*, ...);
6006
6007
6008VALUE rb_ary_last(int, const VALUE *, VALUE);
6009void rb_ary_set_len(VALUE, long);
6010void rb_ary_delete_same(VALUE, VALUE);
6011VALUE rb_ary_tmp_new_fill(long capa);
6012VALUE rb_ary_at(VALUE, VALUE);
6013size_t rb_ary_memsize(VALUE);
6014VALUE rb_to_array_type(VALUE obj);
6015VALUE rb_to_array(VALUE obj);
6016void rb_ary_cancel_sharing(VALUE ary);
6017static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
6018static inline _Bool ARY_PTR_USING_P(VALUE ary);
6019static inline void RARY_TRANSIENT_SET(VALUE ary);
6020static inline void RARY_TRANSIENT_UNSET(VALUE ary);
6021
6022
6023VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
6024VALUE rb_check_to_array(VALUE ary);
6025VALUE rb_ary_behead(VALUE, long);
6026VALUE rb_ary_aref1(VALUE ary, VALUE i);
6027struct rb_execution_context_struct;
6028VALUE rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts);
6029
6030
6031static inline VALUE
6032rb_ary_entry_internal(VALUE ary, long offset)
6033{
6034 long len = rb_array_len(ary);
6035 const VALUE *ptr = rb_array_const_ptr_transient(ary);
6036 if (len == 0) return ((VALUE)RUBY_Qnil);
6037 if (offset < 0) {
6038 offset += len;
6039 if (offset < 0) return ((VALUE)RUBY_Qnil);
6040 }
6041 else if (len <= offset) {
6042 return ((VALUE)RUBY_Qnil);
6043 }
6044 return ptr[offset];
6045}
6046static inline _Bool
6047ARY_PTR_USING_P(VALUE ary)
6048{
6049 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER14));
6050}
6051static inline void
6052RARY_TRANSIENT_SET(VALUE ary)
6053{
6054 RB_FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6055}
6056static inline void
6057RARY_TRANSIENT_UNSET(VALUE ary)
6058{
6059 RB_FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6060}
6061__attribute__((__pure__))
6062__attribute__((__artificial__))
6063static inline VALUE
6064RARRAY_AREF(VALUE ary, long i)
6065{
6066 ((void)0);
6067 return rb_array_const_ptr_transient(ary)[i];
6068}
6069typedef unsigned long long rb_serial_t;
6070struct rb_callable_method_entry_struct;
6071struct rb_method_definition_struct;
6072struct rb_execution_context_struct;
6073struct rb_control_frame_struct;
6074struct rb_callinfo;
6075enum method_missing_reason {
6076 MISSING_NOENTRY = 0x00,
6077 MISSING_PRIVATE = 0x01,
6078 MISSING_PROTECTED = 0x02,
6079 MISSING_FCALL = 0x04,
6080 MISSING_VCALL = 0x08,
6081 MISSING_SUPER = 0x10,
6082 MISSING_MISSING = 0x20,
6083 MISSING_NONE = 0x40
6084};
6085rb_serial_t rb_next_class_serial(void);
6086VALUE rb_obj_is_thread(VALUE obj);
6087void rb_vm_mark(void *ptr);
6088void rb_vm_each_stack_value(void *ptr, void (*cb)(VALUE, void*), void *ctx);
6089__attribute__((__pure__)) VALUE rb_vm_top_self(void);
6090void rb_vm_inc_const_missing_count(void);
6091const void **rb_vm_get_insns_address_table(void);
6092VALUE rb_source_location(int *pline);
6093const char *rb_source_location_cstr(int *pline);
6094static void rb_vm_pop_cfunc_frame(void);
6095int rb_vm_add_root_module(VALUE module);
6096void rb_vm_check_redefinition_by_prepend(VALUE klass);
6097int rb_vm_check_optimizable_mid(VALUE mid);
6098VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
6099static VALUE ruby_vm_special_exception_copy(VALUE);
6100__attribute__((__pure__)) st_table *rb_vm_fstring_table(void);
6101
6102
6103VALUE rb_vm_exec(struct rb_execution_context_struct *, _Bool);
6104
6105
6106VALUE rb_current_realfilepath(void);
6107VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
6108typedef void rb_check_funcall_hook(int, VALUE, ID, int, const VALUE *, VALUE);
6109VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
6110 rb_check_funcall_hook *hook, VALUE arg);
6111VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *argv,
6112 rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
6113const char *rb_type_str(enum ruby_value_type type);
6114VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
6115VALUE rb_check_funcall_basic_kw(VALUE, ID, VALUE, int, const VALUE*, int);
6116VALUE rb_yield_1(VALUE val);
6117VALUE rb_yield_force_blockarg(VALUE values);
6118VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
6119 rb_block_call_func_t bl_proc, int min_argc, int max_argc,
6120 VALUE data2);
6121void rb_check_stack_overflow(void);
6122VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
6123VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
6124struct rb_iseq_struct;
6125
6126
6127const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass);
6128
6129
6130struct rb_execution_context_struct;
6131
6132
6133int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE obj, ID id, int priv);
6134
6135
6136void rb_print_backtrace(void);
6137VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
6138VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval);
6139VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6140VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6141VALUE rb_make_backtrace(void);
6142void rb_backtrace_print_as_bugreport(void);
6143int rb_backtrace_p(VALUE obj);
6144VALUE rb_backtrace_to_str_ary(VALUE obj);
6145VALUE rb_backtrace_to_location_ary(VALUE obj);
6146void rb_backtrace_each(VALUE (*iter)(VALUE recv, VALUE str), VALUE output);
6147int rb_frame_info_p(VALUE obj);
6148int rb_get_node_id_from_frame_info(VALUE obj);
6149const struct rb_iseq_struct *rb_get_iseq_from_frame_info(VALUE obj);
6150
6151
6152VALUE rb_ec_backtrace_object(const struct rb_execution_context_struct *ec);
6153void rb_backtrace_use_iseq_first_lineno_for_last_location(VALUE self);
6154
6155
6156struct rb_execution_context_struct;
6157struct rb_objspace;
6158typedef struct ractor_newobj_size_pool_cache {
6159 struct RVALUE *freelist;
6160 struct heap_page *using_page;
6161} rb_ractor_newobj_size_pool_cache_t;
6162typedef struct ractor_newobj_cache {
6163 rb_ractor_newobj_size_pool_cache_t size_pool_caches[1];
6164} rb_ractor_newobj_cache_t;
6165extern VALUE *ruby_initial_gc_stress_ptr;
6166extern int ruby_disable_gc;
6167__attribute__((__malloc__)) void *ruby_mimmalloc(size_t size);
6168void ruby_mimfree(void *ptr);
6169void rb_objspace_set_event_hook(const rb_event_flag_t event);
6170VALUE rb_objspace_gc_enable(struct rb_objspace *);
6171VALUE rb_objspace_gc_disable(struct rb_objspace *);
6172void ruby_gc_set_params(void);
6173void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
6174__attribute__((__alloc_align__(1)))
6175__attribute__((__malloc__)) void *rb_aligned_malloc(size_t, size_t) __attribute__((__alloc_size__ (2)));
6176size_t rb_size_mul_or_raise(size_t, size_t, VALUE);
6177size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE);
6178__attribute__((__malloc__)) void *rb_xmalloc_mul_add(size_t, size_t, size_t);
6179void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
6180__attribute__((__malloc__)) void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6181__attribute__((__malloc__)) void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6182static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6183static 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)));
6184static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
6185VALUE rb_class_allocate_instance(VALUE klass);
6186void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
6187size_t rb_gc_obj_slot_size(VALUE obj);
6188_Bool rb_gc_size_allocatable_p(size_t size);
6189int rb_objspace_garbage_object_p(VALUE obj);
6190
6191
6192const char *rb_objspace_data_type_name(VALUE obj);
6193VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
6194VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
6195VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
6196size_t rb_obj_memsize_of(VALUE);
6197void rb_gc_verify_internal_consistency(void);
6198size_t rb_obj_gc_flags(VALUE, ID[], size_t);
6199void rb_gc_mark_values(long n, const VALUE *values);
6200void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
6201void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6202void *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)));
6203void ruby_sized_xfree(void *x, size_t size);
6204
6205
6206
6207
6208int rb_ec_stack_check(struct rb_execution_context_struct *ec);
6209void rb_gc_writebarrier_remember(VALUE obj);
6210const char *rb_obj_info(VALUE obj);
6211
6212
6213static inline void *
6214ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
6215{
6216 return ruby_xrealloc(ptr, new_size);
6217}
6218static inline void *
6219ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
6220{
6221 return ruby_xrealloc2(ptr, new_count, elemsiz);
6222}
6223static inline void
6224ruby_sized_xfree_inlined(void *ptr, size_t size)
6225{
6226 ruby_xfree(ptr);
6227}
6228enum imemo_type {
6229 imemo_env = 0,
6230 imemo_cref = 1,
6231 imemo_svar = 2,
6232 imemo_throw_data = 3,
6233 imemo_ifunc = 4,
6234 imemo_memo = 5,
6235 imemo_ment = 6,
6236 imemo_iseq = 7,
6237 imemo_tmpbuf = 8,
6238 imemo_ast = 9,
6239 imemo_parser_strterm = 10,
6240 imemo_callinfo = 11,
6241 imemo_callcache = 12,
6242 imemo_constcache = 13,
6243};
6244struct vm_svar {
6245 VALUE flags;
6246 const VALUE cref_or_me;
6247 const VALUE lastline;
6248 const VALUE backref;
6249 const VALUE others;
6250};
6251struct vm_throw_data {
6252 VALUE flags;
6253 VALUE reserved;
6254 const VALUE throw_obj;
6255 const struct rb_control_frame_struct *catch_frame;
6256 int throw_state;
6257};
6258struct vm_ifunc_argc {
6259 int min, max;
6260};
6261struct vm_ifunc {
6262 VALUE flags;
6263 VALUE reserved;
6264 rb_block_call_func_t func;
6265 const void *data;
6266 struct vm_ifunc_argc argc;
6267};
6268struct rb_imemo_tmpbuf_struct {
6269 VALUE flags;
6270 VALUE reserved;
6271 VALUE *ptr;
6272 struct rb_imemo_tmpbuf_struct *next;
6273 size_t cnt;
6274};
6275struct MEMO {
6276 VALUE flags;
6277 VALUE reserved;
6278 const VALUE v1;
6279 const VALUE v2;
6280 union {
6281 long cnt;
6282 long state;
6283 const VALUE value;
6284 void (*func)(void);
6285 } u3;
6286};
6287typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
6288VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
6289rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
6290struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
6291void rb_strterm_mark(VALUE obj);
6292static inline enum imemo_type imemo_type(VALUE imemo);
6293static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
6294static inline _Bool imemo_throw_data_p(VALUE imemo);
6295static inline struct vm_ifunc *rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data);
6296static inline VALUE rb_imemo_tmpbuf_auto_free_pointer(void);
6297static inline void *RB_IMEMO_TMPBUF_PTR(VALUE v);
6298static inline void *rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr);
6299static inline VALUE rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str);
6300static inline void MEMO_V1_SET(struct MEMO *m, VALUE v);
6301static inline void MEMO_V2_SET(struct MEMO *m, VALUE v);
6302
6303
6304VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
6305const char *rb_imemo_name(enum imemo_type type);
6306
6307
6308static inline enum imemo_type
6309imemo_type(VALUE imemo)
6310{
6311 return (((struct RBasic *)(imemo))->flags >> ((VALUE)RUBY_FL_USHIFT)) & 0x0f;
6312}
6313static inline int
6314imemo_type_p(VALUE imemo, enum imemo_type imemo_type)
6315{
6316 if ((__builtin_expect(!!(!RB_SPECIAL_CONST_P(imemo)), 1))) {
6317 const VALUE mask = (0x0f << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_MASK;
6318 const VALUE expected_type = (imemo_type << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_IMEMO;
6319 return expected_type == (((struct RBasic *)(imemo))->flags & mask);
6320 }
6321 else {
6322 return 0;
6323 }
6324}
6325static inline _Bool
6326imemo_throw_data_p(VALUE imemo)
6327{
6328 return RB_TYPE_P(imemo, RUBY_T_IMEMO);
6329}
6330static inline struct vm_ifunc *
6331rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data)
6332{
6333 return rb_vm_ifunc_new(func, data, 0, (-1));
6334}
6335static inline VALUE
6336rb_imemo_tmpbuf_auto_free_pointer(void)
6337{
6338 return rb_imemo_new(imemo_tmpbuf, 0, 0, 0, 0);
6339}
6340static inline void *
6341RB_IMEMO_TMPBUF_PTR(VALUE v)
6342{
6343 const struct rb_imemo_tmpbuf_struct *p = (const void *)v;
6344 return p->ptr;
6345}
6346static inline void *
6347rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr)
6348{
6349 return ((rb_imemo_tmpbuf_t *)v)->ptr = ptr;
6350}
6351static inline VALUE
6352rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str)
6353{
6354 const void *src;
6355 VALUE imemo;
6356 rb_imemo_tmpbuf_t *tmpbuf;
6357 void *dst;
6358 size_t len;
6359 rb_string_value(&(str));
6360 imemo = rb_imemo_tmpbuf_auto_free_pointer();
6361 tmpbuf = (rb_imemo_tmpbuf_t *)imemo;
6362 len = RSTRING_LEN(str);
6363 src = RSTRING_PTR(str);
6364 dst = ruby_xmalloc(len);
6365 ruby_nonempty_memcpy(dst, src, len);
6366 tmpbuf->ptr = dst;
6367 return imemo;
6368}
6369static inline void
6370MEMO_V1_SET(struct MEMO *m, VALUE v)
6371{
6372 rb_obj_write((VALUE)(m), __extension__({
6373 ;
6374 ; __typeof__((VALUE *)(&m->v1)) unaligned_member_access_result = ((VALUE *)(&m->v1));
6375 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.1.3/internal/imemo.h", 234);
6376}
6377static inline void
6378MEMO_V2_SET(struct MEMO *m, VALUE v)
6379{
6380 rb_obj_write((VALUE)(m), __extension__({
6381 ;
6382 ; __typeof__((VALUE *)(&m->v2)) unaligned_member_access_result = ((VALUE *)(&m->v2));
6383 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.1.3/internal/imemo.h", 240);
6384}
6385typedef enum {
6386 METHOD_VISI_UNDEF = 0x00,
6387 METHOD_VISI_PUBLIC = 0x01,
6388 METHOD_VISI_PRIVATE = 0x02,
6389 METHOD_VISI_PROTECTED = 0x03,
6390 METHOD_VISI_MASK = 0x03
6391} rb_method_visibility_t;
6392typedef struct rb_scope_visi_struct {
6393 rb_method_visibility_t method_visi : 3;
6394 unsigned int module_func : 1;
6395} rb_scope_visibility_t;
6396typedef struct rb_cref_struct {
6397 VALUE flags;
6398 VALUE refinements;
6399 VALUE klass_or_self;
6400 struct rb_cref_struct * next;
6401 const rb_scope_visibility_t scope_visi;
6402} rb_cref_t;
6403typedef struct rb_method_entry_struct {
6404 VALUE flags;
6405 VALUE defined_class;
6406 struct rb_method_definition_struct * const def;
6407 ID called_id;
6408 VALUE owner;
6409} rb_method_entry_t;
6410typedef struct rb_callable_method_entry_struct {
6411 VALUE flags;
6412 const VALUE defined_class;
6413 struct rb_method_definition_struct * const def;
6414 ID called_id;
6415 const VALUE owner;
6416} rb_callable_method_entry_t;
6417static inline void
6418METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
6419{
6420 ((void)0);
6421 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) | (visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0));
6422}
6423static inline void
6424METHOD_ENTRY_BASIC_SET(rb_method_entry_t *me, unsigned int basic)
6425{
6426 ((void)0);
6427 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER6) )) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2));
6428}
6429static inline void
6430METHOD_ENTRY_FLAGS_SET(rb_method_entry_t *me, rb_method_visibility_t visi, unsigned int basic)
6431{
6432 ((void)0);
6433 ((void)0);
6434 me->flags =
6435 (me->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6436 ((visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2)));
6437}
6438static inline void
6439METHOD_ENTRY_FLAGS_COPY(rb_method_entry_t *dst, const rb_method_entry_t *src)
6440{
6441 dst->flags =
6442 (dst->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6443 (src->flags & (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)));
6444}
6445typedef enum {
6446 VM_METHOD_TYPE_ISEQ,
6447 VM_METHOD_TYPE_CFUNC,
6448 VM_METHOD_TYPE_ATTRSET,
6449 VM_METHOD_TYPE_IVAR,
6450 VM_METHOD_TYPE_BMETHOD,
6451 VM_METHOD_TYPE_ZSUPER,
6452 VM_METHOD_TYPE_ALIAS,
6453 VM_METHOD_TYPE_UNDEF,
6454 VM_METHOD_TYPE_NOTIMPLEMENTED,
6455 VM_METHOD_TYPE_OPTIMIZED,
6456 VM_METHOD_TYPE_MISSING,
6457 VM_METHOD_TYPE_REFINED,
6458
6459} rb_method_type_t;
6460__extension__ _Static_assert(VM_METHOD_TYPE_REFINED <= (1<<4), "VM_METHOD_TYPE_MINIMUM_BITS" ": " "VM_METHOD_TYPE_REFINED <= (1<<VM_METHOD_TYPE_MINIMUM_BITS)");
6461typedef struct rb_iseq_struct rb_iseq_t;
6462typedef struct rb_method_iseq_struct {
6463 const rb_iseq_t * iseqptr;
6464 rb_cref_t * cref;
6465} rb_method_iseq_t;
6466typedef struct rb_method_cfunc_struct {
6467 VALUE (*func)();
6468 VALUE (*invoker)(VALUE recv, int argc, const VALUE *argv, VALUE (*func)());
6469 int argc;
6470} rb_method_cfunc_t;
6471typedef struct rb_method_attr_struct {
6472 ID id;
6473 VALUE location;
6474} rb_method_attr_t;
6475typedef struct rb_method_alias_struct {
6476 struct rb_method_entry_struct * original_me;
6477} rb_method_alias_t;
6478typedef struct rb_method_refined_struct {
6479 struct rb_method_entry_struct * orig_me;
6480 VALUE owner;
6481} rb_method_refined_t;
6482typedef struct rb_method_bmethod_struct {
6483 VALUE proc;
6484 struct rb_hook_list_struct *hooks;
6485 VALUE defined_ractor;
6486} rb_method_bmethod_t;
6487enum method_optimized_type {
6488 OPTIMIZED_METHOD_TYPE_SEND,
6489 OPTIMIZED_METHOD_TYPE_CALL,
6490 OPTIMIZED_METHOD_TYPE_BLOCK_CALL,
6491 OPTIMIZED_METHOD_TYPE_STRUCT_AREF,
6492 OPTIMIZED_METHOD_TYPE_STRUCT_ASET,
6493 OPTIMIZED_METHOD_TYPE__MAX
6494};
6495typedef struct rb_method_optimized {
6496 enum method_optimized_type type;
6497 unsigned int index;
6498} rb_method_optimized_t;
6499struct rb_method_definition_struct {
6500 rb_method_type_t type : 4;
6501 unsigned int iseq_overload: 1;
6502 int alias_count : 27;
6503 int complemented_count : 28;
6504 unsigned int no_redef_warning: 1;
6505 union {
6506 rb_method_iseq_t iseq;
6507 rb_method_cfunc_t cfunc;
6508 rb_method_attr_t attr;
6509 rb_method_alias_t alias;
6510 rb_method_refined_t refined;
6511 rb_method_bmethod_t bmethod;
6512 rb_method_optimized_t optimized;
6513 } body;
6514 ID original_id;
6515 uintptr_t method_serial;
6516};
6517struct rb_id_table;
6518typedef struct rb_method_definition_struct rb_method_definition_t;
6519__extension__ _Static_assert(__builtin_offsetof (rb_method_definition_t, body)==8, "sizeof_method_def" ": " "offsetof(rb_method_definition_t, body)==8");
6520void rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi);
6521void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(), int argc, rb_method_visibility_t visi);
6522void rb_add_method_iseq(VALUE klass, ID mid, const rb_iseq_t *iseq, rb_cref_t *cref, rb_method_visibility_t visi);
6523void rb_add_method_optimized(VALUE klass, ID mid, enum method_optimized_type, unsigned int index, rb_method_visibility_t visi);
6524void rb_add_refined_method_entry(VALUE refined_class, ID mid);
6525rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex);
6526rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def);
6527const rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
6528const rb_method_entry_t *rb_method_entry(VALUE klass, ID id);
6529const rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6530const rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6531const rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
6532
6533
6534const rb_method_entry_t *rb_resolve_me_location(const rb_method_entry_t *, VALUE[5]);
6535
6536
6537const rb_callable_method_entry_t *rb_callable_method_entry(VALUE klass, ID id);
6538const rb_callable_method_entry_t *rb_callable_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6539const rb_callable_method_entry_t *rb_callable_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6540int rb_method_entry_arity(const rb_method_entry_t *me);
6541int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2);
6542st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
6543VALUE rb_method_entry_location(const rb_method_entry_t *me);
6544void rb_free_method_entry(const rb_method_entry_t *me);
6545const rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me);
6546const rb_callable_method_entry_t *rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID called_id, VALUE defined_class);
6547void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src);
6548void rb_method_table_insert(VALUE klass, struct rb_id_table *table, ID method_id, const rb_method_entry_t *me);
6549void rb_scope_visibility_set(rb_method_visibility_t);
6550VALUE rb_unnamed_parameters(int arity);
6551void rb_clear_method_cache(VALUE klass_or_module, ID mid);
6552void rb_clear_method_cache_all(void);
6553enum node_type {
6554 NODE_SCOPE,
6555 NODE_BLOCK,
6556 NODE_IF,
6557 NODE_UNLESS,
6558 NODE_CASE,
6559 NODE_CASE2,
6560 NODE_CASE3,
6561 NODE_WHEN,
6562 NODE_IN,
6563 NODE_WHILE,
6564 NODE_UNTIL,
6565 NODE_ITER,
6566 NODE_FOR,
6567 NODE_FOR_MASGN,
6568 NODE_BREAK,
6569 NODE_NEXT,
6570 NODE_REDO,
6571 NODE_RETRY,
6572 NODE_BEGIN,
6573 NODE_RESCUE,
6574 NODE_RESBODY,
6575 NODE_ENSURE,
6576 NODE_AND,
6577 NODE_OR,
6578 NODE_MASGN,
6579 NODE_LASGN,
6580 NODE_DASGN,
6581 NODE_GASGN,
6582 NODE_IASGN,
6583 NODE_CDECL,
6584 NODE_CVASGN,
6585 NODE_OP_ASGN1,
6586 NODE_OP_ASGN2,
6587 NODE_OP_ASGN_AND,
6588 NODE_OP_ASGN_OR,
6589 NODE_OP_CDECL,
6590 NODE_CALL,
6591 NODE_OPCALL,
6592 NODE_FCALL,
6593 NODE_VCALL,
6594 NODE_QCALL,
6595 NODE_SUPER,
6596 NODE_ZSUPER,
6597 NODE_LIST,
6598 NODE_ZLIST,
6599 NODE_VALUES,
6600 NODE_HASH,
6601 NODE_RETURN,
6602 NODE_YIELD,
6603 NODE_LVAR,
6604 NODE_DVAR,
6605 NODE_GVAR,
6606 NODE_IVAR,
6607 NODE_CONST,
6608 NODE_CVAR,
6609 NODE_NTH_REF,
6610 NODE_BACK_REF,
6611 NODE_MATCH,
6612 NODE_MATCH2,
6613 NODE_MATCH3,
6614 NODE_LIT,
6615 NODE_STR,
6616 NODE_DSTR,
6617 NODE_XSTR,
6618 NODE_DXSTR,
6619 NODE_EVSTR,
6620 NODE_DREGX,
6621 NODE_ONCE,
6622 NODE_ARGS,
6623 NODE_ARGS_AUX,
6624 NODE_OPT_ARG,
6625 NODE_KW_ARG,
6626 NODE_POSTARG,
6627 NODE_ARGSCAT,
6628 NODE_ARGSPUSH,
6629 NODE_SPLAT,
6630 NODE_BLOCK_PASS,
6631 NODE_DEFN,
6632 NODE_DEFS,
6633 NODE_ALIAS,
6634 NODE_VALIAS,
6635 NODE_UNDEF,
6636 NODE_CLASS,
6637 NODE_MODULE,
6638 NODE_SCLASS,
6639 NODE_COLON2,
6640 NODE_COLON3,
6641 NODE_DOT2,
6642 NODE_DOT3,
6643 NODE_FLIP2,
6644 NODE_FLIP3,
6645 NODE_SELF,
6646 NODE_NIL,
6647 NODE_TRUE,
6648 NODE_FALSE,
6649 NODE_ERRINFO,
6650 NODE_DEFINED,
6651 NODE_POSTEXE,
6652 NODE_DSYM,
6653 NODE_ATTRASGN,
6654 NODE_LAMBDA,
6655 NODE_ARYPTN,
6656 NODE_HSHPTN,
6657 NODE_FNDPTN,
6658 NODE_LAST
6659};
6660typedef struct rb_code_position_struct {
6661 int lineno;
6662 int column;
6663} rb_code_position_t;
6664typedef struct rb_code_location_struct {
6665 rb_code_position_t beg_pos;
6666 rb_code_position_t end_pos;
6667} rb_code_location_t;
6668static inline rb_code_location_t
6669code_loc_gen(const rb_code_location_t *loc1, const rb_code_location_t *loc2)
6670{
6671 rb_code_location_t loc;
6672 loc.beg_pos = loc1->beg_pos;
6673 loc.end_pos = loc2->end_pos;
6674 return loc;
6675}
6676typedef struct rb_ast_id_table {
6677 int size;
6678 ID ids[];
6679} rb_ast_id_table_t;
6680typedef struct RNode {
6681 VALUE flags;
6682 union {
6683 struct RNode *node;
6684 ID id;
6685 VALUE value;
6686 rb_ast_id_table_t *tbl;
6687 } u1;
6688 union {
6689 struct RNode *node;
6690 ID id;
6691 long argc;
6692 VALUE value;
6693 } u2;
6694 union {
6695 struct RNode *node;
6696 ID id;
6697 long state;
6698 struct rb_args_info *args;
6699 struct rb_ary_pattern_info *apinfo;
6700 struct rb_fnd_pattern_info *fpinfo;
6701 VALUE value;
6702 } u3;
6703 rb_code_location_t nd_loc;
6704 int node_id;
6705} NODE;
6706VALUE rb_node_case_when_optimizable_literal(const NODE *const node);
6707
6708
6709typedef struct node_buffer_struct node_buffer_t;
6710typedef struct rb_ast_body_struct {
6711 const NODE *root;
6712 VALUE compile_option;
6713 VALUE script_lines;
6714} rb_ast_body_t;
6715typedef struct rb_ast_struct {
6716 VALUE flags;
6717 node_buffer_t *node_buffer;
6718 rb_ast_body_t body;
6719} rb_ast_t;
6720rb_ast_t *rb_ast_new(void);
6721void rb_ast_mark(rb_ast_t*);
6722void rb_ast_update_references(rb_ast_t*);
6723void rb_ast_dispose(rb_ast_t*);
6724void rb_ast_free(rb_ast_t*);
6725size_t rb_ast_memsize(const rb_ast_t*);
6726void rb_ast_add_mark_object(rb_ast_t*, VALUE);
6727NODE *rb_ast_newnode(rb_ast_t*, enum node_type type);
6728void rb_ast_delete_node(rb_ast_t*, NODE *n);
6729rb_ast_id_table_t *rb_ast_new_local_table(rb_ast_t*, int);
6730rb_ast_id_table_t *rb_ast_resize_latest_local_table(rb_ast_t*, int);
6731VALUE rb_parser_new(void);
6732VALUE rb_parser_end_seen_p(VALUE);
6733VALUE rb_parser_encoding(VALUE);
6734VALUE rb_parser_set_yydebug(VALUE, VALUE);
6735VALUE rb_parser_dump_tree(const NODE *node, int comment);
6736void rb_parser_set_options(VALUE, int, int, int, int);
6737rb_ast_t *rb_parser_compile_string(VALUE, const char*, VALUE, int);
6738rb_ast_t *rb_parser_compile_string_path(VALUE vparser, VALUE fname, VALUE src, int line);
6739rb_ast_t *rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE input, int line);
6740rb_ast_t *rb_parser_compile_generic(VALUE vparser, VALUE (*lex_gets)(VALUE, int), VALUE fname, VALUE input, int line);
6741void rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2);
6742const char *ruby_node_name(int node);
6743const struct kwtable *rb_reserved_word(const char *, unsigned int);
6744struct rb_args_info {
6745 NODE *pre_init;
6746 NODE *post_init;
6747 int pre_args_num;
6748 int post_args_num;
6749 ID first_post_arg;
6750 ID rest_arg;
6751 ID block_arg;
6752 NODE *kw_args;
6753 NODE *kw_rest_arg;
6754 NODE *opt_args;
6755 unsigned int no_kwarg: 1;
6756 unsigned int ruby2_keywords: 1;
6757 VALUE imemo;
6758};
6759struct rb_ary_pattern_info {
6760 NODE *pre_args;
6761 NODE *rest_arg;
6762 NODE *post_args;
6763};
6764struct rb_fnd_pattern_info {
6765 NODE *pre_rest_arg;
6766 NODE *args;
6767 NODE *post_rest_arg;
6768};
6769struct parser_params;
6770void *rb_parser_malloc(struct parser_params *, size_t);
6771void *rb_parser_realloc(struct parser_params *, void *, size_t);
6772void *rb_parser_calloc(struct parser_params *, size_t, size_t);
6773void rb_parser_free(struct parser_params *, void *);
6774__attribute__((__format__(__printf__, (2), (3)))) void rb_parser_printf(struct parser_params *parser, const char *fmt, ...);
6775void rb_ast_node_type_change(NODE *n, enum node_type type);
6776
6777
6778static inline VALUE
6779rb_node_set_type(NODE *n, enum node_type t)
6780{
6781 return (n)->flags=(((n)->flags&~(((VALUE)0x7f)<<8))|((((unsigned long)(t))<<8)&(((VALUE)0x7f)<<8)));
6782}
6783static inline _Bool
6784nd_type_p(const NODE *n, enum node_type t)
6785{
6786 return (enum node_type)((int) (((n)->flags & (((VALUE)0x7f)<<8))>>8)) == t;
6787}
6788typedef unsigned int rb_atomic_t;
6789__attribute__((__artificial__))
6790
6791__attribute__((__nonnull__ (1)))
6792static inline rb_atomic_t
6793rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6794{
6795 return __atomic_fetch_add(ptr, val, 5);
6796}
6797__attribute__((__artificial__))
6798
6799__attribute__((__nonnull__ (1)))
6800static inline void
6801rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6802{
6803 __atomic_add_fetch(ptr, val, 5);
6804}
6805__attribute__((__artificial__))
6806
6807__attribute__((__nonnull__ (1)))
6808static inline void
6809rbimpl_atomic_size_add(volatile size_t *ptr, size_t val)
6810{
6811 __atomic_add_fetch(ptr, val, 5);
6812}
6813__attribute__((__artificial__))
6814
6815__attribute__((__nonnull__ (1)))
6816static inline void
6817rbimpl_atomic_inc(volatile rb_atomic_t *ptr)
6818{
6819 rbimpl_atomic_add(ptr, 1);
6820}
6821__attribute__((__artificial__))
6822
6823__attribute__((__nonnull__ (1)))
6824static inline void
6825rbimpl_atomic_size_inc(volatile size_t *ptr)
6826{
6827 rbimpl_atomic_size_add(ptr, 1);
6828}
6829__attribute__((__artificial__))
6830
6831__attribute__((__nonnull__ (1)))
6832static inline rb_atomic_t
6833rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6834{
6835 return __atomic_fetch_sub(ptr, val, 5);
6836}
6837__attribute__((__artificial__))
6838
6839__attribute__((__nonnull__ (1)))
6840static inline void
6841rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6842{
6843 __atomic_sub_fetch(ptr, val, 5);
6844}
6845__attribute__((__artificial__))
6846
6847__attribute__((__nonnull__ (1)))
6848static inline void
6849rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val)
6850{
6851 __atomic_sub_fetch(ptr, val, 5);
6852}
6853__attribute__((__artificial__))
6854
6855__attribute__((__nonnull__ (1)))
6856static inline void
6857rbimpl_atomic_dec(volatile rb_atomic_t *ptr)
6858{
6859 rbimpl_atomic_sub(ptr, 1);
6860}
6861__attribute__((__artificial__))
6862
6863__attribute__((__nonnull__ (1)))
6864static inline void
6865rbimpl_atomic_size_dec(volatile size_t *ptr)
6866{
6867 rbimpl_atomic_size_sub(ptr, 1);
6868}
6869__attribute__((__artificial__))
6870
6871__attribute__((__nonnull__ (1)))
6872static inline void
6873rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val)
6874{
6875 __atomic_or_fetch(ptr, val, 5);
6876}
6877__attribute__((__artificial__))
6878
6879__attribute__((__nonnull__ (1)))
6880static inline rb_atomic_t
6881rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val)
6882{
6883 return __atomic_exchange_n(ptr, val, 5);
6884}
6885__attribute__((__artificial__))
6886
6887__attribute__((__nonnull__ (1)))
6888static inline size_t
6889rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val)
6890{
6891 return __atomic_exchange_n(ptr, val, 5);
6892}
6893__attribute__((__artificial__))
6894
6895__attribute__((__nonnull__ (1)))
6896static inline void *
6897rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val)
6898{
6899 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
6900 const size_t sval = ((size_t)val);
6901 volatile size_t *const sptr = ((volatile size_t *)ptr);
6902 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
6903 return ((void *)sret);
6904}
6905__attribute__((__artificial__))
6906
6907__attribute__((__nonnull__ (1)))
6908static inline VALUE
6909rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val)
6910{
6911 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
6912 const size_t sval = ((size_t)val);
6913 volatile size_t *const sptr = ((volatile size_t *)ptr);
6914 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
6915 return ((VALUE)sret);
6916}
6917__attribute__((__artificial__))
6918
6919__attribute__((__nonnull__ (1)))
6920static inline void
6921rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val)
6922{
6923 __atomic_store_n(ptr, val, 5);
6924}
6925__attribute__((__artificial__))
6926
6927__attribute__((__nonnull__ (1)))
6928static inline rb_atomic_t
6929rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval)
6930{
6931 __atomic_compare_exchange_n(
6932 ptr, &oldval, newval, 0, 5, 5);
6933 return oldval;
6934}
6935__attribute__((__artificial__))
6936
6937__attribute__((__nonnull__ (1)))
6938static inline size_t
6939rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval)
6940{
6941 __atomic_compare_exchange_n(
6942 ptr, &oldval, newval, 0, 5, 5);
6943 return oldval;
6944}
6945__attribute__((__artificial__))
6946
6947__attribute__((__nonnull__ (1)))
6948static inline void *
6949rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval)
6950{
6951 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
6952 const size_t snew = ((size_t)newval);
6953 const size_t sold = ((size_t)oldval);
6954 volatile size_t *const sptr = ((volatile size_t *)ptr);
6955 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
6956 return ((void *)sret);
6957}
6958__attribute__((__artificial__))
6959
6960__attribute__((__nonnull__ (1)))
6961static inline VALUE
6962rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval)
6963{
6964 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
6965 const size_t snew = ((size_t)newval);
6966 const size_t sold = ((size_t)oldval);
6967 volatile size_t *const sptr = ((volatile size_t *)ptr);
6968 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
6969 return ((VALUE)sret);
6970}
6971typedef struct rb_darray_meta {
6972 int32_t size;
6973 int32_t capa;
6974} rb_darray_meta_t;
6975static inline int32_t
6976rb_darray_size(const void *ary)
6977{
6978 const rb_darray_meta_t *meta = ary;
6979 return meta ? meta->size : 0;
6980}
6981static inline int32_t
6982rb_darray_capa(const void *ary)
6983{
6984 const rb_darray_meta_t *meta = ary;
6985 return meta ? meta->capa : 0;
6986}
6987static inline void
6988rb_darray_free(void *ary)
6989{
6990 free(ary);
6991}
6992static inline size_t
6993rb_darray_buffer_size(int32_t capacity, size_t header_size, size_t element_size)
6994{
6995 if (capacity == 0) return 0;
6996 return header_size + (size_t)capacity * element_size;
6997}
6998static inline int
6999rb_darray_ensure_space(void *ptr_to_ary, size_t header_size, size_t element_size)
7000{
7001 rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
7002 rb_darray_meta_t *meta = *ptr_to_ptr_to_meta;
7003 int32_t current_capa = rb_darray_capa(meta);
7004 if (rb_darray_size(meta) < current_capa) return 1;
7005 int32_t new_capa;
7006 if (current_capa == 0) {
7007 new_capa = 1;
7008 }
7009 else {
7010 int64_t doubled = 2 * (int64_t)current_capa;
7011 new_capa = (int32_t)doubled;
7012 if (new_capa != doubled) return 0;
7013 }
7014 size_t current_buffer_size = rb_darray_buffer_size(current_capa, header_size, element_size);
7015 size_t new_buffer_size = rb_darray_buffer_size(new_capa, header_size, element_size);
7016 if (new_buffer_size <= current_buffer_size) return 0;
7017 rb_darray_meta_t *doubled_ary = realloc(meta, new_buffer_size);
7018 if (!doubled_ary) return 0;
7019 if (meta == ((void *)0)) {
7020 doubled_ary->size = 0;
7021 }
7022 doubled_ary->capa = new_capa;
7023 ruby_nonempty_memcpy(ptr_to_ary, &doubled_ary, sizeof(doubled_ary));
7024 return 1;
7025}
7026static inline int
7027rb_darray_make_impl(void *ptr_to_ary, int32_t array_size, size_t header_size, size_t element_size)
7028{
7029 rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
7030 if (array_size < 0) return 0;
7031 if (array_size == 0) {
7032 *ptr_to_ptr_to_meta = ((void *)0);
7033 return 1;
7034 }
7035 size_t buffer_size = rb_darray_buffer_size(array_size, header_size, element_size);
7036 rb_darray_meta_t *meta = calloc(buffer_size, 1);
7037 if (!meta) return 0;
7038 meta->size = array_size;
7039 meta->capa = array_size;
7040 ruby_nonempty_memcpy(ptr_to_ary, &meta, sizeof(meta));
7041 return 1;
7042}
7043struct sched_param {
7044 int sched_priority;
7045};
7046int sched_setparam(
7047 pid_t __pid,
7048 const struct sched_param *__param
7049);
7050int sched_getparam(
7051 pid_t __pid,
7052 struct sched_param *__param
7053);
7054int sched_setscheduler(
7055 pid_t __pid,
7056 int __policy,
7057 const struct sched_param *__param
7058);
7059int sched_getscheduler(
7060 pid_t __pid
7061);
7062int sched_get_priority_max(
7063 int __policy
7064);
7065int sched_get_priority_min(
7066 int __policy
7067);
7068int sched_rr_get_interval(
7069 pid_t __pid,
7070 struct timespec *__interval
7071);
7072int sched_yield( void );
7073int sched_getcpu(void);
7074int sched_getaffinity (pid_t, size_t, cpu_set_t *);
7075int sched_get_thread_affinity (void *, size_t, cpu_set_t *);
7076int sched_setaffinity (pid_t, size_t, const cpu_set_t *);
7077int sched_set_thread_affinity (void *, size_t, const cpu_set_t *);
7078int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
7079int pthread_attr_destroy (pthread_attr_t *);
7080int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
7081int pthread_attr_getguardsize (const pthread_attr_t *, size_t *);
7082int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
7083int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
7084int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
7085int pthread_attr_getscope (const pthread_attr_t *, int *);
7086int pthread_attr_init (pthread_attr_t *);
7087int pthread_attr_setdetachstate (pthread_attr_t *, int);
7088int pthread_attr_setguardsize (pthread_attr_t *, size_t);
7089int pthread_attr_setinheritsched (pthread_attr_t *, int);
7090int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
7091int pthread_attr_setschedpolicy (pthread_attr_t *, int);
7092int pthread_attr_setscope (pthread_attr_t *, int);
7093int pthread_attr_getstack (const pthread_attr_t *, void **, size_t *);
7094int pthread_attr_setstack (pthread_attr_t *, void *, size_t);
7095int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
7096int pthread_attr_setstacksize (pthread_attr_t *, size_t);
7097int pthread_cancel (pthread_t);
7098typedef void (*__cleanup_routine_type) (void *);
7099typedef struct _pthread_cleanup_handler
7100{
7101 __cleanup_routine_type function;
7102 void *arg;
7103 struct _pthread_cleanup_handler *next;
7104} __pthread_cleanup_handler;
7105void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
7106void _pthread_cleanup_pop (int execute);
7107int pthread_cond_broadcast (pthread_cond_t *);
7108int pthread_cond_destroy (pthread_cond_t *);
7109int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
7110int pthread_cond_signal (pthread_cond_t *);
7111int pthread_cond_clockwait (pthread_cond_t *, pthread_mutex_t *,
7112 clockid_t, const struct timespec *);
7113int pthread_cond_timedwait (pthread_cond_t *,
7114 pthread_mutex_t *, const struct timespec *);
7115int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
7116int pthread_condattr_destroy (pthread_condattr_t *);
7117int pthread_condattr_getclock (const pthread_condattr_t *, clockid_t *);
7118int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
7119int pthread_condattr_init (pthread_condattr_t *);
7120int pthread_condattr_setclock (pthread_condattr_t *, clockid_t);
7121int pthread_condattr_setpshared (pthread_condattr_t *, int);
7122int pthread_barrierattr_init (pthread_barrierattr_t *);
7123int pthread_barrierattr_setpshared (pthread_barrierattr_t *, int);
7124int pthread_barrierattr_getpshared (const pthread_barrierattr_t *, int *);
7125int pthread_barrierattr_destroy (pthread_barrierattr_t *);
7126int pthread_barrier_init (pthread_barrier_t *,
7127 const pthread_barrierattr_t *, unsigned);
7128int pthread_barrier_destroy (pthread_barrier_t *);
7129int pthread_barrier_wait (pthread_barrier_t *);
7130int pthread_create (pthread_t *, const pthread_attr_t *,
7131 void *(*)(void *), void *);
7132int pthread_detach (pthread_t);
7133int pthread_equal (pthread_t, pthread_t);
7134void pthread_exit (void *) __attribute__ ((__noreturn__));
7135int pthread_getcpuclockid (pthread_t, clockid_t *);
7136int pthread_getschedparam (pthread_t, int *, struct sched_param *);
7137void *pthread_getspecific (pthread_key_t);
7138int pthread_join (pthread_t, void **);
7139int pthread_key_create (pthread_key_t *, void (*)(void *));
7140int pthread_key_delete (pthread_key_t);
7141int pthread_mutex_destroy (pthread_mutex_t *);
7142int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
7143int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
7144int pthread_mutex_lock (pthread_mutex_t *);
7145int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
7146int pthread_mutex_clocklock (pthread_mutex_t *, clockid_t,
7147 const struct timespec *);
7148int pthread_mutex_timedlock (pthread_mutex_t *, const struct timespec *);
7149int pthread_mutex_trylock (pthread_mutex_t *);
7150int pthread_mutex_unlock (pthread_mutex_t *);
7151int pthread_mutexattr_destroy (pthread_mutexattr_t *);
7152int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
7153int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
7154int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
7155int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
7156int pthread_mutexattr_init (pthread_mutexattr_t *);
7157int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
7158int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
7159int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
7160int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
7161int pthread_spin_destroy (pthread_spinlock_t *);
7162int pthread_spin_init (pthread_spinlock_t *, int);
7163int pthread_spin_lock (pthread_spinlock_t *);
7164int pthread_spin_trylock (pthread_spinlock_t *);
7165int pthread_spin_unlock (pthread_spinlock_t *);
7166int pthread_rwlock_destroy (pthread_rwlock_t *);
7167int pthread_rwlock_init (pthread_rwlock_t *, const pthread_rwlockattr_t *);
7168int pthread_rwlock_rdlock (pthread_rwlock_t *);
7169int pthread_rwlock_clockrdlock (pthread_rwlock_t *, clockid_t,
7170 const struct timespec *);
7171int pthread_rwlock_timedrdlock (pthread_rwlock_t *, const struct timespec *);
7172int pthread_rwlock_tryrdlock (pthread_rwlock_t *);
7173int pthread_rwlock_wrlock (pthread_rwlock_t *);
7174int pthread_rwlock_clockwrlock (pthread_rwlock_t *, clockid_t,
7175 const struct timespec *);
7176int pthread_rwlock_timedwrlock (pthread_rwlock_t *, const struct timespec *);
7177int pthread_rwlock_trywrlock (pthread_rwlock_t *);
7178int pthread_rwlock_unlock (pthread_rwlock_t *);
7179int pthread_rwlockattr_init (pthread_rwlockattr_t *);
7180int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *, int *);
7181int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *, int);
7182int pthread_rwlockattr_destroy (pthread_rwlockattr_t *);
7183int pthread_once (pthread_once_t *, void (*)(void));
7184int pthread_getconcurrency (void);
7185int pthread_setconcurrency (int);
7186pthread_t pthread_self (void);
7187int pthread_setcancelstate (int, int *);
7188int pthread_setcanceltype (int, int *);
7189int pthread_setschedparam (pthread_t, int, const struct sched_param *);
7190int pthread_setschedprio (pthread_t, int);
7191int pthread_setspecific (pthread_key_t, const void *);
7192void pthread_testcancel (void);
7193int pthread_getaffinity_np (pthread_t, size_t, cpu_set_t *);
7194int pthread_getattr_np (pthread_t, pthread_attr_t *);
7195int pthread_getname_np (pthread_t, char *, size_t) __attribute__((__nonnull__(2)));
7196int pthread_setaffinity_np (pthread_t, size_t, const cpu_set_t *);
7197int pthread_setname_np (pthread_t, const char *) __attribute__((__nonnull__(2)));
7198int pthread_sigqueue (pthread_t *, int, const union sigval);
7199int pthread_timedjoin_np (pthread_t, void **, const struct timespec *);
7200int pthread_tryjoin_np (pthread_t, void **);
7201int pthread_yield (void);
7202int pthread_suspend (pthread_t);
7203int pthread_continue (pthread_t);
7204typedef pthread_t rb_nativethread_id_t;
7205typedef pthread_mutex_t rb_nativethread_lock_t;
7206typedef pthread_cond_t rb_nativethread_cond_t;
7207
7208
7209rb_nativethread_id_t rb_nativethread_self(void);
7210void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
7211void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
7212void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
7213void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
7214void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
7215int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
7216void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
7217void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
7218void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
7219void rb_native_cond_signal(rb_nativethread_cond_t *cond);
7220void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
7221void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
7222void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
7223void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
7224void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
7225
7226
7227typedef struct native_thread_data_struct {
7228 union {
7229 struct list_node ubf;
7230 struct list_node gvl;
7231 } node;
7232 struct
7233 {
7234 rb_nativethread_cond_t intr;
7235 rb_nativethread_cond_t gvlq;
7236 } cond;
7237} native_thread_data_t;
7238typedef struct rb_global_vm_lock_struct {
7239 const struct rb_thread_struct *owner;
7240 rb_nativethread_lock_t lock;
7241 struct list_head waitq;
7242 const struct rb_thread_struct *timer;
7243 int timer_err;
7244 rb_nativethread_cond_t switch_cond;
7245 rb_nativethread_cond_t switch_wait_cond;
7246 int need_yield;
7247 int wait_yield;
7248} rb_global_vm_lock_t;
7249
7250
7251 extern _Thread_local struct rb_execution_context_struct *ruby_current_ec;
7252
7253
7254void *rb_allocate_sigaltstack(void);
7255void *rb_register_sigaltstack(void *);
7256void rb_vm_encoded_insn_data_table_init(void);
7257typedef unsigned long rb_num_t;
7258typedef signed long rb_snum_t;
7259enum ruby_tag_type {
7260 RUBY_TAG_NONE = 0x0,
7261 RUBY_TAG_RETURN = 0x1,
7262 RUBY_TAG_BREAK = 0x2,
7263 RUBY_TAG_NEXT = 0x3,
7264 RUBY_TAG_RETRY = 0x4,
7265 RUBY_TAG_REDO = 0x5,
7266 RUBY_TAG_RAISE = 0x6,
7267 RUBY_TAG_THROW = 0x7,
7268 RUBY_TAG_FATAL = 0x8,
7269 RUBY_TAG_MASK = 0xf
7270};
7271enum ruby_vm_throw_flags {
7272 VM_THROW_NO_ESCAPE_FLAG = 0x8000,
7273 VM_THROW_STATE_MASK = 0xff
7274};
7275struct rb_thread_struct;
7276struct rb_control_frame_struct;
7277typedef struct rb_compile_option_struct rb_compile_option_t;
7278union ic_serial_entry {
7279 rb_serial_t raw;
7280 VALUE data[2];
7281};
7282struct iseq_inline_constant_cache_entry {
7283 VALUE flags;
7284 VALUE value;
7285 union ic_serial_entry ic_serial;
7286 const rb_cref_t *ic_cref;
7287};
7288__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)");
7289struct iseq_inline_constant_cache {
7290 struct iseq_inline_constant_cache_entry *entry;
7291 unsigned get_insn_idx;
7292};
7293struct iseq_inline_iv_cache_entry {
7294 struct rb_iv_index_tbl_entry *entry;
7295};
7296struct iseq_inline_cvar_cache_entry {
7297 struct rb_cvar_class_tbl_entry *entry;
7298};
7299union iseq_inline_storage_entry {
7300 struct {
7301 struct rb_thread_struct *running_thread;
7302 VALUE value;
7303 } once;
7304 struct iseq_inline_constant_cache ic_cache;
7305 struct iseq_inline_iv_cache_entry iv_cache;
7306};
7307struct rb_calling_info {
7308 const struct rb_callinfo *ci;
7309 const struct rb_callcache *cc;
7310 VALUE block_handler;
7311 VALUE recv;
7312 int argc;
7313 int kw_splat;
7314};
7315struct rb_execution_context_struct;
7316typedef struct rb_iseq_location_struct {
7317 VALUE pathobj;
7318 VALUE base_label;
7319 VALUE label;
7320 VALUE first_lineno;
7321 int node_id;
7322 rb_code_location_t code_location;
7323} rb_iseq_location_t;
7324static inline VALUE
7325pathobj_path(VALUE pathobj)
7326{
7327 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7328 return pathobj;
7329 }
7330 else {
7331 ((void)0);
7332 return RARRAY_AREF(pathobj, 0);
7333 }
7334}
7335static inline VALUE
7336pathobj_realpath(VALUE pathobj)
7337{
7338 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7339 return pathobj;
7340 }
7341 else {
7342 ((void)0);
7343 return RARRAY_AREF(pathobj, 1);
7344 }
7345}
7346struct rb_mjit_unit;
7347typedef struct { rb_darray_meta_t meta; struct yjit_block_version * data[]; } * rb_yjit_block_array_t;
7348typedef struct { rb_darray_meta_t meta; rb_yjit_block_array_t data[]; } * rb_yjit_block_array_array_t;
7349struct rb_iseq_constant_body {
7350 enum iseq_type {
7351 ISEQ_TYPE_TOP,
7352 ISEQ_TYPE_METHOD,
7353 ISEQ_TYPE_BLOCK,
7354 ISEQ_TYPE_CLASS,
7355 ISEQ_TYPE_RESCUE,
7356 ISEQ_TYPE_ENSURE,
7357 ISEQ_TYPE_EVAL,
7358 ISEQ_TYPE_MAIN,
7359 ISEQ_TYPE_PLAIN
7360 } type;
7361 unsigned int iseq_size;
7362 VALUE *iseq_encoded;
7363 struct {
7364 struct {
7365 unsigned int has_lead : 1;
7366 unsigned int has_opt : 1;
7367 unsigned int has_rest : 1;
7368 unsigned int has_post : 1;
7369 unsigned int has_kw : 1;
7370 unsigned int has_kwrest : 1;
7371 unsigned int has_block : 1;
7372 unsigned int ambiguous_param0 : 1;
7373 unsigned int accepts_no_kwarg : 1;
7374 unsigned int ruby2_keywords: 1;
7375 } flags;
7376 unsigned int size;
7377 int lead_num;
7378 int opt_num;
7379 int rest_start;
7380 int post_start;
7381 int post_num;
7382 int block_start;
7383 const VALUE *opt_table;
7384 const struct rb_iseq_param_keyword {
7385 int num;
7386 int required_num;
7387 int bits_start;
7388 int rest_start;
7389 const ID *table;
7390 VALUE *default_values;
7391 } *keyword;
7392 } param;
7393 rb_iseq_location_t location;
7394 struct iseq_insn_info {
7395 const struct iseq_insn_info_entry *body;
7396 unsigned int *positions;
7397 unsigned int size;
7398 struct succ_index_table *succ_index_table;
7399 } insns_info;
7400 const ID *local_table;
7401 struct iseq_catch_table *catch_table;
7402 const struct rb_iseq_struct *parent_iseq;
7403 struct rb_iseq_struct *local_iseq;
7404 union iseq_inline_storage_entry *is_entries;
7405 struct rb_call_data *call_data;
7406 struct {
7407 rb_snum_t flip_count;
7408 VALUE script_lines;
7409 VALUE coverage;
7410 VALUE pc2branchindex;
7411 VALUE *original_iseq;
7412 } variable;
7413 unsigned int local_table_size;
7414 unsigned int is_size;
7415 unsigned int ci_size;
7416 unsigned int stack_max;
7417 char catch_except_p;
7418 _Bool builtin_inline_p;
7419 struct rb_id_table *outer_variables;
7420 const rb_iseq_t *mandatory_only_iseq;
7421 VALUE (*jit_func)(struct rb_execution_context_struct *,
7422 struct rb_control_frame_struct *);
7423 long unsigned total_calls;
7424 struct rb_mjit_unit *jit_unit;
7425 rb_yjit_block_array_array_t yjit_blocks;
7426};
7427struct rb_iseq_struct {
7428 VALUE flags;
7429 VALUE wrapper;
7430 struct rb_iseq_constant_body *body;
7431 union {
7432 struct iseq_compile_data *compile_data;
7433 struct {
7434 VALUE obj;
7435 int index;
7436 } loader;
7437 struct {
7438 struct rb_hook_list_struct *local_hooks;
7439 rb_event_flag_t global_trace_events;
7440 } exec;
7441 } aux;
7442};
7443static inline const rb_iseq_t *
7444rb_iseq_check(const rb_iseq_t *iseq)
7445{
7446 return iseq;
7447}
7448static inline const rb_iseq_t *
7449def_iseq_ptr(rb_method_definition_t *def)
7450{
7451 return rb_iseq_check(def->body.iseq.iseqptr);
7452}
7453enum ruby_special_exceptions {
7454 ruby_error_reenter,
7455 ruby_error_nomemory,
7456 ruby_error_sysstack,
7457 ruby_error_stackfatal,
7458 ruby_error_stream_closed,
7459 ruby_special_error_count
7460};
7461enum ruby_basic_operators {
7462 BOP_PLUS,
7463 BOP_MINUS,
7464 BOP_MULT,
7465 BOP_DIV,
7466 BOP_MOD,
7467 BOP_EQ,
7468 BOP_EQQ,
7469 BOP_LT,
7470 BOP_LE,
7471 BOP_LTLT,
7472 BOP_AREF,
7473 BOP_ASET,
7474 BOP_LENGTH,
7475 BOP_SIZE,
7476 BOP_EMPTY_P,
7477 BOP_NIL_P,
7478 BOP_SUCC,
7479 BOP_GT,
7480 BOP_GE,
7481 BOP_NOT,
7482 BOP_NEQ,
7483 BOP_MATCH,
7484 BOP_FREEZE,
7485 BOP_UMINUS,
7486 BOP_MAX,
7487 BOP_MIN,
7488 BOP_CALL,
7489 BOP_AND,
7490 BOP_OR,
7491 BOP_LAST_
7492};
7493struct rb_vm_struct;
7494typedef void rb_vm_at_exit_func(struct rb_vm_struct*);
7495typedef struct rb_at_exit_list {
7496 rb_vm_at_exit_func *func;
7497 struct rb_at_exit_list *next;
7498} rb_at_exit_list;
7499struct rb_objspace;
7500struct rb_objspace *rb_objspace_alloc(void);
7501void rb_objspace_free(struct rb_objspace *);
7502void rb_objspace_call_finalizer(struct rb_objspace *);
7503typedef struct rb_hook_list_struct {
7504 struct rb_event_hook_struct *hooks;
7505 rb_event_flag_t events;
7506 unsigned int running;
7507 _Bool need_clean;
7508 _Bool is_local;
7509} rb_hook_list_t;
7510typedef const struct rb_builtin_function *RB_BUILTIN;
7511typedef struct rb_vm_struct {
7512 VALUE self;
7513 struct {
7514 struct list_head set;
7515 unsigned int cnt;
7516 unsigned int blocking_cnt;
7517 struct rb_ractor_struct *main_ractor;
7518 struct rb_thread_struct *main_thread;
7519 struct {
7520 rb_nativethread_lock_t lock;
7521 struct rb_ractor_struct *lock_owner;
7522 unsigned int lock_rec;
7523 _Bool barrier_waiting;
7524 unsigned int barrier_cnt;
7525 rb_nativethread_cond_t barrier_cond;
7526 rb_nativethread_cond_t terminate_cond;
7527 _Bool terminate_waiting;
7528 } sync;
7529 } ractor;
7530 void *main_altstack;
7531 rb_serial_t fork_gen;
7532 rb_nativethread_lock_t waitpid_lock;
7533 struct list_head waiting_pids;
7534 struct list_head waiting_grps;
7535 struct list_head waiting_fds;
7536 volatile int ubf_async_safe;
7537 unsigned int running: 1;
7538 unsigned int thread_abort_on_exception: 1;
7539 unsigned int thread_report_on_exception: 1;
7540 unsigned int thread_ignore_deadlock: 1;
7541 VALUE mark_object_ary;
7542 const VALUE special_exceptions[ruby_special_error_count];
7543 VALUE top_self;
7544 VALUE load_path;
7545 VALUE load_path_snapshot;
7546 VALUE load_path_check_cache;
7547 VALUE expanded_load_path;
7548 VALUE loaded_features;
7549 VALUE loaded_features_snapshot;
7550 VALUE loaded_features_realpaths;
7551 struct st_table *loaded_features_index;
7552 struct st_table *loading_table;
7553 struct {
7554 VALUE cmd[65];
7555 } trap_list;
7556 struct st_table *ensure_rollback_table;
7557 struct rb_postponed_job_struct *postponed_job_buffer;
7558 rb_atomic_t postponed_job_index;
7559 int src_encoding_index;
7560 struct list_head workqueue;
7561 rb_nativethread_lock_t workqueue_lock;
7562 VALUE orig_progname, progname;
7563 VALUE coverages, me2counter;
7564 int coverage_mode;
7565 st_table * defined_module_hash;
7566 struct rb_objspace *objspace;
7567 rb_at_exit_list *at_exit;
7568 st_table *frozen_strings;
7569 const struct rb_builtin_function *builtin_function_table;
7570 int builtin_inline_index;
7571 struct rb_id_table *negative_cme_table;
7572 st_table *overloaded_cme_table;
7573 const struct rb_callcache *global_cc_cache_table[1023];
7574 struct {
7575 size_t thread_vm_stack_size;
7576 size_t thread_machine_stack_size;
7577 size_t fiber_vm_stack_size;
7578 size_t fiber_machine_stack_size;
7579 } default_params;
7580 short redefined_flag[BOP_LAST_];
7581} rb_vm_t;
7582struct rb_captured_block {
7583 VALUE self;
7584 const VALUE *ep;
7585 union {
7586 const rb_iseq_t *iseq;
7587 const struct vm_ifunc *ifunc;
7588 VALUE val;
7589 } code;
7590};
7591enum rb_block_handler_type {
7592 block_handler_type_iseq,
7593 block_handler_type_ifunc,
7594 block_handler_type_symbol,
7595 block_handler_type_proc
7596};
7597enum rb_block_type {
7598 block_type_iseq,
7599 block_type_ifunc,
7600 block_type_symbol,
7601 block_type_proc
7602};
7603struct rb_block {
7604 union {
7605 struct rb_captured_block captured;
7606 VALUE symbol;
7607 VALUE proc;
7608 } as;
7609 enum rb_block_type type;
7610};
7611typedef struct rb_control_frame_struct {
7612 const VALUE *pc;
7613 VALUE *sp;
7614 const rb_iseq_t *iseq;
7615 VALUE self;
7616 const VALUE *ep;
7617 const void *block_code;
7618 VALUE *__bp__;
7619 void *jit_return;
7620} rb_control_frame_t;
7621extern const rb_data_type_t ruby_threadptr_data_type;
7622static inline struct rb_thread_struct *
7623rb_thread_ptr(VALUE thval)
7624{
7625 return (struct rb_thread_struct *)rb_check_typeddata(thval, &ruby_threadptr_data_type);
7626}
7627enum rb_thread_status {
7628 THREAD_RUNNABLE,
7629 THREAD_STOPPED,
7630 THREAD_STOPPED_FOREVER,
7631 THREAD_KILLED
7632};
7633typedef void *rb_jmpbuf_t[5];
7634struct rb_vm_tag {
7635 VALUE tag;
7636 VALUE retval;
7637 rb_jmpbuf_t buf;
7638 struct rb_vm_tag *prev;
7639 enum ruby_tag_type state;
7640 unsigned int lock_rec;
7641};
7642__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) > 0, "rb_vm_tag_buf_offset" ": " "offsetof(struct rb_vm_tag, buf) > 0");
7643__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)");
7644struct rb_unblock_callback {
7645 rb_unblock_function_t *func;
7646 void *arg;
7647};
7648struct rb_mutex_struct;
7649typedef struct rb_ensure_entry {
7650 VALUE marker;
7651 VALUE (*e_proc)(VALUE);
7652 VALUE data2;
7653} rb_ensure_entry_t;
7654typedef struct rb_ensure_list {
7655 struct rb_ensure_list *next;
7656 struct rb_ensure_entry entry;
7657} rb_ensure_list_t;
7658typedef char rb_thread_id_string_t[sizeof(rb_nativethread_id_t) * 2 + 3];
7659typedef struct rb_fiber_struct rb_fiber_t;
7660struct rb_waiting_list {
7661 struct rb_waiting_list *next;
7662 struct rb_thread_struct *thread;
7663 struct rb_fiber_struct *fiber;
7664};
7665struct rb_execution_context_struct {
7666 VALUE *vm_stack;
7667 size_t vm_stack_size;
7668 rb_control_frame_t *cfp;
7669 struct rb_vm_tag *tag;
7670 rb_atomic_t interrupt_flag;
7671 rb_atomic_t interrupt_mask;
7672 rb_fiber_t *fiber_ptr;
7673 struct rb_thread_struct *thread_ptr;
7674 struct rb_id_table *local_storage;
7675 VALUE local_storage_recursive_hash;
7676 VALUE local_storage_recursive_hash_for_trace;
7677 const VALUE *root_lep;
7678 VALUE root_svar;
7679 rb_ensure_list_t *ensure_list;
7680 struct rb_trace_arg_struct *trace_arg;
7681 VALUE errinfo;
7682 VALUE passed_block_handler;
7683 uint8_t raised_flag;
7684 enum method_missing_reason method_missing_reason : 8;
7685 VALUE private_const_reference;
7686 struct {
7687 VALUE *stack_start;
7688 VALUE *stack_end;
7689 size_t stack_maxsize;
7690 __attribute__((__aligned__(8))) jmp_buf regs;
7691 } machine;
7692};
7693typedef struct rb_execution_context_struct rb_execution_context_t;
7694void rb_ec_set_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7695void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7696void rb_ec_clear_vm_stack(rb_execution_context_t *ec);
7697struct rb_ext_config {
7698 _Bool ractor_safe;
7699};
7700typedef struct rb_ractor_struct rb_ractor_t;
7701typedef struct rb_thread_struct {
7702 struct list_node lt_node;
7703 VALUE self;
7704 rb_ractor_t *ractor;
7705 rb_vm_t *vm;
7706 rb_execution_context_t *ec;
7707 VALUE last_status;
7708 struct rb_calling_info *calling;
7709 VALUE top_self;
7710 VALUE top_wrapper;
7711 rb_nativethread_id_t thread_id;
7712 enum rb_thread_status status : 2;
7713 unsigned int to_kill : 1;
7714 unsigned int abort_on_exception: 1;
7715 unsigned int report_on_exception: 1;
7716 unsigned int pending_interrupt_queue_checked: 1;
7717 int8_t priority;
7718 uint32_t running_time_us;
7719 native_thread_data_t native_thread_data;
7720 void *blocking_region_buffer;
7721 VALUE thgroup;
7722 VALUE value;
7723 VALUE pending_interrupt_queue;
7724 VALUE pending_interrupt_mask_stack;
7725 rb_nativethread_lock_t interrupt_lock;
7726 struct rb_unblock_callback unblock;
7727 VALUE locking_mutex;
7728 struct rb_mutex_struct *keeping_mutexes;
7729 struct rb_waiting_list *join_list;
7730 union {
7731 struct {
7732 VALUE proc;
7733 VALUE args;
7734 int kw_splat;
7735 } proc;
7736 struct {
7737 VALUE (*func)(void *);
7738 void *arg;
7739 } func;
7740 } invoke_arg;
7741 enum thread_invoke_type {
7742 thread_invoke_type_none = 0,
7743 thread_invoke_type_proc,
7744 thread_invoke_type_ractor_proc,
7745 thread_invoke_type_func
7746 } invoke_type;
7747 VALUE stat_insn_usage;
7748 rb_fiber_t *root_fiber;
7749 VALUE scheduler;
7750 unsigned blocking;
7751 VALUE name;
7752 struct rb_ext_config ext_config;
7753 void *altstack;
7754} rb_thread_t;
7755typedef enum {
7756 VM_DEFINECLASS_TYPE_CLASS = 0x00,
7757 VM_DEFINECLASS_TYPE_SINGLETON_CLASS = 0x01,
7758 VM_DEFINECLASS_TYPE_MODULE = 0x02,
7759 VM_DEFINECLASS_TYPE_MASK = 0x07
7760} rb_vm_defineclass_type_t;
7761
7762
7763rb_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);
7764rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
7765rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent, int opt);
7766rb_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);
7767rb_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,
7768 enum iseq_type, const rb_compile_option_t*);
7769struct iseq_link_anchor;
7770struct rb_iseq_new_with_callback_callback_func {
7771 VALUE flags;
7772 VALUE reserved;
7773 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *);
7774 const void *data;
7775};
7776static inline struct rb_iseq_new_with_callback_callback_func *
7777rb_iseq_new_with_callback_new_callback(
7778 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *), const void *ptr)
7779{
7780 VALUE memo = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)ptr, ((VALUE)RUBY_Qundef), ((VALUE)RUBY_Qfalse));
7781 return (struct rb_iseq_new_with_callback_callback_func *)memo;
7782}
7783rb_iseq_t *rb_iseq_new_with_callback(const struct rb_iseq_new_with_callback_callback_func * ifunc,
7784 VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
7785 const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
7786VALUE rb_iseq_disasm(const rb_iseq_t *iseq);
7787int rb_iseq_disasm_insn(VALUE str, const VALUE *iseqval, size_t pos, const rb_iseq_t *iseq, VALUE child);
7788VALUE rb_iseq_coverage(const rb_iseq_t *iseq);
7789extern VALUE rb_cISeq;
7790extern VALUE rb_cRubyVM;
7791extern VALUE rb_mRubyVMFrozenCore;
7792extern VALUE rb_block_param_proxy;
7793
7794
7795typedef struct {
7796 const struct rb_block block;
7797 unsigned int is_from_method: 1;
7798 unsigned int is_lambda: 1;
7799 unsigned int is_isolated: 1;
7800} rb_proc_t;
7801
7802
7803VALUE rb_proc_isolate(VALUE self);
7804VALUE rb_proc_isolate_bang(VALUE self);
7805VALUE rb_proc_ractor_make_shareable(VALUE self);
7806
7807
7808typedef struct {
7809 VALUE flags;
7810 rb_iseq_t *iseq;
7811 const VALUE *ep;
7812 const VALUE *env;
7813 unsigned int env_size;
7814} rb_env_t;
7815extern const rb_data_type_t ruby_binding_data_type;
7816typedef struct {
7817 const struct rb_block block;
7818 const VALUE pathobj;
7819 unsigned short first_lineno;
7820} rb_binding_t;
7821enum vm_check_match_type {
7822 VM_CHECKMATCH_TYPE_WHEN = 1,
7823 VM_CHECKMATCH_TYPE_CASE = 2,
7824 VM_CHECKMATCH_TYPE_RESCUE = 3
7825};
7826enum vm_special_object_type {
7827 VM_SPECIAL_OBJECT_VMCORE = 1,
7828 VM_SPECIAL_OBJECT_CBASE,
7829 VM_SPECIAL_OBJECT_CONST_BASE
7830};
7831enum vm_svar_index {
7832 VM_SVAR_LASTLINE = 0,
7833 VM_SVAR_BACKREF = 1,
7834 VM_SVAR_EXTRA_START = 2,
7835 VM_SVAR_FLIPFLOP_START = 2
7836};
7837typedef struct iseq_inline_constant_cache *IC;
7838typedef struct iseq_inline_iv_cache_entry *IVC;
7839typedef struct iseq_inline_cvar_cache_entry *ICVARC;
7840typedef union iseq_inline_storage_entry *ISE;
7841typedef const struct rb_callinfo *CALL_INFO;
7842typedef const struct rb_callcache *CALL_CACHE;
7843typedef struct rb_call_data *CALL_DATA;
7844typedef VALUE CDHASH;
7845typedef rb_control_frame_t *
7846 (__attribute__ ((__fastcall__)) *rb_insn_func_t)(rb_execution_context_t *, rb_control_frame_t *);
7847enum {
7848 VM_FRAME_MAGIC_METHOD = 0x11110001,
7849 VM_FRAME_MAGIC_BLOCK = 0x22220001,
7850 VM_FRAME_MAGIC_CLASS = 0x33330001,
7851 VM_FRAME_MAGIC_TOP = 0x44440001,
7852 VM_FRAME_MAGIC_CFUNC = 0x55550001,
7853 VM_FRAME_MAGIC_IFUNC = 0x66660001,
7854 VM_FRAME_MAGIC_EVAL = 0x77770001,
7855 VM_FRAME_MAGIC_RESCUE = 0x78880001,
7856 VM_FRAME_MAGIC_DUMMY = 0x79990001,
7857 VM_FRAME_MAGIC_MASK = 0x7fff0001,
7858 VM_FRAME_FLAG_FINISH = 0x0020,
7859 VM_FRAME_FLAG_BMETHOD = 0x0040,
7860 VM_FRAME_FLAG_CFRAME = 0x0080,
7861 VM_FRAME_FLAG_LAMBDA = 0x0100,
7862 VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
7863 VM_FRAME_FLAG_CFRAME_KW = 0x0400,
7864 VM_FRAME_FLAG_PASSED = 0x0800,
7865 VM_ENV_FLAG_LOCAL = 0x0002,
7866 VM_ENV_FLAG_ESCAPED = 0x0004,
7867 VM_ENV_FLAG_WB_REQUIRED = 0x0008,
7868 VM_ENV_FLAG_ISOLATED = 0x0010,
7869};
7870static inline void VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value);
7871static inline void
7872VM_ENV_FLAGS_SET(const VALUE *ep, VALUE flag)
7873{
7874 VALUE flags = ep[( 0)];
7875 ((void)0);
7876 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags | flag);
7877}
7878static inline void
7879VM_ENV_FLAGS_UNSET(const VALUE *ep, VALUE flag)
7880{
7881 VALUE flags = ep[( 0)];
7882 ((void)0);
7883 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags & ~flag);
7884}
7885static inline unsigned long
7886VM_ENV_FLAGS(const VALUE *ep, long flag)
7887{
7888 VALUE flags = ep[( 0)];
7889 ((void)0);
7890 return flags & flag;
7891}
7892static inline unsigned long
7893VM_FRAME_TYPE(const rb_control_frame_t *cfp)
7894{
7895 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_MAGIC_MASK);
7896}
7897static inline int
7898VM_FRAME_LAMBDA_P(const rb_control_frame_t *cfp)
7899{
7900 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_LAMBDA) != 0;
7901}
7902static inline int
7903VM_FRAME_CFRAME_KW_P(const rb_control_frame_t *cfp)
7904{
7905 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME_KW) != 0;
7906}
7907static inline int
7908VM_FRAME_FINISHED_P(const rb_control_frame_t *cfp)
7909{
7910 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_FINISH) != 0;
7911}
7912static inline int
7913VM_FRAME_BMETHOD_P(const rb_control_frame_t *cfp)
7914{
7915 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BMETHOD) != 0;
7916}
7917static inline int
7918rb_obj_is_iseq(VALUE iseq)
7919{
7920 return imemo_type_p(iseq, imemo_iseq);
7921}
7922static inline int
7923VM_FRAME_CFRAME_P(const rb_control_frame_t *cfp)
7924{
7925 int cframe_p = VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME) != 0;
7926 ((void)0);
7927 return cframe_p;
7928}
7929static inline int
7930VM_FRAME_RUBYFRAME_P(const rb_control_frame_t *cfp)
7931{
7932 return !VM_FRAME_CFRAME_P(cfp);
7933}
7934static inline int
7935VM_ENV_LOCAL_P(const VALUE *ep)
7936{
7937 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_LOCAL) ? 1 : 0;
7938}
7939static inline const VALUE *
7940VM_ENV_PREV_EP(const VALUE *ep)
7941{
7942 ((void)0);
7943 return ((void *)(((ep[(-1)])) & ~0x03));
7944}
7945static inline VALUE
7946VM_ENV_BLOCK_HANDLER(const VALUE *ep)
7947{
7948 ((void)0);
7949 return ep[(-1)];
7950}
7951static inline int
7952VM_ENV_ESCAPED_P(const VALUE *ep)
7953{
7954 ((void)0);
7955 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED) ? 1 : 0;
7956}
7957__attribute__((__nonnull__ (1)))
7958static inline VALUE
7959VM_ENV_ENVVAL(const VALUE *ep)
7960{
7961 VALUE envval = ep[( 1)];
7962 ((void)0);
7963 ((void)0);
7964 return envval;
7965}
7966__attribute__((__nonnull__ (1)))
7967static inline const rb_env_t *
7968VM_ENV_ENVVAL_PTR(const VALUE *ep)
7969{
7970 return (const rb_env_t *)VM_ENV_ENVVAL(ep);
7971}
7972static inline const rb_env_t *
7973vm_env_new(VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
7974{
7975 rb_env_t *env = (rb_env_t *)rb_imemo_new(imemo_env, (VALUE)env_ep, (VALUE)env_body, 0, (VALUE)iseq);
7976 env->env_size = env_size;
7977 env_ep[( 1)] = (VALUE)env;
7978 return env;
7979}
7980static inline void
7981VM_FORCE_WRITE(const VALUE *ptr, VALUE v)
7982{
7983 *((VALUE *)ptr) = v;
7984}
7985static inline void
7986VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value)
7987{
7988 ((void)0);
7989 VM_FORCE_WRITE(ptr, special_const_value);
7990}
7991static inline void
7992VM_STACK_ENV_WRITE(const VALUE *ep, int index, VALUE v)
7993{
7994 ((void)0);
7995 VM_FORCE_WRITE(&ep[index], v);
7996}static inline
7997const VALUE *rb_vm_ep_local_ep(const VALUE *ep);
7998const VALUE *rb_vm_proc_local_ep(VALUE proc);static inline
7999void rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep);
8000void rb_vm_block_copy(VALUE obj, const struct rb_block *dst, const struct rb_block *src);static inline
8001VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
8002static inline const rb_control_frame_t *
8003RUBY_VM_END_CONTROL_FRAME(const rb_execution_context_t *ec)
8004{
8005 return (rb_control_frame_t *)(ec->vm_stack + ec->vm_stack_size);
8006}
8007static inline int
8008RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
8009{
8010 return !((void *)(RUBY_VM_END_CONTROL_FRAME(ec)) > (void *)(cfp));
8011}
8012static inline int
8013VM_BH_ISEQ_BLOCK_P(VALUE block_handler)
8014{
8015 if ((block_handler & 0x03) == 0x01) {
8016 return 1;
8017 }
8018 else {
8019 return 0;
8020 }
8021}
8022static inline VALUE
8023VM_BH_FROM_ISEQ_BLOCK(const struct rb_captured_block *captured)
8024{
8025 VALUE block_handler = ((VALUE)(captured) | (0x01));
8026 ((void)0);
8027 return block_handler;
8028}
8029static inline const struct rb_captured_block *
8030VM_BH_TO_ISEQ_BLOCK(VALUE block_handler)
8031{
8032 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8033 ((void)0);
8034 return captured;
8035}
8036static inline int
8037VM_BH_IFUNC_P(VALUE block_handler)
8038{
8039 if ((block_handler & 0x03) == 0x03) {
8040 return 1;
8041 }
8042 else {
8043 return 0;
8044 }
8045}
8046static inline VALUE
8047VM_BH_FROM_IFUNC_BLOCK(const struct rb_captured_block *captured)
8048{
8049 VALUE block_handler = ((VALUE)(captured) | (0x03));
8050 ((void)0);
8051 return block_handler;
8052}
8053static inline const struct rb_captured_block *
8054VM_BH_TO_IFUNC_BLOCK(VALUE block_handler)
8055{
8056 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8057 ((void)0);
8058 return captured;
8059}
8060static inline const struct rb_captured_block *
8061VM_BH_TO_CAPT_BLOCK(VALUE block_handler)
8062{
8063 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8064 ((void)0);
8065 return captured;
8066}
8067static inline enum rb_block_handler_type
8068vm_block_handler_type(VALUE block_handler)
8069{
8070 if (VM_BH_ISEQ_BLOCK_P(block_handler)) {
8071 return block_handler_type_iseq;
8072 }
8073 else if (VM_BH_IFUNC_P(block_handler)) {
8074 return block_handler_type_ifunc;
8075 }
8076 else if (RB_SYMBOL_P(block_handler)) {
8077 return block_handler_type_symbol;
8078 }
8079 else {
8080 ((void)0);
8081 return block_handler_type_proc;
8082 }
8083}
8084static inline void
8085vm_block_handler_verify(__attribute__ ((__unused__)) VALUE block_handler)
8086{
8087 ((void)0);
8088}
8089static inline int
8090vm_cfp_forwarded_bh_p(const rb_control_frame_t *cfp, VALUE block_handler)
8091{
8092 return ((VALUE) cfp->block_code) == block_handler;
8093}
8094static inline enum rb_block_type
8095vm_block_type(const struct rb_block *block)
8096{
8097 return block->type;
8098}
8099static inline void
8100vm_block_type_set(const struct rb_block *block, enum rb_block_type type)
8101{
8102 struct rb_block *mb = (struct rb_block *)block;
8103 mb->type = type;
8104}
8105static inline const struct rb_block *
8106vm_proc_block(VALUE procval)
8107{
8108 ((void)0);
8109 return &((rb_proc_t *)(((struct RTypedData *)(procval))->data))->block;
8110}
8111static inline const rb_iseq_t *vm_block_iseq(const struct rb_block *block);
8112static inline const VALUE *vm_block_ep(const struct rb_block *block);
8113static inline const rb_iseq_t *
8114vm_proc_iseq(VALUE procval)
8115{
8116 return vm_block_iseq(vm_proc_block(procval));
8117}
8118static inline const VALUE *
8119vm_proc_ep(VALUE procval)
8120{
8121 return vm_block_ep(vm_proc_block(procval));
8122}
8123static inline const rb_iseq_t *
8124vm_block_iseq(const struct rb_block *block)
8125{
8126 switch (vm_block_type(block)) {
8127 case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq);
8128 case block_type_proc: return vm_proc_iseq(block->as.proc);
8129 case block_type_ifunc:
8130 case block_type_symbol: return ((void *)0);
8131 }
8132 __builtin_unreachable();
8133 return ((void *)0);
8134}
8135static inline const VALUE *
8136vm_block_ep(const struct rb_block *block)
8137{
8138 switch (vm_block_type(block)) {
8139 case block_type_iseq:
8140 case block_type_ifunc: return block->as.captured.ep;
8141 case block_type_proc: return vm_proc_ep(block->as.proc);
8142 case block_type_symbol: return ((void *)0);
8143 }
8144 __builtin_unreachable();
8145 return ((void *)0);
8146}
8147static inline VALUE
8148vm_block_self(const struct rb_block *block)
8149{
8150 switch (vm_block_type(block)) {
8151 case block_type_iseq:
8152 case block_type_ifunc:
8153 return block->as.captured.self;
8154 case block_type_proc:
8155 return vm_block_self(vm_proc_block(block->as.proc));
8156 case block_type_symbol:
8157 return ((VALUE)RUBY_Qundef);
8158 }
8159 __builtin_unreachable();
8160 return ((VALUE)RUBY_Qundef);
8161}
8162static inline VALUE
8163VM_BH_TO_SYMBOL(VALUE block_handler)
8164{
8165 ((void)0);
8166 return block_handler;
8167}
8168static inline VALUE
8169VM_BH_FROM_SYMBOL(VALUE symbol)
8170{
8171 ((void)0);
8172 return symbol;
8173}
8174static inline VALUE
8175VM_BH_TO_PROC(VALUE block_handler)
8176{
8177 ((void)0);
8178 return block_handler;
8179}
8180static inline VALUE
8181VM_BH_FROM_PROC(VALUE procval)
8182{
8183 ((void)0);
8184 return procval;
8185}
8186VALUE rb_thread_alloc(VALUE klass);
8187VALUE rb_binding_alloc(VALUE klass);
8188VALUE rb_proc_alloc(VALUE klass);
8189VALUE rb_proc_dup(VALUE self);
8190extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8191extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
8192extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp
8193);
8194void rb_vm_bugreport(const void *);
8195typedef void (*ruby_sighandler_t)(int);
8196__attribute__((__format__(__printf__, 4, 5)))
8197__attribute__((__noreturn__)) void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...);
8198
8199
8200VALUE rb_iseq_eval(const rb_iseq_t *iseq);
8201VALUE rb_iseq_eval_main(const rb_iseq_t *iseq);
8202VALUE rb_iseq_path(const rb_iseq_t *iseq);
8203VALUE rb_iseq_realpath(const rb_iseq_t *iseq);
8204
8205
8206VALUE rb_iseq_pathobj_new(VALUE path, VALUE realpath);
8207void rb_iseq_pathobj_set(const rb_iseq_t *iseq, VALUE path, VALUE realpath);
8208int rb_ec_frame_method_id_and_class(const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp);
8209void rb_ec_setup_exception(const rb_execution_context_t *ec, VALUE mesg, VALUE cause);
8210VALUE rb_vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
8211VALUE rb_vm_make_proc_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
8212static inline VALUE
8213rb_vm_make_proc(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8214{
8215 return rb_vm_make_proc_lambda(ec, captured, klass, 0);
8216}
8217static inline VALUE
8218rb_vm_make_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8219{
8220 return rb_vm_make_proc_lambda(ec, captured, klass, 1);
8221}
8222VALUE rb_vm_make_binding(const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp);
8223VALUE rb_vm_env_local_variables(const rb_env_t *env);
8224const rb_env_t *rb_vm_env_prev_env(const rb_env_t *env);
8225const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars);
8226void rb_vm_inc_const_missing_count(void);
8227VALUE rb_vm_call_kw(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc,
8228 const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat);
8229static void rb_vm_pop_frame(rb_execution_context_t *ec);
8230void rb_gvl_destroy(rb_global_vm_lock_t *gvl);
8231void rb_thread_start_timer_thread(void);
8232void rb_thread_stop_timer_thread(void);
8233void rb_thread_reset_timer_thread(void);
8234void rb_thread_wakeup_timer_thread(int);
8235static inline void
8236rb_vm_living_threads_init(rb_vm_t *vm)
8237{
8238 list_head_init(&vm->waiting_fds);
8239 list_head_init(&vm->waiting_pids);
8240 list_head_init(&vm->workqueue);
8241 list_head_init(&vm->waiting_grps);
8242 list_head_init(&vm->ractor.set);
8243}
8244typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
8245rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8246rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8247int rb_vm_get_sourceline(const rb_control_frame_t *);
8248void rb_vm_stack_to_heap(rb_execution_context_t *ec);
8249void ruby_thread_init_stack(rb_thread_t *th);
8250rb_thread_t * ruby_thread_from_native(void);
8251int ruby_thread_set_native(rb_thread_t *th);
8252int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
8253void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
8254static VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
8255void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
8256void rb_gc_mark_machine_stack(const rb_execution_context_t *ec);static inline
8257void rb_vm_rewrite_cref(rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr);
8258static const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
8259VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, enum ruby_tag_type *stateptr);
8260rb_execution_context_t *rb_vm_main_ractor_ec(rb_vm_t *vm);
8261
8262
8263extern struct rb_ractor_struct *ruby_single_main_ractor;
8264extern rb_vm_t *ruby_current_vm_ptr;
8265extern rb_event_flag_t ruby_vm_event_flags;
8266extern rb_event_flag_t ruby_vm_event_enabled_global_flags;
8267extern unsigned int ruby_vm_event_local_num;
8268
8269
8270static inline rb_thread_t *
8271rb_ec_thread_ptr(const rb_execution_context_t *ec)
8272{
8273 return ec->thread_ptr;
8274}
8275static inline rb_ractor_t *
8276rb_ec_ractor_ptr(const rb_execution_context_t *ec)
8277{
8278 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8279 if (th) {
8280 ((void)0);
8281 return th->ractor;
8282 }
8283 else {
8284 return ((void *)0);
8285 }
8286}
8287static inline rb_vm_t *
8288rb_ec_vm_ptr(const rb_execution_context_t *ec)
8289{
8290 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8291 if (th) {
8292 return th->vm;
8293 }
8294 else {
8295 return ((void *)0);
8296 }
8297}
8298static inline rb_execution_context_t *
8299rb_current_execution_context(_Bool expect_ec)
8300{
8301 rb_execution_context_t *ec = ruby_current_ec;
8302 ((void)0);
8303 return ec;
8304}
8305static inline rb_thread_t *
8306rb_current_thread(void)
8307{
8308 const rb_execution_context_t *ec = rb_current_execution_context(1);
8309 return rb_ec_thread_ptr(ec);
8310}
8311static inline rb_ractor_t *
8312rb_current_ractor(void)
8313{
8314 if (ruby_single_main_ractor) {
8315 return ruby_single_main_ractor;
8316 }
8317 else {
8318 const rb_execution_context_t *ec = rb_current_execution_context(1);
8319 return rb_ec_ractor_ptr(ec);
8320 }
8321}
8322static inline rb_vm_t *
8323rb_current_vm(void)
8324{
8325 return ruby_current_vm_ptr;
8326}
8327void rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec,
8328 unsigned int recorded_lock_rec,
8329 unsigned int current_lock_rec);
8330static inline unsigned int
8331rb_ec_vm_lock_rec(const rb_execution_context_t *ec)
8332{
8333 rb_vm_t *vm = rb_ec_vm_ptr(ec);
8334 if (vm->ractor.sync.lock_owner != rb_ec_ractor_ptr(ec)) {
8335 return 0;
8336 }
8337 else {
8338 return vm->ractor.sync.lock_rec;
8339 }
8340}
8341enum {
8342 TIMER_INTERRUPT_MASK = 0x01,
8343 PENDING_INTERRUPT_MASK = 0x02,
8344 POSTPONED_JOB_INTERRUPT_MASK = 0x04,
8345 TRAP_INTERRUPT_MASK = 0x08,
8346 TERMINATE_INTERRUPT_MASK = 0x10,
8347 VM_BARRIER_INTERRUPT_MASK = 0x20,
8348};
8349static inline _Bool
8350RUBY_VM_INTERRUPTED_ANY(rb_execution_context_t *ec)
8351{
8352 return ec->interrupt_flag & ~(ec)->interrupt_mask;
8353}
8354VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
8355int rb_signal_buff_size(void);
8356int rb_signal_exec(rb_thread_t *th, int sig);
8357void rb_threadptr_check_signal(rb_thread_t *mth);
8358void rb_threadptr_signal_raise(rb_thread_t *th, int sig);
8359void rb_threadptr_signal_exit(rb_thread_t *th);
8360int rb_threadptr_execute_interrupts(rb_thread_t *, int);
8361void rb_threadptr_interrupt(rb_thread_t *th);
8362void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
8363void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
8364void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
8365VALUE rb_ec_get_errinfo(const rb_execution_context_t *ec);
8366void rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo);
8367void rb_execution_context_update(const rb_execution_context_t *ec);
8368void rb_execution_context_mark(const rb_execution_context_t *ec);
8369void rb_fiber_close(rb_fiber_t *fib);
8370void Init_native_thread(rb_thread_t *th);
8371int rb_vm_check_ints_blocking(rb_execution_context_t *ec);
8372void rb_vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond);
8373void rb_vm_cond_timedwait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec);
8374static inline void
8375rb_vm_check_ints(rb_execution_context_t *ec)
8376{
8377 ((void)0);
8378 if ((__builtin_expect(!!(RUBY_VM_INTERRUPTED_ANY(ec)), 0))) {
8379 rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);
8380 }
8381}
8382struct rb_trace_arg_struct {
8383 rb_event_flag_t event;
8384 rb_execution_context_t *ec;
8385 const rb_control_frame_t *cfp;
8386 VALUE self;
8387 ID id;
8388 ID called_id;
8389 VALUE klass;
8390 VALUE data;
8391 int klass_solved;
8392 int lineno;
8393 VALUE path;
8394};
8395void rb_hook_list_mark(rb_hook_list_t *hooks);
8396void rb_hook_list_free(rb_hook_list_t *hooks);
8397void rb_hook_list_connect_tracepoint(VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line);
8398void rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval);
8399void rb_exec_event_hooks(struct rb_trace_arg_struct *trace_arg, rb_hook_list_t *hooks, int pop_p);
8400static inline void
8401rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_event_flag_t flag,
8402 VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
8403{
8404 struct rb_trace_arg_struct trace_arg;
8405 ((void)0);
8406 trace_arg.event = flag;
8407 trace_arg.ec = ec;
8408 trace_arg.cfp = ec->cfp;
8409 trace_arg.self = self;
8410 trace_arg.id = id;
8411 trace_arg.called_id = called_id;
8412 trace_arg.klass = klass;
8413 trace_arg.data = data;
8414 trace_arg.path = ((VALUE)RUBY_Qundef);
8415 trace_arg.klass_solved = 0;
8416 rb_exec_event_hooks(&trace_arg, hooks, pop_p);
8417}
8418struct rb_ractor_pub {
8419 VALUE self;
8420 uint32_t id;
8421 rb_hook_list_t hooks;
8422};
8423static inline rb_hook_list_t *
8424rb_ec_ractor_hooks(const rb_execution_context_t *ec)
8425{
8426 struct rb_ractor_pub *cr_pub = (struct rb_ractor_pub *)rb_ec_ractor_ptr(ec);
8427 return &cr_pub->hooks;
8428}
8429static inline void
8430rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
8431{
8432 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);
8433}
8434void rb_vm_trap_exit(rb_vm_t *vm);
8435
8436
8437int rb_thread_check_trap_pending(void);
8438extern VALUE rb_get_coverages(void);
8439extern void rb_set_coverages(VALUE, int, VALUE);
8440extern void rb_clear_coverages(void);
8441extern void rb_reset_coverages(void);
8442extern void rb_resume_coverages(void);
8443extern void rb_suspend_coverages(void);
8444void rb_postponed_job_flush(rb_vm_t *vm);
8445extern VALUE rb_eRactorUnsafeError;
8446extern VALUE rb_eRactorIsolationError;
8447
8448
8449static inline void
8450vm_passed_block_handler_set(rb_execution_context_t *ec, VALUE block_handler)
8451{
8452 vm_block_handler_verify(block_handler);
8453 ec->passed_block_handler = block_handler;
8454}
8455static inline void
8456pass_passed_block_handler(rb_execution_context_t *ec)
8457{
8458 VALUE block_handler = rb_vm_frame_block_handler(ec->cfp);
8459 vm_passed_block_handler_set(ec, block_handler);
8460 VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_PASSED);
8461}
8462int _setjmp(jmp_buf);
8463__attribute__((__noreturn__)) void _longjmp(jmp_buf, int);
8464typedef int error_t;
8465extern int *__errno (void);
8466extern __attribute__((dllimport)) const char * const _sys_errlist[];
8467extern __attribute__((dllimport)) int _sys_nerr;
8468extern __attribute__((dllimport)) const char * const sys_errlist[];
8469extern __attribute__((dllimport)) int sys_nerr;
8470extern __attribute__((dllimport)) char *program_invocation_name;
8471extern __attribute__((dllimport)) char *program_invocation_short_name;
8472static inline void
8473rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec)
8474{
8475 unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec);
8476 if (current_lock_rec != recorded_lock_rec) {
8477 rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec);
8478 }
8479}
8480static inline int
8481rb_ec_tag_state(const rb_execution_context_t *ec)
8482{
8483 struct rb_vm_tag *tag = ec->tag;
8484 enum ruby_tag_type state = tag->state;
8485 tag->state = RUBY_TAG_NONE;
8486 rb_ec_vm_lock_rec_check(ec, tag->lock_rec);
8487 return state;
8488}
8489__attribute__((__noreturn__)) static inline void rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st);
8490static inline void
8491rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st)
8492{
8493 ec->tag->state = st;
8494 __builtin_longjmp(((ec->tag->buf)),(1));
8495}
8496static inline int CREF_SINGLETON(const rb_cref_t *cref);
8497static inline VALUE
8498CREF_CLASS(const rb_cref_t *cref)
8499{
8500 if (CREF_SINGLETON(cref)) {
8501 return rb_class_of(cref->klass_or_self);
8502 }
8503 else {
8504 return cref->klass_or_self;
8505 }
8506}
8507static inline VALUE
8508CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref)
8509{
8510 if (CREF_SINGLETON(cref)) {
8511 return rb_singleton_class(cref->klass_or_self);
8512 }
8513 else {
8514 return cref->klass_or_self;
8515 }
8516}
8517static inline rb_cref_t *
8518CREF_NEXT(const rb_cref_t *cref)
8519{
8520 return cref->next;
8521}
8522static inline const rb_scope_visibility_t *
8523CREF_SCOPE_VISI(const rb_cref_t *cref)
8524{
8525 return &cref->scope_visi;
8526}
8527static inline VALUE
8528CREF_REFINEMENTS(const rb_cref_t *cref)
8529{
8530 return cref->refinements;
8531}
8532static inline void
8533CREF_REFINEMENTS_SET(rb_cref_t *cref, VALUE refs)
8534{
8535 rb_obj_write((VALUE)(cref), __extension__({
8536 ;
8537 ; __typeof__((VALUE *)(&cref->refinements)) unaligned_member_access_result = ((VALUE *)(&cref->refinements));
8538 ; unaligned_member_access_result; }), (VALUE)(refs), "../ruby-3.1.3/eval_intern.h", 223);
8539}
8540static inline int
8541CREF_PUSHED_BY_EVAL(const rb_cref_t *cref)
8542{
8543 return cref->flags & ((VALUE)RUBY_FL_USER5);
8544}
8545static inline void
8546CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref)
8547{
8548 cref->flags |= ((VALUE)RUBY_FL_USER5);
8549}
8550static inline int
8551CREF_SINGLETON(const rb_cref_t *cref)
8552{
8553 return cref->flags & ((VALUE)RUBY_FL_USER7);
8554}
8555static inline void
8556CREF_SINGLETON_SET(rb_cref_t *cref)
8557{
8558 cref->flags |= ((VALUE)RUBY_FL_USER7);
8559}
8560static inline int
8561CREF_OMOD_SHARED(const rb_cref_t *cref)
8562{
8563 return cref->flags & ((VALUE)RUBY_FL_USER6);
8564}
8565static inline void
8566CREF_OMOD_SHARED_SET(rb_cref_t *cref)
8567{
8568 cref->flags |= ((VALUE)RUBY_FL_USER6);
8569}
8570static inline void
8571CREF_OMOD_SHARED_UNSET(rb_cref_t *cref)
8572{
8573 cref->flags &= ~((VALUE)RUBY_FL_USER6);
8574}
8575enum {
8576 RAISED_EXCEPTION = 1,
8577 RAISED_STACKOVERFLOW = 2,
8578 RAISED_NOMEMORY = 4
8579};
8580int rb_ec_set_raised(rb_execution_context_t *ec);
8581int rb_ec_reset_raised(rb_execution_context_t *ec);
8582int rb_ec_stack_check(rb_execution_context_t *ec);
8583VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
8584VALUE rb_make_exception(int argc, const VALUE *argv);
8585__attribute__((__noreturn__)) void rb_method_name_error(VALUE, VALUE);
8586__attribute__((__noreturn__)) void rb_fiber_start(rb_fiber_t*);
8587__attribute__((__noreturn__)) void rb_print_undef(VALUE, ID, rb_method_visibility_t);
8588__attribute__((__noreturn__)) void rb_print_undef_str(VALUE, VALUE);
8589__attribute__((__noreturn__)) void rb_print_inaccessible(VALUE, ID, rb_method_visibility_t);
8590__attribute__((__noreturn__)) void rb_vm_localjump_error(const char *,VALUE, int);
8591__attribute__((__noreturn__)) void rb_vm_jump_tag_but_local_jump(int);
8592VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
8593rb_cref_t *rb_vm_cref(void);
8594rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void);
8595VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename);
8596void rb_vm_set_progname(VALUE filename);
8597VALUE rb_vm_cbase(void);
8598VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec);
8599VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n);
8600VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, _Bool skip_internal);
8601static inline char *
8602rb_char_next(const char *p)
8603{
8604 if (p) {
8605 int len = mblen(p, 0x7fffffff);
8606 p += len > 0 ? len : 1;
8607 }
8608 return (char *)p;
8609}
8610static inline void
8611translit_char(char *p, int from, int to)
8612{
8613 while (*p) {
8614 if ((unsigned char)*p == from)
8615 *p = to;
8616 p = rb_char_next(p);
8617 }
8618}
8619const char *rb_obj_info(VALUE obj);
8620const char *rb_raw_obj_info(char *buff, const int buff_size, VALUE obj);
8621VALUE rb_gc_disable_no_rest(void);
8622struct rb_thread_struct;
8623
8624
8625size_t rb_objspace_data_type_memsize(VALUE obj);
8626void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
8627void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
8628int rb_objspace_markable_object_p(VALUE obj);
8629int rb_objspace_internal_object_p(VALUE obj);
8630int rb_objspace_marked_object_p(VALUE obj);
8631void rb_objspace_each_objects(
8632 int (*callback)(void *start, void *end, size_t stride, void *data),
8633 void *data);
8634void rb_objspace_each_objects_without_setup(
8635 int (*callback)(void *, void *, size_t, void *),
8636 void *data);
8637
8638
8639struct rb_iseq_struct;
8640int rb_dvar_defined(ID, const struct rb_iseq_struct *);
8641int rb_local_defined(ID, const struct rb_iseq_struct *);
8642const char *rb_insns_name(int i);
8643VALUE rb_insns_name_array(void);
8644int rb_iseq_cdhash_cmp(VALUE val, VALUE lit);
8645st_index_t rb_iseq_cdhash_hash(VALUE a);
8646int rb_vm_insn_addr2insn(const void *);
8647int rb_vm_insn_decode(const VALUE encoded);
8648extern _Bool ruby_vm_keep_script_lines;
8649
8650
8651rb_event_flag_t rb_iseq_event_flags(const struct rb_iseq_struct *iseq, size_t pos);
8652
8653
8654struct rb_thread_struct;
8655struct rb_fiber_struct;
8656void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
8657void ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(VALUE), VALUE (*rollback_func)(VALUE));
8658void rb_fiber_init_mjit_cont(struct rb_fiber_struct *fiber);
8659VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
8660unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
8661
8662
8663enum ruby_coderange_type {
8664 RUBY_ENC_CODERANGE_UNKNOWN = 0,
8665 RUBY_ENC_CODERANGE_7BIT = ((int)RUBY_FL_USER8),
8666 RUBY_ENC_CODERANGE_VALID = ((int)RUBY_FL_USER9),
8667 RUBY_ENC_CODERANGE_BROKEN = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)),
8668 RUBY_ENC_CODERANGE_MASK = (RUBY_ENC_CODERANGE_7BIT|
8669 RUBY_ENC_CODERANGE_VALID|
8670 RUBY_ENC_CODERANGE_BROKEN)
8671};
8672__attribute__((__const__))
8673static inline int
8674rb_enc_coderange_clean_p(int cr)
8675{
8676 return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT;
8677}
8678__attribute__((__const__))
8679static inline _Bool
8680RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr)
8681{
8682 return rb_enc_coderange_clean_p(cr);
8683}
8684__attribute__((__pure__))
8685static inline enum ruby_coderange_type
8686RB_ENC_CODERANGE(VALUE obj)
8687{
8688 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK);
8689 return ((enum ruby_coderange_type)ret);
8690}
8691__attribute__((__pure__))
8692static inline _Bool
8693RB_ENC_CODERANGE_ASCIIONLY(VALUE obj)
8694{
8695 return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT;
8696}
8697static inline void
8698RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr)
8699{
8700 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
8701 RB_FL_SET_RAW(obj, cr);
8702}
8703static inline void
8704RB_ENC_CODERANGE_CLEAR(VALUE obj)
8705{
8706 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
8707}
8708__attribute__((__const__))
8709static inline enum ruby_coderange_type
8710RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b)
8711{
8712 if (a == RUBY_ENC_CODERANGE_7BIT) {
8713 return b;
8714 }
8715 else if (a != RUBY_ENC_CODERANGE_VALID) {
8716 return RUBY_ENC_CODERANGE_UNKNOWN;
8717 }
8718 else if (b == RUBY_ENC_CODERANGE_7BIT) {
8719 return RUBY_ENC_CODERANGE_VALID;
8720 }
8721 else {
8722 return b;
8723 }
8724}
8725
8726
8727
8728
8729typedef unsigned char OnigUChar;
8730typedef unsigned int OnigCodePoint;
8731typedef unsigned int OnigCtype;
8732typedef size_t OnigDistance;
8733typedef ptrdiff_t OnigPosition;
8734typedef unsigned int OnigCaseFoldType;
8735extern OnigCaseFoldType OnigDefaultCaseFoldFlag;
8736typedef struct {
8737 int byte_len;
8738 int code_len;
8739 OnigCodePoint code[3];
8740} OnigCaseFoldCodeItem;
8741typedef struct {
8742 OnigCodePoint esc;
8743 OnigCodePoint anychar;
8744 OnigCodePoint anytime;
8745 OnigCodePoint zero_or_one_time;
8746 OnigCodePoint one_or_more_time;
8747 OnigCodePoint anychar_anytime;
8748} OnigMetaCharTableType;
8749typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
8750typedef struct OnigEncodingTypeST {
8751 int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
8752 const char* name;
8753 int max_enc_len;
8754 int min_enc_len;
8755 int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8756 OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8757 int (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
8758 int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
8759 int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
8760 int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
8761 int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
8762 int (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
8763 int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
8764 int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
8765 OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8766 int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
8767 int (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
8768 int ruby_encoding_index;
8769 unsigned int flags;
8770} OnigEncodingType;
8771typedef const OnigEncodingType* OnigEncoding;
8772extern const OnigEncodingType OnigEncodingASCII;
8773extern
8774int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
8775extern
8776int onigenc_mbclen_approximate(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
8777extern
8778OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
8779extern
8780int onigenc_init(void);
8781extern
8782int onigenc_set_default_encoding(OnigEncoding enc);
8783extern
8784OnigEncoding onigenc_get_default_encoding(void);
8785extern
8786OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
8787extern
8788OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
8789extern
8790OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
8791extern
8792OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
8793extern
8794int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
8795extern
8796int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
8797extern
8798int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);
8799typedef unsigned int OnigOptionType;
8800typedef struct {
8801 unsigned int op;
8802 unsigned int op2;
8803 unsigned int behavior;
8804 OnigOptionType options;
8805 OnigMetaCharTableType meta_char_table;
8806} OnigSyntaxType;
8807extern const OnigSyntaxType OnigSyntaxASIS;
8808extern const OnigSyntaxType OnigSyntaxPosixBasic;
8809extern const OnigSyntaxType OnigSyntaxPosixExtended;
8810extern const OnigSyntaxType OnigSyntaxEmacs;
8811extern const OnigSyntaxType OnigSyntaxGrep;
8812extern const OnigSyntaxType OnigSyntaxGnuRegex;
8813extern const OnigSyntaxType OnigSyntaxJava;
8814extern const OnigSyntaxType OnigSyntaxPerl58;
8815extern const OnigSyntaxType OnigSyntaxPerl58_NG;
8816extern const OnigSyntaxType OnigSyntaxPerl;
8817extern const OnigSyntaxType OnigSyntaxRuby;
8818extern const OnigSyntaxType OnigSyntaxPython;
8819extern const OnigSyntaxType* OnigDefaultSyntax;
8820struct re_registers {
8821 int allocated;
8822 int num_regs;
8823 OnigPosition* beg;
8824 OnigPosition* end;
8825};
8826typedef struct re_registers OnigRegion;
8827typedef struct {
8828 OnigEncoding enc;
8829 OnigUChar* par;
8830 OnigUChar* par_end;
8831} OnigErrorInfo;
8832typedef struct {
8833 int lower;
8834 int upper;
8835} OnigRepeatRange;
8836typedef void (*OnigWarnFunc)(const char* s);
8837extern void onig_null_warn(const char* s);
8838typedef struct re_pattern_buffer {
8839 unsigned char* p;
8840 unsigned int used;
8841 unsigned int alloc;
8842 int num_mem;
8843 int num_repeat;
8844 int num_null_check;
8845 int num_comb_exp_check;
8846 int num_call;
8847 unsigned int capture_history;
8848 unsigned int bt_mem_start;
8849 unsigned int bt_mem_end;
8850 int stack_pop_level;
8851 int repeat_range_alloc;
8852 OnigOptionType options;
8853 OnigRepeatRange* repeat_range;
8854 OnigEncoding enc;
8855 const OnigSyntaxType* syntax;
8856 void* name_table;
8857 OnigCaseFoldType case_fold_flag;
8858 int optimize;
8859 int threshold_len;
8860 int anchor;
8861 OnigDistance anchor_dmin;
8862 OnigDistance anchor_dmax;
8863 int sub_anchor;
8864 unsigned char *exact;
8865 unsigned char *exact_end;
8866 unsigned char map[256];
8867 int *int_map;
8868 int *int_map_backward;
8869 OnigDistance dmin;
8870 OnigDistance dmax;
8871 struct re_pattern_buffer* chain;
8872} OnigRegexType;
8873typedef OnigRegexType* OnigRegex;
8874typedef OnigRegexType regex_t;
8875typedef struct {
8876 int num_of_elements;
8877 OnigEncoding pattern_enc;
8878 OnigEncoding target_enc;
8879 const OnigSyntaxType* syntax;
8880 OnigOptionType option;
8881 OnigCaseFoldType case_fold_flag;
8882} OnigCompileInfo;
8883extern
8884int onig_initialize(OnigEncoding encodings[], int n);
8885extern
8886int onig_init(void);
8887extern
8888int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
8889extern
8890void onig_set_warn_func(OnigWarnFunc f);
8891extern
8892void onig_set_verb_warn_func(OnigWarnFunc f);
8893extern
8894int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
8895extern
8896int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
8897extern
8898int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
8899extern
8900int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
8901extern
8902void onig_free(OnigRegex);
8903extern
8904void onig_free_body(OnigRegex);
8905extern
8906OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
8907extern
8908OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
8909extern
8910OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
8911extern
8912OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
8913extern
8914OnigRegion* onig_region_new(void);
8915extern
8916void onig_region_init(OnigRegion* region);
8917extern
8918void onig_region_free(OnigRegion* region, int free_self);
8919extern
8920void onig_region_copy(OnigRegion* to, const OnigRegion* from);
8921extern
8922void onig_region_clear(OnigRegion* region);
8923extern
8924int onig_region_resize(OnigRegion* region, int n);
8925extern
8926int onig_region_set(OnigRegion* region, int at, int beg, int end);
8927extern
8928int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
8929extern
8930int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
8931extern
8932int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
8933extern
8934int onig_number_of_names(const OnigRegexType *reg);
8935extern
8936int onig_number_of_captures(const OnigRegexType *reg);
8937extern
8938int onig_number_of_capture_histories(const OnigRegexType *reg);
8939extern
8940int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
8941extern
8942int onig_noname_group_capture_is_active(const OnigRegexType *reg);
8943extern
8944OnigEncoding onig_get_encoding(const OnigRegexType *reg);
8945extern
8946OnigOptionType onig_get_options(const OnigRegexType *reg);
8947extern
8948OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
8949extern
8950const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
8951extern
8952int onig_set_default_syntax(const OnigSyntaxType* syntax);
8953extern
8954void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
8955extern
8956unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
8957extern
8958unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
8959extern
8960unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
8961extern
8962OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
8963extern
8964void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
8965extern
8966void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
8967extern
8968void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
8969extern
8970void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
8971extern
8972int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
8973extern
8974void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
8975extern
8976OnigCaseFoldType onig_get_default_case_fold_flag(void);
8977extern
8978int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
8979extern
8980unsigned int onig_get_match_stack_limit_size(void);
8981extern
8982int onig_set_match_stack_limit_size(unsigned int size);
8983extern
8984unsigned int onig_get_parse_depth_limit(void);
8985extern
8986int onig_set_parse_depth_limit(unsigned int depth);
8987extern
8988int onig_end(void);
8989extern
8990const char* onig_version(void);
8991extern
8992const char* onig_copyright(void);
8993
8994
8995
8996
8997extern VALUE rb_cEncoding;
8998enum ruby_encoding_consts {
8999 RUBY_ENCODING_INLINE_MAX = 127,
9000 RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10),
9001 RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<<RUBY_ENCODING_SHIFT
9002 ),
9003 RUBY_ENCODING_MAXNAMELEN = 42
9004};
9005static inline void
9006RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
9007{
9008 VALUE f = encindex;
9009 f <<= RUBY_ENCODING_SHIFT;
9010 RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
9011 RB_FL_SET_RAW(obj, f);
9012}
9013static inline int
9014RB_ENCODING_GET_INLINED(VALUE obj)
9015{
9016 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT;
9017 return ((int)ret);
9018}
9019typedef const OnigEncodingType rb_encoding;
9020
9021int rb_char_to_option_kcode(int c, int *option, int *kcode);
9022int rb_enc_replicate(const char *name, rb_encoding *src);
9023int rb_define_dummy_encoding(const char *name);
9024__attribute__((__pure__))
9025int rb_enc_dummy_p(rb_encoding *enc);
9026__attribute__((__pure__))
9027int rb_enc_to_index(rb_encoding *enc);
9028int rb_enc_get_index(VALUE obj);
9029static inline int
9030RB_ENCODING_GET(VALUE obj)
9031{
9032 int encindex = RB_ENCODING_GET_INLINED(obj);
9033 if (encindex == RUBY_ENCODING_INLINE_MAX) {
9034 return rb_enc_get_index(obj);
9035 }
9036 else {
9037 return encindex;
9038 }
9039}
9040void rb_enc_set_index(VALUE obj, int encindex);
9041static inline void
9042RB_ENCODING_SET(VALUE obj, int encindex)
9043{
9044 rb_enc_set_index(obj, encindex);
9045}
9046static inline void
9047RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr)
9048{
9049 RB_ENCODING_SET(obj, encindex);
9050 RB_ENC_CODERANGE_SET(obj, cr);
9051}
9052__attribute__((__pure__))
9053int rb_enc_capable(VALUE obj);
9054int rb_enc_find_index(const char *name);
9055int rb_enc_alias(const char *alias, const char *orig);
9056int rb_to_encoding_index(VALUE obj);
9057rb_encoding *rb_to_encoding(VALUE obj);
9058rb_encoding *rb_find_encoding(VALUE obj);
9059rb_encoding *rb_enc_get(VALUE obj);
9060rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2);
9061rb_encoding *rb_enc_check(VALUE str1,VALUE str2);
9062VALUE rb_enc_associate_index(VALUE obj, int encindex);
9063VALUE rb_enc_associate(VALUE obj, rb_encoding *enc);
9064void rb_enc_copy(VALUE dst, VALUE src);
9065rb_encoding *rb_enc_from_index(int idx);
9066rb_encoding *rb_enc_find(const char *name);
9067static inline const char *
9068rb_enc_name(rb_encoding *enc)
9069{
9070 return enc->name;
9071}
9072static inline int
9073rb_enc_mbminlen(rb_encoding *enc)
9074{
9075 return enc->min_enc_len;
9076}
9077static inline int
9078rb_enc_mbmaxlen(rb_encoding *enc)
9079{
9080 return enc->max_enc_len;
9081}
9082int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);
9083int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc);
9084int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);
9085int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);
9086unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc);
9087static inline unsigned int
9088rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc)
9089{
9090 return rb_enc_codepoint_len(p, e, 0, enc);
9091}
9092static inline OnigCodePoint
9093rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc)
9094{
9095 const OnigUChar *up = ((const OnigUChar *)p);
9096 const OnigUChar *ue = ((const OnigUChar *)e);
9097 return (enc)->mbc_to_code((up),(ue),enc);
9098}
9099int rb_enc_codelen(int code, rb_encoding *enc);
9100static inline int
9101rb_enc_code_to_mbclen(int c, rb_encoding *enc)
9102{
9103 OnigCodePoint uc = ((OnigCodePoint)c);
9104 return (enc)->code_to_mbclen(uc,enc);
9105}
9106static inline int
9107rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc)
9108{
9109 OnigCodePoint uc = ((OnigCodePoint)c);
9110 OnigUChar *ubuf = ((OnigUChar *)buf);
9111 return (enc)->code_to_mbc(uc,ubuf,enc);
9112}
9113static inline char *
9114rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc)
9115{
9116 const OnigUChar *us = ((const OnigUChar *)s);
9117 const OnigUChar *up = ((const OnigUChar *)p);
9118 const OnigUChar *ue = ((const OnigUChar *)e);
9119 OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue);
9120 return ((char *)ur);
9121}
9122static inline char *
9123rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9124{
9125 const OnigUChar *us = ((const OnigUChar *)s);
9126 const OnigUChar *up = ((const OnigUChar *)p);
9127 const OnigUChar *ue = ((const OnigUChar *)e);
9128 OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue);
9129 return ((char *)ur);
9130}
9131static inline char *
9132rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9133{
9134 const OnigUChar *us = ((const OnigUChar *)s);
9135 const OnigUChar *up = ((const OnigUChar *)p);
9136 const OnigUChar *ue = ((const OnigUChar *)e);
9137 OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue);
9138 return ((char *)ur);
9139}
9140static inline char *
9141rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc)
9142{
9143 const OnigUChar *us = ((const OnigUChar *)s);
9144 const OnigUChar *up = ((const OnigUChar *)p);
9145 const OnigUChar *ue = ((const OnigUChar *)e);
9146 const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n);
9147 return ((char *)ur);
9148}
9149static inline int
9150rb_enc_asciicompat_inline(rb_encoding *enc)
9151{
9152 return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc);
9153}
9154static inline _Bool
9155rb_enc_asciicompat(rb_encoding *enc)
9156{
9157 if (rb_enc_mbminlen(enc) != 1) {
9158 return 0;
9159 }
9160 else if (rb_enc_dummy_p(enc)) {
9161 return 0;
9162 }
9163 else {
9164 return 1;
9165 }
9166}
9167static inline _Bool
9168rb_enc_str_asciicompat_p(VALUE str)
9169{
9170 rb_encoding *enc = rb_enc_get(str);
9171 return rb_enc_asciicompat(enc);
9172}
9173VALUE rb_enc_from_encoding(rb_encoding *enc);
9174__attribute__((__pure__))
9175int rb_enc_unicode_p(rb_encoding *enc);
9176__attribute__((__returns_nonnull__))
9177rb_encoding *rb_ascii8bit_encoding(void);
9178__attribute__((__returns_nonnull__))
9179rb_encoding *rb_utf8_encoding(void);
9180__attribute__((__returns_nonnull__))
9181rb_encoding *rb_usascii_encoding(void);
9182rb_encoding *rb_locale_encoding(void);
9183rb_encoding *rb_filesystem_encoding(void);
9184rb_encoding *rb_default_external_encoding(void);
9185rb_encoding *rb_default_internal_encoding(void);
9186__attribute__((__const__))
9187int rb_ascii8bit_encindex(void);
9188static inline _Bool
9189RB_ENCODING_IS_ASCII8BIT(VALUE obj)
9190{
9191 return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex();
9192}
9193__attribute__((__const__))
9194int rb_utf8_encindex(void);
9195__attribute__((__const__))
9196int rb_usascii_encindex(void);
9197int rb_locale_encindex(void);
9198int rb_filesystem_encindex(void);
9199VALUE rb_enc_default_external(void);
9200VALUE rb_enc_default_internal(void);
9201void rb_enc_set_default_external(VALUE encoding);
9202void rb_enc_set_default_internal(VALUE encoding);
9203VALUE rb_locale_charmap(VALUE klass);
9204
9205
9206
9207
9208static inline _Bool
9209rb_enc_is_newline(const char *p, const char *e, rb_encoding *enc)
9210{
9211 OnigUChar *up = ((OnigUChar *)p);
9212 OnigUChar *ue = ((OnigUChar *)e);
9213 return (enc)->is_mbc_newline((up),(ue),enc);
9214}
9215static inline _Bool
9216rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc)
9217{
9218 return (enc)->is_code_ctype(c,t,enc);
9219}
9220static inline _Bool
9221rb_enc_isascii(OnigCodePoint c, rb_encoding *enc)
9222{
9223 return ((c) < 128);
9224}
9225static inline _Bool
9226rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc)
9227{
9228 return (enc)->is_code_ctype(c,1,enc);
9229}
9230static inline _Bool
9231rb_enc_islower(OnigCodePoint c, rb_encoding *enc)
9232{
9233 return (enc)->is_code_ctype(c,6,enc);
9234}
9235static inline _Bool
9236rb_enc_isupper(OnigCodePoint c, rb_encoding *enc)
9237{
9238 return (enc)->is_code_ctype(c,10,enc);
9239}
9240static inline _Bool
9241rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc)
9242{
9243 return (enc)->is_code_ctype(c,8,enc);
9244}
9245static inline _Bool
9246rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc)
9247{
9248 return (enc)->is_code_ctype(c,13,enc);
9249}
9250static inline _Bool
9251rb_enc_isprint(OnigCodePoint c, rb_encoding *enc)
9252{
9253 return (enc)->is_code_ctype(c,7,enc);
9254}
9255static inline _Bool
9256rb_enc_isspace(OnigCodePoint c, rb_encoding *enc)
9257{
9258 return (enc)->is_code_ctype(c,9,enc);
9259}
9260static inline _Bool
9261rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc)
9262{
9263 return (enc)->is_code_ctype(c,4,enc);
9264}
9265__attribute__((__const__))
9266int rb_enc_toupper(int c, rb_encoding *enc);
9267__attribute__((__const__))
9268int rb_enc_tolower(int c, rb_encoding *enc);
9269
9270
9271
9272
9273__attribute__((__nonnull__ ()))
9274char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc);
9275__attribute__((__nonnull__ ()))
9276char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc);
9277__attribute__((__nonnull__ ()))
9278char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc);
9279__attribute__((__nonnull__ ()))
9280char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc);
9281__attribute__((__nonnull__ (1, 4)))
9282const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc);
9283__attribute__((__nonnull__ (1, 3)))
9284const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc);
9285
9286
9287
9288
9289VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts);
9290
9291
9292
9293
9294__attribute__((__nonnull__ (2)))
9295__attribute__((__format__(__printf__, 2, 3)))
9296VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...);
9297__attribute__((__nonnull__ (2)))
9298__attribute__((__format__(__printf__, 2, 0)))
9299VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap);
9300__attribute__((__noreturn__))
9301__attribute__((__nonnull__ (3)))
9302__attribute__((__format__(__printf__, 3, 4)))
9303void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...);
9304
9305
9306
9307
9308VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc);
9309__attribute__((__nonnull__ (1)))
9310VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc);
9311VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc);
9312VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc);
9313__attribute__((__nonnull__ (1)))
9314VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc);
9315long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc);
9316char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc);
9317VALUE rb_obj_encoding(VALUE obj);
9318VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);
9319VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc);
9320VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc);
9321VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc);
9322VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
9323VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
9324int rb_enc_str_coderange(VALUE str);
9325long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr);
9326int rb_enc_str_asciionly_p(VALUE str);
9327__attribute__((__nonnull__ ()))
9328long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc);
9329__attribute__((__nonnull__ ()))
9330static inline VALUE
9331rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc)
9332{
9333 long len = rbimpl_strlen(str);
9334 return rb_enc_str_new_static(str, len, enc);
9335}
9336
9337
9338
9339
9340ID rb_intern3(const char *name, long len, rb_encoding *enc);
9341__attribute__((__nonnull__ ()))
9342int rb_enc_symname_p(const char *str, rb_encoding *enc);
9343int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc);
9344ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc);
9345VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc);
9346
9347
9348
9349
9350typedef enum {
9351 econv_invalid_byte_sequence,
9352 econv_undefined_conversion,
9353 econv_destination_buffer_full,
9354 econv_source_buffer_empty,
9355 econv_finished,
9356 econv_after_output,
9357 econv_incomplete_input
9358} rb_econv_result_t;
9359typedef struct rb_econv_t rb_econv_t;
9360VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);
9361int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);
9362int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags);
9363int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);
9364rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);
9365rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);
9366rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
9367 const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
9368 unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
9369 int flags);
9370void rb_econv_close(rb_econv_t *ec);
9371int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);
9372int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);
9373int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);
9374VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);
9375int rb_econv_insert_output(rb_econv_t *ec,
9376 const unsigned char *str, size_t len, const char *str_encoding);
9377const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);
9378void rb_econv_check_error(rb_econv_t *ec);
9379VALUE rb_econv_make_exception(rb_econv_t *ec);
9380int rb_econv_putbackable(rb_econv_t *ec);
9381void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);
9382const char *rb_econv_asciicompat_encoding(const char *encname);
9383VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);
9384VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);
9385VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);
9386VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);
9387VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags);
9388void rb_econv_binmode(rb_econv_t *ec);
9389enum ruby_econv_flag_type {
9390 RUBY_ECONV_ERROR_HANDLER_MASK = 0x000000ff,
9391 RUBY_ECONV_INVALID_MASK = 0x0000000f,
9392 RUBY_ECONV_INVALID_REPLACE = 0x00000002,
9393 RUBY_ECONV_UNDEF_MASK = 0x000000f0,
9394 RUBY_ECONV_UNDEF_REPLACE = 0x00000020,
9395 RUBY_ECONV_UNDEF_HEX_CHARREF = 0x00000030,
9396 RUBY_ECONV_DECORATOR_MASK = 0x0000ff00,
9397 RUBY_ECONV_NEWLINE_DECORATOR_MASK = 0x00003f00,
9398 RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK = 0x00000f00,
9399 RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK = 0x00003000,
9400 RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR = 0x00000100,
9401 RUBY_ECONV_CRLF_NEWLINE_DECORATOR = 0x00001000,
9402 RUBY_ECONV_CR_NEWLINE_DECORATOR = 0x00002000,
9403 RUBY_ECONV_XML_TEXT_DECORATOR = 0x00004000,
9404 RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR = 0x00008000,
9405 RUBY_ECONV_STATEFUL_DECORATOR_MASK = 0x00f00000,
9406 RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR = 0x00100000,
9407 RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR =
9408 0,
9409 RUBY_ECONV_PARTIAL_INPUT = 0x00010000,
9410 RUBY_ECONV_AFTER_OUTPUT = 0x00020000,
9411 RUBY_ECONV_FLAGS_PLACEHOLDER
9412};
9413
9414
9415VALUE rb_fstring(VALUE);
9416VALUE rb_fstring_cstr(const char *str);
9417VALUE rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc);
9418int rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p);
9419int rb_str_symname_p(VALUE);
9420VALUE rb_str_quote_unprintable(VALUE);
9421char *rb_str_fill_terminator(VALUE str, const int termlen);
9422void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen);
9423VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
9424VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
9425VALUE rb_external_str_with_enc(VALUE str, rb_encoding *eenc);
9426VALUE rb_str_cat_conv_enc_opts(VALUE newstr, long ofs, const char *ptr, long len,
9427 rb_encoding *from, int ecflags, VALUE ecopts);
9428VALUE rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl);
9429VALUE rb_str_escape(VALUE str);
9430size_t rb_str_memsize(VALUE);
9431char *rb_str_to_cstr(VALUE str);
9432const char *ruby_escaped_char(int c);
9433void rb_str_make_independent(VALUE str);
9434int rb_enc_str_coderange_scan(VALUE str, rb_encoding *enc);
9435static inline _Bool STR_EMBED_P(VALUE str);
9436static inline _Bool STR_SHARED_P(VALUE str);
9437static inline VALUE QUOTE(VALUE v);
9438static inline VALUE QUOTE_ID(ID v);
9439static inline _Bool is_ascii_string(VALUE str);
9440static inline _Bool is_broken_string(VALUE str);
9441static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2);
9442
9443
9444VALUE rb_str_tmp_frozen_acquire(VALUE str);
9445void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
9446VALUE rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encoding *enc);
9447VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE);
9448VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE);
9449
9450
9451
9452
9453VALUE rb_fstring_new(const char *ptr, long len);
9454VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
9455VALUE rb_str_opt_plus(VALUE x, VALUE y);
9456VALUE rb_str_concat_literals(size_t num, const VALUE *strary);
9457VALUE rb_str_eql(VALUE str1, VALUE str2);
9458VALUE rb_id_quote_unprintable(ID);
9459VALUE rb_sym_proc_call(ID mid, int argc, const VALUE *argv, int kw_splat, VALUE passed_proc);
9460struct rb_execution_context_struct;
9461VALUE rb_ec_str_resurrect(struct rb_execution_context_struct *ec, VALUE str);
9462
9463
9464static inline VALUE
9465QUOTE(VALUE v)
9466{
9467 return rb_str_quote_unprintable(v);
9468}
9469static inline VALUE
9470QUOTE_ID(ID i)
9471{
9472 return rb_id_quote_unprintable(i);
9473}
9474static inline _Bool
9475STR_EMBED_P(VALUE str)
9476{
9477 return ! RB_FL_TEST_RAW(str, ((VALUE)RUBY_FL_USER1));
9478}
9479static inline _Bool
9480STR_SHARED_P(VALUE str)
9481{
9482 return RB_FL_ALL_RAW(str, ((VALUE)RUBY_FL_USER1) | RUBY_ELTS_SHARED);
9483}
9484static inline _Bool
9485is_ascii_string(VALUE str)
9486{
9487 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_7BIT;
9488}
9489static inline _Bool
9490is_broken_string(VALUE str)
9491{
9492 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_BROKEN;
9493}
9494static inline VALUE
9495rb_str_eql_internal(const VALUE str1, const VALUE str2)
9496{
9497 const long len = RSTRING_LEN(str1);
9498 const char *ptr1, *ptr2;
9499 if (len != RSTRING_LEN(str2)) return ((VALUE)RUBY_Qfalse);
9500 if (!rb_str_comparable(str1, str2)) return ((VALUE)RUBY_Qfalse);
9501 if ((ptr1 = RSTRING_PTR(str1)) == (ptr2 = RSTRING_PTR(str2)))
9502 return ((VALUE)RUBY_Qtrue);
9503 if (memcmp(ptr1, ptr2, len) == 0)
9504 return ((VALUE)RUBY_Qtrue);
9505 return ((VALUE)RUBY_Qfalse);
9506}
9507extern long rb_backtrace_length_limit;
9508extern VALUE rb_eEAGAIN;
9509extern VALUE rb_eEWOULDBLOCK;
9510extern VALUE rb_eEINPROGRESS;
9511__attribute__((__format__(__printf__, 3, 0)))
9512void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
9513__attribute__((__noreturn__)) void rb_async_bug_errno(const char *,int);
9514const char *rb_builtin_type_name(int t);
9515const char *rb_builtin_class_name(VALUE x);
9516__attribute__((__format__(__printf__, (1), (3)))) void rb_warn_deprecated(const char *fmt, const char *suggest, ...);
9517__attribute__((__format__(__printf__, (2), (4)))) void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...);
9518__attribute__((__format__(__printf__, 6, 0)))
9519VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
9520__attribute__((__format__(__printf__, (2), (3)))) void rb_enc_warn(rb_encoding *enc, const char *fmt, ...);
9521__attribute__((__format__(__printf__, (2), (3)))) void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...);
9522__attribute__((__format__(__printf__, (3), (4)))) void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...);
9523rb_warning_category_t rb_warning_category_from_name(VALUE category);
9524_Bool rb_warning_category_enabled_p(rb_warning_category_t category);
9525VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
9526VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int priv);
9527VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
9528__attribute__((__format__(__printf__, (1), (2)))) VALUE rb_warning_string(const char *fmt, ...);
9529__attribute__((__format__(__printf__, 2, 0)))
9530__attribute__((__noreturn__)) void rb_vraise(VALUE, const char *, va_list);
9531__attribute__((__noreturn__)) static inline void rb_raise_cstr(VALUE etype, const char *mesg);
9532__attribute__((__noreturn__)) static inline void rb_raise_cstr_i(VALUE etype, VALUE mesg);
9533__attribute__((__noreturn__)) static inline void rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name);
9534__attribute__((__noreturn__)) static inline void rb_name_err_raise(const char *mesg, VALUE recv, VALUE name);
9535__attribute__((__noreturn__)) static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name);
9536static inline void Check_Type(VALUE v, enum ruby_value_type t);
9537static inline _Bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
9538
9539
9540int rb_bug_reporter_add(void (*func)(FILE *, void *), void *data);
9541__attribute__((__noreturn__)) void rb_sys_fail_path_in(const char *func_name, VALUE path);
9542__attribute__((__noreturn__)) void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path);
9543VALUE rb_syserr_new_path_in(const char *func_name, int n, VALUE path);
9544
9545
9546static inline void
9547rb_raise_cstr_i(VALUE etype, VALUE mesg)
9548{
9549 VALUE exc = rb_exc_new_str(etype, mesg);
9550 rb_exc_raise(exc);
9551}
9552static inline void
9553rb_raise_cstr(VALUE etype, const char *mesg)
9554{
9555 VALUE str = ((__builtin_constant_p(mesg) ? rbimpl_str_new_cstr : rb_str_new_cstr) (mesg));
9556 rb_raise_cstr_i(etype, str);
9557}
9558static inline void
9559rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name)
9560{
9561 VALUE exc = rb_name_err_new(mesg, recv, name);
9562 rb_exc_raise(exc);
9563}
9564static inline void
9565rb_name_err_raise(const char *mesg, VALUE recv, VALUE name)
9566{
9567 VALUE str = (__builtin_constant_p(mesg) ? rb_fstring_new((mesg), (long)strlen(mesg)) : (rb_fstring_cstr)(mesg));
9568 rb_name_err_raise_str(str, recv, name);
9569}
9570static inline void
9571rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
9572{
9573 VALUE exc = rb_key_err_new(mesg, recv, name);
9574 rb_exc_raise(exc);
9575}
9576static inline _Bool
9577rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type)
9578{
9579 return RB_TYPE_P(obj, RUBY_T_DATA) && RTYPEDDATA_P(obj) && (RTYPEDDATA_TYPE(obj) == data_type);
9580}
9581extern ID ruby_static_id_signo;
9582extern ID ruby_static_id_status;
9583VALUE rb_refinement_module_get_refined_class(VALUE module);
9584void rb_class_modify_check(VALUE);
9585__attribute__((__noreturn__)) VALUE rb_f_raise(int argc, VALUE *argv);
9586VALUE rb_get_backtrace(VALUE info);
9587void rb_call_end_proc(VALUE data);
9588void rb_mark_end_proc(void);
9589void Init_class_hierarchy(void);
9590void Init_enc(void);
9591void Init_ext(void);
9592void Init_File(void);
9593void Init_heap(void);
9594int Init_enc_set_filesystem_encoding(void);
9595void Init_newline(void);
9596void Init_BareVM(void);
9597void Init_vm_objects(void);
9598void Init_vm_backtrace(void);
9599void Init_vm_eval(void);static inline
9600void Init_vm_stack_canary(void);
9601void Init_eval_method(void);
9602void rb_call_inits(void);
9603struct rb_id_table;
9604enum rb_id_table_iterator_result {
9605 ID_TABLE_CONTINUE = ST_CONTINUE,
9606 ID_TABLE_STOP = ST_STOP,
9607 ID_TABLE_DELETE = ST_DELETE,
9608 ID_TABLE_REPLACE = ST_REPLACE,
9609 ID_TABLE_ITERATOR_RESULT_END
9610};
9611struct rb_id_table *rb_id_table_create(size_t size);
9612void rb_id_table_free(struct rb_id_table *tbl);
9613void rb_id_table_clear(struct rb_id_table *tbl);
9614size_t rb_id_table_size(const struct rb_id_table *tbl);
9615size_t rb_id_table_memsize(const struct rb_id_table *tbl);
9616int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val);
9617int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp);
9618int rb_id_table_delete(struct rb_id_table *tbl, ID id);
9619typedef enum rb_id_table_iterator_result rb_id_table_update_callback_func_t(ID *id, VALUE *val, void *data, int existing);
9620typedef enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data);
9621typedef enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data);
9622void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data);
9623void 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);
9624void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data);
9625struct rb_subclass_entry {
9626 VALUE klass;
9627 struct rb_subclass_entry *next;
9628 struct rb_subclass_entry *prev;
9629};
9630struct rb_iv_index_tbl_entry {
9631 uint32_t index;
9632 rb_serial_t class_serial;
9633 VALUE class_value;
9634};
9635struct rb_cvar_class_tbl_entry {
9636 uint32_t index;
9637 rb_serial_t global_cvar_state;
9638 VALUE class_value;
9639};
9640struct rb_classext_struct {
9641 struct st_table *iv_index_tbl;
9642 struct st_table *iv_tbl;
9643 struct rb_id_table *m_tbl;
9644 struct rb_id_table *const_tbl;
9645 struct rb_id_table *callable_m_tbl;
9646 struct rb_id_table *cc_tbl;
9647 struct rb_id_table *cvc_tbl;
9648 struct rb_subclass_entry *subclasses;
9649 struct rb_subclass_entry *subclass_entry;
9650 struct rb_subclass_entry *module_subclass_entry;
9651 const VALUE origin_;
9652 const VALUE refined_class;
9653 rb_alloc_func_t allocator;
9654 const VALUE includer;
9655};
9656struct RClass {
9657 struct RBasic basic;
9658 VALUE super;
9659 struct rb_classext_struct *ptr;
9660 rb_serial_t class_serial;
9661};
9662typedef struct rb_subclass_entry rb_subclass_entry_t;
9663typedef struct rb_classext_struct rb_classext_t;
9664void rb_class_subclass_add(VALUE super, VALUE klass);
9665void rb_class_remove_from_super_subclasses(VALUE);
9666void rb_class_remove_subclass_head(VALUE);
9667int rb_singleton_class_internal_p(VALUE sklass);
9668VALUE rb_class_boot(VALUE);
9669VALUE rb_class_s_alloc(VALUE klass);
9670VALUE rb_module_s_alloc(VALUE klass);
9671void rb_module_set_initialized(VALUE module);
9672void rb_module_check_initializable(VALUE module);
9673VALUE rb_make_metaclass(VALUE, VALUE);
9674VALUE rb_include_class_new(VALUE, VALUE);
9675void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
9676void rb_class_detach_subclasses(VALUE);
9677void rb_class_detach_module_subclasses(VALUE);
9678void rb_class_remove_from_module_subclasses(VALUE);
9679VALUE rb_obj_methods(int argc, const VALUE *argv, VALUE obj);
9680VALUE rb_obj_protected_methods(int argc, const VALUE *argv, VALUE obj);
9681VALUE rb_obj_private_methods(int argc, const VALUE *argv, VALUE obj);
9682VALUE rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj);
9683VALUE rb_special_singleton_class(VALUE);
9684VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach);
9685VALUE rb_singleton_class_get(VALUE obj);
9686void rb_undef_methods_from(VALUE klass, VALUE super);
9687static inline void RCLASS_SET_ORIGIN(VALUE klass, VALUE origin);
9688static inline void RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass);
9689static inline VALUE RCLASS_SUPER(VALUE klass);
9690static inline VALUE RCLASS_SET_SUPER(VALUE klass, VALUE super);
9691static inline void RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass);
9692
9693
9694VALUE rb_class_inherited(VALUE, VALUE);
9695VALUE rb_keyword_error_new(const char *, VALUE);
9696
9697
9698static inline void
9699RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
9700{
9701 rb_obj_write((VALUE)(klass), __extension__({
9702 ;
9703 ; __typeof__((VALUE *)(&((((struct RClass *)(klass))->ptr)->origin_))) unaligned_member_access_result = ((VALUE *)(&((((struct RClass *)(klass))->ptr)->origin_)));
9704 ; unaligned_member_access_result; }), (VALUE)(origin), "../ruby-3.1.3/internal/class.h", 157);
9705 if (klass != origin) RB_FL_SET(origin, ((VALUE)RUBY_FL_USER5));
9706}
9707static inline void
9708RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass)
9709{
9710 RB_FL_SET(iclass, ((VALUE)RUBY_FL_USER8));
9711}
9712static inline _Bool
9713RICLASS_OWNS_M_TBL_P(VALUE iclass)
9714{
9715 return RB_FL_TEST_RAW(iclass, ((VALUE)RUBY_FL_USER5) | ((VALUE)RUBY_FL_USER8)) == ((VALUE)RUBY_FL_USER5);
9716}
9717static inline void
9718RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass)
9719{
9720 rb_obj_write((VALUE)(iclass), __extension__({
9721 ;
9722 ; __typeof__((VALUE *)(&((((struct RClass *)(iclass))->ptr)->includer))) unaligned_member_access_result = ((VALUE *)(&((((struct RClass *)(iclass))->ptr)->includer)));
9723 ; unaligned_member_access_result; }), (VALUE)(klass), "../ruby-3.1.3/internal/class.h", 176);
9724}
9725static inline VALUE
9726RCLASS_SUPER(VALUE klass)
9727{
9728 return ((struct RClass *)(klass))->super;
9729}
9730static inline VALUE
9731RCLASS_SET_SUPER(VALUE klass, VALUE super)
9732{
9733 if (super) {
9734 rb_class_remove_from_super_subclasses(klass);
9735 rb_class_subclass_add(super, klass);
9736 }
9737 rb_obj_write((VALUE)(klass), __extension__({
9738 ;
9739 ; __typeof__((VALUE *)(&((struct RClass *)(klass))->super)) unaligned_member_access_result = ((VALUE *)(&((struct RClass *)(klass))->super));
9740 ; unaligned_member_access_result; }), (VALUE)(super), "../ruby-3.1.3/internal/class.h", 192);
9741 return super;
9742}
9743VALUE rb_class_search_ancestor(VALUE klass, VALUE super);
9744__attribute__((__noreturn__)) void rb_undefined_alloc(VALUE klass);
9745double rb_num_to_dbl(VALUE val);
9746VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound);
9747VALUE rb_immutable_obj_clone(int, VALUE *, VALUE);
9748VALUE rb_check_convert_type_with_id(VALUE,int,const char*,ID);
9749int rb_bool_expected(VALUE, const char *);
9750static inline void RBASIC_CLEAR_CLASS(VALUE obj);
9751static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass);
9752static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass);
9753static inline struct st_table *ROBJECT_IV_INDEX_TBL_inline(VALUE obj);
9754
9755
9756int rb_opts_exception_p(VALUE opts, int default_value);
9757
9758
9759
9760
9761__attribute__((__const__)) VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
9762__attribute__((__const__)) VALUE rb_obj_not(VALUE obj);
9763VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
9764void rb_obj_copy_ivar(VALUE dest, VALUE obj);
9765VALUE rb_false(VALUE obj);
9766VALUE rb_convert_type_with_id(VALUE v, int t, const char* nam, ID mid);
9767VALUE rb_obj_size(VALUE self, VALUE args, VALUE obj);
9768VALUE rb_get_freeze_opt(int argc, VALUE *argv);
9769
9770
9771static inline void
9772RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass)
9773{
9774 const VALUE *ptr = &((struct RBasic *)(obj))->klass;
9775 *(VALUE *)ptr = klass;
9776}
9777static inline void
9778RBASIC_CLEAR_CLASS(VALUE obj)
9779{
9780 RBASIC_SET_CLASS_RAW(obj, 0);
9781}
9782static inline void
9783RBASIC_SET_CLASS(VALUE obj, VALUE klass)
9784{
9785 VALUE oldv = RBASIC_CLASS(obj);
9786 RBASIC_SET_CLASS_RAW(obj, klass);
9787 (rb_obj_written((VALUE)(obj), (VALUE)(oldv), (VALUE)(klass), "../ruby-3.1.3/internal/object.h", 65));
9788}
9789__attribute__((__pure__))
9790static inline struct st_table *
9791ROBJECT_IV_INDEX_TBL_inline(VALUE obj)
9792{
9793 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
9794 VALUE klass = rb_obj_class(obj);
9795 return ((((struct RClass *)(klass))->ptr)->iv_index_tbl);
9796 }
9797 else {
9798 const struct RObject *const ptr = ((struct RObject *)(obj));
9799 return ptr->as.heap.iv_index_tbl;
9800 }
9801}
9802struct rb_iseq_struct;
9803VALUE rb_parser_set_yydebug(VALUE, VALUE);
9804void *rb_parser_load_file(VALUE parser, VALUE name);
9805void rb_parser_keep_script_lines(VALUE vparser);
9806
9807
9808VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
9809
9810
9811struct rb_block;
9812struct rb_iseq_struct;
9813VALUE rb_proc_location(VALUE self);
9814st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
9815int rb_block_pair_yield_optimizable(void);
9816int rb_block_arity(void);
9817int rb_block_min_max_arity(int *max);
9818VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additional_info);
9819VALUE rb_callable_receiver(VALUE);
9820
9821
9822VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
9823VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
9824VALUE rb_iseq_location(const struct rb_iseq_struct *iseq);
9825VALUE rb_sym_to_proc(VALUE sym);
9826
9827
9828VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
9829VALUE rb_reg_check_preprocess(VALUE);
9830long rb_reg_search0(VALUE, VALUE, long, int, int);
9831VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
9832_Bool rb_reg_start_with_p(VALUE re, VALUE str);
9833VALUE rb_reg_hash(VALUE re);
9834VALUE rb_reg_equal(VALUE re1, VALUE re2);
9835void rb_backref_set_string(VALUE string, long pos, long len);
9836void rb_match_unbusy(VALUE);
9837int rb_match_count(VALUE match);
9838int rb_match_nth_defined(int nth, VALUE match);
9839
9840
9841VALUE rb_reg_new_ary(VALUE ary, int options);
9842
9843
9844VALUE rb_to_symbol_type(VALUE obj);
9845VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc);
9846VALUE rb_sym_intern_ascii(const char *ptr, long len);
9847VALUE rb_sym_intern_ascii_cstr(const char *ptr);
9848int rb_is_const_name(VALUE name);
9849int rb_is_class_name(VALUE name);
9850int rb_is_instance_name(VALUE name);
9851int rb_is_local_name(VALUE name);
9852__attribute__((__pure__)) int rb_is_const_sym(VALUE sym);
9853__attribute__((__pure__)) int rb_is_attrset_sym(VALUE sym);
9854ID rb_make_internal_id(void);
9855ID rb_make_temporary_id(size_t n);
9856void rb_gc_free_dsymbol(VALUE);
9857struct rb_thread_struct;
9858VALUE rb_obj_is_mutex(VALUE obj);
9859VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg);
9860void rb_thread_execute_interrupts(VALUE th);
9861VALUE rb_get_coverages(void);
9862int rb_get_coverage_mode(void);
9863VALUE rb_default_coverage(int);
9864VALUE rb_thread_shield_new(void);
9865VALUE rb_thread_shield_wait(VALUE self);
9866VALUE rb_thread_shield_release(VALUE self);
9867VALUE rb_thread_shield_destroy(VALUE self);
9868int rb_thread_to_be_killed(VALUE thread);
9869void rb_mutex_allow_trap(VALUE self, int val);
9870VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data);
9871VALUE rb_mutex_owned_p(VALUE self);
9872int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout);
9873
9874
9875VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
9876int ruby_thread_has_gvl_p(void);
9877
9878
9879
9880
9881int rb_threadptr_execute_interrupts(struct rb_thread_struct *th, int blocking_timing);
9882
9883
9884extern const int ruby_api_version[];
9885extern const ID rb_iseq_shared_exc_local_tbl[];
9886static inline rb_snum_t
9887ISEQ_FLIP_CNT_INCREMENT(const rb_iseq_t *iseq)
9888{
9889 rb_snum_t cnt = iseq->body->variable.flip_count;
9890 iseq->body->variable.flip_count += 1;
9891 return cnt;
9892}
9893static inline VALUE *
9894ISEQ_ORIGINAL_ISEQ(const rb_iseq_t *iseq)
9895{
9896 return iseq->body->variable.original_iseq;
9897}
9898static inline void
9899ISEQ_ORIGINAL_ISEQ_CLEAR(const rb_iseq_t *iseq)
9900{
9901 void *ptr = iseq->body->variable.original_iseq;
9902 iseq->body->variable.original_iseq = ((void *)0);
9903 if (ptr) {
9904 ruby_xfree(ptr);
9905 }
9906}
9907static inline VALUE *
9908ISEQ_ORIGINAL_ISEQ_ALLOC(const rb_iseq_t *iseq, long size)
9909{
9910 return iseq->body->variable.original_iseq =
9911 ((VALUE *)ruby_xmalloc2((size), sizeof(VALUE)));
9912}
9913struct iseq_compile_data {
9914 const VALUE err_info;
9915 const VALUE catch_table_ary;
9916 struct iseq_label_data *start_label;
9917 struct iseq_label_data *end_label;
9918 struct iseq_label_data *redo_label;
9919 const rb_iseq_t *current_block;
9920 struct iseq_compile_data_ensure_node_stack *ensure_node_stack;
9921 struct {
9922 struct iseq_compile_data_storage *storage_head;
9923 struct iseq_compile_data_storage *storage_current;
9924 } node;
9925 struct {
9926 struct iseq_compile_data_storage *storage_head;
9927 struct iseq_compile_data_storage *storage_current;
9928 } insn;
9929 _Bool in_rescue;
9930 int loopval_popped;
9931 int last_line;
9932 int label_no;
9933 int node_level;
9934 int isolated_depth;
9935 unsigned int ci_index;
9936 const rb_compile_option_t *option;
9937 struct rb_id_table *ivar_cache_table;
9938 const struct rb_builtin_function *builtin_function_table;
9939 const NODE *root_node;
9940};
9941static inline struct iseq_compile_data *
9942ISEQ_COMPILE_DATA(const rb_iseq_t *iseq)
9943{
9944 if (iseq->flags & ((VALUE)RUBY_FL_USER6)) {
9945 return iseq->aux.compile_data;
9946 }
9947 else {
9948 return ((void *)0);
9949 }
9950}
9951static inline void
9952ISEQ_COMPILE_DATA_ALLOC(rb_iseq_t *iseq)
9953{
9954 iseq->aux.compile_data = (((struct iseq_compile_data *)ruby_xcalloc((1), sizeof(struct iseq_compile_data))));
9955 iseq->flags |= ((VALUE)RUBY_FL_USER6);
9956}
9957static inline void
9958ISEQ_COMPILE_DATA_CLEAR(rb_iseq_t *iseq)
9959{
9960 iseq->flags &= ~((VALUE)RUBY_FL_USER6);
9961 iseq->aux.compile_data = ((void *)0);
9962}
9963static inline rb_iseq_t *
9964iseq_imemo_alloc(void)
9965{
9966 return (rb_iseq_t *)rb_imemo_new(imemo_iseq, 0, 0, 0, 0);
9967}
9968VALUE rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
9969void rb_ibf_load_iseq_complete(rb_iseq_t *iseq);
9970const rb_iseq_t *rb_iseq_ibf_load(VALUE str);
9971const rb_iseq_t *rb_iseq_ibf_load_bytes(const char *cstr, size_t);
9972VALUE rb_iseq_ibf_load_extra_data(VALUE str);
9973void rb_iseq_init_trace(rb_iseq_t *iseq);
9974int 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);
9975int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval);
9976const rb_iseq_t *rb_iseq_load_iseq(VALUE fname);
9977unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
9978int rb_vm_insn_addr2opcode(const void *addr);
9979
9980
9981VALUE rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node);
9982VALUE rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc);
9983VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
9984void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
9985 VALUE locals, VALUE args,
9986 VALUE exception, VALUE body);
9987void rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *arena);
9988VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
9989VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
9990unsigned int rb_iseq_line_no(const rb_iseq_t *iseq, size_t pos);
9991int rb_iseq_node_id(const rb_iseq_t *iseq, size_t pos);
9992void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
9993void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
9994void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
9995struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
9996VALUE rb_iseqw_new(const rb_iseq_t *iseq);
9997const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
9998VALUE rb_iseq_absolute_path(const rb_iseq_t *iseq);
9999int rb_iseq_from_eval_p(const rb_iseq_t *iseq);
10000VALUE rb_iseq_type(const rb_iseq_t *iseq);
10001VALUE rb_iseq_label(const rb_iseq_t *iseq);
10002VALUE rb_iseq_base_label(const rb_iseq_t *iseq);
10003VALUE rb_iseq_first_lineno(const rb_iseq_t *iseq);
10004VALUE rb_iseq_method_name(const rb_iseq_t *iseq);
10005void rb_iseq_code_location(const rb_iseq_t *iseq, int *first_lineno, int *first_column, int *last_lineno, int *last_column);
10006void rb_iseq_remove_coverage_all(void);
10007const rb_iseq_t *rb_method_iseq(VALUE body);
10008const rb_iseq_t *rb_proc_get_iseq(VALUE proc, int *is_proc);
10009struct rb_compile_option_struct {
10010 unsigned int inline_const_cache: 1;
10011 unsigned int peephole_optimization: 1;
10012 unsigned int tailcall_optimization: 1;
10013 unsigned int specialized_instruction: 1;
10014 unsigned int operands_unification: 1;
10015 unsigned int instructions_unification: 1;
10016 unsigned int stack_caching: 1;
10017 unsigned int frozen_string_literal: 1;
10018 unsigned int debug_frozen_string_literal: 1;
10019 unsigned int coverage_enabled: 1;
10020 int debug_level;
10021};
10022struct iseq_insn_info_entry {
10023 int line_no;
10024 int node_id;
10025 rb_event_flag_t events;
10026};
10027struct iseq_catch_table_entry {
10028 enum catch_type {
10029 CATCH_TYPE_RESCUE = __builtin_choose_expr( __builtin_constant_p(1), ((VALUE)(1)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(1)),
10030 CATCH_TYPE_ENSURE = __builtin_choose_expr( __builtin_constant_p(2), ((VALUE)(2)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(2)),
10031 CATCH_TYPE_RETRY = __builtin_choose_expr( __builtin_constant_p(3), ((VALUE)(3)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(3)),
10032 CATCH_TYPE_BREAK = __builtin_choose_expr( __builtin_constant_p(4), ((VALUE)(4)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(4)),
10033 CATCH_TYPE_REDO = __builtin_choose_expr( __builtin_constant_p(5), ((VALUE)(5)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(5)),
10034 CATCH_TYPE_NEXT = __builtin_choose_expr( __builtin_constant_p(6), ((VALUE)(6)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(6))
10035 } type;
10036 rb_iseq_t *iseq;
10037 unsigned int start;
10038 unsigned int end;
10039 unsigned int cont;
10040 unsigned int sp;
10041};
10042struct iseq_catch_table { unsigned int size; struct iseq_catch_table_entry entries[]; } __attribute__((packed));
10043static inline int
10044iseq_catch_table_bytes(int n)
10045{
10046 enum {
10047 catch_table_entry_size = sizeof(struct iseq_catch_table_entry),
10048 catch_table_entries_max = (0x7fffffff - __builtin_offsetof (struct iseq_catch_table, entries)) / catch_table_entry_size
10049 };
10050 if (n > catch_table_entries_max) rb_fatal("too large iseq_catch_table - %d", n);
10051 return (int)(__builtin_offsetof (struct iseq_catch_table, entries) +
10052 n * catch_table_entry_size);
10053}
10054struct iseq_compile_data_storage {
10055 struct iseq_compile_data_storage *next;
10056 unsigned int pos;
10057 unsigned int size;
10058 char buff[];
10059};
10060enum defined_type {
10061 DEFINED_NOT_DEFINED,
10062 DEFINED_NIL = 1,
10063 DEFINED_IVAR,
10064 DEFINED_LVAR,
10065 DEFINED_GVAR,
10066 DEFINED_CVAR,
10067 DEFINED_CONST,
10068 DEFINED_METHOD,
10069 DEFINED_YIELD,
10070 DEFINED_ZSUPER,
10071 DEFINED_SELF,
10072 DEFINED_TRUE,
10073 DEFINED_FALSE,
10074 DEFINED_ASGN,
10075 DEFINED_EXPR,
10076 DEFINED_REF,
10077 DEFINED_FUNC,
10078 DEFINED_CONST_FROM
10079};
10080VALUE rb_iseq_defined_string(enum defined_type type);
10081VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
10082
10083
10084enum rb_debug_counter_type {
10085RB_DEBUG_COUNTER_mc_inline_hit,
10086RB_DEBUG_COUNTER_mc_inline_miss_klass,
10087RB_DEBUG_COUNTER_mc_inline_miss_invalidated,
10088RB_DEBUG_COUNTER_mc_inline_miss_empty,
10089RB_DEBUG_COUNTER_mc_inline_miss_same_cc,
10090RB_DEBUG_COUNTER_mc_inline_miss_same_cme,
10091RB_DEBUG_COUNTER_mc_inline_miss_same_def,
10092RB_DEBUG_COUNTER_mc_inline_miss_diff,
10093RB_DEBUG_COUNTER_cvar_write_inline_hit,
10094RB_DEBUG_COUNTER_cvar_read_inline_hit,
10095RB_DEBUG_COUNTER_cvar_inline_miss,
10096RB_DEBUG_COUNTER_cvar_class_invalidate,
10097RB_DEBUG_COUNTER_cvar_include_invalidate,
10098RB_DEBUG_COUNTER_mc_cme_complement,
10099RB_DEBUG_COUNTER_mc_cme_complement_hit,
10100RB_DEBUG_COUNTER_mc_search,
10101RB_DEBUG_COUNTER_mc_search_notfound,
10102RB_DEBUG_COUNTER_mc_search_super,
10103RB_DEBUG_COUNTER_ci_packed,
10104RB_DEBUG_COUNTER_ci_kw,
10105RB_DEBUG_COUNTER_ci_nokw,
10106RB_DEBUG_COUNTER_ci_runtime,
10107RB_DEBUG_COUNTER_cc_new,
10108RB_DEBUG_COUNTER_cc_temp,
10109RB_DEBUG_COUNTER_cc_found_in_ccs,
10110RB_DEBUG_COUNTER_cc_not_found_in_ccs,
10111RB_DEBUG_COUNTER_cc_ent_invalidate,
10112RB_DEBUG_COUNTER_cc_cme_invalidate,
10113RB_DEBUG_COUNTER_cc_invalidate_leaf,
10114RB_DEBUG_COUNTER_cc_invalidate_leaf_ccs,
10115RB_DEBUG_COUNTER_cc_invalidate_leaf_callable,
10116RB_DEBUG_COUNTER_cc_invalidate_tree,
10117RB_DEBUG_COUNTER_cc_invalidate_tree_cme,
10118RB_DEBUG_COUNTER_cc_invalidate_tree_callable,
10119RB_DEBUG_COUNTER_cc_invalidate_negative,
10120RB_DEBUG_COUNTER_ccs_free,
10121RB_DEBUG_COUNTER_ccs_maxlen,
10122RB_DEBUG_COUNTER_ccs_found,
10123RB_DEBUG_COUNTER_ccs_not_found,
10124RB_DEBUG_COUNTER_call0_public,
10125RB_DEBUG_COUNTER_call0_other,
10126RB_DEBUG_COUNTER_gccct_hit,
10127RB_DEBUG_COUNTER_gccct_miss,
10128RB_DEBUG_COUNTER_gccct_null,
10129RB_DEBUG_COUNTER_iseq_num,
10130RB_DEBUG_COUNTER_iseq_cd_num,
10131RB_DEBUG_COUNTER_ccf_general,
10132RB_DEBUG_COUNTER_ccf_iseq_setup,
10133RB_DEBUG_COUNTER_ccf_iseq_setup_0start,
10134RB_DEBUG_COUNTER_ccf_iseq_setup_tailcall_0start,
10135RB_DEBUG_COUNTER_ccf_iseq_fix,
10136RB_DEBUG_COUNTER_ccf_iseq_opt,
10137RB_DEBUG_COUNTER_ccf_iseq_kw1,
10138RB_DEBUG_COUNTER_ccf_iseq_kw2,
10139RB_DEBUG_COUNTER_ccf_cfunc,
10140RB_DEBUG_COUNTER_ccf_cfunc_with_frame,
10141RB_DEBUG_COUNTER_ccf_ivar,
10142RB_DEBUG_COUNTER_ccf_attrset,
10143RB_DEBUG_COUNTER_ccf_method_missing,
10144RB_DEBUG_COUNTER_ccf_zsuper,
10145RB_DEBUG_COUNTER_ccf_bmethod,
10146RB_DEBUG_COUNTER_ccf_opt_send,
10147RB_DEBUG_COUNTER_ccf_opt_call,
10148RB_DEBUG_COUNTER_ccf_opt_block_call,
10149RB_DEBUG_COUNTER_ccf_opt_struct_aref,
10150RB_DEBUG_COUNTER_ccf_opt_struct_aset,
10151RB_DEBUG_COUNTER_ccf_super_method,
10152RB_DEBUG_COUNTER_frame_push,
10153RB_DEBUG_COUNTER_frame_push_method,
10154RB_DEBUG_COUNTER_frame_push_block,
10155RB_DEBUG_COUNTER_frame_push_class,
10156RB_DEBUG_COUNTER_frame_push_top,
10157RB_DEBUG_COUNTER_frame_push_cfunc,
10158RB_DEBUG_COUNTER_frame_push_ifunc,
10159RB_DEBUG_COUNTER_frame_push_eval,
10160RB_DEBUG_COUNTER_frame_push_rescue,
10161RB_DEBUG_COUNTER_frame_push_dummy,
10162RB_DEBUG_COUNTER_frame_R2R,
10163RB_DEBUG_COUNTER_frame_R2C,
10164RB_DEBUG_COUNTER_frame_C2C,
10165RB_DEBUG_COUNTER_frame_C2R,
10166RB_DEBUG_COUNTER_ivar_get_ic_hit,
10167RB_DEBUG_COUNTER_ivar_get_ic_miss,
10168RB_DEBUG_COUNTER_ivar_get_ic_miss_serial,
10169RB_DEBUG_COUNTER_ivar_get_ic_miss_unset,
10170RB_DEBUG_COUNTER_ivar_get_ic_miss_noobject,
10171RB_DEBUG_COUNTER_ivar_set_ic_hit,
10172RB_DEBUG_COUNTER_ivar_set_ic_miss,
10173RB_DEBUG_COUNTER_ivar_set_ic_miss_serial,
10174RB_DEBUG_COUNTER_ivar_set_ic_miss_unset,
10175RB_DEBUG_COUNTER_ivar_set_ic_miss_iv_hit,
10176RB_DEBUG_COUNTER_ivar_set_ic_miss_noobject,
10177RB_DEBUG_COUNTER_ivar_get_base,
10178RB_DEBUG_COUNTER_ivar_set_base,
10179RB_DEBUG_COUNTER_lvar_get,
10180RB_DEBUG_COUNTER_lvar_get_dynamic,
10181RB_DEBUG_COUNTER_lvar_set,
10182RB_DEBUG_COUNTER_lvar_set_dynamic,
10183RB_DEBUG_COUNTER_lvar_set_slowpath,
10184RB_DEBUG_COUNTER_gc_count,
10185RB_DEBUG_COUNTER_gc_minor_newobj,
10186RB_DEBUG_COUNTER_gc_minor_malloc,
10187RB_DEBUG_COUNTER_gc_minor_method,
10188RB_DEBUG_COUNTER_gc_minor_capi,
10189RB_DEBUG_COUNTER_gc_minor_stress,
10190RB_DEBUG_COUNTER_gc_major_nofree,
10191RB_DEBUG_COUNTER_gc_major_oldgen,
10192RB_DEBUG_COUNTER_gc_major_shady,
10193RB_DEBUG_COUNTER_gc_major_force,
10194RB_DEBUG_COUNTER_gc_major_oldmalloc,
10195RB_DEBUG_COUNTER_gc_enter_start,
10196RB_DEBUG_COUNTER_gc_enter_mark_continue,
10197RB_DEBUG_COUNTER_gc_enter_sweep_continue,
10198RB_DEBUG_COUNTER_gc_enter_rest,
10199RB_DEBUG_COUNTER_gc_enter_finalizer,
10200RB_DEBUG_COUNTER_gc_isptr_trial,
10201RB_DEBUG_COUNTER_gc_isptr_range,
10202RB_DEBUG_COUNTER_gc_isptr_align,
10203RB_DEBUG_COUNTER_gc_isptr_maybe,
10204RB_DEBUG_COUNTER_obj_newobj,
10205RB_DEBUG_COUNTER_obj_newobj_slowpath,
10206RB_DEBUG_COUNTER_obj_newobj_wb_unprotected,
10207RB_DEBUG_COUNTER_obj_free,
10208RB_DEBUG_COUNTER_obj_promote,
10209RB_DEBUG_COUNTER_obj_wb_unprotect,
10210RB_DEBUG_COUNTER_obj_obj_embed,
10211RB_DEBUG_COUNTER_obj_obj_transient,
10212RB_DEBUG_COUNTER_obj_obj_ptr,
10213RB_DEBUG_COUNTER_obj_str_ptr,
10214RB_DEBUG_COUNTER_obj_str_embed,
10215RB_DEBUG_COUNTER_obj_str_shared,
10216RB_DEBUG_COUNTER_obj_str_nofree,
10217RB_DEBUG_COUNTER_obj_str_fstr,
10218RB_DEBUG_COUNTER_obj_ary_embed,
10219RB_DEBUG_COUNTER_obj_ary_transient,
10220RB_DEBUG_COUNTER_obj_ary_ptr,
10221RB_DEBUG_COUNTER_obj_ary_extracapa,
10222RB_DEBUG_COUNTER_obj_ary_shared_create,
10223RB_DEBUG_COUNTER_obj_ary_shared,
10224RB_DEBUG_COUNTER_obj_ary_shared_root_occupied,
10225RB_DEBUG_COUNTER_obj_hash_empty,
10226RB_DEBUG_COUNTER_obj_hash_1,
10227RB_DEBUG_COUNTER_obj_hash_2,
10228RB_DEBUG_COUNTER_obj_hash_3,
10229RB_DEBUG_COUNTER_obj_hash_4,
10230RB_DEBUG_COUNTER_obj_hash_5_8,
10231RB_DEBUG_COUNTER_obj_hash_g8,
10232RB_DEBUG_COUNTER_obj_hash_null,
10233RB_DEBUG_COUNTER_obj_hash_ar,
10234RB_DEBUG_COUNTER_obj_hash_st,
10235RB_DEBUG_COUNTER_obj_hash_transient,
10236RB_DEBUG_COUNTER_obj_hash_force_convert,
10237RB_DEBUG_COUNTER_obj_struct_embed,
10238RB_DEBUG_COUNTER_obj_struct_transient,
10239RB_DEBUG_COUNTER_obj_struct_ptr,
10240RB_DEBUG_COUNTER_obj_data_empty,
10241RB_DEBUG_COUNTER_obj_data_xfree,
10242RB_DEBUG_COUNTER_obj_data_imm_free,
10243RB_DEBUG_COUNTER_obj_data_zombie,
10244RB_DEBUG_COUNTER_obj_match_under4,
10245RB_DEBUG_COUNTER_obj_match_ge4,
10246RB_DEBUG_COUNTER_obj_match_ge8,
10247RB_DEBUG_COUNTER_obj_match_ptr,
10248RB_DEBUG_COUNTER_obj_iclass_ptr,
10249RB_DEBUG_COUNTER_obj_class_ptr,
10250RB_DEBUG_COUNTER_obj_module_ptr,
10251RB_DEBUG_COUNTER_obj_bignum_ptr,
10252RB_DEBUG_COUNTER_obj_bignum_embed,
10253RB_DEBUG_COUNTER_obj_float,
10254RB_DEBUG_COUNTER_obj_complex,
10255RB_DEBUG_COUNTER_obj_rational,
10256RB_DEBUG_COUNTER_obj_regexp_ptr,
10257RB_DEBUG_COUNTER_obj_file_ptr,
10258RB_DEBUG_COUNTER_obj_symbol,
10259RB_DEBUG_COUNTER_obj_imemo_ment,
10260RB_DEBUG_COUNTER_obj_imemo_iseq,
10261RB_DEBUG_COUNTER_obj_imemo_env,
10262RB_DEBUG_COUNTER_obj_imemo_tmpbuf,
10263RB_DEBUG_COUNTER_obj_imemo_ast,
10264RB_DEBUG_COUNTER_obj_imemo_cref,
10265RB_DEBUG_COUNTER_obj_imemo_svar,
10266RB_DEBUG_COUNTER_obj_imemo_throw_data,
10267RB_DEBUG_COUNTER_obj_imemo_ifunc,
10268RB_DEBUG_COUNTER_obj_imemo_memo,
10269RB_DEBUG_COUNTER_obj_imemo_parser_strterm,
10270RB_DEBUG_COUNTER_obj_imemo_callinfo,
10271RB_DEBUG_COUNTER_obj_imemo_callcache,
10272RB_DEBUG_COUNTER_obj_imemo_constcache,
10273RB_DEBUG_COUNTER_artable_hint_hit,
10274RB_DEBUG_COUNTER_artable_hint_miss,
10275RB_DEBUG_COUNTER_artable_hint_notfound,
10276RB_DEBUG_COUNTER_heap_xmalloc,
10277RB_DEBUG_COUNTER_heap_xrealloc,
10278RB_DEBUG_COUNTER_heap_xfree,
10279RB_DEBUG_COUNTER_theap_alloc,
10280RB_DEBUG_COUNTER_theap_alloc_fail,
10281RB_DEBUG_COUNTER_theap_evacuate,
10282RB_DEBUG_COUNTER_vm_sync_lock,
10283RB_DEBUG_COUNTER_vm_sync_lock_enter,
10284RB_DEBUG_COUNTER_vm_sync_lock_enter_nb,
10285RB_DEBUG_COUNTER_vm_sync_lock_enter_cr,
10286RB_DEBUG_COUNTER_vm_sync_barrier,
10287RB_DEBUG_COUNTER_mjit_exec,
10288RB_DEBUG_COUNTER_mjit_exec_not_added,
10289RB_DEBUG_COUNTER_mjit_exec_not_ready,
10290RB_DEBUG_COUNTER_mjit_exec_not_compiled,
10291RB_DEBUG_COUNTER_mjit_exec_call_func,
10292RB_DEBUG_COUNTER_mjit_add_iseq_to_process,
10293RB_DEBUG_COUNTER_mjit_unload_units,
10294RB_DEBUG_COUNTER_mjit_frame_VM2VM,
10295RB_DEBUG_COUNTER_mjit_frame_VM2JT,
10296RB_DEBUG_COUNTER_mjit_frame_JT2JT,
10297RB_DEBUG_COUNTER_mjit_frame_JT2VM,
10298RB_DEBUG_COUNTER_mjit_cancel,
10299RB_DEBUG_COUNTER_mjit_cancel_ivar_inline,
10300RB_DEBUG_COUNTER_mjit_cancel_exivar_inline,
10301RB_DEBUG_COUNTER_mjit_cancel_send_inline,
10302RB_DEBUG_COUNTER_mjit_cancel_opt_insn,
10303RB_DEBUG_COUNTER_mjit_cancel_invalidate_all,
10304RB_DEBUG_COUNTER_mjit_cancel_leave,
10305RB_DEBUG_COUNTER_mjit_length_unit_queue,
10306RB_DEBUG_COUNTER_mjit_length_active_units,
10307RB_DEBUG_COUNTER_mjit_length_compact_units,
10308RB_DEBUG_COUNTER_mjit_length_stale_units,
10309RB_DEBUG_COUNTER_mjit_compile_failures,
10310 RB_DEBUG_COUNTER_MAX
10311};
10312void rb_debug_counter_show_results(const char *msg);
10313
10314
10315size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
10316void ruby_debug_counter_reset(void);
10317void ruby_debug_counter_show_at_exit(int enable);
10318
10319
10320struct rb_yjit_options {
10321 _Bool yjit_enabled;
10322 unsigned exec_mem_size;
10323 unsigned call_threshold;
10324 _Bool greedy_versioning;
10325 _Bool no_type_prop;
10326 unsigned max_versions;
10327 _Bool gen_stats;
10328 _Bool test_backend;
10329};
10330_Bool rb_yjit_enabled_p(void);
10331unsigned rb_yjit_call_threshold(void);
10332void rb_yjit_invalidate_all_method_lookup_assumptions(void);
10333void rb_yjit_method_lookup_change(VALUE klass, ID mid);
10334void rb_yjit_cme_invalidate(VALUE cme);
10335void rb_yjit_collect_vm_usage_insn(int insn);
10336void rb_yjit_collect_binding_alloc(void);
10337void rb_yjit_collect_binding_set(void);
10338_Bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec);
10339void rb_yjit_init(struct rb_yjit_options *options);
10340void rb_yjit_bop_redefined(VALUE klass, const rb_method_entry_t *me, enum ruby_basic_operators bop);
10341void rb_yjit_constant_state_changed(void);
10342void rb_yjit_iseq_mark(const struct rb_iseq_constant_body *body);
10343void rb_yjit_iseq_update_references(const struct rb_iseq_constant_body *body);
10344void rb_yjit_iseq_free(const struct rb_iseq_constant_body *body);
10345void rb_yjit_before_ractor_spawn(void);
10346void rb_yjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic);
10347void rb_yjit_tracing_invalidate_all(void);
10348enum rb_mjit_iseq_func {
10349 NOT_ADDED_JIT_ISEQ_FUNC = 0,
10350 NOT_READY_JIT_ISEQ_FUNC = 1,
10351 NOT_COMPILED_JIT_ISEQ_FUNC = 2,
10352 LAST_JIT_ISEQ_FUNC = 3
10353};
10354struct mjit_options {
10355 char on;
10356 char save_temps;
10357 char warnings;
10358 char debug;
10359 char* debug_flags;
10360 unsigned int wait;
10361 unsigned int min_calls;
10362 int verbose;
10363 int max_cache_size;
10364};
10365struct rb_mjit_compile_info {
10366 _Bool disable_ivar_cache;
10367 _Bool disable_exivar_cache;
10368 _Bool disable_send_cache;
10369 _Bool disable_inlining;
10370 _Bool disable_const_cache;
10371};
10372typedef VALUE (*mjit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
10373
10374
10375extern struct mjit_options mjit_opts;
10376extern _Bool mjit_call_p;
10377extern void rb_mjit_add_iseq_to_process(const rb_iseq_t *iseq);
10378extern VALUE rb_mjit_wait_call(rb_execution_context_t *ec, struct rb_iseq_constant_body *body);
10379extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
10380extern void rb_mjit_recompile_send(const rb_iseq_t *iseq);
10381extern void rb_mjit_recompile_ivar(const rb_iseq_t *iseq);
10382extern void rb_mjit_recompile_exivar(const rb_iseq_t *iseq);
10383extern void rb_mjit_recompile_inlining(const rb_iseq_t *iseq);
10384extern void rb_mjit_recompile_const(const rb_iseq_t *iseq);
10385
10386
10387extern void mjit_cancel_all(const char *reason);
10388extern _Bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id);
10389extern void mjit_init(const struct mjit_options *opts);
10390extern void mjit_gc_start_hook(void);
10391extern void mjit_gc_exit_hook(void);
10392extern void mjit_free_iseq(const rb_iseq_t *iseq);
10393extern void mjit_update_references(const rb_iseq_t *iseq);
10394extern void mjit_mark(void);
10395extern struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec);
10396extern void mjit_cont_free(struct mjit_cont *cont);
10397extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body);
10398__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);
10399static VALUE
10400mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
10401{
10402 uintptr_t func_i = (uintptr_t)(body->jit_func);
10403 ((__builtin_expect(!!(!!(func_i <= LAST_JIT_ISEQ_FUNC)), 1)) ? ((void)0) : __builtin_unreachable());
10404 switch ((enum rb_mjit_iseq_func)func_i) {
10405 case NOT_ADDED_JIT_ISEQ_FUNC:
10406 ((void)0);
10407 if (body->total_calls == mjit_opts.min_calls) {
10408 rb_mjit_add_iseq_to_process(iseq);
10409 if ((__builtin_expect(!!(mjit_opts.wait), 0))) {
10410 return rb_mjit_wait_call(ec, body);
10411 }
10412 }
10413 break;
10414 case NOT_READY_JIT_ISEQ_FUNC:
10415 ((void)0);
10416 break;
10417 case NOT_COMPILED_JIT_ISEQ_FUNC:
10418 ((void)0);
10419 break;
10420 default:
10421 break;
10422 }
10423 return ((VALUE)RUBY_Qundef);
10424}
10425static inline VALUE
10426mjit_exec(rb_execution_context_t *ec)
10427{
10428 const rb_iseq_t *iseq = ec->cfp->iseq;
10429 struct rb_iseq_constant_body *body = iseq->body;
10430 _Bool yjit_enabled = 0;
10431 if (mjit_call_p || yjit_enabled) {
10432 body->total_calls++;
10433 }
10434 if (!(mjit_call_p || yjit_enabled))
10435 return ((VALUE)RUBY_Qundef);
10436 ((void)0);
10437 mjit_func_t func = body->jit_func;
10438 if (yjit_enabled && func == 0) {
10439 return ((VALUE)RUBY_Qundef);
10440 }
10441 if ((__builtin_expect(!!((uintptr_t)func <= LAST_JIT_ISEQ_FUNC), 0))) {
10442 ((void)0);
10443 return mjit_exec_slowpath(ec, iseq, body);
10444 }
10445 ((void)0);
10446 ((void)0);
10447 return func(ec, ec->cfp);
10448}
10449void mjit_child_after_fork(void);
10450VALUE mjit_pause(_Bool wait_p);
10451VALUE mjit_resume(void);
10452void mjit_finish(_Bool close_handle_p);
10453
10454
10455typedef struct rb_vm_struct ruby_vm_t;
10456int ruby_vm_destruct(ruby_vm_t *vm);
10457void ruby_vm_at_exit(void(*func)(ruby_vm_t *));
10458
10459
10460enum vm_call_flag_bits {
10461 VM_CALL_ARGS_SPLAT_bit,
10462 VM_CALL_ARGS_BLOCKARG_bit,
10463 VM_CALL_FCALL_bit,
10464 VM_CALL_VCALL_bit,
10465 VM_CALL_ARGS_SIMPLE_bit,
10466 VM_CALL_BLOCKISEQ_bit,
10467 VM_CALL_KWARG_bit,
10468 VM_CALL_KW_SPLAT_bit,
10469 VM_CALL_TAILCALL_bit,
10470 VM_CALL_SUPER_bit,
10471 VM_CALL_ZSUPER_bit,
10472 VM_CALL_OPT_SEND_bit,
10473 VM_CALL_KW_SPLAT_MUT_bit,
10474 VM_CALL__END
10475};
10476struct rb_callinfo_kwarg {
10477 int keyword_len;
10478 VALUE keywords[];
10479};
10480static inline size_t
10481rb_callinfo_kwarg_bytes(int keyword_len)
10482{
10483 return rb_size_mul_add_or_raise(
10484 keyword_len,
10485 sizeof(VALUE),
10486 sizeof(struct rb_callinfo_kwarg),
10487 rb_eRuntimeError);
10488}
10489struct rb_callinfo {
10490 VALUE flags;
10491 const struct rb_callinfo_kwarg *kwarg;
10492 VALUE mid;
10493 VALUE flag;
10494 VALUE argc;
10495};
10496static inline _Bool
10497vm_ci_packed_p(const struct rb_callinfo *ci)
10498{
10499 if ((__builtin_expect(!!(((VALUE)ci) & 0x01), 1))) {
10500 return 1;
10501 }
10502 else {
10503 ((void)0);
10504 return 0;
10505 }
10506}
10507static inline _Bool
10508vm_ci_p(const struct rb_callinfo *ci)
10509{
10510 if (vm_ci_packed_p(ci) || imemo_type_p((VALUE)ci, imemo_callinfo)) {
10511 return 1;
10512 }
10513 else {
10514 return 0;
10515 }
10516}
10517static inline ID
10518vm_ci_mid(const struct rb_callinfo *ci)
10519{
10520 if (vm_ci_packed_p(ci)) {
10521 return (((VALUE)ci) >> (1 + 15 + 16)) & ((((VALUE)1)<<32) - 1);
10522 }
10523 else {
10524 return (ID)ci->mid;
10525 }
10526}
10527static inline unsigned int
10528vm_ci_flag(const struct rb_callinfo *ci)
10529{
10530 if (vm_ci_packed_p(ci)) {
10531 return (unsigned int)((((VALUE)ci) >> (1 + 15)) & ((((VALUE)1)<<16) - 1));
10532 }
10533 else {
10534 return (unsigned int)ci->flag;
10535 }
10536}
10537static inline unsigned int
10538vm_ci_argc(const struct rb_callinfo *ci)
10539{
10540 if (vm_ci_packed_p(ci)) {
10541 return (unsigned int)((((VALUE)ci) >> (1)) & ((((VALUE)1)<<15) - 1));
10542 }
10543 else {
10544 return (unsigned int)ci->argc;
10545 }
10546}
10547static inline const struct rb_callinfo_kwarg *
10548vm_ci_kwarg(const struct rb_callinfo *ci)
10549{
10550 if (vm_ci_packed_p(ci)) {
10551 return ((void *)0);
10552 }
10553 else {
10554 return ci->kwarg;
10555 }
10556}
10557static inline void
10558vm_ci_dump(const struct rb_callinfo *ci)
10559{
10560 if (vm_ci_packed_p(ci)) {
10561 ruby_debug_printf("packed_ci ID:%s flag:%x argc:%u\n",
10562 rb_id2name(vm_ci_mid(ci)), vm_ci_flag(ci), vm_ci_argc(ci));
10563 }
10564 else {
10565 rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.1.3/vm_callinfo.h", 175, __func__);
10566 }
10567}
10568static inline const struct rb_callinfo *
10569vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10570{
10571 if ((((mid ) & ~((((VALUE)1)<<32) - 1)) ? 0 : ((flag) & ~((((VALUE)1)<<16) - 1)) ? 0 : ((argc) & ~((((VALUE)1)<<15) - 1)) ? 0 : (kwarg) ? 0 : 1)) {
10572 ((void)0);
10573 return ((const struct rb_callinfo *) ((((VALUE)(mid )) << (1 + 15 + 16)) | (((VALUE)(flag)) << (1 + 15)) | (((VALUE)(argc)) << (1)) | RUBY_FIXNUM_FLAG));
10574 }
10575 const _Bool debug = 0;
10576 if (debug) ruby_debug_printf("%s:%d ", file, line);
10577 const struct rb_callinfo *ci = (const struct rb_callinfo *)
10578 rb_imemo_new(imemo_callinfo,
10579 (VALUE)mid,
10580 (VALUE)flag,
10581 (VALUE)argc,
10582 (VALUE)kwarg);
10583 if (debug) rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.1.3/vm_callinfo.h", 216, __func__);
10584 if (kwarg) {
10585 ((void)0);
10586 }
10587 else {
10588 ((void)0);
10589 }
10590 ((void)0);
10591 ((void)0);
10592 return ci;
10593}
10594static inline const struct rb_callinfo *
10595vm_ci_new_runtime_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10596{
10597 ((void)0);
10598 return vm_ci_new_(mid, flag, argc, kwarg, file, line);
10599}
10600static inline _Bool
10601vm_ci_markable(const struct rb_callinfo *ci)
10602{
10603 if (! ci) {
10604 return 0;
10605 }
10606 else if (vm_ci_packed_p(ci)) {
10607 return 1;
10608 }
10609 else {
10610 ((void)0);
10611 return ! RB_FL_ANY_RAW((VALUE)ci, ((VALUE)RUBY_FL_USER4));
10612 }
10613}
10614typedef VALUE (*vm_call_handler)(
10615 struct rb_execution_context_struct *ec,
10616 struct rb_control_frame_struct *cfp,
10617 struct rb_calling_info *calling);
10618struct rb_callcache {
10619 const VALUE flags;
10620 const VALUE klass;
10621 const struct rb_callable_method_entry_struct * const cme_;
10622 const vm_call_handler call_;
10623 union {
10624 const unsigned int attr_index;
10625 const enum method_missing_reason method_missing_reason;
10626 VALUE v;
10627 } aux_;
10628};
10629static inline const struct rb_callcache *
10630vm_cc_new(VALUE klass,
10631 const struct rb_callable_method_entry_struct *cme,
10632 vm_call_handler call)
10633{
10634 const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
10635 ((void)0);
10636 return cc;
10637}
10638static inline _Bool
10639vm_cc_class_check(const struct rb_callcache *cc, VALUE klass)
10640{
10641 ((void)0);
10642 ((void)0);
10643 return cc->klass == klass;
10644}
10645static inline int
10646vm_cc_markable(const struct rb_callcache *cc)
10647{
10648 ((void)0);
10649 return RB_FL_TEST_RAW((VALUE)cc, ((VALUE)RUBY_FL_USER4)) == 0;
10650}
10651static inline const struct rb_callable_method_entry_struct *
10652vm_cc_cme(const struct rb_callcache *cc)
10653{
10654 ((void)0);
10655 ((void)0);
10656 return cc->cme_;
10657}
10658static inline vm_call_handler
10659vm_cc_call(const struct rb_callcache *cc)
10660{
10661 ((void)0);
10662 ((void)0);
10663 return cc->call_;
10664}
10665static inline unsigned int
10666vm_cc_attr_index(const struct rb_callcache *cc)
10667{
10668 ((void)0);
10669 return cc->aux_.attr_index;
10670}
10671static inline unsigned int
10672vm_cc_cmethod_missing_reason(const struct rb_callcache *cc)
10673{
10674 ((void)0);
10675 return cc->aux_.method_missing_reason;
10676}
10677static inline _Bool
10678vm_cc_invalidated_p(const struct rb_callcache *cc)
10679{
10680 if (cc->klass && !((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))) {
10681 return 0;
10682 }
10683 else {
10684 return 1;
10685 }
10686}
10687static inline _Bool
10688vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass)
10689{
10690 ((void)0);
10691 if (cc->klass == klass && !((cc_cme)->flags & ((VALUE)RUBY_FL_USER9))) {
10692 return 1;
10693 }
10694 else {
10695 return 0;
10696 }
10697}
10698extern const struct rb_callcache *rb_vm_empty_cc(void);
10699extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
10700static inline void
10701vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
10702{
10703 ((void)0);
10704 ((void)0);
10705 *(vm_call_handler *)&cc->call_ = call;
10706}
10707static inline void
10708vm_cc_attr_index_set(const struct rb_callcache *cc, int index)
10709{
10710 ((void)0);
10711 ((void)0);
10712 *(int *)&cc->aux_.attr_index = index;
10713}
10714static inline void
10715vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missing_reason reason)
10716{
10717 ((void)0);
10718 ((void)0);
10719 *(enum method_missing_reason *)&cc->aux_.method_missing_reason = reason;
10720}
10721static inline void
10722vm_cc_invalidate(const struct rb_callcache *cc)
10723{
10724 ((void)0);
10725 ((void)0);
10726 ((void)0);
10727 *(VALUE *)&cc->klass = 0;
10728 ((void)0);
10729}
10730struct rb_call_data {
10731 const struct rb_callinfo *ci;
10732 const struct rb_callcache *cc;
10733};
10734struct rb_class_cc_entries {
10735 int capa;
10736 int len;
10737 const struct rb_callable_method_entry_struct *cme;
10738 struct rb_class_cc_entries_entry {
10739 const struct rb_callinfo *ci;
10740 const struct rb_callcache *cc;
10741 } *entries;
10742};
10743void rb_vm_ccs_free(struct rb_class_cc_entries *ccs);
10744
10745
10746struct RNode;
10747VALUE ruby_debug_print_value(int level, int debug_level, const char *header, VALUE v);
10748ID ruby_debug_print_id(int level, int debug_level, const char *header, ID id);
10749struct RNode *ruby_debug_print_node(int level, int debug_level, const char *header, const struct RNode *node);
10750int ruby_debug_print_indent(int level, int debug_level, int indent_level);
10751void ruby_debug_gc_check_func(void);
10752void ruby_set_debug_option(const char *str);
10753
10754
10755extern enum ruby_debug_log_mode {
10756 ruby_debug_log_disabled = 0x00,
10757 ruby_debug_log_memory = 0x01,
10758 ruby_debug_log_stderr = 0x02,
10759 ruby_debug_log_file = 0x04,
10760} ruby_debug_log_mode;
10761__attribute__((__format__(__printf__, 4, 5)))
10762void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
10763void ruby_debug_log_print(unsigned int n);
10764_Bool ruby_debug_log_filter(const char *func_name);
10765typedef long OFFSET;
10766typedef unsigned long lindex_t;
10767typedef VALUE GENTRY;
10768typedef rb_iseq_t *ISEQ;
10769
10770
10771extern VALUE ruby_vm_const_missing_count;
10772extern rb_serial_t ruby_vm_global_constant_state;
10773extern rb_serial_t ruby_vm_class_serial;
10774extern rb_serial_t ruby_vm_global_cvar_state;
10775
10776
10777static inline void
10778CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, _Bool enabled)
10779{
10780 if ((__builtin_expect(!!(enabled), 1))) {
10781 vm_cc_call_set(cc, func);
10782 }
10783}
10784static inline struct vm_throw_data *
10785THROW_DATA_NEW(VALUE val, const rb_control_frame_t *cf, int st)
10786{
10787 struct vm_throw_data *obj = (struct vm_throw_data *)rb_imemo_new(imemo_throw_data, val, (VALUE)cf, 0, 0);
10788 obj->throw_state = st;
10789 return obj;
10790}
10791static inline VALUE
10792THROW_DATA_VAL(const struct vm_throw_data *obj)
10793{
10794 ((void)0);
10795 return obj->throw_obj;
10796}
10797static inline const rb_control_frame_t *
10798THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj)
10799{
10800 ((void)0);
10801 return obj->catch_frame;
10802}
10803static inline int
10804THROW_DATA_STATE(const struct vm_throw_data *obj)
10805{
10806 ((void)0);
10807 return obj->throw_state;
10808}
10809static inline int
10810THROW_DATA_CONSUMED_P(const struct vm_throw_data *obj)
10811{
10812 ((void)0);
10813 return obj->flags & ((VALUE)RUBY_FL_USER4);
10814}
10815static inline void
10816THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
10817{
10818 ((void)0);
10819 obj->catch_frame = cfp;
10820}
10821static inline void
10822THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
10823{
10824 ((void)0);
10825 obj->throw_state = st;
10826}
10827static inline void
10828THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
10829{
10830 if (imemo_throw_data_p((VALUE)obj) &&
10831 THROW_DATA_STATE(obj) == RUBY_TAG_BREAK) {
10832 obj->flags |= ((VALUE)RUBY_FL_USER4);
10833 }
10834}
10835static inline _Bool
10836vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
10837{
10838 return !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
10839 !((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);
10840}
10841struct rb_ractor_local_storage_type {
10842 void (*mark)(void *ptr);
10843 void (*free)(void *ptr);
10844};
10845typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t;
10846
10847
10848extern VALUE rb_cRactor;
10849VALUE rb_ractor_stdin(void);
10850VALUE rb_ractor_stdout(void);
10851VALUE rb_ractor_stderr(void);
10852void rb_ractor_stdin_set(VALUE io);
10853void rb_ractor_stdout_set(VALUE io);
10854void rb_ractor_stderr_set(VALUE io);
10855rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);
10856VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);
10857_Bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);
10858void rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);
10859extern const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;
10860rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type);
10861void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);
10862void rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);
10863VALUE rb_ractor_make_shareable(VALUE obj);
10864VALUE rb_ractor_make_shareable_copy(VALUE obj);
10865
10866
10867static inline _Bool
10868rb_ractor_shareable_p(VALUE obj)
10869{
10870 _Bool rb_ractor_shareable_p_continue(VALUE obj);
10871 if (RB_SPECIAL_CONST_P(obj)) {
10872 return 1;
10873 }
10874 else if (RB_FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)) {
10875 return 1;
10876 }
10877 else {
10878 return rb_ractor_shareable_p_continue(obj);
10879 }
10880}
10881enum rb_ractor_basket_type {
10882 basket_type_none,
10883 basket_type_ref,
10884 basket_type_copy,
10885 basket_type_move,
10886 basket_type_will,
10887 basket_type_deleted,
10888 basket_type_reserved,
10889};
10890struct rb_ractor_basket {
10891 _Bool exception;
10892 enum rb_ractor_basket_type type;
10893 VALUE v;
10894 VALUE sender;
10895};
10896struct rb_ractor_queue {
10897 struct rb_ractor_basket *baskets;
10898 int start;
10899 int cnt;
10900 int size;
10901 unsigned int serial;
10902 unsigned int reserved_cnt;
10903};
10904struct rb_ractor_waiting_list {
10905 int cnt;
10906 int size;
10907 rb_ractor_t **ractors;
10908};
10909struct rb_ractor_sync {
10910 rb_nativethread_lock_t lock;
10911 rb_nativethread_cond_t cond;
10912 struct rb_ractor_queue incoming_queue;
10913 struct rb_ractor_waiting_list taking_ractors;
10914 _Bool incoming_port_closed;
10915 _Bool outgoing_port_closed;
10916 struct ractor_wait {
10917 enum ractor_wait_status {
10918 wait_none = 0x00,
10919 wait_receiving = 0x01,
10920 wait_taking = 0x02,
10921 wait_yielding = 0x04,
10922 wait_moving = 0x08,
10923 } status;
10924 enum ractor_wakeup_status {
10925 wakeup_none,
10926 wakeup_by_send,
10927 wakeup_by_yield,
10928 wakeup_by_take,
10929 wakeup_by_close,
10930 wakeup_by_interrupt,
10931 wakeup_by_retry,
10932 } wakeup_status;
10933 struct rb_ractor_basket yielded_basket;
10934 struct rb_ractor_basket taken_basket;
10935 } wait;
10936};
10937struct rb_ractor_struct {
10938 struct rb_ractor_pub pub;
10939 struct rb_ractor_sync sync;
10940 VALUE receiving_mutex;
10941 _Bool yield_atexit;
10942 rb_nativethread_cond_t barrier_wait_cond;
10943 struct {
10944 struct list_head set;
10945 unsigned int cnt;
10946 unsigned int blocking_cnt;
10947 unsigned int sleeper;
10948 rb_global_vm_lock_t gvl;
10949 rb_execution_context_t *running_ec;
10950 rb_thread_t *main;
10951 } threads;
10952 VALUE thgroup_default;
10953 VALUE name;
10954 VALUE loc;
10955 enum ractor_status {
10956 ractor_created,
10957 ractor_running,
10958 ractor_blocking,
10959 ractor_terminated,
10960 } status_;
10961 struct list_node vmlr_node;
10962 st_table *local_storage;
10963 struct rb_id_table *idkey_local_storage;
10964 VALUE r_stdin;
10965 VALUE r_stdout;
10966 VALUE r_stderr;
10967 VALUE verbose;
10968 VALUE debug;
10969 rb_ractor_newobj_cache_t newobj_cache;
10970 struct gc_mark_func_data_struct {
10971 void *data;
10972 void (*mark_func)(VALUE v, void *data);
10973 } *mfd;
10974};
10975static inline VALUE
10976rb_ractor_self(const rb_ractor_t *r)
10977{
10978 return r->pub.self;
10979}
10980rb_ractor_t *rb_ractor_main_alloc(void);
10981void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread);
10982void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result);
10983void rb_ractor_atexit_exception(rb_execution_context_t *ec);
10984void rb_ractor_teardown(rb_execution_context_t *ec);
10985void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
10986void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args);
10987VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc);
10988rb_global_vm_lock_t *rb_ractor_gvl(rb_ractor_t *);
10989int rb_ractor_living_thread_num(const rb_ractor_t *);
10990VALUE rb_ractor_thread_list(rb_ractor_t *r);
10991_Bool rb_ractor_p(VALUE rv);
10992void rb_ractor_living_threads_init(rb_ractor_t *r);
10993void rb_ractor_living_threads_insert(rb_ractor_t *r, rb_thread_t *th);
10994void rb_ractor_living_threads_remove(rb_ractor_t *r, rb_thread_t *th);
10995void rb_ractor_blocking_threads_inc(rb_ractor_t *r, const char *file, int line);
10996void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line);
10997void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r);
10998void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r);
10999void rb_ractor_terminate_all(void);
11000_Bool rb_ractor_main_p_(void);
11001void rb_ractor_finish_marking(void);
11002void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th);
11003VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name);
11004
11005
11006_Bool rb_ractor_shareable_p_continue(VALUE obj);
11007void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key);
11008
11009
11010static inline _Bool
11011rb_ractor_main_p(void)
11012{
11013 if (ruby_single_main_ractor) {
11014 return 1;
11015 }
11016 else {
11017 return rb_ractor_main_p_();
11018 }
11019}
11020static inline _Bool
11021rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status)
11022{
11023 return r->status_ == status;
11024}
11025static inline void
11026rb_ractor_sleeper_threads_inc(rb_ractor_t *r)
11027{
11028 r->threads.sleeper++;
11029}
11030static inline void
11031rb_ractor_sleeper_threads_dec(rb_ractor_t *r)
11032{
11033 r->threads.sleeper--;
11034}
11035static inline void
11036rb_ractor_sleeper_threads_clear(rb_ractor_t *r)
11037{
11038 r->threads.sleeper = 0;
11039}
11040static inline int
11041rb_ractor_sleeper_thread_num(rb_ractor_t *r)
11042{
11043 return r->threads.sleeper;
11044}
11045static inline void
11046rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
11047{
11048 if (cr->threads.running_ec != th->ec) {
11049 if (0) {
11050 ruby_debug_printf("rb_ractor_thread_switch ec:%p->%p\n",
11051 (void *)cr->threads.running_ec, (void *)th->ec);
11052 }
11053 }
11054 else {
11055 return;
11056 }
11057 if (cr->threads.running_ec != th->ec) {
11058 th->running_time_us = 0;
11059 }
11060 cr->threads.running_ec = th->ec;
11061 ((void)0);
11062}
11063static inline void
11064rb_ractor_set_current_ec(rb_ractor_t *cr, rb_execution_context_t *ec)
11065{
11066 ruby_current_ec = ec;
11067 if (cr->threads.running_ec != ec) {
11068 if (0) {
11069 ruby_debug_printf("rb_ractor_set_current_ec ec:%p->%p\n",
11070 (void *)cr->threads.running_ec, (void *)ec);
11071 }
11072 }
11073 else {
11074 ((void)0);
11075 }
11076 cr->threads.running_ec = ec;
11077}
11078void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11079void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11080static inline uint32_t
11081rb_ractor_id(const rb_ractor_t *r)
11082{
11083 return r->pub.id;
11084}
11085_Bool rb_vm_locked_p(void);
11086void rb_vm_lock_body(void);
11087void rb_vm_unlock_body(void);
11088struct rb_ractor_struct;
11089void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev );
11090void rb_vm_lock_enter_body_nb(unsigned int *lev );
11091void rb_vm_lock_enter_body(unsigned int *lev );
11092void rb_vm_lock_leave_body(unsigned int *lev );
11093void rb_vm_barrier(void);
11094extern struct rb_ractor_struct *ruby_single_main_ractor;
11095static inline _Bool
11096rb_multi_ractor_p(void)
11097{
11098 if ((__builtin_expect(!!(ruby_single_main_ractor), 1))) {
11099 ((void)0);
11100 return 0;
11101 }
11102 else {
11103 return 1;
11104 }
11105}
11106static inline void
11107rb_vm_lock(const char *file, int line)
11108{
11109 ((void)0);
11110 if (rb_multi_ractor_p()) {
11111 rb_vm_lock_body();
11112 }
11113}
11114static inline void
11115rb_vm_unlock(const char *file, int line)
11116{
11117 if (rb_multi_ractor_p()) {
11118 rb_vm_unlock_body();
11119 }
11120}
11121static inline void
11122rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
11123{
11124 ((void)0);
11125 if (rb_multi_ractor_p()) {
11126 rb_vm_lock_enter_body(lev );
11127 }
11128}
11129static inline void
11130rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
11131{
11132 ((void)0);
11133 if (rb_multi_ractor_p()) {
11134 rb_vm_lock_enter_body_nb(lev );
11135 }
11136}
11137static inline void
11138rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
11139{
11140 if (rb_multi_ractor_p()) {
11141 rb_vm_lock_leave_body(lev );
11142 }
11143}
11144static inline void
11145rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11146{
11147 ((void)0);
11148 rb_vm_lock_enter_body_cr(cr, levp );
11149}
11150static inline void
11151rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11152{
11153 rb_vm_lock_leave_body(levp );
11154}
11155struct rb_builtin_function {
11156 const void * const func_ptr;
11157 const int argc;
11158 const int index;
11159 const char * const name;
11160 void (*compiler)(FILE *, long, unsigned, _Bool);
11161};
11162void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
11163static inline void rb_builtin_function_check_arity0(VALUE (*f)(rb_execution_context_t *ec, VALUE self)){}
11164static inline void rb_builtin_function_check_arity1(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE)){}
11165static inline void rb_builtin_function_check_arity2(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE)){}
11166static inline void rb_builtin_function_check_arity3(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE)){}
11167static inline void rb_builtin_function_check_arity4(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE)){}
11168static inline void rb_builtin_function_check_arity5(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11169static inline void rb_builtin_function_check_arity6(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11170static inline void rb_builtin_function_check_arity7(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11171static inline void rb_builtin_function_check_arity8(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
11172static 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)){}
11173static 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)){}
11174static 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)){}
11175static 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)){}
11176static 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)){}
11177static 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)){}
11178static 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
11179__attribute__((__pure__)) VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);static inline
11180VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
11181__attribute__((__pure__)) static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index);
11182static inline VALUE
11183rb_vm_lvar(rb_execution_context_t *ec, int index)
11184{
11185 return ec->cfp->ep[index];
11186}
11187struct builtin_binary {
11188 const char *feature;
11189 const unsigned char *bin;
11190 size_t bin_size;
11191};
11192struct ruby_dtrace_method_hook_args {
11193 const char *classname;
11194 const char *methodname;
11195 const char *filename;
11196 int line_no;
11197 volatile VALUE klass;
11198 volatile VALUE name;
11199};
11200
11201
11202__attribute__((__noinline__)) int rb_dtrace_setup(rb_execution_context_t *, VALUE, ID, struct ruby_dtrace_method_hook_args *);
11203
11204
11205VALUE rb_str_concat_literals(size_t, const VALUE*);
11206__attribute__ ((__visibility__("default"))) extern
11207VALUE rb_vm_exec(rb_execution_context_t *, _Bool);
11208__attribute__((__pure__)) static inline const VALUE *VM_EP_LEP(const VALUE *);
11209static inline const VALUE *
11210VM_EP_LEP(const VALUE *ep)
11211{
11212 while (!VM_ENV_LOCAL_P(ep)) {
11213 ep = VM_ENV_PREV_EP(ep);
11214 }
11215 return ep;
11216}
11217static inline const rb_control_frame_t *
11218rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE * const ep)
11219{
11220 if (!ep) {
11221 return ((void *)0);
11222 }
11223 else {
11224 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
11225 while (cfp < eocfp) {
11226 if (cfp->ep == ep) {
11227 return cfp;
11228 }
11229 cfp = ((cfp)+1);
11230 }
11231 return ((void *)0);
11232 }
11233}static inline
11234const VALUE *
11235rb_vm_ep_local_ep(const VALUE *ep)
11236{
11237 return VM_EP_LEP(ep);
11238}
11239__attribute__((__pure__)) static inline const VALUE *VM_CF_LEP(const rb_control_frame_t * const cfp);
11240static inline const VALUE *
11241VM_CF_LEP(const rb_control_frame_t * const cfp)
11242{
11243 return VM_EP_LEP(cfp->ep);
11244}
11245static inline const VALUE *
11246VM_CF_PREV_EP(const rb_control_frame_t * const cfp)
11247{
11248 return VM_ENV_PREV_EP(cfp->ep);
11249}
11250__attribute__((__pure__)) static inline VALUE VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp);
11251static inline VALUE
11252VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp)
11253{
11254 const VALUE *ep = VM_CF_LEP(cfp);
11255 return VM_ENV_BLOCK_HANDLER(ep);
11256}static inline
11257int
11258rb_vm_cframe_keyword_p(const rb_control_frame_t *cfp)
11259{
11260 return VM_FRAME_CFRAME_KW_P(cfp);
11261}static inline
11262VALUE
11263rb_vm_frame_block_handler(const rb_control_frame_t *cfp)
11264{
11265 return VM_CF_BLOCK_HANDLER(cfp);
11266}
11267static struct rb_captured_block *
11268VM_CFP_TO_CAPTURED_BLOCK(const rb_control_frame_t *cfp)
11269{
11270 ((void)0);
11271 return (struct rb_captured_block *)&cfp->self;
11272}
11273static rb_control_frame_t *
11274VM_CAPTURED_BLOCK_TO_CFP(const struct rb_captured_block *captured)
11275{
11276 rb_control_frame_t *cfp = ((rb_control_frame_t *)((VALUE *)(captured) - 3));
11277 ((void)0);
11278 ((void)0);
11279 return cfp;
11280}
11281static int
11282VM_BH_FROM_CFP_P(VALUE block_handler, const rb_control_frame_t *cfp)
11283{
11284 const struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
11285 return ((void *)((block_handler) & ~0x03)) == captured;
11286}
11287static VALUE
11288vm_passed_block_handler(rb_execution_context_t *ec)
11289{
11290 VALUE block_handler = ec->passed_block_handler;
11291 ec->passed_block_handler = 0;
11292 vm_block_handler_verify(block_handler);
11293 return block_handler;
11294}
11295static rb_cref_t *
11296vm_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)
11297{
11298 VALUE refinements = ((VALUE)RUBY_Qnil);
11299 int omod_shared = 0;
11300 rb_cref_t *cref;
11301 union {
11302 rb_scope_visibility_t visi;
11303 VALUE value;
11304 } scope_visi;
11305 scope_visi.visi.method_visi = visi;
11306 scope_visi.visi.module_func = module_func;
11307 if (prev_cref != ((void *)0) && prev_cref != (void *)1 ) {
11308 refinements = CREF_REFINEMENTS(prev_cref);
11309 if (!RB_NIL_P(refinements)) {
11310 omod_shared = 1;
11311 CREF_OMOD_SHARED_SET(prev_cref);
11312 }
11313 }
11314 ((void)0);
11315 cref = (rb_cref_t *)rb_imemo_new(imemo_cref, klass, (VALUE)(use_prev_prev ? CREF_NEXT(prev_cref) : prev_cref), scope_visi.value, refinements);
11316 if (pushed_by_eval) CREF_PUSHED_BY_EVAL_SET(cref);
11317 if (omod_shared) CREF_OMOD_SHARED_SET(cref);
11318 if (singleton) CREF_SINGLETON_SET(cref);
11319 return cref;
11320}
11321static rb_cref_t *
11322vm_cref_new(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int singleton)
11323{
11324 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 0, singleton);
11325}
11326static rb_cref_t *
11327vm_cref_new_use_prev(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval)
11328{
11329 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 1, 0);
11330}
11331static int
11332ref_delete_symkey(VALUE key, VALUE value, VALUE unused)
11333{
11334 return RB_SYMBOL_P(key) ? ST_DELETE : ST_CONTINUE;
11335}
11336static rb_cref_t *
11337vm_cref_dup(const rb_cref_t *cref)
11338{
11339 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11340 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11341 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11342 int singleton = CREF_SINGLETON(cref);
11343 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11344 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11345 VALUE ref = rb_hash_dup(CREF_REFINEMENTS(cref));
11346 rb_hash_foreach(ref, ref_delete_symkey, ((VALUE)RUBY_Qnil));
11347 CREF_REFINEMENTS_SET(new_cref, ref);
11348 CREF_OMOD_SHARED_UNSET(new_cref);
11349 }
11350 return new_cref;
11351}static inline
11352rb_cref_t *
11353rb_vm_cref_dup_without_refinements(const rb_cref_t *cref)
11354{
11355 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11356 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11357 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11358 int singleton = CREF_SINGLETON(cref);
11359 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11360 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11361 CREF_REFINEMENTS_SET(new_cref, ((VALUE)RUBY_Qnil));
11362 CREF_OMOD_SHARED_UNSET(new_cref);
11363 }
11364 return new_cref;
11365}
11366static rb_cref_t *
11367vm_cref_new_toplevel(rb_execution_context_t *ec)
11368{
11369 rb_cref_t *cref = vm_cref_new(rb_cObject, METHOD_VISI_PRIVATE , 0, ((void *)0), 0, 0);
11370 VALUE top_wrapper = rb_ec_thread_ptr(ec)->top_wrapper;
11371 if (top_wrapper) {
11372 cref = vm_cref_new(top_wrapper, METHOD_VISI_PRIVATE, 0, cref, 0, 0);
11373 }
11374 return cref;
11375}static inline
11376rb_cref_t *
11377rb_vm_cref_new_toplevel(void)
11378{
11379 return vm_cref_new_toplevel(rb_current_execution_context(1));
11380}
11381static void
11382vm_cref_dump(const char *mesg, const rb_cref_t *cref)
11383{
11384 ruby_debug_printf("vm_cref_dump: %s (%p)\n", mesg, (void *)cref);
11385 while (cref) {
11386 ruby_debug_printf("= cref| klass: %s\n", RSTRING_PTR(rb_class_path(CREF_CLASS(cref))));
11387 cref = CREF_NEXT(cref);
11388 }
11389}static inline
11390void
11391rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep)
11392{
11393 *((const VALUE **)&dst->as.captured.ep) = ep;
11394 (rb_obj_written((VALUE)(obj), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(VM_ENV_ENVVAL(ep)), "../ruby-3.1.3/vm.c", 353));
11395}
11396static void
11397vm_bind_update_env(VALUE bindval, rb_binding_t *bind, VALUE envval)
11398{
11399 const rb_env_t *env = (rb_env_t *)envval;
11400 rb_obj_write((VALUE)(bindval), __extension__({
11401 ;
11402 ; __typeof__((VALUE *)(&bind->block.as.captured.code.iseq)) unaligned_member_access_result = ((VALUE *)(&bind->block.as.captured.code.iseq));
11403 ; unaligned_member_access_result; }), (VALUE)(env->iseq), "../ruby-3.1.3/vm.c", 360);
11404 rb_vm_block_ep_update(bindval, &bind->block, env->ep);
11405}
11406static VALUE vm_make_env_object(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
11407extern VALUE rb_vm_invoke_bmethod(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self,
11408 int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
11409 const rb_callable_method_entry_t *me);
11410static 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);
11411typedef enum {
11412 CONST_DEPRECATED = 0x100,
11413 CONST_VISIBILITY_MASK = 0xff,
11414 CONST_PUBLIC = 0x00,
11415 CONST_PRIVATE,
11416 CONST_VISIBILITY_MAX
11417} rb_const_flag_t;
11418typedef struct rb_const_entry_struct {
11419 rb_const_flag_t flag;
11420 int line;
11421 VALUE value;
11422 VALUE file;
11423} rb_const_entry_t;
11424VALUE rb_mod_private_constant(int argc, const VALUE *argv, VALUE obj);
11425VALUE rb_mod_public_constant(int argc, const VALUE *argv, VALUE obj);
11426VALUE rb_mod_deprecate_constant(int argc, const VALUE *argv, VALUE obj);
11427void rb_free_const_table(struct rb_id_table *tbl);
11428VALUE rb_const_source_location(VALUE, ID);
11429
11430
11431int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag);
11432rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
11433VALUE rb_public_const_get_at(VALUE klass, ID id);
11434VALUE rb_public_const_get_from(VALUE klass, ID id);
11435int rb_public_const_defined_from(VALUE klass, ID id);
11436VALUE rb_const_source_location_at(VALUE, ID);
11437
11438
11439enum {
11440 cmp_opt_Integer,
11441 cmp_opt_String,
11442 cmp_opt_Float,
11443 cmp_optimizable_count
11444};
11445struct cmp_opt_data {
11446 unsigned int opt_methods;
11447 unsigned int opt_inited;
11448};
11449VALUE rb_invcmp(VALUE, VALUE);
11450struct ar_table_struct;
11451typedef unsigned char ar_hint_t;
11452enum ruby_rhash_flags {
11453 RHASH_PASS_AS_KEYWORDS = ((VALUE)RUBY_FL_USER1),
11454 RHASH_PROC_DEFAULT = ((VALUE)RUBY_FL_USER2),
11455 RHASH_ST_TABLE_FLAG = ((VALUE)RUBY_FL_USER3),
11456 RHASH_AR_TABLE_SIZE_MASK = (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)|((VALUE)RUBY_FL_USER7)),
11457 RHASH_AR_TABLE_SIZE_SHIFT = (((VALUE)RUBY_FL_USHIFT)+4),
11458 RHASH_AR_TABLE_BOUND_MASK = (((VALUE)RUBY_FL_USER8)|((VALUE)RUBY_FL_USER9)|((VALUE)RUBY_FL_USER10)|((VALUE)RUBY_FL_USER11)),
11459 RHASH_AR_TABLE_BOUND_SHIFT = (((VALUE)RUBY_FL_USHIFT)+8),
11460 RHASH_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER12),
11461 RHASH_LEV_SHIFT = (((VALUE)RUBY_FL_USHIFT) + 13),
11462 RHASH_LEV_MAX = 127,
11463};
11464struct RHash {
11465 struct RBasic basic;
11466 union {
11467 st_table *st;
11468 struct ar_table_struct *ar;
11469 } as;
11470 const VALUE ifnone;
11471 union {
11472 ar_hint_t ary[8];
11473 VALUE word;
11474 } ar_hint;
11475};
11476void rb_hash_st_table_set(VALUE hash, st_table *st);
11477VALUE rb_hash_default_value(VALUE hash, VALUE key);
11478VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
11479long rb_dbl_long_hash(double d);
11480st_table *rb_init_identtable(void);
11481VALUE rb_to_hash_type(VALUE obj);
11482VALUE rb_hash_key_str(VALUE);
11483VALUE rb_hash_values(VALUE hash);
11484VALUE rb_hash_rehash(VALUE hash);
11485int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val);
11486VALUE rb_hash_set_pair(VALUE hash, VALUE pair);
11487int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
11488int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
11489int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
11490extern st_table *rb_hash_st_table(VALUE hash);
11491VALUE rb_ident_hash_new_with_size(st_index_t size);
11492static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
11493static inline VALUE RHASH_IFNONE(VALUE h);
11494static inline size_t RHASH_SIZE(VALUE h);
11495static inline _Bool RHASH_EMPTY_P(VALUE h);
11496static inline _Bool RHASH_AR_TABLE_P(VALUE h);
11497static inline _Bool RHASH_ST_TABLE_P(VALUE h);
11498static inline struct ar_table_struct *RHASH_AR_TABLE(VALUE h);
11499static inline st_table *RHASH_ST_TABLE(VALUE h);
11500static inline size_t RHASH_ST_SIZE(VALUE h);
11501static inline void RHASH_ST_CLEAR(VALUE h);
11502static inline _Bool RHASH_TRANSIENT_P(VALUE h);
11503static inline void RHASH_SET_TRANSIENT_FLAG(VALUE h);
11504static inline void RHASH_UNSET_TRANSIENT_FLAG(VALUE h);
11505
11506
11507VALUE rb_hash_delete_entry(VALUE hash, VALUE key);
11508VALUE rb_ident_hash_new(void);
11509int rb_hash_stlike_foreach(VALUE hash, st_foreach_callback_func *func, st_data_t arg);
11510
11511
11512
11513
11514VALUE rb_hash_new_with_size(st_index_t size);
11515VALUE rb_hash_resurrect(VALUE hash);
11516int rb_hash_stlike_lookup(VALUE hash, st_data_t key, st_data_t *pval);
11517VALUE rb_hash_keys(VALUE hash);
11518VALUE rb_hash_has_key(VALUE hash, VALUE key);
11519VALUE rb_hash_compare_by_id_p(VALUE hash);
11520st_table *rb_hash_tbl_raw(VALUE hash, const char *file, int line);
11521
11522
11523VALUE rb_hash_compare_by_id(VALUE hash);
11524static inline _Bool
11525RHASH_AR_TABLE_P(VALUE h)
11526{
11527 return ! RB_FL_TEST_RAW(h, RHASH_ST_TABLE_FLAG);
11528}
11529static inline struct ar_table_struct *
11530RHASH_AR_TABLE(VALUE h)
11531{
11532 return ((struct RHash *)(h))->as.ar;
11533}
11534static inline st_table *
11535RHASH_ST_TABLE(VALUE h)
11536{
11537 return ((struct RHash *)(h))->as.st;
11538}
11539static inline VALUE
11540RHASH_IFNONE(VALUE h)
11541{
11542 return ((struct RHash *)(h))->ifnone;
11543}
11544static inline size_t
11545RHASH_SIZE(VALUE h)
11546{
11547 if (RHASH_AR_TABLE_P(h)) {
11548 return RHASH_AR_TABLE_SIZE_RAW(h);
11549 }
11550 else {
11551 return RHASH_ST_SIZE(h);
11552 }
11553}
11554static inline _Bool
11555RHASH_EMPTY_P(VALUE h)
11556{
11557 return RHASH_SIZE(h) == 0;
11558}
11559static inline _Bool
11560RHASH_ST_TABLE_P(VALUE h)
11561{
11562 return ! RHASH_AR_TABLE_P(h);
11563}
11564static inline size_t
11565RHASH_ST_SIZE(VALUE h)
11566{
11567 return RHASH_ST_TABLE(h)->num_entries;
11568}
11569static inline void
11570RHASH_ST_CLEAR(VALUE h)
11571{
11572 RB_FL_UNSET_RAW(h, RHASH_ST_TABLE_FLAG);
11573 ((struct RHash *)(h))->as.ar = ((void *)0);
11574}
11575static inline unsigned
11576RHASH_AR_TABLE_SIZE_RAW(VALUE h)
11577{
11578 VALUE ret = RB_FL_TEST_RAW(h, RHASH_AR_TABLE_SIZE_MASK);
11579 ret >>= RHASH_AR_TABLE_SIZE_SHIFT;
11580 return (unsigned)ret;
11581}
11582static inline _Bool
11583RHASH_TRANSIENT_P(VALUE h)
11584{
11585 return RB_FL_TEST_RAW(h, RHASH_TRANSIENT_FLAG);
11586}
11587static inline void
11588RHASH_SET_TRANSIENT_FLAG(VALUE h)
11589{
11590 RB_FL_SET_RAW(h, RHASH_TRANSIENT_FLAG);
11591}
11592static inline void
11593RHASH_UNSET_TRANSIENT_FLAG(VALUE h)
11594{
11595 RB_FL_UNSET_RAW(h, RHASH_TRANSIENT_FLAG);
11596}
11597enum rb_int_parse_flags {
11598 RB_INT_PARSE_SIGN = 0x01,
11599 RB_INT_PARSE_UNDERSCORE = 0x02,
11600 RB_INT_PARSE_PREFIX = 0x04,
11601 RB_INT_PARSE_ALL = 0x07,
11602 RB_INT_PARSE_DEFAULT = 0x07,
11603};
11604struct RBignum {
11605 struct RBasic basic;
11606 union {
11607 struct {
11608 size_t len;
11609 unsigned int *digits;
11610 } heap;
11611 unsigned int ary[(8*3/4)];
11612 } as;
11613};
11614extern const char ruby_digitmap[];
11615double rb_big_fdiv_double(VALUE x, VALUE y);
11616VALUE rb_big_uminus(VALUE x);
11617VALUE rb_big_hash(VALUE);
11618VALUE rb_big_odd_p(VALUE);
11619VALUE rb_big_even_p(VALUE);
11620size_t rb_big_size(VALUE);
11621VALUE rb_integer_float_cmp(VALUE x, VALUE y);
11622VALUE rb_integer_float_eq(VALUE x, VALUE y);
11623VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
11624VALUE rb_big_comp(VALUE x);
11625VALUE rb_big_aref(VALUE x, VALUE y);
11626VALUE rb_big_abs(VALUE x);
11627VALUE rb_big_size_m(VALUE big);
11628VALUE rb_big_bit_length(VALUE big);
11629VALUE rb_big_remainder(VALUE x, VALUE y);
11630VALUE rb_big_gt(VALUE x, VALUE y);
11631VALUE rb_big_ge(VALUE x, VALUE y);
11632VALUE rb_big_lt(VALUE x, VALUE y);
11633VALUE rb_big_le(VALUE x, VALUE y);
11634VALUE rb_int_powm(int const argc, VALUE * const argv, VALUE const num);
11635VALUE rb_big_isqrt(VALUE n);
11636static inline _Bool BIGNUM_SIGN(VALUE b);
11637static inline _Bool BIGNUM_POSITIVE_P(VALUE b);
11638static inline _Bool BIGNUM_NEGATIVE_P(VALUE b);
11639static inline void BIGNUM_SET_SIGN(VALUE b, _Bool sign);
11640static inline void BIGNUM_NEGATE(VALUE b);
11641static inline size_t BIGNUM_LEN(VALUE b);
11642static inline unsigned int *BIGNUM_DIGITS(VALUE b);
11643static inline int BIGNUM_LENINT(VALUE b);
11644static inline _Bool BIGNUM_EMBED_P(VALUE b);
11645
11646
11647VALUE rb_big_mul_normal(VALUE x, VALUE y);
11648VALUE rb_big_mul_balance(VALUE x, VALUE y);
11649VALUE rb_big_mul_karatsuba(VALUE x, VALUE y);
11650VALUE rb_big_mul_toom3(VALUE x, VALUE y);
11651VALUE rb_big_sq_fast(VALUE x);
11652VALUE rb_big_divrem_normal(VALUE x, VALUE y);
11653VALUE rb_big2str_poweroftwo(VALUE x, int base);
11654VALUE rb_big2str_generic(VALUE x, int base);
11655VALUE rb_str2big_poweroftwo(VALUE arg, int base, int badcheck);
11656VALUE rb_str2big_normal(VALUE arg, int base, int badcheck);
11657VALUE rb_str2big_karatsuba(VALUE arg, int base, int badcheck);
11658VALUE rb_big_mul_gmp(VALUE x, VALUE y);
11659VALUE rb_big_divrem_gmp(VALUE x, VALUE y);
11660VALUE rb_big2str_gmp(VALUE x, int base);
11661VALUE rb_str2big_gmp(VALUE arg, int base, int badcheck);
11662VALUE rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, int base, int flags);
11663
11664
11665
11666
11667VALUE rb_int128t2big(__int128 n);
11668
11669
11670static inline _Bool
11671BIGNUM_SIGN(VALUE b)
11672{
11673 return RB_FL_TEST_RAW(b, ((VALUE)RUBY_FL_USER1));
11674}
11675static inline _Bool
11676BIGNUM_POSITIVE_P(VALUE b)
11677{
11678 return BIGNUM_SIGN(b);
11679}
11680static inline _Bool
11681BIGNUM_NEGATIVE_P(VALUE b)
11682{
11683 return ! BIGNUM_POSITIVE_P(b);
11684}
11685static inline void
11686BIGNUM_SET_SIGN(VALUE b, _Bool sign)
11687{
11688 if (sign) {
11689 RB_FL_SET_RAW(b, ((VALUE)RUBY_FL_USER1));
11690 }
11691 else {
11692 RB_FL_UNSET_RAW(b, ((VALUE)RUBY_FL_USER1));
11693 }
11694}
11695static inline void
11696BIGNUM_NEGATE(VALUE b)
11697{
11698 RB_FL_REVERSE_RAW(b, ((VALUE)RUBY_FL_USER1));
11699}
11700static inline size_t
11701BIGNUM_LEN(VALUE b)
11702{
11703 if (! BIGNUM_EMBED_P(b)) {
11704 return ((struct RBignum *)(b))->as.heap.len;
11705 }
11706 else {
11707 size_t ret = ((struct RBasic *)(b))->flags;
11708 ret &= (~(~(VALUE)0U << 3) << (((VALUE)RUBY_FL_USHIFT)+3));
11709 ret >>= (((VALUE)RUBY_FL_USHIFT)+3);
11710 return ret;
11711 }
11712}
11713static inline int
11714BIGNUM_LENINT(VALUE b)
11715{
11716 return rb_long2int_inline(BIGNUM_LEN(b));
11717}
11718static inline unsigned int *
11719BIGNUM_DIGITS(VALUE b)
11720{
11721 if (BIGNUM_EMBED_P(b)) {
11722 return ((struct RBignum *)(b))->as.ary;
11723 }
11724 else {
11725 return ((struct RBignum *)(b))->as.heap.digits;
11726 }
11727}
11728static inline _Bool
11729BIGNUM_EMBED_P(VALUE b)
11730{
11731 return RB_FL_TEST_RAW(b, ((VALUE)((VALUE)RUBY_FL_USER2)));
11732}
11733static inline uint16_t ruby_swap16(uint16_t);
11734static inline uint32_t ruby_swap32(uint32_t);
11735static inline uint64_t ruby_swap64(uint64_t);
11736static inline unsigned nlz_int(unsigned x);
11737static inline unsigned nlz_long(unsigned long x);
11738static inline unsigned nlz_long_long(unsigned long long x);
11739static inline unsigned nlz_intptr(uintptr_t x);
11740static inline unsigned nlz_int32(uint32_t x);
11741static inline unsigned nlz_int64(uint64_t x);
11742static inline unsigned nlz_int128(unsigned __int128 x);
11743static inline unsigned rb_popcount32(uint32_t x);
11744static inline unsigned rb_popcount64(uint64_t x);
11745static inline unsigned rb_popcount_intptr(uintptr_t x);
11746static inline int ntz_int32(uint32_t x);
11747static inline int ntz_int64(uint64_t x);
11748static inline int ntz_intptr(uintptr_t x);
11749static inline VALUE RUBY_BIT_ROTL(VALUE, int);
11750static inline VALUE RUBY_BIT_ROTR(VALUE, int);
11751static inline uint16_t
11752ruby_swap16(uint16_t x)
11753{
11754 return __builtin_bswap16(x);
11755}
11756static inline uint32_t
11757ruby_swap32(uint32_t x)
11758{
11759 return __builtin_bswap32(x);
11760}
11761static inline uint64_t
11762ruby_swap64(uint64_t x)
11763{
11764 return __builtin_bswap64(x);
11765}
11766static inline unsigned int
11767nlz_int32(uint32_t x)
11768{
11769 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
11770 return x ? (unsigned int)__builtin_clz(x) : 32;
11771}
11772static inline unsigned int
11773nlz_int64(uint64_t x)
11774{
11775 if (x == 0) {
11776 return 64;
11777 }
11778 else if (sizeof(long) * 8 == 64) {
11779 return (unsigned int)__builtin_clzl((unsigned long)x);
11780 }
11781 else if (sizeof(long long) * 8 == 64) {
11782 return (unsigned int)__builtin_clzll((unsigned long long)x);
11783 }
11784 else {
11785 __builtin_unreachable();
11786 }
11787}
11788static inline unsigned int
11789nlz_int128(unsigned __int128 x)
11790{
11791 uint64_t y = (uint64_t)(x >> 64);
11792 if (x == 0) {
11793 return 128;
11794 }
11795 else if (y == 0) {
11796 return (unsigned int)nlz_int64(x) + 64;
11797 }
11798 else {
11799 return (unsigned int)nlz_int64(y);
11800 }
11801}
11802static inline unsigned int
11803nlz_int(unsigned int x)
11804{
11805 if (sizeof(unsigned int) * 8 == 32) {
11806 return nlz_int32((uint32_t)x);
11807 }
11808 else if (sizeof(unsigned int) * 8 == 64) {
11809 return nlz_int64((uint64_t)x);
11810 }
11811 else {
11812 __builtin_unreachable();
11813 }
11814}
11815static inline unsigned int
11816nlz_long(unsigned long x)
11817{
11818 if (sizeof(unsigned long) * 8 == 32) {
11819 return nlz_int32((uint32_t)x);
11820 }
11821 else if (sizeof(unsigned long) * 8 == 64) {
11822 return nlz_int64((uint64_t)x);
11823 }
11824 else {
11825 __builtin_unreachable();
11826 }
11827}
11828static inline unsigned int
11829nlz_long_long(unsigned long long x)
11830{
11831 if (sizeof(unsigned long long) * 8 == 64) {
11832 return nlz_int64((uint64_t)x);
11833 }
11834 else if (sizeof(unsigned long long) * 8 == 128) {
11835 return nlz_int128((unsigned __int128)x);
11836 }
11837 else {
11838 __builtin_unreachable();
11839 }
11840}
11841static inline unsigned int
11842nlz_intptr(uintptr_t x)
11843{
11844 if (sizeof(uintptr_t) == sizeof(unsigned int)) {
11845 return nlz_int((unsigned int)x);
11846 }
11847 if (sizeof(uintptr_t) == sizeof(unsigned long)) {
11848 return nlz_long((unsigned long)x);
11849 }
11850 if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
11851 return nlz_long_long((unsigned long long)x);
11852 }
11853 else {
11854 __builtin_unreachable();
11855 }
11856}
11857static inline unsigned int
11858rb_popcount32(uint32_t x)
11859{
11860 __extension__ _Static_assert(sizeof(int) * 8 >= 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT >= 32");
11861 return (unsigned int)__builtin_popcount(x);
11862}
11863static inline unsigned int
11864rb_popcount64(uint64_t x)
11865{
11866 if (sizeof(long) * 8 == 64) {
11867 return (unsigned int)__builtin_popcountl((unsigned long)x);
11868 }
11869 else if (sizeof(long long) * 8 == 64) {
11870 return (unsigned int)__builtin_popcountll((unsigned long long)x);
11871 }
11872 else {
11873 __builtin_unreachable();
11874 }
11875}
11876static inline unsigned int
11877rb_popcount_intptr(uintptr_t x)
11878{
11879 if (sizeof(uintptr_t) * 8 == 64) {
11880 return rb_popcount64((uint64_t)x);
11881 }
11882 else if (sizeof(uintptr_t) * 8 == 32) {
11883 return rb_popcount32((uint32_t)x);
11884 }
11885 else {
11886 __builtin_unreachable();
11887 }
11888}
11889static inline int
11890ntz_int32(uint32_t x)
11891{
11892 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
11893 return x ? (unsigned)__builtin_ctz(x) : 32;
11894}
11895static inline int
11896ntz_int64(uint64_t x)
11897{
11898 if (x == 0) {
11899 return 64;
11900 }
11901 else if (sizeof(long) * 8 == 64) {
11902 return (unsigned)__builtin_ctzl((unsigned long)x);
11903 }
11904 else if (sizeof(long long) * 8 == 64) {
11905 return (unsigned)__builtin_ctzll((unsigned long long)x);
11906 }
11907 else {
11908 __builtin_unreachable();
11909 }
11910}
11911static inline int
11912ntz_intptr(uintptr_t x)
11913{
11914 if (sizeof(uintptr_t) * 8 == 64) {
11915 return ntz_int64((uint64_t)x);
11916 }
11917 else if (sizeof(uintptr_t) * 8 == 32) {
11918 return ntz_int32((uint32_t)x);
11919 }
11920 else {
11921 __builtin_unreachable();
11922 }
11923}
11924static inline VALUE
11925RUBY_BIT_ROTL(VALUE v, int n)
11926{
11927 const int m = (sizeof(VALUE) * 8) - 1;
11928 return (v << (n & m)) | (v >> (-n & m));
11929}
11930static inline VALUE
11931RUBY_BIT_ROTR(VALUE v, int n)
11932{
11933 const int m = (sizeof(VALUE) * 8) - 1;
11934 return (v << (-n & m)) | (v >> (n & m));
11935}
11936VALUE rb_int128t2big(__int128 n);
11937static inline long rb_overflowed_fix_to_int(long x);
11938static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
11939static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
11940static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
11941static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
11942static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
11943static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
11944static inline _Bool FIXNUM_POSITIVE_P(VALUE num);
11945static inline _Bool FIXNUM_NEGATIVE_P(VALUE num);
11946static inline _Bool FIXNUM_ZERO_P(VALUE num);
11947static inline long
11948rb_overflowed_fix_to_int(long x)
11949{
11950 return (long)((unsigned long)(x >> 1) ^ (1LU << (8 * 8 - 1)));
11951}
11952static inline VALUE
11953rb_fix_plus_fix(VALUE x, VALUE y)
11954{
11955 long lz;
11956 if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
11957 return rb_int2big(rb_overflowed_fix_to_int(lz));
11958 }
11959 else {
11960 return (VALUE)lz;
11961 }
11962}
11963static inline VALUE
11964rb_fix_minus_fix(VALUE x, VALUE y)
11965{
11966 long lz;
11967 if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
11968 return rb_int2big(rb_overflowed_fix_to_int(lz));
11969 }
11970 else {
11971 return (VALUE)lz;
11972 }
11973}
11974static inline VALUE
11975rb_fix_mul_fix(VALUE x, VALUE y)
11976{
11977 long lx = rb_fix2long(x);
11978 long ly = rb_fix2long(y);
11979 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));
11980}
11981static inline void
11982rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
11983{
11984 long x = rb_fix2long(a);
11985 long y = rb_fix2long(b);
11986 long div, mod;
11987 if (x == ((-0x7fffffffffffffffL -1L) / 2) && y == -1) {
11988 if (divp) *divp = rb_long2num_inline(-((-0x7fffffffffffffffL -1L) / 2));
11989 if (modp) *modp = RB_INT2FIX(0);
11990 return;
11991 }
11992 div = x / y;
11993 mod = x % y;
11994 if (y > 0 ? mod < 0 : mod > 0) {
11995 mod += y;
11996 div -= 1;
11997 }
11998 if (divp) *divp = RB_INT2FIX(div);
11999 if (modp) *modp = RB_INT2FIX(mod);
12000}
12001static inline VALUE
12002rb_fix_div_fix(VALUE x, VALUE y)
12003{
12004 VALUE div;
12005 rb_fix_divmod_fix(x, y, &div, ((void *)0));
12006 return div;
12007}
12008static inline VALUE
12009rb_fix_mod_fix(VALUE x, VALUE y)
12010{
12011 VALUE mod;
12012 rb_fix_divmod_fix(x, y, ((void *)0), &mod);
12013 return mod;
12014}
12015static inline _Bool
12016FIXNUM_POSITIVE_P(VALUE num)
12017{
12018 return (long)num > (long)__builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12019}
12020static inline _Bool
12021FIXNUM_NEGATIVE_P(VALUE num)
12022{
12023 return (long)num < 0;
12024}
12025static inline _Bool
12026FIXNUM_ZERO_P(VALUE num)
12027{
12028 return num == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12029}
12030enum ruby_num_rounding_mode {
12031 RUBY_NUM_ROUND_HALF_UP,
12032 RUBY_NUM_ROUND_HALF_EVEN,
12033 RUBY_NUM_ROUND_HALF_DOWN,
12034 RUBY_NUM_ROUND_DEFAULT = RUBY_NUM_ROUND_HALF_UP,
12035};
12036typedef double rb_float_value_type;
12037struct RFloat {
12038 struct RBasic basic;
12039 rb_float_value_type float_value;
12040};
12041int rb_num_to_uint(VALUE val, unsigned int *ret);
12042VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl);
12043double ruby_float_step_size(double beg, double end, double unit, int excl);
12044int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl, int allow_endless);
12045int rb_num_negative_p(VALUE);
12046VALUE rb_int_succ(VALUE num);
12047VALUE rb_float_uminus(VALUE num);
12048VALUE rb_int_plus(VALUE x, VALUE y);
12049VALUE rb_float_plus(VALUE x, VALUE y);
12050VALUE rb_int_minus(VALUE x, VALUE y);
12051VALUE rb_float_minus(VALUE x, VALUE y);
12052VALUE rb_int_mul(VALUE x, VALUE y);
12053VALUE rb_float_mul(VALUE x, VALUE y);
12054VALUE rb_float_div(VALUE x, VALUE y);
12055VALUE rb_int_idiv(VALUE x, VALUE y);
12056VALUE rb_int_modulo(VALUE x, VALUE y);
12057VALUE rb_int2str(VALUE num, int base);
12058VALUE rb_fix_plus(VALUE x, VALUE y);
12059VALUE rb_int_gt(VALUE x, VALUE y);
12060VALUE rb_float_gt(VALUE x, VALUE y);
12061VALUE rb_int_ge(VALUE x, VALUE y);
12062enum ruby_num_rounding_mode rb_num_get_rounding_option(VALUE opts);
12063double rb_int_fdiv_double(VALUE x, VALUE y);
12064VALUE rb_int_pow(VALUE x, VALUE y);
12065VALUE rb_float_pow(VALUE x, VALUE y);
12066VALUE rb_int_cmp(VALUE x, VALUE y);
12067VALUE rb_int_equal(VALUE x, VALUE y);
12068VALUE rb_int_divmod(VALUE x, VALUE y);
12069VALUE rb_int_and(VALUE x, VALUE y);
12070VALUE rb_int_lshift(VALUE x, VALUE y);
12071VALUE rb_int_div(VALUE x, VALUE y);
12072int rb_int_positive_p(VALUE num);
12073int rb_int_negative_p(VALUE num);
12074VALUE rb_check_integer_type(VALUE);
12075VALUE rb_num_pow(VALUE x, VALUE y);
12076VALUE rb_float_ceil(VALUE num, int ndigits);
12077VALUE rb_float_floor(VALUE x, int ndigits);
12078VALUE rb_float_abs(VALUE flt);
12079static inline VALUE rb_num_compare_with_zero(VALUE num, ID mid);
12080static inline int rb_num_positive_int_p(VALUE num);
12081static inline int rb_num_negative_int_p(VALUE num);
12082static inline double rb_float_flonum_value(VALUE v);
12083static inline double rb_float_noflonum_value(VALUE v);
12084static inline double rb_float_value_inline(VALUE v);
12085static inline VALUE rb_float_new_inline(double d);
12086static inline _Bool INT_POSITIVE_P(VALUE num);
12087static inline _Bool INT_NEGATIVE_P(VALUE num);
12088static inline _Bool FLOAT_ZERO_P(VALUE num);
12089
12090
12091
12092
12093
12094
12095VALUE rb_flo_div_flo(VALUE x, VALUE y);
12096double ruby_float_mod(double x, double y);
12097VALUE rb_float_equal(VALUE x, VALUE y);
12098int rb_float_cmp(VALUE x, VALUE y);
12099VALUE rb_float_eql(VALUE x, VALUE y);
12100VALUE rb_fix_aref(VALUE fix, VALUE idx);
12101VALUE rb_int_zero_p(VALUE num);
12102VALUE rb_int_even_p(VALUE num);
12103VALUE rb_int_odd_p(VALUE num);
12104VALUE rb_int_abs(VALUE num);
12105VALUE rb_int_bit_length(VALUE num);
12106VALUE rb_int_uminus(VALUE num);
12107VALUE rb_int_comp(VALUE num);
12108
12109
12110static inline _Bool
12111INT_POSITIVE_P(VALUE num)
12112{
12113 if (RB_FIXNUM_P(num)) {
12114 return FIXNUM_POSITIVE_P(num);
12115 }
12116 else {
12117 return BIGNUM_POSITIVE_P(num);
12118 }
12119}
12120static inline _Bool
12121INT_NEGATIVE_P(VALUE num)
12122{
12123 if (RB_FIXNUM_P(num)) {
12124 return FIXNUM_NEGATIVE_P(num);
12125 }
12126 else {
12127 return BIGNUM_NEGATIVE_P(num);
12128 }
12129}
12130static inline _Bool
12131FLOAT_ZERO_P(VALUE num)
12132{
12133 return rb_float_value_inline(num) == 0.0;
12134}
12135static inline VALUE
12136rb_num_compare_with_zero(VALUE num, ID mid)
12137{
12138 VALUE zero = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12139 VALUE r = rb_check_funcall(num, mid, 1, &zero);
12140 if (r == ((VALUE)RUBY_Qundef)) {
12141 rb_cmperr(num, zero);
12142 }
12143 return r;
12144}
12145static inline int
12146rb_num_positive_int_p(VALUE num)
12147{
12148 const ID mid = '>';
12149 if (RB_FIXNUM_P(num)) {
12150 if (rb_method_basic_definition_p(rb_cInteger, mid))
12151 return FIXNUM_POSITIVE_P(num);
12152 }
12153 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12154 if (rb_method_basic_definition_p(rb_cInteger, mid))
12155 return BIGNUM_POSITIVE_P(num);
12156 }
12157 return RB_TEST(rb_num_compare_with_zero(num, mid));
12158}
12159static inline int
12160rb_num_negative_int_p(VALUE num)
12161{
12162 const ID mid = '<';
12163 if (RB_FIXNUM_P(num)) {
12164 if (rb_method_basic_definition_p(rb_cInteger, mid))
12165 return FIXNUM_NEGATIVE_P(num);
12166 }
12167 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12168 if (rb_method_basic_definition_p(rb_cInteger, mid))
12169 return BIGNUM_NEGATIVE_P(num);
12170 }
12171 return RB_TEST(rb_num_compare_with_zero(num, mid));
12172}
12173static inline double
12174rb_float_flonum_value(VALUE v)
12175{
12176 if (v != (VALUE)0x8000000000000002) {
12177 union {
12178 double d;
12179 VALUE v;
12180 } t;
12181 VALUE b63 = (v >> 63);
12182 t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~(VALUE)0x03), 3);
12183 return t.d;
12184 }
12185 return 0.0;
12186}
12187static inline double
12188rb_float_noflonum_value(VALUE v)
12189{
12190 return ((struct RFloat *)(v))->float_value;
12191}
12192static inline double
12193rb_float_value_inline(VALUE v)
12194{
12195 if (RB_FLONUM_P(v)) {
12196 return rb_float_flonum_value(v);
12197 }
12198 return rb_float_noflonum_value(v);
12199}
12200static inline VALUE
12201rb_float_new_inline(double d)
12202{
12203 union {
12204 double d;
12205 VALUE v;
12206 } t;
12207 int bits;
12208 t.d = d;
12209 bits = (int)((VALUE)(t.v >> 60) & 0x7);
12210 if (t.v != 0x3000000000000000 &&
12211 !((bits-3) & ~0x01)) {
12212 return (RUBY_BIT_ROTL(t.v, 3) & ~(VALUE)0x01) | 0x02;
12213 }
12214 else if (t.v == (VALUE)0) {
12215 return 0x8000000000000002;
12216 }
12217 return rb_float_new_in_heap(d);
12218}
12219int ruby_fill_random_bytes(void *, size_t, int);
12220void rb_gc_mark_global_tbl(void);
12221void rb_gc_update_global_tbl(void);
12222size_t rb_generic_ivar_memsize(VALUE);
12223VALUE rb_search_class_path(VALUE);
12224VALUE rb_attr_delete(VALUE, ID);
12225VALUE rb_ivar_lookup(VALUE obj, ID id, VALUE undef);
12226void rb_autoload_str(VALUE mod, ID id, VALUE file);
12227VALUE rb_autoload_at_p(VALUE, ID, int);
12228__attribute__((__noreturn__)) VALUE rb_mod_const_missing(VALUE,VALUE);
12229rb_gvar_getter_t *rb_gvar_getter_function_of(ID);
12230rb_gvar_setter_t *rb_gvar_setter_function_of(ID);
12231void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_);
12232void rb_gvar_ractor_local(const char *name);
12233static inline _Bool ROBJ_TRANSIENT_P(VALUE obj);
12234static inline void ROBJ_TRANSIENT_SET(VALUE obj);
12235static inline void ROBJ_TRANSIENT_UNSET(VALUE obj);
12236uint32_t rb_obj_ensure_iv_index_mapping(VALUE obj, ID id);
12237
12238
12239void rb_mark_generic_ivar(VALUE);
12240void rb_mv_generic_ivar(VALUE src, VALUE dst);
12241VALUE rb_const_missing(VALUE klass, VALUE name);
12242int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
12243void rb_iv_tbl_copy(VALUE dst, VALUE src);
12244
12245
12246
12247
12248VALUE rb_gvar_get(ID);
12249VALUE rb_gvar_set(ID, VALUE);
12250VALUE rb_gvar_defined(ID);
12251void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID);
12252void rb_init_iv_list(VALUE obj);
12253
12254
12255static inline _Bool
12256ROBJ_TRANSIENT_P(VALUE obj)
12257{
12258 return RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_USER13));
12259}
12260static inline void
12261ROBJ_TRANSIENT_SET(VALUE obj)
12262{
12263 RB_FL_SET_RAW(obj, ((VALUE)RUBY_FL_USER13));
12264}
12265static inline void
12266ROBJ_TRANSIENT_UNSET(VALUE obj)
12267{
12268 RB_FL_UNSET_RAW(obj, ((VALUE)RUBY_FL_USER13));
12269}
12270enum {
12271 RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
12272 RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
12273 RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1),
12274 RSTRUCT_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER3),
12275};
12276struct RStruct {
12277 struct RBasic basic;
12278 union {
12279 struct {
12280 long len;
12281 const VALUE *ptr;
12282 } heap;
12283 const VALUE ary[RSTRUCT_EMBED_LEN_MAX];
12284 } as;
12285};
12286VALUE rb_struct_init_copy(VALUE copy, VALUE s);
12287VALUE rb_struct_lookup(VALUE s, VALUE idx);
12288VALUE rb_struct_s_keyword_init(VALUE klass);
12289static inline const VALUE *rb_struct_const_heap_ptr(VALUE st);
12290static inline _Bool RSTRUCT_TRANSIENT_P(VALUE st);
12291static inline void RSTRUCT_TRANSIENT_SET(VALUE st);
12292static inline void RSTRUCT_TRANSIENT_UNSET(VALUE st);
12293static inline long RSTRUCT_EMBED_LEN(VALUE st);
12294static inline long internal_RSTRUCT_LEN(VALUE st);
12295static inline int RSTRUCT_LENINT(VALUE st);
12296static inline const VALUE *RSTRUCT_CONST_PTR(VALUE st);
12297static inline void internal_RSTRUCT_SET(VALUE st, long k, VALUE v);
12298static inline VALUE internal_RSTRUCT_GET(VALUE st, long k);
12299static inline _Bool
12300RSTRUCT_TRANSIENT_P(VALUE st)
12301{
12302 return RB_FL_TEST_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12303}
12304static inline void
12305RSTRUCT_TRANSIENT_SET(VALUE st)
12306{
12307 RB_FL_SET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12308}
12309static inline void
12310RSTRUCT_TRANSIENT_UNSET(VALUE st)
12311{
12312 RB_FL_UNSET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12313}
12314static inline long
12315RSTRUCT_EMBED_LEN(VALUE st)
12316{
12317 long ret = RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK);
12318 ret >>= RSTRUCT_EMBED_LEN_SHIFT;
12319 return ret;
12320}
12321static inline long
12322internal_RSTRUCT_LEN(VALUE st)
12323{
12324 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12325 return RSTRUCT_EMBED_LEN(st);
12326 }
12327 else {
12328 return ((struct RStruct *)(st))->as.heap.len;
12329 }
12330}
12331static inline int
12332RSTRUCT_LENINT(VALUE st)
12333{
12334 return rb_long2int_inline(internal_RSTRUCT_LEN(st));
12335}
12336static inline const VALUE *
12337RSTRUCT_CONST_PTR(VALUE st)
12338{
12339 const struct RStruct *p = ((struct RStruct *)(st));
12340 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12341 return p->as.ary;
12342 }
12343 else {
12344 return p->as.heap.ptr;
12345 }
12346}
12347static inline void
12348internal_RSTRUCT_SET(VALUE st, long k, VALUE v)
12349{
12350 rb_obj_write((VALUE)(st), __extension__({
12351 ;
12352 ; __typeof__((VALUE *)(&RSTRUCT_CONST_PTR(st)[k])) unaligned_member_access_result = ((VALUE *)(&RSTRUCT_CONST_PTR(st)[k]));
12353 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.1.3/internal/struct.h", 137);
12354}
12355static inline VALUE
12356internal_RSTRUCT_GET(VALUE st, long k)
12357{
12358 return RSTRUCT_CONST_PTR(st)[k];
12359}
12360static inline const VALUE *
12361rb_struct_const_heap_ptr(VALUE st)
12362{
12363 return ((struct RStruct *)(st))->as.heap.ptr;
12364}
12365struct gen_ivtbl {
12366 uint32_t numiv;
12367 VALUE ivptr[];
12368};
12369int rb_ivar_generic_ivtbl_lookup(VALUE obj, struct gen_ivtbl **);
12370VALUE rb_ivar_generic_lookup_with_index(VALUE obj, ID id, uint32_t index);
12371enum ruby_vminsn_type {
12372 YARVINSN_nop,
12373 YARVINSN_getlocal,
12374 YARVINSN_setlocal,
12375 YARVINSN_getblockparam,
12376 YARVINSN_setblockparam,
12377 YARVINSN_getblockparamproxy,
12378 YARVINSN_getspecial,
12379 YARVINSN_setspecial,
12380 YARVINSN_getinstancevariable,
12381 YARVINSN_setinstancevariable,
12382 YARVINSN_getclassvariable,
12383 YARVINSN_setclassvariable,
12384 YARVINSN_getconstant,
12385 YARVINSN_setconstant,
12386 YARVINSN_getglobal,
12387 YARVINSN_setglobal,
12388 YARVINSN_putnil,
12389 YARVINSN_putself,
12390 YARVINSN_putobject,
12391 YARVINSN_putspecialobject,
12392 YARVINSN_putstring,
12393 YARVINSN_concatstrings,
12394 YARVINSN_anytostring,
12395 YARVINSN_toregexp,
12396 YARVINSN_intern,
12397 YARVINSN_newarray,
12398 YARVINSN_newarraykwsplat,
12399 YARVINSN_duparray,
12400 YARVINSN_duphash,
12401 YARVINSN_expandarray,
12402 YARVINSN_concatarray,
12403 YARVINSN_splatarray,
12404 YARVINSN_newhash,
12405 YARVINSN_newrange,
12406 YARVINSN_pop,
12407 YARVINSN_dup,
12408 YARVINSN_dupn,
12409 YARVINSN_swap,
12410 YARVINSN_topn,
12411 YARVINSN_setn,
12412 YARVINSN_adjuststack,
12413 YARVINSN_defined,
12414 YARVINSN_checkmatch,
12415 YARVINSN_checkkeyword,
12416 YARVINSN_checktype,
12417 YARVINSN_defineclass,
12418 YARVINSN_definemethod,
12419 YARVINSN_definesmethod,
12420 YARVINSN_send,
12421 YARVINSN_opt_send_without_block,
12422 YARVINSN_objtostring,
12423 YARVINSN_opt_str_freeze,
12424 YARVINSN_opt_nil_p,
12425 YARVINSN_opt_str_uminus,
12426 YARVINSN_opt_newarray_max,
12427 YARVINSN_opt_newarray_min,
12428 YARVINSN_invokesuper,
12429 YARVINSN_invokeblock,
12430 YARVINSN_leave,
12431 YARVINSN_throw,
12432 YARVINSN_jump,
12433 YARVINSN_branchif,
12434 YARVINSN_branchunless,
12435 YARVINSN_branchnil,
12436 YARVINSN_opt_getinlinecache,
12437 YARVINSN_opt_setinlinecache,
12438 YARVINSN_once,
12439 YARVINSN_opt_case_dispatch,
12440 YARVINSN_opt_plus,
12441 YARVINSN_opt_minus,
12442 YARVINSN_opt_mult,
12443 YARVINSN_opt_div,
12444 YARVINSN_opt_mod,
12445 YARVINSN_opt_eq,
12446 YARVINSN_opt_neq,
12447 YARVINSN_opt_lt,
12448 YARVINSN_opt_le,
12449 YARVINSN_opt_gt,
12450 YARVINSN_opt_ge,
12451 YARVINSN_opt_ltlt,
12452 YARVINSN_opt_and,
12453 YARVINSN_opt_or,
12454 YARVINSN_opt_aref,
12455 YARVINSN_opt_aset,
12456 YARVINSN_opt_aset_with,
12457 YARVINSN_opt_aref_with,
12458 YARVINSN_opt_length,
12459 YARVINSN_opt_size,
12460 YARVINSN_opt_empty_p,
12461 YARVINSN_opt_succ,
12462 YARVINSN_opt_not,
12463 YARVINSN_opt_regexpmatch2,
12464 YARVINSN_invokebuiltin,
12465 YARVINSN_opt_invokebuiltin_delegate,
12466 YARVINSN_opt_invokebuiltin_delegate_leave,
12467 YARVINSN_getlocal_WC_0,
12468 YARVINSN_getlocal_WC_1,
12469 YARVINSN_setlocal_WC_0,
12470 YARVINSN_setlocal_WC_1,
12471 YARVINSN_putobject_INT2FIX_0_,
12472 YARVINSN_putobject_INT2FIX_1_,
12473 YARVINSN_trace_nop,
12474 YARVINSN_trace_getlocal,
12475 YARVINSN_trace_setlocal,
12476 YARVINSN_trace_getblockparam,
12477 YARVINSN_trace_setblockparam,
12478 YARVINSN_trace_getblockparamproxy,
12479 YARVINSN_trace_getspecial,
12480 YARVINSN_trace_setspecial,
12481 YARVINSN_trace_getinstancevariable,
12482 YARVINSN_trace_setinstancevariable,
12483 YARVINSN_trace_getclassvariable,
12484 YARVINSN_trace_setclassvariable,
12485 YARVINSN_trace_getconstant,
12486 YARVINSN_trace_setconstant,
12487 YARVINSN_trace_getglobal,
12488 YARVINSN_trace_setglobal,
12489 YARVINSN_trace_putnil,
12490 YARVINSN_trace_putself,
12491 YARVINSN_trace_putobject,
12492 YARVINSN_trace_putspecialobject,
12493 YARVINSN_trace_putstring,
12494 YARVINSN_trace_concatstrings,
12495 YARVINSN_trace_anytostring,
12496 YARVINSN_trace_toregexp,
12497 YARVINSN_trace_intern,
12498 YARVINSN_trace_newarray,
12499 YARVINSN_trace_newarraykwsplat,
12500 YARVINSN_trace_duparray,
12501 YARVINSN_trace_duphash,
12502 YARVINSN_trace_expandarray,
12503 YARVINSN_trace_concatarray,
12504 YARVINSN_trace_splatarray,
12505 YARVINSN_trace_newhash,
12506 YARVINSN_trace_newrange,
12507 YARVINSN_trace_pop,
12508 YARVINSN_trace_dup,
12509 YARVINSN_trace_dupn,
12510 YARVINSN_trace_swap,
12511 YARVINSN_trace_topn,
12512 YARVINSN_trace_setn,
12513 YARVINSN_trace_adjuststack,
12514 YARVINSN_trace_defined,
12515 YARVINSN_trace_checkmatch,
12516 YARVINSN_trace_checkkeyword,
12517 YARVINSN_trace_checktype,
12518 YARVINSN_trace_defineclass,
12519 YARVINSN_trace_definemethod,
12520 YARVINSN_trace_definesmethod,
12521 YARVINSN_trace_send,
12522 YARVINSN_trace_opt_send_without_block,
12523 YARVINSN_trace_objtostring,
12524 YARVINSN_trace_opt_str_freeze,
12525 YARVINSN_trace_opt_nil_p,
12526 YARVINSN_trace_opt_str_uminus,
12527 YARVINSN_trace_opt_newarray_max,
12528 YARVINSN_trace_opt_newarray_min,
12529 YARVINSN_trace_invokesuper,
12530 YARVINSN_trace_invokeblock,
12531 YARVINSN_trace_leave,
12532 YARVINSN_trace_throw,
12533 YARVINSN_trace_jump,
12534 YARVINSN_trace_branchif,
12535 YARVINSN_trace_branchunless,
12536 YARVINSN_trace_branchnil,
12537 YARVINSN_trace_opt_getinlinecache,
12538 YARVINSN_trace_opt_setinlinecache,
12539 YARVINSN_trace_once,
12540 YARVINSN_trace_opt_case_dispatch,
12541 YARVINSN_trace_opt_plus,
12542 YARVINSN_trace_opt_minus,
12543 YARVINSN_trace_opt_mult,
12544 YARVINSN_trace_opt_div,
12545 YARVINSN_trace_opt_mod,
12546 YARVINSN_trace_opt_eq,
12547 YARVINSN_trace_opt_neq,
12548 YARVINSN_trace_opt_lt,
12549 YARVINSN_trace_opt_le,
12550 YARVINSN_trace_opt_gt,
12551 YARVINSN_trace_opt_ge,
12552 YARVINSN_trace_opt_ltlt,
12553 YARVINSN_trace_opt_and,
12554 YARVINSN_trace_opt_or,
12555 YARVINSN_trace_opt_aref,
12556 YARVINSN_trace_opt_aset,
12557 YARVINSN_trace_opt_aset_with,
12558 YARVINSN_trace_opt_aref_with,
12559 YARVINSN_trace_opt_length,
12560 YARVINSN_trace_opt_size,
12561 YARVINSN_trace_opt_empty_p,
12562 YARVINSN_trace_opt_succ,
12563 YARVINSN_trace_opt_not,
12564 YARVINSN_trace_opt_regexpmatch2,
12565 YARVINSN_trace_invokebuiltin,
12566 YARVINSN_trace_opt_invokebuiltin_delegate,
12567 YARVINSN_trace_opt_invokebuiltin_delegate_leave,
12568 YARVINSN_trace_getlocal_WC_0,
12569 YARVINSN_trace_getlocal_WC_1,
12570 YARVINSN_trace_setlocal_WC_0,
12571 YARVINSN_trace_setlocal_WC_1,
12572 YARVINSN_trace_putobject_INT2FIX_0_,
12573 YARVINSN_trace_putobject_INT2FIX_1_,
12574 VM_INSTRUCTION_SIZE
12575};
12576extern rb_method_definition_t *rb_method_definition_create(rb_method_type_t type, ID mid);
12577extern void rb_method_definition_set(const rb_method_entry_t *me, rb_method_definition_t *def, void *opts);
12578extern int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2);
12579extern VALUE rb_make_no_method_exception(VALUE exc, VALUE format, VALUE obj,
12580 int argc, const VALUE *argv, int priv);
12581static rb_control_frame_t *vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
12582static VALUE
12583ruby_vm_special_exception_copy(VALUE exc)
12584{
12585 VALUE e = rb_obj_alloc(rb_class_real(RBASIC_CLASS(exc)));
12586 rb_obj_copy_ivar(e, exc);
12587 return e;
12588}
12589__attribute__((__noreturn__)) static void ec_stack_overflow(rb_execution_context_t *ec, int);
12590static void
12591ec_stack_overflow(rb_execution_context_t *ec, int setup)
12592{
12593 VALUE mesg = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_sysstack];
12594 ec->raised_flag = RAISED_STACKOVERFLOW;
12595 if (setup) {
12596 VALUE at = rb_ec_backtrace_object(ec);
12597 mesg = ruby_vm_special_exception_copy(mesg);
12598 rb_ivar_set(mesg, idBt, at);
12599 rb_ivar_set(mesg, idBt_locations, at);
12600 }
12601 ec->errinfo = mesg;
12602 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12603}
12604__attribute__((__noreturn__)) static void vm_stackoverflow(void);
12605__attribute__((__noinline__)) static __attribute__((__cold__)) void vm_stackoverflow(void);
12606static void
12607vm_stackoverflow(void)
12608{
12609 ec_stack_overflow(rb_current_execution_context(1), 1);
12610}
12611__attribute__((__noreturn__)) static void rb_ec_stack_overflow(rb_execution_context_t *ec, int crit);
12612static void
12613rb_ec_stack_overflow(rb_execution_context_t *ec, int crit)
12614{
12615 if (rb_during_gc()) {
12616 rb_bug("system stack overflow during GC. Faulty native extension?");
12617 }
12618 if (crit) {
12619 ec->raised_flag = RAISED_STACKOVERFLOW;
12620 ec->errinfo = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_stackfatal];
12621 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12622 }
12623 ec_stack_overflow(ec, 1);
12624}
12625__extension__ _Static_assert((-2) == -2, "VM_ENV_DATA_INDEX_ME_CREF" ": " "VM_ENV_DATA_INDEX_ME_CREF == -2");
12626__extension__ _Static_assert((-1) == -1, "VM_ENV_DATA_INDEX_SPECVAL" ": " "VM_ENV_DATA_INDEX_SPECVAL == -1");
12627__extension__ _Static_assert(( 0) == -0, "VM_ENV_DATA_INDEX_FLAGS" ": " "VM_ENV_DATA_INDEX_FLAGS == -0");
12628static void
12629vm_push_frame(rb_execution_context_t *ec,
12630 const rb_iseq_t *iseq,
12631 VALUE type,
12632 VALUE self,
12633 VALUE specval,
12634 VALUE cref_or_me,
12635 const VALUE *pc,
12636 VALUE *sp,
12637 int local_size,
12638 int stack_max)
12639{
12640 rb_control_frame_t *const cfp = ((ec->cfp)-1);
12641 ;
12642 ((void)0);
12643 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);
12644 ;
12645 for (int i=0; i < local_size; i++) {
12646 *sp++ = ((VALUE)RUBY_Qnil);
12647 }
12648 *sp++ = cref_or_me;
12649 *sp++ = specval ;
12650 *sp++ = type;
12651 *cfp = (const struct rb_control_frame_struct) {
12652 .pc = pc,
12653 .sp = sp,
12654 .iseq = iseq,
12655 .self = self,
12656 .ep = sp - 1,
12657 .block_code = ((void *)0),
12658 .__bp__ = sp,
12659 .jit_return = ((void *)0)
12660 };
12661 ec->cfp = cfp;
12662 if (0 == 2) {
12663 rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12664 }
12665 ;
12666}
12667static inline int
12668vm_pop_frame(rb_execution_context_t *ec, rb_control_frame_t *cfp, const VALUE *ep)
12669{
12670 VALUE flags = ep[( 0)];
12671 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12672 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12673 rb_vm_check_ints(ec);
12674 ec->cfp = ((cfp)+1);
12675 return flags & VM_FRAME_FLAG_FINISH;
12676}
12677static void
12678rb_vm_pop_frame(rb_execution_context_t *ec)
12679{
12680 vm_pop_frame(ec, ec->cfp, ec->cfp->ep);
12681}
12682static inline VALUE
12683rb_arity_error_new(int argc, int min, int max)
12684{
12685 VALUE err_mess = 0;
12686 if (min == max) {
12687 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d)", argc, min);
12688 }
12689 else if (max == (-1)) {
12690 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d+)", argc, min);
12691 }
12692 else {
12693 err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d..%d)", argc, min, max);
12694 }
12695 return rb_exc_new_str(rb_eArgError, err_mess);
12696}
12697static void
12698rb_error_arity(int argc, int min, int max)
12699{
12700 rb_exc_raise(rb_arity_error_new(argc, min, max));
12701}
12702__attribute__((__noinline__)) static void vm_env_write_slowpath(const VALUE *ep, int index, VALUE v);
12703static void
12704vm_env_write_slowpath(const VALUE *ep, int index, VALUE v)
12705{
12706 rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep));
12707 VM_FORCE_WRITE(&ep[index], v);
12708 VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED);
12709 ((void)0);
12710}
12711static inline void
12712vm_env_write(const VALUE *ep, int index, VALUE v)
12713{
12714 VALUE flags = ep[( 0)];
12715 if ((__builtin_expect(!!((flags & VM_ENV_FLAG_WB_REQUIRED) == 0), 1))) {
12716 VM_STACK_ENV_WRITE(ep, index, v);
12717 }
12718 else {
12719 vm_env_write_slowpath(ep, index, v);
12720 }
12721}
12722static VALUE
12723rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler)
12724{
12725 if (block_handler == 0) {
12726 return ((VALUE)RUBY_Qnil);
12727 }
12728 else {
12729 switch (vm_block_handler_type(block_handler)) {
12730 case block_handler_type_iseq:
12731 case block_handler_type_ifunc:
12732 return rb_vm_make_proc(ec, VM_BH_TO_CAPT_BLOCK(block_handler), rb_cProc);
12733 case block_handler_type_symbol:
12734 return rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
12735 case block_handler_type_proc:
12736 return VM_BH_TO_PROC(block_handler);
12737 default:
12738 __builtin_unreachable();
12739 }
12740 }
12741}
12742static inline struct vm_svar *
12743lep_svar(const rb_execution_context_t *ec, const VALUE *lep)
12744{
12745 VALUE svar;
12746 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
12747 svar = lep[(-2)];
12748 }
12749 else {
12750 svar = ec->root_svar;
12751 }
12752 ((void)0);
12753 return (struct vm_svar *)svar;
12754}
12755static inline void
12756lep_svar_write(const rb_execution_context_t *ec, const VALUE *lep, const struct vm_svar *svar)
12757{
12758 ((void)0);
12759 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
12760 vm_env_write(lep, (-2), (VALUE)svar);
12761 }
12762 else {
12763 rb_obj_write((VALUE)(rb_ec_thread_ptr(ec)->self), __extension__({
12764;
12765; __typeof__((VALUE *)(&ec->root_svar)) unaligned_member_access_result = ((VALUE *)(&ec->root_svar));
12766; unaligned_member_access_result; }), (VALUE)(svar), "../ruby-3.1.3/vm_insnhelper.c", 544);
12767 }
12768}
12769static VALUE
12770lep_svar_get(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key)
12771{
12772 const struct vm_svar *svar = lep_svar(ec, lep);
12773 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) return ((VALUE)RUBY_Qnil);
12774 switch (key) {
12775 case VM_SVAR_LASTLINE:
12776 return svar->lastline;
12777 case VM_SVAR_BACKREF:
12778 return svar->backref;
12779 default: {
12780 const VALUE ary = svar->others;
12781 if (RB_NIL_P(ary)) {
12782 return ((VALUE)RUBY_Qnil);
12783 }
12784 else {
12785 return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START);
12786 }
12787 }
12788 }
12789}
12790static struct vm_svar *
12791svar_new(VALUE obj)
12792{
12793 return (struct vm_svar *)rb_imemo_new(imemo_svar, ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), obj);
12794}
12795static void
12796lep_svar_set(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, VALUE val)
12797{
12798 struct vm_svar *svar = lep_svar(ec, lep);
12799 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) {
12800 lep_svar_write(ec, lep, svar = svar_new((VALUE)svar));
12801 }
12802 switch (key) {
12803 case VM_SVAR_LASTLINE:
12804 rb_obj_write((VALUE)(svar), __extension__({
12805;
12806; __typeof__((VALUE *)(&svar->lastline)) unaligned_member_access_result = ((VALUE *)(&svar->lastline));
12807; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 590);
12808 return;
12809 case VM_SVAR_BACKREF:
12810 rb_obj_write((VALUE)(svar), __extension__({
12811;
12812; __typeof__((VALUE *)(&svar->backref)) unaligned_member_access_result = ((VALUE *)(&svar->backref));
12813; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 593);
12814 return;
12815 default: {
12816 VALUE ary = svar->others;
12817 if (RB_NIL_P(ary)) {
12818 rb_obj_write((VALUE)(svar), __extension__({
12819 ;
12820 ; __typeof__((VALUE *)(&svar->others)) unaligned_member_access_result = ((VALUE *)(&svar->others));
12821 ; unaligned_member_access_result; }), (VALUE)(ary = rb_ary_new()), "../ruby-3.1.3/vm_insnhelper.c", 599);
12822 }
12823 rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val);
12824 }
12825 }
12826}
12827static inline VALUE
12828vm_getspecial(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, rb_num_t type)
12829{
12830 VALUE val;
12831 if (type == 0) {
12832 val = lep_svar_get(ec, lep, key);
12833 }
12834 else {
12835 VALUE backref = lep_svar_get(ec, lep, VM_SVAR_BACKREF);
12836 if (type & 0x01) {
12837 switch (type >> 1) {
12838 case '&':
12839 val = rb_reg_last_match(backref);
12840 break;
12841 case '`':
12842 val = rb_reg_match_pre(backref);
12843 break;
12844 case '\'':
12845 val = rb_reg_match_post(backref);
12846 break;
12847 case '+':
12848 val = rb_reg_match_last(backref);
12849 break;
12850 default:
12851 rb_bug("unexpected back-ref");
12852 }
12853 }
12854 else {
12855 val = rb_reg_nth_match((int)(type >> 1), backref);
12856 }
12857 }
12858 return val;
12859}
12860__attribute__((__pure__)) static rb_callable_method_entry_t *check_method_entry(VALUE obj, int can_be_svar);
12861static rb_callable_method_entry_t *
12862check_method_entry(VALUE obj, int can_be_svar)
12863{
12864 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
12865 switch (imemo_type(obj)) {
12866 case imemo_ment:
12867 return (rb_callable_method_entry_t *)obj;
12868 case imemo_cref:
12869 return ((void *)0);
12870 case imemo_svar:
12871 if (can_be_svar) {
12872 return check_method_entry(((struct vm_svar *)obj)->cref_or_me, 0);
12873 }
12874 default:
12875 return ((void *)0);
12876 }
12877}
12878static const rb_callable_method_entry_t *
12879rb_vm_frame_method_entry(const rb_control_frame_t *cfp)
12880{
12881 const VALUE *ep = cfp->ep;
12882 rb_callable_method_entry_t *me;
12883 while (!VM_ENV_LOCAL_P(ep)) {
12884 if ((me = check_method_entry(ep[(-2)], 0)) != ((void *)0)) return me;
12885 ep = VM_ENV_PREV_EP(ep);
12886 }
12887 return check_method_entry(ep[(-2)], 1);
12888}
12889static const rb_iseq_t *
12890method_entry_iseqptr(const rb_callable_method_entry_t *me)
12891{
12892 switch (me->def->type) {
12893 case VM_METHOD_TYPE_ISEQ:
12894 return me->def->body.iseq.iseqptr;
12895 default:
12896 return ((void *)0);
12897 }
12898}
12899static rb_cref_t *
12900method_entry_cref(const rb_callable_method_entry_t *me)
12901{
12902 switch (me->def->type) {
12903 case VM_METHOD_TYPE_ISEQ:
12904 return me->def->body.iseq.cref;
12905 default:
12906 return ((void *)0);
12907 }
12908}
12909__attribute__((__pure__)) static rb_cref_t *check_cref(VALUE, int);
12910static rb_cref_t *
12911check_cref(VALUE obj, int can_be_svar)
12912{
12913 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
12914 switch (imemo_type(obj)) {
12915 case imemo_ment:
12916 return method_entry_cref((rb_callable_method_entry_t *)obj);
12917 case imemo_cref:
12918 return (rb_cref_t *)obj;
12919 case imemo_svar:
12920 if (can_be_svar) {
12921 return check_cref(((struct vm_svar *)obj)->cref_or_me, 0);
12922 }
12923 default:
12924 return ((void *)0);
12925 }
12926}
12927static inline rb_cref_t *
12928vm_env_cref(const VALUE *ep)
12929{
12930 rb_cref_t *cref;
12931 while (!VM_ENV_LOCAL_P(ep)) {
12932 if ((cref = check_cref(ep[(-2)], 0)) != ((void *)0)) return cref;
12933 ep = VM_ENV_PREV_EP(ep);
12934 }
12935 return check_cref(ep[(-2)], 1);
12936}
12937static int
12938is_cref(const VALUE v, int can_be_svar)
12939{
12940 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
12941 switch (imemo_type(v)) {
12942 case imemo_cref:
12943 return 1;
12944 case imemo_svar:
12945 if (can_be_svar) return is_cref(((struct vm_svar *)v)->cref_or_me, 0);
12946 default:
12947 break;
12948 }
12949 }
12950 return 0;
12951}
12952static int
12953vm_env_cref_by_cref(const VALUE *ep)
12954{
12955 while (!VM_ENV_LOCAL_P(ep)) {
12956 if (is_cref(ep[(-2)], 0)) return 1;
12957 ep = VM_ENV_PREV_EP(ep);
12958 }
12959 return is_cref(ep[(-2)], 1);
12960}
12961static rb_cref_t *
12962cref_replace_with_duplicated_cref_each_frame(const VALUE *vptr, int can_be_svar, VALUE parent)
12963{
12964 const VALUE v = *vptr;
12965 rb_cref_t *cref, *new_cref;
12966 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
12967 switch (imemo_type(v)) {
12968 case imemo_cref:
12969 cref = (rb_cref_t *)v;
12970 new_cref = vm_cref_dup(cref);
12971 if (parent) {
12972 rb_obj_write((VALUE)(parent), __extension__({
12973 ;
12974 ; __typeof__((VALUE *)(vptr)) unaligned_member_access_result = ((VALUE *)(vptr));
12975 ; unaligned_member_access_result; }), (VALUE)(new_cref), "../ruby-3.1.3/vm_insnhelper.c", 785);
12976 }
12977 else {
12978 VM_FORCE_WRITE(vptr, (VALUE)new_cref);
12979 }
12980 return (rb_cref_t *)new_cref;
12981 case imemo_svar:
12982 if (can_be_svar) {
12983 return cref_replace_with_duplicated_cref_each_frame(&((struct vm_svar *)v)->cref_or_me, 0, v);
12984 }
12985 case imemo_ment:
12986 rb_bug("cref_replace_with_duplicated_cref_each_frame: unreachable");
12987 default:
12988 break;
12989 }
12990 }
12991 return 0;
12992}
12993static rb_cref_t *
12994vm_cref_replace_with_duplicated_cref(const VALUE *ep)
12995{
12996 if (vm_env_cref_by_cref(ep)) {
12997 rb_cref_t *cref;
12998 VALUE envval;
12999 while (!VM_ENV_LOCAL_P(ep)) {
13000 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13001 if ((cref = cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 0, envval)) != ((void *)0)) {
13002 return cref;
13003 }
13004 ep = VM_ENV_PREV_EP(ep);
13005 }
13006 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13007 return cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 1, envval);
13008 }
13009 else {
13010 rb_bug("vm_cref_dup: unreachable");
13011 }
13012}
13013static rb_cref_t *
13014vm_get_cref(const VALUE *ep)
13015{
13016 rb_cref_t *cref = vm_env_cref(ep);
13017 if (cref != ((void *)0)) {
13018 return cref;
13019 }
13020 else {
13021 rb_bug("vm_get_cref: unreachable");
13022 }
13023}static inline
13024rb_cref_t *
13025rb_vm_get_cref(const VALUE *ep)
13026{
13027 return vm_get_cref(ep);
13028}
13029static rb_cref_t *
13030vm_ec_cref(const rb_execution_context_t *ec)
13031{
13032 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
13033 if (cfp == ((void *)0)) {
13034 return ((void *)0);
13035 }
13036 return vm_get_cref(cfp->ep);
13037}
13038static const rb_cref_t *
13039vm_get_const_key_cref(const VALUE *ep)
13040{
13041 const rb_cref_t *cref = vm_get_cref(ep);
13042 const rb_cref_t *key_cref = cref;
13043 while (cref) {
13044 if (RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13045 RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_USER6))) {
13046 return key_cref;
13047 }
13048 cref = CREF_NEXT(cref);
13049 }
13050 return ((void *)0);
13051}static inline
13052void
13053rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr)
13054{
13055 rb_cref_t *new_cref;
13056 while (cref) {
13057 if (CREF_CLASS(cref) == old_klass) {
13058 new_cref = vm_cref_new_use_prev(new_klass, METHOD_VISI_UNDEF, 0, cref, 0);
13059 *new_cref_ptr = new_cref;
13060 return;
13061 }
13062 new_cref = vm_cref_new_use_prev(CREF_CLASS(cref), METHOD_VISI_UNDEF, 0, cref, 0);
13063 cref = CREF_NEXT(cref);
13064 *new_cref_ptr = new_cref;
13065 new_cref_ptr = &new_cref->next;
13066 }
13067 *new_cref_ptr = ((void *)0);
13068}
13069static rb_cref_t *
13070vm_cref_push(const rb_execution_context_t *ec, VALUE klass, const VALUE *ep, int pushed_by_eval, int singleton)
13071{
13072 rb_cref_t *prev_cref = ((void *)0);
13073 if (ep) {
13074 prev_cref = vm_env_cref(ep);
13075 }
13076 else {
13077 rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(ec, ec->cfp);
13078 if (cfp) {
13079 prev_cref = vm_env_cref(cfp->ep);
13080 }
13081 }
13082 return vm_cref_new(klass, METHOD_VISI_PUBLIC, 0, prev_cref, pushed_by_eval, singleton);
13083}
13084static inline VALUE
13085vm_get_cbase(const VALUE *ep)
13086{
13087 const rb_cref_t *cref = vm_get_cref(ep);
13088 return CREF_CLASS_FOR_DEFINITION(cref);
13089}
13090static inline VALUE
13091vm_get_const_base(const VALUE *ep)
13092{
13093 const rb_cref_t *cref = vm_get_cref(ep);
13094 while (cref) {
13095 if (!CREF_PUSHED_BY_EVAL(cref)) {
13096 return CREF_CLASS_FOR_DEFINITION(cref);
13097 }
13098 cref = CREF_NEXT(cref);
13099 }
13100 return ((VALUE)RUBY_Qundef);
13101}
13102static inline void
13103vm_check_if_namespace(VALUE klass)
13104{
13105 if (!RB_TYPE_P(klass, RUBY_T_CLASS) && !RB_TYPE_P(klass, RUBY_T_MODULE)) {
13106 rb_raise(rb_eTypeError, "%+""l""i" "\v"" is not a class/module", klass);
13107 }
13108}
13109static inline void
13110vm_ensure_not_refinement_module(VALUE self)
13111{
13112 if (RB_TYPE_P(self, RUBY_T_MODULE) && RB_FL_TEST(self, RMODULE_IS_REFINEMENT)) {
13113 rb_warn("not defined at the refinement, but at the outer class/module");
13114 }
13115}
13116static inline VALUE
13117vm_get_iclass(const rb_control_frame_t *cfp, VALUE klass)
13118{
13119 return klass;
13120}
13121static inline VALUE
13122vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, _Bool allow_nil, int is_defined)
13123{
13124 void rb_const_warn_if_deprecated(const rb_const_entry_t *ce, VALUE klass, ID id);
13125 VALUE val;
13126 if (RB_NIL_P(orig_klass) && allow_nil) {
13127 const rb_cref_t *root_cref = vm_get_cref(ec->cfp->ep);
13128 const rb_cref_t *cref;
13129 VALUE klass = ((VALUE)RUBY_Qnil);
13130 while (root_cref && CREF_PUSHED_BY_EVAL(root_cref)) {
13131 root_cref = CREF_NEXT(root_cref);
13132 }
13133 cref = root_cref;
13134 while (cref && CREF_NEXT(cref)) {
13135 if (CREF_PUSHED_BY_EVAL(cref)) {
13136 klass = ((VALUE)RUBY_Qnil);
13137 }
13138 else {
13139 klass = CREF_CLASS(cref);
13140 }
13141 cref = CREF_NEXT(cref);
13142 if (!RB_NIL_P(klass)) {
13143 VALUE av, am = 0;
13144 rb_const_entry_t *ce;
13145 search_continue:
13146 if ((ce = rb_const_lookup(klass, id))) {
13147 rb_const_warn_if_deprecated(ce, klass, id);
13148 val = ce->value;
13149 if (val == ((VALUE)RUBY_Qundef)) {
13150 if (am == klass) break;
13151 am = klass;
13152 if (is_defined) return 1;
13153 if (rb_autoloading_value(klass, id, &av, ((void *)0))) return av;
13154 rb_autoload_load(klass, id);
13155 goto search_continue;
13156 }
13157 else {
13158 if (is_defined) {
13159 return 1;
13160 }
13161 else {
13162 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13163 if (!rb_ractor_shareable_p(val)) {
13164 rb_raise(rb_eRactorIsolationError,
13165 "can not access non-shareable objects in constant %""l""i" "\v""::%s by non-main ractor.", rb_class_path(klass), rb_id2name(id));
13166 }
13167 }
13168 return val;
13169 }
13170 }
13171 }
13172 }
13173 }
13174 if (root_cref && !RB_NIL_P(CREF_CLASS(root_cref))) {
13175 klass = vm_get_iclass(ec->cfp, CREF_CLASS(root_cref));
13176 }
13177 else {
13178 klass = rb_class_of(ec->cfp->self);
13179 }
13180 if (is_defined) {
13181 return rb_const_defined(klass, id);
13182 }
13183 else {
13184 return rb_const_get(klass, id);
13185 }
13186 }
13187 else {
13188 vm_check_if_namespace(orig_klass);
13189 if (is_defined) {
13190 return rb_public_const_defined_from(orig_klass, id);
13191 }
13192 else {
13193 return rb_public_const_get_from(orig_klass, id);
13194 }
13195 }
13196}
13197static inline VALUE
13198vm_get_cvar_base(const rb_cref_t *cref, const rb_control_frame_t *cfp, int top_level_raise)
13199{
13200 VALUE klass;
13201 if (!cref) {
13202 rb_bug("vm_get_cvar_base: no cref");
13203 }
13204 while (CREF_NEXT(cref) &&
13205 (RB_NIL_P(CREF_CLASS(cref)) || RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13206 CREF_PUSHED_BY_EVAL(cref) || CREF_SINGLETON(cref))) {
13207 cref = CREF_NEXT(cref);
13208 }
13209 if (top_level_raise && !CREF_NEXT(cref)) {
13210 rb_raise(rb_eRuntimeError, "class variable access from toplevel");
13211 }
13212 klass = vm_get_iclass(cfp, CREF_CLASS(cref));
13213 if (RB_NIL_P(klass)) {
13214 rb_raise(rb_eTypeError, "no class variables available");
13215 }
13216 return klass;
13217}
13218static VALUE
13219vm_search_const_defined_class(const VALUE cbase, ID id)
13220{
13221 if (rb_const_defined_at(cbase, id)) return cbase;
13222 if (cbase == rb_cObject) {
13223 VALUE tmp = RCLASS_SUPER(cbase);
13224 while (tmp) {
13225 if (rb_const_defined_at(tmp, id)) return tmp;
13226 tmp = RCLASS_SUPER(tmp);
13227 }
13228 }
13229 return 0;
13230}
13231static _Bool
13232iv_index_tbl_lookup(struct st_table *iv_index_tbl, ID id, struct rb_iv_index_tbl_entry **ent)
13233{
13234 int found;
13235 st_data_t ent_data;
13236 if (iv_index_tbl == ((void *)0)) return 0;
13237 { unsigned int _lev; rb_vm_lock_enter(&_lev, "../ruby-3.1.3/vm_insnhelper.c", 1090);;
13238 {
13239 found = rb_st_lookup(iv_index_tbl, (st_data_t)id, &ent_data);
13240 }
13241 rb_vm_lock_leave(&_lev, "../ruby-3.1.3/vm_insnhelper.c", 1094); };
13242 if (found) *ent = (struct rb_iv_index_tbl_entry *)ent_data;
13243 return found ? 1 : 0;
13244}
13245__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);
13246static inline void
13247fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, struct rb_iv_index_tbl_entry *ent)
13248{
13249 if (!is_attr) {
13250 ic->entry = ent;
13251 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.1.3/vm_insnhelper.c", 1108));
13252 }
13253 else {
13254 vm_cc_attr_index_set(cc, (int)ent->index + 1);
13255 }
13256}
13257__attribute__ ((__always_inline__)) static VALUE vm_getivar(VALUE, ID, const rb_iseq_t *, IVC, const struct rb_callcache *, int);
13258static inline VALUE
13259vm_getivar(VALUE obj, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13260{
13261 VALUE val = ((VALUE)RUBY_Qundef);
13262 if (RB_SPECIAL_CONST_P(obj)) {
13263 }
13264 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))) {
13265 uint32_t index = !is_attr ? ic->entry->index : (vm_cc_attr_index(cc) - 1);
13266 ((void)0);
13267 if ((__builtin_expect(!!(RB_BUILTIN_TYPE(obj) == RUBY_T_OBJECT), 1)) &&
13268 (__builtin_expect(!!(index < ROBJECT_NUMIV(obj)), 1))) {
13269 val = ROBJECT_IVPTR(obj)[index];
13270 ((void)0);
13271 }
13272 else if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
13273 val = rb_ivar_generic_lookup_with_index(obj, id, index);
13274 }
13275 goto ret;
13276 }
13277 else {
13278 struct rb_iv_index_tbl_entry *ent;
13279 if (RB_BUILTIN_TYPE(obj) == RUBY_T_OBJECT) {
13280 struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL_inline(obj);
13281 if (iv_index_tbl && iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
13282 fill_ivar_cache(iseq, ic, cc, is_attr, ent);
13283 if (ent->index < ROBJECT_NUMIV(obj)) {
13284 val = ROBJECT_IVPTR(obj)[ent->index];
13285 ((void)0);
13286 }
13287 }
13288 }
13289 else if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
13290 struct st_table *iv_index_tbl = ((((struct RClass *)(rb_obj_class(obj)))->ptr)->iv_index_tbl);
13291 if (iv_index_tbl && iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
13292 fill_ivar_cache(iseq, ic, cc, is_attr, ent);
13293 val = rb_ivar_generic_lookup_with_index(obj, id, ent->index);
13294 }
13295 }
13296 else {
13297 goto general_path;
13298 }
13299 ret:
13300 if ((__builtin_expect(!!(val != ((VALUE)RUBY_Qundef)), 1))) {
13301 return val;
13302 }
13303 else {
13304 return ((VALUE)RUBY_Qnil);
13305 }
13306 }
13307 general_path:
13308 ((void)0);
13309 if (is_attr) {
13310 return rb_attr_get(obj, id);
13311 }
13312 else {
13313 return rb_ivar_get(obj, id);
13314 }
13315}
13316__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);
13317__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic);
13318__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc);
13319static VALUE
13320vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13321{
13322 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
13323 if (RB_TYPE_P(obj, RUBY_T_OBJECT)) {
13324 struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL_inline(obj);
13325 struct rb_iv_index_tbl_entry *ent;
13326 if (iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
13327 if (!is_attr) {
13328 ic->entry = ent;
13329 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.1.3/vm_insnhelper.c", 1212));
13330 }
13331 else if (ent->index >= 0x7fffffff) {
13332 rb_raise(rb_eArgError, "too many instance variables");
13333 }
13334 else {
13335 vm_cc_attr_index_set(cc, (int)(ent->index + 1));
13336 }
13337 uint32_t index = ent->index;
13338 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
13339 rb_init_iv_list(obj);
13340 }
13341 VALUE *ptr = ROBJECT_IVPTR(obj);
13342 rb_obj_write((VALUE)(obj), __extension__({
13343 ;
13344 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13345 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 1227);
13346 ((void)0);
13347 return val;
13348 }
13349 }
13350 ((void)0);
13351 return rb_ivar_set(obj, id, val);
13352}
13353static VALUE
13354vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic)
13355{
13356 return vm_setivar_slowpath(obj, id, val, iseq, ic, ((void *)0), 0);
13357}
13358static VALUE
13359vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc)
13360{
13361 return vm_setivar_slowpath(obj, id, val, ((void *)0), ((void *)0), cc, 1);
13362}
13363static inline VALUE
13364vm_setivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13365{
13366 if ((__builtin_expect(!!(RB_TYPE_P(obj, RUBY_T_OBJECT)), 1)) &&
13367 (__builtin_expect(!!(!RB_OBJ_FROZEN_RAW(obj)), 1))) {
13368 ((void)0);
13369 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))) {
13370 uint32_t index = !is_attr ? ic->entry->index : vm_cc_attr_index(cc)-1;
13371 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
13372 rb_init_iv_list(obj);
13373 }
13374 VALUE *ptr = ROBJECT_IVPTR(obj);
13375 rb_obj_write((VALUE)(obj), __extension__({
13376 ;
13377 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13378 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 1268);
13379 ((void)0);
13380 return val;
13381 }
13382 }
13383 else {
13384 ((void)0);
13385 }
13386 if (is_attr) {
13387 return vm_setivar_slowpath_attr(obj, id, val, cc);
13388 }
13389 else {
13390 return vm_setivar_slowpath_ivar(obj, id, val, iseq, ic);
13391 }
13392}
13393static VALUE
13394update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic)
13395{
13396 VALUE defined_class = 0;
13397 VALUE cvar_value = rb_cvar_find(klass, id, &defined_class);
13398 if (RB_TYPE_P(defined_class, RUBY_T_ICLASS)) {
13399 defined_class = ((struct RBasic *)(defined_class))->klass;
13400 }
13401 struct rb_id_table *rb_cvc_tbl = ((((struct RClass *)(defined_class))->ptr)->cvc_tbl);
13402 if (!rb_cvc_tbl) {
13403 rb_bug("the cvc table should be set");
13404 }
13405 VALUE ent_data;
13406 if (!rb_id_table_lookup(rb_cvc_tbl, id, &ent_data)) {
13407 rb_bug("should have cvar cache entry");
13408 }
13409 struct rb_cvar_class_tbl_entry *ent = (void *)ent_data;
13410 ent->global_cvar_state = (ruby_vm_global_cvar_state);
13411 ic->entry = ent;
13412 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.1.3/vm_insnhelper.c", 1309));
13413 return cvar_value;
13414}
13415static inline VALUE
13416vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, ICVARC ic)
13417{
13418 const rb_cref_t *cref;
13419 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
13420 VALUE v = ((VALUE)RUBY_Qundef);
13421 ((void)0);
13422 if (rb_st_lookup(((((struct RClass *)(ic->entry->class_value))->ptr)->iv_tbl), (st_data_t)id, &v) &&
13423 (__builtin_expect(!!(rb_ractor_main_p()), 1))) {
13424 return v;
13425 }
13426 }
13427 cref = vm_get_cref(((((reg_cfp)->ep))));
13428 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13429 return update_classvariable_cache(iseq, klass, id, ic);
13430}static inline
13431VALUE
13432rb_vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, ICVARC ic)
13433{
13434 return vm_getclassvariable(iseq, cfp, id, ic);
13435}
13436static inline void
13437vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic)
13438{
13439 const rb_cref_t *cref;
13440 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
13441 ((void)0);
13442 rb_class_ivar_set(ic->entry->class_value, id, val);
13443 return;
13444 }
13445 cref = vm_get_cref(((((reg_cfp)->ep))));
13446 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13447 rb_cvar_set(klass, id, val);
13448 update_classvariable_cache(iseq, klass, id, ic);
13449}static inline
13450void
13451rb_vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, VALUE val, ICVARC ic)
13452{
13453 vm_setclassvariable(iseq, cfp, id, val, ic);
13454}
13455static inline VALUE
13456vm_getinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, IVC ic)
13457{
13458 return vm_getivar(obj, id, iseq, ic, ((void *)0), 0);
13459}
13460static inline void
13461vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13462{
13463 vm_setivar(obj, id, val, iseq, ic, 0, 0);
13464}static inline
13465void
13466rb_vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13467{
13468 vm_setinstancevariable(iseq, obj, id, val, ic);
13469}static inline
13470VALUE
13471rb_vm_set_ivar_idx(VALUE obj, uint32_t index, VALUE val)
13472{
13473 ((void)0);
13474 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
13475 ((void)0);
13476 if ((__builtin_expect(!!(index >= ROBJECT_NUMIV(obj)), 0))) {
13477 rb_init_iv_list(obj);
13478 }
13479 VALUE *ptr = ROBJECT_IVPTR(obj);
13480 rb_obj_write((VALUE)(obj), __extension__({
13481 ;
13482 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13483 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 1403);
13484 return val;
13485}
13486static VALUE
13487vm_throw_continue(const rb_execution_context_t *ec, VALUE err)
13488{
13489 if (RB_FIXNUM_P(err)) {
13490 ec->tag->state = RB_FIX2INT(err);
13491 }
13492 else if (RB_SYMBOL_P(err)) {
13493 ec->tag->state = RUBY_TAG_THROW;
13494 }
13495 else if (imemo_throw_data_p((VALUE)err)) {
13496 ec->tag->state = THROW_DATA_STATE((struct vm_throw_data *)err);
13497 }
13498 else {
13499 ec->tag->state = RUBY_TAG_RAISE;
13500 }
13501 return err;
13502}
13503static VALUE
13504vm_throw_start(const rb_execution_context_t *ec, rb_control_frame_t *const reg_cfp, enum ruby_tag_type state,
13505 const int flag, const VALUE throwobj)
13506{
13507 const rb_control_frame_t *escape_cfp = ((void *)0);
13508 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
13509 if (flag != 0) {
13510 }
13511 else if (state == RUBY_TAG_BREAK) {
13512 int is_orphan = 1;
13513 const VALUE *ep = ((((reg_cfp)->ep)));
13514 const rb_iseq_t *base_iseq = ((((reg_cfp)))->iseq);
13515 escape_cfp = reg_cfp;
13516 while (base_iseq->body->type != ISEQ_TYPE_BLOCK) {
13517 if (escape_cfp->iseq->body->type == ISEQ_TYPE_CLASS) {
13518 escape_cfp = ((escape_cfp)+1);
13519 ep = escape_cfp->ep;
13520 base_iseq = escape_cfp->iseq;
13521 }
13522 else {
13523 ep = VM_ENV_PREV_EP(ep);
13524 base_iseq = base_iseq->body->parent_iseq;
13525 escape_cfp = rb_vm_search_cf_from_ep(ec, escape_cfp, ep);
13526 ((void)0);
13527 }
13528 }
13529 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13530 is_orphan = 0;
13531 state = RUBY_TAG_RETURN;
13532 }
13533 else {
13534 ep = VM_ENV_PREV_EP(ep);
13535 while (escape_cfp < eocfp) {
13536 if (escape_cfp->ep == ep) {
13537 const rb_iseq_t *const iseq = escape_cfp->iseq;
13538 const VALUE epc = escape_cfp->pc - iseq->body->iseq_encoded;
13539 const struct iseq_catch_table *const ct = iseq->body->catch_table;
13540 unsigned int i;
13541 if (!ct) break;
13542 for (i=0; i < ct->size; i++) {
13543 const struct iseq_catch_table_entry *const entry =
13544 __extension__({
13545 ;
13546 ; __typeof__(&(ct)->entries[i]) unaligned_member_access_result = (&(ct)->entries[i]);
13547 ; unaligned_member_access_result; });
13548 if (entry->type == CATCH_TYPE_BREAK &&
13549 entry->iseq == base_iseq &&
13550 entry->start < epc && entry->end >= epc) {
13551 if (entry->cont == epc) {
13552 is_orphan = 0;
13553 }
13554 break;
13555 }
13556 }
13557 break;
13558 }
13559 escape_cfp = ((escape_cfp)+1);
13560 }
13561 }
13562 if (is_orphan) {
13563 rb_vm_localjump_error("break from proc-closure", throwobj, RUBY_TAG_BREAK);
13564 }
13565 }
13566 else if (state == RUBY_TAG_RETRY) {
13567 const VALUE *ep = VM_ENV_PREV_EP(((((reg_cfp)->ep))));
13568 escape_cfp = rb_vm_search_cf_from_ep(ec, reg_cfp, ep);
13569 }
13570 else if (state == RUBY_TAG_RETURN) {
13571 const VALUE *current_ep = ((((reg_cfp)->ep)));
13572 const VALUE *target_ep = ((void *)0), *target_lep, *ep = current_ep;
13573 int in_class_frame = 0;
13574 int toplevel = 1;
13575 escape_cfp = reg_cfp;
13576 while (!VM_ENV_LOCAL_P(ep)) {
13577 if (VM_ENV_FLAGS(ep, VM_FRAME_FLAG_LAMBDA) && target_ep == ((void *)0)) {
13578 target_ep = ep;
13579 }
13580 ep = VM_ENV_PREV_EP(ep);
13581 }
13582 target_lep = ep;
13583 while (escape_cfp < eocfp) {
13584 const VALUE *lep = VM_CF_LEP(escape_cfp);
13585 if (!target_lep) {
13586 target_lep = lep;
13587 }
13588 if (lep == target_lep &&
13589 VM_FRAME_RUBYFRAME_P(escape_cfp) &&
13590 escape_cfp->iseq->body->type == ISEQ_TYPE_CLASS) {
13591 in_class_frame = 1;
13592 target_lep = 0;
13593 }
13594 if (lep == target_lep) {
13595 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13596 toplevel = 0;
13597 if (in_class_frame) {
13598 goto valid_return;
13599 }
13600 else {
13601 const VALUE *tep = current_ep;
13602 while (target_lep != tep) {
13603 if (escape_cfp->ep == tep) {
13604 if (tep == target_ep) {
13605 goto valid_return;
13606 }
13607 else {
13608 goto unexpected_return;
13609 }
13610 }
13611 tep = VM_ENV_PREV_EP(tep);
13612 }
13613 }
13614 }
13615 else if (VM_FRAME_RUBYFRAME_P(escape_cfp)) {
13616 switch (escape_cfp->iseq->body->type) {
13617 case ISEQ_TYPE_TOP:
13618 case ISEQ_TYPE_MAIN:
13619 if (toplevel) {
13620 if (in_class_frame) goto unexpected_return;
13621 if (target_ep == ((void *)0)) {
13622 goto valid_return;
13623 }
13624 else {
13625 goto unexpected_return;
13626 }
13627 }
13628 break;
13629 case ISEQ_TYPE_EVAL:
13630 case ISEQ_TYPE_CLASS:
13631 toplevel = 0;
13632 break;
13633 default:
13634 break;
13635 }
13636 }
13637 }
13638 if (escape_cfp->ep == target_lep && escape_cfp->iseq->body->type == ISEQ_TYPE_METHOD) {
13639 if (target_ep == ((void *)0)) {
13640 goto valid_return;
13641 }
13642 else {
13643 goto unexpected_return;
13644 }
13645 }
13646 escape_cfp = ((escape_cfp)+1);
13647 }
13648 unexpected_return:;
13649 rb_vm_localjump_error("unexpected return", throwobj, RUBY_TAG_RETURN);
13650 valid_return:;
13651 }
13652 else {
13653 rb_bug("isns(throw): unsupported throw type");
13654 }
13655 ec->tag->state = state;
13656 return (VALUE)THROW_DATA_NEW(throwobj, escape_cfp, state);
13657}
13658static VALUE
13659vm_throw(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
13660 rb_num_t throw_state, VALUE throwobj)
13661{
13662 const int state = (int)(throw_state & VM_THROW_STATE_MASK);
13663 const int flag = (int)(throw_state & VM_THROW_NO_ESCAPE_FLAG);
13664 if (state != 0) {
13665 return vm_throw_start(ec, reg_cfp, state, flag, throwobj);
13666 }
13667 else {
13668 return vm_throw_continue(ec, throwobj);
13669 }
13670}
13671static inline void
13672vm_expandarray(VALUE *sp, VALUE ary, rb_num_t num, int flag)
13673{
13674 int is_splat = flag & 0x01;
13675 rb_num_t space_size = num + is_splat;
13676 VALUE *base = sp - 1;
13677 const VALUE *ptr;
13678 rb_num_t len;
13679 const VALUE obj = ary;
13680 if (!RB_TYPE_P(ary, RUBY_T_ARRAY) && RB_NIL_P(ary = rb_check_array_type(ary))) {
13681 ary = obj;
13682 ptr = &ary;
13683 len = 1;
13684 }
13685 else {
13686 ptr = rb_array_const_ptr_transient(ary);
13687 len = (rb_num_t)rb_array_len(ary);
13688 }
13689 if (space_size == 0) {
13690 }
13691 else if (flag & 0x02) {
13692 rb_num_t i = 0, j;
13693 if (len < num) {
13694 for (i=0; i<num-len; i++) {
13695 *base++ = ((VALUE)RUBY_Qnil);
13696 }
13697 }
13698 for (j=0; i<num; i++, j++) {
13699 VALUE v = ptr[len - j - 1];
13700 *base++ = v;
13701 }
13702 if (is_splat) {
13703 *base = rb_ary_new_from_values(len - j, ptr);
13704 }
13705 }
13706 else {
13707 rb_num_t i;
13708 VALUE *bptr = &base[space_size - 1];
13709 for (i=0; i<num; i++) {
13710 if (len <= i) {
13711 for (; i<num; i++) {
13712 *bptr-- = ((VALUE)RUBY_Qnil);
13713 }
13714 break;
13715 }
13716 *bptr-- = ptr[i];
13717 }
13718 if (is_splat) {
13719 if (num > len) {
13720 *bptr = rb_ary_new();
13721 }
13722 else {
13723 *bptr = rb_ary_new_from_values(len - num, ptr + num);
13724 }
13725 }
13726 }
13727 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(ary); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
13728}
13729static VALUE vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
13730static VALUE vm_mtbl_dump(VALUE klass, ID target_mid);
13731static struct rb_class_cc_entries *
13732vm_ccs_create(VALUE klass, const rb_callable_method_entry_t *cme)
13733{
13734 struct rb_class_cc_entries *ccs = ((struct rb_class_cc_entries *)ruby_xmalloc(sizeof(struct rb_class_cc_entries)));
13735 ccs->capa = 0;
13736 ccs->len = 0;
13737 rb_obj_write((VALUE)(klass), __extension__({
13738 ;
13739 ; __typeof__((VALUE *)(&ccs->cme)) unaligned_member_access_result = ((VALUE *)(&ccs->cme));
13740 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.1.3/vm_insnhelper.c", 1700);
13741 (((rb_callable_method_entry_t *)cme)->flags |= ((VALUE)RUBY_FL_USER8));
13742 ccs->entries = ((void *)0);
13743 return ccs;
13744}
13745static void
13746vm_ccs_push(VALUE klass, struct rb_class_cc_entries *ccs, const struct rb_callinfo *ci, const struct rb_callcache *cc)
13747{
13748 if (! vm_cc_markable(cc)) {
13749 return;
13750 }
13751 else if (! vm_ci_markable(ci)) {
13752 return;
13753 }
13754 if ((__builtin_expect(!!(ccs->len == ccs->capa), 0))) {
13755 if (ccs->capa == 0) {
13756 ccs->capa = 1;
13757 ccs->entries = ((struct rb_class_cc_entries_entry *)ruby_xmalloc2((ccs->capa), sizeof(struct rb_class_cc_entries_entry)));
13758 }
13759 else {
13760 ccs->capa *= 2;
13761 ((ccs->entries) = ((struct rb_class_cc_entries_entry *)ruby_xrealloc2((void *)(ccs->entries), (ccs->capa), sizeof(struct rb_class_cc_entries_entry))));
13762 }
13763 }
13764 ((void)0);
13765 const int pos = ccs->len++;
13766 rb_obj_write((VALUE)(klass), __extension__({
13767 ;
13768 ; __typeof__((VALUE *)(&ccs->entries[pos].ci)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].ci));
13769 ; unaligned_member_access_result; }), (VALUE)(ci), "../ruby-3.1.3/vm_insnhelper.c", 1729);
13770 rb_obj_write((VALUE)(klass), __extension__({
13771 ;
13772 ; __typeof__((VALUE *)(&ccs->entries[pos].cc)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].cc));
13773 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.1.3/vm_insnhelper.c", 1730);
13774 if (0) {
13775 }
13776}
13777static const struct rb_callcache *
13778vm_search_method_slowpath0(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
13779{
13780 const struct rb_callcache *cc = rb_vm_search_method_slowpath(cd->ci, klass);
13781 cd->cc = cc;
13782 const struct rb_callcache *empty_cc =
13783 rb_vm_empty_cc();
13784 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));
13785 ((void)0);
13786 return cc;
13787}
13788static const struct rb_callcache *
13789vm_search_method_fastpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
13790{
13791 const struct rb_callcache *cc = cd->cc;
13792 if ((__builtin_expect(!!(vm_cc_class_check(cc, klass)), 1))) {
13793 if ((__builtin_expect(!!(!((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))), 1))) {
13794 ((void)0);
13795 ((void)0);
13796 ((void)0);
13797 return cc;
13798 }
13799 ((void)0);
13800 }
13801 else {
13802 ((void)0);
13803 }
13804 return vm_search_method_slowpath0(cd_owner, cd, klass);
13805}
13806static const struct rb_callcache *
13807vm_search_method(VALUE cd_owner, struct rb_call_data *cd, VALUE recv)
13808{
13809 VALUE klass = rb_class_of(recv);
13810 ((void)0);
13811 ((void)0);
13812 return vm_search_method_fastpath(cd_owner, cd, klass);
13813}
13814static inline int
13815check_cfunc(const rb_callable_method_entry_t *me, VALUE (*func)())
13816{
13817 if (! me) {
13818 return 0;
13819 }
13820 else {
13821 ((void)0);
13822 ((void)0);
13823 ((void)0);
13824 if (me->def->type != VM_METHOD_TYPE_CFUNC) {
13825 return 0;
13826 }
13827 else {
13828 return me->def->body.cfunc.func == func;
13829 }
13830 }
13831}
13832static inline int
13833vm_method_cfunc_is(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv, VALUE (*func)())
13834{
13835 ((void)0);
13836 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
13837 return check_cfunc(vm_cc_cme(cc), func);
13838}
13839static inline _Bool
13840FIXNUM_2_P(VALUE a, VALUE b)
13841{
13842 long x = a;
13843 long y = b;
13844 long z = x & y & 1;
13845 return z == 1;
13846}
13847static inline _Bool
13848FLONUM_2_P(VALUE a, VALUE b)
13849{
13850 long x = a;
13851 long y = b;
13852 long z = ((x ^ 2) | (y ^ 2)) & 3;
13853 return !z;
13854}
13855static VALUE
13856opt_equality_specialized(VALUE recv, VALUE obj)
13857{
13858 if (FIXNUM_2_P(recv, obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 0))) == 0), 1)))) {
13859 goto compare_by_identity;
13860 }
13861 else if (FLONUM_2_P(recv, obj) && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
13862 goto compare_by_identity;
13863 }
13864 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)))) {
13865 goto compare_by_identity;
13866 }
13867 else if (RB_SPECIAL_CONST_P(recv)) {
13868 }
13869 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)))) {
13870 double a = rb_float_value_inline(recv);
13871 double b = rb_float_value_inline(obj);
13872 return ((a == b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13873 }
13874 else if (RBASIC_CLASS(recv) == rb_cString && ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_EQ)]&((1 << 2))) == 0), 1)))) {
13875 if (recv == obj) {
13876 return ((VALUE)RUBY_Qtrue);
13877 }
13878 else if (RB_TYPE_P(obj, RUBY_T_STRING)) {
13879 return rb_str_eql_internal(obj, recv);
13880 }
13881 }
13882 return ((VALUE)RUBY_Qundef);
13883 compare_by_identity:
13884 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13885}
13886static VALUE
13887opt_equality(const rb_iseq_t *cd_owner, VALUE recv, VALUE obj, CALL_DATA cd)
13888{
13889 ((void)0);
13890 VALUE val = opt_equality_specialized(recv, obj);
13891 if (val != ((VALUE)RUBY_Qundef)) return val;
13892 if (!vm_method_cfunc_is(cd_owner, cd, recv, rb_obj_equal)) {
13893 return ((VALUE)RUBY_Qundef);
13894 }
13895 else {
13896 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13897 }
13898}
13899extern VALUE rb_vm_call0(rb_execution_context_t *ec, VALUE, ID, int, const VALUE*, const rb_callable_method_entry_t *, int kw_splat);
13900extern VALUE rb_vm_call_with_refinements(rb_execution_context_t *, VALUE, ID, int, const VALUE *, int);
13901static VALUE
13902check_match(rb_execution_context_t *ec, VALUE pattern, VALUE target, enum vm_check_match_type type)
13903{
13904 switch (type) {
13905 case VM_CHECKMATCH_TYPE_WHEN:
13906 return pattern;
13907 case VM_CHECKMATCH_TYPE_RESCUE:
13908 if (!rb_obj_is_kind_of(pattern, rb_cModule)) {
13909 rb_raise(rb_eTypeError, "class or module required for rescue clause");
13910 }
13911 case VM_CHECKMATCH_TYPE_CASE: {
13912 return rb_vm_call_with_refinements(ec, pattern, idEqq, 1, &target, 0);
13913 }
13914 default:
13915 rb_bug("check_match: unreachable");
13916 }
13917}
13918static inline VALUE
13919double_cmp_lt(double a, double b)
13920{
13921 ;
13922 return ((a < b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13923}
13924static inline VALUE
13925double_cmp_le(double a, double b)
13926{
13927 ;
13928 return ((a <= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13929}
13930static inline VALUE
13931double_cmp_gt(double a, double b)
13932{
13933 ;
13934 return ((a > b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13935}
13936static inline VALUE
13937double_cmp_ge(double a, double b)
13938{
13939 ;
13940 return ((a >= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
13941}
13942static inline VALUE *
13943vm_base_ptr(const rb_control_frame_t *cfp)
13944{
13945 return cfp->__bp__;
13946}
13947__attribute__((__noreturn__)) static void raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc);
13948__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);
13949__attribute__((__noreturn__)) static void argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys);
13950VALUE rb_keyword_error_new(const char *error, VALUE keys);
13951static VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv,
13952 enum method_missing_reason call_status, int kw_splat);
13953__attribute__ ((__visibility__("default"))) extern
13954const rb_callable_method_entry_t *rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
13955struct args_info {
13956 VALUE *argv;
13957 int argc;
13958 int rest_index;
13959 int rest_dupped;
13960 const struct rb_callinfo_kwarg *kw_arg;
13961 VALUE *kw_argv;
13962 VALUE rest;
13963};
13964enum arg_setup_type {
13965 arg_setup_method,
13966 arg_setup_block
13967};
13968static inline void
13969arg_rest_dup(struct args_info *args)
13970{
13971 if (!args->rest_dupped) {
13972 args->rest = rb_ary_dup(args->rest);
13973 args->rest_dupped = 1;
13974 }
13975}
13976static inline int
13977args_argc(struct args_info *args)
13978{
13979 if (args->rest == ((VALUE)RUBY_Qfalse)) {
13980 return args->argc;
13981 }
13982 else {
13983 return args->argc + RARRAY_LENINT(args->rest) - args->rest_index;
13984 }
13985}
13986static inline void
13987args_extend(struct args_info *args, const int min_argc)
13988{
13989 int i;
13990 if (args->rest) {
13991 arg_rest_dup(args);
13992 ((void)0);
13993 for (i=args->argc + RARRAY_LENINT(args->rest); i<min_argc; i++) {
13994 rb_ary_push(args->rest, ((VALUE)RUBY_Qnil));
13995 }
13996 }
13997 else {
13998 for (i=args->argc; i<min_argc; i++) {
13999 args->argv[args->argc++] = ((VALUE)RUBY_Qnil);
14000 }
14001 }
14002}
14003static inline void
14004args_reduce(struct args_info *args, int over_argc)
14005{
14006 if (args->rest) {
14007 const long len = rb_array_len(args->rest);
14008 if (len > over_argc) {
14009 arg_rest_dup(args);
14010 rb_ary_resize(args->rest, len - over_argc);
14011 return;
14012 }
14013 else {
14014 args->rest = ((VALUE)RUBY_Qfalse);
14015 over_argc -= len;
14016 }
14017 }
14018 ((void)0);
14019 args->argc -= over_argc;
14020}
14021static inline int
14022args_check_block_arg0(struct args_info *args)
14023{
14024 VALUE ary = ((VALUE)RUBY_Qnil);
14025 if (args->rest && rb_array_len(args->rest) == 1) {
14026 VALUE arg0 = RARRAY_AREF(args->rest, 0);
14027 ary = rb_check_array_type(arg0);
14028 }
14029 else if (args->argc == 1) {
14030 VALUE arg0 = args->argv[0];
14031 ary = rb_check_array_type(arg0);
14032 args->argv[0] = arg0;
14033 }
14034 if (!RB_NIL_P(ary)) {
14035 args->rest = ary;
14036 args->rest_index = 0;
14037 args->argc = 0;
14038 return 1;
14039 }
14040 return 0;
14041}
14042static inline void
14043args_copy(struct args_info *args)
14044{
14045 if (args->rest != ((VALUE)RUBY_Qfalse)) {
14046 int argc = args->argc;
14047 args->argc = 0;
14048 arg_rest_dup(args);
14049 while (args->rest_index > 0 && argc > 0) {
14050 RARRAY_ASET(args->rest, --args->rest_index, args->argv[--argc]);
14051 }
14052 while (argc > 0) {
14053 rb_ary_unshift(args->rest, args->argv[--argc]);
14054 }
14055 }
14056 else if (args->argc > 0) {
14057 args->rest = rb_ary_new_from_values(args->argc, args->argv);
14058 args->rest_index = 0;
14059 args->rest_dupped = 1;
14060 args->argc = 0;
14061 }
14062}
14063static inline const VALUE *
14064args_rest_argv(struct args_info *args)
14065{
14066 return rb_array_const_ptr_transient(args->rest) + args->rest_index;
14067}
14068static inline VALUE
14069args_rest_array(struct args_info *args)
14070{
14071 VALUE ary;
14072 if (args->rest) {
14073 ary = rb_ary_behead(args->rest, args->rest_index);
14074 args->rest_index = 0;
14075 args->rest = 0;
14076 }
14077 else {
14078 ary = rb_ary_new();
14079 }
14080 return ary;
14081}
14082static int
14083args_kw_argv_to_hash(struct args_info *args)
14084{
14085 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14086 const VALUE *const passed_keywords = kw_arg->keywords;
14087 const int kw_len = kw_arg->keyword_len;
14088 VALUE h = rb_hash_new_with_size(kw_len);
14089 const int kw_start = args->argc - kw_len;
14090 const VALUE * const kw_argv = args->argv + kw_start;
14091 int i;
14092 args->argc = kw_start + 1;
14093 for (i=0; i<kw_len; i++) {
14094 rb_hash_aset(h, passed_keywords[i], kw_argv[i]);
14095 }
14096 args->argv[args->argc - 1] = h;
14097 return args->argc;
14098}
14099static inline void
14100args_setup_lead_parameters(struct args_info *args, int argc, VALUE *locals)
14101{
14102 if (args->argc >= argc) {
14103 args->argc -= argc;
14104 args->argv += argc;
14105 }
14106 else {
14107 int i, j;
14108 const VALUE *argv = args_rest_argv(args);
14109 for (i=args->argc, j=0; i<argc; i++, j++) {
14110 locals[i] = argv[j];
14111 }
14112 args->rest_index += argc - args->argc;
14113 args->argc = 0;
14114 }
14115}
14116static inline void
14117args_setup_post_parameters(struct args_info *args, int argc, VALUE *locals)
14118{
14119 long len;
14120 len = rb_array_len(args->rest);
14121 ruby_nonempty_memcpy((locals), (rb_array_const_ptr_transient(args->rest) + len - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
14122 rb_ary_resize(args->rest, len - argc);
14123}
14124static inline int
14125args_setup_opt_parameters(struct args_info *args, int opt_max, VALUE *locals)
14126{
14127 int i;
14128 if (args->argc >= opt_max) {
14129 args->argc -= opt_max;
14130 args->argv += opt_max;
14131 i = opt_max;
14132 }
14133 else {
14134 int j;
14135 i = args->argc;
14136 args->argc = 0;
14137 if (args->rest) {
14138 int len = RARRAY_LENINT(args->rest);
14139 const VALUE *argv = rb_array_const_ptr_transient(args->rest);
14140 for (; i<opt_max && args->rest_index < len; i++, args->rest_index++) {
14141 locals[i] = argv[args->rest_index];
14142 }
14143 }
14144 for (j=i; j<opt_max; j++) {
14145 locals[j] = ((VALUE)RUBY_Qnil);
14146 }
14147 }
14148 return i;
14149}
14150static inline void
14151args_setup_rest_parameter(struct args_info *args, VALUE *locals)
14152{
14153 *locals = args_rest_array(args);
14154}
14155static VALUE
14156make_unknown_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14157{
14158 int i;
14159 VALUE obj = rb_ary_tmp_new(1);
14160 for (i=0; i<passed_keyword_len; i++) {
14161 if (kw_argv[i] != ((VALUE)RUBY_Qundef)) {
14162 rb_ary_push(obj, passed_keywords[i]);
14163 }
14164 }
14165 return obj;
14166}
14167static VALUE
14168make_rest_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14169{
14170 int i;
14171 VALUE obj = rb_hash_new_with_size(passed_keyword_len);
14172 for (i=0; i<passed_keyword_len; i++) {
14173 if (kw_argv[i] != ((VALUE)RUBY_Qundef)) {
14174 rb_hash_aset(obj, passed_keywords[i], kw_argv[i]);
14175 }
14176 }
14177 return obj;
14178}
14179static inline int
14180args_setup_kw_parameters_lookup(const ID key, VALUE *ptr, const VALUE *const passed_keywords, VALUE *passed_values, const int passed_keyword_len)
14181{
14182 int i;
14183 const VALUE keyname = rb_id2sym(key);
14184 for (i=0; i<passed_keyword_len; i++) {
14185 if (keyname == passed_keywords[i]) {
14186 *ptr = passed_values[i];
14187 passed_values[i] = ((VALUE)RUBY_Qundef);
14188 return 1;
14189 }
14190 }
14191 return 0;
14192}
14193static void
14194args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
14195 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
14196 VALUE *const locals)
14197{
14198 const ID *acceptable_keywords = iseq->body->param.keyword->table;
14199 const int req_key_num = iseq->body->param.keyword->required_num;
14200 const int key_num = iseq->body->param.keyword->num;
14201 const VALUE * const default_values = iseq->body->param.keyword->default_values;
14202 VALUE missing = 0;
14203 int i, di, found = 0;
14204 int unspecified_bits = 0;
14205 VALUE unspecified_bits_value = ((VALUE)RUBY_Qnil);
14206 for (i=0; i<req_key_num; i++) {
14207 ID key = acceptable_keywords[i];
14208 if (args_setup_kw_parameters_lookup(key, &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14209 found++;
14210 }
14211 else {
14212 if (!missing) missing = rb_ary_tmp_new(1);
14213 rb_ary_push(missing, rb_id2sym(key));
14214 }
14215 }
14216 if (missing) argument_kw_error(ec, iseq, "missing", missing);
14217 for (di=0; i<key_num; i++, di++) {
14218 if (args_setup_kw_parameters_lookup(acceptable_keywords[i], &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14219 found++;
14220 }
14221 else {
14222 if (default_values[di] == ((VALUE)RUBY_Qundef)) {
14223 locals[i] = ((VALUE)RUBY_Qnil);
14224 if ((__builtin_expect(!!(i < (32-1)), 1))) {
14225 unspecified_bits |= 0x01 << di;
14226 }
14227 else {
14228 if (RB_NIL_P(unspecified_bits_value)) {
14229 int j;
14230 unspecified_bits_value = rb_hash_new();
14231 for (j=0; j<(32-1); j++) {
14232 if (unspecified_bits & (0x01 << j)) {
14233 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));
14234 }
14235 }
14236 }
14237 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));
14238 }
14239 }
14240 else {
14241 locals[i] = default_values[di];
14242 }
14243 }
14244 }
14245 if (iseq->body->param.flags.has_kwrest) {
14246 const int rest_hash_index = key_num + 1;
14247 locals[rest_hash_index] = make_rest_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14248 }
14249 else {
14250 if (found != passed_keyword_len) {
14251 VALUE keys = make_unknown_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14252 argument_kw_error(ec, iseq, "unknown", keys);
14253 }
14254 }
14255 if (RB_NIL_P(unspecified_bits_value)) {
14256 unspecified_bits_value = __builtin_choose_expr( __builtin_constant_p(unspecified_bits), ((VALUE)(unspecified_bits)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(unspecified_bits));
14257 }
14258 locals[key_num] = unspecified_bits_value;
14259}
14260static inline void
14261args_setup_kw_rest_parameter(VALUE keyword_hash, VALUE *locals, int kw_flag)
14262{
14263 if (RB_NIL_P(keyword_hash)) {
14264 keyword_hash = rb_hash_new();
14265 }
14266 else if (!(kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
14267 keyword_hash = rb_hash_dup(keyword_hash);
14268 }
14269 locals[0] = keyword_hash;
14270}
14271static inline void
14272args_setup_block_parameter(const rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE *locals)
14273{
14274 VALUE block_handler = calling->block_handler;
14275 *locals = rb_vm_bh_to_procval(ec, block_handler);
14276}
14277struct fill_values_arg {
14278 VALUE *keys;
14279 VALUE *vals;
14280 int argc;
14281};
14282static int
14283fill_keys_values(st_data_t key, st_data_t val, st_data_t ptr)
14284{
14285 struct fill_values_arg *arg = (struct fill_values_arg *)ptr;
14286 int i = arg->argc++;
14287 arg->keys[i] = (VALUE)key;
14288 arg->vals[i] = (VALUE)val;
14289 return ST_CONTINUE;
14290}
14291static inline int
14292ignore_keyword_hash_p(VALUE keyword_hash, const rb_iseq_t * const iseq, unsigned int * kw_flag, VALUE * converted_keyword_hash)
14293{
14294 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
14295 keyword_hash = rb_to_hash_type(keyword_hash);
14296 }
14297 if (!(*kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit)) &&
14298 (iseq->body->param.flags.has_kwrest ||
14299 iseq->body->param.flags.ruby2_keywords)) {
14300 *kw_flag |= (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14301 keyword_hash = rb_hash_dup(keyword_hash);
14302 }
14303 *converted_keyword_hash = keyword_hash;
14304 return !(iseq->body->param.flags.has_kw) &&
14305 !(iseq->body->param.flags.has_kwrest) &&
14306 RHASH_EMPTY_P(keyword_hash);
14307}
14308COLDFUNC static int
14309setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * const iseq,
14310 struct rb_calling_info *const calling,
14311 const struct rb_callinfo *ci,
14312 VALUE * const locals, const enum arg_setup_type arg_setup_type) {
14313 const int min_argc = iseq->body->param.lead_num + iseq->body->param.post_num;
14314 const int max_argc = (iseq->body->param.flags.has_rest == 0) ? min_argc + iseq->body->param.opt_num : (-1);
14315 int given_argc;
14316 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));
14317 int opt_pc = 0, allow_autosplat = !kw_flag;
14318 struct args_info args_body, *args;
14319 VALUE keyword_hash = ((VALUE)RUBY_Qnil);
14320 VALUE * const orig_sp = ec->cfp->sp;
14321 unsigned int i;
14322 VALUE flag_keyword_hash = 0;
14323 VALUE converted_keyword_hash = 0;
14324 ;
14325 for (i=calling->argc; i<iseq->body->param.size; i++) {
14326 locals[i] = ((VALUE)RUBY_Qnil);
14327 }
14328 ec->cfp->sp = &locals[i];
14329 args = &args_body;
14330 given_argc = args->argc = calling->argc;
14331 args->argv = locals;
14332 args->rest_dupped = 0;
14333 if (kw_flag & (0x01 << VM_CALL_KWARG_bit)) {
14334 args->kw_arg = vm_ci_kwarg(ci);
14335 if (iseq->body->param.flags.has_kw) {
14336 int kw_len = args->kw_arg->keyword_len;
14337 args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len))));
14338 args->argc -= kw_len;
14339 given_argc -= kw_len;
14340 ruby_nonempty_memcpy((args->kw_argv), (locals + args->argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len)));
14341 }
14342 else {
14343 args->kw_argv = ((void *)0);
14344 given_argc = args_kw_argv_to_hash(args);
14345 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14346 }
14347 }
14348 else {
14349 args->kw_arg = ((void *)0);
14350 args->kw_argv = ((void *)0);
14351 }
14352 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) {
14353 VALUE rest_last = 0;
14354 int len;
14355 args->rest = locals[--args->argc];
14356 args->rest_index = 0;
14357 len = RARRAY_LENINT(args->rest);
14358 given_argc += len - 1;
14359 rest_last = RARRAY_AREF(args->rest, len - 1);
14360 if (!kw_flag && len > 0) {
14361 if (RB_TYPE_P(rest_last, RUBY_T_HASH) &&
14362 (((struct RHash *)rest_last)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
14363 rest_last = rb_hash_dup(rest_last);
14364 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14365 }
14366 else {
14367 rest_last = 0;
14368 }
14369 }
14370 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14371 if (ignore_keyword_hash_p(rest_last, iseq, &kw_flag, &converted_keyword_hash)) {
14372 arg_rest_dup(args);
14373 rb_ary_pop(args->rest);
14374 given_argc--;
14375 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14376 }
14377 else {
14378 if (rest_last != converted_keyword_hash) {
14379 rest_last = converted_keyword_hash;
14380 arg_rest_dup(args);
14381 RARRAY_ASET(args->rest, len - 1, rest_last);
14382 }
14383 if (iseq->body->param.flags.ruby2_keywords && rest_last) {
14384 flag_keyword_hash = rest_last;
14385 }
14386 else if (iseq->body->param.flags.has_kw || iseq->body->param.flags.has_kwrest) {
14387 arg_rest_dup(args);
14388 rb_ary_pop(args->rest);
14389 given_argc--;
14390 keyword_hash = rest_last;
14391 }
14392 }
14393 }
14394 }
14395 else {
14396 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14397 VALUE last_arg = args->argv[args->argc-1];
14398 if (ignore_keyword_hash_p(last_arg, iseq, &kw_flag, &converted_keyword_hash)) {
14399 args->argc--;
14400 given_argc--;
14401 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14402 }
14403 else {
14404 if (last_arg != converted_keyword_hash) {
14405 last_arg = converted_keyword_hash;
14406 args->argv[args->argc-1] = last_arg;
14407 }
14408 if (iseq->body->param.flags.ruby2_keywords) {
14409 flag_keyword_hash = last_arg;
14410 }
14411 else if (iseq->body->param.flags.has_kw || iseq->body->param.flags.has_kwrest) {
14412 args->argc--;
14413 given_argc--;
14414 keyword_hash = last_arg;
14415 }
14416 }
14417 }
14418 args->rest = ((VALUE)RUBY_Qfalse);
14419 }
14420 if (flag_keyword_hash && RB_TYPE_P(flag_keyword_hash, RUBY_T_HASH)) {
14421 ((struct RHash *)flag_keyword_hash)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
14422 }
14423 if (kw_flag && iseq->body->param.flags.accepts_no_kwarg) {
14424 rb_raise(rb_eArgError, "no keywords accepted");
14425 }
14426 switch (arg_setup_type) {
14427 case arg_setup_method:
14428 break;
14429 case arg_setup_block:
14430 if (given_argc == (RB_NIL_P(keyword_hash) ? 1 : 2) &&
14431 allow_autosplat &&
14432 (min_argc > 0 || iseq->body->param.opt_num > 1) &&
14433 !iseq->body->param.flags.ambiguous_param0 &&
14434 args_check_block_arg0(args)) {
14435 given_argc = RARRAY_LENINT(args->rest);
14436 }
14437 break;
14438 }
14439 if (given_argc < min_argc) {
14440 if (arg_setup_type == arg_setup_block) {
14441 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);
14442 given_argc = min_argc;
14443 args_extend(args, min_argc);
14444 }
14445 else {
14446 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14447 }
14448 }
14449 if (given_argc > max_argc && max_argc != (-1)) {
14450 if (arg_setup_type == arg_setup_block) {
14451 args_reduce(args, given_argc - max_argc);
14452 given_argc = max_argc;
14453 }
14454 else {
14455 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14456 }
14457 }
14458 if (iseq->body->param.flags.has_lead) {
14459 args_setup_lead_parameters(args, iseq->body->param.lead_num, locals + 0);
14460 }
14461 if (iseq->body->param.flags.has_rest || iseq->body->param.flags.has_post){
14462 args_copy(args);
14463 }
14464 if (iseq->body->param.flags.has_post) {
14465 args_setup_post_parameters(args, iseq->body->param.post_num, locals + iseq->body->param.post_start);
14466 }
14467 if (iseq->body->param.flags.has_opt) {
14468 int opt = args_setup_opt_parameters(args, iseq->body->param.opt_num, locals + iseq->body->param.lead_num);
14469 opt_pc = (int)iseq->body->param.opt_table[opt];
14470 }
14471 if (iseq->body->param.flags.has_rest) {
14472 args_setup_rest_parameter(args, locals + iseq->body->param.rest_start);
14473 }
14474 if (iseq->body->param.flags.has_kw) {
14475 VALUE * const klocals = locals + iseq->body->param.keyword->bits_start - iseq->body->param.keyword->num;
14476 if (args->kw_argv != ((void *)0)) {
14477 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14478 args_setup_kw_parameters(ec, iseq, args->kw_argv, kw_arg->keyword_len, kw_arg->keywords, klocals);
14479 }
14480 else if (!RB_NIL_P(keyword_hash)) {
14481 int kw_len = rb_long2int_inline(RHASH_SIZE(keyword_hash));
14482 struct fill_values_arg arg;
14483 arg.keys = args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len * 2))));
14484 arg.vals = arg.keys + kw_len;
14485 arg.argc = 0;
14486 rb_hash_foreach(keyword_hash, fill_keys_values, (VALUE)&arg);
14487 ((void)0);
14488 args_setup_kw_parameters(ec, iseq, arg.vals, kw_len, arg.keys, klocals);
14489 }
14490 else {
14491 ((void)0);
14492 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
14493 }
14494 }
14495 else if (iseq->body->param.flags.has_kwrest) {
14496 args_setup_kw_rest_parameter(keyword_hash, locals + iseq->body->param.keyword->rest_start, kw_flag);
14497 }
14498 else if (!RB_NIL_P(keyword_hash) && RHASH_SIZE(keyword_hash) > 0 && arg_setup_type == arg_setup_method) {
14499 argument_kw_error(ec, iseq, "unknown", rb_hash_keys(keyword_hash));
14500 }
14501 if (iseq->body->param.flags.has_block) {
14502 if (iseq->body->local_iseq == iseq) {
14503 }
14504 else {
14505 args_setup_block_parameter(ec, calling, locals + iseq->body->param.block_start);
14506 }
14507 }
14508 ec->cfp->sp = orig_sp;
14509 return opt_pc;
14510}
14511static void
14512raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc)
14513{
14514 VALUE at;
14515 if (iseq) {
14516 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL, ((VALUE)RUBY_Qnil) ,
14517 0 , ((VALUE)RUBY_Qfalse) ,
14518 iseq->body->iseq_encoded,
14519 ec->cfp->sp, 0, 0 );
14520 at = rb_ec_backtrace_object(ec);
14521 rb_backtrace_use_iseq_first_lineno_for_last_location(at);
14522 rb_vm_pop_frame(ec);
14523 }
14524 else {
14525 at = rb_ec_backtrace_object(ec);
14526 }
14527 rb_ivar_set(exc, idBt_locations, at);
14528 rb_exc_set_backtrace(exc, at);
14529 rb_exc_raise(exc);
14530}
14531static void
14532argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc)
14533{
14534 VALUE exc = rb_arity_error_new(miss_argc, min_argc, max_argc);
14535 if (iseq->body->param.flags.has_kw) {
14536 const struct rb_iseq_param_keyword *const kw = iseq->body->param.keyword;
14537 const ID *keywords = kw->table;
14538 int req_key_num = kw->required_num;
14539 if (req_key_num > 0) {
14540 static const char required[] = "; required keywords";
14541 VALUE mesg = rb_attr_get(exc, idMesg);
14542 rb_str_resize(mesg, RSTRING_LEN(mesg)-1);
14543 rb_str_cat(mesg, required, sizeof(required) - 1 - (req_key_num == 1));
14544 ((__builtin_constant_p(":") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (":")));
14545 do {
14546 ((__builtin_constant_p(" ") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (" ")));
14547 rb_str_append(mesg, rb_id2str(*keywords++));
14548 ((__builtin_constant_p(",") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (",")));
14549 } while (--req_key_num);
14550 RSTRING_PTR(mesg)[RSTRING_LEN(mesg)-1] = ')';
14551 }
14552 }
14553 raise_argument_error(ec, iseq, exc);
14554}
14555static void
14556argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys)
14557{
14558 raise_argument_error(ec, iseq, rb_keyword_error_new(error, keys));
14559}
14560static inline void
14561vm_caller_setup_arg_splat(rb_control_frame_t *cfp, struct rb_calling_info *calling)
14562{
14563 int argc = calling->argc;
14564 VALUE *argv = cfp->sp - argc;
14565 VALUE ary = argv[argc-1];
14566 ;
14567 cfp->sp--;
14568 if (!RB_NIL_P(ary)) {
14569 const VALUE *ptr = rb_array_const_ptr_transient(ary);
14570 long len = rb_array_len(ary), i;
14571 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);
14572 for (i = 0; i < len; i++) {
14573 *cfp->sp++ = ptr[i];
14574 }
14575 calling->argc += i - 1;
14576 }
14577}
14578static inline void
14579vm_caller_setup_arg_kw(rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci)
14580{
14581 const VALUE *const passed_keywords = vm_ci_kwarg(ci)->keywords;
14582 const int kw_len = vm_ci_kwarg(ci)->keyword_len;
14583 const VALUE h = rb_hash_new_with_size(kw_len);
14584 VALUE *sp = cfp->sp;
14585 int i;
14586 for (i=0; i<kw_len; i++) {
14587 rb_hash_aset(h, passed_keywords[i], (sp - kw_len)[i]);
14588 }
14589 (sp-kw_len)[0] = h;
14590 cfp->sp -= kw_len - 1;
14591 calling->argc -= kw_len - 1;
14592 calling->kw_splat = 1;
14593}
14594static VALUE
14595vm_to_proc(VALUE proc)
14596{
14597 if ((__builtin_expect(!!(!rb_obj_is_proc(proc)), 0))) {
14598 VALUE b;
14599 const rb_callable_method_entry_t *me =
14600 rb_callable_method_entry_with_refinements(rb_class_of(proc), idTo_proc, ((void *)0));
14601 if (me) {
14602 b = rb_vm_call0(rb_current_execution_context(1), proc, idTo_proc, 0, ((void *)0), me, 0);
14603 }
14604 else {
14605 b = rb_check_convert_type_with_id(proc, RUBY_T_DATA, "Proc", idTo_proc);
14606 }
14607 if (RB_NIL_P(b) || !rb_obj_is_proc(b)) {
14608 rb_raise(rb_eTypeError,
14609 "wrong argument type %s (expected Proc)",
14610 rb_obj_classname(proc));
14611 }
14612 return b;
14613 }
14614 else {
14615 return proc;
14616 }
14617}
14618static VALUE
14619refine_sym_proc_call(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg)
14620{
14621 VALUE obj;
14622 ID mid;
14623 const rb_callable_method_entry_t *me = 0;
14624 rb_execution_context_t *ec;
14625 const VALUE symbol = RARRAY_AREF(callback_arg, 0);
14626 const VALUE refinements = RARRAY_AREF(callback_arg, 1);
14627 int kw_splat = rb_keyword_given_p();
14628 VALUE klass;
14629 if (argc-- < 1) {
14630 rb_raise(rb_eArgError, "no receiver given");
14631 }
14632 obj = *argv++;
14633 mid = rb_sym2id(symbol);
14634 for (klass = rb_class_of(obj); klass; klass = RCLASS_SUPER(klass)) {
14635 me = rb_callable_method_entry(klass, mid);
14636 if (me) {
14637 me = rb_resolve_refined_method_callable(refinements, me);
14638 if (me) break;
14639 }
14640 }
14641 ec = rb_current_execution_context(1);
14642 if (!RB_NIL_P(blockarg)) {
14643 vm_passed_block_handler_set(ec, blockarg);
14644 }
14645 if (!me) {
14646 return method_missing(ec, obj, mid, argc, argv, MISSING_NOENTRY, kw_splat);
14647 }
14648 return rb_vm_call0(ec, obj, mid, argc, argv, me, kw_splat);
14649}
14650static VALUE
14651vm_caller_setup_arg_block(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
14652 const struct rb_callinfo *ci, const rb_iseq_t *blockiseq, const int is_super)
14653{
14654 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_BLOCKARG_bit)) {
14655 VALUE block_code = *(--reg_cfp->sp);
14656 if (RB_NIL_P(block_code)) {
14657 return 0;
14658 }
14659 else if (block_code == rb_block_param_proxy) {
14660 ((void)0);
14661 VALUE handler = VM_CF_BLOCK_HANDLER(reg_cfp);
14662 reg_cfp->block_code = (const void *) handler;
14663 return handler;
14664 }
14665 else if (RB_SYMBOL_P(block_code) && rb_method_basic_definition_p(rb_cSymbol, idTo_proc)) {
14666 const rb_cref_t *cref = vm_env_cref(reg_cfp->ep);
14667 if (cref && !RB_NIL_P(cref->refinements)) {
14668 VALUE ref = cref->refinements;
14669 VALUE func = rb_hash_lookup(ref, block_code);
14670 if (RB_NIL_P(func)) {
14671 VALUE callback_arg = rb_ary_tmp_new(2);
14672 rb_ary_push(callback_arg, block_code);
14673 rb_ary_push(callback_arg, ref);
14674 RB_OBJ_FREEZE_RAW(callback_arg);
14675 func = rb_func_lambda_new(refine_sym_proc_call, callback_arg, 1, (-1));
14676 rb_hash_aset(ref, block_code, func);
14677 }
14678 block_code = func;
14679 }
14680 return block_code;
14681 }
14682 else {
14683 return vm_to_proc(block_code);
14684 }
14685 }
14686 else if (blockiseq != ((void *)0)) {
14687 struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(reg_cfp);
14688 captured->code.iseq = blockiseq;
14689 return VM_BH_FROM_ISEQ_BLOCK(captured);
14690 }
14691 else {
14692 if (is_super) {
14693 return ((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]);
14694 }
14695 else {
14696 return 0;
14697 }
14698 }
14699}
14700static 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);
14701__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);
14702static 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);
14703static VALUE vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
14704static VALUE vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
14705static VALUE vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
14706static inline VALUE vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
14707static vm_call_handler vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size);
14708static VALUE
14709vm_call_iseq_setup_tailcall_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
14710{
14711 ((void)0);
14712 return vm_call_iseq_setup_tailcall(ec, cfp, calling, 0);
14713}
14714static VALUE
14715vm_call_iseq_setup_normal_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
14716{
14717 ((void)0);
14718 const struct rb_callcache *cc = calling->cc;
14719 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14720 int param = iseq->body->param.size;
14721 int local = iseq->body->local_table_size;
14722 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
14723}
14724static _Bool
14725rb_simple_iseq_p(const rb_iseq_t *iseq)
14726{
14727 return iseq->body->param.flags.has_opt == 0 &&
14728 iseq->body->param.flags.has_rest == 0 &&
14729 iseq->body->param.flags.has_post == 0 &&
14730 iseq->body->param.flags.has_kw == 0 &&
14731 iseq->body->param.flags.has_kwrest == 0 &&
14732 iseq->body->param.flags.accepts_no_kwarg == 0 &&
14733 iseq->body->param.flags.has_block == 0;
14734}static inline
14735__attribute__ ((__visibility__("default"))) _Bool
14736rb_iseq_only_optparam_p(const rb_iseq_t *iseq)
14737{
14738 return iseq->body->param.flags.has_opt == 1 &&
14739 iseq->body->param.flags.has_rest == 0 &&
14740 iseq->body->param.flags.has_post == 0 &&
14741 iseq->body->param.flags.has_kw == 0 &&
14742 iseq->body->param.flags.has_kwrest == 0 &&
14743 iseq->body->param.flags.accepts_no_kwarg == 0 &&
14744 iseq->body->param.flags.has_block == 0;
14745}static inline
14746__attribute__ ((__visibility__("default"))) _Bool
14747rb_iseq_only_kwparam_p(const rb_iseq_t *iseq)
14748{
14749 return iseq->body->param.flags.has_opt == 0 &&
14750 iseq->body->param.flags.has_rest == 0 &&
14751 iseq->body->param.flags.has_post == 0 &&
14752 iseq->body->param.flags.has_kw == 1 &&
14753 iseq->body->param.flags.has_kwrest == 0 &&
14754 iseq->body->param.flags.has_block == 0;
14755}
14756static _Bool
14757rb_splat_or_kwargs_p(const struct rb_callinfo *__restrict__ ci)
14758{
14759 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)));
14760}
14761static inline void
14762CALLER_SETUP_ARG(struct rb_control_frame_struct *__restrict__ cfp,
14763 struct rb_calling_info *__restrict__ calling,
14764 const struct rb_callinfo *__restrict__ ci)
14765{
14766 if ((__builtin_expect(!!((vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))), 0))) {
14767 VALUE final_hash;
14768 vm_caller_setup_arg_splat(cfp, calling);
14769 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit))) &&
14770 calling->argc > 0 &&
14771 RB_TYPE_P((final_hash = *(cfp->sp - 1)), RUBY_T_HASH) &&
14772 (((struct RHash *)final_hash)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
14773 *(cfp->sp - 1) = rb_hash_dup(final_hash);
14774 calling->kw_splat = 1;
14775 }
14776 }
14777 if ((__builtin_expect(!!((vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)))), 0))) {
14778 if ((vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit))) {
14779 vm_caller_setup_arg_kw(cfp, calling, ci);
14780 }
14781 else {
14782 VALUE keyword_hash = cfp->sp[-1];
14783 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
14784 cfp->sp[-1] = rb_hash_dup(rb_to_hash_type(keyword_hash));
14785 }
14786 else if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
14787 cfp->sp[-1] = rb_hash_dup(keyword_hash);
14788 }
14789 }
14790 }
14791}
14792static inline void
14793CALLER_REMOVE_EMPTY_KW_SPLAT(struct rb_control_frame_struct *__restrict__ cfp,
14794 struct rb_calling_info *__restrict__ calling,
14795 const struct rb_callinfo *__restrict__ ci)
14796{
14797 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
14798 if (RHASH_EMPTY_P(cfp->sp[-1])) {
14799 cfp->sp--;
14800 calling->argc--;
14801 calling->kw_splat = 0;
14802 }
14803 }
14804}
14805static VALUE
14806vm_call_iseq_setup_normal_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14807 struct rb_calling_info *calling)
14808{
14809 const struct rb_callcache *cc = calling->cc;
14810 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14811 const int lead_num = iseq->body->param.lead_num;
14812 const int opt = calling->argc - lead_num;
14813 const int opt_num = iseq->body->param.opt_num;
14814 const int opt_pc = (int)iseq->body->param.opt_table[opt];
14815 const int param = iseq->body->param.size;
14816 const int local = iseq->body->local_table_size;
14817 const int delta = opt_num - opt;
14818 ((void)0);
14819 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param - delta, local);
14820}
14821static VALUE
14822vm_call_iseq_setup_tailcall_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14823 struct rb_calling_info *calling)
14824{
14825 const struct rb_callcache *cc = calling->cc;
14826 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14827 const int lead_num = iseq->body->param.lead_num;
14828 const int opt = calling->argc - lead_num;
14829 const int opt_pc = (int)iseq->body->param.opt_table[opt];
14830 ((void)0);
14831 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
14832}
14833static void
14834args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
14835 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
14836 VALUE *const locals);
14837static VALUE
14838vm_call_iseq_setup_kwparm_kwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14839 struct rb_calling_info *calling)
14840{
14841 const struct rb_callinfo *ci = calling->ci;
14842 const struct rb_callcache *cc = calling->cc;
14843 ((void)0);
14844 ((void)0);
14845 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14846 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
14847 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
14848 const int ci_kw_len = kw_arg->keyword_len;
14849 const VALUE * const ci_keywords = kw_arg->keywords;
14850 VALUE *argv = cfp->sp - calling->argc;
14851 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
14852 const int lead_num = iseq->body->param.lead_num;
14853 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
14854 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
14855 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
14856 int param = iseq->body->param.size;
14857 int local = iseq->body->local_table_size;
14858 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
14859}
14860static VALUE
14861vm_call_iseq_setup_kwparm_nokwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
14862 struct rb_calling_info *calling)
14863{
14864 const struct rb_callinfo *__attribute__ ((__unused__)) ci = calling->ci;
14865 const struct rb_callcache *cc = calling->cc;
14866 ((void)0);
14867 ((void)0);
14868 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14869 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
14870 VALUE * const argv = cfp->sp - calling->argc;
14871 VALUE * const klocals = argv + kw_param->bits_start - kw_param->num;
14872 int i;
14873 for (i=0; i<kw_param->num; i++) {
14874 klocals[i] = kw_param->default_values[i];
14875 }
14876 klocals[i] = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
14877 int param = iseq->body->param.size;
14878 int local = iseq->body->local_table_size;
14879 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
14880}
14881static inline int
14882vm_callee_setup_arg(rb_execution_context_t *ec, struct rb_calling_info *calling,
14883 const rb_iseq_t *iseq, VALUE *argv, int param_size, int local_size)
14884{
14885 const struct rb_callinfo *ci = calling->ci;
14886 const struct rb_callcache *cc = calling->cc;
14887 _Bool cacheable_ci = vm_ci_markable(ci);
14888 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit))), 1))) {
14889 if ((__builtin_expect(!!(rb_simple_iseq_p(iseq)), 1))) {
14890 rb_control_frame_t *cfp = ec->cfp;
14891 CALLER_SETUP_ARG(cfp, calling, ci);
14892 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
14893 if (calling->argc != iseq->body->param.lead_num) {
14894 argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
14895 }
14896 ((void)0);
14897 ((void)0);
14898 CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size), cacheable_ci && vm_call_iseq_optimizable_p(ci, cc));
14899 return 0;
14900 }
14901 else if (rb_iseq_only_optparam_p(iseq)) {
14902 rb_control_frame_t *cfp = ec->cfp;
14903 CALLER_SETUP_ARG(cfp, calling, ci);
14904 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
14905 const int lead_num = iseq->body->param.lead_num;
14906 const int opt_num = iseq->body->param.opt_num;
14907 const int argc = calling->argc;
14908 const int opt = argc - lead_num;
14909 if (opt < 0 || opt > opt_num) {
14910 argument_arity_error(ec, iseq, argc, lead_num, lead_num + opt_num);
14911 }
14912 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
14913 CC_SET_FASTPATH(cc, vm_call_iseq_setup_normal_opt_start,
14914 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
14915 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));
14916 }
14917 else {
14918 CC_SET_FASTPATH(cc, vm_call_iseq_setup_tailcall_opt_start,
14919 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
14920 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));
14921 }
14922 ((void)0);
14923 for (int i=argc; i<lead_num + opt_num; i++) {
14924 argv[i] = ((VALUE)RUBY_Qnil);
14925 }
14926 return (int)iseq->body->param.opt_table[opt];
14927 }
14928 else if (rb_iseq_only_kwparam_p(iseq) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))) {
14929 const int lead_num = iseq->body->param.lead_num;
14930 const int argc = calling->argc;
14931 const struct rb_iseq_param_keyword *kw_param = iseq->body->param.keyword;
14932 if (vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) {
14933 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
14934 if (argc - kw_arg->keyword_len == lead_num) {
14935 const int ci_kw_len = kw_arg->keyword_len;
14936 const VALUE * const ci_keywords = kw_arg->keywords;
14937 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
14938 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
14939 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
14940 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
14941 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_kwarg,
14942 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));
14943 return 0;
14944 }
14945 }
14946 else if (argc == lead_num) {
14947 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
14948 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
14949 if (klocals[kw_param->num] == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0))) {
14950 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_nokwarg,
14951 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));
14952 }
14953 return 0;
14954 }
14955 }
14956 }
14957 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_method);
14958}
14959COLDFUNC static VALUE
14960vm_call_iseq_setup(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
14961 ((void)0);
14962 const struct rb_callcache *cc = calling->cc;
14963 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
14964 const int param_size = iseq->body->param.size;
14965 const int local_size = iseq->body->local_table_size;
14966 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);
14967 return vm_call_iseq_setup_2(ec, cfp, calling, opt_pc, param_size, local_size);
14968}
14969COLDFUNC static VALUE
14970vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
14971 int opt_pc, int param_size, int local_size) {
14972 const struct rb_callinfo *ci = calling->ci;
14973 const struct rb_callcache *cc = calling->cc;
14974 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
14975 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param_size, local_size);
14976 }
14977 else {
14978 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
14979 }
14980}
14981static inline VALUE
14982vm_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,
14983 int opt_pc, int param_size, int local_size)
14984{
14985 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
14986 VALUE *argv = cfp->sp - calling->argc;
14987 VALUE *sp = argv + param_size;
14988 cfp->sp = argv - 1 ;
14989 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL, calling->recv,
14990 calling->block_handler, (VALUE)me,
14991 iseq->body->iseq_encoded + opt_pc, sp,
14992 local_size - param_size,
14993 iseq->body->stack_max);
14994 return ((VALUE)RUBY_Qundef);
14995}
14996COLDFUNC static VALUE
14997vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc) {
14998 const struct rb_callcache *cc = calling->cc;
14999 unsigned int i;
15000 VALUE *argv = cfp->sp - calling->argc;
15001 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15002 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15003 VALUE *src_argv = argv;
15004 VALUE *sp_orig, *sp;
15005 VALUE finish_flag = VM_FRAME_FINISHED_P(cfp) ? VM_FRAME_FLAG_FINISH : 0;
15006 if (VM_BH_FROM_CFP_P(calling->block_handler, cfp)) {
15007 struct rb_captured_block *dst_captured = VM_CFP_TO_CAPTURED_BLOCK(((cfp)+1));
15008 const struct rb_captured_block *src_captured = VM_BH_TO_CAPT_BLOCK(calling->block_handler);
15009 dst_captured->code.val = src_captured->code.val;
15010 if (VM_BH_ISEQ_BLOCK_P(calling->block_handler)) {
15011 calling->block_handler = VM_BH_FROM_ISEQ_BLOCK(dst_captured);
15012 }
15013 else {
15014 calling->block_handler = VM_BH_FROM_IFUNC_BLOCK(dst_captured);
15015 }
15016 }
15017 vm_pop_frame(ec, cfp, cfp->ep);
15018 cfp = ec->cfp;
15019 sp_orig = sp = cfp->sp;
15020 sp[0] = calling->recv;
15021 sp++;
15022 for (i=0; i < iseq->body->param.size; i++) {
15023 *sp++ = src_argv[i];
15024 }
15025 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL | finish_flag,
15026 calling->recv, calling->block_handler, (VALUE)me,
15027 iseq->body->iseq_encoded + opt_pc, sp,
15028 iseq->body->local_table_size - iseq->body->param.size,
15029 iseq->body->stack_max);
15030 cfp->sp = sp_orig;
15031 return ((VALUE)RUBY_Qundef);
15032}
15033static void
15034ractor_unsafe_check(void)
15035{
15036 if (!rb_ractor_main_p()) {
15037 rb_raise(rb_eRactorUnsafeError, "ractor unsafe method called from not main ractor");
15038 }
15039}
15040static VALUE
15041call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15042{
15043 ractor_unsafe_check();
15044 return (*func)(recv, rb_ary_new_from_values(argc, argv));
15045}
15046static VALUE
15047call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15048{
15049 ractor_unsafe_check();
15050 return (*func)(argc, argv, recv);
15051}
15052static VALUE
15053call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15054{
15055 ractor_unsafe_check();
15056 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15057 return (*f)(recv);
15058}
15059static VALUE
15060call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15061{
15062 ractor_unsafe_check();
15063 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15064 return (*f)(recv, argv[0]);
15065}
15066static VALUE
15067call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15068{
15069 ractor_unsafe_check();
15070 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15071 return (*f)(recv, argv[0], argv[1]);
15072}
15073static VALUE
15074call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15075{
15076 ractor_unsafe_check();
15077 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15078 return (*f)(recv, argv[0], argv[1], argv[2]);
15079}
15080static VALUE
15081call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15082{
15083 ractor_unsafe_check();
15084 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15085 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15086}
15087static VALUE
15088call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15089{
15090 ractor_unsafe_check();
15091 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15092 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15093}
15094static VALUE
15095call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15096{
15097 ractor_unsafe_check();
15098 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15099 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15100}
15101static VALUE
15102call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15103{
15104 ractor_unsafe_check();
15105 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15106 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15107}
15108static VALUE
15109call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15110{
15111 ractor_unsafe_check();
15112 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15113 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15114}
15115static VALUE
15116call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15117{
15118 ractor_unsafe_check();
15119 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15120 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15121}
15122static VALUE
15123call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15124{
15125 ractor_unsafe_check();
15126 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;
15127 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15128}
15129static VALUE
15130call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15131{
15132 ractor_unsafe_check();
15133 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;
15134 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]);
15135}
15136static VALUE
15137call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15138{
15139 ractor_unsafe_check();
15140 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;
15141 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]);
15142}
15143static VALUE
15144call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15145{
15146 ractor_unsafe_check();
15147 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;
15148 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]);
15149}
15150static VALUE
15151call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15152{
15153 ractor_unsafe_check();
15154 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;
15155 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]);
15156}
15157static VALUE
15158call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15159{
15160 ractor_unsafe_check();
15161 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;
15162 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]);
15163}
15164static VALUE
15165ractor_safe_call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15166{
15167 return (*func)(recv, rb_ary_new_from_values(argc, argv));
15168}
15169static VALUE
15170ractor_safe_call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15171{
15172 return (*func)(argc, argv, recv);
15173}
15174static VALUE
15175ractor_safe_call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15176{
15177 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15178 return (*f)(recv);
15179}
15180static VALUE
15181ractor_safe_call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15182{
15183 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15184 return (*f)(recv, argv[0]);
15185}
15186static VALUE
15187ractor_safe_call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15188{
15189 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15190 return (*f)(recv, argv[0], argv[1]);
15191}
15192static VALUE
15193ractor_safe_call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15194{
15195 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15196 return (*f)(recv, argv[0], argv[1], argv[2]);
15197}
15198static VALUE
15199ractor_safe_call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15200{
15201 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15202 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15203}
15204static VALUE
15205ractor_safe_call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15206{
15207 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15208 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15209}
15210static VALUE
15211ractor_safe_call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15212{
15213 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15214 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15215}
15216static VALUE
15217ractor_safe_call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15218{
15219 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15220 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15221}
15222static VALUE
15223ractor_safe_call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15224{
15225 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15226 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15227}
15228static VALUE
15229ractor_safe_call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15230{
15231 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15232 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15233}
15234static VALUE
15235ractor_safe_call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15236{
15237 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;
15238 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15239}
15240static VALUE
15241ractor_safe_call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15242{
15243 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;
15244 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]);
15245}
15246static VALUE
15247ractor_safe_call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15248{
15249 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;
15250 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]);
15251}
15252static VALUE
15253ractor_safe_call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15254{
15255 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;
15256 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]);
15257}
15258static VALUE
15259ractor_safe_call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15260{
15261 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;
15262 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]);
15263}
15264static VALUE
15265ractor_safe_call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15266{
15267 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;
15268 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]);
15269}
15270static inline int
15271vm_cfp_consistent_p(rb_execution_context_t *ec, const rb_control_frame_t *reg_cfp)
15272{
15273 const int ov_flags = RAISED_STACKOVERFLOW;
15274 if ((__builtin_expect(!!(reg_cfp == ec->cfp + 1), 1))) return 1;
15275 if ((((ec)->raised_flag & (ov_flags)) != 0)) {
15276 ((ec)->raised_flag &= ~(ov_flags));
15277 return 1;
15278 }
15279 return 0;
15280}
15281static inline
15282const rb_method_cfunc_t *
15283vm_method_cfunc_entry(const rb_callable_method_entry_t *me)
15284{
15285 return __extension__({
15286 ;
15287 ; __typeof__(&(me->def)->body.cfunc) unaligned_member_access_result = (&(me->def)->body.cfunc);
15288 ; unaligned_member_access_result; });
15289}
15290static VALUE
15291vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15292{
15293 ((void)0);
15294 const struct rb_callinfo *ci = calling->ci;
15295 const struct rb_callcache *cc = calling->cc;
15296 VALUE val;
15297 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15298 const rb_method_cfunc_t *cfunc = vm_method_cfunc_entry(me);
15299 int len = cfunc->argc;
15300 VALUE recv = calling->recv;
15301 VALUE block_handler = calling->block_handler;
15302 VALUE frame_type = VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL;
15303 int argc = calling->argc;
15304 int orig_argc = argc;
15305 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15306 frame_type |= VM_FRAME_FLAG_CFRAME_KW;
15307 }
15308 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);
15309 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);
15310 vm_push_frame(ec, ((void *)0), frame_type, recv,
15311 block_handler, (VALUE)me,
15312 0, ec->cfp->sp, 0, 0);
15313 if (len >= 0) rb_check_arity(argc, len, len);
15314 reg_cfp->sp -= orig_argc + 1;
15315 val = (*cfunc->invoker)(recv, argc, reg_cfp->sp + 1, cfunc->func);
15316 ((__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)));
15317 rb_vm_pop_frame(ec);
15318 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);
15319 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);
15320 return val;
15321}
15322static VALUE
15323vm_call_cfunc(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15324{
15325 const struct rb_callinfo *ci = calling->ci;
15326 ((void)0);
15327 CALLER_SETUP_ARG(reg_cfp, calling, ci);
15328 CALLER_REMOVE_EMPTY_KW_SPLAT(reg_cfp, calling, ci);
15329 CC_SET_FASTPATH(calling->cc, vm_call_cfunc_with_frame, !rb_splat_or_kwargs_p(ci) && !calling->kw_splat);
15330 return vm_call_cfunc_with_frame(ec, reg_cfp, calling);
15331}
15332static VALUE
15333vm_call_ivar(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15334{
15335 const struct rb_callcache *cc = calling->cc;
15336 ((void)0);
15337 cfp->sp -= 1;
15338 return vm_getivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, ((void *)0), ((void *)0), cc, 1);
15339}
15340static VALUE
15341vm_call_attrset(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15342{
15343 const struct rb_callcache *cc = calling->cc;
15344 ((void)0);
15345 VALUE val = *(cfp->sp - 1);
15346 cfp->sp -= 2;
15347 return vm_setivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, val, ((void *)0), ((void *)0), cc, 1);
15348}static inline
15349_Bool
15350rb_vm_call_ivar_attrset_p(const vm_call_handler ch)
15351{
15352 return (ch == vm_call_ivar || ch == vm_call_attrset);
15353}
15354static inline VALUE
15355vm_call_bmethod_body(rb_execution_context_t *ec, struct rb_calling_info *calling, const VALUE *argv)
15356{
15357 rb_proc_t *proc;
15358 VALUE val;
15359 const struct rb_callcache *cc = calling->cc;
15360 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15361 VALUE procv = cme->def->body.bmethod.proc;
15362 if (!RB_FL_TEST_RAW((procv), RUBY_FL_SHAREABLE) &&
15363 cme->def->body.bmethod.defined_ractor != rb_ractor_self(rb_ec_ractor_ptr(ec))) {
15364 rb_raise(rb_eRuntimeError, "defined with an un-shareable Proc in a different Ractor");
15365 }
15366 (((proc)) = (rb_proc_t*)((struct RData *)(((procv))))->data);
15367 val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat, calling->block_handler, vm_cc_cme(cc));
15368 return val;
15369}
15370static VALUE
15371vm_call_bmethod(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15372{
15373 ((void)0);
15374 VALUE *argv;
15375 int argc;
15376 const struct rb_callinfo *ci = calling->ci;
15377 CALLER_SETUP_ARG(cfp, calling, ci);
15378 argc = calling->argc;
15379 argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (argc))));
15380 ruby_nonempty_memcpy((argv), (cfp->sp - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
15381 cfp->sp += - argc - 1;
15382 return vm_call_bmethod_body(ec, calling, argv);
15383}static inline
15384__attribute__ ((__visibility__("default"))) VALUE
15385rb_find_defined_class_by_owner(VALUE current_class, VALUE target_owner)
15386{
15387 VALUE klass = current_class;
15388 if (RB_TYPE_P(klass, RUBY_T_ICLASS) && RB_FL_TEST(klass, ((VALUE)RUBY_FL_USER5)) &&
15389 RB_TYPE_P(RBASIC_CLASS(klass), RUBY_T_CLASS)) {
15390 klass = RBASIC_CLASS(klass);
15391 }
15392 while (RB_TEST(klass)) {
15393 VALUE owner = RB_TYPE_P(klass, RUBY_T_ICLASS) ? RBASIC_CLASS(klass) : klass;
15394 if (owner == target_owner) {
15395 return klass;
15396 }
15397 klass = RCLASS_SUPER(klass);
15398 }
15399 return current_class;
15400}
15401static const rb_callable_method_entry_t *
15402aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15403{
15404 const rb_method_entry_t *orig_me = me->def->body.alias.original_me;
15405 const rb_callable_method_entry_t *cme;
15406 if (orig_me->defined_class == 0) {
15407 VALUE defined_class = rb_find_defined_class_by_owner(me->defined_class, orig_me->owner);
15408 ((void)0);
15409 cme = rb_method_entry_complement_defined_class(orig_me, me->called_id, defined_class);
15410 if (me->def->alias_count + me->def->complemented_count == 0) {
15411 rb_obj_write((VALUE)(me), __extension__({
15412 ;
15413 ; __typeof__((VALUE *)(&me->def->body.alias.original_me)) unaligned_member_access_result = ((VALUE *)(&me->def->body.alias.original_me));
15414 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.1.3/vm_insnhelper.c", 3159);
15415 }
15416 else {
15417 rb_method_definition_t *def =
15418 rb_method_definition_create(VM_METHOD_TYPE_ALIAS, me->def->original_id);
15419 rb_method_definition_set((rb_method_entry_t *)me, def, (void *)cme);
15420 }
15421 }
15422 else {
15423 cme = (const rb_callable_method_entry_t *)orig_me;
15424 }
15425 ((void)0);
15426 return cme;
15427}static inline
15428const rb_callable_method_entry_t *
15429rb_aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15430{
15431 return aliased_callable_method_entry(me);
15432}
15433static VALUE
15434vm_call_alias(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15435{
15436 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 }, };
15437 return vm_call_method_each_type(ec, cfp, calling);
15438}
15439static enum method_missing_reason
15440ci_missing_reason(const struct rb_callinfo *ci)
15441{
15442 enum method_missing_reason stat = MISSING_NOENTRY;
15443 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
15444 if (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) stat |= MISSING_FCALL;
15445 if (vm_ci_flag(ci) & (0x01 << VM_CALL_SUPER_bit)) stat |= MISSING_SUPER;
15446 return stat;
15447}
15448static VALUE
15449vm_call_symbol(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15450 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE symbol)
15451{
15452 ((__builtin_expect(!!(!!(calling->argc >= 0)), 1)) ? ((void)0) : __builtin_unreachable());
15453 enum method_missing_reason missing_reason = MISSING_NOENTRY;
15454 int argc = calling->argc;
15455 VALUE recv = calling->recv;
15456 VALUE klass = rb_class_of(recv);
15457 ID mid = rb_check_id(&symbol);
15458 int flags = (0x01 << VM_CALL_FCALL_bit) |
15459 (0x01 << VM_CALL_OPT_SEND_bit) |
15460 (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15461 if ((__builtin_expect(!!(! mid), 0))) {
15462 mid = idMethodMissing;
15463 missing_reason = ci_missing_reason(ci);
15464 ec->method_missing_reason = missing_reason;
15465 int i = argc;
15466 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);
15467 (((reg_cfp)->sp) += (((1))));
15468 ((__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))));
15469 argc = ++calling->argc;
15470 if (rb_method_basic_definition_p(klass, idMethodMissing)) {
15471 (*(((((reg_cfp)->sp)))-(i)-1)) = symbol;
15472 int priv = vm_ci_flag(ci) & ((0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_VCALL_bit));
15473 const VALUE *argv = (((((reg_cfp)->sp)))-(argc));
15474 VALUE exc = rb_make_no_method_exception(
15475 rb_eNoMethodError, 0, recv, argc, argv, priv);
15476 rb_exc_raise(exc);
15477 }
15478 else {
15479 (*(((((reg_cfp)->sp)))-(i)-1)) = rb_str_intern(symbol);
15480 }
15481 }
15482 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), };
15483 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 }, };
15484 return vm_call_method(ec, reg_cfp, calling);
15485}
15486static VALUE
15487vm_call_opt_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15488{
15489 ((void)0);
15490 int i;
15491 VALUE sym;
15492 CALLER_SETUP_ARG(reg_cfp, calling, calling->ci);
15493 i = calling->argc - 1;
15494 if (calling->argc == 0) {
15495 rb_raise(rb_eArgError, "no method name given");
15496 }
15497 else {
15498 sym = (*(((((reg_cfp)->sp)))-(i)-1));
15499 if (i > 0) {
15500 ((__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))));
15501 }
15502 calling->argc -= 1;
15503 (((reg_cfp)->sp) -= (((1))));
15504 return vm_call_symbol(ec, reg_cfp, calling, calling->ci, sym);
15505 }
15506}
15507static VALUE
15508vm_call_method_missing_body(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling,
15509 const struct rb_callinfo *orig_ci, enum method_missing_reason reason)
15510{
15511 ((void)0);
15512 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
15513 unsigned int argc;
15514 CALLER_SETUP_ARG(reg_cfp, calling, orig_ci);
15515 argc = calling->argc + 1;
15516 unsigned int flag = (0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15517 calling->argc = argc;
15518 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);
15519 ;
15520 if (argc > 1) {
15521 ((__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))));
15522 }
15523 argv[0] = rb_id2sym(vm_ci_mid(orig_ci));
15524 (((reg_cfp)->sp) += (((1))));
15525 ec->method_missing_reason = reason;
15526 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), };
15527 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 }, };
15528 return vm_call_method(ec, reg_cfp, calling);
15529}
15530static VALUE
15531vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15532{
15533 return vm_call_method_missing_body(ec, reg_cfp, calling, calling->ci, vm_cc_cmethod_missing_reason(calling->cc));
15534}
15535static const rb_callable_method_entry_t *refined_method_callable_without_refinement(const rb_callable_method_entry_t *me);
15536static VALUE
15537vm_call_zsuper(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, VALUE klass)
15538{
15539 klass = RCLASS_SUPER(klass);
15540 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, vm_ci_mid(calling->ci)) : ((void *)0);
15541 if (cme == ((void *)0)) {
15542 return vm_call_method_nome(ec, cfp, calling);
15543 }
15544 if (cme->def->type == VM_METHOD_TYPE_REFINED &&
15545 cme->def->body.refined.orig_me) {
15546 cme = refined_method_callable_without_refinement(cme);
15547 }
15548 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 }, };
15549 return vm_call_method_each_type(ec, cfp, calling);
15550}
15551static inline VALUE
15552find_refinement(VALUE refinements, VALUE klass)
15553{
15554 if (RB_NIL_P(refinements)) {
15555 return ((VALUE)RUBY_Qnil);
15556 }
15557 return rb_hash_lookup(refinements, klass);
15558}
15559__attribute__((__pure__)) static rb_control_frame_t * current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
15560static rb_control_frame_t *
15561current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp)
15562{
15563 rb_control_frame_t *top_cfp = cfp;
15564 if (cfp->iseq && cfp->iseq->body->type == ISEQ_TYPE_BLOCK) {
15565 const rb_iseq_t *local_iseq = cfp->iseq->body->local_iseq;
15566 do {
15567 cfp = ((cfp)+1);
15568 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
15569 return top_cfp;
15570 }
15571 } while (cfp->iseq != local_iseq);
15572 }
15573 return cfp;
15574}
15575static const rb_callable_method_entry_t *
15576refined_method_callable_without_refinement(const rb_callable_method_entry_t *me)
15577{
15578 const rb_method_entry_t *orig_me = me->def->body.refined.orig_me;
15579 const rb_callable_method_entry_t *cme;
15580 if (orig_me->defined_class == 0) {
15581 cme = ((void *)0);
15582 rb_notimplement();
15583 }
15584 else {
15585 cme = (const rb_callable_method_entry_t *)orig_me;
15586 }
15587 ((void)0);
15588 if ((!(cme) || !(cme)->def || (cme)->def->type == VM_METHOD_TYPE_UNDEF)) {
15589 cme = ((void *)0);
15590 }
15591 return cme;
15592}
15593static const rb_callable_method_entry_t *
15594search_refined_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15595{
15596 ID mid = vm_ci_mid(calling->ci);
15597 const rb_cref_t *cref = vm_get_cref(cfp->ep);
15598 const struct rb_callcache * const cc = calling->cc;
15599 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15600 for (; cref; cref = CREF_NEXT(cref)) {
15601 const VALUE refinement = find_refinement(CREF_REFINEMENTS(cref), vm_cc_cme(cc)->owner);
15602 if (RB_NIL_P(refinement)) continue;
15603 const rb_callable_method_entry_t *const ref_me =
15604 rb_callable_method_entry(refinement, mid);
15605 if (ref_me) {
15606 if (vm_cc_call(cc) == vm_call_super_method) {
15607 const rb_control_frame_t *top_cfp = current_method_entry(ec, cfp);
15608 const rb_callable_method_entry_t *top_me = rb_vm_frame_method_entry(top_cfp);
15609 if (top_me && rb_method_definition_eq(ref_me->def, top_me->def)) {
15610 continue;
15611 }
15612 }
15613 if (cme->def->type != VM_METHOD_TYPE_REFINED ||
15614 cme->def != ref_me->def) {
15615 cme = ref_me;
15616 }
15617 if (ref_me->def->type != VM_METHOD_TYPE_REFINED) {
15618 return cme;
15619 }
15620 }
15621 else {
15622 return ((void *)0);
15623 }
15624 }
15625 if (vm_cc_cme(cc)->def->body.refined.orig_me) {
15626 return refined_method_callable_without_refinement(vm_cc_cme(cc));
15627 }
15628 else {
15629 VALUE klass = RCLASS_SUPER(vm_cc_cme(cc)->defined_class);
15630 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, mid) : ((void *)0);
15631 return cme;
15632 }
15633}
15634static VALUE
15635vm_call_refined(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15636{
15637 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 }, };
15638 if (vm_cc_cme(ref_cc)) {
15639 calling->cc= ref_cc;
15640 return vm_call_method(ec, cfp, calling);
15641 }
15642 else {
15643 return vm_call_method_nome(ec, cfp, calling);
15644 }
15645}
15646static 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);
15647__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);
15648static VALUE
15649vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15650 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler)
15651{
15652 int argc = calling->argc;
15653 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))));
15654 (((reg_cfp)->sp) -= (((1))));
15655 return vm_invoke_block(ec, reg_cfp, calling, ci, 0, block_handler);
15656}
15657static VALUE
15658vm_call_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15659{
15660 ((void)0);
15661 const struct rb_callinfo *ci = calling->ci;
15662 VALUE procval = calling->recv;
15663 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, VM_BH_FROM_PROC(procval));
15664}
15665static VALUE
15666vm_call_opt_block_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15667{
15668 ((void)0);
15669 VALUE block_handler = VM_ENV_BLOCK_HANDLER(VM_CF_LEP(reg_cfp));
15670 const struct rb_callinfo *ci = calling->ci;
15671 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_CALL)]&((1 << 12))) == 0), 1)))) {
15672 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, block_handler);
15673 }
15674 else {
15675 calling->recv = rb_vm_bh_to_procval(ec, block_handler);
15676 calling->cc = rb_vm_search_method_slowpath(ci, rb_class_of(calling->recv));
15677 return vm_call_general(ec, reg_cfp, calling);
15678 }
15679}
15680static VALUE
15681vm_call_opt_struct_aref0(rb_execution_context_t *ec, struct rb_calling_info *calling)
15682{
15683 VALUE recv = calling->recv;
15684 ((void)0);
15685 ((void)0);
15686 ((void)0);
15687 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
15688 return internal_RSTRUCT_GET(recv, off);
15689}
15690static VALUE
15691vm_call_opt_struct_aref(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15692{
15693 ((void)0);
15694 VALUE ret = vm_call_opt_struct_aref0(ec, calling);
15695 reg_cfp->sp -= 1;
15696 return ret;
15697}
15698static VALUE
15699vm_call_opt_struct_aset0(rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE val)
15700{
15701 VALUE recv = calling->recv;
15702 ((void)0);
15703 ((void)0);
15704 ((void)0);
15705 rb_check_frozen_inline(recv);
15706 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
15707 internal_RSTRUCT_SET(recv, off, val);
15708 return val;
15709}
15710static VALUE
15711vm_call_opt_struct_aset(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15712{
15713 ((void)0);
15714 VALUE ret = vm_call_opt_struct_aset0(ec, calling, *(reg_cfp->sp - 1));
15715 reg_cfp->sp -= 2;
15716 return ret;
15717}
15718__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);
15719static VALUE
15720vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
15721 const struct rb_callinfo *ci, const struct rb_callcache *cc)
15722{
15723 switch (vm_cc_cme(cc)->def->body.optimized.type) {
15724 case OPTIMIZED_METHOD_TYPE_SEND:
15725 CC_SET_FASTPATH(cc, vm_call_opt_send, 1);
15726 return vm_call_opt_send(ec, cfp, calling);
15727 case OPTIMIZED_METHOD_TYPE_CALL:
15728 CC_SET_FASTPATH(cc, vm_call_opt_call, 1);
15729 return vm_call_opt_call(ec, cfp, calling);
15730 case OPTIMIZED_METHOD_TYPE_BLOCK_CALL:
15731 CC_SET_FASTPATH(cc, vm_call_opt_block_call, 1);
15732 return vm_call_opt_block_call(ec, cfp, calling);
15733 case OPTIMIZED_METHOD_TYPE_STRUCT_AREF:
15734 CALLER_SETUP_ARG(cfp, calling, ci);
15735 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15736 rb_check_arity(calling->argc, 0, 0);
15737 CC_SET_FASTPATH(cc, vm_call_opt_struct_aref, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
15738 return vm_call_opt_struct_aref(ec, cfp, calling);
15739 case OPTIMIZED_METHOD_TYPE_STRUCT_ASET:
15740 CALLER_SETUP_ARG(cfp, calling, ci);
15741 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15742 rb_check_arity(calling->argc, 1, 1);
15743 CC_SET_FASTPATH(cc, vm_call_opt_struct_aset, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
15744 return vm_call_opt_struct_aset(ec, cfp, calling);
15745 default:
15746 rb_bug("vm_call_method: unsupported optimized method type (%d)", vm_cc_cme(cc)->def->body.optimized.type);
15747 }
15748}
15749COLDFUNC static VALUE
15750vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
15751 const struct rb_callinfo *ci = calling->ci;
15752 const struct rb_callcache *cc = calling->cc;
15753 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15754 VALUE v;
15755 switch (cme->def->type) {
15756 case VM_METHOD_TYPE_ISEQ:
15757 CC_SET_FASTPATH(cc, vm_call_iseq_setup, 1);
15758 return vm_call_iseq_setup(ec, cfp, calling);
15759 case VM_METHOD_TYPE_NOTIMPLEMENTED:
15760 case VM_METHOD_TYPE_CFUNC:
15761 CC_SET_FASTPATH(cc, vm_call_cfunc, 1);
15762 return vm_call_cfunc(ec, cfp, calling);
15763 case VM_METHOD_TYPE_ATTRSET:
15764 CALLER_SETUP_ARG(cfp, calling, ci);
15765 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15766 rb_check_arity(calling->argc, 1, 1);
15767 vm_cc_attr_index_set(cc, 0);
15768 const unsigned int aset_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KWARG_bit));
15769 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); };
15770 return v;
15771 case VM_METHOD_TYPE_IVAR:
15772 CALLER_SETUP_ARG(cfp, calling, ci);
15773 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15774 rb_check_arity(calling->argc, 0, 0);
15775 vm_cc_attr_index_set(cc, 0);
15776 const unsigned int ivar_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit));
15777 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); };
15778 return v;
15779 case VM_METHOD_TYPE_MISSING:
15780 vm_cc_method_missing_reason_set(cc, 0);
15781 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
15782 return vm_call_method_missing(ec, cfp, calling);
15783 case VM_METHOD_TYPE_BMETHOD:
15784 CC_SET_FASTPATH(cc, vm_call_bmethod, 1);
15785 return vm_call_bmethod(ec, cfp, calling);
15786 case VM_METHOD_TYPE_ALIAS:
15787 CC_SET_FASTPATH(cc, vm_call_alias, 1);
15788 return vm_call_alias(ec, cfp, calling);
15789 case VM_METHOD_TYPE_OPTIMIZED:
15790 return vm_call_optimized(ec, cfp, calling, ci, cc);
15791 case VM_METHOD_TYPE_UNDEF:
15792 break;
15793 case VM_METHOD_TYPE_ZSUPER:
15794 return vm_call_zsuper(ec, cfp, calling, ((((struct RClass *)(vm_cc_cme(cc)->defined_class))->ptr)->origin_));
15795 case VM_METHOD_TYPE_REFINED:
15796 return vm_call_refined(ec, cfp, calling);
15797 }
15798 rb_bug("vm_call_method: unsupported method type (%d)", vm_cc_cme(cc)->def->type);
15799}
15800__attribute__((__noreturn__)) static void vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj, int call_status);
15801static VALUE
15802vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15803{
15804 const struct rb_callinfo *ci = calling->ci;
15805 const int stat = ci_missing_reason(ci);
15806 if (vm_ci_mid(ci) == idMethodMissing) {
15807 rb_control_frame_t *reg_cfp = cfp;
15808 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
15809 vm_raise_method_missing(ec, calling->argc, argv, calling->recv, stat);
15810 }
15811 else {
15812 return vm_call_method_missing_body(ec, cfp, calling, ci, stat);
15813 }
15814}
15815static inline VALUE
15816vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15817{
15818 const struct rb_callinfo *ci = calling->ci;
15819 const struct rb_callcache *cc = calling->cc;
15820 ((void)0);
15821 if (vm_cc_cme(cc) != ((void *)0)) {
15822 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
15823 case METHOD_VISI_PUBLIC:
15824 return vm_call_method_each_type(ec, cfp, calling);
15825 case METHOD_VISI_PRIVATE:
15826 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit))) {
15827 enum method_missing_reason stat = MISSING_PRIVATE;
15828 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
15829 vm_cc_method_missing_reason_set(cc, stat);
15830 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
15831 return vm_call_method_missing(ec, cfp, calling);
15832 }
15833 return vm_call_method_each_type(ec, cfp, calling);
15834 case METHOD_VISI_PROTECTED:
15835 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_OPT_SEND_bit))) {
15836 if (!rb_obj_is_kind_of(cfp->self, vm_cc_cme(cc)->defined_class)) {
15837 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
15838 return vm_call_method_missing(ec, cfp, calling);
15839 }
15840 else {
15841 ((void)0);
15842 struct rb_callcache cc_on_stack = *cc;
15843 RB_FL_SET_RAW((VALUE)&cc_on_stack, ((VALUE)RUBY_FL_USER4));
15844 calling->cc = &cc_on_stack;
15845 return vm_call_method_each_type(ec, cfp, calling);
15846 }
15847 }
15848 return vm_call_method_each_type(ec, cfp, calling);
15849 default:
15850 rb_bug("unreachable");
15851 }
15852 }
15853 else {
15854 return vm_call_method_nome(ec, cfp, calling);
15855 }
15856}
15857static VALUE
15858vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15859{
15860 ((void)0);
15861 return vm_call_method(ec, reg_cfp, calling);
15862}static inline
15863void
15864rb_vm_cc_general(const struct rb_callcache *cc)
15865{
15866 ((void)0);
15867 ((void)0);
15868 *(vm_call_handler *)&cc->call_ = vm_call_general;
15869}
15870static VALUE
15871vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15872{
15873 ((void)0);
15874 if (ec == ((void *)0)) rb_bug("unreachable");
15875 ((void)0);
15876 return vm_call_method(ec, reg_cfp, calling);
15877}
15878static inline VALUE
15879vm_search_normal_superclass(VALUE klass)
15880{
15881 if (RB_BUILTIN_TYPE(klass) == RUBY_T_ICLASS &&
15882 RB_FL_TEST_RAW(((struct RBasic *)(klass))->klass, RMODULE_IS_REFINEMENT)) {
15883 klass = ((struct RBasic *)(klass))->klass;
15884 }
15885 klass = ((((struct RClass *)(klass))->ptr)->origin_);
15886 return RCLASS_SUPER(klass);
15887}
15888__attribute__((__noreturn__)) static void vm_super_outside(void);
15889static void
15890vm_super_outside(void)
15891{
15892 rb_raise(rb_eNoMethodError, "super called outside of method");
15893}
15894static const struct rb_callcache *
15895empty_cc_for_super(void)
15896{
15897 return rb_vm_empty_cc_for_super();
15898}
15899static const struct rb_callcache *
15900vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *cd, VALUE recv)
15901{
15902 VALUE current_defined_class;
15903 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
15904 if (!me) {
15905 vm_super_outside();
15906 }
15907 current_defined_class = me->defined_class;
15908 if (!RB_NIL_P(((((struct RClass *)(current_defined_class))->ptr)->refined_class))) {
15909 current_defined_class = ((((struct RClass *)(current_defined_class))->ptr)->refined_class);
15910 }
15911 if (RB_BUILTIN_TYPE(current_defined_class) != RUBY_T_MODULE &&
15912 !RB_FL_TEST_RAW(current_defined_class, RMODULE_INCLUDED_INTO_REFINEMENT) &&
15913 reg_cfp->iseq != method_entry_iseqptr(me) &&
15914 !rb_obj_is_kind_of(recv, current_defined_class)) {
15915 VALUE m = RB_TYPE_P(current_defined_class, RUBY_T_ICLASS) ?
15916 ((((struct RClass *)(current_defined_class))->ptr)->includer) : current_defined_class;
15917 if (m) {
15918 rb_raise(rb_eTypeError,
15919 "self has wrong type to call super in this context: "
15920 "%""l""i" "\v"" (expected %""l""i" "\v"")",
15921 rb_obj_class(recv), m);
15922 }
15923 }
15924 if (me->def->type == VM_METHOD_TYPE_BMETHOD && (vm_ci_flag(cd->ci) & (0x01 << VM_CALL_ZSUPER_bit))) {
15925 rb_raise(rb_eRuntimeError,
15926 "implicit argument passing of super from method defined"
15927 " by define_method() is not supported."
15928 " Specify all arguments explicitly.");
15929 }
15930 ID mid = me->def->original_id;
15931 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);
15932 (rb_obj_written((VALUE)(reg_cfp->iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cd->ci), "../ruby-3.1.3/vm_insnhelper.c", 3872));
15933 const struct rb_callcache *cc;
15934 VALUE klass = vm_search_normal_superclass(me->defined_class);
15935 if (!klass) {
15936 cc = vm_cc_new(klass, ((void *)0), vm_call_method_missing);
15937 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
15938 ;
15939 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
15940 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.1.3/vm_insnhelper.c", 3881);
15941 }
15942 else {
15943 cc = vm_search_method_fastpath((VALUE)reg_cfp->iseq, cd, klass);
15944 const rb_callable_method_entry_t *cached_cme = vm_cc_cme(cc);
15945 if (cached_cme == ((void *)0)) {
15946 cd->cc = empty_cc_for_super();
15947 }
15948 else if (cached_cme->called_id != mid) {
15949 const rb_callable_method_entry_t *cme = rb_callable_method_entry(klass, mid);
15950 if (cme) {
15951 cc = vm_cc_new(klass, cme, vm_call_super_method);
15952 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
15953 ;
15954 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
15955 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.1.3/vm_insnhelper.c", 3896);
15956 }
15957 else {
15958 cd->cc = cc = empty_cc_for_super();
15959 }
15960 }
15961 else {
15962 switch (cached_cme->def->type) {
15963 case VM_METHOD_TYPE_REFINED:
15964 case VM_METHOD_TYPE_ATTRSET:
15965 case VM_METHOD_TYPE_IVAR:
15966 vm_cc_call_set(cc, vm_call_super_method);
15967 break;
15968 default:
15969 break;
15970 }
15971 }
15972 }
15973 ((void)0);
15974 return cc;
15975}
15976static inline int
15977block_proc_is_lambda(const VALUE procval)
15978{
15979 rb_proc_t *proc;
15980 if (procval) {
15981 (((proc)) = (rb_proc_t*)((struct RData *)(((procval))))->data);
15982 return proc->is_lambda;
15983 }
15984 else {
15985 return 0;
15986 }
15987}
15988static VALUE
15989vm_yield_with_cfunc(rb_execution_context_t *ec,
15990 const struct rb_captured_block *captured,
15991 VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
15992 const rb_callable_method_entry_t *me)
15993{
15994 int is_lambda = 0;
15995 VALUE val, arg, blockarg;
15996 int frame_flag;
15997 const struct vm_ifunc *ifunc = captured->code.ifunc;
15998 if (is_lambda) {
15999 arg = rb_ary_new_from_values(argc, argv);
16000 }
16001 else if (argc == 0) {
16002 arg = ((VALUE)RUBY_Qnil);
16003 }
16004 else {
16005 arg = argv[0];
16006 }
16007 blockarg = rb_vm_bh_to_procval(ec, block_handler);
16008 frame_flag = VM_FRAME_MAGIC_IFUNC | VM_FRAME_FLAG_CFRAME | (me ? VM_FRAME_FLAG_BMETHOD : 0);
16009 if (kw_splat) {
16010 frame_flag |= VM_FRAME_FLAG_CFRAME_KW;
16011 }
16012 vm_push_frame(ec, (const rb_iseq_t *)captured->code.ifunc,
16013 frame_flag,
16014 self,
16015 ((VALUE)((captured->ep)) | (0x01)),
16016 (VALUE)me,
16017 0, ec->cfp->sp, 0, 0);
16018 val = (*ifunc->func)(arg, (VALUE)ifunc->data, argc, argv, blockarg);
16019 rb_vm_pop_frame(ec);
16020 return val;
16021}
16022static VALUE
16023vm_yield_with_symbol(rb_execution_context_t *ec, VALUE symbol, int argc, const VALUE *argv, int kw_splat, VALUE block_handler)
16024{
16025 return rb_sym_proc_call(rb_sym2id(symbol), argc, argv, kw_splat, rb_vm_bh_to_procval(ec, block_handler));
16026}
16027static inline int
16028vm_callee_setup_block_arg_arg0_splat(rb_control_frame_t *cfp, const rb_iseq_t *iseq, VALUE *argv, VALUE ary)
16029{
16030 int i;
16031 long len = rb_array_len(ary);
16032 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);
16033 for (i=0; i<len && i<iseq->body->param.lead_num; i++) {
16034 argv[i] = RARRAY_AREF(ary, i);
16035 }
16036 return i;
16037}
16038static inline VALUE
16039vm_callee_setup_block_arg_arg0_check(VALUE *argv)
16040{
16041 VALUE ary, arg0 = argv[0];
16042 ary = rb_check_array_type(arg0);
16043 ((void)0);
16044 return ary;
16045}
16046static int
16047vm_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)
16048{
16049 if (rb_simple_iseq_p(iseq)) {
16050 rb_control_frame_t *cfp = ec->cfp;
16051 VALUE arg0;
16052 CALLER_SETUP_ARG(cfp, calling, ci);
16053 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16054 if (arg_setup_type == arg_setup_block &&
16055 calling->argc == 1 &&
16056 iseq->body->param.flags.has_lead &&
16057 !iseq->body->param.flags.ambiguous_param0 &&
16058 !RB_NIL_P(arg0 = vm_callee_setup_block_arg_arg0_check(argv))) {
16059 calling->argc = vm_callee_setup_block_arg_arg0_splat(cfp, iseq, argv, arg0);
16060 }
16061 if (calling->argc != iseq->body->param.lead_num) {
16062 if (arg_setup_type == arg_setup_block) {
16063 if (calling->argc < iseq->body->param.lead_num) {
16064 int i;
16065 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);
16066 for (i=calling->argc; i<iseq->body->param.lead_num; i++) argv[i] = ((VALUE)RUBY_Qnil);
16067 calling->argc = iseq->body->param.lead_num;
16068 }
16069 else if (calling->argc > iseq->body->param.lead_num) {
16070 calling->argc = iseq->body->param.lead_num;
16071 }
16072 }
16073 else {
16074 argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
16075 }
16076 }
16077 return 0;
16078 }
16079 else {
16080 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_type);
16081 }
16082}
16083static int
16084vm_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)
16085{
16086 struct rb_calling_info calling_entry, *calling;
16087 calling = &calling_entry;
16088 calling->argc = argc;
16089 calling->block_handler = block_handler;
16090 calling->kw_splat = kw_splat;
16091 calling->recv = ((VALUE)RUBY_Qundef);
16092 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, };
16093 return vm_callee_setup_block_arg(ec, calling, &dummy_ci, iseq, argv, arg_setup_type);
16094}
16095static VALUE
16096vm_invoke_iseq_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16097 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16098 _Bool is_lambda, VALUE block_handler)
16099{
16100 const struct rb_captured_block *captured = VM_BH_TO_ISEQ_BLOCK(block_handler);
16101 const rb_iseq_t *iseq = rb_iseq_check(captured->code.iseq);
16102 const int arg_size = iseq->body->param.size;
16103 VALUE * const rsp = ((((reg_cfp)->sp))) - calling->argc;
16104 int opt_pc = vm_callee_setup_block_arg(ec, calling, ci, iseq, rsp, is_lambda ? arg_setup_method : arg_setup_block);
16105 (((reg_cfp)->sp) = (((rsp))));
16106 vm_push_frame(ec, iseq,
16107 VM_FRAME_MAGIC_BLOCK | (is_lambda ? VM_FRAME_FLAG_LAMBDA : 0),
16108 captured->self,
16109 ((VALUE)((captured->ep)) | (0x01)), 0,
16110 iseq->body->iseq_encoded + opt_pc,
16111 rsp + arg_size,
16112 iseq->body->local_table_size - arg_size, iseq->body->stack_max);
16113 return ((VALUE)RUBY_Qundef);
16114}
16115static VALUE
16116vm_invoke_symbol_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16117 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16118 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16119{
16120 if (calling->argc < 1) {
16121 rb_raise(rb_eArgError, "no receiver given");
16122 }
16123 else {
16124 VALUE symbol = VM_BH_TO_SYMBOL(block_handler);
16125 CALLER_SETUP_ARG(reg_cfp, calling, ci);
16126 calling->recv = (*(((((reg_cfp)->sp)))-(--calling->argc)-1));
16127 return vm_call_symbol(ec, reg_cfp, calling, ci, symbol);
16128 }
16129}
16130static VALUE
16131vm_invoke_ifunc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16132 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16133 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16134{
16135 VALUE val;
16136 int argc;
16137 const struct rb_captured_block *captured = VM_BH_TO_IFUNC_BLOCK(block_handler);
16138 CALLER_SETUP_ARG(ec->cfp, calling, ci);
16139 CALLER_REMOVE_EMPTY_KW_SPLAT(ec->cfp, calling, ci);
16140 argc = calling->argc;
16141 val = vm_yield_with_cfunc(ec, captured, captured->self, argc, (((((reg_cfp)->sp)))-(argc)), calling->kw_splat, calling->block_handler, ((void *)0));
16142 ((((reg_cfp)->sp) -= (((argc)))));
16143 return val;
16144}
16145static VALUE
16146vm_proc_to_block_handler(VALUE procval)
16147{
16148 const struct rb_block *block = vm_proc_block(procval);
16149 switch (vm_block_type(block)) {
16150 case block_type_iseq:
16151 return VM_BH_FROM_ISEQ_BLOCK(&block->as.captured);
16152 case block_type_ifunc:
16153 return VM_BH_FROM_IFUNC_BLOCK(&block->as.captured);
16154 case block_type_symbol:
16155 return VM_BH_FROM_SYMBOL(block->as.symbol);
16156 case block_type_proc:
16157 return VM_BH_FROM_PROC(block->as.proc);
16158 }
16159 __builtin_unreachable();
16160 return ((VALUE)RUBY_Qundef);
16161}
16162static VALUE
16163vm_invoke_proc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16164 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16165 _Bool is_lambda, VALUE block_handler)
16166{
16167 while (vm_block_handler_type(block_handler) == block_handler_type_proc) {
16168 VALUE proc = VM_BH_TO_PROC(block_handler);
16169 is_lambda = block_proc_is_lambda(proc);
16170 block_handler = vm_proc_to_block_handler(proc);
16171 }
16172 return vm_invoke_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16173}
16174static inline VALUE
16175vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16176 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16177 _Bool is_lambda, VALUE block_handler)
16178{
16179 VALUE (*func)(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16180 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16181 _Bool is_lambda, VALUE block_handler);
16182 switch (vm_block_handler_type(block_handler)) {
16183 case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
16184 case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
16185 case block_handler_type_proc: func = vm_invoke_proc_block; break;
16186 case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
16187 default: rb_bug("vm_invoke_block: unreachable");
16188 }
16189 return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16190}
16191static VALUE
16192vm_make_proc_with_iseq(const rb_iseq_t *blockiseq)
16193{
16194 const rb_execution_context_t *ec = rb_current_execution_context(1);
16195 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16196 struct rb_captured_block *captured;
16197 if (cfp == 0) {
16198 rb_bug("vm_make_proc_with_iseq: unreachable");
16199 }
16200 captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
16201 captured->code.iseq = blockiseq;
16202 return rb_vm_make_proc(ec, captured, rb_cProc);
16203}
16204static VALUE
16205vm_once_exec(VALUE iseq)
16206{
16207 VALUE proc = vm_make_proc_with_iseq((rb_iseq_t *)iseq);
16208 return rb_proc_call_with_block(proc, 0, 0, ((VALUE)RUBY_Qnil));
16209}
16210static VALUE
16211vm_once_clear(VALUE data)
16212{
16213 union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)data;
16214 is->once.running_thread = ((void *)0);
16215 return ((VALUE)RUBY_Qnil);
16216}
16217static _Bool
16218check_respond_to_missing(VALUE obj, VALUE v)
16219{
16220 VALUE args[2];
16221 VALUE r;
16222 args[0] = obj; args[1] = ((VALUE)RUBY_Qfalse);
16223 r = rb_check_funcall(v, idRespond_to_missing, 2, args);
16224 if (r != ((VALUE)RUBY_Qundef) && RB_TEST(r)) {
16225 return 1;
16226 }
16227 else {
16228 return 0;
16229 }
16230}
16231static _Bool
16232vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16233{
16234 VALUE klass;
16235 enum defined_type type = (enum defined_type)op_type;
16236 switch (type) {
16237 case DEFINED_IVAR:
16238 return rb_ivar_defined((((((reg_cfp)))->self)), rb_sym2id(obj));
16239 break;
16240 case DEFINED_GVAR:
16241 return rb_gvar_defined(rb_sym2id(obj));
16242 break;
16243 case DEFINED_CVAR: {
16244 const rb_cref_t *cref = vm_get_cref(((((reg_cfp)->ep))));
16245 klass = vm_get_cvar_base(cref, (((reg_cfp))), 0);
16246 return rb_cvar_defined(klass, rb_sym2id(obj));
16247 break;
16248 }
16249 case DEFINED_CONST:
16250 case DEFINED_CONST_FROM: {
16251 _Bool allow_nil = type == DEFINED_CONST;
16252 klass = v;
16253 return vm_get_ev_const(ec, klass, rb_sym2id(obj), allow_nil, 1);
16254 break;
16255 }
16256 case DEFINED_FUNC:
16257 klass = rb_class_of(v);
16258 return rb_ec_obj_respond_to(ec, v, rb_sym2id(obj), 1);
16259 break;
16260 case DEFINED_METHOD:{
16261 VALUE klass = rb_class_of(v);
16262 const rb_method_entry_t *me = rb_method_entry_with_refinements(klass, rb_sym2id(obj), ((void *)0));
16263 if (me) {
16264 switch ((rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16265 case METHOD_VISI_PRIVATE:
16266 break;
16267 case METHOD_VISI_PROTECTED:
16268 if (!rb_obj_is_kind_of((((((reg_cfp)))->self)), rb_class_real(me->defined_class))) {
16269 break;
16270 }
16271 case METHOD_VISI_PUBLIC:
16272 return 1;
16273 break;
16274 default:
16275 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)));
16276 }
16277 }
16278 else {
16279 return check_respond_to_missing(obj, v);
16280 }
16281 break;
16282 }
16283 case DEFINED_YIELD:
16284 if (((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]) != 0) {
16285 return 1;
16286 }
16287 break;
16288 case DEFINED_ZSUPER:
16289 {
16290 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry((((reg_cfp))));
16291 if (me) {
16292 VALUE klass = vm_search_normal_superclass(me->defined_class);
16293 ID id = me->def->original_id;
16294 return rb_method_boundp(klass, id, 0);
16295 }
16296 }
16297 break;
16298 case DEFINED_REF:{
16299 return vm_getspecial(ec, (VM_EP_LEP(((((reg_cfp)->ep))))), ((VALUE)RUBY_Qfalse), RB_FIX2INT(obj)) != ((VALUE)RUBY_Qnil);
16300 break;
16301 }
16302 default:
16303 rb_bug("unimplemented defined? type (VM)");
16304 break;
16305 }
16306 return 0;
16307}static inline
16308_Bool
16309rb_vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16310{
16311 return vm_defined(ec, reg_cfp, op_type, obj, v);
16312}
16313static const VALUE *
16314vm_get_ep(const VALUE *const reg_ep, rb_num_t lv)
16315{
16316 rb_num_t i;
16317 const VALUE *ep = reg_ep;
16318 for (i = 0; i < lv; i++) {
16319 ep = ((VALUE *)((ep)[(-1)] & ~0x03));
16320 }
16321 return ep;
16322}
16323static VALUE
16324vm_get_special_object(const VALUE *const reg_ep,
16325 enum vm_special_object_type type)
16326{
16327 switch (type) {
16328 case VM_SPECIAL_OBJECT_VMCORE:
16329 return rb_mRubyVMFrozenCore;
16330 case VM_SPECIAL_OBJECT_CBASE:
16331 return vm_get_cbase(reg_ep);
16332 case VM_SPECIAL_OBJECT_CONST_BASE:
16333 return vm_get_const_base(reg_ep);
16334 default:
16335 rb_bug("putspecialobject insn: unknown value_type %d", type);
16336 }
16337}
16338static VALUE
16339vm_concat_array(VALUE ary1, VALUE ary2st)
16340{
16341 const VALUE ary2 = ary2st;
16342 VALUE tmp1 = rb_check_to_array(ary1);
16343 VALUE tmp2 = rb_check_to_array(ary2);
16344 if (RB_NIL_P(tmp1)) {
16345 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); });
16346 }
16347 if (RB_NIL_P(tmp2)) {
16348 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); });
16349 }
16350 if (tmp1 == ary1) {
16351 tmp1 = rb_ary_dup(ary1);
16352 }
16353 return rb_ary_concat(tmp1, tmp2);
16354}
16355static VALUE
16356vm_splat_array(VALUE flag, VALUE ary)
16357{
16358 VALUE tmp = rb_check_to_array(ary);
16359 if (RB_NIL_P(tmp)) {
16360 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); });
16361 }
16362 else if (RB_TEST(flag)) {
16363 return rb_ary_dup(tmp);
16364 }
16365 else {
16366 return tmp;
16367 }
16368}static inline
16369VALUE
16370rb_vm_splat_array(VALUE flag, VALUE ary)
16371{
16372 return vm_splat_array(flag, ary);
16373}
16374static VALUE
16375vm_check_match(rb_execution_context_t *ec, VALUE target, VALUE pattern, rb_num_t flag)
16376{
16377 enum vm_check_match_type type = ((int)flag) & 0x03;
16378 if (flag & 0x04) {
16379 long i;
16380 const long n = rb_array_len(pattern);
16381 for (i = 0; i < n; i++) {
16382 VALUE v = RARRAY_AREF(pattern, i);
16383 VALUE c = check_match(ec, v, target, type);
16384 if (RB_TEST(c)) {
16385 return c;
16386 }
16387 }
16388 return ((VALUE)RUBY_Qfalse);
16389 }
16390 else {
16391 return check_match(ec, pattern, target, type);
16392 }
16393}
16394static VALUE
16395vm_check_keyword(lindex_t bits, lindex_t idx, const VALUE *ep)
16396{
16397 const VALUE kw_bits = *(ep - bits);
16398 if (RB_FIXNUM_P(kw_bits)) {
16399 unsigned int b = (unsigned int)rb_fix2ulong(kw_bits);
16400 if ((idx < (32-1)) && (b & (0x01 << idx)))
16401 return ((VALUE)RUBY_Qfalse);
16402 }
16403 else {
16404 ((void)0);
16405 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);
16406 }
16407 return ((VALUE)RUBY_Qtrue);
16408}
16409static void
16410vm_dtrace(rb_event_flag_t flag, rb_execution_context_t *ec)
16411{
16412 if (0 ||
16413 0 ||
16414 0 ||
16415 0) {
16416 switch (flag) {
16417 case 0x0008:
16418 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);
16419 return;
16420 case 0x0020:
16421 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);
16422 return;
16423 case 0x0010:
16424 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);
16425 return;
16426 case 0x0040:
16427 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);
16428 return;
16429 }
16430 }
16431}
16432static VALUE
16433vm_const_get_under(ID id, rb_num_t flags, VALUE cbase)
16434{
16435 VALUE ns;
16436 if ((ns = vm_search_const_defined_class(cbase, id)) == 0) {
16437 return ns;
16438 }
16439 else if (((flags) & 0x08)) {
16440 return rb_public_const_get_at(ns, id);
16441 }
16442 else {
16443 return rb_const_get_at(ns, id);
16444 }
16445}
16446static VALUE
16447vm_check_if_class(ID id, rb_num_t flags, VALUE super, VALUE klass)
16448{
16449 if (!RB_TYPE_P(klass, RUBY_T_CLASS)) {
16450 return 0;
16451 }
16452 else if (((flags) & 0x10)) {
16453 VALUE tmp = rb_class_real(RCLASS_SUPER(klass));
16454 if (tmp != super) {
16455 rb_raise(rb_eTypeError,
16456 "superclass mismatch for class %""l""i" "\v""",
16457 rb_id2str(id));
16458 }
16459 else {
16460 return klass;
16461 }
16462 }
16463 else {
16464 return klass;
16465 }
16466}
16467static VALUE
16468vm_check_if_module(ID id, VALUE mod)
16469{
16470 if (!RB_TYPE_P(mod, RUBY_T_MODULE)) {
16471 return 0;
16472 }
16473 else {
16474 return mod;
16475 }
16476}
16477static VALUE
16478declare_under(ID id, VALUE cbase, VALUE c)
16479{
16480 rb_set_class_path_string(c, cbase, rb_id2str(id));
16481 rb_const_set(cbase, id, c);
16482 return c;
16483}
16484static VALUE
16485vm_declare_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16486{
16487 VALUE s = ((flags) & 0x10) ? super : rb_cObject;
16488 VALUE c = declare_under(id, cbase, rb_define_class_id(id, s));
16489 rb_define_alloc_func(c, rb_get_alloc_func(c));
16490 rb_class_inherited(s, c);
16491 return c;
16492}
16493static VALUE
16494vm_declare_module(ID id, VALUE cbase)
16495{
16496 return declare_under(id, cbase, rb_module_new());
16497}
16498__attribute__((__noreturn__)) static void unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old);
16499static void
16500unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old)
16501{
16502 VALUE name = rb_id2str(id);
16503 VALUE message = rb_sprintf("%""l""i" "\v"" is not a %s",
16504 name, type);
16505 VALUE location = rb_const_source_location_at(cbase, id);
16506 if (!RB_NIL_P(location)) {
16507 rb_str_catf(message, "\n%""l""i" "\v"":%""l""i" "\v"":"
16508 " previous definition of %""l""i" "\v"" was here",
16509 rb_ary_entry(location, 0), rb_ary_entry(location, 1), name);
16510 }
16511 rb_exc_raise(rb_exc_new_str(rb_eTypeError, message));
16512}
16513static VALUE
16514vm_define_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16515{
16516 VALUE klass;
16517 if (((flags) & 0x10) && !RB_TYPE_P(super, RUBY_T_CLASS)) {
16518 rb_raise(rb_eTypeError,
16519 "superclass must be an instance of Class (given an instance of %""l""i" "\v"")",
16520 rb_obj_class(super));
16521 }
16522 vm_check_if_namespace(cbase);
16523 rb_autoload_load(cbase, id);
16524 if ((klass = vm_const_get_under(id, flags, cbase)) != 0) {
16525 if (!vm_check_if_class(id, flags, super, klass))
16526 unmatched_redefinition("class", cbase, id, klass);
16527 return klass;
16528 }
16529 else {
16530 return vm_declare_class(id, flags, cbase, super);
16531 }
16532}
16533static VALUE
16534vm_define_module(ID id, rb_num_t flags, VALUE cbase)
16535{
16536 VALUE mod;
16537 vm_check_if_namespace(cbase);
16538 if ((mod = vm_const_get_under(id, flags, cbase)) != 0) {
16539 if (!vm_check_if_module(id, mod))
16540 unmatched_redefinition("module", cbase, id, mod);
16541 return mod;
16542 }
16543 else {
16544 return vm_declare_module(id, cbase);
16545 }
16546}
16547static VALUE
16548vm_find_or_create_class_by_id(ID id,
16549 rb_num_t flags,
16550 VALUE cbase,
16551 VALUE super)
16552{
16553 rb_vm_defineclass_type_t type = ((rb_vm_defineclass_type_t)(flags) & VM_DEFINECLASS_TYPE_MASK);
16554 switch (type) {
16555 case VM_DEFINECLASS_TYPE_CLASS:
16556 return vm_define_class(id, flags, cbase, super);
16557 case VM_DEFINECLASS_TYPE_SINGLETON_CLASS:
16558 return rb_singleton_class(cbase);
16559 case VM_DEFINECLASS_TYPE_MODULE:
16560 return vm_define_module(id, flags, cbase);
16561 default:
16562 rb_bug("unknown defineclass type: %d", (int)type);
16563 }
16564}
16565static rb_method_visibility_t
16566vm_scope_visibility_get(const rb_execution_context_t *ec)
16567{
16568 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16569 if (!vm_env_cref_by_cref(cfp->ep)) {
16570 return METHOD_VISI_PUBLIC;
16571 }
16572 else {
16573 return CREF_SCOPE_VISI(vm_ec_cref(ec))->method_visi;
16574 }
16575}
16576static int
16577vm_scope_module_func_check(const rb_execution_context_t *ec)
16578{
16579 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16580 if (!vm_env_cref_by_cref(cfp->ep)) {
16581 return 0;
16582 }
16583 else {
16584 return CREF_SCOPE_VISI(vm_ec_cref(ec))->module_func;
16585 }
16586}
16587static void
16588vm_define_method(const rb_execution_context_t *ec, VALUE obj, ID id, VALUE iseqval, int is_singleton)
16589{
16590 VALUE klass;
16591 rb_method_visibility_t visi;
16592 rb_cref_t *cref = vm_ec_cref(ec);
16593 if (is_singleton) {
16594 klass = rb_singleton_class(obj);
16595 visi = METHOD_VISI_PUBLIC;
16596 }
16597 else {
16598 klass = CREF_CLASS_FOR_DEFINITION(cref);
16599 visi = vm_scope_visibility_get(ec);
16600 }
16601 if (RB_NIL_P(klass)) {
16602 rb_raise(rb_eTypeError, "no class/module to add method");
16603 }
16604 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, visi);
16605 if (!is_singleton && vm_scope_module_func_check(ec)) {
16606 klass = rb_singleton_class(klass);
16607 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, METHOD_VISI_PUBLIC);
16608 }
16609}
16610static VALUE
16611vm_invokeblock_i(struct rb_execution_context_struct *ec,
16612 struct rb_control_frame_struct *reg_cfp,
16613 struct rb_calling_info *calling)
16614{
16615 const struct rb_callinfo *ci = calling->ci;
16616 VALUE block_handler = VM_CF_BLOCK_HANDLER((((reg_cfp))));
16617 if (block_handler == 0) {
16618 rb_vm_localjump_error("no block given (yield)", ((VALUE)RUBY_Qnil), 0);
16619 }
16620 else {
16621 return vm_invoke_block(ec, (((reg_cfp))), calling, ci, 0, block_handler);
16622 }
16623}
16624static const struct rb_callcache *
16625vm_search_method_wrap(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
16626{
16627 return vm_search_method((VALUE)reg_cfp->iseq, cd, recv);
16628}
16629static const struct rb_callcache *
16630vm_search_invokeblock(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
16631{
16632 static const struct rb_callcache cc = {
16633 .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_USER4),
16634 .klass = 0,
16635 .cme_ = 0,
16636 .call_ = vm_invokeblock_i,
16637 .aux_ = {0},
16638 };
16639 return &cc;
16640}
16641static
16642VALUE
16643vm_sendish(
16644 struct rb_execution_context_struct *ec,
16645 struct rb_control_frame_struct *reg_cfp,
16646 struct rb_call_data *cd,
16647 VALUE block_handler,
16648 const struct rb_callcache *(*method_explorer)(const struct rb_control_frame_struct *cfp, struct rb_call_data *cd, VALUE recv)
16649) {
16650 VALUE val = ((VALUE)RUBY_Qundef);
16651 const struct rb_callinfo *ci = cd->ci;
16652 const struct rb_callcache *cc;
16653 int argc = vm_ci_argc(ci);
16654 VALUE recv = (*(((((reg_cfp)->sp)))-(argc)-1));
16655 struct rb_calling_info calling = {
16656 .block_handler = block_handler,
16657 .kw_splat = (vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit)) > 0,
16658 .recv = recv,
16659 .argc = argc,
16660 .ci = ci,
16661 };
16662 calling.cc = cc = method_explorer((((reg_cfp))), cd, recv);
16663 val = vm_cc_call(cc)(ec, (((reg_cfp))), &calling);
16664 if (val != ((VALUE)RUBY_Qundef)) {
16665 return val;
16666 }
16667 else {
16668 do { (reg_cfp) = ec->cfp; } while (0);
16669 }
16670 if (((((reg_cfp)))->iseq)->body->catch_except_p) {
16671 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
16672 return rb_vm_exec(ec, 1);
16673 }
16674 else if ((val = mjit_exec(ec)) == ((VALUE)RUBY_Qundef)) {
16675 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
16676 return rb_vm_exec(ec, 0);
16677 }
16678 else {
16679 return val;
16680 }
16681}
16682VALUE rb_nil_to_s(VALUE);
16683VALUE rb_true_to_s(VALUE);
16684VALUE rb_false_to_s(VALUE);
16685VALUE rb_int_to_s(int argc, VALUE *argv, VALUE x);
16686VALUE rb_fix_to_s(VALUE);
16687VALUE rb_mod_to_s(VALUE);
16688VALUE rb_mod_name(VALUE);
16689static VALUE
16690vm_objtostring(const rb_iseq_t *iseq, VALUE recv, CALL_DATA cd)
16691{
16692 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
16693 switch (((int)rb_type(recv))) {
16694 case RUBY_T_STRING:
16695 return recv;
16696 case RUBY_T_SYMBOL:
16697 if (check_cfunc(vm_cc_cme(cc), rb_sym_to_s)) {
16698 return rb_sym2str(recv);
16699 }
16700 break;
16701 case RUBY_T_MODULE:
16702 case RUBY_T_CLASS:
16703 if (check_cfunc(vm_cc_cme(cc), rb_mod_to_s)) {
16704 VALUE val = rb_mod_name(recv);
16705 if (val == ((VALUE)RUBY_Qnil)) {
16706 val = rb_mod_to_s(recv);
16707 }
16708 return val;
16709 }
16710 break;
16711 case RUBY_T_NIL:
16712 if (check_cfunc(vm_cc_cme(cc), rb_nil_to_s)) {
16713 return rb_nil_to_s(recv);
16714 }
16715 break;
16716 case RUBY_T_TRUE:
16717 if (check_cfunc(vm_cc_cme(cc), rb_true_to_s)) {
16718 return rb_true_to_s(recv);
16719 }
16720 break;
16721 case RUBY_T_FALSE:
16722 if (check_cfunc(vm_cc_cme(cc), rb_false_to_s)) {
16723 return rb_false_to_s(recv);
16724 }
16725 break;
16726 case RUBY_T_FIXNUM:
16727 if (check_cfunc(vm_cc_cme(cc), rb_int_to_s)) {
16728 return rb_fix_to_s(recv);
16729 }
16730 break;
16731 }
16732 return ((VALUE)RUBY_Qundef);
16733}
16734static VALUE
16735vm_opt_str_freeze(VALUE str, int bop, ID id)
16736{
16737 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
16738 return str;
16739 }
16740 else {
16741 return ((VALUE)RUBY_Qundef);
16742 }
16743}
16744static VALUE
16745vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
16746{
16747 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MAX)]&((1 << 3))) == 0), 1)))) {
16748 if (num == 0) {
16749 return ((VALUE)RUBY_Qnil);
16750 }
16751 else {
16752 struct cmp_opt_data cmp_opt = { 0, 0 };
16753 VALUE result = *ptr;
16754 rb_snum_t i = num - 1;
16755 while (i-- > 0) {
16756 const VALUE v = *++ptr;
16757 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) {
16758 result = v;
16759 }
16760 }
16761 return result;
16762 }
16763 }
16764 else {
16765 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMax, 0, ((void *)0), 0);
16766 }
16767}
16768static VALUE
16769vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
16770{
16771 if (((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MIN)]&((1 << 3))) == 0), 1)))) {
16772 if (num == 0) {
16773 return ((VALUE)RUBY_Qnil);
16774 }
16775 else {
16776 struct cmp_opt_data cmp_opt = { 0, 0 };
16777 VALUE result = *ptr;
16778 rb_snum_t i = num - 1;
16779 while (i-- > 0) {
16780 const VALUE v = *++ptr;
16781 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) {
16782 result = v;
16783 }
16784 }
16785 return result;
16786 }
16787 }
16788 else {
16789 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMin, 0, ((void *)0), 0);
16790 }
16791}
16792static inline _Bool
16793vm_inlined_ic_hit_p(VALUE flags, VALUE value, const rb_cref_t *ic_cref, rb_serial_t ic_serial, const VALUE *reg_ep)
16794{
16795 if (ic_serial == (ruby_vm_global_constant_state) &&
16796 ((flags & ((VALUE)RUBY_FL_USER4)) || rb_ractor_main_p())) {
16797 ((void)0);
16798 return (ic_cref == ((void *)0) ||
16799 ic_cref == vm_get_cref(reg_ep));
16800 }
16801 return 0;
16802}
16803static _Bool
16804vm_ic_hit_p(const struct iseq_inline_constant_cache_entry *ice, const VALUE *reg_ep)
16805{
16806 ((void)0);
16807 return vm_inlined_ic_hit_p(ice->flags, ice->value, ice->ic_cref, (ice)->ic_serial.raw, reg_ep);
16808}static inline
16809_Bool
16810rb_vm_ic_hit_p(IC ic, const VALUE *reg_ep)
16811{
16812 return ic->entry && vm_ic_hit_p(ic->entry, reg_ep);
16813}
16814COLDFUNC static void
16815vm_ic_update(const rb_iseq_t *iseq, IC ic, VALUE val, const VALUE *reg_ep) {
16816 struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)rb_imemo_new(imemo_constcache, 0, 0, 0, 0);
16817 rb_obj_write((VALUE)(ice), __extension__({
16818 ;
16819 ; __typeof__((VALUE *)(&ice->value)) unaligned_member_access_result = ((VALUE *)(&ice->value));
16820 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 4963);
16821 ice->ic_cref = vm_get_const_key_cref(reg_ep);
16822 (ice)->ic_serial.raw = ((ruby_vm_global_constant_state) - ruby_vm_const_missing_count);
16823 if (rb_ractor_shareable_p(val)) ice->flags |= ((VALUE)RUBY_FL_USER4);
16824 ruby_vm_const_missing_count = 0;
16825 rb_obj_write((VALUE)(iseq), __extension__({
16826 ;
16827 ; __typeof__((VALUE *)(&ic->entry)) unaligned_member_access_result = ((VALUE *)(&ic->entry));
16828 ; unaligned_member_access_result; }), (VALUE)(ice), "../ruby-3.1.3/vm_insnhelper.c", 4968);
16829}
16830static VALUE
16831vm_once_dispatch(rb_execution_context_t *ec, ISEQ iseq, ISE is)
16832{
16833 rb_thread_t *th = rb_ec_thread_ptr(ec);
16834 rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
16835 again:
16836 if (is->once.running_thread == RUNNING_THREAD_ONCE_DONE) {
16837 return is->once.value;
16838 }
16839 else if (is->once.running_thread == ((void *)0)) {
16840 VALUE val;
16841 is->once.running_thread = th;
16842 val = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
16843 rb_obj_write((VALUE)(ec->cfp->iseq), __extension__({
16844;
16845; __typeof__((VALUE *)(&is->once.value)) unaligned_member_access_result = ((VALUE *)(&is->once.value));
16846; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.1.3/vm_insnhelper.c", 4990);
16847 is->once.running_thread = RUNNING_THREAD_ONCE_DONE;
16848 return val;
16849 }
16850 else if (is->once.running_thread == th) {
16851 return vm_once_exec((VALUE)iseq);
16852 }
16853 else {
16854 rb_vm_check_ints(ec);
16855 rb_thread_schedule();
16856 goto again;
16857 }
16858}
16859static OFFSET
16860vm_case_dispatch(CDHASH hash, OFFSET else_offset, VALUE key)
16861{
16862 switch (__extension__({ VALUE arg_obj = (key); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })) {
16863 case -1:
16864 case RUBY_T_FLOAT:
16865 case RUBY_T_SYMBOL:
16866 case RUBY_T_BIGNUM:
16867 case RUBY_T_STRING:
16868 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)))) {
16869 st_data_t val;
16870 if (RB_FLOAT_TYPE_P(key)) {
16871 double kval = rb_float_value_inline(key);
16872 if (!(__builtin_isinf_sign (kval)) && modf(kval, &kval) == 0.0) {
16873 key = (((kval) < (0x7fffffffffffffffL / 2) + 1) && ((kval) >= ((-0x7fffffffffffffffL -1L) / 2))) ? RB_INT2FIX((long)kval) : rb_dbl2big(kval);
16874 }
16875 }
16876 if (rb_hash_stlike_lookup(hash, key, &val)) {
16877 return rb_fix2long((VALUE)val);
16878 }
16879 else {
16880 return else_offset;
16881 }
16882 }
16883 }
16884 return 0;
16885}
16886__attribute__((__noreturn__)) static void vm_stack_consistency_error(const rb_execution_context_t *ec, const rb_control_frame_t *, const VALUE *);
16887static void
16888vm_stack_consistency_error(const rb_execution_context_t *ec,
16889 const rb_control_frame_t *cfp,
16890 const VALUE *bp)
16891{
16892 const ptrdiff_t nsp = ((cfp->sp) - (ec)->vm_stack);
16893 const ptrdiff_t nbp = ((bp) - (ec)->vm_stack);
16894 static const char stack_consistency_error[] =
16895 "Stack consistency error (sp: %""t""d"", bp: %""t""d"")";
16896 VALUE mesg = rb_sprintf(stack_consistency_error, nsp, nbp);
16897 ((__builtin_constant_p("\n") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), ("\n")));
16898 rb_str_append(mesg, rb_iseq_disasm(cfp->iseq));
16899 rb_exc_fatal(rb_exc_new_str(rb_eFatal, mesg));
16900}
16901ALWAYS_INLINE(static inline VALUE
16902vm_opt_plus(VALUE recv, VALUE obj));
16903static inline VALUE
16904vm_opt_plus(VALUE recv, VALUE obj) {
16905 if (FIXNUM_2_P(recv, obj) &&
16906 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 0))) == 0), 1)))) {
16907 return rb_fix_plus_fix(recv, obj);
16908 }
16909 else if (FLONUM_2_P(recv, obj) &&
16910 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
16911 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
16912 }
16913 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
16914 return ((VALUE)RUBY_Qundef);
16915 }
16916 else if (RBASIC_CLASS(recv) == rb_cFloat &&
16917 RBASIC_CLASS(obj) == rb_cFloat &&
16918 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
16919 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
16920 }
16921 else if (RBASIC_CLASS(recv) == rb_cString &&
16922 RBASIC_CLASS(obj) == rb_cString &&
16923 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 2))) == 0), 1)))) {
16924 return rb_str_opt_plus(recv, obj);
16925 }
16926 else if (RBASIC_CLASS(recv) == rb_cArray &&
16927 RBASIC_CLASS(obj) == rb_cArray &&
16928 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_PLUS)]&((1 << 3))) == 0), 1)))) {
16929 return rb_ary_plus(recv, obj);
16930 }
16931 else {
16932 return ((VALUE)RUBY_Qundef);
16933 }
16934}
16935ALWAYS_INLINE(static inline VALUE
16936vm_opt_minus(VALUE recv, VALUE obj));
16937static inline VALUE
16938vm_opt_minus(VALUE recv, VALUE obj) {
16939 if (FIXNUM_2_P(recv, obj) &&
16940 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 0))) == 0), 1)))) {
16941 return rb_fix_minus_fix(recv, obj);
16942 }
16943 else if (FLONUM_2_P(recv, obj) &&
16944 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
16945 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
16946 }
16947 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
16948 return ((VALUE)RUBY_Qundef);
16949 }
16950 else if (RBASIC_CLASS(recv) == rb_cFloat &&
16951 RBASIC_CLASS(obj) == rb_cFloat &&
16952 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
16953 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
16954 }
16955 else {
16956 return ((VALUE)RUBY_Qundef);
16957 }
16958}
16959ALWAYS_INLINE(static inline VALUE
16960vm_opt_mult(VALUE recv, VALUE obj));
16961static inline VALUE
16962vm_opt_mult(VALUE recv, VALUE obj) {
16963 if (FIXNUM_2_P(recv, obj) &&
16964 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 0))) == 0), 1)))) {
16965 return rb_fix_mul_fix(recv, obj);
16966 }
16967 else if (FLONUM_2_P(recv, obj) &&
16968 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
16969 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
16970 }
16971 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
16972 return ((VALUE)RUBY_Qundef);
16973 }
16974 else if (RBASIC_CLASS(recv) == rb_cFloat &&
16975 RBASIC_CLASS(obj) == rb_cFloat &&
16976 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
16977 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
16978 }
16979 else {
16980 return ((VALUE)RUBY_Qundef);
16981 }
16982}
16983ALWAYS_INLINE(static inline VALUE
16984vm_opt_div(VALUE recv, VALUE obj));
16985static inline VALUE
16986vm_opt_div(VALUE recv, VALUE obj) {
16987 if (FIXNUM_2_P(recv, obj) &&
16988 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 0))) == 0), 1)))) {
16989 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_div_fix(recv, obj);
16990 }
16991 else if (FLONUM_2_P(recv, obj) &&
16992 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
16993 return rb_flo_div_flo(recv, obj);
16994 }
16995 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
16996 return ((VALUE)RUBY_Qundef);
16997 }
16998 else if (RBASIC_CLASS(recv) == rb_cFloat &&
16999 RBASIC_CLASS(obj) == rb_cFloat &&
17000 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17001 return rb_flo_div_flo(recv, obj);
17002 }
17003 else {
17004 return ((VALUE)RUBY_Qundef);
17005 }
17006}
17007ALWAYS_INLINE(static inline VALUE
17008vm_opt_mod(VALUE recv, VALUE obj));
17009static inline VALUE
17010vm_opt_mod(VALUE recv, VALUE obj) {
17011 if (FIXNUM_2_P(recv, obj) &&
17012 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 0))) == 0), 1)))) {
17013 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_mod_fix(recv, obj);
17014 }
17015 else if (FLONUM_2_P(recv, obj) &&
17016 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17017 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17018 }
17019 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17020 return ((VALUE)RUBY_Qundef);
17021 }
17022 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17023 RBASIC_CLASS(obj) == rb_cFloat &&
17024 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17025 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17026 }
17027 else {
17028 return ((VALUE)RUBY_Qundef);
17029 }
17030}static inline
17031VALUE
17032rb_vm_opt_mod(VALUE recv, VALUE obj)
17033{
17034 return vm_opt_mod(recv, obj);
17035}
17036ALWAYS_INLINE(static inline VALUE
17037vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj));
17038static inline VALUE
17039vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj) {
17040 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not_equal)) {
17041 VALUE val = opt_equality(iseq, recv, obj, cd_eq);
17042 if (val != ((VALUE)RUBY_Qundef)) {
17043 return RB_TEST(val) ? ((VALUE)RUBY_Qfalse) : ((VALUE)RUBY_Qtrue);
17044 }
17045 }
17046 return ((VALUE)RUBY_Qundef);
17047}
17048ALWAYS_INLINE(static inline VALUE
17049vm_opt_lt(VALUE recv, VALUE obj));
17050static inline VALUE
17051vm_opt_lt(VALUE recv, VALUE obj) {
17052 if (FIXNUM_2_P(recv, obj) &&
17053 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 0))) == 0), 1)))) {
17054 return (((long)recv < (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17055 }
17056 else if (FLONUM_2_P(recv, obj) &&
17057 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17058 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17059 }
17060 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17061 return ((VALUE)RUBY_Qundef);
17062 }
17063 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17064 RBASIC_CLASS(obj) == rb_cFloat &&
17065 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17066 ;
17067 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17068 }
17069 else {
17070 return ((VALUE)RUBY_Qundef);
17071 }
17072}
17073ALWAYS_INLINE(static inline VALUE
17074vm_opt_le(VALUE recv, VALUE obj));
17075static inline VALUE
17076vm_opt_le(VALUE recv, VALUE obj) {
17077 if (FIXNUM_2_P(recv, obj) &&
17078 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LE)]&((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_LE)]&((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_LE)]&((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_gt(VALUE recv, VALUE obj));
17100static inline VALUE
17101vm_opt_gt(VALUE recv, VALUE obj) {
17102 if (FIXNUM_2_P(recv, obj) &&
17103 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GT)]&((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_GT)]&((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_GT)]&((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_ge(VALUE recv, VALUE obj));
17125static inline VALUE
17126vm_opt_ge(VALUE recv, VALUE obj) {
17127 if (FIXNUM_2_P(recv, obj) &&
17128 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_GE)]&((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_GE)]&((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_GE)]&((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_ltlt(VALUE recv, VALUE obj));
17150static inline VALUE
17151vm_opt_ltlt(VALUE recv, VALUE obj) {
17152 if (RB_SPECIAL_CONST_P(recv)) {
17153 return ((VALUE)RUBY_Qundef);
17154 }
17155 else if (RBASIC_CLASS(recv) == rb_cString &&
17156 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LTLT)]&((1 << 2))) == 0), 1)))) {
17157 return rb_str_concat(recv, obj);
17158 }
17159 else if (RBASIC_CLASS(recv) == rb_cArray &&
17160 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_LTLT)]&((1 << 3))) == 0), 1)))) {
17161 return rb_ary_push(recv, obj);
17162 }
17163 else {
17164 return ((VALUE)RUBY_Qundef);
17165 }
17166}
17167ALWAYS_INLINE(static inline VALUE
17168vm_opt_and(VALUE recv, VALUE obj));
17169static inline VALUE
17170vm_opt_and(VALUE recv, VALUE obj) {
17171 if (FIXNUM_2_P(recv, obj) &&
17172 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AND)]&((1 << 0))) == 0), 1)))) {
17173 return (recv & obj) | 1;
17174 }
17175 else {
17176 return ((VALUE)RUBY_Qundef);
17177 }
17178}
17179ALWAYS_INLINE(static inline VALUE
17180vm_opt_or(VALUE recv, VALUE obj));
17181static inline VALUE
17182vm_opt_or(VALUE recv, VALUE obj) {
17183 if (FIXNUM_2_P(recv, obj) &&
17184 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_OR)]&((1 << 0))) == 0), 1)))) {
17185 return recv | obj;
17186 }
17187 else {
17188 return ((VALUE)RUBY_Qundef);
17189 }
17190}
17191ALWAYS_INLINE(static inline VALUE
17192vm_opt_aref(VALUE recv, VALUE obj));
17193static inline VALUE
17194vm_opt_aref(VALUE recv, VALUE obj) {
17195 if (RB_SPECIAL_CONST_P(recv)) {
17196 if (FIXNUM_2_P(recv, obj) &&
17197 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 0))) == 0), 1)))) {
17198 return rb_fix_aref(recv, obj);
17199 }
17200 return ((VALUE)RUBY_Qundef);
17201 }
17202 else if (RBASIC_CLASS(recv) == rb_cArray &&
17203 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 3))) == 0), 1)))) {
17204 if (RB_FIXNUM_P(obj)) {
17205 return rb_ary_entry_internal(recv, rb_fix2long(obj));
17206 }
17207 else {
17208 return rb_ary_aref1(recv, obj);
17209 }
17210 }
17211 else if (RBASIC_CLASS(recv) == rb_cHash &&
17212 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1)))) {
17213 return rb_hash_aref(recv, obj);
17214 }
17215 else {
17216 return ((VALUE)RUBY_Qundef);
17217 }
17218}
17219ALWAYS_INLINE(static inline VALUE
17220vm_opt_aset(VALUE recv, VALUE obj, VALUE set));
17221static inline VALUE
17222vm_opt_aset(VALUE recv, VALUE obj, VALUE set) {
17223 if (RB_SPECIAL_CONST_P(recv)) {
17224 return ((VALUE)RUBY_Qundef);
17225 }
17226 else if (RBASIC_CLASS(recv) == rb_cArray &&
17227 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 3))) == 0), 1))) &&
17228 RB_FIXNUM_P(obj)) {
17229 rb_ary_store(recv, rb_fix2long(obj), set);
17230 return set;
17231 }
17232 else if (RBASIC_CLASS(recv) == rb_cHash &&
17233 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1)))) {
17234 rb_hash_aset(recv, obj, set);
17235 return set;
17236 }
17237 else {
17238 return ((VALUE)RUBY_Qundef);
17239 }
17240}
17241ALWAYS_INLINE(static inline VALUE
17242vm_opt_aref_with(VALUE recv, VALUE key));
17243static inline VALUE
17244vm_opt_aref_with(VALUE recv, VALUE key) {
17245 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17246 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1))) &&
17247 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
17248 return rb_hash_aref(recv, key);
17249 }
17250 else {
17251 return ((VALUE)RUBY_Qundef);
17252 }
17253}
17254ALWAYS_INLINE(static inline VALUE
17255vm_opt_aset_with(VALUE recv, VALUE key, VALUE val));
17256static inline VALUE
17257vm_opt_aset_with(VALUE recv, VALUE key, VALUE val) {
17258 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17259 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1))) &&
17260 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
17261 return rb_hash_aset(recv, key, val);
17262 }
17263 else {
17264 return ((VALUE)RUBY_Qundef);
17265 }
17266}
17267static VALUE
17268vm_opt_length(VALUE recv, int bop)
17269{
17270 if (RB_SPECIAL_CONST_P(recv)) {
17271 return ((VALUE)RUBY_Qundef);
17272 }
17273 else if (RBASIC_CLASS(recv) == rb_cString &&
17274 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17275 if (bop == BOP_EMPTY_P) {
17276 return rb_long2num_inline(RSTRING_LEN(recv));
17277 }
17278 else {
17279 return rb_str_length(recv);
17280 }
17281 }
17282 else if (RBASIC_CLASS(recv) == rb_cArray &&
17283 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 3))) == 0), 1)))) {
17284 return rb_long2num_inline(rb_array_len(recv));
17285 }
17286 else if (RBASIC_CLASS(recv) == rb_cHash &&
17287 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(bop)]&((1 << 4))) == 0), 1)))) {
17288 return __builtin_choose_expr( __builtin_constant_p(RHASH_SIZE(recv)), ((VALUE)(RHASH_SIZE(recv))) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(RHASH_SIZE(recv)));
17289 }
17290 else {
17291 return ((VALUE)RUBY_Qundef);
17292 }
17293}
17294static VALUE
17295vm_opt_empty_p(VALUE recv)
17296{
17297 switch (vm_opt_length(recv, BOP_EMPTY_P)) {
17298 case ((VALUE)RUBY_Qundef): return ((VALUE)RUBY_Qundef);
17299 case __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0)): return ((VALUE)RUBY_Qtrue);
17300 default: return ((VALUE)RUBY_Qfalse);
17301 }
17302}
17303VALUE rb_false(VALUE obj);
17304static VALUE
17305vm_opt_nil_p(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv)
17306{
17307 if (RB_NIL_P(recv) &&
17308 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_NIL_P)]&((1 << 9))) == 0), 1)))) {
17309 return ((VALUE)RUBY_Qtrue);
17310 }
17311 else if (vm_method_cfunc_is(iseq, cd, recv, rb_false)) {
17312 return ((VALUE)RUBY_Qfalse);
17313 }
17314 else {
17315 return ((VALUE)RUBY_Qundef);
17316 }
17317}
17318static VALUE
17319fix_succ(VALUE x)
17320{
17321 switch (x) {
17322 case ~0UL:
17323 return __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
17324 case ((~0UL)>>(int)(1)):
17325 return rb_uint2big(1UL << (8 * 8 - 2));
17326 default:
17327 return x + 2;
17328 }
17329}
17330static VALUE
17331vm_opt_succ(VALUE recv)
17332{
17333 if (RB_FIXNUM_P(recv) &&
17334 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_SUCC)]&((1 << 0))) == 0), 1)))) {
17335 return fix_succ(recv);
17336 }
17337 else if (RB_SPECIAL_CONST_P(recv)) {
17338 return ((VALUE)RUBY_Qundef);
17339 }
17340 else if (RBASIC_CLASS(recv) == rb_cString &&
17341 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_SUCC)]&((1 << 2))) == 0), 1)))) {
17342 return rb_str_succ(recv);
17343 }
17344 else {
17345 return ((VALUE)RUBY_Qundef);
17346 }
17347}
17348ALWAYS_INLINE(static inline VALUE
17349vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv));
17350static inline VALUE
17351vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv) {
17352 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not)) {
17353 return RB_TEST(recv) ? ((VALUE)RUBY_Qfalse) : ((VALUE)RUBY_Qtrue);
17354 }
17355 else {
17356 return ((VALUE)RUBY_Qundef);
17357 }
17358}
17359static VALUE
17360vm_opt_regexpmatch2(VALUE recv, VALUE obj)
17361{
17362 if (RB_SPECIAL_CONST_P(recv)) {
17363 return ((VALUE)RUBY_Qundef);
17364 }
17365 else if (RBASIC_CLASS(recv) == rb_cString &&
17366 rb_class_of(obj) == rb_cRegexp &&
17367 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MATCH)]&((1 << 2))) == 0), 1)))) {
17368 return rb_reg_match(obj, recv);
17369 }
17370 else if (RBASIC_CLASS(recv) == rb_cRegexp &&
17371 ((__builtin_expect(!!((rb_current_vm()->redefined_flag[(BOP_MATCH)]&((1 << 8))) == 0), 1)))) {
17372 return rb_reg_match(recv, obj);
17373 }
17374 else {
17375 return ((VALUE)RUBY_Qundef);
17376 }
17377}
17378rb_event_flag_t rb_iseq_event_flags(const rb_iseq_t *iseq, size_t pos);
17379__attribute__((__noinline__)) static void vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp);
17380static inline void
17381vm_trace_hook(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const VALUE *pc,
17382 rb_event_flag_t pc_events, rb_event_flag_t target_event,
17383 rb_hook_list_t *global_hooks, rb_hook_list_t *local_hooks, VALUE val)
17384{
17385 rb_event_flag_t event = pc_events & target_event;
17386 VALUE self = (((((reg_cfp)))->self));
17387 ((void)0);
17388 if (event & global_hooks->events) {
17389 reg_cfp->pc++;
17390 vm_dtrace(event, ec);
17391 rb_exec_event_hook_orig(ec, global_hooks, event, self, 0, 0, 0 , val, 0);
17392 reg_cfp->pc--;
17393 }
17394 if (local_hooks != ((void *)0)) {
17395 if (event & local_hooks->events) {
17396 reg_cfp->pc++;
17397 rb_exec_event_hook_orig(ec, local_hooks, event, self, 0, 0, 0 , val, 0);
17398 reg_cfp->pc--;
17399 }
17400 }
17401}static inline
17402_Bool
17403rb_vm_opt_cfunc_p(CALL_CACHE cc, int insn)
17404{
17405 switch (insn) {
17406 case YARVINSN_opt_eq:
17407 return check_cfunc(vm_cc_cme(cc), rb_obj_equal);
17408 case YARVINSN_opt_nil_p:
17409 return check_cfunc(vm_cc_cme(cc), rb_false);
17410 case YARVINSN_opt_not:
17411 return check_cfunc(vm_cc_cme(cc), rb_obj_not);
17412 default:
17413 return 0;
17414 }
17415}
17416static void
17417vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp)
17418{
17419 const VALUE *pc = reg_cfp->pc;
17420 rb_event_flag_t enabled_flags = ruby_vm_event_flags & (0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010| 0x0020| 0x0040| 0x0100| 0x0200| 0x010000| 0x020000);
17421 rb_event_flag_t global_events = enabled_flags;
17422 if (enabled_flags == 0 && ruby_vm_event_local_num == 0) {
17423 return;
17424 }
17425 else {
17426 const rb_iseq_t *iseq = reg_cfp->iseq;
17427 size_t pos = pc - iseq->body->iseq_encoded;
17428 rb_event_flag_t pc_events = rb_iseq_event_flags(iseq, pos);
17429 rb_hook_list_t *local_hooks = iseq->aux.exec.local_hooks;
17430 rb_event_flag_t iseq_local_events = local_hooks != ((void *)0) ? local_hooks->events : 0;
17431 rb_hook_list_t *bmethod_local_hooks = ((void *)0);
17432 rb_event_flag_t bmethod_local_events = 0;
17433 _Bool bmethod_frame = VM_FRAME_BMETHOD_P(reg_cfp);
17434 enabled_flags |= iseq_local_events;
17435 ((void)0);
17436 if (bmethod_frame) {
17437 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
17438 ((void)0);
17439 bmethod_local_hooks = me->def->body.bmethod.hooks;
17440 if (bmethod_local_hooks) {
17441 bmethod_local_events = bmethod_local_hooks->events;
17442 }
17443 }
17444 if ((pc_events & enabled_flags) == 0 && !bmethod_frame) {
17445 return;
17446 }
17447 else if (ec->trace_arg != ((void *)0)) {
17448 return;
17449 }
17450 else {
17451 rb_hook_list_t *global_hooks = rb_ec_ractor_hooks(ec);
17452 rb_event_flag_t bmethod_events = global_events | bmethod_local_events;
17453 if (0) {
17454 ruby_debug_printf("vm_trace>>%4d (%4x) - %s:%d %s\n",
17455 (int)pos,
17456 (int)pc_events,
17457 RSTRING_PTR(rb_iseq_path(iseq)),
17458 (int)rb_iseq_line_no(iseq, pos),
17459 RSTRING_PTR(rb_iseq_label(iseq)));
17460 }
17461 ((void)0);
17462 ((void)0);
17463 if ((pc_events & 0x0100) && bmethod_frame && (bmethod_events & 0x0008)) {
17464 vm_trace_hook(ec, reg_cfp, pc, 0x0008, 0x0008, global_hooks, bmethod_local_hooks, ((VALUE)RUBY_Qundef));
17465 }
17466 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);
17467 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);
17468 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);
17469 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);
17470 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);
17471 if ((pc_events & 0x0200) && bmethod_frame && (bmethod_events & 0x0010)) {
17472 vm_trace_hook(ec, reg_cfp, pc, 0x0010, 0x0010, global_hooks, bmethod_local_hooks, (*(((((reg_cfp)->sp)))-(0)-1)));
17473 }
17474 }
17475 }
17476}static inline
17477void Init_vm_stack_canary(void) { }
17478static VALUE
17479builtin_invoker0(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17480{
17481 typedef VALUE (*rb_invoke_funcptr0_t)(rb_execution_context_t *ec, VALUE self);
17482 return (*(rb_invoke_funcptr0_t)funcptr)(ec, self);
17483}
17484static VALUE
17485builtin_invoker1(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17486{
17487 typedef VALUE (*rb_invoke_funcptr1_t)(rb_execution_context_t *ec, VALUE self, VALUE v1);
17488 return (*(rb_invoke_funcptr1_t)funcptr)(ec, self, argv[0]);
17489}
17490static VALUE
17491builtin_invoker2(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17492{
17493 typedef VALUE (*rb_invoke_funcptr2_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2);
17494 return (*(rb_invoke_funcptr2_t)funcptr)(ec, self, argv[0], argv[1]);
17495}
17496static VALUE
17497builtin_invoker3(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17498{
17499 typedef VALUE (*rb_invoke_funcptr3_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3);
17500 return (*(rb_invoke_funcptr3_t)funcptr)(ec, self, argv[0], argv[1], argv[2]);
17501}
17502static VALUE
17503builtin_invoker4(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17504{
17505 typedef VALUE (*rb_invoke_funcptr4_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4);
17506 return (*(rb_invoke_funcptr4_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3]);
17507}
17508static VALUE
17509builtin_invoker5(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17510{
17511 typedef VALUE (*rb_invoke_funcptr5_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5);
17512 return (*(rb_invoke_funcptr5_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4]);
17513}
17514static VALUE
17515builtin_invoker6(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17516{
17517 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);
17518 return (*(rb_invoke_funcptr6_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
17519}
17520static VALUE
17521builtin_invoker7(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17522{
17523 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);
17524 return (*(rb_invoke_funcptr7_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
17525}
17526static VALUE
17527builtin_invoker8(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17528{
17529 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);
17530 return (*(rb_invoke_funcptr8_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
17531}
17532static VALUE
17533builtin_invoker9(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17534{
17535 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);
17536 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]);
17537}
17538static VALUE
17539builtin_invoker10(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17540{
17541 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);
17542 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]);
17543}
17544static VALUE
17545builtin_invoker11(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17546{
17547 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);
17548 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]);
17549}
17550static VALUE
17551builtin_invoker12(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17552{
17553 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);
17554 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]);
17555}
17556static VALUE
17557builtin_invoker13(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17558{
17559 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);
17560 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]);
17561}
17562static VALUE
17563builtin_invoker14(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17564{
17565 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);
17566 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]);
17567}
17568static VALUE
17569builtin_invoker15(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17570{
17571 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);
17572 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]);
17573}
17574typedef VALUE (*builtin_invoker)(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr);
17575static builtin_invoker
17576lookup_builtin_invoker(int argc)
17577{
17578 static const builtin_invoker invokers[] = {
17579 builtin_invoker0,
17580 builtin_invoker1,
17581 builtin_invoker2,
17582 builtin_invoker3,
17583 builtin_invoker4,
17584 builtin_invoker5,
17585 builtin_invoker6,
17586 builtin_invoker7,
17587 builtin_invoker8,
17588 builtin_invoker9,
17589 builtin_invoker10,
17590 builtin_invoker11,
17591 builtin_invoker12,
17592 builtin_invoker13,
17593 builtin_invoker14,
17594 builtin_invoker15,
17595 };
17596 return invokers[argc];
17597}
17598static inline VALUE
17599invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const struct rb_builtin_function* bf, const VALUE *argv)
17600{
17601 const _Bool canary_p = reg_cfp->iseq->body->builtin_inline_p;
17602 if (canary_p) {} else {};
17603 VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, (rb_insn_func_t)bf->func_ptr);
17604 if (canary_p) {(void)(YARVINSN_invokebuiltin);};
17605 return ret;
17606}
17607static VALUE
17608vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf, const VALUE *argv)
17609{
17610 return invoke_bf(ec, cfp, bf, argv);
17611}
17612static VALUE
17613vm_invoke_builtin_delegate(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function *bf, unsigned int start_index)
17614{
17615 if (0) {
17616 fputs("vm_invoke_builtin_delegate: passing -> ", (((__getreent()))->_stderr));
17617 for (int i=0; i<bf->argc; i++) {
17618 ruby_debug_printf(":%s ", rb_id2name(cfp->iseq->body->local_table[i+start_index]));
17619 }
17620 ruby_debug_printf("\n" "%s %s(%d):%p\n", __func__, bf->name, bf->argc, bf->func_ptr);
17621 }
17622 if (bf->argc == 0) {
17623 return invoke_bf(ec, cfp, bf, ((void *)0));
17624 }
17625 else {
17626 const VALUE *argv = cfp->ep - cfp->iseq->body->local_table_size - ( 3) + 1 + start_index;
17627 return invoke_bf(ec, cfp, bf, argv);
17628 }
17629}static inline
17630VALUE
17631rb_vm_lvar_exposed(rb_execution_context_t *ec, int index)
17632{
17633 const rb_control_frame_t *cfp = ec->cfp;
17634 return cfp->ep[index];
17635}
17636struct local_var_list {
17637 VALUE tbl;
17638};
17639static 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);
17640static 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);
17641static inline VALUE vm_yield(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat);
17642static inline VALUE vm_yield_with_block(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE block_handler, int kw_splat);
17643static inline VALUE vm_yield_force_blockarg(rb_execution_context_t *ec, VALUE args);
17644VALUE rb_vm_exec(rb_execution_context_t *ec, _Bool mjit_enable_p);
17645static 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);
17646static int vm_collect_local_variables_in_heap(const VALUE *dfp, const struct local_var_list *vars);
17647static VALUE rb_eUncaughtThrow;
17648static ID id_result, id_tag, id_value;
17649typedef enum call_type {
17650 CALL_PUBLIC,
17651 CALL_FCALL,
17652 CALL_VCALL,
17653 CALL_PUBLIC_KW,
17654 CALL_FCALL_KW,
17655 CALL_TYPE_MAX
17656} call_type;
17657static VALUE send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope);
17658static VALUE vm_call0_body(rb_execution_context_t* ec, struct rb_calling_info *calling, const VALUE *argv);
17659static inline void
17660stack_check(rb_execution_context_t *ec)
17661{
17662 if (!(((ec)->raised_flag & (RAISED_STACKOVERFLOW)) != 0) &&
17663 rb_ec_stack_check(ec)) {
17664 ((ec)->raised_flag |= (RAISED_STACKOVERFLOW));
17665 rb_ec_stack_overflow(ec, 0);
17666 }
17667}
17668static void
17669raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj,
17670 enum method_missing_reason last_call_status)
17671{
17672 VALUE exc = rb_eNoMethodError;
17673 VALUE format = 0;
17674 if ((__builtin_expect(!!(argc == 0), 0))) {
17675 rb_raise(rb_eArgError, "no method name given");
17676 }
17677 else if ((__builtin_expect(!!(!RB_SYMBOL_P(argv[0])), 0))) {
17678 const VALUE e = rb_eArgError;
17679 rb_raise(e, "method name must be a Symbol but %""l""i" "\v"" is given",
17680 rb_obj_class(argv[0]));
17681 }
17682 stack_check(ec);
17683 if (last_call_status & MISSING_PRIVATE) {
17684 format = rb_fstring_new(("private method `%s' called for %s%s%s"), (sizeof("private method `%s' called for %s%s%s" "") - 1));
17685 }
17686 else if (last_call_status & MISSING_PROTECTED) {
17687 format = rb_fstring_new(("protected method `%s' called for %s%s%s"), (sizeof("protected method `%s' called for %s%s%s" "") - 1));
17688 }
17689 else if (last_call_status & MISSING_VCALL) {
17690 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));
17691 exc = rb_eNameError;
17692 }
17693 else if (last_call_status & MISSING_SUPER) {
17694 format = rb_fstring_new(("super: no superclass method `%s' for %s%s%s"), (sizeof("super: no superclass method `%s' for %s%s%s" "") - 1));
17695 }
17696 {
17697 exc = rb_make_no_method_exception(exc, format, obj, argc, argv,
17698 last_call_status & (MISSING_FCALL|MISSING_VCALL));
17699 if (!(last_call_status & MISSING_MISSING)) {
17700 rb_vm_pop_cfunc_frame();
17701 }
17702 rb_exc_raise(exc);
17703 }
17704}
17705static void
17706vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv,
17707 VALUE obj, int call_status)
17708{
17709 vm_passed_block_handler_set(ec, 0);
17710 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
17711}
17712static inline VALUE
17713method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat)
17714{
17715 VALUE *nargv, result, work, klass;
17716 VALUE block_handler = vm_passed_block_handler(ec);
17717 const rb_callable_method_entry_t *me;
17718 ec->method_missing_reason = call_status;
17719 if (id == idMethodMissing) {
17720 goto missing;
17721 }
17722 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))));
17723 nargv[0] = rb_id2sym(id);
17724 ruby_nonempty_memcpy((nargv + 1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
17725 ++argc;
17726 argv = nargv;
17727 klass = rb_class_of(obj);
17728 if (!klass) goto missing;
17729 me = rb_callable_method_entry(klass, idMethodMissing);
17730 if (!me || (int) (((me)->flags & (((VALUE)RUBY_FL_USER6) )) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+2))) goto missing;
17731 vm_passed_block_handler_set(ec, block_handler);
17732 result = rb_vm_call_kw(ec, obj, idMethodMissing, argc, argv, me, kw_splat);
17733 if (work) rb_free_tmp_buffer(&(work));
17734 return result;
17735 missing:
17736 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
17737 __builtin_unreachable();
17738}
17739static rb_control_frame_t *
17740vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
17741{
17742 if (VM_FRAME_RUBYFRAME_P(cfp)) {
17743 return (rb_control_frame_t *)cfp;
17744 }
17745 cfp = ((cfp)+1);
17746 while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
17747 if (VM_FRAME_RUBYFRAME_P(cfp)) {
17748 return (rb_control_frame_t *)cfp;
17749 }
17750 if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_PASSED) == 0) {
17751 break;
17752 }
17753 cfp = ((cfp)+1);
17754 }
17755 return 0;
17756}
17757static void
17758rb_vm_pop_cfunc_frame(void)
17759{
17760 rb_execution_context_t *ec = rb_current_execution_context(1);
17761 rb_control_frame_t *cfp = ec->cfp;
17762 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
17763 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);
17764 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);
17765 vm_pop_frame(ec, cfp, cfp->ep);
17766}
17767static VALUE
17768vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17769{
17770 ((void)0);
17771 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 0);
17772}
17773static VALUE
17774vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17775{
17776 ((void)0);
17777 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 1);
17778}
17779static VALUE
17780vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17781{
17782 ((void)0);
17783 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 2);
17784}
17785static VALUE
17786vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17787{
17788 ((void)0);
17789 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 3);
17790}
17791static VALUE
17792vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17793{
17794 ((void)0);
17795 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 4);
17796}
17797static VALUE
17798vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17799{
17800 ((void)0);
17801 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 5);
17802}
17803static VALUE
17804vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17805{
17806 ((void)0);
17807 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 0);
17808}
17809static VALUE
17810vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17811{
17812 ((void)0);
17813 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 1);
17814}
17815static VALUE
17816vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17817{
17818 ((void)0);
17819 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 2);
17820}
17821static VALUE
17822vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17823{
17824 ((void)0);
17825 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 3);
17826}
17827static VALUE
17828vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17829{
17830 ((void)0);
17831 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 4);
17832}
17833static VALUE
17834vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17835{
17836 ((void)0);
17837 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 5);
17838}
17839static VALUE
17840vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17841{
17842 ((void)0);
17843 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 0);
17844}
17845static VALUE
17846vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17847{
17848 ((void)0);
17849 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 1);
17850}
17851static VALUE
17852vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17853{
17854 ((void)0);
17855 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 2);
17856}
17857static VALUE
17858vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17859{
17860 ((void)0);
17861 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 3);
17862}
17863static VALUE
17864vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17865{
17866 ((void)0);
17867 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 4);
17868}
17869static VALUE
17870vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17871{
17872 ((void)0);
17873 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 5);
17874}
17875static VALUE
17876vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17877{
17878 ((void)0);
17879 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 0);
17880}
17881static VALUE
17882vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17883{
17884 ((void)0);
17885 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 1);
17886}
17887static VALUE
17888vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17889{
17890 ((void)0);
17891 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 2);
17892}
17893static VALUE
17894vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17895{
17896 ((void)0);
17897 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 3);
17898}
17899static VALUE
17900vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17901{
17902 ((void)0);
17903 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 4);
17904}
17905static VALUE
17906vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
17907{
17908 ((void)0);
17909 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 5);
17910}
17911static const vm_call_handler vm_call_iseq_handlers[][6] = {
17912 {
17913 vm_call_iseq_setup_normal_0start_0params_0locals,
17914 vm_call_iseq_setup_normal_0start_0params_1locals,
17915 vm_call_iseq_setup_normal_0start_0params_2locals,
17916 vm_call_iseq_setup_normal_0start_0params_3locals,
17917 vm_call_iseq_setup_normal_0start_0params_4locals,
17918 vm_call_iseq_setup_normal_0start_0params_5locals,
17919 },
17920 {
17921 vm_call_iseq_setup_normal_0start_1params_0locals,
17922 vm_call_iseq_setup_normal_0start_1params_1locals,
17923 vm_call_iseq_setup_normal_0start_1params_2locals,
17924 vm_call_iseq_setup_normal_0start_1params_3locals,
17925 vm_call_iseq_setup_normal_0start_1params_4locals,
17926 vm_call_iseq_setup_normal_0start_1params_5locals,
17927 },
17928 {
17929 vm_call_iseq_setup_normal_0start_2params_0locals,
17930 vm_call_iseq_setup_normal_0start_2params_1locals,
17931 vm_call_iseq_setup_normal_0start_2params_2locals,
17932 vm_call_iseq_setup_normal_0start_2params_3locals,
17933 vm_call_iseq_setup_normal_0start_2params_4locals,
17934 vm_call_iseq_setup_normal_0start_2params_5locals,
17935 },
17936 {
17937 vm_call_iseq_setup_normal_0start_3params_0locals,
17938 vm_call_iseq_setup_normal_0start_3params_1locals,
17939 vm_call_iseq_setup_normal_0start_3params_2locals,
17940 vm_call_iseq_setup_normal_0start_3params_3locals,
17941 vm_call_iseq_setup_normal_0start_3params_4locals,
17942 vm_call_iseq_setup_normal_0start_3params_5locals,
17943 },
17944};
17945static inline vm_call_handler
17946vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size)
17947{
17948 if ((__builtin_expect(!!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit)), 0))) {
17949 return &vm_call_iseq_setup_tailcall_0start;
17950 }
17951 else if (0) {
17952 return &vm_call_iseq_setup_normal_0start;
17953 }
17954 else if (param_size <= 3 && local_size <= 5) {
17955 ((void)0);
17956 return vm_call_iseq_handlers[param_size][local_size];
17957 }
17958 else {
17959 return &vm_call_iseq_setup_normal_0start;
17960 }
17961}
17962#define MJIT_HEADER 1
17963#define _FORTIFY_SOURCE 2
17964#define RUBY_EXPORT 1
17965#define _XOPEN_SOURCE 1
17966#define _GNU_SOURCE 1
17967#define vm_exec rb_vm_exec
17968#define RUBY_EVAL_INTERN_H
17969#define RUBY_RUBY_H 1
17970#define RBIMPL_CONFIG_H
17971#define INCLUDE_RUBY_CONFIG_H 1
17972#define HAVE_STDIO_H 1
17973#define HAVE_STDLIB_H 1
17974#define HAVE_STRING_H 1
17975#define HAVE_INTTYPES_H 1
17976#define HAVE_STDINT_H 1
17977#define HAVE_STRINGS_H 1
17978#define HAVE_SYS_STAT_H 1
17979#define HAVE_SYS_TYPES_H 1
17980#define HAVE_UNISTD_H 1
17981#define HAVE_WCHAR_H 1
17982#define STDC_HEADERS 1
17983#define _ALL_SOURCE 1
17984#define _DARWIN_C_SOURCE 1
17985#define _GNU_SOURCE 1
17986#define _HPUX_ALT_XOPEN_SOCKET_API 1
17987#define _NETBSD_SOURCE 1
17988#define _OPENBSD_SOURCE 1
17989#define _POSIX_PTHREAD_SEMANTICS 1
17990#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
17991#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
17992#define __STDC_WANT_IEC_60559_DFP_EXT__ 1
17993#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
17994#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
17995#define __STDC_WANT_LIB_EXT2__ 1
17996#define __STDC_WANT_MATH_SPEC_FUNCS__ 1
17997#define _TANDEM_SOURCE 1
17998#define __EXTENSIONS__ 1
17999#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)")
18000#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop")
18001#define HAVE_STMT_AND_DECL_IN_EXPR 1
18002#define HAVE_CYGWIN_CONV_PATH 1
18003#define HAVE_LIBCRYPT 1
18004#define HAVE_LIBDL 1
18005#define HAVE_DIRENT_H 1
18006#define HAVE__BOOL 1
18007#define HAVE_STDBOOL_H 1
18008#define HAVE_SYS_WAIT_H 1
18009#define HAVE_GRP_H 1
18010#define HAVE_FCNTL_H 1
18011#define HAVE_FLOAT_H 1
18012#define HAVE_IEEEFP_H 1
18013#define HAVE_LANGINFO_H 1
18014#define HAVE_LIMITS_H 1
18015#define HAVE_LOCALE_H 1
18016#define HAVE_MALLOC_H 1
18017#define HAVE_PROCESS_H 1
18018#define HAVE_PWD_H 1
18019#define HAVE_STDALIGN_H 1
18020#define HAVE_SYS_FCNTL_H 1
18021#define HAVE_SYS_FILE_H 1
18022#define HAVE_SYS_IOCTL_H 1
18023#define HAVE_SYS_PARAM_H 1
18024#define HAVE_SYS_RANDOM_H 1
18025#define HAVE_SYS_RESOURCE_H 1
18026#define HAVE_SYS_SELECT_H 1
18027#define HAVE_SYS_SOCKET_H 1
18028#define HAVE_SYS_SYSMACROS_H 1
18029#define HAVE_SYS_TIME_H 1
18030#define HAVE_SYS_TIMES_H 1
18031#define HAVE_SYS_UIO_H 1
18032#define HAVE_SYS_UTIME_H 1
18033#define HAVE_TIME_H 1
18034#define HAVE_UCONTEXT_H 1
18035#define HAVE_UTIME_H 1
18036#define HAVE_X86INTRIN_H 1
18037#define HAVE_X86INTRIN_H 1
18038#define HAVE_GMP_H 1
18039#define HAVE_LIBGMP 1
18040#define HAVE_TYPEOF 1
18041#define restrict __restrict__
18042#define HAVE_LONG_LONG 1
18043#define HAVE_OFF_T 1
18044#define SIZEOF_INT 4
18045#define SIZEOF_SHORT 2
18046#define SIZEOF_LONG 8
18047#define SIZEOF_LONG_LONG 8
18048#define SIZEOF___INT64 0
18049#define SIZEOF___INT128 16
18050#define SIZEOF_OFF_T 8
18051#define SIZEOF_VOIDP 8
18052#define SIZEOF_FLOAT 4
18053#define SIZEOF_DOUBLE 8
18054#define SIZEOF_TIME_T 8
18055#define SIZEOF_CLOCK_T 8
18056#define PACKED_STRUCT(x) x __attribute__((packed))
18057#define USE_UNALIGNED_MEMBER_ACCESS 1
18058#define PRI_LL_PREFIX "ll"
18059#define HAVE_PID_T 1
18060#define rb_pid_t pid_t
18061#define SIGNEDNESS_OF_PID_T -1
18062#define PIDT2NUM(v) INT2NUM(v)
18063#define NUM2PIDT(v) NUM2INT(v)
18064#define PRI_PIDT_PREFIX PRI_INT_PREFIX
18065#define HAVE_UID_T 1
18066#define rb_uid_t uid_t
18067#define SIGNEDNESS_OF_UID_T +1
18068#define UIDT2NUM(v) UINT2NUM(v)
18069#define NUM2UIDT(v) NUM2UINT(v)
18070#define PRI_UIDT_PREFIX PRI_INT_PREFIX
18071#define HAVE_GID_T 1
18072#define rb_gid_t gid_t
18073#define SIGNEDNESS_OF_GID_T +1
18074#define GIDT2NUM(v) UINT2NUM(v)
18075#define NUM2GIDT(v) NUM2UINT(v)
18076#define PRI_GIDT_PREFIX PRI_INT_PREFIX
18077#define HAVE_TIME_T 1
18078#define rb_time_t time_t
18079#define SIGNEDNESS_OF_TIME_T -1
18080#define TIMET2NUM(v) LONG2NUM(v)
18081#define NUM2TIMET(v) NUM2LONG(v)
18082#define PRI_TIMET_PREFIX PRI_LONG_PREFIX
18083#define HAVE_DEV_T 1
18084#define rb_dev_t dev_t
18085#define SIGNEDNESS_OF_DEV_T +1
18086#define DEVT2NUM(v) UINT2NUM(v)
18087#define NUM2DEVT(v) NUM2UINT(v)
18088#define PRI_DEVT_PREFIX PRI_INT_PREFIX
18089#define HAVE_MODE_T 1
18090#define rb_mode_t mode_t
18091#define SIGNEDNESS_OF_MODE_T +1
18092#define MODET2NUM(v) UINT2NUM(v)
18093#define NUM2MODET(v) NUM2UINT(v)
18094#define PRI_MODET_PREFIX PRI_INT_PREFIX
18095#define HAVE_RLIM_T 1
18096#define rb_rlim_t rlim_t
18097#define SIGNEDNESS_OF_RLIM_T +1
18098#define RLIM2NUM(v) ULONG2NUM(v)
18099#define NUM2RLIM(v) NUM2ULONG(v)
18100#define PRI_RLIM_PREFIX PRI_LONG_PREFIX
18101#define HAVE_OFF_T 1
18102#define rb_off_t off_t
18103#define SIGNEDNESS_OF_OFF_T -1
18104#define OFFT2NUM(v) LONG2NUM(v)
18105#define NUM2OFFT(v) NUM2LONG(v)
18106#define PRI_OFFT_PREFIX PRI_LONG_PREFIX
18107#define HAVE_CLOCKID_T 1
18108#define rb_clockid_t clockid_t
18109#define SIGNEDNESS_OF_CLOCKID_T +1
18110#define CLOCKID2NUM(v) ULONG2NUM(v)
18111#define NUM2CLOCKID(v) NUM2ULONG(v)
18112#define PRI_CLOCKID_PREFIX PRI_LONG_PREFIX
18113#define HAVE_VA_ARGS_MACRO 1
18114#define HAVE__ALIGNOF 1
18115#define CONSTFUNC(x) __attribute__ ((__const__)) x
18116#define PUREFUNC(x) __attribute__ ((__pure__)) x
18117#define NORETURN(x) __attribute__ ((__noreturn__)) x
18118#define DEPRECATED(x) __attribute__ ((__deprecated__)) x
18119#define DEPRECATED_BY(n,x) __attribute__ ((__deprecated__("by "#n))) x
18120#define NOINLINE(x) __attribute__ ((__noinline__)) x
18121#define NO_SANITIZE(san,x) __attribute__ ((__no_sanitize__(san))) x
18122#define NO_SANITIZE_ADDRESS(x) __attribute__ ((__no_sanitize_address__)) x
18123#define NO_ADDRESS_SAFETY_ANALYSIS(x) __attribute__ ((__no_address_safety_analysis__)) x
18124#define WARN_UNUSED_RESULT(x) __attribute__ ((__warn_unused_result__)) x
18125#define MAYBE_UNUSED(x) __attribute__ ((__unused__)) x
18126#define ERRORFUNC(mesg,x) __attribute__ ((__error__ mesg)) x
18127#define WARNINGFUNC(mesg,x) __attribute__ ((__warning__ mesg)) x
18128#define WEAK(x) __attribute__ ((__weak__)) x
18129#define HAVE_FUNC_WEAK 1
18130#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
18131#define HAVE_NULLPTR 1
18132#define FUNC_STDCALL(x) __attribute__ ((__stdcall__)) x
18133#define FUNC_CDECL(x) __attribute__ ((__cdecl__)) x
18134#define FUNC_FASTCALL(x) __attribute__ ((__fastcall__)) x
18135#define FUNC_UNOPTIMIZED(x) __attribute__ ((__optimize__("O0"))) x
18136#define FUNC_MINIMIZED(x) __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
18137#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1
18138#define RUBY_ALIAS_FUNCTION_TYPE(type,prot,name,args) type prot __attribute__((alias(#name)));
18139#define RUBY_ALIAS_FUNCTION_VOID(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)
18140#define HAVE_GCC_ATOMIC_BUILTINS 1
18141#define HAVE_GCC_SYNC_BUILTINS 1
18142#define UNREACHABLE __builtin_unreachable()
18143#define RUBY_FUNC_EXPORTED __attribute__ ((__visibility__("default"))) extern
18144#define RUBY_FUNC_NONNULL(n,x) __attribute__ ((__nonnull__(n))) x
18145#define RUBY_FUNCTION_NAME_STRING __func__
18146#define ENUM_OVER_INT 1
18147#define HAVE_DECL_SYS_NERR 1
18148#define HAVE_DECL_GETENV 1
18149#define SIZEOF_SIZE_T 8
18150#define SIZEOF_PTRDIFF_T 8
18151#define SIZEOF_DEV_T 4
18152#define PRI_SIZE_PREFIX "z"
18153#define PRI_PTRDIFF_PREFIX "t"
18154#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
18155#define HAVE_STRUCT_STAT_ST_BLOCKS 1
18156#define HAVE_STRUCT_STAT_ST_RDEV 1
18157#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T
18158#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T
18159#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG
18160#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T
18161#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T
18162#define HAVE_STRUCT_STAT_ST_ATIM 1
18163#define HAVE_STRUCT_STAT_ST_MTIM 1
18164#define HAVE_STRUCT_STAT_ST_CTIM 1
18165#define HAVE_STRUCT_TIMEVAL 1
18166#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T
18167#define HAVE_STRUCT_TIMESPEC 1
18168#define HAVE_STRUCT_TIMEZONE 1
18169#define HAVE_RB_FD_INIT 1
18170#define HAVE_INT8_T 1
18171#define SIZEOF_INT8_T 1
18172#define HAVE_UINT8_T 1
18173#define SIZEOF_UINT8_T 1
18174#define HAVE_INT16_T 1
18175#define SIZEOF_INT16_T 2
18176#define HAVE_UINT16_T 1
18177#define SIZEOF_UINT16_T 2
18178#define HAVE_INT32_T 1
18179#define SIZEOF_INT32_T 4
18180#define HAVE_UINT32_T 1
18181#define SIZEOF_UINT32_T 4
18182#define HAVE_INT64_T 1
18183#define SIZEOF_INT64_T 8
18184#define HAVE_UINT64_T 1
18185#define SIZEOF_UINT64_T 8
18186#define HAVE_INT128_T 1
18187#define int128_t __int128
18188#define SIZEOF_INT128_T SIZEOF___INT128
18189#define HAVE_UINT128_T 1
18190#define uint128_t unsigned __int128
18191#define SIZEOF_UINT128_T SIZEOF___INT128
18192#define HAVE_INTPTR_T 1
18193#define SIZEOF_INTPTR_T 8
18194#define HAVE_UINTPTR_T 1
18195#define SIZEOF_UINTPTR_T 8
18196#define HAVE_SSIZE_T 1
18197#define SIZEOF_SSIZE_T 8
18198#define GETGROUPS_T gid_t
18199#define HAVE_ALLOCA_H 1
18200#define HAVE_ALLOCA 1
18201#define HAVE_DUP 1
18202#define HAVE_DUP2 1
18203#define HAVE_ACOSH 1
18204#define HAVE_CBRT 1
18205#define HAVE_CRYPT 1
18206#define HAVE_ERF 1
18207#define HAVE_EXPLICIT_BZERO 1
18208#define HAVE_FFS 1
18209#define HAVE_FLOCK 1
18210#define HAVE_HYPOT 1
18211#define HAVE_LGAMMA_R 1
18212#define HAVE_MEMMOVE 1
18213#define HAVE_NAN 1
18214#define HAVE_NEXTAFTER 1
18215#define HAVE_STRCHR 1
18216#define HAVE_STRERROR 1
18217#define HAVE_STRLCAT 1
18218#define HAVE_STRLCPY 1
18219#define HAVE_STRSTR 1
18220#define HAVE_TGAMMA 1
18221#define HAVE_ISFINITE 1
18222#define HAVE_SIGNBIT 1
18223#define HAVE_FORK 1
18224#define HAVE_VFORK 1
18225#define HAVE_WORKING_VFORK 1
18226#define HAVE_WORKING_FORK 1
18227#define HAVE__LONGJMP 1
18228#define HAVE_ARC4RANDOM_BUF 1
18229#define HAVE_ATAN2L 1
18230#define HAVE_ATAN2F 1
18231#define HAVE_CHROOT 1
18232#define HAVE_CLOCK_GETTIME 1
18233#define HAVE_COSH 1
18234#define HAVE_CRYPT_R 1
18235#define HAVE_DIRFD 1
18236#define HAVE_DLOPEN 1
18237#define HAVE_DLADDR 1
18238#define HAVE_DUP3 1
18239#define HAVE_EACCESS 1
18240#define HAVE_ENDGRENT 1
18241#define HAVE_FCHMOD 1
18242#define HAVE_FCHOWN 1
18243#define HAVE_FCNTL 1
18244#define HAVE_FDATASYNC 1
18245#define HAVE_FDOPENDIR 1
18246#define HAVE_FMOD 1
18247#define HAVE_FSTATAT 1
18248#define HAVE_FSYNC 1
18249#define HAVE_FTRUNCATE 1
18250#define HAVE_GETCWD 1
18251#define HAVE_GETENTROPY 1
18252#define HAVE_GETGRNAM 1
18253#define HAVE_GETGRNAM_R 1
18254#define HAVE_GETGROUPS 1
18255#define HAVE_GETLOGIN 1
18256#define HAVE_GETLOGIN_R 1
18257#define HAVE_GETPGID 1
18258#define HAVE_GETPGRP 1
18259#define HAVE_GETPRIORITY 1
18260#define HAVE_GETPWNAM 1
18261#define HAVE_GETPWNAM_R 1
18262#define HAVE_GETPWUID 1
18263#define HAVE_GETPWUID_R 1
18264#define HAVE_GETRANDOM 1
18265#define HAVE_GETRLIMIT 1
18266#define HAVE_GETSID 1
18267#define HAVE_GETTIMEOFDAY 1
18268#define HAVE_GMTIME_R 1
18269#define HAVE_GRANTPT 1
18270#define HAVE_INITGROUPS 1
18271#define HAVE_IOCTL 1
18272#define HAVE_ISSETUGID 1
18273#define HAVE_KILLPG 1
18274#define HAVE_LCHOWN 1
18275#define HAVE_LINK 1
18276#define HAVE_LLABS 1
18277#define HAVE_LOCKF 1
18278#define HAVE_LOG2 1
18279#define HAVE_LSTAT 1
18280#define HAVE_LUTIMES 1
18281#define HAVE_MALLOC_USABLE_SIZE 1
18282#define HAVE_MBLEN 1
18283#define HAVE_MEMALIGN 1
18284#define HAVE_WRITEV 1
18285#define HAVE_MEMRCHR 1
18286#define HAVE_MEMMEM 1
18287#define HAVE_MKFIFO 1
18288#define HAVE_MKNOD 1
18289#define HAVE_MKTIME 1
18290#define HAVE_MMAP 1
18291#define HAVE_OPENAT 1
18292#define HAVE_PIPE2 1
18293#define HAVE_POLL 1
18294#define HAVE_POSIX_FADVISE 1
18295#define HAVE_POSIX_MEMALIGN 1
18296#define HAVE_PPOLL 1
18297#define HAVE_PREAD 1
18298#define HAVE_PWRITE 1
18299#define HAVE_QSORT_R 1
18300#define HAVE_READLINK 1
18301#define HAVE_REALPATH 1
18302#define HAVE_ROUND 1
18303#define HAVE_SCHED_GETAFFINITY 1
18304#define HAVE_SEEKDIR 1
18305#define HAVE_SETEGID 1
18306#define HAVE_SETENV 1
18307#define HAVE_SETEUID 1
18308#define HAVE_SETGID 1
18309#define HAVE_SETGROUPS 1
18310#define HAVE_SETPGID 1
18311#define HAVE_SETPGRP 1
18312#define HAVE_SETREGID 1
18313#define HAVE_SETREUID 1
18314#define HAVE_SETRLIMIT 1
18315#define HAVE_SETSID 1
18316#define HAVE_SETUID 1
18317#define HAVE_SHUTDOWN 1
18318#define HAVE_SIGACTION 1
18319#define HAVE_SIGALTSTACK 1
18320#define HAVE_SIGPROCMASK 1
18321#define HAVE_SINH 1
18322#define HAVE_SPAWNV 1
18323#define HAVE_SYMLINK 1
18324#define HAVE_SYSCONF 1
18325#define HAVE_TANH 1
18326#define HAVE_TELLDIR 1
18327#define HAVE_TIMEGM 1
18328#define HAVE_TIMES 1
18329#define HAVE_TRUNCATE 1
18330#define HAVE_UNSETENV 1
18331#define HAVE_UTIMENSAT 1
18332#define HAVE_UTIMES 1
18333#define HAVE_WAIT4 1
18334#define HAVE_WAITPID 1
18335#define HAVE_CRYPT_H 1
18336#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1
18337#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1
18338#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1
18339#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
18340#define HAVE_BUILTIN___BUILTIN_BSWAP32 1
18341#define HAVE_BUILTIN___BUILTIN_BSWAP64 1
18342#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1
18343#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1
18344#define HAVE_BUILTIN___BUILTIN_CLZ 1
18345#define HAVE_BUILTIN___BUILTIN_CLZL 1
18346#define HAVE_BUILTIN___BUILTIN_CLZLL 1
18347#define HAVE_BUILTIN___BUILTIN_CTZ 1
18348#define HAVE_BUILTIN___BUILTIN_CTZLL 1
18349#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1
18350#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1
18351#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1
18352#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1
18353#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1
18354#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1
18355#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1
18356#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1
18357#define HAVE_BUILTIN___BUILTIN_TRAP 1
18358#define HAVE_BUILTIN___BUILTIN_EXPECT 1
18359#define HAVE_GNU_QSORT_R 1
18360#define ATAN2_INF_C99 1
18361#define HAVE_CLOCK_GETRES 1
18362#define HAVE_LIBRT 1
18363#define HAVE_LIBRT 1
18364#define HAVE_TIMER_CREATE 1
18365#define HAVE_TIMER_SETTIME 1
18366#define HAVE_STRUCT_TM_TM_ZONE 1
18367#define HAVE_TM_ZONE 1
18368#define HAVE_STRUCT_TM_TM_GMTOFF 1
18369#define HAVE_DAYLIGHT 1
18370#define NEGATIVE_TIME_T 1
18371#define POSIX_SIGNAL 1
18372#define HAVE_SIG_T 1
18373#define RSHIFT(x,y) ((x)>>(int)(y))
18374#define HAVE__SC_CLK_TCK 1
18375#define STACK_GROW_DIRECTION -1
18376#define HAVE_GETCONTEXT 1
18377#define HAVE_SWAPCONTEXT 1
18378#define HAVE_MAKECONTEXT 1
18379#define COROUTINE_H "coroutine/ucontext/Context.h"
18380#define _REENTRANT 1
18381#define _THREAD_SAFE 1
18382#define HAVE_LIBPTHREAD 1
18383#define HAVE_SCHED_YIELD 1
18384#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1
18385#define HAVE_PTHREAD_ATTR_GETSTACK 1
18386#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
18387#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
18388#define HAVE_PTHREAD_SETNAME_NP 1
18389#define HAVE_PTHREAD_SIGMASK 1
18390#define HAVE_PTHREAD_GETATTR_NP 1
18391#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name)
18392#define SET_ANOTHER_THREAD_NAME(thid,name) pthread_setname_np(thid, name)
18393#define DEFINE_MCONTEXT_PTR(mc,uc) mcontext_t *mc = &(uc)->uc_mcontext
18394#define HAVE_GETCONTEXT 1
18395#define HAVE_SETCONTEXT 1
18396#define HAVE_CONST_PAGE_SIZE 0
18397#define IOCTL_REQ_TYPE unsigned long
18398#define NUM2IOCTLREQ(num) NUM2ULONG(num)
18399#define DLEXT_MAXLEN 3
18400#define DLEXT ".so"
18401#define LIBDIR_BASENAME "lib"
18402#define EXECUTABLE_EXTS ".exe",".com",".cmd",".bat"
18403#define HAVE__SETJMP 1
18404#define RUBY_SETJMP(env) __builtin_setjmp((env))
18405#define RUBY_LONGJMP(env,val) __builtin_longjmp((env),val)
18406#define USE_MJIT 1
18407#define HAVE_PTHREAD_H 1
18408#define THREAD_IMPL_H "thread_pthread.h"
18409#define THREAD_IMPL_SRC "thread_pthread.c"
18410#define RUBY_PLATFORM "x86_64-cygwin"
18411#define RBIMPL_COMPILER_SINCE_H
18412#define RBIMPL_COMPILER_IS_H
18413#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc
18414#define RBIMPL_COMPILER_IS_APPLE_H
18415#define RBIMPL_COMPILER_IS_Apple 0
18416#define RBIMPL_COMPILER_IS_CLANG_H
18417#define RBIMPL_COMPILER_IS_Clang 0
18418#define RBIMPL_COMPILER_IS_GCC_H
18419#define RBIMPL_COMPILER_IS_INTEL_H
18420#define RBIMPL_COMPILER_IS_Intel 0
18421#define RBIMPL_COMPILER_IS_GCC 1
18422#define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__
18423#define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__
18424#define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__
18425#define RBIMPL_COMPILER_IS_MSVC_H
18426#define RBIMPL_COMPILER_IS_MSVC 0
18427#define RBIMPL_COMPILER_IS_SUNPRO_H
18428#define RBIMPL_COMPILER_IS_SunPro 0
18429#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)))))))
18430#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)))))))
18431#undef HAVE_PROTOTYPES
18432#define HAVE_PROTOTYPES 1
18433#undef HAVE_STDARG_PROTOTYPES
18434#define HAVE_STDARG_PROTOTYPES 1
18435#undef TOKEN_PASTE
18436#define TOKEN_PASTE(x,y) x ##y
18437#define STRINGIZE(expr) STRINGIZE0(expr)
18438#define STRINGIZE0(expr) #expr
18439#define UNALIGNED_WORD_ACCESS 1
18440#define RBIMPL_TEST3(q,w,e,...) e
18441#define RBIMPL_TEST2(...) RBIMPL_TEST3(__VA_OPT__(,),1,0,0)
18442#define RBIMPL_TEST1() RBIMPL_TEST2("ruby")
18443#define HAVE___VA_OPT__
18444#undef RBIMPL_TEST1
18445#undef RBIMPL_TEST2
18446#undef RBIMPL_TEST3
18447#define USE_RVARGC 0
18448#define _STDARG_H
18449#define _ANSI_STDARG_H_
18450#undef __need___va_list
18451#define __GNUC_VA_LIST
18452#define va_start(v,l) __builtin_va_start(v,l)
18453#define va_end(v) __builtin_va_end(v)
18454#define va_arg(v,l) __builtin_va_arg(v,l)
18455#define va_copy(d,s) __builtin_va_copy(d,s)
18456#define __va_copy(d,s) __builtin_va_copy(d,s)
18457#define _VA_LIST_
18458#define _VA_LIST
18459#define _VA_LIST_DEFINED
18460#define _VA_LIST_T_H
18461#define __va_list__
18462#define RUBY_DEFINES_H 1
18463#define _STDIO_H_
18464#define _ANSIDECL_H_
18465#define __NEWLIB_H__ 1
18466#define _NEWLIB_VERSION_H__ 1
18467#define _NEWLIB_VERSION "4.2.0"
18468#define __NEWLIB__ 4
18469#define __NEWLIB_MINOR__ 2
18470#define __NEWLIB_PATCHLEVEL__ 0
18471#define _ATEXIT_DYNAMIC_ALLOC 1
18472#define _FSEEK_OPTIMIZATION 1
18473#define _FVWRITE_IN_STREAMIO 1
18474#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1
18475#define _HAVE_LONG_DOUBLE 1
18476#define _MB_CAPABLE 1
18477#define _MB_LEN_MAX 8
18478#define _REENT_CHECK_VERIFY 1
18479#define _UNBUF_STREAM_OPT 1
18480#define _WANT_IO_C99_FORMATS 1
18481#define _WANT_IO_LONG_DOUBLE 1
18482#define _WANT_IO_LONG_LONG 1
18483#define _WANT_IO_POS_ARGS 1
18484#define _WANT_USE_GDTOA 1
18485#define _WIDE_ORIENT 1
18486#define __SYS_CONFIG_H__
18487#define __IEEE_LITTLE_ENDIAN
18488#define _SUPPORTS_ERREXCEPT
18489#define __OBSOLETE_MATH_DEFAULT 0
18490#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT
18491#define _SYS_FEATURES_H
18492#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
18493#define __GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi)
18494#undef _ATFILE_SOURCE
18495#define _ATFILE_SOURCE 1
18496#undef _DEFAULT_SOURCE
18497#define _DEFAULT_SOURCE 1
18498#undef _ISOC99_SOURCE
18499#define _ISOC99_SOURCE 1
18500#undef _ISOC11_SOURCE
18501#define _ISOC11_SOURCE 1
18502#undef _POSIX_SOURCE
18503#define _POSIX_SOURCE 1
18504#undef _POSIX_C_SOURCE
18505#define _POSIX_C_SOURCE 200809L
18506#undef _XOPEN_SOURCE
18507#define _XOPEN_SOURCE 700
18508#undef _XOPEN_SOURCE_EXTENDED
18509#define _XOPEN_SOURCE_EXTENDED 1
18510#undef _POSIX_SOURCE
18511#define _POSIX_SOURCE 1
18512#undef _POSIX_C_SOURCE
18513#define _POSIX_C_SOURCE 200809L
18514#undef _ATFILE_SOURCE
18515#define _ATFILE_SOURCE 1
18516#define __ATFILE_VISIBLE 1
18517#define __BSD_VISIBLE 1
18518#define __GNU_VISIBLE 1
18519#define __ISO_C_VISIBLE 2011
18520#define __LARGEFILE_VISIBLE 1
18521#define __MISC_VISIBLE 1
18522#define __POSIX_VISIBLE 200809
18523#define __SVID_VISIBLE 1
18524#define __XSI_VISIBLE 700
18525#define __SSP_FORTIFY_LEVEL 2
18526#define _POSIX_VERSION 200809L
18527#define _POSIX2_VERSION 200809L
18528#define _XOPEN_VERSION __XSI_VISIBLE
18529#define _POSIX_ADVISORY_INFO 200809L
18530#define _POSIX_ASYNCHRONOUS_IO 200809L
18531#define _POSIX_BARRIERS 200809L
18532#define _POSIX_CHOWN_RESTRICTED 1
18533#define _POSIX_CLOCK_SELECTION 200809L
18534#define _POSIX_CPUTIME 200809L
18535#define _POSIX_FSYNC 200809L
18536#define _POSIX_IPV6 200809L
18537#define _POSIX_JOB_CONTROL 1
18538#define _POSIX_MAPPED_FILES 200809L
18539#define _POSIX_MEMLOCK_RANGE 200809L
18540#define _POSIX_MEMORY_PROTECTION 200809L
18541#define _POSIX_MESSAGE_PASSING 200809L
18542#define _POSIX_MONOTONIC_CLOCK 200809L
18543#define _POSIX_NO_TRUNC 1
18544#define _POSIX_PRIORITY_SCHEDULING 200809L
18545#define _POSIX_RAW_SOCKETS 200809L
18546#define _POSIX_READER_WRITER_LOCKS 200809L
18547#define _POSIX_REALTIME_SIGNALS 200809L
18548#define _POSIX_REGEXP 1
18549#define _POSIX_SAVED_IDS 1
18550#define _POSIX_SEMAPHORES 200809L
18551#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
18552#define _POSIX_SHELL 1
18553#define _POSIX_SPAWN 200809L
18554#define _POSIX_SPIN_LOCKS 200809L
18555#define _POSIX_SYNCHRONIZED_IO 200809L
18556#define _POSIX_THREAD_ATTR_STACKADDR 200809L
18557#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
18558#define _POSIX_THREAD_CPUTIME 200809L
18559#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
18560#define _POSIX_THREAD_PROCESS_SHARED 200809L
18561#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
18562#define _POSIX_THREADS 200809L
18563#define _POSIX_TIMEOUTS 200809L
18564#define _POSIX_TIMERS 200809L
18565#define _POSIX_VDISABLE '\0'
18566#define _POSIX2_C_VERSION _POSIX2_VERSION
18567#define _POSIX2_C_BIND _POSIX2_VERSION
18568#define _POSIX2_C_DEV _POSIX2_VERSION
18569#define _POSIX2_CHAR_TERM _POSIX2_VERSION
18570#define _POSIX2_SW_DEV _POSIX2_VERSION
18571#define _POSIX2_UPE _POSIX2_VERSION
18572#define _POSIX_V6_ILP32_OFF32 -1
18573#define _POSIX_V6_ILP32_OFFBIG -1
18574#define _POSIX_V6_LP64_OFF64 1
18575#define _POSIX_V6_LPBIG_OFFBIG 1
18576#define _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
18577#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
18578#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64
18579#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
18580#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
18581#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
18582#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
18583#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
18584#define _XOPEN_CRYPT 1
18585#define _XOPEN_ENH_I18N 1
18586#define _XOPEN_SHM 1
18587#define __STDC_ISO_10646__ 201806L
18588#define _POINTER_INT long
18589#undef __RAND_MAX
18590#define __RAND_MAX 0x7fffffff
18591#define _CYGWIN_CONFIG_H
18592#define __DYNAMIC_REENT__
18593#define __CYGTLS_PADSIZE__ 12800
18594#define _SYMSTR(x) #x
18595#define __FILENAME_MAX__ 4096
18596#define _READ_WRITE_RETURN_TYPE _ssize_t
18597#define _READ_WRITE_BUFSIZE_TYPE size_t
18598#define __LINUX_ERRNO_EXTENSIONS__ 1
18599#define _MB_EXTENDED_CHARSETS_ALL 1
18600#define __HAVE_LOCALE_INFO__ 1
18601#define __HAVE_LOCALE_INFO_EXTENDED__ 1
18602#define _WANT_C99_TIME_FORMATS 1
18603#define _GLIBC_EXTENSION 1
18604#define _STDIO_BSD_SEMANTICS 1
18605#define __TM_GMTOFF tm_gmtoff
18606#define __TM_ZONE tm_zone
18607#define _USE_LONG_TIME_T 1
18608#define _REENT_BACKWARD_BINARY_COMPAT 1
18609#define __EXPORT
18610#define __IMPORT __declspec(dllimport)
18611#define DEFAULT_LOCALE "C.UTF-8"
18612#define _USE_GDTOA
18613#define _MB_EXTENDED_CHARSETS_ISO 1
18614#define _MB_EXTENDED_CHARSETS_WINDOWS 1
18615#define _BEGIN_STD_C
18616#define _END_STD_C
18617#define _NOTHROW
18618#define _LONG_DOUBLE long double
18619#define _ATTRIBUTE(attrs) __attribute__ (attrs)
18620#define _ELIDABLE_INLINE static __inline__
18621#define _NOINLINE __attribute__ ((__noinline__))
18622#define _NOINLINE_STATIC _NOINLINE static
18623#define _FSTDIO
18624#define __need_size_t
18625#define __need_NULL
18626#define _SYS_CDEFS_H_
18627#define _MACHINE__DEFAULT_TYPES_H
18628#define __EXP(x) __ ##x ##__
18629#define __have_longlong64 1
18630#define __have_long64 1
18631#define ___int8_t_defined 1
18632#define ___int16_t_defined 1
18633#define ___int32_t_defined 1
18634#define ___int64_t_defined 1
18635#define ___int_least8_t_defined 1
18636#define ___int_least16_t_defined 1
18637#define ___int_least32_t_defined 1
18638#define ___int_least64_t_defined 1
18639#undef __EXP
18640#define __size_t__
18641#define __SIZE_T__
18642#define _SIZE_T
18643#define _SYS_SIZE_T_H
18644#define _T_SIZE_
18645#define _T_SIZE
18646#define __SIZE_T
18647#define _SIZE_T_
18648#define _BSD_SIZE_T_
18649#define _SIZE_T_DEFINED_
18650#define _SIZE_T_DEFINED
18651#define _BSD_SIZE_T_DEFINED_
18652#define _SIZE_T_DECLARED
18653#define ___int_size_t_h
18654#define _GCC_SIZE_T
18655#define _SIZET_
18656#define __size_t
18657#undef __need_size_t
18658#undef NULL
18659#define NULL ((void *)0)
18660#undef __need_NULL
18661#define __PMT(args) args
18662#define __DOTS , ...
18663#define __THROW
18664#define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
18665#define __ptr_t void *
18666#define __long_double_t long double
18667#define __attribute_malloc__
18668#define __attribute_pure__
18669#define __attribute_format_strfmon__(a,b)
18670#define __flexarr [0]
18671#define __bounded
18672#define __unbounded
18673#define __ptrvalue
18674#define __has_extension __has_feature
18675#define __has_feature(x) 0
18676#define __BEGIN_DECLS
18677#define __END_DECLS
18678#define __GNUCLIKE_ASM 3
18679#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
18680#define __GNUCLIKE___TYPEOF 1
18681#define __GNUCLIKE___SECTION 1
18682#define __GNUCLIKE_CTOR_SECTION_HANDLING 1
18683#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
18684#define __GNUCLIKE_BUILTIN_VARARGS 1
18685#define __GNUCLIKE_BUILTIN_STDARG 1
18686#define __GNUCLIKE_BUILTIN_VAALIST 1
18687#define __GNUC_VA_LIST_COMPATIBILITY 1
18688#define __compiler_membar() __asm __volatile(" " : : : "memory")
18689#define __GNUCLIKE_BUILTIN_NEXT_ARG 1
18690#define __GNUCLIKE_MATH_BUILTIN_RELOPS
18691#define __GNUCLIKE_BUILTIN_MEMCPY 1
18692#define __CC_SUPPORTS_INLINE 1
18693#define __CC_SUPPORTS___INLINE 1
18694#define __CC_SUPPORTS___INLINE__ 1
18695#define __CC_SUPPORTS___FUNC__ 1
18696#define __CC_SUPPORTS_WARNING 1
18697#define __CC_SUPPORTS_VARADIC_XXX 1
18698#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
18699#define __P(protos) protos
18700#define __CONCAT1(x,y) x ## y
18701#define __CONCAT(x,y) __CONCAT1(x,y)
18702#define __STRING(x) #x
18703#define __XSTRING(x) __STRING(x)
18704#define __const const
18705#define __signed signed
18706#define __volatile volatile
18707#define __weak_symbol __attribute__((__weak__))
18708#define __dead2 __attribute__((__noreturn__))
18709#define __pure2 __attribute__((__const__))
18710#define __unused __attribute__((__unused__))
18711#define __used __attribute__((__used__))
18712#define __packed __attribute__((__packed__))
18713#define __aligned(x) __attribute__((__aligned__(x)))
18714#define __section(x) __attribute__((__section__(x)))
18715#define __alloc_size(x) __attribute__((__alloc_size__(x)))
18716#define __alloc_size2(n,x) __attribute__((__alloc_size__(n, x)))
18717#define __alloc_align(x) __attribute__((__alloc_align__(x)))
18718#define __generic(expr,t,yes,no) _Generic(expr, t: yes, default: no)
18719#define __min_size(x) static (x)
18720#define __malloc_like __attribute__((__malloc__))
18721#define __pure __attribute__((__pure__))
18722#define __always_inline __inline__ __attribute__((__always_inline__))
18723#define __noinline __attribute__ ((__noinline__))
18724#define __nonnull(x) __attribute__((__nonnull__ x))
18725#define __nonnull_all __attribute__((__nonnull__))
18726#define __fastcall __attribute__((__fastcall__))
18727#define __result_use_check __attribute__((__warn_unused_result__))
18728#define __returns_twice __attribute__((__returns_twice__))
18729#define __unreachable() __builtin_unreachable()
18730#define __restrict restrict
18731#define __predict_true(exp) __builtin_expect((exp), 1)
18732#define __predict_false(exp) __builtin_expect((exp), 0)
18733#define __null_sentinel __attribute__((__sentinel__))
18734#define __exported __attribute__((__visibility__("default")))
18735#define __hidden
18736#define __offsetof(type,field) offsetof(type, field)
18737#define __rangeof(type,start,end) (__offsetof(type, end) - __offsetof(type, start))
18738#define __containerof(x,s,m) ({ const volatile __typeof(((s *)0)->m) *__x = (x); __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));})
18739#define __printflike(fmtarg,firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
18740#define __scanflike(fmtarg,firstvararg) __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
18741#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
18742#define __strfmonlike(fmtarg,firstvararg) __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
18743#define __strftimelike(fmtarg,firstvararg) __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
18744#define __printf0like(fmtarg,firstvararg)
18745#define __strong_reference(sym,aliassym) extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
18746#define __weak_reference(sym,alias) __asm__(".stabs \"_" #alias "\",11,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
18747#define __warn_references(sym,msg) __asm__(".stabs \"" msg "\",30,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
18748#define __FBSDID(s) struct __hack
18749#define __RCSID(s) struct __hack
18750#define __RCSID_SOURCE(s) struct __hack
18751#define __SCCSID(s) struct __hack
18752#define __COPYRIGHT(s) struct __hack
18753#define __DECONST(type,var) ((type)(__uintptr_t)(const void *)(var))
18754#define __DEVOLATILE(type,var) ((type)(__uintptr_t)(volatile void *)(var))
18755#define __DEQUALIFY(type,var) ((type)(__uintptr_t)(const volatile void *)(var))
18756#define _Nonnull
18757#define _Nullable
18758#define _Null_unspecified
18759#define __NULLABILITY_PRAGMA_PUSH
18760#define __NULLABILITY_PRAGMA_POP
18761#define __arg_type_tag(arg_kind,arg_idx,type_tag_idx)
18762#define __datatype_type_tag(kind,type)
18763#define __lock_annotate(x)
18764#define __lockable __lock_annotate(lockable)
18765#define __locks_exclusive(...) __lock_annotate(exclusive_lock_function(__VA_ARGS__))
18766#define __locks_shared(...) __lock_annotate(shared_lock_function(__VA_ARGS__))
18767#define __trylocks_exclusive(...) __lock_annotate(exclusive_trylock_function(__VA_ARGS__))
18768#define __trylocks_shared(...) __lock_annotate(shared_trylock_function(__VA_ARGS__))
18769#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
18770#define __asserts_exclusive(...) __lock_annotate(assert_exclusive_lock(__VA_ARGS__))
18771#define __asserts_shared(...) __lock_annotate(assert_shared_lock(__VA_ARGS__))
18772#define __requires_exclusive(...) __lock_annotate(exclusive_locks_required(__VA_ARGS__))
18773#define __requires_shared(...) __lock_annotate(shared_locks_required(__VA_ARGS__))
18774#define __requires_unlocked(...) __lock_annotate(locks_excluded(__VA_ARGS__))
18775#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
18776#define __nosanitizeaddress
18777#define __nosanitizememory
18778#define __nosanitizethread
18779#define __guarded_by(x) __lock_annotate(guarded_by(x))
18780#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))
18781#define __builtin_is_aligned(x,align) (((__uintptr_t)x & ((align) - 1)) == 0)
18782#define __builtin_align_up(x,align) ((__typeof__(x))(((__uintptr_t)(x)+((align)-1))&(~((align)-1))))
18783#define __builtin_align_down(x,align) ((__typeof__(x))((x)&(~((align)-1))))
18784#define __align_up(x,y) __builtin_align_up(x, y)
18785#define __align_down(x,y) __builtin_align_down(x, y)
18786#define __is_aligned(x,y) __builtin_is_aligned(x, y)
18787#define _STDDEF_H
18788#define _STDDEF_H_
18789#define _ANSI_STDDEF_H
18790#define _PTRDIFF_T
18791#define _T_PTRDIFF_
18792#define _T_PTRDIFF
18793#define __PTRDIFF_T
18794#define _PTRDIFF_T_
18795#define _BSD_PTRDIFF_T_
18796#define ___int_ptrdiff_t_h
18797#define _GCC_PTRDIFF_T
18798#define _PTRDIFF_T_DECLARED
18799#undef __need_ptrdiff_t
18800#undef __need_size_t
18801#define __wchar_t__
18802#define __WCHAR_T__
18803#define _WCHAR_T
18804#define _T_WCHAR_
18805#define _T_WCHAR
18806#define __WCHAR_T
18807#define _WCHAR_T_
18808#define _BSD_WCHAR_T_
18809#define _WCHAR_T_DEFINED_
18810#define _WCHAR_T_DEFINED
18811#define _WCHAR_T_H
18812#define ___int_wchar_t_h
18813#define __INT_WCHAR_T_H
18814#define _GCC_WCHAR_T
18815#define _WCHAR_T_DECLARED
18816#undef _BSD_WCHAR_T_
18817#undef __need_wchar_t
18818#undef NULL
18819#define NULL ((void *)0)
18820#undef __need_NULL
18821#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
18822#define _GCC_MAX_ALIGN_T
18823#define __need___va_list
18824#define _SYS_REENT_H_
18825#define _SYS__TYPES_H
18826#define __need_size_t
18827#define __need_wint_t
18828#undef __need_ptrdiff_t
18829#undef __need_size_t
18830#undef __need_wchar_t
18831#define _WINT_T
18832#undef __need_wint_t
18833#undef NULL
18834#define NULL ((void *)0)
18835#undef __need_NULL
18836#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
18837#define _MACHINE__TYPES_H
18838#define __machine_blkcnt_t_defined
18839#define __machine_blksize_t_defined
18840#define __machine_dev_t_defined
18841#define __machine_fsblkcnt_t_defined
18842#define __machine_fsfilcnt_t_defined
18843#define __machine_uid_t_defined
18844#define __machine_gid_t_defined
18845#define __machine_ino_t_defined
18846#define __machine_key_t_defined
18847#define __machine_sa_family_t_defined
18848#define __machine_socklen_t_defined
18849#undef __size_t
18850#define unsigned signed
18851#undef unsigned
18852#define _CLOCK_T_ unsigned long
18853#define _TIME_T_ long
18854#define _CLOCKID_T_ unsigned long
18855#define _TIMER_T_ unsigned long
18856#define _NULL 0
18857#define __Long int
18858#define _SYS_LOCK_H_
18859#define _LOCK_RECURSIVE_T _LOCK_T
18860#define _LOCK_T_RECURSIVE_INITIALIZER ((_LOCK_T)18)
18861#define _LOCK_T_INITIALIZER ((_LOCK_T)19)
18862#define __LOCK_INIT(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_INITIALIZER;
18863#define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_RECURSIVE_INITIALIZER;
18864#define __lock_init(__lock) __cygwin_lock_init(&__lock)
18865#define __lock_init_recursive(__lock) __cygwin_lock_init_recursive(&__lock)
18866#define __lock_close(__lock) __cygwin_lock_fini(&__lock)
18867#define __lock_close_recursive(__lock) __cygwin_lock_fini(&__lock)
18868#define __lock_acquire(__lock) __cygwin_lock_lock(&__lock)
18869#define __lock_acquire_recursive(__lock) __cygwin_lock_lock(&__lock)
18870#define __lock_try_acquire(lock) __cygwin_lock_trylock(&__lock)
18871#define __lock_try_acquire_recursive(lock) __cygwin_lock_trylock(&__lock)
18872#define __lock_release(__lock) __cygwin_lock_unlock(&__lock)
18873#define __lock_release_recursive(__lock) __cygwin_lock_unlock(&__lock)
18874#define _ATEXIT_SIZE 32
18875#define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
18876#define _REENT_SMALL_CHECK_INIT(ptr)
18877#define _fpos64_t _fpos_t
18878#define _RAND48_SEED_0 (0x330e)
18879#define _RAND48_SEED_1 (0xabcd)
18880#define _RAND48_SEED_2 (0x1234)
18881#define _RAND48_MULT_0 (0xe66d)
18882#define _RAND48_MULT_1 (0xdeec)
18883#define _RAND48_MULT_2 (0x0005)
18884#define _RAND48_ADD (0x000b)
18885#define _REENT_EMERGENCY_SIZE 25
18886#define _REENT_ASCTIME_SIZE 26
18887#define _REENT_SIGNAL_SIZE 24
18888#define _REENT_INIT_RESERVED_0 0,
18889#define _REENT_INIT_RESERVED_1 0,
18890#define _REENT_INIT_RESERVED_2 0,
18891#define _REENT_INIT_RESERVED_6_7 _NULL, _ATEXIT_INIT,
18892#define _REENT_INIT_RESERVED_8 {_NULL, 0, _NULL},
18893#define _REENT_INIT(var) { 0, &__sf[0], &__sf[1], &__sf[2], 0, "", _REENT_INIT_RESERVED_1 _NULL, _REENT_INIT_RESERVED_0 _NULL, _NULL, 0, _NULL, _NULL, 0, _NULL, { { _REENT_INIT_RESERVED_2 _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_RESERVED_6_7 _NULL }
18894#define _REENT_INIT_PTR_ZEROED(var) { (var)->_stdin = &__sf[0]; (var)->_stdout = &__sf[1]; (var)->_stderr = &__sf[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; }
18895#define _REENT_CHECK_RAND48(ptr)
18896#define _REENT_CHECK_MP(ptr)
18897#define _REENT_CHECK_TM(ptr)
18898#define _REENT_CHECK_ASCTIME_BUF(ptr)
18899#define _REENT_CHECK_EMERGENCY(ptr)
18900#define _REENT_CHECK_MISC(ptr)
18901#define _REENT_CHECK_SIGNAL_BUF(ptr)
18902#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
18903#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
18904#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
18905#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
18906#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
18907#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
18908#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
18909#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
18910#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
18911#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
18912#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
18913#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
18914#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
18915#define _REENT_MBTOWC_STATE(ptr) ((ptr)->_new._reent._mbtowc_state)
18916#define _REENT_WCTOMB_STATE(ptr) ((ptr)->_new._reent._wctomb_state)
18917#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_new._reent._mbrlen_state)
18918#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_new._reent._mbrtowc_state)
18919#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_new._reent._mbsrtowcs_state)
18920#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_new._reent._wcrtomb_state)
18921#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_new._reent._wcsrtombs_state)
18922#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
18923#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
18924#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
18925#define _REENT_CLEANUP(_ptr) ((_ptr)->__cleanup)
18926#define _REENT_CVTBUF(_ptr) ((_ptr)->_cvtbuf)
18927#define _REENT_CVTLEN(_ptr) ((_ptr)->_cvtlen)
18928#define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency)
18929#define _REENT_ERRNO(_ptr) ((_ptr)->_errno)
18930#define _REENT_INC(_ptr) ((_ptr)->_inc)
18931#define _REENT_LOCALE(_ptr) ((_ptr)->_locale)
18932#define _REENT_SIG_FUNC(_ptr) ((_ptr)->_sig_func)
18933#define _REENT_STDIN(_ptr) ((_ptr)->_stdin)
18934#define _REENT_STDOUT(_ptr) ((_ptr)->_stdout)
18935#define _REENT_STDERR(_ptr) ((_ptr)->_stderr)
18936#define _REENT_INIT_PTR(var) { memset((var), 0, sizeof(*(var))); _REENT_INIT_PTR_ZEROED(var); }
18937#define __ATTRIBUTE_IMPURE_PTR__
18938#define __ATTRIBUTE_IMPURE_DATA__
18939#define _REENT (__getreent())
18940#define _REENT_IS_NULL(_ptr) ((_ptr) == NULL)
18941#define _GLOBAL_REENT (&_impure_data)
18942#define _Kmax (sizeof (size_t) << 3)
18943#define __FILE_defined
18944#define _OFF_T_DECLARED
18945#define _SSIZE_T_DECLARED
18946#define _SYS_STDIO_H_
18947#define _flockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_lock ((_LOCK_T *)&(fp)->_lock); })
18948#define _ftrylockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __cygwin_lock_trylock ((_LOCK_T *)&(fp)->_lock))
18949#define _funlockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_unlock ((_LOCK_T *)&(fp)->_lock); })
18950#define __SLBF 0x0001
18951#define __SNBF 0x0002
18952#define __SRD 0x0004
18953#define __SWR 0x0008
18954#define __SRW 0x0010
18955#define __SEOF 0x0020
18956#define __SERR 0x0040
18957#define __SMBF 0x0080
18958#define __SAPP 0x0100
18959#define __SSTR 0x0200
18960#define __SOPT 0x0400
18961#define __SNPT 0x0800
18962#define __SOFF 0x1000
18963#define __SORD 0x2000
18964#define __SCLE 0x4000
18965#define __SL64 0x8000
18966#define __SNLK 0x0001
18967#define __SWID 0x2000
18968#define _IOFBF 0
18969#define _IOLBF 1
18970#define _IONBF 2
18971#define EOF (-1)
18972#define BUFSIZ 1024
18973#define FOPEN_MAX 20
18974#define FILENAME_MAX __FILENAME_MAX__
18975#define L_tmpnam FILENAME_MAX
18976#define P_tmpdir "/tmp"
18977#define SEEK_SET 0
18978#define SEEK_CUR 1
18979#define SEEK_END 2
18980#define TMP_MAX 26
18981#define stdin _REENT_STDIN(_REENT)
18982#define stdout _REENT_STDOUT(_REENT)
18983#define stderr _REENT_STDERR(_REENT)
18984#define _stdin_r(x) _REENT_STDIN(x)
18985#define _stdout_r(x) _REENT_STDOUT(x)
18986#define _stderr_r(x) _REENT_STDERR(x)
18987#define __VALIST __gnuc_va_list
18988#define fropen(__cookie,__fn) funopen(__cookie, __fn, (int (*)())0, (fpos_t (*)())0, (int (*)())0)
18989#define fwopen(__cookie,__fn) funopen(__cookie, (int (*)())0, __fn, (fpos_t (*)())0, (int (*)())0)
18990#define __sgetc_raw_r(__ptr,__f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++))
18991#define __sfeof(p) ((int)(((p)->_flags & __SEOF) != 0))
18992#define __sferror(p) ((int)(((p)->_flags & __SERR) != 0))
18993#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
18994#define __sfileno(p) ((p)->_file)
18995#define feof(p) __sfeof(p)
18996#define ferror(p) __sferror(p)
18997#define clearerr(p) __sclearerr(p)
18998#define feof_unlocked(p) __sfeof(p)
18999#define ferror_unlocked(p) __sferror(p)
19000#define clearerr_unlocked(p) __sclearerr(p)
19001#define getchar_unlocked() _getchar_unlocked()
19002#define putchar_unlocked(_c) _putchar_unlocked(_c)
19003#define fast_putc(x,p) (--(p)->_w < 0 ? __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0))
19004#define L_cuserid 9
19005#define L_ctermid 16
19006#define _SSP_STDIO_H_
19007#define _SSP_SSP_H_
19008#define __ssp_real_(fun) __ssp_real_ ## fun
19009#define __ssp_real(fun) __ssp_real_(fun)
19010#define __ssp_inline extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
19011#define __ssp_bos(ptr) __builtin_object_size(ptr, __SSP_FORTIFY_LEVEL > 1)
19012#define __ssp_bos0(ptr) __builtin_object_size(ptr, 0)
19013#define __ssp_check(buf,len,bos) if (bos(buf) != (size_t)-1 && len > bos(buf)) __chk_fail()
19014#define __ssp_decl(rtype,fun,args) rtype __ssp_real_(fun) args __asm__(__ASMNAME(#fun)); __ssp_inline rtype fun args
19015#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; }
19016#define __ssp_redirect(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos)
19017#define __ssp_redirect0(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos0)
19018#define __ssp_overlap(a,b,l) (((a) <= (b) && (b) < (a) + (l)) || ((b) <= (a) && (a) < (b) + (l)))
19019#define sprintf(str,...) __builtin___sprintf_chk(str, 0, __ssp_bos(str), __VA_ARGS__)
19020#define vsprintf(str,fmt,ap) __builtin___vsprintf_chk(str, 0, __ssp_bos(str), fmt, ap)
19021#define snprintf(str,len,...) __builtin___snprintf_chk(str, len, 0, __ssp_bos(str), __VA_ARGS__)
19022#define vsnprintf(str,len,fmt,ap) __builtin___vsnprintf_chk(str, len, 0, __ssp_bos(str), fmt, ap)
19023#define gets(str) __gets_chk(str, __ssp_bos(str))
19024#define __BIT_TYPES_DEFINED__ 1
19025#define _SYS_TYPES_H
19026#define _SYS__STDINT_H
19027#define _INT8_T_DECLARED
19028#define _UINT8_T_DECLARED
19029#define __int8_t_defined 1
19030#define _INT16_T_DECLARED
19031#define _UINT16_T_DECLARED
19032#define __int16_t_defined 1
19033#define _INT32_T_DECLARED
19034#define _UINT32_T_DECLARED
19035#define __int32_t_defined 1
19036#define _INT64_T_DECLARED
19037#define _UINT64_T_DECLARED
19038#define __int64_t_defined 1
19039#define _INTMAX_T_DECLARED
19040#define _UINTMAX_T_DECLARED
19041#define _INTPTR_T_DECLARED
19042#define _UINTPTR_T_DECLARED
19043#define __MACHINE_ENDIAN_H__
19044#define _BITS_ENDIAN_H_
19045#define __BIG_ENDIAN 4321
19046#define __LITTLE_ENDIAN 1234
19047#define __BYTE_ORDER __LITTLE_ENDIAN
19048#define _LITTLE_ENDIAN __LITTLE_ENDIAN
19049#define _BIG_ENDIAN __BIG_ENDIAN
19050#define _PDP_ENDIAN __PDP_ENDIAN
19051#define _BYTE_ORDER __BYTE_ORDER
19052#define __machine_host_to_from_network_defined
19053#define __htonl(_x) __ntohl(_x)
19054#define __htons(_x) __ntohs(_x)
19055#define _QUAD_HIGHWORD 1
19056#define _QUAD_LOWWORD 0
19057#define LITTLE_ENDIAN _LITTLE_ENDIAN
19058#define BIG_ENDIAN _BIG_ENDIAN
19059#define PDP_ENDIAN _PDP_ENDIAN
19060#define BYTE_ORDER _BYTE_ORDER
19061#define __bswap16(_x) __builtin_bswap16(_x)
19062#define __bswap32(_x) __builtin_bswap32(_x)
19063#define __bswap64(_x) __builtin_bswap64(_x)
19064#define _SYS_SELECT_H
19065#define _SYS__SIGSET_H_
19066#define _SYS__TIMEVAL_H_
19067#define _SUSECONDS_T_DECLARED
19068#define __time_t_defined
19069#define _TIME_T_DECLARED
19070#define _TIMEVAL_DEFINED
19071#define _SYS_TIMESPEC_H_
19072#define _SYS__TIMESPEC_H_
19073#define TIMEVAL_TO_TIMESPEC(tv,ts) do { (ts)->tv_sec = (tv)->tv_sec; (ts)->tv_nsec = (tv)->tv_usec * 1000; } while (0)
19074#define TIMESPEC_TO_TIMEVAL(tv,ts) do { (tv)->tv_sec = (ts)->tv_sec; (tv)->tv_usec = (ts)->tv_nsec / 1000; } while (0)
19075#define _SIGSET_T_DECLARED
19076#define _SYS_TYPES_FD_SET
19077#define FD_SETSIZE 1024
19078#define _NFDBITS ((int)sizeof(__fd_mask) * 8)
19079#define NFDBITS _NFDBITS
19080#define _howmany(x,y) (((x) + ((y) - 1)) / (y))
19081#define fds_bits __fds_bits
19082#define __fdset_mask(n) ((__fd_mask)1 << ((n) % _NFDBITS))
19083#define FD_CLR(n,p) ((p)->__fds_bits[(n)/_NFDBITS] &= ~__fdset_mask(n))
19084#define FD_COPY(f,t) (void)(*(t) = *(f))
19085#define FD_ISSET(n,p) (((p)->__fds_bits[(n)/_NFDBITS] & __fdset_mask(n)) != 0)
19086#define FD_SET(n,p) ((p)->__fds_bits[(n)/_NFDBITS] |= __fdset_mask(n))
19087#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)
19088#define physadr physadr_t
19089#define quad quad_t
19090#define _IN_ADDR_T_DECLARED
19091#define _IN_PORT_T_DECLARED
19092#define __u_char_defined
19093#define __u_short_defined
19094#define __u_int_defined
19095#define __u_long_defined
19096#define _BSDTYPES_DEFINED
19097#define _BLKCNT_T_DECLARED
19098#define _BLKSIZE_T_DECLARED
19099#define __clock_t_defined
19100#define _CLOCK_T_DECLARED
19101#define __caddr_t_defined
19102#define _FSBLKCNT_T_DECLARED
19103#define _ID_T_DECLARED
19104#define _INO_T_DECLARED
19105#define _DEV_T_DECLARED
19106#define _UID_T_DECLARED
19107#define _GID_T_DECLARED
19108#define _PID_T_DECLARED
19109#define _KEY_T_DECLARED
19110#define _MODE_T_DECLARED
19111#define _NLINK_T_DECLARED
19112#define __clockid_t_defined
19113#define _CLOCKID_T_DECLARED
19114#define __timer_t_defined
19115#define _TIMER_T_DECLARED
19116#define _USECONDS_T_DECLARED
19117#define _SYS__PTHREADTYPES_H_
19118#define _SYS_CPUSET_H_
19119#define __CPU_SETSIZE 1024
19120#define __NCPUBITS (8 * sizeof (__cpu_mask))
19121#define __CPU_GROUPMAX (__CPU_SETSIZE / __NCPUBITS)
19122#define __CPUELT(cpu) ((cpu) / __NCPUBITS)
19123#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
19124#define CPU_ALLOC_SIZE(num) ((num+__NCPUBITS-1) / __NCPUBITS) * sizeof (__cpu_mask)
19125#define CPU_ALLOC(num) __builtin_malloc (CPU_ALLOC_SIZE(num))
19126#define CPU_FREE(set) __builtin_free (set)
19127#define CPU_ZERO_S(siz,set) __builtin_memset (set, 0, siz)
19128#define CPU_SET_S(cpu,siz,set) if (cpu < 8 * siz) (set)->__bits[__CPUELT(cpu)] |= __CPUMASK(cpu);
19129#define CPU_CLR_S(cpu,siz,set) if (cpu < 8 * siz) (set)->__bits[__CPUELT(cpu)] &= ~(__CPUMASK(cpu));
19130#define CPU_ISSET_S(cpu,siz,set) ({int res = 0; if (cpu < 8 * siz) res = !!((set)->__bits[__CPUELT(cpu)] & __CPUMASK(cpu)); res;})
19131#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;})
19132#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];
19133#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];
19134#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];
19135#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;})
19136#define CPU_ZERO(set) CPU_ZERO_S(sizeof (cpu_set_t), set)
19137#define CPU_SET(cpu,set) CPU_SET_S(cpu, sizeof (cpu_set_t), set)
19138#define CPU_CLR(cpu,set) CPU_CLR_S(cpu, sizeof (cpu_set_t), set)
19139#define CPU_ISSET(cpu,set) CPU_ISSET_S(cpu, sizeof (cpu_set_t), set)
19140#define CPU_COUNT(set) CPU_COUNT_S(sizeof (cpu_set_t), set)
19141#define CPU_AND(dst,src1,src2) CPU_AND_S(sizeof (cpu_set_t), dst, src1, src2)
19142#define CPU_OR(dst,src1,src2) CPU_OR_S(sizeof (cpu_set_t), dst, src1, src2)
19143#define CPU_XOR(dst,src1,src2) CPU_XOR_S(sizeof (cpu_set_t), dst, src1, src2)
19144#define CPU_EQUAL(src1,src2) CPU_EQUAL_S(sizeof (cpu_set_t), src1, src2)
19145#define CPU_SETSIZE __CPU_SETSIZE
19146#define _ENDIAN_H_
19147#define __LONG_LONG_PAIR(HI,LO) LO, HI
19148#define _BITS_BYTESWAP_H
19149#define htobe16(x) __bswap_16(x)
19150#define htobe32(x) __bswap_32(x)
19151#define htobe64(x) __bswap_64(x)
19152#define be16toh(x) __bswap_16(x)
19153#define be32toh(x) __bswap_32(x)
19154#define be64toh(x) __bswap_64(x)
19155#define htole16(x) (x)
19156#define htole32(x) (x)
19157#define htole64(x) (x)
19158#define le16toh(x) (x)
19159#define le32toh(x) (x)
19160#define le64toh(x) (x)
19161#define _WORDSIZE_H 1
19162#define __WORDSIZE 64
19163#define __timespec_t_defined
19164#define __timestruc_t_defined
19165#define __BIT_TYPES_DEFINED__ 1
19166#define __vm_offset_t_defined
19167#define __vm_size_t_defined
19168#define __vm_object_t_defined
19169#define __addr_t_defined
19170#define _SYS_SYSMACROS_H
19171#define major(dev) gnu_dev_major(dev)
19172#define minor(dev) gnu_dev_minor(dev)
19173#define makedev(maj,min) gnu_dev_makedev(maj, min)
19174#undef __need_inttypes
19175#define _SYS_STAT_H
19176#define _TIME_H_
19177#define __need_size_t
19178#define __need_NULL
19179#undef __need_ptrdiff_t
19180#undef __need_size_t
19181#undef __need_wchar_t
19182#undef NULL
19183#define NULL ((void *)0)
19184#undef __need_NULL
19185#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19186#define _MACHTIME_H_
19187#define _CLOCKS_PER_SEC_ 1000
19188#define CLOCKS_PER_SEC _CLOCKS_PER_SEC_
19189#define CLK_TCK CLOCKS_PER_SEC
19190#define _SYS__LOCALE_H
19191#define tzname _tzname
19192#define _CYGWIN_TIME_H
19193#define TIMER_RELTIME 0
19194#define _SIGNAL_H_
19195#define _SYS_SIGNAL_H
19196#define _STDINT_H
19197#define _SYS__INTSUP_H
19198#define __STDINT_EXP(x) __ ##x ##__
19199#undef signed
19200#undef unsigned
19201#undef char
19202#undef short
19203#undef int
19204#undef __int20
19205#undef __int20__
19206#undef long
19207#define signed +0
19208#define unsigned +0
19209#define char +0
19210#define short +1
19211#define __int20 +2
19212#define __int20__ +2
19213#define int +2
19214#define long +4
19215#define _INTPTR_EQ_LONG
19216#define __INT8 "hh"
19217#define __INT16 "h"
19218#define __INT32
19219#define __INT64 "l"
19220#define __FAST8 "hh"
19221#define __FAST16 "l"
19222#define __FAST32 "l"
19223#define __FAST64 "l"
19224#define __LEAST8 "hh"
19225#define __LEAST16 "h"
19226#define __LEAST32
19227#define __LEAST64 "l"
19228#undef signed
19229#undef unsigned
19230#undef char
19231#undef short
19232#undef int
19233#undef long
19234#undef __int20
19235#undef __int20__
19236#define __int_least8_t_defined 1
19237#define __int_least16_t_defined 1
19238#define __int_least32_t_defined 1
19239#define __int_least64_t_defined 1
19240#define __int_fast8_t_defined 1
19241#define __int_fast16_t_defined 1
19242#define __int_fast32_t_defined 1
19243#define __int_fast64_t_defined 1
19244#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
19245#define INTPTR_MAX (__INTPTR_MAX__)
19246#define UINTPTR_MAX (__UINTPTR_MAX__)
19247#define INT8_MIN (-__INT8_MAX__ - 1)
19248#define INT8_MAX (__INT8_MAX__)
19249#define UINT8_MAX (__UINT8_MAX__)
19250#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
19251#define INT_LEAST8_MAX (__INT_LEAST8_MAX__)
19252#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)
19253#define INT16_MIN (-__INT16_MAX__ - 1)
19254#define INT16_MAX (__INT16_MAX__)
19255#define UINT16_MAX (__UINT16_MAX__)
19256#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
19257#define INT_LEAST16_MAX (__INT_LEAST16_MAX__)
19258#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)
19259#define INT32_MIN (-__INT32_MAX__ - 1)
19260#define INT32_MAX (__INT32_MAX__)
19261#define UINT32_MAX (__UINT32_MAX__)
19262#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
19263#define INT_LEAST32_MAX (__INT_LEAST32_MAX__)
19264#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)
19265#define INT64_MIN (-__INT64_MAX__ - 1)
19266#define INT64_MAX (__INT64_MAX__)
19267#define UINT64_MAX (__UINT64_MAX__)
19268#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
19269#define INT_LEAST64_MAX (__INT_LEAST64_MAX__)
19270#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)
19271#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
19272#define INT_FAST8_MAX (__INT_FAST8_MAX__)
19273#define UINT_FAST8_MAX (__UINT_FAST8_MAX__)
19274#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
19275#define INT_FAST16_MAX (__INT_FAST16_MAX__)
19276#define UINT_FAST16_MAX (__UINT_FAST16_MAX__)
19277#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
19278#define INT_FAST32_MAX (__INT_FAST32_MAX__)
19279#define UINT_FAST32_MAX (__UINT_FAST32_MAX__)
19280#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
19281#define INT_FAST64_MAX (__INT_FAST64_MAX__)
19282#define UINT_FAST64_MAX (__UINT_FAST64_MAX__)
19283#define INTMAX_MAX (__INTMAX_MAX__)
19284#define INTMAX_MIN (-INTMAX_MAX - 1)
19285#define UINTMAX_MAX (__UINTMAX_MAX__)
19286#define SIZE_MAX (__SIZE_MAX__)
19287#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
19288#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))
19289#define PTRDIFF_MAX (__PTRDIFF_MAX__)
19290#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
19291#define WCHAR_MIN (__WCHAR_MIN__)
19292#define WCHAR_MAX (__WCHAR_MAX__)
19293#define WINT_MAX (__WINT_MAX__)
19294#define WINT_MIN (__WINT_MIN__)
19295#define INT8_C(x) __INT8_C(x)
19296#define UINT8_C(x) __UINT8_C(x)
19297#define INT16_C(x) __INT16_C(x)
19298#define UINT16_C(x) __UINT16_C(x)
19299#define INT32_C(x) __INT32_C(x)
19300#define UINT32_C(x) __UINT32_C(x)
19301#define INT64_C(x) __INT64_C(x)
19302#define UINT64_C(x) __UINT64_C(x)
19303#define INTMAX_C(x) __INTMAX_C(x)
19304#define UINTMAX_C(x) __UINTMAX_C(x)
19305#define _GCC_WRAP_STDINT_H
19306#define _CYGWIN_SIGNAL_H
19307#define __COPY_CONTEXT_SIZE 816
19308#pragma pack(push,4)
19309#define __SI_PAD_SIZE 32
19310#pragma pack(pop)
19311#define SI_USER SI_USER
19312#define SI_ASYNCIO SI_ASYNCIO
19313#define SI_MESGQ SI_MESGQ
19314#define SI_TIMER SI_TIMER
19315#define SI_QUEUE SI_QUEUE
19316#define SI_KERNEL SI_KERNEL
19317#define ILL_ILLOPC ILL_ILLOPC
19318#define ILL_ILLOPN ILL_ILLOPN
19319#define ILL_ILLADR ILL_ILLADR
19320#define ILL_ILLTRP ILL_ILLTRP
19321#define ILL_PRVOPC ILL_PRVOPC
19322#define ILL_PRVREG ILL_PRVREG
19323#define ILL_COPROC ILL_COPROC
19324#define ILL_BADSTK ILL_BADSTK
19325#define FPE_INTDIV FPE_INTDIV
19326#define FPE_INTOVF FPE_INTOVF
19327#define FPE_FLTDIV FPE_FLTDIV
19328#define FPE_FLTOVF FPE_FLTOVF
19329#define FPE_FLTUND FPE_FLTUND
19330#define FPE_FLTRES FPE_FLTRES
19331#define FPE_FLTINV FPE_FLTINV
19332#define FPE_FLTSUB FPE_FLTSUB
19333#define SEGV_MAPERR SEGV_MAPERR
19334#define SEGV_ACCERR SEGV_ACCERR
19335#define BUS_ADRALN BUS_ADRALN
19336#define BUS_ADRERR BUS_ADRERR
19337#define BUS_OBJERR BUS_OBJERR
19338#define CLD_EXITED CLD_EXITED
19339#define CLD_KILLED CLD_KILLED
19340#define CLD_DUMPED CLD_DUMPED
19341#define CLD_TRAPPED CLD_TRAPPED
19342#define CLD_STOPPED CLD_STOPPED
19343#define CLD_CONTINUED CLD_CONTINUED
19344#define SIGEV_SIGNAL SIGEV_SIGNAL
19345#define SIGEV_NONE SIGEV_NONE
19346#define SIGEV_THREAD SIGEV_THREAD
19347#define SA_NOCLDSTOP 1
19348#define SA_SIGINFO 2
19349#define SA_RESTART 0x10000000
19350#define SA_ONSTACK 0x20000000
19351#define SA_NODEFER 0x40000000
19352#define SA_RESETHAND 0x80000000
19353#define SA_ONESHOT SA_RESETHAND
19354#define SA_NOMASK SA_NODEFER
19355#define _SA_INTERNAL_MASK 0xf000
19356#undef MINSIGSTKSZ
19357#define MINSIGSTKSZ 8192
19358#undef SIGSTKSZ
19359#define SIGSTKSZ 32768
19360#define SIGHUP 1
19361#define SIGINT 2
19362#define SIGQUIT 3
19363#define SIGILL 4
19364#define SIGTRAP 5
19365#define SIGABRT 6
19366#define SIGIOT SIGABRT
19367#define SIGEMT 7
19368#define SIGFPE 8
19369#define SIGKILL 9
19370#define SIGBUS 10
19371#define SIGSEGV 11
19372#define SIGSYS 12
19373#define SIGPIPE 13
19374#define SIGALRM 14
19375#define SIGTERM 15
19376#define SIGURG 16
19377#define SIGSTOP 17
19378#define SIGTSTP 18
19379#define SIGCONT 19
19380#define SIGCHLD 20
19381#define SIGCLD 20
19382#define SIGTTIN 21
19383#define SIGTTOU 22
19384#define SIGIO 23
19385#define SIGPOLL SIGIO
19386#define SIGXCPU 24
19387#define SIGXFSZ 25
19388#define SIGVTALRM 26
19389#define SIGPROF 27
19390#define SIGWINCH 28
19391#define SIGLOST 29
19392#define SIGPWR SIGLOST
19393#define SIGUSR1 30
19394#define SIGUSR2 31
19395#define _NSIG 65
19396#define NSIG _NSIG
19397#define SIGRTMIN 32
19398#define SIGRTMAX (_NSIG - 1)
19399#define SIG_HOLD ((_sig_func_ptr)2)
19400#define SS_ONSTACK 0x1
19401#define SS_DISABLE 0x2
19402#define SIG_SETMASK 0
19403#define SIG_BLOCK 1
19404#define SIG_UNBLOCK 2
19405#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("4294967295") - 1)
19406#define _SYS_UCONTEXT_H_
19407#define SIG_DFL ((_sig_func_ptr)0)
19408#define SIG_IGN ((_sig_func_ptr)1)
19409#define SIG_ERR ((_sig_func_ptr)-1)
19410#define CLOCK_ENABLED 1
19411#define CLOCK_DISABLED 0
19412#define CLOCK_ALLOWED 1
19413#define CLOCK_DISALLOWED 0
19414#define TIMER_ABSTIME 4
19415#define CLOCK_REALTIME_COARSE ((clockid_t) 0)
19416#define CLOCK_REALTIME ((clockid_t) 1)
19417#define CLOCK_PROCESS_CPUTIME_ID ((clockid_t) 2)
19418#define CLOCK_THREAD_CPUTIME_ID ((clockid_t) 3)
19419#define CLOCK_MONOTONIC ((clockid_t) 4)
19420#define CLOCK_MONOTONIC_RAW ((clockid_t) 5)
19421#define CLOCK_MONOTONIC_COARSE ((clockid_t) 6)
19422#define CLOCK_BOOTTIME ((clockid_t) 7)
19423#define CLOCK_REALTIME_ALARM ((clockid_t) 8)
19424#define CLOCK_BOOTTIME_ALARM ((clockid_t) 9)
19425#define _CYGWIN_STAT_H
19426#define st_atime st_atim.tv_sec
19427#define st_mtime st_mtim.tv_sec
19428#define st_ctime st_ctim.tv_sec
19429#define st_birthtime st_birthtim.tv_sec
19430#define S_TYPEISMQ(buf) ((void)(buf)->st_mode,0)
19431#define S_TYPEISSEM(buf) ((void)(buf)->st_mode,0)
19432#define S_TYPEISSHM(buf) ((void)(buf)->st_mode,0)
19433#define _IFMT 0170000
19434#define _IFDIR 0040000
19435#define _IFCHR 0020000
19436#define _IFBLK 0060000
19437#define _IFREG 0100000
19438#define _IFLNK 0120000
19439#define _IFSOCK 0140000
19440#define _IFIFO 0010000
19441#define S_BLKSIZE 1024
19442#define S_ISUID 0004000
19443#define S_ISGID 0002000
19444#define S_ISVTX 0001000
19445#define S_IREAD 0000400
19446#define S_IWRITE 0000200
19447#define S_IEXEC 0000100
19448#define S_ENFMT 0002000
19449#define S_IFMT _IFMT
19450#define S_IFDIR _IFDIR
19451#define S_IFCHR _IFCHR
19452#define S_IFBLK _IFBLK
19453#define S_IFREG _IFREG
19454#define S_IFLNK _IFLNK
19455#define S_IFSOCK _IFSOCK
19456#define S_IFIFO _IFIFO
19457#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
19458#define S_IRUSR 0000400
19459#define S_IWUSR 0000200
19460#define S_IXUSR 0000100
19461#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
19462#define S_IRGRP 0000040
19463#define S_IWGRP 0000020
19464#define S_IXGRP 0000010
19465#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
19466#define S_IROTH 0000004
19467#define S_IWOTH 0000002
19468#define S_IXOTH 0000001
19469#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
19470#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
19471#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
19472#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK)
19473#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR)
19474#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
19475#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)
19476#define S_ISREG(m) (((m)&_IFMT) == _IFREG)
19477#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK)
19478#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)
19479#define UTIME_NOW -2L
19480#define UTIME_OMIT -1L
19481#define _STDLIB_H_
19482#define __need_size_t
19483#define __need_wchar_t
19484#define __need_NULL
19485#undef __need_ptrdiff_t
19486#undef __need_size_t
19487#undef __need_wchar_t
19488#undef NULL
19489#define NULL ((void *)0)
19490#undef __need_NULL
19491#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19492#define _MACHSTDLIB_H_
19493#define _NEWLIB_ALLOCA_H
19494#undef alloca
19495#define alloca(size) __builtin_alloca(size)
19496#define _CYGWIN_STDLIB_H
19497#define _CYGWIN_WAIT_H
19498#define WAIT_ANY (pid_t)-1
19499#define WAIT_MYPGRP (pid_t)0
19500#define WNOHANG 1
19501#define WUNTRACED 2
19502#define WCONTINUED 8
19503#define __W_CONTINUED 0xffff
19504#define WIFEXITED(_w) (((_w) & 0xff) == 0)
19505#define WIFSIGNALED(_w) (((_w) & 0x7f) > 0 && (((_w) & 0x7f) < 0x7f))
19506#define WIFSTOPPED(_w) (((_w) & 0xff) == 0x7f)
19507#define WIFCONTINUED(_w) (((_w) & 0xffff) == __W_CONTINUED)
19508#define WEXITSTATUS(_w) (((_w) >> 8) & 0xff)
19509#define WTERMSIG(_w) ((_w) & 0x7f)
19510#define WSTOPSIG WEXITSTATUS
19511#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & 0x80))
19512#undef _malloc_r
19513#define _malloc_r(r,s) malloc (s)
19514#undef _free_r
19515#define _free_r(r,p) free (p)
19516#undef _realloc_r
19517#define _realloc_r(r,p,s) realloc (p, s)
19518#undef _calloc_r
19519#define _calloc_r(r,s1,s2) calloc (s1, s2);
19520#undef _memalign_r
19521#define _memalign_r(r,s1,s2) memalign (s1, s2);
19522#undef _mallinfo_r
19523#define _mallinfo_r(r) mallinfo ()
19524#undef _malloc_stats_r
19525#define _malloc_stats_r(r) malloc_stats ()
19526#undef _mallopt_r
19527#define _mallopt_r(i1,i2) mallopt (i1, i2)
19528#undef _malloc_usable_size_r
19529#define _malloc_usable_size_r(r,p) malloc_usable_size (p)
19530#undef _valloc_r
19531#define _valloc_r(r,s) valloc (s)
19532#undef _pvalloc_r
19533#define _pvalloc_r(r,s) pvalloc (s)
19534#undef _malloc_trim_r
19535#define _malloc_trim_r(r,s) malloc_trim (s)
19536#undef _mstats_r
19537#define _mstats_r(r,p) mstats (p)
19538#define __compar_fn_t_defined
19539#define EXIT_FAILURE 1
19540#define EXIT_SUCCESS 0
19541#define RAND_MAX __RAND_MAX
19542#define MB_CUR_MAX __locale_mb_cur_max()
19543#define strtodf strtof
19544#define _SSP_STDLIB_H_
19545#define _STRING_H_
19546#define __need_size_t
19547#define __need_NULL
19548#undef __need_ptrdiff_t
19549#undef __need_size_t
19550#undef __need_wchar_t
19551#undef NULL
19552#define NULL ((void *)0)
19553#undef __need_NULL
19554#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19555#define _STRINGS_H_
19556#define _SSP_STRINGS_H_
19557#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))
19558#define bzero(dst,len) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___memset_chk(dst, 0, len, __ssp_bos0(dst)) : __memset_ichk(dst, 0, len))
19559#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);}))
19560#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);}))
19561#define basename basename
19562#define _SSP_STRING_H_
19563#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))
19564#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))
19565#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)); }
19566#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)); }
19567#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)); }
19568#define memcpy(dst,src,len) __ssp_bos_check3(memcpy, dst, src, len)
19569#define memmove(dst,src,len) __ssp_bos_check3(memmove, dst, src, len)
19570#define mempcpy(dst,src,len) __ssp_bos_check3(mempcpy, dst, src, len)
19571#define memset(dst,val,len) __ssp_bos_check3(memset, dst, val, len)
19572#define stpcpy(dst,src) __ssp_bos_check2(stpcpy, dst, src)
19573#define stpncpy(dst,src,len) __ssp_bos_check3(stpncpy, dst, src, len)
19574#define strcpy(dst,src) __ssp_bos_check2(strcpy, dst, src)
19575#define strcat(dst,src) __ssp_bos_check2(strcat, dst, src)
19576#define strncpy(dst,src,len) __ssp_bos_check3(strncpy, dst, src, len)
19577#define strncat(dst,src,len) __ssp_bos_check3(strncat, dst, src, len)
19578#define _INTTYPES_H
19579#define __need_wchar_t
19580#undef __need_ptrdiff_t
19581#undef __need_size_t
19582#undef __need_wchar_t
19583#undef NULL
19584#define NULL ((void *)0)
19585#undef __need_NULL
19586#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19587#define __STRINGIFY(a) #a
19588#define __PRI8(x) __INT8 __STRINGIFY(x)
19589#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x)
19590#define __PRI8FAST(x) __FAST8 __STRINGIFY(x)
19591#define __SCN8(x) __INT8 __STRINGIFY(x)
19592#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x)
19593#define __SCN8FAST(x) __FAST8 __STRINGIFY(x)
19594#define PRId8 __PRI8(d)
19595#define PRIi8 __PRI8(i)
19596#define PRIo8 __PRI8(o)
19597#define PRIu8 __PRI8(u)
19598#define PRIx8 __PRI8(x)
19599#define PRIX8 __PRI8(X)
19600#define SCNd8 __SCN8(d)
19601#define SCNi8 __SCN8(i)
19602#define SCNo8 __SCN8(o)
19603#define SCNu8 __SCN8(u)
19604#define SCNx8 __SCN8(x)
19605#define PRIdLEAST8 __PRI8LEAST(d)
19606#define PRIiLEAST8 __PRI8LEAST(i)
19607#define PRIoLEAST8 __PRI8LEAST(o)
19608#define PRIuLEAST8 __PRI8LEAST(u)
19609#define PRIxLEAST8 __PRI8LEAST(x)
19610#define PRIXLEAST8 __PRI8LEAST(X)
19611#define SCNdLEAST8 __SCN8LEAST(d)
19612#define SCNiLEAST8 __SCN8LEAST(i)
19613#define SCNoLEAST8 __SCN8LEAST(o)
19614#define SCNuLEAST8 __SCN8LEAST(u)
19615#define SCNxLEAST8 __SCN8LEAST(x)
19616#define PRIdFAST8 __PRI8FAST(d)
19617#define PRIiFAST8 __PRI8FAST(i)
19618#define PRIoFAST8 __PRI8FAST(o)
19619#define PRIuFAST8 __PRI8FAST(u)
19620#define PRIxFAST8 __PRI8FAST(x)
19621#define PRIXFAST8 __PRI8FAST(X)
19622#define SCNdFAST8 __SCN8FAST(d)
19623#define SCNiFAST8 __SCN8FAST(i)
19624#define SCNoFAST8 __SCN8FAST(o)
19625#define SCNuFAST8 __SCN8FAST(u)
19626#define SCNxFAST8 __SCN8FAST(x)
19627#define __PRI16(x) __INT16 __STRINGIFY(x)
19628#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x)
19629#define __PRI16FAST(x) __FAST16 __STRINGIFY(x)
19630#define __SCN16(x) __INT16 __STRINGIFY(x)
19631#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x)
19632#define __SCN16FAST(x) __FAST16 __STRINGIFY(x)
19633#define PRId16 __PRI16(d)
19634#define PRIi16 __PRI16(i)
19635#define PRIo16 __PRI16(o)
19636#define PRIu16 __PRI16(u)
19637#define PRIx16 __PRI16(x)
19638#define PRIX16 __PRI16(X)
19639#define SCNd16 __SCN16(d)
19640#define SCNi16 __SCN16(i)
19641#define SCNo16 __SCN16(o)
19642#define SCNu16 __SCN16(u)
19643#define SCNx16 __SCN16(x)
19644#define PRIdLEAST16 __PRI16LEAST(d)
19645#define PRIiLEAST16 __PRI16LEAST(i)
19646#define PRIoLEAST16 __PRI16LEAST(o)
19647#define PRIuLEAST16 __PRI16LEAST(u)
19648#define PRIxLEAST16 __PRI16LEAST(x)
19649#define PRIXLEAST16 __PRI16LEAST(X)
19650#define SCNdLEAST16 __SCN16LEAST(d)
19651#define SCNiLEAST16 __SCN16LEAST(i)
19652#define SCNoLEAST16 __SCN16LEAST(o)
19653#define SCNuLEAST16 __SCN16LEAST(u)
19654#define SCNxLEAST16 __SCN16LEAST(x)
19655#define PRIdFAST16 __PRI16FAST(d)
19656#define PRIiFAST16 __PRI16FAST(i)
19657#define PRIoFAST16 __PRI16FAST(o)
19658#define PRIuFAST16 __PRI16FAST(u)
19659#define PRIxFAST16 __PRI16FAST(x)
19660#define PRIXFAST16 __PRI16FAST(X)
19661#define SCNdFAST16 __SCN16FAST(d)
19662#define SCNiFAST16 __SCN16FAST(i)
19663#define SCNoFAST16 __SCN16FAST(o)
19664#define SCNuFAST16 __SCN16FAST(u)
19665#define SCNxFAST16 __SCN16FAST(x)
19666#define __PRI32(x) __INT32 __STRINGIFY(x)
19667#define __SCN32(x) __INT32 __STRINGIFY(x)
19668#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x)
19669#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x)
19670#define __PRI32FAST(x) __FAST32 __STRINGIFY(x)
19671#define __SCN32FAST(x) __FAST32 __STRINGIFY(x)
19672#define PRId32 __PRI32(d)
19673#define PRIi32 __PRI32(i)
19674#define PRIo32 __PRI32(o)
19675#define PRIu32 __PRI32(u)
19676#define PRIx32 __PRI32(x)
19677#define PRIX32 __PRI32(X)
19678#define SCNd32 __SCN32(d)
19679#define SCNi32 __SCN32(i)
19680#define SCNo32 __SCN32(o)
19681#define SCNu32 __SCN32(u)
19682#define SCNx32 __SCN32(x)
19683#define PRIdLEAST32 __PRI32LEAST(d)
19684#define PRIiLEAST32 __PRI32LEAST(i)
19685#define PRIoLEAST32 __PRI32LEAST(o)
19686#define PRIuLEAST32 __PRI32LEAST(u)
19687#define PRIxLEAST32 __PRI32LEAST(x)
19688#define PRIXLEAST32 __PRI32LEAST(X)
19689#define SCNdLEAST32 __SCN32LEAST(d)
19690#define SCNiLEAST32 __SCN32LEAST(i)
19691#define SCNoLEAST32 __SCN32LEAST(o)
19692#define SCNuLEAST32 __SCN32LEAST(u)
19693#define SCNxLEAST32 __SCN32LEAST(x)
19694#define PRIdFAST32 __PRI32FAST(d)
19695#define PRIiFAST32 __PRI32FAST(i)
19696#define PRIoFAST32 __PRI32FAST(o)
19697#define PRIuFAST32 __PRI32FAST(u)
19698#define PRIxFAST32 __PRI32FAST(x)
19699#define PRIXFAST32 __PRI32FAST(X)
19700#define SCNdFAST32 __SCN32FAST(d)
19701#define SCNiFAST32 __SCN32FAST(i)
19702#define SCNoFAST32 __SCN32FAST(o)
19703#define SCNuFAST32 __SCN32FAST(u)
19704#define SCNxFAST32 __SCN32FAST(x)
19705#define __PRI64(x) __INT64 __STRINGIFY(x)
19706#define __SCN64(x) __INT64 __STRINGIFY(x)
19707#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x)
19708#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x)
19709#define __PRI64FAST(x) __FAST64 __STRINGIFY(x)
19710#define __SCN64FAST(x) __FAST64 __STRINGIFY(x)
19711#define PRId64 __PRI64(d)
19712#define PRIi64 __PRI64(i)
19713#define PRIo64 __PRI64(o)
19714#define PRIu64 __PRI64(u)
19715#define PRIx64 __PRI64(x)
19716#define PRIX64 __PRI64(X)
19717#define SCNd64 __SCN64(d)
19718#define SCNi64 __SCN64(i)
19719#define SCNo64 __SCN64(o)
19720#define SCNu64 __SCN64(u)
19721#define SCNx64 __SCN64(x)
19722#define PRIdLEAST64 __PRI64LEAST(d)
19723#define PRIiLEAST64 __PRI64LEAST(i)
19724#define PRIoLEAST64 __PRI64LEAST(o)
19725#define PRIuLEAST64 __PRI64LEAST(u)
19726#define PRIxLEAST64 __PRI64LEAST(x)
19727#define PRIXLEAST64 __PRI64LEAST(X)
19728#define SCNdLEAST64 __SCN64LEAST(d)
19729#define SCNiLEAST64 __SCN64LEAST(i)
19730#define SCNoLEAST64 __SCN64LEAST(o)
19731#define SCNuLEAST64 __SCN64LEAST(u)
19732#define SCNxLEAST64 __SCN64LEAST(x)
19733#define PRIdFAST64 __PRI64FAST(d)
19734#define PRIiFAST64 __PRI64FAST(i)
19735#define PRIoFAST64 __PRI64FAST(o)
19736#define PRIuFAST64 __PRI64FAST(u)
19737#define PRIxFAST64 __PRI64FAST(x)
19738#define PRIXFAST64 __PRI64FAST(X)
19739#define SCNdFAST64 __SCN64FAST(d)
19740#define SCNiFAST64 __SCN64FAST(i)
19741#define SCNoFAST64 __SCN64FAST(o)
19742#define SCNuFAST64 __SCN64FAST(u)
19743#define SCNxFAST64 __SCN64FAST(x)
19744#define __PRIMAX(x) __STRINGIFY(l ##x)
19745#define __SCNMAX(x) __STRINGIFY(l ##x)
19746#define PRIdMAX __PRIMAX(d)
19747#define PRIiMAX __PRIMAX(i)
19748#define PRIoMAX __PRIMAX(o)
19749#define PRIuMAX __PRIMAX(u)
19750#define PRIxMAX __PRIMAX(x)
19751#define PRIXMAX __PRIMAX(X)
19752#define SCNdMAX __SCNMAX(d)
19753#define SCNiMAX __SCNMAX(i)
19754#define SCNoMAX __SCNMAX(o)
19755#define SCNuMAX __SCNMAX(u)
19756#define SCNxMAX __SCNMAX(x)
19757#define __PRIPTR(x) __STRINGIFY(l ##x)
19758#define __SCNPTR(x) __STRINGIFY(l ##x)
19759#define PRIdPTR __PRIPTR(d)
19760#define PRIiPTR __PRIPTR(i)
19761#define PRIoPTR __PRIPTR(o)
19762#define PRIuPTR __PRIPTR(u)
19763#define PRIxPTR __PRIPTR(x)
19764#define PRIXPTR __PRIPTR(X)
19765#define SCNdPTR __SCNPTR(d)
19766#define SCNiPTR __SCNPTR(i)
19767#define SCNoPTR __SCNPTR(o)
19768#define SCNuPTR __SCNPTR(u)
19769#define SCNxPTR __SCNPTR(x)
19770#define _STDALIGN_H
19771#define alignas _Alignas
19772#define alignof _Alignof
19773#define __alignas_is_defined 1
19774#define __alignof_is_defined 1
19775#define _UNISTD_H_
19776#define _SYS_UNISTD_H
19777#define __need_size_t
19778#define __need_ptrdiff_t
19779#undef __need_ptrdiff_t
19780#undef __need_size_t
19781#undef __need_wchar_t
19782#undef NULL
19783#define NULL ((void *)0)
19784#undef __need_NULL
19785#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19786#define F_ULOCK 0
19787#define F_LOCK 1
19788#define F_TLOCK 2
19789#define F_TEST 3
19790#define __UNISTD_GETOPT__
19791#define __GETOPT_H__
19792#undef __UNISTD_GETOPT__
19793#define F_OK 0
19794#define R_OK 4
19795#define W_OK 2
19796#define X_OK 1
19797#define SEEK_SET 0
19798#define SEEK_CUR 1
19799#define SEEK_END 2
19800#define STDIN_FILENO 0
19801#define STDOUT_FILENO 1
19802#define STDERR_FILENO 2
19803#define _SC_ARG_MAX 0
19804#define _SC_CHILD_MAX 1
19805#define _SC_CLK_TCK 2
19806#define _SC_NGROUPS_MAX 3
19807#define _SC_OPEN_MAX 4
19808#define _SC_JOB_CONTROL 5
19809#define _SC_SAVED_IDS 6
19810#define _SC_VERSION 7
19811#define _SC_PAGESIZE 8
19812#define _SC_PAGE_SIZE _SC_PAGESIZE
19813#define _SC_NPROCESSORS_CONF 9
19814#define _SC_NPROCESSORS_ONLN 10
19815#define _SC_PHYS_PAGES 11
19816#define _SC_AVPHYS_PAGES 12
19817#define _SC_MQ_OPEN_MAX 13
19818#define _SC_MQ_PRIO_MAX 14
19819#define _SC_RTSIG_MAX 15
19820#define _SC_SEM_NSEMS_MAX 16
19821#define _SC_SEM_VALUE_MAX 17
19822#define _SC_SIGQUEUE_MAX 18
19823#define _SC_TIMER_MAX 19
19824#define _SC_TZNAME_MAX 20
19825#define _SC_ASYNCHRONOUS_IO 21
19826#define _SC_FSYNC 22
19827#define _SC_MAPPED_FILES 23
19828#define _SC_MEMLOCK 24
19829#define _SC_MEMLOCK_RANGE 25
19830#define _SC_MEMORY_PROTECTION 26
19831#define _SC_MESSAGE_PASSING 27
19832#define _SC_PRIORITIZED_IO 28
19833#define _SC_REALTIME_SIGNALS 29
19834#define _SC_SEMAPHORES 30
19835#define _SC_SHARED_MEMORY_OBJECTS 31
19836#define _SC_SYNCHRONIZED_IO 32
19837#define _SC_TIMERS 33
19838#define _SC_AIO_LISTIO_MAX 34
19839#define _SC_AIO_MAX 35
19840#define _SC_AIO_PRIO_DELTA_MAX 36
19841#define _SC_DELAYTIMER_MAX 37
19842#define _SC_THREAD_KEYS_MAX 38
19843#define _SC_THREAD_STACK_MIN 39
19844#define _SC_THREAD_THREADS_MAX 40
19845#define _SC_TTY_NAME_MAX 41
19846#define _SC_THREADS 42
19847#define _SC_THREAD_ATTR_STACKADDR 43
19848#define _SC_THREAD_ATTR_STACKSIZE 44
19849#define _SC_THREAD_PRIORITY_SCHEDULING 45
19850#define _SC_THREAD_PRIO_INHERIT 46
19851#define _SC_THREAD_PRIO_PROTECT 47
19852#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
19853#define _SC_THREAD_PROCESS_SHARED 48
19854#define _SC_THREAD_SAFE_FUNCTIONS 49
19855#define _SC_GETGR_R_SIZE_MAX 50
19856#define _SC_GETPW_R_SIZE_MAX 51
19857#define _SC_LOGIN_NAME_MAX 52
19858#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
19859#define _SC_ADVISORY_INFO 54
19860#define _SC_ATEXIT_MAX 55
19861#define _SC_BARRIERS 56
19862#define _SC_BC_BASE_MAX 57
19863#define _SC_BC_DIM_MAX 58
19864#define _SC_BC_SCALE_MAX 59
19865#define _SC_BC_STRING_MAX 60
19866#define _SC_CLOCK_SELECTION 61
19867#define _SC_COLL_WEIGHTS_MAX 62
19868#define _SC_CPUTIME 63
19869#define _SC_EXPR_NEST_MAX 64
19870#define _SC_HOST_NAME_MAX 65
19871#define _SC_IOV_MAX 66
19872#define _SC_IPV6 67
19873#define _SC_LINE_MAX 68
19874#define _SC_MONOTONIC_CLOCK 69
19875#define _SC_RAW_SOCKETS 70
19876#define _SC_READER_WRITER_LOCKS 71
19877#define _SC_REGEXP 72
19878#define _SC_RE_DUP_MAX 73
19879#define _SC_SHELL 74
19880#define _SC_SPAWN 75
19881#define _SC_SPIN_LOCKS 76
19882#define _SC_SPORADIC_SERVER 77
19883#define _SC_SS_REPL_MAX 78
19884#define _SC_SYMLOOP_MAX 79
19885#define _SC_THREAD_CPUTIME 80
19886#define _SC_THREAD_SPORADIC_SERVER 81
19887#define _SC_TIMEOUTS 82
19888#define _SC_TRACE 83
19889#define _SC_TRACE_EVENT_FILTER 84
19890#define _SC_TRACE_EVENT_NAME_MAX 85
19891#define _SC_TRACE_INHERIT 86
19892#define _SC_TRACE_LOG 87
19893#define _SC_TRACE_NAME_MAX 88
19894#define _SC_TRACE_SYS_MAX 89
19895#define _SC_TRACE_USER_EVENT_MAX 90
19896#define _SC_TYPED_MEMORY_OBJECTS 91
19897#define _SC_V7_ILP32_OFF32 92
19898#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
19899#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
19900#define _SC_V7_ILP32_OFFBIG 93
19901#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
19902#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
19903#define _SC_V7_LP64_OFF64 94
19904#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
19905#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
19906#define _SC_V7_LPBIG_OFFBIG 95
19907#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
19908#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
19909#define _SC_XOPEN_CRYPT 96
19910#define _SC_XOPEN_ENH_I18N 97
19911#define _SC_XOPEN_LEGACY 98
19912#define _SC_XOPEN_REALTIME 99
19913#define _SC_STREAM_MAX 100
19914#define _SC_PRIORITY_SCHEDULING 101
19915#define _SC_XOPEN_REALTIME_THREADS 102
19916#define _SC_XOPEN_SHM 103
19917#define _SC_XOPEN_STREAMS 104
19918#define _SC_XOPEN_UNIX 105
19919#define _SC_XOPEN_VERSION 106
19920#define _SC_2_CHAR_TERM 107
19921#define _SC_2_C_BIND 108
19922#define _SC_2_C_DEV 109
19923#define _SC_2_FORT_DEV 110
19924#define _SC_2_FORT_RUN 111
19925#define _SC_2_LOCALEDEF 112
19926#define _SC_2_PBS 113
19927#define _SC_2_PBS_ACCOUNTING 114
19928#define _SC_2_PBS_CHECKPOINT 115
19929#define _SC_2_PBS_LOCATE 116
19930#define _SC_2_PBS_MESSAGE 117
19931#define _SC_2_PBS_TRACK 118
19932#define _SC_2_SW_DEV 119
19933#define _SC_2_UPE 120
19934#define _SC_2_VERSION 121
19935#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
19936#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
19937#define _SC_XOPEN_UUCP 124
19938#define _SC_LEVEL1_ICACHE_SIZE 125
19939#define _SC_LEVEL1_ICACHE_ASSOC 126
19940#define _SC_LEVEL1_ICACHE_LINESIZE 127
19941#define _SC_LEVEL1_DCACHE_SIZE 128
19942#define _SC_LEVEL1_DCACHE_ASSOC 129
19943#define _SC_LEVEL1_DCACHE_LINESIZE 130
19944#define _SC_LEVEL2_CACHE_SIZE 131
19945#define _SC_LEVEL2_CACHE_ASSOC 132
19946#define _SC_LEVEL2_CACHE_LINESIZE 133
19947#define _SC_LEVEL3_CACHE_SIZE 134
19948#define _SC_LEVEL3_CACHE_ASSOC 135
19949#define _SC_LEVEL3_CACHE_LINESIZE 136
19950#define _SC_LEVEL4_CACHE_SIZE 137
19951#define _SC_LEVEL4_CACHE_ASSOC 138
19952#define _SC_LEVEL4_CACHE_LINESIZE 139
19953#define _SC_POSIX_26_VERSION 140
19954#define _PC_LINK_MAX 0
19955#define _PC_MAX_CANON 1
19956#define _PC_MAX_INPUT 2
19957#define _PC_NAME_MAX 3
19958#define _PC_PATH_MAX 4
19959#define _PC_PIPE_BUF 5
19960#define _PC_CHOWN_RESTRICTED 6
19961#define _PC_NO_TRUNC 7
19962#define _PC_VDISABLE 8
19963#define _PC_ASYNC_IO 9
19964#define _PC_PRIO_IO 10
19965#define _PC_SYNC_IO 11
19966#define _PC_FILESIZEBITS 12
19967#define _PC_2_SYMLINKS 13
19968#define _PC_SYMLINK_MAX 14
19969#define _PC_ALLOC_SIZE_MIN 15
19970#define _PC_REC_INCR_XFER_SIZE 16
19971#define _PC_REC_MAX_XFER_SIZE 17
19972#define _PC_REC_MIN_XFER_SIZE 18
19973#define _PC_REC_XFER_ALIGN 19
19974#define _PC_TIMESTAMP_RESOLUTION 20
19975#define _PC_POSIX_PERMISSIONS 90
19976#define _PC_POSIX_SECURITY 91
19977#define _PC_CASE_INSENSITIVE 92
19978#define _CS_PATH 0
19979#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
19980#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
19981#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
19982#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
19983#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
19984#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
19985#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
19986#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
19987#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
19988#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
19989#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
19990#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
19991#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
19992#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
19993#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
19994#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
19995#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
19996#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
19997#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
19998#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
19999#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
20000#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20001#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20002#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
20003#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20004#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20005#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
20006#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20007#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20008#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
20009#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
20010#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20011#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20012#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
20013#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20014#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20015#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
20016#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20017#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20018#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
20019#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
20020#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20021#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20022#define _CS_POSIX_V7_THREADS_CFLAGS 18
20023#define _CS_POSIX_V7_THREADS_LDFLAGS 19
20024#define _CS_V7_ENV 20
20025#define _CS_V6_ENV _CS_V7_ENV
20026#define _CS_LFS_CFLAGS 21
20027#define _CS_LFS_LDFLAGS 22
20028#define _CS_LFS_LIBS 23
20029#define _CS_LFS_LINTFLAGS 24
20030#define _SSP_UNISTD_H_
20031#define RBIMPL_DLLEXPORT_H
20032#undef RUBY_EXTERN
20033#define RUBY_EXTERN extern
20034#define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
20035#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN
20036#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END
20037#define MJIT_STATIC static
20038#define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
20039#define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END
20040#define RBIMPL_XMALLOC_H
20041#define RBIMPL_ATTR_ALLOC_SIZE_H
20042#define RBIMPL_HAS_ATTRIBUTE_H
20043#define RBIMPL_HAVE___HAS_ATTRIBUTE 1
20044#define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_)
20045#define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple))
20046#define RBIMPL_ATTR_NODISCARD_H
20047#define RBIMPL_HAS_C_ATTRIBUTE_H
20048#define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)
20049#define RBIMPL_HAS_CPP_ATTRIBUTE_H
20050#define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)
20051#define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
20052#define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
20053#define RBIMPL_ATTR_NOEXCEPT_H
20054#define RBIMPL_HAS_FEATURE_H
20055#define RBIMPL_HAS_FEATURE(_) __has_feature(_)
20056#define RBIMPL_ATTR_NOEXCEPT(_)
20057#define RBIMPL_ATTR_RESTRICT_H
20058#define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__))
20059#define RBIMPL_ATTR_RETURNS_NONNULL_H
20060#define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__))
20061#define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
20062#define xmalloc ruby_xmalloc
20063#define xmalloc2 ruby_xmalloc2
20064#define xcalloc ruby_xcalloc
20065#define xrealloc ruby_xrealloc
20066#define xrealloc2 ruby_xrealloc2
20067#define xfree ruby_xfree
20068#pragma GCC visibility push(default)
20069#pragma GCC visibility pop
20070#define RUBY_BACKWARD2_ASSUME_H
20071#define RBIMPL_ASSUME_H
20072#define RBIMPL_CAST_H
20073#define RBIMPL_HAS_WARNING_H
20074#define RBIMPL_HAS_WARNING(_) 0
20075#define RBIMPL_WARNING_PUSH_H
20076#define RBIMPL_WARNING_PRAGMA0(x) _Pragma(#x)
20077#define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(GCC diagnostic x)
20078#define RBIMPL_WARNING_PRAGMA2(x,y) RBIMPL_WARNING_PRAGMA1(x #y)
20079#define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push)
20080#define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop)
20081#define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag)
20082#define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)
20083#define RBIMPL_CAST(expr) (expr)
20084#define RBIMPL_HAS_BUILTIN_H
20085#define RBIMPL_HAVE___HAS_BUILTIN 1
20086#define RBIMPL_HAS_BUILTIN(_) __has_builtin(_)
20087#define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()
20088#define RBIMPL_UNREACHABLE __builtin_unreachable
20089#define RBIMPL_ASSUME(_) (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
20090#undef ASSUME
20091#undef UNREACHABLE
20092#define ASSUME RBIMPL_ASSUME
20093#define UNREACHABLE RBIMPL_UNREACHABLE()
20094#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN
20095#define RB_LIKELY(x) (__builtin_expect(!!(x), 1))
20096#define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
20097#define RUBY_BACKWARD2_ATTRIBUTES_H
20098#define RBIMPL_ATTR_CONST_H
20099#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H
20100#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _)
20101#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20102#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20103#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20104#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20105#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918)
20106#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20107#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20108#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0)
20109#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20110#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0)
20111#undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow
20112#define RBIMPL_ATTR_CONST() __attribute__((__const__))
20113#define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST()
20114#define RBIMPL_ATTR_DEPRECATED_H
20115#define RBIMPL_HAS_EXTENSION_H
20116#define RBIMPL_HAS_EXTENSION(_) __has_extension(_)
20117#define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))
20118#define RBIMPL_ATTR_DEPRECATED_EXT(msg)
20119#define RBIMPL_ATTR_ERROR_H
20120#define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg))
20121#define RBIMPL_ATTR_FORCEINLINE_H
20122#define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline
20123#define RBIMPL_ATTR_FORMAT_H
20124#define RBIMPL_ATTR_FORMAT(x,y,z) __attribute__((__format__(x, y, z)))
20125#define RBIMPL_PRINTF_FORMAT __printf__
20126#define RBIMPL_ATTR_MAYBE_UNUSED_H
20127#define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
20128#define RBIMPL_ATTR_NOINLINE_H
20129#define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__))
20130#define RBIMPL_ATTR_NONNULL_H
20131#define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list))
20132#define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING
20133#define RBIMPL_ATTR_NORETURN_H
20134#define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__))
20135#define RBIMPL_ATTR_PURE_H
20136#define RUBY_ASSERT_H
20137#define RBIMPL_RUBY_DEBUG 0
20138#define RBIMPL_NDEBUG 0
20139#undef RUBY_DEBUG
20140#undef RUBY_NDEBUG
20141#undef NDEBUG
20142#define RUBY_DEBUG 0
20143#define RUBY_NDEBUG 1
20144#define NDEBUG
20145#undef RBIMPL_NDEBUG
20146#undef RBIMPL_RUBY_DEBUG
20147#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)
20148#pragma GCC visibility push(default)
20149#pragma GCC visibility pop
20150#define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
20151#define RUBY_ASSERT_FAIL(mesg) rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
20152#define RUBY_ASSERT_MESG(expr,mesg) (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
20153#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
20154#define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
20155#define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
20156#define RUBY_ASSERT_MESG_WHEN(cond,expr,mesg) ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
20157#define RUBY_ASSERT_WHEN(cond,expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
20158#define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
20159#define RBIMPL_ATTR_PURE() __attribute__((__pure__))
20160#define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE()
20161#define RBIMPL_ATTR_WARNING_H
20162#define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg))
20163#undef CONSTFUNC
20164#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x
20165#undef PUREFUNC
20166#define PUREFUNC(x) RBIMPL_ATTR_PURE() x
20167#undef DEPRECATED
20168#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x
20169#undef DEPRECATED_BY
20170#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " #n)) x
20171#undef DEPRECATED_TYPE
20172#define DEPRECATED_TYPE(mesg,decl) _Pragma("message \"DEPRECATED_TYPE is deprecated\""); decl RBIMPL_ATTR_DEPRECATED(mseg)
20173#undef RUBY_CXX_DEPRECATED
20174#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))
20175#undef NOINLINE
20176#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x
20177#undef ERRORFUNC
20178#define ERRORFUNC(mesg,x) RBIMPL_ATTR_ERROR(mesg) x
20179#define HAVE_ATTRIBUTE_ERRORFUNC 1
20180#undef WARNINGFUNC
20181#define WARNINGFUNC(mesg,x) RBIMPL_ATTR_WARNING(mesg) x
20182#define HAVE_ATTRIBUTE_WARNINGFUNC 1
20183#undef COLDFUNC
20184#define PRINTF_ARGS(decl,string_index,first_to_check) RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) decl
20185#undef RUBY_ATTR_ALLOC_SIZE
20186#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE
20187#undef RUBY_ATTR_MALLOC
20188#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()
20189#undef RUBY_ATTR_RETURNS_NONNULL
20190#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()
20191#define RUBY_ALIAS_FUNCTION(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
20192#undef RUBY_FUNC_NONNULL
20193#define RUBY_FUNC_NONNULL(n,x) RBIMPL_ATTR_NONNULL(n) x
20194#undef NORETURN
20195#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
20196#define NORETURN_STYLE_NEW
20197#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
20198#undef RB_UNUSED_VAR
20199#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()
20200#define RUBY_BACKWARD2_BOOL_H
20201#define RBIMPL_STDBOOL_H
20202#define _STDBOOL_H
20203#define bool _Bool
20204#define true 1
20205#define false 0
20206#define __bool_true_false_are_defined 1
20207#define FALSE false
20208#define TRUE true
20209#define RUBY_BACKWARD2_LONG_LONG_H
20210#define HAVE_TRUE_LONG_LONG 1
20211#define LONG_LONG long long
20212#define RUBY_BACKWARD2_STDALIGN_H
20213#define RBIMPL_STDALIGN_H
20214#define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))
20215#define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T))
20216#undef RUBY_ALIGNAS
20217#undef RUBY_ALIGNOF
20218#define RUBY_ALIGNAS RBIMPL_ALIGNAS
20219#define RUBY_ALIGNOF RBIMPL_ALIGNOF
20220#define RUBY_BACKWARD2_STDARG_H
20221#undef _
20222#define _(args) args
20223#undef __
20224#define __(args) args
20225#define ANYARGS
20226#define RBIMPL_DOSISH_H
20227#undef _WIN32
20228#define PATH_SEP ":"
20229#define PATH_SEP_CHAR PATH_SEP[0]
20230#define PATH_ENV "PATH"
20231#define CASEFOLD_FILESYSTEM 0
20232#define RUBY_MISSING_H 1
20233#define _MATH_H_
20234#define _M_LN2 0.693147180559945309417
20235#define HUGE_VAL (__builtin_huge_val())
20236#define HUGE_VALF (__builtin_huge_valf())
20237#define HUGE_VALL (__builtin_huge_vall())
20238#define INFINITY (__builtin_inff())
20239#define NAN (__builtin_nanf(""))
20240#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
20241#define __TMP_FLT_EVAL_METHOD
20242#undef FLT_EVAL_METHOD
20243#define FP_NAN 0
20244#define FP_INFINITE 1
20245#define FP_ZERO 2
20246#define FP_SUBNORMAL 3
20247#define FP_NORMAL 4
20248#define FP_ILOGB0 (-__INT_MAX__)
20249#define FP_ILOGBNAN __INT_MAX__
20250#define MATH_ERRNO 1
20251#define MATH_ERREXCEPT 2
20252#define _MATH_ERRHANDLING_ERRNO MATH_ERRNO
20253#define _MATH_ERRHANDLING_ERREXCEPT MATH_ERREXCEPT
20254#define math_errhandling (_MATH_ERRHANDLING_ERRNO | _MATH_ERRHANDLING_ERREXCEPT)
20255#define fpclassify(__x) (__builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x))
20256#define isfinite(__x) (__builtin_isfinite (__x))
20257#define isinf(__x) (__builtin_isinf_sign (__x))
20258#define isnan(__x) (__builtin_isnan (__x))
20259#define isnormal(__x) (__builtin_isnormal (__x))
20260#define signbit(__x) ((sizeof(__x) == sizeof(float)) ? __builtin_signbitf(__x) : (sizeof(__x) == sizeof(double)) ? __builtin_signbit (__x) : __builtin_signbitl(__x))
20261#define isgreater(__x,__y) (__builtin_isgreater (__x, __y))
20262#define isgreaterequal(__x,__y) (__builtin_isgreaterequal (__x, __y))
20263#define isless(__x,__y) (__builtin_isless (__x, __y))
20264#define islessequal(__x,__y) (__builtin_islessequal (__x, __y))
20265#define islessgreater(__x,__y) (__builtin_islessgreater (__x, __y))
20266#define isunordered(__x,__y) (__builtin_isunordered (__x, __y))
20267#define log2(x) (log (x) / _M_LN2)
20268#define signgam (*__signgam())
20269#define __signgam_r(ptr) _REENT_SIGNGAM(ptr)
20270#define MAXFLOAT 3.40282347e+38F
20271#define M_E 2.7182818284590452354
20272#define M_LOG2E 1.4426950408889634074
20273#define M_LOG10E 0.43429448190325182765
20274#define M_LN2 _M_LN2
20275#define M_LN10 2.30258509299404568402
20276#define M_PI 3.14159265358979323846
20277#define M_PI_2 1.57079632679489661923
20278#define M_PI_4 0.78539816339744830962
20279#define M_1_PI 0.31830988618379067154
20280#define M_2_PI 0.63661977236758134308
20281#define M_2_SQRTPI 1.12837916709551257390
20282#define M_SQRT2 1.41421356237309504880
20283#define M_SQRT1_2 0.70710678118654752440
20284#define M_TWOPI (M_PI * 2.0)
20285#define M_3PI_4 2.3561944901923448370E0
20286#define M_SQRTPI 1.77245385090551602792981
20287#define M_LN2LO 1.9082149292705877000E-10
20288#define M_LN2HI 6.9314718036912381649E-1
20289#define M_SQRT3 1.73205080756887719000
20290#define M_IVLN10 0.43429448190325182765
20291#define M_LOG2_E _M_LN2
20292#define M_INVLN2 1.4426950408889633870E0
20293#define _SYS_TIME_H_
20294#define DST_NONE 0
20295#define DST_USA 1
20296#define DST_AUST 2
20297#define DST_WET 3
20298#define DST_MET 4
20299#define DST_EET 5
20300#define DST_CAN 6
20301#define bintime_clear(a) ((a)->sec = (a)->frac = 0)
20302#define bintime_isset(a) ((a)->sec || (a)->frac)
20303#define bintime_cmp(a,b,cmp) (((a)->sec == (b)->sec) ? ((a)->frac cmp (b)->frac) : ((a)->sec cmp (b)->sec))
20304#define SBT_1S ((sbintime_t)1 << 32)
20305#define SBT_1M (SBT_1S * 60)
20306#define SBT_1MS (SBT_1S / 1000)
20307#define SBT_1US (SBT_1S / 1000000)
20308#define SBT_1NS (SBT_1S / 1000000000)
20309#define SBT_MAX 0x7fffffffffffffffLL
20310#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
20311#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
20312#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))
20313#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)
20314#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)
20315#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
20316#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
20317#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))
20318#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)
20319#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)
20320#define ITIMER_REAL 0
20321#define ITIMER_VIRTUAL 1
20322#define ITIMER_PROF 2
20323#define _IEEE_FP_H_
20324#define _FLOAT_H___
20325#undef FLT_RADIX
20326#define FLT_RADIX __FLT_RADIX__
20327#undef FLT_MANT_DIG
20328#undef DBL_MANT_DIG
20329#undef LDBL_MANT_DIG
20330#define FLT_MANT_DIG __FLT_MANT_DIG__
20331#define DBL_MANT_DIG __DBL_MANT_DIG__
20332#define LDBL_MANT_DIG __LDBL_MANT_DIG__
20333#undef FLT_DIG
20334#undef DBL_DIG
20335#undef LDBL_DIG
20336#define FLT_DIG __FLT_DIG__
20337#define DBL_DIG __DBL_DIG__
20338#define LDBL_DIG __LDBL_DIG__
20339#undef FLT_MIN_EXP
20340#undef DBL_MIN_EXP
20341#undef LDBL_MIN_EXP
20342#define FLT_MIN_EXP __FLT_MIN_EXP__
20343#define DBL_MIN_EXP __DBL_MIN_EXP__
20344#define LDBL_MIN_EXP __LDBL_MIN_EXP__
20345#undef FLT_MIN_10_EXP
20346#undef DBL_MIN_10_EXP
20347#undef LDBL_MIN_10_EXP
20348#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
20349#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
20350#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
20351#undef FLT_MAX_EXP
20352#undef DBL_MAX_EXP
20353#undef LDBL_MAX_EXP
20354#define FLT_MAX_EXP __FLT_MAX_EXP__
20355#define DBL_MAX_EXP __DBL_MAX_EXP__
20356#define LDBL_MAX_EXP __LDBL_MAX_EXP__
20357#undef FLT_MAX_10_EXP
20358#undef DBL_MAX_10_EXP
20359#undef LDBL_MAX_10_EXP
20360#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
20361#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
20362#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
20363#undef FLT_MAX
20364#undef DBL_MAX
20365#undef LDBL_MAX
20366#define FLT_MAX __FLT_MAX__
20367#define DBL_MAX __DBL_MAX__
20368#define LDBL_MAX __LDBL_MAX__
20369#undef FLT_EPSILON
20370#undef DBL_EPSILON
20371#undef LDBL_EPSILON
20372#define FLT_EPSILON __FLT_EPSILON__
20373#define DBL_EPSILON __DBL_EPSILON__
20374#define LDBL_EPSILON __LDBL_EPSILON__
20375#undef FLT_MIN
20376#undef DBL_MIN
20377#undef LDBL_MIN
20378#define FLT_MIN __FLT_MIN__
20379#define DBL_MIN __DBL_MIN__
20380#define LDBL_MIN __LDBL_MIN__
20381#undef FLT_ROUNDS
20382#define FLT_ROUNDS 1
20383#undef FLT_EVAL_METHOD
20384#define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__
20385#undef DECIMAL_DIG
20386#define DECIMAL_DIG __DECIMAL_DIG__
20387#undef FLT_DECIMAL_DIG
20388#undef DBL_DECIMAL_DIG
20389#undef LDBL_DECIMAL_DIG
20390#define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
20391#define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
20392#define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
20393#undef FLT_HAS_SUBNORM
20394#undef DBL_HAS_SUBNORM
20395#undef LDBL_HAS_SUBNORM
20396#define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
20397#define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
20398#define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
20399#undef FLT_TRUE_MIN
20400#undef DBL_TRUE_MIN
20401#undef LDBL_TRUE_MIN
20402#define FLT_TRUE_MIN __FLT_DENORM_MIN__
20403#define DBL_TRUE_MIN __DBL_DENORM_MIN__
20404#define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
20405#define CR_DECIMAL_DIG __UINTMAX_MAX__
20406#undef FLT32_MANT_DIG
20407#define FLT32_MANT_DIG __FLT32_MANT_DIG__
20408#undef FLT32_DIG
20409#define FLT32_DIG __FLT32_DIG__
20410#undef FLT32_MIN_EXP
20411#define FLT32_MIN_EXP __FLT32_MIN_EXP__
20412#undef FLT32_MIN_10_EXP
20413#define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__
20414#undef FLT32_MAX_EXP
20415#define FLT32_MAX_EXP __FLT32_MAX_EXP__
20416#undef FLT32_MAX_10_EXP
20417#define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__
20418#undef FLT32_MAX
20419#define FLT32_MAX __FLT32_MAX__
20420#undef FLT32_EPSILON
20421#define FLT32_EPSILON __FLT32_EPSILON__
20422#undef FLT32_MIN
20423#define FLT32_MIN __FLT32_MIN__
20424#undef FLT32_DECIMAL_DIG
20425#define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__
20426#undef FLT32_TRUE_MIN
20427#define FLT32_TRUE_MIN __FLT32_DENORM_MIN__
20428#undef FLT64_MANT_DIG
20429#define FLT64_MANT_DIG __FLT64_MANT_DIG__
20430#undef FLT64_DIG
20431#define FLT64_DIG __FLT64_DIG__
20432#undef FLT64_MIN_EXP
20433#define FLT64_MIN_EXP __FLT64_MIN_EXP__
20434#undef FLT64_MIN_10_EXP
20435#define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__
20436#undef FLT64_MAX_EXP
20437#define FLT64_MAX_EXP __FLT64_MAX_EXP__
20438#undef FLT64_MAX_10_EXP
20439#define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__
20440#undef FLT64_MAX
20441#define FLT64_MAX __FLT64_MAX__
20442#undef FLT64_EPSILON
20443#define FLT64_EPSILON __FLT64_EPSILON__
20444#undef FLT64_MIN
20445#define FLT64_MIN __FLT64_MIN__
20446#undef FLT64_DECIMAL_DIG
20447#define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__
20448#undef FLT64_TRUE_MIN
20449#define FLT64_TRUE_MIN __FLT64_DENORM_MIN__
20450#undef FLT128_MANT_DIG
20451#define FLT128_MANT_DIG __FLT128_MANT_DIG__
20452#undef FLT128_DIG
20453#define FLT128_DIG __FLT128_DIG__
20454#undef FLT128_MIN_EXP
20455#define FLT128_MIN_EXP __FLT128_MIN_EXP__
20456#undef FLT128_MIN_10_EXP
20457#define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__
20458#undef FLT128_MAX_EXP
20459#define FLT128_MAX_EXP __FLT128_MAX_EXP__
20460#undef FLT128_MAX_10_EXP
20461#define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__
20462#undef FLT128_MAX
20463#define FLT128_MAX __FLT128_MAX__
20464#undef FLT128_EPSILON
20465#define FLT128_EPSILON __FLT128_EPSILON__
20466#undef FLT128_MIN
20467#define FLT128_MIN __FLT128_MIN__
20468#undef FLT128_DECIMAL_DIG
20469#define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__
20470#undef FLT128_TRUE_MIN
20471#define FLT128_TRUE_MIN __FLT128_DENORM_MIN__
20472#undef FLT32X_MANT_DIG
20473#define FLT32X_MANT_DIG __FLT32X_MANT_DIG__
20474#undef FLT32X_DIG
20475#define FLT32X_DIG __FLT32X_DIG__
20476#undef FLT32X_MIN_EXP
20477#define FLT32X_MIN_EXP __FLT32X_MIN_EXP__
20478#undef FLT32X_MIN_10_EXP
20479#define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__
20480#undef FLT32X_MAX_EXP
20481#define FLT32X_MAX_EXP __FLT32X_MAX_EXP__
20482#undef FLT32X_MAX_10_EXP
20483#define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__
20484#undef FLT32X_MAX
20485#define FLT32X_MAX __FLT32X_MAX__
20486#undef FLT32X_EPSILON
20487#define FLT32X_EPSILON __FLT32X_EPSILON__
20488#undef FLT32X_MIN
20489#define FLT32X_MIN __FLT32X_MIN__
20490#undef FLT32X_DECIMAL_DIG
20491#define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__
20492#undef FLT32X_TRUE_MIN
20493#define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__
20494#undef FLT64X_MANT_DIG
20495#define FLT64X_MANT_DIG __FLT64X_MANT_DIG__
20496#undef FLT64X_DIG
20497#define FLT64X_DIG __FLT64X_DIG__
20498#undef FLT64X_MIN_EXP
20499#define FLT64X_MIN_EXP __FLT64X_MIN_EXP__
20500#undef FLT64X_MIN_10_EXP
20501#define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__
20502#undef FLT64X_MAX_EXP
20503#define FLT64X_MAX_EXP __FLT64X_MAX_EXP__
20504#undef FLT64X_MAX_10_EXP
20505#define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__
20506#undef FLT64X_MAX
20507#define FLT64X_MAX __FLT64X_MAX__
20508#undef FLT64X_EPSILON
20509#define FLT64X_EPSILON __FLT64X_EPSILON__
20510#undef FLT64X_MIN
20511#define FLT64X_MIN __FLT64X_MIN__
20512#undef FLT64X_DECIMAL_DIG
20513#define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__
20514#undef FLT64X_TRUE_MIN
20515#define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__
20516#undef DEC32_MANT_DIG
20517#undef DEC64_MANT_DIG
20518#undef DEC128_MANT_DIG
20519#define DEC32_MANT_DIG __DEC32_MANT_DIG__
20520#define DEC64_MANT_DIG __DEC64_MANT_DIG__
20521#define DEC128_MANT_DIG __DEC128_MANT_DIG__
20522#undef DEC32_MIN_EXP
20523#undef DEC64_MIN_EXP
20524#undef DEC128_MIN_EXP
20525#define DEC32_MIN_EXP __DEC32_MIN_EXP__
20526#define DEC64_MIN_EXP __DEC64_MIN_EXP__
20527#define DEC128_MIN_EXP __DEC128_MIN_EXP__
20528#undef DEC32_MAX_EXP
20529#undef DEC64_MAX_EXP
20530#undef DEC128_MAX_EXP
20531#define DEC32_MAX_EXP __DEC32_MAX_EXP__
20532#define DEC64_MAX_EXP __DEC64_MAX_EXP__
20533#define DEC128_MAX_EXP __DEC128_MAX_EXP__
20534#undef DEC32_MAX
20535#undef DEC64_MAX
20536#undef DEC128_MAX
20537#define DEC32_MAX __DEC32_MAX__
20538#define DEC64_MAX __DEC64_MAX__
20539#define DEC128_MAX __DEC128_MAX__
20540#undef DEC32_EPSILON
20541#undef DEC64_EPSILON
20542#undef DEC128_EPSILON
20543#define DEC32_EPSILON __DEC32_EPSILON__
20544#define DEC64_EPSILON __DEC64_EPSILON__
20545#define DEC128_EPSILON __DEC128_EPSILON__
20546#undef DEC32_MIN
20547#undef DEC64_MIN
20548#undef DEC128_MIN
20549#define DEC32_MIN __DEC32_MIN__
20550#define DEC64_MIN __DEC64_MIN__
20551#define DEC128_MIN __DEC128_MIN__
20552#undef DEC_EVAL_METHOD
20553#define DEC_EVAL_METHOD __DEC_EVAL_METHOD__
20554#undef DEC32_TRUE_MIN
20555#undef DEC64_TRUE_MIN
20556#undef DEC128_TRUE_MIN
20557#define DEC32_TRUE_MIN __DEC32_SUBNORMAL_MIN__
20558#define DEC64_TRUE_MIN __DEC64_SUBNORMAL_MIN__
20559#define DEC128_TRUE_MIN __DEC128_SUBNORMAL_MIN__
20560#define EXT_EXPBITS 15
20561#define EXT_FRACHBITS 32
20562#define EXT_FRACLBITS 32
20563#define __ieee_ext_field_type unsigned int
20564#define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1)
20565#define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1)
20566#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS)
20567#define FP_RN 0
20568#define FP_RM 1
20569#define FP_RP 2
20570#define FP_RZ 3
20571#define FP_X_INV 0x10
20572#define FP_X_DX 0x80
20573#define FP_X_OFL 0x04
20574#define FP_X_UFL 0x02
20575#define FP_X_IMP 0x01
20576#define FP_RDI_TOZ 0
20577#define FP_RDI_RD 1
20578#define __IEEE_DBL_EXPBIAS 1023
20579#define __IEEE_FLT_EXPBIAS 127
20580#define __IEEE_DBL_EXPLEN 11
20581#define __IEEE_FLT_EXPLEN 8
20582#define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1))
20583#define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1))
20584#define __IEEE_DBL_MAXPOWTWO ((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1))
20585#define __IEEE_FLT_MAXPOWTWO ((float)(1L << (32-8) - 1))
20586#define __IEEE_DBL_NAN_EXP 0x7ff
20587#define __IEEE_FLT_NAN_EXP 0xff
20588#pragma GCC visibility push(default)
20589#define HAVE_FINITE 1
20590#define finite(x) isfinite(x)
20591#pragma GCC visibility pop
20592#define RUBY
20593#define RB_GNUC_EXTENSION __extension__
20594#define RB_GNUC_EXTENSION_BLOCK(x) __extension__ ({ x; })
20595#define RUBY_MBCHAR_MAXSIZE INT_MAX
20596#define FLUSH_REGISTER_WINDOWS ((void)0)
20597#define RBIMPL_ANYARGS_H
20598#define RBIMPL_ATTR_WEAKREF_H
20599#define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(#sym)))
20600#define RBIMPL_INTERN_CLASS_H
20601#define RBIMPL_VALUE_H
20602#define RBIMPL_STATIC_ASSERT_H
20603#undef assert
20604#define assert(__e) ((void)0)
20605#define static_assert _Static_assert
20606#define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
20607#define RBIMPL_STATIC_ASSERT(name,expr) RBIMPL_STATIC_ASSERT0(expr, #name ": " #expr)
20608#define RUBY_BACKWARD2_LIMITS_H
20609#define _GCC_LIMITS_H_
20610#define _GCC_NEXT_LIMITS_H
20611#define _FEATURES_H
20612#define _CYGWIN_LIMITS_H__
20613#define __AIO_LISTIO_MAX 32
20614#define __AIO_MAX 8
20615#define __AIO_PRIO_DELTA_MAX 0
20616#define __ARG_MAX 32000
20617#define __ATEXIT_MAX 32
20618#define __CHILD_MAX 256
20619#define __DELAYTIMER_MAX __INT_MAX__
20620#define __HOST_NAME_MAX 255
20621#define __IOV_MAX 1024
20622#define __LOGIN_NAME_MAX 256
20623#define __MQ_OPEN_MAX 256
20624#define __MQ_PRIO_MAX INT_MAX
20625#define __OPEN_MAX 3200
20626#define __PAGESIZE 65536
20627#define __PTHREAD_DESTRUCTOR_ITERATIONS 4
20628#define __PTHREAD_KEYS_MAX 1024
20629#define __PTHREAD_STACK_MIN 65536
20630#define __RTSIG_MAX 33
20631#define __SEM_VALUE_MAX 1147483648
20632#define __SIGQUEUE_MAX 32
20633#define __STREAM_MAX 20
20634#define __SYMLOOP_MAX 10
20635#define __TIMER_MAX 32
20636#define __TTY_NAME_MAX 32
20637#define __FILESIZEBITS 64
20638#define __LINK_MAX 1024
20639#define __MAX_CANON 255
20640#define __MAX_INPUT 255
20641#define __NAME_MAX 255
20642#define __PATH_MAX 4096
20643#define __PIPE_BUF 4096
20644#define _LIMITS_H___
20645#define _MACH_MACHLIMITS_H_
20646#undef CHAR_BIT
20647#define CHAR_BIT __CHAR_BIT__
20648#undef LONG_BIT
20649#define LONG_BIT (__SIZEOF_LONG__ * __CHAR_BIT__)
20650#undef WORD_BIT
20651#define WORD_BIT (__SIZEOF_INT__ * __CHAR_BIT__)
20652#define MB_LEN_MAX 8
20653#undef SCHAR_MIN
20654#define SCHAR_MIN (-128)
20655#undef SCHAR_MAX
20656#define SCHAR_MAX 127
20657#undef UCHAR_MAX
20658#define UCHAR_MAX 255
20659#undef CHAR_MIN
20660#define CHAR_MIN (-128)
20661#undef CHAR_MAX
20662#define CHAR_MAX 127
20663#undef SHRT_MIN
20664#define SHRT_MIN (-32768)
20665#undef SHRT_MAX
20666#define SHRT_MAX 32767
20667#undef USHRT_MAX
20668#define USHRT_MAX 65535
20669#undef INT_MIN
20670#define INT_MIN (-INT_MAX-1)
20671#undef INT_MAX
20672#define INT_MAX __INT_MAX__
20673#undef UINT_MAX
20674#define UINT_MAX (INT_MAX * 2U + 1)
20675#undef LONG_MIN
20676#define LONG_MIN (-LONG_MAX-1L)
20677#undef LONG_MAX
20678#define LONG_MAX __LONG_MAX__
20679#undef ULONG_MAX
20680#define ULONG_MAX (LONG_MAX * 2UL + 1)
20681#undef LONG_LONG_MIN
20682#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
20683#undef LONG_LONG_MAX
20684#define LONG_LONG_MAX __LONG_LONG_MAX__
20685#undef ULONG_LONG_MAX
20686#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
20687#undef LLONG_MIN
20688#define LLONG_MIN (-LLONG_MAX-1)
20689#undef LLONG_MAX
20690#define LLONG_MAX __LONG_LONG_MAX__
20691#undef ULLONG_MAX
20692#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
20693#undef SSIZE_MAX
20694#define SSIZE_MAX (__LONG_MAX__)
20695#define AIO_LISTIO_MAX __AIO_LISTIO_MAX
20696#define AIO_MAX __AIO_MAX
20697#define AIO_PRIO_DELTA_MAX __AIO_PRIO_DELTA_MAX
20698#undef ARG_MAX
20699#define ARG_MAX __ARG_MAX
20700#undef ATEXIT_MAX
20701#define ATEXIT_MAX __ATEXIT_MAX
20702#undef CHILD_MAX
20703#define CHILD_MAX __CHILD_MAX
20704#undef DELAYTIMER_MAX
20705#define DELAYTIMER_MAX __DELAYTIMER_MAX
20706#undef HOST_NAME_MAX
20707#define HOST_NAME_MAX __HOST_NAME_MAX
20708#undef IOV_MAX
20709#define IOV_MAX __IOV_MAX
20710#undef LOGIN_NAME_MAX
20711#define LOGIN_NAME_MAX __LOGIN_NAME_MAX
20712#undef MQ_OPEN_MAX
20713#define MQ_OPEN_MAX __MQ_OPEN_MAX
20714#undef MQ_PRIO_MAX
20715#define MQ_PRIO_MAX __MQ_PRIO_MAX
20716#undef OPEN_MAX
20717#define OPEN_MAX __OPEN_MAX
20718#undef PAGESIZE
20719#define PAGESIZE __PAGESIZE
20720#undef PAGE_SIZE
20721#define PAGE_SIZE PAGESIZE
20722#undef PTHREAD_DESTRUCTOR_ITERATIONS
20723#define PTHREAD_DESTRUCTOR_ITERATIONS __PTHREAD_DESTRUCTOR_ITERATIONS
20724#undef PTHREAD_KEYS_MAX
20725#define PTHREAD_KEYS_MAX __PTHREAD_KEYS_MAX
20726#undef PTHREAD_STACK_MIN
20727#define PTHREAD_STACK_MIN __PTHREAD_STACK_MIN
20728#undef PTHREAD_THREADS_MAX
20729#undef RTSIG_MAX
20730#define RTSIG_MAX __RTSIG_MAX
20731#undef SEM_NSEMS_MAX
20732#undef SEM_VALUE_MAX
20733#define SEM_VALUE_MAX __SEM_VALUE_MAX
20734#undef SIGQUEUE_MAX
20735#define SIGQUEUE_MAX __SIGQUEUE_MAX
20736#undef SS_REPL_MAX
20737#undef STREAM_MAX
20738#define STREAM_MAX __STREAM_MAX
20739#undef SYMLOOP_MAX
20740#define SYMLOOP_MAX __SYMLOOP_MAX
20741#undef TIMER_MAX
20742#define TIMER_MAX __TIMER_MAX
20743#undef TRACE_EVENT_NAME_MAX
20744#undef TRACE_NAME_MAX
20745#undef TRACE_SYS_MAX
20746#undef TRACE_USER_EVENT_MAX
20747#undef TTY_NAME_MAX
20748#define TTY_NAME_MAX __TTY_NAME_MAX
20749#undef TZNAME_MAX
20750#undef FILESIZEBITS
20751#define FILESIZEBITS __FILESIZEBITS
20752#undef LINK_MAX
20753#define LINK_MAX __LINK_MAX
20754#undef MAX_CANON
20755#define MAX_CANON __MAX_CANON
20756#undef MAX_INPUT
20757#define MAX_INPUT __MAX_INPUT
20758#undef NAME_MAX
20759#define NAME_MAX __NAME_MAX
20760#undef PATH_MAX
20761#define PATH_MAX __PATH_MAX
20762#undef PIPE_BUF
20763#define PIPE_BUF __PIPE_BUF
20764#undef POSIX_ALLOC_SIZE_MIN
20765#undef POSIX_REC_INCR_XFER_SIZE
20766#undef POSIX_REC_MAX_XFER_SIZE
20767#undef POSIX_REC_MIN_XFER_SIZE
20768#undef POSIX_REC_XFER_ALIGN
20769#undef SYMLINK_MAX
20770#define SYMLINK_MAX (PATH_MAX - 1)
20771#undef BC_BASE_MAX
20772#define BC_BASE_MAX 99
20773#undef BC_DIM_MAX
20774#define BC_DIM_MAX 2048
20775#undef BC_SCALE_MAX
20776#define BC_SCALE_MAX 99
20777#undef BC_STRING_MAX
20778#define BC_STRING_MAX 1000
20779#undef CHARCLASS_NAME_MAX
20780#undef COLL_WEIGHTS_MAX
20781#undef EXPR_NEST_MAX
20782#define EXPR_NEST_MAX 32
20783#undef LINE_MAX
20784#define LINE_MAX 2048
20785#undef NGROUPS_MAX
20786#define NGROUPS_MAX 1024
20787#undef RE_DUP_MAX
20788#define RE_DUP_MAX 255
20789#define _POSIX_CLOCKRES_MIN 20000000
20790#define _POSIX_AIO_LISTIO_MAX 2
20791#define _POSIX_AIO_MAX 1
20792#define _POSIX_ARG_MAX 4096
20793#define _POSIX_CHILD_MAX 25
20794#define _POSIX_DELAYTIMER_MAX 32
20795#define _POSIX_HOST_NAME_MAX 255
20796#define _POSIX_LINK_MAX 8
20797#define _POSIX_LOGIN_NAME_MAX 9
20798#define _POSIX_MAX_CANON 255
20799#define _POSIX_MAX_INPUT 255
20800#define _POSIX_MQ_OPEN_MAX 8
20801#define _POSIX_MQ_PRIO_MAX 32
20802#define _POSIX_NAME_MAX 14
20803#define _POSIX_NGROUPS_MAX 8
20804#define _POSIX_OPEN_MAX 20
20805#define _POSIX_PATH_MAX 256
20806#define _POSIX_PIPE_BUF 512
20807#define _POSIX_RE_DUP_MAX 255
20808#define _POSIX_RTSIG_MAX 8
20809#define _POSIX_SEM_NSEMS_MAX 256
20810#define _POSIX_SEM_VALUE_MAX 32767
20811#define _POSIX_SIGQUEUE_MAX 32
20812#define _POSIX_SSIZE_MAX 32767
20813#define _POSIX_STREAM_MAX 8
20814#define _POSIX_SS_REPL_MAX 4
20815#define _POSIX_SYMLINK_MAX 255
20816#define _POSIX_SYMLOOP_MAX 8
20817#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
20818#define _POSIX_THREAD_KEYS_MAX 128
20819#define _POSIX_THREAD_THREADS_MAX 64
20820#define _POSIX_TIMER_MAX 32
20821#define _POSIX_TRACE_EVENT_NAME_MAX 30
20822#define _POSIX_TRACE_NAME_MAX 8
20823#define _POSIX_TRACE_SYS_MAX 8
20824#define _POSIX_TRACE_USER_EVENT_MAX 32
20825#define _POSIX_TTY_NAME_MAX 9
20826#define _POSIX_TZNAME_MAX 6
20827#define _POSIX2_BC_BASE_MAX 99
20828#define _POSIX2_BC_DIM_MAX 2048
20829#define _POSIX2_BC_SCALE_MAX 99
20830#define _POSIX2_BC_STRING_MAX 1000
20831#define _POSIX2_COLL_WEIGHTS_MAX 2
20832#define _POSIX2_EXPR_NEST_MAX 32
20833#define _POSIX2_LINE_MAX 2048
20834#define _POSIX2_RE_DUP_MAX 255
20835#define _XOPEN_IOV_MAX 16
20836#define _XOPEN_NAME_MAX 255
20837#define _XOPEN_PATH_MAX 1024
20838#define NL_ARGMAX 9
20839#define NL_LANGMAX 14
20840#define NL_MSGMAX 32767
20841#define NL_SETMAX 255
20842#define NL_TEXTMAX _POSIX2_LINE_MAX
20843#undef NZERO
20844#define NZERO 20
20845#undef _GCC_NEXT_LIMITS_H
20846#define SIGNED_VALUE long
20847#define SIZEOF_VALUE SIZEOF_LONG
20848#define PRI_VALUE_PREFIX "l"
20849#define RBIMPL_VALUE_NULL 0UL
20850#define RBIMPL_VALUE_ONE 1UL
20851#define RBIMPL_VALUE_FULL ULONG_MAX
20852#pragma GCC visibility push(default)
20853#pragma GCC visibility pop
20854#define RBIMPL_INTERN_VM_H
20855#pragma GCC visibility push(default)
20856#define HAVE_RB_DEFINE_ALLOC_FUNC 1
20857#pragma GCC visibility pop
20858#define RBIMPL_METHOD_H
20859#pragma GCC visibility push(default)
20860#pragma GCC visibility pop
20861#define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))
20862#define RBIMPL_ARITHMETIC_H
20863#define RBIMPL_ARITHMETIC_CHAR_H
20864#define RBIMPL_ARITHMETIC_INT_H
20865#define RBIMPL_ARITHMETIC_FIXNUM_H
20866#define FIXABLE RB_FIXABLE
20867#define FIXNUM_MAX RUBY_FIXNUM_MAX
20868#define FIXNUM_MIN RUBY_FIXNUM_MIN
20869#define NEGFIXABLE RB_NEGFIXABLE
20870#define POSFIXABLE RB_POSFIXABLE
20871#define RB_POSFIXABLE(_) ((_) < RUBY_FIXNUM_MAX + 1)
20872#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN)
20873#define RB_FIXABLE(_) (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_))
20874#define RUBY_FIXNUM_MAX (LONG_MAX / 2)
20875#define RUBY_FIXNUM_MIN (LONG_MIN / 2)
20876#define RBIMPL_ARITHMETIC_INTPTR_T_H
20877#define rb_int_new rb_int2inum
20878#define rb_uint_new rb_uint2inum
20879#pragma GCC visibility push(default)
20880#pragma GCC visibility pop
20881#define RBIMPL_ARITHMETIC_LONG_H
20882#define RBIMPL_ATTR_ARTIFICIAL_H
20883#define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__))
20884#define RBIMPL_ATTR_CONSTEXPR_H
20885#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
20886#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0
20887#define RBIMPL_ATTR_CONSTEXPR(_)
20888#define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_)
20889#define RBIMPL_SPECIAL_CONSTS_H
20890#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H
20891#define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_)
20892#define USE_FLONUM 1
20893#define RTEST RB_TEST
20894#define FIXNUM_P RB_FIXNUM_P
20895#define IMMEDIATE_P RB_IMMEDIATE_P
20896#define NIL_P RB_NIL_P
20897#define SPECIAL_CONST_P RB_SPECIAL_CONST_P
20898#define STATIC_SYM_P RB_STATIC_SYM_P
20899#define Qfalse RUBY_Qfalse
20900#define Qnil RUBY_Qnil
20901#define Qtrue RUBY_Qtrue
20902#define Qundef RUBY_Qundef
20903#define FIXNUM_FLAG RUBY_FIXNUM_FLAG
20904#define FLONUM_FLAG RUBY_FLONUM_FLAG
20905#define FLONUM_MASK RUBY_FLONUM_MASK
20906#define FLONUM_P RB_FLONUM_P
20907#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
20908#define SYMBOL_FLAG RUBY_SYMBOL_FLAG
20909#define RB_FIXNUM_P RB_FIXNUM_P
20910#define RB_FLONUM_P RB_FLONUM_P
20911#define RB_IMMEDIATE_P RB_IMMEDIATE_P
20912#define RB_NIL_P RB_NIL_P
20913#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P
20914#define RB_STATIC_SYM_P RB_STATIC_SYM_P
20915#define RB_TEST RB_TEST
20916#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse)
20917#define RUBY_Qtrue RBIMPL_CAST((VALUE)RUBY_Qtrue)
20918#define RUBY_Qnil RBIMPL_CAST((VALUE)RUBY_Qnil)
20919#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef)
20920#define FIX2LONG RB_FIX2LONG
20921#define FIX2ULONG RB_FIX2ULONG
20922#define INT2FIX RB_INT2FIX
20923#define LONG2FIX RB_INT2FIX
20924#define LONG2NUM RB_LONG2NUM
20925#define NUM2LONG RB_NUM2LONG
20926#define NUM2ULONG RB_NUM2ULONG
20927#define RB_FIX2LONG rb_fix2long
20928#define RB_FIX2ULONG rb_fix2ulong
20929#define RB_LONG2FIX RB_INT2FIX
20930#define RB_LONG2NUM rb_long2num_inline
20931#define RB_NUM2LONG rb_num2long_inline
20932#define RB_NUM2ULONG rb_num2ulong_inline
20933#define RB_ULONG2NUM rb_ulong2num_inline
20934#define ULONG2NUM RB_ULONG2NUM
20935#define rb_fix_new RB_INT2FIX
20936#define rb_long2int rb_long2int_inline
20937#define RB_INT2FIX RB_INT2FIX
20938#pragma GCC visibility push(default)
20939#pragma GCC visibility pop
20940#undef INT2FIX
20941#define INT2FIX(i) __builtin_choose_expr( __builtin_constant_p(i), RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(i))
20942#define RB_INT2NUM rb_int2num_inline
20943#define RB_NUM2INT rb_num2int_inline
20944#define RB_UINT2NUM rb_uint2num_inline
20945#define FIX2INT RB_FIX2INT
20946#define FIX2UINT RB_FIX2UINT
20947#define INT2NUM RB_INT2NUM
20948#define NUM2INT RB_NUM2INT
20949#define NUM2UINT RB_NUM2UINT
20950#define UINT2NUM RB_UINT2NUM
20951#define RB_FIX2INT RB_FIX2INT
20952#define RB_NUM2UINT RB_NUM2UINT
20953#define RB_FIX2UINT RB_FIX2UINT
20954#pragma GCC visibility push(default)
20955#pragma GCC visibility pop
20956#pragma GCC diagnostic push
20957#pragma GCC diagnostic ignored "-Wtype-limits"
20958#pragma GCC diagnostic pop
20959#define RBIMPL_RSTRING_H
20960#define RBIMPL_RBASIC_H
20961#define RBIMPL_ATTR_NOALIAS_H
20962#define RBIMPL_ATTR_NOALIAS()
20963#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj))
20964#define RBASIC_CLASS RBASIC_CLASS
20965#define RBIMPL_RVALUE_EMBED_LEN_MAX 3
20966#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
20967#define RBIMPL_EMBED_LEN_MAX_OF(T) RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
20968#pragma GCC visibility push(default)
20969#pragma GCC visibility pop
20970#define RBIMPL_FL_TYPE_H
20971#define RBIMPL_ATTR_FLAG_ENUM_H
20972#define RBIMPL_ATTR_FLAG_ENUM()
20973#define RBIMPL_VALUE_TYPE_H
20974#define RBIMPL_CONSTANT_P_H
20975#define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr)
20976#define RBIMPL_ERROR_H
20977#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
20978#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
20979#pragma GCC visibility push(default)
20980#define ruby_verbose (*rb_ruby_verbose_ptr())
20981#define ruby_debug (*rb_ruby_debug_ptr())
20982#pragma GCC visibility pop
20983#define T_ARRAY RUBY_T_ARRAY
20984#define T_BIGNUM RUBY_T_BIGNUM
20985#define T_CLASS RUBY_T_CLASS
20986#define T_COMPLEX RUBY_T_COMPLEX
20987#define T_DATA RUBY_T_DATA
20988#define T_FALSE RUBY_T_FALSE
20989#define T_FILE RUBY_T_FILE
20990#define T_FIXNUM RUBY_T_FIXNUM
20991#define T_FLOAT RUBY_T_FLOAT
20992#define T_HASH RUBY_T_HASH
20993#define T_ICLASS RUBY_T_ICLASS
20994#define T_IMEMO RUBY_T_IMEMO
20995#define T_MASK RUBY_T_MASK
20996#define T_MATCH RUBY_T_MATCH
20997#define T_MODULE RUBY_T_MODULE
20998#define T_MOVED RUBY_T_MOVED
20999#define T_NIL RUBY_T_NIL
21000#define T_NODE RUBY_T_NODE
21001#define T_NONE RUBY_T_NONE
21002#define T_OBJECT RUBY_T_OBJECT
21003#define T_RATIONAL RUBY_T_RATIONAL
21004#define T_REGEXP RUBY_T_REGEXP
21005#define T_STRING RUBY_T_STRING
21006#define T_STRUCT RUBY_T_STRUCT
21007#define T_SYMBOL RUBY_T_SYMBOL
21008#define T_TRUE RUBY_T_TRUE
21009#define T_UNDEF RUBY_T_UNDEF
21010#define T_ZOMBIE RUBY_T_ZOMBIE
21011#define BUILTIN_TYPE RB_BUILTIN_TYPE
21012#define DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21013#define RB_INTEGER_TYPE_P rb_integer_type_p
21014#define SYMBOL_P RB_SYMBOL_P
21015#define rb_type_p RB_TYPE_P
21016#define RB_BUILTIN_TYPE RB_BUILTIN_TYPE
21017#define RB_DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21018#define RB_FLOAT_TYPE_P RB_FLOAT_TYPE_P
21019#define RB_SYMBOL_P RB_SYMBOL_P
21020#define RB_TYPE_P RB_TYPE_P
21021#define Check_Type Check_Type
21022#define RBIMPL_ASSERT_TYPE(v,t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P((v), (t)))
21023#define TYPE(_) RBIMPL_CAST((int)rb_type(_))
21024#pragma GCC visibility push(default)
21025#pragma GCC visibility pop
21026#define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
21027#define RBIMPL_WIDER_ENUM 1
21028#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
21029#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
21030#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
21031#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
21032#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
21033#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
21034#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
21035#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
21036#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
21037#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
21038#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
21039#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
21040#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
21041#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
21042#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
21043#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
21044#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
21045#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
21046#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
21047#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
21048#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
21049#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
21050#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
21051#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
21052#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
21053#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
21054#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
21055#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
21056#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
21057#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
21058#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
21059#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
21060#define ELTS_SHARED RUBY_ELTS_SHARED
21061#define RB_OBJ_FREEZE rb_obj_freeze_inline
21062#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
21063#define RB_FL_ABLE RB_FL_ABLE
21064#define RB_FL_ALL RB_FL_ALL
21065#define RB_FL_ALL_RAW RB_FL_ALL_RAW
21066#define RB_FL_ANY RB_FL_ANY
21067#define RB_FL_ANY_RAW RB_FL_ANY_RAW
21068#define RB_FL_REVERSE RB_FL_REVERSE
21069#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
21070#define RB_FL_SET RB_FL_SET
21071#define RB_FL_SET_RAW RB_FL_SET_RAW
21072#define RB_FL_TEST RB_FL_TEST
21073#define RB_FL_TEST_RAW RB_FL_TEST_RAW
21074#define RB_FL_UNSET RB_FL_UNSET
21075#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
21076#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21077#define RB_OBJ_FROZEN RB_OBJ_FROZEN
21078#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21079#define RB_OBJ_INFECT RB_OBJ_INFECT
21080#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21081#define RB_OBJ_TAINT RB_OBJ_TAINT
21082#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
21083#define RB_OBJ_TAINTED RB_OBJ_TAINTED
21084#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21085#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21086#define RB_OBJ_UNTRUST RB_OBJ_TAINT
21087#define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED
21088#define FL_ABLE RB_FL_ABLE
21089#define FL_ALL RB_FL_ALL
21090#define FL_ALL_RAW RB_FL_ALL_RAW
21091#define FL_ANY RB_FL_ANY
21092#define FL_ANY_RAW RB_FL_ANY_RAW
21093#define FL_REVERSE RB_FL_REVERSE
21094#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
21095#define FL_SET RB_FL_SET
21096#define FL_SET_RAW RB_FL_SET_RAW
21097#define FL_TEST RB_FL_TEST
21098#define FL_TEST_RAW RB_FL_TEST_RAW
21099#define FL_UNSET RB_FL_UNSET
21100#define FL_UNSET_RAW RB_FL_UNSET_RAW
21101#define OBJ_FREEZE RB_OBJ_FREEZE
21102#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21103#define OBJ_FROZEN RB_OBJ_FROZEN
21104#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21105#define OBJ_INFECT RB_OBJ_INFECT
21106#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21107#define OBJ_TAINT RB_OBJ_TAINT
21108#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
21109#define OBJ_TAINTED RB_OBJ_TAINTED
21110#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21111#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21112#define OBJ_UNTRUST RB_OBJ_UNTRUST
21113#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
21114#define RBIMPL_FL_USER_N(n) RUBY_FL_USER ##n = (1<<(RUBY_FL_USHIFT+n))
21115#undef RBIMPL_FL_USER_N
21116#undef RBIMPL_WIDER_ENUM
21117#undef RBIMPL_HAVE_ENUM_ATTRIBUTE
21118#pragma GCC visibility push(default)
21119#pragma GCC visibility pop
21120#define RSTRING(obj) RBIMPL_CAST((struct RString *)(obj))
21121#define RSTRING_NOEMBED RSTRING_NOEMBED
21122#define RSTRING_EMBED_LEN_MASK RSTRING_EMBED_LEN_MASK
21123#define RSTRING_EMBED_LEN_SHIFT RSTRING_EMBED_LEN_SHIFT
21124#define RSTRING_EMBED_LEN_MAX RSTRING_EMBED_LEN_MAX
21125#define RSTRING_FSTR RSTRING_FSTR
21126#define RSTRING_EMBED_LEN RSTRING_EMBED_LEN
21127#define RSTRING_LEN RSTRING_LEN
21128#define RSTRING_LENINT RSTRING_LENINT
21129#define RSTRING_PTR RSTRING_PTR
21130#define RSTRING_END RSTRING_END
21131#define StringValue(v) rb_string_value(&(v))
21132#define StringValuePtr(v) rb_string_value_ptr(&(v))
21133#define StringValueCStr(v) rb_string_value_cstr(&(v))
21134#define SafeStringValue(v) StringValue(v)
21135#define ExportStringValue(v) do { StringValue(v); (v) = rb_str_export(v); } while (0)
21136#pragma GCC visibility push(default)
21137#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v)))
21138#pragma GCC visibility pop
21139#pragma GCC diagnostic push
21140#pragma GCC diagnostic pop
21141#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; })
21142#define RB_NUM2CHR rb_num2char_inline
21143#define NUM2CHR RB_NUM2CHR
21144#define CHR2FIX RB_CHR2FIX
21145#define RB_CHR2FIX RB_CHR2FIX
21146#define RBIMPL_ARITHMETIC_DOUBLE_H
21147#define NUM2DBL rb_num2dbl
21148#define RFLOAT_VALUE rb_float_value
21149#define DBL2NUM rb_float_new
21150#pragma GCC visibility push(default)
21151#pragma GCC visibility pop
21152#define RBIMPL_ARITHMETIC_GID_T_H
21153#define RBIMPL_ARITHMETIC_LONG_LONG_H
21154#define RB_LL2NUM rb_ll2num_inline
21155#define RB_ULL2NUM rb_ull2num_inline
21156#define LL2NUM RB_LL2NUM
21157#define ULL2NUM RB_ULL2NUM
21158#define RB_NUM2LL rb_num2ll_inline
21159#define RB_NUM2ULL rb_num2ull_inline
21160#define NUM2LL RB_NUM2LL
21161#define NUM2ULL RB_NUM2ULL
21162#pragma GCC visibility push(default)
21163#pragma GCC visibility pop
21164#define RBIMPL_ARITHMETIC_MODE_T_H
21165#define RBIMPL_ARITHMETIC_OFF_T_H
21166#define RBIMPL_ARITHMETIC_PID_T_H
21167#define RBIMPL_ARITHMETIC_SHORT_H
21168#define RB_NUM2SHORT rb_num2short_inline
21169#define RB_NUM2USHORT rb_num2ushort
21170#define NUM2SHORT RB_NUM2SHORT
21171#define NUM2USHORT RB_NUM2USHORT
21172#define USHORT2NUM RB_INT2FIX
21173#define RB_FIX2SHORT rb_fix2short
21174#define FIX2SHORT RB_FIX2SHORT
21175#pragma GCC visibility push(default)
21176#pragma GCC visibility pop
21177#define RBIMPL_ARITHMETIC_SIZE_T_H
21178#define RB_SIZE2NUM RB_ULL2NUM
21179#define RB_SSIZE2NUM RB_LL2NUM
21180#define RB_NUM2SIZE RB_NUM2ULL
21181#define RB_NUM2SSIZE RB_NUM2LL
21182#define NUM2SIZET RB_NUM2SIZE
21183#define SIZET2NUM RB_SIZE2NUM
21184#define NUM2SSIZET RB_NUM2SSIZE
21185#define SSIZET2NUM RB_SSIZE2NUM
21186#define RBIMPL_ARITHMERIC_ST_DATA_T_H
21187#define RUBY_ST_H 1
21188#pragma GCC visibility push(default)
21189#define ST_DATA_T_DEFINED
21190#define MAX_ST_INDEX_VAL (~(st_index_t) 0)
21191#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
21192#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
21193#define ST_DATA_COMPATIBLE_P(type) __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
21194#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)
21195#define st_init_table rb_st_init_table
21196#define st_init_table_with_size rb_st_init_table_with_size
21197#define st_init_numtable rb_st_init_numtable
21198#define st_init_numtable_with_size rb_st_init_numtable_with_size
21199#define st_init_strtable rb_st_init_strtable
21200#define st_init_strtable_with_size rb_st_init_strtable_with_size
21201#define st_init_strcasetable rb_st_init_strcasetable
21202#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size
21203#define st_delete rb_st_delete
21204#define st_delete_safe rb_st_delete_safe
21205#define st_shift rb_st_shift
21206#define st_insert rb_st_insert
21207#define st_insert2 rb_st_insert2
21208#define st_lookup rb_st_lookup
21209#define st_get_key rb_st_get_key
21210#define st_update rb_st_update
21211#define st_foreach_with_replace rb_st_foreach_with_replace
21212#define st_foreach rb_st_foreach
21213#define st_foreach_check rb_st_foreach_check
21214#define st_keys rb_st_keys
21215#define st_keys_check rb_st_keys_check
21216#define st_values rb_st_values
21217#define st_values_check rb_st_values_check
21218#define st_add_direct rb_st_add_direct
21219#define st_free_table rb_st_free_table
21220#define st_cleanup_safe rb_st_cleanup_safe
21221#define st_clear rb_st_clear
21222#define st_copy rb_st_copy
21223#define st_numcmp rb_st_numcmp
21224#define st_numhash rb_st_numhash
21225#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp
21226#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp
21227#define st_strcasecmp rb_st_locale_insensitive_strcasecmp
21228#define st_strncasecmp rb_st_locale_insensitive_strncasecmp
21229#define st_memsize rb_st_memsize
21230#define st_hash rb_st_hash
21231#define st_hash_uint32 rb_st_hash_uint32
21232#define st_hash_uint rb_st_hash_uint
21233#define st_hash_end rb_st_hash_end
21234#define st_hash_start(h) ((st_index_t)(h))
21235#pragma GCC visibility pop
21236#define ST2FIX RB_ST2FIX
21237#define RB_ST2FIX RB_ST2FIX
21238#define RBIMPL_ARITHMETIC_UID_T_H
21239#define RBIMPL_CORE_H
21240#define RBIMPL_RARRAY_H
21241#define RBIMPL_RGENGC_H
21242#undef USE_RGENGC
21243#define USE_RGENGC 1
21244#define USE_RINCGC 1
21245#define USE_RGENGC_LOGGING_WB_UNPROTECT 0
21246#define RGENGC_WB_PROTECTED_ARRAY 1
21247#define RGENGC_WB_PROTECTED_HASH 1
21248#define RGENGC_WB_PROTECTED_STRUCT 1
21249#define RGENGC_WB_PROTECTED_STRING 1
21250#define RGENGC_WB_PROTECTED_OBJECT 1
21251#define RGENGC_WB_PROTECTED_REGEXP 1
21252#define RGENGC_WB_PROTECTED_CLASS 1
21253#define RGENGC_WB_PROTECTED_FLOAT 1
21254#define RGENGC_WB_PROTECTED_COMPLEX 1
21255#define RGENGC_WB_PROTECTED_RATIONAL 1
21256#define RGENGC_WB_PROTECTED_BIGNUM 1
21257#define RGENGC_WB_PROTECTED_NODE_CREF 1
21258#define RB_OBJ_WRITE(old,slot,young) RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
21259#define RB_OBJ_WRITTEN(old,oldv,young) RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
21260#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21261#define OBJ_PROMOTED RB_OBJ_PROMOTED
21262#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
21263#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
21264#define RB_OBJ_WB_UNPROTECT_FOR(type,obj) (RGENGC_WB_PROTECTED_ ##type ? OBJ_WB_UNPROTECT(obj) : obj)
21265#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
21266#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21267#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
21268#pragma GCC visibility push(default)
21269#pragma GCC visibility pop
21270#define USE_TRANSIENT_HEAP 1
21271#define RARRAY(obj) RBIMPL_CAST((struct RArray *)(obj))
21272#define RARRAY_EMBED_FLAG RARRAY_EMBED_FLAG
21273#define RARRAY_EMBED_LEN_MASK RARRAY_EMBED_LEN_MASK
21274#define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX
21275#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
21276#define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG
21277#define RARRAY_LEN rb_array_len
21278#define RARRAY_CONST_PTR rb_array_const_ptr
21279#define RARRAY_CONST_PTR_TRANSIENT rb_array_const_ptr_transient
21280#define FIX_CONST_VALUE_PTR(x) (x)
21281#define RARRAY_EMBED_LEN RARRAY_EMBED_LEN
21282#define RARRAY_LENINT RARRAY_LENINT
21283#define RARRAY_TRANSIENT_P RARRAY_TRANSIENT_P
21284#define RARRAY_ASET RARRAY_ASET
21285#define RARRAY_PTR RARRAY_PTR
21286#pragma GCC visibility push(default)
21287#pragma GCC visibility pop
21288#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)
21289#define RARRAY_PTR_USE_START(a) rb_array_ptr_use_start(a, 0)
21290#define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0)
21291#define RARRAY_PTR_USE(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(0, ary, ptr_name, expr)
21292#define RARRAY_PTR_USE_START_TRANSIENT(a) rb_array_ptr_use_start(a, 1)
21293#define RARRAY_PTR_USE_END_TRANSIENT(a) rb_array_ptr_use_end(a, 1)
21294#define RARRAY_PTR_USE_TRANSIENT(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(1, ary, ptr_name, expr)
21295#define RARRAY_AREF(a,i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
21296#define RBIMPL_RBIGNUM_H
21297#define RBIGNUM_SIGN rb_big_sign
21298#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P
21299#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P
21300#pragma GCC visibility push(default)
21301#pragma GCC visibility pop
21302#define RBIMPL_RCLASS_H
21303#define RMODULE_IS_OVERLAID RMODULE_IS_OVERLAID
21304#define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT
21305#define RMODULE_INCLUDED_INTO_REFINEMENT RMODULE_INCLUDED_INTO_REFINEMENT
21306#define RCLASS(obj) RBIMPL_CAST((struct RClass *)(obj))
21307#define RMODULE RCLASS
21308#define RCLASS_SUPER rb_class_get_superclass
21309#pragma GCC visibility push(default)
21310#pragma GCC visibility pop
21311#define RBIMPL_RDATA_H
21312#define RUBY_UNTYPED_DATA_WARNING 1
21313#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
21314#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) RBIMPL_ATTR_DEPRECATED(("by TypedData"))
21315#define RBIMPL_MACRO_SELECT(x,y) x ## y
21316#define RUBY_MACRO_SELECT(x,y) RBIMPL_MACRO_SELECT(x, y)
21317#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj))
21318#define DATA_PTR(obj) RDATA(obj)->data
21319#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1)
21320#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0)
21321#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
21322#pragma GCC visibility push(default)
21323#pragma GCC visibility pop
21324#define Data_Wrap_Struct(klass,mark,free,sval) rb_data_object_wrap( (klass), (sval), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free))
21325#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))
21326#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; })
21327#define Data_Get_Struct(obj,type,sval) ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))
21328#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)))
21329#define rb_cData rb_cData()
21330#define rb_data_object_wrap_0 rb_data_object_wrap
21331#define rb_data_object_wrap_1 rb_data_object_wrap_warning
21332#define rb_data_object_wrap_2 rb_data_object_wrap_
21333#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING)
21334#define rb_data_object_get_0 rb_data_object_get
21335#define rb_data_object_get_1 rb_data_object_get_warning
21336#define rb_data_object_get_2 rb_data_object_get_
21337#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING)
21338#define rb_data_object_make_0 rb_data_object_make
21339#define rb_data_object_make_1 rb_data_object_make_warning
21340#define rb_data_object_make_2 rb_data_object_make_
21341#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING)
21342#define RBIMPL_RFILE_H
21343#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj))
21344#define RBIMPL_RHASH_H
21345#define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
21346#define RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
21347#define RHASH_IFNONE(h) rb_hash_ifnone(h)
21348#define RHASH_SIZE(h) rb_hash_size_num(h)
21349#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
21350#define RHASH_SET_IFNONE(h,ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
21351#pragma GCC visibility push(default)
21352#pragma GCC visibility pop
21353#define RBIMPL_ROBJECT_H
21354#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj))
21355#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
21356#define ROBJECT_EMBED ROBJECT_EMBED
21357#define ROBJECT_NUMIV ROBJECT_NUMIV
21358#define ROBJECT_IVPTR ROBJECT_IVPTR
21359#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL
21360#define RBIMPL_RREGEXP_H
21361#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj))
21362#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
21363#define RREGEXP_SRC RREGEXP_SRC
21364#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
21365#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
21366#define RREGEXP_SRC_END RREGEXP_SRC_END
21367#define RBIMPL_RSTRUCT_H
21368#define RSTRUCT_PTR(st) rb_struct_ptr(st)
21369#define RSTRUCT_LEN RSTRUCT_LEN
21370#define RSTRUCT_SET RSTRUCT_SET
21371#define RSTRUCT_GET RSTRUCT_GET
21372#pragma GCC visibility push(default)
21373#pragma GCC visibility pop
21374#define RBIMPL_RTYPEDDATA_H
21375#define HAVE_TYPE_RB_DATA_TYPE_T 1
21376#define HAVE_RB_DATA_TYPE_T_FUNCTION 1
21377#define HAVE_RB_DATA_TYPE_T_PARENT 1
21378#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
21379#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
21380#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
21381#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
21382#define Check_TypedStruct(v,t) rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
21383#define RTYPEDDATA_P RTYPEDDATA_P
21384#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
21385#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
21386#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE
21387#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
21388#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
21389#pragma GCC visibility push(default)
21390#pragma GCC visibility pop
21391#define TypedData_Wrap_Struct(klass,data_type,sval) rb_data_typed_object_wrap((klass),(sval),(data_type))
21392#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))
21393#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; })
21394#define TypedData_Get_Struct(obj,type,data_type,sval) ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
21395#define RBIMPL_CTYPE_H
21396#define _CTYPE_H_
21397#define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a')
21398#define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A')
21399#define _U 01
21400#define _L 02
21401#define _N 04
21402#define _S 010
21403#define _P 020
21404#define _C 040
21405#define _X 0100
21406#define _B 0200
21407#define __CTYPE_PTR (__locale_ctype_ptr ())
21408#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)])
21409#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L))
21410#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U)
21411#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L)
21412#define isdigit(__c) (__ctype_lookup(__c)&_N)
21413#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N))
21414#define isspace(__c) (__ctype_lookup(__c)&_S)
21415#define ispunct(__c) (__ctype_lookup(__c)&_P)
21416#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N))
21417#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B))
21418#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N))
21419#define iscntrl(__c) (__ctype_lookup(__c)&_C)
21420#define isblank(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup(__x)&_B) || (int) (__x) == '\t';})
21421#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)])
21422#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L))
21423#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U)
21424#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L)
21425#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N)
21426#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N))
21427#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S)
21428#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P)
21429#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N))
21430#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B))
21431#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N))
21432#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C)
21433#define isblank_l(__c,__l) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';})
21434#define isascii(__c) ((unsigned)(__c)<=0177)
21435#define toascii(__c) ((__c)&0177)
21436#define isascii_l(__c,__l) ((__l),(unsigned)(__c)<=0177)
21437#define toascii_l(__c,__l) ((__l),(__c)&0177)
21438#define toupper(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (toupper) (__x);})
21439#define tolower(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (tolower) (__x);})
21440#define ISASCII rb_isascii
21441#define ISPRINT rb_isprint
21442#define ISGRAPH rb_isgraph
21443#define ISSPACE rb_isspace
21444#define ISUPPER rb_isupper
21445#define ISLOWER rb_islower
21446#define ISALNUM rb_isalnum
21447#define ISALPHA rb_isalpha
21448#define ISDIGIT rb_isdigit
21449#define ISXDIGIT rb_isxdigit
21450#define ISBLANK rb_isblank
21451#define ISCNTRL rb_iscntrl
21452#define ISPUNCT rb_ispunct
21453#define TOUPPER rb_toupper
21454#define TOLOWER rb_tolower
21455#define STRCASECMP st_locale_insensitive_strcasecmp
21456#define STRNCASECMP st_locale_insensitive_strncasecmp
21457#define STRTOUL ruby_strtoul
21458#pragma GCC visibility push(default)
21459#pragma GCC visibility pop
21460#define RBIMPL_EVAL_H
21461#pragma GCC visibility push(default)
21462#define rb_funcall2 rb_funcallv
21463#define rb_funcall3 rb_funcallv_public
21464#pragma GCC visibility pop
21465#define RBIMPL_EVENT_H
21466#define RUBY_EVENT_NONE 0x0000
21467#define RUBY_EVENT_LINE 0x0001
21468#define RUBY_EVENT_CLASS 0x0002
21469#define RUBY_EVENT_END 0x0004
21470#define RUBY_EVENT_CALL 0x0008
21471#define RUBY_EVENT_RETURN 0x0010
21472#define RUBY_EVENT_C_CALL 0x0020
21473#define RUBY_EVENT_C_RETURN 0x0040
21474#define RUBY_EVENT_RAISE 0x0080
21475#define RUBY_EVENT_ALL 0x00ff
21476#define RUBY_EVENT_B_CALL 0x0100
21477#define RUBY_EVENT_B_RETURN 0x0200
21478#define RUBY_EVENT_THREAD_BEGIN 0x0400
21479#define RUBY_EVENT_THREAD_END 0x0800
21480#define RUBY_EVENT_FIBER_SWITCH 0x1000
21481#define RUBY_EVENT_SCRIPT_COMPILED 0x2000
21482#define RUBY_EVENT_TRACEPOINT_ALL 0xffff
21483#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
21484#define RUBY_INTERNAL_EVENT_SWITCH 0x040000
21485#define RUBY_EVENT_SWITCH 0x040000
21486#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
21487#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
21488#define RUBY_INTERNAL_EVENT_GC_START 0x400000
21489#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
21490#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
21491#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
21492#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
21493#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
21494#define RUBY_INTERNAL_EVENT_MASK 0xffff0000
21495#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
21496#pragma GCC visibility push(default)
21497#pragma GCC visibility pop
21498#define RBIMPL_GC_H
21499#pragma GCC visibility push(default)
21500#pragma GCC visibility pop
21501#define RBIMPL_GLOB_H
21502#pragma GCC visibility push(default)
21503#pragma GCC visibility pop
21504#define RBIMPL_GLOBALS_H
21505#pragma GCC visibility push(default)
21506#define RUBY_INTEGER_UNIFICATION 1
21507#define CLASS_OF rb_class_of
21508#pragma GCC visibility pop
21509#define RBIMPL_INTERPRETER_H
21510#pragma GCC visibility push(default)
21511#define RUBY_INIT_STACK VALUE variable_in_this_stack_frame; ruby_init_stack(&variable_in_this_stack_frame);
21512#pragma GCC visibility pop
21513#define RBIMPL_ITERATOR_H
21514#pragma GCC visibility push(default)
21515#define RB_BLOCK_CALL_FUNC_STRICT 1
21516#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
21517#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg,callback_arg) VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
21518#pragma GCC visibility pop
21519#define RBIMPL_MEMORY_H
21520#define DSIZE_T uint128_t
21521#define RUBY_ALLOCV_LIMIT 1024
21522#define RB_GC_GUARD(v) (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(v); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }))
21523#define RB_ALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type)))
21524#define RB_ALLOC(type) RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type)))
21525#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type)))
21526#define RB_ZALLOC(type) (RB_ZALLOC_N(type, 1))
21527#define RB_REALLOC_N(var,type,n) ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type))))
21528#define ALLOCA_N(type,n) RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))
21529#define RB_ALLOCV(v,n) ((n) < RUBY_ALLOCV_LIMIT ? ((v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n)))
21530#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))))
21531#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))
21532#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n)))
21533#define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
21534#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
21535#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
21536#define ALLOC_N RB_ALLOC_N
21537#define ALLOC RB_ALLOC
21538#define ZALLOC_N RB_ZALLOC_N
21539#define ZALLOC RB_ZALLOC
21540#define REALLOC_N RB_REALLOC_N
21541#define ALLOCV RB_ALLOCV
21542#define ALLOCV_N RB_ALLOCV_N
21543#define ALLOCV_END RB_ALLOCV_END
21544#pragma GCC visibility push(default)
21545#pragma GCC visibility pop
21546#pragma GCC visibility push(default)
21547#pragma GCC visibility pop
21548#undef memcpy
21549#define memcpy ruby_nonempty_memcpy
21550#define RBIMPL_MODULE_H
21551#pragma GCC visibility push(default)
21552#pragma GCC visibility pop
21553#define RBIMPL_NEWOBJ_H
21554#define RB_NEWOBJ(obj,type) type *(obj) = RBIMPL_CAST((type *)rb_newobj())
21555#define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = RBIMPL_CAST((type *)rb_newobj_of(klass, flags))
21556#define NEWOBJ RB_NEWOBJ
21557#define NEWOBJ_OF RB_NEWOBJ_OF
21558#define OBJSETUP rb_obj_setup
21559#define CLONESETUP rb_clone_setup
21560#define DUPSETUP rb_dup_setup
21561#pragma GCC visibility push(default)
21562#pragma GCC visibility pop
21563#define RBIMPL_SCAN_ARGS_H
21564#define RBIMPL_ATTR_DIAGNOSE_IF_H
21565#define RBIMPL_ATTR_DIAGNOSE_IF(_,__,___)
21566#define RBIMPL_INTERN_ARRAY_H
21567#pragma GCC visibility push(default)
21568#define rb_ary_new2 rb_ary_new_capa
21569#define rb_ary_new3 rb_ary_new_from_args
21570#define rb_ary_new4 rb_ary_new_from_values
21571#pragma GCC visibility pop
21572#define RBIMPL_INTERN_ERROR_H
21573#define UNLIMITED_ARGUMENTS (-1)
21574#define rb_exc_new2 rb_exc_new_cstr
21575#define rb_exc_new3 rb_exc_new_str
21576#define rb_check_trusted rb_check_trusted
21577#define rb_check_trusted_inline rb_check_trusted
21578#define rb_check_arity rb_check_arity
21579#pragma GCC visibility push(default)
21580#pragma GCC visibility pop
21581#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)
21582#define rb_check_frozen rb_check_frozen_inline
21583#define RBIMPL_INTERN_HASH_H
21584#pragma GCC visibility push(default)
21585#define st_foreach_safe rb_st_foreach_safe
21586#pragma GCC visibility pop
21587#define RBIMPL_INTERN_PROC_H
21588#pragma GCC visibility push(default)
21589#pragma GCC visibility pop
21590#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0
21591#define RB_SCAN_ARGS_KEYWORDS 1
21592#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3
21593#define RB_NO_KEYWORDS 0
21594#define RB_PASS_KEYWORDS 1
21595#define RB_PASS_CALLED_KEYWORDS rb_keyword_given_p()
21596#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
21597#pragma GCC visibility push(default)
21598#pragma GCC visibility pop
21599#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10)
21600#define rb_scan_args_count_end(fmt,ofs,vari) ((fmt)[ofs] ? -1 : (vari))
21601#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))
21602#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))
21603#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')))
21604#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))
21605#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'))
21606#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'))
21607#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)
21608#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)
21609#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)
21610#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)
21611#define rb_scan_args_next_param() vars[vari++]
21612#undef rb_scan_args_next_param
21613#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__)))
21614#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__)))
21615#define RBIMPL_SYMBOL_H
21616#define RB_ID2SYM rb_id2sym
21617#define RB_SYM2ID rb_sym2id
21618#define ID2SYM RB_ID2SYM
21619#define SYM2ID RB_SYM2ID
21620#define CONST_ID_CACHE RUBY_CONST_ID_CACHE
21621#define CONST_ID RUBY_CONST_ID
21622#define rb_intern_const rb_intern_const
21623#pragma GCC visibility push(default)
21624#pragma GCC visibility pop
21625#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; }
21626#define RUBY_CONST_ID(var,str) do { static ID rbimpl_id; (var) = rbimpl_intern_const(&rbimpl_id, (str)); } while (0)
21627#define rb_intern(str) (RBIMPL_CONSTANT_P(str) ? __extension__ ({ static ID rbimpl_id; rbimpl_intern_const(&rbimpl_id, (str)); }) : (rb_intern)(str))
21628#define RBIMPL_VARIABLE_H
21629#pragma GCC visibility push(default)
21630#pragma GCC visibility pop
21631#define RUBY_BACKWARD2_INTTYPES_H
21632#define PRI_INT_PREFIX ""
21633#define PRI_LONG_PREFIX "l"
21634#define PRI_SHORT_PREFIX "h"
21635#define PRI_64_PREFIX PRI_LONG_PREFIX
21636#define RUBY_PRI_VALUE_MARK "\v"
21637#define PRIdVALUE PRI_VALUE_PREFIX"d"
21638#define PRIoVALUE PRI_VALUE_PREFIX"o"
21639#define PRIuVALUE PRI_VALUE_PREFIX"u"
21640#define PRIxVALUE PRI_VALUE_PREFIX"x"
21641#define PRIXVALUE PRI_VALUE_PREFIX"X"
21642#define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
21643#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
21644#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
21645#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
21646#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
21647#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
21648#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
21649#define PRIdSIZE PRI_SIZE_PREFIX"d"
21650#define PRIiSIZE PRI_SIZE_PREFIX"i"
21651#define PRIoSIZE PRI_SIZE_PREFIX"o"
21652#define PRIuSIZE PRI_SIZE_PREFIX"u"
21653#define PRIxSIZE PRI_SIZE_PREFIX"x"
21654#define PRIXSIZE PRI_SIZE_PREFIX"X"
21655#pragma GCC visibility push(default)
21656#define USE_SYMBOL_AS_METHOD_NAME 1
21657#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
21658#define FilePathStringValue(v) ((v) = rb_get_path(v))
21659#define rb_varargs_argc_check_runtime(argc,vargc) (((argc) <= (vargc)) ? (argc) : (rb_fatal("argc(%d) exceeds actual arguments(%d)", argc, vargc), 0))
21660#define rb_varargs_argc_valid_p(argc,vargc) ((argc) == 0 ? (vargc) <= 1 : (argc) == (vargc))
21661#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))
21662#define RUBY_INTERN_H 1
21663#define RBIMPL_INTERN_BIGNUM_H
21664#pragma GCC visibility push(default)
21665#define rb_big2int(x) rb_big2long(x)
21666#define rb_big2uint(x) rb_big2ulong(x)
21667#define INTEGER_PACK_MSWORD_FIRST 0x01
21668#define INTEGER_PACK_LSWORD_FIRST 0x02
21669#define INTEGER_PACK_MSBYTE_FIRST 0x10
21670#define INTEGER_PACK_LSBYTE_FIRST 0x20
21671#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40
21672#define INTEGER_PACK_2COMP 0x80
21673#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400
21674#define INTEGER_PACK_FORCE_BIGNUM 0x100
21675#define INTEGER_PACK_NEGATIVE 0x200
21676#define INTEGER_PACK_LITTLE_ENDIAN (INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_LSBYTE_FIRST)
21677#define INTEGER_PACK_BIG_ENDIAN (INTEGER_PACK_MSWORD_FIRST | INTEGER_PACK_MSBYTE_FIRST)
21678#pragma GCC visibility pop
21679#define RBIMPL_INTERN_COMPAR_H
21680#pragma GCC visibility push(default)
21681#pragma GCC visibility pop
21682#define RBIMPL_INTERN_COMPLEX_H
21683#pragma GCC visibility push(default)
21684#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0))
21685#define rb_complex_raw2(x,y) rb_complex_raw((x), (y))
21686#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0))
21687#define rb_complex_new2(x,y) rb_complex_new((x), (y))
21688#define rb_complex_add rb_complex_plus
21689#define rb_complex_sub rb_complex_minus
21690#define rb_complex_nagate rb_complex_uminus
21691#define rb_Complex1(x) rb_Complex((x), INT2FIX(0))
21692#define rb_Complex2(x,y) rb_Complex((x), (y))
21693#pragma GCC visibility pop
21694#define RBIMPL_INTERN_CONT_H
21695#pragma GCC visibility push(default)
21696#pragma GCC visibility pop
21697#define RBIMPL_INTERN_DIR_H
21698#pragma GCC visibility push(default)
21699#pragma GCC visibility pop
21700#define RBIMPL_INTERN_ENUM_H
21701#pragma GCC visibility push(default)
21702#pragma GCC visibility pop
21703#define RBIMPL_INTERN_ENUMERATOR_H
21704#define RBIMPL_INTERN_EVAL_H
21705#pragma GCC visibility push(default)
21706#pragma GCC visibility pop
21707#pragma GCC visibility push(default)
21708#pragma GCC visibility pop
21709#define SIZED_ENUMERATOR(obj,argc,argv,size_fn) rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn))
21710#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))
21711#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)
21712#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)
21713#define RETURN_ENUMERATOR(obj,argc,argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)
21714#define RETURN_ENUMERATOR_KW(obj,argc,argv,kw_splat) RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat)
21715#define RBIMPL_INTERN_FILE_H
21716#pragma GCC visibility push(default)
21717#pragma GCC visibility pop
21718#define RBIMPL_INTERN_GC_H
21719#pragma GCC visibility push(default)
21720#pragma GCC visibility pop
21721#define RBIMPL_INTERN_IO_H
21722#pragma GCC visibility push(default)
21723#define rb_defout rb_stdout
21724#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)
21725#pragma GCC visibility pop
21726#define RBIMPL_INTERN_LOAD_H
21727#pragma GCC visibility push(default)
21728#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f)
21729#define HAVE_RB_EXT_RACTOR_SAFE 1
21730#pragma GCC visibility pop
21731#define RBIMPL_INTERN_MARSHAL_H
21732#pragma GCC visibility push(default)
21733#pragma GCC visibility pop
21734#define RBIMPL_INTERN_NUMERIC_H
21735#define RB_NUM_COERCE_FUNCS_NEED_OPID 1
21736#pragma GCC visibility push(default)
21737#pragma GCC visibility pop
21738#define RBIMPL_INTERN_OBJECT_H
21739#pragma GCC visibility push(default)
21740#define RB_OBJ_INIT_COPY(obj,orig) ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
21741#define OBJ_INIT_COPY(obj,orig) RB_OBJ_INIT_COPY(obj, orig)
21742#pragma GCC visibility pop
21743#define RBIMPL_INTERN_PARSE_H
21744#pragma GCC visibility push(default)
21745#pragma GCC visibility pop
21746#define RBIMPL_INTERN_PROCESS_H
21747#pragma GCC visibility push(default)
21748#pragma GCC visibility pop
21749#define RBIMPL_INTERN_RANDOM_H
21750#pragma GCC visibility push(default)
21751#pragma GCC visibility pop
21752#define RBIMPL_INTERN_RANGE_H
21753#pragma GCC visibility push(default)
21754#pragma GCC visibility pop
21755#define RBIMPL_INTERN_RATIONAL_H
21756#pragma GCC visibility push(default)
21757#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1))
21758#define rb_rational_raw2(x,y) rb_rational_raw((x), (y))
21759#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1))
21760#define rb_rational_new2(x,y) rb_rational_new((x), (y))
21761#define rb_Rational1(x) rb_Rational((x), INT2FIX(1))
21762#define rb_Rational2(x,y) rb_Rational((x), (y))
21763#pragma GCC visibility pop
21764#define RBIMPL_INTERN_RE_H
21765#pragma GCC visibility push(default)
21766#define rb_memcmp memcmp
21767#define HAVE_RB_REG_NEW_STR 1
21768#pragma GCC visibility pop
21769#define RBIMPL_INTERN_RUBY_H
21770#pragma GCC visibility push(default)
21771#define rb_argv rb_get_argv()
21772#pragma GCC visibility pop
21773#define RBIMPL_INTERN_SELECT_H
21774#define RBIMPL_INTERN_SELECT_LARGESIZE_H
21775#define rb_fd_ptr rb_fd_ptr
21776#define rb_fd_max rb_fd_max
21777#pragma GCC visibility push(default)
21778#pragma GCC visibility pop
21779#pragma GCC visibility push(default)
21780#pragma GCC visibility pop
21781#define RBIMPL_INTERN_SIGNAL_H
21782#pragma GCC visibility push(default)
21783#define posix_signal ruby_posix_signal
21784#pragma GCC visibility pop
21785#define RBIMPL_INTERN_SPRINTF_H
21786#pragma GCC visibility push(default)
21787#pragma GCC visibility pop
21788#define RBIMPL_INTERN_STRING_H
21789#pragma GCC visibility push(default)
21790#define rb_str_dup_frozen rb_str_new_frozen
21791#define rb_hash_uint32(h,i) st_hash_uint32((h), (i))
21792#define rb_hash_uint(h,i) st_hash_uint((h), (i))
21793#define rb_hash_end(h) st_hash_end(h)
21794#define rb_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_str_new_static : rb_str_new) ((str), (len)))
21795#define rb_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_new_cstr : rb_str_new_cstr) (str))
21796#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)))
21797#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)))
21798#define rb_tainted_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_tainted_str_new_cstr : rb_tainted_str_new_cstr) (str))
21799#define rb_usascii_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_usascii_str_new_cstr : rb_usascii_str_new_cstr) (str))
21800#define rb_utf8_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_utf8_str_new_cstr : rb_utf8_str_new_cstr) (str))
21801#define rb_external_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_external_str_new_cstr : rb_external_str_new_cstr) (str))
21802#define rb_locale_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_locale_str_new_cstr : rb_locale_str_new_cstr) (str))
21803#define rb_str_buf_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_buf_new_cstr : rb_str_buf_new_cstr) (str))
21804#define rb_str_cat_cstr(buf,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((buf), (str)))
21805#define rb_exc_new_cstr(exc,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_exc_new_cstr : rb_exc_new_cstr) ((exc), (str)))
21806#define rb_str_new2 rb_str_new_cstr
21807#define rb_str_new3 rb_str_new_shared
21808#define rb_str_new4 rb_str_new_frozen
21809#define rb_str_new5 rb_str_new_with_class
21810#define rb_tainted_str_new2 rb_tainted_str_new_cstr
21811#define rb_str_buf_new2 rb_str_buf_new_cstr
21812#define rb_usascii_str_new2 rb_usascii_str_new_cstr
21813#define rb_str_buf_cat rb_str_cat
21814#define rb_str_buf_cat2 rb_str_cat_cstr
21815#define rb_str_cat2 rb_str_cat_cstr
21816#define rb_strlen_lit(str) (sizeof(str "") - 1)
21817#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str))
21818#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str))
21819#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str))
21820#define rb_enc_str_new_lit(str,enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc))
21821#define rb_str_new_literal(str) rb_str_new_lit(str)
21822#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str)
21823#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str)
21824#define rb_enc_str_new_literal(str,enc) rb_enc_str_new_lit(str, enc)
21825#pragma GCC visibility pop
21826#define RBIMPL_INTERN_STRUCT_H
21827#pragma GCC visibility push(default)
21828#pragma GCC visibility pop
21829#define RBIMPL_INTERN_THREAD_H
21830#pragma GCC visibility push(default)
21831#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1)
21832#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1)
21833#pragma GCC visibility pop
21834#define RBIMPL_INTERN_TIME_H
21835#pragma GCC visibility push(default)
21836#pragma GCC visibility pop
21837#define RBIMPL_INTERN_VARIABLE_H
21838#pragma GCC visibility push(default)
21839#pragma GCC visibility pop
21840#define RUBY_VM 1
21841#define HAVE_NATIVETHREAD
21842#define InitVM(ext) {void InitVM_ ##ext(void);InitVM_ ##ext();}
21843#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); })
21844#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); })
21845#define RUBY_SUBST_H 1
21846#undef snprintf
21847#undef vsnprintf
21848#define snprintf ruby_snprintf
21849#define vsnprintf ruby_vsnprintf
21850#pragma GCC visibility pop
21851#define RUBY_VM_CORE_H
21852#define N_OR_RUBY_DEBUG(n) (((n) > 0) ? (n) : RUBY_DEBUG)
21853#define VM_CHECK_MODE N_OR_RUBY_DEBUG(0)
21854#define VMDEBUG 0
21855#define RUBY_TOPLEVEL_ASSERT_H
21856#undef assert
21857#define assert RUBY_ASSERT_NDEBUG
21858#define VM_ASSERT(expr) ((void)0)
21859#define VM_UNREACHABLE(func) UNREACHABLE
21860#define _SETJMP_H_
21861#define _JBTYPE long
21862#define _JBLEN 32
21863#define _SAVEMASK _JBLEN
21864#define _SIGMASK (_JBLEN+1)
21865#define _CYGWIN_WORKING_SIGSETJMP
21866#define __SIGMASK_FUNC pthread_sigmask
21867#define sigsetjmp(env,savemask) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((*_sjbuf)[_SAVEMASK] = savemask, __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)), setjmp (*_sjbuf)); })
21868#define siglongjmp(env,val) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((((*_sjbuf)[_SAVEMASK]) ? __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0) : 0), longjmp (*_sjbuf, val)); })
21869#define CCAN_LIST_H
21870#undef assert
21871#define assert(__e) ((void)0)
21872#define static_assert _Static_assert
21873#define CCAN_STR_H
21874#define stringify(expr) stringify_1(expr)
21875#define stringify_1(expr) #expr
21876#define CCAN_CONTAINER_OF_H
21877#define CCAN_CHECK_TYPE_H
21878#define check_type(expr,type) ((typeof(expr) *)0 != (type *)0)
21879#define check_types_match(expr1,expr2) ((typeof(expr1) *)0 != (typeof(expr2) *)0)
21880#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))
21881#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))
21882#define container_off(containing_type,member) offsetof(containing_type, member)
21883#define container_of_var(member_ptr,container_var,member) container_of(member_ptr, typeof(*container_var), member)
21884#define container_off_var(var,member) container_off(typeof(*var), member)
21885#define LIST_LOC __FILE__ ":" stringify(__LINE__)
21886#define list_debug(h,loc) ((void)loc, h)
21887#define list_debug_node(n,loc) ((void)loc, n)
21888#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
21889#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)
21890#define list_add_after(h,p,n) list_add_after_(h, p, n, LIST_LOC)
21891#define list_add(h,n) list_add_(h, n, LIST_LOC)
21892#define list_add_before(h,p,n) list_add_before_(h, p, n, LIST_LOC)
21893#define list_add_tail(h,n) list_add_tail_(h, n, LIST_LOC)
21894#define list_empty(h) list_empty_(h, LIST_LOC)
21895#define list_empty_nodebug(h) list_empty(h)
21896#define list_del(n) list_del_(n, LIST_LOC)
21897#define list_del_init(n) list_del_init_(n, LIST_LOC)
21898#define list_swap(o,n) list_swap_(o, n, LIST_LOC)
21899#define list_entry(n,type,member) container_of(n, type, member)
21900#define list_top(h,type,member) ((type *)list_top_((h), list_off_(type, member)))
21901#define list_pop(h,type,member) ((type *)list_pop_((h), list_off_(type, member)))
21902#define list_tail(h,type,member) ((type *)list_tail_((h), list_off_(type, member)))
21903#define list_for_each(h,i,member) list_for_each_off(h, i, list_off_var_(i, member))
21904#define list_for_each_rev(h,i,member) list_for_each_rev_off(h, i, list_off_var_(i, member))
21905#define list_for_each_rev_safe(h,i,nxt,member) list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member))
21906#define list_for_each_safe(h,i,nxt,member) list_for_each_safe_off(h, i, nxt, list_off_var_(i, member))
21907#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)))
21908#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)))
21909#define list_append_list(t,f) list_append_list_(t, f, __FILE__ ":" stringify(__LINE__))
21910#define list_prepend_list(t,f) list_prepend_list_(t, f, LIST_LOC)
21911#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)))
21912#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)))
21913#define list_for_each_off(h,i,off) list_for_each_off_dir_((h),(i),(off),next)
21914#define list_for_each_rev_off(h,i,off) list_for_each_off_dir_((h),(i),(off),prev)
21915#define list_for_each_safe_off(h,i,nxt,off) list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
21916#define list_for_each_rev_safe_off(h,i,nxt,off) list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
21917#define list_entry_off(n,type,off) ((type *)list_node_from_off_((n), (off)))
21918#define list_head_off(h,type,off) ((type *)list_head_off((h), (off)))
21919#define list_tail_off(h,type,off) ((type *)list_tail_((h), (off)))
21920#define list_add_off(h,n,off) list_add((h), list_node_from_off_((n), (off)))
21921#define list_del_off(n,off) list_del(list_node_from_off_((n), (off)))
21922#define list_del_from_off(h,n,off) list_del_from(h, list_node_from_off_((n), (off)))
21923#define list_off_(type,member) (container_off(type, member) + check_type(((type *)0)->member, struct list_node))
21924#define list_off_var_(var,member) (container_off_var(var, member) + check_type(var->member, struct list_node))
21925#define list_typeof(var) typeof(var)
21926#define RUBY_ID_H
21927#define ID_STATIC_SYM RUBY_ID_STATIC_SYM
21928#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT
21929#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK
21930#define ID_LOCAL RUBY_ID_LOCAL
21931#define ID_INSTANCE RUBY_ID_INSTANCE
21932#define ID_GLOBAL RUBY_ID_GLOBAL
21933#define ID_ATTRSET RUBY_ID_ATTRSET
21934#define ID_CONST RUBY_ID_CONST
21935#define ID_CLASS RUBY_ID_CLASS
21936#define ID_JUNK RUBY_ID_JUNK
21937#define ID_INTERNAL RUBY_ID_INTERNAL
21938#define symIFUNC ID2SYM(idIFUNC)
21939#define symCFUNC ID2SYM(idCFUNC)
21940#define RUBY_TOKEN_DOT2 128
21941#define RUBY_TOKEN_DOT3 129
21942#define RUBY_TOKEN_BDOT2 130
21943#define RUBY_TOKEN_BDOT3 131
21944#define RUBY_TOKEN_UPLUS 132
21945#define RUBY_TOKEN_UMINUS 133
21946#define RUBY_TOKEN_POW 134
21947#define RUBY_TOKEN_CMP 135
21948#define RUBY_TOKEN_LSHFT 136
21949#define RUBY_TOKEN_RSHFT 137
21950#define RUBY_TOKEN_LEQ 138
21951#define RUBY_TOKEN_GEQ 139
21952#define RUBY_TOKEN_EQ 140
21953#define RUBY_TOKEN_EQQ 141
21954#define RUBY_TOKEN_NEQ 142
21955#define RUBY_TOKEN_MATCH 143
21956#define RUBY_TOKEN_NMATCH 144
21957#define RUBY_TOKEN_AREF 145
21958#define RUBY_TOKEN_ASET 146
21959#define RUBY_TOKEN_COLON2 147
21960#define RUBY_TOKEN_ANDOP 148
21961#define RUBY_TOKEN_OROP 149
21962#define RUBY_TOKEN_ANDDOT 150
21963#define RUBY_TOKEN(t) RUBY_TOKEN_ ##t
21964#define RUBY_TOKEN2ID_TYPE(tok,type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM)
21965#define TOKEN2LOCALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_LOCAL)
21966#define TOKEN2INSTANCEID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_INSTANCE)
21967#define TOKEN2GLOBALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_GLOBAL)
21968#define TOKEN2CONSTID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CONST)
21969#define TOKEN2CLASSID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CLASS)
21970#define TOKEN2ATTRSETID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_ATTRSET)
21971#define DEFINE_LOCALID_FROM_TOKEN(n) id ##n = TOKEN2LOCALID(t ##n)
21972#define DEFINE_INSTANCEID_FROM_TOKEN(n) id ##n = TOKEN2INSTANCEID(t ##n)
21973#define DEFINE_GLOBALID_FROM_TOKEN(n) id ##n = TOKEN2GLOBALID(t ##n)
21974#define DEFINE_CONSTID_FROM_TOKEN(n) id ##n = TOKEN2CONSTID(t ##n)
21975#define DEFINE_CLASSID_FROM_TOKEN(n) id ##n = TOKEN2CLASSID(t ##n)
21976#define DEFINE_ATTRSETID_FROM_TOKEN(n) id ##n = TOKEN2ATTRSETID(t ##n)
21977#define RUBY_INTERNAL_H 1
21978#define LIKELY(x) RB_LIKELY(x)
21979#define UNLIKELY(x) RB_UNLIKELY(x)
21980#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
21981#define roomof(x,y) (((x) + (y) - 1) / (y))
21982#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
21983#define ACCESS_ONCE(type,x) (*((volatile type *)&(x)))
21984#undef RARRAY_AREF
21985#undef RClass
21986#undef RCLASS_SUPER
21987#undef NEWOBJ_OF
21988#undef RB_NEWOBJ_OF
21989#undef RB_OBJ_WRITE
21990#undef RHASH_IFNONE
21991#undef RHASH_SIZE
21992#undef RHASH_TBL
21993#undef RHASH_EMPTY_P
21994#undef ROBJECT_IV_INDEX_TBL
21995#undef RSTRUCT_LEN
21996#undef RSTRUCT_PTR
21997#undef RSTRUCT_SET
21998#undef RSTRUCT_GET
21999#define rb_ary_new_from_args(...) rb_nonexistent_symbol(__VA_ARGS__)
22000#define rb_io_fptr_finalize(...) rb_nonexistent_symbol(__VA_ARGS__)
22001#define rb_fstring_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22002#define rb_sym_intern_ascii_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22003#define rb_funcallv(...) rb_nonexistent_symbol(__VA_ARGS__)
22004#define rb_method_basic_definition_p(...) rb_nonexistent_symbol(__VA_ARGS__)
22005#pragma GCC visibility push(default)
22006#pragma GCC visibility pop
22007#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
22008#define rp_m(msg,obj) do { fputs((msg), stderr); rb_obj_info_dump((VALUE)(obj)); } while (0)
22009#define bp() ruby_debug_breakpoint()
22010#define RBOOL(v) ((v) ? Qtrue : Qfalse)
22011#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
22012#define INTERNAL_ARRAY_H
22013#define INTERNAL_STATIC_ASSERT_H
22014#define STATIC_ASSERT RBIMPL_STATIC_ASSERT
22015#define ARRAY_DEBUG (0+RUBY_DEBUG)
22016#define RARRAY_PTR_IN_USE_FLAG FL_USER14
22017#pragma GCC visibility push(default)
22018#pragma GCC visibility pop
22019#undef rb_ary_new_from_args
22020#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); })
22021#undef RARRAY_AREF
22022#define INTERNAL_SERIAL_H
22023#define SERIALT2NUM ULL2NUM
22024#define PRI_SERIALT_PREFIX PRI_LL_PREFIX
22025#define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
22026#define INTERNAL_VM_H
22027#undef rb_funcallv
22028#undef rb_method_basic_definition_p
22029#pragma GCC visibility push(default)
22030#pragma GCC visibility pop
22031#pragma GCC visibility push(default)
22032#pragma GCC visibility pop
22033#pragma GCC visibility push(default)
22034#pragma GCC visibility pop
22035#pragma GCC visibility push(default)
22036#pragma GCC visibility pop
22037#define RUBY_DTRACE_CREATE_HOOK(name,arg) RUBY_DTRACE_HOOK(name ##_CREATE, arg)
22038#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)
22039#define RUBY_METHOD_H 1
22040#define INTERNAL_IMEMO_H
22041#define INTERNAL_GC_H
22042#define INTERNAL_COMPILERS_H
22043#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
22044#define GCC_VERSION_SINCE(x,y,z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
22045#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))))))
22046#define MSC_VERSION_SINCE(_) RBIMPL_COMPILER_SINCE(MSVC, (_) / 100, (_) % 100, 0)
22047#define MSC_VERSION_BEFORE(_) RBIMPL_COMPILER_BEFORE(MSVC, (_) / 100, (_) % 100, 0)
22048#define __has_declspec_attribute(...) RBIMPL_HAS_DECLSPEC_ATTRIBUTE(__VA_ARGS__)
22049#define __has_warning(...) RBIMPL_HAS_WARNING(__VA_ARGS__)
22050#define RB_OBJ_BUILTIN_TYPE(obj) rb_obj_builtin_type(obj)
22051#define OBJ_BUILTIN_TYPE(obj) RB_OBJ_BUILTIN_TYPE(obj)
22052#define rb_obj_builtin_type(obj) __extension__({ VALUE arg_obj = (obj); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })
22053#define FLEX_ARY_LEN
22054#define BITFIELD(type,name,size) type name : size
22055#define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
22056#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))
22057#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))
22058#define RB_NEWOBJ_OF(var,T,c,f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
22059#define RB_EC_NEWOBJ_OF(ec,var,T,c,f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
22060#define NEWOBJ_OF(var,T,c,f) RB_NEWOBJ_OF((var), T, (c), (f))
22061#define RVARGC_NEWOBJ_OF(var,T,c,f,s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
22062#define RB_OBJ_GC_FLAGS_MAX 6
22063#define INTERNAL_WARNINGS_H
22064#define COMPILER_WARNING_PUSH RBIMPL_WARNING_PUSH()
22065#define COMPILER_WARNING_POP RBIMPL_WARNING_POP()
22066#define COMPILER_WARNING_ERROR(flag) RBIMPL_WARNING_ERROR(flag)
22067#define COMPILER_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag)
22068#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; })
22069#define UNALIGNED_MEMBER_PTR(ptr,mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
22070#define RB_OBJ_WRITE(a,slot,b) rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), (VALUE)(b), __FILE__, __LINE__)
22071#define SIZE_POOL_COUNT 1
22072#pragma GCC visibility push(default)
22073#pragma GCC visibility pop
22074#pragma GCC visibility push(default)
22075#pragma GCC visibility pop
22076#define SIZED_REALLOC_N(x,y,z,w) REALLOC_N(x, y, z)
22077#define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
22078#define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
22079#define ruby_sized_xfree ruby_sized_xfree_inlined
22080#define IMEMO_DEBUG 0
22081#define IMEMO_MASK 0x0f
22082#define IMEMO_FL_USHIFT (FL_USHIFT + 4)
22083#define IMEMO_FL_USER0 FL_USER4
22084#define IMEMO_FL_USER1 FL_USER5
22085#define IMEMO_FL_USER2 FL_USER6
22086#define IMEMO_FL_USER3 FL_USER7
22087#define IMEMO_FL_USER4 FL_USER8
22088#define IMEMO_FL_USER5 FL_USER9
22089#define THROW_DATA_CONSUMED IMEMO_FL_USER0
22090#define THROW_DATA_P(err) imemo_throw_data_p((VALUE)err)
22091#define MEMO_CAST(m) ((struct MEMO *)(m))
22092#define MEMO_NEW(a,b,c) ((struct MEMO *)rb_imemo_new(imemo_memo, (VALUE)(a), (VALUE)(b), (VALUE)(c), 0))
22093#define MEMO_FOR(type,value) ((type *)RARRAY_PTR(value))
22094#define NEW_MEMO_FOR(type,value) ((value) = rb_ary_tmp_new_fill(type_roomof(type, VALUE)), MEMO_FOR(type, value))
22095#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))
22096#pragma GCC visibility push(default)
22097#pragma GCC visibility pop
22098#define IMEMO_TYPE_P(v,t) imemo_type_p((VALUE)v, t)
22099#pragma GCC diagnostic push
22100#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22101#pragma GCC diagnostic pop
22102#pragma GCC diagnostic push
22103#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22104#pragma GCC diagnostic pop
22105#define END_OF_ENUMERATION(key)
22106#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
22107#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
22108#define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
22109#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags |= IMEMO_FL_USER3)
22110#define METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4)
22111#define METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4)
22112#define METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5)
22113#define METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5)
22114#define METHOD_ENTRY_CACHEABLE(me) !(METHOD_ENTRY_VISI(me) == METHOD_VISI_PROTECTED)
22115#define VM_METHOD_TYPE_MINIMUM_BITS 4
22116#define rb_iseq_t rb_iseq_t
22117#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
22118#define UNDEFINED_REFINED_METHOD_P(def) ((def)->type == VM_METHOD_TYPE_REFINED && UNDEFINED_METHOD_ENTRY_P((def)->body.refined.orig_me))
22119#pragma GCC visibility push(default)
22120#pragma GCC visibility pop
22121#define RUBY_NODE_H 1
22122#define RNODE(obj) ((struct RNode *)(obj))
22123#define NODE_FL_NEWLINE (((VALUE)1)<<7)
22124#define NODE_TYPESHIFT 8
22125#define NODE_TYPEMASK (((VALUE)0x7f)<<NODE_TYPESHIFT)
22126#define nd_type(n) ((int) (((n)->flags & NODE_TYPEMASK)>>NODE_TYPESHIFT))
22127#define nd_set_type(n,t) rb_node_set_type(n, t)
22128#define nd_init_type(n,t) (n)->flags=(((n)->flags&~NODE_TYPEMASK)|((((unsigned long)(t))<<NODE_TYPESHIFT)&NODE_TYPEMASK))
22129#define NODE_LSHIFT (NODE_TYPESHIFT+7)
22130#define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
22131#define nd_line(n) (int)(((SIGNED_VALUE)(n)->flags)>>NODE_LSHIFT)
22132#define nd_set_line(n,l) (n)->flags=(((n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
22133#define nd_first_column(n) ((int)((n)->nd_loc.beg_pos.column))
22134#define nd_set_first_column(n,v) ((n)->nd_loc.beg_pos.column = (v))
22135#define nd_first_lineno(n) ((int)((n)->nd_loc.beg_pos.lineno))
22136#define nd_set_first_lineno(n,v) ((n)->nd_loc.beg_pos.lineno = (v))
22137#define nd_first_loc(n) ((n)->nd_loc.beg_pos)
22138#define nd_set_first_loc(n,v) (nd_first_loc(n) = (v))
22139#define nd_last_column(n) ((int)((n)->nd_loc.end_pos.column))
22140#define nd_set_last_column(n,v) ((n)->nd_loc.end_pos.column = (v))
22141#define nd_last_lineno(n) ((int)((n)->nd_loc.end_pos.lineno))
22142#define nd_set_last_lineno(n,v) ((n)->nd_loc.end_pos.lineno = (v))
22143#define nd_last_loc(n) ((n)->nd_loc.end_pos)
22144#define nd_set_last_loc(n,v) (nd_last_loc(n) = (v))
22145#define nd_node_id(n) ((n)->node_id)
22146#define nd_set_node_id(n,id) ((n)->node_id = (id))
22147#define nd_head u1.node
22148#define nd_alen u2.argc
22149#define nd_next u3.node
22150#define nd_cond u1.node
22151#define nd_body u2.node
22152#define nd_else u3.node
22153#define nd_resq u2.node
22154#define nd_ensr u3.node
22155#define nd_1st u1.node
22156#define nd_2nd u2.node
22157#define nd_stts u1.node
22158#define nd_entry u3.id
22159#define nd_vid u1.id
22160#define nd_var u1.node
22161#define nd_iter u3.node
22162#define nd_value u2.node
22163#define nd_aid u3.id
22164#define nd_lit u1.value
22165#define nd_recv u1.node
22166#define nd_mid u2.id
22167#define nd_args u3.node
22168#define nd_ainfo u3.args
22169#define nd_defn u3.node
22170#define nd_cpath u1.node
22171#define nd_super u3.node
22172#define nd_beg u1.node
22173#define nd_end u2.node
22174#define nd_state u3.state
22175#define nd_nth u2.argc
22176#define nd_alias u1.id
22177#define nd_orig u2.id
22178#define nd_undef u2.node
22179#define nd_brace u2.argc
22180#define nd_pconst u1.node
22181#define nd_pkwargs u2.node
22182#define nd_pkwrestarg u3.node
22183#define nd_apinfo u3.apinfo
22184#define nd_fpinfo u3.fpinfo
22185#define nd_tbl u1.tbl
22186#define nd_pid u1.id
22187#define nd_plen u2.argc
22188#define nd_cflag u2.id
22189#define nd_cval u3.value
22190#define nd_rval u2.value
22191#define nd_tag u1.id
22192#define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
22193#define NEW_NODE_WITH_LOCALS(t,a1,a2,loc) node_newnode_with_locals(p, (t),(VALUE)(a1),(VALUE)(a2),loc)
22194#define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
22195#define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
22196#define NEW_SCOPE(a,b,loc) NEW_NODE_WITH_LOCALS(NODE_SCOPE,b,a,loc)
22197#define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
22198#define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
22199#define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
22200#define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
22201#define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
22202#define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc)
22203#define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
22204#define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc)
22205#define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
22206#define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
22207#define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc)
22208#define NEW_FOR_MASGN(v,loc) NEW_NODE(NODE_FOR_MASGN,v,0,0,loc)
22209#define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
22210#define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
22211#define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
22212#define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
22213#define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
22214#define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
22215#define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
22216#define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
22217#define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
22218#define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
22219#define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
22220#define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
22221#define NEW_LIST(a,loc) NEW_NODE(NODE_LIST,a,1,0,loc)
22222#define NEW_ZLIST(loc) NEW_NODE(NODE_ZLIST,0,0,0,loc)
22223#define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
22224#define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
22225#define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,v,loc)
22226#define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
22227#define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
22228#define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
22229#define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
22230#define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
22231#define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
22232#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)
22233#define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
22234#define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
22235#define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
22236#define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
22237#define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,v,loc)
22238#define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
22239#define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
22240#define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
22241#define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
22242#define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
22243#define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
22244#define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
22245#define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
22246#define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
22247#define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
22248#define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
22249#define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
22250#define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
22251#define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
22252#define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
22253#define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
22254#define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
22255#define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
22256#define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
22257#define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
22258#define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
22259#define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
22260#define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
22261#define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
22262#define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
22263#define NEW_KW_ARG(i,v,loc) NEW_NODE(NODE_KW_ARG,i,v,0,loc)
22264#define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
22265#define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
22266#define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
22267#define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
22268#define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
22269#define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
22270#define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
22271#define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
22272#define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
22273#define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
22274#define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
22275#define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
22276#define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
22277#define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
22278#define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
22279#define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,1,loc)
22280#define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
22281#define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
22282#define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
22283#define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
22284#define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
22285#define NEW_PREEXE(b,loc) NEW_SCOPE(b,loc)
22286#define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
22287#define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
22288#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
22289#define NODE_REQUIRED_KEYWORD_P(node) ((node)->nd_value == NODE_SPECIAL_REQUIRED_KEYWORD)
22290#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
22291#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
22292#define NODE_SPECIAL_EXCESSIVE_COMMA ((ID)1)
22293#define NODE_SPECIAL_NO_REST_KEYWORD ((NODE *)-1)
22294#pragma GCC visibility push(default)
22295#pragma GCC visibility pop
22296#define RUBY_ATOMIC_H
22297#define RUBY_ATOMIC_GENERIC_MACRO 1
22298#define RUBY_ATOMIC_FETCH_ADD(var,val) rbimpl_atomic_fetch_add(&(var), (val))
22299#define RUBY_ATOMIC_FETCH_SUB(var,val) rbimpl_atomic_fetch_sub(&(var), (val))
22300#define RUBY_ATOMIC_OR(var,val) rbimpl_atomic_or(&(var), (val))
22301#define RUBY_ATOMIC_EXCHANGE(var,val) rbimpl_atomic_exchange(&(var), (val))
22302#define RUBY_ATOMIC_CAS(var,oldval,newval) rbimpl_atomic_cas(&(var), (oldval), (newval))
22303#define RUBY_ATOMIC_SET(var,val) rbimpl_atomic_set(&(var), (val))
22304#define RUBY_ATOMIC_ADD(var,val) rbimpl_atomic_add(&(var), (val))
22305#define RUBY_ATOMIC_SUB(var,val) rbimpl_atomic_sub(&(var), (val))
22306#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var))
22307#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var))
22308#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var))
22309#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var))
22310#define RUBY_ATOMIC_SIZE_EXCHANGE(var,val) rbimpl_atomic_size_exchange(&(var), (val))
22311#define RUBY_ATOMIC_SIZE_CAS(var,oldval,newval) rbimpl_atomic_size_cas(&(var), (oldval), (newval))
22312#define RUBY_ATOMIC_SIZE_ADD(var,val) rbimpl_atomic_size_add(&(var), (val))
22313#define RUBY_ATOMIC_SIZE_SUB(var,val) rbimpl_atomic_size_sub(&(var), (val))
22314#define RUBY_ATOMIC_PTR_EXCHANGE(var,val) RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val))
22315#define RUBY_ATOMIC_PTR_CAS(var,oldval,newval) RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (oldval), (newval)))
22316#define RUBY_ATOMIC_VALUE_EXCHANGE(var,val) rbimpl_atomic_value_exchange(&(var), (val))
22317#define RUBY_ATOMIC_VALUE_CAS(var,oldval,newval) rbimpl_atomic_value_cas(&(var), (oldval), (newval))
22318#define ATOMIC_ADD(var,val) RUBY_ATOMIC_ADD(var, val)
22319#define ATOMIC_CAS(var,oldval,newval) RUBY_ATOMIC_CAS(var, oldval, newval)
22320#define ATOMIC_DEC(var) RUBY_ATOMIC_DEC(var)
22321#define ATOMIC_EXCHANGE(var,val) RUBY_ATOMIC_EXCHANGE(var, val)
22322#define ATOMIC_FETCH_ADD(var,val) RUBY_ATOMIC_FETCH_ADD(var, val)
22323#define ATOMIC_FETCH_SUB(var,val) RUBY_ATOMIC_FETCH_SUB(var, val)
22324#define ATOMIC_INC(var) RUBY_ATOMIC_INC(var)
22325#define ATOMIC_OR(var,val) RUBY_ATOMIC_OR(var, val)
22326#define ATOMIC_PTR_CAS(var,oldval,newval) RUBY_ATOMIC_PTR_CAS(var, oldval, newval)
22327#define ATOMIC_PTR_EXCHANGE(var,val) RUBY_ATOMIC_PTR_EXCHANGE(var, val)
22328#define ATOMIC_SET(var,val) RUBY_ATOMIC_SET(var, val)
22329#define ATOMIC_SIZE_ADD(var,val) RUBY_ATOMIC_SIZE_ADD(var, val)
22330#define ATOMIC_SIZE_CAS(var,oldval,newval) RUBY_ATOMIC_SIZE_CAS(var, oldval, newval)
22331#define ATOMIC_SIZE_DEC(var) RUBY_ATOMIC_SIZE_DEC(var)
22332#define ATOMIC_SIZE_EXCHANGE(var,val) RUBY_ATOMIC_SIZE_EXCHANGE(var, val)
22333#define ATOMIC_SIZE_INC(var) RUBY_ATOMIC_SIZE_INC(var)
22334#define ATOMIC_SIZE_SUB(var,val) RUBY_ATOMIC_SIZE_SUB(var, val)
22335#define ATOMIC_SUB(var,val) RUBY_ATOMIC_SUB(var, val)
22336#define ATOMIC_VALUE_CAS(var,oldval,val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
22337#define ATOMIC_VALUE_EXCHANGE(var,val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
22338#define RUBY_VM_OPTS_H
22339#define OPT_TAILCALL_OPTIMIZATION 0
22340#define OPT_PEEPHOLE_OPTIMIZATION 1
22341#define OPT_SPECIALISED_INSTRUCTION 1
22342#define OPT_INLINE_CONST_CACHE 1
22343#define OPT_FROZEN_STRING_LITERAL 0
22344#define OPT_DEBUG_FROZEN_STRING_LITERAL 0
22345#define OPT_THREADED_CODE 0
22346#define OPT_DIRECT_THREADED_CODE (OPT_THREADED_CODE == 0)
22347#define OPT_TOKEN_THREADED_CODE (OPT_THREADED_CODE == 1)
22348#define OPT_CALL_THREADED_CODE (OPT_THREADED_CODE == 2)
22349#define OPT_CHECKED_RUN 1
22350#define OPT_INLINE_METHOD_CACHE 1
22351#define OPT_GLOBAL_METHOD_CACHE 1
22352#define OPT_BLOCKINLINING 0
22353#define OPT_IC_FOR_IVAR 1
22354#define OPT_OPERANDS_UNIFICATION 1
22355#define OPT_INSTRUCTIONS_UNIFICATION 0
22356#define OPT_UNIFY_ALL_COMBINATION 0
22357#define OPT_STACK_CACHING 0
22358#define OPT_SUPPORT_JOKE 0
22359#define OPT_SUPPORT_CALL_C_FUNCTION 0
22360#define VM_COLLECT_USAGE_DETAILS 0
22361#define RUBY_DARRAY_H
22362#define rb_darray(T) struct { rb_darray_meta_t meta; T data[]; } *
22363#define rb_darray_get(ary,idx) ((ary)->data[(idx)])
22364#define rb_darray_set(ary,idx,element) ((ary)->data[(idx)] = (element))
22365#define rb_darray_ref(ary,idx) (&((ary)->data[(idx)]))
22366#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)
22367#define rb_darray_back(ary) ((ary)->data[(ary)->meta.size - 1])
22368#define rb_darray_pop_back(ary) ((ary)->meta.size--)
22369#define rb_darray_remove_unordered(ary,idx) do { rb_darray_set(ary, idx, rb_darray_back(ary)); rb_darray_pop_back(ary); } while (0);
22370#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)
22371#define rb_darray_for(ary,idx_name) for (int idx_name = 0; idx_name < rb_darray_size(ary); ++idx_name)
22372#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]))
22373#define rb_darray_clear(ary) (ary->meta.size = 0)
22374#define RUBY_THREAD_NATIVE_H 1
22375#define _SCHED_H_
22376#define _SYS_SCHED_H_
22377#define SCHED_OTHER 3
22378#define SCHED_FIFO 1
22379#define SCHED_RR 2
22380#define _PTHREAD_H
22381#define PTHREAD_CANCEL_ASYNCHRONOUS 1
22382#define PTHREAD_CANCEL_ENABLE 0
22383#define PTHREAD_CANCEL_DEFERRED 0
22384#define PTHREAD_CANCEL_DISABLE 1
22385#define PTHREAD_CANCELED ((void *)-1)
22386#define PTHREAD_COND_INITIALIZER (pthread_cond_t)21
22387#define PTHREAD_CREATE_DETACHED 1
22388#define PTHREAD_CREATE_JOINABLE 0
22389#define PTHREAD_EXPLICIT_SCHED 1
22390#define PTHREAD_INHERIT_SCHED 0
22391#define PTHREAD_MUTEX_RECURSIVE 0
22392#define PTHREAD_MUTEX_ERRORCHECK 1
22393#define PTHREAD_MUTEX_NORMAL 2
22394#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
22395#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pthread_mutex_t)18
22396#define PTHREAD_NORMAL_MUTEX_INITIALIZER_NP (pthread_mutex_t)19
22397#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pthread_mutex_t)20
22398#define PTHREAD_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER_NP
22399#define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 }
22400#define PTHREAD_PROCESS_SHARED 1
22401#define PTHREAD_PROCESS_PRIVATE 0
22402#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)22
22403#define PTHREAD_SCOPE_PROCESS 0
22404#define PTHREAD_SCOPE_SYSTEM 1
22405#define PTHREAD_BARRIER_SERIAL_THREAD (-1)
22406#define pthread_cleanup_push(_fn,_arg) { __pthread_cleanup_handler __cleanup_handler = { _fn, _arg, NULL }; _pthread_cleanup_push( &__cleanup_handler );
22407#define pthread_cleanup_pop(_execute) _pthread_cleanup_pop( _execute ); }
22408#pragma GCC visibility push(default)
22409#pragma GCC visibility pop
22410#define RUBY_THREAD_PTHREAD_H
22411#define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
22412#define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
22413#undef except
22414#undef try
22415#undef leave
22416#undef finally
22417#define RB_THREAD_LOCAL_SPECIFIER _Thread_local
22418#pragma GCC visibility push(default)
22419#pragma GCC visibility pop
22420#define RUBY_VM_THREAD_MODEL 2
22421#define VM_INSN_INFO_TABLE_IMPL 2
22422#define RUBY_NSIG NSIG
22423#define RUBY_SIGCHLD (SIGCLD)
22424#define SIGCHLD_LOSSY (0)
22425#define WAITPID_USE_SIGCHLD (RUBY_SIGCHLD || SIGCHLD_LOSSY)
22426#define USE_SIGALTSTACK
22427#define RB_ALTSTACK_INIT(var,altstack) var = rb_register_sigaltstack(altstack)
22428#define RB_ALTSTACK_FREE(var) free(var)
22429#define RB_ALTSTACK(var) var
22430#define TAG_NONE RUBY_TAG_NONE
22431#define TAG_RETURN RUBY_TAG_RETURN
22432#define TAG_BREAK RUBY_TAG_BREAK
22433#define TAG_NEXT RUBY_TAG_NEXT
22434#define TAG_RETRY RUBY_TAG_RETRY
22435#define TAG_REDO RUBY_TAG_REDO
22436#define TAG_RAISE RUBY_TAG_RAISE
22437#define TAG_THROW RUBY_TAG_THROW
22438#define TAG_FATAL RUBY_TAG_FATAL
22439#define TAG_MASK RUBY_TAG_MASK
22440#define GET_IC_SERIAL(ice) (ice)->ic_serial.raw
22441#define SET_IC_SERIAL(ice,v) (ice)->ic_serial.raw = (v)
22442#define CoreDataFromValue(obj,type) (type*)DATA_PTR(obj)
22443#define GetCoreDataFromValue(obj,type,ptr) ((ptr) = CoreDataFromValue((obj), type))
22444#define PATHOBJ_PATH 0
22445#define PATHOBJ_REALPATH 1
22446#define USE_LAZY_LOAD 0
22447#define GetVMPtr(obj,ptr) GetCoreDataFromValue((obj), rb_vm_t, (ptr))
22448#define VM_GLOBAL_CC_CACHE_TABLE_SIZE 1023
22449#define RUBY_VM_SIZE_ALIGN 4096
22450#define RUBY_VM_THREAD_VM_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
22451#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
22452#define RUBY_VM_THREAD_MACHINE_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
22453#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
22454#define RUBY_VM_FIBER_VM_STACK_SIZE ( 16 * 1024 * sizeof(VALUE))
22455#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
22456#define RUBY_VM_FIBER_MACHINE_STACK_SIZE ( 64 * 1024 * sizeof(VALUE))
22457#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
22458#define INTEGER_REDEFINED_OP_FLAG (1 << 0)
22459#define FLOAT_REDEFINED_OP_FLAG (1 << 1)
22460#define STRING_REDEFINED_OP_FLAG (1 << 2)
22461#define ARRAY_REDEFINED_OP_FLAG (1 << 3)
22462#define HASH_REDEFINED_OP_FLAG (1 << 4)
22463#define SYMBOL_REDEFINED_OP_FLAG (1 << 6)
22464#define TIME_REDEFINED_OP_FLAG (1 << 7)
22465#define REGEXP_REDEFINED_OP_FLAG (1 << 8)
22466#define NIL_REDEFINED_OP_FLAG (1 << 9)
22467#define TRUE_REDEFINED_OP_FLAG (1 << 10)
22468#define FALSE_REDEFINED_OP_FLAG (1 << 11)
22469#define PROC_REDEFINED_OP_FLAG (1 << 12)
22470#define BASIC_OP_UNREDEFINED_P(op,klass) (LIKELY((GET_VM()->redefined_flag[(op)]&(klass)) == 0))
22471#define VM_DEBUG_BP_CHECK 0
22472#define VM_DEBUG_VERIFY_METHOD_CACHE (VMDEBUG != 0)
22473#define rb_execution_context_t rb_execution_context_t
22474#define VM_CORE_H_EC_DEFINED 1
22475#define VM_DEFINECLASS_TYPE(x) ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)
22476#define VM_DEFINECLASS_FLAG_SCOPED 0x08
22477#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS 0x10
22478#define VM_DEFINECLASS_SCOPED_P(x) ((x) & VM_DEFINECLASS_FLAG_SCOPED)
22479#define VM_DEFINECLASS_HAS_SUPERCLASS_P(x) ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)
22480#pragma GCC visibility push(default)
22481#pragma GCC visibility pop
22482#define GetProcPtr(obj,ptr) GetCoreDataFromValue((obj), rb_proc_t, (ptr))
22483#pragma GCC visibility push(default)
22484#pragma GCC visibility pop
22485#define GetBindingPtr(obj,ptr) GetCoreDataFromValue((obj), rb_binding_t, (ptr))
22486#define VM_CHECKMATCH_TYPE_MASK 0x03
22487#define VM_CHECKMATCH_ARRAY 0x04
22488#define VM_TAGGED_PTR_SET(p,tag) ((VALUE)(p) | (tag))
22489#define VM_TAGGED_PTR_REF(v,mask) ((void *)((v) & ~mask))
22490#define GC_GUARDED_PTR(p) VM_TAGGED_PTR_SET((p), 0x01)
22491#define GC_GUARDED_PTR_REF(p) VM_TAGGED_PTR_REF((p), 0x03)
22492#define GC_GUARDED_PTR_P(p) (((VALUE)(p)) & 0x01)
22493#define VM_ENV_DATA_SIZE ( 3)
22494#define VM_ENV_DATA_INDEX_ME_CREF (-2)
22495#define VM_ENV_DATA_INDEX_SPECVAL (-1)
22496#define VM_ENV_DATA_INDEX_FLAGS ( 0)
22497#define VM_ENV_DATA_INDEX_ENV ( 1)
22498#define VM_ENV_INDEX_LAST_LVAR (-VM_ENV_DATA_SIZE)
22499#define RUBYVM_CFUNC_FRAME_P(cfp) (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)
22500#define VM_GUARDED_PREV_EP(ep) GC_GUARDED_PTR(ep)
22501#define VM_BLOCK_HANDLER_NONE 0
22502#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
22503#define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
22504#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp,ecfp) ((void *)(ecfp) > (void *)(cfp))
22505#define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
22506#define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
22507#pragma GCC visibility push(default)
22508#pragma GCC visibility pop
22509#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)))
22510#define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]
22511#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)
22512#define CHECK_VM_STACK_OVERFLOW(cfp,margin) CHECK_VM_STACK_OVERFLOW0((cfp), (cfp)->sp, (margin))
22513#pragma GCC visibility push(default)
22514#pragma GCC visibility pop
22515#define GET_VM() rb_current_vm()
22516#define GET_RACTOR() rb_current_ractor()
22517#define GET_THREAD() rb_current_thread()
22518#define GET_EC() rb_current_execution_context(true)
22519#define RUBY_VM_SET_TIMER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TIMER_INTERRUPT_MASK)
22520#define RUBY_VM_SET_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, PENDING_INTERRUPT_MASK)
22521#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
22522#define RUBY_VM_SET_TRAP_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TRAP_INTERRUPT_MASK)
22523#define RUBY_VM_SET_TERMINATE_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TERMINATE_INTERRUPT_MASK)
22524#define RUBY_VM_SET_VM_BARRIER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, VM_BARRIER_INTERRUPT_MASK)
22525#define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
22526#define RUBY_VM_CHECK_INTS(ec) rb_vm_check_ints(ec)
22527#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)
22528#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)
22529#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)
22530#pragma GCC visibility push(default)
22531#define RUBY_EVENT_COVERAGE_LINE 0x010000
22532#define RUBY_EVENT_COVERAGE_BRANCH 0x020000
22533#pragma GCC visibility pop
22534#define PASS_PASSED_BLOCK_HANDLER_EC(ec) pass_passed_block_handler(ec)
22535#define PASS_PASSED_BLOCK_HANDLER() pass_passed_block_handler(GET_EC())
22536#define ruby_setjmp(env) RUBY_SETJMP(env)
22537#define ruby_longjmp(env,val) RUBY_LONGJMP((env),(val))
22538#define __ERRNO_H__
22539#define __error_t_defined 1
22540#define _SYS_ERRNO_H_
22541#define errno (*__errno())
22542#define __errno_r(ptr) _REENT_ERRNO(ptr)
22543#define EPERM 1
22544#define ENOENT 2
22545#define ESRCH 3
22546#define EINTR 4
22547#define EIO 5
22548#define ENXIO 6
22549#define E2BIG 7
22550#define ENOEXEC 8
22551#define EBADF 9
22552#define ECHILD 10
22553#define EAGAIN 11
22554#define ENOMEM 12
22555#define EACCES 13
22556#define EFAULT 14
22557#define ENOTBLK 15
22558#define EBUSY 16
22559#define EEXIST 17
22560#define EXDEV 18
22561#define ENODEV 19
22562#define ENOTDIR 20
22563#define EISDIR 21
22564#define EINVAL 22
22565#define ENFILE 23
22566#define EMFILE 24
22567#define ENOTTY 25
22568#define ETXTBSY 26
22569#define EFBIG 27
22570#define ENOSPC 28
22571#define ESPIPE 29
22572#define EROFS 30
22573#define EMLINK 31
22574#define EPIPE 32
22575#define EDOM 33
22576#define ERANGE 34
22577#define ENOMSG 35
22578#define EIDRM 36
22579#define ECHRNG 37
22580#define EL2NSYNC 38
22581#define EL3HLT 39
22582#define EL3RST 40
22583#define ELNRNG 41
22584#define EUNATCH 42
22585#define ENOCSI 43
22586#define EL2HLT 44
22587#define EDEADLK 45
22588#define ENOLCK 46
22589#define EBADE 50
22590#define EBADR 51
22591#define EXFULL 52
22592#define ENOANO 53
22593#define EBADRQC 54
22594#define EBADSLT 55
22595#define EDEADLOCK 56
22596#define EBFONT 57
22597#define ENOSTR 60
22598#define ENODATA 61
22599#define ETIME 62
22600#define ENOSR 63
22601#define ENONET 64
22602#define ENOPKG 65
22603#define EREMOTE 66
22604#define ENOLINK 67
22605#define EADV 68
22606#define ESRMNT 69
22607#define ECOMM 70
22608#define EPROTO 71
22609#define EMULTIHOP 74
22610#define ELBIN 75
22611#define EDOTDOT 76
22612#define EBADMSG 77
22613#define EFTYPE 79
22614#define ENOTUNIQ 80
22615#define EBADFD 81
22616#define EREMCHG 82
22617#define ELIBACC 83
22618#define ELIBBAD 84
22619#define ELIBSCN 85
22620#define ELIBMAX 86
22621#define ELIBEXEC 87
22622#define ENOSYS 88
22623#define ENMFILE 89
22624#define ENOTEMPTY 90
22625#define ENAMETOOLONG 91
22626#define ELOOP 92
22627#define EOPNOTSUPP 95
22628#define EPFNOSUPPORT 96
22629#define ECONNRESET 104
22630#define ENOBUFS 105
22631#define EAFNOSUPPORT 106
22632#define EPROTOTYPE 107
22633#define ENOTSOCK 108
22634#define ENOPROTOOPT 109
22635#define ESHUTDOWN 110
22636#define ECONNREFUSED 111
22637#define EADDRINUSE 112
22638#define ECONNABORTED 113
22639#define ENETUNREACH 114
22640#define ENETDOWN 115
22641#define ETIMEDOUT 116
22642#define EHOSTDOWN 117
22643#define EHOSTUNREACH 118
22644#define EINPROGRESS 119
22645#define EALREADY 120
22646#define EDESTADDRREQ 121
22647#define EMSGSIZE 122
22648#define EPROTONOSUPPORT 123
22649#define ESOCKTNOSUPPORT 124
22650#define EADDRNOTAVAIL 125
22651#define ENETRESET 126
22652#define EISCONN 127
22653#define ENOTCONN 128
22654#define ETOOMANYREFS 129
22655#define EPROCLIM 130
22656#define EUSERS 131
22657#define EDQUOT 132
22658#define ESTALE 133
22659#define ENOTSUP 134
22660#define ENOMEDIUM 135
22661#define ENOSHARE 136
22662#define ECASECLASH 137
22663#define EILSEQ 138
22664#define EOVERFLOW 139
22665#define ECANCELED 140
22666#define ENOTRECOVERABLE 141
22667#define EOWNERDEAD 142
22668#define ESTRPIPE 143
22669#define EWOULDBLOCK EAGAIN
22670#define __ELASTERROR 2000
22671#define _SYS_PARAM_H
22672#define __need_NULL
22673#undef __need_ptrdiff_t
22674#undef __need_size_t
22675#undef __need_wchar_t
22676#undef NULL
22677#define NULL ((void *)0)
22678#undef __need_NULL
22679#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
22680#define NOFILE OPEN_MAX
22681#define NGROUPS NGROUPS_MAX
22682#define HZ 1000
22683#define MAXHOSTNAMELEN 128
22684#define MAXPATHLEN PATH_MAX
22685#define MAXSYMLINKS SYMLOOP_MAX
22686#define DEV_BSIZE 1024
22687#define NBBY 8
22688#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
22689#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
22690#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
22691#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
22692#define howmany(x,y) (((x)+((y)-1))/(y))
22693#define rounddown(x,y) (((x)/(y))*(y))
22694#define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
22695#define roundup2(x,y) (((x)+((y)-1))&(~((y)-1)))
22696#define powerof2(x) ((((x)-1)&(x))==0)
22697#define MIN(a,b) (((a)<(b))?(a):(b))
22698#define MAX(a,b) (((a)>(b))?(a):(b))
22699#define SAVE_ROOT_JMPBUF(th,stmt) do if (true) { stmt; } else if (th) { } while (0)
22700#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);
22701#define EC_POP_TAG() _ec->tag = _tag.prev; } while (0)
22702#define EC_TMPPOP_TAG() _ec->tag = _tag.prev
22703#define EC_REPUSH_TAG() (void)(_ec->tag = &_tag)
22704#define VAR_FROM_MEMORY(var) (var)
22705#define VAR_INITIALIZED(var) ((void)&(var))
22706#define VAR_NOCLOBBERED(var) var
22707#define EC_EXEC_TAG() (ruby_setjmp(_tag.buf) ? rb_ec_tag_state(VAR_FROM_MEMORY(_ec)) : (EC_REPUSH_TAG(), 0))
22708#define EC_JUMP_TAG(ec,st) rb_ec_tag_jump(ec, st)
22709#define INTERNAL_EXCEPTION_P(exc) FIXNUM_P(exc)
22710#define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1
22711#define CREF_FL_OMOD_SHARED IMEMO_FL_USER2
22712#define CREF_FL_SINGLETON IMEMO_FL_USER3
22713#pragma GCC diagnostic push
22714#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22715#pragma GCC diagnostic pop
22716#define rb_ec_raised_set(ec,f) ((ec)->raised_flag |= (f))
22717#define rb_ec_raised_reset(ec,f) ((ec)->raised_flag &= ~(f))
22718#define rb_ec_raised_p(ec,f) (((ec)->raised_flag & (f)) != 0)
22719#define rb_ec_raised_clear(ec) ((ec)->raised_flag = 0)
22720#define CharNext(p) rb_char_next(p)
22721#define RUBY_GC_H 1
22722#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
22723#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)
22724#define RUBY_MARK_FREE_DEBUG 0
22725#define RUBY_MARK_ENTER(msg)
22726#define RUBY_MARK_LEAVE(msg)
22727#define RUBY_FREE_ENTER(msg)
22728#define RUBY_FREE_LEAVE(msg)
22729#define RUBY_GC_INFO if(0)printf
22730#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} } while (0)
22731#define RUBY_MARK_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark(markobj);} } while (0)
22732#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
22733#define STACK_UPPER(x,a,b) (b)
22734#define STACK_GROW_DIR_DETECTION
22735#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
22736#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
22737#pragma GCC visibility push(default)
22738#pragma GCC visibility pop
22739#define INTERNAL_COMPILE_H
22740#pragma GCC visibility push(default)
22741#pragma GCC visibility pop
22742#define INTERNAL_CONT_H
22743#define INTERNAL_ERROR_H
22744#define INTERNAL_STRING_H
22745#define RUBY_ENCODING_H 1
22746#define RUBY_INTERNAL_ENCODING_CODERANGE_H
22747#pragma GCC visibility push(default)
22748#define ENC_CODERANGE_MASK RUBY_ENC_CODERANGE_MASK
22749#define ENC_CODERANGE_UNKNOWN RUBY_ENC_CODERANGE_UNKNOWN
22750#define ENC_CODERANGE_7BIT RUBY_ENC_CODERANGE_7BIT
22751#define ENC_CODERANGE_VALID RUBY_ENC_CODERANGE_VALID
22752#define ENC_CODERANGE_BROKEN RUBY_ENC_CODERANGE_BROKEN
22753#define ENC_CODERANGE_CLEAN_P(cr) RB_ENC_CODERANGE_CLEAN_P(cr)
22754#define ENC_CODERANGE(obj) RB_ENC_CODERANGE(obj)
22755#define ENC_CODERANGE_ASCIIONLY(obj) RB_ENC_CODERANGE_ASCIIONLY(obj)
22756#define ENC_CODERANGE_SET(obj,cr) RB_ENC_CODERANGE_SET(obj,cr)
22757#define ENC_CODERANGE_CLEAR(obj) RB_ENC_CODERANGE_CLEAR(obj)
22758#define ENC_CODERANGE_AND(a,b) RB_ENC_CODERANGE_AND(a, b)
22759#define ENCODING_CODERANGE_SET(obj,encindex,cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr)
22760#define RB_ENC_CODERANGE RB_ENC_CODERANGE
22761#define RB_ENC_CODERANGE_AND RB_ENC_CODERANGE_AND
22762#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY
22763#define RB_ENC_CODERANGE_CLEAN_P RB_ENC_CODERANGE_CLEAN_P
22764#define RB_ENC_CODERANGE_CLEAR RB_ENC_CODERANGE_CLEAR
22765#define RB_ENC_CODERANGE_SET RB_ENC_CODERANGE_SET
22766#pragma GCC visibility pop
22767#define RUBY_INTERNAL_ENCODING_CTYPE_H
22768#define ONIGMO_H
22769#define ONIGMO_VERSION_MAJOR 6
22770#define ONIGMO_VERSION_MINOR 1
22771#define ONIGMO_VERSION_TEENY 3
22772#define ONIG_EXTERN RUBY_EXTERN
22773#pragma GCC visibility push(default)
22774#define UChar OnigUChar
22775#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)
22776#define OnigCodePointMaskWidth 3
22777#define OnigCodePointMask ((1<<OnigCodePointMaskWidth)-1)
22778#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
22779#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)
22780#define OnigSpecialIndexShift 3
22781#define OnigSpecialIndexWidth 10
22782#define ONIGENC_CASE_UPCASE (1<<13)
22783#define ONIGENC_CASE_DOWNCASE (1<<14)
22784#define ONIGENC_CASE_TITLECASE (1<<15)
22785#define ONIGENC_CASE_SPECIAL_OFFSET 3
22786#define ONIGENC_CASE_UP_SPECIAL (1<<16)
22787#define ONIGENC_CASE_DOWN_SPECIAL (1<<17)
22788#define ONIGENC_CASE_MODIFIED (1<<18)
22789#define ONIGENC_CASE_FOLD (1<<19)
22790#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20)
22791#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<21)
22792#define ONIGENC_CASE_ASCII_ONLY (1<<22)
22793#define ONIGENC_CASE_IS_TITLECASE (1<<23)
22794#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30)
22795#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
22796#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag
22797#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3
22798#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13
22799#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0])
22800#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1]
22801#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2]
22802#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)
22803#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)
22804#define ONIGENC_CODE_TO_MBC_MAXLEN 7
22805#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18
22806#define ONIGENC_CTYPE_NEWLINE 0
22807#define ONIGENC_CTYPE_ALPHA 1
22808#define ONIGENC_CTYPE_BLANK 2
22809#define ONIGENC_CTYPE_CNTRL 3
22810#define ONIGENC_CTYPE_DIGIT 4
22811#define ONIGENC_CTYPE_GRAPH 5
22812#define ONIGENC_CTYPE_LOWER 6
22813#define ONIGENC_CTYPE_PRINT 7
22814#define ONIGENC_CTYPE_PUNCT 8
22815#define ONIGENC_CTYPE_SPACE 9
22816#define ONIGENC_CTYPE_UPPER 10
22817#define ONIGENC_CTYPE_XDIGIT 11
22818#define ONIGENC_CTYPE_WORD 12
22819#define ONIGENC_CTYPE_ALNUM 13
22820#define ONIGENC_CTYPE_ASCII 14
22821#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII
22822#define ONIGENC_FLAG_NONE 0U
22823#define ONIGENC_FLAG_UNICODE 1U
22824#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e)
22825#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)
22826#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)
22827#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
22828#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)
22829#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
22830#define ONIGENC_IS_MBC_WORD(enc,s,end) ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
22831#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)
22832#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE)
22833#define ONIGENC_NAME(enc) ((enc)->name)
22834#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
22835#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) (enc)->is_allowed_reverse_match(s,end,enc)
22836#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) (enc)->left_adjust_char_head(start, s, end, enc)
22837#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
22838#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)
22839#define ONIGENC_STEP_BACK(enc,start,s,end,n) onigenc_step_back((enc),(start),(s),(end),(n))
22840#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n)
22841#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r))
22842#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r)
22843#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1)
22844#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1)
22845#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n))
22846#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1)
22847#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r))
22848#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc)
22849#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen_approximate(p,e,enc)
22850#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)
22851#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)
22852#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len)
22853#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc)
22854#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc)
22855#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc)
22856#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc)
22857#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) (enc)->property_name_to_ctype(enc,p,end)
22858#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc)
22859#define ONIGENC_IS_CODE_NEWLINE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
22860#define ONIGENC_IS_CODE_GRAPH(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
22861#define ONIGENC_IS_CODE_PRINT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
22862#define ONIGENC_IS_CODE_ALNUM(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
22863#define ONIGENC_IS_CODE_ALPHA(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
22864#define ONIGENC_IS_CODE_LOWER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
22865#define ONIGENC_IS_CODE_UPPER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
22866#define ONIGENC_IS_CODE_CNTRL(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
22867#define ONIGENC_IS_CODE_PUNCT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
22868#define ONIGENC_IS_CODE_SPACE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
22869#define ONIGENC_IS_CODE_BLANK(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
22870#define ONIGENC_IS_CODE_DIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
22871#define ONIGENC_IS_CODE_XDIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
22872#define ONIGENC_IS_CODE_WORD(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
22873#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
22874#define ONIG_NREGION 4
22875#define ONIG_MAX_CAPTURE_GROUP_NUM 32767
22876#define ONIG_MAX_BACKREF_NUM 1000
22877#define ONIG_MAX_REPEAT_NUM 100000
22878#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
22879#define ONIG_MAX_ERROR_MESSAGE_LEN 90
22880#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE
22881#define ONIG_OPTION_NONE 0U
22882#define ONIG_OPTION_IGNORECASE 1U
22883#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
22884#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
22885#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE
22886#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)
22887#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)
22888#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)
22889#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)
22890#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
22891#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
22892#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
22893#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
22894#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NOTEOL << 1)
22895#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1)
22896#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_NOTEOS << 1)
22897#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
22898#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
22899#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
22900#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF
22901#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
22902#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
22903#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))
22904#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)
22905#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
22906#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
22907#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
22908#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
22909#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
22910#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
22911#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58)
22912#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG)
22913#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
22914#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
22915#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython)
22916#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
22917#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0)
22918#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1)
22919#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2)
22920#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3)
22921#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4)
22922#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5)
22923#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6)
22924#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7)
22925#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8)
22926#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9)
22927#define ONIG_SYN_OP_VBAR_ALT (1U<<10)
22928#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11)
22929#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12)
22930#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13)
22931#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14)
22932#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15)
22933#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16)
22934#define ONIG_SYN_OP_BRACKET_CC (1U<<17)
22935#define ONIG_SYN_OP_ESC_W_WORD (1U<<18)
22936#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19)
22937#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20)
22938#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21)
22939#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22)
22940#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23)
22941#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24)
22942#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25)
22943#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26)
22944#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27)
22945#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28)
22946#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29)
22947#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30)
22948#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31)
22949#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0)
22950#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1)
22951#define ONIG_SYN_OP2_OPTION_PERL (1U<<2)
22952#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3)
22953#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4)
22954#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5)
22955#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6)
22956#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7)
22957#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8)
22958#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9)
22959#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10)
22960#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11)
22961#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12)
22962#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13)
22963#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14)
22964#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15)
22965#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16)
22966#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17)
22967#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19)
22968#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20)
22969#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21)
22970#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22)
22971#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23)
22972#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24)
22973#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25)
22974#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26)
22975#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27)
22976#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28)
22977#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29)
22978#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30)
22979#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT (1U<<31)
22980#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31)
22981#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0)
22982#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1)
22983#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2)
22984#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3)
22985#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4)
22986#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5)
22987#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6)
22988#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7)
22989#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)
22990#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9)
22991#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)
22992#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP (1U<<11)
22993#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20)
22994#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21)
22995#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22)
22996#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23)
22997#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24)
22998#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25)
22999#define ONIG_SYN_WARN_CC_DUP (1U<<26)
23000#define ONIG_META_CHAR_ESCAPE 0
23001#define ONIG_META_CHAR_ANYCHAR 1
23002#define ONIG_META_CHAR_ANYTIME 2
23003#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3
23004#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4
23005#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5
23006#define ONIG_INEFFECTIVE_META_CHAR 0
23007#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)
23008#define ONIG_NORMAL 0
23009#define ONIG_MISMATCH -1
23010#define ONIG_NO_SUPPORT_CONFIG -2
23011#define ONIGERR_MEMORY -5
23012#define ONIGERR_TYPE_BUG -6
23013#define ONIGERR_PARSER_BUG -11
23014#define ONIGERR_STACK_BUG -12
23015#define ONIGERR_UNDEFINED_BYTECODE -13
23016#define ONIGERR_UNEXPECTED_BYTECODE -14
23017#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
23018#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16
23019#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21
23020#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
23021#define ONIGERR_INVALID_ARGUMENT -30
23022#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
23023#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
23024#define ONIGERR_EMPTY_CHAR_CLASS -102
23025#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103
23026#define ONIGERR_END_PATTERN_AT_ESCAPE -104
23027#define ONIGERR_END_PATTERN_AT_META -105
23028#define ONIGERR_END_PATTERN_AT_CONTROL -106
23029#define ONIGERR_META_CODE_SYNTAX -108
23030#define ONIGERR_CONTROL_CODE_SYNTAX -109
23031#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110
23032#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111
23033#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112
23034#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113
23035#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114
23036#define ONIGERR_NESTED_REPEAT_OPERATOR -115
23037#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116
23038#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117
23039#define ONIGERR_END_PATTERN_IN_GROUP -118
23040#define ONIGERR_UNDEFINED_GROUP_OPTION -119
23041#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121
23042#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122
23043#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123
23044#define ONIGERR_INVALID_CONDITION_PATTERN -124
23045#define ONIGERR_TOO_BIG_NUMBER -200
23046#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201
23047#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202
23048#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203
23049#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204
23050#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205
23051#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206
23052#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207
23053#define ONIGERR_INVALID_BACKREF -208
23054#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209
23055#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -210
23056#define ONIGERR_TOO_SHORT_DIGITS -211
23057#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212
23058#define ONIGERR_EMPTY_GROUP_NAME -214
23059#define ONIGERR_INVALID_GROUP_NAME -215
23060#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216
23061#define ONIGERR_UNDEFINED_NAME_REFERENCE -217
23062#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218
23063#define ONIGERR_MULTIPLEX_DEFINED_NAME -219
23064#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220
23065#define ONIGERR_NEVER_ENDING_RECURSION -221
23066#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
23067#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
23068#define ONIGERR_INVALID_CODE_POINT_VALUE -400
23069#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
23070#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
23071#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402
23072#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403
23073#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
23074#define ONIG_IS_CAPTURE_HISTORY_GROUP(r,i) ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
23075#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1
23076#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2
23077#define ONIG_TRAVERSE_CALLBACK_AT_BOTH ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
23078#define ONIG_REGION_NOTPOS -1
23079#define ONIG_NULL_WARN onig_null_warn
23080#define ONIG_CHAR_TABLE_SIZE 256
23081#pragma GCC visibility pop
23082#define RUBY_INTERNAL_ENCODING_ENCODING_H
23083#define ONIGURUMA_H
23084#define ONIGURUMA
23085#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR
23086#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR
23087#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY
23088#pragma GCC visibility push(default)
23089#define ENCODING_INLINE_MAX RUBY_ENCODING_INLINE_MAX
23090#define ENCODING_SHIFT RUBY_ENCODING_SHIFT
23091#define ENCODING_MASK RUBY_ENCODING_MASK
23092#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i)
23093#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i)
23094#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj)
23095#define ENCODING_GET(obj) RB_ENCODING_GET(obj)
23096#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj)
23097#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN
23098#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret)
23099#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret)
23100#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret)
23101#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret)
23102#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret)
23103#pragma GCC visibility pop
23104#define RB_ENCODING_GET RB_ENCODING_GET
23105#define RB_ENCODING_GET_INLINED RB_ENCODING_GET_INLINED
23106#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT
23107#define RB_ENCODING_SET RB_ENCODING_SET
23108#define RB_ENCODING_SET_INLINED RB_ENCODING_SET_INLINED
23109#define rb_enc_asciicompat rb_enc_asciicompat
23110#define rb_enc_code_to_mbclen rb_enc_code_to_mbclen
23111#define rb_enc_codepoint rb_enc_codepoint
23112#define rb_enc_left_char_head rb_enc_left_char_head
23113#define rb_enc_mbc_to_codepoint rb_enc_mbc_to_codepoint
23114#define rb_enc_mbcput rb_enc_mbcput
23115#define rb_enc_mbmaxlen rb_enc_mbmaxlen
23116#define rb_enc_mbminlen rb_enc_mbminlen
23117#define rb_enc_name rb_enc_name
23118#define rb_enc_prev_char rb_enc_prev_char
23119#define rb_enc_right_char_head rb_enc_right_char_head
23120#define rb_enc_step_back rb_enc_step_back
23121#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p
23122#pragma GCC visibility push(default)
23123#pragma GCC visibility pop
23124#define rb_enc_is_newline rb_enc_is_newline
23125#define rb_enc_isalnum rb_enc_isalnum
23126#define rb_enc_isalpha rb_enc_isalpha
23127#define rb_enc_isascii rb_enc_isascii
23128#define rb_enc_isctype rb_enc_isctype
23129#define rb_enc_isdigit rb_enc_isdigit
23130#define rb_enc_islower rb_enc_islower
23131#define rb_enc_isprint rb_enc_isprint
23132#define rb_enc_ispunct rb_enc_ispunct
23133#define rb_enc_isspace rb_enc_isspace
23134#define rb_enc_isupper rb_enc_isupper
23135#define RUBY_INTERNAL_ENCODING_PATHNAME_H
23136#pragma GCC visibility push(default)
23137#pragma GCC visibility pop
23138#define RUBY_INTERNAL_ENCODING_RE_H
23139#pragma GCC visibility push(default)
23140#pragma GCC visibility pop
23141#define RUBY_INTERNAL_ENCODING_SPRINTF_H
23142#pragma GCC visibility push(default)
23143#pragma GCC visibility pop
23144#define RUBY_INTERNAL_ENCODING_STRING_H
23145#pragma GCC visibility push(default)
23146#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)))
23147#define rb_enc_str_new_cstr(str,enc) ((RBIMPL_CONSTANT_P(str) ? rbimpl_enc_str_new_cstr : rb_enc_str_new_cstr) ((str), (enc)))
23148#pragma GCC visibility pop
23149#define RUBY_INTERNAL_ENCODING_SYMBOL_H
23150#pragma GCC visibility push(default)
23151#pragma GCC visibility pop
23152#define RUBY_INTERNAL_ENCODING_TRANSCODE_H
23153#pragma GCC visibility push(default)
23154#define ECONV_ERROR_HANDLER_MASK RUBY_ECONV_ERROR_HANDLER_MASK
23155#define ECONV_INVALID_MASK RUBY_ECONV_INVALID_MASK
23156#define ECONV_INVALID_REPLACE RUBY_ECONV_INVALID_REPLACE
23157#define ECONV_UNDEF_MASK RUBY_ECONV_UNDEF_MASK
23158#define ECONV_UNDEF_REPLACE RUBY_ECONV_UNDEF_REPLACE
23159#define ECONV_UNDEF_HEX_CHARREF RUBY_ECONV_UNDEF_HEX_CHARREF
23160#define ECONV_DECORATOR_MASK RUBY_ECONV_DECORATOR_MASK
23161#define ECONV_NEWLINE_DECORATOR_MASK RUBY_ECONV_NEWLINE_DECORATOR_MASK
23162#define ECONV_NEWLINE_DECORATOR_READ_MASK RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK
23163#define ECONV_NEWLINE_DECORATOR_WRITE_MASK RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK
23164#define ECONV_UNIVERSAL_NEWLINE_DECORATOR RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR
23165#define ECONV_CRLF_NEWLINE_DECORATOR RUBY_ECONV_CRLF_NEWLINE_DECORATOR
23166#define ECONV_CR_NEWLINE_DECORATOR RUBY_ECONV_CR_NEWLINE_DECORATOR
23167#define ECONV_XML_TEXT_DECORATOR RUBY_ECONV_XML_TEXT_DECORATOR
23168#define ECONV_XML_ATTR_CONTENT_DECORATOR RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR
23169#define ECONV_STATEFUL_DECORATOR_MASK RUBY_ECONV_STATEFUL_DECORATOR_MASK
23170#define ECONV_XML_ATTR_QUOTE_DECORATOR RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR
23171#define ECONV_DEFAULT_NEWLINE_DECORATOR RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR
23172#define ECONV_PARTIAL_INPUT RUBY_ECONV_PARTIAL_INPUT
23173#define ECONV_AFTER_OUTPUT RUBY_ECONV_AFTER_OUTPUT
23174#pragma GCC visibility pop
23175#define STR_NOEMBED FL_USER1
23176#define STR_SHARED FL_USER2
23177#undef rb_fstring_cstr
23178#pragma GCC visibility push(default)
23179#pragma GCC visibility pop
23180#pragma GCC visibility push(default)
23181#pragma GCC visibility pop
23182#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
23183#define rb_fstring_literal(str) rb_fstring_lit(str)
23184#define rb_fstring_enc_lit(str,enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
23185#define rb_fstring_enc_literal(str,enc) rb_fstring_enc_lit(str, enc)
23186#define rb_fstring_cstr(str) (__builtin_constant_p(str) ? rb_fstring_new((str), (long)strlen(str)) : (rb_fstring_cstr)(str))
23187#undef Check_Type
23188#define rb_raise_static(e,m) rb_raise_cstr_i((e), rb_str_new_static((m), rb_strlen_lit(m)))
23189#define rb_sys_fail_path(path) rb_sys_fail_path_in(RUBY_FUNCTION_NAME_STRING, path)
23190#define rb_syserr_fail_path(err,path) rb_syserr_fail_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23191#define rb_syserr_new_path(err,path) rb_syserr_new_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23192#define rb_warn_deprecated_to_remove_at(removal,...) rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
23193#define RUBY_VERSION_SINCE(major,minor) 0
23194#define RUBY_VERSION_BEFORE(major,minor) 0
23195#define RBIMPL_TODO0(x)
23196#define RBIMPL_TODO(message) RBIMPL_TODO0("TODO: " message)
23197#define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
23198#pragma GCC visibility push(default)
23199#pragma GCC visibility pop
23200#define INTERNAL_EVAL_H
23201#define id_signo ruby_static_id_signo
23202#define id_status ruby_static_id_status
23203#define INTERNAL_INITS_H
23204#define INTERNAL_OBJECT_H
23205#define INTERNAL_CLASS_H
23206#define RUBY_ID_TABLE_H 1
23207#define RCLASS_EXT(c) (RCLASS(c)->ptr)
23208#define RCLASS_IV_TBL(c) (RCLASS_EXT(c)->iv_tbl)
23209#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
23210#define RCLASS_M_TBL(c) (RCLASS_EXT(c)->m_tbl)
23211#define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl)
23212#define RCLASS_CC_TBL(c) (RCLASS_EXT(c)->cc_tbl)
23213#define RCLASS_CVC_TBL(c) (RCLASS_EXT(c)->cvc_tbl)
23214#define RCLASS_IV_INDEX_TBL(c) (RCLASS_EXT(c)->iv_index_tbl)
23215#define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_)
23216#define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class)
23217#define RCLASS_SERIAL(c) (RCLASS(c)->class_serial)
23218#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
23219#define RCLASS_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->subclass_entry)
23220#define RCLASS_MODULE_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->module_subclass_entry)
23221#define RCLASS_ALLOCATOR(c) (RCLASS_EXT(c)->allocator)
23222#define RCLASS_SUBCLASSES(c) (RCLASS_EXT(c)->subclasses)
23223#define RICLASS_IS_ORIGIN FL_USER5
23224#define RCLASS_CLONED FL_USER6
23225#define RICLASS_ORIGIN_SHARED_MTBL FL_USER8
23226#pragma GCC visibility push(default)
23227#pragma GCC visibility pop
23228#pragma GCC diagnostic push
23229#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23230#pragma GCC diagnostic pop
23231#pragma GCC diagnostic push
23232#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23233#pragma GCC diagnostic pop
23234#pragma GCC diagnostic push
23235#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23236#pragma GCC diagnostic pop
23237#pragma GCC visibility push(default)
23238#pragma GCC visibility pop
23239#pragma GCC visibility push(default)
23240#pragma GCC visibility pop
23241#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL_inline
23242#define INTERNAL_PARSE_H
23243#pragma GCC visibility push(default)
23244#pragma GCC visibility pop
23245#define INTERNAL_PROC_H
23246#pragma GCC visibility push(default)
23247#pragma GCC visibility pop
23248#define INTERNAL_RE_H
23249#pragma GCC visibility push(default)
23250#pragma GCC visibility pop
23251#define INTERNAL_SYMBOL_H
23252#undef rb_sym_intern_ascii_cstr
23253#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))
23254#define INTERNAL_THREAD_H
23255#define COVERAGE_INDEX_LINES 0
23256#define COVERAGE_INDEX_BRANCHES 1
23257#define COVERAGE_TARGET_LINES 1
23258#define COVERAGE_TARGET_BRANCHES 2
23259#define COVERAGE_TARGET_METHODS 4
23260#define COVERAGE_TARGET_ONESHOT_LINES 8
23261#pragma GCC visibility push(default)
23262#pragma GCC visibility pop
23263#pragma GCC visibility push(default)
23264#pragma GCC visibility pop
23265#define INTERNAL_SANITIZERS_H
23266#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) NO_SANITIZE_ADDRESS(NOINLINE(x))
23267#undef NO_SANITIZE
23268#define NO_SANITIZE(x,y) COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Wattributes); __attribute__((__no_sanitize__(x))) y; COMPILER_WARNING_POP
23269#define __asan_poison_memory_region(x,y)
23270#define __asan_unpoison_memory_region(x,y)
23271#define __asan_region_is_poisoned(x,y) 0
23272#define __msan_allocated_memory(x,y) ((void)(x), (void)(y))
23273#define __msan_poison(x,y) ((void)(x), (void)(y))
23274#define __msan_unpoison(x,y) ((void)(x), (void)(y))
23275#define __msan_unpoison_string(x) ((void)(x))
23276#define VALGRIND_MAKE_MEM_DEFINED(p,n) 0
23277#define VALGRIND_MAKE_MEM_UNDEFINED(p,n) 0
23278#define RUBY_ISEQ_H 1
23279#define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
23280#define ISEQ_MINOR_VERSION ((unsigned int)ruby_api_version[1])
23281#define USE_ISEQ_NODE_ID 1
23282#define ISEQ_COVERAGE(iseq) iseq->body->variable.coverage
23283#define ISEQ_COVERAGE_SET(iseq,cov) RB_OBJ_WRITE(iseq, &iseq->body->variable.coverage, cov)
23284#define ISEQ_LINE_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
23285#define ISEQ_BRANCH_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_BRANCHES)
23286#define ISEQ_PC2BRANCHINDEX(iseq) iseq->body->variable.pc2branchindex
23287#define ISEQ_PC2BRANCHINDEX_SET(iseq,h) RB_OBJ_WRITE(iseq, &iseq->body->variable.pc2branchindex, h)
23288#define ISEQ_FLIP_CNT(iseq) (iseq)->body->variable.flip_count
23289#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)
23290#define ISEQ_NOT_LOADED_YET IMEMO_FL_USER1
23291#define ISEQ_USE_COMPILE_DATA IMEMO_FL_USER2
23292#define ISEQ_TRANSLATED IMEMO_FL_USER3
23293#define ISEQ_MARKABLE_ISEQ IMEMO_FL_USER4
23294#define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW(((VALUE)iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
23295#pragma GCC visibility push(default)
23296#define INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE (512)
23297#pragma GCC visibility pop
23298#define RUBY_MJIT_H 1
23299#define USE_DEBUG_COUNTER 0
23300#define RUBY_DEBUG_COUNTER_H 1
23301#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_ ##name,
23302#undef RB_DEBUG_COUNTER
23303#define RB_DEBUG_COUNTER_INC(type) ((void)0)
23304#define RB_DEBUG_COUNTER_INC_UNLESS(type,cond) (!!(cond))
23305#define RB_DEBUG_COUNTER_INC_IF(type,cond) (!!(cond))
23306#define RB_DEBUG_COUNTER_ADD(type,num) ((void)0)
23307#define RB_DEBUG_COUNTER_SETMAX(type,num) 0
23308#pragma GCC visibility push(default)
23309#pragma GCC visibility pop
23310#define RUBY_H 1
23311#define HAVE_RUBY_ATOMIC_H 1
23312#define HAVE_RUBY_DEBUG_H 1
23313#define HAVE_RUBY_DEFINES_H 1
23314#define HAVE_RUBY_ENCODING_H 1
23315#define HAVE_RUBY_FIBER_SCHEDULER_H 1
23316#define HAVE_RUBY_INTERN_H 1
23317#define HAVE_RUBY_IO_H 1
23318#define HAVE_RUBY_MEMORY_VIEW_H 1
23319#define HAVE_RUBY_MISSING_H 1
23320#define HAVE_RUBY_ONIGMO_H 1
23321#define HAVE_RUBY_ONIGURUMA_H 1
23322#define HAVE_RUBY_RACTOR_H 1
23323#define HAVE_RUBY_RANDOM_H 1
23324#define HAVE_RUBY_RE_H 1
23325#define HAVE_RUBY_REGEX_H 1
23326#define HAVE_RUBY_RUBY_H 1
23327#define HAVE_RUBY_ST_H 1
23328#define HAVE_RUBY_THREAD_H 1
23329#define HAVE_RUBY_THREAD_NATIVE_H 1
23330#define HAVE_RUBY_UTIL_H 1
23331#define HAVE_RUBY_VERSION_H 1
23332#define HAVE_RUBY_VM_H 1
23333#define YJIT_H 1
23334#define YJIT_STATS RUBY_DEBUG
23335#define YJIT_SUPPORTED_P 1
23336#pragma GCC visibility push(default)
23337#pragma GCC visibility pop
23338#define mjit_enabled true
23339#define RUBY_VM_H 1
23340#pragma GCC visibility push(default)
23341#pragma GCC visibility pop
23342#define RUBY_VM_CALLINFO_H
23343#define VM_CALL_ARGS_SPLAT (0x01 << VM_CALL_ARGS_SPLAT_bit)
23344#define VM_CALL_ARGS_BLOCKARG (0x01 << VM_CALL_ARGS_BLOCKARG_bit)
23345#define VM_CALL_FCALL (0x01 << VM_CALL_FCALL_bit)
23346#define VM_CALL_VCALL (0x01 << VM_CALL_VCALL_bit)
23347#define VM_CALL_ARGS_SIMPLE (0x01 << VM_CALL_ARGS_SIMPLE_bit)
23348#define VM_CALL_BLOCKISEQ (0x01 << VM_CALL_BLOCKISEQ_bit)
23349#define VM_CALL_KWARG (0x01 << VM_CALL_KWARG_bit)
23350#define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
23351#define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
23352#define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
23353#define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
23354#define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
23355#define VM_CALL_KW_SPLAT_MUT (0x01 << VM_CALL_KW_SPLAT_MUT_bit)
23356#define USE_EMBED_CI 1
23357#define CI_EMBED_TAG_bits 1
23358#define CI_EMBED_ARGC_bits 15
23359#define CI_EMBED_FLAG_bits 16
23360#define CI_EMBED_ID_bits 32
23361#define CI_EMBED_FLAG 0x01
23362#define CI_EMBED_ARGC_SHFT (CI_EMBED_TAG_bits)
23363#define CI_EMBED_ARGC_MASK ((((VALUE)1)<<CI_EMBED_ARGC_bits) - 1)
23364#define CI_EMBED_FLAG_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits)
23365#define CI_EMBED_FLAG_MASK ((((VALUE)1)<<CI_EMBED_FLAG_bits) - 1)
23366#define CI_EMBED_ID_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits)
23367#define CI_EMBED_ID_MASK ((((VALUE)1)<<CI_EMBED_ID_bits) - 1)
23368#define vm_ci_new(mid,flag,argc,kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23369#define vm_ci_new_runtime(mid,flag,argc,kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23370#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)
23371#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))
23372#define VM_CALLINFO_NOT_UNDER_GC IMEMO_FL_USER0
23373#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_, }
23374#define VM_CALLCACHE_UNMARKABLE IMEMO_FL_USER0
23375#define VM_CALLCACHE_ON_STACK IMEMO_FL_USER1
23376#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, }
23377#define vm_cc_empty() rb_vm_empty_cc()
23378#define RUBY_DEBUG_H
23379#pragma GCC visibility push(default)
23380#define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
23381#define dp(v) ruby_debug_print_value(-1, 0, "", (v))
23382#define dpi(i) ruby_debug_print_id(-1, 0, "", (i))
23383#define dpn(n) ruby_debug_print_node(-1, 0, "", (n))
23384#pragma GCC visibility pop
23385#define RUBY_DEVEL 0
23386#define _RUBY_DEBUG_LOG(...) ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__)
23387#define RUBY_DEBUG_LOG(...)
23388#define RUBY_DEBUG_LOG2(file,line,...)
23389#define RUBY_VM_EXEC_H
23390#define debugs
23391#define DEBUG_ENTER_INSN(insn)
23392#define DEBUG_END_INSN()
23393#define throwdebug if(0)ruby_debug_printf
23394#define USE_INSNS_COUNTER 0
23395#define LABEL(x) INSN_LABEL_ ##x
23396#define ELABEL(x) INSN_ELABEL_ ##x
23397#define LABEL_PTR(x) RB_GNUC_EXTENSION(&&LABEL(x))
23398#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));
23399#define INSN_DISPATCH_SIG(insn)
23400#define INSN_ENTRY(insn) LABEL(insn): INSN_ENTRY_SIG(insn);
23401#define TC_DISPATCH(insn) INSN_DISPATCH_SIG(insn); RB_GNUC_EXTENSION_BLOCK(goto *(void const *)GET_CURRENT_INSN()); ;
23402#define END_INSN(insn) DEBUG_END_INSN(); TC_DISPATCH(insn);
23403#define INSN_DISPATCH() TC_DISPATCH(__START__) {
23404#define END_INSNS_DISPATCH() rb_bug("unknown insn: %"PRIdVALUE, GET_CURRENT_INSN()); }
23405#define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
23406#define START_OF_ORIGINAL_INSN(x) if (0) goto start_of_ ##x; start_of_ ##x:
23407#define DISPATCH_ORIGINAL_INSN(x) goto start_of_ ##x;
23408#define VM_SP_CNT(ec,sp) ((sp) - (ec)->vm_stack)
23409#define THROW_EXCEPTION(exc) do { ec->errinfo = (VALUE)(exc); EC_JUMP_TAG(ec, ec->tag->state); } while (0)
23410#define SCREG(r) (reg_ ##r)
23411#define VM_DEBUG_STACKOVERFLOW 0
23412#define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp,margin)
23413#define INSN_LABEL2(insn,name) INSN_LABEL_ ## insn ## _ ## name
23414#define INSN_LABEL(x) INSN_LABEL2(NAME_OF_CURRENT_INSN, x)
23415#define RUBY_INSNHELPER_H
23416#pragma GCC visibility push(default)
23417#pragma GCC visibility pop
23418#define COLLECT_USAGE_INSN(insn)
23419#define COLLECT_USAGE_OPERAND(insn,n,op)
23420#define COLLECT_USAGE_REGISTER(reg,s)
23421#define PUSH(x) (SET_SV(x), INC_SP(1))
23422#define TOPN(n) (*(GET_SP()-(n)-1))
23423#define POPN(n) (DEC_SP(n))
23424#define POP() (DEC_SP(1))
23425#define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
23426#define VM_REG_CFP (reg_cfp)
23427#define VM_REG_PC (VM_REG_CFP->pc)
23428#define VM_REG_SP (VM_REG_CFP->sp)
23429#define VM_REG_EP (VM_REG_CFP->ep)
23430#define RESTORE_REGS() do { VM_REG_CFP = ec->cfp; } while (0)
23431#define COLLECT_USAGE_REGISTER_HELPER(a,b,v) (v)
23432#define GET_PC() (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))
23433#define SET_PC(x) (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))
23434#define GET_CURRENT_INSN() (*GET_PC())
23435#define GET_OPERAND(n) (GET_PC()[(n)])
23436#define ADD_PC(n) (SET_PC(VM_REG_PC + (n)))
23437#define JUMP(dst) (SET_PC(VM_REG_PC + (dst)))
23438#define GET_CFP() (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))
23439#define GET_EP() (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))
23440#define SET_EP(x) (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))
23441#define GET_LEP() (VM_EP_LEP(GET_EP()))
23442#define GET_SP() (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))
23443#define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23444#define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23445#define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23446#define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
23447#define GET_ISEQ() (GET_CFP()->iseq)
23448#define GET_PREV_EP(ep) ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))
23449#define GET_SELF() (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))
23450#define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
23451#define SETUP_CANARY(cond) if (cond) {} else {}
23452#define CHECK_CANARY(cond,insn) if (cond) {(void)(insn);}
23453#define PREV_CLASS_SERIAL() (ruby_vm_class_serial)
23454#define NEXT_CLASS_SERIAL() (++ruby_vm_class_serial)
23455#define GET_GLOBAL_CONSTANT_STATE() (ruby_vm_global_constant_state)
23456#define INC_GLOBAL_CONSTANT_STATE() (++ruby_vm_global_constant_state)
23457#define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state)
23458#define INC_GLOBAL_CVAR_STATE() (++ruby_vm_global_cvar_state)
23459#define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
23460#define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
23461#define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
23462#define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
23463#define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
23464#define RUBY_RACTOR_H 1
23465#pragma GCC visibility push(default)
23466#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free)
23467#pragma GCC visibility pop
23468#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)
23469#define RACTOR_CHECK_MODE (0 || VM_CHECK_MODE || RUBY_DEBUG)
23470#pragma GCC visibility push(default)
23471#pragma GCC visibility pop
23472#define rb_ractor_confirm_belonging(obj) obj
23473#define RUBY_VM_SYNC_H
23474#define LOCATION_ARGS void
23475#define LOCATION_PARAMS
23476#define APPEND_LOCATION_ARGS
23477#define APPEND_LOCATION_PARAMS
23478#define RB_VM_LOCKED_P() rb_vm_locked_p()
23479#define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
23480#define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
23481#define RB_VM_LOCK_ENTER_CR_LEV(cr,levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
23482#define RB_VM_LOCK_LEAVE_CR_LEV(cr,levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
23483#define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
23484#define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
23485#define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
23486#define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
23487#define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
23488#define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
23489#define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
23490#define ASSERT_vm_locking()
23491#define ASSERT_vm_unlocking()
23492#define BUILTIN_H_INCLUDED
23493#define RB_BUILTIN_FUNCTION(_i,_name,_fname,_arity,_compiler) { .name = #_name, .func_ptr = (void *)_fname, .argc = _arity, .index = _i, .compiler = _compiler, }
23494#define _PROBES_H
23495#define DTRACE_PROBES_DISABLED 1
23496#define RUBY_DTRACE_METHOD_ENTRY_ENABLED() 0
23497#define RUBY_DTRACE_METHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
23498#define RUBY_DTRACE_METHOD_RETURN_ENABLED() 0
23499#define RUBY_DTRACE_METHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
23500#define RUBY_DTRACE_CMETHOD_ENTRY_ENABLED() 0
23501#define RUBY_DTRACE_CMETHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
23502#define RUBY_DTRACE_CMETHOD_RETURN_ENABLED() 0
23503#define RUBY_DTRACE_CMETHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
23504#define RUBY_DTRACE_REQUIRE_ENTRY_ENABLED() 0
23505#define RUBY_DTRACE_REQUIRE_ENTRY(rquiredfile,filename,lineno) do {} while (0)
23506#define RUBY_DTRACE_REQUIRE_RETURN_ENABLED() 0
23507#define RUBY_DTRACE_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
23508#define RUBY_DTRACE_FIND_REQUIRE_ENTRY_ENABLED() 0
23509#define RUBY_DTRACE_FIND_REQUIRE_ENTRY(requiredfile,filename,lineno) do {} while (0)
23510#define RUBY_DTRACE_FIND_REQUIRE_RETURN_ENABLED() 0
23511#define RUBY_DTRACE_FIND_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
23512#define RUBY_DTRACE_LOAD_ENTRY_ENABLED() 0
23513#define RUBY_DTRACE_LOAD_ENTRY(loadedfile,filename,lineno) do {} while (0)
23514#define RUBY_DTRACE_LOAD_RETURN_ENABLED() 0
23515#define RUBY_DTRACE_LOAD_RETURN(loadedfile,filename,lineno) do {} while (0)
23516#define RUBY_DTRACE_RAISE_ENABLED() 0
23517#define RUBY_DTRACE_RAISE(classname,filename,lineno) do {} while (0)
23518#define RUBY_DTRACE_OBJECT_CREATE_ENABLED() 0
23519#define RUBY_DTRACE_OBJECT_CREATE(classname,filename,lineno) do {} while (0)
23520#define RUBY_DTRACE_ARRAY_CREATE_ENABLED() 0
23521#define RUBY_DTRACE_ARRAY_CREATE(length,filename,lineno) do {} while (0)
23522#define RUBY_DTRACE_HASH_CREATE_ENABLED() 0
23523#define RUBY_DTRACE_HASH_CREATE(length,filename,lineno) do {} while (0)
23524#define RUBY_DTRACE_STRING_CREATE_ENABLED() 0
23525#define RUBY_DTRACE_STRING_CREATE(length,filename,lineno) do {} while (0)
23526#define RUBY_DTRACE_SYMBOL_CREATE_ENABLED() 0
23527#define RUBY_DTRACE_SYMBOL_CREATE(str,filename,lineno) do {} while (0)
23528#define RUBY_DTRACE_PARSE_BEGIN_ENABLED() 0
23529#define RUBY_DTRACE_PARSE_BEGIN(sourcefile,lineno) do {} while (0)
23530#define RUBY_DTRACE_PARSE_END_ENABLED() 0
23531#define RUBY_DTRACE_PARSE_END(sourcefile,lineno) do {} while (0)
23532#define RUBY_DTRACE_INSN_ENABLED() 0
23533#define RUBY_DTRACE_INSN(insns_name) do {} while (0)
23534#define RUBY_DTRACE_INSN_OPERAND_ENABLED() 0
23535#define RUBY_DTRACE_INSN_OPERAND(val,insns_name) do {} while (0)
23536#define RUBY_DTRACE_GC_MARK_BEGIN_ENABLED() 0
23537#define RUBY_DTRACE_GC_MARK_BEGIN() do {} while (0)
23538#define RUBY_DTRACE_GC_MARK_END_ENABLED() 0
23539#define RUBY_DTRACE_GC_MARK_END() do {} while (0)
23540#define RUBY_DTRACE_GC_SWEEP_BEGIN_ENABLED() 0
23541#define RUBY_DTRACE_GC_SWEEP_BEGIN() do {} while (0)
23542#define RUBY_DTRACE_GC_SWEEP_END_ENABLED() 0
23543#define RUBY_DTRACE_GC_SWEEP_END() do {} while (0)
23544#define RUBY_PROBES_HELPER_H
23545#pragma GCC visibility push(default)
23546#pragma GCC visibility pop
23547#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)
23548#define RUBY_DTRACE_METHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_ENTRY, ec, klass, id)
23549#define RUBY_DTRACE_METHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_RETURN, ec, klass, id)
23550#define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_ENTRY, ec, klass, id)
23551#define RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_RETURN, ec, klass, id)
23552#pragma GCC diagnostic push
23553#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23554#pragma GCC diagnostic pop
23555#define CONSTANT_H
23556#define RB_CONST_PRIVATE_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PRIVATE)
23557#define RB_CONST_PUBLIC_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PUBLIC)
23558#define RB_CONST_DEPRECATED_P(ce) ((ce)->flag & CONST_DEPRECATED)
23559#pragma GCC visibility push(default)
23560#pragma GCC visibility pop
23561#define INTERNAL_COMPAR_H
23562#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
23563#define NEW_CMP_OPT_MEMO(type,value) NEW_PARTIAL_MEMO_FOR(type, value, cmp_opt)
23564#define CMP_OPTIMIZABLE_BIT(type) (1U << TOKEN_PASTE(cmp_opt_,type))
23565#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))))
23566#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))
23567#define INTERNAL_HASH_H
23568#define RHASH_AR_TABLE_MAX_SIZE SIZEOF_VALUE
23569#define RHASH_LEV_MASK (FL_USER13 | FL_USER14 | FL_USER15 | FL_USER16 | FL_USER17 | FL_USER18 | FL_USER19)
23570#define RHASH(obj) ((struct RHash *)(obj))
23571#pragma GCC visibility push(default)
23572#pragma GCC visibility pop
23573#pragma GCC visibility push(default)
23574#define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h, __FILE__, __LINE__)
23575#pragma GCC visibility pop
23576#define INTERNAL_NUMERIC_H
23577#define INTERNAL_BIGNUM_H
23578#define BDIGIT unsigned int
23579#define SIZEOF_BDIGIT SIZEOF_INT
23580#define BDIGIT_DBL unsigned LONG_LONG
23581#define BDIGIT_DBL_SIGNED LONG_LONG
23582#define PRI_BDIGIT_PREFIX ""
23583#define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
23584#define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
23585#define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
23586#define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
23587#define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
23588#define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
23589#define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
23590#define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
23591#define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
23592#define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
23593#define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
23594#define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
23595#define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
23596#define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
23597#define RBIGNUM(obj) ((struct RBignum *)(obj))
23598#define BIGNUM_SIGN_BIT FL_USER1
23599#define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
23600#define BIGNUM_EMBED_LEN_NUMBITS 3
23601#define BIGNUM_EMBED_LEN_MASK (~(~(VALUE)0U << BIGNUM_EMBED_LEN_NUMBITS) << BIGNUM_EMBED_LEN_SHIFT)
23602#define BIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
23603#define BIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*RBIMPL_RVALUE_EMBED_LEN_MAX/SIZEOF_ACTUAL_BDIGIT)
23604#pragma GCC visibility push(default)
23605#pragma GCC visibility pop
23606#pragma GCC visibility push(default)
23607#pragma GCC visibility pop
23608#define INTERNAL_BITS_H
23609#define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
23610#define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
23611#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))))
23612#define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
23613#define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
23614#define MUL_OVERFLOW_P(a,b) __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
23615#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)))
23616#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); })
23617#define MUL_OVERFLOW_LONG_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
23618#define MUL_OVERFLOW_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
23619#define MUL_OVERFLOW_INT_P(a,b) MUL_OVERFLOW_P(a, b)
23620#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)))
23621#define swap16 ruby_swap16
23622#define swap32 ruby_swap32
23623#define swap64 ruby_swap64
23624#define INTERNAL_FIXNUM_H
23625#define DLONG int128_t
23626#define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
23627#define ROUND_TO(mode,even,up,down) ((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even : (mode) == RUBY_NUM_ROUND_HALF_UP ? up : down)
23628#define ROUND_FUNC(mode,name) ROUND_TO(mode, name ##_half_even, name ##_half_up, name ##_half_down)
23629#define ROUND_CALL(mode,name,args) ROUND_TO(mode, name ##_half_even args, name ##_half_up args, name ##_half_down args)
23630#define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP
23631#define RFLOAT(obj) ((struct RFloat *)(obj))
23632#define rb_float_value rb_float_value_inline
23633#define rb_float_new rb_float_new_inline
23634#pragma GCC visibility push(default)
23635#pragma GCC visibility pop
23636#pragma GCC visibility push(default)
23637#pragma GCC visibility pop
23638#define INTERNAL_RANDOM_H
23639#define INTERNAL_VARIABLE_H
23640#define ROBJECT_TRANSIENT_FLAG FL_USER13
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_STRUCT_H
23646#define RSTRUCT(obj) ((struct RStruct *)(obj))
23647#define RSTRUCT_LEN internal_RSTRUCT_LEN
23648#define RSTRUCT_SET internal_RSTRUCT_SET
23649#define RSTRUCT_GET internal_RSTRUCT_GET
23650#pragma GCC diagnostic push
23651#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23652#pragma GCC diagnostic pop
23653#define RUBY_TOPLEVEL_VARIABLE_H
23654#define BIN(n) YARVINSN_ ##n
23655#define ASSERT_VM_INSTRUCTION_SIZE(array) STATIC_ASSERT(numberof_ ##array, numberof(array) == VM_INSTRUCTION_SIZE)
23656#define vm_check_canary(ec,sp)
23657#define vm_check_frame(a,b,c,d)
23658#define vm_push_frame_debug_counter_inc(ec,cfp,t)
23659#pragma GCC diagnostic push
23660#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23661#pragma GCC diagnostic pop
23662#pragma GCC diagnostic push
23663#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23664#pragma GCC diagnostic pop
23665#pragma GCC diagnostic push
23666#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23667#pragma GCC diagnostic pop
23668#pragma GCC diagnostic push
23669#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23670#pragma GCC diagnostic pop
23671#pragma GCC diagnostic push
23672#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23673#pragma GCC diagnostic pop
23674#pragma GCC diagnostic push
23675#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23676#pragma GCC diagnostic pop
23677#pragma GCC diagnostic push
23678#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23679#pragma GCC diagnostic pop
23680#pragma GCC diagnostic push
23681#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23682#pragma GCC diagnostic pop
23683#pragma GCC diagnostic push
23684#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23685#pragma GCC diagnostic pop
23686#pragma GCC diagnostic push
23687#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23688#pragma GCC diagnostic pop
23689#pragma GCC diagnostic push
23690#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23691#pragma GCC diagnostic pop
23692#pragma GCC diagnostic push
23693#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23694#pragma GCC diagnostic pop
23695#define EQ_UNREDEFINED_P(t) BASIC_OP_UNREDEFINED_P(BOP_EQ, t ##_REDEFINED_OP_FLAG)
23696#undef EQ_UNREDEFINED_P
23697#define CHECK_CMP_NAN(a,b)
23698#define KW_SPECIFIED_BITS_MAX (32-1)
23699#define USE_OPT_HIST 0
23700#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)))
23701#pragma GCC diagnostic push
23702#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23703#pragma GCC diagnostic pop
23704#pragma GCC diagnostic push
23705#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23706#pragma GCC diagnostic pop
23707#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; }
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 mexp_search_method vm_search_method_wrap
23715#define mexp_search_super vm_search_super_method
23716#define mexp_search_invokeblock vm_search_invokeblock
23717#define id_cmp idCmp
23718#undef id_cmp
23719#define IMEMO_CONST_CACHE_SHAREABLE IMEMO_FL_USER0
23720#pragma GCC diagnostic push
23721#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23722#pragma GCC diagnostic pop
23723#pragma GCC diagnostic push
23724#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23725#pragma GCC diagnostic pop
23726#pragma GCC diagnostic push
23727#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23728#pragma GCC diagnostic pop
23729#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)
23730#undef VM_TRACE_HOOK
23731#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