Ruby 3.2.1p31 (2023-02-08 revision 31819e82c88c6f8ecfaeb162519bfa26a14b21fd)
rb_mjit_min_header-3.2.1.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);
2183VALUE rb_mod_include_p(VALUE child, VALUE parent);
2185VALUE rb_class_descendants(VALUE klass);
2188VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod);
2189VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod);
2190VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod);
2191VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod);
2192VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj);
2193void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(), int arity);
2194void rb_undef(VALUE mod, ID mid);
2195__attribute__((__nonnull__ ()))
2196void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2197__attribute__((__nonnull__ ()))
2198void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2199__attribute__((__nonnull__ ()))
2200void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(), int arity);
2202
2203
2204
2205
2206int rb_sourceline(void);
2207const char *rb_sourcefile(void);
2208int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);
2209VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv);
2210VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
2211VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat);
2212VALUE rb_apply(VALUE recv, ID mid, VALUE args);
2213VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv);
2214VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv);
2215VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod);
2216VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod);
2217typedef VALUE (*rb_alloc_func_t)(VALUE klass);
2218void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func);
2219void rb_undef_alloc_func(VALUE klass);
2220rb_alloc_func_t rb_get_alloc_func(VALUE klass);
2221void rb_clear_constant_cache_for_id(ID id);
2222void rb_alias(VALUE klass, ID dst, ID src);
2223void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility);
2224__attribute__((__nonnull__ ()))
2225void rb_remove_method(VALUE klass, const char *name);
2226void rb_remove_method_id(VALUE klass, ID mid);
2227int rb_method_boundp(VALUE klass, ID id, int ex);
2228int rb_method_basic_definition_p(VALUE klass, ID mid);
2229int rb_obj_respond_to(VALUE obj, ID mid, int private_p);
2230int rb_respond_to(VALUE obj, ID mid);
2231__attribute__((__noreturn__))
2232VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker);
2233void rb_backtrace(void);
2234VALUE rb_make_backtrace(void);
2235
2236
2237
2238
2239__attribute__((__nonnull__ ()))
2240void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2241__attribute__((__nonnull__ ()))
2242void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2243__attribute__((__nonnull__ ()))
2244void rb_define_global_function(const char *mid, VALUE (*func)(), int arity);
2245__attribute__((__nonnull__ ()))
2246void rb_undef_method(VALUE klass, const char *name);
2247__attribute__((__nonnull__ ()))
2248void rb_define_alias(VALUE klass, const char *dst, const char *src);
2249__attribute__((__nonnull__ ()))
2250void rb_define_attr(VALUE klass, const char *name, int read, int write);
2251
2252
2253
2254
2255VALUE rb_int2big(intptr_t i);
2256VALUE rb_int2inum(intptr_t i);
2257VALUE rb_uint2big(uintptr_t i);
2258VALUE rb_uint2inum(uintptr_t i);
2259
2260
2261enum
2262
2264 RUBY_Qfalse = 0x00,
2265 RUBY_Qnil = 0x04,
2266 RUBY_Qtrue = 0x14,
2267 RUBY_Qundef = 0x24,
2268 RUBY_IMMEDIATE_MASK = 0x07,
2269 RUBY_FIXNUM_FLAG = 0x01,
2270 RUBY_FLONUM_MASK = 0x03,
2271 RUBY_FLONUM_FLAG = 0x02,
2272 RUBY_SYMBOL_FLAG = 0x0c,
2274};
2275__attribute__((__const__))
2276
2277__attribute__((__artificial__))
2278static inline _Bool
2279RB_TEST(VALUE obj)
2280{
2281 return obj & ~RUBY_Qnil;
2282}
2283__attribute__((__const__))
2284
2285__attribute__((__artificial__))
2286static inline _Bool
2287RB_NIL_P(VALUE obj)
2288{
2289 return obj == RUBY_Qnil;
2290}
2291__attribute__((__const__))
2292
2293__attribute__((__artificial__))
2294static inline _Bool
2295RB_UNDEF_P(VALUE obj)
2296{
2297 return obj == RUBY_Qundef;
2298}
2299__attribute__((__const__))
2300
2301__attribute__((__artificial__))
2302static inline _Bool
2303RB_NIL_OR_UNDEF_P(VALUE obj)
2304{
2305 const VALUE mask = ~(RUBY_Qundef ^ RUBY_Qnil);
2306 const VALUE common_bits = RUBY_Qundef & RUBY_Qnil;
2307 return (obj & mask) == common_bits;
2308}
2309__attribute__((__const__))
2310
2311__attribute__((__artificial__))
2312static inline _Bool
2313RB_FIXNUM_P(VALUE obj)
2314{
2315 return obj & RUBY_FIXNUM_FLAG;
2316}
2317__attribute__((__const__))
2318
2319__attribute__((__artificial__))
2320static inline _Bool
2321RB_STATIC_SYM_P(VALUE obj)
2322{
2323
2324 const VALUE mask = ~((0x7fffffffffffffffL * 2UL + 1) << RUBY_SPECIAL_SHIFT);
2325 return (obj & mask) == RUBY_SYMBOL_FLAG;
2326}
2327__attribute__((__const__))
2328
2329__attribute__((__artificial__))
2330static inline _Bool
2331RB_FLONUM_P(VALUE obj)
2332{
2333 return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG;
2334}
2335__attribute__((__const__))
2336
2337__attribute__((__artificial__))
2338static inline _Bool
2339RB_IMMEDIATE_P(VALUE obj)
2340{
2341 return obj & RUBY_IMMEDIATE_MASK;
2342}
2343__attribute__((__const__))
2344
2345__attribute__((__artificial__))
2346static inline _Bool
2347RB_SPECIAL_CONST_P(VALUE obj)
2348{
2349 return RB_IMMEDIATE_P(obj) || obj == RUBY_Qfalse;
2350}
2351__attribute__((__const__))
2352
2353static inline VALUE
2355{
2356 return RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue;
2357}
2358
2359
2360__attribute__((__noreturn__))
2361__attribute__((__cold__))
2362void rb_out_of_int(long num);
2363long rb_num2long(VALUE num);
2364unsigned long rb_num2ulong(VALUE num);
2365
2366
2367__attribute__((__const__))
2368
2369__attribute__((__artificial__))
2370static inline VALUE
2371RB_INT2FIX(long i)
2372{
2373 ((void)0);
2374 const unsigned long j = i;
2375 const unsigned long k = (j << 1) + RUBY_FIXNUM_FLAG;
2376 const long l = k;
2377 const long m = l;
2378 const VALUE n = m;
2379 ((void)0);
2380 return n;
2381}
2382static inline int
2383rb_long2int_inline(long n)
2384{
2385 int i = ((int)n);
2386 if (sizeof(long) <= sizeof(int)) {
2387 ((__builtin_expect(!!(!!(i == n)), 1)) ? ((void)0) : __builtin_unreachable());
2388 }
2389 if (i != n)
2390 rb_out_of_int(n);
2391 return i;
2392}
2393__attribute__((__const__))
2394
2395static inline long
2396rbimpl_fix2long_by_idiv(VALUE x)
2397{
2398 ((void)0);
2399 const long y = x - RUBY_FIXNUM_FLAG;
2400 const long z = y / 2;
2401 const long w = ((long)z);
2402 ((void)0);
2403 return w;
2404}
2405__attribute__((__const__))
2406
2407static inline long
2408rbimpl_fix2long_by_shift(VALUE x)
2409{
2410 ((void)0);
2411 const long y = x;
2412 const long z = y >> 1;
2413 const long w = ((long)z);
2414 ((void)0);
2415 return w;
2416}
2417__attribute__((__const__))
2418
2419static inline _Bool
2420rbimpl_right_shift_is_arithmetic_p(void)
2421{
2422 return (-1 >> 1) == -1;
2423}
2424__attribute__((__const__))
2425
2426static inline long
2428{
2429 if (rbimpl_right_shift_is_arithmetic_p()) {
2430 return rbimpl_fix2long_by_shift(x);
2431 }
2432 else {
2433 return rbimpl_fix2long_by_idiv(x);
2434 }
2435}
2436__attribute__((__const__))
2437
2438static inline unsigned long
2440{
2441 ((void)0);
2442 return rb_fix2long(x);
2443}
2444static inline long
2445rb_num2long_inline(VALUE x)
2446{
2447 if (RB_FIXNUM_P(x))
2448 return rb_fix2long(x);
2449 else
2450 return rb_num2long(x);
2451}
2452static inline unsigned long
2453rb_num2ulong_inline(VALUE x)
2454{
2455 if (RB_FIXNUM_P(x))
2456 return rb_fix2ulong(x);
2457 else
2458 return rb_num2ulong(x);
2459}
2460static inline VALUE
2461rb_long2num_inline(long v)
2462{
2463 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2464 return RB_INT2FIX(v);
2465 else
2466 return rb_int2big(v);
2467}
2468static inline VALUE
2469rb_ulong2num_inline(unsigned long v)
2470{
2471 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2472 return RB_INT2FIX(v);
2473 else
2474 return rb_uint2big(v);
2475}
2476
2477
2478long rb_num2int(VALUE num);
2479long rb_fix2int(VALUE num);
2480unsigned long rb_num2uint(VALUE num);
2481unsigned long rb_fix2uint(VALUE num);
2482
2483
2484__attribute__((__artificial__))
2485static inline int
2486RB_FIX2INT(VALUE x)
2487{
2488 long ret;
2489 if (sizeof(int) < sizeof(long)) {
2490 ret = rb_fix2int(x);
2491 }
2492 else {
2493 ret = rb_fix2long(x);
2494 }
2495 return ((int)ret);
2496}
2497static inline int
2498rb_num2int_inline(VALUE x)
2499{
2500 long ret;
2501 if (sizeof(int) == sizeof(long)) {
2502 ret = rb_num2long_inline(x);
2503 }
2504 else if (RB_FIXNUM_P(x)) {
2505 ret = rb_fix2int(x);
2506 }
2507 else {
2508 ret = rb_num2int(x);
2509 }
2510 return ((int)ret);
2511}
2512__attribute__((__artificial__))
2513static inline unsigned int
2514RB_NUM2UINT(VALUE x)
2515{
2516 unsigned long ret;
2517 if (sizeof(int) < sizeof(long)) {
2518 ret = rb_num2uint(x);
2519 }
2520 else {
2521 ret = rb_num2ulong_inline(x);
2522 }
2523 return ((unsigned int)ret);
2524}
2525__attribute__((__artificial__))
2526static inline unsigned int
2527RB_FIX2UINT(VALUE x)
2528{
2529 unsigned long ret;
2530 if (sizeof(int) < sizeof(long)) {
2531 ret = rb_fix2uint(x);
2532 }
2533 else {
2534 ret = rb_fix2ulong(x);
2535 }
2536 return ((unsigned int)ret);
2537}
2538
2539
2540
2541
2542static inline VALUE
2543rb_int2num_inline(int v)
2544{
2545 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2546 return RB_INT2FIX(v);
2547 else
2548 return rb_int2big(v);
2549}
2550static inline VALUE
2551rb_uint2num_inline(unsigned int v)
2552{
2553 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2554 return RB_INT2FIX(v);
2555 else
2556 return rb_uint2big(v);
2557}
2558
2559
2560enum ruby_rvalue_flags {
2561 RVALUE_EMBED_LEN_MAX = 3
2562};
2563struct
2564__attribute__((__aligned__(8)))
2565RBasic {
2566 VALUE flags;
2567 const VALUE klass;
2568};
2569
2570
2572VALUE rb_obj_reveal(VALUE obj, VALUE klass);
2573
2574
2575__attribute__((__pure__))
2576__attribute__((__artificial__))
2577static inline VALUE
2578RBASIC_CLASS(VALUE obj)
2579{
2580 ((void)0);
2581 return ((struct RBasic *)(obj))->klass;
2582}
2583typedef enum {
2587 RB_WARN_CATEGORY_ALL_BITS = 0x6
2589enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
2590
2591
2592VALUE rb_errinfo(void);
2593void rb_set_errinfo(VALUE err);
2594__attribute__((__noreturn__))
2595__attribute__((__nonnull__ (2)))
2596__attribute__((__format__(__printf__, 2, 3)))
2597void rb_raise(VALUE exc, const char *fmt, ...);
2598__attribute__((__noreturn__))
2599__attribute__((__nonnull__ (1)))
2600__attribute__((__format__(__printf__, 1, 2)))
2601void rb_fatal(const char *fmt, ...);
2602__attribute__((__cold__))
2603__attribute__((__noreturn__))
2604__attribute__((__nonnull__ (1)))
2605__attribute__((__format__(__printf__, 1, 2)))
2606void rb_bug(const char *fmt, ...);
2607__attribute__((__noreturn__))
2608__attribute__((__nonnull__ ()))
2609void rb_bug_errno(const char *msg, int err);
2610__attribute__((__noreturn__))
2611void rb_sys_fail(const char *msg);
2612__attribute__((__noreturn__))
2613void rb_sys_fail_str(VALUE msg);
2614__attribute__((__noreturn__))
2615__attribute__((__nonnull__ (2)))
2616void rb_mod_sys_fail(VALUE mod, const char *msg);
2617__attribute__((__noreturn__))
2618void rb_mod_sys_fail_str(VALUE mod, VALUE msg);
2619__attribute__((__noreturn__))
2620void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg);
2621__attribute__((__noreturn__))
2622void rb_iter_break(void);
2623__attribute__((__noreturn__))
2624void rb_iter_break_value(VALUE val);
2625__attribute__((__noreturn__))
2626void rb_exit(int status);
2627__attribute__((__noreturn__))
2628void rb_notimplement(void);
2629VALUE rb_syserr_new(int err, const char * msg);
2630VALUE rb_syserr_new_str(int n, VALUE arg);
2631__attribute__((__noreturn__))
2632void rb_syserr_fail(int err, const char *msg);
2633__attribute__((__noreturn__))
2634void rb_syserr_fail_str(int err, VALUE msg);
2635__attribute__((__noreturn__))
2636__attribute__((__nonnull__ ()))
2637void rb_mod_syserr_fail(VALUE mod, int err, const char *msg);
2638__attribute__((__noreturn__))
2639void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg);
2640__attribute__((__noreturn__))
2641void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg);
2642__attribute__((__cold__))
2643__attribute__((__noreturn__))
2644void rb_unexpected_type(VALUE self, int t);
2647__attribute__((__nonnull__ (1)))
2648__attribute__((__format__(__printf__, 1, 2)))
2649void rb_warning(const char *fmt, ...);
2650__attribute__((__nonnull__ (2)))
2651__attribute__((__format__(__printf__, 2, 3)))
2652void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...);
2653__attribute__((__nonnull__ (1, 3)))
2654__attribute__((__format__(__printf__, 3, 4)))
2655void rb_compile_warning(const char *file, int line, const char *fmt, ...);
2656__attribute__((__nonnull__ (1)))
2657__attribute__((__format__(__printf__, 1, 2)))
2658void rb_sys_warning(const char *fmt, ...);
2659__attribute__((__cold__))
2660__attribute__((__nonnull__ (1)))
2661__attribute__((__format__(__printf__, 1, 2)))
2662void rb_warn(const char *fmt, ...);
2663__attribute__((__cold__))
2664__attribute__((__nonnull__ (2)))
2665__attribute__((__format__(__printf__, 2, 3)))
2666void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...);
2667__attribute__((__nonnull__ (1, 3)))
2668__attribute__((__format__(__printf__, 3, 4)))
2669void rb_compile_warn(const char *file, int line, const char *fmt, ...);
2670__attribute__((__nonnull__ (2, 4)))
2671__attribute__((__format__(__printf__, 4, 5)))
2672void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...);
2673
2674
2675enum
2676
2678 RUBY_T_NONE = 0x00,
2679 RUBY_T_OBJECT = 0x01,
2680 RUBY_T_CLASS = 0x02,
2681 RUBY_T_MODULE = 0x03,
2682 RUBY_T_FLOAT = 0x04,
2683 RUBY_T_STRING = 0x05,
2684 RUBY_T_REGEXP = 0x06,
2685 RUBY_T_ARRAY = 0x07,
2686 RUBY_T_HASH = 0x08,
2687 RUBY_T_STRUCT = 0x09,
2688 RUBY_T_BIGNUM = 0x0a,
2689 RUBY_T_FILE = 0x0b,
2690 RUBY_T_DATA = 0x0c,
2691 RUBY_T_MATCH = 0x0d,
2692 RUBY_T_COMPLEX = 0x0e,
2693 RUBY_T_RATIONAL = 0x0f,
2694 RUBY_T_NIL = 0x11,
2695 RUBY_T_TRUE = 0x12,
2696 RUBY_T_FALSE = 0x13,
2697 RUBY_T_SYMBOL = 0x14,
2698 RUBY_T_FIXNUM = 0x15,
2699 RUBY_T_UNDEF = 0x16,
2700 RUBY_T_IMEMO = 0x1a,
2701 RUBY_T_NODE = 0x1b,
2702 RUBY_T_ICLASS = 0x1c,
2703 RUBY_T_ZOMBIE = 0x1d,
2704 RUBY_T_MOVED = 0x1e,
2705 RUBY_T_MASK = 0x1f
2706};
2707
2708
2709__attribute__((__cold__))
2710void rb_check_type(VALUE obj, int t);
2711
2712
2713__attribute__((__pure__))
2714__attribute__((__artificial__))
2715static inline enum ruby_value_type
2716RB_BUILTIN_TYPE(VALUE obj)
2717{
2718 ((void)0);
2719 VALUE ret = ((struct RBasic *)(obj))->flags & RUBY_T_MASK;
2720 return ((enum ruby_value_type)ret);
2721}
2722__attribute__((__pure__))
2723static inline _Bool
2725{
2726 if (RB_FIXNUM_P(obj)) {
2727 return 1;
2728 }
2729 else if (RB_SPECIAL_CONST_P(obj)) {
2730 return 0;
2731 }
2732 else {
2733 return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM;
2734 }
2735}
2736__attribute__((__pure__))
2737static inline enum ruby_value_type
2738rb_type(VALUE obj)
2739{
2740 if (! RB_SPECIAL_CONST_P(obj)) {
2741 return RB_BUILTIN_TYPE(obj);
2742 }
2743 else if (obj == ((VALUE)RUBY_Qfalse)) {
2744 return RUBY_T_FALSE;
2745 }
2746 else if (obj == ((VALUE)RUBY_Qnil)) {
2747 return RUBY_T_NIL;
2748 }
2749 else if (obj == ((VALUE)RUBY_Qtrue)) {
2750 return RUBY_T_TRUE;
2751 }
2752 else if (obj == ((VALUE)RUBY_Qundef)) {
2753 return RUBY_T_UNDEF;
2754 }
2755 else if (RB_FIXNUM_P(obj)) {
2756 return RUBY_T_FIXNUM;
2757 }
2758 else if (RB_STATIC_SYM_P(obj)) {
2759 return RUBY_T_SYMBOL;
2760 }
2761 else {
2762 ((__builtin_expect(!!(!!(RB_FLONUM_P(obj))), 1)) ? ((void)0) : __builtin_unreachable());
2763 return RUBY_T_FLOAT;
2764 }
2765}
2766__attribute__((__pure__))
2767__attribute__((__artificial__))
2768static inline _Bool
2769RB_FLOAT_TYPE_P(VALUE obj)
2770{
2771 if (RB_FLONUM_P(obj)) {
2772 return 1;
2773 }
2774 else if (RB_SPECIAL_CONST_P(obj)) {
2775 return 0;
2776 }
2777 else {
2778 return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT;
2779 }
2780}
2781__attribute__((__pure__))
2782__attribute__((__artificial__))
2783static inline _Bool
2784RB_DYNAMIC_SYM_P(VALUE obj)
2785{
2786 if (RB_SPECIAL_CONST_P(obj)) {
2787 return 0;
2788 }
2789 else {
2790 return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL;
2791 }
2792}
2793__attribute__((__pure__))
2794__attribute__((__artificial__))
2795static inline _Bool
2796RB_SYMBOL_P(VALUE obj)
2797{
2798 return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj);
2799}
2800__attribute__((__pure__))
2801__attribute__((__artificial__))
2802__attribute__((__always_inline__)) inline
2803static _Bool
2804rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t)
2805{
2806 if (t == RUBY_T_TRUE) {
2807 return obj == ((VALUE)RUBY_Qtrue);
2808 }
2809 else if (t == RUBY_T_FALSE) {
2810 return obj == ((VALUE)RUBY_Qfalse);
2811 }
2812 else if (t == RUBY_T_NIL) {
2813 return obj == ((VALUE)RUBY_Qnil);
2814 }
2815 else if (t == RUBY_T_UNDEF) {
2816 return obj == ((VALUE)RUBY_Qundef);
2817 }
2818 else if (t == RUBY_T_FIXNUM) {
2819 return RB_FIXNUM_P(obj);
2820 }
2821 else if (t == RUBY_T_SYMBOL) {
2822 return RB_SYMBOL_P(obj);
2823 }
2824 else if (t == RUBY_T_FLOAT) {
2825 return RB_FLOAT_TYPE_P(obj);
2826 }
2827 else if (RB_SPECIAL_CONST_P(obj)) {
2828 return 0;
2829 }
2830 else if (t == RB_BUILTIN_TYPE(obj)) {
2831 return 1;
2832 }
2833 else {
2834 return 0;
2835 }
2836}
2837__attribute__((__pure__))
2838__attribute__((__artificial__))
2839static inline _Bool
2840RB_TYPE_P(VALUE obj, enum ruby_value_type t)
2841{
2842 if (__builtin_constant_p(t)) {
2843 return rbimpl_RB_TYPE_P_fastpath(obj, t);
2844 }
2845 else {
2846 return t == rb_type(obj);
2847 }
2848}
2849__attribute__((__pure__))
2850__attribute__((__artificial__))
2851static inline _Bool rbimpl_rtypeddata_p(VALUE obj);
2852__attribute__((__artificial__))
2853static inline void
2854Check_Type(VALUE v, enum ruby_value_type t)
2855{
2856 if ((__builtin_expect(!!(! RB_TYPE_P(v, t)), 0))) {
2857 goto unexpected_type;
2858 }
2859 else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) {
2860 goto unexpected_type;
2861 }
2862 else {
2863 return;
2864 }
2865 unexpected_type:
2866 rb_unexpected_type(v, t);
2867}
2868enum ruby_fl_ushift {
2869 RUBY_FL_USHIFT = 12
2870};
2871__extension__
2872enum
2873
2875 RUBY_FL_WB_PROTECTED = (1<<5),
2876 RUBY_FL_PROMOTED0 = (1<<5),
2877 RUBY_FL_PROMOTED1 = (1<<6),
2879 RUBY_FL_FINALIZE = (1<<7),
2881 __attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
2882 = (1<<8),
2883 RUBY_FL_SHAREABLE = (1<<8),
2885 __attribute__((__deprecated__ ("trustedness turned out to be a wrong idea.")))
2886 = (1<<8),
2887 RUBY_FL_SEEN_OBJ_ID = (1<<9),
2888 RUBY_FL_EXIVAR = (1<<10),
2889 RUBY_FL_FREEZE = (1<<11),
2890 RUBY_FL_USER0 = (1<<(RUBY_FL_USHIFT+0)),
2891 RUBY_FL_USER1 = (1<<(RUBY_FL_USHIFT+1)),
2892 RUBY_FL_USER2 = (1<<(RUBY_FL_USHIFT+2)),
2893 RUBY_FL_USER3 = (1<<(RUBY_FL_USHIFT+3)),
2894 RUBY_FL_USER4 = (1<<(RUBY_FL_USHIFT+4)),
2895 RUBY_FL_USER5 = (1<<(RUBY_FL_USHIFT+5)),
2896 RUBY_FL_USER6 = (1<<(RUBY_FL_USHIFT+6)),
2897 RUBY_FL_USER7 = (1<<(RUBY_FL_USHIFT+7)),
2898 RUBY_FL_USER8 = (1<<(RUBY_FL_USHIFT+8)),
2899 RUBY_FL_USER9 = (1<<(RUBY_FL_USHIFT+9)),
2900 RUBY_FL_USER10 = (1<<(RUBY_FL_USHIFT+10)),
2901 RUBY_FL_USER11 = (1<<(RUBY_FL_USHIFT+11)),
2902 RUBY_FL_USER12 = (1<<(RUBY_FL_USHIFT+12)),
2903 RUBY_FL_USER13 = (1<<(RUBY_FL_USHIFT+13)),
2904 RUBY_FL_USER14 = (1<<(RUBY_FL_USHIFT+14)),
2905 RUBY_FL_USER15 = (1<<(RUBY_FL_USHIFT+15)),
2906 RUBY_FL_USER16 = (1<<(RUBY_FL_USHIFT+16)),
2907 RUBY_FL_USER17 = (1<<(RUBY_FL_USHIFT+17)),
2908 RUBY_FL_USER18 = (1<<(RUBY_FL_USHIFT+18)),
2909 RUBY_FL_USER19 = (1<<(RUBY_FL_USHIFT+19)),
2910 RUBY_ELTS_SHARED = RUBY_FL_USER2,
2912};
2913enum {
2915 __attribute__((__deprecated__ ("It seems there is no actual usage of this enum.")))
2916 = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR
2917};
2918
2919
2921
2922
2923__attribute__((__pure__))
2924__attribute__((__artificial__))
2925__attribute__((__always_inline__)) inline
2926static _Bool
2927RB_FL_ABLE(VALUE obj)
2928{
2929 if (RB_SPECIAL_CONST_P(obj)) {
2930 return 0;
2931 }
2932 else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
2933 return 0;
2934 }
2935 else {
2936 return 1;
2937 }
2938}
2939__attribute__((__pure__))
2940__attribute__((__artificial__))
2941static inline VALUE
2942RB_FL_TEST_RAW(VALUE obj, VALUE flags)
2943{
2944 ((void)0);
2945 return ((struct RBasic *)(obj))->flags & flags;
2946}
2947__attribute__((__pure__))
2948__attribute__((__artificial__))
2949static inline VALUE
2950RB_FL_TEST(VALUE obj, VALUE flags)
2951{
2952 if (RB_FL_ABLE(obj)) {
2953 return RB_FL_TEST_RAW(obj, flags);
2954 }
2955 else {
2956 return 0UL;
2957 }
2958}
2959__attribute__((__pure__))
2960__attribute__((__artificial__))
2961static inline _Bool
2962RB_FL_ANY_RAW(VALUE obj, VALUE flags)
2963{
2964 return RB_FL_TEST_RAW(obj, flags);
2965}
2966__attribute__((__pure__))
2967__attribute__((__artificial__))
2968static inline _Bool
2969RB_FL_ANY(VALUE obj, VALUE flags)
2970{
2971 return RB_FL_TEST(obj, flags);
2972}
2973__attribute__((__pure__))
2974__attribute__((__artificial__))
2975static inline _Bool
2976RB_FL_ALL_RAW(VALUE obj, VALUE flags)
2977{
2978 return RB_FL_TEST_RAW(obj, flags) == flags;
2979}
2980__attribute__((__pure__))
2981__attribute__((__artificial__))
2982static inline _Bool
2983RB_FL_ALL(VALUE obj, VALUE flags)
2984{
2985 return RB_FL_TEST(obj, flags) == flags;
2986}
2987
2988__attribute__((__artificial__))
2989static inline void
2990rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
2991{
2992 obj->flags |= flags;
2993}
2994__attribute__((__artificial__))
2995static inline void
2996RB_FL_SET_RAW(VALUE obj, VALUE flags)
2997{
2998 ((void)0);
2999 rbimpl_fl_set_raw_raw(((struct RBasic *)(obj)), flags);
3000}
3001__attribute__((__artificial__))
3002static inline void
3003RB_FL_SET(VALUE obj, VALUE flags)
3004{
3005 if (RB_FL_ABLE(obj)) {
3006 RB_FL_SET_RAW(obj, flags);
3007 }
3008}
3009
3010__attribute__((__artificial__))
3011static inline void
3012rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
3013{
3014 obj->flags &= ~flags;
3015}
3016__attribute__((__artificial__))
3017static inline void
3018RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
3019{
3020 ((void)0);
3021 rbimpl_fl_unset_raw_raw(((struct RBasic *)(obj)), flags);
3022}
3023__attribute__((__artificial__))
3024static inline void
3025RB_FL_UNSET(VALUE obj, VALUE flags)
3026{
3027 if (RB_FL_ABLE(obj)) {
3028 RB_FL_UNSET_RAW(obj, flags);
3029 }
3030}
3031
3032__attribute__((__artificial__))
3033static inline void
3034rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
3035{
3036 obj->flags ^= flags;
3037}
3038__attribute__((__artificial__))
3039static inline void
3040RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
3041{
3042 ((void)0);
3043 rbimpl_fl_reverse_raw_raw(((struct RBasic *)(obj)), flags);
3044}
3045__attribute__((__artificial__))
3046static inline void
3047RB_FL_REVERSE(VALUE obj, VALUE flags)
3048{
3049 if (RB_FL_ABLE(obj)) {
3050 RB_FL_REVERSE_RAW(obj, flags);
3051 }
3052}
3053__attribute__((__pure__))
3054__attribute__((__artificial__))
3055__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3056static inline _Bool
3057RB_OBJ_TAINTABLE(VALUE obj)
3058{
3059 return 0;
3060}
3061__attribute__((__pure__))
3062__attribute__((__artificial__))
3063__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3064static inline VALUE
3065RB_OBJ_TAINTED_RAW(VALUE obj)
3066{
3067 return 0;
3068}
3069__attribute__((__pure__))
3070__attribute__((__artificial__))
3071__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3072static inline _Bool
3073RB_OBJ_TAINTED(VALUE obj)
3074{
3075 return 0;
3076}
3077__attribute__((__artificial__))
3078__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3079static inline void
3080RB_OBJ_TAINT_RAW(VALUE obj)
3081{
3082 return;
3083}
3084__attribute__((__artificial__))
3085__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3086static inline void
3087RB_OBJ_TAINT(VALUE obj)
3088{
3089 return;
3090}
3091__attribute__((__artificial__))
3092__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3093static inline void
3094RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
3095{
3096 return;
3097}
3098__attribute__((__artificial__))
3099__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3100static inline void
3101RB_OBJ_INFECT(VALUE dst, VALUE src)
3102{
3103 return;
3104}
3105__attribute__((__pure__))
3106__attribute__((__artificial__))
3107static inline VALUE
3108RB_OBJ_FROZEN_RAW(VALUE obj)
3109{
3110 return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
3111}
3112__attribute__((__pure__))
3113__attribute__((__artificial__))
3114static inline _Bool
3115RB_OBJ_FROZEN(VALUE obj)
3116{
3117 if (! RB_FL_ABLE(obj)) {
3118 return 1;
3119 }
3120 else {
3121 return RB_OBJ_FROZEN_RAW(obj);
3122 }
3123}
3124__attribute__((__artificial__))
3125static inline void
3126RB_OBJ_FREEZE_RAW(VALUE obj)
3127{
3128 RB_FL_SET_RAW(obj, RUBY_FL_FREEZE);
3129}
3130
3131
3132void rb_obj_freeze_inline(VALUE obj);
3133
3134
3135enum ruby_rstring_flags {
3136 RSTRING_NOEMBED = RUBY_FL_USER1,
3137 RSTRING_FSTR = RUBY_FL_USER17
3138};
3139struct RString {
3140 struct RBasic basic;
3141 union {
3142 struct {
3143 long len;
3144 char *ptr;
3145 union {
3146 long capa;
3147 VALUE shared;
3148 } aux;
3149 } heap;
3150 struct {
3151 long len;
3152 char ary[1];
3153 } embed;
3154 } as;
3155};
3156
3157
3159VALUE rb_string_value(volatile VALUE *ptr);
3160char *rb_string_value_ptr(volatile VALUE *ptr);
3161char *rb_string_value_cstr(volatile VALUE *ptr);
3164__attribute__((__error__ ("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead")))
3165void rb_check_safe_str(VALUE);
3166void rb_debug_rstring_null_ptr(const char *func);
3167
3168
3169__attribute__((__pure__))
3170__attribute__((__artificial__))
3171static inline long
3172RSTRING_EMBED_LEN(VALUE str)
3173{
3174 ((void)0);
3175 ((void)0);
3176 long f = ((struct RString *)(str))->as.embed.len;
3177 return f;
3178}
3179
3180
3181__attribute__((__pure__))
3182__attribute__((__artificial__))
3183static inline struct RString
3184rbimpl_rstring_getmem(VALUE str)
3185{
3186 ((void)0);
3187 if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) {
3188 return *((struct RString *)(str));
3189 }
3190 else {
3191 struct RString retval;
3192 retval.as.heap.len = RSTRING_EMBED_LEN(str);
3193 retval.as.heap.ptr = ((struct RString *)(str))->as.embed.ary;
3194 return retval;
3195 }
3196}
3197
3198
3199__attribute__((__pure__))
3200__attribute__((__artificial__))
3201static inline long
3202RSTRING_LEN(VALUE str)
3203{
3204 return rbimpl_rstring_getmem(str).as.heap.len;
3205}
3206__attribute__((__artificial__))
3207static inline char *
3208RSTRING_PTR(VALUE str)
3209{
3210 char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr;
3211 if ((__builtin_expect(!!(! ptr), 0))) {
3212 rb_debug_rstring_null_ptr("RSTRING_PTR");
3213 }
3214 return ptr;
3215}
3216__attribute__((__artificial__))
3217static inline char *
3218RSTRING_END(VALUE str)
3219{
3220 struct RString buf = rbimpl_rstring_getmem(str);
3221 if ((__builtin_expect(!!(! buf.as.heap.ptr), 0))) {
3222 rb_debug_rstring_null_ptr("RSTRING_END");
3223 }
3224 return &buf.as.heap.ptr[buf.as.heap.len];
3225}
3226__attribute__((__artificial__))
3227static inline int
3228RSTRING_LENINT(VALUE str)
3229{
3230 return rb_long2int_inline(RSTRING_LEN(str));
3231}
3232__attribute__((__const__))
3233
3234__attribute__((__artificial__))
3235static inline VALUE
3236RB_CHR2FIX(unsigned char c)
3237{
3238 return RB_INT2FIX(c);
3239}
3240static inline char
3241rb_num2char_inline(VALUE x)
3242{
3243 if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
3244 return RSTRING_PTR(x)[0];
3245 else
3246 return ((char)rb_num2int_inline(x));
3247}
3248
3249
3250double rb_num2dbl(VALUE num);
3251__attribute__((__pure__))
3252double rb_float_value(VALUE num);
3253VALUE rb_float_new(double d);
3254VALUE rb_float_new_in_heap(double d);
3255
3256
3257
3258
3259VALUE rb_ll2inum(long long num);
3260VALUE rb_ull2inum(unsigned long long num);
3261long long rb_num2ll(VALUE num);
3262unsigned long long rb_num2ull(VALUE num);
3263
3264
3265static inline VALUE
3266rb_ll2num_inline(long long n)
3267{
3268 if ((((n) < (0x7fffffffffffffffL / 2) + 1) && ((n) >= ((-0x7fffffffffffffffL -1L) / 2)))) return RB_INT2FIX((long)n);
3269 return rb_ll2inum(n);
3270}
3271static inline VALUE
3272rb_ull2num_inline(unsigned long long n)
3273{
3274 if (((n) < (0x7fffffffffffffffL / 2) + 1)) return RB_INT2FIX((long)n);
3275 return rb_ull2inum(n);
3276}
3277static inline long long
3278rb_num2ll_inline(VALUE x)
3279{
3280 if (RB_FIXNUM_P(x))
3281 return rb_fix2long(x);
3282 else
3283 return rb_num2ll(x);
3284}
3285static inline unsigned long long
3286rb_num2ull_inline(VALUE x)
3287{
3288 if (RB_FIXNUM_P(x))
3289 return rb_fix2long(x);
3290 else
3291 return rb_num2ull(x);
3292}
3293
3294
3295short rb_num2short(VALUE num);
3296unsigned short rb_num2ushort(VALUE num);
3297short rb_fix2short(VALUE num);
3298unsigned short rb_fix2ushort(VALUE num);
3299
3300
3301static inline short
3302rb_num2short_inline(VALUE x)
3303{
3304 if (RB_FIXNUM_P(x))
3305 return rb_fix2short(x);
3306 else
3307 return rb_num2short(x);
3308}
3309
3310
3311typedef unsigned long st_data_t;
3312typedef struct st_table st_table;
3313typedef st_data_t st_index_t;
3314typedef int st_compare_func(st_data_t, st_data_t);
3315typedef st_index_t st_hash_func(st_data_t);
3316typedef char st_check_for_sizeof_st_index_t[8 == (int)sizeof(st_index_t) ? 1 : -1];
3317struct st_hash_type {
3318 int (*compare)(st_data_t, st_data_t);
3319 st_index_t (*hash)(st_data_t);
3320};
3321typedef struct st_table_entry st_table_entry;
3322struct st_table_entry;
3323struct st_table {
3324 unsigned char entry_power, bin_power, size_ind;
3325 unsigned int rebuilds_num;
3326 const struct st_hash_type *type;
3327 st_index_t num_entries;
3328 st_index_t *bins;
3329 st_index_t entries_start, entries_bound;
3330 st_table_entry *entries;
3331};
3332enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE};
3333st_table *rb_st_init_table(const struct st_hash_type *);
3334st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t);
3335st_table *rb_st_init_numtable(void);
3336st_table *rb_st_init_numtable_with_size(st_index_t);
3337st_table *rb_st_init_strtable(void);
3338st_table *rb_st_init_strtable_with_size(st_index_t);
3339st_table *rb_st_init_strcasetable(void);
3340st_table *rb_st_init_strcasetable_with_size(st_index_t);
3341int rb_st_delete(st_table *, st_data_t *, st_data_t *);
3342int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
3343int rb_st_shift(st_table *, st_data_t *, st_data_t *);
3344int rb_st_insert(st_table *, st_data_t, st_data_t);
3345int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
3346int rb_st_lookup(st_table *, st_data_t, st_data_t *);
3347int rb_st_get_key(st_table *, st_data_t, st_data_t *);
3348typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
3349int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
3350typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t);
3351typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int);
3352int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
3353int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t);
3354int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t);
3355st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size);
3356st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
3357st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size);
3358st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
3359void rb_st_add_direct(st_table *, st_data_t, st_data_t);
3360void rb_st_free_table(st_table *);
3361void rb_st_cleanup_safe(st_table *, st_data_t);
3362void rb_st_clear(st_table *);
3363st_table *rb_st_copy(st_table *);
3364__attribute__((__const__)) int rb_st_numcmp(st_data_t, st_data_t);
3365__attribute__((__const__)) st_index_t rb_st_numhash(st_data_t);
3366__attribute__((__pure__)) int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3367__attribute__((__pure__)) int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3368__attribute__((__pure__)) size_t rb_st_memsize(const st_table *);
3369__attribute__((__pure__)) st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h);
3370__attribute__((__const__)) st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i);
3371__attribute__((__const__)) st_index_t rb_st_hash_uint(st_index_t h, st_index_t i);
3372__attribute__((__const__)) st_index_t rb_st_hash_end(st_index_t h);
3373__attribute__((__const__)) st_index_t rb_st_hash_start(st_index_t h);
3374void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE);
3375
3376
3377__attribute__((__const__))
3378
3379__attribute__((__artificial__))
3380static inline VALUE
3381RB_ST2FIX(st_data_t i)
3382{
3383 long x = i;
3384 if (x >= 0) {
3385 x &= (0x7fffffffffffffffL / 2);
3386 }
3387 else {
3388 x |= ((-0x7fffffffffffffffL -1L) / 2);
3389 }
3390 ((void)0);
3391 unsigned long y = ((unsigned long)x);
3392 return RB_INT2FIX(y);
3393}
3394
3395
3396void rb_gc_writebarrier(VALUE old, VALUE young);
3397void rb_gc_writebarrier_unprotect(VALUE obj);
3398
3399
3400__attribute__((__pure__))
3401__attribute__((__artificial__))
3402static inline _Bool
3403RB_OBJ_PROMOTED_RAW(VALUE obj)
3404{
3405 ((void)0);
3406 return RB_FL_ANY_RAW(obj, RUBY_FL_PROMOTED);
3407}
3408__attribute__((__pure__))
3409__attribute__((__artificial__))
3410static inline _Bool
3411RB_OBJ_PROMOTED(VALUE obj)
3412{
3413 if (! RB_FL_ABLE(obj)) {
3414 return 0;
3415 }
3416 else {
3417 return RB_OBJ_PROMOTED_RAW(obj);
3418 }
3419}
3420static inline VALUE
3421rb_obj_wb_unprotect(
3422 VALUE x,
3423 [[maybe_unused]]
3424 const char *filename,
3425 [[maybe_unused]]
3426 int line)
3427{
3428 rb_gc_writebarrier_unprotect(x);
3429 return x;
3430}
3431static inline VALUE
3432rb_obj_written(
3433 VALUE a,
3434 [[maybe_unused]]
3435 VALUE oldv,
3436 VALUE b,
3437 [[maybe_unused]]
3438 const char *filename,
3439 [[maybe_unused]]
3440 int line)
3441{
3442 if (!RB_SPECIAL_CONST_P(b)) {
3443 rb_gc_writebarrier(a, b);
3444 }
3445 return a;
3446}
3447static inline VALUE
3448rb_obj_write(
3449 VALUE a, VALUE *slot, VALUE b,
3450 [[maybe_unused]]
3451 const char *filename,
3452 [[maybe_unused]]
3453 int line)
3454{
3455 *slot = b;
3456 rb_obj_written(a, ((VALUE)RUBY_Qundef) , b, filename, line);
3457 return a;
3458}
3459enum ruby_rarray_flags {
3460 RARRAY_EMBED_FLAG = RUBY_FL_USER1,
3461 RARRAY_EMBED_LEN_MASK = RUBY_FL_USER9 | RUBY_FL_USER8 | RUBY_FL_USER7 | RUBY_FL_USER6 |
3463 ,
3464 RARRAY_TRANSIENT_FLAG = RUBY_FL_USER13
3465};
3466enum ruby_rarray_consts {
3467 RARRAY_EMBED_LEN_SHIFT = RUBY_FL_USHIFT + 3
3468};
3469struct RArray {
3470 struct RBasic basic;
3471 union {
3472 struct {
3473 long len;
3474 union {
3475 long capa;
3476 const
3477 VALUE shared_root;
3478 } aux;
3479 const VALUE *ptr;
3480 } heap;
3481 const VALUE ary[1];
3482 } as;
3483};
3484
3485
3486VALUE *rb_ary_ptr_use_start(VALUE ary);
3487void rb_ary_ptr_use_end(VALUE a);
3488void rb_ary_detransient(VALUE a);
3489
3490
3491__attribute__((__pure__))
3492__attribute__((__artificial__))
3493static inline long
3494RARRAY_EMBED_LEN(VALUE ary)
3495{
3496 ((void)0);
3497 ((void)0);
3498 VALUE f = ((struct RBasic *)(ary))->flags;
3499 f &= RARRAY_EMBED_LEN_MASK;
3500 f >>= RARRAY_EMBED_LEN_SHIFT;
3501 return ((long)f);
3502}
3503__attribute__((__pure__))
3504static inline long
3506{
3507 ((void)0);
3508 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3509 return RARRAY_EMBED_LEN(a);
3510 }
3511 else {
3512 return ((struct RArray *)(a))->as.heap.len;
3513 }
3514}
3515__attribute__((__artificial__))
3516static inline int
3517RARRAY_LENINT(VALUE ary)
3518{
3519 return rb_long2int_inline(rb_array_len(ary));
3520}
3521__attribute__((__pure__))
3522__attribute__((__artificial__))
3523static inline _Bool
3524RARRAY_TRANSIENT_P(VALUE ary)
3525{
3526 ((void)0);
3527 return RB_FL_ANY_RAW(ary, RARRAY_TRANSIENT_FLAG);
3528}
3529__attribute__((__pure__))
3530static inline const VALUE *
3531rb_array_const_ptr_transient(VALUE a)
3532{
3533 ((void)0);
3534 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3535 return (((struct RArray *)(a))->as.ary);
3536 }
3537 else {
3538 return (((struct RArray *)(a))->as.heap.ptr);
3539 }
3540}
3541static inline const VALUE *
3542rb_array_const_ptr(VALUE a)
3543{
3544 ((void)0);
3545 if (RARRAY_TRANSIENT_P(a)) {
3546 rb_ary_detransient(a);
3547 }
3548 return rb_array_const_ptr_transient(a);
3549}
3550static inline VALUE *
3551rb_array_ptr_use_start(VALUE a,
3552 [[maybe_unused]]
3553 int allow_transient)
3554{
3555 ((void)0);
3556 if (!allow_transient) {
3557 if (RARRAY_TRANSIENT_P(a)) {
3558 rb_ary_detransient(a);
3559 }
3560 }
3561 return rb_ary_ptr_use_start(a);
3562}
3563static inline void
3564rb_array_ptr_use_end(VALUE a,
3565 [[maybe_unused]]
3566 int allow_transient)
3567{
3568 ((void)0);
3569 rb_ary_ptr_use_end(a);
3570}
3571static inline VALUE *
3572RARRAY_PTR(VALUE ary)
3573{
3574 ((void)0);
3575 VALUE tmp = (1 ? rb_obj_wb_unprotect(ary, "../ruby-3.2.1/include/ruby/internal/core/rarray.h", 550) : ary);
3576 return ((VALUE *)rb_array_const_ptr(tmp));
3577}
3578static inline void
3579RARRAY_ASET(VALUE ary, long i, VALUE v)
3580{
3581 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.2.1/include/ruby/internal/core/rarray.h", 569)); rb_array_ptr_use_end(rbimpl_ary, (1)); } while (0);
3582}
3583
3584
3585int rb_big_sign(VALUE num);
3586
3587
3588static inline _Bool
3589RBIGNUM_POSITIVE_P(VALUE b)
3590{
3591 ((void)0);
3592 return rb_big_sign(b);
3593}
3594static inline _Bool
3595RBIGNUM_NEGATIVE_P(VALUE b)
3596{
3597 ((void)0);
3598 return ! RBIGNUM_POSITIVE_P(b);
3599}
3600enum ruby_rmodule_flags {
3601 RMODULE_IS_REFINEMENT = RUBY_FL_USER3
3602};
3603struct RClass;
3604
3605
3607
3608
3609typedef void (*RUBY_DATA_FUNC)(void*);
3610struct RData {
3611 struct RBasic basic;
3614 void *data;
3615};
3616
3617
3618VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3619VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3620extern VALUE rb_cObject;
3621
3622
3623__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3624static inline VALUE
3625rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free)
3626{
3627 return rb_data_object_wrap(klass, ptr, mark, free);
3628}
3629static inline void *
3630rb_data_object_get(VALUE obj)
3631{
3632 Check_Type(obj, RUBY_T_DATA);
3633 return ((struct RData *)(obj))->data;
3634}
3635__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3636static inline void *
3637rb_data_object_get_warning(VALUE obj)
3638{
3639 return rb_data_object_get(obj);
3640}
3641static inline VALUE
3642rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
3643{
3644 VALUE result = rb_data_object_zalloc( (klass), (size), ((void (*)(void *))(mark_func)), ((void (*)(void *))(free_func))); (*datap) = ((void *)((struct RData *)(result))->data); ((void)(*datap));
3645 return result;
3646}
3647__attribute__((__deprecated__ ("by: rb_data_object_wrap")))
3648static inline VALUE
3649rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
3650{
3651 return rb_data_object_wrap(klass, data, dmark, dfree);
3652}
3653struct rb_io_t;
3654struct RFile {
3655 struct RBasic basic;
3656 struct rb_io_t *fptr;
3657};
3658struct st_table;
3659
3660
3661size_t rb_hash_size_num(VALUE hash);
3662struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line);
3663VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone);
3664
3665
3666enum ruby_robject_flags {
3667 ROBJECT_EMBED = RUBY_FL_USER1
3668};
3669struct st_table;
3670struct RObject {
3671 struct RBasic basic;
3672 union {
3673 struct {
3674 VALUE *ivptr;
3675 struct rb_id_table *iv_index_tbl;
3676 } heap;
3677 VALUE ary[1];
3678 } as;
3679};
3680static const int32_t ROBJECT_OFFSET_AS_HEAP_IVPTR = __builtin_offsetof (struct RObject, as.heap.ivptr);
3681static const int32_t ROBJECT_OFFSET_AS_HEAP_IV_INDEX_TBL = __builtin_offsetof (struct RObject, as.heap.iv_index_tbl);
3682static const int32_t ROBJECT_OFFSET_AS_ARY = __builtin_offsetof (struct RObject, as.ary);
3683__attribute__((__pure__))
3684__attribute__((__artificial__))
3685static inline VALUE *
3686ROBJECT_IVPTR(VALUE obj)
3687{
3688 ((void)0);
3689 struct RObject *const ptr = ((struct RObject *)(obj));
3690 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
3691 return ptr->as.ary;
3692 }
3693 else {
3694 return ptr->as.heap.ivptr;
3695 }
3696}
3697struct re_patter_buffer;
3698struct RRegexp {
3699 struct RBasic basic;
3700 struct re_pattern_buffer *ptr;
3701 const VALUE src;
3702 unsigned long usecnt;
3703};
3704__attribute__((__pure__))
3705__attribute__((__artificial__))
3706static inline VALUE
3707RREGEXP_SRC(VALUE rexp)
3708{
3709 ((void)0);
3710 VALUE ret = ((struct RRegexp *)(rexp))->src;
3711 ((void)0);
3712 return ret;
3713}
3714__attribute__((__pure__))
3715__attribute__((__artificial__))
3716static inline char *
3717RREGEXP_SRC_PTR(VALUE rexp)
3718{
3719 return RSTRING_PTR(RREGEXP_SRC(rexp));
3720}
3721__attribute__((__pure__))
3722__attribute__((__artificial__))
3723static inline long
3724RREGEXP_SRC_LEN(VALUE rexp)
3725{
3726 return RSTRING_LEN(RREGEXP_SRC(rexp));
3727}
3728__attribute__((__pure__))
3729__attribute__((__artificial__))
3730static inline char *
3731RREGEXP_SRC_END(VALUE rexp)
3732{
3733 return RSTRING_END(RREGEXP_SRC(rexp));
3734}
3735
3736
3740
3741
3742__attribute__((__artificial__))
3743static inline long
3744RSTRUCT_LEN(VALUE st)
3745{
3746 ((void)0);
3747 return rb_num2long_inline(rb_struct_size(st));
3748}
3749__attribute__((__artificial__))
3750static inline VALUE
3751RSTRUCT_SET(VALUE st, int k, VALUE v)
3752{
3753 ((void)0);
3754 return rb_struct_aset(st, rb_int2num_inline(k), (v));
3755}
3756__attribute__((__artificial__))
3757static inline VALUE
3758RSTRUCT_GET(VALUE st, int k)
3759{
3760 ((void)0);
3761 return rb_struct_aref(st, rb_int2num_inline(k));
3762}
3763enum
3764
3765rbimpl_typeddata_flags {
3766 RUBY_TYPED_FREE_IMMEDIATELY = 1,
3767 RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE,
3768 RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED,
3769 RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1
3770};
3771typedef struct rb_data_type_struct rb_data_type_t;
3772struct rb_data_type_struct {
3773 const char *wrap_struct_name;
3774 struct {
3777 size_t (*dsize)(const void *);
3779 void *reserved[1];
3780 } function;
3781 const rb_data_type_t *parent;
3782 void *data;
3783 VALUE flags;
3784};
3785struct RTypedData {
3786 struct RBasic basic;
3787 const rb_data_type_t *type;
3789 void *data;
3790};
3791
3792
3793__attribute__((__nonnull__ (3)))
3794VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type);
3795VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);
3796int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);
3797int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);
3798void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
3799
3800
3801__attribute__((__pure__))
3802__attribute__((__artificial__))
3803static inline _Bool
3804rbimpl_rtypeddata_p(VALUE obj)
3805{
3806 return ((struct RTypedData *)(obj))->typed_flag == 1;
3807}
3808__attribute__((__pure__))
3809__attribute__((__artificial__))
3810static inline _Bool
3811RTYPEDDATA_P(VALUE obj)
3812{
3813 return rbimpl_rtypeddata_p(obj);
3814}
3815__attribute__((__pure__))
3816__attribute__((__artificial__))
3817static inline const struct rb_data_type_struct *
3818RTYPEDDATA_TYPE(VALUE obj)
3819{
3820 return ((struct RTypedData *)(obj))->type;
3821}
3822static inline VALUE
3823rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
3824{
3825 VALUE result = rb_data_typed_object_zalloc(klass, size, type); (*datap) = ((void *)(((struct RTypedData *)(result))->data)); ((void)(*datap));
3826 return result;
3827}
3828__attribute__((__deprecated__ ("by: rb_data_typed_object_wrap")))
3829static inline VALUE
3830rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
3831{
3832 return rb_data_typed_object_wrap(klass, datap, type);
3833}
3834
3835int isalnum (int __c);
3836int isalpha (int __c);
3837int iscntrl (int __c);
3838int isdigit (int __c);
3839int isgraph (int __c);
3840int islower (int __c);
3841int isprint (int __c);
3842int ispunct (int __c);
3843int isspace (int __c);
3844int isupper (int __c);
3845int isxdigit (int __c);
3846int tolower (int __c);
3847int toupper (int __c);
3848int isblank (int __c);
3849int isascii (int __c);
3850int toascii (int __c);
3851extern int isalnum_l (int __c, locale_t __l);
3852extern int isalpha_l (int __c, locale_t __l);
3853extern int isblank_l (int __c, locale_t __l);
3854extern int iscntrl_l (int __c, locale_t __l);
3855extern int isdigit_l (int __c, locale_t __l);
3856extern int isgraph_l (int __c, locale_t __l);
3857extern int islower_l (int __c, locale_t __l);
3858extern int isprint_l (int __c, locale_t __l);
3859extern int ispunct_l (int __c, locale_t __l);
3860extern int isspace_l (int __c, locale_t __l);
3861extern int isupper_l (int __c, locale_t __l);
3862extern int isxdigit_l(int __c, locale_t __l);
3863extern int tolower_l (int __c, locale_t __l);
3864extern int toupper_l (int __c, locale_t __l);
3865extern int isascii_l (int __c, locale_t __l);
3866extern int toascii_l (int __c, locale_t __l);
3867extern __attribute__((dllimport)) const char _ctype_[];
3868const char *__locale_ctype_ptr (void);
3869const char *__locale_ctype_ptr_l (locale_t);
3870
3871
3872
3873__attribute__((__nonnull__ ()))
3874int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3875__attribute__((__nonnull__ ()))
3876int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3877__attribute__((__nonnull__ (1)))
3878unsigned long ruby_strtoul(const char *str, char **endptr, int base);
3879
3880
3881__attribute__((__const__))
3882
3883__attribute__((__artificial__))
3884static inline int
3885rb_isascii(int c)
3886{
3887 return '\0' <= c && c <= '\x7f';
3888}
3889__attribute__((__const__))
3890
3891__attribute__((__artificial__))
3892static inline int
3893rb_isupper(int c)
3894{
3895 return 'A' <= c && c <= 'Z';
3896}
3897__attribute__((__const__))
3898
3899__attribute__((__artificial__))
3900static inline int
3901rb_islower(int c)
3902{
3903 return 'a' <= c && c <= 'z';
3904}
3905__attribute__((__const__))
3906
3907__attribute__((__artificial__))
3908static inline int
3909rb_isalpha(int c)
3910{
3911 return rb_isupper(c) || rb_islower(c);
3912}
3913__attribute__((__const__))
3914
3915__attribute__((__artificial__))
3916static inline int
3917rb_isdigit(int c)
3918{
3919 return '0' <= c && c <= '9';
3920}
3921__attribute__((__const__))
3922
3923__attribute__((__artificial__))
3924static inline int
3925rb_isalnum(int c)
3926{
3927 return rb_isalpha(c) || rb_isdigit(c);
3928}
3929__attribute__((__const__))
3930
3931__attribute__((__artificial__))
3932static inline int
3933rb_isxdigit(int c)
3934{
3935 return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
3936}
3937__attribute__((__const__))
3938
3939__attribute__((__artificial__))
3940static inline int
3941rb_isblank(int c)
3942{
3943 return c == ' ' || c == '\t';
3944}
3945__attribute__((__const__))
3946
3947__attribute__((__artificial__))
3948static inline int
3949rb_isspace(int c)
3950{
3951 return c == ' ' || ('\t' <= c && c <= '\r');
3952}
3953__attribute__((__const__))
3954
3955__attribute__((__artificial__))
3956static inline int
3957rb_iscntrl(int c)
3958{
3959 return ('\0' <= c && c < ' ') || c == '\x7f';
3960}
3961__attribute__((__const__))
3962
3963__attribute__((__artificial__))
3964static inline int
3965rb_isprint(int c)
3966{
3967 return ' ' <= c && c <= '\x7e';
3968}
3969__attribute__((__const__))
3970
3971__attribute__((__artificial__))
3972static inline int
3973rb_ispunct(int c)
3974{
3975 return !rb_isalnum(c);
3976}
3977__attribute__((__const__))
3978
3979__attribute__((__artificial__))
3980static inline int
3981rb_isgraph(int c)
3982{
3983 return '!' <= c && c <= '\x7e';
3984}
3985__attribute__((__const__))
3986
3987__attribute__((__artificial__))
3988static inline int
3989rb_tolower(int c)
3990{
3991 return rb_isupper(c) ? (c|0x20) : c;
3992}
3993__attribute__((__const__))
3994
3995__attribute__((__artificial__))
3996static inline int
3997rb_toupper(int c)
3998{
3999 return rb_islower(c) ? (c&0x5f) : c;
4000}
4001
4002
4003__attribute__((__nonnull__ ()))
4004VALUE rb_eval_string(const char *str);
4005__attribute__((__nonnull__ (1)))
4006VALUE rb_eval_string_protect(const char *str, int *state);
4007__attribute__((__nonnull__ (1)))
4008VALUE rb_eval_string_wrap(const char *str, int *state);
4009VALUE rb_funcall(VALUE recv, ID mid, int n, ...);
4010VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv);
4011VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4012VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv);
4013VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4014VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv);
4015VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4016VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval);
4017VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat);
4018VALUE rb_call_super(int argc, const VALUE *argv);
4019VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat);
4020VALUE rb_current_receiver(void);
4021__attribute__((__nonnull__ (2)))
4022int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values);
4023__attribute__((__nonnull__ ()))
4025
4026
4027typedef uint32_t rb_event_flag_t;
4028typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);
4029
4030
4031void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
4032int rb_remove_event_hook(rb_event_hook_func_t func);
4033
4034
4035
4036
4037void rb_gc_register_address(VALUE *valptr);
4039void rb_gc_unregister_address(VALUE *valptr);
4040void rb_gc_register_mark_object(VALUE object);
4041
4042
4043
4044
4045typedef int ruby_glob_func(const char *path, VALUE arg, void *enc);
4046__attribute__((__nonnull__ ()))
4047void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg);
4048__attribute__((__nonnull__ ()))
4049int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4050__attribute__((__nonnull__ ()))
4051int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4052
4053
4054
4055
4056extern VALUE rb_mKernel;
4057extern VALUE rb_mComparable;
4058extern VALUE rb_mEnumerable;
4059extern VALUE rb_mErrno;
4060extern VALUE rb_mFileTest;
4061extern VALUE rb_mGC;
4062extern VALUE rb_mMath;
4063extern VALUE rb_mProcess;
4064extern VALUE rb_mWaitReadable;
4065extern VALUE rb_mWaitWritable;
4066extern VALUE rb_cBasicObject;
4068extern VALUE rb_cArray;
4069extern VALUE rb_cBinding;
4070extern VALUE rb_cClass;
4071extern VALUE rb_cDir;
4072extern VALUE rb_cEncoding;
4073extern VALUE rb_cEnumerator;
4074extern VALUE rb_cFalseClass;
4075extern VALUE rb_cFile;
4076extern VALUE rb_cComplex;
4077extern VALUE rb_cFloat;
4078extern VALUE rb_cHash;
4079extern VALUE rb_cIO;
4080extern VALUE rb_cInteger;
4081extern VALUE rb_cMatch;
4082extern VALUE rb_cMethod;
4083extern VALUE rb_cModule;
4084extern VALUE rb_cRefinement;
4086extern VALUE rb_cNilClass;
4087extern VALUE rb_cNumeric;
4088extern VALUE rb_cProc;
4089extern VALUE rb_cRandom;
4090extern VALUE rb_cRange;
4091extern VALUE rb_cRational;
4092extern VALUE rb_cRegexp;
4093extern VALUE rb_cStat;
4094extern VALUE rb_cString;
4095extern VALUE rb_cStruct;
4096extern VALUE rb_cSymbol;
4097extern VALUE rb_cThread;
4098extern VALUE rb_cTime;
4099extern VALUE rb_cTrueClass;
4101extern VALUE rb_eException;
4103extern VALUE rb_eSystemExit;
4104extern VALUE rb_eInterrupt;
4105extern VALUE rb_eSignal;
4106extern VALUE rb_eFatal;
4107extern VALUE rb_eArgError;
4108extern VALUE rb_eEOFError;
4109extern VALUE rb_eIndexError;
4111extern VALUE rb_eKeyError;
4112extern VALUE rb_eRangeError;
4113extern VALUE rb_eIOError;
4114extern VALUE rb_eRuntimeError;
4115extern VALUE rb_eFrozenError;
4118extern VALUE rb_eThreadError;
4119extern VALUE rb_eTypeError;
4120extern VALUE rb_eZeroDivError;
4121extern VALUE rb_eNotImpError;
4122extern VALUE rb_eNoMemError;
4127extern VALUE rb_eRegexpError;
4132extern VALUE rb_eScriptError;
4133extern VALUE rb_eNameError;
4134extern VALUE rb_eSyntaxError;
4135extern VALUE rb_eLoadError;
4137extern VALUE rb_stdin;
4138extern VALUE rb_stdout;
4139extern VALUE rb_stderr;
4140__attribute__((__pure__))
4141static inline VALUE
4142rb_class_of(VALUE obj)
4143{
4144 if (! RB_SPECIAL_CONST_P(obj)) {
4145 return RBASIC_CLASS(obj);
4146 }
4147 else if (obj == ((VALUE)RUBY_Qfalse)) {
4148 return rb_cFalseClass;
4149 }
4150 else if (obj == ((VALUE)RUBY_Qnil)) {
4151 return rb_cNilClass;
4152 }
4153 else if (obj == ((VALUE)RUBY_Qtrue)) {
4154 return rb_cTrueClass;
4155 }
4156 else if (RB_FIXNUM_P(obj)) {
4157 return rb_cInteger;
4158 }
4159 else if (RB_STATIC_SYM_P(obj)) {
4160 return rb_cSymbol;
4161 }
4162 else if (RB_FLONUM_P(obj)) {
4163 return rb_cFloat;
4164 }
4165 __builtin_unreachable();
4166}
4167
4168
4169
4170
4171__attribute__((__nonnull__ ()))
4172void ruby_sysinit(int *argc, char ***argv);
4173void ruby_init(void);
4174void* ruby_options(int argc, char** argv);
4175int ruby_executable_node(void *n, int *status);
4176int ruby_run_node(void *n);
4177void ruby_show_version(void);
4178void ruby_show_copyright(void);
4179void ruby_init_stack(volatile VALUE *addr);
4180int ruby_setup(void);
4181int ruby_cleanup(int ex);
4182void ruby_finalize(void);
4183__attribute__((__noreturn__))
4184void ruby_stop(int);
4185int ruby_stack_check(void);
4186size_t ruby_stack_length(VALUE **topnotch);
4187int ruby_exec_node(void *n);
4188void ruby_script(const char* name);
4189void ruby_set_script_name(VALUE name);
4190void ruby_prog_init(void);
4191void ruby_set_argv(int argc, char **argv);
4192void *ruby_process_options(int argc, char **argv);
4193void ruby_init_loadpath(void);
4194void ruby_incpush(const char *path);
4195void ruby_sig_finalize(void);
4196
4197
4198
4199
4200typedef VALUE rb_block_call_func(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4201typedef rb_block_call_func *rb_block_call_func_t;
4202VALUE rb_each(VALUE obj);
4203VALUE rb_yield(VALUE val);
4204VALUE rb_yield_values(int n, ...);
4205VALUE rb_yield_values2(int n, const VALUE *argv);
4206VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat);
4207VALUE rb_yield_splat(VALUE ary);
4208VALUE rb_yield_splat_kw(VALUE ary, int kw_splat);
4209VALUE rb_yield_block(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4210int rb_keyword_given_p(void);
4211int rb_block_given_p(void);
4212void rb_need_block(void);
4213__attribute__((__deprecated__ ("by: rb_block_call since 1.9")))
4214VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);
4215VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2);
4216VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat);
4217VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);
4218VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...);
4219VALUE rb_vrescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, va_list ap);
4220VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
4221VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data);
4222VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data);
4223__attribute__((__noreturn__))
4224void rb_throw(const char *tag, VALUE val);
4225__attribute__((__noreturn__))
4226void rb_throw_obj(VALUE tag, VALUE val);
4227
4228
4229struct rbimpl_size_mul_overflow_tag {
4230 _Bool left;
4231 size_t right;
4232};
4233
4234
4235__attribute__((__malloc__))
4236__attribute__((__returns_nonnull__))
4237__attribute__((__alloc_size__ (2)))
4238__attribute__((__nonnull__ ()))
4239void *rb_alloc_tmp_buffer(volatile VALUE *store, long len);
4240__attribute__((__malloc__))
4241__attribute__((__returns_nonnull__))
4242__attribute__((__alloc_size__ (2,3)))
4243__attribute__((__nonnull__ ()))
4244void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count);
4245void rb_free_tmp_buffer(volatile VALUE *store);
4246__attribute__((__noreturn__))
4247void ruby_malloc_size_overflow(size_t x, size_t y);
4248
4249
4250static inline int
4251rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
4252{
4253 __extension__ unsigned __int128 da, db, c2;
4254 da = a;
4255 db = b;
4256 c2 = da * db;
4257 if (c2 > max) return 1;
4258 *c = ((size_t)c2);
4259 return 0;
4260}
4261
4262__attribute__((__const__))
4263static inline struct rbimpl_size_mul_overflow_tag
4264rbimpl_size_mul_overflow(size_t x, size_t y)
4265{
4266 struct rbimpl_size_mul_overflow_tag ret = { 0, 0, };
4267 ret.left = __builtin_mul_overflow(x, y, &ret.right);
4268 return ret;
4269}
4270static inline size_t
4271rbimpl_size_mul_or_raise(size_t x, size_t y)
4272{
4273 struct rbimpl_size_mul_overflow_tag size =
4274 rbimpl_size_mul_overflow(x, y);
4275 if ((__builtin_expect(!!(! size.left), 1))) {
4276 return size.right;
4277 }
4278 else {
4279 ruby_malloc_size_overflow(x, y);
4280 __builtin_unreachable();
4281 }
4282}
4283static inline void *
4284rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
4285{
4286 const size_t total_size = rbimpl_size_mul_or_raise(count, elsize);
4287 const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
4288 return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
4289}
4290
4291
4292
4293__attribute__((__nonnull__ (1)))
4294__attribute__((__returns_nonnull__))
4295static inline void *
4296ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
4297{
4298 if (n) {
4299 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));
4300 }
4301 else {
4302 return dest;
4303 }
4304}
4305
4306
4307
4308
4309__attribute__((__nonnull__ ()))
4310VALUE rb_define_class(const char *name, VALUE super);
4311__attribute__((__nonnull__ ()))
4312VALUE rb_define_module(const char *name);
4313__attribute__((__nonnull__ ()))
4314VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super);
4315__attribute__((__nonnull__ ()))
4316VALUE rb_define_module_under(VALUE outer, const char *name);
4317void rb_include_module(VALUE klass, VALUE module);
4318void rb_extend_object(VALUE obj, VALUE mod);
4319void rb_prepend_module(VALUE klass, VALUE module);
4320
4321
4322
4323
4324VALUE rb_newobj(void);
4325VALUE rb_newobj_of(VALUE klass, VALUE flags);
4326VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);
4329void rb_singleton_class_attached(VALUE klass, VALUE obj);
4330void rb_copy_generic_ivar(VALUE clone, VALUE obj);
4331
4332
4333__attribute__((__deprecated__ ("This is no longer how Object#clone works.")))
4334static inline void
4335rb_clone_setup(VALUE clone, VALUE obj)
4336{
4337 return;
4338}
4339__attribute__((__deprecated__ ("This is no longer how Object#dup works.")))
4340static inline void
4341rb_dup_setup(VALUE dup, VALUE obj)
4342{
4343 return;
4344}
4345
4346
4347__attribute__((__nonnull__ ()))
4348
4349void rb_mem_clear(VALUE *buf, long len)
4350
4351 ;
4352VALUE rb_assoc_new(VALUE car, VALUE cdr);
4353VALUE rb_check_array_type(VALUE obj);
4354VALUE rb_ary_new(void);
4355VALUE rb_ary_new_capa(long capa);
4356VALUE rb_ary_new_from_args(long n, ...);
4357VALUE rb_ary_new_from_values(long n, const VALUE *elts);
4358VALUE rb_ary_hidden_new(long capa);
4359void rb_ary_free(VALUE ary);
4360void rb_ary_modify(VALUE ary);
4361VALUE rb_ary_freeze(VALUE obj);
4362__attribute__((__pure__))
4363VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs);
4364VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary);
4365VALUE rb_ary_subseq(VALUE ary, long beg, long len);
4366void rb_ary_store(VALUE ary, long key, VALUE val);
4367VALUE rb_ary_dup(VALUE ary);
4368VALUE rb_ary_resurrect(VALUE ary);
4369VALUE rb_ary_to_ary(VALUE obj);
4370VALUE rb_ary_to_s(VALUE ary);
4371VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len);
4372VALUE rb_ary_push(VALUE ary, VALUE elem);
4373VALUE rb_ary_pop(VALUE ary);
4374VALUE rb_ary_shift(VALUE ary);
4375VALUE rb_ary_unshift(VALUE ary, VALUE elem);
4376__attribute__((__pure__))
4377VALUE rb_ary_entry(VALUE ary, long off);
4378VALUE rb_ary_each(VALUE ary);
4379VALUE rb_ary_join(VALUE ary, VALUE sep);
4380VALUE rb_ary_reverse(VALUE ary);
4381VALUE rb_ary_rotate(VALUE ary, long rot);
4382VALUE rb_ary_sort(VALUE ary);
4383VALUE rb_ary_sort_bang(VALUE ary);
4384VALUE rb_ary_delete(VALUE ary, VALUE elem);
4385VALUE rb_ary_delete_at(VALUE ary, long pos);
4386VALUE rb_ary_clear(VALUE ary);
4387VALUE rb_ary_plus(VALUE lhs, VALUE rhs);
4388VALUE rb_ary_concat(VALUE lhs, VALUE rhs);
4389VALUE rb_ary_assoc(VALUE alist, VALUE key);
4390VALUE rb_ary_rassoc(VALUE alist, VALUE key);
4391VALUE rb_ary_includes(VALUE ary, VALUE elem);
4392VALUE rb_ary_cmp(VALUE lhs, VALUE rhs);
4393VALUE rb_ary_replace(VALUE copy, VALUE orig);
4394VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx));
4395VALUE rb_ary_resize(VALUE ary, long len);
4396
4397
4398
4399
4400VALUE rb_exc_new(VALUE etype, const char *ptr, long len);
4401__attribute__((__nonnull__ ()))
4402VALUE rb_exc_new_cstr(VALUE etype, const char *str);
4403VALUE rb_exc_new_str(VALUE etype, VALUE str);
4404__attribute__((__noreturn__))
4405__attribute__((__nonnull__ (1)))
4406__attribute__((__format__(__printf__, 1, 2)))
4407void rb_loaderror(const char *fmt, ...);
4408__attribute__((__noreturn__))
4409__attribute__((__nonnull__ (2)))
4410__attribute__((__format__(__printf__, 2, 3)))
4411void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
4412__attribute__((__noreturn__))
4413__attribute__((__nonnull__ (2)))
4414__attribute__((__format__(__printf__, 2, 3)))
4415void rb_name_error(ID name, const char *fmt, ...);
4416__attribute__((__noreturn__))
4417__attribute__((__nonnull__ (2)))
4418__attribute__((__format__(__printf__, 2, 3)))
4419void rb_name_error_str(VALUE name, const char *fmt, ...);
4420__attribute__((__noreturn__))
4421__attribute__((__nonnull__ (2)))
4422__attribute__((__format__(__printf__, 2, 3)))
4423void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);
4424__attribute__((__noreturn__))
4425__attribute__((__nonnull__ ()))
4426void rb_invalid_str(const char *str, const char *type);
4427__attribute__((__noreturn__))
4428__attribute__((__nonnull__ ()))
4429void rb_error_frozen(const char *what);
4430__attribute__((__noreturn__))
4431void rb_error_frozen_object(VALUE what);
4432void rb_check_frozen(VALUE obj);
4433void rb_check_copyable(VALUE obj, VALUE orig);
4434__attribute__((__noreturn__))
4435static void rb_error_arity(int argc, int min, int max);
4436
4437
4438static inline void
4439rb_check_frozen_inline(VALUE obj)
4440{
4441 if ((__builtin_expect(!!(RB_OBJ_FROZEN(obj)), 0))) {
4442 rb_error_frozen_object(obj);
4443 }
4444}
4445static inline int
4446rb_check_arity(int argc, int min, int max)
4447{
4448 if ((argc < min) || (max != (-1) && argc > max))
4449 rb_error_arity(argc, min, max);
4450 return argc;
4451}
4452
4453
4454__attribute__((__nonnull__ ()))
4455void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg);
4456VALUE rb_check_hash_type(VALUE obj);
4457__attribute__((__nonnull__ ()))
4458void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg);
4459VALUE rb_hash(VALUE obj);
4460VALUE rb_hash_new(void);
4461VALUE rb_hash_new_capa(long capa);
4462VALUE rb_hash_dup(VALUE hash);
4463VALUE rb_hash_freeze(VALUE obj);
4464VALUE rb_hash_aref(VALUE hash, VALUE key);
4465VALUE rb_hash_lookup(VALUE hash, VALUE key);
4466VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def);
4467VALUE rb_hash_fetch(VALUE hash, VALUE key);
4468VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val);
4469VALUE rb_hash_clear(VALUE hash);
4470VALUE rb_hash_delete_if(VALUE hash);
4471VALUE rb_hash_delete(VALUE hash, VALUE key);
4472void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash);
4473typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value);
4474VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func);
4475int rb_path_check(const char *path);
4476VALUE rb_env_clear(void);
4477VALUE rb_hash_size(VALUE hash);
4478
4479
4480
4481
4482VALUE rb_block_proc(void);
4483VALUE rb_block_lambda(void);
4484VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg);
4485VALUE rb_obj_is_proc(VALUE recv);
4486VALUE rb_proc_call(VALUE recv, VALUE args);
4487VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat);
4488VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc);
4489VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat);
4490int rb_proc_arity(VALUE recv);
4491VALUE rb_proc_lambda_p(VALUE recv);
4492VALUE rb_binding_new(void);
4493VALUE rb_obj_method(VALUE recv, VALUE mid);
4494VALUE rb_obj_is_method(VALUE recv);
4495VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv);
4496VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat);
4497VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc);
4498VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat);
4499int rb_mod_method_arity(VALUE mod, ID mid);
4500int rb_obj_method_arity(VALUE obj, ID mid);
4501__attribute__((__nonnull__ (1)))
4502VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state);
4503
4504
4505
4506
4507__attribute__((__nonnull__ (2, 3)))
4508int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...);
4509__attribute__((__nonnull__ (3, 4)))
4510int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...);
4511__attribute__((__error__ ("bad scan arg format")))
4512void rb_scan_args_bad_format(const char*);
4513__attribute__((__error__ ("variable argument length doesn't match")))
4514void rb_scan_args_length_mismatch(const char*,int);
4515
4516
4517static inline _Bool
4518rb_scan_args_keyword_p(int kw_flag, VALUE last)
4519{
4520 switch (kw_flag) {
4521 case 0:
4522 return !! rb_keyword_given_p();
4523 case 1:
4524 return 1;
4525 case 3:
4526 return RB_TYPE_P(last, RUBY_T_HASH);
4527 default:
4528 return 0;
4529 }
4530}
4531__attribute__((__always_inline__)) inline
4532static _Bool
4533rb_scan_args_lead_p(const char *fmt)
4534{
4535 return (((unsigned char)((fmt[0])-'0'))<10);
4536}
4537__attribute__((__always_inline__)) inline
4538static int
4539rb_scan_args_n_lead(const char *fmt)
4540{
4541 return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0);
4542}
4543__attribute__((__always_inline__)) inline
4544static _Bool
4545rb_scan_args_opt_p(const char *fmt)
4546{
4547 return (rb_scan_args_lead_p(fmt) && (((unsigned char)((fmt[1])-'0'))<10));
4548}
4549__attribute__((__always_inline__)) inline
4550static int
4551rb_scan_args_n_opt(const char *fmt)
4552{
4553 return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0);
4554}
4555__attribute__((__always_inline__)) inline
4556static int
4557rb_scan_args_var_idx(const char *fmt)
4558{
4559 return (!rb_scan_args_lead_p(fmt) ? 0 : !(((unsigned char)((fmt[1])-'0'))<10) ? 1 : 2);
4560}
4561__attribute__((__always_inline__)) inline
4562static _Bool
4563rb_scan_args_f_var(const char *fmt)
4564{
4565 return (fmt[rb_scan_args_var_idx(fmt)]=='*');
4566}
4567__attribute__((__always_inline__)) inline
4568static int
4569rb_scan_args_trail_idx(const char *fmt)
4570{
4571 const int idx = rb_scan_args_var_idx(fmt);
4572 return idx+(fmt[idx]=='*');
4573}
4574__attribute__((__always_inline__)) inline
4575static int
4576rb_scan_args_n_trail(const char *fmt)
4577{
4578 const int idx = rb_scan_args_trail_idx(fmt);
4579 return ((((unsigned char)((fmt[idx])-'0'))<10) ? fmt[idx]-'0' : 0);
4580}
4581__attribute__((__always_inline__)) inline
4582static int
4583rb_scan_args_hash_idx(const char *fmt)
4584{
4585 const int idx = rb_scan_args_trail_idx(fmt);
4586 return idx+(((unsigned char)((fmt[idx])-'0'))<10);
4587}
4588__attribute__((__always_inline__)) inline
4589static _Bool
4590rb_scan_args_f_hash(const char *fmt)
4591{
4592 return (fmt[rb_scan_args_hash_idx(fmt)]==':');
4593}
4594__attribute__((__always_inline__)) inline
4595static int
4596rb_scan_args_block_idx(const char *fmt)
4597{
4598 const int idx = rb_scan_args_hash_idx(fmt);
4599 return idx+(fmt[idx]==':');
4600}
4601__attribute__((__always_inline__)) inline
4602static _Bool
4603rb_scan_args_f_block(const char *fmt)
4604{
4605 return (fmt[rb_scan_args_block_idx(fmt)]=='&');
4606}
4607__attribute__((__always_inline__)) inline
4608static int
4609rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
4610 int n_lead, int n_opt, int n_trail,
4611 _Bool f_var, _Bool f_hash, _Bool f_block,
4612 VALUE *vars[], const char *fmt [[maybe_unused]], int varc [[maybe_unused]])
4613
4614
4615{
4616 int i, argi = 0, vari = 0;
4617 VALUE *var, hash = ((VALUE)RUBY_Qnil);
4618 const int n_mand = n_lead + n_trail;
4619 if (f_hash && argc > 0) {
4620 VALUE last = argv[argc - 1];
4621 if (rb_scan_args_keyword_p(kw_flag, last)) {
4622 hash = rb_hash_dup(last);
4623 argc--;
4624 }
4625 }
4626 if (argc < n_mand) {
4627 goto argc_error;
4628 }
4629 for (i = 0; i < n_lead; i++) {
4630 var = vars[vari++];
4631 if (var) *var = argv[argi];
4632 argi++;
4633 }
4634 for (i = 0; i < n_opt; i++) {
4635 var = vars[vari++];
4636 if (argi < argc - n_trail) {
4637 if (var) *var = argv[argi];
4638 argi++;
4639 }
4640 else {
4641 if (var) *var = ((VALUE)RUBY_Qnil);
4642 }
4643 }
4644 if (f_var) {
4645 int n_var = argc - argi - n_trail;
4646 var = vars[vari++];
4647 if (0 < n_var) {
4648 if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
4649 argi += n_var;
4650 }
4651 else {
4652 if (var) *var = rb_ary_new();
4653 }
4654 }
4655 for (i = 0; i < n_trail; i++) {
4656 var = vars[vari++];
4657 if (var) *var = argv[argi];
4658 argi++;
4659 }
4660 if (f_hash) {
4661 var = vars[vari++];
4662 if (var) *var = hash;
4663 }
4664 if (f_block) {
4665 var = vars[vari++];
4666 if (rb_block_given_p()) {
4667 *var = rb_block_proc();
4668 }
4669 else {
4670 *var = ((VALUE)RUBY_Qnil);
4671 }
4672 }
4673 if (argi == argc) {
4674 return argc;
4675 }
4676 argc_error:
4677 rb_error_arity(argc, n_mand, f_var ? (-1) : n_mand + n_opt);
4678 __builtin_unreachable();
4679}
4680
4681
4682ID rb_sym2id(VALUE obj);
4683VALUE rb_id2sym(ID id);
4684__attribute__((__nonnull__ ()))
4685ID rb_intern(const char *name);
4686ID rb_intern2(const char *name, long len);
4687ID rb_intern_str(VALUE str);
4688const char *rb_id2name(ID id);
4689__attribute__((__nonnull__ ()))
4690ID rb_check_id(volatile VALUE *namep);
4691ID rb_to_id(VALUE str);
4692VALUE rb_id2str(ID id);
4693VALUE rb_sym2str(VALUE id);
4694VALUE rb_to_symbol(VALUE name);
4695__attribute__((__nonnull__ ()))
4696VALUE rb_check_symbol(volatile VALUE *namep);
4697
4698
4699__attribute__((__pure__))
4700__attribute__((__nonnull__ ()))
4701static inline ID
4702rb_intern_const(const char *str)
4703{
4704 size_t len = strlen(str);
4705 return rb_intern2(str, ((long)len));
4706}
4707
4708__attribute__((__nonnull__ ()))
4709static inline ID
4710rbimpl_intern_const(ID *ptr, const char *str)
4711{
4712 while (! *ptr) {
4713 *ptr = rb_intern_const(str);
4714 }
4715 return *ptr;
4716}
4717
4718
4719typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);
4720typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data);
4721typedef void rb_gvar_marker_t(VALUE *var);
4722rb_gvar_getter_t rb_gvar_undef_getter;
4723rb_gvar_setter_t rb_gvar_undef_setter;
4724rb_gvar_marker_t rb_gvar_undef_marker;
4725rb_gvar_getter_t rb_gvar_val_getter;
4726rb_gvar_setter_t rb_gvar_val_setter;
4727rb_gvar_marker_t rb_gvar_val_marker;
4728rb_gvar_getter_t rb_gvar_var_getter;
4729rb_gvar_setter_t rb_gvar_var_setter;
4730rb_gvar_marker_t rb_gvar_var_marker;
4731__attribute__((__noreturn__))
4732rb_gvar_setter_t rb_gvar_readonly_setter;
4733__attribute__((__nonnull__ ()))
4734void rb_define_variable(const char *name, VALUE *var);
4735__attribute__((__nonnull__ (1)))
4736void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4737__attribute__((__nonnull__ (1)))
4738void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4739__attribute__((__nonnull__ ()))
4740void rb_define_readonly_variable(const char *name, const VALUE *var);
4741__attribute__((__nonnull__ ()))
4742void rb_define_const(VALUE klass, const char *name, VALUE val);
4743__attribute__((__nonnull__ ()))
4744void rb_define_global_const(const char *name, VALUE val);
4745__attribute__((__nonnull__ ()))
4746void rb_deprecate_constant(VALUE mod, const char *name);
4747__attribute__((__nonnull__ ()))
4748VALUE rb_gv_set(const char *name, VALUE val);
4749__attribute__((__nonnull__ ()))
4750VALUE rb_gv_get(const char *name);
4751__attribute__((__nonnull__ ()))
4752VALUE rb_iv_get(VALUE obj, const char *name);
4753__attribute__((__nonnull__ ()))
4754VALUE rb_iv_set(VALUE obj, const char *name, VALUE val);
4755
4756
4757
4758
4759VALUE rb_get_path(VALUE obj);
4760VALUE rb_get_path_no_checksafe(VALUE);
4761__attribute__((__error__ (" argument length doesn't match"))) int rb_varargs_bad_length(int,int);
4762const char *rb_class2name(VALUE klass);
4763const char *rb_obj_classname(VALUE obj);
4764void rb_p(VALUE obj);
4765VALUE rb_equal(VALUE lhs, VALUE rhs);
4766VALUE rb_require(const char *feature);
4767
4768
4769VALUE rb_big_new(size_t len, int sign);
4770int rb_bigzero_p(VALUE x);
4771VALUE rb_big_clone(VALUE num);
4772void rb_big_2comp(VALUE num);
4773VALUE rb_big_norm(VALUE x);
4774void rb_big_resize(VALUE big, size_t len);
4775__attribute__((__nonnull__ ()))
4776VALUE rb_cstr_to_inum(const char *str, int base, int badcheck);
4777VALUE rb_str_to_inum(VALUE str, int base, int badcheck);
4778__attribute__((__nonnull__ ()))
4779VALUE rb_cstr2inum(const char *str, int base);
4780VALUE rb_str2inum(VALUE str, int base);
4781VALUE rb_big2str(VALUE x, int base);
4782long rb_big2long(VALUE x);
4783unsigned long rb_big2ulong(VALUE x);
4784long long rb_big2ll(VALUE);
4785unsigned long long rb_big2ull(VALUE);
4786__attribute__((__nonnull__ ()))
4787void rb_big_pack(VALUE val, unsigned long *buf, long num_longs);
4788__attribute__((__nonnull__ ()))
4789VALUE rb_big_unpack(unsigned long *buf, long num_longs);
4790__attribute__((__nonnull__ ()))
4791int rb_uv_to_utf8(char buf[6], unsigned long uv);
4792VALUE rb_dbl2big(double d);
4793double rb_big2dbl(VALUE x);
4794VALUE rb_big_cmp(VALUE lhs, VALUE rhs);
4795VALUE rb_big_eq(VALUE lhs, VALUE rhs);
4796VALUE rb_big_eql(VALUE lhs, VALUE rhs);
4797VALUE rb_big_plus(VALUE x, VALUE y);
4798VALUE rb_big_minus(VALUE x, VALUE y);
4799VALUE rb_big_mul(VALUE x, VALUE y);
4800VALUE rb_big_div(VALUE x, VALUE y);
4801VALUE rb_big_idiv(VALUE x, VALUE y);
4802VALUE rb_big_modulo(VALUE x, VALUE y);
4803VALUE rb_big_divmod(VALUE x, VALUE y);
4804VALUE rb_big_pow(VALUE x, VALUE y);
4805VALUE rb_big_and(VALUE x, VALUE y);
4806VALUE rb_big_or(VALUE x, VALUE y);
4807VALUE rb_big_xor(VALUE x, VALUE y);
4808VALUE rb_big_lshift(VALUE x, VALUE y);
4809VALUE rb_big_rshift(VALUE x, VALUE y);
4810__attribute__((__nonnull__ ()))
4811int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4812__attribute__((__nonnull__ ()))
4813VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4814size_t rb_absint_size(VALUE val, int *nlz_bits_ret);
4815size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret);
4816int rb_absint_singlebit_p(VALUE val);
4817
4818
4819
4820
4821int rb_cmpint(VALUE val, VALUE a, VALUE b);
4822__attribute__((__cold__))
4823__attribute__((__noreturn__))
4824void rb_cmperr(VALUE a, VALUE b);
4825
4826
4827
4828
4829VALUE rb_complex_raw(VALUE real, VALUE imag);
4830VALUE rb_complex_new(VALUE real, VALUE imag);
4831VALUE rb_complex_new_polar(VALUE abs, VALUE arg);
4832__attribute__((__deprecated__ ("by: rb_complex_new_polar")))
4833VALUE rb_complex_polar(VALUE abs, VALUE arg);
4834__attribute__((__pure__))
4835VALUE rb_complex_real(VALUE z);
4836__attribute__((__pure__))
4837VALUE rb_complex_imag(VALUE z);
4838VALUE rb_complex_plus(VALUE x, VALUE y);
4839VALUE rb_complex_minus(VALUE x, VALUE y);
4840VALUE rb_complex_mul(VALUE x, VALUE y);
4841VALUE rb_complex_div(VALUE x, VALUE y);
4842VALUE rb_complex_uminus(VALUE z);
4843VALUE rb_complex_conjugate(VALUE z);
4844VALUE rb_complex_abs(VALUE z);
4845VALUE rb_complex_arg(VALUE z);
4846VALUE rb_complex_pow(VALUE base, VALUE exp);
4847VALUE rb_dbl_complex_new(double real, double imag);
4848VALUE rb_Complex(VALUE real, VALUE imag);
4849
4850
4851
4852
4853VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj);
4854VALUE rb_fiber_new_storage(rb_block_call_func_t func, VALUE callback_obj, VALUE storage);
4855VALUE rb_fiber_current(void);
4856VALUE rb_fiber_alive_p(VALUE fiber);
4857VALUE rb_obj_is_fiber(VALUE obj);
4858VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv);
4859VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4860VALUE rb_fiber_yield(int argc, const VALUE *argv);
4861VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat);
4862VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv);
4863VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4864VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv);
4865
4866
4867
4868
4869VALUE rb_dir_getwd(void);
4870
4871
4872
4873
4874VALUE rb_enum_values_pack(int argc, const VALUE *argv);
4875
4876
4877
4878
4879__attribute__((__noreturn__))
4880void rb_exc_raise(VALUE exc);
4881__attribute__((__noreturn__))
4882void rb_exc_fatal(VALUE exc);
4883__attribute__((__noreturn__))
4884VALUE rb_f_exit(int argc, const VALUE *argv);
4885__attribute__((__noreturn__))
4886VALUE rb_f_abort(int argc, const VALUE *argv);
4887__attribute__((__noreturn__))
4888void rb_interrupt(void);
4889ID rb_frame_this_func(void);
4890__attribute__((__noreturn__))
4891void rb_jump_tag(int state);
4892void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv);
4893void rb_obj_call_init_kw(VALUE, int, const VALUE*, int);
4894ID rb_frame_callee(void);
4895VALUE rb_make_exception(int argc, const VALUE *argv);
4896void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg);
4897
4898
4899
4900
4901typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj);
4902typedef struct {
4903 VALUE begin;
4904 VALUE end;
4905 VALUE step;
4906 int exclude_end;
4907} rb_arithmetic_sequence_components_t;
4908VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv);
4909VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func);
4910VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat);
4911__attribute__((__nonnull__ ()))
4912int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf);
4913__attribute__((__nonnull__ ()))
4914VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err);
4915
4916
4917
4918
4919__attribute__((__nonnull__ ()))
4920VALUE rb_file_s_expand_path(int argc, const VALUE *argv);
4921VALUE rb_file_expand_path(VALUE fname, VALUE dname);
4922__attribute__((__nonnull__ ()))
4923VALUE rb_file_s_absolute_path(int argc, const VALUE *argv);
4924VALUE rb_file_absolute_path(VALUE fname, VALUE dname);
4925VALUE rb_file_dirname(VALUE fname);
4926__attribute__((__nonnull__ ()))
4927int rb_find_file_ext(VALUE *feature, const char *const *exts);
4928VALUE rb_find_file(VALUE path);
4929VALUE rb_file_directory_p(VALUE _, VALUE path);
4930VALUE rb_str_encode_ospath(VALUE path);
4931__attribute__((__nonnull__ ()))
4932__attribute__((__pure__))
4933int rb_is_absolute_path(const char *path);
4934off_t rb_file_size(VALUE file);
4935
4936
4937
4938
4939__attribute__((__cold__))
4940__attribute__((__noreturn__))
4941void rb_memerror(void);
4942__attribute__((__pure__))
4943int rb_during_gc(void);
4944__attribute__((__nonnull__ (1)))
4945void rb_gc_mark_locations(const VALUE *start, const VALUE *end);
4946void rb_mark_tbl(struct st_table *tbl);
4947void rb_mark_tbl_no_pin(struct st_table *tbl);
4948void rb_mark_set(struct st_table *tbl);
4949void rb_mark_hash(struct st_table *tbl);
4950void rb_gc_update_tbl_refs(st_table *ptr);
4951void rb_gc_mark_maybe(VALUE obj);
4952void rb_gc_mark(VALUE obj);
4953void rb_gc_mark_movable(VALUE obj);
4954VALUE rb_gc_location(VALUE obj);
4955__attribute__((__deprecated__ ("this is now a no-op function")))
4956void rb_gc_force_recycle(VALUE obj);
4957void rb_gc(void);
4958void rb_gc_copy_finalizer(VALUE dst, VALUE src);
4959VALUE rb_gc_enable(void);
4960VALUE rb_gc_disable(void);
4961VALUE rb_gc_start(void);
4962VALUE rb_define_finalizer(VALUE obj, VALUE block);
4963VALUE rb_undefine_finalizer(VALUE obj);
4964size_t rb_gc_count(void);
4965size_t rb_gc_stat(VALUE key_or_buf);
4966VALUE rb_gc_latest_gc_info(VALUE key_or_buf);
4967void rb_gc_adjust_memory_usage(ssize_t diff);
4968
4969
4970
4971
4972extern VALUE rb_fs;
4973extern VALUE rb_output_fs;
4974extern VALUE rb_rs;
4975extern VALUE rb_default_rs;
4976extern VALUE rb_output_rs;
4977VALUE rb_io_write(VALUE io, VALUE str);
4978VALUE rb_io_gets(VALUE io);
4979VALUE rb_io_getbyte(VALUE io);
4980VALUE rb_io_ungetc(VALUE io, VALUE c);
4981VALUE rb_io_ungetbyte(VALUE io, VALUE b);
4982VALUE rb_io_close(VALUE io);
4983VALUE rb_io_flush(VALUE io);
4984VALUE rb_io_eof(VALUE io);
4985VALUE rb_io_binmode(VALUE io);
4986VALUE rb_io_ascii8bit_binmode(VALUE io);
4987VALUE rb_io_addstr(VALUE io, VALUE str);
4988VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io);
4989VALUE rb_io_print(int argc, const VALUE *argv, VALUE io);
4990VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io);
4991VALUE rb_io_fdopen(int fd, int flags, const char *path);
4992__attribute__((__nonnull__ ()))
4993VALUE rb_file_open(const char *fname, const char *fmode);
4994__attribute__((__nonnull__ ()))
4995VALUE rb_file_open_str(VALUE fname, const char *fmode);
4996VALUE rb_gets(void);
4997__attribute__((__nonnull__ ()))
4998void rb_write_error(const char *str);
4999void rb_write_error2(const char *str, long len);
5000void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
5001__attribute__((__nonnull__ ()))
5002int rb_pipe(int *pipes);
5003int rb_reserved_fd_p(int fd);
5004int rb_cloexec_open(const char *pathname, int flags, mode_t mode);
5005int rb_cloexec_dup(int oldfd);
5006int rb_cloexec_dup2(int oldfd, int newfd);
5007__attribute__((__nonnull__ ()))
5008int rb_cloexec_pipe(int fildes[2]);
5009int rb_cloexec_fcntl_dupfd(int fd, int minfd);
5010void rb_update_max_fd(int fd);
5011void rb_fd_fix_cloexec(int fd);
5012
5013
5014
5015
5016void rb_load(VALUE path, int wrap);
5017void rb_load_protect(VALUE path, int wrap, int *state);
5018__attribute__((__nonnull__ ()))
5019int rb_provided(const char *feature);
5020__attribute__((__nonnull__ (1)))
5021int rb_feature_provided(const char *feature, const char **loading);
5022__attribute__((__nonnull__ ()))
5023void rb_provide(const char *feature);
5024VALUE rb_f_require(VALUE self, VALUE feature);
5025VALUE rb_require_string(VALUE feature);
5026void rb_ext_ractor_safe(_Bool flag);
5027
5028
5029
5030
5031VALUE rb_marshal_dump(VALUE obj, VALUE port);
5032VALUE rb_marshal_load(VALUE port);
5033void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));
5034
5035
5036
5037
5038__attribute__((__noreturn__))
5039__attribute__((__cold__))
5040void rb_num_zerodiv(void);
5041VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op);
5042VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op);
5043VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op);
5044VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op);
5045VALUE rb_num2fix(VALUE val);
5046VALUE rb_fix2str(VALUE val, int base);
5047__attribute__((__const__))
5048VALUE rb_dbl_cmp(double lhs, double rhs);
5049extern VALUE rb_int_positive_pow(long x, unsigned long y);
5050
5051
5052
5053
5054VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);
5055VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);
5056VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);
5057int rb_eql(VALUE lhs, VALUE rhs);
5058VALUE rb_any_to_s(VALUE obj);
5059VALUE rb_inspect(VALUE obj);
5060VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);
5061VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);
5062VALUE rb_obj_alloc(VALUE klass);
5063VALUE rb_obj_clone(VALUE obj);
5064VALUE rb_obj_dup(VALUE obj);
5065VALUE rb_obj_init_copy(VALUE src, VALUE dst);
5066VALUE rb_obj_freeze(VALUE obj);
5067__attribute__((__pure__))
5068VALUE rb_obj_frozen_p(VALUE obj);
5069VALUE rb_obj_id(VALUE obj);
5070__attribute__((__const__))
5071VALUE rb_memory_id(VALUE obj);
5072__attribute__((__pure__))
5073VALUE rb_class_real(VALUE klass);
5074__attribute__((__pure__))
5075VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant);
5076__attribute__((__pure__))
5077VALUE rb_class_superclass(VALUE klass);
5078__attribute__((__nonnull__ ()))
5079VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid);
5080__attribute__((__nonnull__ ()))
5081VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid);
5082__attribute__((__nonnull__ ()))
5083VALUE rb_check_to_integer(VALUE val, const char *mid);
5084VALUE rb_check_to_float(VALUE val);
5085VALUE rb_to_int(VALUE val);
5086VALUE rb_check_to_int(VALUE val);
5087VALUE rb_Integer(VALUE val);
5088VALUE rb_to_float(VALUE val);
5089VALUE rb_Float(VALUE val);
5090VALUE rb_String(VALUE val);
5091VALUE rb_Array(VALUE val);
5092VALUE rb_Hash(VALUE val);
5093__attribute__((__nonnull__ ()))
5094double rb_cstr_to_dbl(const char *str, int mode);
5095double rb_str_to_dbl(VALUE str, int mode);
5096
5097
5098
5099
5100ID rb_id_attrset(ID id);
5101__attribute__((__const__))
5102int rb_is_const_id(ID id);
5103__attribute__((__const__))
5104int rb_is_global_id(ID id);
5105__attribute__((__const__))
5106int rb_is_instance_id(ID id);
5107__attribute__((__const__))
5108int rb_is_attrset_id(ID id);
5109__attribute__((__const__))
5110int rb_is_class_id(ID id);
5111__attribute__((__const__))
5112int rb_is_local_id(ID id);
5113__attribute__((__const__))
5114int rb_is_junk_id(ID);
5115__attribute__((__nonnull__ ()))
5116int rb_symname_p(const char *str);
5117VALUE rb_backref_get(void);
5118void rb_backref_set(VALUE md);
5119VALUE rb_lastline_get(void);
5120void rb_lastline_set(VALUE str);
5121VALUE rb_sym_all_symbols(void);
5122
5123
5124
5125
5126void rb_last_status_set(int status, pid_t pid);
5127VALUE rb_last_status_get(void);
5128__attribute__((__nonnull__ ()))
5129int rb_proc_exec(const char *cmd);
5130__attribute__((__noreturn__))
5131VALUE rb_f_exec(int argc, const VALUE *argv);
5132pid_t rb_waitpid(pid_t pid, int *status, int flags);
5133void rb_syswait(pid_t pid);
5134pid_t rb_spawn(int argc, const VALUE *argv);
5135pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen);
5136VALUE rb_proc_times(VALUE _);
5137VALUE rb_detach_process(pid_t pid);
5138
5139
5140
5141
5142unsigned int rb_genrand_int32(void);
5143double rb_genrand_real(void);
5144void rb_reset_random_seed(void);
5145VALUE rb_random_bytes(VALUE rnd, long n);
5146unsigned int rb_random_int32(VALUE rnd);
5147double rb_random_real(VALUE rnd);
5148unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit);
5149unsigned long rb_genrand_ulong_limited(unsigned long i);
5150
5151
5152
5153
5154VALUE rb_range_new(VALUE beg, VALUE end, int excl);
5155__attribute__((__nonnull__ ()))
5156VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err);
5157__attribute__((__nonnull__ ()))
5158int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp);
5159
5160
5161
5162
5163VALUE rb_rational_raw(VALUE num, VALUE den);
5164VALUE rb_rational_new(VALUE num, VALUE den);
5165VALUE rb_Rational(VALUE num, VALUE den);
5166__attribute__((__pure__))
5167VALUE rb_rational_num(VALUE rat);
5168__attribute__((__pure__))
5169VALUE rb_rational_den(VALUE rat);
5170VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec);
5171VALUE rb_flt_rationalize(VALUE flt);
5172
5173
5174
5175
5176int rb_memcicmp(const void *s1,const void *s2, long n);
5177void rb_match_busy(VALUE md);
5178VALUE rb_reg_nth_defined(int n, VALUE md);
5179VALUE rb_reg_nth_match(int n, VALUE md);
5180int rb_reg_backref_number(VALUE match, VALUE backref);
5181VALUE rb_reg_last_match(VALUE md);
5182VALUE rb_reg_match_pre(VALUE md);
5183VALUE rb_reg_match_post(VALUE md);
5184VALUE rb_reg_match_last(VALUE md);
5185VALUE rb_reg_new_str(VALUE src, int opts);
5186__attribute__((__nonnull__ ()))
5187VALUE rb_reg_new(const char *src, long len, int opts);
5188VALUE rb_reg_alloc(void);
5189VALUE rb_reg_init_str(VALUE re, VALUE s, int options);
5190VALUE rb_reg_match(VALUE re, VALUE str);
5191VALUE rb_reg_match2(VALUE re);
5192int rb_reg_options(VALUE re);
5193
5194
5195
5196
5197extern VALUE rb_argv0;
5198VALUE rb_get_argv(void);
5199__attribute__((__nonnull__ ()))
5200void *rb_load_file(const char *file);
5201void *rb_load_file_str(VALUE file);
5202
5203
5204struct timeval;
5205typedef struct {
5206 int maxfd;
5207 fd_set *fdset;
5208} rb_fdset_t;
5209
5210
5211__attribute__((__nonnull__ ()))
5212void rb_fd_init(rb_fdset_t *f);
5213__attribute__((__nonnull__ ()))
5214void rb_fd_term(rb_fdset_t *f);
5215__attribute__((__nonnull__ ()))
5216void rb_fd_zero(rb_fdset_t *f);
5217__attribute__((__nonnull__ ()))
5218void rb_fd_set(int fd, rb_fdset_t *f);
5219__attribute__((__nonnull__ ()))
5220void rb_fd_clr(int fd, rb_fdset_t *f);
5221__attribute__((__nonnull__ ()))
5222__attribute__((__pure__))
5223int rb_fd_isset(int fd, const rb_fdset_t *f);
5224void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max);
5225void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
5226int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5227
5228
5229__attribute__((__nonnull__ ()))
5230__attribute__((__pure__))
5231static inline fd_set *
5232rb_fd_ptr(const rb_fdset_t *f)
5233{
5234 return f->fdset;
5235}
5236__attribute__((__nonnull__ ()))
5237__attribute__((__pure__))
5238static inline int
5239rb_fd_max(const rb_fdset_t *f)
5240{
5241 return f->maxfd;
5242}
5243
5244
5245struct timeval;
5246int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5247
5248
5249
5250
5251__attribute__((__nonnull__ ()))
5252VALUE rb_f_kill(int argc, const VALUE *argv);
5253void (*ruby_posix_signal(int, void (*)(int)))(int);
5254__attribute__((__pure__))
5255const char *ruby_signal_name(int signo);
5256void ruby_default_signal(int sig);
5257
5258
5259
5260
5261VALUE rb_f_sprintf(int argc, const VALUE *argv);
5262__attribute__((__nonnull__ (1)))
5263__attribute__((__format__(__printf__, 1, 2)))
5264VALUE rb_sprintf(const char *fmt, ...);
5265__attribute__((__nonnull__ (1)))
5266__attribute__((__format__(__printf__, 1, 0)))
5267VALUE rb_vsprintf(const char *fmt, va_list ap);
5268__attribute__((__nonnull__ (2)))
5269__attribute__((__format__(__printf__, 2, 3)))
5270VALUE rb_str_catf(VALUE dst, const char *fmt, ...);
5271__attribute__((__nonnull__ (2)))
5272__attribute__((__format__(__printf__, 2, 0)))
5273VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap);
5274VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt);
5275
5276
5277
5278
5279VALUE rb_str_new(const char *ptr, long len);
5280VALUE rb_str_new_cstr(const char *ptr);
5281VALUE rb_str_new_shared(VALUE str);
5282VALUE rb_str_new_frozen(VALUE str);
5283VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);
5284VALUE rb_external_str_new(const char *ptr, long len);
5285__attribute__((__nonnull__ ()))
5286VALUE rb_external_str_new_cstr(const char *ptr);
5287VALUE rb_locale_str_new(const char *ptr, long len);
5288__attribute__((__nonnull__ ()))
5289VALUE rb_locale_str_new_cstr(const char *ptr);
5290VALUE rb_filesystem_str_new(const char *ptr, long len);
5291__attribute__((__nonnull__ ()))
5292VALUE rb_filesystem_str_new_cstr(const char *ptr);
5293VALUE rb_str_buf_new(long capa);
5294__attribute__((__nonnull__ ()))
5295VALUE rb_str_buf_new_cstr(const char *ptr);
5296VALUE rb_str_tmp_new(long len);
5297VALUE rb_usascii_str_new(const char *ptr, long len);
5298VALUE rb_usascii_str_new_cstr(const char *ptr);
5299VALUE rb_utf8_str_new(const char *ptr, long len);
5300VALUE rb_utf8_str_new_cstr(const char *ptr);
5301VALUE rb_str_new_static(const char *ptr, long len);
5302VALUE rb_usascii_str_new_static(const char *ptr, long len);
5303VALUE rb_utf8_str_new_static(const char *ptr, long len);
5304VALUE rb_str_to_interned_str(VALUE str);
5305VALUE rb_interned_str(const char *ptr, long len);
5306__attribute__((__nonnull__ ()))
5307VALUE rb_interned_str_cstr(const char *ptr);
5308void rb_str_free(VALUE str);
5309void rb_str_shared_replace(VALUE dst, VALUE src);
5310VALUE rb_str_buf_append(VALUE dst, VALUE src);
5311VALUE rb_str_buf_cat(VALUE, const char*, long);
5312VALUE rb_str_buf_cat2(VALUE, const char*);
5313__attribute__((__nonnull__ ()))
5314VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src);
5315VALUE rb_obj_as_string(VALUE obj);
5316VALUE rb_check_string_type(VALUE obj);
5317void rb_must_asciicompat(VALUE obj);
5318VALUE rb_str_dup(VALUE str);
5319VALUE rb_str_resurrect(VALUE str);
5320VALUE rb_str_locktmp(VALUE str);
5321VALUE rb_str_unlocktmp(VALUE str);
5322VALUE rb_str_dup_frozen(VALUE);
5323VALUE rb_str_plus(VALUE lhs, VALUE rhs);
5324VALUE rb_str_times(VALUE str, VALUE num);
5325long rb_str_sublen(VALUE str, long pos);
5326VALUE rb_str_substr(VALUE str, long beg, long len);
5327VALUE rb_str_subseq(VALUE str, long beg, long len);
5328char *rb_str_subpos(VALUE str, long beg, long *len);
5329void rb_str_modify(VALUE str);
5330void rb_str_modify_expand(VALUE str, long capa);
5331VALUE rb_str_freeze(VALUE str);
5332void rb_str_set_len(VALUE str, long len);
5333VALUE rb_str_resize(VALUE str, long len);
5334VALUE rb_str_cat(VALUE dst, const char *src, long srclen);
5335VALUE rb_str_cat_cstr(VALUE dst, const char *src);
5336VALUE rb_str_cat2(VALUE, const char*);
5337VALUE rb_str_append(VALUE dst, VALUE src);
5338VALUE rb_str_concat(VALUE dst, VALUE src);
5339st_index_t rb_memhash(const void *ptr, long len);
5340st_index_t rb_hash_start(st_index_t i);
5341st_index_t rb_str_hash(VALUE str);
5342int rb_str_hash_cmp(VALUE str1, VALUE str2);
5343int rb_str_comparable(VALUE str1, VALUE str2);
5344int rb_str_cmp(VALUE lhs, VALUE rhs);
5345VALUE rb_str_equal(VALUE str1, VALUE str2);
5346VALUE rb_str_drop_bytes(VALUE str, long len);
5347void rb_str_update(VALUE dst, long beg, long len, VALUE src);
5348VALUE rb_str_replace(VALUE dst, VALUE src);
5349VALUE rb_str_inspect(VALUE str);
5350VALUE rb_str_dump(VALUE str);
5351VALUE rb_str_split(VALUE str, const char *delim);
5352rb_gvar_setter_t rb_str_setter;
5353VALUE rb_str_intern(VALUE str);
5354VALUE rb_sym_to_s(VALUE sym);
5355long rb_str_strlen(VALUE str);
5356VALUE rb_str_length(VALUE);
5357long rb_str_offset(VALUE str, long pos);
5358__attribute__((__pure__))
5359size_t rb_str_capacity(VALUE str);
5360VALUE rb_str_ellipsize(VALUE str, long len);
5361VALUE rb_str_scrub(VALUE str, VALUE repl);
5362VALUE rb_str_succ(VALUE orig);
5363__attribute__((__nonnull__ ()))
5364static inline long
5365rbimpl_strlen(const char *str)
5366{
5367 return ((long)strlen(str));
5368}
5369__attribute__((__nonnull__ ()))
5370static inline VALUE
5371rbimpl_str_new_cstr(const char *str)
5372{
5373 long len = rbimpl_strlen(str);
5374 return rb_str_new_static(str, len);
5375}
5376__attribute__((__nonnull__ ()))
5377static inline VALUE
5378rbimpl_usascii_str_new_cstr(const char *str)
5379{
5380 long len = rbimpl_strlen(str);
5381 return rb_usascii_str_new_static(str, len);
5382}
5383__attribute__((__nonnull__ ()))
5384static inline VALUE
5385rbimpl_utf8_str_new_cstr(const char *str)
5386{
5387 long len = rbimpl_strlen(str);
5388 return rb_utf8_str_new_static(str, len);
5389}
5390__attribute__((__nonnull__ ()))
5391static inline VALUE
5392rbimpl_external_str_new_cstr(const char *str)
5393{
5394 long len = rbimpl_strlen(str);
5395 return rb_external_str_new(str, len);
5396}
5397__attribute__((__nonnull__ ()))
5398static inline VALUE
5399rbimpl_locale_str_new_cstr(const char *str)
5400{
5401 long len = rbimpl_strlen(str);
5402 return rb_locale_str_new(str, len);
5403}
5404__attribute__((__nonnull__ ()))
5405static inline VALUE
5406rbimpl_str_buf_new_cstr(const char *str)
5407{
5408 long len = rbimpl_strlen(str);
5409 VALUE buf = rb_str_buf_new(len);
5410 return rb_str_buf_cat(buf, str, len);
5411}
5412__attribute__((__nonnull__ ()))
5413static inline VALUE
5414rbimpl_str_cat_cstr(VALUE buf, const char *str)
5415{
5416 long len = rbimpl_strlen(str);
5417 return rb_str_cat(buf, str, len);
5418}
5419__attribute__((__nonnull__ ()))
5420static inline VALUE
5421rbimpl_exc_new_cstr(VALUE exc, const char *str)
5422{
5423 long len = rbimpl_strlen(str);
5424 return rb_exc_new(exc, str, len);
5425}
5426
5427
5428
5429
5430VALUE rb_struct_new(VALUE klass, ...);
5431VALUE rb_struct_define(const char *name, ...);
5432__attribute__((__nonnull__ (2)))
5433VALUE rb_struct_define_under(VALUE space, const char *name, ...);
5434VALUE rb_struct_alloc(VALUE klass, VALUE values);
5435VALUE rb_struct_initialize(VALUE self, VALUE values);
5436VALUE rb_struct_getmember(VALUE self, ID key);
5437VALUE rb_struct_s_members(VALUE klass);
5438VALUE rb_struct_members(VALUE self);
5439VALUE rb_struct_alloc_noinit(VALUE klass);
5440VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...);
5441__attribute__((__nonnull__ (2)))
5442VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...);
5443
5444
5445
5446
5447struct timeval;
5448void rb_thread_schedule(void);
5449int rb_thread_wait_fd(int fd);
5450int rb_thread_fd_writable(int fd);
5451void rb_thread_fd_close(int fd);
5452int rb_thread_alone(void);
5453void rb_thread_sleep(int sec);
5454void rb_thread_sleep_forever(void);
5455void rb_thread_sleep_deadly(void);
5456VALUE rb_thread_stop(void);
5457VALUE rb_thread_wakeup(VALUE thread);
5458VALUE rb_thread_wakeup_alive(VALUE thread);
5459VALUE rb_thread_run(VALUE thread);
5460VALUE rb_thread_kill(VALUE thread);
5461__attribute__((__nonnull__ (1)))
5462VALUE rb_thread_create(VALUE (*f)(void *g), void *g);
5463void rb_thread_wait_for(struct timeval time);
5464VALUE rb_thread_current(void);
5465VALUE rb_thread_main(void);
5466VALUE rb_thread_local_aref(VALUE thread, ID key);
5467VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val);
5468void rb_thread_atfork(void);
5469void rb_thread_atfork_before_exec(void);
5470VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5471VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5472VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5473VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5474typedef void rb_unblock_function_t(void *);
5475typedef VALUE rb_blocking_function_t(void *);
5476void rb_thread_check_ints(void);
5477int rb_thread_interrupted(VALUE thval);
5478VALUE rb_mutex_new(void);
5479VALUE rb_mutex_locked_p(VALUE mutex);
5480VALUE rb_mutex_trylock(VALUE mutex);
5481VALUE rb_mutex_lock(VALUE mutex);
5482VALUE rb_mutex_unlock(VALUE mutex);
5483VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
5484VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
5485
5486
5487
5488
5489struct timespec;
5490struct timeval;
5491__attribute__((__nonnull__ ()))
5492void rb_timespec_now(struct timespec *ts);
5493VALUE rb_time_new(time_t sec, long usec);
5494VALUE rb_time_nano_new(time_t sec, long nsec);
5495__attribute__((__nonnull__ ()))
5496VALUE rb_time_timespec_new(const struct timespec *ts, int offset);
5497VALUE rb_time_num_new(VALUE timev, VALUE off);
5498struct timeval rb_time_interval(VALUE num);
5499struct timeval rb_time_timeval(VALUE time);
5500struct timespec rb_time_timespec(VALUE time);
5501struct timespec rb_time_timespec_interval(VALUE num);
5502VALUE rb_time_utc_offset(VALUE time);
5503
5504
5505
5506
5507VALUE rb_mod_name(VALUE mod);
5508VALUE rb_class_path(VALUE mod);
5509VALUE rb_class_path_cached(VALUE mod);
5510__attribute__((__nonnull__ ()))
5511void rb_set_class_path(VALUE klass, VALUE space, const char *name);
5512void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);
5513VALUE rb_path_to_class(VALUE path);
5514__attribute__((__nonnull__ ()))
5515VALUE rb_path2class(const char *path);
5516VALUE rb_class_name(VALUE obj);
5517VALUE rb_autoload_load(VALUE space, ID name);
5518VALUE rb_autoload_p(VALUE space, ID name);
5519VALUE rb_f_trace_var(int argc, const VALUE *argv);
5520VALUE rb_f_untrace_var(int argc, const VALUE *argv);
5521VALUE rb_f_global_variables(void);
5522void rb_alias_variable(ID dst, ID src);
5523void rb_free_generic_ivar(VALUE obj);
5524VALUE rb_ivar_get(VALUE obj, ID name);
5525VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);
5526VALUE rb_ivar_defined(VALUE obj, ID name);
5527void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);
5528st_index_t rb_ivar_count(VALUE obj);
5529VALUE rb_attr_get(VALUE obj, ID name);
5530VALUE rb_obj_instance_variables(VALUE obj);
5531VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name);
5532void *rb_mod_const_at(VALUE, void*);
5533void *rb_mod_const_of(VALUE, void*);
5534VALUE rb_const_list(void*);
5535VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv);
5536VALUE rb_mod_remove_const(VALUE space, VALUE name);
5537int rb_const_defined(VALUE space, ID name);
5538int rb_const_defined_at(VALUE space, ID name);
5539int rb_const_defined_from(VALUE space, ID name);
5540VALUE rb_const_get(VALUE space, ID name);
5541VALUE rb_const_get_at(VALUE space, ID name);
5542VALUE rb_const_get_from(VALUE space, ID name);
5543void rb_const_set(VALUE space, ID name, VALUE val);
5544VALUE rb_const_remove(VALUE space, ID name);
5545VALUE rb_cvar_defined(VALUE klass, ID name);
5546void rb_cvar_set(VALUE klass, ID name, VALUE val);
5547VALUE rb_cvar_get(VALUE klass, ID name);
5548__attribute__((__nonnull__ ()))
5549VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front);
5550__attribute__((__nonnull__ ()))
5551void rb_cv_set(VALUE klass, const char *name, VALUE val);
5552__attribute__((__nonnull__ ()))
5553VALUE rb_cv_get(VALUE klass, const char *name);
5554__attribute__((__nonnull__ ()))
5555void rb_define_class_variable(VALUE, const char*, VALUE);
5556VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv);
5557VALUE rb_mod_remove_cvar(VALUE mod, VALUE name);
5558
5559
5560int ruby_native_thread_p(void);
5561__attribute__((__nonnull__ (3)))
5562__attribute__((__format__(__printf__, 3, 4)))
5563int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
5564__attribute__((__nonnull__ (3)))
5565__attribute__((__format__(__printf__, 3, 0)))
5566int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
5567
5568
5569
5570typedef long jmp_buf[32];
5571
5572typedef long sigjmp_buf[32 +1+((sizeof (long) + sizeof (sigset_t) - 1)
5573 /sizeof (long))];
5574extern void siglongjmp (sigjmp_buf, int) __attribute__ ((__noreturn__));
5575extern int sigsetjmp (sigjmp_buf, int);
5576extern void _longjmp (jmp_buf, int) __attribute__ ((__noreturn__));
5577extern int _setjmp (jmp_buf);
5578
5579void longjmp (jmp_buf __jmpb, int __retval)
5580 __attribute__ ((__noreturn__));
5581int setjmp (jmp_buf __jmpb);
5582
5583void __assert (const char *, int, const char *)
5584 __attribute__ ((__noreturn__));
5585void __assert_func (const char *, int, const char *, const char *)
5586 __attribute__ ((__noreturn__));
5587static inline char *container_of_or_null_(void *member_ptr, size_t offset)
5588{
5589 return member_ptr ? (char *)member_ptr - offset : ((void *)0);
5590}
5591struct ccan_list_node
5592{
5593 struct ccan_list_node *next, *prev;
5594};
5595struct ccan_list_head
5596{
5597 struct ccan_list_node n;
5598};
5599static inline void ccan_list_head_init(struct ccan_list_head *h)
5600{
5601 h->n.next = h->n.prev = &h->n;
5602}
5603static inline void ccan_list_node_init(struct ccan_list_node *n)
5604{
5605 n->next = n->prev = n;
5606}
5607static inline void ccan_list_add_after_(struct ccan_list_head *h,
5608 struct ccan_list_node *p,
5609 struct ccan_list_node *n,
5610 const char *abortstr)
5611{
5612 n->next = p->next;
5613 n->prev = p;
5614 p->next->prev = n;
5615 p->next = n;
5616 (void)((void)abortstr, h);
5617}
5618static inline void ccan_list_add_(struct ccan_list_head *h,
5619 struct ccan_list_node *n,
5620 const char *abortstr)
5621{
5622 ccan_list_add_after_(h, &h->n, n, abortstr);
5623}
5624static inline void ccan_list_add_before_(struct ccan_list_head *h,
5625 struct ccan_list_node *p,
5626 struct ccan_list_node *n,
5627 const char *abortstr)
5628{
5629 n->next = p;
5630 n->prev = p->prev;
5631 p->prev->next = n;
5632 p->prev = n;
5633 (void)((void)abortstr, h);
5634}
5635static inline void ccan_list_add_tail_(struct ccan_list_head *h,
5636 struct ccan_list_node *n,
5637 const char *abortstr)
5638{
5639 ccan_list_add_before_(h, &h->n, n, abortstr);
5640}
5641static inline int ccan_list_empty_(const struct ccan_list_head *h, const char* abortstr)
5642{
5643 (void)((void)abortstr, h);
5644 return h->n.next == &h->n;
5645}
5646static inline _Bool ccan_list_empty_nocheck(const struct ccan_list_head *h)
5647{
5648 return h->n.next == &h->n;
5649}
5650static inline void ccan_list_del_(struct ccan_list_node *n, const char* abortstr)
5651{
5652 (void)((void)abortstr, n);
5653 n->next->prev = n->prev;
5654 n->prev->next = n->next;
5655}
5656static inline void ccan_list_del_init_(struct ccan_list_node *n, const char *abortstr)
5657{
5658 ccan_list_del_(n, abortstr);
5659 ccan_list_node_init(n);
5660}
5661static inline void ccan_list_del_from(struct ccan_list_head *h, struct ccan_list_node *n)
5662{
5663 ((void)0);
5664 ccan_list_del_(n, "../ruby-3.2.1/ccan/list/list.h" ":" "329");
5665}
5666static inline void ccan_list_swap_(struct ccan_list_node *o,
5667 struct ccan_list_node *n,
5668 const char* abortstr)
5669{
5670 (void)((void)abortstr, o);
5671 *n = *o;
5672 n->next->prev = n;
5673 n->prev->next = n;
5674}
5675static inline const void *ccan_list_top_(const struct ccan_list_head *h, size_t off)
5676{
5677 if (ccan_list_empty_(h, "../ruby-3.2.1/ccan/list/list.h" ":" "399"))
5678 return ((void *)0);
5679 return (const char *)h->n.next - off;
5680}
5681static inline const void *ccan_list_pop_(const struct ccan_list_head *h, size_t off)
5682{
5683 struct ccan_list_node *n;
5684 if (ccan_list_empty_(h, "../ruby-3.2.1/ccan/list/list.h" ":" "425"))
5685 return ((void *)0);
5686 n = h->n.next;
5687 ccan_list_del_(n, "../ruby-3.2.1/ccan/list/list.h" ":" "428");
5688 return (const char *)n - off;
5689}
5690static inline const void *ccan_list_tail_(const struct ccan_list_head *h, size_t off)
5691{
5692 if (ccan_list_empty_(h, "../ruby-3.2.1/ccan/list/list.h" ":" "451"))
5693 return ((void *)0);
5694 return (const char *)h->n.prev - off;
5695}
5696static inline void ccan_list_append_list_(struct ccan_list_head *to,
5697 struct ccan_list_head *from,
5698 const char *abortstr)
5699{
5700 struct ccan_list_node *from_tail = ((void)abortstr, from)->n.prev;
5701 struct ccan_list_node *to_tail = ((void)abortstr, to)->n.prev;
5702 to->n.prev = from_tail;
5703 from_tail->next = &to->n;
5704 to_tail->next = &from->n;
5705 from->n.prev = to_tail;
5706 ccan_list_del_(&from->n, "../ruby-3.2.1/ccan/list/list.h" ":" "600");
5707 ccan_list_head_init(from);
5708}
5709static inline void ccan_list_prepend_list_(struct ccan_list_head *to,
5710 struct ccan_list_head *from,
5711 const char *abortstr)
5712{
5713 struct ccan_list_node *from_tail = ((void)abortstr, from)->n.prev;
5714 struct ccan_list_node *to_head = ((void)abortstr, to)->n.next;
5715 to->n.next = &from->n;
5716 from->n.prev = &to->n;
5717 to_head->prev = from_tail;
5718 from_tail->next = to_head;
5719 ccan_list_del_(&from->n, "../ruby-3.2.1/ccan/list/list.h" ":" "632");
5720 ccan_list_head_init(from);
5721}
5722static inline void *ccan_list_node_to_off_(struct ccan_list_node *node, size_t off)
5723{
5724 return (void *)((char *)node - off);
5725}
5726static inline struct ccan_list_node *ccan_list_node_from_off_(void *ptr, size_t off)
5727{
5728 return (struct ccan_list_node *)((char *)ptr + off);
5729}
5730static inline void *ccan_list_entry_or_null(const struct ccan_list_head *h,
5731 const struct ccan_list_node *n,
5732 size_t off)
5733{
5734 if (n == &h->n)
5735 return ((void *)0);
5736 return (char *)n - off;
5737}
5738enum ruby_id_types {
5739 RUBY_ID_STATIC_SYM = 0x01,
5740 RUBY_ID_LOCAL = 0x00,
5741 RUBY_ID_INSTANCE = (0x01<<1),
5742 RUBY_ID_GLOBAL = (0x03<<1),
5743 RUBY_ID_ATTRSET = (0x04<<1),
5744 RUBY_ID_CONST = (0x05<<1),
5745 RUBY_ID_CLASS = (0x06<<1),
5746 RUBY_ID_JUNK = (0x07<<1),
5747 RUBY_ID_INTERNAL = RUBY_ID_JUNK,
5748 RUBY_ID_SCOPE_SHIFT = 4,
5749 RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1)
5750};
5751enum ruby_method_ids {
5752 idDot2 = 128,
5753 idDot3 = 129,
5754 idUPlus = 132,
5755 idUMinus = 133,
5756 idPow = 134,
5757 idCmp = 135,
5758 idPLUS = '+',
5759 idMINUS = '-',
5760 idMULT = '*',
5761 idDIV = '/',
5762 idMOD = '%',
5763 idLTLT = 136,
5764 idGTGT = 137,
5765 idLT = '<',
5766 idLE = 138,
5767 idGT = '>',
5768 idGE = 139,
5769 idEq = 140,
5770 idEqq = 141,
5771 idNeq = 142,
5772 idNot = '!',
5773 idAnd = '&',
5774 idOr = '|',
5775 idBackquote = '`',
5776 idEqTilde = 143,
5777 idNeqTilde = 144,
5778 idAREF = 145,
5779 idASET = 146,
5780 idCOLON2 = 147,
5781 idANDOP = 148,
5782 idOROP = 149,
5783 idANDDOT = 150,
5784 tPRESERVED_ID_BEGIN = 150,
5785 idNilP,
5786 idNULL,
5787 idEmptyP,
5788 idEqlP,
5789 idRespond_to,
5790 idRespond_to_missing,
5791 idIFUNC,
5792 idCFUNC,
5793 id_core_set_method_alias,
5794 id_core_set_variable_alias,
5795 id_core_undef_method,
5796 id_core_define_method,
5797 id_core_define_singleton_method,
5798 id_core_set_postexe,
5799 id_core_hash_merge_ptr,
5800 id_core_hash_merge_kwd,
5801 id_core_raise,
5802 id_core_sprintf,
5803 id_debug_created_info,
5804 tPRESERVED_ID_END,
5805 tTOKEN_LOCAL_BEGIN = tPRESERVED_ID_END-1,
5806 tMax,
5807 tMin,
5808 tFreeze,
5809 tInspect,
5810 tIntern,
5811 tObject_id,
5812 tConst_added,
5813 tConst_missing,
5814 tMethodMissing,
5815 tMethod_added,
5816 tSingleton_method_added,
5817 tMethod_removed,
5818 tSingleton_method_removed,
5819 tMethod_undefined,
5820 tSingleton_method_undefined,
5821 tLength,
5822 tSize,
5823 tGets,
5824 tSucc,
5825 tEach,
5826 tProc,
5827 tLambda,
5828 tSend,
5829 t__send__,
5830 t__attached__,
5831 t__recursive_key__,
5832 tInitialize,
5833 tInitialize_copy,
5834 tInitialize_clone,
5835 tInitialize_dup,
5836 tTo_int,
5837 tTo_ary,
5838 tTo_str,
5839 tTo_sym,
5840 tTo_hash,
5841 tTo_proc,
5842 tTo_io,
5843 tTo_a,
5844 tTo_s,
5845 tTo_i,
5846 tTo_f,
5847 tTo_r,
5848 tBt,
5849 tBt_locations,
5850 tCall,
5851 tMesg,
5852 tException,
5853 tLocals,
5854 tNOT,
5855 tAND,
5856 tOR,
5857 tDiv,
5858 tDivmod,
5859 tFdiv,
5860 tQuo,
5861 tName,
5862 tNil,
5863 tPath,
5864 tUScore,
5865 tNUMPARAM_1,
5866 tNUMPARAM_2,
5867 tNUMPARAM_3,
5868 tNUMPARAM_4,
5869 tNUMPARAM_5,
5870 tNUMPARAM_6,
5871 tNUMPARAM_7,
5872 tNUMPARAM_8,
5873 tNUMPARAM_9,
5874 tDefault,
5875 tTOKEN_LOCAL_END,
5876 tTOKEN_INSTANCE_BEGIN = tTOKEN_LOCAL_END-1,
5877 tTOKEN_INSTANCE_END,
5878 tTOKEN_GLOBAL_BEGIN = tTOKEN_INSTANCE_END-1,
5879 tLASTLINE,
5880 tBACKREF,
5881 tERROR_INFO,
5882 tTOKEN_GLOBAL_END,
5883 tTOKEN_CONST_BEGIN = tTOKEN_GLOBAL_END-1,
5884 tTOKEN_CONST_END,
5885 tTOKEN_CLASS_BEGIN = tTOKEN_CONST_END-1,
5886 tTOKEN_CLASS_END,
5887 tTOKEN_ATTRSET_BEGIN = tTOKEN_CLASS_END-1,
5888 tTOKEN_ATTRSET_END,
5889 tNEXT_ID = tTOKEN_ATTRSET_END,
5890 idMax = ((tMax<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5891 idMin = ((tMin<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5892 idFreeze = ((tFreeze<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5893 idInspect = ((tInspect<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5894 idIntern = ((tIntern<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5895 idObject_id = ((tObject_id<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5896 idConst_added = ((tConst_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5897 idConst_missing = ((tConst_missing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5898 idMethodMissing = ((tMethodMissing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5899 idMethod_added = ((tMethod_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5900 idSingleton_method_added = ((tSingleton_method_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5901 idMethod_removed = ((tMethod_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5902 idSingleton_method_removed = ((tSingleton_method_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5903 idMethod_undefined = ((tMethod_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5904 idSingleton_method_undefined = ((tSingleton_method_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5905 idLength = ((tLength<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5906 idSize = ((tSize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5907 idGets = ((tGets<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5908 idSucc = ((tSucc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5909 idEach = ((tEach<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5910 idProc = ((tProc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5911 idLambda = ((tLambda<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5912 idSend = ((tSend<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5913 id__send__ = ((t__send__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5914 id__attached__ = ((t__attached__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5915 id__recursive_key__ = ((t__recursive_key__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5916 idInitialize = ((tInitialize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5917 idInitialize_copy = ((tInitialize_copy<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5918 idInitialize_clone = ((tInitialize_clone<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5919 idInitialize_dup = ((tInitialize_dup<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5920 idTo_int = ((tTo_int<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5921 idTo_ary = ((tTo_ary<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5922 idTo_str = ((tTo_str<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5923 idTo_sym = ((tTo_sym<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5924 idTo_hash = ((tTo_hash<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5925 idTo_proc = ((tTo_proc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5926 idTo_io = ((tTo_io<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5927 idTo_a = ((tTo_a<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5928 idTo_s = ((tTo_s<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5929 idTo_i = ((tTo_i<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5930 idTo_f = ((tTo_f<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5931 idTo_r = ((tTo_r<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5932 idBt = ((tBt<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5933 idBt_locations = ((tBt_locations<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5934 idCall = ((tCall<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5935 idMesg = ((tMesg<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5936 idException = ((tException<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5937 idLocals = ((tLocals<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5938 idNOT = ((tNOT<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5939 idAND = ((tAND<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5940 idOR = ((tOR<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5941 idDiv = ((tDiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5942 idDivmod = ((tDivmod<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5943 idFdiv = ((tFdiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5944 idQuo = ((tQuo<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5945 idName = ((tName<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5946 idNil = ((tNil<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5947 idPath = ((tPath<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5948 idUScore = ((tUScore<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5949 idNUMPARAM_1 = ((tNUMPARAM_1<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5950 idNUMPARAM_2 = ((tNUMPARAM_2<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5951 idNUMPARAM_3 = ((tNUMPARAM_3<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5952 idNUMPARAM_4 = ((tNUMPARAM_4<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5953 idNUMPARAM_5 = ((tNUMPARAM_5<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5954 idNUMPARAM_6 = ((tNUMPARAM_6<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5955 idNUMPARAM_7 = ((tNUMPARAM_7<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5956 idNUMPARAM_8 = ((tNUMPARAM_8<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5957 idNUMPARAM_9 = ((tNUMPARAM_9<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5958 idDefault = ((tDefault<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5959 idLASTLINE = ((tLASTLINE<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
5960 idBACKREF = ((tBACKREF<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
5961 idERROR_INFO = ((tERROR_INFO<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
5962 tLAST_OP_ID = tPRESERVED_ID_END-1,
5963 idLAST_OP_ID = tLAST_OP_ID >> RUBY_ID_SCOPE_SHIFT
5964};
5965void rb_obj_info_dump(VALUE obj);
5966void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
5967
5968
5969void ruby_debug_breakpoint(void);
5970__attribute__((__format__(__printf__, (1), (2)))) void ruby_debug_printf(const char*, ...);
5971
5972
5973VALUE rb_ary_last(int, const VALUE *, VALUE);
5974void rb_ary_set_len(VALUE, long);
5975void rb_ary_delete_same(VALUE, VALUE);
5976VALUE rb_ary_hidden_new_fill(long capa);
5977VALUE rb_ary_at(VALUE, VALUE);
5978size_t rb_ary_memsize(VALUE);
5979VALUE rb_to_array_type(VALUE obj);
5980VALUE rb_to_array(VALUE obj);
5981void rb_ary_cancel_sharing(VALUE ary);
5982size_t rb_ary_size_as_embedded(VALUE ary);
5983void rb_ary_make_embedded(VALUE ary);
5984_Bool rb_ary_embeddable_p(VALUE ary);
5985VALUE rb_ary_diff(VALUE ary1, VALUE ary2);
5986static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
5987static inline _Bool ARY_PTR_USING_P(VALUE ary);
5988static inline void RARY_TRANSIENT_SET(VALUE ary);
5989static inline void RARY_TRANSIENT_UNSET(VALUE ary);
5990
5991
5992VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
5993VALUE rb_check_to_array(VALUE ary);
5994VALUE rb_ary_behead(VALUE, long);
5995VALUE rb_ary_aref1(VALUE ary, VALUE i);
5996struct rb_execution_context_struct;
5997VALUE rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts);
5998
5999
6000static inline VALUE
6001rb_ary_entry_internal(VALUE ary, long offset)
6002{
6003 long len = rb_array_len(ary);
6004 const VALUE *ptr = rb_array_const_ptr_transient(ary);
6005 if (len == 0) return ((VALUE)RUBY_Qnil);
6006 if (offset < 0) {
6007 offset += len;
6008 if (offset < 0) return ((VALUE)RUBY_Qnil);
6009 }
6010 else if (len <= offset) {
6011 return ((VALUE)RUBY_Qnil);
6012 }
6013 return ptr[offset];
6014}
6015static inline _Bool
6016ARY_PTR_USING_P(VALUE ary)
6017{
6018 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER14));
6019}
6020[[maybe_unused]]
6021static inline int
6022ary_should_not_be_shared_and_embedded(VALUE ary)
6023{
6024 return !RB_FL_ALL_RAW(ary, RUBY_ELTS_SHARED|RARRAY_EMBED_FLAG);
6025}
6026static inline _Bool
6027ARY_SHARED_P(VALUE ary)
6028{
6029 ((void)0);
6030 ((void)0);
6031 return RB_FL_TEST_RAW(ary, RUBY_ELTS_SHARED);
6032}
6033static inline _Bool
6034ARY_EMBED_P(VALUE ary)
6035{
6036 ((void)0);
6037 ((void)0);
6038 return RB_FL_TEST_RAW(ary, RARRAY_EMBED_FLAG);
6039}
6040static inline VALUE
6041ARY_SHARED_ROOT(VALUE ary)
6042{
6043 ((void)0);
6044 return ((struct RArray *)(ary))->as.heap.aux.shared_root;
6045}
6046static inline _Bool
6047ARY_SHARED_ROOT_P(VALUE ary)
6048{
6049 ((void)0);
6050 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER12));
6051}
6052static inline long
6053ARY_SHARED_ROOT_REFCNT(VALUE ary)
6054{
6055 ((void)0);
6056 return ((struct RArray *)(ary))->as.heap.aux.capa;
6057}
6058static inline void
6059RARY_TRANSIENT_SET(VALUE ary)
6060{
6061 RB_FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6062}
6063static inline void
6064RARY_TRANSIENT_UNSET(VALUE ary)
6065{
6066 RB_FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6067}
6068__attribute__((__pure__))
6069__attribute__((__artificial__))
6070static inline VALUE
6071RARRAY_AREF(VALUE ary, long i)
6072{
6073 ((void)0);
6074 return rb_array_const_ptr_transient(ary)[i];
6075}
6076enum ruby_basic_operators {
6077 BOP_PLUS,
6078 BOP_MINUS,
6079 BOP_MULT,
6080 BOP_DIV,
6081 BOP_MOD,
6082 BOP_EQ,
6083 BOP_EQQ,
6084 BOP_LT,
6085 BOP_LE,
6086 BOP_LTLT,
6087 BOP_AREF,
6088 BOP_ASET,
6089 BOP_LENGTH,
6090 BOP_SIZE,
6091 BOP_EMPTY_P,
6092 BOP_NIL_P,
6093 BOP_SUCC,
6094 BOP_GT,
6095 BOP_GE,
6096 BOP_NOT,
6097 BOP_NEQ,
6098 BOP_MATCH,
6099 BOP_FREEZE,
6100 BOP_UMINUS,
6101 BOP_MAX,
6102 BOP_MIN,
6103 BOP_CALL,
6104 BOP_AND,
6105 BOP_OR,
6106 BOP_CMP,
6107 BOP_DEFAULT,
6108 BOP_LAST_
6109};
6110
6111
6112extern short ruby_vm_redefined_flag[BOP_LAST_];
6113
6114
6115typedef unsigned long long rb_serial_t;
6116struct rb_callable_method_entry_struct;
6117struct rb_method_definition_struct;
6118struct rb_execution_context_struct;
6119struct rb_control_frame_struct;
6120struct rb_callinfo;
6121enum method_missing_reason {
6122 MISSING_NOENTRY = 0x00,
6123 MISSING_PRIVATE = 0x01,
6124 MISSING_PROTECTED = 0x02,
6125 MISSING_FCALL = 0x04,
6126 MISSING_VCALL = 0x08,
6127 MISSING_SUPER = 0x10,
6128 MISSING_MISSING = 0x20,
6129 MISSING_NONE = 0x40
6130};static inline
6131VALUE rb_vm_push_frame_fname(struct rb_execution_context_struct *ec, VALUE fname);
6132VALUE rb_obj_is_thread(VALUE obj);
6133void rb_vm_mark(void *ptr);
6134void rb_vm_each_stack_value(void *ptr, void (*cb)(VALUE, void*), void *ctx);
6135__attribute__((__pure__)) VALUE rb_vm_top_self(void);
6136const void **rb_vm_get_insns_address_table(void);
6137VALUE rb_source_location(int *pline);
6138const char *rb_source_location_cstr(int *pline);
6139static void rb_vm_pop_cfunc_frame(void);
6140int rb_vm_add_root_module(VALUE module);
6141void rb_vm_check_redefinition_by_prepend(VALUE klass);
6142int rb_vm_check_optimizable_mid(VALUE mid);
6143VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
6144static VALUE ruby_vm_special_exception_copy(VALUE);
6145__attribute__((__pure__)) st_table *rb_vm_fstring_table(void);
6146
6147
6148VALUE rb_vm_exec(struct rb_execution_context_struct *, _Bool);
6149
6150
6151VALUE rb_current_realfilepath(void);
6152VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
6153typedef void rb_check_funcall_hook(int, VALUE, ID, int, const VALUE *, VALUE);
6154VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
6155 rb_check_funcall_hook *hook, VALUE arg);
6156VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *argv,
6157 rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
6158const char *rb_type_str(enum ruby_value_type type);
6159VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
6160VALUE rb_check_funcall_basic_kw(VALUE, ID, VALUE, int, const VALUE*, int);
6161VALUE rb_yield_1(VALUE val);
6162VALUE rb_yield_force_blockarg(VALUE values);
6163VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
6164 rb_block_call_func_t bl_proc, int min_argc, int max_argc,
6165 VALUE data2);
6166void rb_check_stack_overflow(void);
6167VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
6168VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
6169struct rb_iseq_struct;
6170
6171
6172const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass);
6173
6174
6175struct rb_execution_context_struct;
6176
6177
6178int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE obj, ID id, int priv);
6179
6180
6181void rb_clear_constant_cache(void);
6182void rb_print_backtrace(void);
6183VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
6184VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval);
6185VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6186VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6187VALUE rb_make_backtrace(void);
6188void rb_backtrace_print_as_bugreport(void);
6189int rb_backtrace_p(VALUE obj);
6190VALUE rb_backtrace_to_str_ary(VALUE obj);
6191VALUE rb_backtrace_to_location_ary(VALUE obj);
6192void rb_backtrace_each(VALUE (*iter)(VALUE recv, VALUE str), VALUE output);
6193int rb_frame_info_p(VALUE obj);
6194int rb_get_node_id_from_frame_info(VALUE obj);
6195const struct rb_iseq_struct *rb_get_iseq_from_frame_info(VALUE obj);
6196
6197
6198VALUE rb_ec_backtrace_object(const struct rb_execution_context_struct *ec);
6199void rb_backtrace_use_iseq_first_lineno_for_last_location(VALUE self);
6200
6201
6202struct rb_execution_context_struct;
6203struct rb_objspace;
6204typedef struct ractor_newobj_size_pool_cache {
6205 struct RVALUE *freelist;
6206 struct heap_page *using_page;
6207} rb_ractor_newobj_size_pool_cache_t;
6208typedef struct ractor_newobj_cache {
6209 size_t incremental_mark_step_allocated_slots;
6210 rb_ractor_newobj_size_pool_cache_t size_pool_caches[5];
6211} rb_ractor_newobj_cache_t;
6212extern VALUE *ruby_initial_gc_stress_ptr;
6213extern int ruby_disable_gc;
6214__attribute__((__malloc__)) void *ruby_mimmalloc(size_t size);
6215void ruby_mimfree(void *ptr);
6216void rb_objspace_set_event_hook(const rb_event_flag_t event);
6217VALUE rb_objspace_gc_enable(struct rb_objspace *);
6218VALUE rb_objspace_gc_disable(struct rb_objspace *);
6219void ruby_gc_set_params(void);
6220void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
6221__attribute__((__alloc_align__(1)))
6222__attribute__((__malloc__)) void *rb_aligned_malloc(size_t, size_t) __attribute__((__alloc_size__ (2)));
6223size_t rb_size_mul_or_raise(size_t, size_t, VALUE);
6224size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE);
6225__attribute__((__malloc__)) void *rb_xmalloc_mul_add(size_t, size_t, size_t);
6226__attribute__((__malloc__)) void *rb_xcalloc_mul_add(size_t, size_t, size_t);
6227void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
6228__attribute__((__malloc__)) void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6229__attribute__((__malloc__)) void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6230static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6231static 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)));
6232static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
6233VALUE rb_class_allocate_instance(VALUE klass);
6234void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
6235size_t rb_gc_obj_slot_size(VALUE obj);
6236_Bool rb_gc_size_allocatable_p(size_t size);
6237int rb_objspace_garbage_object_p(VALUE obj);
6238
6239
6240const char *rb_objspace_data_type_name(VALUE obj);
6241VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
6242VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
6243VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
6244size_t rb_obj_memsize_of(VALUE);
6245void rb_gc_verify_internal_consistency(void);
6246size_t rb_obj_gc_flags(VALUE, ID[], size_t);
6247void rb_gc_mark_values(long n, const VALUE *values);
6248void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
6249void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6250void *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)));
6251void ruby_sized_xfree(void *x, size_t size);
6252
6253
6254
6255
6256int rb_ec_stack_check(struct rb_execution_context_struct *ec);
6257void rb_gc_writebarrier_remember(VALUE obj);
6258const char *rb_obj_info(VALUE obj);
6259
6260
6261static inline void *
6262ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
6263{
6264 return ruby_xrealloc(ptr, new_size);
6265}
6266static inline void *
6267ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
6268{
6269 return ruby_xrealloc2(ptr, new_count, elemsiz);
6270}
6271static inline void
6272ruby_sized_xfree_inlined(void *ptr, size_t size)
6273{
6274 ruby_xfree(ptr);
6275}
6276enum imemo_type {
6277 imemo_env = 0,
6278 imemo_cref = 1,
6279 imemo_svar = 2,
6280 imemo_throw_data = 3,
6281 imemo_ifunc = 4,
6282 imemo_memo = 5,
6283 imemo_ment = 6,
6284 imemo_iseq = 7,
6285 imemo_tmpbuf = 8,
6286 imemo_ast = 9,
6287 imemo_parser_strterm = 10,
6288 imemo_callinfo = 11,
6289 imemo_callcache = 12,
6290 imemo_constcache = 13,
6291};
6292struct vm_svar {
6293 VALUE flags;
6294 const VALUE cref_or_me;
6295 const VALUE lastline;
6296 const VALUE backref;
6297 const VALUE others;
6298};
6299struct vm_throw_data {
6300 VALUE flags;
6301 VALUE reserved;
6302 const VALUE throw_obj;
6303 const struct rb_control_frame_struct *catch_frame;
6304 int throw_state;
6305};
6306struct vm_ifunc_argc {
6307 int min, max;
6308};
6309struct vm_ifunc {
6310 VALUE flags;
6311 VALUE reserved;
6312 rb_block_call_func_t func;
6313 const void *data;
6314 struct vm_ifunc_argc argc;
6315};
6316struct rb_imemo_tmpbuf_struct {
6317 VALUE flags;
6318 VALUE reserved;
6319 VALUE *ptr;
6320 struct rb_imemo_tmpbuf_struct *next;
6321 size_t cnt;
6322};
6323struct MEMO {
6324 VALUE flags;
6325 VALUE reserved;
6326 const VALUE v1;
6327 const VALUE v2;
6328 union {
6329 long cnt;
6330 long state;
6331 const VALUE value;
6332 void (*func)(void);
6333 } u3;
6334};
6335typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
6336rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
6337struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
6338void rb_strterm_mark(VALUE obj);
6339static inline enum imemo_type imemo_type(VALUE imemo);
6340static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
6341static inline _Bool imemo_throw_data_p(VALUE imemo);
6342static inline struct vm_ifunc *rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data);
6343static inline VALUE rb_imemo_tmpbuf_auto_free_pointer(void);
6344static inline void *RB_IMEMO_TMPBUF_PTR(VALUE v);
6345static inline void *rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr);
6346static inline VALUE rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str);
6347static inline void MEMO_V1_SET(struct MEMO *m, VALUE v);
6348static inline void MEMO_V2_SET(struct MEMO *m, VALUE v);
6349
6350
6351VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
6352const char *rb_imemo_name(enum imemo_type type);
6353
6354
6355static inline enum imemo_type
6356imemo_type(VALUE imemo)
6357{
6358 return (((struct RBasic *)(imemo))->flags >> ((VALUE)RUBY_FL_USHIFT)) & 0x0f;
6359}
6360static inline int
6361imemo_type_p(VALUE imemo, enum imemo_type imemo_type)
6362{
6363 if ((__builtin_expect(!!(!RB_SPECIAL_CONST_P(imemo)), 1))) {
6364 const VALUE mask = (0x0f << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_MASK;
6365 const VALUE expected_type = (imemo_type << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_IMEMO;
6366 return expected_type == (((struct RBasic *)(imemo))->flags & mask);
6367 }
6368 else {
6369 return 0;
6370 }
6371}
6372static inline _Bool
6373imemo_throw_data_p(VALUE imemo)
6374{
6375 return RB_TYPE_P(imemo, RUBY_T_IMEMO);
6376}
6377static inline struct vm_ifunc *
6378rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data)
6379{
6380 return rb_vm_ifunc_new(func, data, 0, (-1));
6381}
6382static inline VALUE
6383rb_imemo_tmpbuf_auto_free_pointer(void)
6384{
6385 return rb_imemo_new(imemo_tmpbuf, 0, 0, 0, 0);
6386}
6387static inline void *
6388RB_IMEMO_TMPBUF_PTR(VALUE v)
6389{
6390 const struct rb_imemo_tmpbuf_struct *p = (const void *)v;
6391 return p->ptr;
6392}
6393static inline void *
6394rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr)
6395{
6396 return ((rb_imemo_tmpbuf_t *)v)->ptr = ptr;
6397}
6398static inline VALUE
6399rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str)
6400{
6401 const void *src;
6402 VALUE imemo;
6403 rb_imemo_tmpbuf_t *tmpbuf;
6404 void *dst;
6405 size_t len;
6406 rb_string_value(&(str));
6407 imemo = rb_imemo_tmpbuf_auto_free_pointer();
6408 tmpbuf = (rb_imemo_tmpbuf_t *)imemo;
6409 len = RSTRING_LEN(str);
6410 src = RSTRING_PTR(str);
6411 dst = ruby_xmalloc(len);
6412 ruby_nonempty_memcpy(dst, src, len);
6413 tmpbuf->ptr = dst;
6414 return imemo;
6415}
6416static inline void
6417MEMO_V1_SET(struct MEMO *m, VALUE v)
6418{
6419 rb_obj_write((VALUE)(m), __extension__({
6420 ;
6421 ; __typeof__((VALUE *)(&m->v1)) unaligned_member_access_result = ((VALUE *)(&m->v1));
6422 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.1/internal/imemo.h", 233);
6423}
6424static inline void
6425MEMO_V2_SET(struct MEMO *m, VALUE v)
6426{
6427 rb_obj_write((VALUE)(m), __extension__({
6428 ;
6429 ; __typeof__((VALUE *)(&m->v2)) unaligned_member_access_result = ((VALUE *)(&m->v2));
6430 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.1/internal/imemo.h", 239);
6431}
6432typedef enum {
6433 METHOD_VISI_UNDEF = 0x00,
6434 METHOD_VISI_PUBLIC = 0x01,
6435 METHOD_VISI_PRIVATE = 0x02,
6436 METHOD_VISI_PROTECTED = 0x03,
6437 METHOD_VISI_MASK = 0x03
6438} rb_method_visibility_t;
6439typedef struct rb_scope_visi_struct {
6440 rb_method_visibility_t method_visi : 3;
6441 unsigned int module_func : 1;
6442} rb_scope_visibility_t;
6443typedef struct rb_cref_struct {
6444 VALUE flags;
6445 VALUE refinements;
6446 VALUE klass_or_self;
6447 struct rb_cref_struct * next;
6448 const rb_scope_visibility_t scope_visi;
6449} rb_cref_t;
6450typedef struct rb_method_entry_struct {
6451 VALUE flags;
6452 VALUE defined_class;
6453 struct rb_method_definition_struct * const def;
6454 ID called_id;
6455 VALUE owner;
6456} rb_method_entry_t;
6457typedef struct rb_callable_method_entry_struct {
6458 VALUE flags;
6459 const VALUE defined_class;
6460 struct rb_method_definition_struct * const def;
6461 ID called_id;
6462 const VALUE owner;
6463} rb_callable_method_entry_t;
6464static inline void
6465METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
6466{
6467 ((void)0);
6468 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) | (visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0));
6469}
6470static inline void
6471METHOD_ENTRY_BASIC_SET(rb_method_entry_t *me, unsigned int basic)
6472{
6473 ((void)0);
6474 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER6) )) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2));
6475}
6476static inline void
6477METHOD_ENTRY_FLAGS_SET(rb_method_entry_t *me, rb_method_visibility_t visi, unsigned int basic)
6478{
6479 ((void)0);
6480 ((void)0);
6481 me->flags =
6482 (me->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6483 ((visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2)));
6484}
6485static inline void
6486METHOD_ENTRY_FLAGS_COPY(rb_method_entry_t *dst, const rb_method_entry_t *src)
6487{
6488 dst->flags =
6489 (dst->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6490 (src->flags & (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)));
6491}
6492typedef enum {
6493 VM_METHOD_TYPE_ISEQ,
6494 VM_METHOD_TYPE_CFUNC,
6495 VM_METHOD_TYPE_ATTRSET,
6496 VM_METHOD_TYPE_IVAR,
6497 VM_METHOD_TYPE_BMETHOD,
6498 VM_METHOD_TYPE_ZSUPER,
6499 VM_METHOD_TYPE_ALIAS,
6500 VM_METHOD_TYPE_UNDEF,
6501 VM_METHOD_TYPE_NOTIMPLEMENTED,
6502 VM_METHOD_TYPE_OPTIMIZED,
6503 VM_METHOD_TYPE_MISSING,
6504 VM_METHOD_TYPE_REFINED,
6505
6506} rb_method_type_t;
6507__extension__ _Static_assert(VM_METHOD_TYPE_REFINED <= (1<<4), "VM_METHOD_TYPE_MINIMUM_BITS" ": " "VM_METHOD_TYPE_REFINED <= (1<<VM_METHOD_TYPE_MINIMUM_BITS)");
6508typedef struct rb_iseq_struct rb_iseq_t;
6509typedef struct rb_method_iseq_struct {
6510 const rb_iseq_t * iseqptr;
6511 rb_cref_t * cref;
6512} rb_method_iseq_t;
6513typedef struct rb_method_cfunc_struct {
6514 VALUE (*func)();
6515 VALUE (*invoker)(VALUE recv, int argc, const VALUE *argv, VALUE (*func)());
6516 int argc;
6517} rb_method_cfunc_t;
6518typedef struct rb_method_attr_struct {
6519 ID id;
6520 VALUE location;
6521} rb_method_attr_t;
6522typedef struct rb_method_alias_struct {
6523 struct rb_method_entry_struct * original_me;
6524} rb_method_alias_t;
6525typedef struct rb_method_refined_struct {
6526 struct rb_method_entry_struct * orig_me;
6527 VALUE owner;
6528} rb_method_refined_t;
6529typedef struct rb_method_bmethod_struct {
6530 VALUE proc;
6531 struct rb_hook_list_struct *hooks;
6532 VALUE defined_ractor;
6533} rb_method_bmethod_t;
6534enum method_optimized_type {
6535 OPTIMIZED_METHOD_TYPE_SEND,
6536 OPTIMIZED_METHOD_TYPE_CALL,
6537 OPTIMIZED_METHOD_TYPE_BLOCK_CALL,
6538 OPTIMIZED_METHOD_TYPE_STRUCT_AREF,
6539 OPTIMIZED_METHOD_TYPE_STRUCT_ASET,
6540 OPTIMIZED_METHOD_TYPE__MAX
6541};
6542typedef struct rb_method_optimized {
6543 enum method_optimized_type type;
6544 unsigned int index;
6545} rb_method_optimized_t;
6546struct rb_method_definition_struct {
6547 rb_method_type_t type : 4;
6548 unsigned int iseq_overload: 1;
6549 int alias_count : 27;
6550 int complemented_count : 28;
6551 unsigned int no_redef_warning: 1;
6552 union {
6553 rb_method_iseq_t iseq;
6554 rb_method_cfunc_t cfunc;
6555 rb_method_attr_t attr;
6556 rb_method_alias_t alias;
6557 rb_method_refined_t refined;
6558 rb_method_bmethod_t bmethod;
6559 rb_method_optimized_t optimized;
6560 } body;
6561 ID original_id;
6562 uintptr_t method_serial;
6563};
6564struct rb_id_table;
6565typedef struct rb_method_definition_struct rb_method_definition_t;
6566__extension__ _Static_assert(__builtin_offsetof (rb_method_definition_t, body)==8, "sizeof_method_def" ": " "offsetof(rb_method_definition_t, body)==8");
6567void rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi);
6568void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(), int argc, rb_method_visibility_t visi);
6569void rb_add_method_iseq(VALUE klass, ID mid, const rb_iseq_t *iseq, rb_cref_t *cref, rb_method_visibility_t visi);
6570void rb_add_method_optimized(VALUE klass, ID mid, enum method_optimized_type, unsigned int index, rb_method_visibility_t visi);
6571void rb_add_refined_method_entry(VALUE refined_class, ID mid);
6572rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex);
6573rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def);
6574const rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
6575const rb_method_entry_t *rb_method_entry(VALUE klass, ID id);
6576const rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6577const rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6578const rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
6579
6580
6581const rb_method_entry_t *rb_resolve_me_location(const rb_method_entry_t *, VALUE[5]);
6582
6583
6584const rb_callable_method_entry_t *rb_callable_method_entry(VALUE klass, ID id);
6585const rb_callable_method_entry_t *rb_callable_method_entry_or_negative(VALUE klass, ID id);
6586const rb_callable_method_entry_t *rb_callable_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6587const rb_callable_method_entry_t *rb_callable_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6588int rb_method_entry_arity(const rb_method_entry_t *me);
6589int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2);
6590st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
6591VALUE rb_method_entry_location(const rb_method_entry_t *me);
6592void rb_free_method_entry(const rb_method_entry_t *me);
6593const rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me);
6594const rb_callable_method_entry_t *rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID called_id, VALUE defined_class);
6595void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src);
6596void rb_method_table_insert(VALUE klass, struct rb_id_table *table, ID method_id, const rb_method_entry_t *me);
6597void rb_scope_visibility_set(rb_method_visibility_t);
6598VALUE rb_unnamed_parameters(int arity);
6599void rb_clear_method_cache(VALUE klass_or_module, ID mid);
6600void rb_clear_method_cache_all(void);
6601enum node_type {
6602 NODE_SCOPE,
6603 NODE_BLOCK,
6604 NODE_IF,
6605 NODE_UNLESS,
6606 NODE_CASE,
6607 NODE_CASE2,
6608 NODE_CASE3,
6609 NODE_WHEN,
6610 NODE_IN,
6611 NODE_WHILE,
6612 NODE_UNTIL,
6613 NODE_ITER,
6614 NODE_FOR,
6615 NODE_FOR_MASGN,
6616 NODE_BREAK,
6617 NODE_NEXT,
6618 NODE_REDO,
6619 NODE_RETRY,
6620 NODE_BEGIN,
6621 NODE_RESCUE,
6622 NODE_RESBODY,
6623 NODE_ENSURE,
6624 NODE_AND,
6625 NODE_OR,
6626 NODE_MASGN,
6627 NODE_LASGN,
6628 NODE_DASGN,
6629 NODE_GASGN,
6630 NODE_IASGN,
6631 NODE_CDECL,
6632 NODE_CVASGN,
6633 NODE_OP_ASGN1,
6634 NODE_OP_ASGN2,
6635 NODE_OP_ASGN_AND,
6636 NODE_OP_ASGN_OR,
6637 NODE_OP_CDECL,
6638 NODE_CALL,
6639 NODE_OPCALL,
6640 NODE_FCALL,
6641 NODE_VCALL,
6642 NODE_QCALL,
6643 NODE_SUPER,
6644 NODE_ZSUPER,
6645 NODE_LIST,
6646 NODE_ZLIST,
6647 NODE_VALUES,
6648 NODE_HASH,
6649 NODE_RETURN,
6650 NODE_YIELD,
6651 NODE_LVAR,
6652 NODE_DVAR,
6653 NODE_GVAR,
6654 NODE_IVAR,
6655 NODE_CONST,
6656 NODE_CVAR,
6657 NODE_NTH_REF,
6658 NODE_BACK_REF,
6659 NODE_MATCH,
6660 NODE_MATCH2,
6661 NODE_MATCH3,
6662 NODE_LIT,
6663 NODE_STR,
6664 NODE_DSTR,
6665 NODE_XSTR,
6666 NODE_DXSTR,
6667 NODE_EVSTR,
6668 NODE_DREGX,
6669 NODE_ONCE,
6670 NODE_ARGS,
6671 NODE_ARGS_AUX,
6672 NODE_OPT_ARG,
6673 NODE_KW_ARG,
6674 NODE_POSTARG,
6675 NODE_ARGSCAT,
6676 NODE_ARGSPUSH,
6677 NODE_SPLAT,
6678 NODE_BLOCK_PASS,
6679 NODE_DEFN,
6680 NODE_DEFS,
6681 NODE_ALIAS,
6682 NODE_VALIAS,
6683 NODE_UNDEF,
6684 NODE_CLASS,
6685 NODE_MODULE,
6686 NODE_SCLASS,
6687 NODE_COLON2,
6688 NODE_COLON3,
6689 NODE_DOT2,
6690 NODE_DOT3,
6691 NODE_FLIP2,
6692 NODE_FLIP3,
6693 NODE_SELF,
6694 NODE_NIL,
6695 NODE_TRUE,
6696 NODE_FALSE,
6697 NODE_ERRINFO,
6698 NODE_DEFINED,
6699 NODE_POSTEXE,
6700 NODE_DSYM,
6701 NODE_ATTRASGN,
6702 NODE_LAMBDA,
6703 NODE_ARYPTN,
6704 NODE_HSHPTN,
6705 NODE_FNDPTN,
6706 NODE_ERROR,
6707 NODE_LAST
6708};
6709typedef struct rb_code_position_struct {
6710 int lineno;
6711 int column;
6712} rb_code_position_t;
6713typedef struct rb_code_location_struct {
6714 rb_code_position_t beg_pos;
6715 rb_code_position_t end_pos;
6716} rb_code_location_t;
6717static inline rb_code_location_t
6718code_loc_gen(const rb_code_location_t *loc1, const rb_code_location_t *loc2)
6719{
6720 rb_code_location_t loc;
6721 loc.beg_pos = loc1->beg_pos;
6722 loc.end_pos = loc2->end_pos;
6723 return loc;
6724}
6725typedef struct rb_ast_id_table {
6726 int size;
6727 ID ids[];
6728} rb_ast_id_table_t;
6729typedef struct RNode {
6730 VALUE flags;
6731 union {
6732 struct RNode *node;
6733 ID id;
6734 VALUE value;
6735 rb_ast_id_table_t *tbl;
6736 } u1;
6737 union {
6738 struct RNode *node;
6739 ID id;
6740 long argc;
6741 VALUE value;
6742 } u2;
6743 union {
6744 struct RNode *node;
6745 ID id;
6746 long state;
6747 struct rb_args_info *args;
6748 struct rb_ary_pattern_info *apinfo;
6749 struct rb_fnd_pattern_info *fpinfo;
6750 VALUE value;
6751 } u3;
6752 rb_code_location_t nd_loc;
6753 int node_id;
6754} NODE;
6755VALUE rb_node_case_when_optimizable_literal(const NODE *const node);
6756
6757
6758typedef struct node_buffer_struct node_buffer_t;
6759typedef struct rb_ast_body_struct {
6760 const NODE *root;
6761 VALUE compile_option;
6762 VALUE script_lines;
6763} rb_ast_body_t;
6764typedef struct rb_ast_struct {
6765 VALUE flags;
6766 node_buffer_t *node_buffer;
6767 rb_ast_body_t body;
6768} rb_ast_t;
6769rb_ast_t *rb_ast_new(void);
6770void rb_ast_mark(rb_ast_t*);
6771void rb_ast_update_references(rb_ast_t*);
6772void rb_ast_dispose(rb_ast_t*);
6773void rb_ast_free(rb_ast_t*);
6774size_t rb_ast_memsize(const rb_ast_t*);
6775void rb_ast_add_mark_object(rb_ast_t*, VALUE);
6776void rb_ast_set_tokens(rb_ast_t*, VALUE);
6777VALUE rb_ast_tokens(rb_ast_t *ast);
6778NODE *rb_ast_newnode(rb_ast_t*, enum node_type type);
6779void rb_ast_delete_node(rb_ast_t*, NODE *n);
6780rb_ast_id_table_t *rb_ast_new_local_table(rb_ast_t*, int);
6781rb_ast_id_table_t *rb_ast_resize_latest_local_table(rb_ast_t*, int);
6782VALUE rb_parser_new(void);
6783VALUE rb_parser_end_seen_p(VALUE);
6784VALUE rb_parser_encoding(VALUE);
6785VALUE rb_parser_set_yydebug(VALUE, VALUE);
6786VALUE rb_parser_dump_tree(const NODE *node, int comment);
6787void rb_parser_set_options(VALUE, int, int, int, int);
6788rb_ast_t *rb_parser_compile_string(VALUE, const char*, VALUE, int);
6789rb_ast_t *rb_parser_compile_string_path(VALUE vparser, VALUE fname, VALUE src, int line);
6790rb_ast_t *rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE input, int line);
6791rb_ast_t *rb_parser_compile_generic(VALUE vparser, VALUE (*lex_gets)(VALUE, int), VALUE fname, VALUE input, int line);
6792void rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2);
6793const char *ruby_node_name(int node);
6794const struct kwtable *rb_reserved_word(const char *, unsigned int);
6795struct rb_args_info {
6796 NODE *pre_init;
6797 NODE *post_init;
6798 int pre_args_num;
6799 int post_args_num;
6800 ID first_post_arg;
6801 ID rest_arg;
6802 ID block_arg;
6803 NODE *kw_args;
6804 NODE *kw_rest_arg;
6805 NODE *opt_args;
6806 unsigned int no_kwarg: 1;
6807 unsigned int ruby2_keywords: 1;
6808 unsigned int forwarding: 1;
6809 VALUE imemo;
6810};
6811struct rb_ary_pattern_info {
6812 NODE *pre_args;
6813 NODE *rest_arg;
6814 NODE *post_args;
6815};
6816struct rb_fnd_pattern_info {
6817 NODE *pre_rest_arg;
6818 NODE *args;
6819 NODE *post_rest_arg;
6820};
6821struct parser_params;
6822void *rb_parser_malloc(struct parser_params *, size_t);
6823void *rb_parser_realloc(struct parser_params *, void *, size_t);
6824void *rb_parser_calloc(struct parser_params *, size_t, size_t);
6825void rb_parser_free(struct parser_params *, void *);
6826__attribute__((__format__(__printf__, (2), (3)))) void rb_parser_printf(struct parser_params *parser, const char *fmt, ...);
6827void rb_ast_node_type_change(NODE *n, enum node_type type);
6828
6829
6830static inline VALUE
6831rb_node_set_type(NODE *n, enum node_type t)
6832{
6833 return (n)->flags=(((n)->flags&~(((VALUE)0x7f)<<8))|((((unsigned long)(t))<<8)&(((VALUE)0x7f)<<8)));
6834}
6835static inline _Bool
6836nd_type_p(const NODE *n, enum node_type t)
6837{
6838 return (enum node_type)((int) (((n)->flags & (((VALUE)0x7f)<<8))>>8)) == t;
6839}
6840typedef unsigned int rb_atomic_t;
6841__attribute__((__artificial__))
6842
6843__attribute__((__nonnull__ (1)))
6844static inline rb_atomic_t
6845rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6846{
6847 return __atomic_fetch_add(ptr, val, 5);
6848}
6849__attribute__((__artificial__))
6850
6851__attribute__((__nonnull__ (1)))
6852static inline void
6853rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6854{
6855 __atomic_add_fetch(ptr, val, 5);
6856}
6857__attribute__((__artificial__))
6858
6859__attribute__((__nonnull__ (1)))
6860static inline void
6861rbimpl_atomic_size_add(volatile size_t *ptr, size_t val)
6862{
6863 __atomic_add_fetch(ptr, val, 5);
6864}
6865__attribute__((__artificial__))
6866
6867__attribute__((__nonnull__ (1)))
6868static inline void
6869rbimpl_atomic_inc(volatile rb_atomic_t *ptr)
6870{
6871 rbimpl_atomic_add(ptr, 1);
6872}
6873__attribute__((__artificial__))
6874
6875__attribute__((__nonnull__ (1)))
6876static inline void
6877rbimpl_atomic_size_inc(volatile size_t *ptr)
6878{
6879 rbimpl_atomic_size_add(ptr, 1);
6880}
6881__attribute__((__artificial__))
6882
6883__attribute__((__nonnull__ (1)))
6884static inline rb_atomic_t
6885rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6886{
6887 return __atomic_fetch_sub(ptr, val, 5);
6888}
6889__attribute__((__artificial__))
6890
6891__attribute__((__nonnull__ (1)))
6892static inline void
6893rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6894{
6895 __atomic_sub_fetch(ptr, val, 5);
6896}
6897__attribute__((__artificial__))
6898
6899__attribute__((__nonnull__ (1)))
6900static inline void
6901rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val)
6902{
6903 __atomic_sub_fetch(ptr, val, 5);
6904}
6905__attribute__((__artificial__))
6906
6907__attribute__((__nonnull__ (1)))
6908static inline void
6909rbimpl_atomic_dec(volatile rb_atomic_t *ptr)
6910{
6911 rbimpl_atomic_sub(ptr, 1);
6912}
6913__attribute__((__artificial__))
6914
6915__attribute__((__nonnull__ (1)))
6916static inline void
6917rbimpl_atomic_size_dec(volatile size_t *ptr)
6918{
6919 rbimpl_atomic_size_sub(ptr, 1);
6920}
6921__attribute__((__artificial__))
6922
6923__attribute__((__nonnull__ (1)))
6924static inline void
6925rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val)
6926{
6927 __atomic_or_fetch(ptr, val, 5);
6928}
6929__attribute__((__artificial__))
6930
6931__attribute__((__nonnull__ (1)))
6932static inline rb_atomic_t
6933rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val)
6934{
6935 return __atomic_exchange_n(ptr, val, 5);
6936}
6937__attribute__((__artificial__))
6938
6939__attribute__((__nonnull__ (1)))
6940static inline size_t
6941rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val)
6942{
6943 return __atomic_exchange_n(ptr, val, 5);
6944}
6945__attribute__((__artificial__))
6946
6947__attribute__((__nonnull__ (1)))
6948static inline void *
6949rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val)
6950{
6951 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
6952 const size_t sval = ((size_t)val);
6953 volatile size_t *const sptr = ((volatile size_t *)ptr);
6954 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
6955 return ((void *)sret);
6956}
6957__attribute__((__artificial__))
6958
6959__attribute__((__nonnull__ (1)))
6960static inline VALUE
6961rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val)
6962{
6963 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
6964 const size_t sval = ((size_t)val);
6965 volatile size_t *const sptr = ((volatile size_t *)ptr);
6966 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
6967 return ((VALUE)sret);
6968}
6969__attribute__((__artificial__))
6970
6971__attribute__((__nonnull__ (1)))
6972static inline void
6973rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val)
6974{
6975 __atomic_store_n(ptr, val, 5);
6976}
6977__attribute__((__artificial__))
6978
6979__attribute__((__nonnull__ (1)))
6980static inline rb_atomic_t
6981rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval)
6982{
6983 __atomic_compare_exchange_n(
6984 ptr, &oldval, newval, 0, 5, 5);
6985 return oldval;
6986}
6987__attribute__((__artificial__))
6988
6989__attribute__((__nonnull__ (1)))
6990static inline size_t
6991rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval)
6992{
6993 __atomic_compare_exchange_n(
6994 ptr, &oldval, newval, 0, 5, 5);
6995 return oldval;
6996}
6997__attribute__((__artificial__))
6998
6999__attribute__((__nonnull__ (1)))
7000static inline void *
7001rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval)
7002{
7003 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
7004 const size_t snew = ((size_t)newval);
7005 const size_t sold = ((size_t)oldval);
7006 volatile size_t *const sptr = ((volatile size_t *)ptr);
7007 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
7008 return ((void *)sret);
7009}
7010__attribute__((__artificial__))
7011
7012__attribute__((__nonnull__ (1)))
7013static inline VALUE
7014rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval)
7015{
7016 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
7017 const size_t snew = ((size_t)newval);
7018 const size_t sold = ((size_t)oldval);
7019 volatile size_t *const sptr = ((volatile size_t *)ptr);
7020 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
7021 return ((VALUE)sret);
7022}
7023typedef uint32_t attr_index_t;
7024typedef uint32_t shape_id_t;
7025struct rb_shape {
7026 struct rb_id_table * edges;
7027 ID edge_name;
7028 attr_index_t next_iv_index;
7029 uint32_t capacity;
7030 uint8_t type;
7031 uint8_t size_pool_index;
7032 shape_id_t parent_id;
7033};
7034typedef struct rb_shape rb_shape_t;
7035enum shape_type {
7036 SHAPE_ROOT,
7037 SHAPE_IVAR,
7038 SHAPE_FROZEN,
7039 SHAPE_CAPACITY_CHANGE,
7040 SHAPE_INITIAL_CAPACITY,
7041 SHAPE_T_OBJECT,
7042 SHAPE_OBJ_TOO_COMPLEX,
7043};
7044static inline shape_id_t
7045RBASIC_SHAPE_ID(VALUE obj)
7046{
7047 ((void)0);
7048 return (shape_id_t)((((uintptr_t)1 << 32) - 1) & ((((struct RBasic *)(obj))->flags) >> ((8 * 8) - 32)));
7049}
7050static inline void
7051RBASIC_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id)
7052{
7053 ((struct RBasic *)(obj))->flags &= (((VALUE)-1) >> 32);
7054 ((struct RBasic *)(obj))->flags |= ((VALUE)(shape_id) << ((8 * 8) - 32));
7055}
7056static inline shape_id_t
7057ROBJECT_SHAPE_ID(VALUE obj)
7058{
7059 ((void)0);
7060 return RBASIC_SHAPE_ID(obj);
7061}
7062static inline void
7063ROBJECT_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id)
7064{
7065 ((void)0);
7066 RBASIC_SET_SHAPE_ID(obj, shape_id);
7067}
7068static inline shape_id_t
7069RCLASS_SHAPE_ID(VALUE obj)
7070{
7071 ((void)0);
7072 return RBASIC_SHAPE_ID(obj);
7073}
7074_Bool rb_shape_root_shape_p(rb_shape_t* shape);
7075rb_shape_t * rb_shape_get_root_shape(void);
7076uint8_t rb_shape_id_num_bits(void);
7077int32_t rb_shape_id_offset(void);
7078rb_shape_t* rb_shape_get_shape_by_id_without_assertion(shape_id_t shape_id);
7079rb_shape_t * rb_shape_get_parent(rb_shape_t * shape);
7080
7081
7082rb_shape_t* rb_shape_get_shape_by_id(shape_id_t shape_id);
7083shape_id_t rb_shape_get_shape_id(VALUE obj);
7084rb_shape_t * rb_shape_get_next_iv_shape(rb_shape_t * shape, ID id);
7085_Bool rb_shape_get_iv_index(rb_shape_t * shape, ID id, attr_index_t * value);
7086_Bool rb_shape_obj_too_complex(VALUE obj);
7087
7088
7089void rb_shape_set_shape(VALUE obj, rb_shape_t* shape);
7090rb_shape_t* rb_shape_get_shape(VALUE obj);
7091int rb_shape_frozen_shape_p(rb_shape_t* shape);
7092void rb_shape_transition_shape_frozen(VALUE obj);
7093void rb_shape_transition_shape_remove_ivar(VALUE obj, ID id, rb_shape_t *shape, VALUE * removed);
7094rb_shape_t * rb_shape_transition_shape_capa(rb_shape_t * shape, uint32_t new_capacity);
7095rb_shape_t* rb_shape_get_next(rb_shape_t* shape, VALUE obj, ID id);
7096rb_shape_t * rb_shape_rebuild_shape(rb_shape_t * initial_shape, rb_shape_t * dest_shape);
7097static inline uint32_t
7098ROBJECT_IV_CAPACITY(VALUE obj)
7099{
7100 ((void)0);
7101 ((void)0);
7102 return rb_shape_get_shape_by_id(ROBJECT_SHAPE_ID(obj))->capacity;
7103}
7104static inline struct rb_id_table *
7105ROBJECT_IV_HASH(VALUE obj)
7106{
7107 ((void)0);
7108 ((void)0);
7109 return (struct rb_id_table *)((struct RObject *)(obj))->as.heap.ivptr;
7110}
7111static inline void
7112ROBJECT_SET_IV_HASH(VALUE obj, const struct rb_id_table *tbl)
7113{
7114 ((void)0);
7115 ((void)0);
7116 ((struct RObject *)(obj))->as.heap.ivptr = (VALUE *)tbl;
7117}
7118size_t rb_id_table_size(const struct rb_id_table *tbl);
7119static inline uint32_t
7120ROBJECT_IV_COUNT(VALUE obj)
7121{
7122 if (ROBJECT_SHAPE_ID(obj) == ((5 * 2) + 1)) {
7123 return (uint32_t)rb_id_table_size(ROBJECT_IV_HASH(obj));
7124 }
7125 else {
7126 ((void)0);
7127 ((void)0);
7128 return rb_shape_get_shape_by_id(ROBJECT_SHAPE_ID(obj))->next_iv_index;
7129 }
7130}
7131static inline uint32_t
7132RBASIC_IV_COUNT(VALUE obj)
7133{
7134 return rb_shape_get_shape_by_id(rb_shape_get_shape_id(obj))->next_iv_index;
7135}
7136static inline uint32_t
7137RCLASS_IV_COUNT(VALUE obj)
7138{
7139 ((void)0);
7140 uint32_t ivc = rb_shape_get_shape_by_id(RCLASS_SHAPE_ID(obj))->next_iv_index;
7141 return ivc;
7142}
7143rb_shape_t * rb_shape_alloc(ID edge_name, rb_shape_t * parent);
7144rb_shape_t * rb_shape_alloc_with_size_pool_index(ID edge_name, rb_shape_t * parent, uint8_t size_pool_index);
7145rb_shape_t * rb_shape_alloc_with_parent_id(ID edge_name, shape_id_t parent_id);
7146rb_shape_t *rb_shape_traverse_from_new_root(rb_shape_t *initial_shape, rb_shape_t *orig_shape);
7147_Bool rb_shape_set_shape_id(VALUE obj, shape_id_t shape_id);
7148VALUE rb_obj_debug_shape(VALUE self, VALUE obj);
7149VALUE rb_shape_flags_mask(void);
7150void rb_shape_set_too_complex(VALUE obj);
7151
7152
7153typedef void each_shape_callback(rb_shape_t * shape, void *data);
7154void rb_shape_each_shape(each_shape_callback callback, void *data);
7155size_t rb_shape_memsize(rb_shape_t *shape);
7156size_t rb_shape_edges_count(rb_shape_t *shape);
7157size_t rb_shape_depth(rb_shape_t *shape);
7158shape_id_t rb_shape_id(rb_shape_t * shape);
7159
7160
7161struct sched_param {
7162 int sched_priority;
7163};
7164int sched_setparam(
7165 pid_t __pid,
7166 const struct sched_param *__param
7167);
7168int sched_getparam(
7169 pid_t __pid,
7170 struct sched_param *__param
7171);
7172int sched_setscheduler(
7173 pid_t __pid,
7174 int __policy,
7175 const struct sched_param *__param
7176);
7177int sched_getscheduler(
7178 pid_t __pid
7179);
7180int sched_get_priority_max(
7181 int __policy
7182);
7183int sched_get_priority_min(
7184 int __policy
7185);
7186int sched_rr_get_interval(
7187 pid_t __pid,
7188 struct timespec *__interval
7189);
7190int sched_yield( void );
7191int sched_getcpu(void);
7192int sched_getaffinity (pid_t, size_t, cpu_set_t *);
7193int sched_get_thread_affinity (void *, size_t, cpu_set_t *);
7194int sched_setaffinity (pid_t, size_t, const cpu_set_t *);
7195int sched_set_thread_affinity (void *, size_t, const cpu_set_t *);
7196int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
7197int pthread_attr_destroy (pthread_attr_t *);
7198int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
7199int pthread_attr_getguardsize (const pthread_attr_t *, size_t *);
7200int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
7201int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
7202int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
7203int pthread_attr_getscope (const pthread_attr_t *, int *);
7204int pthread_attr_init (pthread_attr_t *);
7205int pthread_attr_setdetachstate (pthread_attr_t *, int);
7206int pthread_attr_setguardsize (pthread_attr_t *, size_t);
7207int pthread_attr_setinheritsched (pthread_attr_t *, int);
7208int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
7209int pthread_attr_setschedpolicy (pthread_attr_t *, int);
7210int pthread_attr_setscope (pthread_attr_t *, int);
7211int pthread_attr_getstack (const pthread_attr_t *, void **, size_t *);
7212int pthread_attr_setstack (pthread_attr_t *, void *, size_t);
7213int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
7214int pthread_attr_setstacksize (pthread_attr_t *, size_t);
7215int pthread_cancel (pthread_t);
7216typedef void (*__cleanup_routine_type) (void *);
7217typedef struct _pthread_cleanup_handler
7218{
7219 __cleanup_routine_type function;
7220 void *arg;
7221 struct _pthread_cleanup_handler *next;
7222} __pthread_cleanup_handler;
7223void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
7224void _pthread_cleanup_pop (int execute);
7225int pthread_cond_broadcast (pthread_cond_t *);
7226int pthread_cond_destroy (pthread_cond_t *);
7227int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
7228int pthread_cond_signal (pthread_cond_t *);
7229int pthread_cond_clockwait (pthread_cond_t *, pthread_mutex_t *,
7230 clockid_t, const struct timespec *);
7231int pthread_cond_timedwait (pthread_cond_t *,
7232 pthread_mutex_t *, const struct timespec *);
7233int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
7234int pthread_condattr_destroy (pthread_condattr_t *);
7235int pthread_condattr_getclock (const pthread_condattr_t *, clockid_t *);
7236int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
7237int pthread_condattr_init (pthread_condattr_t *);
7238int pthread_condattr_setclock (pthread_condattr_t *, clockid_t);
7239int pthread_condattr_setpshared (pthread_condattr_t *, int);
7240int pthread_barrierattr_init (pthread_barrierattr_t *);
7241int pthread_barrierattr_setpshared (pthread_barrierattr_t *, int);
7242int pthread_barrierattr_getpshared (const pthread_barrierattr_t *, int *);
7243int pthread_barrierattr_destroy (pthread_barrierattr_t *);
7244int pthread_barrier_init (pthread_barrier_t *,
7245 const pthread_barrierattr_t *, unsigned);
7246int pthread_barrier_destroy (pthread_barrier_t *);
7247int pthread_barrier_wait (pthread_barrier_t *);
7248int pthread_create (pthread_t *, const pthread_attr_t *,
7249 void *(*)(void *), void *);
7250int pthread_detach (pthread_t);
7251int pthread_equal (pthread_t, pthread_t);
7252void pthread_exit (void *) __attribute__ ((__noreturn__));
7253int pthread_getcpuclockid (pthread_t, clockid_t *);
7254int pthread_getschedparam (pthread_t, int *, struct sched_param *);
7255void *pthread_getspecific (pthread_key_t);
7256int pthread_join (pthread_t, void **);
7257int pthread_key_create (pthread_key_t *, void (*)(void *));
7258int pthread_key_delete (pthread_key_t);
7259int pthread_mutex_destroy (pthread_mutex_t *);
7260int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
7261int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
7262int pthread_mutex_lock (pthread_mutex_t *);
7263int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
7264int pthread_mutex_clocklock (pthread_mutex_t *, clockid_t,
7265 const struct timespec *);
7266int pthread_mutex_timedlock (pthread_mutex_t *, const struct timespec *);
7267int pthread_mutex_trylock (pthread_mutex_t *);
7268int pthread_mutex_unlock (pthread_mutex_t *);
7269int pthread_mutexattr_destroy (pthread_mutexattr_t *);
7270int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
7271int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
7272int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
7273int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
7274int pthread_mutexattr_init (pthread_mutexattr_t *);
7275int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
7276int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
7277int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
7278int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
7279int pthread_spin_destroy (pthread_spinlock_t *);
7280int pthread_spin_init (pthread_spinlock_t *, int);
7281int pthread_spin_lock (pthread_spinlock_t *);
7282int pthread_spin_trylock (pthread_spinlock_t *);
7283int pthread_spin_unlock (pthread_spinlock_t *);
7284int pthread_rwlock_destroy (pthread_rwlock_t *);
7285int pthread_rwlock_init (pthread_rwlock_t *, const pthread_rwlockattr_t *);
7286int pthread_rwlock_rdlock (pthread_rwlock_t *);
7287int pthread_rwlock_clockrdlock (pthread_rwlock_t *, clockid_t,
7288 const struct timespec *);
7289int pthread_rwlock_timedrdlock (pthread_rwlock_t *, const struct timespec *);
7290int pthread_rwlock_tryrdlock (pthread_rwlock_t *);
7291int pthread_rwlock_wrlock (pthread_rwlock_t *);
7292int pthread_rwlock_clockwrlock (pthread_rwlock_t *, clockid_t,
7293 const struct timespec *);
7294int pthread_rwlock_timedwrlock (pthread_rwlock_t *, const struct timespec *);
7295int pthread_rwlock_trywrlock (pthread_rwlock_t *);
7296int pthread_rwlock_unlock (pthread_rwlock_t *);
7297int pthread_rwlockattr_init (pthread_rwlockattr_t *);
7298int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *, int *);
7299int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *, int);
7300int pthread_rwlockattr_destroy (pthread_rwlockattr_t *);
7301int pthread_once (pthread_once_t *, void (*)(void));
7302int pthread_getconcurrency (void);
7303int pthread_setconcurrency (int);
7304pthread_t pthread_self (void);
7305int pthread_setcancelstate (int, int *);
7306int pthread_setcanceltype (int, int *);
7307int pthread_setschedparam (pthread_t, int, const struct sched_param *);
7308int pthread_setschedprio (pthread_t, int);
7309int pthread_setspecific (pthread_key_t, const void *);
7310void pthread_testcancel (void);
7311int pthread_getaffinity_np (pthread_t, size_t, cpu_set_t *);
7312int pthread_getattr_np (pthread_t, pthread_attr_t *);
7313int pthread_getname_np (pthread_t, char *, size_t) __attribute__((__nonnull__(2)));
7314int pthread_setaffinity_np (pthread_t, size_t, const cpu_set_t *);
7315int pthread_setname_np (pthread_t, const char *) __attribute__((__nonnull__(2)));
7316int pthread_sigqueue (pthread_t *, int, const union sigval);
7317int pthread_timedjoin_np (pthread_t, void **, const struct timespec *);
7318int pthread_tryjoin_np (pthread_t, void **);
7319int pthread_yield (void);
7320int pthread_suspend (pthread_t);
7321int pthread_continue (pthread_t);
7322typedef pthread_t rb_nativethread_id_t;
7323typedef pthread_mutex_t rb_nativethread_lock_t;
7324typedef pthread_cond_t rb_nativethread_cond_t;
7325
7326
7327rb_nativethread_id_t rb_nativethread_self(void);
7328void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
7329void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
7330void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
7331void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
7332void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
7333int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
7334void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
7335void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
7336void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
7337void rb_native_cond_signal(rb_nativethread_cond_t *cond);
7338void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
7339void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
7340void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
7341void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
7342void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
7343
7344
7345void *rb_allocate_sigaltstack(void);
7346void *rb_register_sigaltstack(void *);
7347struct rb_thread_sched_item {
7348 union {
7349 struct ccan_list_node ubf;
7350 struct ccan_list_node readyq;
7351 } node;
7352};
7353struct rb_native_thread {
7354 int id;
7355 rb_nativethread_id_t thread_id;
7356 struct rb_thread_struct *running_thread;
7357 struct
7358 {
7359 rb_nativethread_cond_t intr;
7360 rb_nativethread_cond_t readyq;
7361 } cond;
7362 void *altstack;
7363};
7364struct rb_thread_sched {
7365 const struct rb_thread_struct *running;
7366 rb_nativethread_lock_t lock;
7367 struct ccan_list_head readyq;
7368 const struct rb_thread_struct *timer;
7369 int timer_err;
7370 rb_nativethread_cond_t switch_cond;
7371 rb_nativethread_cond_t switch_wait_cond;
7372 int need_yield;
7373 int wait_yield;
7374};
7375
7376
7377extern _Thread_local struct rb_execution_context_struct *ruby_current_ec;
7378
7379
7380void rb_vm_encoded_insn_data_table_init(void);
7381typedef unsigned long rb_num_t;
7382typedef signed long rb_snum_t;
7383enum ruby_tag_type {
7384 RUBY_TAG_NONE = 0x0,
7385 RUBY_TAG_RETURN = 0x1,
7386 RUBY_TAG_BREAK = 0x2,
7387 RUBY_TAG_NEXT = 0x3,
7388 RUBY_TAG_RETRY = 0x4,
7389 RUBY_TAG_REDO = 0x5,
7390 RUBY_TAG_RAISE = 0x6,
7391 RUBY_TAG_THROW = 0x7,
7392 RUBY_TAG_FATAL = 0x8,
7393 RUBY_TAG_MASK = 0xf
7394};
7395enum ruby_vm_throw_flags {
7396 VM_THROW_NO_ESCAPE_FLAG = 0x8000,
7397 VM_THROW_STATE_MASK = 0xff
7398};
7399struct rb_thread_struct;
7400struct rb_control_frame_struct;
7401typedef struct rb_compile_option_struct rb_compile_option_t;
7402union ic_serial_entry {
7403 rb_serial_t raw;
7404 VALUE data[2];
7405};
7406struct iseq_inline_constant_cache_entry {
7407 VALUE flags;
7408 VALUE value;
7409 VALUE _unused1;
7410 VALUE _unused2;
7411 const rb_cref_t *ic_cref;
7412};
7413__extension__ _Static_assert((__builtin_offsetof (struct iseq_inline_constant_cache_entry, ic_cref) + sizeof(const rb_cref_t *)) <= (sizeof(struct RBasic) + sizeof(VALUE[3])), "sizeof_iseq_inline_constant_cache_entry" ": " "(offsetof(struct iseq_inline_constant_cache_entry, ic_cref) + sizeof(const rb_cref_t *)) <= RVALUE_SIZE");
7414struct iseq_inline_constant_cache {
7415 struct iseq_inline_constant_cache_entry *entry;
7416 const ID *segments;
7417};
7418struct iseq_inline_iv_cache_entry {
7419 uintptr_t value;
7420 ID iv_set_name;
7421};
7422struct iseq_inline_cvar_cache_entry {
7423 struct rb_cvar_class_tbl_entry *entry;
7424};
7425union iseq_inline_storage_entry {
7426 struct {
7427 struct rb_thread_struct *running_thread;
7428 VALUE value;
7429 } once;
7430 struct iseq_inline_constant_cache ic_cache;
7431 struct iseq_inline_iv_cache_entry iv_cache;
7432};
7433struct rb_calling_info {
7434 const struct rb_callinfo *ci;
7435 const struct rb_callcache *cc;
7436 VALUE block_handler;
7437 VALUE recv;
7438 int argc;
7439 int kw_splat;
7440};
7441struct rb_execution_context_struct;
7442typedef struct rb_iseq_location_struct {
7443 VALUE pathobj;
7444 VALUE base_label;
7445 VALUE label;
7446 int first_lineno;
7447 int node_id;
7448 rb_code_location_t code_location;
7449} rb_iseq_location_t;
7450static inline VALUE
7451pathobj_path(VALUE pathobj)
7452{
7453 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7454 return pathobj;
7455 }
7456 else {
7457 ((void)0);
7458 return RARRAY_AREF(pathobj, 0);
7459 }
7460}
7461static inline VALUE
7462pathobj_realpath(VALUE pathobj)
7463{
7464 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7465 return pathobj;
7466 }
7467 else {
7468 ((void)0);
7469 return RARRAY_AREF(pathobj, 1);
7470 }
7471}
7472struct rb_mjit_unit;
7473typedef uintptr_t iseq_bits_t;
7474enum rb_iseq_type {
7475 ISEQ_TYPE_TOP,
7476 ISEQ_TYPE_METHOD,
7477 ISEQ_TYPE_BLOCK,
7478 ISEQ_TYPE_CLASS,
7479 ISEQ_TYPE_RESCUE,
7480 ISEQ_TYPE_ENSURE,
7481 ISEQ_TYPE_EVAL,
7482 ISEQ_TYPE_MAIN,
7483 ISEQ_TYPE_PLAIN
7484};
7485struct rb_iseq_constant_body {
7486 enum rb_iseq_type type;
7487 unsigned int iseq_size;
7488 VALUE *iseq_encoded;
7489 struct {
7490 struct {
7491 unsigned int has_lead : 1;
7492 unsigned int has_opt : 1;
7493 unsigned int has_rest : 1;
7494 unsigned int has_post : 1;
7495 unsigned int has_kw : 1;
7496 unsigned int has_kwrest : 1;
7497 unsigned int has_block : 1;
7498 unsigned int ambiguous_param0 : 1;
7499 unsigned int accepts_no_kwarg : 1;
7500 unsigned int ruby2_keywords: 1;
7501 } flags;
7502 unsigned int size;
7503 int lead_num;
7504 int opt_num;
7505 int rest_start;
7506 int post_start;
7507 int post_num;
7508 int block_start;
7509 const VALUE *opt_table;
7510 const struct rb_iseq_param_keyword {
7511 int num;
7512 int required_num;
7513 int bits_start;
7514 int rest_start;
7515 const ID *table;
7516 VALUE *default_values;
7517 } *keyword;
7518 } param;
7519 rb_iseq_location_t location;
7520 struct iseq_insn_info {
7521 const struct iseq_insn_info_entry *body;
7522 unsigned int *positions;
7523 unsigned int size;
7524 struct succ_index_table *succ_index_table;
7525 } insns_info;
7526 const ID *local_table;
7527 struct iseq_catch_table *catch_table;
7528 const struct rb_iseq_struct *parent_iseq;
7529 struct rb_iseq_struct *local_iseq;
7530 union iseq_inline_storage_entry *is_entries;
7531 struct rb_call_data *call_data;
7532 struct {
7533 rb_snum_t flip_count;
7534 VALUE script_lines;
7535 VALUE coverage;
7536 VALUE pc2branchindex;
7537 VALUE *original_iseq;
7538 } variable;
7539 unsigned int local_table_size;
7540 unsigned int ic_size;
7541 unsigned int ise_size;
7542 unsigned int ivc_size;
7543 unsigned int icvarc_size;
7544 unsigned int ci_size;
7545 unsigned int stack_max;
7546 _Bool catch_except_p;
7547 _Bool builtin_inline_p;
7548 union {
7549 iseq_bits_t * list;
7550 iseq_bits_t single;
7551 } mark_bits;
7552 struct rb_id_table *outer_variables;
7553 const rb_iseq_t *mandatory_only_iseq;
7554 VALUE (*jit_func)(struct rb_execution_context_struct *, struct rb_control_frame_struct *);
7555 long unsigned total_calls;
7556 struct rb_mjit_unit *mjit_unit;
7557};
7558struct rb_iseq_struct {
7559 VALUE flags;
7560 VALUE wrapper;
7561 struct rb_iseq_constant_body *body;
7562 union {
7563 struct iseq_compile_data *compile_data;
7564 struct {
7565 VALUE obj;
7566 int index;
7567 } loader;
7568 struct {
7569 struct rb_hook_list_struct *local_hooks;
7570 rb_event_flag_t global_trace_events;
7571 } exec;
7572 } aux;
7573};
7574static inline const rb_iseq_t *
7575rb_iseq_check(const rb_iseq_t *iseq)
7576{
7577 return iseq;
7578}
7579static inline const rb_iseq_t *
7580def_iseq_ptr(rb_method_definition_t *def)
7581{
7582 return rb_iseq_check(def->body.iseq.iseqptr);
7583}
7584enum ruby_special_exceptions {
7585 ruby_error_reenter,
7586 ruby_error_nomemory,
7587 ruby_error_sysstack,
7588 ruby_error_stackfatal,
7589 ruby_error_stream_closed,
7590 ruby_special_error_count
7591};
7592struct rb_vm_struct;
7593typedef void rb_vm_at_exit_func(struct rb_vm_struct*);
7594typedef struct rb_at_exit_list {
7595 rb_vm_at_exit_func *func;
7596 struct rb_at_exit_list *next;
7597} rb_at_exit_list;
7598struct rb_objspace;
7599struct rb_objspace *rb_objspace_alloc(void);
7600void rb_objspace_free(struct rb_objspace *);
7601void rb_objspace_call_finalizer(struct rb_objspace *);
7602typedef struct rb_hook_list_struct {
7603 struct rb_event_hook_struct *hooks;
7604 rb_event_flag_t events;
7605 unsigned int running;
7606 _Bool need_clean;
7607 _Bool is_local;
7608} rb_hook_list_t;
7609typedef const struct rb_builtin_function *RB_BUILTIN;
7610typedef struct rb_vm_struct {
7611 VALUE self;
7612 struct {
7613 struct ccan_list_head set;
7614 unsigned int cnt;
7615 unsigned int blocking_cnt;
7616 struct rb_ractor_struct *main_ractor;
7617 struct rb_thread_struct *main_thread;
7618 struct {
7619 rb_nativethread_lock_t lock;
7620 struct rb_ractor_struct *lock_owner;
7621 unsigned int lock_rec;
7622 _Bool barrier_waiting;
7623 unsigned int barrier_cnt;
7624 rb_nativethread_cond_t barrier_cond;
7625 rb_nativethread_cond_t terminate_cond;
7626 _Bool terminate_waiting;
7627 } sync;
7628 } ractor;
7629 void *main_altstack;
7630 rb_serial_t fork_gen;
7631 rb_nativethread_lock_t waitpid_lock;
7632 struct ccan_list_head waiting_pids;
7633 struct ccan_list_head waiting_grps;
7634 struct ccan_list_head waiting_fds;
7635 volatile int ubf_async_safe;
7636 unsigned int running: 1;
7637 unsigned int thread_abort_on_exception: 1;
7638 unsigned int thread_report_on_exception: 1;
7639 unsigned int thread_ignore_deadlock: 1;
7640 VALUE mark_object_ary;
7641 const VALUE special_exceptions[ruby_special_error_count];
7642 rb_shape_t *shape_list;
7643 rb_shape_t *root_shape;
7644 shape_id_t next_shape_id;
7645 VALUE top_self;
7646 VALUE load_path;
7647 VALUE load_path_snapshot;
7648 VALUE load_path_check_cache;
7649 VALUE expanded_load_path;
7650 VALUE loaded_features;
7651 VALUE loaded_features_snapshot;
7652 VALUE loaded_features_realpaths;
7653 struct st_table *loaded_features_index;
7654 struct st_table *loading_table;
7655 struct {
7656 VALUE cmd[65];
7657 } trap_list;
7658 struct st_table *ensure_rollback_table;
7659 struct rb_postponed_job_struct *postponed_job_buffer;
7660 rb_atomic_t postponed_job_index;
7661 int src_encoding_index;
7662 struct ccan_list_head workqueue;
7663 rb_nativethread_lock_t workqueue_lock;
7664 VALUE orig_progname, progname;
7665 VALUE coverages, me2counter;
7666 int coverage_mode;
7667 st_table * defined_module_hash;
7668 struct rb_objspace *objspace;
7669 rb_at_exit_list *at_exit;
7670 st_table *frozen_strings;
7671 const struct rb_builtin_function *builtin_function_table;
7672 int builtin_inline_index;
7673 struct rb_id_table *negative_cme_table;
7674 st_table *overloaded_cme_table;
7675 struct rb_id_table *constant_cache;
7676 const struct rb_callcache *global_cc_cache_table[1023];
7677 struct {
7678 size_t thread_vm_stack_size;
7679 size_t thread_machine_stack_size;
7680 size_t fiber_vm_stack_size;
7681 size_t fiber_machine_stack_size;
7682 } default_params;
7683} rb_vm_t;
7684struct rb_captured_block {
7685 VALUE self;
7686 const VALUE *ep;
7687 union {
7688 const rb_iseq_t *iseq;
7689 const struct vm_ifunc *ifunc;
7690 VALUE val;
7691 } code;
7692};
7693enum rb_block_handler_type {
7694 block_handler_type_iseq,
7695 block_handler_type_ifunc,
7696 block_handler_type_symbol,
7697 block_handler_type_proc
7698};
7699enum rb_block_type {
7700 block_type_iseq,
7701 block_type_ifunc,
7702 block_type_symbol,
7703 block_type_proc
7704};
7705struct rb_block {
7706 union {
7707 struct rb_captured_block captured;
7708 VALUE symbol;
7709 VALUE proc;
7710 } as;
7711 enum rb_block_type type;
7712};
7713typedef struct rb_control_frame_struct {
7714 const VALUE *pc;
7715 VALUE *sp;
7716 const rb_iseq_t *iseq;
7717 VALUE self;
7718 const VALUE *ep;
7719 const void *block_code;
7720 VALUE *__bp__;
7721 void *jit_return;
7722} rb_control_frame_t;
7723extern const rb_data_type_t ruby_threadptr_data_type;
7724static inline struct rb_thread_struct *
7725rb_thread_ptr(VALUE thval)
7726{
7727 return (struct rb_thread_struct *)rb_check_typeddata(thval, &ruby_threadptr_data_type);
7728}
7729enum rb_thread_status {
7730 THREAD_RUNNABLE,
7731 THREAD_STOPPED,
7732 THREAD_STOPPED_FOREVER,
7733 THREAD_KILLED
7734};
7735typedef void *rb_jmpbuf_t[5];
7736struct rb_vm_tag {
7737 VALUE tag;
7738 VALUE retval;
7739 rb_jmpbuf_t buf;
7740 struct rb_vm_tag *prev;
7741 enum ruby_tag_type state;
7742 unsigned int lock_rec;
7743};
7744__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) > 0, "rb_vm_tag_buf_offset" ": " "offsetof(struct rb_vm_tag, buf) > 0");
7745__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)");
7746struct rb_unblock_callback {
7747 rb_unblock_function_t *func;
7748 void *arg;
7749};
7750struct rb_mutex_struct;
7751typedef struct rb_ensure_entry {
7752 VALUE marker;
7753 VALUE (*e_proc)(VALUE);
7754 VALUE data2;
7755} rb_ensure_entry_t;
7756typedef struct rb_ensure_list {
7757 struct rb_ensure_list *next;
7758 struct rb_ensure_entry entry;
7759} rb_ensure_list_t;
7760typedef struct rb_fiber_struct rb_fiber_t;
7761struct rb_waiting_list {
7762 struct rb_waiting_list *next;
7763 struct rb_thread_struct *thread;
7764 struct rb_fiber_struct *fiber;
7765};
7766struct rb_execution_context_struct {
7767 VALUE *vm_stack;
7768 size_t vm_stack_size;
7769 rb_control_frame_t *cfp;
7770 struct rb_vm_tag *tag;
7771 rb_atomic_t interrupt_flag;
7772 rb_atomic_t interrupt_mask;
7773 rb_fiber_t *fiber_ptr;
7774 struct rb_thread_struct *thread_ptr;
7775 struct rb_id_table *local_storage;
7776 VALUE local_storage_recursive_hash;
7777 VALUE local_storage_recursive_hash_for_trace;
7778 VALUE storage;
7779 const VALUE *root_lep;
7780 VALUE root_svar;
7781 rb_ensure_list_t *ensure_list;
7782 struct rb_trace_arg_struct *trace_arg;
7783 VALUE errinfo;
7784 VALUE passed_block_handler;
7785 uint8_t raised_flag;
7786 enum method_missing_reason method_missing_reason : 8;
7787 VALUE private_const_reference;
7788 struct {
7789 VALUE *stack_start;
7790 VALUE *stack_end;
7791 size_t stack_maxsize;
7792 __attribute__((__aligned__(8))) jmp_buf regs;
7793 } machine;
7794};
7795typedef struct rb_execution_context_struct rb_execution_context_t;
7796void rb_ec_set_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7797void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7798void rb_ec_clear_vm_stack(rb_execution_context_t *ec);
7799struct rb_ext_config {
7800 _Bool ractor_safe;
7801};
7802typedef struct rb_ractor_struct rb_ractor_t;
7803struct rb_native_thread;
7804typedef struct rb_thread_struct {
7805 struct ccan_list_node lt_node;
7806 VALUE self;
7807 rb_ractor_t *ractor;
7808 rb_vm_t *vm;
7809 struct rb_native_thread *nt;
7810 rb_execution_context_t *ec;
7811 struct rb_thread_sched_item sched;
7812 rb_atomic_t serial;
7813 VALUE last_status;
7814 struct rb_calling_info *calling;
7815 VALUE top_self;
7816 VALUE top_wrapper;
7817 enum rb_thread_status status : 2;
7818 unsigned int locking_native_thread : 1;
7819 unsigned int to_kill : 1;
7820 unsigned int abort_on_exception: 1;
7821 unsigned int report_on_exception: 1;
7822 unsigned int pending_interrupt_queue_checked: 1;
7823 int8_t priority;
7824 uint32_t running_time_us;
7825 void *blocking_region_buffer;
7826 VALUE thgroup;
7827 VALUE value;
7828 VALUE pending_interrupt_queue;
7829 VALUE pending_interrupt_mask_stack;
7830 rb_nativethread_lock_t interrupt_lock;
7831 struct rb_unblock_callback unblock;
7832 VALUE locking_mutex;
7833 struct rb_mutex_struct *keeping_mutexes;
7834 struct rb_waiting_list *join_list;
7835 union {
7836 struct {
7837 VALUE proc;
7838 VALUE args;
7839 int kw_splat;
7840 } proc;
7841 struct {
7842 VALUE (*func)(void *);
7843 void *arg;
7844 } func;
7845 } invoke_arg;
7846 enum thread_invoke_type {
7847 thread_invoke_type_none = 0,
7848 thread_invoke_type_proc,
7849 thread_invoke_type_ractor_proc,
7850 thread_invoke_type_func
7851 } invoke_type;
7852 VALUE stat_insn_usage;
7853 rb_fiber_t *root_fiber;
7854 VALUE scheduler;
7855 unsigned int blocking;
7856 VALUE name;
7857 struct rb_ext_config ext_config;
7858} rb_thread_t;
7859static inline unsigned int
7860rb_th_serial(const rb_thread_t *th)
7861{
7862 return (unsigned int)th->serial;
7863}
7864typedef enum {
7865 VM_DEFINECLASS_TYPE_CLASS = 0x00,
7866 VM_DEFINECLASS_TYPE_SINGLETON_CLASS = 0x01,
7867 VM_DEFINECLASS_TYPE_MODULE = 0x02,
7868 VM_DEFINECLASS_TYPE_MASK = 0x07
7869} rb_vm_defineclass_type_t;
7870
7871
7872rb_iseq_t *rb_iseq_new (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum rb_iseq_type);
7873rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
7874rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent, int opt);
7875rb_iseq_t *rb_iseq_new_eval (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, int first_lineno, const rb_iseq_t *parent, int isolated_depth);
7876rb_iseq_t *rb_iseq_new_with_opt(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, int first_lineno, const rb_iseq_t *parent, int isolated_depth,
7877 enum rb_iseq_type, const rb_compile_option_t*);
7878struct iseq_link_anchor;
7879struct rb_iseq_new_with_callback_callback_func {
7880 VALUE flags;
7881 VALUE reserved;
7882 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *);
7883 const void *data;
7884};
7885static inline struct rb_iseq_new_with_callback_callback_func *
7886rb_iseq_new_with_callback_new_callback(
7887 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *), const void *ptr)
7888{
7889 VALUE memo = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)ptr, ((VALUE)RUBY_Qundef), ((VALUE)RUBY_Qfalse));
7890 return (struct rb_iseq_new_with_callback_callback_func *)memo;
7891}
7892rb_iseq_t *rb_iseq_new_with_callback(const struct rb_iseq_new_with_callback_callback_func * ifunc,
7893 VALUE name, VALUE path, VALUE realpath, int first_lineno,
7894 const rb_iseq_t *parent, enum rb_iseq_type, const rb_compile_option_t*);
7895VALUE rb_iseq_disasm(const rb_iseq_t *iseq);
7896int rb_iseq_disasm_insn(VALUE str, const VALUE *iseqval, size_t pos, const rb_iseq_t *iseq, VALUE child);
7897attr_index_t rb_estimate_iv_count(VALUE klass, const rb_iseq_t * initialize_iseq);
7898VALUE rb_iseq_coverage(const rb_iseq_t *iseq);
7899extern VALUE rb_cISeq;
7900extern VALUE rb_cRubyVM;
7901extern VALUE rb_mRubyVMFrozenCore;
7902extern VALUE rb_block_param_proxy;
7903
7904
7905typedef struct {
7906 const struct rb_block block;
7907 unsigned int is_from_method: 1;
7908 unsigned int is_lambda: 1;
7909 unsigned int is_isolated: 1;
7910} rb_proc_t;
7911
7912
7913VALUE rb_proc_isolate(VALUE self);
7914VALUE rb_proc_isolate_bang(VALUE self);
7915VALUE rb_proc_ractor_make_shareable(VALUE self);
7916
7917
7918typedef struct {
7919 VALUE flags;
7920 rb_iseq_t *iseq;
7921 const VALUE *ep;
7922 const VALUE *env;
7923 unsigned int env_size;
7924} rb_env_t;
7925extern const rb_data_type_t ruby_binding_data_type;
7926typedef struct {
7927 const struct rb_block block;
7928 const VALUE pathobj;
7929 int first_lineno;
7930} rb_binding_t;
7931enum vm_check_match_type {
7932 VM_CHECKMATCH_TYPE_WHEN = 1,
7933 VM_CHECKMATCH_TYPE_CASE = 2,
7934 VM_CHECKMATCH_TYPE_RESCUE = 3
7935};
7936enum vm_special_object_type {
7937 VM_SPECIAL_OBJECT_VMCORE = 1,
7938 VM_SPECIAL_OBJECT_CBASE,
7939 VM_SPECIAL_OBJECT_CONST_BASE
7940};
7941enum vm_svar_index {
7942 VM_SVAR_LASTLINE = 0,
7943 VM_SVAR_BACKREF = 1,
7944 VM_SVAR_EXTRA_START = 2,
7945 VM_SVAR_FLIPFLOP_START = 2
7946};
7947typedef struct iseq_inline_constant_cache *IC;
7948typedef struct iseq_inline_iv_cache_entry *IVC;
7949typedef struct iseq_inline_cvar_cache_entry *ICVARC;
7950typedef union iseq_inline_storage_entry *ISE;
7951typedef const struct rb_callinfo *CALL_INFO;
7952typedef const struct rb_callcache *CALL_CACHE;
7953typedef struct rb_call_data *CALL_DATA;
7954typedef VALUE CDHASH;
7955typedef rb_control_frame_t *
7956 (__attribute__ ((__fastcall__)) *rb_insn_func_t)(rb_execution_context_t *, rb_control_frame_t *);
7957enum vm_frame_env_flags {
7958 VM_FRAME_MAGIC_METHOD = 0x11110001,
7959 VM_FRAME_MAGIC_BLOCK = 0x22220001,
7960 VM_FRAME_MAGIC_CLASS = 0x33330001,
7961 VM_FRAME_MAGIC_TOP = 0x44440001,
7962 VM_FRAME_MAGIC_CFUNC = 0x55550001,
7963 VM_FRAME_MAGIC_IFUNC = 0x66660001,
7964 VM_FRAME_MAGIC_EVAL = 0x77770001,
7965 VM_FRAME_MAGIC_RESCUE = 0x78880001,
7966 VM_FRAME_MAGIC_DUMMY = 0x79990001,
7967 VM_FRAME_MAGIC_MASK = 0x7fff0001,
7968 VM_FRAME_FLAG_FINISH = 0x0020,
7969 VM_FRAME_FLAG_BMETHOD = 0x0040,
7970 VM_FRAME_FLAG_CFRAME = 0x0080,
7971 VM_FRAME_FLAG_LAMBDA = 0x0100,
7972 VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
7973 VM_FRAME_FLAG_CFRAME_KW = 0x0400,
7974 VM_FRAME_FLAG_PASSED = 0x0800,
7975 VM_ENV_FLAG_LOCAL = 0x0002,
7976 VM_ENV_FLAG_ESCAPED = 0x0004,
7977 VM_ENV_FLAG_WB_REQUIRED = 0x0008,
7978 VM_ENV_FLAG_ISOLATED = 0x0010,
7979};
7980static inline void VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value);
7981static inline void
7982VM_ENV_FLAGS_SET(const VALUE *ep, VALUE flag)
7983{
7984 VALUE flags = ep[( 0)];
7985 ((void)0);
7986 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags | flag);
7987}
7988static inline void
7989VM_ENV_FLAGS_UNSET(const VALUE *ep, VALUE flag)
7990{
7991 VALUE flags = ep[( 0)];
7992 ((void)0);
7993 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags & ~flag);
7994}
7995static inline unsigned long
7996VM_ENV_FLAGS(const VALUE *ep, long flag)
7997{
7998 VALUE flags = ep[( 0)];
7999 ((void)0);
8000 return flags & flag;
8001}
8002static inline unsigned long
8003VM_FRAME_TYPE(const rb_control_frame_t *cfp)
8004{
8005 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_MAGIC_MASK);
8006}
8007static inline int
8008VM_FRAME_LAMBDA_P(const rb_control_frame_t *cfp)
8009{
8010 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_LAMBDA) != 0;
8011}
8012static inline int
8013VM_FRAME_CFRAME_KW_P(const rb_control_frame_t *cfp)
8014{
8015 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME_KW) != 0;
8016}
8017static inline int
8018VM_FRAME_FINISHED_P(const rb_control_frame_t *cfp)
8019{
8020 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_FINISH) != 0;
8021}
8022static inline int
8023VM_FRAME_BMETHOD_P(const rb_control_frame_t *cfp)
8024{
8025 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BMETHOD) != 0;
8026}
8027static inline int
8028rb_obj_is_iseq(VALUE iseq)
8029{
8030 return imemo_type_p(iseq, imemo_iseq);
8031}
8032static inline int
8033VM_FRAME_CFRAME_P(const rb_control_frame_t *cfp)
8034{
8035 int cframe_p = VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME) != 0;
8036 ((void)0);
8037 return cframe_p;
8038}
8039static inline int
8040VM_FRAME_RUBYFRAME_P(const rb_control_frame_t *cfp)
8041{
8042 return !VM_FRAME_CFRAME_P(cfp);
8043}
8044static inline int
8045VM_ENV_LOCAL_P(const VALUE *ep)
8046{
8047 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_LOCAL) ? 1 : 0;
8048}
8049static inline const VALUE *
8050VM_ENV_PREV_EP(const VALUE *ep)
8051{
8052 ((void)0);
8053 return ((void *)(((ep[(-1)])) & ~0x03));
8054}
8055static inline VALUE
8056VM_ENV_BLOCK_HANDLER(const VALUE *ep)
8057{
8058 ((void)0);
8059 return ep[(-1)];
8060}
8061static inline int
8062VM_ENV_ESCAPED_P(const VALUE *ep)
8063{
8064 ((void)0);
8065 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED) ? 1 : 0;
8066}
8067__attribute__((__nonnull__ (1)))
8068static inline VALUE
8069VM_ENV_ENVVAL(const VALUE *ep)
8070{
8071 VALUE envval = ep[( 1)];
8072 ((void)0);
8073 ((void)0);
8074 return envval;
8075}
8076__attribute__((__nonnull__ (1)))
8077static inline const rb_env_t *
8078VM_ENV_ENVVAL_PTR(const VALUE *ep)
8079{
8080 return (const rb_env_t *)VM_ENV_ENVVAL(ep);
8081}
8082static inline const rb_env_t *
8083vm_env_new(VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
8084{
8085 rb_env_t *env = (rb_env_t *)rb_imemo_new(imemo_env, (VALUE)env_ep, (VALUE)env_body, 0, (VALUE)iseq);
8086 env->env_size = env_size;
8087 env_ep[( 1)] = (VALUE)env;
8088 return env;
8089}
8090static inline void
8091VM_FORCE_WRITE(const VALUE *ptr, VALUE v)
8092{
8093 *((VALUE *)ptr) = v;
8094}
8095static inline void
8096VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value)
8097{
8098 ((void)0);
8099 VM_FORCE_WRITE(ptr, special_const_value);
8100}
8101static inline void
8102VM_STACK_ENV_WRITE(const VALUE *ep, int index, VALUE v)
8103{
8104 ((void)0);
8105 VM_FORCE_WRITE(&ep[index], v);
8106}static inline
8107const VALUE *rb_vm_ep_local_ep(const VALUE *ep);
8108const VALUE *rb_vm_proc_local_ep(VALUE proc);static inline
8109void rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep);
8110void rb_vm_block_copy(VALUE obj, const struct rb_block *dst, const struct rb_block *src);static inline
8111VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
8112static inline const rb_control_frame_t *
8113RUBY_VM_END_CONTROL_FRAME(const rb_execution_context_t *ec)
8114{
8115 return (rb_control_frame_t *)(ec->vm_stack + ec->vm_stack_size);
8116}
8117static inline int
8118RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
8119{
8120 return !((void *)(RUBY_VM_END_CONTROL_FRAME(ec)) > (void *)(cfp));
8121}
8122static inline int
8123VM_BH_ISEQ_BLOCK_P(VALUE block_handler)
8124{
8125 if ((block_handler & 0x03) == 0x01) {
8126 return 1;
8127 }
8128 else {
8129 return 0;
8130 }
8131}
8132static inline VALUE
8133VM_BH_FROM_ISEQ_BLOCK(const struct rb_captured_block *captured)
8134{
8135 VALUE block_handler = ((VALUE)(captured) | (0x01));
8136 ((void)0);
8137 return block_handler;
8138}
8139static inline const struct rb_captured_block *
8140VM_BH_TO_ISEQ_BLOCK(VALUE block_handler)
8141{
8142 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8143 ((void)0);
8144 return captured;
8145}
8146static inline int
8147VM_BH_IFUNC_P(VALUE block_handler)
8148{
8149 if ((block_handler & 0x03) == 0x03) {
8150 return 1;
8151 }
8152 else {
8153 return 0;
8154 }
8155}
8156static inline VALUE
8157VM_BH_FROM_IFUNC_BLOCK(const struct rb_captured_block *captured)
8158{
8159 VALUE block_handler = ((VALUE)(captured) | (0x03));
8160 ((void)0);
8161 return block_handler;
8162}
8163static inline const struct rb_captured_block *
8164VM_BH_TO_IFUNC_BLOCK(VALUE block_handler)
8165{
8166 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8167 ((void)0);
8168 return captured;
8169}
8170static inline const struct rb_captured_block *
8171VM_BH_TO_CAPT_BLOCK(VALUE block_handler)
8172{
8173 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8174 ((void)0);
8175 return captured;
8176}
8177static inline enum rb_block_handler_type
8178vm_block_handler_type(VALUE block_handler)
8179{
8180 if (VM_BH_ISEQ_BLOCK_P(block_handler)) {
8181 return block_handler_type_iseq;
8182 }
8183 else if (VM_BH_IFUNC_P(block_handler)) {
8184 return block_handler_type_ifunc;
8185 }
8186 else if (RB_SYMBOL_P(block_handler)) {
8187 return block_handler_type_symbol;
8188 }
8189 else {
8190 ((void)0);
8191 return block_handler_type_proc;
8192 }
8193}
8194static inline void
8195vm_block_handler_verify(__attribute__ ((__unused__)) VALUE block_handler)
8196{
8197 ((void)0);
8198}
8199static inline int
8200vm_cfp_forwarded_bh_p(const rb_control_frame_t *cfp, VALUE block_handler)
8201{
8202 return ((VALUE) cfp->block_code) == block_handler;
8203}
8204static inline enum rb_block_type
8205vm_block_type(const struct rb_block *block)
8206{
8207 return block->type;
8208}
8209static inline void
8210vm_block_type_set(const struct rb_block *block, enum rb_block_type type)
8211{
8212 struct rb_block *mb = (struct rb_block *)block;
8213 mb->type = type;
8214}
8215static inline const struct rb_block *
8216vm_proc_block(VALUE procval)
8217{
8218 ((void)0);
8219 return &((rb_proc_t *)(((struct RTypedData *)(procval))->data))->block;
8220}
8221static inline const rb_iseq_t *vm_block_iseq(const struct rb_block *block);
8222static inline const VALUE *vm_block_ep(const struct rb_block *block);
8223static inline const rb_iseq_t *
8224vm_proc_iseq(VALUE procval)
8225{
8226 return vm_block_iseq(vm_proc_block(procval));
8227}
8228static inline const VALUE *
8229vm_proc_ep(VALUE procval)
8230{
8231 return vm_block_ep(vm_proc_block(procval));
8232}
8233static inline const rb_iseq_t *
8234vm_block_iseq(const struct rb_block *block)
8235{
8236 switch (vm_block_type(block)) {
8237 case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq);
8238 case block_type_proc: return vm_proc_iseq(block->as.proc);
8239 case block_type_ifunc:
8240 case block_type_symbol: return ((void *)0);
8241 }
8242 __builtin_unreachable();
8243 return ((void *)0);
8244}
8245static inline const VALUE *
8246vm_block_ep(const struct rb_block *block)
8247{
8248 switch (vm_block_type(block)) {
8249 case block_type_iseq:
8250 case block_type_ifunc: return block->as.captured.ep;
8251 case block_type_proc: return vm_proc_ep(block->as.proc);
8252 case block_type_symbol: return ((void *)0);
8253 }
8254 __builtin_unreachable();
8255 return ((void *)0);
8256}
8257static inline VALUE
8258vm_block_self(const struct rb_block *block)
8259{
8260 switch (vm_block_type(block)) {
8261 case block_type_iseq:
8262 case block_type_ifunc:
8263 return block->as.captured.self;
8264 case block_type_proc:
8265 return vm_block_self(vm_proc_block(block->as.proc));
8266 case block_type_symbol:
8267 return ((VALUE)RUBY_Qundef);
8268 }
8269 __builtin_unreachable();
8270 return ((VALUE)RUBY_Qundef);
8271}
8272static inline VALUE
8273VM_BH_TO_SYMBOL(VALUE block_handler)
8274{
8275 ((void)0);
8276 return block_handler;
8277}
8278static inline VALUE
8279VM_BH_FROM_SYMBOL(VALUE symbol)
8280{
8281 ((void)0);
8282 return symbol;
8283}
8284static inline VALUE
8285VM_BH_TO_PROC(VALUE block_handler)
8286{
8287 ((void)0);
8288 return block_handler;
8289}
8290static inline VALUE
8291VM_BH_FROM_PROC(VALUE procval)
8292{
8293 ((void)0);
8294 return procval;
8295}
8296VALUE rb_thread_alloc(VALUE klass);
8297VALUE rb_binding_alloc(VALUE klass);
8298VALUE rb_proc_alloc(VALUE klass);
8299VALUE rb_proc_dup(VALUE self);
8300extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8301extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
8302extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp
8303);
8304void rb_vm_bugreport(const void *);
8305typedef void (*ruby_sighandler_t)(int);
8306__attribute__((__format__(__printf__, 4, 5)))
8307__attribute__((__noreturn__)) void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...);
8308
8309
8310VALUE rb_iseq_eval(const rb_iseq_t *iseq);
8311VALUE rb_iseq_eval_main(const rb_iseq_t *iseq);
8312VALUE rb_iseq_path(const rb_iseq_t *iseq);
8313VALUE rb_iseq_realpath(const rb_iseq_t *iseq);
8314
8315
8316VALUE rb_iseq_pathobj_new(VALUE path, VALUE realpath);
8317void rb_iseq_pathobj_set(const rb_iseq_t *iseq, VALUE path, VALUE realpath);
8318int rb_ec_frame_method_id_and_class(const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp);
8319void rb_ec_setup_exception(const rb_execution_context_t *ec, VALUE mesg, VALUE cause);
8320VALUE rb_vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
8321VALUE rb_vm_make_proc_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
8322static inline VALUE
8323rb_vm_make_proc(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8324{
8325 return rb_vm_make_proc_lambda(ec, captured, klass, 0);
8326}
8327static inline VALUE
8328rb_vm_make_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8329{
8330 return rb_vm_make_proc_lambda(ec, captured, klass, 1);
8331}
8332VALUE rb_vm_make_binding(const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp);
8333VALUE rb_vm_env_local_variables(const rb_env_t *env);
8334const rb_env_t *rb_vm_env_prev_env(const rb_env_t *env);
8335const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars);
8336void rb_vm_inc_const_missing_count(void);
8337VALUE rb_vm_call_kw(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc,
8338 const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat);static inline
8339void rb_vm_pop_frame_no_int(rb_execution_context_t *ec);
8340static void rb_vm_pop_frame(rb_execution_context_t *ec);
8341void rb_thread_start_timer_thread(void);
8342void rb_thread_stop_timer_thread(void);
8343void rb_thread_reset_timer_thread(void);
8344void rb_thread_wakeup_timer_thread(int);
8345static inline void
8346rb_vm_living_threads_init(rb_vm_t *vm)
8347{
8348 ccan_list_head_init(&vm->waiting_fds);
8349 ccan_list_head_init(&vm->waiting_pids);
8350 ccan_list_head_init(&vm->workqueue);
8351 ccan_list_head_init(&vm->waiting_grps);
8352 ccan_list_head_init(&vm->ractor.set);
8353}
8354typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
8355rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8356rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8357int rb_vm_get_sourceline(const rb_control_frame_t *);
8358void rb_vm_stack_to_heap(rb_execution_context_t *ec);
8359void ruby_thread_init_stack(rb_thread_t *th);
8360rb_thread_t * ruby_thread_from_native(void);
8361int ruby_thread_set_native(rb_thread_t *th);
8362int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
8363void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
8364static VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
8365void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
8366void rb_gc_mark_machine_stack(const rb_execution_context_t *ec);static inline
8367void rb_vm_rewrite_cref(rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr);
8368static const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
8369VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, enum ruby_tag_type *stateptr);
8370rb_execution_context_t *rb_vm_main_ractor_ec(rb_vm_t *vm);
8371
8372
8373extern struct rb_ractor_struct *ruby_single_main_ractor;
8374extern rb_vm_t *ruby_current_vm_ptr;
8375extern rb_event_flag_t ruby_vm_event_flags;
8376extern rb_event_flag_t ruby_vm_event_enabled_global_flags;
8377extern unsigned int ruby_vm_event_local_num;
8378
8379
8380static inline rb_thread_t *
8381rb_ec_thread_ptr(const rb_execution_context_t *ec)
8382{
8383 return ec->thread_ptr;
8384}
8385static inline rb_ractor_t *
8386rb_ec_ractor_ptr(const rb_execution_context_t *ec)
8387{
8388 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8389 if (th) {
8390 ((void)0);
8391 return th->ractor;
8392 }
8393 else {
8394 return ((void *)0);
8395 }
8396}
8397static inline rb_vm_t *
8398rb_ec_vm_ptr(const rb_execution_context_t *ec)
8399{
8400 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8401 if (th) {
8402 return th->vm;
8403 }
8404 else {
8405 return ((void *)0);
8406 }
8407}
8408static inline rb_execution_context_t *
8409rb_current_execution_context(_Bool expect_ec)
8410{
8411 rb_execution_context_t *ec = ruby_current_ec;
8412 ((void)0);
8413 return ec;
8414}
8415static inline rb_thread_t *
8416rb_current_thread(void)
8417{
8418 const rb_execution_context_t *ec = rb_current_execution_context(1);
8419 return rb_ec_thread_ptr(ec);
8420}
8421static inline rb_ractor_t *
8422rb_current_ractor(void)
8423{
8424 if (ruby_single_main_ractor) {
8425 return ruby_single_main_ractor;
8426 }
8427 else {
8428 const rb_execution_context_t *ec = rb_current_execution_context(1);
8429 return rb_ec_ractor_ptr(ec);
8430 }
8431}
8432static inline rb_vm_t *
8433rb_current_vm(void)
8434{
8435 return ruby_current_vm_ptr;
8436}
8437void rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec,
8438 unsigned int recorded_lock_rec,
8439 unsigned int current_lock_rec);
8440static inline unsigned int
8441rb_ec_vm_lock_rec(const rb_execution_context_t *ec)
8442{
8443 rb_vm_t *vm = rb_ec_vm_ptr(ec);
8444 if (vm->ractor.sync.lock_owner != rb_ec_ractor_ptr(ec)) {
8445 return 0;
8446 }
8447 else {
8448 return vm->ractor.sync.lock_rec;
8449 }
8450}
8451enum {
8452 TIMER_INTERRUPT_MASK = 0x01,
8453 PENDING_INTERRUPT_MASK = 0x02,
8454 POSTPONED_JOB_INTERRUPT_MASK = 0x04,
8455 TRAP_INTERRUPT_MASK = 0x08,
8456 TERMINATE_INTERRUPT_MASK = 0x10,
8457 VM_BARRIER_INTERRUPT_MASK = 0x20,
8458};
8459static inline _Bool
8460RUBY_VM_INTERRUPTED_ANY(rb_execution_context_t *ec)
8461{
8462 return ec->interrupt_flag & ~(ec)->interrupt_mask;
8463}
8464VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
8465int rb_signal_buff_size(void);
8466int rb_signal_exec(rb_thread_t *th, int sig);
8467void rb_threadptr_check_signal(rb_thread_t *mth);
8468void rb_threadptr_signal_raise(rb_thread_t *th, int sig);
8469void rb_threadptr_signal_exit(rb_thread_t *th);
8470int rb_threadptr_execute_interrupts(rb_thread_t *, int);
8471void rb_threadptr_interrupt(rb_thread_t *th);
8472void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
8473void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
8474void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
8475VALUE rb_ec_get_errinfo(const rb_execution_context_t *ec);
8476void rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo);
8477void rb_execution_context_update(rb_execution_context_t *ec);
8478void rb_execution_context_mark(const rb_execution_context_t *ec);
8479void rb_fiber_close(rb_fiber_t *fib);
8480void Init_native_thread(rb_thread_t *th);
8481int rb_vm_check_ints_blocking(rb_execution_context_t *ec);
8482void rb_vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond);
8483void rb_vm_cond_timedwait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec);
8484static inline void
8485rb_vm_check_ints(rb_execution_context_t *ec)
8486{
8487 ((void)0);
8488 if ((__builtin_expect(!!(RUBY_VM_INTERRUPTED_ANY(ec)), 0))) {
8489 rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);
8490 }
8491}
8492struct rb_trace_arg_struct {
8493 rb_event_flag_t event;
8494 rb_execution_context_t *ec;
8495 const rb_control_frame_t *cfp;
8496 VALUE self;
8497 ID id;
8498 ID called_id;
8499 VALUE klass;
8500 VALUE data;
8501 int klass_solved;
8502 int lineno;
8503 VALUE path;
8504};
8505void rb_hook_list_mark(rb_hook_list_t *hooks);
8506void rb_hook_list_free(rb_hook_list_t *hooks);
8507void rb_hook_list_connect_tracepoint(VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line);
8508void rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval);
8509void rb_exec_event_hooks(struct rb_trace_arg_struct *trace_arg, rb_hook_list_t *hooks, int pop_p);
8510static inline void
8511rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_event_flag_t flag,
8512 VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
8513{
8514 struct rb_trace_arg_struct trace_arg;
8515 ((void)0);
8516 trace_arg.event = flag;
8517 trace_arg.ec = ec;
8518 trace_arg.cfp = ec->cfp;
8519 trace_arg.self = self;
8520 trace_arg.id = id;
8521 trace_arg.called_id = called_id;
8522 trace_arg.klass = klass;
8523 trace_arg.data = data;
8524 trace_arg.path = ((VALUE)RUBY_Qundef);
8525 trace_arg.klass_solved = 0;
8526 rb_exec_event_hooks(&trace_arg, hooks, pop_p);
8527}
8528struct rb_ractor_pub {
8529 VALUE self;
8530 uint32_t id;
8531 rb_hook_list_t hooks;
8532};
8533static inline rb_hook_list_t *
8534rb_ec_ractor_hooks(const rb_execution_context_t *ec)
8535{
8536 struct rb_ractor_pub *cr_pub = (struct rb_ractor_pub *)rb_ec_ractor_ptr(ec);
8537 return &cr_pub->hooks;
8538}
8539static inline void
8540rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
8541{
8542 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);
8543}
8544void rb_vm_trap_exit(rb_vm_t *vm);
8545
8546
8547int rb_thread_check_trap_pending(void);
8548extern VALUE rb_get_coverages(void);
8549extern void rb_set_coverages(VALUE, int, VALUE);
8550extern void rb_clear_coverages(void);
8551extern void rb_reset_coverages(void);
8552extern void rb_resume_coverages(void);
8553extern void rb_suspend_coverages(void);
8554void rb_postponed_job_flush(rb_vm_t *vm);
8555extern VALUE rb_eRactorUnsafeError;
8556extern VALUE rb_eRactorIsolationError;
8557
8558
8559static inline void
8560vm_passed_block_handler_set(rb_execution_context_t *ec, VALUE block_handler)
8561{
8562 vm_block_handler_verify(block_handler);
8563 ec->passed_block_handler = block_handler;
8564}
8565static inline void
8566pass_passed_block_handler(rb_execution_context_t *ec)
8567{
8568 VALUE block_handler = rb_vm_frame_block_handler(ec->cfp);
8569 vm_passed_block_handler_set(ec, block_handler);
8570 VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_PASSED);
8571}
8572int _setjmp(jmp_buf);
8573__attribute__((__noreturn__)) void _longjmp(jmp_buf, int);
8574typedef int error_t;
8575extern int *__errno (void);
8576extern __attribute__((dllimport)) const char * const _sys_errlist[];
8577extern __attribute__((dllimport)) int _sys_nerr;
8578extern __attribute__((dllimport)) const char * const sys_errlist[];
8579extern __attribute__((dllimport)) int sys_nerr;
8580extern __attribute__((dllimport)) char *program_invocation_name;
8581extern __attribute__((dllimport)) char *program_invocation_short_name;
8582static inline void
8583rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec)
8584{
8585 unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec);
8586 if (current_lock_rec != recorded_lock_rec) {
8587 rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec);
8588 }
8589}
8590static inline int
8591rb_ec_tag_state(const rb_execution_context_t *ec)
8592{
8593 struct rb_vm_tag *tag = ec->tag;
8594 enum ruby_tag_type state = tag->state;
8595 tag->state = RUBY_TAG_NONE;
8596 rb_ec_vm_lock_rec_check(ec, tag->lock_rec);
8597 return state;
8598}
8599__attribute__((__noreturn__)) static inline void rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st);
8600static inline void
8601rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st)
8602{
8603 ec->tag->state = st;
8604 __builtin_longjmp(((ec->tag->buf)),(1));
8605}
8606static inline int CREF_SINGLETON(const rb_cref_t *cref);
8607static inline VALUE
8608CREF_CLASS(const rb_cref_t *cref)
8609{
8610 if (CREF_SINGLETON(cref)) {
8611 return rb_class_of(cref->klass_or_self);
8612 }
8613 else {
8614 return cref->klass_or_self;
8615 }
8616}
8617static inline VALUE
8618CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref)
8619{
8620 if (CREF_SINGLETON(cref)) {
8621 return rb_singleton_class(cref->klass_or_self);
8622 }
8623 else {
8624 return cref->klass_or_self;
8625 }
8626}
8627static inline rb_cref_t *
8628CREF_NEXT(const rb_cref_t *cref)
8629{
8630 return cref->next;
8631}
8632static inline const rb_scope_visibility_t *
8633CREF_SCOPE_VISI(const rb_cref_t *cref)
8634{
8635 return &cref->scope_visi;
8636}
8637static inline VALUE
8638CREF_REFINEMENTS(const rb_cref_t *cref)
8639{
8640 return cref->refinements;
8641}
8642static inline void
8643CREF_REFINEMENTS_SET(rb_cref_t *cref, VALUE refs)
8644{
8645 rb_obj_write((VALUE)(cref), __extension__({
8646 ;
8647 ; __typeof__((VALUE *)(&cref->refinements)) unaligned_member_access_result = ((VALUE *)(&cref->refinements));
8648 ; unaligned_member_access_result; }), (VALUE)(refs), "../ruby-3.2.1/eval_intern.h", 227);
8649}
8650static inline int
8651CREF_PUSHED_BY_EVAL(const rb_cref_t *cref)
8652{
8653 return cref->flags & ((VALUE)RUBY_FL_USER5);
8654}
8655static inline void
8656CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref)
8657{
8658 cref->flags |= ((VALUE)RUBY_FL_USER5);
8659}
8660static inline int
8661CREF_SINGLETON(const rb_cref_t *cref)
8662{
8663 return cref->flags & ((VALUE)RUBY_FL_USER7);
8664}
8665static inline void
8666CREF_SINGLETON_SET(rb_cref_t *cref)
8667{
8668 cref->flags |= ((VALUE)RUBY_FL_USER7);
8669}
8670static inline int
8671CREF_OMOD_SHARED(const rb_cref_t *cref)
8672{
8673 return cref->flags & ((VALUE)RUBY_FL_USER6);
8674}
8675static inline void
8676CREF_OMOD_SHARED_SET(rb_cref_t *cref)
8677{
8678 cref->flags |= ((VALUE)RUBY_FL_USER6);
8679}
8680static inline void
8681CREF_OMOD_SHARED_UNSET(rb_cref_t *cref)
8682{
8683 cref->flags &= ~((VALUE)RUBY_FL_USER6);
8684}
8685enum {
8686 RAISED_EXCEPTION = 1,
8687 RAISED_STACKOVERFLOW = 2,
8688 RAISED_NOMEMORY = 4
8689};
8690int rb_ec_set_raised(rb_execution_context_t *ec);
8691int rb_ec_reset_raised(rb_execution_context_t *ec);
8692int rb_ec_stack_check(rb_execution_context_t *ec);
8693VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
8694VALUE rb_make_exception(int argc, const VALUE *argv);
8695__attribute__((__noreturn__)) void rb_method_name_error(VALUE, VALUE);
8696__attribute__((__noreturn__)) void rb_fiber_start(rb_fiber_t*);
8697__attribute__((__noreturn__)) void rb_print_undef(VALUE, ID, rb_method_visibility_t);
8698__attribute__((__noreturn__)) void rb_print_undef_str(VALUE, VALUE);
8699__attribute__((__noreturn__)) void rb_print_inaccessible(VALUE, ID, rb_method_visibility_t);
8700__attribute__((__noreturn__)) void rb_vm_localjump_error(const char *,VALUE, int);
8701__attribute__((__noreturn__)) void rb_vm_jump_tag_but_local_jump(int);
8702VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
8703rb_cref_t *rb_vm_cref(void);
8704rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void);
8705VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename);
8706void rb_vm_set_progname(VALUE filename);
8707VALUE rb_vm_cbase(void);
8708VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec);
8709VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n);
8710VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, _Bool skip_internal);
8711static inline char *
8712rb_char_next(const char *p)
8713{
8714 if (p) {
8715 int len = mblen(p, 0x7fffffff);
8716 p += len > 0 ? len : 1;
8717 }
8718 return (char *)p;
8719}
8720static inline void
8721translit_char(char *p, int from, int to)
8722{
8723 while (*p) {
8724 if ((unsigned char)*p == from)
8725 *p = to;
8726 p = rb_char_next(p);
8727 }
8728}
8729const char *rb_obj_info(VALUE obj);
8730const char *rb_raw_obj_info(char *const buff, const size_t buff_size, VALUE obj);
8731VALUE rb_gc_disable_no_rest(void);
8732struct rb_thread_struct;
8733size_t rb_size_pool_slot_size(unsigned char pool_id);
8734
8735
8736size_t rb_objspace_data_type_memsize(VALUE obj);
8737void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
8738void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
8739int rb_objspace_markable_object_p(VALUE obj);
8740int rb_objspace_internal_object_p(VALUE obj);
8741int rb_objspace_marked_object_p(VALUE obj);
8742void rb_objspace_each_objects(
8743 int (*callback)(void *start, void *end, size_t stride, void *data),
8744 void *data);
8745void rb_objspace_each_objects_without_setup(
8746 int (*callback)(void *, void *, size_t, void *),
8747 void *data);
8748size_t rb_gc_obj_slot_size(VALUE obj);
8749
8750
8751struct rb_iseq_struct;
8752int rb_dvar_defined(ID, const struct rb_iseq_struct *);
8753int rb_local_defined(ID, const struct rb_iseq_struct *);
8754const char *rb_insns_name(int i);
8755VALUE rb_insns_name_array(void);
8756int rb_iseq_cdhash_cmp(VALUE val, VALUE lit);
8757st_index_t rb_iseq_cdhash_hash(VALUE a);
8758int rb_vm_insn_addr2insn(const void *);
8759int rb_vm_insn_decode(const VALUE encoded);
8760extern _Bool ruby_vm_keep_script_lines;
8761
8762
8763rb_event_flag_t rb_iseq_event_flags(const struct rb_iseq_struct *iseq, size_t pos);
8764
8765
8766extern const int ruby_api_version[];
8767typedef void (*rb_iseq_callback)(const rb_iseq_t *, void *);
8768extern const ID rb_iseq_shared_exc_local_tbl[];
8769static inline rb_snum_t
8770ISEQ_FLIP_CNT_INCREMENT(const rb_iseq_t *iseq)
8771{
8772 rb_snum_t cnt = ((iseq)->body)->variable.flip_count;
8773 ((iseq)->body)->variable.flip_count += 1;
8774 return cnt;
8775}
8776static inline VALUE *
8777ISEQ_ORIGINAL_ISEQ(const rb_iseq_t *iseq)
8778{
8779 return ((iseq)->body)->variable.original_iseq;
8780}
8781static inline void
8782ISEQ_ORIGINAL_ISEQ_CLEAR(const rb_iseq_t *iseq)
8783{
8784 void *ptr = ((iseq)->body)->variable.original_iseq;
8785 ((iseq)->body)->variable.original_iseq = ((void *)0);
8786 if (ptr) {
8787 ruby_xfree(ptr);
8788 }
8789}
8790static inline VALUE *
8791ISEQ_ORIGINAL_ISEQ_ALLOC(const rb_iseq_t *iseq, long size)
8792{
8793 return ((iseq)->body)->variable.original_iseq =
8794 ((VALUE *)ruby_xmalloc2((size), sizeof(VALUE)));
8795}
8796struct iseq_compile_data {
8797 const VALUE err_info;
8798 const VALUE catch_table_ary;
8799 struct iseq_label_data *start_label;
8800 struct iseq_label_data *end_label;
8801 struct iseq_label_data *redo_label;
8802 const rb_iseq_t *current_block;
8803 struct iseq_compile_data_ensure_node_stack *ensure_node_stack;
8804 struct {
8805 struct iseq_compile_data_storage *storage_head;
8806 struct iseq_compile_data_storage *storage_current;
8807 } node;
8808 struct {
8809 struct iseq_compile_data_storage *storage_head;
8810 struct iseq_compile_data_storage *storage_current;
8811 } insn;
8812 _Bool in_rescue;
8813 int loopval_popped;
8814 int last_line;
8815 int label_no;
8816 int node_level;
8817 int isolated_depth;
8818 unsigned int ci_index;
8819 unsigned int ic_index;
8820 const rb_compile_option_t *option;
8821 struct rb_id_table *ivar_cache_table;
8822 const struct rb_builtin_function *builtin_function_table;
8823 const NODE *root_node;
8824};
8825static inline struct iseq_compile_data *
8826ISEQ_COMPILE_DATA(const rb_iseq_t *iseq)
8827{
8828 if (iseq->flags & ((VALUE)RUBY_FL_USER6)) {
8829 return iseq->aux.compile_data;
8830 }
8831 else {
8832 return ((void *)0);
8833 }
8834}
8835static inline void
8836ISEQ_COMPILE_DATA_ALLOC(rb_iseq_t *iseq)
8837{
8838 iseq->aux.compile_data = (((struct iseq_compile_data *)ruby_xcalloc((1), sizeof(struct iseq_compile_data))));
8839 iseq->flags |= ((VALUE)RUBY_FL_USER6);
8840}
8841static inline void
8842ISEQ_COMPILE_DATA_CLEAR(rb_iseq_t *iseq)
8843{
8844 iseq->flags &= ~((VALUE)RUBY_FL_USER6);
8845 iseq->aux.compile_data = ((void *)0);
8846}
8847static inline rb_iseq_t *
8848iseq_imemo_alloc(void)
8849{
8850 return (rb_iseq_t *)rb_imemo_new(imemo_iseq, 0, 0, 0, 0);
8851}
8852VALUE rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
8853void rb_ibf_load_iseq_complete(rb_iseq_t *iseq);
8854const rb_iseq_t *rb_iseq_ibf_load(VALUE str);
8855const rb_iseq_t *rb_iseq_ibf_load_bytes(const char *cstr, size_t);
8856VALUE rb_iseq_ibf_load_extra_data(VALUE str);
8857void rb_iseq_init_trace(rb_iseq_t *iseq);
8858int 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);
8859int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval);
8860const rb_iseq_t *rb_iseq_load_iseq(VALUE fname);
8861unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
8862int rb_vm_insn_addr2opcode(const void *addr);
8863
8864
8865VALUE rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node);
8866VALUE rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc);
8867VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
8868void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
8869 VALUE locals, VALUE args,
8870 VALUE exception, VALUE body);
8871void rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *arena);
8872VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
8873VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
8874unsigned int rb_iseq_line_no(const rb_iseq_t *iseq, size_t pos);
8875int rb_iseq_node_id(const rb_iseq_t *iseq, size_t pos);
8876void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
8877void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
8878void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
8879struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
8880VALUE rb_iseqw_new(const rb_iseq_t *iseq);
8881const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
8882VALUE rb_iseq_absolute_path(const rb_iseq_t *iseq);
8883int rb_iseq_from_eval_p(const rb_iseq_t *iseq);
8884VALUE rb_iseq_type(const rb_iseq_t *iseq);
8885VALUE rb_iseq_label(const rb_iseq_t *iseq);
8886VALUE rb_iseq_base_label(const rb_iseq_t *iseq);
8887VALUE rb_iseq_first_lineno(const rb_iseq_t *iseq);
8888VALUE rb_iseq_method_name(const rb_iseq_t *iseq);
8889void rb_iseq_code_location(const rb_iseq_t *iseq, int *first_lineno, int *first_column, int *last_lineno, int *last_column);
8890void rb_iseq_remove_coverage_all(void);
8891const rb_iseq_t *rb_method_iseq(VALUE body);
8892const rb_iseq_t *rb_proc_get_iseq(VALUE proc, int *is_proc);
8893struct rb_compile_option_struct {
8894 unsigned int inline_const_cache: 1;
8895 unsigned int peephole_optimization: 1;
8896 unsigned int tailcall_optimization: 1;
8897 unsigned int specialized_instruction: 1;
8898 unsigned int operands_unification: 1;
8899 unsigned int instructions_unification: 1;
8900 unsigned int stack_caching: 1;
8901 unsigned int frozen_string_literal: 1;
8902 unsigned int debug_frozen_string_literal: 1;
8903 unsigned int coverage_enabled: 1;
8904 int debug_level;
8905};
8906struct iseq_insn_info_entry {
8907 int line_no;
8908 int node_id;
8909 rb_event_flag_t events;
8910};
8911enum rb_catch_type {
8912 CATCH_TYPE_RESCUE = __builtin_choose_expr( __builtin_constant_p(1), ((VALUE)(1)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(1)),
8913 CATCH_TYPE_ENSURE = __builtin_choose_expr( __builtin_constant_p(2), ((VALUE)(2)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(2)),
8914 CATCH_TYPE_RETRY = __builtin_choose_expr( __builtin_constant_p(3), ((VALUE)(3)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(3)),
8915 CATCH_TYPE_BREAK = __builtin_choose_expr( __builtin_constant_p(4), ((VALUE)(4)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(4)),
8916 CATCH_TYPE_REDO = __builtin_choose_expr( __builtin_constant_p(5), ((VALUE)(5)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(5)),
8917 CATCH_TYPE_NEXT = __builtin_choose_expr( __builtin_constant_p(6), ((VALUE)(6)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(6))
8918};
8919struct iseq_catch_table_entry {
8920 enum rb_catch_type type;
8921 rb_iseq_t *iseq;
8922 unsigned int start;
8923 unsigned int end;
8924 unsigned int cont;
8925 unsigned int sp;
8926};
8927struct iseq_catch_table { unsigned int size; struct iseq_catch_table_entry entries[]; } __attribute__((packed));
8928static inline int
8929iseq_catch_table_bytes(int n)
8930{
8931 enum {
8932 catch_table_entry_size = sizeof(struct iseq_catch_table_entry),
8933 catch_table_entries_max = (0x7fffffff - __builtin_offsetof (struct iseq_catch_table, entries)) / catch_table_entry_size
8934 };
8935 if (n > catch_table_entries_max) rb_fatal("too large iseq_catch_table - %d", n);
8936 return (int)(__builtin_offsetof (struct iseq_catch_table, entries) +
8937 n * catch_table_entry_size);
8938}
8939struct iseq_compile_data_storage {
8940 struct iseq_compile_data_storage *next;
8941 unsigned int pos;
8942 unsigned int size;
8943 char buff[];
8944};
8945enum defined_type {
8946 DEFINED_NOT_DEFINED,
8947 DEFINED_NIL = 1,
8948 DEFINED_IVAR,
8949 DEFINED_LVAR,
8950 DEFINED_GVAR,
8951 DEFINED_CVAR,
8952 DEFINED_CONST,
8953 DEFINED_METHOD,
8954 DEFINED_YIELD,
8955 DEFINED_ZSUPER,
8956 DEFINED_SELF,
8957 DEFINED_TRUE,
8958 DEFINED_FALSE,
8959 DEFINED_ASGN,
8960 DEFINED_EXPR,
8961 DEFINED_REF,
8962 DEFINED_FUNC,
8963 DEFINED_CONST_FROM
8964};
8965VALUE rb_iseq_defined_string(enum defined_type type);
8966VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
8967
8968
8969struct rb_thread_struct;
8970struct rb_fiber_struct;
8971struct rb_execution_context_struct;
8972void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
8973void ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(VALUE), VALUE (*rollback_func)(VALUE));
8974void rb_jit_cont_init(void);
8975void rb_jit_cont_each_iseq(rb_iseq_callback callback, void *data);
8976void rb_jit_cont_finish(void);
8977VALUE rb_fiber_inherit_storage(struct rb_execution_context_struct *ec, struct rb_fiber_struct *fiber);
8978VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
8979unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
8980struct rb_execution_context_struct * rb_fiberptr_get_ec(struct rb_fiber_struct *fiber);
8981
8982
8983enum ruby_coderange_type {
8984 RUBY_ENC_CODERANGE_UNKNOWN = 0,
8985 RUBY_ENC_CODERANGE_7BIT = ((int)RUBY_FL_USER8),
8986 RUBY_ENC_CODERANGE_VALID = ((int)RUBY_FL_USER9),
8987 RUBY_ENC_CODERANGE_BROKEN = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)),
8988 RUBY_ENC_CODERANGE_MASK = (RUBY_ENC_CODERANGE_7BIT|
8989 RUBY_ENC_CODERANGE_VALID|
8990 RUBY_ENC_CODERANGE_BROKEN)
8991};
8992__attribute__((__const__))
8993static inline int
8994rb_enc_coderange_clean_p(int cr)
8995{
8996 return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT;
8997}
8998__attribute__((__const__))
8999static inline _Bool
9000RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr)
9001{
9002 return rb_enc_coderange_clean_p(cr);
9003}
9004__attribute__((__pure__))
9005static inline enum ruby_coderange_type
9006RB_ENC_CODERANGE(VALUE obj)
9007{
9008 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9009 return ((enum ruby_coderange_type)ret);
9010}
9011__attribute__((__pure__))
9012static inline _Bool
9013RB_ENC_CODERANGE_ASCIIONLY(VALUE obj)
9014{
9015 return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT;
9016}
9017static inline void
9018RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr)
9019{
9020 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9021 RB_FL_SET_RAW(obj, cr);
9022}
9023static inline void
9024RB_ENC_CODERANGE_CLEAR(VALUE obj)
9025{
9026 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9027}
9028__attribute__((__const__))
9029static inline enum ruby_coderange_type
9030RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b)
9031{
9032 if (a == RUBY_ENC_CODERANGE_7BIT) {
9033 return b;
9034 }
9035 else if (a != RUBY_ENC_CODERANGE_VALID) {
9036 return RUBY_ENC_CODERANGE_UNKNOWN;
9037 }
9038 else if (b == RUBY_ENC_CODERANGE_7BIT) {
9039 return RUBY_ENC_CODERANGE_VALID;
9040 }
9041 else {
9042 return b;
9043 }
9044}
9045
9046
9047
9048
9049typedef unsigned char OnigUChar;
9050typedef unsigned int OnigCodePoint;
9051typedef unsigned int OnigCtype;
9052typedef size_t OnigDistance;
9053typedef ptrdiff_t OnigPosition;
9054typedef unsigned int OnigCaseFoldType;
9055extern OnigCaseFoldType OnigDefaultCaseFoldFlag;
9056typedef struct {
9057 int byte_len;
9058 int code_len;
9059 OnigCodePoint code[3];
9060} OnigCaseFoldCodeItem;
9061typedef struct {
9062 OnigCodePoint esc;
9063 OnigCodePoint anychar;
9064 OnigCodePoint anytime;
9065 OnigCodePoint zero_or_one_time;
9066 OnigCodePoint one_or_more_time;
9067 OnigCodePoint anychar_anytime;
9068} OnigMetaCharTableType;
9069typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
9070typedef struct OnigEncodingTypeST {
9071 int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
9072 const char* name;
9073 int max_enc_len;
9074 int min_enc_len;
9075 int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9076 OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9077 int (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
9078 int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
9079 int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
9080 int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
9081 int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
9082 int (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
9083 int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
9084 int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
9085 OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9086 int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9087 int (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
9088 int ruby_encoding_index;
9089 unsigned int flags;
9090} OnigEncodingType;
9091typedef const OnigEncodingType* OnigEncoding;
9092extern const OnigEncodingType OnigEncodingASCII;
9093extern
9094int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
9095extern
9096int onigenc_mbclen(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
9097extern
9098OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
9099extern
9100int onigenc_init(void);
9101extern
9102int onigenc_set_default_encoding(OnigEncoding enc);
9103extern
9104OnigEncoding onigenc_get_default_encoding(void);
9105extern
9106OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
9107extern
9108OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9109extern
9110OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9111extern
9112OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9113extern
9114int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
9115extern
9116int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
9117extern
9118int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);
9119typedef unsigned int OnigOptionType;
9120typedef struct {
9121 unsigned int op;
9122 unsigned int op2;
9123 unsigned int behavior;
9124 OnigOptionType options;
9125 OnigMetaCharTableType meta_char_table;
9126} OnigSyntaxType;
9127extern const OnigSyntaxType OnigSyntaxASIS;
9128extern const OnigSyntaxType OnigSyntaxPosixBasic;
9129extern const OnigSyntaxType OnigSyntaxPosixExtended;
9130extern const OnigSyntaxType OnigSyntaxEmacs;
9131extern const OnigSyntaxType OnigSyntaxGrep;
9132extern const OnigSyntaxType OnigSyntaxGnuRegex;
9133extern const OnigSyntaxType OnigSyntaxJava;
9134extern const OnigSyntaxType OnigSyntaxPerl58;
9135extern const OnigSyntaxType OnigSyntaxPerl58_NG;
9136extern const OnigSyntaxType OnigSyntaxPerl;
9137extern const OnigSyntaxType OnigSyntaxRuby;
9138extern const OnigSyntaxType OnigSyntaxPython;
9139extern const OnigSyntaxType* OnigDefaultSyntax;
9140struct re_registers {
9141 int allocated;
9142 int num_regs;
9143 OnigPosition* beg;
9144 OnigPosition* end;
9145};
9146typedef struct re_registers OnigRegion;
9147typedef struct {
9148 OnigEncoding enc;
9149 OnigUChar* par;
9150 OnigUChar* par_end;
9151} OnigErrorInfo;
9152typedef struct {
9153 int lower;
9154 int upper;
9155 long base_num;
9156 long inner_num;
9157} OnigRepeatRange;
9158typedef void (*OnigWarnFunc)(const char* s);
9159extern void onig_null_warn(const char* s);
9160typedef struct re_pattern_buffer {
9161 unsigned char* p;
9162 unsigned int used;
9163 unsigned int alloc;
9164 int num_mem;
9165 int num_repeat;
9166 int num_null_check;
9167 int num_comb_exp_check;
9168 int num_call;
9169 unsigned int capture_history;
9170 unsigned int bt_mem_start;
9171 unsigned int bt_mem_end;
9172 int stack_pop_level;
9173 int repeat_range_alloc;
9174 OnigOptionType options;
9175 OnigRepeatRange* repeat_range;
9176 OnigEncoding enc;
9177 const OnigSyntaxType* syntax;
9178 void* name_table;
9179 OnigCaseFoldType case_fold_flag;
9180 int optimize;
9181 int threshold_len;
9182 int anchor;
9183 OnigDistance anchor_dmin;
9184 OnigDistance anchor_dmax;
9185 int sub_anchor;
9186 unsigned char *exact;
9187 unsigned char *exact_end;
9188 unsigned char map[256];
9189 int *int_map;
9190 int *int_map_backward;
9191 OnigDistance dmin;
9192 OnigDistance dmax;
9193 uint64_t timelimit;
9194 struct re_pattern_buffer* chain;
9195} OnigRegexType;
9196typedef OnigRegexType* OnigRegex;
9197typedef OnigRegexType regex_t;
9198typedef struct {
9199 int num_of_elements;
9200 OnigEncoding pattern_enc;
9201 OnigEncoding target_enc;
9202 const OnigSyntaxType* syntax;
9203 OnigOptionType option;
9204 OnigCaseFoldType case_fold_flag;
9205} OnigCompileInfo;
9206extern
9207int onig_initialize(OnigEncoding encodings[], int n);
9208extern
9209int onig_init(void);
9210extern
9211int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
9212extern
9213void onig_set_warn_func(OnigWarnFunc f);
9214extern
9215void onig_set_verb_warn_func(OnigWarnFunc f);
9216extern
9217int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
9218extern
9219int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
9220extern
9221int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
9222extern
9223int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
9224extern
9225void onig_free(OnigRegex);
9226extern
9227void onig_free_body(OnigRegex);
9228extern
9229OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
9230extern
9231OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
9232extern
9233OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
9234extern
9235OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
9236extern
9237int onig_check_linear_time(OnigRegex reg);
9238extern
9239OnigRegion* onig_region_new(void);
9240extern
9241void onig_region_init(OnigRegion* region);
9242extern
9243void onig_region_free(OnigRegion* region, int free_self);
9244extern
9245void onig_region_copy(OnigRegion* to, const OnigRegion* from);
9246extern
9247void onig_region_clear(OnigRegion* region);
9248extern
9249int onig_region_resize(OnigRegion* region, int n);
9250extern
9251int onig_region_set(OnigRegion* region, int at, int beg, int end);
9252extern
9253int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
9254extern
9255int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
9256extern
9257int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
9258extern
9259int onig_number_of_names(const OnigRegexType *reg);
9260extern
9261int onig_number_of_captures(const OnigRegexType *reg);
9262extern
9263int onig_number_of_capture_histories(const OnigRegexType *reg);
9264extern
9265int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
9266extern
9267int onig_noname_group_capture_is_active(const OnigRegexType *reg);
9268extern
9269OnigEncoding onig_get_encoding(const OnigRegexType *reg);
9270extern
9271OnigOptionType onig_get_options(const OnigRegexType *reg);
9272extern
9273OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
9274extern
9275const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
9276extern
9277int onig_set_default_syntax(const OnigSyntaxType* syntax);
9278extern
9279void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
9280extern
9281unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
9282extern
9283unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
9284extern
9285unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
9286extern
9287OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
9288extern
9289void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
9290extern
9291void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
9292extern
9293void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
9294extern
9295void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
9296extern
9297int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
9298extern
9299void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
9300extern
9301OnigCaseFoldType onig_get_default_case_fold_flag(void);
9302extern
9303int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
9304extern
9305unsigned int onig_get_match_stack_limit_size(void);
9306extern
9307int onig_set_match_stack_limit_size(unsigned int size);
9308extern
9309unsigned int onig_get_parse_depth_limit(void);
9310extern
9311int onig_set_parse_depth_limit(unsigned int depth);
9312extern
9313int onig_end(void);
9314extern
9315const char* onig_version(void);
9316extern
9317const char* onig_copyright(void);
9318
9319
9320
9321
9322extern VALUE rb_cEncoding;
9323enum ruby_encoding_consts {
9324 RUBY_ENCODING_INLINE_MAX = 127,
9325 RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10),
9326 RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<<RUBY_ENCODING_SHIFT
9327 ),
9328 RUBY_ENCODING_MAXNAMELEN = 42
9329};
9330static inline void
9331RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
9332{
9333 VALUE f = encindex;
9334 f <<= RUBY_ENCODING_SHIFT;
9335 RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
9336 RB_FL_SET_RAW(obj, f);
9337}
9338static inline int
9339RB_ENCODING_GET_INLINED(VALUE obj)
9340{
9341 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT;
9342 return ((int)ret);
9343}
9344typedef const OnigEncodingType rb_encoding;
9345
9346int rb_char_to_option_kcode(int c, int *option, int *kcode);
9347int rb_enc_replicate(const char *name, rb_encoding *src);
9348int rb_define_dummy_encoding(const char *name);
9349__attribute__((__pure__))
9350int rb_enc_dummy_p(rb_encoding *enc);
9351__attribute__((__pure__))
9352int rb_enc_to_index(rb_encoding *enc);
9353int rb_enc_get_index(VALUE obj);
9354static inline int
9355RB_ENCODING_GET(VALUE obj)
9356{
9357 int encindex = RB_ENCODING_GET_INLINED(obj);
9358 if (encindex == RUBY_ENCODING_INLINE_MAX) {
9359 return rb_enc_get_index(obj);
9360 }
9361 else {
9362 return encindex;
9363 }
9364}
9365void rb_enc_set_index(VALUE obj, int encindex);
9366static inline void
9367RB_ENCODING_SET(VALUE obj, int encindex)
9368{
9369 rb_enc_set_index(obj, encindex);
9370}
9371static inline void
9372RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr)
9373{
9374 RB_ENCODING_SET(obj, encindex);
9375 RB_ENC_CODERANGE_SET(obj, cr);
9376}
9377__attribute__((__pure__))
9378int rb_enc_capable(VALUE obj);
9379int rb_enc_find_index(const char *name);
9380int rb_enc_alias(const char *alias, const char *orig);
9381int rb_to_encoding_index(VALUE obj);
9382rb_encoding *rb_to_encoding(VALUE obj);
9383rb_encoding *rb_find_encoding(VALUE obj);
9384rb_encoding *rb_enc_get(VALUE obj);
9385rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2);
9386rb_encoding *rb_enc_check(VALUE str1,VALUE str2);
9387VALUE rb_enc_associate_index(VALUE obj, int encindex);
9388VALUE rb_enc_associate(VALUE obj, rb_encoding *enc);
9389void rb_enc_copy(VALUE dst, VALUE src);
9390rb_encoding *rb_enc_from_index(int idx);
9391rb_encoding *rb_enc_find(const char *name);
9392static inline const char *
9393rb_enc_name(rb_encoding *enc)
9394{
9395 return enc->name;
9396}
9397static inline int
9398rb_enc_mbminlen(rb_encoding *enc)
9399{
9400 return enc->min_enc_len;
9401}
9402static inline int
9403rb_enc_mbmaxlen(rb_encoding *enc)
9404{
9405 return enc->max_enc_len;
9406}
9407int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);
9408int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc);
9409int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);
9410int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);
9411unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc);
9412static inline unsigned int
9413rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc)
9414{
9415 return rb_enc_codepoint_len(p, e, 0, enc);
9416}
9417static inline OnigCodePoint
9418rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc)
9419{
9420 const OnigUChar *up = ((const OnigUChar *)p);
9421 const OnigUChar *ue = ((const OnigUChar *)e);
9422 return (enc)->mbc_to_code((up),(ue),enc);
9423}
9424int rb_enc_codelen(int code, rb_encoding *enc);
9425static inline int
9426rb_enc_code_to_mbclen(int c, rb_encoding *enc)
9427{
9428 OnigCodePoint uc = ((OnigCodePoint)c);
9429 return (enc)->code_to_mbclen(uc,enc);
9430}
9431static inline int
9432rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc)
9433{
9434 OnigCodePoint uc = ((OnigCodePoint)c);
9435 OnigUChar *ubuf = ((OnigUChar *)buf);
9436 return (enc)->code_to_mbc(uc,ubuf,enc);
9437}
9438static inline char *
9439rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc)
9440{
9441 const OnigUChar *us = ((const OnigUChar *)s);
9442 const OnigUChar *up = ((const OnigUChar *)p);
9443 const OnigUChar *ue = ((const OnigUChar *)e);
9444 OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue);
9445 return ((char *)ur);
9446}
9447static inline char *
9448rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9449{
9450 const OnigUChar *us = ((const OnigUChar *)s);
9451 const OnigUChar *up = ((const OnigUChar *)p);
9452 const OnigUChar *ue = ((const OnigUChar *)e);
9453 OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue);
9454 return ((char *)ur);
9455}
9456static inline char *
9457rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9458{
9459 const OnigUChar *us = ((const OnigUChar *)s);
9460 const OnigUChar *up = ((const OnigUChar *)p);
9461 const OnigUChar *ue = ((const OnigUChar *)e);
9462 OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue);
9463 return ((char *)ur);
9464}
9465static inline char *
9466rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc)
9467{
9468 const OnigUChar *us = ((const OnigUChar *)s);
9469 const OnigUChar *up = ((const OnigUChar *)p);
9470 const OnigUChar *ue = ((const OnigUChar *)e);
9471 const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n);
9472 return ((char *)ur);
9473}
9474static inline int
9475rb_enc_asciicompat_inline(rb_encoding *enc)
9476{
9477 return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc);
9478}
9479static inline _Bool
9480rb_enc_asciicompat(rb_encoding *enc)
9481{
9482 if (rb_enc_mbminlen(enc) != 1) {
9483 return 0;
9484 }
9485 else if (rb_enc_dummy_p(enc)) {
9486 return 0;
9487 }
9488 else {
9489 return 1;
9490 }
9491}
9492static inline _Bool
9493rb_enc_str_asciicompat_p(VALUE str)
9494{
9495 rb_encoding *enc = rb_enc_get(str);
9496 return rb_enc_asciicompat(enc);
9497}
9498VALUE rb_enc_from_encoding(rb_encoding *enc);
9499__attribute__((__pure__))
9500int rb_enc_unicode_p(rb_encoding *enc);
9501__attribute__((__returns_nonnull__))
9502rb_encoding *rb_ascii8bit_encoding(void);
9503__attribute__((__returns_nonnull__))
9504rb_encoding *rb_utf8_encoding(void);
9505__attribute__((__returns_nonnull__))
9506rb_encoding *rb_usascii_encoding(void);
9507rb_encoding *rb_locale_encoding(void);
9508rb_encoding *rb_filesystem_encoding(void);
9509rb_encoding *rb_default_external_encoding(void);
9510rb_encoding *rb_default_internal_encoding(void);
9511__attribute__((__const__))
9512int rb_ascii8bit_encindex(void);
9513static inline _Bool
9514RB_ENCODING_IS_ASCII8BIT(VALUE obj)
9515{
9516 return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex();
9517}
9518__attribute__((__const__))
9519int rb_utf8_encindex(void);
9520__attribute__((__const__))
9521int rb_usascii_encindex(void);
9522int rb_locale_encindex(void);
9523int rb_filesystem_encindex(void);
9524VALUE rb_enc_default_external(void);
9525VALUE rb_enc_default_internal(void);
9526void rb_enc_set_default_external(VALUE encoding);
9527void rb_enc_set_default_internal(VALUE encoding);
9528VALUE rb_locale_charmap(VALUE klass);
9529
9530
9531
9532
9533static inline _Bool
9534rb_enc_is_newline(const char *p, const char *e, rb_encoding *enc)
9535{
9536 OnigUChar *up = ((OnigUChar *)p);
9537 OnigUChar *ue = ((OnigUChar *)e);
9538 return (enc)->is_mbc_newline((up),(ue),enc);
9539}
9540static inline _Bool
9541rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc)
9542{
9543 return (enc)->is_code_ctype(c,t,enc);
9544}
9545static inline _Bool
9546rb_enc_isascii(OnigCodePoint c, rb_encoding *enc)
9547{
9548 return ((c) < 128);
9549}
9550static inline _Bool
9551rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc)
9552{
9553 return (enc)->is_code_ctype(c,1,enc);
9554}
9555static inline _Bool
9556rb_enc_islower(OnigCodePoint c, rb_encoding *enc)
9557{
9558 return (enc)->is_code_ctype(c,6,enc);
9559}
9560static inline _Bool
9561rb_enc_isupper(OnigCodePoint c, rb_encoding *enc)
9562{
9563 return (enc)->is_code_ctype(c,10,enc);
9564}
9565static inline _Bool
9566rb_enc_iscntrl(OnigCodePoint c, rb_encoding *enc)
9567{
9568 return (enc)->is_code_ctype(c,3,enc);
9569}
9570static inline _Bool
9571rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc)
9572{
9573 return (enc)->is_code_ctype(c,8,enc);
9574}
9575static inline _Bool
9576rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc)
9577{
9578 return (enc)->is_code_ctype(c,13,enc);
9579}
9580static inline _Bool
9581rb_enc_isprint(OnigCodePoint c, rb_encoding *enc)
9582{
9583 return (enc)->is_code_ctype(c,7,enc);
9584}
9585static inline _Bool
9586rb_enc_isspace(OnigCodePoint c, rb_encoding *enc)
9587{
9588 return (enc)->is_code_ctype(c,9,enc);
9589}
9590static inline _Bool
9591rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc)
9592{
9593 return (enc)->is_code_ctype(c,4,enc);
9594}
9595__attribute__((__const__))
9596int rb_enc_toupper(int c, rb_encoding *enc);
9597__attribute__((__const__))
9598int rb_enc_tolower(int c, rb_encoding *enc);
9599
9600
9601
9602
9603__attribute__((__nonnull__ ()))
9604char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc);
9605__attribute__((__nonnull__ ()))
9606char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc);
9607__attribute__((__nonnull__ ()))
9608char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc);
9609__attribute__((__nonnull__ ()))
9610char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc);
9611__attribute__((__nonnull__ (1, 4)))
9612const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc);
9613__attribute__((__nonnull__ (1, 3)))
9614const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc);
9615
9616
9617
9618
9619VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts);
9620
9621
9622
9623
9624__attribute__((__nonnull__ (2)))
9625__attribute__((__format__(__printf__, 2, 3)))
9626VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...);
9627__attribute__((__nonnull__ (2)))
9628__attribute__((__format__(__printf__, 2, 0)))
9629VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap);
9630__attribute__((__noreturn__))
9631__attribute__((__nonnull__ (3)))
9632__attribute__((__format__(__printf__, 3, 4)))
9633void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...);
9634
9635
9636
9637
9638VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc);
9639__attribute__((__nonnull__ (1)))
9640VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc);
9641VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc);
9642VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc);
9643__attribute__((__nonnull__ (1)))
9644VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc);
9645long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc);
9646char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc);
9647VALUE rb_obj_encoding(VALUE obj);
9648VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);
9649VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc);
9650VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc);
9651VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc);
9652VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
9653VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
9654int rb_enc_str_coderange(VALUE str);
9655long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr);
9656int rb_enc_str_asciionly_p(VALUE str);
9657__attribute__((__nonnull__ ()))
9658long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc);
9659__attribute__((__nonnull__ ()))
9660static inline VALUE
9661rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc)
9662{
9663 long len = rbimpl_strlen(str);
9664 return rb_enc_str_new_static(str, len, enc);
9665}
9666
9667
9668
9669
9670ID rb_intern3(const char *name, long len, rb_encoding *enc);
9671__attribute__((__nonnull__ ()))
9672int rb_enc_symname_p(const char *str, rb_encoding *enc);
9673int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc);
9674ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc);
9675VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc);
9676
9677
9678
9679
9680typedef enum {
9681 econv_invalid_byte_sequence,
9682 econv_undefined_conversion,
9683 econv_destination_buffer_full,
9684 econv_source_buffer_empty,
9685 econv_finished,
9686 econv_after_output,
9687 econv_incomplete_input
9688} rb_econv_result_t;
9689typedef struct rb_econv_t rb_econv_t;
9690VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);
9691int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);
9692int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags);
9693int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);
9694rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);
9695rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);
9696rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
9697 const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
9698 unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
9699 int flags);
9700void rb_econv_close(rb_econv_t *ec);
9701int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);
9702int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);
9703int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);
9704VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);
9705int rb_econv_insert_output(rb_econv_t *ec,
9706 const unsigned char *str, size_t len, const char *str_encoding);
9707const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);
9708void rb_econv_check_error(rb_econv_t *ec);
9709VALUE rb_econv_make_exception(rb_econv_t *ec);
9710int rb_econv_putbackable(rb_econv_t *ec);
9711void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);
9712const char *rb_econv_asciicompat_encoding(const char *encname);
9713VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);
9714VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);
9715VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);
9716VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);
9717VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags);
9718void rb_econv_binmode(rb_econv_t *ec);
9719enum ruby_econv_flag_type {
9720 RUBY_ECONV_ERROR_HANDLER_MASK = 0x000000ff,
9721 RUBY_ECONV_INVALID_MASK = 0x0000000f,
9722 RUBY_ECONV_INVALID_REPLACE = 0x00000002,
9723 RUBY_ECONV_UNDEF_MASK = 0x000000f0,
9724 RUBY_ECONV_UNDEF_REPLACE = 0x00000020,
9725 RUBY_ECONV_UNDEF_HEX_CHARREF = 0x00000030,
9726 RUBY_ECONV_DECORATOR_MASK = 0x0001ff00,
9727 RUBY_ECONV_NEWLINE_DECORATOR_MASK = 0x00007f00,
9728 RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK = 0x00000f00,
9729 RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK = 0x00007000,
9730 RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR = 0x00000100,
9731 RUBY_ECONV_CRLF_NEWLINE_DECORATOR = 0x00001000,
9732 RUBY_ECONV_CR_NEWLINE_DECORATOR = 0x00002000,
9733 RUBY_ECONV_LF_NEWLINE_DECORATOR = 0x00004000,
9734 RUBY_ECONV_XML_TEXT_DECORATOR = 0x00008000,
9735 RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR = 0x00010000,
9736 RUBY_ECONV_STATEFUL_DECORATOR_MASK = 0x00f00000,
9737 RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR = 0x00100000,
9738 RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR =
9739 0,
9740 RUBY_ECONV_PARTIAL_INPUT = 0x00020000,
9741 RUBY_ECONV_AFTER_OUTPUT = 0x00040000,
9742 RUBY_ECONV_FLAGS_PLACEHOLDER
9743};
9744
9745
9746VALUE rb_fstring(VALUE);
9747VALUE rb_fstring_cstr(const char *str);
9748VALUE rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc);
9749int rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p);
9750int rb_str_symname_p(VALUE);
9751VALUE rb_str_quote_unprintable(VALUE);
9752char *rb_str_fill_terminator(VALUE str, const int termlen);
9753void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen);
9754VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
9755VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
9756VALUE rb_external_str_with_enc(VALUE str, rb_encoding *eenc);
9757VALUE rb_str_cat_conv_enc_opts(VALUE newstr, long ofs, const char *ptr, long len,
9758 rb_encoding *from, int ecflags, VALUE ecopts);
9759VALUE rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl);
9760VALUE rb_str_escape(VALUE str);
9761size_t rb_str_memsize(VALUE);
9762char *rb_str_to_cstr(VALUE str);
9763const char *ruby_escaped_char(int c);
9764void rb_str_make_independent(VALUE str);
9765int rb_enc_str_coderange_scan(VALUE str, rb_encoding *enc);
9766int rb_ascii8bit_appendable_encoding_index(rb_encoding *enc, unsigned int code);
9767VALUE rb_str_include(VALUE str, VALUE arg);
9768static inline _Bool STR_EMBED_P(VALUE str);
9769static inline _Bool STR_SHARED_P(VALUE str);
9770static inline VALUE QUOTE(VALUE v);
9771static inline VALUE QUOTE_ID(ID v);
9772static inline _Bool is_ascii_string(VALUE str);
9773static inline _Bool is_broken_string(VALUE str);
9774static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2);
9775
9776
9777VALUE rb_str_tmp_frozen_acquire(VALUE str);
9778void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
9779VALUE rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encoding *enc);
9780VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE);
9781VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE);
9782void rb_str_make_embedded(VALUE);
9783size_t rb_str_size_as_embedded(VALUE);
9784_Bool rb_str_reembeddable_p(VALUE);
9785void rb_str_update_shared_ary(VALUE str, VALUE old_root, VALUE new_root);
9786
9787
9788
9789
9790VALUE rb_fstring_new(const char *ptr, long len);
9791VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
9792VALUE rb_str_opt_plus(VALUE x, VALUE y);
9793VALUE rb_str_concat_literals(size_t num, const VALUE *strary);
9794VALUE rb_str_eql(VALUE str1, VALUE str2);
9795VALUE rb_id_quote_unprintable(ID);
9796VALUE rb_sym_proc_call(ID mid, int argc, const VALUE *argv, int kw_splat, VALUE passed_proc);
9797struct rb_execution_context_struct;
9798VALUE rb_ec_str_resurrect(struct rb_execution_context_struct *ec, VALUE str);
9799
9800
9801static inline VALUE
9802QUOTE(VALUE v)
9803{
9804 return rb_str_quote_unprintable(v);
9805}
9806static inline VALUE
9807QUOTE_ID(ID i)
9808{
9809 return rb_id_quote_unprintable(i);
9810}
9811static inline _Bool
9812STR_EMBED_P(VALUE str)
9813{
9814 return ! RB_FL_TEST_RAW(str, ((VALUE)RUBY_FL_USER1));
9815}
9816static inline _Bool
9817STR_SHARED_P(VALUE str)
9818{
9819 return RB_FL_ALL_RAW(str, ((VALUE)RUBY_FL_USER1) | ((VALUE)RUBY_FL_USER2));
9820}
9821static inline _Bool
9822is_ascii_string(VALUE str)
9823{
9824 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_7BIT;
9825}
9826static inline _Bool
9827is_broken_string(VALUE str)
9828{
9829 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_BROKEN;
9830}
9831static inline VALUE
9832rb_str_eql_internal(const VALUE str1, const VALUE str2)
9833{
9834 const long len = RSTRING_LEN(str1);
9835 const char *ptr1, *ptr2;
9836 if (len != RSTRING_LEN(str2)) return ((VALUE)RUBY_Qfalse);
9837 if (!rb_str_comparable(str1, str2)) return ((VALUE)RUBY_Qfalse);
9838 if ((ptr1 = RSTRING_PTR(str1)) == (ptr2 = RSTRING_PTR(str2)))
9839 return ((VALUE)RUBY_Qtrue);
9840 if (memcmp(ptr1, ptr2, len) == 0)
9841 return ((VALUE)RUBY_Qtrue);
9842 return ((VALUE)RUBY_Qfalse);
9843}
9844extern long rb_backtrace_length_limit;
9845extern VALUE rb_eEAGAIN;
9846extern VALUE rb_eEWOULDBLOCK;
9847extern VALUE rb_eEINPROGRESS;
9848__attribute__((__format__(__printf__, 3, 0)))
9849void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
9850__attribute__((__noreturn__)) void rb_async_bug_errno(const char *,int);
9851const char *rb_builtin_type_name(int t);
9852const char *rb_builtin_class_name(VALUE x);
9853__attribute__((__format__(__printf__, (1), (3)))) void rb_warn_deprecated(const char *fmt, const char *suggest, ...);
9854__attribute__((__format__(__printf__, (2), (4)))) void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...);
9855__attribute__((__format__(__printf__, 6, 0)))
9856VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
9857__attribute__((__format__(__printf__, (2), (3)))) void rb_enc_warn(rb_encoding *enc, const char *fmt, ...);
9858__attribute__((__format__(__printf__, (2), (3)))) void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...);
9859__attribute__((__format__(__printf__, (3), (4)))) void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...);
9860rb_warning_category_t rb_warning_category_from_name(VALUE category);
9861_Bool rb_warning_category_enabled_p(rb_warning_category_t category);
9862VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
9863VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int priv);
9864VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
9865__attribute__((__format__(__printf__, (1), (2)))) VALUE rb_warning_string(const char *fmt, ...);
9866__attribute__((__format__(__printf__, 2, 0)))
9867__attribute__((__noreturn__)) void rb_vraise(VALUE, const char *, va_list);
9868__attribute__((__noreturn__)) static inline void rb_raise_cstr(VALUE etype, const char *mesg);
9869__attribute__((__noreturn__)) static inline void rb_raise_cstr_i(VALUE etype, VALUE mesg);
9870__attribute__((__noreturn__)) static inline void rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name);
9871__attribute__((__noreturn__)) static inline void rb_name_err_raise(const char *mesg, VALUE recv, VALUE name);
9872__attribute__((__noreturn__)) static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name);
9873static inline void Check_Type(VALUE v, enum ruby_value_type t);
9874static inline _Bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
9875
9876
9877int rb_bug_reporter_add(void (*func)(FILE *, void *), void *data);
9878__attribute__((__noreturn__)) void rb_sys_fail_path_in(const char *func_name, VALUE path);
9879__attribute__((__noreturn__)) void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path);
9880VALUE rb_syserr_new_path_in(const char *func_name, int n, VALUE path);
9881
9882
9883static inline void
9884rb_raise_cstr_i(VALUE etype, VALUE mesg)
9885{
9886 VALUE exc = rb_exc_new_str(etype, mesg);
9887 rb_exc_raise(exc);
9888}
9889static inline void
9890rb_raise_cstr(VALUE etype, const char *mesg)
9891{
9892 VALUE str = ((__builtin_constant_p(mesg) ? rbimpl_str_new_cstr : rb_str_new_cstr) (mesg));
9893 rb_raise_cstr_i(etype, str);
9894}
9895static inline void
9896rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name)
9897{
9898 VALUE exc = rb_name_err_new(mesg, recv, name);
9899 rb_exc_raise(exc);
9900}
9901static inline void
9902rb_name_err_raise(const char *mesg, VALUE recv, VALUE name)
9903{
9904 VALUE str = (__builtin_constant_p(mesg) ? rb_fstring_new((mesg), (long)strlen(mesg)) : (rb_fstring_cstr)(mesg));
9905 rb_name_err_raise_str(str, recv, name);
9906}
9907static inline void
9908rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
9909{
9910 VALUE exc = rb_key_err_new(mesg, recv, name);
9911 rb_exc_raise(exc);
9912}
9913static inline _Bool
9914rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type)
9915{
9916 return RB_TYPE_P(obj, RUBY_T_DATA) && RTYPEDDATA_P(obj) && (RTYPEDDATA_TYPE(obj) == data_type);
9917}
9918extern ID ruby_static_id_signo;
9919extern ID ruby_static_id_status;
9920VALUE rb_refinement_module_get_refined_class(VALUE module);
9921void rb_class_modify_check(VALUE);
9922__attribute__((__noreturn__)) VALUE rb_f_raise(int argc, VALUE *argv);
9923VALUE rb_get_backtrace(VALUE info);
9924void rb_call_end_proc(VALUE data);
9925void rb_mark_end_proc(void);
9926void Init_class_hierarchy(void);
9927void Init_enc(void);
9928void Init_ext(void);
9929void Init_File(void);
9930void Init_heap(void);
9931int Init_enc_set_filesystem_encoding(void);
9932void Init_newline(void);
9933void Init_BareVM(void);
9934void Init_vm_objects(void);
9935void Init_vm_backtrace(void);
9936void Init_vm_eval(void);static inline
9937void Init_vm_stack_canary(void);
9938void Init_eval_method(void);
9939void rb_call_inits(void);
9940VALUE rb_class_search_ancestor(VALUE klass, VALUE super);
9941__attribute__((__noreturn__)) void rb_undefined_alloc(VALUE klass);
9942double rb_num_to_dbl(VALUE val);
9943VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound);
9944VALUE rb_immutable_obj_clone(int, VALUE *, VALUE);
9945VALUE rb_check_convert_type_with_id(VALUE,int,const char*,ID);
9946int rb_bool_expected(VALUE, const char *, int raise);
9947static inline void RBASIC_CLEAR_CLASS(VALUE obj);
9948static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass);
9949static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass);
9950
9951
9952int rb_opts_exception_p(VALUE opts, int default_value);
9953
9954
9955
9956
9957__attribute__((__const__)) VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
9958__attribute__((__const__)) VALUE rb_obj_not(VALUE obj);
9959VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
9960void rb_obj_copy_ivar(VALUE dest, VALUE obj);
9961VALUE rb_false(VALUE obj);
9962VALUE rb_convert_type_with_id(VALUE v, int t, const char* nam, ID mid);
9963VALUE rb_obj_size(VALUE self, VALUE args, VALUE obj);
9964VALUE rb_get_freeze_opt(int argc, VALUE *argv);
9965
9966
9967static inline void
9968RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass)
9969{
9970 const VALUE *ptr = &((struct RBasic *)(obj))->klass;
9971 *(VALUE *)ptr = klass;
9972}
9973static inline void
9974RBASIC_CLEAR_CLASS(VALUE obj)
9975{
9976 RBASIC_SET_CLASS_RAW(obj, 0);
9977}
9978static inline void
9979RBASIC_SET_CLASS(VALUE obj, VALUE klass)
9980{
9981 VALUE oldv = RBASIC_CLASS(obj);
9982 RBASIC_SET_CLASS_RAW(obj, klass);
9983 (rb_obj_written((VALUE)(obj), (VALUE)(oldv), (VALUE)(klass), "../ruby-3.2.1/internal/object.h", 59));
9984}
9985struct rb_iseq_struct;
9986VALUE rb_parser_set_yydebug(VALUE, VALUE);
9987void *rb_parser_load_file(VALUE parser, VALUE name);
9988void rb_parser_keep_script_lines(VALUE vparser);
9989void rb_parser_error_tolerant(VALUE vparser);
9990void rb_parser_keep_tokens(VALUE vparser);
9991
9992
9993VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
9994
9995
9996struct rb_block;
9997struct rb_iseq_struct;
9998VALUE rb_proc_location(VALUE self);
9999st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
10000int rb_block_pair_yield_optimizable(void);
10001int rb_block_arity(void);
10002int rb_block_min_max_arity(int *max);
10003VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additional_info);
10004VALUE rb_callable_receiver(VALUE);
10005
10006
10007VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
10008VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
10009VALUE rb_iseq_location(const struct rb_iseq_struct *iseq);
10010VALUE rb_sym_to_proc(VALUE sym);
10011
10012
10013VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
10014VALUE rb_reg_check_preprocess(VALUE);
10015long rb_reg_search0(VALUE, VALUE, long, int, int);
10016VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
10017_Bool rb_reg_start_with_p(VALUE re, VALUE str);
10018VALUE rb_reg_hash(VALUE re);
10019VALUE rb_reg_equal(VALUE re1, VALUE re2);
10020void rb_backref_set_string(VALUE string, long pos, long len);
10021void rb_match_unbusy(VALUE);
10022int rb_match_count(VALUE match);
10023int rb_match_nth_defined(int nth, VALUE match);
10024
10025
10026VALUE rb_reg_new_ary(VALUE ary, int options);
10027
10028
10029VALUE rb_to_symbol_type(VALUE obj);
10030VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc);
10031VALUE rb_sym_intern_ascii(const char *ptr, long len);
10032VALUE rb_sym_intern_ascii_cstr(const char *ptr);
10033int rb_is_const_name(VALUE name);
10034int rb_is_class_name(VALUE name);
10035int rb_is_instance_name(VALUE name);
10036int rb_is_local_name(VALUE name);
10037__attribute__((__pure__)) int rb_is_const_sym(VALUE sym);
10038__attribute__((__pure__)) int rb_is_attrset_sym(VALUE sym);
10039ID rb_make_internal_id(void);
10040ID rb_make_temporary_id(size_t n);
10041void rb_gc_free_dsymbol(VALUE);
10042int rb_static_id_valid_p(ID id);
10043struct rb_thread_struct;
10044VALUE rb_obj_is_mutex(VALUE obj);
10045VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg);
10046void rb_thread_execute_interrupts(VALUE th);
10047VALUE rb_get_coverages(void);
10048int rb_get_coverage_mode(void);
10049VALUE rb_default_coverage(int);
10050VALUE rb_thread_shield_new(void);
10051VALUE rb_thread_shield_wait(VALUE self);
10052VALUE rb_thread_shield_release(VALUE self);
10053VALUE rb_thread_shield_destroy(VALUE self);
10054int rb_thread_to_be_killed(VALUE thread);
10055void rb_mutex_allow_trap(VALUE self, int val);
10056VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data);
10057VALUE rb_mutex_owned_p(VALUE self);
10058VALUE rb_exec_recursive_outer_mid(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h, ID mid);
10059int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout);
10060
10061
10062VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
10063int ruby_thread_has_gvl_p(void);
10064
10065
10066
10067
10068int rb_threadptr_execute_interrupts(struct rb_thread_struct *th, int blocking_timing);
10069
10070
10071struct rb_id_table;
10072enum rb_id_table_iterator_result {
10073 ID_TABLE_CONTINUE = ST_CONTINUE,
10074 ID_TABLE_STOP = ST_STOP,
10075 ID_TABLE_DELETE = ST_DELETE,
10076 ID_TABLE_REPLACE = ST_REPLACE,
10077 ID_TABLE_ITERATOR_RESULT_END
10078};
10079struct rb_id_table *rb_id_table_create(size_t size);
10080void rb_id_table_free(struct rb_id_table *tbl);
10081void rb_id_table_clear(struct rb_id_table *tbl);
10082size_t rb_id_table_memsize(const struct rb_id_table *tbl);
10083int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val);
10084int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp);
10085int rb_id_table_delete(struct rb_id_table *tbl, ID id);
10086typedef enum rb_id_table_iterator_result rb_id_table_update_value_callback_func_t(VALUE *val, void *data, int existing);
10087typedef enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data);
10088typedef enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data);
10089void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data);
10090void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data);
10091void rb_id_table_foreach_values_with_replace(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, rb_id_table_update_value_callback_func_t *replace, void *data);
10092
10093
10094size_t rb_id_table_size(const struct rb_id_table *tbl);
10095
10096
10097typedef enum {
10098 CONST_DEPRECATED = 0x100,
10099 CONST_VISIBILITY_MASK = 0xff,
10100 CONST_PUBLIC = 0x00,
10101 CONST_PRIVATE,
10102 CONST_VISIBILITY_MAX
10103} rb_const_flag_t;
10104typedef struct rb_const_entry_struct {
10105 rb_const_flag_t flag;
10106 int line;
10107 VALUE value;
10108 VALUE file;
10109} rb_const_entry_t;
10110VALUE rb_mod_private_constant(int argc, const VALUE *argv, VALUE obj);
10111VALUE rb_mod_public_constant(int argc, const VALUE *argv, VALUE obj);
10112VALUE rb_mod_deprecate_constant(int argc, const VALUE *argv, VALUE obj);
10113void rb_free_const_table(struct rb_id_table *tbl);
10114VALUE rb_const_source_location(VALUE, ID);
10115
10116
10117int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag);
10118rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
10119VALUE rb_public_const_get_at(VALUE klass, ID id);
10120VALUE rb_public_const_get_from(VALUE klass, ID id);
10121int rb_public_const_defined_from(VALUE klass, ID id);
10122VALUE rb_const_source_location_at(VALUE, ID);
10123
10124
10125void rb_gc_mark_global_tbl(void);
10126void rb_gc_update_global_tbl(void);
10127size_t rb_generic_ivar_memsize(VALUE);
10128VALUE rb_search_class_path(VALUE);
10129VALUE rb_attr_delete(VALUE, ID);
10130void rb_autoload_str(VALUE mod, ID id, VALUE file);
10131VALUE rb_autoload_at_p(VALUE, ID, int);
10132__attribute__((__noreturn__)) VALUE rb_mod_const_missing(VALUE,VALUE);
10133rb_gvar_getter_t *rb_gvar_getter_function_of(ID);
10134rb_gvar_setter_t *rb_gvar_setter_function_of(ID);
10135void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_);
10136void rb_gvar_ractor_local(const char *name);
10137static inline _Bool ROBJ_TRANSIENT_P(VALUE obj);
10138static inline void ROBJ_TRANSIENT_SET(VALUE obj);
10139static inline void ROBJ_TRANSIENT_UNSET(VALUE obj);
10140struct gen_ivtbl;
10141int rb_gen_ivtbl_get(VALUE obj, ID id, struct gen_ivtbl **ivtbl);
10142int rb_obj_evacuate_ivs_to_hash_table(ID key, VALUE val, st_data_t arg);
10143
10144
10145void rb_mark_generic_ivar(VALUE);
10146void rb_mv_generic_ivar(VALUE src, VALUE dst);
10147VALUE rb_const_missing(VALUE klass, VALUE name);
10148int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
10149void rb_iv_tbl_copy(VALUE dst, VALUE src);
10150
10151
10152
10153
10154VALUE rb_ivar_lookup(VALUE obj, ID id, VALUE undef);
10155VALUE rb_gvar_get(ID);
10156VALUE rb_gvar_set(ID, VALUE);
10157VALUE rb_gvar_defined(ID);
10158void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID);
10159rb_shape_t * rb_grow_iv_list(VALUE obj);
10160void rb_ensure_iv_list_size(VALUE obj, uint32_t len, uint32_t newsize);
10161struct gen_ivtbl * rb_ensure_generic_iv_list_size(VALUE obj, uint32_t newsize);
10162attr_index_t rb_obj_ivar_set(VALUE obj, ID id, VALUE val);
10163
10164
10165static inline _Bool
10166ROBJ_TRANSIENT_P(VALUE obj)
10167{
10168 return RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_USER2));
10169}
10170static inline void
10171ROBJ_TRANSIENT_SET(VALUE obj)
10172{
10173 RB_FL_SET_RAW(obj, ((VALUE)RUBY_FL_USER2));
10174}
10175static inline void
10176ROBJ_TRANSIENT_UNSET(VALUE obj)
10177{
10178 RB_FL_UNSET_RAW(obj, ((VALUE)RUBY_FL_USER2));
10179}
10180enum rb_mjit_func_state {
10181 MJIT_FUNC_NOT_COMPILED = 0,
10182 MJIT_FUNC_COMPILING = 1,
10183 MJIT_FUNC_FAILED = 2,
10184};
10185struct mjit_options {
10186 _Bool on;
10187 _Bool save_temps;
10188 _Bool warnings;
10189 _Bool debug;
10190 char* debug_flags;
10191 _Bool wait;
10192 unsigned int call_threshold;
10193 int verbose;
10194 int max_cache_size;
10195 _Bool pause;
10196 _Bool custom;
10197};
10198struct rb_mjit_compile_info {
10199 _Bool disable_ivar_cache;
10200 _Bool disable_exivar_cache;
10201 _Bool disable_send_cache;
10202 _Bool disable_inlining;
10203 _Bool disable_const_cache;
10204};
10205typedef VALUE (*jit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
10206
10207
10208extern struct mjit_options mjit_opts;
10209extern _Bool mjit_call_p;
10210extern void rb_mjit_add_iseq_to_process(const rb_iseq_t *iseq);
10211extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
10212extern void rb_mjit_recompile_send(const rb_iseq_t *iseq);
10213extern void rb_mjit_recompile_ivar(const rb_iseq_t *iseq);
10214extern void rb_mjit_recompile_exivar(const rb_iseq_t *iseq);
10215extern void rb_mjit_recompile_inlining(const rb_iseq_t *iseq);
10216extern void rb_mjit_recompile_const(const rb_iseq_t *iseq);
10217
10218
10219extern void mjit_cancel_all(const char *reason);
10220extern _Bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id);
10221extern void mjit_init(const struct mjit_options *opts);
10222extern void mjit_free_iseq(const rb_iseq_t *iseq);
10223extern void mjit_update_references(const rb_iseq_t *iseq);
10224extern void mjit_mark(void);
10225extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body);
10226extern void mjit_notify_waitpid(int exit_code);
10227extern void rb_mjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop);
10228extern void rb_mjit_cme_invalidate(rb_callable_method_entry_t *cme);
10229extern void rb_mjit_before_ractor_spawn(void);
10230extern void rb_mjit_constant_state_changed(ID id);
10231extern void rb_mjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic, unsigned insn_idx);
10232extern void rb_mjit_tracing_invalidate_all(rb_event_flag_t new_iseq_events);
10233void mjit_child_after_fork(void);
10234VALUE mjit_pause(_Bool wait_p);
10235VALUE mjit_resume(void);
10236void mjit_finish(_Bool close_handle_p);
10237static inline _Bool rb_yjit_enabled_p(void) { return 0; }
10238static inline unsigned rb_yjit_call_threshold(void) { return (0x7fffffff * 2U + 1); }
10239static inline void rb_yjit_invalidate_all_method_lookup_assumptions(void) {}
10240static inline void rb_yjit_cme_invalidate(rb_callable_method_entry_t *cme) {}
10241static inline void rb_yjit_collect_vm_usage_insn(int insn) {}
10242static inline void rb_yjit_collect_binding_alloc(void) {}
10243static inline void rb_yjit_collect_binding_set(void) {}
10244static inline _Bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec) { return 0; }
10245static inline void rb_yjit_init(void) {}
10246static inline void rb_yjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop) {}
10247static inline void rb_yjit_constant_state_changed(ID id) {}
10248static inline void rb_yjit_iseq_mark(void *payload) {}
10249static inline void rb_yjit_iseq_update_references(void *payload) {}
10250static inline void rb_yjit_iseq_free(void *payload) {}
10251static inline void rb_yjit_before_ractor_spawn(void) {}
10252static inline void rb_yjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic, unsigned insn_idx) {}
10253static inline void rb_yjit_tracing_invalidate_all(void) {}
10254
10255
10256typedef struct rb_vm_struct ruby_vm_t;
10257int ruby_vm_destruct(ruby_vm_t *vm);
10258void ruby_vm_at_exit(void(*func)(ruby_vm_t *));
10259
10260
10261enum rb_debug_counter_type {
10262RB_DEBUG_COUNTER_mc_inline_hit,
10263RB_DEBUG_COUNTER_mc_inline_miss_klass,
10264RB_DEBUG_COUNTER_mc_inline_miss_invalidated,
10265RB_DEBUG_COUNTER_mc_inline_miss_empty,
10266RB_DEBUG_COUNTER_mc_inline_miss_same_cc,
10267RB_DEBUG_COUNTER_mc_inline_miss_same_cme,
10268RB_DEBUG_COUNTER_mc_inline_miss_same_def,
10269RB_DEBUG_COUNTER_mc_inline_miss_diff,
10270RB_DEBUG_COUNTER_cvar_write_inline_hit,
10271RB_DEBUG_COUNTER_cvar_read_inline_hit,
10272RB_DEBUG_COUNTER_cvar_inline_miss,
10273RB_DEBUG_COUNTER_cvar_class_invalidate,
10274RB_DEBUG_COUNTER_cvar_include_invalidate,
10275RB_DEBUG_COUNTER_mc_cme_complement,
10276RB_DEBUG_COUNTER_mc_cme_complement_hit,
10277RB_DEBUG_COUNTER_mc_search,
10278RB_DEBUG_COUNTER_mc_search_notfound,
10279RB_DEBUG_COUNTER_mc_search_super,
10280RB_DEBUG_COUNTER_ci_packed,
10281RB_DEBUG_COUNTER_ci_kw,
10282RB_DEBUG_COUNTER_ci_nokw,
10283RB_DEBUG_COUNTER_ci_runtime,
10284RB_DEBUG_COUNTER_cc_new,
10285RB_DEBUG_COUNTER_cc_temp,
10286RB_DEBUG_COUNTER_cc_found_in_ccs,
10287RB_DEBUG_COUNTER_cc_not_found_in_ccs,
10288RB_DEBUG_COUNTER_cc_ent_invalidate,
10289RB_DEBUG_COUNTER_cc_cme_invalidate,
10290RB_DEBUG_COUNTER_cc_invalidate_leaf,
10291RB_DEBUG_COUNTER_cc_invalidate_leaf_ccs,
10292RB_DEBUG_COUNTER_cc_invalidate_leaf_callable,
10293RB_DEBUG_COUNTER_cc_invalidate_tree,
10294RB_DEBUG_COUNTER_cc_invalidate_tree_cme,
10295RB_DEBUG_COUNTER_cc_invalidate_tree_callable,
10296RB_DEBUG_COUNTER_cc_invalidate_negative,
10297RB_DEBUG_COUNTER_ccs_free,
10298RB_DEBUG_COUNTER_ccs_maxlen,
10299RB_DEBUG_COUNTER_ccs_found,
10300RB_DEBUG_COUNTER_ccs_not_found,
10301RB_DEBUG_COUNTER_call0_public,
10302RB_DEBUG_COUNTER_call0_other,
10303RB_DEBUG_COUNTER_gccct_hit,
10304RB_DEBUG_COUNTER_gccct_miss,
10305RB_DEBUG_COUNTER_gccct_null,
10306RB_DEBUG_COUNTER_iseq_num,
10307RB_DEBUG_COUNTER_iseq_cd_num,
10308RB_DEBUG_COUNTER_ccf_general,
10309RB_DEBUG_COUNTER_ccf_iseq_setup,
10310RB_DEBUG_COUNTER_ccf_iseq_setup_0start,
10311RB_DEBUG_COUNTER_ccf_iseq_setup_tailcall_0start,
10312RB_DEBUG_COUNTER_ccf_iseq_fix,
10313RB_DEBUG_COUNTER_ccf_iseq_opt,
10314RB_DEBUG_COUNTER_ccf_iseq_kw1,
10315RB_DEBUG_COUNTER_ccf_iseq_kw2,
10316RB_DEBUG_COUNTER_ccf_cfunc,
10317RB_DEBUG_COUNTER_ccf_cfunc_with_frame,
10318RB_DEBUG_COUNTER_ccf_ivar,
10319RB_DEBUG_COUNTER_ccf_attrset,
10320RB_DEBUG_COUNTER_ccf_method_missing,
10321RB_DEBUG_COUNTER_ccf_zsuper,
10322RB_DEBUG_COUNTER_ccf_bmethod,
10323RB_DEBUG_COUNTER_ccf_opt_send,
10324RB_DEBUG_COUNTER_ccf_opt_call,
10325RB_DEBUG_COUNTER_ccf_opt_block_call,
10326RB_DEBUG_COUNTER_ccf_opt_struct_aref,
10327RB_DEBUG_COUNTER_ccf_opt_struct_aset,
10328RB_DEBUG_COUNTER_ccf_super_method,
10329RB_DEBUG_COUNTER_frame_push,
10330RB_DEBUG_COUNTER_frame_push_method,
10331RB_DEBUG_COUNTER_frame_push_block,
10332RB_DEBUG_COUNTER_frame_push_class,
10333RB_DEBUG_COUNTER_frame_push_top,
10334RB_DEBUG_COUNTER_frame_push_cfunc,
10335RB_DEBUG_COUNTER_frame_push_ifunc,
10336RB_DEBUG_COUNTER_frame_push_eval,
10337RB_DEBUG_COUNTER_frame_push_rescue,
10338RB_DEBUG_COUNTER_frame_push_dummy,
10339RB_DEBUG_COUNTER_frame_R2R,
10340RB_DEBUG_COUNTER_frame_R2C,
10341RB_DEBUG_COUNTER_frame_C2C,
10342RB_DEBUG_COUNTER_frame_C2R,
10343RB_DEBUG_COUNTER_ivar_get_ic_hit,
10344RB_DEBUG_COUNTER_ivar_get_ic_miss,
10345RB_DEBUG_COUNTER_ivar_get_ic_miss_noobject,
10346RB_DEBUG_COUNTER_ivar_set_ic_hit,
10347RB_DEBUG_COUNTER_ivar_set_ic_miss,
10348RB_DEBUG_COUNTER_ivar_set_ic_miss_iv_hit,
10349RB_DEBUG_COUNTER_ivar_set_ic_miss_noobject,
10350RB_DEBUG_COUNTER_ivar_get_base,
10351RB_DEBUG_COUNTER_ivar_set_base,
10352RB_DEBUG_COUNTER_ivar_get_ic_miss_set,
10353RB_DEBUG_COUNTER_ivar_get_cc_miss_set,
10354RB_DEBUG_COUNTER_ivar_get_ic_miss_unset,
10355RB_DEBUG_COUNTER_ivar_get_cc_miss_unset,
10356RB_DEBUG_COUNTER_lvar_get,
10357RB_DEBUG_COUNTER_lvar_get_dynamic,
10358RB_DEBUG_COUNTER_lvar_set,
10359RB_DEBUG_COUNTER_lvar_set_dynamic,
10360RB_DEBUG_COUNTER_lvar_set_slowpath,
10361RB_DEBUG_COUNTER_gc_count,
10362RB_DEBUG_COUNTER_gc_minor_newobj,
10363RB_DEBUG_COUNTER_gc_minor_malloc,
10364RB_DEBUG_COUNTER_gc_minor_method,
10365RB_DEBUG_COUNTER_gc_minor_capi,
10366RB_DEBUG_COUNTER_gc_minor_stress,
10367RB_DEBUG_COUNTER_gc_major_nofree,
10368RB_DEBUG_COUNTER_gc_major_oldgen,
10369RB_DEBUG_COUNTER_gc_major_shady,
10370RB_DEBUG_COUNTER_gc_major_force,
10371RB_DEBUG_COUNTER_gc_major_oldmalloc,
10372RB_DEBUG_COUNTER_gc_enter_start,
10373RB_DEBUG_COUNTER_gc_enter_mark_continue,
10374RB_DEBUG_COUNTER_gc_enter_sweep_continue,
10375RB_DEBUG_COUNTER_gc_enter_rest,
10376RB_DEBUG_COUNTER_gc_enter_finalizer,
10377RB_DEBUG_COUNTER_gc_isptr_trial,
10378RB_DEBUG_COUNTER_gc_isptr_range,
10379RB_DEBUG_COUNTER_gc_isptr_align,
10380RB_DEBUG_COUNTER_gc_isptr_maybe,
10381RB_DEBUG_COUNTER_obj_newobj,
10382RB_DEBUG_COUNTER_obj_newobj_slowpath,
10383RB_DEBUG_COUNTER_obj_newobj_wb_unprotected,
10384RB_DEBUG_COUNTER_obj_free,
10385RB_DEBUG_COUNTER_obj_promote,
10386RB_DEBUG_COUNTER_obj_wb_unprotect,
10387RB_DEBUG_COUNTER_obj_obj_embed,
10388RB_DEBUG_COUNTER_obj_obj_transient,
10389RB_DEBUG_COUNTER_obj_obj_ptr,
10390RB_DEBUG_COUNTER_obj_obj_too_complex,
10391RB_DEBUG_COUNTER_obj_str_ptr,
10392RB_DEBUG_COUNTER_obj_str_embed,
10393RB_DEBUG_COUNTER_obj_str_shared,
10394RB_DEBUG_COUNTER_obj_str_nofree,
10395RB_DEBUG_COUNTER_obj_str_fstr,
10396RB_DEBUG_COUNTER_obj_ary_embed,
10397RB_DEBUG_COUNTER_obj_ary_transient,
10398RB_DEBUG_COUNTER_obj_ary_ptr,
10399RB_DEBUG_COUNTER_obj_ary_extracapa,
10400RB_DEBUG_COUNTER_obj_ary_shared_create,
10401RB_DEBUG_COUNTER_obj_ary_shared,
10402RB_DEBUG_COUNTER_obj_ary_shared_root_occupied,
10403RB_DEBUG_COUNTER_obj_hash_empty,
10404RB_DEBUG_COUNTER_obj_hash_1,
10405RB_DEBUG_COUNTER_obj_hash_2,
10406RB_DEBUG_COUNTER_obj_hash_3,
10407RB_DEBUG_COUNTER_obj_hash_4,
10408RB_DEBUG_COUNTER_obj_hash_5_8,
10409RB_DEBUG_COUNTER_obj_hash_g8,
10410RB_DEBUG_COUNTER_obj_hash_null,
10411RB_DEBUG_COUNTER_obj_hash_ar,
10412RB_DEBUG_COUNTER_obj_hash_st,
10413RB_DEBUG_COUNTER_obj_hash_transient,
10414RB_DEBUG_COUNTER_obj_hash_force_convert,
10415RB_DEBUG_COUNTER_obj_struct_embed,
10416RB_DEBUG_COUNTER_obj_struct_transient,
10417RB_DEBUG_COUNTER_obj_struct_ptr,
10418RB_DEBUG_COUNTER_obj_data_empty,
10419RB_DEBUG_COUNTER_obj_data_xfree,
10420RB_DEBUG_COUNTER_obj_data_imm_free,
10421RB_DEBUG_COUNTER_obj_data_zombie,
10422RB_DEBUG_COUNTER_obj_match_under4,
10423RB_DEBUG_COUNTER_obj_match_ge4,
10424RB_DEBUG_COUNTER_obj_match_ge8,
10425RB_DEBUG_COUNTER_obj_match_ptr,
10426RB_DEBUG_COUNTER_obj_iclass_ptr,
10427RB_DEBUG_COUNTER_obj_class_ptr,
10428RB_DEBUG_COUNTER_obj_module_ptr,
10429RB_DEBUG_COUNTER_obj_bignum_ptr,
10430RB_DEBUG_COUNTER_obj_bignum_embed,
10431RB_DEBUG_COUNTER_obj_float,
10432RB_DEBUG_COUNTER_obj_complex,
10433RB_DEBUG_COUNTER_obj_rational,
10434RB_DEBUG_COUNTER_obj_regexp_ptr,
10435RB_DEBUG_COUNTER_obj_file_ptr,
10436RB_DEBUG_COUNTER_obj_symbol,
10437RB_DEBUG_COUNTER_obj_imemo_ment,
10438RB_DEBUG_COUNTER_obj_imemo_iseq,
10439RB_DEBUG_COUNTER_obj_imemo_env,
10440RB_DEBUG_COUNTER_obj_imemo_tmpbuf,
10441RB_DEBUG_COUNTER_obj_imemo_ast,
10442RB_DEBUG_COUNTER_obj_imemo_cref,
10443RB_DEBUG_COUNTER_obj_imemo_svar,
10444RB_DEBUG_COUNTER_obj_imemo_throw_data,
10445RB_DEBUG_COUNTER_obj_imemo_ifunc,
10446RB_DEBUG_COUNTER_obj_imemo_memo,
10447RB_DEBUG_COUNTER_obj_imemo_parser_strterm,
10448RB_DEBUG_COUNTER_obj_imemo_callinfo,
10449RB_DEBUG_COUNTER_obj_imemo_callcache,
10450RB_DEBUG_COUNTER_obj_imemo_constcache,
10451RB_DEBUG_COUNTER_artable_hint_hit,
10452RB_DEBUG_COUNTER_artable_hint_miss,
10453RB_DEBUG_COUNTER_artable_hint_notfound,
10454RB_DEBUG_COUNTER_heap_xmalloc,
10455RB_DEBUG_COUNTER_heap_xrealloc,
10456RB_DEBUG_COUNTER_heap_xfree,
10457RB_DEBUG_COUNTER_theap_alloc,
10458RB_DEBUG_COUNTER_theap_alloc_fail,
10459RB_DEBUG_COUNTER_theap_evacuate,
10460RB_DEBUG_COUNTER_vm_sync_lock,
10461RB_DEBUG_COUNTER_vm_sync_lock_enter,
10462RB_DEBUG_COUNTER_vm_sync_lock_enter_nb,
10463RB_DEBUG_COUNTER_vm_sync_lock_enter_cr,
10464RB_DEBUG_COUNTER_vm_sync_barrier,
10465 RB_DEBUG_COUNTER_MAX
10466};
10467void rb_debug_counter_show_results(const char *msg);
10468
10469
10470size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
10471void ruby_debug_counter_reset(void);
10472void ruby_debug_counter_show_at_exit(int enable);
10473
10474
10475struct rb_subclass_entry {
10476 VALUE klass;
10477 struct rb_subclass_entry *next;
10478 struct rb_subclass_entry *prev;
10479};
10480struct rb_cvar_class_tbl_entry {
10481 uint32_t index;
10482 rb_serial_t global_cvar_state;
10483 VALUE class_value;
10484};
10485struct rb_classext_struct {
10486 VALUE *iv_ptr;
10487 struct rb_id_table *const_tbl;
10488 struct rb_id_table *callable_m_tbl;
10489 struct rb_id_table *cc_tbl;
10490 struct rb_id_table *cvc_tbl;
10491 size_t superclass_depth;
10492 VALUE *superclasses;
10493 struct rb_subclass_entry *subclasses;
10494 struct rb_subclass_entry *subclass_entry;
10495 struct rb_subclass_entry *module_subclass_entry;
10496 const VALUE origin_;
10497 const VALUE refined_class;
10498 rb_alloc_func_t allocator;
10499 const VALUE includer;
10500 uint32_t max_iv_count;
10501 uint32_t variation_count;
10502};
10503struct RClass {
10504 struct RBasic basic;
10505 VALUE super;
10506 struct rb_id_table *m_tbl;
10507};
10508typedef struct rb_subclass_entry rb_subclass_entry_t;
10509typedef struct rb_classext_struct rb_classext_t;
10510void rb_class_subclass_add(VALUE super, VALUE klass);
10511void rb_class_remove_from_super_subclasses(VALUE);
10512void rb_class_update_superclasses(VALUE);
10513size_t rb_class_superclasses_memsize(VALUE);
10514void rb_class_remove_subclass_head(VALUE);
10515int rb_singleton_class_internal_p(VALUE sklass);
10516VALUE rb_class_boot(VALUE);
10517VALUE rb_class_s_alloc(VALUE klass);
10518VALUE rb_module_s_alloc(VALUE klass);
10519void rb_module_set_initialized(VALUE module);
10520void rb_module_check_initializable(VALUE module);
10521VALUE rb_make_metaclass(VALUE, VALUE);
10522VALUE rb_include_class_new(VALUE, VALUE);
10523void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
10524void rb_class_detach_subclasses(VALUE);
10525void rb_class_detach_module_subclasses(VALUE);
10526void rb_class_remove_from_module_subclasses(VALUE);
10527VALUE rb_obj_methods(int argc, const VALUE *argv, VALUE obj);
10528VALUE rb_obj_protected_methods(int argc, const VALUE *argv, VALUE obj);
10529VALUE rb_obj_private_methods(int argc, const VALUE *argv, VALUE obj);
10530VALUE rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj);
10531VALUE rb_class_undefined_instance_methods(VALUE mod);
10532VALUE rb_special_singleton_class(VALUE);
10533VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach);
10534VALUE rb_singleton_class_get(VALUE obj);
10535void rb_undef_methods_from(VALUE klass, VALUE super);
10536static inline void RCLASS_SET_ORIGIN(VALUE klass, VALUE origin);
10537static inline void RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass);
10538static inline VALUE RCLASS_SUPER(VALUE klass);
10539static inline VALUE RCLASS_SET_SUPER(VALUE klass, VALUE super);
10540static inline void RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass);
10541
10542
10543VALUE rb_class_inherited(VALUE, VALUE);
10544VALUE rb_keyword_error_new(const char *, VALUE);
10545
10546
10547static inline void
10548RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
10549{
10550 rb_obj_write((VALUE)(klass), __extension__({
10551 ;
10552 ; __typeof__((VALUE *)(&(((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->origin_))) unaligned_member_access_result = ((VALUE *)(&(((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->origin_)));
10553 ; unaligned_member_access_result; }), (VALUE)(origin), "../ruby-3.2.1/internal/class.h", 142);
10554 if (klass != origin) RB_FL_SET(origin, ((VALUE)RUBY_FL_USER0));
10555}
10556static inline void
10557RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass)
10558{
10559 RB_FL_SET(iclass, ((VALUE)RUBY_FL_USER3));
10560}
10561static inline _Bool
10562RICLASS_OWNS_M_TBL_P(VALUE iclass)
10563{
10564 return RB_FL_TEST_RAW(iclass, ((VALUE)RUBY_FL_USER0) | ((VALUE)RUBY_FL_USER3)) == ((VALUE)RUBY_FL_USER0);
10565}
10566static inline void
10567RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass)
10568{
10569 rb_obj_write((VALUE)(iclass), __extension__({
10570 ;
10571 ; __typeof__((VALUE *)(&(((rb_classext_t *)((char *)(iclass) + sizeof(struct RClass)))->includer))) unaligned_member_access_result = ((VALUE *)(&(((rb_classext_t *)((char *)(iclass) + sizeof(struct RClass)))->includer)));
10572 ; unaligned_member_access_result; }), (VALUE)(klass), "../ruby-3.2.1/internal/class.h", 161);
10573}
10574static inline VALUE
10575RCLASS_SUPER(VALUE klass)
10576{
10577 return ((struct RClass *)(klass))->super;
10578}
10579static inline VALUE
10580RCLASS_SET_SUPER(VALUE klass, VALUE super)
10581{
10582 if (super) {
10583 rb_class_remove_from_super_subclasses(klass);
10584 rb_class_subclass_add(super, klass);
10585 }
10586 rb_obj_write((VALUE)(klass), __extension__({
10587 ;
10588 ; __typeof__((VALUE *)(&((struct RClass *)(klass))->super)) unaligned_member_access_result = ((VALUE *)(&((struct RClass *)(klass))->super));
10589 ; unaligned_member_access_result; }), (VALUE)(super), "../ruby-3.2.1/internal/class.h", 177);
10590 rb_class_update_superclasses(klass);
10591 return super;
10592}
10593enum vm_call_flag_bits {
10594 VM_CALL_ARGS_SPLAT_bit,
10595 VM_CALL_ARGS_BLOCKARG_bit,
10596 VM_CALL_FCALL_bit,
10597 VM_CALL_VCALL_bit,
10598 VM_CALL_ARGS_SIMPLE_bit,
10599 VM_CALL_BLOCKISEQ_bit,
10600 VM_CALL_KWARG_bit,
10601 VM_CALL_KW_SPLAT_bit,
10602 VM_CALL_TAILCALL_bit,
10603 VM_CALL_SUPER_bit,
10604 VM_CALL_ZSUPER_bit,
10605 VM_CALL_OPT_SEND_bit,
10606 VM_CALL_KW_SPLAT_MUT_bit,
10607 VM_CALL__END
10608};
10609struct rb_callinfo_kwarg {
10610 int keyword_len;
10611 VALUE keywords[];
10612};
10613static inline size_t
10614rb_callinfo_kwarg_bytes(int keyword_len)
10615{
10616 return rb_size_mul_add_or_raise(
10617 keyword_len,
10618 sizeof(VALUE),
10619 sizeof(struct rb_callinfo_kwarg),
10620 rb_eRuntimeError);
10621}
10622struct rb_callinfo {
10623 VALUE flags;
10624 const struct rb_callinfo_kwarg *kwarg;
10625 VALUE mid;
10626 VALUE flag;
10627 VALUE argc;
10628};
10629static inline _Bool
10630vm_ci_packed_p(const struct rb_callinfo *ci)
10631{
10632 if ((__builtin_expect(!!(((VALUE)ci) & 0x01), 1))) {
10633 return 1;
10634 }
10635 else {
10636 ((void)0);
10637 return 0;
10638 }
10639}
10640static inline _Bool
10641vm_ci_p(const struct rb_callinfo *ci)
10642{
10643 if (vm_ci_packed_p(ci) || imemo_type_p((VALUE)ci, imemo_callinfo)) {
10644 return 1;
10645 }
10646 else {
10647 return 0;
10648 }
10649}
10650static inline ID
10651vm_ci_mid(const struct rb_callinfo *ci)
10652{
10653 if (vm_ci_packed_p(ci)) {
10654 return (((VALUE)ci) >> (1 + 15 + 16)) & ((((VALUE)1)<<32) - 1);
10655 }
10656 else {
10657 return (ID)ci->mid;
10658 }
10659}
10660static inline unsigned int
10661vm_ci_flag(const struct rb_callinfo *ci)
10662{
10663 if (vm_ci_packed_p(ci)) {
10664 return (unsigned int)((((VALUE)ci) >> (1 + 15)) & ((((VALUE)1)<<16) - 1));
10665 }
10666 else {
10667 return (unsigned int)ci->flag;
10668 }
10669}
10670static inline unsigned int
10671vm_ci_argc(const struct rb_callinfo *ci)
10672{
10673 if (vm_ci_packed_p(ci)) {
10674 return (unsigned int)((((VALUE)ci) >> (1)) & ((((VALUE)1)<<15) - 1));
10675 }
10676 else {
10677 return (unsigned int)ci->argc;
10678 }
10679}
10680static inline const struct rb_callinfo_kwarg *
10681vm_ci_kwarg(const struct rb_callinfo *ci)
10682{
10683 if (vm_ci_packed_p(ci)) {
10684 return ((void *)0);
10685 }
10686 else {
10687 return ci->kwarg;
10688 }
10689}
10690static inline void
10691vm_ci_dump(const struct rb_callinfo *ci)
10692{
10693 if (vm_ci_packed_p(ci)) {
10694 ruby_debug_printf("packed_ci ID:%s flag:%x argc:%u\n",
10695 rb_id2name(vm_ci_mid(ci)), vm_ci_flag(ci), vm_ci_argc(ci));
10696 }
10697 else {
10698 rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.2.1/vm_callinfo.h", 177, __func__);
10699 }
10700}
10701static inline const struct rb_callinfo *
10702vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10703{
10704 if ((((mid ) & ~((((VALUE)1)<<32) - 1)) ? 0 : ((flag) & ~((((VALUE)1)<<16) - 1)) ? 0 : ((argc) & ~((((VALUE)1)<<15) - 1)) ? 0 : (kwarg) ? 0 : 1)) {
10705 ((void)0);
10706 return ((const struct rb_callinfo *) ((((VALUE)(mid )) << (1 + 15 + 16)) | (((VALUE)(flag)) << (1 + 15)) | (((VALUE)(argc)) << (1)) | RUBY_FIXNUM_FLAG));
10707 }
10708 const _Bool debug = 0;
10709 if (debug) ruby_debug_printf("%s:%d ", file, line);
10710 const struct rb_callinfo *ci = (const struct rb_callinfo *)
10711 rb_imemo_new(imemo_callinfo,
10712 (VALUE)mid,
10713 (VALUE)flag,
10714 (VALUE)argc,
10715 (VALUE)kwarg);
10716 if (debug) rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.2.1/vm_callinfo.h", 218, __func__);
10717 if (kwarg) {
10718 ((void)0);
10719 }
10720 else {
10721 ((void)0);
10722 }
10723 ((void)0);
10724 ((void)0);
10725 return ci;
10726}
10727static inline const struct rb_callinfo *
10728vm_ci_new_runtime_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10729{
10730 ((void)0);
10731 return vm_ci_new_(mid, flag, argc, kwarg, file, line);
10732}
10733static inline _Bool
10734vm_ci_markable(const struct rb_callinfo *ci)
10735{
10736 if (! ci) {
10737 return 0;
10738 }
10739 else if (vm_ci_packed_p(ci)) {
10740 return 1;
10741 }
10742 else {
10743 ((void)0);
10744 return ! RB_FL_ANY_RAW((VALUE)ci, ((VALUE)RUBY_FL_USER4));
10745 }
10746}
10747typedef VALUE (*vm_call_handler)(
10748 struct rb_execution_context_struct *ec,
10749 struct rb_control_frame_struct *cfp,
10750 struct rb_calling_info *calling);
10751struct rb_callcache {
10752 const VALUE flags;
10753 const VALUE klass;
10754 const struct rb_callable_method_entry_struct * const cme_;
10755 const vm_call_handler call_;
10756 union {
10757 struct {
10758 uintptr_t value;
10759 } attr;
10760 const enum method_missing_reason method_missing_reason;
10761 VALUE v;
10762 } aux_;
10763};
10764extern const struct rb_callcache *rb_vm_empty_cc(void);
10765extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
10766static inline void vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id_t dest_shape_id);
10767static inline void
10768vm_cc_attr_index_initialize(const struct rb_callcache *cc, shape_id_t shape_id)
10769{
10770 vm_cc_attr_index_set(cc, (attr_index_t)-1, shape_id);
10771}
10772static inline const struct rb_callcache *
10773vm_cc_new(VALUE klass,
10774 const struct rb_callable_method_entry_struct *cme,
10775 vm_call_handler call)
10776{
10777 const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
10778 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
10779 ((void)0);
10780 return cc;
10781}
10782static inline _Bool
10783vm_cc_class_check(const struct rb_callcache *cc, VALUE klass)
10784{
10785 ((void)0);
10786 ((void)0);
10787 return cc->klass == klass;
10788}
10789static inline int
10790vm_cc_markable(const struct rb_callcache *cc)
10791{
10792 ((void)0);
10793 return RB_FL_TEST_RAW((VALUE)cc, ((VALUE)RUBY_FL_FREEZE)) == 0;
10794}
10795static inline const struct rb_callable_method_entry_struct *
10796vm_cc_cme(const struct rb_callcache *cc)
10797{
10798 ((void)0);
10799 ((void)0);
10800 return cc->cme_;
10801}
10802static inline vm_call_handler
10803vm_cc_call(const struct rb_callcache *cc)
10804{
10805 ((void)0);
10806 ((void)0);
10807 return cc->call_;
10808}
10809static inline attr_index_t
10810vm_cc_attr_index(const struct rb_callcache *cc)
10811{
10812 ((void)0);
10813 return (attr_index_t)((cc->aux_.attr.value & (((VALUE)-1) >> 32)) - 1);
10814}
10815static inline shape_id_t
10816vm_cc_attr_index_dest_shape_id(const struct rb_callcache *cc)
10817{
10818 ((void)0);
10819 return cc->aux_.attr.value >> ((8 * 8) - 32);
10820}
10821static inline void
10822vm_cc_atomic_shape_and_index(const struct rb_callcache *cc, shape_id_t * shape_id, attr_index_t * index)
10823{
10824 uintptr_t cache_value = cc->aux_.attr.value;
10825 *shape_id = (shape_id_t)(cache_value >> ((8 * 8) - 32));
10826 *index = (attr_index_t)(cache_value & (((VALUE)-1) >> 32)) - 1;
10827 return;
10828}
10829static inline void
10830vm_ic_atomic_shape_and_index(const struct iseq_inline_iv_cache_entry *ic, shape_id_t * shape_id, attr_index_t * index)
10831{
10832 uintptr_t cache_value = ic->value;
10833 *shape_id = (shape_id_t)(cache_value >> ((8 * 8) - 32));
10834 *index = (attr_index_t)(cache_value & (((VALUE)-1) >> 32)) - 1;
10835 return;
10836}
10837static inline shape_id_t
10838vm_ic_attr_index_dest_shape_id(const struct iseq_inline_iv_cache_entry *ic)
10839{
10840 return (shape_id_t)(ic->value >> ((8 * 8) - 32));
10841}
10842static inline unsigned int
10843vm_cc_cmethod_missing_reason(const struct rb_callcache *cc)
10844{
10845 ((void)0);
10846 return cc->aux_.method_missing_reason;
10847}
10848static inline _Bool
10849vm_cc_invalidated_p(const struct rb_callcache *cc)
10850{
10851 if (cc->klass && !((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))) {
10852 return 0;
10853 }
10854 else {
10855 return 1;
10856 }
10857}
10858static inline _Bool
10859vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass)
10860{
10861 ((void)0);
10862 if (cc->klass == klass && !((cc_cme)->flags & ((VALUE)RUBY_FL_USER9))) {
10863 return 1;
10864 }
10865 else {
10866 return 0;
10867 }
10868}
10869static inline void
10870vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
10871{
10872 ((void)0);
10873 ((void)0);
10874 *(vm_call_handler *)&cc->call_ = call;
10875}
10876static inline void
10877vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id_t dest_shape_id)
10878{
10879 uintptr_t *attr_value = (uintptr_t *)&cc->aux_.attr.value;
10880 if (!vm_cc_markable(cc)) {
10881 *attr_value = (uintptr_t)(((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32);
10882 return;
10883 }
10884 ((void)0);
10885 ((void)0);
10886 *attr_value = (attr_index_t)(index + 1) | ((uintptr_t)(dest_shape_id) << ((8 * 8) - 32));
10887}
10888static inline void
10889vm_ic_attr_index_set(const rb_iseq_t *iseq, const struct iseq_inline_iv_cache_entry *ic, attr_index_t index, shape_id_t dest_shape_id)
10890{
10891 *(uintptr_t *)&ic->value = ((uintptr_t)dest_shape_id << ((8 * 8) - 32)) | (attr_index_t)(index + 1);
10892}
10893static inline void
10894vm_ic_attr_index_initialize(const struct iseq_inline_iv_cache_entry *ic, shape_id_t shape_id)
10895{
10896 *(uintptr_t *)&ic->value = (uintptr_t)shape_id << ((8 * 8) - 32);
10897}
10898static inline void
10899vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missing_reason reason)
10900{
10901 ((void)0);
10902 ((void)0);
10903 *(enum method_missing_reason *)&cc->aux_.method_missing_reason = reason;
10904}
10905static inline void
10906vm_cc_invalidate(const struct rb_callcache *cc)
10907{
10908 ((void)0);
10909 ((void)0);
10910 ((void)0);
10911 *(VALUE *)&cc->klass = 0;
10912 ((void)0);
10913}
10914struct rb_call_data {
10915 const struct rb_callinfo *ci;
10916 const struct rb_callcache *cc;
10917};
10918struct rb_class_cc_entries {
10919 int capa;
10920 int len;
10921 const struct rb_callable_method_entry_struct *cme;
10922 struct rb_class_cc_entries_entry {
10923 const struct rb_callinfo *ci;
10924 const struct rb_callcache *cc;
10925 } *entries;
10926};
10927void rb_vm_ccs_free(struct rb_class_cc_entries *ccs);
10928
10929
10930struct RNode;
10931VALUE ruby_debug_print_value(int level, int debug_level, const char *header, VALUE v);
10932ID ruby_debug_print_id(int level, int debug_level, const char *header, ID id);
10933struct RNode *ruby_debug_print_node(int level, int debug_level, const char *header, const struct RNode *node);
10934int ruby_debug_print_indent(int level, int debug_level, int indent_level);
10935void ruby_debug_gc_check_func(void);
10936void ruby_set_debug_option(const char *str);
10937
10938
10939extern enum ruby_debug_log_mode {
10940 ruby_debug_log_disabled = 0x00,
10941 ruby_debug_log_memory = 0x01,
10942 ruby_debug_log_stderr = 0x02,
10943 ruby_debug_log_file = 0x04,
10944} ruby_debug_log_mode;
10945__attribute__((__format__(__printf__, 4, 5)))
10946void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
10947void ruby_debug_log_print(unsigned int n);
10948_Bool ruby_debug_log_filter(const char *func_name, const char *file_name);
10949typedef long OFFSET;
10950typedef unsigned long lindex_t;
10951typedef VALUE GENTRY;
10952typedef rb_iseq_t *ISEQ;
10953
10954
10955extern VALUE ruby_vm_const_missing_count;
10956extern rb_serial_t ruby_vm_constant_cache_invalidations;
10957extern rb_serial_t ruby_vm_constant_cache_misses;
10958extern rb_serial_t ruby_vm_global_cvar_state;
10959
10960
10961static inline void
10962CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, _Bool enabled)
10963{
10964 if ((__builtin_expect(!!(enabled), 1))) {
10965 vm_cc_call_set(cc, func);
10966 }
10967}
10968static inline struct vm_throw_data *
10969THROW_DATA_NEW(VALUE val, const rb_control_frame_t *cf, int st)
10970{
10971 struct vm_throw_data *obj = (struct vm_throw_data *)rb_imemo_new(imemo_throw_data, val, (VALUE)cf, 0, 0);
10972 obj->throw_state = st;
10973 return obj;
10974}
10975static inline VALUE
10976THROW_DATA_VAL(const struct vm_throw_data *obj)
10977{
10978 ((void)0);
10979 return obj->throw_obj;
10980}
10981static inline const rb_control_frame_t *
10982THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj)
10983{
10984 ((void)0);
10985 return obj->catch_frame;
10986}
10987static inline int
10988THROW_DATA_STATE(const struct vm_throw_data *obj)
10989{
10990 ((void)0);
10991 return obj->throw_state;
10992}
10993static inline int
10994THROW_DATA_CONSUMED_P(const struct vm_throw_data *obj)
10995{
10996 ((void)0);
10997 return obj->flags & ((VALUE)RUBY_FL_USER4);
10998}
10999static inline void
11000THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
11001{
11002 ((void)0);
11003 obj->catch_frame = cfp;
11004}
11005static inline void
11006THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
11007{
11008 ((void)0);
11009 obj->throw_state = st;
11010}
11011static inline void
11012THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
11013{
11014 if (imemo_throw_data_p((VALUE)obj) &&
11015 THROW_DATA_STATE(obj) == RUBY_TAG_BREAK) {
11016 obj->flags |= ((VALUE)RUBY_FL_USER4);
11017 }
11018}
11019static inline _Bool
11020vm_call_cacheable(const struct rb_callinfo *ci, const struct rb_callcache *cc)
11021{
11022 return (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) ||
11023 (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;
11024}
11025static inline _Bool
11026vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
11027{
11028 return !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) && vm_call_cacheable(ci, cc);
11029}
11030struct rb_ractor_local_storage_type {
11031 void (*mark)(void *ptr);
11032 void (*free)(void *ptr);
11033};
11034typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t;
11035
11036
11037extern VALUE rb_cRactor;
11038VALUE rb_ractor_stdin(void);
11039VALUE rb_ractor_stdout(void);
11040VALUE rb_ractor_stderr(void);
11041void rb_ractor_stdin_set(VALUE io);
11042void rb_ractor_stdout_set(VALUE io);
11043void rb_ractor_stderr_set(VALUE io);
11044rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);
11045VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);
11046_Bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);
11047void rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);
11048extern const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;
11049rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type);
11050void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);
11051void rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);
11052VALUE rb_ractor_make_shareable(VALUE obj);
11053VALUE rb_ractor_make_shareable_copy(VALUE obj);
11054
11055
11056static inline _Bool
11057rb_ractor_shareable_p(VALUE obj)
11058{
11059 _Bool rb_ractor_shareable_p_continue(VALUE obj);
11060 if (RB_SPECIAL_CONST_P(obj)) {
11061 return 1;
11062 }
11063 else if (RB_FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)) {
11064 return 1;
11065 }
11066 else {
11067 return rb_ractor_shareable_p_continue(obj);
11068 }
11069}
11070enum rb_ractor_basket_type {
11071 basket_type_none,
11072 basket_type_ref,
11073 basket_type_copy,
11074 basket_type_move,
11075 basket_type_will,
11076 basket_type_deleted,
11077 basket_type_reserved,
11078};
11079struct rb_ractor_basket {
11080 _Bool exception;
11081 enum rb_ractor_basket_type type;
11082 VALUE v;
11083 VALUE sender;
11084};
11085struct rb_ractor_queue {
11086 struct rb_ractor_basket *baskets;
11087 int start;
11088 int cnt;
11089 int size;
11090 unsigned int serial;
11091 unsigned int reserved_cnt;
11092};
11093struct rb_ractor_waiting_list {
11094 int cnt;
11095 int size;
11096 rb_ractor_t **ractors;
11097};
11098enum rb_ractor_wait_status {
11099 wait_none = 0x00,
11100 wait_receiving = 0x01,
11101 wait_taking = 0x02,
11102 wait_yielding = 0x04,
11103 wait_moving = 0x08,
11104};
11105enum rb_ractor_wakeup_status {
11106 wakeup_none,
11107 wakeup_by_send,
11108 wakeup_by_yield,
11109 wakeup_by_take,
11110 wakeup_by_close,
11111 wakeup_by_interrupt,
11112 wakeup_by_retry,
11113};
11114struct rb_ractor_sync {
11115 rb_nativethread_lock_t lock;
11116 rb_nativethread_cond_t cond;
11117 struct rb_ractor_queue incoming_queue;
11118 struct rb_ractor_waiting_list taking_ractors;
11119 _Bool incoming_port_closed;
11120 _Bool outgoing_port_closed;
11121 struct ractor_wait {
11122 enum rb_ractor_wait_status status;
11123 enum rb_ractor_wakeup_status wakeup_status;
11124 struct rb_ractor_basket yielded_basket;
11125 struct rb_ractor_basket taken_basket;
11126 } wait;
11127};
11128enum ractor_status {
11129 ractor_created,
11130 ractor_running,
11131 ractor_blocking,
11132 ractor_terminated,
11133};
11134struct rb_ractor_struct {
11135 struct rb_ractor_pub pub;
11136 struct rb_ractor_sync sync;
11137 VALUE receiving_mutex;
11138 _Bool yield_atexit;
11139 rb_nativethread_cond_t barrier_wait_cond;
11140 struct {
11141 struct ccan_list_head set;
11142 unsigned int cnt;
11143 unsigned int blocking_cnt;
11144 unsigned int sleeper;
11145 struct rb_thread_sched sched;
11146 rb_execution_context_t *running_ec;
11147 rb_thread_t *main;
11148 } threads;
11149 VALUE thgroup_default;
11150 VALUE name;
11151 VALUE loc;
11152 enum ractor_status status_;
11153 struct ccan_list_node vmlr_node;
11154 st_table *local_storage;
11155 struct rb_id_table *idkey_local_storage;
11156 VALUE r_stdin;
11157 VALUE r_stdout;
11158 VALUE r_stderr;
11159 VALUE verbose;
11160 VALUE debug;
11161 rb_ractor_newobj_cache_t newobj_cache;
11162 struct gc_mark_func_data_struct {
11163 void *data;
11164 void (*mark_func)(VALUE v, void *data);
11165 } *mfd;
11166};
11167static inline VALUE
11168rb_ractor_self(const rb_ractor_t *r)
11169{
11170 return r->pub.self;
11171}
11172rb_ractor_t *rb_ractor_main_alloc(void);
11173void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread);
11174void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result);
11175void rb_ractor_atexit_exception(rb_execution_context_t *ec);
11176void rb_ractor_teardown(rb_execution_context_t *ec);
11177void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
11178void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args);
11179VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc);
11180int rb_ractor_living_thread_num(const rb_ractor_t *);
11181VALUE rb_ractor_thread_list(rb_ractor_t *r);
11182_Bool rb_ractor_p(VALUE rv);
11183void rb_ractor_living_threads_init(rb_ractor_t *r);
11184void rb_ractor_living_threads_insert(rb_ractor_t *r, rb_thread_t *th);
11185void rb_ractor_living_threads_remove(rb_ractor_t *r, rb_thread_t *th);
11186void rb_ractor_blocking_threads_inc(rb_ractor_t *r, const char *file, int line);
11187void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line);
11188void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r);
11189void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r);
11190void rb_ractor_terminate_all(void);
11191_Bool rb_ractor_main_p_(void);
11192void rb_ractor_finish_marking(void);
11193void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th);
11194VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name);
11195
11196
11197_Bool rb_ractor_shareable_p_continue(VALUE obj);
11198void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key);
11199
11200
11201static inline _Bool
11202rb_ractor_main_p(void)
11203{
11204 if (ruby_single_main_ractor) {
11205 return 1;
11206 }
11207 else {
11208 return rb_ractor_main_p_();
11209 }
11210}
11211static inline _Bool
11212rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status)
11213{
11214 return r->status_ == status;
11215}
11216static inline void
11217rb_ractor_sleeper_threads_inc(rb_ractor_t *r)
11218{
11219 r->threads.sleeper++;
11220}
11221static inline void
11222rb_ractor_sleeper_threads_dec(rb_ractor_t *r)
11223{
11224 r->threads.sleeper--;
11225}
11226static inline void
11227rb_ractor_sleeper_threads_clear(rb_ractor_t *r)
11228{
11229 r->threads.sleeper = 0;
11230}
11231static inline int
11232rb_ractor_sleeper_thread_num(rb_ractor_t *r)
11233{
11234 return r->threads.sleeper;
11235}
11236static inline void
11237rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
11238{
11239 if (cr->threads.running_ec != th->ec) {
11240 if (0) {
11241 ruby_debug_printf("rb_ractor_thread_switch ec:%p->%p\n",
11242 (void *)cr->threads.running_ec, (void *)th->ec);
11243 }
11244 }
11245 else {
11246 return;
11247 }
11248 if (cr->threads.running_ec != th->ec) {
11249 th->running_time_us = 0;
11250 }
11251 cr->threads.running_ec = th->ec;
11252 ((void)0);
11253}
11254static inline void
11255rb_ractor_set_current_ec_(rb_ractor_t *cr, rb_execution_context_t *ec, const char *file, int line)
11256{
11257 ruby_current_ec = ec;
11258 ;
11259 ((void)0);
11260 cr->threads.running_ec = ec;
11261}
11262void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11263void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11264static inline uint32_t
11265rb_ractor_id(const rb_ractor_t *r)
11266{
11267 return r->pub.id;
11268}
11269_Bool rb_vm_locked_p(void);
11270void rb_vm_lock_body(void);
11271void rb_vm_unlock_body(void);
11272struct rb_ractor_struct;
11273void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev );
11274void rb_vm_lock_enter_body_nb(unsigned int *lev );
11275void rb_vm_lock_enter_body(unsigned int *lev );
11276void rb_vm_lock_leave_body(unsigned int *lev );
11277void rb_vm_barrier(void);
11278extern struct rb_ractor_struct *ruby_single_main_ractor;
11279static inline _Bool
11280rb_multi_ractor_p(void)
11281{
11282 if ((__builtin_expect(!!(ruby_single_main_ractor), 1))) {
11283 ((void)0);
11284 return 0;
11285 }
11286 else {
11287 return 1;
11288 }
11289}
11290static inline void
11291rb_vm_lock(const char *file, int line)
11292{
11293 ((void)0);
11294 if (rb_multi_ractor_p()) {
11295 rb_vm_lock_body();
11296 }
11297}
11298static inline void
11299rb_vm_unlock(const char *file, int line)
11300{
11301 if (rb_multi_ractor_p()) {
11302 rb_vm_unlock_body();
11303 }
11304}
11305static inline void
11306rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
11307{
11308 ((void)0);
11309 if (rb_multi_ractor_p()) {
11310 rb_vm_lock_enter_body(lev );
11311 }
11312}
11313static inline void
11314rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
11315{
11316 ((void)0);
11317 if (rb_multi_ractor_p()) {
11318 rb_vm_lock_enter_body_nb(lev );
11319 }
11320}
11321static inline void
11322rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
11323{
11324 if (rb_multi_ractor_p()) {
11325 rb_vm_lock_leave_body(lev );
11326 }
11327}
11328static inline void
11329rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11330{
11331 ((void)0);
11332 rb_vm_lock_enter_body_cr(cr, levp );
11333}
11334static inline void
11335rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11336{
11337 rb_vm_lock_leave_body(levp );
11338}
11339struct rb_builtin_function {
11340 const void * const func_ptr;
11341 const int argc;
11342 const int index;
11343 const char * const name;
11344 void (*compiler)(VALUE, long, unsigned, _Bool);
11345};
11346void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
11347typedef VALUE (*rb_builtin_arity0_function_type)(rb_execution_context_t *ec, VALUE self);
11348typedef VALUE (*rb_builtin_arity1_function_type)(rb_execution_context_t *ec, VALUE self,
11349 VALUE);
11350typedef VALUE (*rb_builtin_arity2_function_type)(rb_execution_context_t *ec, VALUE self,
11351 VALUE, VALUE);
11352typedef VALUE (*rb_builtin_arity3_function_type)(rb_execution_context_t *ec, VALUE self,
11353 VALUE, VALUE, VALUE);
11354typedef VALUE (*rb_builtin_arity4_function_type)(rb_execution_context_t *ec, VALUE self,
11355 VALUE, VALUE, VALUE, VALUE);
11356typedef VALUE (*rb_builtin_arity5_function_type)(rb_execution_context_t *ec, VALUE self,
11357 VALUE, VALUE, VALUE, VALUE, VALUE);
11358typedef VALUE (*rb_builtin_arity6_function_type)(rb_execution_context_t *ec, VALUE self,
11359 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11360typedef VALUE (*rb_builtin_arity7_function_type)(rb_execution_context_t *ec, VALUE self,
11361 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11362typedef VALUE (*rb_builtin_arity8_function_type)(rb_execution_context_t *ec, VALUE self,
11363 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11364typedef VALUE (*rb_builtin_arity9_function_type)(rb_execution_context_t *ec, VALUE self,
11365 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11366typedef VALUE (*rb_builtin_arity10_function_type)(rb_execution_context_t *ec, VALUE self,
11367 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11368typedef VALUE (*rb_builtin_arity11_function_type)(rb_execution_context_t *ec, VALUE self,
11369 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11370typedef VALUE (*rb_builtin_arity12_function_type)(rb_execution_context_t *ec, VALUE self,
11371 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11372typedef VALUE (*rb_builtin_arity13_function_type)(rb_execution_context_t *ec, VALUE self,
11373 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11374typedef VALUE (*rb_builtin_arity14_function_type)(rb_execution_context_t *ec, VALUE self,
11375 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11376typedef VALUE (*rb_builtin_arity15_function_type)(rb_execution_context_t *ec, VALUE self,
11377 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11378static inline void rb_builtin_function_check_arity0(rb_builtin_arity0_function_type f){}
11379static inline void rb_builtin_function_check_arity1(rb_builtin_arity1_function_type f){}
11380static inline void rb_builtin_function_check_arity2(rb_builtin_arity2_function_type f){}
11381static inline void rb_builtin_function_check_arity3(rb_builtin_arity3_function_type f){}
11382static inline void rb_builtin_function_check_arity4(rb_builtin_arity4_function_type f){}
11383static inline void rb_builtin_function_check_arity5(rb_builtin_arity5_function_type f){}
11384static inline void rb_builtin_function_check_arity6(rb_builtin_arity6_function_type f){}
11385static inline void rb_builtin_function_check_arity7(rb_builtin_arity7_function_type f){}
11386static inline void rb_builtin_function_check_arity8(rb_builtin_arity8_function_type f){}
11387static inline void rb_builtin_function_check_arity9(rb_builtin_arity9_function_type f){}
11388static inline void rb_builtin_function_check_arity10(rb_builtin_arity10_function_type f){}
11389static inline void rb_builtin_function_check_arity11(rb_builtin_arity11_function_type f){}
11390static inline void rb_builtin_function_check_arity12(rb_builtin_arity12_function_type f){}
11391static inline void rb_builtin_function_check_arity13(rb_builtin_arity13_function_type f){}
11392static inline void rb_builtin_function_check_arity14(rb_builtin_arity14_function_type f){}
11393static inline void rb_builtin_function_check_arity15(rb_builtin_arity15_function_type f){}static inline
11394__attribute__((__pure__)) VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);static inline
11395VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
11396__attribute__((__pure__)) static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index);
11397static inline VALUE
11398rb_vm_lvar(rb_execution_context_t *ec, int index)
11399{
11400 return ec->cfp->ep[index];
11401}
11402struct builtin_binary {
11403 const char *feature;
11404 const unsigned char *bin;
11405 size_t bin_size;
11406};
11407struct ruby_dtrace_method_hook_args {
11408 const char *classname;
11409 const char *methodname;
11410 const char *filename;
11411 int line_no;
11412 volatile VALUE klass;
11413 volatile VALUE name;
11414};
11415
11416
11417__attribute__((__noinline__)) int rb_dtrace_setup(rb_execution_context_t *, VALUE, ID, struct ruby_dtrace_method_hook_args *);
11418
11419
11420VALUE rb_str_concat_literals(size_t, const VALUE*);
11421__attribute__ ((__visibility__("default"))) extern
11422VALUE rb_vm_exec(rb_execution_context_t *, _Bool);
11423extern const char *const rb_debug_counter_names[];
11424__attribute__((__pure__)) static inline const VALUE *VM_EP_LEP(const VALUE *);
11425static inline const VALUE *
11426VM_EP_LEP(const VALUE *ep)
11427{
11428 while (!VM_ENV_LOCAL_P(ep)) {
11429 ep = VM_ENV_PREV_EP(ep);
11430 }
11431 return ep;
11432}
11433static inline const rb_control_frame_t *
11434rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE * const ep)
11435{
11436 if (!ep) {
11437 return ((void *)0);
11438 }
11439 else {
11440 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
11441 while (cfp < eocfp) {
11442 if (cfp->ep == ep) {
11443 return cfp;
11444 }
11445 cfp = ((cfp)+1);
11446 }
11447 return ((void *)0);
11448 }
11449}static inline
11450const VALUE *
11451rb_vm_ep_local_ep(const VALUE *ep)
11452{
11453 return VM_EP_LEP(ep);
11454}
11455__attribute__((__pure__)) static inline const VALUE *VM_CF_LEP(const rb_control_frame_t * const cfp);
11456static inline const VALUE *
11457VM_CF_LEP(const rb_control_frame_t * const cfp)
11458{
11459 return VM_EP_LEP(cfp->ep);
11460}
11461static inline const VALUE *
11462VM_CF_PREV_EP(const rb_control_frame_t * const cfp)
11463{
11464 return VM_ENV_PREV_EP(cfp->ep);
11465}
11466__attribute__((__pure__)) static inline VALUE VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp);
11467static inline VALUE
11468VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp)
11469{
11470 const VALUE *ep = VM_CF_LEP(cfp);
11471 return VM_ENV_BLOCK_HANDLER(ep);
11472}static inline
11473int
11474rb_vm_cframe_keyword_p(const rb_control_frame_t *cfp)
11475{
11476 return VM_FRAME_CFRAME_KW_P(cfp);
11477}static inline
11478VALUE
11479rb_vm_frame_block_handler(const rb_control_frame_t *cfp)
11480{
11481 return VM_CF_BLOCK_HANDLER(cfp);
11482}
11483static struct rb_captured_block *
11484VM_CFP_TO_CAPTURED_BLOCK(const rb_control_frame_t *cfp)
11485{
11486 ((void)0);
11487 return (struct rb_captured_block *)&cfp->self;
11488}
11489static rb_control_frame_t *
11490VM_CAPTURED_BLOCK_TO_CFP(const struct rb_captured_block *captured)
11491{
11492 rb_control_frame_t *cfp = ((rb_control_frame_t *)((VALUE *)(captured) - 3));
11493 ((void)0);
11494 ((void)0);
11495 return cfp;
11496}
11497static int
11498VM_BH_FROM_CFP_P(VALUE block_handler, const rb_control_frame_t *cfp)
11499{
11500 const struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
11501 return ((void *)((block_handler) & ~0x03)) == captured;
11502}
11503static VALUE
11504vm_passed_block_handler(rb_execution_context_t *ec)
11505{
11506 VALUE block_handler = ec->passed_block_handler;
11507 ec->passed_block_handler = 0;
11508 vm_block_handler_verify(block_handler);
11509 return block_handler;
11510}
11511static rb_cref_t *
11512vm_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)
11513{
11514 VALUE refinements = ((VALUE)RUBY_Qnil);
11515 int omod_shared = 0;
11516 rb_cref_t *cref;
11517 union {
11518 rb_scope_visibility_t visi;
11519 VALUE value;
11520 } scope_visi;
11521 scope_visi.visi.method_visi = visi;
11522 scope_visi.visi.module_func = module_func;
11523 if (prev_cref != ((void *)0) && prev_cref != (void *)1 ) {
11524 refinements = CREF_REFINEMENTS(prev_cref);
11525 if (!RB_NIL_P(refinements)) {
11526 omod_shared = 1;
11527 CREF_OMOD_SHARED_SET(prev_cref);
11528 }
11529 }
11530 ((void)0);
11531 cref = (rb_cref_t *)rb_imemo_new(imemo_cref, klass, (VALUE)(use_prev_prev ? CREF_NEXT(prev_cref) : prev_cref), scope_visi.value, refinements);
11532 if (pushed_by_eval) CREF_PUSHED_BY_EVAL_SET(cref);
11533 if (omod_shared) CREF_OMOD_SHARED_SET(cref);
11534 if (singleton) CREF_SINGLETON_SET(cref);
11535 return cref;
11536}
11537static rb_cref_t *
11538vm_cref_new(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int singleton)
11539{
11540 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 0, singleton);
11541}
11542static rb_cref_t *
11543vm_cref_new_use_prev(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval)
11544{
11545 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 1, 0);
11546}
11547static int
11548ref_delete_symkey(VALUE key, VALUE value, VALUE unused)
11549{
11550 return RB_SYMBOL_P(key) ? ST_DELETE : ST_CONTINUE;
11551}
11552static rb_cref_t *
11553vm_cref_dup(const rb_cref_t *cref)
11554{
11555 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11556 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11557 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11558 int singleton = CREF_SINGLETON(cref);
11559 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11560 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11561 VALUE ref = rb_hash_dup(CREF_REFINEMENTS(cref));
11562 rb_hash_foreach(ref, ref_delete_symkey, ((VALUE)RUBY_Qnil));
11563 CREF_REFINEMENTS_SET(new_cref, ref);
11564 CREF_OMOD_SHARED_UNSET(new_cref);
11565 }
11566 return new_cref;
11567}static inline
11568rb_cref_t *
11569rb_vm_cref_dup_without_refinements(const rb_cref_t *cref)
11570{
11571 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11572 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11573 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11574 int singleton = CREF_SINGLETON(cref);
11575 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11576 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11577 CREF_REFINEMENTS_SET(new_cref, ((VALUE)RUBY_Qnil));
11578 CREF_OMOD_SHARED_UNSET(new_cref);
11579 }
11580 return new_cref;
11581}
11582static rb_cref_t *
11583vm_cref_new_toplevel(rb_execution_context_t *ec)
11584{
11585 rb_cref_t *cref = vm_cref_new(rb_cObject, METHOD_VISI_PRIVATE , 0, ((void *)0), 0, 0);
11586 VALUE top_wrapper = rb_ec_thread_ptr(ec)->top_wrapper;
11587 if (top_wrapper) {
11588 cref = vm_cref_new(top_wrapper, METHOD_VISI_PRIVATE, 0, cref, 0, 0);
11589 }
11590 return cref;
11591}static inline
11592rb_cref_t *
11593rb_vm_cref_new_toplevel(void)
11594{
11595 return vm_cref_new_toplevel(rb_current_execution_context(1));
11596}
11597static void
11598vm_cref_dump(const char *mesg, const rb_cref_t *cref)
11599{
11600 ruby_debug_printf("vm_cref_dump: %s (%p)\n", mesg, (void *)cref);
11601 while (cref) {
11602 ruby_debug_printf("= cref| klass: %s\n", RSTRING_PTR(rb_class_path(CREF_CLASS(cref))));
11603 cref = CREF_NEXT(cref);
11604 }
11605}static inline
11606void
11607rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep)
11608{
11609 *((const VALUE **)&dst->as.captured.ep) = ep;
11610 (rb_obj_written((VALUE)(obj), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(VM_ENV_ENVVAL(ep)), "../ruby-3.2.1/vm.c", 360));
11611}
11612static void
11613vm_bind_update_env(VALUE bindval, rb_binding_t *bind, VALUE envval)
11614{
11615 const rb_env_t *env = (rb_env_t *)envval;
11616 rb_obj_write((VALUE)(bindval), __extension__({
11617 ;
11618 ; __typeof__((VALUE *)(&bind->block.as.captured.code.iseq)) unaligned_member_access_result = ((VALUE *)(&bind->block.as.captured.code.iseq));
11619 ; unaligned_member_access_result; }), (VALUE)(env->iseq), "../ruby-3.2.1/vm.c", 367);
11620 rb_vm_block_ep_update(bindval, &bind->block, env->ep);
11621}
11622static VALUE vm_make_env_object(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
11623extern VALUE rb_vm_invoke_bmethod(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self,
11624 int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
11625 const rb_callable_method_entry_t *me);
11626static 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);
11627__attribute__((__noinline__)) static __attribute__((__cold__)) VALUE mjit_check_iseq(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body);
11628static VALUE
11629mjit_check_iseq(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
11630{
11631 uintptr_t mjit_state = (uintptr_t)(body->jit_func);
11632 ((__builtin_expect(!!(!!(((uintptr_t)(mjit_state) <= (uintptr_t)MJIT_FUNC_FAILED))), 1)) ? ((void)0) : __builtin_unreachable());
11633 switch ((enum rb_mjit_func_state)mjit_state) {
11634 case MJIT_FUNC_NOT_COMPILED:
11635 if (body->total_calls == mjit_opts.call_threshold) {
11636 rb_mjit_add_iseq_to_process(iseq);
11637 if ((__builtin_expect(!!(mjit_opts.wait && !((uintptr_t)(body->jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)), 0))) {
11638 return body->jit_func(ec, ec->cfp);
11639 }
11640 }
11641 break;
11642 case MJIT_FUNC_COMPILING:
11643 case MJIT_FUNC_FAILED:
11644 break;
11645 }
11646 return ((VALUE)RUBY_Qundef);
11647}
11648static inline VALUE
11649jit_exec(rb_execution_context_t *ec)
11650{
11651 const rb_iseq_t *iseq = ec->cfp->iseq;
11652 struct rb_iseq_constant_body *body = ((iseq)->body);
11653 _Bool yjit_enabled = rb_yjit_enabled_p();
11654 if (yjit_enabled || mjit_call_p) {
11655 body->total_calls++;
11656 }
11657 else {
11658 return ((VALUE)RUBY_Qundef);
11659 }
11660 jit_func_t func;
11661 if (yjit_enabled) {
11662 if (body->total_calls == rb_yjit_call_threshold()) {
11663 if (!rb_yjit_compile_iseq(iseq, ec)) {
11664 return ((VALUE)RUBY_Qundef);
11665 }
11666 }
11667 if ((func = body->jit_func) == 0) {
11668 return ((VALUE)RUBY_Qundef);
11669 }
11670 }
11671 else if ((__builtin_expect(!!(((uintptr_t)(func = body->jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)), 0))) {
11672 return mjit_check_iseq(ec, iseq, body);
11673 }
11674 return func(ec, ec->cfp);
11675}
11676VALUE rb_invcmp(VALUE, VALUE);
11677struct ar_table_struct;
11678typedef unsigned char ar_hint_t;
11679enum ruby_rhash_flags {
11680 RHASH_PASS_AS_KEYWORDS = ((VALUE)RUBY_FL_USER1),
11681 RHASH_PROC_DEFAULT = ((VALUE)RUBY_FL_USER2),
11682 RHASH_ST_TABLE_FLAG = ((VALUE)RUBY_FL_USER3),
11683 RHASH_AR_TABLE_SIZE_MASK = (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)|((VALUE)RUBY_FL_USER7)),
11684 RHASH_AR_TABLE_SIZE_SHIFT = (((VALUE)RUBY_FL_USHIFT)+4),
11685 RHASH_AR_TABLE_BOUND_MASK = (((VALUE)RUBY_FL_USER8)|((VALUE)RUBY_FL_USER9)|((VALUE)RUBY_FL_USER10)|((VALUE)RUBY_FL_USER11)),
11686 RHASH_AR_TABLE_BOUND_SHIFT = (((VALUE)RUBY_FL_USHIFT)+8),
11687 RHASH_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER12),
11688 RHASH_LEV_SHIFT = (((VALUE)RUBY_FL_USHIFT) + 13),
11689 RHASH_LEV_MAX = 127,
11690};
11691struct RHash {
11692 struct RBasic basic;
11693 union {
11694 st_table *st;
11695 struct ar_table_struct *ar;
11696 } as;
11697 const VALUE ifnone;
11698 union {
11699 ar_hint_t ary[8];
11700 VALUE word;
11701 } ar_hint;
11702};
11703void rb_hash_st_table_set(VALUE hash, st_table *st);
11704VALUE rb_hash_default_value(VALUE hash, VALUE key);
11705VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
11706long rb_dbl_long_hash(double d);
11707st_table *rb_init_identtable(void);
11708VALUE rb_to_hash_type(VALUE obj);
11709VALUE rb_hash_key_str(VALUE);
11710VALUE rb_hash_values(VALUE hash);
11711VALUE rb_hash_rehash(VALUE hash);
11712int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val);
11713VALUE rb_hash_set_pair(VALUE hash, VALUE pair);
11714int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
11715int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
11716int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
11717extern st_table *rb_hash_st_table(VALUE hash);
11718VALUE rb_ident_hash_new_with_size(st_index_t size);
11719static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
11720static inline VALUE RHASH_IFNONE(VALUE h);
11721static inline size_t RHASH_SIZE(VALUE h);
11722static inline _Bool RHASH_EMPTY_P(VALUE h);
11723static inline _Bool RHASH_AR_TABLE_P(VALUE h);
11724static inline _Bool RHASH_ST_TABLE_P(VALUE h);
11725static inline struct ar_table_struct *RHASH_AR_TABLE(VALUE h);
11726static inline st_table *RHASH_ST_TABLE(VALUE h);
11727static inline size_t RHASH_ST_SIZE(VALUE h);
11728static inline void RHASH_ST_CLEAR(VALUE h);
11729static inline _Bool RHASH_TRANSIENT_P(VALUE h);
11730static inline void RHASH_SET_TRANSIENT_FLAG(VALUE h);
11731static inline void RHASH_UNSET_TRANSIENT_FLAG(VALUE h);
11732
11733
11734VALUE rb_hash_delete_entry(VALUE hash, VALUE key);
11735VALUE rb_ident_hash_new(void);
11736int rb_hash_stlike_foreach(VALUE hash, st_foreach_callback_func *func, st_data_t arg);
11737
11738
11739
11740
11741VALUE rb_hash_new_with_size(st_index_t size);
11742VALUE rb_hash_resurrect(VALUE hash);
11743int rb_hash_stlike_lookup(VALUE hash, st_data_t key, st_data_t *pval);
11744VALUE rb_hash_keys(VALUE hash);
11745VALUE rb_hash_has_key(VALUE hash, VALUE key);
11746VALUE rb_hash_compare_by_id_p(VALUE hash);
11747st_table *rb_hash_tbl_raw(VALUE hash, const char *file, int line);
11748
11749
11750VALUE rb_hash_compare_by_id(VALUE hash);
11751static inline _Bool
11752RHASH_AR_TABLE_P(VALUE h)
11753{
11754 return ! RB_FL_TEST_RAW(h, RHASH_ST_TABLE_FLAG);
11755}
11756static inline struct ar_table_struct *
11757RHASH_AR_TABLE(VALUE h)
11758{
11759 return ((struct RHash *)(h))->as.ar;
11760}
11761static inline st_table *
11762RHASH_ST_TABLE(VALUE h)
11763{
11764 return ((struct RHash *)(h))->as.st;
11765}
11766static inline VALUE
11767RHASH_IFNONE(VALUE h)
11768{
11769 return ((struct RHash *)(h))->ifnone;
11770}
11771static inline size_t
11772RHASH_SIZE(VALUE h)
11773{
11774 if (RHASH_AR_TABLE_P(h)) {
11775 return RHASH_AR_TABLE_SIZE_RAW(h);
11776 }
11777 else {
11778 return RHASH_ST_SIZE(h);
11779 }
11780}
11781static inline _Bool
11782RHASH_EMPTY_P(VALUE h)
11783{
11784 return RHASH_SIZE(h) == 0;
11785}
11786static inline _Bool
11787RHASH_ST_TABLE_P(VALUE h)
11788{
11789 return ! RHASH_AR_TABLE_P(h);
11790}
11791static inline size_t
11792RHASH_ST_SIZE(VALUE h)
11793{
11794 return RHASH_ST_TABLE(h)->num_entries;
11795}
11796static inline void
11797RHASH_ST_CLEAR(VALUE h)
11798{
11799 RB_FL_UNSET_RAW(h, RHASH_ST_TABLE_FLAG);
11800 ((struct RHash *)(h))->as.ar = ((void *)0);
11801}
11802static inline unsigned
11803RHASH_AR_TABLE_SIZE_RAW(VALUE h)
11804{
11805 VALUE ret = RB_FL_TEST_RAW(h, RHASH_AR_TABLE_SIZE_MASK);
11806 ret >>= RHASH_AR_TABLE_SIZE_SHIFT;
11807 return (unsigned)ret;
11808}
11809static inline _Bool
11810RHASH_TRANSIENT_P(VALUE h)
11811{
11812 return RB_FL_TEST_RAW(h, RHASH_TRANSIENT_FLAG);
11813}
11814static inline void
11815RHASH_SET_TRANSIENT_FLAG(VALUE h)
11816{
11817 RB_FL_SET_RAW(h, RHASH_TRANSIENT_FLAG);
11818}
11819static inline void
11820RHASH_UNSET_TRANSIENT_FLAG(VALUE h)
11821{
11822 RB_FL_UNSET_RAW(h, RHASH_TRANSIENT_FLAG);
11823}
11824enum rb_int_parse_flags {
11825 RB_INT_PARSE_SIGN = 0x01,
11826 RB_INT_PARSE_UNDERSCORE = 0x02,
11827 RB_INT_PARSE_PREFIX = 0x04,
11828 RB_INT_PARSE_ALL = 0x07,
11829 RB_INT_PARSE_DEFAULT = 0x07,
11830};
11831struct RBignum {
11832 struct RBasic basic;
11833 union {
11834 struct {
11835 size_t len;
11836 unsigned int *digits;
11837 } heap;
11838 unsigned int ary[(8*3/4)];
11839 } as;
11840};
11841extern const char ruby_digitmap[];
11842double rb_big_fdiv_double(VALUE x, VALUE y);
11843VALUE rb_big_uminus(VALUE x);
11844VALUE rb_big_hash(VALUE);
11845VALUE rb_big_odd_p(VALUE);
11846VALUE rb_big_even_p(VALUE);
11847size_t rb_big_size(VALUE);
11848VALUE rb_integer_float_cmp(VALUE x, VALUE y);
11849VALUE rb_integer_float_eq(VALUE x, VALUE y);
11850VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
11851VALUE rb_big_comp(VALUE x);
11852VALUE rb_big_aref(VALUE x, VALUE y);
11853VALUE rb_big_abs(VALUE x);
11854VALUE rb_big_size_m(VALUE big);
11855VALUE rb_big_bit_length(VALUE big);
11856VALUE rb_big_remainder(VALUE x, VALUE y);
11857VALUE rb_big_gt(VALUE x, VALUE y);
11858VALUE rb_big_ge(VALUE x, VALUE y);
11859VALUE rb_big_lt(VALUE x, VALUE y);
11860VALUE rb_big_le(VALUE x, VALUE y);
11861VALUE rb_int_powm(int const argc, VALUE * const argv, VALUE const num);
11862VALUE rb_big_isqrt(VALUE n);
11863static inline _Bool BIGNUM_SIGN(VALUE b);
11864static inline _Bool BIGNUM_POSITIVE_P(VALUE b);
11865static inline _Bool BIGNUM_NEGATIVE_P(VALUE b);
11866static inline void BIGNUM_SET_SIGN(VALUE b, _Bool sign);
11867static inline void BIGNUM_NEGATE(VALUE b);
11868static inline size_t BIGNUM_LEN(VALUE b);
11869static inline unsigned int *BIGNUM_DIGITS(VALUE b);
11870static inline int BIGNUM_LENINT(VALUE b);
11871static inline _Bool BIGNUM_EMBED_P(VALUE b);
11872
11873
11874VALUE rb_big_mul_normal(VALUE x, VALUE y);
11875VALUE rb_big_mul_balance(VALUE x, VALUE y);
11876VALUE rb_big_mul_karatsuba(VALUE x, VALUE y);
11877VALUE rb_big_mul_toom3(VALUE x, VALUE y);
11878VALUE rb_big_sq_fast(VALUE x);
11879VALUE rb_big_divrem_normal(VALUE x, VALUE y);
11880VALUE rb_big2str_poweroftwo(VALUE x, int base);
11881VALUE rb_big2str_generic(VALUE x, int base);
11882VALUE rb_str2big_poweroftwo(VALUE arg, int base, int badcheck);
11883VALUE rb_str2big_normal(VALUE arg, int base, int badcheck);
11884VALUE rb_str2big_karatsuba(VALUE arg, int base, int badcheck);
11885VALUE rb_big_mul_gmp(VALUE x, VALUE y);
11886VALUE rb_big_divrem_gmp(VALUE x, VALUE y);
11887VALUE rb_big2str_gmp(VALUE x, int base);
11888VALUE rb_str2big_gmp(VALUE arg, int base, int badcheck);
11889VALUE rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, int base, int flags);
11890
11891
11892
11893
11894VALUE rb_int128t2big(__int128 n);
11895
11896
11897static inline _Bool
11898BIGNUM_SIGN(VALUE b)
11899{
11900 return RB_FL_TEST_RAW(b, ((VALUE)RUBY_FL_USER1));
11901}
11902static inline _Bool
11903BIGNUM_POSITIVE_P(VALUE b)
11904{
11905 return BIGNUM_SIGN(b);
11906}
11907static inline _Bool
11908BIGNUM_NEGATIVE_P(VALUE b)
11909{
11910 return ! BIGNUM_POSITIVE_P(b);
11911}
11912static inline void
11913BIGNUM_SET_SIGN(VALUE b, _Bool sign)
11914{
11915 if (sign) {
11916 RB_FL_SET_RAW(b, ((VALUE)RUBY_FL_USER1));
11917 }
11918 else {
11919 RB_FL_UNSET_RAW(b, ((VALUE)RUBY_FL_USER1));
11920 }
11921}
11922static inline void
11923BIGNUM_NEGATE(VALUE b)
11924{
11925 RB_FL_REVERSE_RAW(b, ((VALUE)RUBY_FL_USER1));
11926}
11927static inline size_t
11928BIGNUM_LEN(VALUE b)
11929{
11930 if (! BIGNUM_EMBED_P(b)) {
11931 return ((struct RBignum *)(b))->as.heap.len;
11932 }
11933 else {
11934 size_t ret = ((struct RBasic *)(b))->flags;
11935 ret &= (~(~(VALUE)0U << 3) << (((VALUE)RUBY_FL_USHIFT)+3));
11936 ret >>= (((VALUE)RUBY_FL_USHIFT)+3);
11937 return ret;
11938 }
11939}
11940static inline int
11941BIGNUM_LENINT(VALUE b)
11942{
11943 return rb_long2int_inline(BIGNUM_LEN(b));
11944}
11945static inline unsigned int *
11946BIGNUM_DIGITS(VALUE b)
11947{
11948 if (BIGNUM_EMBED_P(b)) {
11949 return ((struct RBignum *)(b))->as.ary;
11950 }
11951 else {
11952 return ((struct RBignum *)(b))->as.heap.digits;
11953 }
11954}
11955static inline _Bool
11956BIGNUM_EMBED_P(VALUE b)
11957{
11958 return RB_FL_TEST_RAW(b, ((VALUE)((VALUE)RUBY_FL_USER2)));
11959}
11960static inline uint16_t ruby_swap16(uint16_t);
11961static inline uint32_t ruby_swap32(uint32_t);
11962static inline uint64_t ruby_swap64(uint64_t);
11963static inline unsigned nlz_int(unsigned x);
11964static inline unsigned nlz_long(unsigned long x);
11965static inline unsigned nlz_long_long(unsigned long long x);
11966static inline unsigned nlz_intptr(uintptr_t x);
11967static inline unsigned nlz_int32(uint32_t x);
11968static inline unsigned nlz_int64(uint64_t x);
11969static inline unsigned nlz_int128(unsigned __int128 x);
11970static inline unsigned rb_popcount32(uint32_t x);
11971static inline unsigned rb_popcount64(uint64_t x);
11972static inline unsigned rb_popcount_intptr(uintptr_t x);
11973static inline int ntz_int32(uint32_t x);
11974static inline int ntz_int64(uint64_t x);
11975static inline int ntz_intptr(uintptr_t x);
11976static inline VALUE RUBY_BIT_ROTL(VALUE, int);
11977static inline VALUE RUBY_BIT_ROTR(VALUE, int);
11978static inline uint16_t
11979ruby_swap16(uint16_t x)
11980{
11981 return __builtin_bswap16(x);
11982}
11983static inline uint32_t
11984ruby_swap32(uint32_t x)
11985{
11986 return __builtin_bswap32(x);
11987}
11988static inline uint64_t
11989ruby_swap64(uint64_t x)
11990{
11991 return __builtin_bswap64(x);
11992}
11993static inline unsigned int
11994nlz_int32(uint32_t x)
11995{
11996 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
11997 return x ? (unsigned int)__builtin_clz(x) : 32;
11998}
11999static inline unsigned int
12000nlz_int64(uint64_t x)
12001{
12002 if (x == 0) {
12003 return 64;
12004 }
12005 else if (sizeof(long) * 8 == 64) {
12006 return (unsigned int)__builtin_clzl((unsigned long)x);
12007 }
12008 else if (sizeof(long long) * 8 == 64) {
12009 return (unsigned int)__builtin_clzll((unsigned long long)x);
12010 }
12011 else {
12012 __builtin_unreachable();
12013 }
12014}
12015static inline unsigned int
12016nlz_int128(unsigned __int128 x)
12017{
12018 uint64_t y = (uint64_t)(x >> 64);
12019 if (x == 0) {
12020 return 128;
12021 }
12022 else if (y == 0) {
12023 return (unsigned int)nlz_int64(x) + 64;
12024 }
12025 else {
12026 return (unsigned int)nlz_int64(y);
12027 }
12028}
12029static inline unsigned int
12030nlz_int(unsigned int x)
12031{
12032 if (sizeof(unsigned int) * 8 == 32) {
12033 return nlz_int32((uint32_t)x);
12034 }
12035 else if (sizeof(unsigned int) * 8 == 64) {
12036 return nlz_int64((uint64_t)x);
12037 }
12038 else {
12039 __builtin_unreachable();
12040 }
12041}
12042static inline unsigned int
12043nlz_long(unsigned long x)
12044{
12045 if (sizeof(unsigned long) * 8 == 32) {
12046 return nlz_int32((uint32_t)x);
12047 }
12048 else if (sizeof(unsigned long) * 8 == 64) {
12049 return nlz_int64((uint64_t)x);
12050 }
12051 else {
12052 __builtin_unreachable();
12053 }
12054}
12055static inline unsigned int
12056nlz_long_long(unsigned long long x)
12057{
12058 if (sizeof(unsigned long long) * 8 == 64) {
12059 return nlz_int64((uint64_t)x);
12060 }
12061 else if (sizeof(unsigned long long) * 8 == 128) {
12062 return nlz_int128((unsigned __int128)x);
12063 }
12064 else {
12065 __builtin_unreachable();
12066 }
12067}
12068static inline unsigned int
12069nlz_intptr(uintptr_t x)
12070{
12071 if (sizeof(uintptr_t) == sizeof(unsigned int)) {
12072 return nlz_int((unsigned int)x);
12073 }
12074 if (sizeof(uintptr_t) == sizeof(unsigned long)) {
12075 return nlz_long((unsigned long)x);
12076 }
12077 if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
12078 return nlz_long_long((unsigned long long)x);
12079 }
12080 else {
12081 __builtin_unreachable();
12082 }
12083}
12084static inline unsigned int
12085rb_popcount32(uint32_t x)
12086{
12087 __extension__ _Static_assert(sizeof(int) * 8 >= 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT >= 32");
12088 return (unsigned int)__builtin_popcount(x);
12089}
12090static inline unsigned int
12091rb_popcount64(uint64_t x)
12092{
12093 if (sizeof(long) * 8 == 64) {
12094 return (unsigned int)__builtin_popcountl((unsigned long)x);
12095 }
12096 else if (sizeof(long long) * 8 == 64) {
12097 return (unsigned int)__builtin_popcountll((unsigned long long)x);
12098 }
12099 else {
12100 __builtin_unreachable();
12101 }
12102}
12103static inline unsigned int
12104rb_popcount_intptr(uintptr_t x)
12105{
12106 if (sizeof(uintptr_t) * 8 == 64) {
12107 return rb_popcount64((uint64_t)x);
12108 }
12109 else if (sizeof(uintptr_t) * 8 == 32) {
12110 return rb_popcount32((uint32_t)x);
12111 }
12112 else {
12113 __builtin_unreachable();
12114 }
12115}
12116static inline int
12117ntz_int32(uint32_t x)
12118{
12119 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
12120 return x ? (unsigned)__builtin_ctz(x) : 32;
12121}
12122static inline int
12123ntz_int64(uint64_t x)
12124{
12125 if (x == 0) {
12126 return 64;
12127 }
12128 else if (sizeof(long) * 8 == 64) {
12129 return (unsigned)__builtin_ctzl((unsigned long)x);
12130 }
12131 else if (sizeof(long long) * 8 == 64) {
12132 return (unsigned)__builtin_ctzll((unsigned long long)x);
12133 }
12134 else {
12135 __builtin_unreachable();
12136 }
12137}
12138static inline int
12139ntz_intptr(uintptr_t x)
12140{
12141 if (sizeof(uintptr_t) * 8 == 64) {
12142 return ntz_int64((uint64_t)x);
12143 }
12144 else if (sizeof(uintptr_t) * 8 == 32) {
12145 return ntz_int32((uint32_t)x);
12146 }
12147 else {
12148 __builtin_unreachable();
12149 }
12150}
12151static inline VALUE
12152RUBY_BIT_ROTL(VALUE v, int n)
12153{
12154 const int m = (sizeof(VALUE) * 8) - 1;
12155 return (v << (n & m)) | (v >> (-n & m));
12156}
12157static inline VALUE
12158RUBY_BIT_ROTR(VALUE v, int n)
12159{
12160 const int m = (sizeof(VALUE) * 8) - 1;
12161 return (v << (-n & m)) | (v >> (n & m));
12162}
12163VALUE rb_int128t2big(__int128 n);
12164static inline long rb_overflowed_fix_to_int(long x);
12165static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
12166static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
12167static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
12168static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
12169static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
12170static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
12171static inline _Bool FIXNUM_POSITIVE_P(VALUE num);
12172static inline _Bool FIXNUM_NEGATIVE_P(VALUE num);
12173static inline _Bool FIXNUM_ZERO_P(VALUE num);
12174static inline long
12175rb_overflowed_fix_to_int(long x)
12176{
12177 return (long)((unsigned long)(x >> 1) ^ (1LU << (8 * 8 - 1)));
12178}
12179static inline VALUE
12180rb_fix_plus_fix(VALUE x, VALUE y)
12181{
12182 long lz;
12183 if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
12184 return rb_int2big(rb_overflowed_fix_to_int(lz));
12185 }
12186 else {
12187 return (VALUE)lz;
12188 }
12189}
12190static inline VALUE
12191rb_fix_minus_fix(VALUE x, VALUE y)
12192{
12193 long lz;
12194 if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
12195 return rb_int2big(rb_overflowed_fix_to_int(lz));
12196 }
12197 else {
12198 return (VALUE)lz;
12199 }
12200}
12201static inline VALUE
12202rb_fix_mul_fix(VALUE x, VALUE y)
12203{
12204 long lx = rb_fix2long(x);
12205 long ly = rb_fix2long(y);
12206 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));
12207}
12208static inline void
12209rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
12210{
12211 long x = rb_fix2long(a);
12212 long y = rb_fix2long(b);
12213 long div, mod;
12214 if (x == ((-0x7fffffffffffffffL -1L) / 2) && y == -1) {
12215 if (divp) *divp = rb_long2num_inline(-((-0x7fffffffffffffffL -1L) / 2));
12216 if (modp) *modp = RB_INT2FIX(0);
12217 return;
12218 }
12219 div = x / y;
12220 mod = x % y;
12221 if (y > 0 ? mod < 0 : mod > 0) {
12222 mod += y;
12223 div -= 1;
12224 }
12225 if (divp) *divp = RB_INT2FIX(div);
12226 if (modp) *modp = RB_INT2FIX(mod);
12227}
12228static inline VALUE
12229rb_fix_div_fix(VALUE x, VALUE y)
12230{
12231 VALUE div;
12232 rb_fix_divmod_fix(x, y, &div, ((void *)0));
12233 return div;
12234}
12235static inline VALUE
12236rb_fix_mod_fix(VALUE x, VALUE y)
12237{
12238 VALUE mod;
12239 rb_fix_divmod_fix(x, y, ((void *)0), &mod);
12240 return mod;
12241}
12242static inline _Bool
12243FIXNUM_POSITIVE_P(VALUE num)
12244{
12245 return (long)num > (long)__builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12246}
12247static inline _Bool
12248FIXNUM_NEGATIVE_P(VALUE num)
12249{
12250 return (long)num < 0;
12251}
12252static inline _Bool
12253FIXNUM_ZERO_P(VALUE num)
12254{
12255 return num == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12256}
12257enum ruby_num_rounding_mode {
12258 RUBY_NUM_ROUND_HALF_UP,
12259 RUBY_NUM_ROUND_HALF_EVEN,
12260 RUBY_NUM_ROUND_HALF_DOWN,
12261 RUBY_NUM_ROUND_DEFAULT = RUBY_NUM_ROUND_HALF_UP,
12262};
12263typedef double rb_float_value_type;
12264struct RFloat {
12265 struct RBasic basic;
12266 rb_float_value_type float_value;
12267};
12268int rb_num_to_uint(VALUE val, unsigned int *ret);
12269VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl);
12270double ruby_float_step_size(double beg, double end, double unit, int excl);
12271int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl, int allow_endless);
12272int rb_num_negative_p(VALUE);
12273VALUE rb_int_succ(VALUE num);
12274VALUE rb_float_uminus(VALUE num);
12275VALUE rb_int_plus(VALUE x, VALUE y);
12276VALUE rb_float_plus(VALUE x, VALUE y);
12277VALUE rb_int_minus(VALUE x, VALUE y);
12278VALUE rb_float_minus(VALUE x, VALUE y);
12279VALUE rb_int_mul(VALUE x, VALUE y);
12280VALUE rb_float_mul(VALUE x, VALUE y);
12281VALUE rb_float_div(VALUE x, VALUE y);
12282VALUE rb_int_idiv(VALUE x, VALUE y);
12283VALUE rb_int_modulo(VALUE x, VALUE y);
12284VALUE rb_int2str(VALUE num, int base);
12285VALUE rb_fix_plus(VALUE x, VALUE y);
12286VALUE rb_int_gt(VALUE x, VALUE y);
12287VALUE rb_float_gt(VALUE x, VALUE y);
12288VALUE rb_int_ge(VALUE x, VALUE y);
12289enum ruby_num_rounding_mode rb_num_get_rounding_option(VALUE opts);
12290double rb_int_fdiv_double(VALUE x, VALUE y);
12291VALUE rb_int_pow(VALUE x, VALUE y);
12292VALUE rb_float_pow(VALUE x, VALUE y);
12293VALUE rb_int_cmp(VALUE x, VALUE y);
12294VALUE rb_int_equal(VALUE x, VALUE y);
12295VALUE rb_int_divmod(VALUE x, VALUE y);
12296VALUE rb_int_and(VALUE x, VALUE y);
12297VALUE rb_int_lshift(VALUE x, VALUE y);
12298VALUE rb_int_div(VALUE x, VALUE y);
12299int rb_int_positive_p(VALUE num);
12300int rb_int_negative_p(VALUE num);
12301VALUE rb_check_integer_type(VALUE);
12302VALUE rb_num_pow(VALUE x, VALUE y);
12303VALUE rb_float_ceil(VALUE num, int ndigits);
12304VALUE rb_float_floor(VALUE x, int ndigits);
12305VALUE rb_float_abs(VALUE flt);
12306static inline VALUE rb_num_compare_with_zero(VALUE num, ID mid);
12307static inline int rb_num_positive_int_p(VALUE num);
12308static inline int rb_num_negative_int_p(VALUE num);
12309static inline double rb_float_flonum_value(VALUE v);
12310static inline double rb_float_noflonum_value(VALUE v);
12311static inline double rb_float_value_inline(VALUE v);
12312static inline VALUE rb_float_new_inline(double d);
12313static inline _Bool INT_POSITIVE_P(VALUE num);
12314static inline _Bool INT_NEGATIVE_P(VALUE num);
12315static inline _Bool FLOAT_ZERO_P(VALUE num);
12316
12317
12318
12319
12320
12321
12322VALUE rb_flo_div_flo(VALUE x, VALUE y);
12323double ruby_float_mod(double x, double y);
12324VALUE rb_float_equal(VALUE x, VALUE y);
12325int rb_float_cmp(VALUE x, VALUE y);
12326VALUE rb_float_eql(VALUE x, VALUE y);
12327VALUE rb_fix_aref(VALUE fix, VALUE idx);
12328VALUE rb_int_zero_p(VALUE num);
12329VALUE rb_int_even_p(VALUE num);
12330VALUE rb_int_odd_p(VALUE num);
12331VALUE rb_int_abs(VALUE num);
12332VALUE rb_int_bit_length(VALUE num);
12333VALUE rb_int_uminus(VALUE num);
12334VALUE rb_int_comp(VALUE num);
12335
12336
12337static inline _Bool
12338INT_POSITIVE_P(VALUE num)
12339{
12340 if (RB_FIXNUM_P(num)) {
12341 return FIXNUM_POSITIVE_P(num);
12342 }
12343 else {
12344 return BIGNUM_POSITIVE_P(num);
12345 }
12346}
12347static inline _Bool
12348INT_NEGATIVE_P(VALUE num)
12349{
12350 if (RB_FIXNUM_P(num)) {
12351 return FIXNUM_NEGATIVE_P(num);
12352 }
12353 else {
12354 return BIGNUM_NEGATIVE_P(num);
12355 }
12356}
12357static inline _Bool
12358FLOAT_ZERO_P(VALUE num)
12359{
12360 return rb_float_value_inline(num) == 0.0;
12361}
12362static inline VALUE
12363rb_num_compare_with_zero(VALUE num, ID mid)
12364{
12365 VALUE zero = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12366 VALUE r = rb_check_funcall(num, mid, 1, &zero);
12367 if (r == ((VALUE)RUBY_Qundef)) {
12368 rb_cmperr(num, zero);
12369 }
12370 return r;
12371}
12372static inline int
12373rb_num_positive_int_p(VALUE num)
12374{
12375 const ID mid = '>';
12376 if (RB_FIXNUM_P(num)) {
12377 if (rb_method_basic_definition_p(rb_cInteger, mid))
12378 return FIXNUM_POSITIVE_P(num);
12379 }
12380 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12381 if (rb_method_basic_definition_p(rb_cInteger, mid))
12382 return BIGNUM_POSITIVE_P(num);
12383 }
12384 return RB_TEST(rb_num_compare_with_zero(num, mid));
12385}
12386static inline int
12387rb_num_negative_int_p(VALUE num)
12388{
12389 const ID mid = '<';
12390 if (RB_FIXNUM_P(num)) {
12391 if (rb_method_basic_definition_p(rb_cInteger, mid))
12392 return FIXNUM_NEGATIVE_P(num);
12393 }
12394 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12395 if (rb_method_basic_definition_p(rb_cInteger, mid))
12396 return BIGNUM_NEGATIVE_P(num);
12397 }
12398 return RB_TEST(rb_num_compare_with_zero(num, mid));
12399}
12400static inline double
12401rb_float_flonum_value(VALUE v)
12402{
12403 if (v != (VALUE)0x8000000000000002) {
12404 union {
12405 double d;
12406 VALUE v;
12407 } t;
12408 VALUE b63 = (v >> 63);
12409 t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~(VALUE)0x03), 3);
12410 return t.d;
12411 }
12412 return 0.0;
12413}
12414static inline double
12415rb_float_noflonum_value(VALUE v)
12416{
12417 return ((struct RFloat *)(v))->float_value;
12418}
12419static inline double
12420rb_float_value_inline(VALUE v)
12421{
12422 if (RB_FLONUM_P(v)) {
12423 return rb_float_flonum_value(v);
12424 }
12425 return rb_float_noflonum_value(v);
12426}
12427static inline VALUE
12428rb_float_new_inline(double d)
12429{
12430 union {
12431 double d;
12432 VALUE v;
12433 } t;
12434 int bits;
12435 t.d = d;
12436 bits = (int)((VALUE)(t.v >> 60) & 0x7);
12437 if (t.v != 0x3000000000000000 &&
12438 !((bits-3) & ~0x01)) {
12439 return (RUBY_BIT_ROTL(t.v, 3) & ~(VALUE)0x01) | 0x02;
12440 }
12441 else if (t.v == (VALUE)0) {
12442 return 0x8000000000000002;
12443 }
12444 return rb_float_new_in_heap(d);
12445}
12446int ruby_fill_random_bytes(void *, size_t, int);
12447enum {
12448 RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
12449 RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
12450 RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1),
12451 RSTRUCT_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER3),
12452};
12453struct RStruct {
12454 struct RBasic basic;
12455 union {
12456 struct {
12457 long len;
12458 const VALUE *ptr;
12459 } heap;
12460 const VALUE ary[RSTRUCT_EMBED_LEN_MAX];
12461 } as;
12462};
12463VALUE rb_struct_init_copy(VALUE copy, VALUE s);
12464VALUE rb_struct_lookup(VALUE s, VALUE idx);
12465VALUE rb_struct_s_keyword_init(VALUE klass);
12466static inline const VALUE *rb_struct_const_heap_ptr(VALUE st);
12467static inline _Bool RSTRUCT_TRANSIENT_P(VALUE st);
12468static inline void RSTRUCT_TRANSIENT_SET(VALUE st);
12469static inline void RSTRUCT_TRANSIENT_UNSET(VALUE st);
12470static inline long RSTRUCT_EMBED_LEN(VALUE st);
12471static inline long internal_RSTRUCT_LEN(VALUE st);
12472static inline int RSTRUCT_LENINT(VALUE st);
12473static inline const VALUE *RSTRUCT_CONST_PTR(VALUE st);
12474static inline void internal_RSTRUCT_SET(VALUE st, long k, VALUE v);
12475static inline VALUE internal_RSTRUCT_GET(VALUE st, long k);
12476static inline _Bool
12477RSTRUCT_TRANSIENT_P(VALUE st)
12478{
12479 return RB_FL_TEST_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12480}
12481static inline void
12482RSTRUCT_TRANSIENT_SET(VALUE st)
12483{
12484 RB_FL_SET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12485}
12486static inline void
12487RSTRUCT_TRANSIENT_UNSET(VALUE st)
12488{
12489 RB_FL_UNSET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12490}
12491static inline long
12492RSTRUCT_EMBED_LEN(VALUE st)
12493{
12494 long ret = RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK);
12495 ret >>= RSTRUCT_EMBED_LEN_SHIFT;
12496 return ret;
12497}
12498static inline long
12499internal_RSTRUCT_LEN(VALUE st)
12500{
12501 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12502 return RSTRUCT_EMBED_LEN(st);
12503 }
12504 else {
12505 return ((struct RStruct *)(st))->as.heap.len;
12506 }
12507}
12508static inline int
12509RSTRUCT_LENINT(VALUE st)
12510{
12511 return rb_long2int_inline(internal_RSTRUCT_LEN(st));
12512}
12513static inline const VALUE *
12514RSTRUCT_CONST_PTR(VALUE st)
12515{
12516 const struct RStruct *p = ((struct RStruct *)(st));
12517 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12518 return p->as.ary;
12519 }
12520 else {
12521 return p->as.heap.ptr;
12522 }
12523}
12524static inline void
12525internal_RSTRUCT_SET(VALUE st, long k, VALUE v)
12526{
12527 rb_obj_write((VALUE)(st), __extension__({
12528 ;
12529 ; __typeof__((VALUE *)(&RSTRUCT_CONST_PTR(st)[k])) unaligned_member_access_result = ((VALUE *)(&RSTRUCT_CONST_PTR(st)[k]));
12530 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.1/internal/struct.h", 137);
12531}
12532static inline VALUE
12533internal_RSTRUCT_GET(VALUE st, long k)
12534{
12535 return RSTRUCT_CONST_PTR(st)[k];
12536}
12537static inline const VALUE *
12538rb_struct_const_heap_ptr(VALUE st)
12539{
12540 return ((struct RStruct *)(st))->as.heap.ptr;
12541}
12542struct gen_ivtbl {
12543 uint32_t numiv;
12544 VALUE ivptr[];
12545};
12546int rb_ivar_generic_ivtbl_lookup(VALUE obj, struct gen_ivtbl **);
12547enum ruby_vminsn_type {
12548 YARVINSN_nop,
12549 YARVINSN_getlocal,
12550 YARVINSN_setlocal,
12551 YARVINSN_getblockparam,
12552 YARVINSN_setblockparam,
12553 YARVINSN_getblockparamproxy,
12554 YARVINSN_getspecial,
12555 YARVINSN_setspecial,
12556 YARVINSN_getinstancevariable,
12557 YARVINSN_setinstancevariable,
12558 YARVINSN_getclassvariable,
12559 YARVINSN_setclassvariable,
12560 YARVINSN_opt_getconstant_path,
12561 YARVINSN_getconstant,
12562 YARVINSN_setconstant,
12563 YARVINSN_getglobal,
12564 YARVINSN_setglobal,
12565 YARVINSN_putnil,
12566 YARVINSN_putself,
12567 YARVINSN_putobject,
12568 YARVINSN_putspecialobject,
12569 YARVINSN_putstring,
12570 YARVINSN_concatstrings,
12571 YARVINSN_anytostring,
12572 YARVINSN_toregexp,
12573 YARVINSN_intern,
12574 YARVINSN_newarray,
12575 YARVINSN_newarraykwsplat,
12576 YARVINSN_duparray,
12577 YARVINSN_duphash,
12578 YARVINSN_expandarray,
12579 YARVINSN_concatarray,
12580 YARVINSN_splatarray,
12581 YARVINSN_newhash,
12582 YARVINSN_newrange,
12583 YARVINSN_pop,
12584 YARVINSN_dup,
12585 YARVINSN_dupn,
12586 YARVINSN_swap,
12587 YARVINSN_opt_reverse,
12588 YARVINSN_topn,
12589 YARVINSN_setn,
12590 YARVINSN_adjuststack,
12591 YARVINSN_defined,
12592 YARVINSN_checkmatch,
12593 YARVINSN_checkkeyword,
12594 YARVINSN_checktype,
12595 YARVINSN_defineclass,
12596 YARVINSN_definemethod,
12597 YARVINSN_definesmethod,
12598 YARVINSN_send,
12599 YARVINSN_opt_send_without_block,
12600 YARVINSN_objtostring,
12601 YARVINSN_opt_str_freeze,
12602 YARVINSN_opt_nil_p,
12603 YARVINSN_opt_str_uminus,
12604 YARVINSN_opt_newarray_max,
12605 YARVINSN_opt_newarray_min,
12606 YARVINSN_invokesuper,
12607 YARVINSN_invokeblock,
12608 YARVINSN_leave,
12609 YARVINSN_throw,
12610 YARVINSN_jump,
12611 YARVINSN_branchif,
12612 YARVINSN_branchunless,
12613 YARVINSN_branchnil,
12614 YARVINSN_once,
12615 YARVINSN_opt_case_dispatch,
12616 YARVINSN_opt_plus,
12617 YARVINSN_opt_minus,
12618 YARVINSN_opt_mult,
12619 YARVINSN_opt_div,
12620 YARVINSN_opt_mod,
12621 YARVINSN_opt_eq,
12622 YARVINSN_opt_neq,
12623 YARVINSN_opt_lt,
12624 YARVINSN_opt_le,
12625 YARVINSN_opt_gt,
12626 YARVINSN_opt_ge,
12627 YARVINSN_opt_ltlt,
12628 YARVINSN_opt_and,
12629 YARVINSN_opt_or,
12630 YARVINSN_opt_aref,
12631 YARVINSN_opt_aset,
12632 YARVINSN_opt_aset_with,
12633 YARVINSN_opt_aref_with,
12634 YARVINSN_opt_length,
12635 YARVINSN_opt_size,
12636 YARVINSN_opt_empty_p,
12637 YARVINSN_opt_succ,
12638 YARVINSN_opt_not,
12639 YARVINSN_opt_regexpmatch2,
12640 YARVINSN_invokebuiltin,
12641 YARVINSN_opt_invokebuiltin_delegate,
12642 YARVINSN_opt_invokebuiltin_delegate_leave,
12643 YARVINSN_getlocal_WC_0,
12644 YARVINSN_getlocal_WC_1,
12645 YARVINSN_setlocal_WC_0,
12646 YARVINSN_setlocal_WC_1,
12647 YARVINSN_putobject_INT2FIX_0_,
12648 YARVINSN_putobject_INT2FIX_1_,
12649 YARVINSN_trace_nop,
12650 YARVINSN_trace_getlocal,
12651 YARVINSN_trace_setlocal,
12652 YARVINSN_trace_getblockparam,
12653 YARVINSN_trace_setblockparam,
12654 YARVINSN_trace_getblockparamproxy,
12655 YARVINSN_trace_getspecial,
12656 YARVINSN_trace_setspecial,
12657 YARVINSN_trace_getinstancevariable,
12658 YARVINSN_trace_setinstancevariable,
12659 YARVINSN_trace_getclassvariable,
12660 YARVINSN_trace_setclassvariable,
12661 YARVINSN_trace_opt_getconstant_path,
12662 YARVINSN_trace_getconstant,
12663 YARVINSN_trace_setconstant,
12664 YARVINSN_trace_getglobal,
12665 YARVINSN_trace_setglobal,
12666 YARVINSN_trace_putnil,
12667 YARVINSN_trace_putself,
12668 YARVINSN_trace_putobject,
12669 YARVINSN_trace_putspecialobject,
12670 YARVINSN_trace_putstring,
12671 YARVINSN_trace_concatstrings,
12672 YARVINSN_trace_anytostring,
12673 YARVINSN_trace_toregexp,
12674 YARVINSN_trace_intern,
12675 YARVINSN_trace_newarray,
12676 YARVINSN_trace_newarraykwsplat,
12677 YARVINSN_trace_duparray,
12678 YARVINSN_trace_duphash,
12679 YARVINSN_trace_expandarray,
12680 YARVINSN_trace_concatarray,
12681 YARVINSN_trace_splatarray,
12682 YARVINSN_trace_newhash,
12683 YARVINSN_trace_newrange,
12684 YARVINSN_trace_pop,
12685 YARVINSN_trace_dup,
12686 YARVINSN_trace_dupn,
12687 YARVINSN_trace_swap,
12688 YARVINSN_trace_opt_reverse,
12689 YARVINSN_trace_topn,
12690 YARVINSN_trace_setn,
12691 YARVINSN_trace_adjuststack,
12692 YARVINSN_trace_defined,
12693 YARVINSN_trace_checkmatch,
12694 YARVINSN_trace_checkkeyword,
12695 YARVINSN_trace_checktype,
12696 YARVINSN_trace_defineclass,
12697 YARVINSN_trace_definemethod,
12698 YARVINSN_trace_definesmethod,
12699 YARVINSN_trace_send,
12700 YARVINSN_trace_opt_send_without_block,
12701 YARVINSN_trace_objtostring,
12702 YARVINSN_trace_opt_str_freeze,
12703 YARVINSN_trace_opt_nil_p,
12704 YARVINSN_trace_opt_str_uminus,
12705 YARVINSN_trace_opt_newarray_max,
12706 YARVINSN_trace_opt_newarray_min,
12707 YARVINSN_trace_invokesuper,
12708 YARVINSN_trace_invokeblock,
12709 YARVINSN_trace_leave,
12710 YARVINSN_trace_throw,
12711 YARVINSN_trace_jump,
12712 YARVINSN_trace_branchif,
12713 YARVINSN_trace_branchunless,
12714 YARVINSN_trace_branchnil,
12715 YARVINSN_trace_once,
12716 YARVINSN_trace_opt_case_dispatch,
12717 YARVINSN_trace_opt_plus,
12718 YARVINSN_trace_opt_minus,
12719 YARVINSN_trace_opt_mult,
12720 YARVINSN_trace_opt_div,
12721 YARVINSN_trace_opt_mod,
12722 YARVINSN_trace_opt_eq,
12723 YARVINSN_trace_opt_neq,
12724 YARVINSN_trace_opt_lt,
12725 YARVINSN_trace_opt_le,
12726 YARVINSN_trace_opt_gt,
12727 YARVINSN_trace_opt_ge,
12728 YARVINSN_trace_opt_ltlt,
12729 YARVINSN_trace_opt_and,
12730 YARVINSN_trace_opt_or,
12731 YARVINSN_trace_opt_aref,
12732 YARVINSN_trace_opt_aset,
12733 YARVINSN_trace_opt_aset_with,
12734 YARVINSN_trace_opt_aref_with,
12735 YARVINSN_trace_opt_length,
12736 YARVINSN_trace_opt_size,
12737 YARVINSN_trace_opt_empty_p,
12738 YARVINSN_trace_opt_succ,
12739 YARVINSN_trace_opt_not,
12740 YARVINSN_trace_opt_regexpmatch2,
12741 YARVINSN_trace_invokebuiltin,
12742 YARVINSN_trace_opt_invokebuiltin_delegate,
12743 YARVINSN_trace_opt_invokebuiltin_delegate_leave,
12744 YARVINSN_trace_getlocal_WC_0,
12745 YARVINSN_trace_getlocal_WC_1,
12746 YARVINSN_trace_setlocal_WC_0,
12747 YARVINSN_trace_setlocal_WC_1,
12748 YARVINSN_trace_putobject_INT2FIX_0_,
12749 YARVINSN_trace_putobject_INT2FIX_1_,
12750 VM_INSTRUCTION_SIZE
12751};
12752extern rb_method_definition_t *rb_method_definition_create(rb_method_type_t type, ID mid);
12753extern void rb_method_definition_set(const rb_method_entry_t *me, rb_method_definition_t *def, void *opts);
12754extern int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2);
12755extern VALUE rb_make_no_method_exception(VALUE exc, VALUE format, VALUE obj,
12756 int argc, const VALUE *argv, int priv);
12757static rb_control_frame_t *vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
12758static VALUE
12759ruby_vm_special_exception_copy(VALUE exc)
12760{
12761 VALUE e = rb_obj_alloc(rb_class_real(RBASIC_CLASS(exc)));
12762 rb_obj_copy_ivar(e, exc);
12763 return e;
12764}
12765__attribute__((__noreturn__)) static void ec_stack_overflow(rb_execution_context_t *ec, int);
12766static void
12767ec_stack_overflow(rb_execution_context_t *ec, int setup)
12768{
12769 VALUE mesg = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_sysstack];
12770 ec->raised_flag = RAISED_STACKOVERFLOW;
12771 if (setup) {
12772 VALUE at = rb_ec_backtrace_object(ec);
12773 mesg = ruby_vm_special_exception_copy(mesg);
12774 rb_ivar_set(mesg, idBt, at);
12775 rb_ivar_set(mesg, idBt_locations, at);
12776 }
12777 ec->errinfo = mesg;
12778 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12779}
12780__attribute__((__noreturn__)) static void vm_stackoverflow(void);
12781__attribute__((__noinline__)) static __attribute__((__cold__)) void vm_stackoverflow(void);
12782static void
12783vm_stackoverflow(void)
12784{
12785 ec_stack_overflow(rb_current_execution_context(1), 1);
12786}
12787__attribute__((__noreturn__)) static void rb_ec_stack_overflow(rb_execution_context_t *ec, int crit);
12788static void
12789rb_ec_stack_overflow(rb_execution_context_t *ec, int crit)
12790{
12791 if (rb_during_gc()) {
12792 rb_bug("system stack overflow during GC. Faulty native extension?");
12793 }
12794 if (crit) {
12795 ec->raised_flag = RAISED_STACKOVERFLOW;
12796 ec->errinfo = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_stackfatal];
12797 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12798 }
12799 ec_stack_overflow(ec, 1);
12800}
12801__extension__ _Static_assert((-2) == -2, "VM_ENV_DATA_INDEX_ME_CREF" ": " "VM_ENV_DATA_INDEX_ME_CREF == -2");
12802__extension__ _Static_assert((-1) == -1, "VM_ENV_DATA_INDEX_SPECVAL" ": " "VM_ENV_DATA_INDEX_SPECVAL == -1");
12803__extension__ _Static_assert(( 0) == -0, "VM_ENV_DATA_INDEX_FLAGS" ": " "VM_ENV_DATA_INDEX_FLAGS == -0");
12804static void
12805vm_push_frame(rb_execution_context_t *ec,
12806 const rb_iseq_t *iseq,
12807 VALUE type,
12808 VALUE self,
12809 VALUE specval,
12810 VALUE cref_or_me,
12811 const VALUE *pc,
12812 VALUE *sp,
12813 int local_size,
12814 int stack_max)
12815{
12816 rb_control_frame_t *const cfp = ((ec->cfp)-1);
12817 ;
12818 ((void)0);
12819 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);
12820 ;
12821 for (int i=0; i < local_size; i++) {
12822 *sp++ = ((VALUE)RUBY_Qnil);
12823 }
12824 *sp++ = cref_or_me;
12825 *sp++ = specval ;
12826 *sp++ = type;
12827 *cfp = (const struct rb_control_frame_struct) {
12828 .pc = pc,
12829 .sp = sp,
12830 .iseq = iseq,
12831 .self = self,
12832 .ep = sp - 1,
12833 .block_code = ((void *)0),
12834 .__bp__ = sp,
12835 .jit_return = ((void *)0)
12836 };
12837 ec->cfp = cfp;
12838 if (0 == 2) {
12839 rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12840 }
12841 ;
12842}static inline
12843void
12844rb_vm_pop_frame_no_int(rb_execution_context_t *ec)
12845{
12846 rb_control_frame_t *cfp = ec->cfp;
12847 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12848 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12849 ec->cfp = ((cfp)+1);
12850}
12851static inline int
12852vm_pop_frame(rb_execution_context_t *ec, rb_control_frame_t *cfp, const VALUE *ep)
12853{
12854 VALUE flags = ep[( 0)];
12855 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12856 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12857 rb_vm_check_ints(ec);
12858 ec->cfp = ((cfp)+1);
12859 return flags & VM_FRAME_FLAG_FINISH;
12860}
12861static void
12862rb_vm_pop_frame(rb_execution_context_t *ec)
12863{
12864 vm_pop_frame(ec, ec->cfp, ec->cfp->ep);
12865}static inline
12866VALUE
12867rb_vm_push_frame_fname(rb_execution_context_t *ec, VALUE fname)
12868{
12869 VALUE tmpbuf = rb_imemo_tmpbuf_auto_free_pointer();
12870 void *ptr = ruby_xcalloc(sizeof(struct rb_iseq_constant_body) + sizeof(struct rb_iseq_struct), 1);
12871 rb_imemo_tmpbuf_set_ptr(tmpbuf, ptr);
12872 struct rb_iseq_struct *dmy_iseq = (struct rb_iseq_struct *)ptr;
12873 struct rb_iseq_constant_body *dmy_body = (struct rb_iseq_constant_body *)&dmy_iseq[1];
12874 dmy_iseq->body = dmy_body;
12875 dmy_body->type = ISEQ_TYPE_TOP;
12876 dmy_body->location.pathobj = fname;
12877 vm_push_frame(ec,
12878 dmy_iseq,
12879 VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH,
12880 ec->cfp->self,
12881 0,
12882 ((VALUE)RUBY_Qfalse),
12883 ((void *)0),
12884 ec->cfp->sp,
12885 0,
12886 0);
12887 return tmpbuf;
12888}
12889static inline VALUE
12890rb_arity_error_new(int argc, int min, int max)
12891{
12892 VALUE err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d", argc, min);
12893 if (min == max) {
12894 }
12895 else if (max == (-1)) {
12896 ((__builtin_constant_p("+") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((err_mess), ("+")));
12897 }
12898 else {
12899 rb_str_catf(err_mess, "..%d", max);
12900 }
12901 ((__builtin_constant_p(")") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((err_mess), (")")));
12902 return rb_exc_new_str(rb_eArgError, err_mess);
12903}
12904static void
12905rb_error_arity(int argc, int min, int max)
12906{
12907 rb_exc_raise(rb_arity_error_new(argc, min, max));
12908}
12909__attribute__((__noinline__)) static void vm_env_write_slowpath(const VALUE *ep, int index, VALUE v);
12910static void
12911vm_env_write_slowpath(const VALUE *ep, int index, VALUE v)
12912{
12913 rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep));
12914 VM_FORCE_WRITE(&ep[index], v);
12915 VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED);
12916 ((void)0);
12917}
12918static inline void
12919vm_env_write(const VALUE *ep, int index, VALUE v)
12920{
12921 VALUE flags = ep[( 0)];
12922 if ((__builtin_expect(!!((flags & VM_ENV_FLAG_WB_REQUIRED) == 0), 1))) {
12923 VM_STACK_ENV_WRITE(ep, index, v);
12924 }
12925 else {
12926 vm_env_write_slowpath(ep, index, v);
12927 }
12928}
12929static VALUE
12930rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler)
12931{
12932 if (block_handler == 0) {
12933 return ((VALUE)RUBY_Qnil);
12934 }
12935 else {
12936 switch (vm_block_handler_type(block_handler)) {
12937 case block_handler_type_iseq:
12938 case block_handler_type_ifunc:
12939 return rb_vm_make_proc(ec, VM_BH_TO_CAPT_BLOCK(block_handler), rb_cProc);
12940 case block_handler_type_symbol:
12941 return rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
12942 case block_handler_type_proc:
12943 return VM_BH_TO_PROC(block_handler);
12944 default:
12945 __builtin_unreachable();
12946 }
12947 }
12948}
12949static inline struct vm_svar *
12950lep_svar(const rb_execution_context_t *ec, const VALUE *lep)
12951{
12952 VALUE svar;
12953 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
12954 svar = lep[(-2)];
12955 }
12956 else {
12957 svar = ec->root_svar;
12958 }
12959 ((void)0);
12960 return (struct vm_svar *)svar;
12961}
12962static inline void
12963lep_svar_write(const rb_execution_context_t *ec, const VALUE *lep, const struct vm_svar *svar)
12964{
12965 ((void)0);
12966 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
12967 vm_env_write(lep, (-2), (VALUE)svar);
12968 }
12969 else {
12970 rb_obj_write((VALUE)(rb_ec_thread_ptr(ec)->self), __extension__({
12971 ;
12972 ; __typeof__((VALUE *)(&ec->root_svar)) unaligned_member_access_result = ((VALUE *)(&ec->root_svar));
12973 ; unaligned_member_access_result; }), (VALUE)(svar), "../ruby-3.2.1/vm_insnhelper.c", 586);
12974 }
12975}
12976static VALUE
12977lep_svar_get(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key)
12978{
12979 const struct vm_svar *svar = lep_svar(ec, lep);
12980 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) return ((VALUE)RUBY_Qnil);
12981 switch (key) {
12982 case VM_SVAR_LASTLINE:
12983 return svar->lastline;
12984 case VM_SVAR_BACKREF:
12985 return svar->backref;
12986 default: {
12987 const VALUE ary = svar->others;
12988 if (RB_NIL_P(ary)) {
12989 return ((VALUE)RUBY_Qnil);
12990 }
12991 else {
12992 return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START);
12993 }
12994 }
12995 }
12996}
12997static struct vm_svar *
12998svar_new(VALUE obj)
12999{
13000 return (struct vm_svar *)rb_imemo_new(imemo_svar, ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), obj);
13001}
13002static void
13003lep_svar_set(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, VALUE val)
13004{
13005 struct vm_svar *svar = lep_svar(ec, lep);
13006 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) {
13007 lep_svar_write(ec, lep, svar = svar_new((VALUE)svar));
13008 }
13009 switch (key) {
13010 case VM_SVAR_LASTLINE:
13011 rb_obj_write((VALUE)(svar), __extension__({
13012 ;
13013 ; __typeof__((VALUE *)(&svar->lastline)) unaligned_member_access_result = ((VALUE *)(&svar->lastline));
13014 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 632);
13015 return;
13016 case VM_SVAR_BACKREF:
13017 rb_obj_write((VALUE)(svar), __extension__({
13018 ;
13019 ; __typeof__((VALUE *)(&svar->backref)) unaligned_member_access_result = ((VALUE *)(&svar->backref));
13020 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 635);
13021 return;
13022 default: {
13023 VALUE ary = svar->others;
13024 if (RB_NIL_P(ary)) {
13025 rb_obj_write((VALUE)(svar), __extension__({
13026 ;
13027 ; __typeof__((VALUE *)(&svar->others)) unaligned_member_access_result = ((VALUE *)(&svar->others));
13028 ; unaligned_member_access_result; }), (VALUE)(ary = rb_ary_new()), "../ruby-3.2.1/vm_insnhelper.c", 641);
13029 }
13030 rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val);
13031 }
13032 }
13033}
13034static inline VALUE
13035vm_getspecial(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, rb_num_t type)
13036{
13037 VALUE val;
13038 if (type == 0) {
13039 val = lep_svar_get(ec, lep, key);
13040 }
13041 else {
13042 VALUE backref = lep_svar_get(ec, lep, VM_SVAR_BACKREF);
13043 if (type & 0x01) {
13044 switch (type >> 1) {
13045 case '&':
13046 val = rb_reg_last_match(backref);
13047 break;
13048 case '`':
13049 val = rb_reg_match_pre(backref);
13050 break;
13051 case '\'':
13052 val = rb_reg_match_post(backref);
13053 break;
13054 case '+':
13055 val = rb_reg_match_last(backref);
13056 break;
13057 default:
13058 rb_bug("unexpected back-ref");
13059 }
13060 }
13061 else {
13062 val = rb_reg_nth_match((int)(type >> 1), backref);
13063 }
13064 }
13065 return val;
13066}
13067__attribute__((__pure__)) static rb_callable_method_entry_t *check_method_entry(VALUE obj, int can_be_svar);
13068static rb_callable_method_entry_t *
13069check_method_entry(VALUE obj, int can_be_svar)
13070{
13071 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
13072 switch (imemo_type(obj)) {
13073 case imemo_ment:
13074 return (rb_callable_method_entry_t *)obj;
13075 case imemo_cref:
13076 return ((void *)0);
13077 case imemo_svar:
13078 if (can_be_svar) {
13079 return check_method_entry(((struct vm_svar *)obj)->cref_or_me, 0);
13080 }
13081 default:
13082 return ((void *)0);
13083 }
13084}
13085static const rb_callable_method_entry_t *
13086rb_vm_frame_method_entry(const rb_control_frame_t *cfp)
13087{
13088 const VALUE *ep = cfp->ep;
13089 rb_callable_method_entry_t *me;
13090 while (!VM_ENV_LOCAL_P(ep)) {
13091 if ((me = check_method_entry(ep[(-2)], 0)) != ((void *)0)) return me;
13092 ep = VM_ENV_PREV_EP(ep);
13093 }
13094 return check_method_entry(ep[(-2)], 1);
13095}
13096static const rb_iseq_t *
13097method_entry_iseqptr(const rb_callable_method_entry_t *me)
13098{
13099 switch (me->def->type) {
13100 case VM_METHOD_TYPE_ISEQ:
13101 return me->def->body.iseq.iseqptr;
13102 default:
13103 return ((void *)0);
13104 }
13105}
13106static rb_cref_t *
13107method_entry_cref(const rb_callable_method_entry_t *me)
13108{
13109 switch (me->def->type) {
13110 case VM_METHOD_TYPE_ISEQ:
13111 return me->def->body.iseq.cref;
13112 default:
13113 return ((void *)0);
13114 }
13115}
13116__attribute__((__pure__)) static rb_cref_t *check_cref(VALUE, int);
13117static rb_cref_t *
13118check_cref(VALUE obj, int can_be_svar)
13119{
13120 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
13121 switch (imemo_type(obj)) {
13122 case imemo_ment:
13123 return method_entry_cref((rb_callable_method_entry_t *)obj);
13124 case imemo_cref:
13125 return (rb_cref_t *)obj;
13126 case imemo_svar:
13127 if (can_be_svar) {
13128 return check_cref(((struct vm_svar *)obj)->cref_or_me, 0);
13129 }
13130 default:
13131 return ((void *)0);
13132 }
13133}
13134static inline rb_cref_t *
13135vm_env_cref(const VALUE *ep)
13136{
13137 rb_cref_t *cref;
13138 while (!VM_ENV_LOCAL_P(ep)) {
13139 if ((cref = check_cref(ep[(-2)], 0)) != ((void *)0)) return cref;
13140 ep = VM_ENV_PREV_EP(ep);
13141 }
13142 return check_cref(ep[(-2)], 1);
13143}
13144static int
13145is_cref(const VALUE v, int can_be_svar)
13146{
13147 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
13148 switch (imemo_type(v)) {
13149 case imemo_cref:
13150 return 1;
13151 case imemo_svar:
13152 if (can_be_svar) return is_cref(((struct vm_svar *)v)->cref_or_me, 0);
13153 default:
13154 break;
13155 }
13156 }
13157 return 0;
13158}
13159static int
13160vm_env_cref_by_cref(const VALUE *ep)
13161{
13162 while (!VM_ENV_LOCAL_P(ep)) {
13163 if (is_cref(ep[(-2)], 0)) return 1;
13164 ep = VM_ENV_PREV_EP(ep);
13165 }
13166 return is_cref(ep[(-2)], 1);
13167}
13168static rb_cref_t *
13169cref_replace_with_duplicated_cref_each_frame(const VALUE *vptr, int can_be_svar, VALUE parent)
13170{
13171 const VALUE v = *vptr;
13172 rb_cref_t *cref, *new_cref;
13173 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
13174 switch (imemo_type(v)) {
13175 case imemo_cref:
13176 cref = (rb_cref_t *)v;
13177 new_cref = vm_cref_dup(cref);
13178 if (parent) {
13179 rb_obj_write((VALUE)(parent), __extension__({
13180 ;
13181 ; __typeof__((VALUE *)(vptr)) unaligned_member_access_result = ((VALUE *)(vptr));
13182 ; unaligned_member_access_result; }), (VALUE)(new_cref), "../ruby-3.2.1/vm_insnhelper.c", 827);
13183 }
13184 else {
13185 VM_FORCE_WRITE(vptr, (VALUE)new_cref);
13186 }
13187 return (rb_cref_t *)new_cref;
13188 case imemo_svar:
13189 if (can_be_svar) {
13190 return cref_replace_with_duplicated_cref_each_frame(&((struct vm_svar *)v)->cref_or_me, 0, v);
13191 }
13192 case imemo_ment:
13193 rb_bug("cref_replace_with_duplicated_cref_each_frame: unreachable");
13194 default:
13195 break;
13196 }
13197 }
13198 return ((void *)0);
13199}
13200static rb_cref_t *
13201vm_cref_replace_with_duplicated_cref(const VALUE *ep)
13202{
13203 if (vm_env_cref_by_cref(ep)) {
13204 rb_cref_t *cref;
13205 VALUE envval;
13206 while (!VM_ENV_LOCAL_P(ep)) {
13207 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13208 if ((cref = cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 0, envval)) != ((void *)0)) {
13209 return cref;
13210 }
13211 ep = VM_ENV_PREV_EP(ep);
13212 }
13213 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13214 return cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 1, envval);
13215 }
13216 else {
13217 rb_bug("vm_cref_dup: unreachable");
13218 }
13219}
13220static rb_cref_t *
13221vm_get_cref(const VALUE *ep)
13222{
13223 rb_cref_t *cref = vm_env_cref(ep);
13224 if (cref != ((void *)0)) {
13225 return cref;
13226 }
13227 else {
13228 rb_bug("vm_get_cref: unreachable");
13229 }
13230}static inline
13231rb_cref_t *
13232rb_vm_get_cref(const VALUE *ep)
13233{
13234 return vm_get_cref(ep);
13235}
13236static rb_cref_t *
13237vm_ec_cref(const rb_execution_context_t *ec)
13238{
13239 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
13240 if (cfp == ((void *)0)) {
13241 return ((void *)0);
13242 }
13243 return vm_get_cref(cfp->ep);
13244}
13245static const rb_cref_t *
13246vm_get_const_key_cref(const VALUE *ep)
13247{
13248 const rb_cref_t *cref = vm_get_cref(ep);
13249 const rb_cref_t *key_cref = cref;
13250 while (cref) {
13251 if (RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13252 RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_USER1))) {
13253 return key_cref;
13254 }
13255 cref = CREF_NEXT(cref);
13256 }
13257 return ((void *)0);
13258}static inline
13259void
13260rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr)
13261{
13262 rb_cref_t *new_cref;
13263 while (cref) {
13264 if (CREF_CLASS(cref) == old_klass) {
13265 new_cref = vm_cref_new_use_prev(new_klass, METHOD_VISI_UNDEF, 0, cref, 0);
13266 *new_cref_ptr = new_cref;
13267 return;
13268 }
13269 new_cref = vm_cref_new_use_prev(CREF_CLASS(cref), METHOD_VISI_UNDEF, 0, cref, 0);
13270 cref = CREF_NEXT(cref);
13271 *new_cref_ptr = new_cref;
13272 new_cref_ptr = &new_cref->next;
13273 }
13274 *new_cref_ptr = ((void *)0);
13275}
13276static rb_cref_t *
13277vm_cref_push(const rb_execution_context_t *ec, VALUE klass, const VALUE *ep, int pushed_by_eval, int singleton)
13278{
13279 rb_cref_t *prev_cref = ((void *)0);
13280 if (ep) {
13281 prev_cref = vm_env_cref(ep);
13282 }
13283 else {
13284 rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(ec, ec->cfp);
13285 if (cfp) {
13286 prev_cref = vm_env_cref(cfp->ep);
13287 }
13288 }
13289 return vm_cref_new(klass, METHOD_VISI_PUBLIC, 0, prev_cref, pushed_by_eval, singleton);
13290}
13291static inline VALUE
13292vm_get_cbase(const VALUE *ep)
13293{
13294 const rb_cref_t *cref = vm_get_cref(ep);
13295 return CREF_CLASS_FOR_DEFINITION(cref);
13296}
13297static inline VALUE
13298vm_get_const_base(const VALUE *ep)
13299{
13300 const rb_cref_t *cref = vm_get_cref(ep);
13301 while (cref) {
13302 if (!CREF_PUSHED_BY_EVAL(cref)) {
13303 return CREF_CLASS_FOR_DEFINITION(cref);
13304 }
13305 cref = CREF_NEXT(cref);
13306 }
13307 return ((VALUE)RUBY_Qundef);
13308}
13309static inline void
13310vm_check_if_namespace(VALUE klass)
13311{
13312 if (!RB_TYPE_P(klass, RUBY_T_CLASS) && !RB_TYPE_P(klass, RUBY_T_MODULE)) {
13313 rb_raise(rb_eTypeError, "%+""l""i" "\v"" is not a class/module", klass);
13314 }
13315}
13316static inline void
13317vm_ensure_not_refinement_module(VALUE self)
13318{
13319 if (RB_TYPE_P(self, RUBY_T_MODULE) && RB_FL_TEST(self, RMODULE_IS_REFINEMENT)) {
13320 rb_warn("not defined at the refinement, but at the outer class/module");
13321 }
13322}
13323static inline VALUE
13324vm_get_iclass(const rb_control_frame_t *cfp, VALUE klass)
13325{
13326 return klass;
13327}
13328static inline VALUE
13329vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, _Bool allow_nil, int is_defined)
13330{
13331 void rb_const_warn_if_deprecated(const rb_const_entry_t *ce, VALUE klass, ID id);
13332 VALUE val;
13333 if (RB_NIL_P(orig_klass) && allow_nil) {
13334 const rb_cref_t *root_cref = vm_get_cref(ec->cfp->ep);
13335 const rb_cref_t *cref;
13336 VALUE klass = ((VALUE)RUBY_Qnil);
13337 while (root_cref && CREF_PUSHED_BY_EVAL(root_cref)) {
13338 root_cref = CREF_NEXT(root_cref);
13339 }
13340 cref = root_cref;
13341 while (cref && CREF_NEXT(cref)) {
13342 if (CREF_PUSHED_BY_EVAL(cref)) {
13343 klass = ((VALUE)RUBY_Qnil);
13344 }
13345 else {
13346 klass = CREF_CLASS(cref);
13347 }
13348 cref = CREF_NEXT(cref);
13349 if (!RB_NIL_P(klass)) {
13350 VALUE av, am = 0;
13351 rb_const_entry_t *ce;
13352 search_continue:
13353 if ((ce = rb_const_lookup(klass, id))) {
13354 rb_const_warn_if_deprecated(ce, klass, id);
13355 val = ce->value;
13356 if (RB_UNDEF_P(val)) {
13357 if (am == klass) break;
13358 am = klass;
13359 if (is_defined) return 1;
13360 if (rb_autoloading_value(klass, id, &av, ((void *)0))) return av;
13361 rb_autoload_load(klass, id);
13362 goto search_continue;
13363 }
13364 else {
13365 if (is_defined) {
13366 return 1;
13367 }
13368 else {
13369 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13370 if (!rb_ractor_shareable_p(val)) {
13371 rb_raise(rb_eRactorIsolationError,
13372 "can not access non-shareable objects in constant %""l""i" "\v""::%s by non-main ractor.", rb_class_path(klass), rb_id2name(id));
13373 }
13374 }
13375 return val;
13376 }
13377 }
13378 }
13379 }
13380 }
13381 if (root_cref && !RB_NIL_P(CREF_CLASS(root_cref))) {
13382 klass = vm_get_iclass(ec->cfp, CREF_CLASS(root_cref));
13383 }
13384 else {
13385 klass = rb_class_of(ec->cfp->self);
13386 }
13387 if (is_defined) {
13388 return rb_const_defined(klass, id);
13389 }
13390 else {
13391 return rb_const_get(klass, id);
13392 }
13393 }
13394 else {
13395 vm_check_if_namespace(orig_klass);
13396 if (is_defined) {
13397 return rb_public_const_defined_from(orig_klass, id);
13398 }
13399 else {
13400 return rb_public_const_get_from(orig_klass, id);
13401 }
13402 }
13403}static inline
13404VALUE
13405rb_vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, VALUE allow_nil)
13406{
13407 return vm_get_ev_const(ec, orig_klass, id, allow_nil == ((VALUE)RUBY_Qtrue), 0);
13408}
13409static inline VALUE
13410vm_get_ev_const_chain(rb_execution_context_t *ec, const ID *segments)
13411{
13412 VALUE val = ((VALUE)RUBY_Qnil);
13413 int idx = 0;
13414 int allow_nil = 1;
13415 if (segments[0] == idNULL) {
13416 val = rb_cObject;
13417 idx++;
13418 allow_nil = 0;
13419 }
13420 while (segments[idx]) {
13421 ID id = segments[idx++];
13422 val = vm_get_ev_const(ec, val, id, allow_nil, 0);
13423 allow_nil = 0;
13424 }
13425 return val;
13426}
13427static inline VALUE
13428vm_get_cvar_base(const rb_cref_t *cref, const rb_control_frame_t *cfp, int top_level_raise)
13429{
13430 VALUE klass;
13431 if (!cref) {
13432 rb_bug("vm_get_cvar_base: no cref");
13433 }
13434 while (CREF_NEXT(cref) &&
13435 (RB_NIL_P(CREF_CLASS(cref)) || RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13436 CREF_PUSHED_BY_EVAL(cref) || CREF_SINGLETON(cref))) {
13437 cref = CREF_NEXT(cref);
13438 }
13439 if (top_level_raise && !CREF_NEXT(cref)) {
13440 rb_raise(rb_eRuntimeError, "class variable access from toplevel");
13441 }
13442 klass = vm_get_iclass(cfp, CREF_CLASS(cref));
13443 if (RB_NIL_P(klass)) {
13444 rb_raise(rb_eTypeError, "no class variables available");
13445 }
13446 return klass;
13447}
13448__attribute__ ((__always_inline__)) static void fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, attr_index_t index, shape_id_t shape_id);
13449static inline void
13450fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, attr_index_t index, shape_id_t shape_id)
13451{
13452 if (is_attr) {
13453 vm_cc_attr_index_set(cc, index, shape_id);
13454 }
13455 else {
13456 vm_ic_attr_index_set(iseq, ic, index, shape_id);
13457 }
13458}
13459__attribute__ ((__always_inline__)) static VALUE vm_getivar(VALUE, ID, const rb_iseq_t *, IVC, const struct rb_callcache *, int);
13460static inline VALUE
13461vm_getivar(VALUE obj, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13462{
13463 VALUE val = ((VALUE)RUBY_Qundef);
13464 shape_id_t shape_id;
13465 VALUE * ivar_list;
13466 if (RB_SPECIAL_CONST_P(obj)) {
13467 return ((VALUE)RUBY_Qnil);
13468 }
13469 shape_id = RBASIC_SHAPE_ID(obj);
13470 switch (RB_BUILTIN_TYPE(obj)) {
13471 case RUBY_T_OBJECT:
13472 ivar_list = ROBJECT_IVPTR(obj);
13473 ((void)0);
13474 break;
13475 case RUBY_T_CLASS:
13476 case RUBY_T_MODULE:
13477 {
13478 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13479 goto general_path;
13480 }
13481 ivar_list = (((rb_classext_t *)((char *)(obj) + sizeof(struct RClass)))->iv_ptr);
13482 break;
13483 }
13484 default:
13485 if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
13486 struct gen_ivtbl *ivtbl;
13487 rb_gen_ivtbl_get(obj, id, &ivtbl);
13488 ivar_list = ivtbl->ivptr;
13489 }
13490 else {
13491 return ((VALUE)RUBY_Qnil);
13492 }
13493 }
13494 shape_id_t cached_id;
13495 attr_index_t index;
13496 if (is_attr) {
13497 vm_cc_atomic_shape_and_index(cc, &cached_id, &index);
13498 }
13499 else {
13500 vm_ic_atomic_shape_and_index(ic, &cached_id, &index);
13501 }
13502 if ((__builtin_expect(!!(cached_id == shape_id), 1))) {
13503 ((void)0);
13504 if (index == (attr_index_t)-1) {
13505 return ((VALUE)RUBY_Qnil);
13506 }
13507 val = ivar_list[index];
13508 ((void)0);
13509 }
13510 else {
13511 rb_shape_t *shape = rb_shape_get_shape_by_id(shape_id);
13512 if (shape_id == ((5 * 2) + 1)) {
13513 if (!rb_id_table_lookup(ROBJECT_IV_HASH(obj), id, &val)) {
13514 val = ((VALUE)RUBY_Qnil);
13515 }
13516 }
13517 else {
13518 if (rb_shape_get_iv_index(shape, id, &index)) {
13519 fill_ivar_cache(iseq, ic, cc, is_attr, index, shape_id);
13520 val = ivar_list[index];
13521 ((void)0);
13522 }
13523 else {
13524 if (is_attr) {
13525 vm_cc_attr_index_initialize(cc, shape_id);
13526 }
13527 else {
13528 vm_ic_attr_index_initialize(ic, shape_id);
13529 }
13530 val = ((VALUE)RUBY_Qnil);
13531 }
13532 }
13533 }
13534 ((void)0);
13535 return val;
13536general_path:
13537 ((void)0);
13538 if (is_attr) {
13539 return rb_attr_get(obj, id);
13540 }
13541 else {
13542 return rb_ivar_get(obj, id);
13543 }
13544}
13545static void
13546populate_cache(attr_index_t index, shape_id_t next_shape_id, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, _Bool is_attr)
13547{
13548 ((void)0);
13549 if (is_attr) {
13550 vm_cc_attr_index_set(cc, index, next_shape_id);
13551 }
13552 else {
13553 vm_ic_attr_index_set(iseq, ic, index, next_shape_id);
13554 }
13555}
13556__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);
13557__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic);
13558__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc);
13559static VALUE
13560vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13561{
13562 switch (RB_BUILTIN_TYPE(obj)) {
13563 case RUBY_T_OBJECT:
13564 {
13565 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
13566 attr_index_t index = rb_obj_ivar_set(obj, id, val);
13567 shape_id_t next_shape_id = ROBJECT_SHAPE_ID(obj);
13568 if (next_shape_id != ((5 * 2) + 1)) {
13569 populate_cache(index, next_shape_id, id, iseq, ic, cc, is_attr);
13570 }
13571 ((void)0);
13572 return val;
13573 }
13574 case RUBY_T_CLASS:
13575 case RUBY_T_MODULE:
13576 break;
13577 default:
13578 {
13579 rb_ivar_set(obj, id, val);
13580 shape_id_t next_shape_id = rb_shape_get_shape_id(obj);
13581 rb_shape_t *next_shape = rb_shape_get_shape_by_id(next_shape_id);
13582 attr_index_t index;
13583 if (rb_shape_get_iv_index(next_shape, id, &index)) {
13584 if (index >= (attr_index_t)(-1)) {
13585 rb_raise(rb_eArgError, "too many instance variables");
13586 }
13587 populate_cache(index, next_shape_id, id, iseq, ic, cc, is_attr);
13588 }
13589 else {
13590 rb_bug("didn't find the id\n");
13591 }
13592 return val;
13593 }
13594 }
13595 ((void)0);
13596 return rb_ivar_set(obj, id, val);
13597}
13598static VALUE
13599vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic)
13600{
13601 return vm_setivar_slowpath(obj, id, val, iseq, ic, ((void *)0), 0);
13602}
13603static VALUE
13604vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc)
13605{
13606 return vm_setivar_slowpath(obj, id, val, ((void *)0), ((void *)0), cc, 1);
13607}
13608__attribute__((__noinline__)) static VALUE vm_setivar_default(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index);
13609static VALUE
13610vm_setivar_default(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index)
13611{
13612 shape_id_t shape_id = RBASIC_SHAPE_ID(obj);
13613 struct gen_ivtbl *ivtbl = 0;
13614 if (shape_id == dest_shape_id) {
13615 ((void)0);
13616 rb_gen_ivtbl_get(obj, 0, &ivtbl);
13617 }
13618 else if (dest_shape_id != (((uintptr_t)1 << 32) - 1)) {
13619 rb_shape_t * dest_shape = rb_shape_get_shape_by_id(dest_shape_id);
13620 shape_id_t source_shape_id = dest_shape->parent_id;
13621 if (shape_id == source_shape_id && dest_shape->edge_name == id && dest_shape->type == SHAPE_IVAR) {
13622 ivtbl = rb_ensure_generic_iv_list_size(obj, index + 1);
13623 RBASIC_SET_SHAPE_ID(obj, dest_shape_id);
13624 }
13625 else {
13626 return ((VALUE)RUBY_Qundef);
13627 }
13628 }
13629 else {
13630 return ((VALUE)RUBY_Qundef);
13631 }
13632 VALUE *ptr = ivtbl->ivptr;
13633 rb_obj_write((VALUE)(obj), __extension__({
13634 ;
13635 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13636 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 1423);
13637 ((void)0);
13638 return val;
13639}
13640static inline VALUE
13641vm_setivar(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index)
13642{
13643 switch (RB_BUILTIN_TYPE(obj)) {
13644 case RUBY_T_OBJECT:
13645 {
13646 ((void)0);
13647 shape_id_t shape_id = ROBJECT_SHAPE_ID(obj);
13648 ((void)0);
13649 if ((__builtin_expect(!!(shape_id == dest_shape_id), 1))) {
13650 ((void)0);
13651 ((void)0);
13652 }
13653 else if (dest_shape_id != (((uintptr_t)1 << 32) - 1)) {
13654 rb_shape_t *dest_shape = rb_shape_get_shape_by_id(dest_shape_id);
13655 shape_id_t source_shape_id = dest_shape->parent_id;
13656 if (shape_id == source_shape_id && dest_shape->edge_name == id) {
13657 ((void)0);
13658 ROBJECT_SET_SHAPE_ID(obj, dest_shape_id);
13659 ((void)0);
13660 ((void)0);
13661 }
13662 else {
13663 break;
13664 }
13665 }
13666 else {
13667 break;
13668 }
13669 VALUE *ptr = ROBJECT_IVPTR(obj);
13670 ((void)0);
13671 rb_obj_write((VALUE)(obj), __extension__({
13672 ;
13673 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13674 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 1469);
13675 ((void)0);
13676 return val;
13677 }
13678 break;
13679 case RUBY_T_CLASS:
13680 case RUBY_T_MODULE:
13681 ((void)0);
13682 default:
13683 break;
13684 }
13685 return ((VALUE)RUBY_Qundef);
13686}
13687static VALUE
13688update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic)
13689{
13690 VALUE defined_class = 0;
13691 VALUE cvar_value = rb_cvar_find(klass, id, &defined_class);
13692 if (RB_TYPE_P(defined_class, RUBY_T_ICLASS)) {
13693 defined_class = ((struct RBasic *)(defined_class))->klass;
13694 }
13695 struct rb_id_table *rb_cvc_tbl = (((rb_classext_t *)((char *)(defined_class) + sizeof(struct RClass)))->cvc_tbl);
13696 if (!rb_cvc_tbl) {
13697 rb_bug("the cvc table should be set");
13698 }
13699 VALUE ent_data;
13700 if (!rb_id_table_lookup(rb_cvc_tbl, id, &ent_data)) {
13701 rb_bug("should have cvar cache entry");
13702 }
13703 struct rb_cvar_class_tbl_entry *ent = (void *)ent_data;
13704 ent->global_cvar_state = (ruby_vm_global_cvar_state);
13705 ic->entry = ent;
13706 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.2.1/vm_insnhelper.c", 1510));
13707 return cvar_value;
13708}
13709static inline VALUE
13710vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, ICVARC ic)
13711{
13712 const rb_cref_t *cref;
13713 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state) && (__builtin_expect(!!(rb_ractor_main_p()), 1))) {
13714 ((void)0);
13715 VALUE v = rb_ivar_lookup(ic->entry->class_value, id, ((VALUE)RUBY_Qundef));
13716 ((void)0);
13717 return v;
13718 }
13719 cref = vm_get_cref(((((reg_cfp)->ep))));
13720 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13721 return update_classvariable_cache(iseq, klass, id, ic);
13722}static inline
13723VALUE
13724rb_vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, ICVARC ic)
13725{
13726 return vm_getclassvariable(iseq, cfp, id, ic);
13727}
13728static inline void
13729vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic)
13730{
13731 const rb_cref_t *cref;
13732 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
13733 ((void)0);
13734 rb_class_ivar_set(ic->entry->class_value, id, val);
13735 return;
13736 }
13737 cref = vm_get_cref(((((reg_cfp)->ep))));
13738 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13739 rb_cvar_set(klass, id, val);
13740 update_classvariable_cache(iseq, klass, id, ic);
13741}static inline
13742void
13743rb_vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, VALUE val, ICVARC ic)
13744{
13745 vm_setclassvariable(iseq, cfp, id, val, ic);
13746}
13747static inline VALUE
13748vm_getinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, IVC ic)
13749{
13750 return vm_getivar(obj, id, iseq, ic, ((void *)0), 0);
13751}
13752static inline void
13753vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13754{
13755 if (RB_SPECIAL_CONST_P(obj)) {
13756 rb_error_frozen_object(obj);
13757 return;
13758 }
13759 shape_id_t dest_shape_id;
13760 attr_index_t index;
13761 vm_ic_atomic_shape_and_index(ic, &dest_shape_id, &index);
13762 if ((__builtin_expect(!!(RB_UNDEF_P(vm_setivar(obj, id, val, dest_shape_id, index))), 0))) {
13763 switch (RB_BUILTIN_TYPE(obj)) {
13764 case RUBY_T_OBJECT:
13765 case RUBY_T_CLASS:
13766 case RUBY_T_MODULE:
13767 break;
13768 default:
13769 if (!RB_UNDEF_P(vm_setivar_default(obj, id, val, dest_shape_id, index))) {
13770 return;
13771 }
13772 }
13773 vm_setivar_slowpath_ivar(obj, id, val, iseq, ic);
13774 }
13775}static inline
13776void
13777rb_vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13778{
13779 vm_setinstancevariable(iseq, obj, id, val, ic);
13780}
13781static VALUE
13782vm_throw_continue(const rb_execution_context_t *ec, VALUE err)
13783{
13784 if (RB_FIXNUM_P(err)) {
13785 ec->tag->state = RB_FIX2INT(err);
13786 }
13787 else if (RB_SYMBOL_P(err)) {
13788 ec->tag->state = RUBY_TAG_THROW;
13789 }
13790 else if (imemo_throw_data_p((VALUE)err)) {
13791 ec->tag->state = THROW_DATA_STATE((struct vm_throw_data *)err);
13792 }
13793 else {
13794 ec->tag->state = RUBY_TAG_RAISE;
13795 }
13796 return err;
13797}
13798static VALUE
13799vm_throw_start(const rb_execution_context_t *ec, rb_control_frame_t *const reg_cfp, enum ruby_tag_type state,
13800 const int flag, const VALUE throwobj)
13801{
13802 const rb_control_frame_t *escape_cfp = ((void *)0);
13803 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
13804 if (flag != 0) {
13805 }
13806 else if (state == RUBY_TAG_BREAK) {
13807 int is_orphan = 1;
13808 const VALUE *ep = ((((reg_cfp)->ep)));
13809 const rb_iseq_t *base_iseq = ((((reg_cfp)))->iseq);
13810 escape_cfp = reg_cfp;
13811 while (((base_iseq)->body)->type != ISEQ_TYPE_BLOCK) {
13812 if (((escape_cfp->iseq)->body)->type == ISEQ_TYPE_CLASS) {
13813 escape_cfp = ((escape_cfp)+1);
13814 ep = escape_cfp->ep;
13815 base_iseq = escape_cfp->iseq;
13816 }
13817 else {
13818 ep = VM_ENV_PREV_EP(ep);
13819 base_iseq = ((base_iseq)->body)->parent_iseq;
13820 escape_cfp = rb_vm_search_cf_from_ep(ec, escape_cfp, ep);
13821 ((void)0);
13822 }
13823 }
13824 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13825 is_orphan = 0;
13826 state = RUBY_TAG_RETURN;
13827 }
13828 else {
13829 ep = VM_ENV_PREV_EP(ep);
13830 while (escape_cfp < eocfp) {
13831 if (escape_cfp->ep == ep) {
13832 const rb_iseq_t *const iseq = escape_cfp->iseq;
13833 const VALUE epc = escape_cfp->pc - ((iseq)->body)->iseq_encoded;
13834 const struct iseq_catch_table *const ct = ((iseq)->body)->catch_table;
13835 unsigned int i;
13836 if (!ct) break;
13837 for (i=0; i < ct->size; i++) {
13838 const struct iseq_catch_table_entry *const entry =
13839 __extension__({
13840 ;
13841 ; __typeof__(&(ct)->entries[i]) unaligned_member_access_result = (&(ct)->entries[i]);
13842 ; unaligned_member_access_result; });
13843 if (entry->type == CATCH_TYPE_BREAK &&
13844 entry->iseq == base_iseq &&
13845 entry->start < epc && entry->end >= epc) {
13846 if (entry->cont == epc) {
13847 is_orphan = 0;
13848 }
13849 break;
13850 }
13851 }
13852 break;
13853 }
13854 escape_cfp = ((escape_cfp)+1);
13855 }
13856 }
13857 if (is_orphan) {
13858 rb_vm_localjump_error("break from proc-closure", throwobj, RUBY_TAG_BREAK);
13859 }
13860 }
13861 else if (state == RUBY_TAG_RETRY) {
13862 const VALUE *ep = VM_ENV_PREV_EP(((((reg_cfp)->ep))));
13863 escape_cfp = rb_vm_search_cf_from_ep(ec, reg_cfp, ep);
13864 }
13865 else if (state == RUBY_TAG_RETURN) {
13866 const VALUE *current_ep = ((((reg_cfp)->ep)));
13867 const VALUE *target_ep = ((void *)0), *target_lep, *ep = current_ep;
13868 int in_class_frame = 0;
13869 int toplevel = 1;
13870 escape_cfp = reg_cfp;
13871 while (!VM_ENV_LOCAL_P(ep)) {
13872 if (VM_ENV_FLAGS(ep, VM_FRAME_FLAG_LAMBDA) && target_ep == ((void *)0)) {
13873 target_ep = ep;
13874 }
13875 ep = VM_ENV_PREV_EP(ep);
13876 }
13877 target_lep = ep;
13878 while (escape_cfp < eocfp) {
13879 const VALUE *lep = VM_CF_LEP(escape_cfp);
13880 if (!target_lep) {
13881 target_lep = lep;
13882 }
13883 if (lep == target_lep &&
13884 VM_FRAME_RUBYFRAME_P(escape_cfp) &&
13885 ((escape_cfp->iseq)->body)->type == ISEQ_TYPE_CLASS) {
13886 in_class_frame = 1;
13887 target_lep = 0;
13888 }
13889 if (lep == target_lep) {
13890 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13891 toplevel = 0;
13892 if (in_class_frame) {
13893 goto valid_return;
13894 }
13895 else {
13896 const VALUE *tep = current_ep;
13897 while (target_lep != tep) {
13898 if (escape_cfp->ep == tep) {
13899 if (tep == target_ep) {
13900 goto valid_return;
13901 }
13902 else {
13903 goto unexpected_return;
13904 }
13905 }
13906 tep = VM_ENV_PREV_EP(tep);
13907 }
13908 }
13909 }
13910 else if (VM_FRAME_RUBYFRAME_P(escape_cfp)) {
13911 switch (((escape_cfp->iseq)->body)->type) {
13912 case ISEQ_TYPE_TOP:
13913 case ISEQ_TYPE_MAIN:
13914 if (toplevel) {
13915 if (in_class_frame) goto unexpected_return;
13916 if (target_ep == ((void *)0)) {
13917 goto valid_return;
13918 }
13919 else {
13920 goto unexpected_return;
13921 }
13922 }
13923 break;
13924 case ISEQ_TYPE_EVAL:
13925 case ISEQ_TYPE_CLASS:
13926 toplevel = 0;
13927 break;
13928 default:
13929 break;
13930 }
13931 }
13932 }
13933 if (escape_cfp->ep == target_lep && ((escape_cfp->iseq)->body)->type == ISEQ_TYPE_METHOD) {
13934 if (target_ep == ((void *)0)) {
13935 goto valid_return;
13936 }
13937 else {
13938 goto unexpected_return;
13939 }
13940 }
13941 escape_cfp = ((escape_cfp)+1);
13942 }
13943 unexpected_return:;
13944 rb_vm_localjump_error("unexpected return", throwobj, RUBY_TAG_RETURN);
13945 valid_return:;
13946 }
13947 else {
13948 rb_bug("isns(throw): unsupported throw type");
13949 }
13950 ec->tag->state = state;
13951 return (VALUE)THROW_DATA_NEW(throwobj, escape_cfp, state);
13952}
13953static VALUE
13954vm_throw(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
13955 rb_num_t throw_state, VALUE throwobj)
13956{
13957 const int state = (int)(throw_state & VM_THROW_STATE_MASK);
13958 const int flag = (int)(throw_state & VM_THROW_NO_ESCAPE_FLAG);
13959 if (state != 0) {
13960 return vm_throw_start(ec, reg_cfp, state, flag, throwobj);
13961 }
13962 else {
13963 return vm_throw_continue(ec, throwobj);
13964 }
13965}
13966static inline void
13967vm_expandarray(VALUE *sp, VALUE ary, rb_num_t num, int flag)
13968{
13969 int is_splat = flag & 0x01;
13970 rb_num_t space_size = num + is_splat;
13971 VALUE *base = sp - 1;
13972 const VALUE *ptr;
13973 rb_num_t len;
13974 const VALUE obj = ary;
13975 if (!RB_TYPE_P(ary, RUBY_T_ARRAY) && RB_NIL_P(ary = rb_check_array_type(ary))) {
13976 ary = obj;
13977 ptr = &ary;
13978 len = 1;
13979 }
13980 else {
13981 ptr = rb_array_const_ptr_transient(ary);
13982 len = (rb_num_t)rb_array_len(ary);
13983 }
13984 if (space_size == 0) {
13985 }
13986 else if (flag & 0x02) {
13987 rb_num_t i = 0, j;
13988 if (len < num) {
13989 for (i=0; i<num-len; i++) {
13990 *base++ = ((VALUE)RUBY_Qnil);
13991 }
13992 }
13993 for (j=0; i<num; i++, j++) {
13994 VALUE v = ptr[len - j - 1];
13995 *base++ = v;
13996 }
13997 if (is_splat) {
13998 *base = rb_ary_new_from_values(len - j, ptr);
13999 }
14000 }
14001 else {
14002 rb_num_t i;
14003 VALUE *bptr = &base[space_size - 1];
14004 for (i=0; i<num; i++) {
14005 if (len <= i) {
14006 for (; i<num; i++) {
14007 *bptr-- = ((VALUE)RUBY_Qnil);
14008 }
14009 break;
14010 }
14011 *bptr-- = ptr[i];
14012 }
14013 if (is_splat) {
14014 if (num > len) {
14015 *bptr = rb_ary_new();
14016 }
14017 else {
14018 *bptr = rb_ary_new_from_values(len - num, ptr + num);
14019 }
14020 }
14021 }
14022 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(ary); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
14023}
14024static VALUE vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
14025static VALUE vm_mtbl_dump(VALUE klass, ID target_mid);
14026static struct rb_class_cc_entries *
14027vm_ccs_create(VALUE klass, const rb_callable_method_entry_t *cme)
14028{
14029 struct rb_class_cc_entries *ccs = ((struct rb_class_cc_entries *)ruby_xmalloc(sizeof(struct rb_class_cc_entries)));
14030 ccs->capa = 0;
14031 ccs->len = 0;
14032 rb_obj_write((VALUE)(klass), __extension__({
14033 ;
14034 ; __typeof__((VALUE *)(&ccs->cme)) unaligned_member_access_result = ((VALUE *)(&ccs->cme));
14035 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.2.1/vm_insnhelper.c", 1898);
14036 (((rb_callable_method_entry_t *)cme)->flags |= ((VALUE)RUBY_FL_USER8));
14037 ccs->entries = ((void *)0);
14038 return ccs;
14039}
14040static void
14041vm_ccs_push(VALUE klass, struct rb_class_cc_entries *ccs, const struct rb_callinfo *ci, const struct rb_callcache *cc)
14042{
14043 if (! vm_cc_markable(cc)) {
14044 return;
14045 }
14046 else if (! vm_ci_markable(ci)) {
14047 return;
14048 }
14049 if ((__builtin_expect(!!(ccs->len == ccs->capa), 0))) {
14050 if (ccs->capa == 0) {
14051 ccs->capa = 1;
14052 ccs->entries = ((struct rb_class_cc_entries_entry *)ruby_xmalloc2((ccs->capa), sizeof(struct rb_class_cc_entries_entry)));
14053 }
14054 else {
14055 ccs->capa *= 2;
14056 ((ccs->entries) = ((struct rb_class_cc_entries_entry *)ruby_xrealloc2((void *)(ccs->entries), (ccs->capa), sizeof(struct rb_class_cc_entries_entry))));
14057 }
14058 }
14059 ((void)0);
14060 const int pos = ccs->len++;
14061 rb_obj_write((VALUE)(klass), __extension__({
14062 ;
14063 ; __typeof__((VALUE *)(&ccs->entries[pos].ci)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].ci));
14064 ; unaligned_member_access_result; }), (VALUE)(ci), "../ruby-3.2.1/vm_insnhelper.c", 1927);
14065 rb_obj_write((VALUE)(klass), __extension__({
14066 ;
14067 ; __typeof__((VALUE *)(&ccs->entries[pos].cc)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].cc));
14068 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 1928);
14069 if (0) {
14070 }
14071}
14072static const struct rb_callcache *
14073vm_search_method_slowpath0(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
14074{
14075 const struct rb_callcache *cc = rb_vm_search_method_slowpath(cd->ci, klass);
14076 cd->cc = cc;
14077 const struct rb_callcache *empty_cc =
14078 rb_vm_empty_cc();
14079 if (cd_owner && cc != empty_cc) (rb_obj_written((VALUE)(cd_owner), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 2110));
14080 ((void)0);
14081 return cc;
14082}
14083static const struct rb_callcache *
14084vm_search_method_fastpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
14085{
14086 const struct rb_callcache *cc = cd->cc;
14087 if ((__builtin_expect(!!(vm_cc_class_check(cc, klass)), 1))) {
14088 if ((__builtin_expect(!!(!((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))), 1))) {
14089 ((void)0);
14090 ((void)0);
14091 ((void)0);
14092 return cc;
14093 }
14094 ((void)0);
14095 }
14096 else {
14097 ((void)0);
14098 }
14099 return vm_search_method_slowpath0(cd_owner, cd, klass);
14100}
14101static const struct rb_callcache *
14102vm_search_method(VALUE cd_owner, struct rb_call_data *cd, VALUE recv)
14103{
14104 VALUE klass = rb_class_of(recv);
14105 ((void)0);
14106 ((void)0);
14107 return vm_search_method_fastpath(cd_owner, cd, klass);
14108}
14109typedef union {
14110 VALUE (*anyargs)();
14111 VALUE (*f00)(VALUE);
14112 VALUE (*f01)(VALUE, VALUE);
14113 VALUE (*f02)(VALUE, VALUE, VALUE);
14114 VALUE (*f03)(VALUE, VALUE, VALUE, VALUE);
14115 VALUE (*f04)(VALUE, VALUE, VALUE, VALUE, VALUE);
14116 VALUE (*f05)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14117 VALUE (*f06)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14118 VALUE (*f07)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14119 VALUE (*f08)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14120 VALUE (*f09)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14121 VALUE (*f10)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14122 VALUE (*f11)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14123 VALUE (*f12)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14124 VALUE (*f13)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14125 VALUE (*f14)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14126 VALUE (*f15)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14127 VALUE (*fm1)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE);
14128} __attribute__((__transparent_union__)) cfunc_type;
14129static inline int
14130check_cfunc(const rb_callable_method_entry_t *me, cfunc_type func)
14131{
14132 if (! me) {
14133 return 0;
14134 }
14135 else {
14136 ((void)0);
14137 ((void)0);
14138 ((void)0);
14139 if (me->def->type != VM_METHOD_TYPE_CFUNC) {
14140 return 0;
14141 }
14142 else {
14143 return me->def->body.cfunc.func == func.anyargs;
14144 }
14145 }
14146}
14147static inline int
14148vm_method_cfunc_is(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv, cfunc_type func)
14149{
14150 ((void)0);
14151 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
14152 return check_cfunc(vm_cc_cme(cc), func);
14153}
14154static inline _Bool
14155FIXNUM_2_P(VALUE a, VALUE b)
14156{
14157 long x = a;
14158 long y = b;
14159 long z = x & y & 1;
14160 return z == 1;
14161}
14162static inline _Bool
14163FLONUM_2_P(VALUE a, VALUE b)
14164{
14165 long x = a;
14166 long y = b;
14167 long z = ((x ^ 2) | (y ^ 2)) & 3;
14168 return !z;
14169}
14170static VALUE
14171opt_equality_specialized(VALUE recv, VALUE obj)
14172{
14173 if (FIXNUM_2_P(recv, obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 0))) == 0), 1)))) {
14174 goto compare_by_identity;
14175 }
14176 else if (FLONUM_2_P(recv, obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
14177 goto compare_by_identity;
14178 }
14179 else if (RB_STATIC_SYM_P(recv) && RB_STATIC_SYM_P(obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 6))) == 0), 1)))) {
14180 goto compare_by_identity;
14181 }
14182 else if (RB_SPECIAL_CONST_P(recv)) {
14183 }
14184 else if (RBASIC_CLASS(recv) == rb_cFloat && RB_FLOAT_TYPE_P(obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
14185 double a = rb_float_value_inline(recv);
14186 double b = rb_float_value_inline(obj);
14187 return ((a == b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14188 }
14189 else if (RBASIC_CLASS(recv) == rb_cString && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 2))) == 0), 1)))) {
14190 if (recv == obj) {
14191 return ((VALUE)RUBY_Qtrue);
14192 }
14193 else if (RB_TYPE_P(obj, RUBY_T_STRING)) {
14194 return rb_str_eql_internal(obj, recv);
14195 }
14196 }
14197 return ((VALUE)RUBY_Qundef);
14198 compare_by_identity:
14199 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14200}
14201static VALUE
14202opt_equality(const rb_iseq_t *cd_owner, VALUE recv, VALUE obj, CALL_DATA cd)
14203{
14204 ((void)0);
14205 VALUE val = opt_equality_specialized(recv, obj);
14206 if (!RB_UNDEF_P(val)) return val;
14207 if (!vm_method_cfunc_is(cd_owner, cd, recv, rb_obj_equal)) {
14208 return ((VALUE)RUBY_Qundef);
14209 }
14210 else {
14211 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14212 }
14213}
14214extern VALUE rb_vm_call0(rb_execution_context_t *ec, VALUE, ID, int, const VALUE*, const rb_callable_method_entry_t *, int kw_splat);
14215extern VALUE rb_vm_call_with_refinements(rb_execution_context_t *, VALUE, ID, int, const VALUE *, int);
14216static VALUE
14217check_match(rb_execution_context_t *ec, VALUE pattern, VALUE target, enum vm_check_match_type type)
14218{
14219 switch (type) {
14220 case VM_CHECKMATCH_TYPE_WHEN:
14221 return pattern;
14222 case VM_CHECKMATCH_TYPE_RESCUE:
14223 if (!rb_obj_is_kind_of(pattern, rb_cModule)) {
14224 rb_raise(rb_eTypeError, "class or module required for rescue clause");
14225 }
14226 case VM_CHECKMATCH_TYPE_CASE: {
14227 return rb_vm_call_with_refinements(ec, pattern, idEqq, 1, &target, 0);
14228 }
14229 default:
14230 rb_bug("check_match: unreachable");
14231 }
14232}
14233static inline VALUE
14234double_cmp_lt(double a, double b)
14235{
14236 ;
14237 return ((a < b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14238}
14239static inline VALUE
14240double_cmp_le(double a, double b)
14241{
14242 ;
14243 return ((a <= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14244}
14245static inline VALUE
14246double_cmp_gt(double a, double b)
14247{
14248 ;
14249 return ((a > b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14250}
14251static inline VALUE
14252double_cmp_ge(double a, double b)
14253{
14254 ;
14255 return ((a >= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14256}
14257static inline VALUE *
14258vm_base_ptr(const rb_control_frame_t *cfp)
14259{
14260 return cfp->__bp__;
14261}
14262__attribute__((__noreturn__)) static void raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc);
14263__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);
14264__attribute__((__noreturn__)) static void argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys);
14265VALUE rb_keyword_error_new(const char *error, VALUE keys);
14266static VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv,
14267 enum method_missing_reason call_status, int kw_splat);
14268__attribute__ ((__visibility__("default"))) extern
14269const rb_callable_method_entry_t *rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
14270struct args_info {
14271 VALUE *argv;
14272 int argc;
14273 int rest_index;
14274 int rest_dupped;
14275 const struct rb_callinfo_kwarg *kw_arg;
14276 VALUE *kw_argv;
14277 VALUE rest;
14278};
14279enum arg_setup_type {
14280 arg_setup_method,
14281 arg_setup_block
14282};
14283static inline void
14284arg_rest_dup(struct args_info *args)
14285{
14286 if (!args->rest_dupped) {
14287 args->rest = rb_ary_dup(args->rest);
14288 args->rest_dupped = 1;
14289 }
14290}
14291static inline int
14292args_argc(struct args_info *args)
14293{
14294 if (args->rest == ((VALUE)RUBY_Qfalse)) {
14295 return args->argc;
14296 }
14297 else {
14298 return args->argc + RARRAY_LENINT(args->rest) - args->rest_index;
14299 }
14300}
14301static inline void
14302args_extend(struct args_info *args, const int min_argc)
14303{
14304 int i;
14305 if (args->rest) {
14306 arg_rest_dup(args);
14307 ((void)0);
14308 for (i=args->argc + RARRAY_LENINT(args->rest); i<min_argc; i++) {
14309 rb_ary_push(args->rest, ((VALUE)RUBY_Qnil));
14310 }
14311 }
14312 else {
14313 for (i=args->argc; i<min_argc; i++) {
14314 args->argv[args->argc++] = ((VALUE)RUBY_Qnil);
14315 }
14316 }
14317}
14318static inline void
14319args_reduce(struct args_info *args, int over_argc)
14320{
14321 if (args->rest) {
14322 const long len = rb_array_len(args->rest);
14323 if (len > over_argc) {
14324 arg_rest_dup(args);
14325 rb_ary_resize(args->rest, len - over_argc);
14326 return;
14327 }
14328 else {
14329 args->rest = ((VALUE)RUBY_Qfalse);
14330 over_argc -= len;
14331 }
14332 }
14333 ((void)0);
14334 args->argc -= over_argc;
14335}
14336static inline int
14337args_check_block_arg0(struct args_info *args)
14338{
14339 VALUE ary = ((VALUE)RUBY_Qnil);
14340 if (args->rest && rb_array_len(args->rest) == 1) {
14341 VALUE arg0 = RARRAY_AREF(args->rest, 0);
14342 ary = rb_check_array_type(arg0);
14343 }
14344 else if (args->argc == 1) {
14345 VALUE arg0 = args->argv[0];
14346 ary = rb_check_array_type(arg0);
14347 args->argv[0] = arg0;
14348 }
14349 if (!RB_NIL_P(ary)) {
14350 args->rest = ary;
14351 args->rest_index = 0;
14352 args->argc = 0;
14353 return 1;
14354 }
14355 return 0;
14356}
14357static inline void
14358args_copy(struct args_info *args)
14359{
14360 if (args->rest != ((VALUE)RUBY_Qfalse)) {
14361 int argc = args->argc;
14362 args->argc = 0;
14363 arg_rest_dup(args);
14364 while (args->rest_index > 0 && argc > 0) {
14365 RARRAY_ASET(args->rest, --args->rest_index, args->argv[--argc]);
14366 }
14367 while (argc > 0) {
14368 rb_ary_unshift(args->rest, args->argv[--argc]);
14369 }
14370 }
14371 else if (args->argc > 0) {
14372 args->rest = rb_ary_new_from_values(args->argc, args->argv);
14373 args->rest_index = 0;
14374 args->rest_dupped = 1;
14375 args->argc = 0;
14376 }
14377}
14378static inline const VALUE *
14379args_rest_argv(struct args_info *args)
14380{
14381 return rb_array_const_ptr_transient(args->rest) + args->rest_index;
14382}
14383static inline VALUE
14384args_rest_array(struct args_info *args)
14385{
14386 VALUE ary;
14387 if (args->rest) {
14388 ary = rb_ary_behead(args->rest, args->rest_index);
14389 args->rest_index = 0;
14390 args->rest = 0;
14391 }
14392 else {
14393 ary = rb_ary_new();
14394 }
14395 return ary;
14396}
14397static int
14398args_kw_argv_to_hash(struct args_info *args)
14399{
14400 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14401 const VALUE *const passed_keywords = kw_arg->keywords;
14402 const int kw_len = kw_arg->keyword_len;
14403 VALUE h = rb_hash_new_with_size(kw_len);
14404 const int kw_start = args->argc - kw_len;
14405 const VALUE * const kw_argv = args->argv + kw_start;
14406 int i;
14407 args->argc = kw_start + 1;
14408 for (i=0; i<kw_len; i++) {
14409 rb_hash_aset(h, passed_keywords[i], kw_argv[i]);
14410 }
14411 args->argv[args->argc - 1] = h;
14412 return args->argc;
14413}
14414static inline void
14415args_setup_lead_parameters(struct args_info *args, int argc, VALUE *locals)
14416{
14417 if (args->argc >= argc) {
14418 args->argc -= argc;
14419 args->argv += argc;
14420 }
14421 else {
14422 int i, j;
14423 const VALUE *argv = args_rest_argv(args);
14424 for (i=args->argc, j=0; i<argc; i++, j++) {
14425 locals[i] = argv[j];
14426 }
14427 args->rest_index += argc - args->argc;
14428 args->argc = 0;
14429 }
14430}
14431static inline void
14432args_setup_post_parameters(struct args_info *args, int argc, VALUE *locals)
14433{
14434 long len;
14435 len = rb_array_len(args->rest);
14436 ruby_nonempty_memcpy((locals), (rb_array_const_ptr_transient(args->rest) + len - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
14437 rb_ary_resize(args->rest, len - argc);
14438}
14439static inline int
14440args_setup_opt_parameters(struct args_info *args, int opt_max, VALUE *locals)
14441{
14442 int i;
14443 if (args->argc >= opt_max) {
14444 args->argc -= opt_max;
14445 args->argv += opt_max;
14446 i = opt_max;
14447 }
14448 else {
14449 int j;
14450 i = args->argc;
14451 args->argc = 0;
14452 if (args->rest) {
14453 int len = RARRAY_LENINT(args->rest);
14454 const VALUE *argv = rb_array_const_ptr_transient(args->rest);
14455 for (; i<opt_max && args->rest_index < len; i++, args->rest_index++) {
14456 locals[i] = argv[args->rest_index];
14457 }
14458 }
14459 for (j=i; j<opt_max; j++) {
14460 locals[j] = ((VALUE)RUBY_Qnil);
14461 }
14462 }
14463 return i;
14464}
14465static inline void
14466args_setup_rest_parameter(struct args_info *args, VALUE *locals)
14467{
14468 *locals = args_rest_array(args);
14469}
14470static VALUE
14471make_unknown_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14472{
14473 int i;
14474 VALUE obj = rb_ary_hidden_new(1);
14475 for (i=0; i<passed_keyword_len; i++) {
14476 if (!RB_UNDEF_P(kw_argv[i])) {
14477 rb_ary_push(obj, passed_keywords[i]);
14478 }
14479 }
14480 return obj;
14481}
14482static VALUE
14483make_rest_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14484{
14485 int i;
14486 VALUE obj = rb_hash_new_with_size(passed_keyword_len);
14487 for (i=0; i<passed_keyword_len; i++) {
14488 if (!RB_UNDEF_P(kw_argv[i])) {
14489 rb_hash_aset(obj, passed_keywords[i], kw_argv[i]);
14490 }
14491 }
14492 return obj;
14493}
14494static inline int
14495args_setup_kw_parameters_lookup(const ID key, VALUE *ptr, const VALUE *const passed_keywords, VALUE *passed_values, const int passed_keyword_len)
14496{
14497 int i;
14498 const VALUE keyname = rb_id2sym(key);
14499 for (i=0; i<passed_keyword_len; i++) {
14500 if (keyname == passed_keywords[i]) {
14501 *ptr = passed_values[i];
14502 passed_values[i] = ((VALUE)RUBY_Qundef);
14503 return 1;
14504 }
14505 }
14506 return 0;
14507}
14508static void
14509args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
14510 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
14511 VALUE *const locals)
14512{
14513 const ID *acceptable_keywords = ((iseq)->body)->param.keyword->table;
14514 const int req_key_num = ((iseq)->body)->param.keyword->required_num;
14515 const int key_num = ((iseq)->body)->param.keyword->num;
14516 const VALUE * const default_values = ((iseq)->body)->param.keyword->default_values;
14517 VALUE missing = 0;
14518 int i, di, found = 0;
14519 int unspecified_bits = 0;
14520 VALUE unspecified_bits_value = ((VALUE)RUBY_Qnil);
14521 for (i=0; i<req_key_num; i++) {
14522 ID key = acceptable_keywords[i];
14523 if (args_setup_kw_parameters_lookup(key, &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14524 found++;
14525 }
14526 else {
14527 if (!missing) missing = rb_ary_hidden_new(1);
14528 rb_ary_push(missing, rb_id2sym(key));
14529 }
14530 }
14531 if (missing) argument_kw_error(ec, iseq, "missing", missing);
14532 for (di=0; i<key_num; i++, di++) {
14533 if (args_setup_kw_parameters_lookup(acceptable_keywords[i], &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14534 found++;
14535 }
14536 else {
14537 if (RB_UNDEF_P(default_values[di])) {
14538 locals[i] = ((VALUE)RUBY_Qnil);
14539 if ((__builtin_expect(!!(i < (32-1)), 1))) {
14540 unspecified_bits |= 0x01 << di;
14541 }
14542 else {
14543 if (RB_NIL_P(unspecified_bits_value)) {
14544 int j;
14545 unspecified_bits_value = rb_hash_new();
14546 for (j=0; j<(32-1); j++) {
14547 if (unspecified_bits & (0x01 << j)) {
14548 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));
14549 }
14550 }
14551 }
14552 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));
14553 }
14554 }
14555 else {
14556 locals[i] = default_values[di];
14557 }
14558 }
14559 }
14560 if (((iseq)->body)->param.flags.has_kwrest) {
14561 const int rest_hash_index = key_num + 1;
14562 locals[rest_hash_index] = make_rest_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14563 }
14564 else {
14565 if (found != passed_keyword_len) {
14566 VALUE keys = make_unknown_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14567 argument_kw_error(ec, iseq, "unknown", keys);
14568 }
14569 }
14570 if (RB_NIL_P(unspecified_bits_value)) {
14571 unspecified_bits_value = __builtin_choose_expr( __builtin_constant_p(unspecified_bits), ((VALUE)(unspecified_bits)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(unspecified_bits));
14572 }
14573 locals[key_num] = unspecified_bits_value;
14574}
14575static inline void
14576args_setup_kw_rest_parameter(VALUE keyword_hash, VALUE *locals, int kw_flag)
14577{
14578 if (RB_NIL_P(keyword_hash)) {
14579 keyword_hash = rb_hash_new();
14580 }
14581 else if (!(kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
14582 keyword_hash = rb_hash_dup(keyword_hash);
14583 }
14584 locals[0] = keyword_hash;
14585}
14586static inline void
14587args_setup_block_parameter(const rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE *locals)
14588{
14589 VALUE block_handler = calling->block_handler;
14590 *locals = rb_vm_bh_to_procval(ec, block_handler);
14591}
14592struct fill_values_arg {
14593 VALUE *keys;
14594 VALUE *vals;
14595 int argc;
14596};
14597static int
14598fill_keys_values(st_data_t key, st_data_t val, st_data_t ptr)
14599{
14600 struct fill_values_arg *arg = (struct fill_values_arg *)ptr;
14601 int i = arg->argc++;
14602 arg->keys[i] = (VALUE)key;
14603 arg->vals[i] = (VALUE)val;
14604 return ST_CONTINUE;
14605}
14606static inline int
14607ignore_keyword_hash_p(VALUE keyword_hash, const rb_iseq_t * const iseq, unsigned int * kw_flag, VALUE * converted_keyword_hash)
14608{
14609 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
14610 keyword_hash = rb_to_hash_type(keyword_hash);
14611 }
14612 if (!(*kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit)) &&
14613 (((iseq)->body)->param.flags.has_kwrest ||
14614 ((iseq)->body)->param.flags.ruby2_keywords)) {
14615 *kw_flag |= (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14616 keyword_hash = rb_hash_dup(keyword_hash);
14617 }
14618 *converted_keyword_hash = keyword_hash;
14619 return !(((iseq)->body)->param.flags.has_kw) &&
14620 !(((iseq)->body)->param.flags.has_kwrest) &&
14621 RHASH_EMPTY_P(keyword_hash);
14622}
14623COLDFUNC static int
14624setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * const iseq,
14625 struct rb_calling_info *const calling,
14626 const struct rb_callinfo *ci,
14627 VALUE * const locals, const enum arg_setup_type arg_setup_type) {
14628 const int min_argc = ((iseq)->body)->param.lead_num + ((iseq)->body)->param.post_num;
14629 const int max_argc = (((iseq)->body)->param.flags.has_rest == 0) ? min_argc + ((iseq)->body)->param.opt_num : (-1);
14630 int given_argc;
14631 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));
14632 int opt_pc = 0, allow_autosplat = !kw_flag;
14633 struct args_info args_body, *args;
14634 VALUE keyword_hash = ((VALUE)RUBY_Qnil);
14635 VALUE * const orig_sp = ec->cfp->sp;
14636 unsigned int i;
14637 VALUE flag_keyword_hash = 0;
14638 VALUE splat_flagged_keyword_hash = 0;
14639 VALUE converted_keyword_hash = 0;
14640 VALUE rest_last = 0;
14641 ;
14642 for (i=calling->argc; i<((iseq)->body)->param.size; i++) {
14643 locals[i] = ((VALUE)RUBY_Qnil);
14644 }
14645 ec->cfp->sp = &locals[i];
14646 args = &args_body;
14647 given_argc = args->argc = calling->argc;
14648 args->argv = locals;
14649 args->rest_dupped = 0;
14650 if (kw_flag & (0x01 << VM_CALL_KWARG_bit)) {
14651 args->kw_arg = vm_ci_kwarg(ci);
14652 if (((iseq)->body)->param.flags.has_kw) {
14653 int kw_len = args->kw_arg->keyword_len;
14654 args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len))));
14655 args->argc -= kw_len;
14656 given_argc -= kw_len;
14657 ruby_nonempty_memcpy((args->kw_argv), (locals + args->argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len)));
14658 }
14659 else {
14660 args->kw_argv = ((void *)0);
14661 given_argc = args_kw_argv_to_hash(args);
14662 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14663 }
14664 }
14665 else {
14666 args->kw_arg = ((void *)0);
14667 args->kw_argv = ((void *)0);
14668 }
14669 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) {
14670 int len;
14671 args->rest = locals[--args->argc];
14672 args->rest_index = 0;
14673 len = RARRAY_LENINT(args->rest);
14674 given_argc += len - 1;
14675 rest_last = RARRAY_AREF(args->rest, len - 1);
14676 if (!kw_flag && len > 0) {
14677 if (RB_TYPE_P(rest_last, RUBY_T_HASH) &&
14678 (((struct RHash *)rest_last)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
14679 splat_flagged_keyword_hash = rest_last;
14680 rest_last = rb_hash_dup(rest_last);
14681 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14682 }
14683 else {
14684 rest_last = 0;
14685 }
14686 }
14687 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14688 if (ignore_keyword_hash_p(rest_last, iseq, &kw_flag, &converted_keyword_hash)) {
14689 arg_rest_dup(args);
14690 rb_ary_pop(args->rest);
14691 given_argc--;
14692 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14693 }
14694 else {
14695 if (rest_last != converted_keyword_hash) {
14696 rest_last = converted_keyword_hash;
14697 arg_rest_dup(args);
14698 RARRAY_ASET(args->rest, len - 1, rest_last);
14699 }
14700 if (((iseq)->body)->param.flags.ruby2_keywords && rest_last) {
14701 flag_keyword_hash = rest_last;
14702 }
14703 else if (((iseq)->body)->param.flags.has_kw || ((iseq)->body)->param.flags.has_kwrest) {
14704 arg_rest_dup(args);
14705 rb_ary_pop(args->rest);
14706 given_argc--;
14707 keyword_hash = rest_last;
14708 }
14709 }
14710 }
14711 }
14712 else {
14713 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14714 VALUE last_arg = args->argv[args->argc-1];
14715 if (ignore_keyword_hash_p(last_arg, iseq, &kw_flag, &converted_keyword_hash)) {
14716 args->argc--;
14717 given_argc--;
14718 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14719 }
14720 else {
14721 if (last_arg != converted_keyword_hash) {
14722 last_arg = converted_keyword_hash;
14723 args->argv[args->argc-1] = last_arg;
14724 }
14725 if (((iseq)->body)->param.flags.ruby2_keywords) {
14726 flag_keyword_hash = last_arg;
14727 }
14728 else if (((iseq)->body)->param.flags.has_kw || ((iseq)->body)->param.flags.has_kwrest) {
14729 args->argc--;
14730 given_argc--;
14731 keyword_hash = last_arg;
14732 }
14733 }
14734 }
14735 args->rest = ((VALUE)RUBY_Qfalse);
14736 }
14737 if (flag_keyword_hash && RB_TYPE_P(flag_keyword_hash, RUBY_T_HASH)) {
14738 ((struct RHash *)flag_keyword_hash)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
14739 }
14740 if (kw_flag && ((iseq)->body)->param.flags.accepts_no_kwarg) {
14741 rb_raise(rb_eArgError, "no keywords accepted");
14742 }
14743 switch (arg_setup_type) {
14744 case arg_setup_method:
14745 break;
14746 case arg_setup_block:
14747 if (given_argc == (RB_NIL_P(keyword_hash) ? 1 : 2) &&
14748 allow_autosplat &&
14749 (min_argc > 0 || ((iseq)->body)->param.opt_num > 1) &&
14750 !((iseq)->body)->param.flags.ambiguous_param0 &&
14751 !((((iseq)->body)->param.flags.has_kw ||
14752 ((iseq)->body)->param.flags.has_kwrest)
14753 && max_argc == 1) &&
14754 args_check_block_arg0(args)) {
14755 given_argc = RARRAY_LENINT(args->rest);
14756 }
14757 break;
14758 }
14759 if (given_argc < min_argc) {
14760 if (arg_setup_type == arg_setup_block) {
14761 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);
14762 given_argc = min_argc;
14763 args_extend(args, min_argc);
14764 }
14765 else {
14766 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14767 }
14768 }
14769 if (given_argc > max_argc && max_argc != (-1)) {
14770 if (arg_setup_type == arg_setup_block) {
14771 args_reduce(args, given_argc - max_argc);
14772 given_argc = max_argc;
14773 }
14774 else {
14775 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14776 }
14777 }
14778 if (((iseq)->body)->param.flags.has_lead) {
14779 args_setup_lead_parameters(args, ((iseq)->body)->param.lead_num, locals + 0);
14780 }
14781 if (((iseq)->body)->param.flags.has_rest || ((iseq)->body)->param.flags.has_post){
14782 args_copy(args);
14783 }
14784 if (((iseq)->body)->param.flags.has_post) {
14785 args_setup_post_parameters(args, ((iseq)->body)->param.post_num, locals + ((iseq)->body)->param.post_start);
14786 }
14787 if (((iseq)->body)->param.flags.has_opt) {
14788 int opt = args_setup_opt_parameters(args, ((iseq)->body)->param.opt_num, locals + ((iseq)->body)->param.lead_num);
14789 opt_pc = (int)((iseq)->body)->param.opt_table[opt];
14790 }
14791 if (((iseq)->body)->param.flags.has_rest) {
14792 args_setup_rest_parameter(args, locals + ((iseq)->body)->param.rest_start);
14793 VALUE ary = *(locals + ((iseq)->body)->param.rest_start);
14794 VALUE index = rb_array_len(ary) - 1;
14795 if (splat_flagged_keyword_hash &&
14796 !((iseq)->body)->param.flags.ruby2_keywords &&
14797 !((iseq)->body)->param.flags.has_kw &&
14798 !((iseq)->body)->param.flags.has_kwrest &&
14799 RARRAY_AREF(ary, index) == splat_flagged_keyword_hash) {
14800 ((struct RHash *)rest_last)->basic.flags &= ~RHASH_PASS_AS_KEYWORDS;
14801 RARRAY_ASET(ary, index, rest_last);
14802 }
14803 }
14804 if (((iseq)->body)->param.flags.has_kw) {
14805 VALUE * const klocals = locals + ((iseq)->body)->param.keyword->bits_start - ((iseq)->body)->param.keyword->num;
14806 if (args->kw_argv != ((void *)0)) {
14807 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14808 args_setup_kw_parameters(ec, iseq, args->kw_argv, kw_arg->keyword_len, kw_arg->keywords, klocals);
14809 }
14810 else if (!RB_NIL_P(keyword_hash)) {
14811 int kw_len = rb_long2int_inline(RHASH_SIZE(keyword_hash));
14812 struct fill_values_arg arg;
14813 arg.keys = args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len * 2))));
14814 arg.vals = arg.keys + kw_len;
14815 arg.argc = 0;
14816 rb_hash_foreach(keyword_hash, fill_keys_values, (VALUE)&arg);
14817 ((void)0);
14818 args_setup_kw_parameters(ec, iseq, arg.vals, kw_len, arg.keys, klocals);
14819 }
14820 else {
14821 ((void)0);
14822 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
14823 }
14824 }
14825 else if (((iseq)->body)->param.flags.has_kwrest) {
14826 args_setup_kw_rest_parameter(keyword_hash, locals + ((iseq)->body)->param.keyword->rest_start, kw_flag);
14827 }
14828 else if (!RB_NIL_P(keyword_hash) && RHASH_SIZE(keyword_hash) > 0 && arg_setup_type == arg_setup_method) {
14829 argument_kw_error(ec, iseq, "unknown", rb_hash_keys(keyword_hash));
14830 }
14831 if (((iseq)->body)->param.flags.has_block) {
14832 if (((iseq)->body)->local_iseq == iseq) {
14833 }
14834 else {
14835 args_setup_block_parameter(ec, calling, locals + ((iseq)->body)->param.block_start);
14836 }
14837 }
14838 ec->cfp->sp = orig_sp;
14839 return opt_pc;
14840}
14841static void
14842raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc)
14843{
14844 VALUE at;
14845 if (iseq) {
14846 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL, ((VALUE)RUBY_Qnil) ,
14847 0 , ((VALUE)RUBY_Qfalse) ,
14848 ((iseq)->body)->iseq_encoded,
14849 ec->cfp->sp, 0, 0 );
14850 at = rb_ec_backtrace_object(ec);
14851 rb_backtrace_use_iseq_first_lineno_for_last_location(at);
14852 rb_vm_pop_frame(ec);
14853 }
14854 else {
14855 at = rb_ec_backtrace_object(ec);
14856 }
14857 rb_ivar_set(exc, idBt_locations, at);
14858 rb_exc_set_backtrace(exc, at);
14859 rb_exc_raise(exc);
14860}
14861static void
14862argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc)
14863{
14864 VALUE exc = rb_arity_error_new(miss_argc, min_argc, max_argc);
14865 if (((iseq)->body)->param.flags.has_kw) {
14866 const struct rb_iseq_param_keyword *const kw = ((iseq)->body)->param.keyword;
14867 const ID *keywords = kw->table;
14868 int req_key_num = kw->required_num;
14869 if (req_key_num > 0) {
14870 static const char required[] = "; required keywords";
14871 VALUE mesg = rb_attr_get(exc, idMesg);
14872 rb_str_resize(mesg, RSTRING_LEN(mesg)-1);
14873 rb_str_cat(mesg, required, sizeof(required) - 1 - (req_key_num == 1));
14874 ((__builtin_constant_p(":") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (":")));
14875 do {
14876 ((__builtin_constant_p(" ") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (" ")));
14877 rb_str_append(mesg, rb_id2str(*keywords++));
14878 ((__builtin_constant_p(",") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (",")));
14879 } while (--req_key_num);
14880 RSTRING_PTR(mesg)[RSTRING_LEN(mesg)-1] = ')';
14881 }
14882 }
14883 raise_argument_error(ec, iseq, exc);
14884}
14885static void
14886argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys)
14887{
14888 raise_argument_error(ec, iseq, rb_keyword_error_new(error, keys));
14889}
14890static inline void
14891vm_caller_setup_arg_splat(rb_control_frame_t *cfp, struct rb_calling_info *calling)
14892{
14893 int argc = calling->argc;
14894 VALUE *argv = cfp->sp - argc;
14895 VALUE ary = argv[argc-1];
14896 ;
14897 cfp->sp--;
14898 if (!RB_NIL_P(ary)) {
14899 const VALUE *ptr = rb_array_const_ptr_transient(ary);
14900 long len = rb_array_len(ary), i;
14901 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);
14902 for (i = 0; i < len; i++) {
14903 *cfp->sp++ = ptr[i];
14904 }
14905 calling->argc += i - 1;
14906 }
14907}
14908static inline void
14909vm_caller_setup_arg_kw(rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci)
14910{
14911 const VALUE *const passed_keywords = vm_ci_kwarg(ci)->keywords;
14912 const int kw_len = vm_ci_kwarg(ci)->keyword_len;
14913 const VALUE h = rb_hash_new_with_size(kw_len);
14914 VALUE *sp = cfp->sp;
14915 int i;
14916 for (i=0; i<kw_len; i++) {
14917 rb_hash_aset(h, passed_keywords[i], (sp - kw_len)[i]);
14918 }
14919 (sp-kw_len)[0] = h;
14920 cfp->sp -= kw_len - 1;
14921 calling->argc -= kw_len - 1;
14922 calling->kw_splat = 1;
14923}
14924static VALUE
14925vm_to_proc(VALUE proc)
14926{
14927 if ((__builtin_expect(!!(!rb_obj_is_proc(proc)), 0))) {
14928 VALUE b;
14929 const rb_callable_method_entry_t *me =
14930 rb_callable_method_entry_with_refinements(rb_class_of(proc), idTo_proc, ((void *)0));
14931 if (me) {
14932 b = rb_vm_call0(rb_current_execution_context(1), proc, idTo_proc, 0, ((void *)0), me, 0);
14933 }
14934 else {
14935 b = rb_check_convert_type_with_id(proc, RUBY_T_DATA, "Proc", idTo_proc);
14936 }
14937 if (RB_NIL_P(b) || !rb_obj_is_proc(b)) {
14938 rb_raise(rb_eTypeError,
14939 "wrong argument type %s (expected Proc)",
14940 rb_obj_classname(proc));
14941 }
14942 return b;
14943 }
14944 else {
14945 return proc;
14946 }
14947}
14948static VALUE
14949refine_sym_proc_call(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg)
14950{
14951 VALUE obj;
14952 ID mid;
14953 const rb_callable_method_entry_t *me = 0;
14954 rb_execution_context_t *ec;
14955 const VALUE symbol = RARRAY_AREF(callback_arg, 0);
14956 const VALUE refinements = RARRAY_AREF(callback_arg, 1);
14957 int kw_splat = rb_keyword_given_p();
14958 VALUE klass;
14959 if (argc-- < 1) {
14960 rb_raise(rb_eArgError, "no receiver given");
14961 }
14962 obj = *argv++;
14963 mid = rb_sym2id(symbol);
14964 for (klass = rb_class_of(obj); klass; klass = RCLASS_SUPER(klass)) {
14965 me = rb_callable_method_entry(klass, mid);
14966 if (me) {
14967 me = rb_resolve_refined_method_callable(refinements, me);
14968 if (me) break;
14969 }
14970 }
14971 ec = rb_current_execution_context(1);
14972 if (!RB_NIL_P(blockarg)) {
14973 vm_passed_block_handler_set(ec, blockarg);
14974 }
14975 if (!me) {
14976 return method_missing(ec, obj, mid, argc, argv, MISSING_NOENTRY, kw_splat);
14977 }
14978 return rb_vm_call0(ec, obj, mid, argc, argv, me, kw_splat);
14979}
14980static VALUE
14981vm_caller_setup_arg_block(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
14982 const struct rb_callinfo *ci, const rb_iseq_t *blockiseq, const int is_super)
14983{
14984 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_BLOCKARG_bit)) {
14985 VALUE block_code = *(--reg_cfp->sp);
14986 if (RB_NIL_P(block_code)) {
14987 return 0;
14988 }
14989 else if (block_code == rb_block_param_proxy) {
14990 ((void)0);
14991 VALUE handler = VM_CF_BLOCK_HANDLER(reg_cfp);
14992 reg_cfp->block_code = (const void *) handler;
14993 return handler;
14994 }
14995 else if (RB_SYMBOL_P(block_code) && rb_method_basic_definition_p(rb_cSymbol, idTo_proc)) {
14996 const rb_cref_t *cref = vm_env_cref(reg_cfp->ep);
14997 if (cref && !RB_NIL_P(cref->refinements)) {
14998 VALUE ref = cref->refinements;
14999 VALUE func = rb_hash_lookup(ref, block_code);
15000 if (RB_NIL_P(func)) {
15001 VALUE callback_arg = rb_ary_hidden_new(2);
15002 rb_ary_push(callback_arg, block_code);
15003 rb_ary_push(callback_arg, ref);
15004 RB_OBJ_FREEZE_RAW(callback_arg);
15005 func = rb_func_lambda_new(refine_sym_proc_call, callback_arg, 1, (-1));
15006 rb_hash_aset(ref, block_code, func);
15007 }
15008 block_code = func;
15009 }
15010 return block_code;
15011 }
15012 else {
15013 return vm_to_proc(block_code);
15014 }
15015 }
15016 else if (blockiseq != ((void *)0)) {
15017 struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(reg_cfp);
15018 captured->code.iseq = blockiseq;
15019 return VM_BH_FROM_ISEQ_BLOCK(captured);
15020 }
15021 else {
15022 if (is_super) {
15023 return ((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]);
15024 }
15025 else {
15026 return 0;
15027 }
15028 }
15029}
15030static 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);
15031__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);
15032static 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);
15033static VALUE vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
15034static VALUE vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15035static VALUE vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15036static inline VALUE vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15037static vm_call_handler vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size);
15038static VALUE
15039vm_call_iseq_setup_tailcall_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15040{
15041 ((void)0);
15042 return vm_call_iseq_setup_tailcall(ec, cfp, calling, 0);
15043}
15044static VALUE
15045vm_call_iseq_setup_normal_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15046{
15047 ((void)0);
15048 const struct rb_callcache *cc = calling->cc;
15049 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15050 int param = ((iseq)->body)->param.size;
15051 int local = ((iseq)->body)->local_table_size;
15052 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15053}
15054static _Bool
15055rb_simple_iseq_p(const rb_iseq_t *iseq)
15056{
15057 return ((iseq)->body)->param.flags.has_opt == 0 &&
15058 ((iseq)->body)->param.flags.has_rest == 0 &&
15059 ((iseq)->body)->param.flags.has_post == 0 &&
15060 ((iseq)->body)->param.flags.has_kw == 0 &&
15061 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15062 ((iseq)->body)->param.flags.accepts_no_kwarg == 0 &&
15063 ((iseq)->body)->param.flags.has_block == 0;
15064}static inline
15065__attribute__ ((__visibility__("default"))) _Bool
15066rb_iseq_only_optparam_p(const rb_iseq_t *iseq)
15067{
15068 return ((iseq)->body)->param.flags.has_opt == 1 &&
15069 ((iseq)->body)->param.flags.has_rest == 0 &&
15070 ((iseq)->body)->param.flags.has_post == 0 &&
15071 ((iseq)->body)->param.flags.has_kw == 0 &&
15072 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15073 ((iseq)->body)->param.flags.accepts_no_kwarg == 0 &&
15074 ((iseq)->body)->param.flags.has_block == 0;
15075}static inline
15076__attribute__ ((__visibility__("default"))) _Bool
15077rb_iseq_only_kwparam_p(const rb_iseq_t *iseq)
15078{
15079 return ((iseq)->body)->param.flags.has_opt == 0 &&
15080 ((iseq)->body)->param.flags.has_rest == 0 &&
15081 ((iseq)->body)->param.flags.has_post == 0 &&
15082 ((iseq)->body)->param.flags.has_kw == 1 &&
15083 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15084 ((iseq)->body)->param.flags.has_block == 0;
15085}
15086static _Bool
15087rb_splat_or_kwargs_p(const struct rb_callinfo *__restrict__ ci)
15088{
15089 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)));
15090}
15091static inline void
15092CALLER_SETUP_ARG(struct rb_control_frame_struct *__restrict__ cfp,
15093 struct rb_calling_info *__restrict__ calling,
15094 const struct rb_callinfo *__restrict__ ci)
15095{
15096 if ((__builtin_expect(!!((vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))), 0))) {
15097 VALUE final_hash;
15098 vm_caller_setup_arg_splat(cfp, calling);
15099 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit))) &&
15100 calling->argc > 0 &&
15101 RB_TYPE_P((final_hash = *(cfp->sp - 1)), RUBY_T_HASH) &&
15102 (((struct RHash *)final_hash)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
15103 *(cfp->sp - 1) = rb_hash_dup(final_hash);
15104 calling->kw_splat = 1;
15105 }
15106 }
15107 if ((__builtin_expect(!!((vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)))), 0))) {
15108 if ((vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit))) {
15109 vm_caller_setup_arg_kw(cfp, calling, ci);
15110 }
15111 else {
15112 VALUE keyword_hash = cfp->sp[-1];
15113 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
15114 cfp->sp[-1] = rb_hash_dup(rb_to_hash_type(keyword_hash));
15115 }
15116 else if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
15117 cfp->sp[-1] = rb_hash_dup(keyword_hash);
15118 }
15119 }
15120 }
15121}
15122static inline void
15123CALLER_REMOVE_EMPTY_KW_SPLAT(struct rb_control_frame_struct *__restrict__ cfp,
15124 struct rb_calling_info *__restrict__ calling,
15125 const struct rb_callinfo *__restrict__ ci)
15126{
15127 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15128 if (RHASH_EMPTY_P(cfp->sp[-1])) {
15129 cfp->sp--;
15130 calling->argc--;
15131 calling->kw_splat = 0;
15132 }
15133 }
15134}
15135static VALUE
15136vm_call_iseq_setup_normal_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15137 struct rb_calling_info *calling)
15138{
15139 const struct rb_callcache *cc = calling->cc;
15140 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15141 const int lead_num = ((iseq)->body)->param.lead_num;
15142 const int opt = calling->argc - lead_num;
15143 const int opt_num = ((iseq)->body)->param.opt_num;
15144 const int opt_pc = (int)((iseq)->body)->param.opt_table[opt];
15145 const int param = ((iseq)->body)->param.size;
15146 const int local = ((iseq)->body)->local_table_size;
15147 const int delta = opt_num - opt;
15148 ((void)0);
15149 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param - delta, local);
15150}
15151static VALUE
15152vm_call_iseq_setup_tailcall_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15153 struct rb_calling_info *calling)
15154{
15155 const struct rb_callcache *cc = calling->cc;
15156 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15157 const int lead_num = ((iseq)->body)->param.lead_num;
15158 const int opt = calling->argc - lead_num;
15159 const int opt_pc = (int)((iseq)->body)->param.opt_table[opt];
15160 ((void)0);
15161 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
15162}
15163static void
15164args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
15165 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
15166 VALUE *const locals);
15167static VALUE
15168vm_call_iseq_setup_kwparm_kwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15169 struct rb_calling_info *calling)
15170{
15171 const struct rb_callinfo *ci = calling->ci;
15172 const struct rb_callcache *cc = calling->cc;
15173 ((void)0);
15174 ((void)0);
15175 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15176 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15177 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
15178 const int ci_kw_len = kw_arg->keyword_len;
15179 const VALUE * const ci_keywords = kw_arg->keywords;
15180 VALUE *argv = cfp->sp - calling->argc;
15181 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15182 const int lead_num = ((iseq)->body)->param.lead_num;
15183 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
15184 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
15185 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
15186 int param = ((iseq)->body)->param.size;
15187 int local = ((iseq)->body)->local_table_size;
15188 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15189}
15190static VALUE
15191vm_call_iseq_setup_kwparm_nokwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15192 struct rb_calling_info *calling)
15193{
15194 const struct rb_callinfo *__attribute__ ((__unused__)) ci = calling->ci;
15195 const struct rb_callcache *cc = calling->cc;
15196 ((void)0);
15197 ((void)0);
15198 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15199 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15200 VALUE * const argv = cfp->sp - calling->argc;
15201 VALUE * const klocals = argv + kw_param->bits_start - kw_param->num;
15202 int i;
15203 for (i=0; i<kw_param->num; i++) {
15204 klocals[i] = kw_param->default_values[i];
15205 }
15206 klocals[i] = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
15207 int param = ((iseq)->body)->param.size;
15208 int local = ((iseq)->body)->local_table_size;
15209 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15210}
15211static inline int
15212vm_callee_setup_arg(rb_execution_context_t *ec, struct rb_calling_info *calling,
15213 const rb_iseq_t *iseq, VALUE *argv, int param_size, int local_size)
15214{
15215 const struct rb_callinfo *ci = calling->ci;
15216 const struct rb_callcache *cc = calling->cc;
15217 _Bool cacheable_ci = vm_ci_markable(ci);
15218 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit))), 1))) {
15219 if ((__builtin_expect(!!(rb_simple_iseq_p(iseq)), 1))) {
15220 rb_control_frame_t *cfp = ec->cfp;
15221 CALLER_SETUP_ARG(cfp, calling, ci);
15222 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15223 if (calling->argc != ((iseq)->body)->param.lead_num) {
15224 argument_arity_error(ec, iseq, calling->argc, ((iseq)->body)->param.lead_num, ((iseq)->body)->param.lead_num);
15225 }
15226 ((void)0);
15227 ((void)0);
15228 CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size), cacheable_ci && vm_call_iseq_optimizable_p(ci, cc));
15229 return 0;
15230 }
15231 else if (rb_iseq_only_optparam_p(iseq)) {
15232 rb_control_frame_t *cfp = ec->cfp;
15233 CALLER_SETUP_ARG(cfp, calling, ci);
15234 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15235 const int lead_num = ((iseq)->body)->param.lead_num;
15236 const int opt_num = ((iseq)->body)->param.opt_num;
15237 const int argc = calling->argc;
15238 const int opt = argc - lead_num;
15239 if (opt < 0 || opt > opt_num) {
15240 argument_arity_error(ec, iseq, argc, lead_num, lead_num + opt_num);
15241 }
15242 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
15243 CC_SET_FASTPATH(cc, vm_call_iseq_setup_normal_opt_start,
15244 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
15245 cacheable_ci && vm_call_cacheable(ci, cc));
15246 }
15247 else {
15248 CC_SET_FASTPATH(cc, vm_call_iseq_setup_tailcall_opt_start,
15249 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
15250 cacheable_ci && vm_call_cacheable(ci, cc));
15251 }
15252 ((void)0);
15253 for (int i=argc; i<lead_num + opt_num; i++) {
15254 argv[i] = ((VALUE)RUBY_Qnil);
15255 }
15256 return (int)((iseq)->body)->param.opt_table[opt];
15257 }
15258 else if (rb_iseq_only_kwparam_p(iseq) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))) {
15259 const int lead_num = ((iseq)->body)->param.lead_num;
15260 const int argc = calling->argc;
15261 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15262 if (vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) {
15263 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
15264 if (argc - kw_arg->keyword_len == lead_num) {
15265 const int ci_kw_len = kw_arg->keyword_len;
15266 const VALUE * const ci_keywords = kw_arg->keywords;
15267 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
15268 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
15269 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15270 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
15271 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_kwarg,
15272 cacheable_ci && vm_call_cacheable(ci, cc));
15273 return 0;
15274 }
15275 }
15276 else if (argc == lead_num) {
15277 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15278 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
15279 if (klocals[kw_param->num] == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0))) {
15280 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_nokwarg,
15281 cacheable_ci && vm_call_cacheable(ci, cc));
15282 }
15283 return 0;
15284 }
15285 }
15286 }
15287 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_method);
15288}
15289COLDFUNC static VALUE
15290vm_call_iseq_setup(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
15291 ((void)0);
15292 const struct rb_callcache *cc = calling->cc;
15293 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15294 const int param_size = ((iseq)->body)->param.size;
15295 const int local_size = ((iseq)->body)->local_table_size;
15296 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);
15297 return vm_call_iseq_setup_2(ec, cfp, calling, opt_pc, param_size, local_size);
15298}
15299COLDFUNC static VALUE
15300vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
15301 int opt_pc, int param_size, int local_size) {
15302 const struct rb_callinfo *ci = calling->ci;
15303 const struct rb_callcache *cc = calling->cc;
15304 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
15305 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param_size, local_size);
15306 }
15307 else {
15308 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
15309 }
15310}
15311static inline VALUE
15312vm_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,
15313 int opt_pc, int param_size, int local_size)
15314{
15315 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15316 VALUE *argv = cfp->sp - calling->argc;
15317 VALUE *sp = argv + param_size;
15318 cfp->sp = argv - 1 ;
15319 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL, calling->recv,
15320 calling->block_handler, (VALUE)me,
15321 ((iseq)->body)->iseq_encoded + opt_pc, sp,
15322 local_size - param_size,
15323 ((iseq)->body)->stack_max);
15324 return ((VALUE)RUBY_Qundef);
15325}
15326COLDFUNC static VALUE
15327vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc) {
15328 const struct rb_callcache *cc = calling->cc;
15329 unsigned int i;
15330 VALUE *argv = cfp->sp - calling->argc;
15331 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15332 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15333 VALUE *src_argv = argv;
15334 VALUE *sp_orig, *sp;
15335 VALUE finish_flag = VM_FRAME_FINISHED_P(cfp) ? VM_FRAME_FLAG_FINISH : 0;
15336 if (VM_BH_FROM_CFP_P(calling->block_handler, cfp)) {
15337 struct rb_captured_block *dst_captured = VM_CFP_TO_CAPTURED_BLOCK(((cfp)+1));
15338 const struct rb_captured_block *src_captured = VM_BH_TO_CAPT_BLOCK(calling->block_handler);
15339 dst_captured->code.val = src_captured->code.val;
15340 if (VM_BH_ISEQ_BLOCK_P(calling->block_handler)) {
15341 calling->block_handler = VM_BH_FROM_ISEQ_BLOCK(dst_captured);
15342 }
15343 else {
15344 calling->block_handler = VM_BH_FROM_IFUNC_BLOCK(dst_captured);
15345 }
15346 }
15347 vm_pop_frame(ec, cfp, cfp->ep);
15348 cfp = ec->cfp;
15349 sp_orig = sp = cfp->sp;
15350 sp[0] = calling->recv;
15351 sp++;
15352 for (i=0; i < ((iseq)->body)->param.size; i++) {
15353 *sp++ = src_argv[i];
15354 }
15355 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL | finish_flag,
15356 calling->recv, calling->block_handler, (VALUE)me,
15357 ((iseq)->body)->iseq_encoded + opt_pc, sp,
15358 ((iseq)->body)->local_table_size - ((iseq)->body)->param.size,
15359 ((iseq)->body)->stack_max);
15360 cfp->sp = sp_orig;
15361 return ((VALUE)RUBY_Qundef);
15362}
15363static void
15364ractor_unsafe_check(void)
15365{
15366 if (!rb_ractor_main_p()) {
15367 rb_raise(rb_eRactorUnsafeError, "ractor unsafe method called from not main ractor");
15368 }
15369}
15370static VALUE
15371call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15372{
15373 ractor_unsafe_check();
15374 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15375 return (*f)(recv, rb_ary_new_from_values(argc, argv));
15376}
15377static VALUE
15378call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15379{
15380 ractor_unsafe_check();
15381 VALUE(*f)(int, const VALUE *, VALUE) = (VALUE(*)(int, const VALUE *, VALUE))func;
15382 return (*f)(argc, argv, recv);
15383}
15384static VALUE
15385call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15386{
15387 ractor_unsafe_check();
15388 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15389 return (*f)(recv);
15390}
15391static VALUE
15392call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15393{
15394 ractor_unsafe_check();
15395 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15396 return (*f)(recv, argv[0]);
15397}
15398static VALUE
15399call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15400{
15401 ractor_unsafe_check();
15402 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15403 return (*f)(recv, argv[0], argv[1]);
15404}
15405static VALUE
15406call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15407{
15408 ractor_unsafe_check();
15409 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15410 return (*f)(recv, argv[0], argv[1], argv[2]);
15411}
15412static VALUE
15413call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15414{
15415 ractor_unsafe_check();
15416 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15417 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15418}
15419static VALUE
15420call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15421{
15422 ractor_unsafe_check();
15423 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15424 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15425}
15426static VALUE
15427call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15428{
15429 ractor_unsafe_check();
15430 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15431 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15432}
15433static VALUE
15434call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15435{
15436 ractor_unsafe_check();
15437 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15438 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15439}
15440static VALUE
15441call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15442{
15443 ractor_unsafe_check();
15444 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15445 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15446}
15447static VALUE
15448call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15449{
15450 ractor_unsafe_check();
15451 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15452 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15453}
15454static VALUE
15455call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15456{
15457 ractor_unsafe_check();
15458 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;
15459 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15460}
15461static VALUE
15462call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15463{
15464 ractor_unsafe_check();
15465 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;
15466 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]);
15467}
15468static VALUE
15469call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15470{
15471 ractor_unsafe_check();
15472 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;
15473 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]);
15474}
15475static VALUE
15476call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15477{
15478 ractor_unsafe_check();
15479 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;
15480 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]);
15481}
15482static VALUE
15483call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15484{
15485 ractor_unsafe_check();
15486 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;
15487 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]);
15488}
15489static VALUE
15490call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15491{
15492 ractor_unsafe_check();
15493 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;
15494 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]);
15495}
15496static VALUE
15497ractor_safe_call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15498{
15499 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15500 return (*f)(recv, rb_ary_new_from_values(argc, argv));
15501}
15502static VALUE
15503ractor_safe_call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15504{
15505 VALUE(*f)(int, const VALUE *, VALUE) = (VALUE(*)(int, const VALUE *, VALUE))func;
15506 return (*f)(argc, argv, recv);
15507}
15508static VALUE
15509ractor_safe_call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15510{
15511 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15512 return (*f)(recv);
15513}
15514static VALUE
15515ractor_safe_call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15516{
15517 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15518 return (*f)(recv, argv[0]);
15519}
15520static VALUE
15521ractor_safe_call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15522{
15523 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15524 return (*f)(recv, argv[0], argv[1]);
15525}
15526static VALUE
15527ractor_safe_call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15528{
15529 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15530 return (*f)(recv, argv[0], argv[1], argv[2]);
15531}
15532static VALUE
15533ractor_safe_call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15534{
15535 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15536 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15537}
15538static VALUE
15539ractor_safe_call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15540{
15541 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15542 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15543}
15544static VALUE
15545ractor_safe_call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15546{
15547 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15548 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15549}
15550static VALUE
15551ractor_safe_call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15552{
15553 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15554 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15555}
15556static VALUE
15557ractor_safe_call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15558{
15559 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15560 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15561}
15562static VALUE
15563ractor_safe_call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15564{
15565 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15566 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15567}
15568static VALUE
15569ractor_safe_call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15570{
15571 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;
15572 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15573}
15574static VALUE
15575ractor_safe_call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15576{
15577 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;
15578 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]);
15579}
15580static VALUE
15581ractor_safe_call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15582{
15583 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;
15584 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]);
15585}
15586static VALUE
15587ractor_safe_call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15588{
15589 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;
15590 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]);
15591}
15592static VALUE
15593ractor_safe_call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15594{
15595 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;
15596 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]);
15597}
15598static VALUE
15599ractor_safe_call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15600{
15601 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;
15602 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]);
15603}
15604static inline int
15605vm_cfp_consistent_p(rb_execution_context_t *ec, const rb_control_frame_t *reg_cfp)
15606{
15607 const int ov_flags = RAISED_STACKOVERFLOW;
15608 if ((__builtin_expect(!!(reg_cfp == ec->cfp + 1), 1))) return 1;
15609 if ((((ec)->raised_flag & (ov_flags)) != 0)) {
15610 ((ec)->raised_flag &= ~(ov_flags));
15611 return 1;
15612 }
15613 return 0;
15614}
15615static inline
15616const rb_method_cfunc_t *
15617vm_method_cfunc_entry(const rb_callable_method_entry_t *me)
15618{
15619 return __extension__({
15620 ;
15621 ; __typeof__(&(me->def)->body.cfunc) unaligned_member_access_result = (&(me->def)->body.cfunc);
15622 ; unaligned_member_access_result; });
15623}
15624static VALUE
15625vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15626{
15627 ((void)0);
15628 const struct rb_callinfo *ci = calling->ci;
15629 const struct rb_callcache *cc = calling->cc;
15630 VALUE val;
15631 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15632 const rb_method_cfunc_t *cfunc = vm_method_cfunc_entry(me);
15633 int len = cfunc->argc;
15634 VALUE recv = calling->recv;
15635 VALUE block_handler = calling->block_handler;
15636 VALUE frame_type = VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL;
15637 int argc = calling->argc;
15638 int orig_argc = argc;
15639 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15640 frame_type |= VM_FRAME_FLAG_CFRAME_KW;
15641 }
15642 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);
15643 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);
15644 vm_push_frame(ec, ((void *)0), frame_type, recv,
15645 block_handler, (VALUE)me,
15646 0, ec->cfp->sp, 0, 0);
15647 if (len >= 0) rb_check_arity(argc, len, len);
15648 reg_cfp->sp -= orig_argc + 1;
15649 val = (*cfunc->invoker)(recv, argc, reg_cfp->sp + 1, cfunc->func);
15650 ((__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)));
15651 rb_vm_pop_frame(ec);
15652 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);
15653 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);
15654 return val;
15655}
15656static VALUE
15657vm_call_cfunc(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15658{
15659 const struct rb_callinfo *ci = calling->ci;
15660 ((void)0);
15661 CALLER_SETUP_ARG(reg_cfp, calling, ci);
15662 CALLER_REMOVE_EMPTY_KW_SPLAT(reg_cfp, calling, ci);
15663 CC_SET_FASTPATH(calling->cc, vm_call_cfunc_with_frame, !rb_splat_or_kwargs_p(ci) && !calling->kw_splat);
15664 return vm_call_cfunc_with_frame(ec, reg_cfp, calling);
15665}
15666static VALUE
15667vm_call_ivar(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15668{
15669 const struct rb_callcache *cc = calling->cc;
15670 ((void)0);
15671 cfp->sp -= 1;
15672 VALUE ivar = vm_getivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, ((void *)0), ((void *)0), cc, 1);
15673 return ivar;
15674}
15675static VALUE
15676vm_call_attrset_direct(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_callcache *cc, VALUE obj)
15677{
15678 ((void)0);
15679 VALUE val = *(cfp->sp - 1);
15680 cfp->sp -= 2;
15681 attr_index_t index = vm_cc_attr_index(cc);
15682 shape_id_t dest_shape_id = vm_cc_attr_index_dest_shape_id(cc);
15683 ID id = vm_cc_cme(cc)->def->body.attr.id;
15684 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
15685 VALUE res = vm_setivar(obj, id, val, dest_shape_id, index);
15686 if (RB_UNDEF_P(res)) {
15687 switch (RB_BUILTIN_TYPE(obj)) {
15688 case RUBY_T_OBJECT:
15689 case RUBY_T_CLASS:
15690 case RUBY_T_MODULE:
15691 break;
15692 default:
15693 {
15694 res = vm_setivar_default(obj, id, val, dest_shape_id, index);
15695 if (!RB_UNDEF_P(res)) {
15696 return res;
15697 }
15698 }
15699 }
15700 res = vm_setivar_slowpath_attr(obj, id, val, cc);
15701 }
15702 return res;
15703}
15704static VALUE
15705vm_call_attrset(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15706{
15707 return vm_call_attrset_direct(ec, cfp, calling->cc, calling->recv);
15708}static inline
15709_Bool
15710rb_vm_call_ivar_attrset_p(const vm_call_handler ch)
15711{
15712 return (ch == vm_call_ivar || ch == vm_call_attrset);
15713}
15714static inline VALUE
15715vm_call_bmethod_body(rb_execution_context_t *ec, struct rb_calling_info *calling, const VALUE *argv)
15716{
15717 rb_proc_t *proc;
15718 VALUE val;
15719 const struct rb_callcache *cc = calling->cc;
15720 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15721 VALUE procv = cme->def->body.bmethod.proc;
15722 if (!RB_FL_TEST_RAW((procv), RUBY_FL_SHAREABLE) &&
15723 cme->def->body.bmethod.defined_ractor != rb_ractor_self(rb_ec_ractor_ptr(ec))) {
15724 rb_raise(rb_eRuntimeError, "defined with an un-shareable Proc in a different Ractor");
15725 }
15726 (((proc)) = (rb_proc_t*)((struct RData *)(((procv))))->data);
15727 val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat, calling->block_handler, vm_cc_cme(cc));
15728 return val;
15729}
15730static VALUE
15731vm_call_bmethod(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15732{
15733 ((void)0);
15734 VALUE *argv;
15735 int argc;
15736 const struct rb_callinfo *ci = calling->ci;
15737 CALLER_SETUP_ARG(cfp, calling, ci);
15738 argc = calling->argc;
15739 argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (argc))));
15740 ruby_nonempty_memcpy((argv), (cfp->sp - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
15741 cfp->sp += - argc - 1;
15742 return vm_call_bmethod_body(ec, calling, argv);
15743}static inline
15744__attribute__ ((__visibility__("default"))) VALUE
15745rb_find_defined_class_by_owner(VALUE current_class, VALUE target_owner)
15746{
15747 VALUE klass = current_class;
15748 if (RB_TYPE_P(klass, RUBY_T_ICLASS) && RB_FL_TEST(klass, ((VALUE)RUBY_FL_USER0)) &&
15749 RB_TYPE_P(RBASIC_CLASS(klass), RUBY_T_CLASS)) {
15750 klass = RBASIC_CLASS(klass);
15751 }
15752 while (RB_TEST(klass)) {
15753 VALUE owner = RB_TYPE_P(klass, RUBY_T_ICLASS) ? RBASIC_CLASS(klass) : klass;
15754 if (owner == target_owner) {
15755 return klass;
15756 }
15757 klass = RCLASS_SUPER(klass);
15758 }
15759 return current_class;
15760}
15761static const rb_callable_method_entry_t *
15762aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15763{
15764 const rb_method_entry_t *orig_me = me->def->body.alias.original_me;
15765 const rb_callable_method_entry_t *cme;
15766 if (orig_me->defined_class == 0) {
15767 VALUE defined_class = rb_find_defined_class_by_owner(me->defined_class, orig_me->owner);
15768 ((void)0);
15769 cme = rb_method_entry_complement_defined_class(orig_me, me->called_id, defined_class);
15770 if (me->def->alias_count + me->def->complemented_count == 0) {
15771 rb_obj_write((VALUE)(me), __extension__({
15772 ;
15773 ; __typeof__((VALUE *)(&me->def->body.alias.original_me)) unaligned_member_access_result = ((VALUE *)(&me->def->body.alias.original_me));
15774 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.2.1/vm_insnhelper.c", 3417);
15775 }
15776 else {
15777 rb_method_definition_t *def =
15778 rb_method_definition_create(VM_METHOD_TYPE_ALIAS, me->def->original_id);
15779 rb_method_definition_set((rb_method_entry_t *)me, def, (void *)cme);
15780 }
15781 }
15782 else {
15783 cme = (const rb_callable_method_entry_t *)orig_me;
15784 }
15785 ((void)0);
15786 return cme;
15787}static inline
15788const rb_callable_method_entry_t *
15789rb_aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15790{
15791 return aliased_callable_method_entry(me);
15792}
15793static VALUE
15794vm_call_alias(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15795{
15796 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE) | ((VALUE)RUBY_FL_EXIVAR), .klass = ((VALUE)RUBY_Qundef), .cme_ = aliased_callable_method_entry(vm_cc_cme(calling->cc)), .call_ = vm_call_general, .aux_ = {{0}}, };
15797 return vm_call_method_each_type(ec, cfp, calling);
15798}
15799static enum method_missing_reason
15800ci_missing_reason(const struct rb_callinfo *ci)
15801{
15802 enum method_missing_reason stat = MISSING_NOENTRY;
15803 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
15804 if (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) stat |= MISSING_FCALL;
15805 if (vm_ci_flag(ci) & (0x01 << VM_CALL_SUPER_bit)) stat |= MISSING_SUPER;
15806 return stat;
15807}
15808static VALUE vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
15809static VALUE
15810vm_call_symbol(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15811 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE symbol, int flags)
15812{
15813 ((__builtin_expect(!!(!!(calling->argc >= 0)), 1)) ? ((void)0) : __builtin_unreachable());
15814 enum method_missing_reason missing_reason = MISSING_NOENTRY;
15815 int argc = calling->argc;
15816 VALUE recv = calling->recv;
15817 VALUE klass = rb_class_of(recv);
15818 ID mid = rb_check_id(&symbol);
15819 flags |= (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15820 if ((__builtin_expect(!!(! mid), 0))) {
15821 mid = idMethodMissing;
15822 missing_reason = ci_missing_reason(ci);
15823 ec->method_missing_reason = missing_reason;
15824 int i = argc;
15825 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);
15826 (((reg_cfp)->sp) += (((1))));
15827 ((__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))));
15828 argc = ++calling->argc;
15829 if (rb_method_basic_definition_p(klass, idMethodMissing)) {
15830 (*(((((reg_cfp)->sp)))-(i)-1)) = symbol;
15831 int priv = vm_ci_flag(ci) & ((0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_VCALL_bit));
15832 const VALUE *argv = (((((reg_cfp)->sp)))-(argc));
15833 VALUE exc = rb_make_no_method_exception(
15834 rb_eNoMethodError, 0, recv, argc, argv, priv);
15835 rb_exc_raise(exc);
15836 }
15837 else {
15838 (*(((((reg_cfp)->sp)))-(i)-1)) = rb_str_intern(symbol);
15839 }
15840 }
15841 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), };
15842 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE) | ((VALUE)RUBY_FL_EXIVAR), .klass = klass, .cme_ = rb_callable_method_entry_with_refinements(klass, mid, ((void *)0)), .call_ = vm_call_general, .aux_ = { .method_missing_reason = missing_reason }, };
15843 if (flags & (0x01 << VM_CALL_FCALL_bit)) {
15844 return vm_call_method(ec, reg_cfp, calling);
15845 }
15846 const struct rb_callcache *cc = calling->cc;
15847 ((void)0);
15848 if (vm_cc_cme(cc) != ((void *)0)) {
15849 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
15850 case METHOD_VISI_PUBLIC:
15851 return vm_call_method_each_type(ec, reg_cfp, calling);
15852 case METHOD_VISI_PRIVATE:
15853 vm_cc_method_missing_reason_set(cc, MISSING_PRIVATE);
15854 break;
15855 case METHOD_VISI_PROTECTED:
15856 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
15857 break;
15858 default:
15859 __builtin_unreachable();
15860 }
15861 return vm_call_method_missing(ec, reg_cfp, calling);
15862 }
15863 return vm_call_method_nome(ec, reg_cfp, calling);
15864}
15865static VALUE
15866vm_call_opt_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15867{
15868 ((void)0);
15869 int i;
15870 VALUE sym;
15871 CALLER_SETUP_ARG(reg_cfp, calling, calling->ci);
15872 i = calling->argc - 1;
15873 if (calling->argc == 0) {
15874 rb_raise(rb_eArgError, "no method name given");
15875 }
15876 else {
15877 sym = (*(((((reg_cfp)->sp)))-(i)-1));
15878 if (i > 0) {
15879 ((__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))));
15880 }
15881 calling->argc -= 1;
15882 (((reg_cfp)->sp) -= (((1))));
15883 return vm_call_symbol(ec, reg_cfp, calling, calling->ci, sym, (0x01 << VM_CALL_FCALL_bit));
15884 }
15885}
15886static VALUE
15887vm_call_method_missing_body(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling,
15888 const struct rb_callinfo *orig_ci, enum method_missing_reason reason)
15889{
15890 ((void)0);
15891 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
15892 unsigned int argc;
15893 CALLER_SETUP_ARG(reg_cfp, calling, orig_ci);
15894 argc = calling->argc + 1;
15895 unsigned int flag = (0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15896 calling->argc = argc;
15897 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);
15898 ;
15899 if (argc > 1) {
15900 ((__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))));
15901 }
15902 argv[0] = rb_id2sym(vm_ci_mid(orig_ci));
15903 (((reg_cfp)->sp) += (((1))));
15904 ec->method_missing_reason = reason;
15905 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), };
15906 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE) | ((VALUE)RUBY_FL_EXIVAR), .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 }}, };
15907 return vm_call_method(ec, reg_cfp, calling);
15908}
15909static VALUE
15910vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15911{
15912 return vm_call_method_missing_body(ec, reg_cfp, calling, calling->ci, vm_cc_cmethod_missing_reason(calling->cc));
15913}
15914static const rb_callable_method_entry_t *refined_method_callable_without_refinement(const rb_callable_method_entry_t *me);
15915static VALUE
15916vm_call_zsuper(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, VALUE klass)
15917{
15918 klass = RCLASS_SUPER(klass);
15919 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, vm_ci_mid(calling->ci)) : ((void *)0);
15920 if (cme == ((void *)0)) {
15921 return vm_call_method_nome(ec, cfp, calling);
15922 }
15923 if (cme->def->type == VM_METHOD_TYPE_REFINED &&
15924 cme->def->body.refined.orig_me) {
15925 cme = refined_method_callable_without_refinement(cme);
15926 }
15927 calling->cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE) | ((VALUE)RUBY_FL_EXIVAR), .klass = ((VALUE)RUBY_Qundef), .cme_ = cme, .call_ = vm_call_general, .aux_ = {{ 0 }}, };
15928 return vm_call_method_each_type(ec, cfp, calling);
15929}
15930static inline VALUE
15931find_refinement(VALUE refinements, VALUE klass)
15932{
15933 if (RB_NIL_P(refinements)) {
15934 return ((VALUE)RUBY_Qnil);
15935 }
15936 return rb_hash_lookup(refinements, klass);
15937}
15938__attribute__((__pure__)) static rb_control_frame_t * current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
15939static rb_control_frame_t *
15940current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp)
15941{
15942 rb_control_frame_t *top_cfp = cfp;
15943 if (cfp->iseq && ((cfp->iseq)->body)->type == ISEQ_TYPE_BLOCK) {
15944 const rb_iseq_t *local_iseq = ((cfp->iseq)->body)->local_iseq;
15945 do {
15946 cfp = ((cfp)+1);
15947 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
15948 return top_cfp;
15949 }
15950 } while (cfp->iseq != local_iseq);
15951 }
15952 return cfp;
15953}
15954static const rb_callable_method_entry_t *
15955refined_method_callable_without_refinement(const rb_callable_method_entry_t *me)
15956{
15957 const rb_method_entry_t *orig_me = me->def->body.refined.orig_me;
15958 const rb_callable_method_entry_t *cme;
15959 if (orig_me->defined_class == 0) {
15960 cme = ((void *)0);
15961 rb_notimplement();
15962 }
15963 else {
15964 cme = (const rb_callable_method_entry_t *)orig_me;
15965 }
15966 ((void)0);
15967 if ((!(cme) || !(cme)->def || (cme)->def->type == VM_METHOD_TYPE_UNDEF)) {
15968 cme = ((void *)0);
15969 }
15970 return cme;
15971}
15972static const rb_callable_method_entry_t *
15973search_refined_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15974{
15975 ID mid = vm_ci_mid(calling->ci);
15976 const rb_cref_t *cref = vm_get_cref(cfp->ep);
15977 const struct rb_callcache * const cc = calling->cc;
15978 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15979 for (; cref; cref = CREF_NEXT(cref)) {
15980 const VALUE refinement = find_refinement(CREF_REFINEMENTS(cref), vm_cc_cme(cc)->owner);
15981 if (RB_NIL_P(refinement)) continue;
15982 const rb_callable_method_entry_t *const ref_me =
15983 rb_callable_method_entry(refinement, mid);
15984 if (ref_me) {
15985 if (vm_cc_call(cc) == vm_call_super_method) {
15986 const rb_control_frame_t *top_cfp = current_method_entry(ec, cfp);
15987 const rb_callable_method_entry_t *top_me = rb_vm_frame_method_entry(top_cfp);
15988 if (top_me && rb_method_definition_eq(ref_me->def, top_me->def)) {
15989 continue;
15990 }
15991 }
15992 if (cme->def->type != VM_METHOD_TYPE_REFINED ||
15993 cme->def != ref_me->def) {
15994 cme = ref_me;
15995 }
15996 if (ref_me->def->type != VM_METHOD_TYPE_REFINED) {
15997 return cme;
15998 }
15999 }
16000 else {
16001 return ((void *)0);
16002 }
16003 }
16004 if (vm_cc_cme(cc)->def->body.refined.orig_me) {
16005 return refined_method_callable_without_refinement(vm_cc_cme(cc));
16006 }
16007 else {
16008 VALUE klass = RCLASS_SUPER(vm_cc_cme(cc)->defined_class);
16009 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, mid) : ((void *)0);
16010 return cme;
16011 }
16012}
16013static VALUE
16014vm_call_refined(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16015{
16016 struct rb_callcache *ref_cc = &(struct rb_callcache) { .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE) | ((VALUE)RUBY_FL_EXIVAR), .klass = ((VALUE)RUBY_Qundef), .cme_ = search_refined_method(ec, cfp, calling), .call_ = vm_call_general, .aux_ = {{ 0 }}, };
16017 if (vm_cc_cme(ref_cc)) {
16018 calling->cc= ref_cc;
16019 return vm_call_method(ec, cfp, calling);
16020 }
16021 else {
16022 return vm_call_method_nome(ec, cfp, calling);
16023 }
16024}
16025static 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);
16026__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);
16027static VALUE
16028vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16029 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler)
16030{
16031 int argc = calling->argc;
16032 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))));
16033 (((reg_cfp)->sp) -= (((1))));
16034 return vm_invoke_block(ec, reg_cfp, calling, ci, 0, block_handler);
16035}
16036static VALUE
16037vm_call_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16038{
16039 ((void)0);
16040 const struct rb_callinfo *ci = calling->ci;
16041 VALUE procval = calling->recv;
16042 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, VM_BH_FROM_PROC(procval));
16043}
16044static VALUE
16045vm_call_opt_block_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16046{
16047 ((void)0);
16048 VALUE block_handler = VM_ENV_BLOCK_HANDLER(VM_CF_LEP(reg_cfp));
16049 const struct rb_callinfo *ci = calling->ci;
16050 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CALL)]&((1 << 12))) == 0), 1)))) {
16051 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, block_handler);
16052 }
16053 else {
16054 calling->recv = rb_vm_bh_to_procval(ec, block_handler);
16055 calling->cc = rb_vm_search_method_slowpath(ci, rb_class_of(calling->recv));
16056 return vm_call_general(ec, reg_cfp, calling);
16057 }
16058}
16059static VALUE
16060vm_call_opt_struct_aref0(rb_execution_context_t *ec, struct rb_calling_info *calling)
16061{
16062 VALUE recv = calling->recv;
16063 ((void)0);
16064 ((void)0);
16065 ((void)0);
16066 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
16067 return internal_RSTRUCT_GET(recv, off);
16068}
16069static VALUE
16070vm_call_opt_struct_aref(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16071{
16072 ((void)0);
16073 VALUE ret = vm_call_opt_struct_aref0(ec, calling);
16074 reg_cfp->sp -= 1;
16075 return ret;
16076}
16077static VALUE
16078vm_call_opt_struct_aset0(rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE val)
16079{
16080 VALUE recv = calling->recv;
16081 ((void)0);
16082 ((void)0);
16083 ((void)0);
16084 rb_check_frozen_inline(recv);
16085 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
16086 internal_RSTRUCT_SET(recv, off, val);
16087 return val;
16088}
16089static VALUE
16090vm_call_opt_struct_aset(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16091{
16092 ((void)0);
16093 VALUE ret = vm_call_opt_struct_aset0(ec, calling, *(reg_cfp->sp - 1));
16094 reg_cfp->sp -= 2;
16095 return ret;
16096}
16097__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);
16098static VALUE
16099vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
16100 const struct rb_callinfo *ci, const struct rb_callcache *cc)
16101{
16102 switch (vm_cc_cme(cc)->def->body.optimized.type) {
16103 case OPTIMIZED_METHOD_TYPE_SEND:
16104 CC_SET_FASTPATH(cc, vm_call_opt_send, 1);
16105 return vm_call_opt_send(ec, cfp, calling);
16106 case OPTIMIZED_METHOD_TYPE_CALL:
16107 CC_SET_FASTPATH(cc, vm_call_opt_call, 1);
16108 return vm_call_opt_call(ec, cfp, calling);
16109 case OPTIMIZED_METHOD_TYPE_BLOCK_CALL:
16110 CC_SET_FASTPATH(cc, vm_call_opt_block_call, 1);
16111 return vm_call_opt_block_call(ec, cfp, calling);
16112 case OPTIMIZED_METHOD_TYPE_STRUCT_AREF:
16113 CALLER_SETUP_ARG(cfp, calling, ci);
16114 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16115 rb_check_arity(calling->argc, 0, 0);
16116 CC_SET_FASTPATH(cc, vm_call_opt_struct_aref, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
16117 return vm_call_opt_struct_aref(ec, cfp, calling);
16118 case OPTIMIZED_METHOD_TYPE_STRUCT_ASET:
16119 CALLER_SETUP_ARG(cfp, calling, ci);
16120 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16121 rb_check_arity(calling->argc, 1, 1);
16122 CC_SET_FASTPATH(cc, vm_call_opt_struct_aset, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
16123 return vm_call_opt_struct_aset(ec, cfp, calling);
16124 default:
16125 rb_bug("vm_call_method: unsupported optimized method type (%d)", vm_cc_cme(cc)->def->body.optimized.type);
16126 }
16127}
16128COLDFUNC static VALUE
16129vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
16130 const struct rb_callinfo *ci = calling->ci;
16131 const struct rb_callcache *cc = calling->cc;
16132 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
16133 VALUE v;
16134 switch (cme->def->type) {
16135 case VM_METHOD_TYPE_ISEQ:
16136 CC_SET_FASTPATH(cc, vm_call_iseq_setup, 1);
16137 return vm_call_iseq_setup(ec, cfp, calling);
16138 case VM_METHOD_TYPE_NOTIMPLEMENTED:
16139 case VM_METHOD_TYPE_CFUNC:
16140 CC_SET_FASTPATH(cc, vm_call_cfunc, 1);
16141 return vm_call_cfunc(ec, cfp, calling);
16142 case VM_METHOD_TYPE_ATTRSET:
16143 CALLER_SETUP_ARG(cfp, calling, ci);
16144 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16145 rb_check_arity(calling->argc, 1, 1);
16146 const unsigned int aset_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KWARG_bit));
16147 if (vm_cc_markable(cc)) {
16148 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
16149 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_direct(ec, cfp, cc, calling->recv); 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_direct(ec, cfp, cc, calling->recv); };
16150 }
16151 else {
16152 cc = &((struct rb_callcache) {
16153 .flags = RUBY_T_IMEMO |
16154 (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) |
16155 ((VALUE)RUBY_FL_FREEZE) |
16156 ((VALUE)(((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32)) |
16157 ((VALUE)RUBY_FL_EXIVAR),
16158 .klass = cc->klass,
16159 .cme_ = cc->cme_,
16160 .call_ = cc->call_,
16161 .aux_ = {
16162 .attr = {
16163 .value = (((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32),
16164 }
16165 },
16166 });
16167 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_direct(ec, cfp, cc, calling->recv); 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_direct(ec, cfp, cc, calling->recv); };
16168 }
16169 return v;
16170 case VM_METHOD_TYPE_IVAR:
16171 CALLER_SETUP_ARG(cfp, calling, ci);
16172 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16173 rb_check_arity(calling->argc, 0, 0);
16174 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
16175 const unsigned int ivar_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit));
16176 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); };
16177 return v;
16178 case VM_METHOD_TYPE_MISSING:
16179 vm_cc_method_missing_reason_set(cc, 0);
16180 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
16181 return vm_call_method_missing(ec, cfp, calling);
16182 case VM_METHOD_TYPE_BMETHOD:
16183 CC_SET_FASTPATH(cc, vm_call_bmethod, 1);
16184 return vm_call_bmethod(ec, cfp, calling);
16185 case VM_METHOD_TYPE_ALIAS:
16186 CC_SET_FASTPATH(cc, vm_call_alias, 1);
16187 return vm_call_alias(ec, cfp, calling);
16188 case VM_METHOD_TYPE_OPTIMIZED:
16189 return vm_call_optimized(ec, cfp, calling, ci, cc);
16190 case VM_METHOD_TYPE_UNDEF:
16191 break;
16192 case VM_METHOD_TYPE_ZSUPER:
16193 return vm_call_zsuper(ec, cfp, calling, (((rb_classext_t *)((char *)(vm_cc_cme(cc)->defined_class) + sizeof(struct RClass)))->origin_));
16194 case VM_METHOD_TYPE_REFINED:
16195 return vm_call_refined(ec, cfp, calling);
16196 }
16197 rb_bug("vm_call_method: unsupported method type (%d)", vm_cc_cme(cc)->def->type);
16198}
16199__attribute__((__noreturn__)) static void vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj, int call_status);
16200static VALUE
16201vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16202{
16203 const struct rb_callinfo *ci = calling->ci;
16204 const int stat = ci_missing_reason(ci);
16205 if (vm_ci_mid(ci) == idMethodMissing) {
16206 rb_control_frame_t *reg_cfp = cfp;
16207 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
16208 vm_raise_method_missing(ec, calling->argc, argv, calling->recv, stat);
16209 }
16210 else {
16211 return vm_call_method_missing_body(ec, cfp, calling, ci, stat);
16212 }
16213}
16214static VALUE
16215vm_defined_class_for_protected_call(const rb_callable_method_entry_t *me)
16216{
16217 VALUE defined_class = me->defined_class;
16218 VALUE refined_class = (((rb_classext_t *)((char *)(defined_class) + sizeof(struct RClass)))->refined_class);
16219 return RB_NIL_P(refined_class) ? defined_class : refined_class;
16220}
16221static inline VALUE
16222vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16223{
16224 const struct rb_callinfo *ci = calling->ci;
16225 const struct rb_callcache *cc = calling->cc;
16226 ((void)0);
16227 if (vm_cc_cme(cc) != ((void *)0)) {
16228 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16229 case METHOD_VISI_PUBLIC:
16230 return vm_call_method_each_type(ec, cfp, calling);
16231 case METHOD_VISI_PRIVATE:
16232 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit))) {
16233 enum method_missing_reason stat = MISSING_PRIVATE;
16234 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
16235 vm_cc_method_missing_reason_set(cc, stat);
16236 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
16237 return vm_call_method_missing(ec, cfp, calling);
16238 }
16239 return vm_call_method_each_type(ec, cfp, calling);
16240 case METHOD_VISI_PROTECTED:
16241 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_OPT_SEND_bit) | (0x01 << VM_CALL_FCALL_bit)))) {
16242 VALUE defined_class = vm_defined_class_for_protected_call(vm_cc_cme(cc));
16243 if (!rb_obj_is_kind_of(cfp->self, defined_class)) {
16244 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
16245 return vm_call_method_missing(ec, cfp, calling);
16246 }
16247 else {
16248 ((void)0);
16249 struct rb_callcache cc_on_stack = *cc;
16250 RB_FL_SET_RAW((VALUE)&cc_on_stack, ((VALUE)RUBY_FL_FREEZE));
16251 calling->cc = &cc_on_stack;
16252 return vm_call_method_each_type(ec, cfp, calling);
16253 }
16254 }
16255 return vm_call_method_each_type(ec, cfp, calling);
16256 default:
16257 rb_bug("unreachable");
16258 }
16259 }
16260 else {
16261 return vm_call_method_nome(ec, cfp, calling);
16262 }
16263}
16264static VALUE
16265vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16266{
16267 ((void)0);
16268 return vm_call_method(ec, reg_cfp, calling);
16269}static inline
16270void
16271rb_vm_cc_general(const struct rb_callcache *cc)
16272{
16273 ((void)0);
16274 ((void)0);
16275 *(vm_call_handler *)&cc->call_ = vm_call_general;
16276}
16277static VALUE
16278vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16279{
16280 ((void)0);
16281 if (ec == ((void *)0)) rb_bug("unreachable");
16282 ((void)0);
16283 return vm_call_method(ec, reg_cfp, calling);
16284}
16285static inline VALUE
16286vm_search_normal_superclass(VALUE klass)
16287{
16288 if (RB_BUILTIN_TYPE(klass) == RUBY_T_ICLASS &&
16289 RB_TYPE_P(((struct RBasic *)(klass))->klass, RUBY_T_MODULE) &&
16290 RB_FL_TEST_RAW(((struct RBasic *)(klass))->klass, RMODULE_IS_REFINEMENT)) {
16291 klass = ((struct RBasic *)(klass))->klass;
16292 }
16293 klass = (((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->origin_);
16294 return RCLASS_SUPER(klass);
16295}
16296__attribute__((__noreturn__)) static void vm_super_outside(void);
16297static void
16298vm_super_outside(void)
16299{
16300 rb_raise(rb_eNoMethodError, "super called outside of method");
16301}
16302static const struct rb_callcache *
16303empty_cc_for_super(void)
16304{
16305 return rb_vm_empty_cc_for_super();
16306}
16307static const struct rb_callcache *
16308vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *cd, VALUE recv)
16309{
16310 VALUE current_defined_class;
16311 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
16312 if (!me) {
16313 vm_super_outside();
16314 }
16315 current_defined_class = vm_defined_class_for_protected_call(me);
16316 if (RB_BUILTIN_TYPE(current_defined_class) != RUBY_T_MODULE &&
16317 reg_cfp->iseq != method_entry_iseqptr(me) &&
16318 !rb_obj_is_kind_of(recv, current_defined_class)) {
16319 VALUE m = RB_TYPE_P(current_defined_class, RUBY_T_ICLASS) ?
16320 (((rb_classext_t *)((char *)(current_defined_class) + sizeof(struct RClass)))->includer) : current_defined_class;
16321 if (m) {
16322 rb_raise(rb_eTypeError,
16323 "self has wrong type to call super in this context: "
16324 "%""l""i" "\v"" (expected %""l""i" "\v"")",
16325 rb_obj_class(recv), m);
16326 }
16327 }
16328 if (me->def->type == VM_METHOD_TYPE_BMETHOD && (vm_ci_flag(cd->ci) & (0x01 << VM_CALL_ZSUPER_bit))) {
16329 rb_raise(rb_eRuntimeError,
16330 "implicit argument passing of super from method defined"
16331 " by define_method() is not supported."
16332 " Specify all arguments explicitly.");
16333 }
16334 ID mid = me->def->original_id;
16335 cd->ci = vm_ci_new_runtime_(mid, vm_ci_flag(cd->ci), vm_ci_argc(cd->ci), vm_ci_kwarg(cd->ci), "../ruby-3.2.1/vm_insnhelper.c", 4183);
16336 (rb_obj_written((VALUE)(reg_cfp->iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cd->ci), "../ruby-3.2.1/vm_insnhelper.c", 4188));
16337 const struct rb_callcache *cc;
16338 VALUE klass = vm_search_normal_superclass(me->defined_class);
16339 if (!klass) {
16340 cc = vm_cc_new(klass, ((void *)0), vm_call_method_missing);
16341 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
16342 ;
16343 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
16344 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 4197);
16345 }
16346 else {
16347 cc = vm_search_method_fastpath((VALUE)reg_cfp->iseq, cd, klass);
16348 const rb_callable_method_entry_t *cached_cme = vm_cc_cme(cc);
16349 if (cached_cme == ((void *)0)) {
16350 cd->cc = empty_cc_for_super();
16351 }
16352 else if (cached_cme->called_id != mid) {
16353 const rb_callable_method_entry_t *cme = rb_callable_method_entry(klass, mid);
16354 if (cme) {
16355 cc = vm_cc_new(klass, cme, vm_call_super_method);
16356 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
16357 ;
16358 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
16359 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 4212);
16360 }
16361 else {
16362 cd->cc = cc = empty_cc_for_super();
16363 }
16364 }
16365 else {
16366 switch (cached_cme->def->type) {
16367 case VM_METHOD_TYPE_REFINED:
16368 case VM_METHOD_TYPE_ATTRSET:
16369 case VM_METHOD_TYPE_IVAR:
16370 vm_cc_call_set(cc, vm_call_super_method);
16371 break;
16372 default:
16373 break;
16374 }
16375 }
16376 }
16377 ((void)0);
16378 return cc;
16379}
16380static inline int
16381block_proc_is_lambda(const VALUE procval)
16382{
16383 rb_proc_t *proc;
16384 if (procval) {
16385 (((proc)) = (rb_proc_t*)((struct RData *)(((procval))))->data);
16386 return proc->is_lambda;
16387 }
16388 else {
16389 return 0;
16390 }
16391}
16392static VALUE
16393vm_yield_with_cfunc(rb_execution_context_t *ec,
16394 const struct rb_captured_block *captured,
16395 VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
16396 const rb_callable_method_entry_t *me)
16397{
16398 int is_lambda = 0;
16399 VALUE val, arg, blockarg;
16400 int frame_flag;
16401 const struct vm_ifunc *ifunc = captured->code.ifunc;
16402 if (is_lambda) {
16403 arg = rb_ary_new_from_values(argc, argv);
16404 }
16405 else if (argc == 0) {
16406 arg = ((VALUE)RUBY_Qnil);
16407 }
16408 else {
16409 arg = argv[0];
16410 }
16411 blockarg = rb_vm_bh_to_procval(ec, block_handler);
16412 frame_flag = VM_FRAME_MAGIC_IFUNC | VM_FRAME_FLAG_CFRAME | (me ? VM_FRAME_FLAG_BMETHOD : 0);
16413 if (kw_splat) {
16414 frame_flag |= VM_FRAME_FLAG_CFRAME_KW;
16415 }
16416 vm_push_frame(ec, (const rb_iseq_t *)captured->code.ifunc,
16417 frame_flag,
16418 self,
16419 ((VALUE)((captured->ep)) | (0x01)),
16420 (VALUE)me,
16421 0, ec->cfp->sp, 0, 0);
16422 val = (*ifunc->func)(arg, (VALUE)ifunc->data, argc, argv, blockarg);
16423 rb_vm_pop_frame(ec);
16424 return val;
16425}
16426static VALUE
16427vm_yield_with_symbol(rb_execution_context_t *ec, VALUE symbol, int argc, const VALUE *argv, int kw_splat, VALUE block_handler)
16428{
16429 return rb_sym_proc_call(rb_sym2id(symbol), argc, argv, kw_splat, rb_vm_bh_to_procval(ec, block_handler));
16430}
16431static inline int
16432vm_callee_setup_block_arg_arg0_splat(rb_control_frame_t *cfp, const rb_iseq_t *iseq, VALUE *argv, VALUE ary)
16433{
16434 int i;
16435 long len = rb_array_len(ary);
16436 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);
16437 for (i=0; i<len && i<((iseq)->body)->param.lead_num; i++) {
16438 argv[i] = RARRAY_AREF(ary, i);
16439 }
16440 return i;
16441}
16442static inline VALUE
16443vm_callee_setup_block_arg_arg0_check(VALUE *argv)
16444{
16445 VALUE ary, arg0 = argv[0];
16446 ary = rb_check_array_type(arg0);
16447 ((void)0);
16448 return ary;
16449}
16450static int
16451vm_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)
16452{
16453 if (rb_simple_iseq_p(iseq)) {
16454 rb_control_frame_t *cfp = ec->cfp;
16455 VALUE arg0;
16456 CALLER_SETUP_ARG(cfp, calling, ci);
16457 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16458 if (arg_setup_type == arg_setup_block &&
16459 calling->argc == 1 &&
16460 ((iseq)->body)->param.flags.has_lead &&
16461 !((iseq)->body)->param.flags.ambiguous_param0 &&
16462 !RB_NIL_P(arg0 = vm_callee_setup_block_arg_arg0_check(argv))) {
16463 calling->argc = vm_callee_setup_block_arg_arg0_splat(cfp, iseq, argv, arg0);
16464 }
16465 if (calling->argc != ((iseq)->body)->param.lead_num) {
16466 if (arg_setup_type == arg_setup_block) {
16467 if (calling->argc < ((iseq)->body)->param.lead_num) {
16468 int i;
16469 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);
16470 for (i=calling->argc; i<((iseq)->body)->param.lead_num; i++) argv[i] = ((VALUE)RUBY_Qnil);
16471 calling->argc = ((iseq)->body)->param.lead_num;
16472 }
16473 else if (calling->argc > ((iseq)->body)->param.lead_num) {
16474 calling->argc = ((iseq)->body)->param.lead_num;
16475 }
16476 }
16477 else {
16478 argument_arity_error(ec, iseq, calling->argc, ((iseq)->body)->param.lead_num, ((iseq)->body)->param.lead_num);
16479 }
16480 }
16481 return 0;
16482 }
16483 else {
16484 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_type);
16485 }
16486}
16487static int
16488vm_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)
16489{
16490 struct rb_calling_info calling_entry, *calling;
16491 calling = &calling_entry;
16492 calling->argc = argc;
16493 calling->block_handler = block_handler;
16494 calling->kw_splat = kw_splat;
16495 calling->recv = ((VALUE)RUBY_Qundef);
16496 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, };
16497 return vm_callee_setup_block_arg(ec, calling, &dummy_ci, iseq, argv, arg_setup_type);
16498}
16499static VALUE
16500vm_invoke_iseq_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16501 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16502 _Bool is_lambda, VALUE block_handler)
16503{
16504 const struct rb_captured_block *captured = VM_BH_TO_ISEQ_BLOCK(block_handler);
16505 const rb_iseq_t *iseq = rb_iseq_check(captured->code.iseq);
16506 const int arg_size = ((iseq)->body)->param.size;
16507 VALUE * const rsp = ((((reg_cfp)->sp))) - calling->argc;
16508 int opt_pc = vm_callee_setup_block_arg(ec, calling, ci, iseq, rsp, is_lambda ? arg_setup_method : arg_setup_block);
16509 (((reg_cfp)->sp) = (((rsp))));
16510 vm_push_frame(ec, iseq,
16511 VM_FRAME_MAGIC_BLOCK | (is_lambda ? VM_FRAME_FLAG_LAMBDA : 0),
16512 captured->self,
16513 ((VALUE)((captured->ep)) | (0x01)), 0,
16514 ((iseq)->body)->iseq_encoded + opt_pc,
16515 rsp + arg_size,
16516 ((iseq)->body)->local_table_size - arg_size, ((iseq)->body)->stack_max);
16517 return ((VALUE)RUBY_Qundef);
16518}
16519static VALUE
16520vm_invoke_symbol_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16521 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16522 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16523{
16524 if (calling->argc < 1) {
16525 rb_raise(rb_eArgError, "no receiver given");
16526 }
16527 else {
16528 VALUE symbol = VM_BH_TO_SYMBOL(block_handler);
16529 CALLER_SETUP_ARG(reg_cfp, calling, ci);
16530 calling->recv = (*(((((reg_cfp)->sp)))-(--calling->argc)-1));
16531 return vm_call_symbol(ec, reg_cfp, calling, ci, symbol, 0);
16532 }
16533}
16534static VALUE
16535vm_invoke_ifunc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16536 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16537 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16538{
16539 VALUE val;
16540 int argc;
16541 const struct rb_captured_block *captured = VM_BH_TO_IFUNC_BLOCK(block_handler);
16542 CALLER_SETUP_ARG(ec->cfp, calling, ci);
16543 CALLER_REMOVE_EMPTY_KW_SPLAT(ec->cfp, calling, ci);
16544 argc = calling->argc;
16545 val = vm_yield_with_cfunc(ec, captured, captured->self, argc, (((((reg_cfp)->sp)))-(argc)), calling->kw_splat, calling->block_handler, ((void *)0));
16546 ((((reg_cfp)->sp) -= (((argc)))));
16547 return val;
16548}
16549static VALUE
16550vm_proc_to_block_handler(VALUE procval)
16551{
16552 const struct rb_block *block = vm_proc_block(procval);
16553 switch (vm_block_type(block)) {
16554 case block_type_iseq:
16555 return VM_BH_FROM_ISEQ_BLOCK(&block->as.captured);
16556 case block_type_ifunc:
16557 return VM_BH_FROM_IFUNC_BLOCK(&block->as.captured);
16558 case block_type_symbol:
16559 return VM_BH_FROM_SYMBOL(block->as.symbol);
16560 case block_type_proc:
16561 return VM_BH_FROM_PROC(block->as.proc);
16562 }
16563 __builtin_unreachable();
16564 return ((VALUE)RUBY_Qundef);
16565}
16566static VALUE
16567vm_invoke_proc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16568 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16569 _Bool is_lambda, VALUE block_handler)
16570{
16571 while (vm_block_handler_type(block_handler) == block_handler_type_proc) {
16572 VALUE proc = VM_BH_TO_PROC(block_handler);
16573 is_lambda = block_proc_is_lambda(proc);
16574 block_handler = vm_proc_to_block_handler(proc);
16575 }
16576 return vm_invoke_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16577}
16578static inline VALUE
16579vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16580 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16581 _Bool is_lambda, VALUE block_handler)
16582{
16583 VALUE (*func)(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16584 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16585 _Bool is_lambda, VALUE block_handler);
16586 switch (vm_block_handler_type(block_handler)) {
16587 case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
16588 case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
16589 case block_handler_type_proc: func = vm_invoke_proc_block; break;
16590 case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
16591 default: rb_bug("vm_invoke_block: unreachable");
16592 }
16593 return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16594}
16595static VALUE
16596vm_make_proc_with_iseq(const rb_iseq_t *blockiseq)
16597{
16598 const rb_execution_context_t *ec = rb_current_execution_context(1);
16599 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16600 struct rb_captured_block *captured;
16601 if (cfp == 0) {
16602 rb_bug("vm_make_proc_with_iseq: unreachable");
16603 }
16604 captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
16605 captured->code.iseq = blockiseq;
16606 return rb_vm_make_proc(ec, captured, rb_cProc);
16607}
16608static VALUE
16609vm_once_exec(VALUE iseq)
16610{
16611 VALUE proc = vm_make_proc_with_iseq((rb_iseq_t *)iseq);
16612 return rb_proc_call_with_block(proc, 0, 0, ((VALUE)RUBY_Qnil));
16613}
16614static VALUE
16615vm_once_clear(VALUE data)
16616{
16617 union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)data;
16618 is->once.running_thread = ((void *)0);
16619 return ((VALUE)RUBY_Qnil);
16620}
16621static _Bool
16622check_respond_to_missing(VALUE obj, VALUE v)
16623{
16624 VALUE args[2];
16625 VALUE r;
16626 args[0] = obj; args[1] = ((VALUE)RUBY_Qfalse);
16627 r = rb_check_funcall(v, idRespond_to_missing, 2, args);
16628 if (!RB_UNDEF_P(r) && RB_TEST(r)) {
16629 return 1;
16630 }
16631 else {
16632 return 0;
16633 }
16634}
16635static _Bool
16636vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16637{
16638 VALUE klass;
16639 enum defined_type type = (enum defined_type)op_type;
16640 switch (type) {
16641 case DEFINED_IVAR:
16642 return rb_ivar_defined((((((reg_cfp)))->self)), rb_sym2id(obj));
16643 break;
16644 case DEFINED_GVAR:
16645 return rb_gvar_defined(rb_sym2id(obj));
16646 break;
16647 case DEFINED_CVAR: {
16648 const rb_cref_t *cref = vm_get_cref(((((reg_cfp)->ep))));
16649 klass = vm_get_cvar_base(cref, (((reg_cfp))), 0);
16650 return rb_cvar_defined(klass, rb_sym2id(obj));
16651 break;
16652 }
16653 case DEFINED_CONST:
16654 case DEFINED_CONST_FROM: {
16655 _Bool allow_nil = type == DEFINED_CONST;
16656 klass = v;
16657 return vm_get_ev_const(ec, klass, rb_sym2id(obj), allow_nil, 1);
16658 break;
16659 }
16660 case DEFINED_FUNC:
16661 klass = rb_class_of(v);
16662 return rb_ec_obj_respond_to(ec, v, rb_sym2id(obj), 1);
16663 break;
16664 case DEFINED_METHOD:{
16665 VALUE klass = rb_class_of(v);
16666 const rb_method_entry_t *me = rb_method_entry_with_refinements(klass, rb_sym2id(obj), ((void *)0));
16667 if (me) {
16668 switch ((rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16669 case METHOD_VISI_PRIVATE:
16670 break;
16671 case METHOD_VISI_PROTECTED:
16672 if (!rb_obj_is_kind_of((((((reg_cfp)))->self)), rb_class_real(me->defined_class))) {
16673 break;
16674 }
16675 case METHOD_VISI_PUBLIC:
16676 return 1;
16677 break;
16678 default:
16679 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)));
16680 }
16681 }
16682 else {
16683 return check_respond_to_missing(obj, v);
16684 }
16685 break;
16686 }
16687 case DEFINED_YIELD:
16688 if (((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]) != 0) {
16689 return 1;
16690 }
16691 break;
16692 case DEFINED_ZSUPER:
16693 {
16694 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry((((reg_cfp))));
16695 if (me) {
16696 VALUE klass = vm_search_normal_superclass(me->defined_class);
16697 ID id = me->def->original_id;
16698 return rb_method_boundp(klass, id, 0);
16699 }
16700 }
16701 break;
16702 case DEFINED_REF:{
16703 return vm_getspecial(ec, (VM_EP_LEP(((((reg_cfp)->ep))))), ((VALUE)RUBY_Qfalse), RB_FIX2INT(obj)) != ((VALUE)RUBY_Qnil);
16704 break;
16705 }
16706 default:
16707 rb_bug("unimplemented defined? type (VM)");
16708 break;
16709 }
16710 return 0;
16711}static inline
16712_Bool
16713rb_vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16714{
16715 return vm_defined(ec, reg_cfp, op_type, obj, v);
16716}
16717static const VALUE *
16718vm_get_ep(const VALUE *const reg_ep, rb_num_t lv)
16719{
16720 rb_num_t i;
16721 const VALUE *ep = reg_ep;
16722 for (i = 0; i < lv; i++) {
16723 ep = ((VALUE *)((ep)[(-1)] & ~0x03));
16724 }
16725 return ep;
16726}
16727static VALUE
16728vm_get_special_object(const VALUE *const reg_ep,
16729 enum vm_special_object_type type)
16730{
16731 switch (type) {
16732 case VM_SPECIAL_OBJECT_VMCORE:
16733 return rb_mRubyVMFrozenCore;
16734 case VM_SPECIAL_OBJECT_CBASE:
16735 return vm_get_cbase(reg_ep);
16736 case VM_SPECIAL_OBJECT_CONST_BASE:
16737 return vm_get_const_base(reg_ep);
16738 default:
16739 rb_bug("putspecialobject insn: unknown value_type %d", type);
16740 }
16741}
16742static VALUE
16743vm_concat_array(VALUE ary1, VALUE ary2st)
16744{
16745 const VALUE ary2 = ary2st;
16746 VALUE tmp1 = rb_check_to_array(ary1);
16747 VALUE tmp2 = rb_check_to_array(ary2);
16748 if (RB_NIL_P(tmp1)) {
16749 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); });
16750 }
16751 if (RB_NIL_P(tmp2)) {
16752 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); });
16753 }
16754 if (tmp1 == ary1) {
16755 tmp1 = rb_ary_dup(ary1);
16756 }
16757 return rb_ary_concat(tmp1, tmp2);
16758}static inline
16759VALUE
16760rb_vm_concat_array(VALUE ary1, VALUE ary2st)
16761{
16762 return vm_concat_array(ary1, ary2st);
16763}
16764static VALUE
16765vm_splat_array(VALUE flag, VALUE ary)
16766{
16767 VALUE tmp = rb_check_to_array(ary);
16768 if (RB_NIL_P(tmp)) {
16769 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); });
16770 }
16771 else if (RB_TEST(flag)) {
16772 return rb_ary_dup(tmp);
16773 }
16774 else {
16775 return tmp;
16776 }
16777}static inline
16778VALUE
16779rb_vm_splat_array(VALUE flag, VALUE ary)
16780{
16781 return vm_splat_array(flag, ary);
16782}
16783static VALUE
16784vm_check_match(rb_execution_context_t *ec, VALUE target, VALUE pattern, rb_num_t flag)
16785{
16786 enum vm_check_match_type type = ((int)flag) & 0x03;
16787 if (flag & 0x04) {
16788 long i;
16789 const long n = rb_array_len(pattern);
16790 for (i = 0; i < n; i++) {
16791 VALUE v = RARRAY_AREF(pattern, i);
16792 VALUE c = check_match(ec, v, target, type);
16793 if (RB_TEST(c)) {
16794 return c;
16795 }
16796 }
16797 return ((VALUE)RUBY_Qfalse);
16798 }
16799 else {
16800 return check_match(ec, pattern, target, type);
16801 }
16802}
16803static VALUE
16804vm_check_keyword(lindex_t bits, lindex_t idx, const VALUE *ep)
16805{
16806 const VALUE kw_bits = *(ep - bits);
16807 if (RB_FIXNUM_P(kw_bits)) {
16808 unsigned int b = (unsigned int)rb_fix2ulong(kw_bits);
16809 if ((idx < (32-1)) && (b & (0x01 << idx)))
16810 return ((VALUE)RUBY_Qfalse);
16811 }
16812 else {
16813 ((void)0);
16814 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);
16815 }
16816 return ((VALUE)RUBY_Qtrue);
16817}
16818static void
16819vm_dtrace(rb_event_flag_t flag, rb_execution_context_t *ec)
16820{
16821 if (0 ||
16822 0 ||
16823 0 ||
16824 0) {
16825 switch (flag) {
16826 case 0x0008:
16827 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);
16828 return;
16829 case 0x0020:
16830 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);
16831 return;
16832 case 0x0010:
16833 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);
16834 return;
16835 case 0x0040:
16836 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);
16837 return;
16838 }
16839 }
16840}
16841static VALUE
16842vm_const_get_under(ID id, rb_num_t flags, VALUE cbase)
16843{
16844 if (!rb_const_defined_at(cbase, id)) {
16845 return 0;
16846 }
16847 else if (((flags) & 0x08)) {
16848 return rb_public_const_get_at(cbase, id);
16849 }
16850 else {
16851 return rb_const_get_at(cbase, id);
16852 }
16853}
16854static VALUE
16855vm_check_if_class(ID id, rb_num_t flags, VALUE super, VALUE klass)
16856{
16857 if (!RB_TYPE_P(klass, RUBY_T_CLASS)) {
16858 return 0;
16859 }
16860 else if (((flags) & 0x10)) {
16861 VALUE tmp = rb_class_real(RCLASS_SUPER(klass));
16862 if (tmp != super) {
16863 rb_raise(rb_eTypeError,
16864 "superclass mismatch for class %""l""i" "\v""",
16865 rb_id2str(id));
16866 }
16867 else {
16868 return klass;
16869 }
16870 }
16871 else {
16872 return klass;
16873 }
16874}
16875static VALUE
16876vm_check_if_module(ID id, VALUE mod)
16877{
16878 if (!RB_TYPE_P(mod, RUBY_T_MODULE)) {
16879 return 0;
16880 }
16881 else {
16882 return mod;
16883 }
16884}
16885static VALUE
16886declare_under(ID id, VALUE cbase, VALUE c)
16887{
16888 rb_set_class_path_string(c, cbase, rb_id2str(id));
16889 rb_const_set(cbase, id, c);
16890 return c;
16891}
16892static VALUE
16893vm_declare_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16894{
16895 VALUE s = ((flags) & 0x10) ? super : rb_cObject;
16896 VALUE c = declare_under(id, cbase, rb_define_class_id(id, s));
16897 rb_define_alloc_func(c, rb_get_alloc_func(c));
16898 rb_class_inherited(s, c);
16899 return c;
16900}
16901static VALUE
16902vm_declare_module(ID id, VALUE cbase)
16903{
16904 return declare_under(id, cbase, rb_module_new());
16905}
16906__attribute__((__noreturn__)) static void unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old);
16907static void
16908unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old)
16909{
16910 VALUE name = rb_id2str(id);
16911 VALUE message = rb_sprintf("%""l""i" "\v"" is not a %s",
16912 name, type);
16913 VALUE location = rb_const_source_location_at(cbase, id);
16914 if (!RB_NIL_P(location)) {
16915 rb_str_catf(message, "\n%""l""i" "\v"":%""l""i" "\v"":"
16916 " previous definition of %""l""i" "\v"" was here",
16917 rb_ary_entry(location, 0), rb_ary_entry(location, 1), name);
16918 }
16919 rb_exc_raise(rb_exc_new_str(rb_eTypeError, message));
16920}
16921static VALUE
16922vm_define_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16923{
16924 VALUE klass;
16925 if (((flags) & 0x10) && !RB_TYPE_P(super, RUBY_T_CLASS)) {
16926 rb_raise(rb_eTypeError,
16927 "superclass must be an instance of Class (given an instance of %""l""i" "\v"")",
16928 rb_obj_class(super));
16929 }
16930 vm_check_if_namespace(cbase);
16931 rb_autoload_load(cbase, id);
16932 if ((klass = vm_const_get_under(id, flags, cbase)) != 0) {
16933 if (!vm_check_if_class(id, flags, super, klass))
16934 unmatched_redefinition("class", cbase, id, klass);
16935 return klass;
16936 }
16937 else {
16938 return vm_declare_class(id, flags, cbase, super);
16939 }
16940}
16941static VALUE
16942vm_define_module(ID id, rb_num_t flags, VALUE cbase)
16943{
16944 VALUE mod;
16945 vm_check_if_namespace(cbase);
16946 if ((mod = vm_const_get_under(id, flags, cbase)) != 0) {
16947 if (!vm_check_if_module(id, mod))
16948 unmatched_redefinition("module", cbase, id, mod);
16949 return mod;
16950 }
16951 else {
16952 return vm_declare_module(id, cbase);
16953 }
16954}
16955static VALUE
16956vm_find_or_create_class_by_id(ID id,
16957 rb_num_t flags,
16958 VALUE cbase,
16959 VALUE super)
16960{
16961 rb_vm_defineclass_type_t type = ((rb_vm_defineclass_type_t)(flags) & VM_DEFINECLASS_TYPE_MASK);
16962 switch (type) {
16963 case VM_DEFINECLASS_TYPE_CLASS:
16964 return vm_define_class(id, flags, cbase, super);
16965 case VM_DEFINECLASS_TYPE_SINGLETON_CLASS:
16966 return rb_singleton_class(cbase);
16967 case VM_DEFINECLASS_TYPE_MODULE:
16968 return vm_define_module(id, flags, cbase);
16969 default:
16970 rb_bug("unknown defineclass type: %d", (int)type);
16971 }
16972}
16973static rb_method_visibility_t
16974vm_scope_visibility_get(const rb_execution_context_t *ec)
16975{
16976 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16977 if (!vm_env_cref_by_cref(cfp->ep)) {
16978 return METHOD_VISI_PUBLIC;
16979 }
16980 else {
16981 return CREF_SCOPE_VISI(vm_ec_cref(ec))->method_visi;
16982 }
16983}
16984static int
16985vm_scope_module_func_check(const rb_execution_context_t *ec)
16986{
16987 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16988 if (!vm_env_cref_by_cref(cfp->ep)) {
16989 return 0;
16990 }
16991 else {
16992 return CREF_SCOPE_VISI(vm_ec_cref(ec))->module_func;
16993 }
16994}
16995static void
16996vm_define_method(const rb_execution_context_t *ec, VALUE obj, ID id, VALUE iseqval, int is_singleton)
16997{
16998 VALUE klass;
16999 rb_method_visibility_t visi;
17000 rb_cref_t *cref = vm_ec_cref(ec);
17001 if (is_singleton) {
17002 klass = rb_singleton_class(obj);
17003 visi = METHOD_VISI_PUBLIC;
17004 }
17005 else {
17006 klass = CREF_CLASS_FOR_DEFINITION(cref);
17007 visi = vm_scope_visibility_get(ec);
17008 }
17009 if (RB_NIL_P(klass)) {
17010 rb_raise(rb_eTypeError, "no class/module to add method");
17011 }
17012 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, visi);
17013 if (id == (__builtin_constant_p("initialize") ? __extension__ ({ static ID rbimpl_id; rbimpl_intern_const(&rbimpl_id, ("initialize")); }) : (rb_intern)("initialize")) && klass != rb_cObject && RB_TYPE_P(klass, RUBY_T_CLASS) && (rb_get_alloc_func(klass) == rb_class_allocate_instance)) {
17014 ((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->max_iv_count = rb_estimate_iv_count(klass, (const rb_iseq_t *)iseqval);
17015 }
17016 if (!is_singleton && vm_scope_module_func_check(ec)) {
17017 klass = rb_singleton_class(klass);
17018 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, METHOD_VISI_PUBLIC);
17019 }
17020}
17021static VALUE
17022vm_invokeblock_i(struct rb_execution_context_struct *ec,
17023 struct rb_control_frame_struct *reg_cfp,
17024 struct rb_calling_info *calling)
17025{
17026 const struct rb_callinfo *ci = calling->ci;
17027 VALUE block_handler = VM_CF_BLOCK_HANDLER((((reg_cfp))));
17028 if (block_handler == 0) {
17029 rb_vm_localjump_error("no block given (yield)", ((VALUE)RUBY_Qnil), 0);
17030 }
17031 else {
17032 return vm_invoke_block(ec, (((reg_cfp))), calling, ci, 0, block_handler);
17033 }
17034}
17035static const struct rb_callcache *
17036vm_search_method_wrap(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
17037{
17038 return vm_search_method((VALUE)reg_cfp->iseq, cd, recv);
17039}
17040static const struct rb_callcache *
17041vm_search_invokeblock(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
17042{
17043 static const struct rb_callcache cc = {
17044 .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE),
17045 .klass = 0,
17046 .cme_ = 0,
17047 .call_ = vm_invokeblock_i,
17048 .aux_ = {0},
17049 };
17050 return &cc;
17051}
17052static
17053VALUE
17054vm_sendish(
17055 struct rb_execution_context_struct *ec,
17056 struct rb_control_frame_struct *reg_cfp,
17057 struct rb_call_data *cd,
17058 VALUE block_handler,
17059 const struct rb_callcache *(*method_explorer)(const struct rb_control_frame_struct *cfp, struct rb_call_data *cd, VALUE recv)
17060) {
17061 VALUE val = ((VALUE)RUBY_Qundef);
17062 const struct rb_callinfo *ci = cd->ci;
17063 const struct rb_callcache *cc;
17064 int argc = vm_ci_argc(ci);
17065 VALUE recv = (*(((((reg_cfp)->sp)))-(argc)-1));
17066 struct rb_calling_info calling = {
17067 .block_handler = block_handler,
17068 .kw_splat = (vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit)) > 0,
17069 .recv = recv,
17070 .argc = argc,
17071 .ci = ci,
17072 };
17073 calling.cc = cc = method_explorer((((reg_cfp))), cd, recv);
17074 val = vm_cc_call(cc)(ec, (((reg_cfp))), &calling);
17075 if (!RB_UNDEF_P(val)) {
17076 return val;
17077 }
17078 else {
17079 do { (reg_cfp) = ec->cfp; } while (0);
17080 }
17081 if (((((((reg_cfp)))->iseq))->body)->catch_except_p) {
17082 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
17083 return rb_vm_exec(ec, 1);
17084 }
17085 else if (RB_UNDEF_P(val = jit_exec(ec))) {
17086 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
17087 return rb_vm_exec(ec, 0);
17088 }
17089 else {
17090 return val;
17091 }
17092}
17093VALUE rb_nil_to_s(VALUE);
17094VALUE rb_true_to_s(VALUE);
17095VALUE rb_false_to_s(VALUE);
17096VALUE rb_int_to_s(int argc, VALUE *argv, VALUE x);
17097VALUE rb_fix_to_s(VALUE);
17098VALUE rb_mod_to_s(VALUE);
17099VALUE rb_mod_name(VALUE);
17100static VALUE
17101vm_objtostring(const rb_iseq_t *iseq, VALUE recv, CALL_DATA cd)
17102{
17103 int type = ((int)rb_type(recv));
17104 if (type == RUBY_T_STRING) {
17105 return recv;
17106 }
17107 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
17108 switch (type) {
17109 case RUBY_T_SYMBOL:
17110 if (check_cfunc(vm_cc_cme(cc), rb_sym_to_s)) {
17111 return rb_sym2str(recv);
17112 }
17113 break;
17114 case RUBY_T_MODULE:
17115 case RUBY_T_CLASS:
17116 if (check_cfunc(vm_cc_cme(cc), rb_mod_to_s)) {
17117 VALUE val = rb_mod_name(recv);
17118 if (RB_NIL_P(val)) {
17119 val = rb_mod_to_s(recv);
17120 }
17121 return val;
17122 }
17123 break;
17124 case RUBY_T_NIL:
17125 if (check_cfunc(vm_cc_cme(cc), rb_nil_to_s)) {
17126 return rb_nil_to_s(recv);
17127 }
17128 break;
17129 case RUBY_T_TRUE:
17130 if (check_cfunc(vm_cc_cme(cc), rb_true_to_s)) {
17131 return rb_true_to_s(recv);
17132 }
17133 break;
17134 case RUBY_T_FALSE:
17135 if (check_cfunc(vm_cc_cme(cc), rb_false_to_s)) {
17136 return rb_false_to_s(recv);
17137 }
17138 break;
17139 case RUBY_T_FIXNUM:
17140 if (check_cfunc(vm_cc_cme(cc), rb_int_to_s)) {
17141 return rb_fix_to_s(recv);
17142 }
17143 break;
17144 }
17145 return ((VALUE)RUBY_Qundef);
17146}
17147static VALUE
17148vm_opt_str_freeze(VALUE str, int bop, ID id)
17149{
17150 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17151 return str;
17152 }
17153 else {
17154 return ((VALUE)RUBY_Qundef);
17155 }
17156}
17157static VALUE
17158vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17159{
17160 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MAX)]&((1 << 3))) == 0), 1)))) {
17161 if (num == 0) {
17162 return ((VALUE)RUBY_Qnil);
17163 }
17164 else {
17165 VALUE result = *ptr;
17166 rb_snum_t i = num - 1;
17167 while (i-- > 0) {
17168 const VALUE v = *++ptr;
17169 if (((RB_FIXNUM_P(v) && RB_FIXNUM_P(result) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CMP)]&((1 << 0))) == 0), 1)))) ? (((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) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CMP)]&((1 << 2))) == 0), 1)))) ? rb_str_cmp(v, result) : (RB_FLOAT_TYPE_P(v) && RB_FLOAT_TYPE_P(result) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CMP)]&((1 << 1))) == 0), 1)))) ? rb_float_cmp(v, result) : rb_cmpint(rb_funcallv(v, idCmp, 1, &result), v, result)) > 0) {
17170 result = v;
17171 }
17172 }
17173 return result;
17174 }
17175 }
17176 else {
17177 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMax, 0, ((void *)0), 0);
17178 }
17179}static inline
17180VALUE
17181rb_vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17182{
17183 return vm_opt_newarray_max(ec, num, ptr);
17184}
17185static VALUE
17186vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17187{
17188 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MIN)]&((1 << 3))) == 0), 1)))) {
17189 if (num == 0) {
17190 return ((VALUE)RUBY_Qnil);
17191 }
17192 else {
17193 VALUE result = *ptr;
17194 rb_snum_t i = num - 1;
17195 while (i-- > 0) {
17196 const VALUE v = *++ptr;
17197 if (((RB_FIXNUM_P(v) && RB_FIXNUM_P(result) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CMP)]&((1 << 0))) == 0), 1)))) ? (((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) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CMP)]&((1 << 2))) == 0), 1)))) ? rb_str_cmp(v, result) : (RB_FLOAT_TYPE_P(v) && RB_FLOAT_TYPE_P(result) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CMP)]&((1 << 1))) == 0), 1)))) ? rb_float_cmp(v, result) : rb_cmpint(rb_funcallv(v, idCmp, 1, &result), v, result)) < 0) {
17198 result = v;
17199 }
17200 }
17201 return result;
17202 }
17203 }
17204 else {
17205 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMin, 0, ((void *)0), 0);
17206 }
17207}static inline
17208VALUE
17209rb_vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17210{
17211 return vm_opt_newarray_min(ec, num, ptr);
17212}
17213static void
17214vm_track_constant_cache(ID id, void *ic)
17215{
17216 struct rb_id_table *const_cache = rb_current_vm()->constant_cache;
17217 VALUE lookup_result;
17218 st_table *ics;
17219 if (rb_id_table_lookup(const_cache, id, &lookup_result)) {
17220 ics = (st_table *)lookup_result;
17221 }
17222 else {
17223 ics = rb_st_init_numtable();
17224 rb_id_table_insert(const_cache, id, (VALUE)ics);
17225 }
17226 rb_st_insert(ics, (st_data_t) ic, (st_data_t) ((VALUE)RUBY_Qtrue));
17227}
17228static void
17229vm_ic_track_const_chain(rb_control_frame_t *cfp, IC ic, const ID *segments)
17230{
17231 { unsigned int _lev; rb_vm_lock_enter(&_lev, "../ruby-3.2.1/vm_insnhelper.c", 5291);;
17232 for (int i = 0; segments[i]; i++) {
17233 ID id = segments[i];
17234 if (id == idNULL) continue;
17235 vm_track_constant_cache(id, ic);
17236 }
17237 rb_vm_lock_leave(&_lev, "../ruby-3.2.1/vm_insnhelper.c", 5299); };
17238}
17239static inline _Bool
17240vm_inlined_ic_hit_p(VALUE flags, VALUE value, const rb_cref_t *ic_cref, const VALUE *reg_ep)
17241{
17242 if ((flags & ((VALUE)RUBY_FL_USER4)) || rb_ractor_main_p()) {
17243 ((void)0);
17244 return (ic_cref == ((void *)0) ||
17245 ic_cref == vm_get_cref(reg_ep));
17246 }
17247 return 0;
17248}
17249static _Bool
17250vm_ic_hit_p(const struct iseq_inline_constant_cache_entry *ice, const VALUE *reg_ep)
17251{
17252 ((void)0);
17253 return vm_inlined_ic_hit_p(ice->flags, ice->value, ice->ic_cref, reg_ep);
17254}static inline
17255_Bool
17256rb_vm_ic_hit_p(IC ic, const VALUE *reg_ep)
17257{
17258 return ic->entry && vm_ic_hit_p(ic->entry, reg_ep);
17259}
17260COLDFUNC static void
17261vm_ic_update(const rb_iseq_t *iseq, IC ic, VALUE val, const VALUE *reg_ep, const VALUE *pc) {
17262 if (ruby_vm_const_missing_count > 0) {
17263 ruby_vm_const_missing_count = 0;
17264 ic->entry = ((void *)0);
17265 return;
17266 }
17267 struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)rb_imemo_new(imemo_constcache, 0, 0, 0, 0);
17268 rb_obj_write((VALUE)(ice), __extension__({
17269 ;
17270 ; __typeof__((VALUE *)(&ice->value)) unaligned_member_access_result = ((VALUE *)(&ice->value));
17271 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 5339);
17272 ice->ic_cref = vm_get_const_key_cref(reg_ep);
17273 if (rb_ractor_shareable_p(val)) ice->flags |= ((VALUE)RUBY_FL_USER4);
17274 rb_obj_write((VALUE)(iseq), __extension__({
17275 ;
17276 ; __typeof__((VALUE *)(&ic->entry)) unaligned_member_access_result = ((VALUE *)(&ic->entry));
17277 ; unaligned_member_access_result; }), (VALUE)(ice), "../ruby-3.2.1/vm_insnhelper.c", 5342);
17278 ((void)0);
17279 unsigned pos = (unsigned)(pc - ((iseq)->body)->iseq_encoded);
17280 rb_yjit_constant_ic_update(iseq, ic, pos);
17281 rb_mjit_constant_ic_update(iseq, ic, pos);
17282}
17283static VALUE
17284vm_once_dispatch(rb_execution_context_t *ec, ISEQ iseq, ISE is)
17285{
17286 rb_thread_t *th = rb_ec_thread_ptr(ec);
17287 rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
17288 again:
17289 if (is->once.running_thread == RUNNING_THREAD_ONCE_DONE) {
17290 return is->once.value;
17291 }
17292 else if (is->once.running_thread == ((void *)0)) {
17293 VALUE val;
17294 is->once.running_thread = th;
17295 val = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
17296 rb_obj_write((VALUE)(ec->cfp->iseq), __extension__({
17297 ;
17298 ; __typeof__((VALUE *)(&is->once.value)) unaligned_member_access_result = ((VALUE *)(&is->once.value));
17299 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 5364);
17300 is->once.running_thread = RUNNING_THREAD_ONCE_DONE;
17301 return val;
17302 }
17303 else if (is->once.running_thread == th) {
17304 return vm_once_exec((VALUE)iseq);
17305 }
17306 else {
17307 rb_vm_check_ints(ec);
17308 rb_thread_schedule();
17309 goto again;
17310 }
17311}
17312static OFFSET
17313vm_case_dispatch(CDHASH hash, OFFSET else_offset, VALUE key)
17314{
17315 switch (__extension__({ VALUE arg_obj = (key); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })) {
17316 case -1:
17317 case RUBY_T_FLOAT:
17318 case RUBY_T_SYMBOL:
17319 case RUBY_T_BIGNUM:
17320 case RUBY_T_STRING:
17321 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQQ)]&((1 << 6) | (1 << 0) | (1 << 1) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 2))) == 0), 1)))) {
17322 st_data_t val;
17323 if (RB_FLOAT_TYPE_P(key)) {
17324 double kval = rb_float_value_inline(key);
17325 if (!(__builtin_isinf_sign (kval)) && modf(kval, &kval) == 0.0) {
17326 key = (((kval) < (0x7fffffffffffffffL / 2) + 1) && ((kval) >= ((-0x7fffffffffffffffL -1L) / 2))) ? RB_INT2FIX((long)kval) : rb_dbl2big(kval);
17327 }
17328 }
17329 if (rb_hash_stlike_lookup(hash, key, &val)) {
17330 return rb_fix2long((VALUE)val);
17331 }
17332 else {
17333 return else_offset;
17334 }
17335 }
17336 }
17337 return 0;
17338}
17339__attribute__((__noreturn__)) static void vm_stack_consistency_error(const rb_execution_context_t *ec, const rb_control_frame_t *, const VALUE *);
17340static void
17341vm_stack_consistency_error(const rb_execution_context_t *ec,
17342 const rb_control_frame_t *cfp,
17343 const VALUE *bp)
17344{
17345 const ptrdiff_t nsp = ((cfp->sp) - (ec)->vm_stack);
17346 const ptrdiff_t nbp = ((bp) - (ec)->vm_stack);
17347 static const char stack_consistency_error[] =
17348 "Stack consistency error (sp: %""t""d"", bp: %""t""d"")";
17349 rb_bug(stack_consistency_error, nsp, nbp);
17350}
17351ALWAYS_INLINE(static inline VALUE
17352vm_opt_plus(VALUE recv, VALUE obj));
17353static inline VALUE
17354vm_opt_plus(VALUE recv, VALUE obj) {
17355 if (FIXNUM_2_P(recv, obj) &&
17356 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 0))) == 0), 1)))) {
17357 return rb_fix_plus_fix(recv, obj);
17358 }
17359 else if (FLONUM_2_P(recv, obj) &&
17360 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
17361 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
17362 }
17363 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17364 return ((VALUE)RUBY_Qundef);
17365 }
17366 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17367 RBASIC_CLASS(obj) == rb_cFloat &&
17368 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
17369 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
17370 }
17371 else if (RBASIC_CLASS(recv) == rb_cString &&
17372 RBASIC_CLASS(obj) == rb_cString &&
17373 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 2))) == 0), 1)))) {
17374 return rb_str_opt_plus(recv, obj);
17375 }
17376 else if (RBASIC_CLASS(recv) == rb_cArray &&
17377 RBASIC_CLASS(obj) == rb_cArray &&
17378 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 3))) == 0), 1)))) {
17379 return rb_ary_plus(recv, obj);
17380 }
17381 else {
17382 return ((VALUE)RUBY_Qundef);
17383 }
17384}
17385ALWAYS_INLINE(static inline VALUE
17386vm_opt_minus(VALUE recv, VALUE obj));
17387static inline VALUE
17388vm_opt_minus(VALUE recv, VALUE obj) {
17389 if (FIXNUM_2_P(recv, obj) &&
17390 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 0))) == 0), 1)))) {
17391 return rb_fix_minus_fix(recv, obj);
17392 }
17393 else if (FLONUM_2_P(recv, obj) &&
17394 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
17395 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
17396 }
17397 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17398 return ((VALUE)RUBY_Qundef);
17399 }
17400 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17401 RBASIC_CLASS(obj) == rb_cFloat &&
17402 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
17403 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
17404 }
17405 else {
17406 return ((VALUE)RUBY_Qundef);
17407 }
17408}
17409ALWAYS_INLINE(static inline VALUE
17410vm_opt_mult(VALUE recv, VALUE obj));
17411static inline VALUE
17412vm_opt_mult(VALUE recv, VALUE obj) {
17413 if (FIXNUM_2_P(recv, obj) &&
17414 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 0))) == 0), 1)))) {
17415 return rb_fix_mul_fix(recv, obj);
17416 }
17417 else if (FLONUM_2_P(recv, obj) &&
17418 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
17419 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
17420 }
17421 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17422 return ((VALUE)RUBY_Qundef);
17423 }
17424 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17425 RBASIC_CLASS(obj) == rb_cFloat &&
17426 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
17427 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
17428 }
17429 else {
17430 return ((VALUE)RUBY_Qundef);
17431 }
17432}
17433ALWAYS_INLINE(static inline VALUE
17434vm_opt_div(VALUE recv, VALUE obj));
17435static inline VALUE
17436vm_opt_div(VALUE recv, VALUE obj) {
17437 if (FIXNUM_2_P(recv, obj) &&
17438 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 0))) == 0), 1)))) {
17439 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_div_fix(recv, obj);
17440 }
17441 else if (FLONUM_2_P(recv, obj) &&
17442 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17443 return rb_flo_div_flo(recv, obj);
17444 }
17445 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17446 return ((VALUE)RUBY_Qundef);
17447 }
17448 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17449 RBASIC_CLASS(obj) == rb_cFloat &&
17450 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17451 return rb_flo_div_flo(recv, obj);
17452 }
17453 else {
17454 return ((VALUE)RUBY_Qundef);
17455 }
17456}
17457ALWAYS_INLINE(static inline VALUE
17458vm_opt_mod(VALUE recv, VALUE obj));
17459static inline VALUE
17460vm_opt_mod(VALUE recv, VALUE obj) {
17461 if (FIXNUM_2_P(recv, obj) &&
17462 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 0))) == 0), 1)))) {
17463 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_mod_fix(recv, obj);
17464 }
17465 else if (FLONUM_2_P(recv, obj) &&
17466 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17467 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17468 }
17469 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17470 return ((VALUE)RUBY_Qundef);
17471 }
17472 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17473 RBASIC_CLASS(obj) == rb_cFloat &&
17474 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17475 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17476 }
17477 else {
17478 return ((VALUE)RUBY_Qundef);
17479 }
17480}
17481ALWAYS_INLINE(static inline VALUE
17482vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj));
17483static inline VALUE
17484vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj) {
17485 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not_equal)) {
17486 VALUE val = opt_equality(iseq, recv, obj, cd_eq);
17487 if (!RB_UNDEF_P(val)) {
17488 return ((!RB_TEST(val)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17489 }
17490 }
17491 return ((VALUE)RUBY_Qundef);
17492}
17493ALWAYS_INLINE(static inline VALUE
17494vm_opt_lt(VALUE recv, VALUE obj));
17495static inline VALUE
17496vm_opt_lt(VALUE recv, VALUE obj) {
17497 if (FIXNUM_2_P(recv, obj) &&
17498 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 0))) == 0), 1)))) {
17499 return (((long)recv < (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17500 }
17501 else if (FLONUM_2_P(recv, obj) &&
17502 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17503 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17504 }
17505 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17506 return ((VALUE)RUBY_Qundef);
17507 }
17508 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17509 RBASIC_CLASS(obj) == rb_cFloat &&
17510 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17511 ;
17512 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17513 }
17514 else {
17515 return ((VALUE)RUBY_Qundef);
17516 }
17517}
17518ALWAYS_INLINE(static inline VALUE
17519vm_opt_le(VALUE recv, VALUE obj));
17520static inline VALUE
17521vm_opt_le(VALUE recv, VALUE obj) {
17522 if (FIXNUM_2_P(recv, obj) &&
17523 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 0))) == 0), 1)))) {
17524 return (((long)recv <= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17525 }
17526 else if (FLONUM_2_P(recv, obj) &&
17527 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17528 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17529 }
17530 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17531 return ((VALUE)RUBY_Qundef);
17532 }
17533 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17534 RBASIC_CLASS(obj) == rb_cFloat &&
17535 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17536 ;
17537 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17538 }
17539 else {
17540 return ((VALUE)RUBY_Qundef);
17541 }
17542}
17543ALWAYS_INLINE(static inline VALUE
17544vm_opt_gt(VALUE recv, VALUE obj));
17545static inline VALUE
17546vm_opt_gt(VALUE recv, VALUE obj) {
17547 if (FIXNUM_2_P(recv, obj) &&
17548 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 0))) == 0), 1)))) {
17549 return (((long)recv > (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17550 }
17551 else if (FLONUM_2_P(recv, obj) &&
17552 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17553 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17554 }
17555 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17556 return ((VALUE)RUBY_Qundef);
17557 }
17558 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17559 RBASIC_CLASS(obj) == rb_cFloat &&
17560 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17561 ;
17562 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17563 }
17564 else {
17565 return ((VALUE)RUBY_Qundef);
17566 }
17567}
17568ALWAYS_INLINE(static inline VALUE
17569vm_opt_ge(VALUE recv, VALUE obj));
17570static inline VALUE
17571vm_opt_ge(VALUE recv, VALUE obj) {
17572 if (FIXNUM_2_P(recv, obj) &&
17573 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 0))) == 0), 1)))) {
17574 return (((long)recv >= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17575 }
17576 else if (FLONUM_2_P(recv, obj) &&
17577 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17578 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17579 }
17580 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17581 return ((VALUE)RUBY_Qundef);
17582 }
17583 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17584 RBASIC_CLASS(obj) == rb_cFloat &&
17585 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17586 ;
17587 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17588 }
17589 else {
17590 return ((VALUE)RUBY_Qundef);
17591 }
17592}
17593ALWAYS_INLINE(static inline VALUE
17594vm_opt_ltlt(VALUE recv, VALUE obj));
17595static inline VALUE
17596vm_opt_ltlt(VALUE recv, VALUE obj) {
17597 if (RB_SPECIAL_CONST_P(recv)) {
17598 return ((VALUE)RUBY_Qundef);
17599 }
17600 else if (RBASIC_CLASS(recv) == rb_cString &&
17601 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LTLT)]&((1 << 2))) == 0), 1)))) {
17602 if ((__builtin_expect(!!(RB_TYPE_P(obj, RUBY_T_STRING)), 1))) {
17603 return rb_str_buf_append(recv, obj);
17604 }
17605 else {
17606 return rb_str_concat(recv, obj);
17607 }
17608 }
17609 else if (RBASIC_CLASS(recv) == rb_cArray &&
17610 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LTLT)]&((1 << 3))) == 0), 1)))) {
17611 return rb_ary_push(recv, obj);
17612 }
17613 else {
17614 return ((VALUE)RUBY_Qundef);
17615 }
17616}
17617ALWAYS_INLINE(static inline VALUE
17618vm_opt_and(VALUE recv, VALUE obj));
17619static inline VALUE
17620vm_opt_and(VALUE recv, VALUE obj) {
17621 VALUE ret = ((long) recv) & ((long) obj);
17622 if (RB_FIXNUM_P(ret) &&
17623 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AND)]&((1 << 0))) == 0), 1)))) {
17624 return ret;
17625 }
17626 else {
17627 return ((VALUE)RUBY_Qundef);
17628 }
17629}
17630ALWAYS_INLINE(static inline VALUE
17631vm_opt_or(VALUE recv, VALUE obj));
17632static inline VALUE
17633vm_opt_or(VALUE recv, VALUE obj) {
17634 if (FIXNUM_2_P(recv, obj) &&
17635 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_OR)]&((1 << 0))) == 0), 1)))) {
17636 return recv | obj;
17637 }
17638 else {
17639 return ((VALUE)RUBY_Qundef);
17640 }
17641}
17642ALWAYS_INLINE(static inline VALUE
17643vm_opt_aref(VALUE recv, VALUE obj));
17644static inline VALUE
17645vm_opt_aref(VALUE recv, VALUE obj) {
17646 if (RB_SPECIAL_CONST_P(recv)) {
17647 if (FIXNUM_2_P(recv, obj) &&
17648 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 0))) == 0), 1)))) {
17649 return rb_fix_aref(recv, obj);
17650 }
17651 return ((VALUE)RUBY_Qundef);
17652 }
17653 else if (RBASIC_CLASS(recv) == rb_cArray &&
17654 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 3))) == 0), 1)))) {
17655 if (RB_FIXNUM_P(obj)) {
17656 return rb_ary_entry_internal(recv, rb_fix2long(obj));
17657 }
17658 else {
17659 return rb_ary_aref1(recv, obj);
17660 }
17661 }
17662 else if (RBASIC_CLASS(recv) == rb_cHash &&
17663 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1)))) {
17664 return rb_hash_aref(recv, obj);
17665 }
17666 else {
17667 return ((VALUE)RUBY_Qundef);
17668 }
17669}
17670ALWAYS_INLINE(static inline VALUE
17671vm_opt_aset(VALUE recv, VALUE obj, VALUE set));
17672static inline VALUE
17673vm_opt_aset(VALUE recv, VALUE obj, VALUE set) {
17674 if (RB_SPECIAL_CONST_P(recv)) {
17675 return ((VALUE)RUBY_Qundef);
17676 }
17677 else if (RBASIC_CLASS(recv) == rb_cArray &&
17678 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 3))) == 0), 1))) &&
17679 RB_FIXNUM_P(obj)) {
17680 rb_ary_store(recv, rb_fix2long(obj), set);
17681 return set;
17682 }
17683 else if (RBASIC_CLASS(recv) == rb_cHash &&
17684 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1)))) {
17685 rb_hash_aset(recv, obj, set);
17686 return set;
17687 }
17688 else {
17689 return ((VALUE)RUBY_Qundef);
17690 }
17691}
17692ALWAYS_INLINE(static inline VALUE
17693vm_opt_aref_with(VALUE recv, VALUE key));
17694static inline VALUE
17695vm_opt_aref_with(VALUE recv, VALUE key) {
17696 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17697 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1))) &&
17698 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse) &&
17699 !RB_FL_TEST(recv, RHASH_PROC_DEFAULT)) {
17700 return rb_hash_aref(recv, key);
17701 }
17702 else {
17703 return ((VALUE)RUBY_Qundef);
17704 }
17705}
17706ALWAYS_INLINE(static inline VALUE
17707vm_opt_aset_with(VALUE recv, VALUE key, VALUE val));
17708static inline VALUE
17709vm_opt_aset_with(VALUE recv, VALUE key, VALUE val) {
17710 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17711 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1))) &&
17712 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
17713 return rb_hash_aset(recv, key, val);
17714 }
17715 else {
17716 return ((VALUE)RUBY_Qundef);
17717 }
17718}
17719static VALUE
17720vm_opt_length(VALUE recv, int bop)
17721{
17722 if (RB_SPECIAL_CONST_P(recv)) {
17723 return ((VALUE)RUBY_Qundef);
17724 }
17725 else if (RBASIC_CLASS(recv) == rb_cString &&
17726 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17727 if (bop == BOP_EMPTY_P) {
17728 return rb_long2num_inline(RSTRING_LEN(recv));
17729 }
17730 else {
17731 return rb_str_length(recv);
17732 }
17733 }
17734 else if (RBASIC_CLASS(recv) == rb_cArray &&
17735 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 3))) == 0), 1)))) {
17736 return rb_long2num_inline(rb_array_len(recv));
17737 }
17738 else if (RBASIC_CLASS(recv) == rb_cHash &&
17739 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 4))) == 0), 1)))) {
17740 return __builtin_choose_expr( __builtin_constant_p(RHASH_SIZE(recv)), ((VALUE)(RHASH_SIZE(recv))) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(RHASH_SIZE(recv)));
17741 }
17742 else {
17743 return ((VALUE)RUBY_Qundef);
17744 }
17745}
17746static VALUE
17747vm_opt_empty_p(VALUE recv)
17748{
17749 switch (vm_opt_length(recv, BOP_EMPTY_P)) {
17750 case ((VALUE)RUBY_Qundef): return ((VALUE)RUBY_Qundef);
17751 case __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0)): return ((VALUE)RUBY_Qtrue);
17752 default: return ((VALUE)RUBY_Qfalse);
17753 }
17754}
17755VALUE rb_false(VALUE obj);
17756static VALUE
17757vm_opt_nil_p(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv)
17758{
17759 if (RB_NIL_P(recv) &&
17760 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_NIL_P)]&((1 << 9))) == 0), 1)))) {
17761 return ((VALUE)RUBY_Qtrue);
17762 }
17763 else if (vm_method_cfunc_is(iseq, cd, recv, rb_false)) {
17764 return ((VALUE)RUBY_Qfalse);
17765 }
17766 else {
17767 return ((VALUE)RUBY_Qundef);
17768 }
17769}
17770static VALUE
17771fix_succ(VALUE x)
17772{
17773 switch (x) {
17774 case ~0UL:
17775 return __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
17776 case ((~0UL)>>(int)(1)):
17777 return rb_uint2big(1UL << (8 * 8 - 2));
17778 default:
17779 return x + 2;
17780 }
17781}
17782static VALUE
17783vm_opt_succ(VALUE recv)
17784{
17785 if (RB_FIXNUM_P(recv) &&
17786 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_SUCC)]&((1 << 0))) == 0), 1)))) {
17787 return fix_succ(recv);
17788 }
17789 else if (RB_SPECIAL_CONST_P(recv)) {
17790 return ((VALUE)RUBY_Qundef);
17791 }
17792 else if (RBASIC_CLASS(recv) == rb_cString &&
17793 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_SUCC)]&((1 << 2))) == 0), 1)))) {
17794 return rb_str_succ(recv);
17795 }
17796 else {
17797 return ((VALUE)RUBY_Qundef);
17798 }
17799}
17800ALWAYS_INLINE(static inline VALUE
17801vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv));
17802static inline VALUE
17803vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv) {
17804 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not)) {
17805 return ((!RB_TEST(recv)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17806 }
17807 else {
17808 return ((VALUE)RUBY_Qundef);
17809 }
17810}
17811static VALUE
17812vm_opt_regexpmatch2(VALUE recv, VALUE obj)
17813{
17814 if (RB_SPECIAL_CONST_P(recv)) {
17815 return ((VALUE)RUBY_Qundef);
17816 }
17817 else if (RBASIC_CLASS(recv) == rb_cString &&
17818 rb_class_of(obj) == rb_cRegexp &&
17819 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MATCH)]&((1 << 2))) == 0), 1)))) {
17820 return rb_reg_match(obj, recv);
17821 }
17822 else if (RBASIC_CLASS(recv) == rb_cRegexp &&
17823 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MATCH)]&((1 << 8))) == 0), 1)))) {
17824 return rb_reg_match(recv, obj);
17825 }
17826 else {
17827 return ((VALUE)RUBY_Qundef);
17828 }
17829}
17830rb_event_flag_t rb_iseq_event_flags(const rb_iseq_t *iseq, size_t pos);
17831__attribute__((__noinline__)) static void vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp);
17832static inline void
17833vm_trace_hook(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const VALUE *pc,
17834 rb_event_flag_t pc_events, rb_event_flag_t target_event,
17835 rb_hook_list_t *global_hooks, rb_hook_list_t *const *local_hooks_ptr, VALUE val)
17836{
17837 rb_event_flag_t event = pc_events & target_event;
17838 VALUE self = (((((reg_cfp)))->self));
17839 ((void)0);
17840 if (event & global_hooks->events) {
17841 reg_cfp->pc++;
17842 vm_dtrace(event, ec);
17843 rb_exec_event_hook_orig(ec, global_hooks, event, self, 0, 0, 0 , val, 0);
17844 reg_cfp->pc--;
17845 }
17846 rb_hook_list_t *local_hooks = *local_hooks_ptr;
17847 if (local_hooks != ((void *)0)) {
17848 if (event & local_hooks->events) {
17849 reg_cfp->pc++;
17850 rb_exec_event_hook_orig(ec, local_hooks, event, self, 0, 0, 0 , val, 0);
17851 reg_cfp->pc--;
17852 }
17853 }
17854}static inline
17855_Bool
17856rb_vm_opt_cfunc_p(CALL_CACHE cc, int insn)
17857{
17858 switch (insn) {
17859 case YARVINSN_opt_eq:
17860 return check_cfunc(vm_cc_cme(cc), rb_obj_equal);
17861 case YARVINSN_opt_nil_p:
17862 return check_cfunc(vm_cc_cme(cc), rb_false);
17863 case YARVINSN_opt_not:
17864 return check_cfunc(vm_cc_cme(cc), rb_obj_not);
17865 default:
17866 return 0;
17867 }
17868}
17869static void
17870vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp)
17871{
17872 const VALUE *pc = reg_cfp->pc;
17873 rb_event_flag_t enabled_flags = ruby_vm_event_flags & (0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010| 0x0020| 0x0040| 0x0100| 0x0200| 0x010000| 0x020000);
17874 rb_event_flag_t global_events = enabled_flags;
17875 if (enabled_flags == 0 && ruby_vm_event_local_num == 0) {
17876 return;
17877 }
17878 else {
17879 const rb_iseq_t *iseq = reg_cfp->iseq;
17880 VALUE iseq_val = (VALUE)iseq;
17881 size_t pos = pc - ((iseq)->body)->iseq_encoded;
17882 rb_event_flag_t pc_events = rb_iseq_event_flags(iseq, pos);
17883 rb_hook_list_t *local_hooks = iseq->aux.exec.local_hooks;
17884 rb_hook_list_t *const *local_hooks_ptr = &iseq->aux.exec.local_hooks;
17885 rb_event_flag_t iseq_local_events = local_hooks != ((void *)0) ? local_hooks->events : 0;
17886 rb_hook_list_t *bmethod_local_hooks = ((void *)0);
17887 rb_hook_list_t **bmethod_local_hooks_ptr = ((void *)0);
17888 rb_event_flag_t bmethod_local_events = 0;
17889 const _Bool bmethod_frame = VM_FRAME_BMETHOD_P(reg_cfp);
17890 enabled_flags |= iseq_local_events;
17891 ((void)0);
17892 if (bmethod_frame) {
17893 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
17894 ((void)0);
17895 bmethod_local_hooks = me->def->body.bmethod.hooks;
17896 bmethod_local_hooks_ptr = &me->def->body.bmethod.hooks;
17897 if (bmethod_local_hooks) {
17898 bmethod_local_events = bmethod_local_hooks->events;
17899 }
17900 }
17901 if ((pc_events & enabled_flags) == 0 && !bmethod_frame) {
17902 return;
17903 }
17904 else if (ec->trace_arg != ((void *)0)) {
17905 return;
17906 }
17907 else {
17908 rb_hook_list_t *global_hooks = rb_ec_ractor_hooks(ec);
17909 rb_event_flag_t bmethod_events = global_events | bmethod_local_events;
17910 if (0) {
17911 ruby_debug_printf("vm_trace>>%4d (%4x) - %s:%d %s\n",
17912 (int)pos,
17913 (int)pc_events,
17914 RSTRING_PTR(rb_iseq_path(iseq)),
17915 (int)rb_iseq_line_no(iseq, pos),
17916 RSTRING_PTR(rb_iseq_label(iseq)));
17917 }
17918 ((void)0);
17919 ((void)0);
17920 if ((pc_events & 0x0100) && bmethod_frame && (bmethod_events & 0x0008)) {
17921 vm_trace_hook(ec, reg_cfp, pc, 0x0008, 0x0008, global_hooks, bmethod_local_hooks_ptr, ((VALUE)RUBY_Qundef));
17922 }
17923 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_ptr, (((VALUE)RUBY_Qundef))); } } while (0);
17924 do { if ((pc_events & (0x0001)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x0001), global_hooks, local_hooks_ptr, (((VALUE)RUBY_Qundef))); } } while (0);
17925 do { if ((pc_events & (0x010000)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x010000), global_hooks, local_hooks_ptr, (((VALUE)RUBY_Qundef))); } } while (0);
17926 do { if ((pc_events & (0x020000)) & enabled_flags) { vm_trace_hook(ec, reg_cfp, pc, pc_events, (0x020000), global_hooks, local_hooks_ptr, (((VALUE)RUBY_Qundef))); } } while (0);
17927 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_ptr, ((*(((((reg_cfp)->sp)))-(0)-1)))); } } while (0);
17928 if ((pc_events & 0x0200) && bmethod_frame && (bmethod_events & 0x0010)) {
17929 vm_trace_hook(ec, reg_cfp, pc, 0x0010, 0x0010, global_hooks, bmethod_local_hooks_ptr, (*(((((reg_cfp)->sp)))-(0)-1)));
17930 }
17931 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(iseq_val); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
17932 }
17933 }
17934}static inline
17935void Init_vm_stack_canary(void) { }
17936static VALUE
17937builtin_invoker0(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17938{
17939 typedef VALUE (*rb_invoke_funcptr0_t)(rb_execution_context_t *ec, VALUE self);
17940 return (*(rb_invoke_funcptr0_t)funcptr)(ec, self);
17941}
17942static VALUE
17943builtin_invoker1(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17944{
17945 typedef VALUE (*rb_invoke_funcptr1_t)(rb_execution_context_t *ec, VALUE self, VALUE v1);
17946 return (*(rb_invoke_funcptr1_t)funcptr)(ec, self, argv[0]);
17947}
17948static VALUE
17949builtin_invoker2(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17950{
17951 typedef VALUE (*rb_invoke_funcptr2_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2);
17952 return (*(rb_invoke_funcptr2_t)funcptr)(ec, self, argv[0], argv[1]);
17953}
17954static VALUE
17955builtin_invoker3(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17956{
17957 typedef VALUE (*rb_invoke_funcptr3_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3);
17958 return (*(rb_invoke_funcptr3_t)funcptr)(ec, self, argv[0], argv[1], argv[2]);
17959}
17960static VALUE
17961builtin_invoker4(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17962{
17963 typedef VALUE (*rb_invoke_funcptr4_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4);
17964 return (*(rb_invoke_funcptr4_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3]);
17965}
17966static VALUE
17967builtin_invoker5(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17968{
17969 typedef VALUE (*rb_invoke_funcptr5_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5);
17970 return (*(rb_invoke_funcptr5_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4]);
17971}
17972static VALUE
17973builtin_invoker6(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17974{
17975 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);
17976 return (*(rb_invoke_funcptr6_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
17977}
17978static VALUE
17979builtin_invoker7(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17980{
17981 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);
17982 return (*(rb_invoke_funcptr7_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
17983}
17984static VALUE
17985builtin_invoker8(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17986{
17987 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);
17988 return (*(rb_invoke_funcptr8_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
17989}
17990static VALUE
17991builtin_invoker9(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17992{
17993 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);
17994 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]);
17995}
17996static VALUE
17997builtin_invoker10(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
17998{
17999 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);
18000 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]);
18001}
18002static VALUE
18003builtin_invoker11(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18004{
18005 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);
18006 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]);
18007}
18008static VALUE
18009builtin_invoker12(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18010{
18011 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);
18012 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]);
18013}
18014static VALUE
18015builtin_invoker13(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18016{
18017 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);
18018 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]);
18019}
18020static VALUE
18021builtin_invoker14(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18022{
18023 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);
18024 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]);
18025}
18026static VALUE
18027builtin_invoker15(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18028{
18029 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);
18030 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]);
18031}
18032typedef VALUE (*builtin_invoker)(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr);
18033static builtin_invoker
18034lookup_builtin_invoker(int argc)
18035{
18036 static const builtin_invoker invokers[] = {
18037 builtin_invoker0,
18038 builtin_invoker1,
18039 builtin_invoker2,
18040 builtin_invoker3,
18041 builtin_invoker4,
18042 builtin_invoker5,
18043 builtin_invoker6,
18044 builtin_invoker7,
18045 builtin_invoker8,
18046 builtin_invoker9,
18047 builtin_invoker10,
18048 builtin_invoker11,
18049 builtin_invoker12,
18050 builtin_invoker13,
18051 builtin_invoker14,
18052 builtin_invoker15,
18053 };
18054 return invokers[argc];
18055}
18056static inline VALUE
18057invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const struct rb_builtin_function* bf, const VALUE *argv)
18058{
18059 const _Bool canary_p = ((reg_cfp->iseq)->body)->builtin_inline_p;
18060 if (canary_p) {} else {};
18061 VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, (rb_insn_func_t)bf->func_ptr);
18062 if (canary_p) {(void)(YARVINSN_invokebuiltin);};
18063 return ret;
18064}
18065static VALUE
18066vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf, const VALUE *argv)
18067{
18068 return invoke_bf(ec, cfp, bf, argv);
18069}
18070static VALUE
18071vm_invoke_builtin_delegate(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function *bf, unsigned int start_index)
18072{
18073 if (0) {
18074 fputs("vm_invoke_builtin_delegate: passing -> ", (((__getreent()))->_stderr));
18075 for (int i=0; i<bf->argc; i++) {
18076 ruby_debug_printf(":%s ", rb_id2name(((cfp->iseq)->body)->local_table[i+start_index]));
18077 }
18078 ruby_debug_printf("\n" "%s %s(%d):%p\n", __func__, bf->name, bf->argc, bf->func_ptr);
18079 }
18080 if (bf->argc == 0) {
18081 return invoke_bf(ec, cfp, bf, ((void *)0));
18082 }
18083 else {
18084 const VALUE *argv = cfp->ep - ((cfp->iseq)->body)->local_table_size - ( 3) + 1 + start_index;
18085 return invoke_bf(ec, cfp, bf, argv);
18086 }
18087}static inline
18088VALUE
18089rb_vm_lvar_exposed(rb_execution_context_t *ec, int index)
18090{
18091 const rb_control_frame_t *cfp = ec->cfp;
18092 return cfp->ep[index];
18093}
18094struct local_var_list {
18095 VALUE tbl;
18096};
18097static 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);
18098static 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);
18099static inline VALUE vm_yield(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat);
18100static inline VALUE vm_yield_with_block(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE block_handler, int kw_splat);
18101static inline VALUE vm_yield_force_blockarg(rb_execution_context_t *ec, VALUE args);
18102VALUE rb_vm_exec(rb_execution_context_t *ec, _Bool jit_enable_p);
18103static 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);
18104static int vm_collect_local_variables_in_heap(const VALUE *dfp, const struct local_var_list *vars);
18105static VALUE rb_eUncaughtThrow;
18106static ID id_result, id_tag, id_value;
18107typedef enum call_type {
18108 CALL_PUBLIC,
18109 CALL_FCALL,
18110 CALL_VCALL,
18111 CALL_PUBLIC_KW,
18112 CALL_FCALL_KW,
18113 CALL_TYPE_MAX
18114} call_type;
18115static VALUE send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope);
18116static VALUE vm_call0_body(rb_execution_context_t* ec, struct rb_calling_info *calling, const VALUE *argv);
18117static inline void
18118stack_check(rb_execution_context_t *ec)
18119{
18120 if (!(((ec)->raised_flag & (RAISED_STACKOVERFLOW)) != 0) &&
18121 rb_ec_stack_check(ec)) {
18122 ((ec)->raised_flag |= (RAISED_STACKOVERFLOW));
18123 rb_ec_stack_overflow(ec, 0);
18124 }
18125}
18126static void
18127raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj,
18128 enum method_missing_reason last_call_status)
18129{
18130 VALUE exc = rb_eNoMethodError;
18131 VALUE format = 0;
18132 if ((__builtin_expect(!!(argc == 0), 0))) {
18133 rb_raise(rb_eArgError, "no method name given");
18134 }
18135 else if ((__builtin_expect(!!(!RB_SYMBOL_P(argv[0])), 0))) {
18136 const VALUE e = rb_eArgError;
18137 rb_raise(e, "method name must be a Symbol but %""l""i" "\v"" is given",
18138 rb_obj_class(argv[0]));
18139 }
18140 stack_check(ec);
18141 if (last_call_status & MISSING_PRIVATE) {
18142 format = rb_fstring_new(("private method `%s' called for %s%s%s"), (sizeof("private method `%s' called for %s%s%s" "") - 1));
18143 }
18144 else if (last_call_status & MISSING_PROTECTED) {
18145 format = rb_fstring_new(("protected method `%s' called for %s%s%s"), (sizeof("protected method `%s' called for %s%s%s" "") - 1));
18146 }
18147 else if (last_call_status & MISSING_VCALL) {
18148 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));
18149 exc = rb_eNameError;
18150 }
18151 else if (last_call_status & MISSING_SUPER) {
18152 format = rb_fstring_new(("super: no superclass method `%s' for %s%s%s"), (sizeof("super: no superclass method `%s' for %s%s%s" "") - 1));
18153 }
18154 {
18155 exc = rb_make_no_method_exception(exc, format, obj, argc, argv,
18156 last_call_status & (MISSING_FCALL|MISSING_VCALL));
18157 if (!(last_call_status & MISSING_MISSING)) {
18158 rb_vm_pop_cfunc_frame();
18159 }
18160 rb_exc_raise(exc);
18161 }
18162}
18163static void
18164vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv,
18165 VALUE obj, int call_status)
18166{
18167 vm_passed_block_handler_set(ec, 0);
18168 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
18169}
18170static inline VALUE
18171method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat)
18172{
18173 VALUE *nargv, result, work, klass;
18174 VALUE block_handler = vm_passed_block_handler(ec);
18175 const rb_callable_method_entry_t *me;
18176 ec->method_missing_reason = call_status;
18177 if (id == idMethodMissing) {
18178 goto missing;
18179 }
18180 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))));
18181 nargv[0] = rb_id2sym(id);
18182 ruby_nonempty_memcpy((nargv + 1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
18183 ++argc;
18184 argv = nargv;
18185 klass = rb_class_of(obj);
18186 if (!klass) goto missing;
18187 me = rb_callable_method_entry(klass, idMethodMissing);
18188 if (!me || (int) (((me)->flags & (((VALUE)RUBY_FL_USER6) )) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+2))) goto missing;
18189 vm_passed_block_handler_set(ec, block_handler);
18190 result = rb_vm_call_kw(ec, obj, idMethodMissing, argc, argv, me, kw_splat);
18191 if (work) rb_free_tmp_buffer(&(work));
18192 return result;
18193 missing:
18194 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
18195 __builtin_unreachable();
18196}
18197static rb_control_frame_t *
18198vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
18199{
18200 if (VM_FRAME_RUBYFRAME_P(cfp)) {
18201 return (rb_control_frame_t *)cfp;
18202 }
18203 cfp = ((cfp)+1);
18204 while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
18205 if (VM_FRAME_RUBYFRAME_P(cfp)) {
18206 return (rb_control_frame_t *)cfp;
18207 }
18208 if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_PASSED) == 0) {
18209 break;
18210 }
18211 cfp = ((cfp)+1);
18212 }
18213 return 0;
18214}
18215static void
18216rb_vm_pop_cfunc_frame(void)
18217{
18218 rb_execution_context_t *ec = rb_current_execution_context(1);
18219 rb_control_frame_t *cfp = ec->cfp;
18220 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
18221 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);
18222 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);
18223 vm_pop_frame(ec, cfp, cfp->ep);
18224}
18225static VALUE
18226vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18227{
18228 ((void)0);
18229 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 0);
18230}
18231static VALUE
18232vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18233{
18234 ((void)0);
18235 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 1);
18236}
18237static VALUE
18238vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18239{
18240 ((void)0);
18241 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 2);
18242}
18243static VALUE
18244vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18245{
18246 ((void)0);
18247 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 3);
18248}
18249static VALUE
18250vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18251{
18252 ((void)0);
18253 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 4);
18254}
18255static VALUE
18256vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18257{
18258 ((void)0);
18259 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 5);
18260}
18261static VALUE
18262vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18263{
18264 ((void)0);
18265 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 0);
18266}
18267static VALUE
18268vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18269{
18270 ((void)0);
18271 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 1);
18272}
18273static VALUE
18274vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18275{
18276 ((void)0);
18277 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 2);
18278}
18279static VALUE
18280vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18281{
18282 ((void)0);
18283 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 3);
18284}
18285static VALUE
18286vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18287{
18288 ((void)0);
18289 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 4);
18290}
18291static VALUE
18292vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18293{
18294 ((void)0);
18295 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 5);
18296}
18297static VALUE
18298vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18299{
18300 ((void)0);
18301 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 0);
18302}
18303static VALUE
18304vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18305{
18306 ((void)0);
18307 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 1);
18308}
18309static VALUE
18310vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18311{
18312 ((void)0);
18313 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 2);
18314}
18315static VALUE
18316vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18317{
18318 ((void)0);
18319 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 3);
18320}
18321static VALUE
18322vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18323{
18324 ((void)0);
18325 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 4);
18326}
18327static VALUE
18328vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18329{
18330 ((void)0);
18331 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 5);
18332}
18333static VALUE
18334vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18335{
18336 ((void)0);
18337 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 0);
18338}
18339static VALUE
18340vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18341{
18342 ((void)0);
18343 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 1);
18344}
18345static VALUE
18346vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18347{
18348 ((void)0);
18349 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 2);
18350}
18351static VALUE
18352vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18353{
18354 ((void)0);
18355 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 3);
18356}
18357static VALUE
18358vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18359{
18360 ((void)0);
18361 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 4);
18362}
18363static VALUE
18364vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18365{
18366 ((void)0);
18367 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 5);
18368}
18369static const vm_call_handler vm_call_iseq_handlers[][6] = {
18370 {
18371 vm_call_iseq_setup_normal_0start_0params_0locals,
18372 vm_call_iseq_setup_normal_0start_0params_1locals,
18373 vm_call_iseq_setup_normal_0start_0params_2locals,
18374 vm_call_iseq_setup_normal_0start_0params_3locals,
18375 vm_call_iseq_setup_normal_0start_0params_4locals,
18376 vm_call_iseq_setup_normal_0start_0params_5locals,
18377 },
18378 {
18379 vm_call_iseq_setup_normal_0start_1params_0locals,
18380 vm_call_iseq_setup_normal_0start_1params_1locals,
18381 vm_call_iseq_setup_normal_0start_1params_2locals,
18382 vm_call_iseq_setup_normal_0start_1params_3locals,
18383 vm_call_iseq_setup_normal_0start_1params_4locals,
18384 vm_call_iseq_setup_normal_0start_1params_5locals,
18385 },
18386 {
18387 vm_call_iseq_setup_normal_0start_2params_0locals,
18388 vm_call_iseq_setup_normal_0start_2params_1locals,
18389 vm_call_iseq_setup_normal_0start_2params_2locals,
18390 vm_call_iseq_setup_normal_0start_2params_3locals,
18391 vm_call_iseq_setup_normal_0start_2params_4locals,
18392 vm_call_iseq_setup_normal_0start_2params_5locals,
18393 },
18394 {
18395 vm_call_iseq_setup_normal_0start_3params_0locals,
18396 vm_call_iseq_setup_normal_0start_3params_1locals,
18397 vm_call_iseq_setup_normal_0start_3params_2locals,
18398 vm_call_iseq_setup_normal_0start_3params_3locals,
18399 vm_call_iseq_setup_normal_0start_3params_4locals,
18400 vm_call_iseq_setup_normal_0start_3params_5locals,
18401 },
18402};
18403static inline vm_call_handler
18404vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size)
18405{
18406 if ((__builtin_expect(!!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit)), 0))) {
18407 return &vm_call_iseq_setup_tailcall_0start;
18408 }
18409 else if (0) {
18410 return &vm_call_iseq_setup_normal_0start;
18411 }
18412 else if (param_size <= 3 && local_size <= 5) {
18413 ((void)0);
18414 return vm_call_iseq_handlers[param_size][local_size];
18415 }
18416 else {
18417 return &vm_call_iseq_setup_normal_0start;
18418 }
18419}
18420#define MJIT_HEADER 1
18421#undef _FORTIFY_SOURCE
18422#define _FORTIFY_SOURCE 2
18423#define RUBY_EXPORT 1
18424#define _XOPEN_SOURCE 1
18425#define _GNU_SOURCE 1
18426#define vm_exec rb_vm_exec
18427#define RUBY_EVAL_INTERN_H
18428#define RUBY_RUBY_H 1
18429#define RBIMPL_CONFIG_H
18430#define INCLUDE_RUBY_CONFIG_H 1
18431#define HAVE_STDIO_H 1
18432#define HAVE_STDLIB_H 1
18433#define HAVE_STRING_H 1
18434#define HAVE_INTTYPES_H 1
18435#define HAVE_STDINT_H 1
18436#define HAVE_STRINGS_H 1
18437#define HAVE_SYS_STAT_H 1
18438#define HAVE_SYS_TYPES_H 1
18439#define HAVE_UNISTD_H 1
18440#define HAVE_WCHAR_H 1
18441#define STDC_HEADERS 1
18442#define _ALL_SOURCE 1
18443#define _DARWIN_C_SOURCE 1
18444#define _GNU_SOURCE 1
18445#define _HPUX_ALT_XOPEN_SOCKET_API 1
18446#define _NETBSD_SOURCE 1
18447#define _OPENBSD_SOURCE 1
18448#define _POSIX_PTHREAD_SEMANTICS 1
18449#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
18450#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
18451#define __STDC_WANT_IEC_60559_DFP_EXT__ 1
18452#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
18453#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
18454#define __STDC_WANT_LIB_EXT2__ 1
18455#define __STDC_WANT_MATH_SPEC_FUNCS__ 1
18456#define _TANDEM_SOURCE 1
18457#define __EXTENSIONS__ 1
18458#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)")
18459#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop")
18460#define HAVE_STMT_AND_DECL_IN_EXPR 1
18461#define HAVE_PTHREAD_H 1
18462#define _REENTRANT 1
18463#define _THREAD_SAFE 1
18464#define HAVE_LIBPTHREAD 1
18465#define THREAD_IMPL_H "thread_pthread.h"
18466#define THREAD_IMPL_SRC "thread_pthread.c"
18467#define HAVE_CYGWIN_CONV_PATH 1
18468#define HAVE_LIBCRYPT 1
18469#define HAVE_LIBDL 1
18470#define HAVE_DIRENT_H 1
18471#define HAVE__BOOL 1
18472#define HAVE_STDBOOL_H 1
18473#define HAVE_SYS_WAIT_H 1
18474#define HAVE_GRP_H 1
18475#define HAVE_FCNTL_H 1
18476#define HAVE_FLOAT_H 1
18477#define HAVE_IEEEFP_H 1
18478#define HAVE_LANGINFO_H 1
18479#define HAVE_LIMITS_H 1
18480#define HAVE_LOCALE_H 1
18481#define HAVE_MALLOC_H 1
18482#define HAVE_PROCESS_H 1
18483#define HAVE_PWD_H 1
18484#define HAVE_STDALIGN_H 1
18485#define HAVE_STDIO_H 1
18486#define HAVE_SYS_FCNTL_H 1
18487#define HAVE_SYS_FILE_H 1
18488#define HAVE_SYS_IOCTL_H 1
18489#define HAVE_SYS_PARAM_H 1
18490#define HAVE_SYS_RANDOM_H 1
18491#define HAVE_SYS_RESOURCE_H 1
18492#define HAVE_SYS_SELECT_H 1
18493#define HAVE_SYS_SOCKET_H 1
18494#define HAVE_SYS_SYSMACROS_H 1
18495#define HAVE_SYS_TIME_H 1
18496#define HAVE_SYS_TIMES_H 1
18497#define HAVE_SYS_UIO_H 1
18498#define HAVE_SYS_UTIME_H 1
18499#define HAVE_TIME_H 1
18500#define HAVE_UCONTEXT_H 1
18501#define HAVE_UTIME_H 1
18502#define HAVE_X86INTRIN_H 1
18503#define HAVE_X86INTRIN_H 1
18504#define HAVE_GMP_H 1
18505#define HAVE_LIBGMP 1
18506#define HAVE_TYPEOF 1
18507#define restrict __restrict__
18508#define HAVE_LONG_LONG 1
18509#define HAVE_OFF_T 1
18510#define SIZEOF_INT 4
18511#define SIZEOF_SHORT 2
18512#define SIZEOF_LONG 8
18513#define SIZEOF_LONG_LONG 8
18514#define SIZEOF___INT64 0
18515#define SIZEOF___INT128 16
18516#define SIZEOF_OFF_T 8
18517#define SIZEOF_VOIDP 8
18518#define SIZEOF_FLOAT 4
18519#define SIZEOF_DOUBLE 8
18520#define SIZEOF_TIME_T 8
18521#define SIZEOF_CLOCK_T 8
18522#define PACKED_STRUCT(x) x __attribute__((packed))
18523#define USE_UNALIGNED_MEMBER_ACCESS 1
18524#define PRI_LL_PREFIX "ll"
18525#define HAVE_PID_T 1
18526#define rb_pid_t pid_t
18527#define SIGNEDNESS_OF_PID_T -1
18528#define PIDT2NUM(v) INT2NUM(v)
18529#define NUM2PIDT(v) NUM2INT(v)
18530#define PRI_PIDT_PREFIX PRI_INT_PREFIX
18531#define HAVE_UID_T 1
18532#define rb_uid_t uid_t
18533#define SIGNEDNESS_OF_UID_T +1
18534#define UIDT2NUM(v) UINT2NUM(v)
18535#define NUM2UIDT(v) NUM2UINT(v)
18536#define PRI_UIDT_PREFIX PRI_INT_PREFIX
18537#define HAVE_GID_T 1
18538#define rb_gid_t gid_t
18539#define SIGNEDNESS_OF_GID_T +1
18540#define GIDT2NUM(v) UINT2NUM(v)
18541#define NUM2GIDT(v) NUM2UINT(v)
18542#define PRI_GIDT_PREFIX PRI_INT_PREFIX
18543#define HAVE_TIME_T 1
18544#define rb_time_t time_t
18545#define SIGNEDNESS_OF_TIME_T -1
18546#define TIMET2NUM(v) LONG2NUM(v)
18547#define NUM2TIMET(v) NUM2LONG(v)
18548#define PRI_TIMET_PREFIX PRI_LONG_PREFIX
18549#define HAVE_DEV_T 1
18550#define rb_dev_t dev_t
18551#define SIGNEDNESS_OF_DEV_T +1
18552#define DEVT2NUM(v) UINT2NUM(v)
18553#define NUM2DEVT(v) NUM2UINT(v)
18554#define PRI_DEVT_PREFIX PRI_INT_PREFIX
18555#define HAVE_MODE_T 1
18556#define rb_mode_t mode_t
18557#define SIGNEDNESS_OF_MODE_T +1
18558#define MODET2NUM(v) UINT2NUM(v)
18559#define NUM2MODET(v) NUM2UINT(v)
18560#define PRI_MODET_PREFIX PRI_INT_PREFIX
18561#define HAVE_RLIM_T 1
18562#define rb_rlim_t rlim_t
18563#define SIGNEDNESS_OF_RLIM_T +1
18564#define RLIM2NUM(v) ULONG2NUM(v)
18565#define NUM2RLIM(v) NUM2ULONG(v)
18566#define PRI_RLIM_PREFIX PRI_LONG_PREFIX
18567#define HAVE_OFF_T 1
18568#define rb_off_t off_t
18569#define SIGNEDNESS_OF_OFF_T -1
18570#define OFFT2NUM(v) LONG2NUM(v)
18571#define NUM2OFFT(v) NUM2LONG(v)
18572#define PRI_OFFT_PREFIX PRI_LONG_PREFIX
18573#define HAVE_CLOCKID_T 1
18574#define rb_clockid_t clockid_t
18575#define SIGNEDNESS_OF_CLOCKID_T +1
18576#define CLOCKID2NUM(v) ULONG2NUM(v)
18577#define NUM2CLOCKID(v) NUM2ULONG(v)
18578#define PRI_CLOCKID_PREFIX PRI_LONG_PREFIX
18579#define HAVE_VA_ARGS_MACRO 1
18580#define HAVE__ALIGNOF 1
18581#define CONSTFUNC(x) __attribute__ ((__const__)) x
18582#define PUREFUNC(x) __attribute__ ((__pure__)) x
18583#define NORETURN(x) __attribute__ ((__noreturn__)) x
18584#define DEPRECATED(x) __attribute__ ((__deprecated__)) x
18585#define DEPRECATED_BY(n,x) __attribute__ ((__deprecated__("by "#n))) x
18586#define NOINLINE(x) __attribute__ ((__noinline__)) x
18587#define NO_SANITIZE(san,x) __attribute__ ((__no_sanitize__(san))) x
18588#define NO_SANITIZE_ADDRESS(x) __attribute__ ((__no_sanitize_address__)) x
18589#define NO_ADDRESS_SAFETY_ANALYSIS(x) __attribute__ ((__no_address_safety_analysis__)) x
18590#define WARN_UNUSED_RESULT(x) __attribute__ ((__warn_unused_result__)) x
18591#define MAYBE_UNUSED(x) __attribute__ ((__unused__)) x
18592#define ERRORFUNC(mesg,x) __attribute__ ((__error__ mesg)) x
18593#define WARNINGFUNC(mesg,x) __attribute__ ((__warning__ mesg)) x
18594#define WEAK(x) __attribute__ ((__weak__)) x
18595#define HAVE_FUNC_WEAK 1
18596#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
18597#define HAVE_NULLPTR 1
18598#define FUNC_STDCALL(x) __attribute__ ((__stdcall__)) x
18599#define FUNC_CDECL(x) __attribute__ ((__cdecl__)) x
18600#define FUNC_FASTCALL(x) __attribute__ ((__fastcall__)) x
18601#define FUNC_UNOPTIMIZED(x) __attribute__ ((__optimize__("O0"))) x
18602#define FUNC_MINIMIZED(x) __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
18603#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1
18604#define RUBY_ALIAS_FUNCTION_TYPE(type,prot,name,args) type prot __attribute__((alias(#name)));
18605#define RUBY_ALIAS_FUNCTION_VOID(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)
18606#define HAVE_GCC_ATOMIC_BUILTINS 1
18607#define HAVE_GCC_SYNC_BUILTINS 1
18608#define HAVE___BUILTIN_UNREACHABLE 1
18609#define RUBY_FUNC_EXPORTED __attribute__ ((__visibility__("default"))) extern
18610#define RUBY_FUNC_NONNULL(n,x) __attribute__ ((__nonnull__(n))) x
18611#define RUBY_FUNCTION_NAME_STRING __func__
18612#define ENUM_OVER_INT 1
18613#define HAVE_DECL_SYS_NERR 1
18614#define HAVE_DECL_GETENV 1
18615#define SIZEOF_SIZE_T 8
18616#define SIZEOF_PTRDIFF_T 8
18617#define SIZEOF_DEV_T 4
18618#define PRI_SIZE_PREFIX "z"
18619#define PRI_PTRDIFF_PREFIX "t"
18620#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
18621#define HAVE_STRUCT_STAT_ST_BLOCKS 1
18622#define HAVE_STRUCT_STAT_ST_RDEV 1
18623#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T
18624#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T
18625#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG
18626#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T
18627#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T
18628#define HAVE_STRUCT_STAT_ST_ATIM 1
18629#define HAVE_STRUCT_STAT_ST_MTIM 1
18630#define HAVE_STRUCT_STAT_ST_CTIM 1
18631#define HAVE_STRUCT_TIMEVAL 1
18632#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T
18633#define HAVE_STRUCT_TIMESPEC 1
18634#define HAVE_STRUCT_TIMEZONE 1
18635#define HAVE_RB_FD_INIT 1
18636#define HAVE_INT8_T 1
18637#define SIZEOF_INT8_T 1
18638#define HAVE_UINT8_T 1
18639#define SIZEOF_UINT8_T 1
18640#define HAVE_INT16_T 1
18641#define SIZEOF_INT16_T 2
18642#define HAVE_UINT16_T 1
18643#define SIZEOF_UINT16_T 2
18644#define HAVE_INT32_T 1
18645#define SIZEOF_INT32_T 4
18646#define HAVE_UINT32_T 1
18647#define SIZEOF_UINT32_T 4
18648#define HAVE_INT64_T 1
18649#define SIZEOF_INT64_T 8
18650#define HAVE_UINT64_T 1
18651#define SIZEOF_UINT64_T 8
18652#define HAVE_INT128_T 1
18653#define int128_t __int128
18654#define SIZEOF_INT128_T SIZEOF___INT128
18655#define HAVE_UINT128_T 1
18656#define uint128_t unsigned __int128
18657#define SIZEOF_UINT128_T SIZEOF___INT128
18658#define HAVE_INTPTR_T 1
18659#define SIZEOF_INTPTR_T 8
18660#define HAVE_UINTPTR_T 1
18661#define SIZEOF_UINTPTR_T 8
18662#define HAVE_SSIZE_T 1
18663#define SIZEOF_SSIZE_T 8
18664#define GETGROUPS_T gid_t
18665#define HAVE_ALLOCA_H 1
18666#define HAVE_ALLOCA 1
18667#define HAVE_DUP 1
18668#define HAVE_DUP2 1
18669#define HAVE_ACOSH 1
18670#define HAVE_CBRT 1
18671#define HAVE_CRYPT 1
18672#define HAVE_ERF 1
18673#define HAVE_EXPLICIT_BZERO 1
18674#define HAVE_FFS 1
18675#define HAVE_FLOCK 1
18676#define HAVE_HYPOT 1
18677#define HAVE_LGAMMA_R 1
18678#define HAVE_MEMMOVE 1
18679#define HAVE_NAN 1
18680#define HAVE_NEXTAFTER 1
18681#define HAVE_STRCHR 1
18682#define HAVE_STRERROR 1
18683#define HAVE_STRLCAT 1
18684#define HAVE_STRLCPY 1
18685#define HAVE_STRSTR 1
18686#define HAVE_TGAMMA 1
18687#define HAVE_ISFINITE 1
18688#define HAVE_SIGNBIT 1
18689#define HAVE_FORK 1
18690#define HAVE_VFORK 1
18691#define HAVE_WORKING_VFORK 1
18692#define HAVE_WORKING_FORK 1
18693#define HAVE__LONGJMP 1
18694#define HAVE_ARC4RANDOM_BUF 1
18695#define HAVE_ATAN2L 1
18696#define HAVE_ATAN2F 1
18697#define HAVE_CHMOD 1
18698#define HAVE_CHOWN 1
18699#define HAVE_CHROOT 1
18700#define HAVE_CLOCK_GETTIME 1
18701#define HAVE_COSH 1
18702#define HAVE_CRYPT_R 1
18703#define HAVE_DIRFD 1
18704#define HAVE_DLOPEN 1
18705#define HAVE_DLADDR 1
18706#define HAVE_DUP3 1
18707#define HAVE_EACCESS 1
18708#define HAVE_ENDGRENT 1
18709#define HAVE_EXECL 1
18710#define HAVE_EXECLE 1
18711#define HAVE_EXECV 1
18712#define HAVE_EXECVE 1
18713#define HAVE_FCHMOD 1
18714#define HAVE_FCHOWN 1
18715#define HAVE_FCNTL 1
18716#define HAVE_FDATASYNC 1
18717#define HAVE_FDOPENDIR 1
18718#define HAVE_FMOD 1
18719#define HAVE_FSTATAT 1
18720#define HAVE_FSYNC 1
18721#define HAVE_FTRUNCATE 1
18722#define HAVE_GETCWD 1
18723#define HAVE_GETEGID 1
18724#define HAVE_GETENTROPY 1
18725#define HAVE_GETEUID 1
18726#define HAVE_GETGID 1
18727#define HAVE_GETGRNAM 1
18728#define HAVE_GETGRNAM_R 1
18729#define HAVE_GETGROUPS 1
18730#define HAVE_GETLOGIN 1
18731#define HAVE_GETLOGIN_R 1
18732#define HAVE_GETPGID 1
18733#define HAVE_GETPGRP 1
18734#define HAVE_GETPPID 1
18735#define HAVE_GETPRIORITY 1
18736#define HAVE_GETPWNAM 1
18737#define HAVE_GETPWNAM_R 1
18738#define HAVE_GETPWUID 1
18739#define HAVE_GETPWUID_R 1
18740#define HAVE_GETRANDOM 1
18741#define HAVE_GETRLIMIT 1
18742#define HAVE_GETSID 1
18743#define HAVE_GETTIMEOFDAY 1
18744#define HAVE_GETUID 1
18745#define HAVE_GMTIME_R 1
18746#define HAVE_GRANTPT 1
18747#define HAVE_INITGROUPS 1
18748#define HAVE_IOCTL 1
18749#define HAVE_ISSETUGID 1
18750#define HAVE_KILL 1
18751#define HAVE_KILLPG 1
18752#define HAVE_LCHOWN 1
18753#define HAVE_LINK 1
18754#define HAVE_LLABS 1
18755#define HAVE_LOCKF 1
18756#define HAVE_LOG2 1
18757#define HAVE_LSTAT 1
18758#define HAVE_LUTIMES 1
18759#define HAVE_MALLOC_USABLE_SIZE 1
18760#define HAVE_MBLEN 1
18761#define HAVE_MEMALIGN 1
18762#define HAVE_WRITEV 1
18763#define HAVE_MEMRCHR 1
18764#define HAVE_MEMMEM 1
18765#define HAVE_MKFIFO 1
18766#define HAVE_MKNOD 1
18767#define HAVE_MKTIME 1
18768#define HAVE_MMAP 1
18769#define HAVE_OPENAT 1
18770#define HAVE_PCLOSE 1
18771#define HAVE_PIPE 1
18772#define HAVE_PIPE2 1
18773#define HAVE_POLL 1
18774#define HAVE_POPEN 1
18775#define HAVE_POSIX_FADVISE 1
18776#define HAVE_POSIX_MADVISE 1
18777#define HAVE_POSIX_MEMALIGN 1
18778#define HAVE_PPOLL 1
18779#define HAVE_PREAD 1
18780#define HAVE_PWRITE 1
18781#define HAVE_QSORT_R 1
18782#define HAVE_READLINK 1
18783#define HAVE_REALPATH 1
18784#define HAVE_ROUND 1
18785#define HAVE_SCHED_GETAFFINITY 1
18786#define HAVE_SEEKDIR 1
18787#define HAVE_SETEGID 1
18788#define HAVE_SETENV 1
18789#define HAVE_SETEUID 1
18790#define HAVE_SETGID 1
18791#define HAVE_SETGROUPS 1
18792#define HAVE_SETPGID 1
18793#define HAVE_SETPGRP 1
18794#define HAVE_SETREGID 1
18795#define HAVE_SETREUID 1
18796#define HAVE_SETRLIMIT 1
18797#define HAVE_SETSID 1
18798#define HAVE_SETUID 1
18799#define HAVE_SHUTDOWN 1
18800#define HAVE_SIGACTION 1
18801#define HAVE_SIGALTSTACK 1
18802#define HAVE_SIGPROCMASK 1
18803#define HAVE_SINH 1
18804#define HAVE_SPAWNV 1
18805#define HAVE_SYMLINK 1
18806#define HAVE_SYSCONF 1
18807#define HAVE_SYSTEM 1
18808#define HAVE_TANH 1
18809#define HAVE_TELLDIR 1
18810#define HAVE_TIMEGM 1
18811#define HAVE_TIMES 1
18812#define HAVE_TRUNCATE 1
18813#define HAVE_TZSET 1
18814#define HAVE_UMASK 1
18815#define HAVE_UNSETENV 1
18816#define HAVE_UTIMENSAT 1
18817#define HAVE_UTIMES 1
18818#define HAVE_WAIT4 1
18819#define HAVE_WAITPID 1
18820#define HAVE_CRYPT_H 1
18821#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1
18822#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1
18823#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1
18824#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
18825#define HAVE_BUILTIN___BUILTIN_BSWAP32 1
18826#define HAVE_BUILTIN___BUILTIN_BSWAP64 1
18827#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1
18828#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1
18829#define HAVE_BUILTIN___BUILTIN_CLZ 1
18830#define HAVE_BUILTIN___BUILTIN_CLZL 1
18831#define HAVE_BUILTIN___BUILTIN_CLZLL 1
18832#define HAVE_BUILTIN___BUILTIN_CTZ 1
18833#define HAVE_BUILTIN___BUILTIN_CTZLL 1
18834#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1
18835#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1
18836#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1
18837#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1
18838#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1
18839#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1
18840#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1
18841#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1
18842#define HAVE_BUILTIN___BUILTIN_TRAP 1
18843#define HAVE_BUILTIN___BUILTIN_EXPECT 1
18844#define HAVE_GNU_QSORT_R 1
18845#define ATAN2_INF_C99 1
18846#define HAVE_CLOCK_GETRES 1
18847#define HAVE_LIBRT 1
18848#define HAVE_LIBRT 1
18849#define HAVE_TIMER_CREATE 1
18850#define HAVE_TIMER_SETTIME 1
18851#define HAVE_STRUCT_TM_TM_ZONE 1
18852#define HAVE_TM_ZONE 1
18853#define HAVE_STRUCT_TM_TM_GMTOFF 1
18854#define HAVE_DAYLIGHT 1
18855#define NEGATIVE_TIME_T 1
18856#define POSIX_SIGNAL 1
18857#define HAVE_SIG_T 1
18858#define RSHIFT(x,y) ((x)>>(int)(y))
18859#define HAVE__SC_CLK_TCK 1
18860#define STACK_GROW_DIRECTION -1
18861#define HAVE_GETCONTEXT 1
18862#define HAVE_SWAPCONTEXT 1
18863#define HAVE_MAKECONTEXT 1
18864#define COROUTINE_H "coroutine/ucontext/Context.h"
18865#define HAVE_SCHED_YIELD 1
18866#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1
18867#define HAVE_PTHREAD_ATTR_GETSTACK 1
18868#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
18869#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
18870#define HAVE_PTHREAD_SETNAME_NP 1
18871#define HAVE_PTHREAD_SIGMASK 1
18872#define HAVE_PTHREAD_GETATTR_NP 1
18873#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name)
18874#define SET_ANOTHER_THREAD_NAME(thid,name) pthread_setname_np(thid, name)
18875#define DEFINE_MCONTEXT_PTR(mc,uc) mcontext_t *mc = &(uc)->uc_mcontext
18876#define HAVE_GETCONTEXT 1
18877#define HAVE_SETCONTEXT 1
18878#define HAVE_CONST_PAGE_SIZE 0
18879#define IOCTL_REQ_TYPE unsigned long
18880#define NUM2IOCTLREQ(num) NUM2ULONG(num)
18881#define DLEXT_MAXLEN 3
18882#define DLEXT ".so"
18883#define LIBDIR_BASENAME "lib"
18884#define EXECUTABLE_EXTS ".exe",".com",".cmd",".bat"
18885#define HAVE__SETJMP 1
18886#define RUBY_SETJMP(env) __builtin_setjmp((env))
18887#define RUBY_LONGJMP(env,val) __builtin_longjmp((env),val)
18888#define USE_MJIT 1
18889#define USE_YJIT 0
18890#define RUBY_PLATFORM "x86_64-cygwin"
18891#define RBIMPL_COMPILER_SINCE_H
18892#define RBIMPL_COMPILER_IS_H
18893#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc
18894#define RBIMPL_COMPILER_IS_APPLE_H
18895#define RBIMPL_COMPILER_IS_Apple 0
18896#define RBIMPL_COMPILER_IS_CLANG_H
18897#define RBIMPL_COMPILER_IS_Clang 0
18898#define RBIMPL_COMPILER_IS_GCC_H
18899#define RBIMPL_COMPILER_IS_INTEL_H
18900#define RBIMPL_COMPILER_IS_Intel 0
18901#define RBIMPL_COMPILER_IS_GCC 1
18902#define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__
18903#define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__
18904#define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__
18905#define RBIMPL_COMPILER_IS_MSVC_H
18906#define RBIMPL_COMPILER_IS_MSVC 0
18907#define RBIMPL_COMPILER_IS_SUNPRO_H
18908#define RBIMPL_COMPILER_IS_SunPro 0
18909#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)))))))
18910#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)))))))
18911#undef HAVE_PROTOTYPES
18912#define HAVE_PROTOTYPES 1
18913#undef HAVE_STDARG_PROTOTYPES
18914#define HAVE_STDARG_PROTOTYPES 1
18915#undef TOKEN_PASTE
18916#define TOKEN_PASTE(x,y) x ##y
18917#define STRINGIZE(expr) STRINGIZE0(expr)
18918#define STRINGIZE0(expr) #expr
18919#define UNALIGNED_WORD_ACCESS 1
18920#define RBIMPL_TEST3(q,w,e,...) e
18921#define RBIMPL_TEST2(...) RBIMPL_TEST3(__VA_OPT__(,),1,0,0)
18922#define RBIMPL_TEST1() RBIMPL_TEST2("ruby")
18923#define HAVE___VA_OPT__
18924#undef RBIMPL_TEST1
18925#undef RBIMPL_TEST2
18926#undef RBIMPL_TEST3
18927#define USE_RVARGC 1
18928#define _STDARG_H
18929#define _ANSI_STDARG_H_
18930#undef __need___va_list
18931#define __GNUC_VA_LIST
18932#define va_start(v,l) __builtin_va_start(v,l)
18933#define va_end(v) __builtin_va_end(v)
18934#define va_arg(v,l) __builtin_va_arg(v,l)
18935#define va_copy(d,s) __builtin_va_copy(d,s)
18936#define __va_copy(d,s) __builtin_va_copy(d,s)
18937#define _VA_LIST_
18938#define _VA_LIST
18939#define _VA_LIST_DEFINED
18940#define _VA_LIST_T_H
18941#define __va_list__
18942#define RUBY_DEFINES_H 1
18943#define _STDIO_H_
18944#define _ANSIDECL_H_
18945#define __NEWLIB_H__ 1
18946#define _NEWLIB_VERSION_H__ 1
18947#define _NEWLIB_VERSION "4.2.0"
18948#define __NEWLIB__ 4
18949#define __NEWLIB_MINOR__ 2
18950#define __NEWLIB_PATCHLEVEL__ 0
18951#define _ATEXIT_DYNAMIC_ALLOC 1
18952#define _FSEEK_OPTIMIZATION 1
18953#define _FVWRITE_IN_STREAMIO 1
18954#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1
18955#define _HAVE_LONG_DOUBLE 1
18956#define _MB_CAPABLE 1
18957#define _MB_LEN_MAX 8
18958#define _REENT_CHECK_VERIFY 1
18959#define _UNBUF_STREAM_OPT 1
18960#define _WANT_IO_C99_FORMATS 1
18961#define _WANT_IO_LONG_DOUBLE 1
18962#define _WANT_IO_LONG_LONG 1
18963#define _WANT_IO_POS_ARGS 1
18964#define _WANT_USE_GDTOA 1
18965#define _WIDE_ORIENT 1
18966#define __SYS_CONFIG_H__
18967#define __IEEE_LITTLE_ENDIAN
18968#define _SUPPORTS_ERREXCEPT
18969#define __OBSOLETE_MATH_DEFAULT 0
18970#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT
18971#define _SYS_FEATURES_H
18972#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
18973#define __GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi)
18974#undef _ATFILE_SOURCE
18975#define _ATFILE_SOURCE 1
18976#undef _DEFAULT_SOURCE
18977#define _DEFAULT_SOURCE 1
18978#undef _ISOC99_SOURCE
18979#define _ISOC99_SOURCE 1
18980#undef _ISOC11_SOURCE
18981#define _ISOC11_SOURCE 1
18982#undef _POSIX_SOURCE
18983#define _POSIX_SOURCE 1
18984#undef _POSIX_C_SOURCE
18985#define _POSIX_C_SOURCE 200809L
18986#undef _XOPEN_SOURCE
18987#define _XOPEN_SOURCE 700
18988#undef _XOPEN_SOURCE_EXTENDED
18989#define _XOPEN_SOURCE_EXTENDED 1
18990#undef _POSIX_SOURCE
18991#define _POSIX_SOURCE 1
18992#undef _POSIX_C_SOURCE
18993#define _POSIX_C_SOURCE 200809L
18994#undef _ATFILE_SOURCE
18995#define _ATFILE_SOURCE 1
18996#define __ATFILE_VISIBLE 1
18997#define __BSD_VISIBLE 1
18998#define __GNU_VISIBLE 1
18999#define __ISO_C_VISIBLE 2011
19000#define __LARGEFILE_VISIBLE 1
19001#define __MISC_VISIBLE 1
19002#define __POSIX_VISIBLE 200809
19003#define __SVID_VISIBLE 1
19004#define __XSI_VISIBLE 700
19005#define __SSP_FORTIFY_LEVEL 2
19006#define _POSIX_VERSION 200809L
19007#define _POSIX2_VERSION 200809L
19008#define _XOPEN_VERSION __XSI_VISIBLE
19009#define _POSIX_ADVISORY_INFO 200809L
19010#define _POSIX_ASYNCHRONOUS_IO 200809L
19011#define _POSIX_BARRIERS 200809L
19012#define _POSIX_CHOWN_RESTRICTED 1
19013#define _POSIX_CLOCK_SELECTION 200809L
19014#define _POSIX_CPUTIME 200809L
19015#define _POSIX_FSYNC 200809L
19016#define _POSIX_IPV6 200809L
19017#define _POSIX_JOB_CONTROL 1
19018#define _POSIX_MAPPED_FILES 200809L
19019#define _POSIX_MEMLOCK_RANGE 200809L
19020#define _POSIX_MEMORY_PROTECTION 200809L
19021#define _POSIX_MESSAGE_PASSING 200809L
19022#define _POSIX_MONOTONIC_CLOCK 200809L
19023#define _POSIX_NO_TRUNC 1
19024#define _POSIX_PRIORITY_SCHEDULING 200809L
19025#define _POSIX_RAW_SOCKETS 200809L
19026#define _POSIX_READER_WRITER_LOCKS 200809L
19027#define _POSIX_REALTIME_SIGNALS 200809L
19028#define _POSIX_REGEXP 1
19029#define _POSIX_SAVED_IDS 1
19030#define _POSIX_SEMAPHORES 200809L
19031#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
19032#define _POSIX_SHELL 1
19033#define _POSIX_SPAWN 200809L
19034#define _POSIX_SPIN_LOCKS 200809L
19035#define _POSIX_SYNCHRONIZED_IO 200809L
19036#define _POSIX_THREAD_ATTR_STACKADDR 200809L
19037#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
19038#define _POSIX_THREAD_CPUTIME 200809L
19039#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
19040#define _POSIX_THREAD_PROCESS_SHARED 200809L
19041#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
19042#define _POSIX_THREADS 200809L
19043#define _POSIX_TIMEOUTS 200809L
19044#define _POSIX_TIMERS 200809L
19045#define _POSIX_VDISABLE '\0'
19046#define _POSIX2_C_VERSION _POSIX2_VERSION
19047#define _POSIX2_C_BIND _POSIX2_VERSION
19048#define _POSIX2_C_DEV _POSIX2_VERSION
19049#define _POSIX2_CHAR_TERM _POSIX2_VERSION
19050#define _POSIX2_SW_DEV _POSIX2_VERSION
19051#define _POSIX2_UPE _POSIX2_VERSION
19052#define _POSIX_V6_ILP32_OFF32 -1
19053#define _POSIX_V6_ILP32_OFFBIG -1
19054#define _POSIX_V6_LP64_OFF64 1
19055#define _POSIX_V6_LPBIG_OFFBIG 1
19056#define _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
19057#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
19058#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64
19059#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
19060#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
19061#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
19062#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
19063#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
19064#define _XOPEN_CRYPT 1
19065#define _XOPEN_ENH_I18N 1
19066#define _XOPEN_SHM 1
19067#define __STDC_ISO_10646__ 201806L
19068#define _POINTER_INT long
19069#undef __RAND_MAX
19070#define __RAND_MAX 0x7fffffff
19071#define _CYGWIN_CONFIG_H
19072#define __DYNAMIC_REENT__
19073#define __CYGTLS_PADSIZE__ 12800
19074#define _SYMSTR(x) #x
19075#define __FILENAME_MAX__ 4096
19076#define _READ_WRITE_RETURN_TYPE _ssize_t
19077#define _READ_WRITE_BUFSIZE_TYPE size_t
19078#define __LINUX_ERRNO_EXTENSIONS__ 1
19079#define _MB_EXTENDED_CHARSETS_ALL 1
19080#define __HAVE_LOCALE_INFO__ 1
19081#define __HAVE_LOCALE_INFO_EXTENDED__ 1
19082#define _WANT_C99_TIME_FORMATS 1
19083#define _GLIBC_EXTENSION 1
19084#define _STDIO_BSD_SEMANTICS 1
19085#define __TM_GMTOFF tm_gmtoff
19086#define __TM_ZONE tm_zone
19087#define _USE_LONG_TIME_T 1
19088#define _REENT_BACKWARD_BINARY_COMPAT 1
19089#define __EXPORT
19090#define __IMPORT __declspec(dllimport)
19091#define DEFAULT_LOCALE "C.UTF-8"
19092#define _USE_GDTOA
19093#define _MB_EXTENDED_CHARSETS_ISO 1
19094#define _MB_EXTENDED_CHARSETS_WINDOWS 1
19095#define _BEGIN_STD_C
19096#define _END_STD_C
19097#define _NOTHROW
19098#define _LONG_DOUBLE long double
19099#define _ATTRIBUTE(attrs) __attribute__ (attrs)
19100#define _ELIDABLE_INLINE static __inline__
19101#define _NOINLINE __attribute__ ((__noinline__))
19102#define _NOINLINE_STATIC _NOINLINE static
19103#define _FSTDIO
19104#define __need_size_t
19105#define __need_NULL
19106#define _SYS_CDEFS_H_
19107#define _MACHINE__DEFAULT_TYPES_H
19108#define __EXP(x) __ ##x ##__
19109#define __have_longlong64 1
19110#define __have_long64 1
19111#define ___int8_t_defined 1
19112#define ___int16_t_defined 1
19113#define ___int32_t_defined 1
19114#define ___int64_t_defined 1
19115#define ___int_least8_t_defined 1
19116#define ___int_least16_t_defined 1
19117#define ___int_least32_t_defined 1
19118#define ___int_least64_t_defined 1
19119#undef __EXP
19120#define __size_t__
19121#define __SIZE_T__
19122#define _SIZE_T
19123#define _SYS_SIZE_T_H
19124#define _T_SIZE_
19125#define _T_SIZE
19126#define __SIZE_T
19127#define _SIZE_T_
19128#define _BSD_SIZE_T_
19129#define _SIZE_T_DEFINED_
19130#define _SIZE_T_DEFINED
19131#define _BSD_SIZE_T_DEFINED_
19132#define _SIZE_T_DECLARED
19133#define ___int_size_t_h
19134#define _GCC_SIZE_T
19135#define _SIZET_
19136#define __size_t
19137#undef __need_size_t
19138#undef NULL
19139#define NULL ((void *)0)
19140#undef __need_NULL
19141#define __PMT(args) args
19142#define __DOTS , ...
19143#define __THROW
19144#define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
19145#define __ptr_t void *
19146#define __long_double_t long double
19147#define __attribute_malloc__
19148#define __attribute_pure__
19149#define __attribute_format_strfmon__(a,b)
19150#define __flexarr [0]
19151#define __bounded
19152#define __unbounded
19153#define __ptrvalue
19154#define __has_extension __has_feature
19155#define __has_feature(x) 0
19156#define __BEGIN_DECLS
19157#define __END_DECLS
19158#define __GNUCLIKE_ASM 3
19159#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
19160#define __GNUCLIKE___TYPEOF 1
19161#define __GNUCLIKE___SECTION 1
19162#define __GNUCLIKE_CTOR_SECTION_HANDLING 1
19163#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
19164#define __GNUCLIKE_BUILTIN_VARARGS 1
19165#define __GNUCLIKE_BUILTIN_STDARG 1
19166#define __GNUCLIKE_BUILTIN_VAALIST 1
19167#define __GNUC_VA_LIST_COMPATIBILITY 1
19168#define __compiler_membar() __asm __volatile(" " : : : "memory")
19169#define __GNUCLIKE_BUILTIN_NEXT_ARG 1
19170#define __GNUCLIKE_MATH_BUILTIN_RELOPS
19171#define __GNUCLIKE_BUILTIN_MEMCPY 1
19172#define __CC_SUPPORTS_INLINE 1
19173#define __CC_SUPPORTS___INLINE 1
19174#define __CC_SUPPORTS___INLINE__ 1
19175#define __CC_SUPPORTS___FUNC__ 1
19176#define __CC_SUPPORTS_WARNING 1
19177#define __CC_SUPPORTS_VARADIC_XXX 1
19178#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
19179#define __P(protos) protos
19180#define __CONCAT1(x,y) x ## y
19181#define __CONCAT(x,y) __CONCAT1(x,y)
19182#define __STRING(x) #x
19183#define __XSTRING(x) __STRING(x)
19184#define __const const
19185#define __signed signed
19186#define __volatile volatile
19187#define __weak_symbol __attribute__((__weak__))
19188#define __dead2 __attribute__((__noreturn__))
19189#define __pure2 __attribute__((__const__))
19190#define __unused __attribute__((__unused__))
19191#define __used __attribute__((__used__))
19192#define __packed __attribute__((__packed__))
19193#define __aligned(x) __attribute__((__aligned__(x)))
19194#define __section(x) __attribute__((__section__(x)))
19195#define __alloc_size(x) __attribute__((__alloc_size__(x)))
19196#define __alloc_size2(n,x) __attribute__((__alloc_size__(n, x)))
19197#define __alloc_align(x) __attribute__((__alloc_align__(x)))
19198#define __generic(expr,t,yes,no) _Generic(expr, t: yes, default: no)
19199#define __min_size(x) static (x)
19200#define __malloc_like __attribute__((__malloc__))
19201#define __pure __attribute__((__pure__))
19202#define __always_inline __inline__ __attribute__((__always_inline__))
19203#define __noinline __attribute__ ((__noinline__))
19204#define __nonnull(x) __attribute__((__nonnull__ x))
19205#define __nonnull_all __attribute__((__nonnull__))
19206#define __fastcall __attribute__((__fastcall__))
19207#define __result_use_check __attribute__((__warn_unused_result__))
19208#define __returns_twice __attribute__((__returns_twice__))
19209#define __unreachable() __builtin_unreachable()
19210#define __restrict restrict
19211#define __predict_true(exp) __builtin_expect((exp), 1)
19212#define __predict_false(exp) __builtin_expect((exp), 0)
19213#define __null_sentinel __attribute__((__sentinel__))
19214#define __exported __attribute__((__visibility__("default")))
19215#define __hidden
19216#define __offsetof(type,field) offsetof(type, field)
19217#define __rangeof(type,start,end) (__offsetof(type, end) - __offsetof(type, start))
19218#define __containerof(x,s,m) ({ const volatile __typeof(((s *)0)->m) *__x = (x); __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));})
19219#define __printflike(fmtarg,firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
19220#define __scanflike(fmtarg,firstvararg) __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
19221#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
19222#define __strfmonlike(fmtarg,firstvararg) __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
19223#define __strftimelike(fmtarg,firstvararg) __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
19224#define __printf0like(fmtarg,firstvararg)
19225#define __strong_reference(sym,aliassym) extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
19226#define __weak_reference(sym,alias) __asm__(".stabs \"_" #alias "\",11,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
19227#define __warn_references(sym,msg) __asm__(".stabs \"" msg "\",30,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
19228#define __FBSDID(s) struct __hack
19229#define __RCSID(s) struct __hack
19230#define __RCSID_SOURCE(s) struct __hack
19231#define __SCCSID(s) struct __hack
19232#define __COPYRIGHT(s) struct __hack
19233#define __DECONST(type,var) ((type)(__uintptr_t)(const void *)(var))
19234#define __DEVOLATILE(type,var) ((type)(__uintptr_t)(volatile void *)(var))
19235#define __DEQUALIFY(type,var) ((type)(__uintptr_t)(const volatile void *)(var))
19236#define _Nonnull
19237#define _Nullable
19238#define _Null_unspecified
19239#define __NULLABILITY_PRAGMA_PUSH
19240#define __NULLABILITY_PRAGMA_POP
19241#define __arg_type_tag(arg_kind,arg_idx,type_tag_idx)
19242#define __datatype_type_tag(kind,type)
19243#define __lock_annotate(x)
19244#define __lockable __lock_annotate(lockable)
19245#define __locks_exclusive(...) __lock_annotate(exclusive_lock_function(__VA_ARGS__))
19246#define __locks_shared(...) __lock_annotate(shared_lock_function(__VA_ARGS__))
19247#define __trylocks_exclusive(...) __lock_annotate(exclusive_trylock_function(__VA_ARGS__))
19248#define __trylocks_shared(...) __lock_annotate(shared_trylock_function(__VA_ARGS__))
19249#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
19250#define __asserts_exclusive(...) __lock_annotate(assert_exclusive_lock(__VA_ARGS__))
19251#define __asserts_shared(...) __lock_annotate(assert_shared_lock(__VA_ARGS__))
19252#define __requires_exclusive(...) __lock_annotate(exclusive_locks_required(__VA_ARGS__))
19253#define __requires_shared(...) __lock_annotate(shared_locks_required(__VA_ARGS__))
19254#define __requires_unlocked(...) __lock_annotate(locks_excluded(__VA_ARGS__))
19255#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
19256#define __nosanitizeaddress
19257#define __nosanitizememory
19258#define __nosanitizethread
19259#define __guarded_by(x) __lock_annotate(guarded_by(x))
19260#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))
19261#define __builtin_is_aligned(x,align) (((__uintptr_t)x & ((align) - 1)) == 0)
19262#define __builtin_align_up(x,align) ((__typeof__(x))(((__uintptr_t)(x)+((align)-1))&(~((align)-1))))
19263#define __builtin_align_down(x,align) ((__typeof__(x))((x)&(~((align)-1))))
19264#define __align_up(x,y) __builtin_align_up(x, y)
19265#define __align_down(x,y) __builtin_align_down(x, y)
19266#define __is_aligned(x,y) __builtin_is_aligned(x, y)
19267#define _STDDEF_H
19268#define _STDDEF_H_
19269#define _ANSI_STDDEF_H
19270#define _PTRDIFF_T
19271#define _T_PTRDIFF_
19272#define _T_PTRDIFF
19273#define __PTRDIFF_T
19274#define _PTRDIFF_T_
19275#define _BSD_PTRDIFF_T_
19276#define ___int_ptrdiff_t_h
19277#define _GCC_PTRDIFF_T
19278#define _PTRDIFF_T_DECLARED
19279#undef __need_ptrdiff_t
19280#undef __need_size_t
19281#define __wchar_t__
19282#define __WCHAR_T__
19283#define _WCHAR_T
19284#define _T_WCHAR_
19285#define _T_WCHAR
19286#define __WCHAR_T
19287#define _WCHAR_T_
19288#define _BSD_WCHAR_T_
19289#define _WCHAR_T_DEFINED_
19290#define _WCHAR_T_DEFINED
19291#define _WCHAR_T_H
19292#define ___int_wchar_t_h
19293#define __INT_WCHAR_T_H
19294#define _GCC_WCHAR_T
19295#define _WCHAR_T_DECLARED
19296#undef _BSD_WCHAR_T_
19297#undef __need_wchar_t
19298#undef NULL
19299#define NULL ((void *)0)
19300#undef __need_NULL
19301#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19302#define _GCC_MAX_ALIGN_T
19303#define __need___va_list
19304#define _SYS_REENT_H_
19305#define _SYS__TYPES_H
19306#define __need_size_t
19307#define __need_wint_t
19308#undef __need_ptrdiff_t
19309#undef __need_size_t
19310#undef __need_wchar_t
19311#define _WINT_T
19312#undef __need_wint_t
19313#undef NULL
19314#define NULL ((void *)0)
19315#undef __need_NULL
19316#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19317#define _MACHINE__TYPES_H
19318#define __machine_blkcnt_t_defined
19319#define __machine_blksize_t_defined
19320#define __machine_dev_t_defined
19321#define __machine_fsblkcnt_t_defined
19322#define __machine_fsfilcnt_t_defined
19323#define __machine_uid_t_defined
19324#define __machine_gid_t_defined
19325#define __machine_ino_t_defined
19326#define __machine_key_t_defined
19327#define __machine_sa_family_t_defined
19328#define __machine_socklen_t_defined
19329#undef __size_t
19330#define unsigned signed
19331#undef unsigned
19332#define _CLOCK_T_ unsigned long
19333#define _TIME_T_ long
19334#define _CLOCKID_T_ unsigned long
19335#define _TIMER_T_ unsigned long
19336#define _NULL 0
19337#define __Long int
19338#define _SYS_LOCK_H_
19339#define _LOCK_RECURSIVE_T _LOCK_T
19340#define _LOCK_T_RECURSIVE_INITIALIZER ((_LOCK_T)18)
19341#define _LOCK_T_INITIALIZER ((_LOCK_T)19)
19342#define __LOCK_INIT(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_INITIALIZER;
19343#define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_RECURSIVE_INITIALIZER;
19344#define __lock_init(__lock) __cygwin_lock_init(&__lock)
19345#define __lock_init_recursive(__lock) __cygwin_lock_init_recursive(&__lock)
19346#define __lock_close(__lock) __cygwin_lock_fini(&__lock)
19347#define __lock_close_recursive(__lock) __cygwin_lock_fini(&__lock)
19348#define __lock_acquire(__lock) __cygwin_lock_lock(&__lock)
19349#define __lock_acquire_recursive(__lock) __cygwin_lock_lock(&__lock)
19350#define __lock_try_acquire(lock) __cygwin_lock_trylock(&__lock)
19351#define __lock_try_acquire_recursive(lock) __cygwin_lock_trylock(&__lock)
19352#define __lock_release(__lock) __cygwin_lock_unlock(&__lock)
19353#define __lock_release_recursive(__lock) __cygwin_lock_unlock(&__lock)
19354#define _ATEXIT_SIZE 32
19355#define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
19356#define _REENT_SMALL_CHECK_INIT(ptr)
19357#define _fpos64_t _fpos_t
19358#define _RAND48_SEED_0 (0x330e)
19359#define _RAND48_SEED_1 (0xabcd)
19360#define _RAND48_SEED_2 (0x1234)
19361#define _RAND48_MULT_0 (0xe66d)
19362#define _RAND48_MULT_1 (0xdeec)
19363#define _RAND48_MULT_2 (0x0005)
19364#define _RAND48_ADD (0x000b)
19365#define _REENT_EMERGENCY_SIZE 25
19366#define _REENT_ASCTIME_SIZE 26
19367#define _REENT_SIGNAL_SIZE 24
19368#define _REENT_INIT_RESERVED_0 0,
19369#define _REENT_INIT_RESERVED_1 0,
19370#define _REENT_INIT_RESERVED_2 0,
19371#define _REENT_INIT_RESERVED_6_7 _NULL, _ATEXIT_INIT,
19372#define _REENT_INIT_RESERVED_8 {_NULL, 0, _NULL},
19373#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 }
19374#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; }
19375#define _REENT_CHECK_RAND48(ptr)
19376#define _REENT_CHECK_MP(ptr)
19377#define _REENT_CHECK_TM(ptr)
19378#define _REENT_CHECK_ASCTIME_BUF(ptr)
19379#define _REENT_CHECK_EMERGENCY(ptr)
19380#define _REENT_CHECK_MISC(ptr)
19381#define _REENT_CHECK_SIGNAL_BUF(ptr)
19382#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
19383#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
19384#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
19385#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
19386#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
19387#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
19388#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
19389#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
19390#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
19391#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
19392#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
19393#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
19394#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
19395#define _REENT_MBTOWC_STATE(ptr) ((ptr)->_new._reent._mbtowc_state)
19396#define _REENT_WCTOMB_STATE(ptr) ((ptr)->_new._reent._wctomb_state)
19397#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_new._reent._mbrlen_state)
19398#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_new._reent._mbrtowc_state)
19399#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_new._reent._mbsrtowcs_state)
19400#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_new._reent._wcrtomb_state)
19401#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_new._reent._wcsrtombs_state)
19402#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
19403#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
19404#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
19405#define _REENT_CLEANUP(_ptr) ((_ptr)->__cleanup)
19406#define _REENT_CVTBUF(_ptr) ((_ptr)->_cvtbuf)
19407#define _REENT_CVTLEN(_ptr) ((_ptr)->_cvtlen)
19408#define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency)
19409#define _REENT_ERRNO(_ptr) ((_ptr)->_errno)
19410#define _REENT_INC(_ptr) ((_ptr)->_inc)
19411#define _REENT_LOCALE(_ptr) ((_ptr)->_locale)
19412#define _REENT_SIG_FUNC(_ptr) ((_ptr)->_sig_func)
19413#define _REENT_STDIN(_ptr) ((_ptr)->_stdin)
19414#define _REENT_STDOUT(_ptr) ((_ptr)->_stdout)
19415#define _REENT_STDERR(_ptr) ((_ptr)->_stderr)
19416#define _REENT_INIT_PTR(var) { memset((var), 0, sizeof(*(var))); _REENT_INIT_PTR_ZEROED(var); }
19417#define __ATTRIBUTE_IMPURE_PTR__
19418#define __ATTRIBUTE_IMPURE_DATA__
19419#define _REENT (__getreent())
19420#define _REENT_IS_NULL(_ptr) ((_ptr) == NULL)
19421#define _GLOBAL_REENT (&_impure_data)
19422#define _Kmax (sizeof (size_t) << 3)
19423#define __FILE_defined
19424#define _OFF_T_DECLARED
19425#define _SSIZE_T_DECLARED
19426#define _SYS_STDIO_H_
19427#define _flockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_lock ((_LOCK_T *)&(fp)->_lock); })
19428#define _ftrylockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __cygwin_lock_trylock ((_LOCK_T *)&(fp)->_lock))
19429#define _funlockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_unlock ((_LOCK_T *)&(fp)->_lock); })
19430#define __SLBF 0x0001
19431#define __SNBF 0x0002
19432#define __SRD 0x0004
19433#define __SWR 0x0008
19434#define __SRW 0x0010
19435#define __SEOF 0x0020
19436#define __SERR 0x0040
19437#define __SMBF 0x0080
19438#define __SAPP 0x0100
19439#define __SSTR 0x0200
19440#define __SOPT 0x0400
19441#define __SNPT 0x0800
19442#define __SOFF 0x1000
19443#define __SORD 0x2000
19444#define __SCLE 0x4000
19445#define __SL64 0x8000
19446#define __SNLK 0x0001
19447#define __SWID 0x2000
19448#define _IOFBF 0
19449#define _IOLBF 1
19450#define _IONBF 2
19451#define EOF (-1)
19452#define BUFSIZ 1024
19453#define FOPEN_MAX 20
19454#define FILENAME_MAX __FILENAME_MAX__
19455#define L_tmpnam FILENAME_MAX
19456#define P_tmpdir "/tmp"
19457#define SEEK_SET 0
19458#define SEEK_CUR 1
19459#define SEEK_END 2
19460#define TMP_MAX 26
19461#define stdin _REENT_STDIN(_REENT)
19462#define stdout _REENT_STDOUT(_REENT)
19463#define stderr _REENT_STDERR(_REENT)
19464#define _stdin_r(x) _REENT_STDIN(x)
19465#define _stdout_r(x) _REENT_STDOUT(x)
19466#define _stderr_r(x) _REENT_STDERR(x)
19467#define __VALIST __gnuc_va_list
19468#define fropen(__cookie,__fn) funopen(__cookie, __fn, (int (*)())0, (fpos_t (*)())0, (int (*)())0)
19469#define fwopen(__cookie,__fn) funopen(__cookie, (int (*)())0, __fn, (fpos_t (*)())0, (int (*)())0)
19470#define __sgetc_raw_r(__ptr,__f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++))
19471#define __sfeof(p) ((int)(((p)->_flags & __SEOF) != 0))
19472#define __sferror(p) ((int)(((p)->_flags & __SERR) != 0))
19473#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
19474#define __sfileno(p) ((p)->_file)
19475#define feof(p) __sfeof(p)
19476#define ferror(p) __sferror(p)
19477#define clearerr(p) __sclearerr(p)
19478#define feof_unlocked(p) __sfeof(p)
19479#define ferror_unlocked(p) __sferror(p)
19480#define clearerr_unlocked(p) __sclearerr(p)
19481#define getchar_unlocked() _getchar_unlocked()
19482#define putchar_unlocked(_c) _putchar_unlocked(_c)
19483#define fast_putc(x,p) (--(p)->_w < 0 ? __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0))
19484#define L_cuserid 9
19485#define L_ctermid 16
19486#define _SSP_STDIO_H_
19487#define _SSP_SSP_H_
19488#define __ssp_real_(fun) __ssp_real_ ## fun
19489#define __ssp_real(fun) __ssp_real_(fun)
19490#define __ssp_inline extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
19491#define __ssp_bos(ptr) __builtin_object_size(ptr, __SSP_FORTIFY_LEVEL > 1)
19492#define __ssp_bos0(ptr) __builtin_object_size(ptr, 0)
19493#define __ssp_check(buf,len,bos) if (bos(buf) != (size_t)-1 && len > bos(buf)) __chk_fail()
19494#define __ssp_decl(rtype,fun,args) rtype __ssp_real_(fun) args __asm__(__ASMNAME(#fun)); __ssp_inline rtype fun args
19495#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; }
19496#define __ssp_redirect(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos)
19497#define __ssp_redirect0(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos0)
19498#define __ssp_overlap(a,b,l) (((a) <= (b) && (b) < (a) + (l)) || ((b) <= (a) && (a) < (b) + (l)))
19499#define sprintf(str,...) __builtin___sprintf_chk(str, 0, __ssp_bos(str), __VA_ARGS__)
19500#define vsprintf(str,fmt,ap) __builtin___vsprintf_chk(str, 0, __ssp_bos(str), fmt, ap)
19501#define snprintf(str,len,...) __builtin___snprintf_chk(str, len, 0, __ssp_bos(str), __VA_ARGS__)
19502#define vsnprintf(str,len,fmt,ap) __builtin___vsnprintf_chk(str, len, 0, __ssp_bos(str), fmt, ap)
19503#define gets(str) __gets_chk(str, __ssp_bos(str))
19504#define __BIT_TYPES_DEFINED__ 1
19505#define _SYS_TYPES_H
19506#define _SYS__STDINT_H
19507#define _INT8_T_DECLARED
19508#define _UINT8_T_DECLARED
19509#define __int8_t_defined 1
19510#define _INT16_T_DECLARED
19511#define _UINT16_T_DECLARED
19512#define __int16_t_defined 1
19513#define _INT32_T_DECLARED
19514#define _UINT32_T_DECLARED
19515#define __int32_t_defined 1
19516#define _INT64_T_DECLARED
19517#define _UINT64_T_DECLARED
19518#define __int64_t_defined 1
19519#define _INTMAX_T_DECLARED
19520#define _UINTMAX_T_DECLARED
19521#define _INTPTR_T_DECLARED
19522#define _UINTPTR_T_DECLARED
19523#define __MACHINE_ENDIAN_H__
19524#define _BITS_ENDIAN_H_
19525#define __BIG_ENDIAN 4321
19526#define __LITTLE_ENDIAN 1234
19527#define __BYTE_ORDER __LITTLE_ENDIAN
19528#define _LITTLE_ENDIAN __LITTLE_ENDIAN
19529#define _BIG_ENDIAN __BIG_ENDIAN
19530#define _PDP_ENDIAN __PDP_ENDIAN
19531#define _BYTE_ORDER __BYTE_ORDER
19532#define __machine_host_to_from_network_defined
19533#define __htonl(_x) __ntohl(_x)
19534#define __htons(_x) __ntohs(_x)
19535#define _QUAD_HIGHWORD 1
19536#define _QUAD_LOWWORD 0
19537#define LITTLE_ENDIAN _LITTLE_ENDIAN
19538#define BIG_ENDIAN _BIG_ENDIAN
19539#define PDP_ENDIAN _PDP_ENDIAN
19540#define BYTE_ORDER _BYTE_ORDER
19541#define __bswap16(_x) __builtin_bswap16(_x)
19542#define __bswap32(_x) __builtin_bswap32(_x)
19543#define __bswap64(_x) __builtin_bswap64(_x)
19544#define _SYS_SELECT_H
19545#define _SYS__SIGSET_H_
19546#define _SYS__TIMEVAL_H_
19547#define _SUSECONDS_T_DECLARED
19548#define __time_t_defined
19549#define _TIME_T_DECLARED
19550#define _TIMEVAL_DEFINED
19551#define _SYS_TIMESPEC_H_
19552#define _SYS__TIMESPEC_H_
19553#define TIMEVAL_TO_TIMESPEC(tv,ts) do { (ts)->tv_sec = (tv)->tv_sec; (ts)->tv_nsec = (tv)->tv_usec * 1000; } while (0)
19554#define TIMESPEC_TO_TIMEVAL(tv,ts) do { (tv)->tv_sec = (ts)->tv_sec; (tv)->tv_usec = (ts)->tv_nsec / 1000; } while (0)
19555#define _SIGSET_T_DECLARED
19556#define _SYS_TYPES_FD_SET
19557#define FD_SETSIZE 1024
19558#define _NFDBITS ((int)sizeof(__fd_mask) * 8)
19559#define NFDBITS _NFDBITS
19560#define _howmany(x,y) (((x) + ((y) - 1)) / (y))
19561#define fds_bits __fds_bits
19562#define __fdset_mask(n) ((__fd_mask)1 << ((n) % _NFDBITS))
19563#define FD_CLR(n,p) ((p)->__fds_bits[(n)/_NFDBITS] &= ~__fdset_mask(n))
19564#define FD_COPY(f,t) (void)(*(t) = *(f))
19565#define FD_ISSET(n,p) (((p)->__fds_bits[(n)/_NFDBITS] & __fdset_mask(n)) != 0)
19566#define FD_SET(n,p) ((p)->__fds_bits[(n)/_NFDBITS] |= __fdset_mask(n))
19567#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)
19568#define physadr physadr_t
19569#define quad quad_t
19570#define _IN_ADDR_T_DECLARED
19571#define _IN_PORT_T_DECLARED
19572#define __u_char_defined
19573#define __u_short_defined
19574#define __u_int_defined
19575#define __u_long_defined
19576#define _BSDTYPES_DEFINED
19577#define _BLKCNT_T_DECLARED
19578#define _BLKSIZE_T_DECLARED
19579#define __clock_t_defined
19580#define _CLOCK_T_DECLARED
19581#define __caddr_t_defined
19582#define _FSBLKCNT_T_DECLARED
19583#define _ID_T_DECLARED
19584#define _INO_T_DECLARED
19585#define _DEV_T_DECLARED
19586#define _UID_T_DECLARED
19587#define _GID_T_DECLARED
19588#define _PID_T_DECLARED
19589#define _KEY_T_DECLARED
19590#define _MODE_T_DECLARED
19591#define _NLINK_T_DECLARED
19592#define __clockid_t_defined
19593#define _CLOCKID_T_DECLARED
19594#define __timer_t_defined
19595#define _TIMER_T_DECLARED
19596#define _USECONDS_T_DECLARED
19597#define _SYS__PTHREADTYPES_H_
19598#define _SYS_CPUSET_H_
19599#define __CPU_SETSIZE 1024
19600#define __NCPUBITS (8 * sizeof (__cpu_mask))
19601#define __CPU_GROUPMAX (__CPU_SETSIZE / __NCPUBITS)
19602#define __CPUELT(cpu) ((cpu) / __NCPUBITS)
19603#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
19604#define CPU_ALLOC_SIZE(num) ((num+__NCPUBITS-1) / __NCPUBITS) * sizeof (__cpu_mask)
19605#define CPU_ALLOC(num) __builtin_malloc (CPU_ALLOC_SIZE(num))
19606#define CPU_FREE(set) __builtin_free (set)
19607#define CPU_ZERO_S(siz,set) __builtin_memset (set, 0, siz)
19608#define CPU_SET_S(cpu,siz,set) if (cpu < 8 * siz) (set)->__bits[__CPUELT(cpu)] |= __CPUMASK(cpu);
19609#define CPU_CLR_S(cpu,siz,set) if (cpu < 8 * siz) (set)->__bits[__CPUELT(cpu)] &= ~(__CPUMASK(cpu));
19610#define CPU_ISSET_S(cpu,siz,set) ({int res = 0; if (cpu < 8 * siz) res = !!((set)->__bits[__CPUELT(cpu)] & __CPUMASK(cpu)); res;})
19611#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;})
19612#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];
19613#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];
19614#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];
19615#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;})
19616#define CPU_ZERO(set) CPU_ZERO_S(sizeof (cpu_set_t), set)
19617#define CPU_SET(cpu,set) CPU_SET_S(cpu, sizeof (cpu_set_t), set)
19618#define CPU_CLR(cpu,set) CPU_CLR_S(cpu, sizeof (cpu_set_t), set)
19619#define CPU_ISSET(cpu,set) CPU_ISSET_S(cpu, sizeof (cpu_set_t), set)
19620#define CPU_COUNT(set) CPU_COUNT_S(sizeof (cpu_set_t), set)
19621#define CPU_AND(dst,src1,src2) CPU_AND_S(sizeof (cpu_set_t), dst, src1, src2)
19622#define CPU_OR(dst,src1,src2) CPU_OR_S(sizeof (cpu_set_t), dst, src1, src2)
19623#define CPU_XOR(dst,src1,src2) CPU_XOR_S(sizeof (cpu_set_t), dst, src1, src2)
19624#define CPU_EQUAL(src1,src2) CPU_EQUAL_S(sizeof (cpu_set_t), src1, src2)
19625#define CPU_SETSIZE __CPU_SETSIZE
19626#define _ENDIAN_H_
19627#define __LONG_LONG_PAIR(HI,LO) LO, HI
19628#define _BITS_BYTESWAP_H
19629#define htobe16(x) __bswap_16(x)
19630#define htobe32(x) __bswap_32(x)
19631#define htobe64(x) __bswap_64(x)
19632#define be16toh(x) __bswap_16(x)
19633#define be32toh(x) __bswap_32(x)
19634#define be64toh(x) __bswap_64(x)
19635#define htole16(x) (x)
19636#define htole32(x) (x)
19637#define htole64(x) (x)
19638#define le16toh(x) (x)
19639#define le32toh(x) (x)
19640#define le64toh(x) (x)
19641#define _WORDSIZE_H 1
19642#define __WORDSIZE 64
19643#define __timespec_t_defined
19644#define __timestruc_t_defined
19645#define __BIT_TYPES_DEFINED__ 1
19646#define __vm_offset_t_defined
19647#define __vm_size_t_defined
19648#define __vm_object_t_defined
19649#define __addr_t_defined
19650#define _SYS_SYSMACROS_H
19651#define major(dev) gnu_dev_major(dev)
19652#define minor(dev) gnu_dev_minor(dev)
19653#define makedev(maj,min) gnu_dev_makedev(maj, min)
19654#undef __need_inttypes
19655#define _SYS_STAT_H
19656#define _TIME_H_
19657#define __need_size_t
19658#define __need_NULL
19659#undef __need_ptrdiff_t
19660#undef __need_size_t
19661#undef __need_wchar_t
19662#undef NULL
19663#define NULL ((void *)0)
19664#undef __need_NULL
19665#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19666#define _MACHTIME_H_
19667#define _CLOCKS_PER_SEC_ 1000
19668#define CLOCKS_PER_SEC _CLOCKS_PER_SEC_
19669#define CLK_TCK CLOCKS_PER_SEC
19670#define _SYS__LOCALE_H
19671#define tzname _tzname
19672#define _CYGWIN_TIME_H
19673#define TIMER_RELTIME 0
19674#define _SIGNAL_H_
19675#define _SYS_SIGNAL_H
19676#define _STDINT_H
19677#define _SYS__INTSUP_H
19678#define __STDINT_EXP(x) __ ##x ##__
19679#undef signed
19680#undef unsigned
19681#undef char
19682#undef short
19683#undef int
19684#undef __int20
19685#undef __int20__
19686#undef long
19687#define signed +0
19688#define unsigned +0
19689#define char +0
19690#define short +1
19691#define __int20 +2
19692#define __int20__ +2
19693#define int +2
19694#define long +4
19695#define _INTPTR_EQ_LONG
19696#define __INT8 "hh"
19697#define __INT16 "h"
19698#define __INT32
19699#define __INT64 "l"
19700#define __FAST8 "hh"
19701#define __FAST16 "l"
19702#define __FAST32 "l"
19703#define __FAST64 "l"
19704#define __LEAST8 "hh"
19705#define __LEAST16 "h"
19706#define __LEAST32
19707#define __LEAST64 "l"
19708#undef signed
19709#undef unsigned
19710#undef char
19711#undef short
19712#undef int
19713#undef long
19714#undef __int20
19715#undef __int20__
19716#define __int_least8_t_defined 1
19717#define __int_least16_t_defined 1
19718#define __int_least32_t_defined 1
19719#define __int_least64_t_defined 1
19720#define __int_fast8_t_defined 1
19721#define __int_fast16_t_defined 1
19722#define __int_fast32_t_defined 1
19723#define __int_fast64_t_defined 1
19724#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
19725#define INTPTR_MAX (__INTPTR_MAX__)
19726#define UINTPTR_MAX (__UINTPTR_MAX__)
19727#define INT8_MIN (-__INT8_MAX__ - 1)
19728#define INT8_MAX (__INT8_MAX__)
19729#define UINT8_MAX (__UINT8_MAX__)
19730#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
19731#define INT_LEAST8_MAX (__INT_LEAST8_MAX__)
19732#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)
19733#define INT16_MIN (-__INT16_MAX__ - 1)
19734#define INT16_MAX (__INT16_MAX__)
19735#define UINT16_MAX (__UINT16_MAX__)
19736#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
19737#define INT_LEAST16_MAX (__INT_LEAST16_MAX__)
19738#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)
19739#define INT32_MIN (-__INT32_MAX__ - 1)
19740#define INT32_MAX (__INT32_MAX__)
19741#define UINT32_MAX (__UINT32_MAX__)
19742#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
19743#define INT_LEAST32_MAX (__INT_LEAST32_MAX__)
19744#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)
19745#define INT64_MIN (-__INT64_MAX__ - 1)
19746#define INT64_MAX (__INT64_MAX__)
19747#define UINT64_MAX (__UINT64_MAX__)
19748#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
19749#define INT_LEAST64_MAX (__INT_LEAST64_MAX__)
19750#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)
19751#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
19752#define INT_FAST8_MAX (__INT_FAST8_MAX__)
19753#define UINT_FAST8_MAX (__UINT_FAST8_MAX__)
19754#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
19755#define INT_FAST16_MAX (__INT_FAST16_MAX__)
19756#define UINT_FAST16_MAX (__UINT_FAST16_MAX__)
19757#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
19758#define INT_FAST32_MAX (__INT_FAST32_MAX__)
19759#define UINT_FAST32_MAX (__UINT_FAST32_MAX__)
19760#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
19761#define INT_FAST64_MAX (__INT_FAST64_MAX__)
19762#define UINT_FAST64_MAX (__UINT_FAST64_MAX__)
19763#define INTMAX_MAX (__INTMAX_MAX__)
19764#define INTMAX_MIN (-INTMAX_MAX - 1)
19765#define UINTMAX_MAX (__UINTMAX_MAX__)
19766#define SIZE_MAX (__SIZE_MAX__)
19767#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
19768#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))
19769#define PTRDIFF_MAX (__PTRDIFF_MAX__)
19770#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
19771#define WCHAR_MIN (__WCHAR_MIN__)
19772#define WCHAR_MAX (__WCHAR_MAX__)
19773#define WINT_MAX (__WINT_MAX__)
19774#define WINT_MIN (__WINT_MIN__)
19775#define INT8_C(x) __INT8_C(x)
19776#define UINT8_C(x) __UINT8_C(x)
19777#define INT16_C(x) __INT16_C(x)
19778#define UINT16_C(x) __UINT16_C(x)
19779#define INT32_C(x) __INT32_C(x)
19780#define UINT32_C(x) __UINT32_C(x)
19781#define INT64_C(x) __INT64_C(x)
19782#define UINT64_C(x) __UINT64_C(x)
19783#define INTMAX_C(x) __INTMAX_C(x)
19784#define UINTMAX_C(x) __UINTMAX_C(x)
19785#define _GCC_WRAP_STDINT_H
19786#define _CYGWIN_SIGNAL_H
19787#define __COPY_CONTEXT_SIZE 816
19788#pragma pack(push,4)
19789#define __SI_PAD_SIZE 32
19790#pragma pack(pop)
19791#define SI_USER SI_USER
19792#define SI_ASYNCIO SI_ASYNCIO
19793#define SI_MESGQ SI_MESGQ
19794#define SI_TIMER SI_TIMER
19795#define SI_QUEUE SI_QUEUE
19796#define SI_KERNEL SI_KERNEL
19797#define ILL_ILLOPC ILL_ILLOPC
19798#define ILL_ILLOPN ILL_ILLOPN
19799#define ILL_ILLADR ILL_ILLADR
19800#define ILL_ILLTRP ILL_ILLTRP
19801#define ILL_PRVOPC ILL_PRVOPC
19802#define ILL_PRVREG ILL_PRVREG
19803#define ILL_COPROC ILL_COPROC
19804#define ILL_BADSTK ILL_BADSTK
19805#define FPE_INTDIV FPE_INTDIV
19806#define FPE_INTOVF FPE_INTOVF
19807#define FPE_FLTDIV FPE_FLTDIV
19808#define FPE_FLTOVF FPE_FLTOVF
19809#define FPE_FLTUND FPE_FLTUND
19810#define FPE_FLTRES FPE_FLTRES
19811#define FPE_FLTINV FPE_FLTINV
19812#define FPE_FLTSUB FPE_FLTSUB
19813#define SEGV_MAPERR SEGV_MAPERR
19814#define SEGV_ACCERR SEGV_ACCERR
19815#define BUS_ADRALN BUS_ADRALN
19816#define BUS_ADRERR BUS_ADRERR
19817#define BUS_OBJERR BUS_OBJERR
19818#define CLD_EXITED CLD_EXITED
19819#define CLD_KILLED CLD_KILLED
19820#define CLD_DUMPED CLD_DUMPED
19821#define CLD_TRAPPED CLD_TRAPPED
19822#define CLD_STOPPED CLD_STOPPED
19823#define CLD_CONTINUED CLD_CONTINUED
19824#define SIGEV_SIGNAL SIGEV_SIGNAL
19825#define SIGEV_NONE SIGEV_NONE
19826#define SIGEV_THREAD SIGEV_THREAD
19827#define SA_NOCLDSTOP 1
19828#define SA_SIGINFO 2
19829#define SA_RESTART 0x10000000
19830#define SA_ONSTACK 0x20000000
19831#define SA_NODEFER 0x40000000
19832#define SA_RESETHAND 0x80000000
19833#define SA_ONESHOT SA_RESETHAND
19834#define SA_NOMASK SA_NODEFER
19835#define _SA_INTERNAL_MASK 0xf000
19836#undef MINSIGSTKSZ
19837#define MINSIGSTKSZ 8192
19838#undef SIGSTKSZ
19839#define SIGSTKSZ 32768
19840#define SIGHUP 1
19841#define SIGINT 2
19842#define SIGQUIT 3
19843#define SIGILL 4
19844#define SIGTRAP 5
19845#define SIGABRT 6
19846#define SIGIOT SIGABRT
19847#define SIGEMT 7
19848#define SIGFPE 8
19849#define SIGKILL 9
19850#define SIGBUS 10
19851#define SIGSEGV 11
19852#define SIGSYS 12
19853#define SIGPIPE 13
19854#define SIGALRM 14
19855#define SIGTERM 15
19856#define SIGURG 16
19857#define SIGSTOP 17
19858#define SIGTSTP 18
19859#define SIGCONT 19
19860#define SIGCHLD 20
19861#define SIGCLD 20
19862#define SIGTTIN 21
19863#define SIGTTOU 22
19864#define SIGIO 23
19865#define SIGPOLL SIGIO
19866#define SIGXCPU 24
19867#define SIGXFSZ 25
19868#define SIGVTALRM 26
19869#define SIGPROF 27
19870#define SIGWINCH 28
19871#define SIGLOST 29
19872#define SIGPWR SIGLOST
19873#define SIGUSR1 30
19874#define SIGUSR2 31
19875#define _NSIG 65
19876#define NSIG _NSIG
19877#define SIGRTMIN 32
19878#define SIGRTMAX (_NSIG - 1)
19879#define SIG_HOLD ((_sig_func_ptr)2)
19880#define SS_ONSTACK 0x1
19881#define SS_DISABLE 0x2
19882#define SIG_SETMASK 0
19883#define SIG_BLOCK 1
19884#define SIG_UNBLOCK 2
19885#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("4294967295") - 1)
19886#define _SYS_UCONTEXT_H_
19887#define SIG_DFL ((_sig_func_ptr)0)
19888#define SIG_IGN ((_sig_func_ptr)1)
19889#define SIG_ERR ((_sig_func_ptr)-1)
19890#define CLOCK_ENABLED 1
19891#define CLOCK_DISABLED 0
19892#define CLOCK_ALLOWED 1
19893#define CLOCK_DISALLOWED 0
19894#define TIMER_ABSTIME 4
19895#define CLOCK_REALTIME_COARSE ((clockid_t) 0)
19896#define CLOCK_REALTIME ((clockid_t) 1)
19897#define CLOCK_PROCESS_CPUTIME_ID ((clockid_t) 2)
19898#define CLOCK_THREAD_CPUTIME_ID ((clockid_t) 3)
19899#define CLOCK_MONOTONIC ((clockid_t) 4)
19900#define CLOCK_MONOTONIC_RAW ((clockid_t) 5)
19901#define CLOCK_MONOTONIC_COARSE ((clockid_t) 6)
19902#define CLOCK_BOOTTIME ((clockid_t) 7)
19903#define CLOCK_REALTIME_ALARM ((clockid_t) 8)
19904#define CLOCK_BOOTTIME_ALARM ((clockid_t) 9)
19905#define _CYGWIN_STAT_H
19906#define st_atime st_atim.tv_sec
19907#define st_mtime st_mtim.tv_sec
19908#define st_ctime st_ctim.tv_sec
19909#define st_birthtime st_birthtim.tv_sec
19910#define S_TYPEISMQ(buf) ((void)(buf)->st_mode,0)
19911#define S_TYPEISSEM(buf) ((void)(buf)->st_mode,0)
19912#define S_TYPEISSHM(buf) ((void)(buf)->st_mode,0)
19913#define _IFMT 0170000
19914#define _IFDIR 0040000
19915#define _IFCHR 0020000
19916#define _IFBLK 0060000
19917#define _IFREG 0100000
19918#define _IFLNK 0120000
19919#define _IFSOCK 0140000
19920#define _IFIFO 0010000
19921#define S_BLKSIZE 1024
19922#define S_ISUID 0004000
19923#define S_ISGID 0002000
19924#define S_ISVTX 0001000
19925#define S_IREAD 0000400
19926#define S_IWRITE 0000200
19927#define S_IEXEC 0000100
19928#define S_ENFMT 0002000
19929#define S_IFMT _IFMT
19930#define S_IFDIR _IFDIR
19931#define S_IFCHR _IFCHR
19932#define S_IFBLK _IFBLK
19933#define S_IFREG _IFREG
19934#define S_IFLNK _IFLNK
19935#define S_IFSOCK _IFSOCK
19936#define S_IFIFO _IFIFO
19937#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
19938#define S_IRUSR 0000400
19939#define S_IWUSR 0000200
19940#define S_IXUSR 0000100
19941#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
19942#define S_IRGRP 0000040
19943#define S_IWGRP 0000020
19944#define S_IXGRP 0000010
19945#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
19946#define S_IROTH 0000004
19947#define S_IWOTH 0000002
19948#define S_IXOTH 0000001
19949#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
19950#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
19951#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
19952#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK)
19953#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR)
19954#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
19955#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)
19956#define S_ISREG(m) (((m)&_IFMT) == _IFREG)
19957#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK)
19958#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)
19959#define UTIME_NOW -2L
19960#define UTIME_OMIT -1L
19961#define _STDLIB_H_
19962#define __need_size_t
19963#define __need_wchar_t
19964#define __need_NULL
19965#undef __need_ptrdiff_t
19966#undef __need_size_t
19967#undef __need_wchar_t
19968#undef NULL
19969#define NULL ((void *)0)
19970#undef __need_NULL
19971#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19972#define _MACHSTDLIB_H_
19973#define _NEWLIB_ALLOCA_H
19974#undef alloca
19975#define alloca(size) __builtin_alloca(size)
19976#define _CYGWIN_STDLIB_H
19977#define _CYGWIN_WAIT_H
19978#define WAIT_ANY (pid_t)-1
19979#define WAIT_MYPGRP (pid_t)0
19980#define WNOHANG 1
19981#define WUNTRACED 2
19982#define WCONTINUED 8
19983#define __W_CONTINUED 0xffff
19984#define WIFEXITED(_w) (((_w) & 0xff) == 0)
19985#define WIFSIGNALED(_w) (((_w) & 0x7f) > 0 && (((_w) & 0x7f) < 0x7f))
19986#define WIFSTOPPED(_w) (((_w) & 0xff) == 0x7f)
19987#define WIFCONTINUED(_w) (((_w) & 0xffff) == __W_CONTINUED)
19988#define WEXITSTATUS(_w) (((_w) >> 8) & 0xff)
19989#define WTERMSIG(_w) ((_w) & 0x7f)
19990#define WSTOPSIG WEXITSTATUS
19991#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & 0x80))
19992#undef _malloc_r
19993#define _malloc_r(r,s) malloc (s)
19994#undef _free_r
19995#define _free_r(r,p) free (p)
19996#undef _realloc_r
19997#define _realloc_r(r,p,s) realloc (p, s)
19998#undef _calloc_r
19999#define _calloc_r(r,s1,s2) calloc (s1, s2);
20000#undef _memalign_r
20001#define _memalign_r(r,s1,s2) memalign (s1, s2);
20002#undef _mallinfo_r
20003#define _mallinfo_r(r) mallinfo ()
20004#undef _malloc_stats_r
20005#define _malloc_stats_r(r) malloc_stats ()
20006#undef _mallopt_r
20007#define _mallopt_r(i1,i2) mallopt (i1, i2)
20008#undef _malloc_usable_size_r
20009#define _malloc_usable_size_r(r,p) malloc_usable_size (p)
20010#undef _valloc_r
20011#define _valloc_r(r,s) valloc (s)
20012#undef _pvalloc_r
20013#define _pvalloc_r(r,s) pvalloc (s)
20014#undef _malloc_trim_r
20015#define _malloc_trim_r(r,s) malloc_trim (s)
20016#undef _mstats_r
20017#define _mstats_r(r,p) mstats (p)
20018#define __compar_fn_t_defined
20019#define EXIT_FAILURE 1
20020#define EXIT_SUCCESS 0
20021#define RAND_MAX __RAND_MAX
20022#define MB_CUR_MAX __locale_mb_cur_max()
20023#define strtodf strtof
20024#define _SSP_STDLIB_H_
20025#define _STRING_H_
20026#define __need_size_t
20027#define __need_NULL
20028#undef __need_ptrdiff_t
20029#undef __need_size_t
20030#undef __need_wchar_t
20031#undef NULL
20032#define NULL ((void *)0)
20033#undef __need_NULL
20034#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20035#define _STRINGS_H_
20036#define _SSP_STRINGS_H_
20037#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))
20038#define bzero(dst,len) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___memset_chk(dst, 0, len, __ssp_bos0(dst)) : __memset_ichk(dst, 0, len))
20039#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);}))
20040#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);}))
20041#define basename basename
20042#define _SSP_STRING_H_
20043#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))
20044#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))
20045#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)); }
20046#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)); }
20047#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)); }
20048#define memcpy(dst,src,len) __ssp_bos_check3(memcpy, dst, src, len)
20049#define memmove(dst,src,len) __ssp_bos_check3(memmove, dst, src, len)
20050#define mempcpy(dst,src,len) __ssp_bos_check3(mempcpy, dst, src, len)
20051#define memset(dst,val,len) __ssp_bos_check3(memset, dst, val, len)
20052#define stpcpy(dst,src) __ssp_bos_check2(stpcpy, dst, src)
20053#define stpncpy(dst,src,len) __ssp_bos_check3(stpncpy, dst, src, len)
20054#define strcpy(dst,src) __ssp_bos_check2(strcpy, dst, src)
20055#define strcat(dst,src) __ssp_bos_check2(strcat, dst, src)
20056#define strncpy(dst,src,len) __ssp_bos_check3(strncpy, dst, src, len)
20057#define strncat(dst,src,len) __ssp_bos_check3(strncat, dst, src, len)
20058#define _INTTYPES_H
20059#define __need_wchar_t
20060#undef __need_ptrdiff_t
20061#undef __need_size_t
20062#undef __need_wchar_t
20063#undef NULL
20064#define NULL ((void *)0)
20065#undef __need_NULL
20066#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20067#define __STRINGIFY(a) #a
20068#define __PRI8(x) __INT8 __STRINGIFY(x)
20069#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x)
20070#define __PRI8FAST(x) __FAST8 __STRINGIFY(x)
20071#define __SCN8(x) __INT8 __STRINGIFY(x)
20072#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x)
20073#define __SCN8FAST(x) __FAST8 __STRINGIFY(x)
20074#define PRId8 __PRI8(d)
20075#define PRIi8 __PRI8(i)
20076#define PRIo8 __PRI8(o)
20077#define PRIu8 __PRI8(u)
20078#define PRIx8 __PRI8(x)
20079#define PRIX8 __PRI8(X)
20080#define SCNd8 __SCN8(d)
20081#define SCNi8 __SCN8(i)
20082#define SCNo8 __SCN8(o)
20083#define SCNu8 __SCN8(u)
20084#define SCNx8 __SCN8(x)
20085#define PRIdLEAST8 __PRI8LEAST(d)
20086#define PRIiLEAST8 __PRI8LEAST(i)
20087#define PRIoLEAST8 __PRI8LEAST(o)
20088#define PRIuLEAST8 __PRI8LEAST(u)
20089#define PRIxLEAST8 __PRI8LEAST(x)
20090#define PRIXLEAST8 __PRI8LEAST(X)
20091#define SCNdLEAST8 __SCN8LEAST(d)
20092#define SCNiLEAST8 __SCN8LEAST(i)
20093#define SCNoLEAST8 __SCN8LEAST(o)
20094#define SCNuLEAST8 __SCN8LEAST(u)
20095#define SCNxLEAST8 __SCN8LEAST(x)
20096#define PRIdFAST8 __PRI8FAST(d)
20097#define PRIiFAST8 __PRI8FAST(i)
20098#define PRIoFAST8 __PRI8FAST(o)
20099#define PRIuFAST8 __PRI8FAST(u)
20100#define PRIxFAST8 __PRI8FAST(x)
20101#define PRIXFAST8 __PRI8FAST(X)
20102#define SCNdFAST8 __SCN8FAST(d)
20103#define SCNiFAST8 __SCN8FAST(i)
20104#define SCNoFAST8 __SCN8FAST(o)
20105#define SCNuFAST8 __SCN8FAST(u)
20106#define SCNxFAST8 __SCN8FAST(x)
20107#define __PRI16(x) __INT16 __STRINGIFY(x)
20108#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x)
20109#define __PRI16FAST(x) __FAST16 __STRINGIFY(x)
20110#define __SCN16(x) __INT16 __STRINGIFY(x)
20111#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x)
20112#define __SCN16FAST(x) __FAST16 __STRINGIFY(x)
20113#define PRId16 __PRI16(d)
20114#define PRIi16 __PRI16(i)
20115#define PRIo16 __PRI16(o)
20116#define PRIu16 __PRI16(u)
20117#define PRIx16 __PRI16(x)
20118#define PRIX16 __PRI16(X)
20119#define SCNd16 __SCN16(d)
20120#define SCNi16 __SCN16(i)
20121#define SCNo16 __SCN16(o)
20122#define SCNu16 __SCN16(u)
20123#define SCNx16 __SCN16(x)
20124#define PRIdLEAST16 __PRI16LEAST(d)
20125#define PRIiLEAST16 __PRI16LEAST(i)
20126#define PRIoLEAST16 __PRI16LEAST(o)
20127#define PRIuLEAST16 __PRI16LEAST(u)
20128#define PRIxLEAST16 __PRI16LEAST(x)
20129#define PRIXLEAST16 __PRI16LEAST(X)
20130#define SCNdLEAST16 __SCN16LEAST(d)
20131#define SCNiLEAST16 __SCN16LEAST(i)
20132#define SCNoLEAST16 __SCN16LEAST(o)
20133#define SCNuLEAST16 __SCN16LEAST(u)
20134#define SCNxLEAST16 __SCN16LEAST(x)
20135#define PRIdFAST16 __PRI16FAST(d)
20136#define PRIiFAST16 __PRI16FAST(i)
20137#define PRIoFAST16 __PRI16FAST(o)
20138#define PRIuFAST16 __PRI16FAST(u)
20139#define PRIxFAST16 __PRI16FAST(x)
20140#define PRIXFAST16 __PRI16FAST(X)
20141#define SCNdFAST16 __SCN16FAST(d)
20142#define SCNiFAST16 __SCN16FAST(i)
20143#define SCNoFAST16 __SCN16FAST(o)
20144#define SCNuFAST16 __SCN16FAST(u)
20145#define SCNxFAST16 __SCN16FAST(x)
20146#define __PRI32(x) __INT32 __STRINGIFY(x)
20147#define __SCN32(x) __INT32 __STRINGIFY(x)
20148#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x)
20149#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x)
20150#define __PRI32FAST(x) __FAST32 __STRINGIFY(x)
20151#define __SCN32FAST(x) __FAST32 __STRINGIFY(x)
20152#define PRId32 __PRI32(d)
20153#define PRIi32 __PRI32(i)
20154#define PRIo32 __PRI32(o)
20155#define PRIu32 __PRI32(u)
20156#define PRIx32 __PRI32(x)
20157#define PRIX32 __PRI32(X)
20158#define SCNd32 __SCN32(d)
20159#define SCNi32 __SCN32(i)
20160#define SCNo32 __SCN32(o)
20161#define SCNu32 __SCN32(u)
20162#define SCNx32 __SCN32(x)
20163#define PRIdLEAST32 __PRI32LEAST(d)
20164#define PRIiLEAST32 __PRI32LEAST(i)
20165#define PRIoLEAST32 __PRI32LEAST(o)
20166#define PRIuLEAST32 __PRI32LEAST(u)
20167#define PRIxLEAST32 __PRI32LEAST(x)
20168#define PRIXLEAST32 __PRI32LEAST(X)
20169#define SCNdLEAST32 __SCN32LEAST(d)
20170#define SCNiLEAST32 __SCN32LEAST(i)
20171#define SCNoLEAST32 __SCN32LEAST(o)
20172#define SCNuLEAST32 __SCN32LEAST(u)
20173#define SCNxLEAST32 __SCN32LEAST(x)
20174#define PRIdFAST32 __PRI32FAST(d)
20175#define PRIiFAST32 __PRI32FAST(i)
20176#define PRIoFAST32 __PRI32FAST(o)
20177#define PRIuFAST32 __PRI32FAST(u)
20178#define PRIxFAST32 __PRI32FAST(x)
20179#define PRIXFAST32 __PRI32FAST(X)
20180#define SCNdFAST32 __SCN32FAST(d)
20181#define SCNiFAST32 __SCN32FAST(i)
20182#define SCNoFAST32 __SCN32FAST(o)
20183#define SCNuFAST32 __SCN32FAST(u)
20184#define SCNxFAST32 __SCN32FAST(x)
20185#define __PRI64(x) __INT64 __STRINGIFY(x)
20186#define __SCN64(x) __INT64 __STRINGIFY(x)
20187#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x)
20188#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x)
20189#define __PRI64FAST(x) __FAST64 __STRINGIFY(x)
20190#define __SCN64FAST(x) __FAST64 __STRINGIFY(x)
20191#define PRId64 __PRI64(d)
20192#define PRIi64 __PRI64(i)
20193#define PRIo64 __PRI64(o)
20194#define PRIu64 __PRI64(u)
20195#define PRIx64 __PRI64(x)
20196#define PRIX64 __PRI64(X)
20197#define SCNd64 __SCN64(d)
20198#define SCNi64 __SCN64(i)
20199#define SCNo64 __SCN64(o)
20200#define SCNu64 __SCN64(u)
20201#define SCNx64 __SCN64(x)
20202#define PRIdLEAST64 __PRI64LEAST(d)
20203#define PRIiLEAST64 __PRI64LEAST(i)
20204#define PRIoLEAST64 __PRI64LEAST(o)
20205#define PRIuLEAST64 __PRI64LEAST(u)
20206#define PRIxLEAST64 __PRI64LEAST(x)
20207#define PRIXLEAST64 __PRI64LEAST(X)
20208#define SCNdLEAST64 __SCN64LEAST(d)
20209#define SCNiLEAST64 __SCN64LEAST(i)
20210#define SCNoLEAST64 __SCN64LEAST(o)
20211#define SCNuLEAST64 __SCN64LEAST(u)
20212#define SCNxLEAST64 __SCN64LEAST(x)
20213#define PRIdFAST64 __PRI64FAST(d)
20214#define PRIiFAST64 __PRI64FAST(i)
20215#define PRIoFAST64 __PRI64FAST(o)
20216#define PRIuFAST64 __PRI64FAST(u)
20217#define PRIxFAST64 __PRI64FAST(x)
20218#define PRIXFAST64 __PRI64FAST(X)
20219#define SCNdFAST64 __SCN64FAST(d)
20220#define SCNiFAST64 __SCN64FAST(i)
20221#define SCNoFAST64 __SCN64FAST(o)
20222#define SCNuFAST64 __SCN64FAST(u)
20223#define SCNxFAST64 __SCN64FAST(x)
20224#define __PRIMAX(x) __STRINGIFY(l ##x)
20225#define __SCNMAX(x) __STRINGIFY(l ##x)
20226#define PRIdMAX __PRIMAX(d)
20227#define PRIiMAX __PRIMAX(i)
20228#define PRIoMAX __PRIMAX(o)
20229#define PRIuMAX __PRIMAX(u)
20230#define PRIxMAX __PRIMAX(x)
20231#define PRIXMAX __PRIMAX(X)
20232#define SCNdMAX __SCNMAX(d)
20233#define SCNiMAX __SCNMAX(i)
20234#define SCNoMAX __SCNMAX(o)
20235#define SCNuMAX __SCNMAX(u)
20236#define SCNxMAX __SCNMAX(x)
20237#define __PRIPTR(x) __STRINGIFY(l ##x)
20238#define __SCNPTR(x) __STRINGIFY(l ##x)
20239#define PRIdPTR __PRIPTR(d)
20240#define PRIiPTR __PRIPTR(i)
20241#define PRIoPTR __PRIPTR(o)
20242#define PRIuPTR __PRIPTR(u)
20243#define PRIxPTR __PRIPTR(x)
20244#define PRIXPTR __PRIPTR(X)
20245#define SCNdPTR __SCNPTR(d)
20246#define SCNiPTR __SCNPTR(i)
20247#define SCNoPTR __SCNPTR(o)
20248#define SCNuPTR __SCNPTR(u)
20249#define SCNxPTR __SCNPTR(x)
20250#define _STDALIGN_H
20251#define alignas _Alignas
20252#define alignof _Alignof
20253#define __alignas_is_defined 1
20254#define __alignof_is_defined 1
20255#define _UNISTD_H_
20256#define _SYS_UNISTD_H
20257#define __need_size_t
20258#define __need_ptrdiff_t
20259#undef __need_ptrdiff_t
20260#undef __need_size_t
20261#undef __need_wchar_t
20262#undef NULL
20263#define NULL ((void *)0)
20264#undef __need_NULL
20265#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20266#define F_ULOCK 0
20267#define F_LOCK 1
20268#define F_TLOCK 2
20269#define F_TEST 3
20270#define __UNISTD_GETOPT__
20271#define __GETOPT_H__
20272#undef __UNISTD_GETOPT__
20273#define F_OK 0
20274#define R_OK 4
20275#define W_OK 2
20276#define X_OK 1
20277#define SEEK_SET 0
20278#define SEEK_CUR 1
20279#define SEEK_END 2
20280#define STDIN_FILENO 0
20281#define STDOUT_FILENO 1
20282#define STDERR_FILENO 2
20283#define _SC_ARG_MAX 0
20284#define _SC_CHILD_MAX 1
20285#define _SC_CLK_TCK 2
20286#define _SC_NGROUPS_MAX 3
20287#define _SC_OPEN_MAX 4
20288#define _SC_JOB_CONTROL 5
20289#define _SC_SAVED_IDS 6
20290#define _SC_VERSION 7
20291#define _SC_PAGESIZE 8
20292#define _SC_PAGE_SIZE _SC_PAGESIZE
20293#define _SC_NPROCESSORS_CONF 9
20294#define _SC_NPROCESSORS_ONLN 10
20295#define _SC_PHYS_PAGES 11
20296#define _SC_AVPHYS_PAGES 12
20297#define _SC_MQ_OPEN_MAX 13
20298#define _SC_MQ_PRIO_MAX 14
20299#define _SC_RTSIG_MAX 15
20300#define _SC_SEM_NSEMS_MAX 16
20301#define _SC_SEM_VALUE_MAX 17
20302#define _SC_SIGQUEUE_MAX 18
20303#define _SC_TIMER_MAX 19
20304#define _SC_TZNAME_MAX 20
20305#define _SC_ASYNCHRONOUS_IO 21
20306#define _SC_FSYNC 22
20307#define _SC_MAPPED_FILES 23
20308#define _SC_MEMLOCK 24
20309#define _SC_MEMLOCK_RANGE 25
20310#define _SC_MEMORY_PROTECTION 26
20311#define _SC_MESSAGE_PASSING 27
20312#define _SC_PRIORITIZED_IO 28
20313#define _SC_REALTIME_SIGNALS 29
20314#define _SC_SEMAPHORES 30
20315#define _SC_SHARED_MEMORY_OBJECTS 31
20316#define _SC_SYNCHRONIZED_IO 32
20317#define _SC_TIMERS 33
20318#define _SC_AIO_LISTIO_MAX 34
20319#define _SC_AIO_MAX 35
20320#define _SC_AIO_PRIO_DELTA_MAX 36
20321#define _SC_DELAYTIMER_MAX 37
20322#define _SC_THREAD_KEYS_MAX 38
20323#define _SC_THREAD_STACK_MIN 39
20324#define _SC_THREAD_THREADS_MAX 40
20325#define _SC_TTY_NAME_MAX 41
20326#define _SC_THREADS 42
20327#define _SC_THREAD_ATTR_STACKADDR 43
20328#define _SC_THREAD_ATTR_STACKSIZE 44
20329#define _SC_THREAD_PRIORITY_SCHEDULING 45
20330#define _SC_THREAD_PRIO_INHERIT 46
20331#define _SC_THREAD_PRIO_PROTECT 47
20332#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
20333#define _SC_THREAD_PROCESS_SHARED 48
20334#define _SC_THREAD_SAFE_FUNCTIONS 49
20335#define _SC_GETGR_R_SIZE_MAX 50
20336#define _SC_GETPW_R_SIZE_MAX 51
20337#define _SC_LOGIN_NAME_MAX 52
20338#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
20339#define _SC_ADVISORY_INFO 54
20340#define _SC_ATEXIT_MAX 55
20341#define _SC_BARRIERS 56
20342#define _SC_BC_BASE_MAX 57
20343#define _SC_BC_DIM_MAX 58
20344#define _SC_BC_SCALE_MAX 59
20345#define _SC_BC_STRING_MAX 60
20346#define _SC_CLOCK_SELECTION 61
20347#define _SC_COLL_WEIGHTS_MAX 62
20348#define _SC_CPUTIME 63
20349#define _SC_EXPR_NEST_MAX 64
20350#define _SC_HOST_NAME_MAX 65
20351#define _SC_IOV_MAX 66
20352#define _SC_IPV6 67
20353#define _SC_LINE_MAX 68
20354#define _SC_MONOTONIC_CLOCK 69
20355#define _SC_RAW_SOCKETS 70
20356#define _SC_READER_WRITER_LOCKS 71
20357#define _SC_REGEXP 72
20358#define _SC_RE_DUP_MAX 73
20359#define _SC_SHELL 74
20360#define _SC_SPAWN 75
20361#define _SC_SPIN_LOCKS 76
20362#define _SC_SPORADIC_SERVER 77
20363#define _SC_SS_REPL_MAX 78
20364#define _SC_SYMLOOP_MAX 79
20365#define _SC_THREAD_CPUTIME 80
20366#define _SC_THREAD_SPORADIC_SERVER 81
20367#define _SC_TIMEOUTS 82
20368#define _SC_TRACE 83
20369#define _SC_TRACE_EVENT_FILTER 84
20370#define _SC_TRACE_EVENT_NAME_MAX 85
20371#define _SC_TRACE_INHERIT 86
20372#define _SC_TRACE_LOG 87
20373#define _SC_TRACE_NAME_MAX 88
20374#define _SC_TRACE_SYS_MAX 89
20375#define _SC_TRACE_USER_EVENT_MAX 90
20376#define _SC_TYPED_MEMORY_OBJECTS 91
20377#define _SC_V7_ILP32_OFF32 92
20378#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
20379#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
20380#define _SC_V7_ILP32_OFFBIG 93
20381#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
20382#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
20383#define _SC_V7_LP64_OFF64 94
20384#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
20385#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
20386#define _SC_V7_LPBIG_OFFBIG 95
20387#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
20388#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
20389#define _SC_XOPEN_CRYPT 96
20390#define _SC_XOPEN_ENH_I18N 97
20391#define _SC_XOPEN_LEGACY 98
20392#define _SC_XOPEN_REALTIME 99
20393#define _SC_STREAM_MAX 100
20394#define _SC_PRIORITY_SCHEDULING 101
20395#define _SC_XOPEN_REALTIME_THREADS 102
20396#define _SC_XOPEN_SHM 103
20397#define _SC_XOPEN_STREAMS 104
20398#define _SC_XOPEN_UNIX 105
20399#define _SC_XOPEN_VERSION 106
20400#define _SC_2_CHAR_TERM 107
20401#define _SC_2_C_BIND 108
20402#define _SC_2_C_DEV 109
20403#define _SC_2_FORT_DEV 110
20404#define _SC_2_FORT_RUN 111
20405#define _SC_2_LOCALEDEF 112
20406#define _SC_2_PBS 113
20407#define _SC_2_PBS_ACCOUNTING 114
20408#define _SC_2_PBS_CHECKPOINT 115
20409#define _SC_2_PBS_LOCATE 116
20410#define _SC_2_PBS_MESSAGE 117
20411#define _SC_2_PBS_TRACK 118
20412#define _SC_2_SW_DEV 119
20413#define _SC_2_UPE 120
20414#define _SC_2_VERSION 121
20415#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
20416#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
20417#define _SC_XOPEN_UUCP 124
20418#define _SC_LEVEL1_ICACHE_SIZE 125
20419#define _SC_LEVEL1_ICACHE_ASSOC 126
20420#define _SC_LEVEL1_ICACHE_LINESIZE 127
20421#define _SC_LEVEL1_DCACHE_SIZE 128
20422#define _SC_LEVEL1_DCACHE_ASSOC 129
20423#define _SC_LEVEL1_DCACHE_LINESIZE 130
20424#define _SC_LEVEL2_CACHE_SIZE 131
20425#define _SC_LEVEL2_CACHE_ASSOC 132
20426#define _SC_LEVEL2_CACHE_LINESIZE 133
20427#define _SC_LEVEL3_CACHE_SIZE 134
20428#define _SC_LEVEL3_CACHE_ASSOC 135
20429#define _SC_LEVEL3_CACHE_LINESIZE 136
20430#define _SC_LEVEL4_CACHE_SIZE 137
20431#define _SC_LEVEL4_CACHE_ASSOC 138
20432#define _SC_LEVEL4_CACHE_LINESIZE 139
20433#define _SC_POSIX_26_VERSION 140
20434#define _PC_LINK_MAX 0
20435#define _PC_MAX_CANON 1
20436#define _PC_MAX_INPUT 2
20437#define _PC_NAME_MAX 3
20438#define _PC_PATH_MAX 4
20439#define _PC_PIPE_BUF 5
20440#define _PC_CHOWN_RESTRICTED 6
20441#define _PC_NO_TRUNC 7
20442#define _PC_VDISABLE 8
20443#define _PC_ASYNC_IO 9
20444#define _PC_PRIO_IO 10
20445#define _PC_SYNC_IO 11
20446#define _PC_FILESIZEBITS 12
20447#define _PC_2_SYMLINKS 13
20448#define _PC_SYMLINK_MAX 14
20449#define _PC_ALLOC_SIZE_MIN 15
20450#define _PC_REC_INCR_XFER_SIZE 16
20451#define _PC_REC_MAX_XFER_SIZE 17
20452#define _PC_REC_MIN_XFER_SIZE 18
20453#define _PC_REC_XFER_ALIGN 19
20454#define _PC_TIMESTAMP_RESOLUTION 20
20455#define _PC_POSIX_PERMISSIONS 90
20456#define _PC_POSIX_SECURITY 91
20457#define _PC_CASE_INSENSITIVE 92
20458#define _CS_PATH 0
20459#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
20460#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
20461#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
20462#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
20463#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
20464#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
20465#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
20466#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
20467#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
20468#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
20469#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
20470#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
20471#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
20472#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
20473#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20474#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20475#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
20476#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20477#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20478#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
20479#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
20480#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20481#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20482#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
20483#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20484#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20485#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
20486#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20487#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20488#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
20489#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
20490#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20491#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20492#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
20493#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20494#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20495#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
20496#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20497#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20498#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
20499#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
20500#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20501#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20502#define _CS_POSIX_V7_THREADS_CFLAGS 18
20503#define _CS_POSIX_V7_THREADS_LDFLAGS 19
20504#define _CS_V7_ENV 20
20505#define _CS_V6_ENV _CS_V7_ENV
20506#define _CS_LFS_CFLAGS 21
20507#define _CS_LFS_LDFLAGS 22
20508#define _CS_LFS_LIBS 23
20509#define _CS_LFS_LINTFLAGS 24
20510#define _SSP_UNISTD_H_
20511#define RBIMPL_DLLEXPORT_H
20512#undef RUBY_EXTERN
20513#define RUBY_EXTERN extern
20514#define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
20515#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN
20516#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END
20517#define MJIT_STATIC static
20518#define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
20519#define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END
20520#define RBIMPL_XMALLOC_H
20521#define RBIMPL_ATTR_ALLOC_SIZE_H
20522#define RBIMPL_HAS_ATTRIBUTE_H
20523#define RBIMPL_HAVE___HAS_ATTRIBUTE 1
20524#define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_)
20525#define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple))
20526#define RBIMPL_ATTR_NODISCARD_H
20527#define RBIMPL_HAS_C_ATTRIBUTE_H
20528#define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)
20529#define RBIMPL_HAS_CPP_ATTRIBUTE_H
20530#define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)
20531#define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
20532#define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
20533#define RBIMPL_ATTR_NOEXCEPT_H
20534#define RBIMPL_HAS_FEATURE_H
20535#define RBIMPL_HAS_FEATURE(_) __has_feature(_)
20536#define RBIMPL_ATTR_NOEXCEPT(_)
20537#define RBIMPL_ATTR_RESTRICT_H
20538#define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__))
20539#define RBIMPL_ATTR_RETURNS_NONNULL_H
20540#define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__))
20541#define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
20542#define xmalloc ruby_xmalloc
20543#define xmalloc2 ruby_xmalloc2
20544#define xcalloc ruby_xcalloc
20545#define xrealloc ruby_xrealloc
20546#define xrealloc2 ruby_xrealloc2
20547#define xfree ruby_xfree
20548#pragma GCC visibility push(default)
20549#pragma GCC visibility pop
20550#define RUBY_BACKWARD2_ASSUME_H
20551#define RBIMPL_ASSUME_H
20552#define RBIMPL_CAST_H
20553#define RBIMPL_HAS_WARNING_H
20554#define RBIMPL_HAS_WARNING(_) 0
20555#define RBIMPL_WARNING_PUSH_H
20556#define RBIMPL_WARNING_PRAGMA0(x) _Pragma(#x)
20557#define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(GCC diagnostic x)
20558#define RBIMPL_WARNING_PRAGMA2(x,y) RBIMPL_WARNING_PRAGMA1(x #y)
20559#define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push)
20560#define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop)
20561#define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag)
20562#define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)
20563#define RBIMPL_CAST(expr) (expr)
20564#define RBIMPL_HAS_BUILTIN_H
20565#define RBIMPL_HAVE___HAS_BUILTIN 1
20566#define RBIMPL_HAS_BUILTIN(_) __has_builtin(_)
20567#define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()
20568#define RBIMPL_UNREACHABLE __builtin_unreachable
20569#define RBIMPL_ASSUME(_) (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
20570#define ASSUME RBIMPL_ASSUME
20571#define UNREACHABLE RBIMPL_UNREACHABLE()
20572#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN
20573#define RB_LIKELY(x) (__builtin_expect(!!(x), 1))
20574#define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
20575#define RUBY_BACKWARD2_ATTRIBUTES_H
20576#define RBIMPL_ATTR_CONST_H
20577#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H
20578#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _)
20579#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20580#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20581#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20582#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20583#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918)
20584#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20585#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20586#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0)
20587#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20588#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0)
20589#undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow
20590#define RBIMPL_ATTR_CONST() __attribute__((__const__))
20591#define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST()
20592#define RBIMPL_ATTR_DEPRECATED_H
20593#define RBIMPL_HAS_EXTENSION_H
20594#define RBIMPL_HAS_EXTENSION(_) __has_extension(_)
20595#define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))
20596#define RBIMPL_ATTR_DEPRECATED_EXT(msg)
20597#define RBIMPL_ATTR_ERROR_H
20598#define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg))
20599#define RBIMPL_ATTR_FORCEINLINE_H
20600#define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline
20601#define RBIMPL_ATTR_FORMAT_H
20602#define RBIMPL_ATTR_FORMAT(x,y,z) __attribute__((__format__(x, y, z)))
20603#define RBIMPL_PRINTF_FORMAT __printf__
20604#define RBIMPL_ATTR_MAYBE_UNUSED_H
20605#define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
20606#define RBIMPL_ATTR_NOINLINE_H
20607#define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__))
20608#define RBIMPL_ATTR_NONNULL_H
20609#define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list))
20610#define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING
20611#define RBIMPL_ATTR_NORETURN_H
20612#define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__))
20613#define RBIMPL_ATTR_PURE_H
20614#define RUBY_ASSERT_H
20615#define RBIMPL_RUBY_DEBUG 0
20616#define RBIMPL_NDEBUG 0
20617#undef RUBY_DEBUG
20618#undef RUBY_NDEBUG
20619#undef NDEBUG
20620#define RUBY_DEBUG 0
20621#define RUBY_NDEBUG 1
20622#define NDEBUG
20623#undef RBIMPL_NDEBUG
20624#undef RBIMPL_RUBY_DEBUG
20625#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)
20626#pragma GCC visibility push(default)
20627#pragma GCC visibility pop
20628#define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
20629#define RUBY_ASSERT_FAIL(mesg) rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
20630#define RUBY_ASSERT_MESG(expr,mesg) (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
20631#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
20632#define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
20633#define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
20634#define RUBY_ASSERT_MESG_WHEN(cond,expr,mesg) ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
20635#define RUBY_ASSERT_WHEN(cond,expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
20636#define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
20637#define RBIMPL_ATTR_PURE() __attribute__((__pure__))
20638#define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE()
20639#define RBIMPL_ATTR_WARNING_H
20640#define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg))
20641#undef CONSTFUNC
20642#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x
20643#undef PUREFUNC
20644#define PUREFUNC(x) RBIMPL_ATTR_PURE() x
20645#undef DEPRECATED
20646#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x
20647#undef DEPRECATED_BY
20648#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " #n)) x
20649#undef DEPRECATED_TYPE
20650#define DEPRECATED_TYPE(mesg,decl) _Pragma("message \"DEPRECATED_TYPE is deprecated\""); decl RBIMPL_ATTR_DEPRECATED(mseg)
20651#undef RUBY_CXX_DEPRECATED
20652#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))
20653#undef NOINLINE
20654#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x
20655#undef ERRORFUNC
20656#define ERRORFUNC(mesg,x) RBIMPL_ATTR_ERROR(mesg) x
20657#define HAVE_ATTRIBUTE_ERRORFUNC 1
20658#undef WARNINGFUNC
20659#define WARNINGFUNC(mesg,x) RBIMPL_ATTR_WARNING(mesg) x
20660#define HAVE_ATTRIBUTE_WARNINGFUNC 1
20661#undef COLDFUNC
20662#define PRINTF_ARGS(decl,string_index,first_to_check) RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) decl
20663#undef RUBY_ATTR_ALLOC_SIZE
20664#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE
20665#undef RUBY_ATTR_MALLOC
20666#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()
20667#undef RUBY_ATTR_RETURNS_NONNULL
20668#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()
20669#define RUBY_ALIAS_FUNCTION(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
20670#undef RUBY_FUNC_NONNULL
20671#define RUBY_FUNC_NONNULL(n,x) RBIMPL_ATTR_NONNULL(n) x
20672#undef NORETURN
20673#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
20674#define NORETURN_STYLE_NEW
20675#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
20676#undef RB_UNUSED_VAR
20677#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()
20678#define RUBY_BACKWARD2_BOOL_H
20679#define RBIMPL_STDBOOL_H
20680#define _STDBOOL_H
20681#define bool _Bool
20682#define true 1
20683#define false 0
20684#define __bool_true_false_are_defined 1
20685#define FALSE false
20686#define TRUE true
20687#define RUBY_BACKWARD2_LONG_LONG_H
20688#define HAVE_TRUE_LONG_LONG 1
20689#define LONG_LONG long long
20690#define RUBY_BACKWARD2_STDALIGN_H
20691#define RBIMPL_STDALIGN_H
20692#define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))
20693#define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T))
20694#undef RUBY_ALIGNAS
20695#undef RUBY_ALIGNOF
20696#define RUBY_ALIGNAS RBIMPL_ALIGNAS
20697#define RUBY_ALIGNOF RBIMPL_ALIGNOF
20698#define RUBY_BACKWARD2_STDARG_H
20699#undef _
20700#define _(args) args
20701#undef __
20702#define __(args) args
20703#define ANYARGS
20704#define RBIMPL_DOSISH_H
20705#undef _WIN32
20706#define PATH_SEP ":"
20707#define PATH_SEP_CHAR PATH_SEP[0]
20708#define PATH_ENV "PATH"
20709#define CASEFOLD_FILESYSTEM 0
20710#define RUBY_MISSING_H 1
20711#define _MATH_H_
20712#define _M_LN2 0.693147180559945309417
20713#define HUGE_VAL (__builtin_huge_val())
20714#define HUGE_VALF (__builtin_huge_valf())
20715#define HUGE_VALL (__builtin_huge_vall())
20716#define INFINITY (__builtin_inff())
20717#define NAN (__builtin_nanf(""))
20718#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
20719#define __TMP_FLT_EVAL_METHOD
20720#undef FLT_EVAL_METHOD
20721#define FP_NAN 0
20722#define FP_INFINITE 1
20723#define FP_ZERO 2
20724#define FP_SUBNORMAL 3
20725#define FP_NORMAL 4
20726#define FP_ILOGB0 (-__INT_MAX__)
20727#define FP_ILOGBNAN __INT_MAX__
20728#define MATH_ERRNO 1
20729#define MATH_ERREXCEPT 2
20730#define _MATH_ERRHANDLING_ERRNO MATH_ERRNO
20731#define _MATH_ERRHANDLING_ERREXCEPT MATH_ERREXCEPT
20732#define math_errhandling (_MATH_ERRHANDLING_ERRNO | _MATH_ERRHANDLING_ERREXCEPT)
20733#define fpclassify(__x) (__builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x))
20734#define isfinite(__x) (__builtin_isfinite (__x))
20735#define isinf(__x) (__builtin_isinf_sign (__x))
20736#define isnan(__x) (__builtin_isnan (__x))
20737#define isnormal(__x) (__builtin_isnormal (__x))
20738#define signbit(__x) ((sizeof(__x) == sizeof(float)) ? __builtin_signbitf(__x) : (sizeof(__x) == sizeof(double)) ? __builtin_signbit (__x) : __builtin_signbitl(__x))
20739#define isgreater(__x,__y) (__builtin_isgreater (__x, __y))
20740#define isgreaterequal(__x,__y) (__builtin_isgreaterequal (__x, __y))
20741#define isless(__x,__y) (__builtin_isless (__x, __y))
20742#define islessequal(__x,__y) (__builtin_islessequal (__x, __y))
20743#define islessgreater(__x,__y) (__builtin_islessgreater (__x, __y))
20744#define isunordered(__x,__y) (__builtin_isunordered (__x, __y))
20745#define log2(x) (log (x) / _M_LN2)
20746#define signgam (*__signgam())
20747#define __signgam_r(ptr) _REENT_SIGNGAM(ptr)
20748#define MAXFLOAT 3.40282347e+38F
20749#define M_E 2.7182818284590452354
20750#define M_LOG2E 1.4426950408889634074
20751#define M_LOG10E 0.43429448190325182765
20752#define M_LN2 _M_LN2
20753#define M_LN10 2.30258509299404568402
20754#define M_PI 3.14159265358979323846
20755#define M_PI_2 1.57079632679489661923
20756#define M_PI_4 0.78539816339744830962
20757#define M_1_PI 0.31830988618379067154
20758#define M_2_PI 0.63661977236758134308
20759#define M_2_SQRTPI 1.12837916709551257390
20760#define M_SQRT2 1.41421356237309504880
20761#define M_SQRT1_2 0.70710678118654752440
20762#define M_TWOPI (M_PI * 2.0)
20763#define M_3PI_4 2.3561944901923448370E0
20764#define M_SQRTPI 1.77245385090551602792981
20765#define M_LN2LO 1.9082149292705877000E-10
20766#define M_LN2HI 6.9314718036912381649E-1
20767#define M_SQRT3 1.73205080756887719000
20768#define M_IVLN10 0.43429448190325182765
20769#define M_LOG2_E _M_LN2
20770#define M_INVLN2 1.4426950408889633870E0
20771#define _SYS_TIME_H_
20772#define DST_NONE 0
20773#define DST_USA 1
20774#define DST_AUST 2
20775#define DST_WET 3
20776#define DST_MET 4
20777#define DST_EET 5
20778#define DST_CAN 6
20779#define bintime_clear(a) ((a)->sec = (a)->frac = 0)
20780#define bintime_isset(a) ((a)->sec || (a)->frac)
20781#define bintime_cmp(a,b,cmp) (((a)->sec == (b)->sec) ? ((a)->frac cmp (b)->frac) : ((a)->sec cmp (b)->sec))
20782#define SBT_1S ((sbintime_t)1 << 32)
20783#define SBT_1M (SBT_1S * 60)
20784#define SBT_1MS (SBT_1S / 1000)
20785#define SBT_1US (SBT_1S / 1000000)
20786#define SBT_1NS (SBT_1S / 1000000000)
20787#define SBT_MAX 0x7fffffffffffffffLL
20788#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
20789#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
20790#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))
20791#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)
20792#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)
20793#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
20794#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
20795#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))
20796#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)
20797#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)
20798#define ITIMER_REAL 0
20799#define ITIMER_VIRTUAL 1
20800#define ITIMER_PROF 2
20801#define _IEEE_FP_H_
20802#define _FLOAT_H___
20803#undef FLT_RADIX
20804#define FLT_RADIX __FLT_RADIX__
20805#undef FLT_MANT_DIG
20806#undef DBL_MANT_DIG
20807#undef LDBL_MANT_DIG
20808#define FLT_MANT_DIG __FLT_MANT_DIG__
20809#define DBL_MANT_DIG __DBL_MANT_DIG__
20810#define LDBL_MANT_DIG __LDBL_MANT_DIG__
20811#undef FLT_DIG
20812#undef DBL_DIG
20813#undef LDBL_DIG
20814#define FLT_DIG __FLT_DIG__
20815#define DBL_DIG __DBL_DIG__
20816#define LDBL_DIG __LDBL_DIG__
20817#undef FLT_MIN_EXP
20818#undef DBL_MIN_EXP
20819#undef LDBL_MIN_EXP
20820#define FLT_MIN_EXP __FLT_MIN_EXP__
20821#define DBL_MIN_EXP __DBL_MIN_EXP__
20822#define LDBL_MIN_EXP __LDBL_MIN_EXP__
20823#undef FLT_MIN_10_EXP
20824#undef DBL_MIN_10_EXP
20825#undef LDBL_MIN_10_EXP
20826#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
20827#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
20828#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
20829#undef FLT_MAX_EXP
20830#undef DBL_MAX_EXP
20831#undef LDBL_MAX_EXP
20832#define FLT_MAX_EXP __FLT_MAX_EXP__
20833#define DBL_MAX_EXP __DBL_MAX_EXP__
20834#define LDBL_MAX_EXP __LDBL_MAX_EXP__
20835#undef FLT_MAX_10_EXP
20836#undef DBL_MAX_10_EXP
20837#undef LDBL_MAX_10_EXP
20838#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
20839#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
20840#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
20841#undef FLT_MAX
20842#undef DBL_MAX
20843#undef LDBL_MAX
20844#define FLT_MAX __FLT_MAX__
20845#define DBL_MAX __DBL_MAX__
20846#define LDBL_MAX __LDBL_MAX__
20847#undef FLT_EPSILON
20848#undef DBL_EPSILON
20849#undef LDBL_EPSILON
20850#define FLT_EPSILON __FLT_EPSILON__
20851#define DBL_EPSILON __DBL_EPSILON__
20852#define LDBL_EPSILON __LDBL_EPSILON__
20853#undef FLT_MIN
20854#undef DBL_MIN
20855#undef LDBL_MIN
20856#define FLT_MIN __FLT_MIN__
20857#define DBL_MIN __DBL_MIN__
20858#define LDBL_MIN __LDBL_MIN__
20859#undef FLT_ROUNDS
20860#define FLT_ROUNDS 1
20861#undef FLT_EVAL_METHOD
20862#define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__
20863#undef DECIMAL_DIG
20864#define DECIMAL_DIG __DECIMAL_DIG__
20865#undef FLT_DECIMAL_DIG
20866#undef DBL_DECIMAL_DIG
20867#undef LDBL_DECIMAL_DIG
20868#define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
20869#define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
20870#define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
20871#undef FLT_HAS_SUBNORM
20872#undef DBL_HAS_SUBNORM
20873#undef LDBL_HAS_SUBNORM
20874#define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
20875#define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
20876#define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
20877#undef FLT_TRUE_MIN
20878#undef DBL_TRUE_MIN
20879#undef LDBL_TRUE_MIN
20880#define FLT_TRUE_MIN __FLT_DENORM_MIN__
20881#define DBL_TRUE_MIN __DBL_DENORM_MIN__
20882#define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
20883#define CR_DECIMAL_DIG __UINTMAX_MAX__
20884#undef FLT32_MANT_DIG
20885#define FLT32_MANT_DIG __FLT32_MANT_DIG__
20886#undef FLT32_DIG
20887#define FLT32_DIG __FLT32_DIG__
20888#undef FLT32_MIN_EXP
20889#define FLT32_MIN_EXP __FLT32_MIN_EXP__
20890#undef FLT32_MIN_10_EXP
20891#define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__
20892#undef FLT32_MAX_EXP
20893#define FLT32_MAX_EXP __FLT32_MAX_EXP__
20894#undef FLT32_MAX_10_EXP
20895#define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__
20896#undef FLT32_MAX
20897#define FLT32_MAX __FLT32_MAX__
20898#undef FLT32_EPSILON
20899#define FLT32_EPSILON __FLT32_EPSILON__
20900#undef FLT32_MIN
20901#define FLT32_MIN __FLT32_MIN__
20902#undef FLT32_DECIMAL_DIG
20903#define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__
20904#undef FLT32_TRUE_MIN
20905#define FLT32_TRUE_MIN __FLT32_DENORM_MIN__
20906#undef FLT64_MANT_DIG
20907#define FLT64_MANT_DIG __FLT64_MANT_DIG__
20908#undef FLT64_DIG
20909#define FLT64_DIG __FLT64_DIG__
20910#undef FLT64_MIN_EXP
20911#define FLT64_MIN_EXP __FLT64_MIN_EXP__
20912#undef FLT64_MIN_10_EXP
20913#define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__
20914#undef FLT64_MAX_EXP
20915#define FLT64_MAX_EXP __FLT64_MAX_EXP__
20916#undef FLT64_MAX_10_EXP
20917#define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__
20918#undef FLT64_MAX
20919#define FLT64_MAX __FLT64_MAX__
20920#undef FLT64_EPSILON
20921#define FLT64_EPSILON __FLT64_EPSILON__
20922#undef FLT64_MIN
20923#define FLT64_MIN __FLT64_MIN__
20924#undef FLT64_DECIMAL_DIG
20925#define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__
20926#undef FLT64_TRUE_MIN
20927#define FLT64_TRUE_MIN __FLT64_DENORM_MIN__
20928#undef FLT128_MANT_DIG
20929#define FLT128_MANT_DIG __FLT128_MANT_DIG__
20930#undef FLT128_DIG
20931#define FLT128_DIG __FLT128_DIG__
20932#undef FLT128_MIN_EXP
20933#define FLT128_MIN_EXP __FLT128_MIN_EXP__
20934#undef FLT128_MIN_10_EXP
20935#define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__
20936#undef FLT128_MAX_EXP
20937#define FLT128_MAX_EXP __FLT128_MAX_EXP__
20938#undef FLT128_MAX_10_EXP
20939#define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__
20940#undef FLT128_MAX
20941#define FLT128_MAX __FLT128_MAX__
20942#undef FLT128_EPSILON
20943#define FLT128_EPSILON __FLT128_EPSILON__
20944#undef FLT128_MIN
20945#define FLT128_MIN __FLT128_MIN__
20946#undef FLT128_DECIMAL_DIG
20947#define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__
20948#undef FLT128_TRUE_MIN
20949#define FLT128_TRUE_MIN __FLT128_DENORM_MIN__
20950#undef FLT32X_MANT_DIG
20951#define FLT32X_MANT_DIG __FLT32X_MANT_DIG__
20952#undef FLT32X_DIG
20953#define FLT32X_DIG __FLT32X_DIG__
20954#undef FLT32X_MIN_EXP
20955#define FLT32X_MIN_EXP __FLT32X_MIN_EXP__
20956#undef FLT32X_MIN_10_EXP
20957#define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__
20958#undef FLT32X_MAX_EXP
20959#define FLT32X_MAX_EXP __FLT32X_MAX_EXP__
20960#undef FLT32X_MAX_10_EXP
20961#define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__
20962#undef FLT32X_MAX
20963#define FLT32X_MAX __FLT32X_MAX__
20964#undef FLT32X_EPSILON
20965#define FLT32X_EPSILON __FLT32X_EPSILON__
20966#undef FLT32X_MIN
20967#define FLT32X_MIN __FLT32X_MIN__
20968#undef FLT32X_DECIMAL_DIG
20969#define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__
20970#undef FLT32X_TRUE_MIN
20971#define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__
20972#undef FLT64X_MANT_DIG
20973#define FLT64X_MANT_DIG __FLT64X_MANT_DIG__
20974#undef FLT64X_DIG
20975#define FLT64X_DIG __FLT64X_DIG__
20976#undef FLT64X_MIN_EXP
20977#define FLT64X_MIN_EXP __FLT64X_MIN_EXP__
20978#undef FLT64X_MIN_10_EXP
20979#define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__
20980#undef FLT64X_MAX_EXP
20981#define FLT64X_MAX_EXP __FLT64X_MAX_EXP__
20982#undef FLT64X_MAX_10_EXP
20983#define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__
20984#undef FLT64X_MAX
20985#define FLT64X_MAX __FLT64X_MAX__
20986#undef FLT64X_EPSILON
20987#define FLT64X_EPSILON __FLT64X_EPSILON__
20988#undef FLT64X_MIN
20989#define FLT64X_MIN __FLT64X_MIN__
20990#undef FLT64X_DECIMAL_DIG
20991#define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__
20992#undef FLT64X_TRUE_MIN
20993#define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__
20994#undef DEC32_MANT_DIG
20995#undef DEC64_MANT_DIG
20996#undef DEC128_MANT_DIG
20997#define DEC32_MANT_DIG __DEC32_MANT_DIG__
20998#define DEC64_MANT_DIG __DEC64_MANT_DIG__
20999#define DEC128_MANT_DIG __DEC128_MANT_DIG__
21000#undef DEC32_MIN_EXP
21001#undef DEC64_MIN_EXP
21002#undef DEC128_MIN_EXP
21003#define DEC32_MIN_EXP __DEC32_MIN_EXP__
21004#define DEC64_MIN_EXP __DEC64_MIN_EXP__
21005#define DEC128_MIN_EXP __DEC128_MIN_EXP__
21006#undef DEC32_MAX_EXP
21007#undef DEC64_MAX_EXP
21008#undef DEC128_MAX_EXP
21009#define DEC32_MAX_EXP __DEC32_MAX_EXP__
21010#define DEC64_MAX_EXP __DEC64_MAX_EXP__
21011#define DEC128_MAX_EXP __DEC128_MAX_EXP__
21012#undef DEC32_MAX
21013#undef DEC64_MAX
21014#undef DEC128_MAX
21015#define DEC32_MAX __DEC32_MAX__
21016#define DEC64_MAX __DEC64_MAX__
21017#define DEC128_MAX __DEC128_MAX__
21018#undef DEC32_EPSILON
21019#undef DEC64_EPSILON
21020#undef DEC128_EPSILON
21021#define DEC32_EPSILON __DEC32_EPSILON__
21022#define DEC64_EPSILON __DEC64_EPSILON__
21023#define DEC128_EPSILON __DEC128_EPSILON__
21024#undef DEC32_MIN
21025#undef DEC64_MIN
21026#undef DEC128_MIN
21027#define DEC32_MIN __DEC32_MIN__
21028#define DEC64_MIN __DEC64_MIN__
21029#define DEC128_MIN __DEC128_MIN__
21030#undef DEC_EVAL_METHOD
21031#define DEC_EVAL_METHOD __DEC_EVAL_METHOD__
21032#undef DEC32_TRUE_MIN
21033#undef DEC64_TRUE_MIN
21034#undef DEC128_TRUE_MIN
21035#define DEC32_TRUE_MIN __DEC32_SUBNORMAL_MIN__
21036#define DEC64_TRUE_MIN __DEC64_SUBNORMAL_MIN__
21037#define DEC128_TRUE_MIN __DEC128_SUBNORMAL_MIN__
21038#define EXT_EXPBITS 15
21039#define EXT_FRACHBITS 32
21040#define EXT_FRACLBITS 32
21041#define __ieee_ext_field_type unsigned int
21042#define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1)
21043#define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1)
21044#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS)
21045#define FP_RN 0
21046#define FP_RM 1
21047#define FP_RP 2
21048#define FP_RZ 3
21049#define FP_X_INV 0x10
21050#define FP_X_DX 0x80
21051#define FP_X_OFL 0x04
21052#define FP_X_UFL 0x02
21053#define FP_X_IMP 0x01
21054#define FP_RDI_TOZ 0
21055#define FP_RDI_RD 1
21056#define __IEEE_DBL_EXPBIAS 1023
21057#define __IEEE_FLT_EXPBIAS 127
21058#define __IEEE_DBL_EXPLEN 11
21059#define __IEEE_FLT_EXPLEN 8
21060#define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1))
21061#define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1))
21062#define __IEEE_DBL_MAXPOWTWO ((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1))
21063#define __IEEE_FLT_MAXPOWTWO ((float)(1L << (32-8) - 1))
21064#define __IEEE_DBL_NAN_EXP 0x7ff
21065#define __IEEE_FLT_NAN_EXP 0xff
21066#pragma GCC visibility push(default)
21067#define HAVE_FINITE 1
21068#define finite(x) isfinite(x)
21069#pragma GCC visibility pop
21070#define RUBY
21071#define RB_GNUC_EXTENSION __extension__
21072#define RB_GNUC_EXTENSION_BLOCK(x) __extension__ ({ x; })
21073#define RUBY_MBCHAR_MAXSIZE INT_MAX
21074#define FLUSH_REGISTER_WINDOWS ((void)0)
21075#define RUBY_ABI_H
21076#define RBIMPL_ANYARGS_H
21077#define RBIMPL_ATTR_WEAKREF_H
21078#define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(#sym)))
21079#define RBIMPL_INTERN_CLASS_H
21080#define RBIMPL_VALUE_H
21081#define RBIMPL_STATIC_ASSERT_H
21082#undef assert
21083#define assert(__e) ((void)0)
21084#define static_assert _Static_assert
21085#define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
21086#define RBIMPL_STATIC_ASSERT(name,expr) RBIMPL_STATIC_ASSERT0(expr, #name ": " #expr)
21087#define RUBY_BACKWARD2_LIMITS_H
21088#define _GCC_LIMITS_H_
21089#define _GCC_NEXT_LIMITS_H
21090#define _FEATURES_H
21091#define _CYGWIN_LIMITS_H__
21092#define __AIO_LISTIO_MAX 32
21093#define __AIO_MAX 8
21094#define __AIO_PRIO_DELTA_MAX 0
21095#define __ARG_MAX 32000
21096#define __ATEXIT_MAX 32
21097#define __CHILD_MAX 256
21098#define __DELAYTIMER_MAX __INT_MAX__
21099#define __HOST_NAME_MAX 255
21100#define __IOV_MAX 1024
21101#define __LOGIN_NAME_MAX 256
21102#define __MQ_OPEN_MAX 256
21103#define __MQ_PRIO_MAX INT_MAX
21104#define __OPEN_MAX 3200
21105#define __PAGESIZE 65536
21106#define __PTHREAD_DESTRUCTOR_ITERATIONS 4
21107#define __PTHREAD_KEYS_MAX 1024
21108#define __PTHREAD_STACK_MIN 65536
21109#define __RTSIG_MAX 33
21110#define __SEM_VALUE_MAX 1147483648
21111#define __SIGQUEUE_MAX 32
21112#define __STREAM_MAX 20
21113#define __SYMLOOP_MAX 10
21114#define __TIMER_MAX 32
21115#define __TTY_NAME_MAX 32
21116#define __FILESIZEBITS 64
21117#define __LINK_MAX 1024
21118#define __MAX_CANON 255
21119#define __MAX_INPUT 255
21120#define __NAME_MAX 255
21121#define __PATH_MAX 4096
21122#define __PIPE_BUF 4096
21123#define _LIMITS_H___
21124#define _MACH_MACHLIMITS_H_
21125#undef CHAR_BIT
21126#define CHAR_BIT __CHAR_BIT__
21127#undef LONG_BIT
21128#define LONG_BIT (__SIZEOF_LONG__ * __CHAR_BIT__)
21129#undef WORD_BIT
21130#define WORD_BIT (__SIZEOF_INT__ * __CHAR_BIT__)
21131#define MB_LEN_MAX 8
21132#undef SCHAR_MIN
21133#define SCHAR_MIN (-128)
21134#undef SCHAR_MAX
21135#define SCHAR_MAX 127
21136#undef UCHAR_MAX
21137#define UCHAR_MAX 255
21138#undef CHAR_MIN
21139#define CHAR_MIN (-128)
21140#undef CHAR_MAX
21141#define CHAR_MAX 127
21142#undef SHRT_MIN
21143#define SHRT_MIN (-32768)
21144#undef SHRT_MAX
21145#define SHRT_MAX 32767
21146#undef USHRT_MAX
21147#define USHRT_MAX 65535
21148#undef INT_MIN
21149#define INT_MIN (-INT_MAX-1)
21150#undef INT_MAX
21151#define INT_MAX __INT_MAX__
21152#undef UINT_MAX
21153#define UINT_MAX (INT_MAX * 2U + 1)
21154#undef LONG_MIN
21155#define LONG_MIN (-LONG_MAX-1L)
21156#undef LONG_MAX
21157#define LONG_MAX __LONG_MAX__
21158#undef ULONG_MAX
21159#define ULONG_MAX (LONG_MAX * 2UL + 1)
21160#undef LONG_LONG_MIN
21161#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
21162#undef LONG_LONG_MAX
21163#define LONG_LONG_MAX __LONG_LONG_MAX__
21164#undef ULONG_LONG_MAX
21165#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
21166#undef LLONG_MIN
21167#define LLONG_MIN (-LLONG_MAX-1)
21168#undef LLONG_MAX
21169#define LLONG_MAX __LONG_LONG_MAX__
21170#undef ULLONG_MAX
21171#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
21172#undef SSIZE_MAX
21173#define SSIZE_MAX (__LONG_MAX__)
21174#define AIO_LISTIO_MAX __AIO_LISTIO_MAX
21175#define AIO_MAX __AIO_MAX
21176#define AIO_PRIO_DELTA_MAX __AIO_PRIO_DELTA_MAX
21177#undef ARG_MAX
21178#define ARG_MAX __ARG_MAX
21179#undef ATEXIT_MAX
21180#define ATEXIT_MAX __ATEXIT_MAX
21181#undef CHILD_MAX
21182#define CHILD_MAX __CHILD_MAX
21183#undef DELAYTIMER_MAX
21184#define DELAYTIMER_MAX __DELAYTIMER_MAX
21185#undef HOST_NAME_MAX
21186#define HOST_NAME_MAX __HOST_NAME_MAX
21187#undef IOV_MAX
21188#define IOV_MAX __IOV_MAX
21189#undef LOGIN_NAME_MAX
21190#define LOGIN_NAME_MAX __LOGIN_NAME_MAX
21191#undef MQ_OPEN_MAX
21192#define MQ_OPEN_MAX __MQ_OPEN_MAX
21193#undef MQ_PRIO_MAX
21194#define MQ_PRIO_MAX __MQ_PRIO_MAX
21195#undef OPEN_MAX
21196#define OPEN_MAX __OPEN_MAX
21197#undef PAGESIZE
21198#define PAGESIZE __PAGESIZE
21199#undef PAGE_SIZE
21200#define PAGE_SIZE PAGESIZE
21201#undef PTHREAD_DESTRUCTOR_ITERATIONS
21202#define PTHREAD_DESTRUCTOR_ITERATIONS __PTHREAD_DESTRUCTOR_ITERATIONS
21203#undef PTHREAD_KEYS_MAX
21204#define PTHREAD_KEYS_MAX __PTHREAD_KEYS_MAX
21205#undef PTHREAD_STACK_MIN
21206#define PTHREAD_STACK_MIN __PTHREAD_STACK_MIN
21207#undef PTHREAD_THREADS_MAX
21208#undef RTSIG_MAX
21209#define RTSIG_MAX __RTSIG_MAX
21210#undef SEM_NSEMS_MAX
21211#undef SEM_VALUE_MAX
21212#define SEM_VALUE_MAX __SEM_VALUE_MAX
21213#undef SIGQUEUE_MAX
21214#define SIGQUEUE_MAX __SIGQUEUE_MAX
21215#undef SS_REPL_MAX
21216#undef STREAM_MAX
21217#define STREAM_MAX __STREAM_MAX
21218#undef SYMLOOP_MAX
21219#define SYMLOOP_MAX __SYMLOOP_MAX
21220#undef TIMER_MAX
21221#define TIMER_MAX __TIMER_MAX
21222#undef TRACE_EVENT_NAME_MAX
21223#undef TRACE_NAME_MAX
21224#undef TRACE_SYS_MAX
21225#undef TRACE_USER_EVENT_MAX
21226#undef TTY_NAME_MAX
21227#define TTY_NAME_MAX __TTY_NAME_MAX
21228#undef TZNAME_MAX
21229#undef FILESIZEBITS
21230#define FILESIZEBITS __FILESIZEBITS
21231#undef LINK_MAX
21232#define LINK_MAX __LINK_MAX
21233#undef MAX_CANON
21234#define MAX_CANON __MAX_CANON
21235#undef MAX_INPUT
21236#define MAX_INPUT __MAX_INPUT
21237#undef NAME_MAX
21238#define NAME_MAX __NAME_MAX
21239#undef PATH_MAX
21240#define PATH_MAX __PATH_MAX
21241#undef PIPE_BUF
21242#define PIPE_BUF __PIPE_BUF
21243#undef POSIX_ALLOC_SIZE_MIN
21244#undef POSIX_REC_INCR_XFER_SIZE
21245#undef POSIX_REC_MAX_XFER_SIZE
21246#undef POSIX_REC_MIN_XFER_SIZE
21247#undef POSIX_REC_XFER_ALIGN
21248#undef SYMLINK_MAX
21249#define SYMLINK_MAX (PATH_MAX - 1)
21250#undef BC_BASE_MAX
21251#define BC_BASE_MAX 99
21252#undef BC_DIM_MAX
21253#define BC_DIM_MAX 2048
21254#undef BC_SCALE_MAX
21255#define BC_SCALE_MAX 99
21256#undef BC_STRING_MAX
21257#define BC_STRING_MAX 1000
21258#undef CHARCLASS_NAME_MAX
21259#undef COLL_WEIGHTS_MAX
21260#undef EXPR_NEST_MAX
21261#define EXPR_NEST_MAX 32
21262#undef LINE_MAX
21263#define LINE_MAX 2048
21264#undef NGROUPS_MAX
21265#define NGROUPS_MAX 1024
21266#undef RE_DUP_MAX
21267#define RE_DUP_MAX 255
21268#define _POSIX_CLOCKRES_MIN 20000000
21269#define _POSIX_AIO_LISTIO_MAX 2
21270#define _POSIX_AIO_MAX 1
21271#define _POSIX_ARG_MAX 4096
21272#define _POSIX_CHILD_MAX 25
21273#define _POSIX_DELAYTIMER_MAX 32
21274#define _POSIX_HOST_NAME_MAX 255
21275#define _POSIX_LINK_MAX 8
21276#define _POSIX_LOGIN_NAME_MAX 9
21277#define _POSIX_MAX_CANON 255
21278#define _POSIX_MAX_INPUT 255
21279#define _POSIX_MQ_OPEN_MAX 8
21280#define _POSIX_MQ_PRIO_MAX 32
21281#define _POSIX_NAME_MAX 14
21282#define _POSIX_NGROUPS_MAX 8
21283#define _POSIX_OPEN_MAX 20
21284#define _POSIX_PATH_MAX 256
21285#define _POSIX_PIPE_BUF 512
21286#define _POSIX_RE_DUP_MAX 255
21287#define _POSIX_RTSIG_MAX 8
21288#define _POSIX_SEM_NSEMS_MAX 256
21289#define _POSIX_SEM_VALUE_MAX 32767
21290#define _POSIX_SIGQUEUE_MAX 32
21291#define _POSIX_SSIZE_MAX 32767
21292#define _POSIX_STREAM_MAX 8
21293#define _POSIX_SS_REPL_MAX 4
21294#define _POSIX_SYMLINK_MAX 255
21295#define _POSIX_SYMLOOP_MAX 8
21296#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
21297#define _POSIX_THREAD_KEYS_MAX 128
21298#define _POSIX_THREAD_THREADS_MAX 64
21299#define _POSIX_TIMER_MAX 32
21300#define _POSIX_TRACE_EVENT_NAME_MAX 30
21301#define _POSIX_TRACE_NAME_MAX 8
21302#define _POSIX_TRACE_SYS_MAX 8
21303#define _POSIX_TRACE_USER_EVENT_MAX 32
21304#define _POSIX_TTY_NAME_MAX 9
21305#define _POSIX_TZNAME_MAX 6
21306#define _POSIX2_BC_BASE_MAX 99
21307#define _POSIX2_BC_DIM_MAX 2048
21308#define _POSIX2_BC_SCALE_MAX 99
21309#define _POSIX2_BC_STRING_MAX 1000
21310#define _POSIX2_COLL_WEIGHTS_MAX 2
21311#define _POSIX2_EXPR_NEST_MAX 32
21312#define _POSIX2_LINE_MAX 2048
21313#define _POSIX2_RE_DUP_MAX 255
21314#define _XOPEN_IOV_MAX 16
21315#define _XOPEN_NAME_MAX 255
21316#define _XOPEN_PATH_MAX 1024
21317#define NL_ARGMAX 9
21318#define NL_LANGMAX 14
21319#define NL_MSGMAX 32767
21320#define NL_SETMAX 255
21321#define NL_TEXTMAX _POSIX2_LINE_MAX
21322#undef NZERO
21323#define NZERO 20
21324#undef _GCC_NEXT_LIMITS_H
21325#define SIGNED_VALUE long
21326#define SIZEOF_VALUE SIZEOF_LONG
21327#define PRI_VALUE_PREFIX "l"
21328#define RBIMPL_VALUE_NULL 0UL
21329#define RBIMPL_VALUE_ONE 1UL
21330#define RBIMPL_VALUE_FULL ULONG_MAX
21331#pragma GCC visibility push(default)
21332#pragma GCC visibility pop
21333#define RBIMPL_INTERN_VM_H
21334#pragma GCC visibility push(default)
21335#define HAVE_RB_DEFINE_ALLOC_FUNC 1
21336#pragma GCC visibility pop
21337#define RBIMPL_METHOD_H
21338#pragma GCC visibility push(default)
21339#pragma GCC visibility pop
21340#define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))
21341#define RBIMPL_ARITHMETIC_H
21342#define RBIMPL_ARITHMETIC_CHAR_H
21343#define RBIMPL_ARITHMETIC_INT_H
21344#define RBIMPL_ARITHMETIC_FIXNUM_H
21345#define FIXABLE RB_FIXABLE
21346#define FIXNUM_MAX RUBY_FIXNUM_MAX
21347#define FIXNUM_MIN RUBY_FIXNUM_MIN
21348#define NEGFIXABLE RB_NEGFIXABLE
21349#define POSFIXABLE RB_POSFIXABLE
21350#define RB_POSFIXABLE(_) ((_) < RUBY_FIXNUM_MAX + 1)
21351#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN)
21352#define RB_FIXABLE(_) (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_))
21353#define RUBY_FIXNUM_MAX (LONG_MAX / 2)
21354#define RUBY_FIXNUM_MIN (LONG_MIN / 2)
21355#define RBIMPL_ARITHMETIC_INTPTR_T_H
21356#define rb_int_new rb_int2inum
21357#define rb_uint_new rb_uint2inum
21358#pragma GCC visibility push(default)
21359#pragma GCC visibility pop
21360#define RBIMPL_ARITHMETIC_LONG_H
21361#define RBIMPL_ATTR_ARTIFICIAL_H
21362#define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__))
21363#define RBIMPL_ATTR_CONSTEXPR_H
21364#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
21365#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0
21366#define RBIMPL_ATTR_CONSTEXPR(_)
21367#define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_)
21368#define RBIMPL_SPECIAL_CONSTS_H
21369#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H
21370#define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_)
21371#define USE_FLONUM 1
21372#define RTEST RB_TEST
21373#define FIXNUM_P RB_FIXNUM_P
21374#define IMMEDIATE_P RB_IMMEDIATE_P
21375#define NIL_P RB_NIL_P
21376#define SPECIAL_CONST_P RB_SPECIAL_CONST_P
21377#define STATIC_SYM_P RB_STATIC_SYM_P
21378#define Qfalse RUBY_Qfalse
21379#define Qnil RUBY_Qnil
21380#define Qtrue RUBY_Qtrue
21381#define Qundef RUBY_Qundef
21382#define FIXNUM_FLAG RUBY_FIXNUM_FLAG
21383#define FLONUM_FLAG RUBY_FLONUM_FLAG
21384#define FLONUM_MASK RUBY_FLONUM_MASK
21385#define FLONUM_P RB_FLONUM_P
21386#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
21387#define SYMBOL_FLAG RUBY_SYMBOL_FLAG
21388#define RB_FIXNUM_P RB_FIXNUM_P
21389#define RB_FLONUM_P RB_FLONUM_P
21390#define RB_IMMEDIATE_P RB_IMMEDIATE_P
21391#define RB_NIL_P RB_NIL_P
21392#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P
21393#define RB_STATIC_SYM_P RB_STATIC_SYM_P
21394#define RB_TEST RB_TEST
21395#define RB_UNDEF_P RB_UNDEF_P
21396#define RB_NIL_OR_UNDEF_P RB_NIL_OR_UNDEF_P
21397#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse)
21398#define RUBY_Qtrue RBIMPL_CAST((VALUE)RUBY_Qtrue)
21399#define RUBY_Qnil RBIMPL_CAST((VALUE)RUBY_Qnil)
21400#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef)
21401#define FIX2LONG RB_FIX2LONG
21402#define FIX2ULONG RB_FIX2ULONG
21403#define INT2FIX RB_INT2FIX
21404#define LONG2FIX RB_INT2FIX
21405#define LONG2NUM RB_LONG2NUM
21406#define NUM2LONG RB_NUM2LONG
21407#define NUM2ULONG RB_NUM2ULONG
21408#define RB_FIX2LONG rb_fix2long
21409#define RB_FIX2ULONG rb_fix2ulong
21410#define RB_LONG2FIX RB_INT2FIX
21411#define RB_LONG2NUM rb_long2num_inline
21412#define RB_NUM2LONG rb_num2long_inline
21413#define RB_NUM2ULONG rb_num2ulong_inline
21414#define RB_ULONG2NUM rb_ulong2num_inline
21415#define ULONG2NUM RB_ULONG2NUM
21416#define rb_fix_new RB_INT2FIX
21417#define rb_long2int rb_long2int_inline
21418#define RB_INT2FIX RB_INT2FIX
21419#pragma GCC visibility push(default)
21420#pragma GCC visibility pop
21421#undef INT2FIX
21422#define INT2FIX(i) __builtin_choose_expr( __builtin_constant_p(i), RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(i))
21423#define RB_INT2NUM rb_int2num_inline
21424#define RB_NUM2INT rb_num2int_inline
21425#define RB_UINT2NUM rb_uint2num_inline
21426#define FIX2INT RB_FIX2INT
21427#define FIX2UINT RB_FIX2UINT
21428#define INT2NUM RB_INT2NUM
21429#define NUM2INT RB_NUM2INT
21430#define NUM2UINT RB_NUM2UINT
21431#define UINT2NUM RB_UINT2NUM
21432#define RB_FIX2INT RB_FIX2INT
21433#define RB_NUM2UINT RB_NUM2UINT
21434#define RB_FIX2UINT RB_FIX2UINT
21435#pragma GCC visibility push(default)
21436#pragma GCC visibility pop
21437#pragma GCC diagnostic push
21438#pragma GCC diagnostic ignored "-Wtype-limits"
21439#pragma GCC diagnostic pop
21440#define RBIMPL_RSTRING_H
21441#define RBIMPL_RBASIC_H
21442#define RBIMPL_ATTR_NOALIAS_H
21443#define RBIMPL_ATTR_NOALIAS()
21444#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj))
21445#define RBASIC_CLASS RBASIC_CLASS
21446#define RBIMPL_RVALUE_EMBED_LEN_MAX 3
21447#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
21448#define RBIMPL_EMBED_LEN_MAX_OF(T) RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
21449#pragma GCC visibility push(default)
21450#pragma GCC visibility pop
21451#define RBIMPL_FL_TYPE_H
21452#define RBIMPL_ATTR_FLAG_ENUM_H
21453#define RBIMPL_ATTR_FLAG_ENUM()
21454#define RBIMPL_VALUE_TYPE_H
21455#define RBIMPL_CONSTANT_P_H
21456#define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr)
21457#define RBIMPL_ERROR_H
21458#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
21459#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
21460#pragma GCC visibility push(default)
21461#define ruby_verbose (*rb_ruby_verbose_ptr())
21462#define ruby_debug (*rb_ruby_debug_ptr())
21463#pragma GCC visibility pop
21464#define T_ARRAY RUBY_T_ARRAY
21465#define T_BIGNUM RUBY_T_BIGNUM
21466#define T_CLASS RUBY_T_CLASS
21467#define T_COMPLEX RUBY_T_COMPLEX
21468#define T_DATA RUBY_T_DATA
21469#define T_FALSE RUBY_T_FALSE
21470#define T_FILE RUBY_T_FILE
21471#define T_FIXNUM RUBY_T_FIXNUM
21472#define T_FLOAT RUBY_T_FLOAT
21473#define T_HASH RUBY_T_HASH
21474#define T_ICLASS RUBY_T_ICLASS
21475#define T_IMEMO RUBY_T_IMEMO
21476#define T_MASK RUBY_T_MASK
21477#define T_MATCH RUBY_T_MATCH
21478#define T_MODULE RUBY_T_MODULE
21479#define T_MOVED RUBY_T_MOVED
21480#define T_NIL RUBY_T_NIL
21481#define T_NODE RUBY_T_NODE
21482#define T_NONE RUBY_T_NONE
21483#define T_OBJECT RUBY_T_OBJECT
21484#define T_RATIONAL RUBY_T_RATIONAL
21485#define T_REGEXP RUBY_T_REGEXP
21486#define T_STRING RUBY_T_STRING
21487#define T_STRUCT RUBY_T_STRUCT
21488#define T_SYMBOL RUBY_T_SYMBOL
21489#define T_TRUE RUBY_T_TRUE
21490#define T_UNDEF RUBY_T_UNDEF
21491#define T_ZOMBIE RUBY_T_ZOMBIE
21492#define BUILTIN_TYPE RB_BUILTIN_TYPE
21493#define DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21494#define RB_INTEGER_TYPE_P rb_integer_type_p
21495#define SYMBOL_P RB_SYMBOL_P
21496#define rb_type_p RB_TYPE_P
21497#define RB_BUILTIN_TYPE RB_BUILTIN_TYPE
21498#define RB_DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21499#define RB_FLOAT_TYPE_P RB_FLOAT_TYPE_P
21500#define RB_SYMBOL_P RB_SYMBOL_P
21501#define RB_TYPE_P RB_TYPE_P
21502#define Check_Type Check_Type
21503#define RBIMPL_ASSERT_TYPE(v,t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P((v), (t)))
21504#define TYPE(_) RBIMPL_CAST((int)rb_type(_))
21505#pragma GCC visibility push(default)
21506#pragma GCC visibility pop
21507#define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
21508#define RBIMPL_WIDER_ENUM 1
21509#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
21510#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
21511#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
21512#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
21513#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
21514#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
21515#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
21516#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
21517#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
21518#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
21519#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
21520#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
21521#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
21522#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
21523#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
21524#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
21525#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
21526#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
21527#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
21528#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
21529#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
21530#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
21531#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
21532#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
21533#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
21534#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
21535#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
21536#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
21537#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
21538#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
21539#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
21540#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
21541#define ELTS_SHARED RUBY_ELTS_SHARED
21542#define RB_OBJ_FREEZE rb_obj_freeze_inline
21543#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
21544#define RB_FL_ABLE RB_FL_ABLE
21545#define RB_FL_ALL RB_FL_ALL
21546#define RB_FL_ALL_RAW RB_FL_ALL_RAW
21547#define RB_FL_ANY RB_FL_ANY
21548#define RB_FL_ANY_RAW RB_FL_ANY_RAW
21549#define RB_FL_REVERSE RB_FL_REVERSE
21550#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
21551#define RB_FL_SET RB_FL_SET
21552#define RB_FL_SET_RAW RB_FL_SET_RAW
21553#define RB_FL_TEST RB_FL_TEST
21554#define RB_FL_TEST_RAW RB_FL_TEST_RAW
21555#define RB_FL_UNSET RB_FL_UNSET
21556#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
21557#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21558#define RB_OBJ_FROZEN RB_OBJ_FROZEN
21559#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21560#define RB_OBJ_INFECT RB_OBJ_INFECT
21561#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21562#define RB_OBJ_TAINT RB_OBJ_TAINT
21563#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
21564#define RB_OBJ_TAINTED RB_OBJ_TAINTED
21565#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21566#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21567#define RB_OBJ_UNTRUST RB_OBJ_TAINT
21568#define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED
21569#define FL_ABLE RB_FL_ABLE
21570#define FL_ALL RB_FL_ALL
21571#define FL_ALL_RAW RB_FL_ALL_RAW
21572#define FL_ANY RB_FL_ANY
21573#define FL_ANY_RAW RB_FL_ANY_RAW
21574#define FL_REVERSE RB_FL_REVERSE
21575#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
21576#define FL_SET RB_FL_SET
21577#define FL_SET_RAW RB_FL_SET_RAW
21578#define FL_TEST RB_FL_TEST
21579#define FL_TEST_RAW RB_FL_TEST_RAW
21580#define FL_UNSET RB_FL_UNSET
21581#define FL_UNSET_RAW RB_FL_UNSET_RAW
21582#define OBJ_FREEZE RB_OBJ_FREEZE
21583#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21584#define OBJ_FROZEN RB_OBJ_FROZEN
21585#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21586#define OBJ_INFECT RB_OBJ_INFECT
21587#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21588#define OBJ_TAINT RB_OBJ_TAINT
21589#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
21590#define OBJ_TAINTED RB_OBJ_TAINTED
21591#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21592#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21593#define OBJ_UNTRUST RB_OBJ_UNTRUST
21594#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
21595#define RBIMPL_FL_USER_N(n) RUBY_FL_USER ##n = (1<<(RUBY_FL_USHIFT+n))
21596#undef RBIMPL_FL_USER_N
21597#undef RBIMPL_WIDER_ENUM
21598#undef RBIMPL_HAVE_ENUM_ATTRIBUTE
21599#pragma GCC visibility push(default)
21600#pragma GCC visibility pop
21601#pragma GCC visibility push(default)
21602#pragma GCC visibility pop
21603#define RSTRING(obj) RBIMPL_CAST((struct RString *)(obj))
21604#define RSTRING_NOEMBED RSTRING_NOEMBED
21605#define RSTRING_FSTR RSTRING_FSTR
21606#define RSTRING_EMBED_LEN RSTRING_EMBED_LEN
21607#define RSTRING_LEN RSTRING_LEN
21608#define RSTRING_LENINT RSTRING_LENINT
21609#define RSTRING_PTR RSTRING_PTR
21610#define RSTRING_END RSTRING_END
21611#define StringValue(v) rb_string_value(&(v))
21612#define StringValuePtr(v) rb_string_value_ptr(&(v))
21613#define StringValueCStr(v) rb_string_value_cstr(&(v))
21614#define SafeStringValue(v) StringValue(v)
21615#define ExportStringValue(v) do { StringValue(v); (v) = rb_str_export(v); } while (0)
21616#pragma GCC visibility push(default)
21617#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v)))
21618#pragma GCC visibility pop
21619#pragma GCC diagnostic push
21620#pragma GCC diagnostic pop
21621#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; })
21622#define RB_NUM2CHR rb_num2char_inline
21623#define NUM2CHR RB_NUM2CHR
21624#define CHR2FIX RB_CHR2FIX
21625#define RB_CHR2FIX RB_CHR2FIX
21626#define RBIMPL_ARITHMETIC_DOUBLE_H
21627#define NUM2DBL rb_num2dbl
21628#define RFLOAT_VALUE rb_float_value
21629#define DBL2NUM rb_float_new
21630#pragma GCC visibility push(default)
21631#pragma GCC visibility pop
21632#define RBIMPL_ARITHMETIC_GID_T_H
21633#define RBIMPL_ARITHMETIC_LONG_LONG_H
21634#define RB_LL2NUM rb_ll2num_inline
21635#define RB_ULL2NUM rb_ull2num_inline
21636#define LL2NUM RB_LL2NUM
21637#define ULL2NUM RB_ULL2NUM
21638#define RB_NUM2LL rb_num2ll_inline
21639#define RB_NUM2ULL rb_num2ull_inline
21640#define NUM2LL RB_NUM2LL
21641#define NUM2ULL RB_NUM2ULL
21642#pragma GCC visibility push(default)
21643#pragma GCC visibility pop
21644#define RBIMPL_ARITHMETIC_MODE_T_H
21645#define RBIMPL_ARITHMETIC_OFF_T_H
21646#define RBIMPL_ARITHMETIC_PID_T_H
21647#define RBIMPL_ARITHMETIC_SHORT_H
21648#define RB_NUM2SHORT rb_num2short_inline
21649#define RB_NUM2USHORT rb_num2ushort
21650#define NUM2SHORT RB_NUM2SHORT
21651#define NUM2USHORT RB_NUM2USHORT
21652#define USHORT2NUM RB_INT2FIX
21653#define RB_FIX2SHORT rb_fix2short
21654#define FIX2SHORT RB_FIX2SHORT
21655#pragma GCC visibility push(default)
21656#pragma GCC visibility pop
21657#define RBIMPL_ARITHMETIC_SIZE_T_H
21658#define RB_SIZE2NUM RB_ULL2NUM
21659#define RB_SSIZE2NUM RB_LL2NUM
21660#define RB_NUM2SIZE RB_NUM2ULL
21661#define RB_NUM2SSIZE RB_NUM2LL
21662#define NUM2SIZET RB_NUM2SIZE
21663#define SIZET2NUM RB_SIZE2NUM
21664#define NUM2SSIZET RB_NUM2SSIZE
21665#define SSIZET2NUM RB_SSIZE2NUM
21666#define RBIMPL_ARITHMERIC_ST_DATA_T_H
21667#define RUBY_ST_H 1
21668#pragma GCC visibility push(default)
21669#define ST_DATA_T_DEFINED
21670#define MAX_ST_INDEX_VAL (~(st_index_t) 0)
21671#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
21672#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
21673#define ST_DATA_COMPATIBLE_P(type) __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
21674#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)
21675#define st_init_table rb_st_init_table
21676#define st_init_table_with_size rb_st_init_table_with_size
21677#define st_init_numtable rb_st_init_numtable
21678#define st_init_numtable_with_size rb_st_init_numtable_with_size
21679#define st_init_strtable rb_st_init_strtable
21680#define st_init_strtable_with_size rb_st_init_strtable_with_size
21681#define st_init_strcasetable rb_st_init_strcasetable
21682#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size
21683#define st_delete rb_st_delete
21684#define st_delete_safe rb_st_delete_safe
21685#define st_shift rb_st_shift
21686#define st_insert rb_st_insert
21687#define st_insert2 rb_st_insert2
21688#define st_lookup rb_st_lookup
21689#define st_get_key rb_st_get_key
21690#define st_update rb_st_update
21691#define st_foreach_with_replace rb_st_foreach_with_replace
21692#define st_foreach rb_st_foreach
21693#define st_foreach_check rb_st_foreach_check
21694#define st_keys rb_st_keys
21695#define st_keys_check rb_st_keys_check
21696#define st_values rb_st_values
21697#define st_values_check rb_st_values_check
21698#define st_add_direct rb_st_add_direct
21699#define st_free_table rb_st_free_table
21700#define st_cleanup_safe rb_st_cleanup_safe
21701#define st_clear rb_st_clear
21702#define st_copy rb_st_copy
21703#define st_numcmp rb_st_numcmp
21704#define st_numhash rb_st_numhash
21705#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp
21706#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp
21707#define st_strcasecmp rb_st_locale_insensitive_strcasecmp
21708#define st_strncasecmp rb_st_locale_insensitive_strncasecmp
21709#define st_memsize rb_st_memsize
21710#define st_hash rb_st_hash
21711#define st_hash_uint32 rb_st_hash_uint32
21712#define st_hash_uint rb_st_hash_uint
21713#define st_hash_end rb_st_hash_end
21714#define st_hash_start(h) ((st_index_t)(h))
21715#pragma GCC visibility pop
21716#define ST2FIX RB_ST2FIX
21717#define RB_ST2FIX RB_ST2FIX
21718#define RBIMPL_ARITHMETIC_UID_T_H
21719#define RBIMPL_CORE_H
21720#define RBIMPL_RARRAY_H
21721#define RBIMPL_RGENGC_H
21722#undef USE_RGENGC
21723#define USE_RGENGC 1
21724#define USE_RINCGC 1
21725#define USE_RGENGC_LOGGING_WB_UNPROTECT 0
21726#define RGENGC_WB_PROTECTED_ARRAY 1
21727#define RGENGC_WB_PROTECTED_HASH 1
21728#define RGENGC_WB_PROTECTED_STRUCT 1
21729#define RGENGC_WB_PROTECTED_STRING 1
21730#define RGENGC_WB_PROTECTED_OBJECT 1
21731#define RGENGC_WB_PROTECTED_REGEXP 1
21732#define RGENGC_WB_PROTECTED_CLASS 1
21733#define RGENGC_WB_PROTECTED_FLOAT 1
21734#define RGENGC_WB_PROTECTED_COMPLEX 1
21735#define RGENGC_WB_PROTECTED_RATIONAL 1
21736#define RGENGC_WB_PROTECTED_BIGNUM 1
21737#define RGENGC_WB_PROTECTED_NODE_CREF 1
21738#define RB_OBJ_WRITE(old,slot,young) RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
21739#define RB_OBJ_WRITTEN(old,oldv,young) RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
21740#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21741#define OBJ_PROMOTED RB_OBJ_PROMOTED
21742#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
21743#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
21744#define RB_OBJ_WB_UNPROTECT_FOR(type,obj) (RGENGC_WB_PROTECTED_ ##type ? OBJ_WB_UNPROTECT(obj) : obj)
21745#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
21746#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21747#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
21748#pragma GCC visibility push(default)
21749#pragma GCC visibility pop
21750#define USE_TRANSIENT_HEAP 1
21751#define RARRAY(obj) RBIMPL_CAST((struct RArray *)(obj))
21752#define RARRAY_EMBED_FLAG RARRAY_EMBED_FLAG
21753#define RARRAY_EMBED_LEN_MASK RARRAY_EMBED_LEN_MASK
21754#define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX
21755#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
21756#define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG
21757#define RARRAY_LEN rb_array_len
21758#define RARRAY_CONST_PTR rb_array_const_ptr
21759#define RARRAY_CONST_PTR_TRANSIENT rb_array_const_ptr_transient
21760#define FIX_CONST_VALUE_PTR(x) (x)
21761#define RARRAY_EMBED_LEN RARRAY_EMBED_LEN
21762#define RARRAY_LENINT RARRAY_LENINT
21763#define RARRAY_TRANSIENT_P RARRAY_TRANSIENT_P
21764#define RARRAY_ASET RARRAY_ASET
21765#define RARRAY_PTR RARRAY_PTR
21766#pragma GCC visibility push(default)
21767#pragma GCC visibility pop
21768#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)
21769#define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0)
21770#define RARRAY_PTR_USE(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(0, ary, ptr_name, expr)
21771#define RARRAY_PTR_USE_TRANSIENT(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(1, ary, ptr_name, expr)
21772#define RARRAY_AREF(a,i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
21773#define RBIMPL_RBIGNUM_H
21774#define RBIGNUM_SIGN rb_big_sign
21775#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P
21776#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P
21777#pragma GCC visibility push(default)
21778#pragma GCC visibility pop
21779#define RBIMPL_RCLASS_H
21780#define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT
21781#define RCLASS(obj) RBIMPL_CAST((struct RClass *)(obj))
21782#define RMODULE RCLASS
21783#define RCLASS_SUPER rb_class_get_superclass
21784#pragma GCC visibility push(default)
21785#pragma GCC visibility pop
21786#define RBIMPL_RDATA_H
21787#define RUBY_UNTYPED_DATA_WARNING 1
21788#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
21789#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) RBIMPL_ATTR_DEPRECATED(("by TypedData"))
21790#define RBIMPL_MACRO_SELECT(x,y) x ## y
21791#define RUBY_MACRO_SELECT(x,y) RBIMPL_MACRO_SELECT(x, y)
21792#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj))
21793#define DATA_PTR(obj) RDATA(obj)->data
21794#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1)
21795#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0)
21796#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
21797#pragma GCC visibility push(default)
21798#pragma GCC visibility pop
21799#define Data_Wrap_Struct(klass,mark,free,sval) rb_data_object_wrap( (klass), (sval), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free))
21800#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))
21801#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; })
21802#define Data_Get_Struct(obj,type,sval) ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))
21803#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)))
21804#define rb_data_object_wrap_0 rb_data_object_wrap
21805#define rb_data_object_wrap_1 rb_data_object_wrap_warning
21806#define rb_data_object_wrap_2 rb_data_object_wrap_
21807#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING)
21808#define rb_data_object_get_0 rb_data_object_get
21809#define rb_data_object_get_1 rb_data_object_get_warning
21810#define rb_data_object_get_2 rb_data_object_get_
21811#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING)
21812#define rb_data_object_make_0 rb_data_object_make
21813#define rb_data_object_make_1 rb_data_object_make_warning
21814#define rb_data_object_make_2 rb_data_object_make_
21815#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING)
21816#define RBIMPL_RFILE_H
21817#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj))
21818#define RBIMPL_RHASH_H
21819#define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
21820#define RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
21821#define RHASH_IFNONE(h) rb_hash_ifnone(h)
21822#define RHASH_SIZE(h) rb_hash_size_num(h)
21823#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
21824#define RHASH_SET_IFNONE(h,ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
21825#pragma GCC visibility push(default)
21826#pragma GCC visibility pop
21827#define RBIMPL_ROBJECT_H
21828#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj))
21829#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
21830#define ROBJECT_EMBED ROBJECT_EMBED
21831#define ROBJECT_IV_CAPACITY ROBJECT_IV_CAPACITY
21832#define ROBJECT_IVPTR ROBJECT_IVPTR
21833#define RBIMPL_RREGEXP_H
21834#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj))
21835#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
21836#define RREGEXP_SRC RREGEXP_SRC
21837#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
21838#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
21839#define RREGEXP_SRC_END RREGEXP_SRC_END
21840#define RBIMPL_RSTRUCT_H
21841#define RSTRUCT_PTR(st) rb_struct_ptr(st)
21842#define RSTRUCT_LEN RSTRUCT_LEN
21843#define RSTRUCT_SET RSTRUCT_SET
21844#define RSTRUCT_GET RSTRUCT_GET
21845#pragma GCC visibility push(default)
21846#pragma GCC visibility pop
21847#define RBIMPL_RTYPEDDATA_H
21848#define HAVE_TYPE_RB_DATA_TYPE_T 1
21849#define HAVE_RB_DATA_TYPE_T_FUNCTION 1
21850#define HAVE_RB_DATA_TYPE_T_PARENT 1
21851#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
21852#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
21853#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
21854#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
21855#define Check_TypedStruct(v,t) rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
21856#define RTYPEDDATA_P RTYPEDDATA_P
21857#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
21858#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
21859#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE
21860#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
21861#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
21862#pragma GCC visibility push(default)
21863#pragma GCC visibility pop
21864#define TypedData_Wrap_Struct(klass,data_type,sval) rb_data_typed_object_wrap((klass),(sval),(data_type))
21865#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))
21866#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; })
21867#define TypedData_Get_Struct(obj,type,data_type,sval) ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
21868#define RBIMPL_CTYPE_H
21869#define _CTYPE_H_
21870#define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a')
21871#define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A')
21872#define _U 01
21873#define _L 02
21874#define _N 04
21875#define _S 010
21876#define _P 020
21877#define _C 040
21878#define _X 0100
21879#define _B 0200
21880#define __CTYPE_PTR (__locale_ctype_ptr ())
21881#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)])
21882#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L))
21883#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U)
21884#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L)
21885#define isdigit(__c) (__ctype_lookup(__c)&_N)
21886#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N))
21887#define isspace(__c) (__ctype_lookup(__c)&_S)
21888#define ispunct(__c) (__ctype_lookup(__c)&_P)
21889#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N))
21890#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B))
21891#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N))
21892#define iscntrl(__c) (__ctype_lookup(__c)&_C)
21893#define isblank(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup(__x)&_B) || (int) (__x) == '\t';})
21894#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)])
21895#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L))
21896#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U)
21897#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L)
21898#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N)
21899#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N))
21900#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S)
21901#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P)
21902#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N))
21903#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B))
21904#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N))
21905#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C)
21906#define isblank_l(__c,__l) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';})
21907#define isascii(__c) ((unsigned)(__c)<=0177)
21908#define toascii(__c) ((__c)&0177)
21909#define isascii_l(__c,__l) ((__l),(unsigned)(__c)<=0177)
21910#define toascii_l(__c,__l) ((__l),(__c)&0177)
21911#define toupper(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (toupper) (__x);})
21912#define tolower(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (tolower) (__x);})
21913#define ISASCII rb_isascii
21914#define ISPRINT rb_isprint
21915#define ISGRAPH rb_isgraph
21916#define ISSPACE rb_isspace
21917#define ISUPPER rb_isupper
21918#define ISLOWER rb_islower
21919#define ISALNUM rb_isalnum
21920#define ISALPHA rb_isalpha
21921#define ISDIGIT rb_isdigit
21922#define ISXDIGIT rb_isxdigit
21923#define ISBLANK rb_isblank
21924#define ISCNTRL rb_iscntrl
21925#define ISPUNCT rb_ispunct
21926#define TOUPPER rb_toupper
21927#define TOLOWER rb_tolower
21928#define STRCASECMP st_locale_insensitive_strcasecmp
21929#define STRNCASECMP st_locale_insensitive_strncasecmp
21930#define STRTOUL ruby_strtoul
21931#pragma GCC visibility push(default)
21932#pragma GCC visibility pop
21933#define RBIMPL_EVAL_H
21934#pragma GCC visibility push(default)
21935#define rb_funcall2 rb_funcallv
21936#define rb_funcall3 rb_funcallv_public
21937#pragma GCC visibility pop
21938#define RBIMPL_EVENT_H
21939#define RUBY_EVENT_NONE 0x0000
21940#define RUBY_EVENT_LINE 0x0001
21941#define RUBY_EVENT_CLASS 0x0002
21942#define RUBY_EVENT_END 0x0004
21943#define RUBY_EVENT_CALL 0x0008
21944#define RUBY_EVENT_RETURN 0x0010
21945#define RUBY_EVENT_C_CALL 0x0020
21946#define RUBY_EVENT_C_RETURN 0x0040
21947#define RUBY_EVENT_RAISE 0x0080
21948#define RUBY_EVENT_ALL 0x00ff
21949#define RUBY_EVENT_B_CALL 0x0100
21950#define RUBY_EVENT_B_RETURN 0x0200
21951#define RUBY_EVENT_THREAD_BEGIN 0x0400
21952#define RUBY_EVENT_THREAD_END 0x0800
21953#define RUBY_EVENT_FIBER_SWITCH 0x1000
21954#define RUBY_EVENT_SCRIPT_COMPILED 0x2000
21955#define RUBY_EVENT_TRACEPOINT_ALL 0xffff
21956#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
21957#define RUBY_INTERNAL_EVENT_SWITCH 0x040000
21958#define RUBY_EVENT_SWITCH 0x040000
21959#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
21960#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
21961#define RUBY_INTERNAL_EVENT_GC_START 0x400000
21962#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
21963#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
21964#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
21965#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
21966#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
21967#define RUBY_INTERNAL_EVENT_MASK 0xffff0000
21968#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
21969#pragma GCC visibility push(default)
21970#pragma GCC visibility pop
21971#define RBIMPL_GC_H
21972#pragma GCC visibility push(default)
21973#pragma GCC visibility pop
21974#define RBIMPL_GLOB_H
21975#pragma GCC visibility push(default)
21976#pragma GCC visibility pop
21977#define RBIMPL_GLOBALS_H
21978#pragma GCC visibility push(default)
21979#define RUBY_INTEGER_UNIFICATION 1
21980#define CLASS_OF rb_class_of
21981#pragma GCC visibility pop
21982#define RBIMPL_INTERPRETER_H
21983#pragma GCC visibility push(default)
21984#define RUBY_INIT_STACK VALUE variable_in_this_stack_frame; ruby_init_stack(&variable_in_this_stack_frame);
21985#pragma GCC visibility pop
21986#define RBIMPL_ITERATOR_H
21987#pragma GCC visibility push(default)
21988#define RB_BLOCK_CALL_FUNC_STRICT 1
21989#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
21990#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg,callback_arg) VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
21991#pragma GCC visibility pop
21992#define RBIMPL_MEMORY_H
21993#define DSIZE_T uint128_t
21994#define RUBY_ALLOCV_LIMIT 1024
21995#define RB_GC_GUARD(v) (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(v); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }))
21996#define RB_ALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type)))
21997#define RB_ALLOC(type) RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type)))
21998#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type)))
21999#define RB_ZALLOC(type) (RB_ZALLOC_N(type, 1))
22000#define RB_REALLOC_N(var,type,n) ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type))))
22001#define ALLOCA_N(type,n) RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))
22002#define RB_ALLOCV(v,n) ((n) < RUBY_ALLOCV_LIMIT ? ((v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n)))
22003#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))))
22004#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))
22005#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n)))
22006#define MEMCPY(p1,p2,type,n) ruby_nonempty_memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22007#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22008#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22009#define ALLOC_N RB_ALLOC_N
22010#define ALLOC RB_ALLOC
22011#define ZALLOC_N RB_ZALLOC_N
22012#define ZALLOC RB_ZALLOC
22013#define REALLOC_N RB_REALLOC_N
22014#define ALLOCV RB_ALLOCV
22015#define ALLOCV_N RB_ALLOCV_N
22016#define ALLOCV_END RB_ALLOCV_END
22017#pragma GCC visibility push(default)
22018#pragma GCC visibility pop
22019#pragma GCC visibility push(default)
22020#pragma GCC visibility pop
22021#define RBIMPL_MODULE_H
22022#pragma GCC visibility push(default)
22023#pragma GCC visibility pop
22024#define RBIMPL_NEWOBJ_H
22025#define RB_NEWOBJ(obj,type) type *(obj) = RBIMPL_CAST((type *)rb_newobj())
22026#define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = RBIMPL_CAST((type *)rb_newobj_of(klass, flags))
22027#define NEWOBJ RB_NEWOBJ
22028#define NEWOBJ_OF RB_NEWOBJ_OF
22029#define OBJSETUP rb_obj_setup
22030#define CLONESETUP rb_clone_setup
22031#define DUPSETUP rb_dup_setup
22032#pragma GCC visibility push(default)
22033#pragma GCC visibility pop
22034#define RBIMPL_SCAN_ARGS_H
22035#define RBIMPL_ATTR_DIAGNOSE_IF_H
22036#define RBIMPL_ATTR_DIAGNOSE_IF(_,__,___)
22037#define RBIMPL_INTERN_ARRAY_H
22038#pragma GCC visibility push(default)
22039#define rb_ary_tmp_new rb_ary_hidden_new
22040#define rb_ary_new2 rb_ary_new_capa
22041#define rb_ary_new3 rb_ary_new_from_args
22042#define rb_ary_new4 rb_ary_new_from_values
22043#pragma GCC visibility pop
22044#define RBIMPL_INTERN_ERROR_H
22045#define UNLIMITED_ARGUMENTS (-1)
22046#define rb_exc_new2 rb_exc_new_cstr
22047#define rb_exc_new3 rb_exc_new_str
22048#define rb_check_arity rb_check_arity
22049#pragma GCC visibility push(default)
22050#pragma GCC visibility pop
22051#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)
22052#define rb_check_frozen rb_check_frozen_inline
22053#define RBIMPL_INTERN_HASH_H
22054#pragma GCC visibility push(default)
22055#define st_foreach_safe rb_st_foreach_safe
22056#pragma GCC visibility pop
22057#define RBIMPL_INTERN_PROC_H
22058#pragma GCC visibility push(default)
22059#pragma GCC visibility pop
22060#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0
22061#define RB_SCAN_ARGS_KEYWORDS 1
22062#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3
22063#define RB_NO_KEYWORDS 0
22064#define RB_PASS_KEYWORDS 1
22065#define RB_PASS_CALLED_KEYWORDS rb_keyword_given_p()
22066#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
22067#pragma GCC visibility push(default)
22068#pragma GCC visibility pop
22069#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10)
22070#define rb_scan_args_count_end(fmt,ofs,vari) ((fmt)[ofs] ? -1 : (vari))
22071#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))
22072#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))
22073#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')))
22074#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))
22075#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'))
22076#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'))
22077#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)
22078#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)
22079#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)
22080#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)
22081#define rb_scan_args_next_param() vars[vari++]
22082#undef rb_scan_args_next_param
22083#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__)))
22084#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__)))
22085#define RBIMPL_SYMBOL_H
22086#define RB_ID2SYM rb_id2sym
22087#define RB_SYM2ID rb_sym2id
22088#define ID2SYM RB_ID2SYM
22089#define SYM2ID RB_SYM2ID
22090#define CONST_ID_CACHE RUBY_CONST_ID_CACHE
22091#define CONST_ID RUBY_CONST_ID
22092#define rb_intern_const rb_intern_const
22093#pragma GCC visibility push(default)
22094#pragma GCC visibility pop
22095#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; }
22096#define RUBY_CONST_ID(var,str) do { static ID rbimpl_id; (var) = rbimpl_intern_const(&rbimpl_id, (str)); } while (0)
22097#define rb_intern(str) (RBIMPL_CONSTANT_P(str) ? __extension__ ({ static ID rbimpl_id; rbimpl_intern_const(&rbimpl_id, (str)); }) : (rb_intern)(str))
22098#define RBIMPL_VARIABLE_H
22099#pragma GCC visibility push(default)
22100#pragma GCC visibility pop
22101#define RUBY_BACKWARD2_INTTYPES_H
22102#define PRI_INT_PREFIX ""
22103#define PRI_LONG_PREFIX "l"
22104#define PRI_SHORT_PREFIX "h"
22105#define PRI_64_PREFIX PRI_LONG_PREFIX
22106#define RUBY_PRI_VALUE_MARK "\v"
22107#define PRIdVALUE PRI_VALUE_PREFIX"d"
22108#define PRIoVALUE PRI_VALUE_PREFIX"o"
22109#define PRIuVALUE PRI_VALUE_PREFIX"u"
22110#define PRIxVALUE PRI_VALUE_PREFIX"x"
22111#define PRIXVALUE PRI_VALUE_PREFIX"X"
22112#define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
22113#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
22114#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
22115#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
22116#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
22117#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
22118#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
22119#define PRIdSIZE PRI_SIZE_PREFIX"d"
22120#define PRIiSIZE PRI_SIZE_PREFIX"i"
22121#define PRIoSIZE PRI_SIZE_PREFIX"o"
22122#define PRIuSIZE PRI_SIZE_PREFIX"u"
22123#define PRIxSIZE PRI_SIZE_PREFIX"x"
22124#define PRIXSIZE PRI_SIZE_PREFIX"X"
22125#pragma GCC visibility push(default)
22126#define USE_SYMBOL_AS_METHOD_NAME 1
22127#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
22128#define FilePathStringValue(v) ((v) = rb_get_path(v))
22129#define rb_varargs_argc_check_runtime(argc,vargc) (((argc) <= (vargc)) ? (argc) : (rb_fatal("argc(%d) exceeds actual arguments(%d)", argc, vargc), 0))
22130#define rb_varargs_argc_valid_p(argc,vargc) ((argc) == 0 ? (vargc) <= 1 : (argc) == (vargc))
22131#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))
22132#define RUBY_INTERN_H 1
22133#define RBIMPL_INTERN_BIGNUM_H
22134#pragma GCC visibility push(default)
22135#define rb_big2int(x) rb_big2long(x)
22136#define rb_big2uint(x) rb_big2ulong(x)
22137#define INTEGER_PACK_MSWORD_FIRST 0x01
22138#define INTEGER_PACK_LSWORD_FIRST 0x02
22139#define INTEGER_PACK_MSBYTE_FIRST 0x10
22140#define INTEGER_PACK_LSBYTE_FIRST 0x20
22141#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40
22142#define INTEGER_PACK_2COMP 0x80
22143#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400
22144#define INTEGER_PACK_FORCE_BIGNUM 0x100
22145#define INTEGER_PACK_NEGATIVE 0x200
22146#define INTEGER_PACK_LITTLE_ENDIAN (INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_LSBYTE_FIRST)
22147#define INTEGER_PACK_BIG_ENDIAN (INTEGER_PACK_MSWORD_FIRST | INTEGER_PACK_MSBYTE_FIRST)
22148#pragma GCC visibility pop
22149#define RBIMPL_INTERN_COMPAR_H
22150#pragma GCC visibility push(default)
22151#pragma GCC visibility pop
22152#define RBIMPL_INTERN_COMPLEX_H
22153#pragma GCC visibility push(default)
22154#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0))
22155#define rb_complex_raw2(x,y) rb_complex_raw((x), (y))
22156#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0))
22157#define rb_complex_new2(x,y) rb_complex_new((x), (y))
22158#define rb_complex_add rb_complex_plus
22159#define rb_complex_sub rb_complex_minus
22160#define rb_complex_nagate rb_complex_uminus
22161#define rb_Complex1(x) rb_Complex((x), INT2FIX(0))
22162#define rb_Complex2(x,y) rb_Complex((x), (y))
22163#pragma GCC visibility pop
22164#define RBIMPL_INTERN_CONT_H
22165#pragma GCC visibility push(default)
22166#pragma GCC visibility pop
22167#define RBIMPL_INTERN_DIR_H
22168#pragma GCC visibility push(default)
22169#pragma GCC visibility pop
22170#define RBIMPL_INTERN_ENUM_H
22171#pragma GCC visibility push(default)
22172#pragma GCC visibility pop
22173#define RBIMPL_INTERN_ENUMERATOR_H
22174#define RBIMPL_INTERN_EVAL_H
22175#pragma GCC visibility push(default)
22176#pragma GCC visibility pop
22177#pragma GCC visibility push(default)
22178#pragma GCC visibility pop
22179#define SIZED_ENUMERATOR(obj,argc,argv,size_fn) rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn))
22180#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))
22181#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)
22182#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)
22183#define RETURN_ENUMERATOR(obj,argc,argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)
22184#define RETURN_ENUMERATOR_KW(obj,argc,argv,kw_splat) RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat)
22185#define RBIMPL_INTERN_FILE_H
22186#pragma GCC visibility push(default)
22187#pragma GCC visibility pop
22188#define RBIMPL_INTERN_GC_H
22189#pragma GCC visibility push(default)
22190#pragma GCC visibility pop
22191#define RBIMPL_INTERN_IO_H
22192#pragma GCC visibility push(default)
22193#define rb_defout rb_stdout
22194#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)
22195#pragma GCC visibility pop
22196#define RBIMPL_INTERN_LOAD_H
22197#pragma GCC visibility push(default)
22198#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f)
22199#define HAVE_RB_EXT_RACTOR_SAFE 1
22200#pragma GCC visibility pop
22201#define RBIMPL_INTERN_MARSHAL_H
22202#pragma GCC visibility push(default)
22203#pragma GCC visibility pop
22204#define RBIMPL_INTERN_NUMERIC_H
22205#define RB_NUM_COERCE_FUNCS_NEED_OPID 1
22206#pragma GCC visibility push(default)
22207#pragma GCC visibility pop
22208#define RBIMPL_INTERN_OBJECT_H
22209#pragma GCC visibility push(default)
22210#define RB_OBJ_INIT_COPY(obj,orig) ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
22211#define OBJ_INIT_COPY(obj,orig) RB_OBJ_INIT_COPY(obj, orig)
22212#pragma GCC visibility pop
22213#define RBIMPL_INTERN_PARSE_H
22214#pragma GCC visibility push(default)
22215#pragma GCC visibility pop
22216#define RBIMPL_INTERN_PROCESS_H
22217#pragma GCC visibility push(default)
22218#pragma GCC visibility pop
22219#define RBIMPL_INTERN_RANDOM_H
22220#pragma GCC visibility push(default)
22221#pragma GCC visibility pop
22222#define RBIMPL_INTERN_RANGE_H
22223#pragma GCC visibility push(default)
22224#pragma GCC visibility pop
22225#define RBIMPL_INTERN_RATIONAL_H
22226#pragma GCC visibility push(default)
22227#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1))
22228#define rb_rational_raw2(x,y) rb_rational_raw((x), (y))
22229#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1))
22230#define rb_rational_new2(x,y) rb_rational_new((x), (y))
22231#define rb_Rational1(x) rb_Rational((x), INT2FIX(1))
22232#define rb_Rational2(x,y) rb_Rational((x), (y))
22233#pragma GCC visibility pop
22234#define RBIMPL_INTERN_RE_H
22235#pragma GCC visibility push(default)
22236#define rb_memcmp memcmp
22237#define HAVE_RB_REG_NEW_STR 1
22238#pragma GCC visibility pop
22239#define RBIMPL_INTERN_RUBY_H
22240#pragma GCC visibility push(default)
22241#define rb_argv rb_get_argv()
22242#pragma GCC visibility pop
22243#define RBIMPL_INTERN_SELECT_H
22244#define RBIMPL_INTERN_SELECT_LARGESIZE_H
22245#define rb_fd_ptr rb_fd_ptr
22246#define rb_fd_max rb_fd_max
22247#pragma GCC visibility push(default)
22248#pragma GCC visibility pop
22249#pragma GCC visibility push(default)
22250#pragma GCC visibility pop
22251#define RBIMPL_INTERN_SIGNAL_H
22252#pragma GCC visibility push(default)
22253#define posix_signal ruby_posix_signal
22254#pragma GCC visibility pop
22255#define RBIMPL_INTERN_SPRINTF_H
22256#pragma GCC visibility push(default)
22257#pragma GCC visibility pop
22258#define RBIMPL_INTERN_STRING_H
22259#pragma GCC visibility push(default)
22260#define rb_str_dup_frozen rb_str_new_frozen
22261#define rb_hash_uint32(h,i) st_hash_uint32((h), (i))
22262#define rb_hash_uint(h,i) st_hash_uint((h), (i))
22263#define rb_hash_end(h) st_hash_end(h)
22264#define rb_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_str_new_static : rb_str_new) ((str), (len)))
22265#define rb_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_new_cstr : rb_str_new_cstr) (str))
22266#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)))
22267#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)))
22268#define rb_usascii_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_usascii_str_new_cstr : rb_usascii_str_new_cstr) (str))
22269#define rb_utf8_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_utf8_str_new_cstr : rb_utf8_str_new_cstr) (str))
22270#define rb_external_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_external_str_new_cstr : rb_external_str_new_cstr) (str))
22271#define rb_locale_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_locale_str_new_cstr : rb_locale_str_new_cstr) (str))
22272#define rb_str_buf_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_buf_new_cstr : rb_str_buf_new_cstr) (str))
22273#define rb_str_cat_cstr(buf,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((buf), (str)))
22274#define rb_exc_new_cstr(exc,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_exc_new_cstr : rb_exc_new_cstr) ((exc), (str)))
22275#define rb_str_new2 rb_str_new_cstr
22276#define rb_str_new3 rb_str_new_shared
22277#define rb_str_new4 rb_str_new_frozen
22278#define rb_str_new5 rb_str_new_with_class
22279#define rb_str_buf_new2 rb_str_buf_new_cstr
22280#define rb_usascii_str_new2 rb_usascii_str_new_cstr
22281#define rb_str_buf_cat rb_str_cat
22282#define rb_str_buf_cat2 rb_str_cat_cstr
22283#define rb_str_cat2 rb_str_cat_cstr
22284#define rb_strlen_lit(str) (sizeof(str "") - 1)
22285#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str))
22286#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str))
22287#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str))
22288#define rb_enc_str_new_lit(str,enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc))
22289#define rb_str_new_literal(str) rb_str_new_lit(str)
22290#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str)
22291#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str)
22292#define rb_enc_str_new_literal(str,enc) rb_enc_str_new_lit(str, enc)
22293#pragma GCC visibility pop
22294#define RBIMPL_INTERN_STRUCT_H
22295#pragma GCC visibility push(default)
22296#pragma GCC visibility pop
22297#define RBIMPL_INTERN_THREAD_H
22298#pragma GCC visibility push(default)
22299#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1)
22300#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1)
22301#pragma GCC visibility pop
22302#define RBIMPL_INTERN_TIME_H
22303#pragma GCC visibility push(default)
22304#pragma GCC visibility pop
22305#define RBIMPL_INTERN_VARIABLE_H
22306#pragma GCC visibility push(default)
22307#pragma GCC visibility pop
22308#define RUBY_VM 1
22309#define HAVE_NATIVETHREAD
22310#define InitVM(ext) {void InitVM_ ##ext(void);InitVM_ ##ext();}
22311#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); })
22312#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); })
22313#define RUBY_SUBST_H 1
22314#undef snprintf
22315#undef vsnprintf
22316#define snprintf ruby_snprintf
22317#define vsnprintf ruby_vsnprintf
22318#pragma GCC visibility pop
22319#define RUBY_VM_CORE_H
22320#define N_OR_RUBY_DEBUG(n) (((n) > 0) ? (n) : RUBY_DEBUG)
22321#define VM_CHECK_MODE N_OR_RUBY_DEBUG(0)
22322#define VMDEBUG 0
22323#define RUBY_TOPLEVEL_ASSERT_H
22324#undef assert
22325#define assert RUBY_ASSERT_NDEBUG
22326#define VM_ASSERT(expr) ((void)0)
22327#define VM_UNREACHABLE(func) UNREACHABLE
22328#define RUBY_DEBUG_THREAD_SCHEDULE()
22329#define RUBY_ASSERT_MUTEX_OWNED(mutex) VM_ASSERT(rb_mutex_owned_p(mutex))
22330#define RUBY_ASSERT_CRITICAL_SECTION_ENTER()
22331#define RUBY_ASSERT_CRITICAL_SECTION_LEAVE()
22332#define _SETJMP_H_
22333#define _JBTYPE long
22334#define _JBLEN 32
22335#define _SAVEMASK _JBLEN
22336#define _SIGMASK (_JBLEN+1)
22337#define _CYGWIN_WORKING_SIGSETJMP
22338#define __SIGMASK_FUNC pthread_sigmask
22339#define sigsetjmp(env,savemask) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((*_sjbuf)[_SAVEMASK] = savemask, __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)), setjmp (*_sjbuf)); })
22340#define siglongjmp(env,val) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((((*_sjbuf)[_SAVEMASK]) ? __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0) : 0), longjmp (*_sjbuf, val)); })
22341#define CCAN_LIST_H
22342#undef assert
22343#define assert(__e) ((void)0)
22344#define static_assert _Static_assert
22345#define CCAN_STR_H
22346#define stringify(expr) ccan_stringify_1(expr)
22347#define ccan_stringify(expr) ccan_stringify_1(expr)
22348#define ccan_stringify_1(expr) #expr
22349#define CCAN_CONTAINER_OF_H
22350#define CCAN_CHECK_TYPE_H
22351#define ccan_check_type(expr,type) ((typeof(expr) *)0 != (type *)0)
22352#define ccan_check_types_match(expr1,expr2) ((typeof(expr1) *)0 != (typeof(expr2) *)0)
22353#define ccan_container_of(member_ptr,containing_type,member) ((containing_type *) ((char *)(member_ptr) - ccan_container_off(containing_type, member)) + ccan_check_types_match(*(member_ptr), ((containing_type *)0)->member))
22354#define ccan_container_of_or_null(member_ptr,containing_type,member) ((containing_type *) ccan_container_of_or_null_(member_ptr, ccan_container_off(containing_type, member)) + ccan_check_types_match(*(member_ptr), ((containing_type *)0)->member))
22355#define ccan_container_off(containing_type,member) offsetof(containing_type, member)
22356#define ccan_container_of_var(member_ptr,container_var,member) ccan_container_of(member_ptr, typeof(*container_var), member)
22357#define ccan_container_off_var(var,member) ccan_container_off(typeof(*var), member)
22358#define CCAN_LIST_LOC __FILE__ ":" ccan_stringify(__LINE__)
22359#define ccan_list_debug(h,loc) ((void)loc, h)
22360#define ccan_list_debug_node(n,loc) ((void)loc, n)
22361#define CCAN_LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
22362#define CCAN_LIST_HEAD(name) struct ccan_list_head name = CCAN_LIST_HEAD_INIT(name)
22363#define ccan_list_add_after(h,p,n) ccan_list_add_after_(h, p, n, CCAN_LIST_LOC)
22364#define ccan_list_add(h,n) ccan_list_add_(h, n, CCAN_LIST_LOC)
22365#define ccan_list_add_before(h,p,n) ccan_list_add_before_(h, p, n, CCAN_LIST_LOC)
22366#define ccan_list_add_tail(h,n) ccan_list_add_tail_(h, n, CCAN_LIST_LOC)
22367#define ccan_list_empty(h) ccan_list_empty_(h, CCAN_LIST_LOC)
22368#define ccan_list_empty_nodebug(h) ccan_list_empty(h)
22369#define ccan_list_del(n) ccan_list_del_(n, CCAN_LIST_LOC)
22370#define ccan_list_del_init(n) ccan_list_del_init_(n, CCAN_LIST_LOC)
22371#define ccan_list_swap(o,n) ccan_list_swap_(o, n, CCAN_LIST_LOC)
22372#define ccan_list_entry(n,type,member) ccan_container_of(n, type, member)
22373#define ccan_list_top(h,type,member) ((type *)ccan_list_top_((h), ccan_list_off_(type, member)))
22374#define ccan_list_pop(h,type,member) ((type *)ccan_list_pop_((h), ccan_list_off_(type, member)))
22375#define ccan_list_tail(h,type,member) ((type *)ccan_list_tail_((h), ccan_list_off_(type, member)))
22376#define ccan_list_for_each(h,i,member) ccan_list_for_each_off(h, i, ccan_list_off_var_(i, member))
22377#define ccan_list_for_each_rev(h,i,member) ccan_list_for_each_rev_off(h, i, ccan_list_off_var_(i, member))
22378#define ccan_list_for_each_rev_safe(h,i,nxt,member) ccan_list_for_each_rev_safe_off(h, i, nxt, ccan_list_off_var_(i, member))
22379#define ccan_list_for_each_safe(h,i,nxt,member) ccan_list_for_each_safe_off(h, i, nxt, ccan_list_off_var_(i, member))
22380#define ccan_list_next(h,i,member) ((ccan_list_typeof(i))ccan_list_entry_or_null(ccan_list_debug(h, __FILE__ ":" ccan_stringify(__LINE__)), (i)->member.next, ccan_list_off_var_((i), member)))
22381#define ccan_list_prev(h,i,member) ((ccan_list_typeof(i))ccan_list_entry_or_null(ccan_list_debug(h, __FILE__ ":" ccan_stringify(__LINE__)), (i)->member.prev, ccan_list_off_var_((i), member)))
22382#define ccan_list_append_list(t,f) ccan_list_append_list_(t, f, __FILE__ ":" ccan_stringify(__LINE__))
22383#define ccan_list_prepend_list(t,f) ccan_list_prepend_list_(t, f, CCAN_LIST_LOC)
22384#define ccan_list_for_each_off_dir_(h,i,off,dir) for (i = ccan_list_node_to_off_(ccan_list_debug(h, CCAN_LIST_LOC)->n.dir, (off)); ccan_list_node_from_off_((void *)i, (off)) != &(h)->n; i = ccan_list_node_to_off_(ccan_list_node_from_off_((void *)i, (off))->dir, (off)))
22385#define ccan_list_for_each_safe_off_dir_(h,i,nxt,off,dir) for (i = ccan_list_node_to_off_(ccan_list_debug(h, CCAN_LIST_LOC)->n.dir, (off)), nxt = ccan_list_node_to_off_(ccan_list_node_from_off_(i, (off))->dir, (off)); ccan_list_node_from_off_(i, (off)) != &(h)->n; i = nxt, nxt = ccan_list_node_to_off_(ccan_list_node_from_off_(i, (off))->dir, (off)))
22386#define ccan_list_for_each_off(h,i,off) ccan_list_for_each_off_dir_((h),(i),(off),next)
22387#define ccan_list_for_each_rev_off(h,i,off) ccan_list_for_each_off_dir_((h),(i),(off),prev)
22388#define ccan_list_for_each_safe_off(h,i,nxt,off) ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
22389#define ccan_list_for_each_rev_safe_off(h,i,nxt,off) ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
22390#define ccan_list_entry_off(n,type,off) ((type *)ccan_list_node_from_off_((n), (off)))
22391#define ccan_list_head_off(h,type,off) ((type *)ccan_list_head_off((h), (off)))
22392#define ccan_list_tail_off(h,type,off) ((type *)ccan_list_tail_((h), (off)))
22393#define ccan_list_add_off(h,n,off) ccan_list_add((h), ccan_list_node_from_off_((n), (off)))
22394#define ccan_list_del_off(n,off) ccan_list_del(ccan_list_node_from_off_((n), (off)))
22395#define ccan_list_del_from_off(h,n,off) ccan_list_del_from(h, ccan_list_node_from_off_((n), (off)))
22396#define ccan_list_off_(type,member) (ccan_container_off(type, member) + ccan_check_type(((type *)0)->member, struct ccan_list_node))
22397#define ccan_list_off_var_(var,member) (ccan_container_off_var(var, member) + ccan_check_type(var->member, struct ccan_list_node))
22398#define ccan_list_typeof(var) typeof(var)
22399#define RUBY_ID_H
22400#define ID_STATIC_SYM RUBY_ID_STATIC_SYM
22401#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT
22402#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK
22403#define ID_LOCAL RUBY_ID_LOCAL
22404#define ID_INSTANCE RUBY_ID_INSTANCE
22405#define ID_GLOBAL RUBY_ID_GLOBAL
22406#define ID_ATTRSET RUBY_ID_ATTRSET
22407#define ID_CONST RUBY_ID_CONST
22408#define ID_CLASS RUBY_ID_CLASS
22409#define ID_JUNK RUBY_ID_JUNK
22410#define ID_INTERNAL RUBY_ID_INTERNAL
22411#define symIFUNC ID2SYM(idIFUNC)
22412#define symCFUNC ID2SYM(idCFUNC)
22413#define RUBY_TOKEN_DOT2 128
22414#define RUBY_TOKEN_DOT3 129
22415#define RUBY_TOKEN_BDOT2 130
22416#define RUBY_TOKEN_BDOT3 131
22417#define RUBY_TOKEN_UPLUS 132
22418#define RUBY_TOKEN_UMINUS 133
22419#define RUBY_TOKEN_POW 134
22420#define RUBY_TOKEN_CMP 135
22421#define RUBY_TOKEN_LSHFT 136
22422#define RUBY_TOKEN_RSHFT 137
22423#define RUBY_TOKEN_LEQ 138
22424#define RUBY_TOKEN_GEQ 139
22425#define RUBY_TOKEN_EQ 140
22426#define RUBY_TOKEN_EQQ 141
22427#define RUBY_TOKEN_NEQ 142
22428#define RUBY_TOKEN_MATCH 143
22429#define RUBY_TOKEN_NMATCH 144
22430#define RUBY_TOKEN_AREF 145
22431#define RUBY_TOKEN_ASET 146
22432#define RUBY_TOKEN_COLON2 147
22433#define RUBY_TOKEN_ANDOP 148
22434#define RUBY_TOKEN_OROP 149
22435#define RUBY_TOKEN_ANDDOT 150
22436#define RUBY_TOKEN(t) RUBY_TOKEN_ ##t
22437#define RUBY_TOKEN2ID_TYPE(tok,type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM)
22438#define TOKEN2LOCALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_LOCAL)
22439#define TOKEN2INSTANCEID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_INSTANCE)
22440#define TOKEN2GLOBALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_GLOBAL)
22441#define TOKEN2CONSTID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CONST)
22442#define TOKEN2CLASSID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CLASS)
22443#define TOKEN2ATTRSETID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_ATTRSET)
22444#define DEFINE_LOCALID_FROM_TOKEN(n) id ##n = TOKEN2LOCALID(t ##n)
22445#define DEFINE_INSTANCEID_FROM_TOKEN(n) id ##n = TOKEN2INSTANCEID(t ##n)
22446#define DEFINE_GLOBALID_FROM_TOKEN(n) id ##n = TOKEN2GLOBALID(t ##n)
22447#define DEFINE_CONSTID_FROM_TOKEN(n) id ##n = TOKEN2CONSTID(t ##n)
22448#define DEFINE_CLASSID_FROM_TOKEN(n) id ##n = TOKEN2CLASSID(t ##n)
22449#define DEFINE_ATTRSETID_FROM_TOKEN(n) id ##n = TOKEN2ATTRSETID(t ##n)
22450#define RUBY_INTERNAL_H 1
22451#define LIKELY(x) RB_LIKELY(x)
22452#define UNLIKELY(x) RB_UNLIKELY(x)
22453#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
22454#define roomof(x,y) (((x) + (y) - 1) / (y))
22455#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
22456#define ACCESS_ONCE(type,x) (*((volatile type *)&(x)))
22457#define UNDEF_P RB_UNDEF_P
22458#define NIL_OR_UNDEF_P RB_NIL_OR_UNDEF_P
22459#undef RARRAY_AREF
22460#undef RClass
22461#undef RCLASS_SUPER
22462#undef NEWOBJ_OF
22463#undef RB_NEWOBJ_OF
22464#undef RB_OBJ_WRITE
22465#undef RHASH_IFNONE
22466#undef RHASH_SIZE
22467#undef RHASH_TBL
22468#undef RHASH_EMPTY_P
22469#undef RSTRUCT_LEN
22470#undef RSTRUCT_PTR
22471#undef RSTRUCT_SET
22472#undef RSTRUCT_GET
22473#define rb_ary_new_from_args(...) rb_nonexistent_symbol(__VA_ARGS__)
22474#define rb_io_fptr_finalize(...) rb_nonexistent_symbol(__VA_ARGS__)
22475#define rb_fstring_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22476#define rb_sym_intern_ascii_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22477#define rb_funcallv(...) rb_nonexistent_symbol(__VA_ARGS__)
22478#define rb_method_basic_definition_p(...) rb_nonexistent_symbol(__VA_ARGS__)
22479#pragma GCC visibility push(default)
22480#pragma GCC visibility pop
22481#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
22482#define rp_m(msg,obj) do { fputs((msg), stderr); rb_obj_info_dump((VALUE)(obj)); } while (0)
22483#define bp() ruby_debug_breakpoint()
22484#define RBOOL(v) ((v) ? Qtrue : Qfalse)
22485#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
22486#undef memcpy
22487#define memcpy ruby_nonempty_memcpy
22488#define INTERNAL_ARRAY_H
22489#define INTERNAL_STATIC_ASSERT_H
22490#define STATIC_ASSERT RBIMPL_STATIC_ASSERT
22491#define ARRAY_DEBUG (0+RUBY_DEBUG)
22492#define RARRAY_SHARED_FLAG ELTS_SHARED
22493#define RARRAY_SHARED_ROOT_FLAG FL_USER12
22494#define RARRAY_PTR_IN_USE_FLAG FL_USER14
22495#pragma GCC visibility push(default)
22496#pragma GCC visibility pop
22497#undef rb_ary_new_from_args
22498#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); })
22499#undef RARRAY_AREF
22500#define INTERNAL_BOP_H
22501#pragma GCC visibility push(default)
22502#pragma GCC visibility pop
22503#define INTEGER_REDEFINED_OP_FLAG (1 << 0)
22504#define FLOAT_REDEFINED_OP_FLAG (1 << 1)
22505#define STRING_REDEFINED_OP_FLAG (1 << 2)
22506#define ARRAY_REDEFINED_OP_FLAG (1 << 3)
22507#define HASH_REDEFINED_OP_FLAG (1 << 4)
22508#define SYMBOL_REDEFINED_OP_FLAG (1 << 6)
22509#define TIME_REDEFINED_OP_FLAG (1 << 7)
22510#define REGEXP_REDEFINED_OP_FLAG (1 << 8)
22511#define NIL_REDEFINED_OP_FLAG (1 << 9)
22512#define TRUE_REDEFINED_OP_FLAG (1 << 10)
22513#define FALSE_REDEFINED_OP_FLAG (1 << 11)
22514#define PROC_REDEFINED_OP_FLAG (1 << 12)
22515#define BASIC_OP_UNREDEFINED_P(op,klass) (LIKELY((ruby_vm_redefined_flag[(op)]&(klass)) == 0))
22516#define INTERNAL_SERIAL_H
22517#define SERIALT2NUM ULL2NUM
22518#define PRI_SERIALT_PREFIX PRI_LL_PREFIX
22519#define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
22520#define INTERNAL_VM_H
22521#undef rb_funcallv
22522#undef rb_method_basic_definition_p
22523#pragma GCC visibility push(default)
22524#pragma GCC visibility pop
22525#pragma GCC visibility push(default)
22526#pragma GCC visibility pop
22527#pragma GCC visibility push(default)
22528#pragma GCC visibility pop
22529#pragma GCC visibility push(default)
22530#pragma GCC visibility pop
22531#define RUBY_DTRACE_CREATE_HOOK(name,arg) RUBY_DTRACE_HOOK(name ##_CREATE, arg)
22532#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)
22533#define RUBY_METHOD_H 1
22534#define INTERNAL_IMEMO_H
22535#define INTERNAL_GC_H
22536#define INTERNAL_COMPILERS_H
22537#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
22538#define GCC_VERSION_SINCE(x,y,z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
22539#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))))))
22540#define MSC_VERSION_SINCE(_) RBIMPL_COMPILER_SINCE(MSVC, (_) / 100, (_) % 100, 0)
22541#define MSC_VERSION_BEFORE(_) RBIMPL_COMPILER_BEFORE(MSVC, (_) / 100, (_) % 100, 0)
22542#define __has_declspec_attribute(...) RBIMPL_HAS_DECLSPEC_ATTRIBUTE(__VA_ARGS__)
22543#define __has_warning(...) RBIMPL_HAS_WARNING(__VA_ARGS__)
22544#define RB_OBJ_BUILTIN_TYPE(obj) rb_obj_builtin_type(obj)
22545#define OBJ_BUILTIN_TYPE(obj) RB_OBJ_BUILTIN_TYPE(obj)
22546#define rb_obj_builtin_type(obj) __extension__({ VALUE arg_obj = (obj); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })
22547#define FLEX_ARY_LEN
22548#define BITFIELD(type,name,size) type name : size
22549#define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
22550#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))
22551#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))
22552#define RB_NEWOBJ_OF(var,T,c,f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
22553#define RB_EC_NEWOBJ_OF(ec,var,T,c,f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
22554#define NEWOBJ_OF(var,T,c,f) RB_NEWOBJ_OF((var), T, (c), (f))
22555#define RVARGC_NEWOBJ_OF(var,T,c,f,s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
22556#define RB_OBJ_GC_FLAGS_MAX 6
22557#define INTERNAL_WARNINGS_H
22558#define COMPILER_WARNING_PUSH RBIMPL_WARNING_PUSH()
22559#define COMPILER_WARNING_POP RBIMPL_WARNING_POP()
22560#define COMPILER_WARNING_ERROR(flag) RBIMPL_WARNING_ERROR(flag)
22561#define COMPILER_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag)
22562#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; })
22563#define UNALIGNED_MEMBER_PTR(ptr,mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
22564#define RB_OBJ_WRITE(a,slot,b) rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), (VALUE)(b), __FILE__, __LINE__)
22565#define SIZE_POOL_COUNT 5
22566#define RCLASS_EXT_EMBEDDED (SIZE_POOL_COUNT > 1)
22567#pragma GCC visibility push(default)
22568#pragma GCC visibility pop
22569#pragma GCC visibility push(default)
22570#pragma GCC visibility pop
22571#define SIZED_REALLOC_N(x,y,z,w) REALLOC_N(x, y, z)
22572#define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
22573#define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
22574#define ruby_sized_xfree ruby_sized_xfree_inlined
22575#define IMEMO_DEBUG 0
22576#define IMEMO_MASK 0x0f
22577#define IMEMO_FL_USHIFT (FL_USHIFT + 4)
22578#define IMEMO_FL_USER0 FL_USER4
22579#define IMEMO_FL_USER1 FL_USER5
22580#define IMEMO_FL_USER2 FL_USER6
22581#define IMEMO_FL_USER3 FL_USER7
22582#define IMEMO_FL_USER4 FL_USER8
22583#define IMEMO_FL_USER5 FL_USER9
22584#define THROW_DATA_CONSUMED IMEMO_FL_USER0
22585#define THROW_DATA_P(err) imemo_throw_data_p((VALUE)err)
22586#define MEMO_CAST(m) ((struct MEMO *)(m))
22587#define MEMO_NEW(a,b,c) ((struct MEMO *)rb_imemo_new(imemo_memo, (VALUE)(a), (VALUE)(b), (VALUE)(c), 0))
22588#define MEMO_FOR(type,value) ((type *)RARRAY_PTR(value))
22589#define NEW_MEMO_FOR(type,value) ((value) = rb_ary_hidden_new_fill(type_roomof(type, VALUE)), MEMO_FOR(type, value))
22590#define NEW_PARTIAL_MEMO_FOR(type,value,member) ((value) = rb_ary_hidden_new_fill(type_roomof(type, VALUE)), rb_ary_set_len((value), offsetof(type, member) / sizeof(VALUE)), MEMO_FOR(type, value))
22591#pragma GCC visibility push(default)
22592#pragma GCC visibility pop
22593#define IMEMO_TYPE_P(v,t) imemo_type_p((VALUE)v, t)
22594#pragma GCC diagnostic push
22595#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22596#pragma GCC diagnostic pop
22597#pragma GCC diagnostic push
22598#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22599#pragma GCC diagnostic pop
22600#define END_OF_ENUMERATION(key)
22601#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
22602#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
22603#define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
22604#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags |= IMEMO_FL_USER3)
22605#define METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4)
22606#define METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4)
22607#define METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5)
22608#define METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5)
22609#define VM_METHOD_TYPE_MINIMUM_BITS 4
22610#define rb_iseq_t rb_iseq_t
22611#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
22612#define UNDEFINED_REFINED_METHOD_P(def) ((def)->type == VM_METHOD_TYPE_REFINED && UNDEFINED_METHOD_ENTRY_P((def)->body.refined.orig_me))
22613#pragma GCC visibility push(default)
22614#pragma GCC visibility pop
22615#define RUBY_NODE_H 1
22616#define RNODE(obj) ((struct RNode *)(obj))
22617#define NODE_FL_NEWLINE (((VALUE)1)<<7)
22618#define NODE_TYPESHIFT 8
22619#define NODE_TYPEMASK (((VALUE)0x7f)<<NODE_TYPESHIFT)
22620#define nd_type(n) ((int) (((n)->flags & NODE_TYPEMASK)>>NODE_TYPESHIFT))
22621#define nd_set_type(n,t) rb_node_set_type(n, t)
22622#define nd_init_type(n,t) (n)->flags=(((n)->flags&~NODE_TYPEMASK)|((((unsigned long)(t))<<NODE_TYPESHIFT)&NODE_TYPEMASK))
22623#define NODE_LSHIFT (NODE_TYPESHIFT+7)
22624#define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
22625#define nd_line(n) (int)(((SIGNED_VALUE)(n)->flags)>>NODE_LSHIFT)
22626#define nd_set_line(n,l) (n)->flags=(((n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
22627#define nd_first_column(n) ((int)((n)->nd_loc.beg_pos.column))
22628#define nd_set_first_column(n,v) ((n)->nd_loc.beg_pos.column = (v))
22629#define nd_first_lineno(n) ((int)((n)->nd_loc.beg_pos.lineno))
22630#define nd_set_first_lineno(n,v) ((n)->nd_loc.beg_pos.lineno = (v))
22631#define nd_first_loc(n) ((n)->nd_loc.beg_pos)
22632#define nd_set_first_loc(n,v) (nd_first_loc(n) = (v))
22633#define nd_last_column(n) ((int)((n)->nd_loc.end_pos.column))
22634#define nd_set_last_column(n,v) ((n)->nd_loc.end_pos.column = (v))
22635#define nd_last_lineno(n) ((int)((n)->nd_loc.end_pos.lineno))
22636#define nd_set_last_lineno(n,v) ((n)->nd_loc.end_pos.lineno = (v))
22637#define nd_last_loc(n) ((n)->nd_loc.end_pos)
22638#define nd_set_last_loc(n,v) (nd_last_loc(n) = (v))
22639#define nd_node_id(n) ((n)->node_id)
22640#define nd_set_node_id(n,id) ((n)->node_id = (id))
22641#define nd_head u1.node
22642#define nd_alen u2.argc
22643#define nd_next u3.node
22644#define nd_cond u1.node
22645#define nd_body u2.node
22646#define nd_else u3.node
22647#define nd_resq u2.node
22648#define nd_ensr u3.node
22649#define nd_1st u1.node
22650#define nd_2nd u2.node
22651#define nd_stts u1.node
22652#define nd_entry u3.id
22653#define nd_vid u1.id
22654#define nd_var u1.node
22655#define nd_iter u3.node
22656#define nd_value u2.node
22657#define nd_aid u3.id
22658#define nd_lit u1.value
22659#define nd_recv u1.node
22660#define nd_mid u2.id
22661#define nd_args u3.node
22662#define nd_ainfo u3.args
22663#define nd_defn u3.node
22664#define nd_cpath u1.node
22665#define nd_super u3.node
22666#define nd_beg u1.node
22667#define nd_end u2.node
22668#define nd_state u3.state
22669#define nd_nth u2.argc
22670#define nd_alias u1.id
22671#define nd_orig u2.id
22672#define nd_undef u2.node
22673#define nd_brace u2.argc
22674#define nd_pconst u1.node
22675#define nd_pkwargs u2.node
22676#define nd_pkwrestarg u3.node
22677#define nd_apinfo u3.apinfo
22678#define nd_fpinfo u3.fpinfo
22679#define nd_tbl u1.tbl
22680#define nd_pid u1.id
22681#define nd_plen u2.argc
22682#define nd_cflag u2.id
22683#define nd_cval u3.value
22684#define nd_rval u2.value
22685#define nd_tag u1.id
22686#define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
22687#define NEW_NODE_WITH_LOCALS(t,a1,a2,loc) node_newnode_with_locals(p, (t),(VALUE)(a1),(VALUE)(a2),loc)
22688#define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
22689#define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
22690#define NEW_SCOPE(a,b,loc) NEW_NODE_WITH_LOCALS(NODE_SCOPE,b,a,loc)
22691#define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
22692#define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
22693#define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
22694#define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
22695#define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
22696#define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc)
22697#define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
22698#define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc)
22699#define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
22700#define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
22701#define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc)
22702#define NEW_FOR_MASGN(v,loc) NEW_NODE(NODE_FOR_MASGN,v,0,0,loc)
22703#define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
22704#define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
22705#define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
22706#define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
22707#define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
22708#define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
22709#define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
22710#define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
22711#define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
22712#define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
22713#define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
22714#define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
22715#define NEW_LIST(a,loc) NEW_NODE(NODE_LIST,a,1,0,loc)
22716#define NEW_ZLIST(loc) NEW_NODE(NODE_ZLIST,0,0,0,loc)
22717#define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
22718#define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
22719#define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,v,loc)
22720#define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
22721#define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
22722#define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
22723#define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
22724#define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
22725#define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
22726#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)
22727#define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
22728#define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
22729#define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
22730#define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
22731#define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,v,loc)
22732#define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
22733#define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
22734#define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
22735#define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
22736#define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
22737#define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
22738#define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
22739#define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
22740#define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
22741#define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
22742#define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
22743#define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
22744#define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
22745#define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
22746#define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
22747#define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
22748#define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
22749#define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
22750#define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
22751#define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
22752#define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
22753#define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
22754#define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
22755#define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
22756#define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
22757#define NEW_KW_ARG(i,v,loc) NEW_NODE(NODE_KW_ARG,i,v,0,loc)
22758#define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
22759#define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
22760#define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
22761#define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
22762#define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
22763#define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
22764#define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
22765#define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
22766#define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
22767#define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
22768#define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
22769#define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
22770#define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
22771#define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
22772#define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
22773#define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,1,loc)
22774#define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
22775#define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
22776#define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
22777#define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
22778#define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
22779#define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
22780#define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
22781#define NEW_ERROR(loc) NEW_NODE(NODE_ERROR,0,0,0,loc)
22782#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
22783#define NODE_REQUIRED_KEYWORD_P(node) ((node)->nd_value == NODE_SPECIAL_REQUIRED_KEYWORD)
22784#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
22785#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
22786#define NODE_SPECIAL_EXCESSIVE_COMMA ((ID)1)
22787#define NODE_SPECIAL_NO_REST_KEYWORD ((NODE *)-1)
22788#pragma GCC visibility push(default)
22789#pragma GCC visibility pop
22790#define RUBY_ATOMIC_H
22791#define RUBY_ATOMIC_GENERIC_MACRO 1
22792#define RUBY_ATOMIC_FETCH_ADD(var,val) rbimpl_atomic_fetch_add(&(var), (val))
22793#define RUBY_ATOMIC_FETCH_SUB(var,val) rbimpl_atomic_fetch_sub(&(var), (val))
22794#define RUBY_ATOMIC_OR(var,val) rbimpl_atomic_or(&(var), (val))
22795#define RUBY_ATOMIC_EXCHANGE(var,val) rbimpl_atomic_exchange(&(var), (val))
22796#define RUBY_ATOMIC_CAS(var,oldval,newval) rbimpl_atomic_cas(&(var), (oldval), (newval))
22797#define RUBY_ATOMIC_SET(var,val) rbimpl_atomic_set(&(var), (val))
22798#define RUBY_ATOMIC_ADD(var,val) rbimpl_atomic_add(&(var), (val))
22799#define RUBY_ATOMIC_SUB(var,val) rbimpl_atomic_sub(&(var), (val))
22800#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var))
22801#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var))
22802#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var))
22803#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var))
22804#define RUBY_ATOMIC_SIZE_EXCHANGE(var,val) rbimpl_atomic_size_exchange(&(var), (val))
22805#define RUBY_ATOMIC_SIZE_CAS(var,oldval,newval) rbimpl_atomic_size_cas(&(var), (oldval), (newval))
22806#define RUBY_ATOMIC_SIZE_ADD(var,val) rbimpl_atomic_size_add(&(var), (val))
22807#define RUBY_ATOMIC_SIZE_SUB(var,val) rbimpl_atomic_size_sub(&(var), (val))
22808#define RUBY_ATOMIC_PTR_EXCHANGE(var,val) RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val))
22809#define RUBY_ATOMIC_PTR_CAS(var,oldval,newval) RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (oldval), (newval)))
22810#define RUBY_ATOMIC_VALUE_EXCHANGE(var,val) rbimpl_atomic_value_exchange(&(var), (val))
22811#define RUBY_ATOMIC_VALUE_CAS(var,oldval,newval) rbimpl_atomic_value_cas(&(var), (oldval), (newval))
22812#define ATOMIC_ADD(var,val) RUBY_ATOMIC_ADD(var, val)
22813#define ATOMIC_CAS(var,oldval,newval) RUBY_ATOMIC_CAS(var, oldval, newval)
22814#define ATOMIC_DEC(var) RUBY_ATOMIC_DEC(var)
22815#define ATOMIC_EXCHANGE(var,val) RUBY_ATOMIC_EXCHANGE(var, val)
22816#define ATOMIC_FETCH_ADD(var,val) RUBY_ATOMIC_FETCH_ADD(var, val)
22817#define ATOMIC_FETCH_SUB(var,val) RUBY_ATOMIC_FETCH_SUB(var, val)
22818#define ATOMIC_INC(var) RUBY_ATOMIC_INC(var)
22819#define ATOMIC_OR(var,val) RUBY_ATOMIC_OR(var, val)
22820#define ATOMIC_PTR_CAS(var,oldval,newval) RUBY_ATOMIC_PTR_CAS(var, oldval, newval)
22821#define ATOMIC_PTR_EXCHANGE(var,val) RUBY_ATOMIC_PTR_EXCHANGE(var, val)
22822#define ATOMIC_SET(var,val) RUBY_ATOMIC_SET(var, val)
22823#define ATOMIC_SIZE_ADD(var,val) RUBY_ATOMIC_SIZE_ADD(var, val)
22824#define ATOMIC_SIZE_CAS(var,oldval,newval) RUBY_ATOMIC_SIZE_CAS(var, oldval, newval)
22825#define ATOMIC_SIZE_DEC(var) RUBY_ATOMIC_SIZE_DEC(var)
22826#define ATOMIC_SIZE_EXCHANGE(var,val) RUBY_ATOMIC_SIZE_EXCHANGE(var, val)
22827#define ATOMIC_SIZE_INC(var) RUBY_ATOMIC_SIZE_INC(var)
22828#define ATOMIC_SIZE_SUB(var,val) RUBY_ATOMIC_SIZE_SUB(var, val)
22829#define ATOMIC_SUB(var,val) RUBY_ATOMIC_SUB(var, val)
22830#define ATOMIC_VALUE_CAS(var,oldval,val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
22831#define ATOMIC_VALUE_EXCHANGE(var,val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
22832#define RUBY_VM_OPTS_H
22833#define OPT_TAILCALL_OPTIMIZATION 0
22834#define OPT_PEEPHOLE_OPTIMIZATION 1
22835#define OPT_SPECIALISED_INSTRUCTION 1
22836#define OPT_INLINE_CONST_CACHE 1
22837#define OPT_FROZEN_STRING_LITERAL 0
22838#define OPT_DEBUG_FROZEN_STRING_LITERAL 0
22839#define OPT_THREADED_CODE 0
22840#define OPT_DIRECT_THREADED_CODE (OPT_THREADED_CODE == 0)
22841#define OPT_TOKEN_THREADED_CODE (OPT_THREADED_CODE == 1)
22842#define OPT_CALL_THREADED_CODE (OPT_THREADED_CODE == 2)
22843#define OPT_CHECKED_RUN 1
22844#define OPT_INLINE_METHOD_CACHE 1
22845#define OPT_GLOBAL_METHOD_CACHE 1
22846#define OPT_BLOCKINLINING 0
22847#define OPT_IC_FOR_IVAR 1
22848#define OPT_OPERANDS_UNIFICATION 1
22849#define OPT_INSTRUCTIONS_UNIFICATION 0
22850#define OPT_UNIFY_ALL_COMBINATION 0
22851#define OPT_STACK_CACHING 0
22852#define OPT_SUPPORT_JOKE 0
22853#define OPT_SUPPORT_CALL_C_FUNCTION 0
22854#define VM_COLLECT_USAGE_DETAILS 0
22855#define RUBY_SHAPE_H
22856#define SIZEOF_SHAPE_T 4
22857#define SHAPE_IN_BASIC_FLAGS 1
22858#define MAX_IVARS (attr_index_t)(-1)
22859#define SHAPE_ID_NUM_BITS 32
22860#define SHAPE_MASK (((uintptr_t)1 << SHAPE_ID_NUM_BITS) - 1)
22861#define SHAPE_FLAG_MASK (((VALUE)-1) >> SHAPE_ID_NUM_BITS)
22862#define SHAPE_FLAG_SHIFT ((SIZEOF_VALUE * 8) - SHAPE_ID_NUM_BITS)
22863#define SHAPE_BITMAP_SIZE 16384
22864#define SHAPE_MAX_VARIATIONS 8
22865#define MAX_SHAPE_ID (SHAPE_MASK - 1)
22866#define INVALID_SHAPE_ID SHAPE_MASK
22867#define ROOT_SHAPE_ID 0x0
22868#define SPECIAL_CONST_SHAPE_ID (SIZE_POOL_COUNT * 2)
22869#define OBJ_TOO_COMPLEX_SHAPE_ID (SPECIAL_CONST_SHAPE_ID + 1)
22870#pragma GCC visibility push(default)
22871#pragma GCC visibility pop
22872#pragma GCC visibility push(default)
22873#pragma GCC visibility pop
22874#define RUBY_THREAD_NATIVE_H 1
22875#define _SCHED_H_
22876#define _SYS_SCHED_H_
22877#define SCHED_OTHER 3
22878#define SCHED_FIFO 1
22879#define SCHED_RR 2
22880#define _PTHREAD_H
22881#define PTHREAD_CANCEL_ASYNCHRONOUS 1
22882#define PTHREAD_CANCEL_ENABLE 0
22883#define PTHREAD_CANCEL_DEFERRED 0
22884#define PTHREAD_CANCEL_DISABLE 1
22885#define PTHREAD_CANCELED ((void *)-1)
22886#define PTHREAD_COND_INITIALIZER (pthread_cond_t)21
22887#define PTHREAD_CREATE_DETACHED 1
22888#define PTHREAD_CREATE_JOINABLE 0
22889#define PTHREAD_EXPLICIT_SCHED 1
22890#define PTHREAD_INHERIT_SCHED 0
22891#define PTHREAD_MUTEX_RECURSIVE 0
22892#define PTHREAD_MUTEX_ERRORCHECK 1
22893#define PTHREAD_MUTEX_NORMAL 2
22894#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
22895#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pthread_mutex_t)18
22896#define PTHREAD_NORMAL_MUTEX_INITIALIZER_NP (pthread_mutex_t)19
22897#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pthread_mutex_t)20
22898#define PTHREAD_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER_NP
22899#define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 }
22900#define PTHREAD_PROCESS_SHARED 1
22901#define PTHREAD_PROCESS_PRIVATE 0
22902#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)22
22903#define PTHREAD_SCOPE_PROCESS 0
22904#define PTHREAD_SCOPE_SYSTEM 1
22905#define PTHREAD_BARRIER_SERIAL_THREAD (-1)
22906#define pthread_cleanup_push(_fn,_arg) { __pthread_cleanup_handler __cleanup_handler = { _fn, _arg, NULL }; _pthread_cleanup_push( &__cleanup_handler );
22907#define pthread_cleanup_pop(_execute) _pthread_cleanup_pop( _execute ); }
22908#pragma GCC visibility push(default)
22909#pragma GCC visibility pop
22910#define VM_INSN_INFO_TABLE_IMPL 2
22911#define RUBY_NSIG NSIG
22912#define RUBY_SIGCHLD (SIGCLD)
22913#define SIGCHLD_LOSSY (0)
22914#define WAITPID_USE_SIGCHLD (RUBY_SIGCHLD || SIGCHLD_LOSSY)
22915#define USE_SIGALTSTACK
22916#define RB_ALTSTACK_INIT(var,altstack) var = rb_register_sigaltstack(altstack)
22917#define RB_ALTSTACK_FREE(var) free(var)
22918#define RB_ALTSTACK(var) var
22919#define RUBY_THREAD_PTHREAD_H
22920#define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
22921#define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
22922#undef except
22923#undef try
22924#undef leave
22925#undef finally
22926#define RB_THREAD_LOCAL_SPECIFIER _Thread_local
22927#pragma GCC visibility push(default)
22928#pragma GCC visibility pop
22929#define RUBY_VM_THREAD_MODEL 2
22930#define TAG_NONE RUBY_TAG_NONE
22931#define TAG_RETURN RUBY_TAG_RETURN
22932#define TAG_BREAK RUBY_TAG_BREAK
22933#define TAG_NEXT RUBY_TAG_NEXT
22934#define TAG_RETRY RUBY_TAG_RETRY
22935#define TAG_REDO RUBY_TAG_REDO
22936#define TAG_RAISE RUBY_TAG_RAISE
22937#define TAG_THROW RUBY_TAG_THROW
22938#define TAG_FATAL RUBY_TAG_FATAL
22939#define TAG_MASK RUBY_TAG_MASK
22940#define CoreDataFromValue(obj,type) (type*)DATA_PTR(obj)
22941#define GetCoreDataFromValue(obj,type,ptr) ((ptr) = CoreDataFromValue((obj), type))
22942#define PATHOBJ_PATH 0
22943#define PATHOBJ_REALPATH 1
22944#define ISEQ_IS_SIZE(body) (body->ic_size + body->ivc_size + body->ise_size + body->icvarc_size)
22945#define ISEQ_IS_IC_ENTRY(body,idx) (body->is_entries[(idx) + body->ise_size + body->icvarc_size + body->ivc_size].ic_cache);
22946#define ISEQ_BODY(iseq) ((iseq)->body)
22947#define EXTSTATIC 0
22948#define USE_LAZY_LOAD 0
22949#define GetVMPtr(obj,ptr) GetCoreDataFromValue((obj), rb_vm_t, (ptr))
22950#define VM_GLOBAL_CC_CACHE_TABLE_SIZE 1023
22951#define RUBY_VM_SIZE_ALIGN 4096
22952#define RUBY_VM_THREAD_VM_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
22953#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
22954#define RUBY_VM_THREAD_MACHINE_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
22955#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
22956#define RUBY_VM_FIBER_VM_STACK_SIZE ( 16 * 1024 * sizeof(VALUE))
22957#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
22958#define RUBY_VM_FIBER_MACHINE_STACK_SIZE ( 64 * 1024 * sizeof(VALUE))
22959#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
22960#define VM_DEBUG_BP_CHECK 0
22961#define VM_DEBUG_VERIFY_METHOD_CACHE (VMDEBUG != 0)
22962#define rb_execution_context_t rb_execution_context_t
22963#define VM_CORE_H_EC_DEFINED 1
22964#define VM_DEFINECLASS_TYPE(x) ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)
22965#define VM_DEFINECLASS_FLAG_SCOPED 0x08
22966#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS 0x10
22967#define VM_DEFINECLASS_SCOPED_P(x) ((x) & VM_DEFINECLASS_FLAG_SCOPED)
22968#define VM_DEFINECLASS_HAS_SUPERCLASS_P(x) ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)
22969#pragma GCC visibility push(default)
22970#pragma GCC visibility pop
22971#define GetProcPtr(obj,ptr) GetCoreDataFromValue((obj), rb_proc_t, (ptr))
22972#pragma GCC visibility push(default)
22973#pragma GCC visibility pop
22974#define GetBindingPtr(obj,ptr) GetCoreDataFromValue((obj), rb_binding_t, (ptr))
22975#define VM_CHECKMATCH_TYPE_MASK 0x03
22976#define VM_CHECKMATCH_ARRAY 0x04
22977#define VM_TAGGED_PTR_SET(p,tag) ((VALUE)(p) | (tag))
22978#define VM_TAGGED_PTR_REF(v,mask) ((void *)((v) & ~mask))
22979#define GC_GUARDED_PTR(p) VM_TAGGED_PTR_SET((p), 0x01)
22980#define GC_GUARDED_PTR_REF(p) VM_TAGGED_PTR_REF((p), 0x03)
22981#define GC_GUARDED_PTR_P(p) (((VALUE)(p)) & 0x01)
22982#define VM_ENV_DATA_SIZE ( 3)
22983#define VM_ENV_DATA_INDEX_ME_CREF (-2)
22984#define VM_ENV_DATA_INDEX_SPECVAL (-1)
22985#define VM_ENV_DATA_INDEX_FLAGS ( 0)
22986#define VM_ENV_DATA_INDEX_ENV ( 1)
22987#define VM_ENV_INDEX_LAST_LVAR (-VM_ENV_DATA_SIZE)
22988#define RUBYVM_CFUNC_FRAME_P(cfp) (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)
22989#define VM_GUARDED_PREV_EP(ep) GC_GUARDED_PTR(ep)
22990#define VM_BLOCK_HANDLER_NONE 0
22991#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
22992#define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
22993#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp,ecfp) ((void *)(ecfp) > (void *)(cfp))
22994#define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
22995#define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
22996#pragma GCC visibility push(default)
22997#pragma GCC visibility pop
22998#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)))
22999#define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]
23000#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)
23001#define CHECK_VM_STACK_OVERFLOW(cfp,margin) CHECK_VM_STACK_OVERFLOW0((cfp), (cfp)->sp, (margin))
23002#pragma GCC visibility push(default)
23003#pragma GCC visibility pop
23004#define GET_VM() rb_current_vm()
23005#define GET_RACTOR() rb_current_ractor()
23006#define GET_THREAD() rb_current_thread()
23007#define GET_EC() rb_current_execution_context(true)
23008#define RUBY_VM_SET_TIMER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TIMER_INTERRUPT_MASK)
23009#define RUBY_VM_SET_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, PENDING_INTERRUPT_MASK)
23010#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
23011#define RUBY_VM_SET_TRAP_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TRAP_INTERRUPT_MASK)
23012#define RUBY_VM_SET_TERMINATE_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TERMINATE_INTERRUPT_MASK)
23013#define RUBY_VM_SET_VM_BARRIER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, VM_BARRIER_INTERRUPT_MASK)
23014#define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
23015#define RUBY_VM_CHECK_INTS(ec) rb_vm_check_ints(ec)
23016#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)
23017#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)
23018#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)
23019#pragma GCC visibility push(default)
23020#define RUBY_EVENT_COVERAGE_LINE 0x010000
23021#define RUBY_EVENT_COVERAGE_BRANCH 0x020000
23022#pragma GCC visibility pop
23023#define PASS_PASSED_BLOCK_HANDLER_EC(ec) pass_passed_block_handler(ec)
23024#define PASS_PASSED_BLOCK_HANDLER() pass_passed_block_handler(GET_EC())
23025#define ruby_setjmp(env) RUBY_SETJMP(env)
23026#define ruby_longjmp(env,val) RUBY_LONGJMP((env),(val))
23027#define __ERRNO_H__
23028#define __error_t_defined 1
23029#define _SYS_ERRNO_H_
23030#define errno (*__errno())
23031#define __errno_r(ptr) _REENT_ERRNO(ptr)
23032#define EPERM 1
23033#define ENOENT 2
23034#define ESRCH 3
23035#define EINTR 4
23036#define EIO 5
23037#define ENXIO 6
23038#define E2BIG 7
23039#define ENOEXEC 8
23040#define EBADF 9
23041#define ECHILD 10
23042#define EAGAIN 11
23043#define ENOMEM 12
23044#define EACCES 13
23045#define EFAULT 14
23046#define ENOTBLK 15
23047#define EBUSY 16
23048#define EEXIST 17
23049#define EXDEV 18
23050#define ENODEV 19
23051#define ENOTDIR 20
23052#define EISDIR 21
23053#define EINVAL 22
23054#define ENFILE 23
23055#define EMFILE 24
23056#define ENOTTY 25
23057#define ETXTBSY 26
23058#define EFBIG 27
23059#define ENOSPC 28
23060#define ESPIPE 29
23061#define EROFS 30
23062#define EMLINK 31
23063#define EPIPE 32
23064#define EDOM 33
23065#define ERANGE 34
23066#define ENOMSG 35
23067#define EIDRM 36
23068#define ECHRNG 37
23069#define EL2NSYNC 38
23070#define EL3HLT 39
23071#define EL3RST 40
23072#define ELNRNG 41
23073#define EUNATCH 42
23074#define ENOCSI 43
23075#define EL2HLT 44
23076#define EDEADLK 45
23077#define ENOLCK 46
23078#define EBADE 50
23079#define EBADR 51
23080#define EXFULL 52
23081#define ENOANO 53
23082#define EBADRQC 54
23083#define EBADSLT 55
23084#define EDEADLOCK 56
23085#define EBFONT 57
23086#define ENOSTR 60
23087#define ENODATA 61
23088#define ETIME 62
23089#define ENOSR 63
23090#define ENONET 64
23091#define ENOPKG 65
23092#define EREMOTE 66
23093#define ENOLINK 67
23094#define EADV 68
23095#define ESRMNT 69
23096#define ECOMM 70
23097#define EPROTO 71
23098#define EMULTIHOP 74
23099#define ELBIN 75
23100#define EDOTDOT 76
23101#define EBADMSG 77
23102#define EFTYPE 79
23103#define ENOTUNIQ 80
23104#define EBADFD 81
23105#define EREMCHG 82
23106#define ELIBACC 83
23107#define ELIBBAD 84
23108#define ELIBSCN 85
23109#define ELIBMAX 86
23110#define ELIBEXEC 87
23111#define ENOSYS 88
23112#define ENMFILE 89
23113#define ENOTEMPTY 90
23114#define ENAMETOOLONG 91
23115#define ELOOP 92
23116#define EOPNOTSUPP 95
23117#define EPFNOSUPPORT 96
23118#define ECONNRESET 104
23119#define ENOBUFS 105
23120#define EAFNOSUPPORT 106
23121#define EPROTOTYPE 107
23122#define ENOTSOCK 108
23123#define ENOPROTOOPT 109
23124#define ESHUTDOWN 110
23125#define ECONNREFUSED 111
23126#define EADDRINUSE 112
23127#define ECONNABORTED 113
23128#define ENETUNREACH 114
23129#define ENETDOWN 115
23130#define ETIMEDOUT 116
23131#define EHOSTDOWN 117
23132#define EHOSTUNREACH 118
23133#define EINPROGRESS 119
23134#define EALREADY 120
23135#define EDESTADDRREQ 121
23136#define EMSGSIZE 122
23137#define EPROTONOSUPPORT 123
23138#define ESOCKTNOSUPPORT 124
23139#define EADDRNOTAVAIL 125
23140#define ENETRESET 126
23141#define EISCONN 127
23142#define ENOTCONN 128
23143#define ETOOMANYREFS 129
23144#define EPROCLIM 130
23145#define EUSERS 131
23146#define EDQUOT 132
23147#define ESTALE 133
23148#define ENOTSUP 134
23149#define ENOMEDIUM 135
23150#define ENOSHARE 136
23151#define ECASECLASH 137
23152#define EILSEQ 138
23153#define EOVERFLOW 139
23154#define ECANCELED 140
23155#define ENOTRECOVERABLE 141
23156#define EOWNERDEAD 142
23157#define ESTRPIPE 143
23158#define EWOULDBLOCK EAGAIN
23159#define __ELASTERROR 2000
23160#define _SYS_PARAM_H
23161#define __need_NULL
23162#undef __need_ptrdiff_t
23163#undef __need_size_t
23164#undef __need_wchar_t
23165#undef NULL
23166#define NULL ((void *)0)
23167#undef __need_NULL
23168#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
23169#define NOFILE OPEN_MAX
23170#define NGROUPS NGROUPS_MAX
23171#define HZ 1000
23172#define MAXHOSTNAMELEN 128
23173#define MAXPATHLEN PATH_MAX
23174#define MAXSYMLINKS SYMLOOP_MAX
23175#define DEV_BSIZE 1024
23176#define NBBY 8
23177#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
23178#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
23179#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
23180#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
23181#define howmany(x,y) (((x)+((y)-1))/(y))
23182#define rounddown(x,y) (((x)/(y))*(y))
23183#define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
23184#define roundup2(x,y) (((x)+((y)-1))&(~((y)-1)))
23185#define powerof2(x) ((((x)-1)&(x))==0)
23186#define MIN(a,b) (((a)<(b))?(a):(b))
23187#define MAX(a,b) (((a)>(b))?(a):(b))
23188#define SAVE_ROOT_JMPBUF(th,stmt) do if (true) { stmt; } else if (th) { } while (0)
23189#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);
23190#define EC_POP_TAG() _ec->tag = _tag.prev; } while (0)
23191#define EC_TMPPOP_TAG() _ec->tag = _tag.prev
23192#define EC_REPUSH_TAG() (void)(_ec->tag = &_tag)
23193#define VAR_FROM_MEMORY(var) (var)
23194#define VAR_INITIALIZED(var) ((void)&(var))
23195#define VAR_NOCLOBBERED(var) var
23196#define EC_EXEC_TAG() (ruby_setjmp(_tag.buf) ? rb_ec_tag_state(VAR_FROM_MEMORY(_ec)) : (EC_REPUSH_TAG(), 0))
23197#define EC_JUMP_TAG(ec,st) rb_ec_tag_jump(ec, st)
23198#define INTERNAL_EXCEPTION_P(exc) FIXNUM_P(exc)
23199#define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1
23200#define CREF_FL_OMOD_SHARED IMEMO_FL_USER2
23201#define CREF_FL_SINGLETON IMEMO_FL_USER3
23202#pragma GCC diagnostic push
23203#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23204#pragma GCC diagnostic pop
23205#define rb_ec_raised_set(ec,f) ((ec)->raised_flag |= (f))
23206#define rb_ec_raised_reset(ec,f) ((ec)->raised_flag &= ~(f))
23207#define rb_ec_raised_p(ec,f) (((ec)->raised_flag & (f)) != 0)
23208#define rb_ec_raised_clear(ec) ((ec)->raised_flag = 0)
23209#define CharNext(p) rb_char_next(p)
23210#define RUBY_GC_H 1
23211#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
23212#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)
23213#define RUBY_MARK_FREE_DEBUG 0
23214#define RUBY_MARK_ENTER(msg)
23215#define RUBY_MARK_LEAVE(msg)
23216#define RUBY_FREE_ENTER(msg)
23217#define RUBY_FREE_LEAVE(msg)
23218#define RUBY_GC_INFO if(0)printf
23219#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} } while (0)
23220#define RUBY_MARK_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark(markobj);} } while (0)
23221#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
23222#define STACK_UPPER(x,a,b) (b)
23223#define STACK_GROW_DIR_DETECTION
23224#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
23225#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
23226#pragma GCC visibility push(default)
23227#pragma GCC visibility pop
23228#define INTERNAL_COMPILE_H
23229#pragma GCC visibility push(default)
23230#pragma GCC visibility pop
23231#define INTERNAL_CONT_H
23232#define RUBY_ISEQ_H 1
23233#define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
23234#define ISEQ_MINOR_VERSION ((unsigned int)ruby_api_version[1])
23235#define ISEQ_MBITS_SIZE sizeof(iseq_bits_t)
23236#define ISEQ_MBITS_BITLENGTH (ISEQ_MBITS_SIZE * CHAR_BIT)
23237#define ISEQ_MBITS_SET(buf,i) (buf[(i) / ISEQ_MBITS_BITLENGTH] |= ((iseq_bits_t)1 << ((i) % ISEQ_MBITS_BITLENGTH)))
23238#define ISEQ_MBITS_SET_P(buf,i) ((buf[(i) / ISEQ_MBITS_BITLENGTH] >> ((i) % ISEQ_MBITS_BITLENGTH)) & 0x1)
23239#define ISEQ_MBITS_BUFLEN(size) roomof(size, ISEQ_MBITS_BITLENGTH)
23240#define USE_ISEQ_NODE_ID 1
23241#define ISEQ_COVERAGE(iseq) ISEQ_BODY(iseq)->variable.coverage
23242#define ISEQ_COVERAGE_SET(iseq,cov) RB_OBJ_WRITE(iseq, &ISEQ_BODY(iseq)->variable.coverage, cov)
23243#define ISEQ_LINE_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
23244#define ISEQ_BRANCH_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_BRANCHES)
23245#define ISEQ_PC2BRANCHINDEX(iseq) ISEQ_BODY(iseq)->variable.pc2branchindex
23246#define ISEQ_PC2BRANCHINDEX_SET(iseq,h) RB_OBJ_WRITE(iseq, &ISEQ_BODY(iseq)->variable.pc2branchindex, h)
23247#define ISEQ_FLIP_CNT(iseq) ISEQ_BODY(iseq)->variable.flip_count
23248#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)
23249#define ISEQ_NOT_LOADED_YET IMEMO_FL_USER1
23250#define ISEQ_USE_COMPILE_DATA IMEMO_FL_USER2
23251#define ISEQ_TRANSLATED IMEMO_FL_USER3
23252#define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW(((VALUE)iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
23253#pragma GCC visibility push(default)
23254#define INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE (512)
23255#pragma GCC visibility pop
23256#define INTERNAL_ERROR_H
23257#define INTERNAL_STRING_H
23258#define RUBY_ENCODING_H 1
23259#define RUBY_INTERNAL_ENCODING_CODERANGE_H
23260#pragma GCC visibility push(default)
23261#define ENC_CODERANGE_MASK RUBY_ENC_CODERANGE_MASK
23262#define ENC_CODERANGE_UNKNOWN RUBY_ENC_CODERANGE_UNKNOWN
23263#define ENC_CODERANGE_7BIT RUBY_ENC_CODERANGE_7BIT
23264#define ENC_CODERANGE_VALID RUBY_ENC_CODERANGE_VALID
23265#define ENC_CODERANGE_BROKEN RUBY_ENC_CODERANGE_BROKEN
23266#define ENC_CODERANGE_CLEAN_P(cr) RB_ENC_CODERANGE_CLEAN_P(cr)
23267#define ENC_CODERANGE(obj) RB_ENC_CODERANGE(obj)
23268#define ENC_CODERANGE_ASCIIONLY(obj) RB_ENC_CODERANGE_ASCIIONLY(obj)
23269#define ENC_CODERANGE_SET(obj,cr) RB_ENC_CODERANGE_SET(obj,cr)
23270#define ENC_CODERANGE_CLEAR(obj) RB_ENC_CODERANGE_CLEAR(obj)
23271#define ENC_CODERANGE_AND(a,b) RB_ENC_CODERANGE_AND(a, b)
23272#define ENCODING_CODERANGE_SET(obj,encindex,cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr)
23273#define RB_ENC_CODERANGE RB_ENC_CODERANGE
23274#define RB_ENC_CODERANGE_AND RB_ENC_CODERANGE_AND
23275#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY
23276#define RB_ENC_CODERANGE_CLEAN_P RB_ENC_CODERANGE_CLEAN_P
23277#define RB_ENC_CODERANGE_CLEAR RB_ENC_CODERANGE_CLEAR
23278#define RB_ENC_CODERANGE_SET RB_ENC_CODERANGE_SET
23279#pragma GCC visibility pop
23280#define RUBY_INTERNAL_ENCODING_CTYPE_H
23281#define ONIGMO_H
23282#define ONIGMO_VERSION_MAJOR 6
23283#define ONIGMO_VERSION_MINOR 1
23284#define ONIGMO_VERSION_TEENY 3
23285#define ONIG_EXTERN RUBY_EXTERN
23286#pragma GCC visibility push(default)
23287#define UChar OnigUChar
23288#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)
23289#define OnigCodePointMaskWidth 3
23290#define OnigCodePointMask ((1<<OnigCodePointMaskWidth)-1)
23291#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
23292#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)
23293#define OnigSpecialIndexShift 3
23294#define OnigSpecialIndexWidth 10
23295#define ONIGENC_CASE_UPCASE (1<<13)
23296#define ONIGENC_CASE_DOWNCASE (1<<14)
23297#define ONIGENC_CASE_TITLECASE (1<<15)
23298#define ONIGENC_CASE_SPECIAL_OFFSET 3
23299#define ONIGENC_CASE_UP_SPECIAL (1<<16)
23300#define ONIGENC_CASE_DOWN_SPECIAL (1<<17)
23301#define ONIGENC_CASE_MODIFIED (1<<18)
23302#define ONIGENC_CASE_FOLD (1<<19)
23303#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20)
23304#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<21)
23305#define ONIGENC_CASE_ASCII_ONLY (1<<22)
23306#define ONIGENC_CASE_IS_TITLECASE (1<<23)
23307#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30)
23308#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
23309#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag
23310#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3
23311#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13
23312#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0])
23313#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1]
23314#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2]
23315#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)
23316#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)
23317#define ONIGENC_CODE_TO_MBC_MAXLEN 7
23318#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18
23319#define ONIGENC_CTYPE_NEWLINE 0
23320#define ONIGENC_CTYPE_ALPHA 1
23321#define ONIGENC_CTYPE_BLANK 2
23322#define ONIGENC_CTYPE_CNTRL 3
23323#define ONIGENC_CTYPE_DIGIT 4
23324#define ONIGENC_CTYPE_GRAPH 5
23325#define ONIGENC_CTYPE_LOWER 6
23326#define ONIGENC_CTYPE_PRINT 7
23327#define ONIGENC_CTYPE_PUNCT 8
23328#define ONIGENC_CTYPE_SPACE 9
23329#define ONIGENC_CTYPE_UPPER 10
23330#define ONIGENC_CTYPE_XDIGIT 11
23331#define ONIGENC_CTYPE_WORD 12
23332#define ONIGENC_CTYPE_ALNUM 13
23333#define ONIGENC_CTYPE_ASCII 14
23334#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII
23335#define ONIGENC_FLAG_NONE 0U
23336#define ONIGENC_FLAG_UNICODE 1U
23337#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e)
23338#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)
23339#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)
23340#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
23341#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)
23342#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
23343#define ONIGENC_IS_MBC_WORD(enc,s,end) ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
23344#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)
23345#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE)
23346#define ONIGENC_NAME(enc) ((enc)->name)
23347#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
23348#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) (enc)->is_allowed_reverse_match(s,end,enc)
23349#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) (enc)->left_adjust_char_head(start, s, end, enc)
23350#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
23351#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)
23352#define ONIGENC_STEP_BACK(enc,start,s,end,n) onigenc_step_back((enc),(start),(s),(end),(n))
23353#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n)
23354#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r))
23355#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r)
23356#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1)
23357#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1)
23358#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n))
23359#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1)
23360#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r))
23361#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc)
23362#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen(p,e,enc)
23363#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)
23364#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)
23365#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len)
23366#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc)
23367#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc)
23368#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc)
23369#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc)
23370#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) (enc)->property_name_to_ctype(enc,p,end)
23371#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc)
23372#define ONIGENC_IS_CODE_NEWLINE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
23373#define ONIGENC_IS_CODE_GRAPH(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
23374#define ONIGENC_IS_CODE_PRINT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
23375#define ONIGENC_IS_CODE_ALNUM(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
23376#define ONIGENC_IS_CODE_ALPHA(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
23377#define ONIGENC_IS_CODE_LOWER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
23378#define ONIGENC_IS_CODE_UPPER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
23379#define ONIGENC_IS_CODE_CNTRL(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
23380#define ONIGENC_IS_CODE_PUNCT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
23381#define ONIGENC_IS_CODE_SPACE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
23382#define ONIGENC_IS_CODE_BLANK(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
23383#define ONIGENC_IS_CODE_DIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
23384#define ONIGENC_IS_CODE_XDIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
23385#define ONIGENC_IS_CODE_WORD(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
23386#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
23387#define ONIG_NREGION 4
23388#define ONIG_MAX_CAPTURE_GROUP_NUM 32767
23389#define ONIG_MAX_BACKREF_NUM 1000
23390#define ONIG_MAX_REPEAT_NUM 100000
23391#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
23392#define ONIG_MAX_ERROR_MESSAGE_LEN 90
23393#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE
23394#define ONIG_OPTION_NONE 0U
23395#define ONIG_OPTION_IGNORECASE 1U
23396#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
23397#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
23398#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE
23399#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)
23400#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)
23401#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)
23402#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)
23403#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
23404#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
23405#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
23406#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
23407#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NOTEOL << 1)
23408#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1)
23409#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_NOTEOS << 1)
23410#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
23411#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
23412#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
23413#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF
23414#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
23415#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
23416#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))
23417#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)
23418#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
23419#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
23420#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
23421#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
23422#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
23423#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
23424#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58)
23425#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG)
23426#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
23427#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
23428#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython)
23429#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
23430#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0)
23431#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1)
23432#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2)
23433#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3)
23434#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4)
23435#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5)
23436#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6)
23437#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7)
23438#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8)
23439#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9)
23440#define ONIG_SYN_OP_VBAR_ALT (1U<<10)
23441#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11)
23442#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12)
23443#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13)
23444#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14)
23445#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15)
23446#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16)
23447#define ONIG_SYN_OP_BRACKET_CC (1U<<17)
23448#define ONIG_SYN_OP_ESC_W_WORD (1U<<18)
23449#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19)
23450#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20)
23451#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21)
23452#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22)
23453#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23)
23454#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24)
23455#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25)
23456#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26)
23457#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27)
23458#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28)
23459#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29)
23460#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30)
23461#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31)
23462#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0)
23463#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1)
23464#define ONIG_SYN_OP2_OPTION_PERL (1U<<2)
23465#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3)
23466#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4)
23467#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5)
23468#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6)
23469#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7)
23470#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8)
23471#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9)
23472#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10)
23473#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11)
23474#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12)
23475#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13)
23476#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14)
23477#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15)
23478#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16)
23479#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17)
23480#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19)
23481#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20)
23482#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21)
23483#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22)
23484#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23)
23485#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24)
23486#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25)
23487#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26)
23488#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27)
23489#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28)
23490#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29)
23491#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30)
23492#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT (1U<<31)
23493#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31)
23494#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0)
23495#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1)
23496#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2)
23497#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3)
23498#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4)
23499#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5)
23500#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6)
23501#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7)
23502#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)
23503#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9)
23504#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)
23505#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP (1U<<11)
23506#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20)
23507#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21)
23508#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22)
23509#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23)
23510#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24)
23511#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25)
23512#define ONIG_SYN_WARN_CC_DUP (1U<<26)
23513#define ONIG_META_CHAR_ESCAPE 0
23514#define ONIG_META_CHAR_ANYCHAR 1
23515#define ONIG_META_CHAR_ANYTIME 2
23516#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3
23517#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4
23518#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5
23519#define ONIG_INEFFECTIVE_META_CHAR 0
23520#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)
23521#define ONIG_NORMAL 0
23522#define ONIG_MISMATCH -1
23523#define ONIG_NO_SUPPORT_CONFIG -2
23524#define ONIGERR_MEMORY -5
23525#define ONIGERR_TYPE_BUG -6
23526#define ONIGERR_PARSER_BUG -11
23527#define ONIGERR_STACK_BUG -12
23528#define ONIGERR_UNDEFINED_BYTECODE -13
23529#define ONIGERR_UNEXPECTED_BYTECODE -14
23530#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
23531#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16
23532#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21
23533#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
23534#define ONIGERR_INVALID_ARGUMENT -30
23535#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
23536#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
23537#define ONIGERR_EMPTY_CHAR_CLASS -102
23538#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103
23539#define ONIGERR_END_PATTERN_AT_ESCAPE -104
23540#define ONIGERR_END_PATTERN_AT_META -105
23541#define ONIGERR_END_PATTERN_AT_CONTROL -106
23542#define ONIGERR_META_CODE_SYNTAX -108
23543#define ONIGERR_CONTROL_CODE_SYNTAX -109
23544#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110
23545#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111
23546#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112
23547#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113
23548#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114
23549#define ONIGERR_NESTED_REPEAT_OPERATOR -115
23550#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116
23551#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117
23552#define ONIGERR_END_PATTERN_IN_GROUP -118
23553#define ONIGERR_UNDEFINED_GROUP_OPTION -119
23554#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121
23555#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122
23556#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123
23557#define ONIGERR_INVALID_CONDITION_PATTERN -124
23558#define ONIGERR_TOO_BIG_NUMBER -200
23559#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201
23560#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202
23561#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203
23562#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204
23563#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205
23564#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206
23565#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207
23566#define ONIGERR_INVALID_BACKREF -208
23567#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209
23568#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -210
23569#define ONIGERR_TOO_SHORT_DIGITS -211
23570#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212
23571#define ONIGERR_EMPTY_GROUP_NAME -214
23572#define ONIGERR_INVALID_GROUP_NAME -215
23573#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216
23574#define ONIGERR_UNDEFINED_NAME_REFERENCE -217
23575#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218
23576#define ONIGERR_MULTIPLEX_DEFINED_NAME -219
23577#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220
23578#define ONIGERR_NEVER_ENDING_RECURSION -221
23579#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
23580#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
23581#define ONIGERR_INVALID_CODE_POINT_VALUE -400
23582#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
23583#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
23584#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402
23585#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403
23586#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
23587#define ONIG_IS_CAPTURE_HISTORY_GROUP(r,i) ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
23588#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1
23589#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2
23590#define ONIG_TRAVERSE_CALLBACK_AT_BOTH ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
23591#define ONIG_REGION_NOTPOS -1
23592#define ONIG_NULL_WARN onig_null_warn
23593#define ONIG_CHAR_TABLE_SIZE 256
23594#pragma GCC visibility pop
23595#define RUBY_INTERNAL_ENCODING_ENCODING_H
23596#define ONIGURUMA_H
23597#define ONIGURUMA
23598#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR
23599#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR
23600#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY
23601#pragma GCC visibility push(default)
23602#define ENCODING_INLINE_MAX RUBY_ENCODING_INLINE_MAX
23603#define ENCODING_SHIFT RUBY_ENCODING_SHIFT
23604#define ENCODING_MASK RUBY_ENCODING_MASK
23605#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i)
23606#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i)
23607#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj)
23608#define ENCODING_GET(obj) RB_ENCODING_GET(obj)
23609#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj)
23610#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN
23611#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret)
23612#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret)
23613#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret)
23614#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret)
23615#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret)
23616#pragma GCC visibility pop
23617#define RB_ENCODING_GET RB_ENCODING_GET
23618#define RB_ENCODING_GET_INLINED RB_ENCODING_GET_INLINED
23619#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT
23620#define RB_ENCODING_SET RB_ENCODING_SET
23621#define RB_ENCODING_SET_INLINED RB_ENCODING_SET_INLINED
23622#define rb_enc_asciicompat rb_enc_asciicompat
23623#define rb_enc_code_to_mbclen rb_enc_code_to_mbclen
23624#define rb_enc_codepoint rb_enc_codepoint
23625#define rb_enc_left_char_head rb_enc_left_char_head
23626#define rb_enc_mbc_to_codepoint rb_enc_mbc_to_codepoint
23627#define rb_enc_mbcput rb_enc_mbcput
23628#define rb_enc_mbmaxlen rb_enc_mbmaxlen
23629#define rb_enc_mbminlen rb_enc_mbminlen
23630#define rb_enc_name rb_enc_name
23631#define rb_enc_prev_char rb_enc_prev_char
23632#define rb_enc_right_char_head rb_enc_right_char_head
23633#define rb_enc_step_back rb_enc_step_back
23634#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p
23635#pragma GCC visibility push(default)
23636#pragma GCC visibility pop
23637#define rb_enc_is_newline rb_enc_is_newline
23638#define rb_enc_isalnum rb_enc_isalnum
23639#define rb_enc_isalpha rb_enc_isalpha
23640#define rb_enc_isascii rb_enc_isascii
23641#define rb_enc_isctype rb_enc_isctype
23642#define rb_enc_isdigit rb_enc_isdigit
23643#define rb_enc_islower rb_enc_islower
23644#define rb_enc_isprint rb_enc_isprint
23645#define rb_enc_iscntrl rb_enc_iscntrl
23646#define rb_enc_ispunct rb_enc_ispunct
23647#define rb_enc_isspace rb_enc_isspace
23648#define rb_enc_isupper rb_enc_isupper
23649#define RUBY_INTERNAL_ENCODING_PATHNAME_H
23650#pragma GCC visibility push(default)
23651#pragma GCC visibility pop
23652#define RUBY_INTERNAL_ENCODING_RE_H
23653#pragma GCC visibility push(default)
23654#pragma GCC visibility pop
23655#define RUBY_INTERNAL_ENCODING_SPRINTF_H
23656#pragma GCC visibility push(default)
23657#pragma GCC visibility pop
23658#define RUBY_INTERNAL_ENCODING_STRING_H
23659#pragma GCC visibility push(default)
23660#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)))
23661#define rb_enc_str_new_cstr(str,enc) ((RBIMPL_CONSTANT_P(str) ? rbimpl_enc_str_new_cstr : rb_enc_str_new_cstr) ((str), (enc)))
23662#pragma GCC visibility pop
23663#define RUBY_INTERNAL_ENCODING_SYMBOL_H
23664#pragma GCC visibility push(default)
23665#pragma GCC visibility pop
23666#define RUBY_INTERNAL_ENCODING_TRANSCODE_H
23667#pragma GCC visibility push(default)
23668#define ECONV_ERROR_HANDLER_MASK RUBY_ECONV_ERROR_HANDLER_MASK
23669#define ECONV_INVALID_MASK RUBY_ECONV_INVALID_MASK
23670#define ECONV_INVALID_REPLACE RUBY_ECONV_INVALID_REPLACE
23671#define ECONV_UNDEF_MASK RUBY_ECONV_UNDEF_MASK
23672#define ECONV_UNDEF_REPLACE RUBY_ECONV_UNDEF_REPLACE
23673#define ECONV_UNDEF_HEX_CHARREF RUBY_ECONV_UNDEF_HEX_CHARREF
23674#define ECONV_DECORATOR_MASK RUBY_ECONV_DECORATOR_MASK
23675#define ECONV_NEWLINE_DECORATOR_MASK RUBY_ECONV_NEWLINE_DECORATOR_MASK
23676#define ECONV_NEWLINE_DECORATOR_READ_MASK RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK
23677#define ECONV_NEWLINE_DECORATOR_WRITE_MASK RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK
23678#define ECONV_UNIVERSAL_NEWLINE_DECORATOR RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR
23679#define ECONV_CRLF_NEWLINE_DECORATOR RUBY_ECONV_CRLF_NEWLINE_DECORATOR
23680#define ECONV_CR_NEWLINE_DECORATOR RUBY_ECONV_CR_NEWLINE_DECORATOR
23681#define ECONV_LF_NEWLINE_DECORATOR RUBY_ECONV_LF_NEWLINE_DECORATOR
23682#define ECONV_XML_TEXT_DECORATOR RUBY_ECONV_XML_TEXT_DECORATOR
23683#define ECONV_XML_ATTR_CONTENT_DECORATOR RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR
23684#define ECONV_STATEFUL_DECORATOR_MASK RUBY_ECONV_STATEFUL_DECORATOR_MASK
23685#define ECONV_XML_ATTR_QUOTE_DECORATOR RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR
23686#define ECONV_DEFAULT_NEWLINE_DECORATOR RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR
23687#define ECONV_PARTIAL_INPUT RUBY_ECONV_PARTIAL_INPUT
23688#define ECONV_AFTER_OUTPUT RUBY_ECONV_AFTER_OUTPUT
23689#pragma GCC visibility pop
23690#define STR_NOEMBED FL_USER1
23691#define STR_SHARED FL_USER2
23692#undef rb_fstring_cstr
23693#pragma GCC visibility push(default)
23694#pragma GCC visibility pop
23695#pragma GCC visibility push(default)
23696#pragma GCC visibility pop
23697#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
23698#define rb_fstring_literal(str) rb_fstring_lit(str)
23699#define rb_fstring_enc_lit(str,enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
23700#define rb_fstring_enc_literal(str,enc) rb_fstring_enc_lit(str, enc)
23701#define rb_fstring_cstr(str) (__builtin_constant_p(str) ? rb_fstring_new((str), (long)strlen(str)) : (rb_fstring_cstr)(str))
23702#undef Check_Type
23703#define rb_raise_static(e,m) rb_raise_cstr_i((e), rb_str_new_static((m), rb_strlen_lit(m)))
23704#define rb_sys_fail_path(path) rb_sys_fail_path_in(RUBY_FUNCTION_NAME_STRING, path)
23705#define rb_syserr_fail_path(err,path) rb_syserr_fail_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23706#define rb_syserr_new_path(err,path) rb_syserr_new_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23707#define rb_warn_deprecated_to_remove_at(removal,...) rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
23708#define RUBY_VERSION_SINCE(major,minor) 0
23709#define RUBY_VERSION_BEFORE(major,minor) 0
23710#define RBIMPL_TODO0(x)
23711#define RBIMPL_TODO(message) RBIMPL_TODO0("TODO: " message)
23712#define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
23713#pragma GCC visibility push(default)
23714#pragma GCC visibility pop
23715#define INTERNAL_EVAL_H
23716#define id_signo ruby_static_id_signo
23717#define id_status ruby_static_id_status
23718#define INTERNAL_INITS_H
23719#define INTERNAL_OBJECT_H
23720#pragma GCC visibility push(default)
23721#pragma GCC visibility pop
23722#pragma GCC visibility push(default)
23723#pragma GCC visibility pop
23724#define INTERNAL_PARSE_H
23725#pragma GCC visibility push(default)
23726#pragma GCC visibility pop
23727#define INTERNAL_PROC_H
23728#pragma GCC visibility push(default)
23729#pragma GCC visibility pop
23730#define INTERNAL_RE_H
23731#pragma GCC visibility push(default)
23732#pragma GCC visibility pop
23733#define INTERNAL_SYMBOL_H
23734#undef rb_sym_intern_ascii_cstr
23735#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))
23736#define INTERNAL_THREAD_H
23737#define COVERAGE_INDEX_LINES 0
23738#define COVERAGE_INDEX_BRANCHES 1
23739#define COVERAGE_TARGET_LINES 1
23740#define COVERAGE_TARGET_BRANCHES 2
23741#define COVERAGE_TARGET_METHODS 4
23742#define COVERAGE_TARGET_ONESHOT_LINES 8
23743#define COVERAGE_TARGET_EVAL 16
23744#pragma GCC visibility push(default)
23745#pragma GCC visibility pop
23746#pragma GCC visibility push(default)
23747#pragma GCC visibility pop
23748#define INTERNAL_SANITIZERS_H
23749#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) NO_SANITIZE_ADDRESS(NOINLINE(x))
23750#undef NO_SANITIZE
23751#define NO_SANITIZE(x,y) COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Wattributes); __attribute__((__no_sanitize__(x))) y; COMPILER_WARNING_POP
23752#define __asan_poison_memory_region(x,y)
23753#define __asan_unpoison_memory_region(x,y)
23754#define __asan_region_is_poisoned(x,y) 0
23755#define __msan_allocated_memory(x,y) ((void)(x), (void)(y))
23756#define __msan_poison(x,y) ((void)(x), (void)(y))
23757#define __msan_unpoison(x,y) ((void)(x), (void)(y))
23758#define __msan_unpoison_string(x) ((void)(x))
23759#define VALGRIND_MAKE_MEM_DEFINED(p,n) 0
23760#define VALGRIND_MAKE_MEM_UNDEFINED(p,n) 0
23761#define INTERNAL_VARIABLE_H
23762#define CONSTANT_H
23763#define RUBY_ID_TABLE_H 1
23764#pragma GCC visibility push(default)
23765#pragma GCC visibility pop
23766#define RB_CONST_PRIVATE_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PRIVATE)
23767#define RB_CONST_PUBLIC_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PUBLIC)
23768#define RB_CONST_DEPRECATED_P(ce) ((ce)->flag & CONST_DEPRECATED)
23769#pragma GCC visibility push(default)
23770#pragma GCC visibility pop
23771#define ROBJECT_TRANSIENT_FLAG FL_USER2
23772#pragma GCC visibility push(default)
23773#pragma GCC visibility pop
23774#pragma GCC visibility push(default)
23775#pragma GCC visibility pop
23776#define RUBY_MJIT_H 1
23777#define RUBY_H 1
23778#define HAVE_RUBY_ATOMIC_H 1
23779#define HAVE_RUBY_DEBUG_H 1
23780#define HAVE_RUBY_DEFINES_H 1
23781#define HAVE_RUBY_ENCODING_H 1
23782#define HAVE_RUBY_FIBER_SCHEDULER_H 1
23783#define HAVE_RUBY_INTERN_H 1
23784#define HAVE_RUBY_IO_H 1
23785#define HAVE_RUBY_MEMORY_VIEW_H 1
23786#define HAVE_RUBY_MISSING_H 1
23787#define HAVE_RUBY_ONIGMO_H 1
23788#define HAVE_RUBY_ONIGURUMA_H 1
23789#define HAVE_RUBY_RACTOR_H 1
23790#define HAVE_RUBY_RANDOM_H 1
23791#define HAVE_RUBY_RE_H 1
23792#define HAVE_RUBY_REGEX_H 1
23793#define HAVE_RUBY_RUBY_H 1
23794#define HAVE_RUBY_ST_H 1
23795#define HAVE_RUBY_THREAD_H 1
23796#define HAVE_RUBY_THREAD_NATIVE_H 1
23797#define HAVE_RUBY_UTIL_H 1
23798#define HAVE_RUBY_VERSION_H 1
23799#define HAVE_RUBY_VM_H 1
23800#define MJIT_FUNC_STATE_P(jit_func) ((uintptr_t)(jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)
23801#pragma GCC visibility push(default)
23802#pragma GCC visibility pop
23803#define mjit_enabled true
23804#define YJIT_H 1
23805#define YJIT_STATS RUBY_DEBUG
23806#define RUBY_VM_H 1
23807#pragma GCC visibility push(default)
23808#pragma GCC visibility pop
23809#define RUBY_VM_CALLINFO_H
23810#define USE_DEBUG_COUNTER 0
23811#define RUBY_DEBUG_COUNTER_H 1
23812#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_ ##name,
23813#undef RB_DEBUG_COUNTER
23814#define RB_DEBUG_COUNTER_INC(type) ((void)0)
23815#define RB_DEBUG_COUNTER_INC_UNLESS(type,cond) (!!(cond))
23816#define RB_DEBUG_COUNTER_INC_IF(type,cond) (!!(cond))
23817#define RB_DEBUG_COUNTER_ADD(type,num) ((void)0)
23818#define RB_DEBUG_COUNTER_SETMAX(type,num) 0
23819#pragma GCC visibility push(default)
23820#pragma GCC visibility pop
23821#define INTERNAL_CLASS_H
23822#define RCLASS_EXT(c) ((rb_classext_t *)((char *)(c) + sizeof(struct RClass)))
23823#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
23824#define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
23825#define RCLASS_IVPTR(c) (RCLASS_EXT(c)->iv_ptr)
23826#define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl)
23827#define RCLASS_CC_TBL(c) (RCLASS_EXT(c)->cc_tbl)
23828#define RCLASS_CVC_TBL(c) (RCLASS_EXT(c)->cvc_tbl)
23829#define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_)
23830#define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class)
23831#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
23832#define RCLASS_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->subclass_entry)
23833#define RCLASS_MODULE_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->module_subclass_entry)
23834#define RCLASS_ALLOCATOR(c) (RCLASS_EXT(c)->allocator)
23835#define RCLASS_SUBCLASSES(c) (RCLASS_EXT(c)->subclasses)
23836#define RCLASS_SUPERCLASS_DEPTH(c) (RCLASS_EXT(c)->superclass_depth)
23837#define RCLASS_SUPERCLASSES(c) (RCLASS_EXT(c)->superclasses)
23838#define RICLASS_IS_ORIGIN FL_USER0
23839#define RCLASS_CLONED FL_USER1
23840#define RCLASS_SUPERCLASSES_INCLUDE_SELF FL_USER2
23841#define RICLASS_ORIGIN_SHARED_MTBL FL_USER3
23842#pragma GCC visibility push(default)
23843#pragma GCC visibility pop
23844#pragma GCC diagnostic push
23845#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23846#pragma GCC diagnostic pop
23847#pragma GCC diagnostic push
23848#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23849#pragma GCC diagnostic pop
23850#pragma GCC diagnostic push
23851#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23852#pragma GCC diagnostic pop
23853#define VM_CALL_ARGS_SPLAT (0x01 << VM_CALL_ARGS_SPLAT_bit)
23854#define VM_CALL_ARGS_BLOCKARG (0x01 << VM_CALL_ARGS_BLOCKARG_bit)
23855#define VM_CALL_FCALL (0x01 << VM_CALL_FCALL_bit)
23856#define VM_CALL_VCALL (0x01 << VM_CALL_VCALL_bit)
23857#define VM_CALL_ARGS_SIMPLE (0x01 << VM_CALL_ARGS_SIMPLE_bit)
23858#define VM_CALL_BLOCKISEQ (0x01 << VM_CALL_BLOCKISEQ_bit)
23859#define VM_CALL_KWARG (0x01 << VM_CALL_KWARG_bit)
23860#define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
23861#define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
23862#define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
23863#define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
23864#define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
23865#define VM_CALL_KW_SPLAT_MUT (0x01 << VM_CALL_KW_SPLAT_MUT_bit)
23866#define USE_EMBED_CI 1
23867#define CI_EMBED_TAG_bits 1
23868#define CI_EMBED_ARGC_bits 15
23869#define CI_EMBED_FLAG_bits 16
23870#define CI_EMBED_ID_bits 32
23871#define CI_EMBED_FLAG 0x01
23872#define CI_EMBED_ARGC_SHFT (CI_EMBED_TAG_bits)
23873#define CI_EMBED_ARGC_MASK ((((VALUE)1)<<CI_EMBED_ARGC_bits) - 1)
23874#define CI_EMBED_FLAG_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits)
23875#define CI_EMBED_FLAG_MASK ((((VALUE)1)<<CI_EMBED_FLAG_bits) - 1)
23876#define CI_EMBED_ID_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits)
23877#define CI_EMBED_ID_MASK ((((VALUE)1)<<CI_EMBED_ID_bits) - 1)
23878#define vm_ci_new(mid,flag,argc,kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23879#define vm_ci_new_runtime(mid,flag,argc,kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23880#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)
23881#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))
23882#define VM_CALLINFO_NOT_UNDER_GC IMEMO_FL_USER0
23883#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_, }
23884#define VM_CALLCACHE_UNMARKABLE FL_FREEZE
23885#define VM_CALLCACHE_ON_STACK FL_EXIVAR
23886#define vm_cc_empty() rb_vm_empty_cc()
23887#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, }
23888#define RUBY_DEBUG_H
23889#pragma GCC visibility push(default)
23890#define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
23891#define dp(v) ruby_debug_print_value(-1, 0, "", (v))
23892#define dpi(i) ruby_debug_print_id(-1, 0, "", (i))
23893#define dpn(n) ruby_debug_print_node(-1, 0, "", (n))
23894#pragma GCC visibility pop
23895#define USE_RUBY_DEBUG_LOG 0
23896#define ruby_debug_log(...) RB_GNUC_EXTENSION_BLOCK( RBIMPL_WARNING_PUSH(); RBIMPL_WARNING_IGNORED(-Wformat-zero-length); ruby_debug_log(__VA_ARGS__); RBIMPL_WARNING_POP())
23897#define _RUBY_DEBUG_LOG(...) ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__)
23898#define RUBY_DEBUG_LOG(...)
23899#define RUBY_DEBUG_LOG2(file,line,...)
23900#define RUBY_VM_EXEC_H
23901#define debugs
23902#define DEBUG_ENTER_INSN(insn)
23903#define DEBUG_END_INSN()
23904#define throwdebug if(0)ruby_debug_printf
23905#define USE_INSNS_COUNTER 0
23906#define LABEL(x) INSN_LABEL_ ##x
23907#define ELABEL(x) INSN_ELABEL_ ##x
23908#define LABEL_PTR(x) RB_GNUC_EXTENSION(&&LABEL(x))
23909#define INSN_ENTRY_SIG(insn) if (0) { ruby_debug_printf("exec: %s@(%"PRIdPTRDIFF", %"PRIdPTRDIFF")@%s:%u\n", #insn, (reg_pc - ISEQ_BODY(reg_cfp->iseq)->iseq_encoded), (reg_cfp->pc - ISEQ_BODY(reg_cfp->iseq)->iseq_encoded), RSTRING_PTR(rb_iseq_path(reg_cfp->iseq)), rb_iseq_line_no(reg_cfp->iseq, reg_pc - ISEQ_BODY(reg_cfp->iseq)->iseq_encoded)); } if (USE_INSNS_COUNTER) vm_insns_counter_count_insn(BIN(insn));
23910#define INSN_DISPATCH_SIG(insn)
23911#define INSN_ENTRY(insn) LABEL(insn): INSN_ENTRY_SIG(insn);
23912#define TC_DISPATCH(insn) INSN_DISPATCH_SIG(insn); RB_GNUC_EXTENSION_BLOCK(goto *(void const *)GET_CURRENT_INSN()); ;
23913#define END_INSN(insn) DEBUG_END_INSN(); TC_DISPATCH(insn);
23914#define INSN_DISPATCH() TC_DISPATCH(__START__) {
23915#define END_INSNS_DISPATCH() rb_bug("unknown insn: %"PRIdVALUE, GET_CURRENT_INSN()); }
23916#define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
23917#define START_OF_ORIGINAL_INSN(x) if (0) goto start_of_ ##x; start_of_ ##x:
23918#define DISPATCH_ORIGINAL_INSN(x) goto start_of_ ##x;
23919#define VM_SP_CNT(ec,sp) ((sp) - (ec)->vm_stack)
23920#define THROW_EXCEPTION(exc) do { ec->errinfo = (VALUE)(exc); EC_JUMP_TAG(ec, ec->tag->state); } while (0)
23921#define SCREG(r) (reg_ ##r)
23922#define VM_DEBUG_STACKOVERFLOW 0
23923#define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp,margin)
23924#define INSN_LABEL2(insn,name) INSN_LABEL_ ## insn ## _ ## name
23925#define INSN_LABEL(x) INSN_LABEL2(NAME_OF_CURRENT_INSN, x)
23926#define RUBY_INSNHELPER_H
23927#pragma GCC visibility push(default)
23928#pragma GCC visibility pop
23929#define COLLECT_USAGE_INSN(insn)
23930#define COLLECT_USAGE_OPERAND(insn,n,op)
23931#define COLLECT_USAGE_REGISTER(reg,s)
23932#define PUSH(x) (SET_SV(x), INC_SP(1))
23933#define TOPN(n) (*(GET_SP()-(n)-1))
23934#define POPN(n) (DEC_SP(n))
23935#define POP() (DEC_SP(1))
23936#define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
23937#define VM_REG_CFP (reg_cfp)
23938#define VM_REG_PC (VM_REG_CFP->pc)
23939#define VM_REG_SP (VM_REG_CFP->sp)
23940#define VM_REG_EP (VM_REG_CFP->ep)
23941#define RESTORE_REGS() do { VM_REG_CFP = ec->cfp; } while (0)
23942#define COLLECT_USAGE_REGISTER_HELPER(a,b,v) (v)
23943#define GET_PC() (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))
23944#define SET_PC(x) (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))
23945#define GET_CURRENT_INSN() (*GET_PC())
23946#define GET_OPERAND(n) (GET_PC()[(n)])
23947#define ADD_PC(n) (SET_PC(VM_REG_PC + (n)))
23948#define JUMP(dst) (SET_PC(VM_REG_PC + (dst)))
23949#define GET_CFP() (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))
23950#define GET_EP() (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))
23951#define SET_EP(x) (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))
23952#define GET_LEP() (VM_EP_LEP(GET_EP()))
23953#define GET_SP() (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))
23954#define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23955#define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23956#define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
23957#define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
23958#define GET_ISEQ() (GET_CFP()->iseq)
23959#define GET_PREV_EP(ep) ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))
23960#define GET_SELF() (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))
23961#define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
23962#define SETUP_CANARY(cond) if (cond) {} else {}
23963#define CHECK_CANARY(cond,insn) if (cond) {(void)(insn);}
23964#define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state)
23965#define INC_GLOBAL_CVAR_STATE() (++ruby_vm_global_cvar_state)
23966#define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
23967#define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
23968#define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
23969#define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
23970#define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
23971#define RUBY_RACTOR_H 1
23972#pragma GCC visibility push(default)
23973#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free)
23974#pragma GCC visibility pop
23975#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)
23976#define RACTOR_CHECK_MODE (VM_CHECK_MODE || RUBY_DEBUG) && (SIZEOF_UINT64_T == SIZEOF_VALUE)
23977#pragma GCC visibility push(default)
23978#pragma GCC visibility pop
23979#define rb_ractor_set_current_ec(cr,ec) rb_ractor_set_current_ec_(cr, ec, __FILE__, __LINE__)
23980#define rb_ractor_confirm_belonging(obj) obj
23981#define RUBY_VM_SYNC_H
23982#define LOCATION_ARGS void
23983#define LOCATION_PARAMS
23984#define APPEND_LOCATION_ARGS
23985#define APPEND_LOCATION_PARAMS
23986#define RB_VM_LOCKED_P() rb_vm_locked_p()
23987#define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
23988#define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
23989#define RB_VM_LOCK_ENTER_CR_LEV(cr,levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
23990#define RB_VM_LOCK_LEAVE_CR_LEV(cr,levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
23991#define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
23992#define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
23993#define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
23994#define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
23995#define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
23996#define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
23997#define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
23998#define ASSERT_vm_locking()
23999#define ASSERT_vm_unlocking()
24000#define BUILTIN_H_INCLUDED
24001#define RB_BUILTIN_FUNCTION(_i,_name,_fname,_arity,_compiler) { .name = _i < 0 ? NULL : #_name, .func_ptr = (void *)_fname, .argc = _arity, .index = _i, .compiler = _compiler, }
24002#define _PROBES_H
24003#define DTRACE_PROBES_DISABLED 1
24004#define RUBY_DTRACE_METHOD_ENTRY_ENABLED() 0
24005#define RUBY_DTRACE_METHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
24006#define RUBY_DTRACE_METHOD_RETURN_ENABLED() 0
24007#define RUBY_DTRACE_METHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
24008#define RUBY_DTRACE_CMETHOD_ENTRY_ENABLED() 0
24009#define RUBY_DTRACE_CMETHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
24010#define RUBY_DTRACE_CMETHOD_RETURN_ENABLED() 0
24011#define RUBY_DTRACE_CMETHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
24012#define RUBY_DTRACE_REQUIRE_ENTRY_ENABLED() 0
24013#define RUBY_DTRACE_REQUIRE_ENTRY(rquiredfile,filename,lineno) do {} while (0)
24014#define RUBY_DTRACE_REQUIRE_RETURN_ENABLED() 0
24015#define RUBY_DTRACE_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
24016#define RUBY_DTRACE_FIND_REQUIRE_ENTRY_ENABLED() 0
24017#define RUBY_DTRACE_FIND_REQUIRE_ENTRY(requiredfile,filename,lineno) do {} while (0)
24018#define RUBY_DTRACE_FIND_REQUIRE_RETURN_ENABLED() 0
24019#define RUBY_DTRACE_FIND_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
24020#define RUBY_DTRACE_LOAD_ENTRY_ENABLED() 0
24021#define RUBY_DTRACE_LOAD_ENTRY(loadedfile,filename,lineno) do {} while (0)
24022#define RUBY_DTRACE_LOAD_RETURN_ENABLED() 0
24023#define RUBY_DTRACE_LOAD_RETURN(loadedfile,filename,lineno) do {} while (0)
24024#define RUBY_DTRACE_RAISE_ENABLED() 0
24025#define RUBY_DTRACE_RAISE(classname,filename,lineno) do {} while (0)
24026#define RUBY_DTRACE_OBJECT_CREATE_ENABLED() 0
24027#define RUBY_DTRACE_OBJECT_CREATE(classname,filename,lineno) do {} while (0)
24028#define RUBY_DTRACE_ARRAY_CREATE_ENABLED() 0
24029#define RUBY_DTRACE_ARRAY_CREATE(length,filename,lineno) do {} while (0)
24030#define RUBY_DTRACE_HASH_CREATE_ENABLED() 0
24031#define RUBY_DTRACE_HASH_CREATE(length,filename,lineno) do {} while (0)
24032#define RUBY_DTRACE_STRING_CREATE_ENABLED() 0
24033#define RUBY_DTRACE_STRING_CREATE(length,filename,lineno) do {} while (0)
24034#define RUBY_DTRACE_SYMBOL_CREATE_ENABLED() 0
24035#define RUBY_DTRACE_SYMBOL_CREATE(str,filename,lineno) do {} while (0)
24036#define RUBY_DTRACE_PARSE_BEGIN_ENABLED() 0
24037#define RUBY_DTRACE_PARSE_BEGIN(sourcefile,lineno) do {} while (0)
24038#define RUBY_DTRACE_PARSE_END_ENABLED() 0
24039#define RUBY_DTRACE_PARSE_END(sourcefile,lineno) do {} while (0)
24040#define RUBY_DTRACE_INSN_ENABLED() 0
24041#define RUBY_DTRACE_INSN(insns_name) do {} while (0)
24042#define RUBY_DTRACE_INSN_OPERAND_ENABLED() 0
24043#define RUBY_DTRACE_INSN_OPERAND(val,insns_name) do {} while (0)
24044#define RUBY_DTRACE_GC_MARK_BEGIN_ENABLED() 0
24045#define RUBY_DTRACE_GC_MARK_BEGIN() do {} while (0)
24046#define RUBY_DTRACE_GC_MARK_END_ENABLED() 0
24047#define RUBY_DTRACE_GC_MARK_END() do {} while (0)
24048#define RUBY_DTRACE_GC_SWEEP_BEGIN_ENABLED() 0
24049#define RUBY_DTRACE_GC_SWEEP_BEGIN() do {} while (0)
24050#define RUBY_DTRACE_GC_SWEEP_END_ENABLED() 0
24051#define RUBY_DTRACE_GC_SWEEP_END() do {} while (0)
24052#define RUBY_PROBES_HELPER_H
24053#pragma GCC visibility push(default)
24054#pragma GCC visibility pop
24055#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)
24056#define RUBY_DTRACE_METHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_ENTRY, ec, klass, id)
24057#define RUBY_DTRACE_METHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_RETURN, ec, klass, id)
24058#define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_ENTRY, ec, klass, id)
24059#define RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_RETURN, ec, klass, id)
24060#pragma GCC diagnostic push
24061#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24062#pragma GCC diagnostic pop
24063#define INTERNAL_COMPAR_H
24064#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
24065#define CMP_OPTIMIZABLE(type) BASIC_OP_UNREDEFINED_P(BOP_CMP, type ##_REDEFINED_OP_FLAG)
24066#define OPTIMIZED_CMP(a,b) ((FIXNUM_P(a) && FIXNUM_P(b) && CMP_OPTIMIZABLE(INTEGER)) ? (((long)a > (long)b) ? 1 : ((long)a < (long)b) ? -1 : 0) : (STRING_P(a) && STRING_P(b) && CMP_OPTIMIZABLE(STRING)) ? rb_str_cmp(a, b) : (RB_FLOAT_TYPE_P(a) && RB_FLOAT_TYPE_P(b) && CMP_OPTIMIZABLE(FLOAT)) ? rb_float_cmp(a, b) : rb_cmpint(rb_funcallv(a, id_cmp, 1, &b), a, b))
24067#define INTERNAL_HASH_H
24068#define RHASH_AR_TABLE_MAX_SIZE SIZEOF_VALUE
24069#define RHASH_LEV_MASK (FL_USER13 | FL_USER14 | FL_USER15 | FL_USER16 | FL_USER17 | FL_USER18 | FL_USER19)
24070#define RHASH(obj) ((struct RHash *)(obj))
24071#pragma GCC visibility push(default)
24072#pragma GCC visibility pop
24073#pragma GCC visibility push(default)
24074#define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h, __FILE__, __LINE__)
24075#pragma GCC visibility pop
24076#define INTERNAL_NUMERIC_H
24077#define INTERNAL_BIGNUM_H
24078#define BDIGIT unsigned int
24079#define SIZEOF_BDIGIT SIZEOF_INT
24080#define BDIGIT_DBL unsigned LONG_LONG
24081#define BDIGIT_DBL_SIGNED LONG_LONG
24082#define PRI_BDIGIT_PREFIX ""
24083#define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
24084#define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
24085#define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
24086#define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
24087#define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
24088#define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
24089#define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
24090#define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
24091#define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
24092#define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
24093#define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
24094#define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
24095#define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
24096#define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
24097#define RBIGNUM(obj) ((struct RBignum *)(obj))
24098#define BIGNUM_SIGN_BIT FL_USER1
24099#define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
24100#define BIGNUM_EMBED_LEN_NUMBITS 3
24101#define BIGNUM_EMBED_LEN_MASK (~(~(VALUE)0U << BIGNUM_EMBED_LEN_NUMBITS) << BIGNUM_EMBED_LEN_SHIFT)
24102#define BIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
24103#define BIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*RBIMPL_RVALUE_EMBED_LEN_MAX/SIZEOF_ACTUAL_BDIGIT)
24104#pragma GCC visibility push(default)
24105#pragma GCC visibility pop
24106#pragma GCC visibility push(default)
24107#pragma GCC visibility pop
24108#define INTERNAL_BITS_H
24109#define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
24110#define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
24111#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))))
24112#define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
24113#define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
24114#define MUL_OVERFLOW_P(a,b) __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
24115#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)))
24116#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); })
24117#define MUL_OVERFLOW_LONG_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
24118#define MUL_OVERFLOW_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
24119#define MUL_OVERFLOW_INT_P(a,b) MUL_OVERFLOW_P(a, b)
24120#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)))
24121#define swap16 ruby_swap16
24122#define swap32 ruby_swap32
24123#define swap64 ruby_swap64
24124#define INTERNAL_FIXNUM_H
24125#define DLONG int128_t
24126#define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
24127#define ROUND_TO(mode,even,up,down) ((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even : (mode) == RUBY_NUM_ROUND_HALF_UP ? up : down)
24128#define ROUND_FUNC(mode,name) ROUND_TO(mode, name ##_half_even, name ##_half_up, name ##_half_down)
24129#define ROUND_CALL(mode,name,args) ROUND_TO(mode, name ##_half_even args, name ##_half_up args, name ##_half_down args)
24130#define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP
24131#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
24132#define roomof(x,y) (((x) + (y) - 1) / (y))
24133#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
24134#define RFLOAT(obj) ((struct RFloat *)(obj))
24135#define rb_float_value rb_float_value_inline
24136#define rb_float_new rb_float_new_inline
24137#pragma GCC visibility push(default)
24138#pragma GCC visibility pop
24139#pragma GCC visibility push(default)
24140#pragma GCC visibility pop
24141#define INTERNAL_RANDOM_H
24142#define INTERNAL_STRUCT_H
24143#define RSTRUCT(obj) ((struct RStruct *)(obj))
24144#define RSTRUCT_LEN internal_RSTRUCT_LEN
24145#define RSTRUCT_SET internal_RSTRUCT_SET
24146#define RSTRUCT_GET internal_RSTRUCT_GET
24147#pragma GCC diagnostic push
24148#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24149#pragma GCC diagnostic pop
24150#define RUBY_TOPLEVEL_VARIABLE_H
24151#define BIN(n) YARVINSN_ ##n
24152#define ASSERT_VM_INSTRUCTION_SIZE(array) STATIC_ASSERT(numberof_ ##array, numberof(array) == VM_INSTRUCTION_SIZE)
24153#define vm_check_canary(ec,sp)
24154#define vm_check_frame(a,b,c,d)
24155#define vm_push_frame_debug_counter_inc(ec,cfp,t)
24156#pragma GCC diagnostic push
24157#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24158#pragma GCC diagnostic pop
24159#pragma GCC diagnostic push
24160#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24161#pragma GCC diagnostic pop
24162#pragma GCC diagnostic push
24163#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24164#pragma GCC diagnostic pop
24165#pragma GCC diagnostic push
24166#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24167#pragma GCC diagnostic pop
24168#pragma GCC diagnostic push
24169#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24170#pragma GCC diagnostic pop
24171#define ractor_incidental_shareable_p(cond,val) (!(cond) || rb_ractor_shareable_p(val))
24172#define ractor_object_incidental_shareable_p(obj,val) ractor_incidental_shareable_p(rb_ractor_shareable_p(obj), val)
24173#define ATTR_INDEX_NOT_SET (attr_index_t)-1
24174#pragma GCC diagnostic push
24175#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24176#pragma GCC diagnostic pop
24177#pragma GCC diagnostic push
24178#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24179#pragma GCC diagnostic pop
24180#pragma GCC diagnostic push
24181#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24182#pragma GCC diagnostic pop
24183#pragma GCC diagnostic push
24184#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24185#pragma GCC diagnostic pop
24186#pragma GCC diagnostic push
24187#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24188#pragma GCC diagnostic pop
24189#pragma GCC diagnostic push
24190#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24191#pragma GCC diagnostic pop
24192#define EQ_UNREDEFINED_P(t) BASIC_OP_UNREDEFINED_P(BOP_EQ, t ##_REDEFINED_OP_FLAG)
24193#undef EQ_UNREDEFINED_P
24194#define CHECK_CMP_NAN(a,b)
24195#define KW_SPECIFIED_BITS_MAX (32-1)
24196#define USE_OPT_HIST 0
24197#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)))
24198#pragma GCC diagnostic push
24199#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24200#pragma GCC diagnostic pop
24201#pragma GCC diagnostic push
24202#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24203#pragma GCC diagnostic pop
24204#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; }
24205#pragma GCC diagnostic push
24206#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24207#pragma GCC diagnostic pop
24208#pragma GCC diagnostic push
24209#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24210#pragma GCC diagnostic pop
24211#define mexp_search_method vm_search_method_wrap
24212#define mexp_search_super vm_search_super_method
24213#define mexp_search_invokeblock vm_search_invokeblock
24214#define id_cmp idCmp
24215#undef id_cmp
24216#define IMEMO_CONST_CACHE_SHAREABLE IMEMO_FL_USER0
24217#pragma GCC diagnostic push
24218#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24219#pragma GCC diagnostic pop
24220#pragma GCC diagnostic push
24221#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24222#pragma GCC diagnostic pop
24223#pragma GCC diagnostic push
24224#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24225#pragma GCC diagnostic pop
24226#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_ptr, (val)); } } while (0)
24227#undef VM_TRACE_HOOK
24228#define id_mesg idMesg
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(klass, mid, func, arity)
Defines klass#mid.
Definition: cxxanyargs.hpp:670
#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_module_function(klass, mid, func, arity)
Defines klass#mid and makes it a module function.
Definition: cxxanyargs.hpp:689
#define rb_define_private_method(klass, mid, func, arity)
Defines klass#mid and makes it private.
Definition: cxxanyargs.hpp:677
#define rb_define_global_function(mid, func, arity)
Defines rb_mKernel #mid.
Definition: cxxanyargs.hpp:695
VALUE rb_float_new_in_heap(double d)
Identical to rb_float_new(), except it does not generate Flonums.
Definition: numeric.c:1014
uint32_t rb_event_flag_t
Represents event(s).
Definition: event.h:103
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
@ RUBY_FL_DUPPED
Definition: fl_type.h:439
void rb_obj_freeze_inline(VALUE obj)
Prevents further modifications to the given object.
Definition: variable.c:1556
ruby_fl_type
The flags.
Definition: fl_type.h:193
@ RUBY_FL_PROMOTED1
This flag has something to do with our garbage collector.
Definition: fl_type.h:240
@ 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
VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod)
Identical to rb_class_instance_methods(), except it returns names of methods that are protected only.
Definition: class.c:1819
void rb_include_module(VALUE klass, VALUE module)
Includes a module to a class.
Definition: class.c:1090
VALUE rb_refinement_new(void)
Creates a new, anonymous refinement.
Definition: class.c:985
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:888
VALUE rb_class_new(VALUE super)
Creates a new, anonymous class.
Definition: class.c:325
VALUE rb_singleton_class_clone(VALUE obj)
Clones a singleton class.
Definition: class.c:572
void rb_extend_object(VALUE obj, VALUE mod)
Extend the object with the module.
Definition: eval.c:1689
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:1345
VALUE rb_class_subclasses(VALUE klass)
Queries the class's direct descendants.
Definition: class.c:1599
VALUE rb_singleton_class(VALUE obj)
Finds or creates the singleton class of the passed object.
Definition: class.c:2201
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
Definition: class.c:920
VALUE rb_class_attached_object(VALUE klass)
Returns the attached object for a singleton class.
Definition: class.c:1622
VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj)
Identical to rb_class_instance_methods(), except it returns names of singleton methods instead of ins...
Definition: class.c:1996
VALUE rb_module_new(void)
Creates a new, anonymous module.
Definition: class.c:979
VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod)
Generates an array of symbols, which are the list of method names defined in the passed class.
Definition: class.c:1804
void rb_check_inheritable(VALUE super)
Asserts that the given class can derive a child class.
Definition: class.c:310
VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod)
Identical to rb_class_instance_methods(), except it returns names of methods that are public only.
Definition: class.c:1857
VALUE rb_define_module(const char *name)
Defines a top-level module.
Definition: class.c:998
VALUE rb_define_module_id_under(VALUE outer, ID id)
Identical to rb_define_module_under(), except it takes the name in ID instead of C's string.
Definition: class.c:1028
void rb_singleton_class_attached(VALUE klass, VALUE obj)
Attaches a singleton class to its corresponding object.
Definition: class.c:637
void rb_freeze_singleton_class(VALUE klass)
This is an implementation detail of RB_OBJ_FREEZE().
Definition: class.c:2167
VALUE rb_mod_included_modules(VALUE mod)
Queries the list of included modules.
Definition: class.c:1417
VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super)
Identical to rb_define_class_under(), except it takes the name in ID instead of C's string.
Definition: class.c:926
VALUE rb_mod_ancestors(VALUE mod)
Queries the module's ancestors.
Definition: class.c:1485
VALUE rb_mod_include_p(VALUE child, VALUE parent)
Queries if the passed module is included by the module.
Definition: class.c:1453
VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod)
Identical to rb_class_instance_methods(), except it returns names of methods that are private only.
Definition: class.c:1842
VALUE rb_mod_init_copy(VALUE clone, VALUE orig)
The comment that comes with this function says :nodoc:.
Definition: class.c:463
VALUE rb_define_module_under(VALUE outer, const char *name)
Defines a module under the namespace of outer.
Definition: class.c:1022
VALUE rb_define_module_id(ID id)
This is a very badly designed API that creates an anonymous module.
Definition: class.c:992
VALUE rb_define_class_id(ID id, VALUE super)
This is a very badly designed API that creates an anonymous class.
Definition: class.c:858
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
Definition: class.c:2249
VALUE rb_extract_keywords(VALUE *orighash)
Splits a hash into two.
Definition: class.c:2310
void rb_need_block(void)
Declares that the current method needs a block.
Definition: eval.c:885
void rb_define_attr(VALUE klass, const char *name, int read, int write)
Defines public accessor method(s) for an attribute.
Definition: class.c:2255
void rb_undef_method(VALUE klass, const char *name)
Defines an undef of a method.
Definition: class.c:2073
int rb_keyword_given_p(void)
Determines if the current method is given a keyword argument.
Definition: eval.c:877
int rb_block_given_p(void)
Determines if the current method is given a block.
Definition: eval.c:864
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values)
Keyword argument deconstructor.
Definition: class.c:2328
void ruby_stop(int ex)
Calls ruby_cleanup() and exits the process.
Definition: eval.c:298
int ruby_exec_node(void *n)
Identical to ruby_run_node(), except it returns an opaque execution status.
Definition: eval.c:334
int ruby_setup(void)
Initializes the VM and builtin libraries.
Definition: eval.c:66
void ruby_finalize(void)
Runs the VM finalization processes.
Definition: eval.c:172
void ruby_script(const char *name)
Sets the current script name to this value.
Definition: ruby.c:2594
void ruby_set_argv(int argc, char **argv)
Sets argv that ruby understands.
Definition: ruby.c:2709
void ruby_set_script_name(VALUE name)
Sets the current script name to this value.
Definition: ruby.c:2607
int ruby_cleanup(int ex)
Destructs the VM.
Definition: eval.c:180
size_t ruby_stack_length(VALUE **topnotch)
Queries what Ruby thinks is the machine stack.
Definition: gc.c:6449
int ruby_stack_check(void)
Checks for stack overflow.
Definition: gc.c:6489
void ruby_init_loadpath(void)
Sets up $LOAD_PATH.
Definition: ruby.c:634
void * ruby_process_options(int argc, char **argv)
Identical to ruby_options(), except it raises ruby-level exceptions on failure.
Definition: ruby.c:2724
void ruby_prog_init(void)
Defines built-in variables.
Definition: ruby.c:2677
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:469
void rb_notimplement(void)
Definition: error.c:3191
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:3327
rb_warning_category_t
Warning categories.
Definition: error.h:43
@ 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_eLocalJumpError
LocalJumpError exception.
Definition: eval.c:49
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:421
void rb_raise(VALUE exc, const char *fmt,...)
Exception entry point.
Definition: error.c:3148
int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent)
Checks for the domestic relationship between the two.
Definition: error.c:1031
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:363
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:453
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:3341
VALUE rb_rescue2(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2,...)
An equivalent of rescue clause.
Definition: eval.c:893
VALUE rb_eNotImpError
NotImplementedError exception.
Definition: error.c:1101
VALUE rb_eScriptError
ScriptError exception.
Definition: error.c:1107
int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type)
Checks if the given object is of given kind.
Definition: error.c:1041
void rb_syserr_fail(int e, const char *mesg)
Raises appropriate exception that represents a C errno.
Definition: error.c:3260
VALUE rb_eKeyError
KeyError exception.
Definition: error.c:1094
void rb_bug(const char *fmt,...)
Interpreter panic switch.
Definition: error.c:794
void rb_iter_break(void)
Breaks from a block.
Definition: vm.c:1901
VALUE rb_cNameErrorMesg
NameError::Message class.
Definition: error.c:1103
VALUE rb_eSystemExit
SystemExit exception.
Definition: error.c:1084
void rb_sys_fail(const char *mesg)
Converts a C errno into a Ruby exception, then raises it.
Definition: error.c:3272
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:14566
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:3409
VALUE rb_eIOError
IOError exception.
Definition: io.c:182
VALUE rb_eStandardError
StandardError exception.
Definition: error.c:1088
VALUE rb_mErrno
Errno module.
Definition: error.c:1112
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:3254
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:3348
void rb_set_errinfo(VALUE err)
Sets the current exception ($!) to the given value.
Definition: eval.c:1876
VALUE rb_eRegexpError
RegexpError exception.
Definition: re.c:32
VALUE rb_eFrozenError
FrozenError exception.
Definition: error.c:1090
VALUE rb_eNoMemError
NoMemoryError exception.
Definition: error.c:1102
VALUE rb_eRangeError
RangeError exception.
Definition: error.c:1095
VALUE rb_eLoadError
LoadError exception.
Definition: error.c:1109
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:3266
VALUE rb_eTypeError
TypeError exception.
Definition: error.c:1091
VALUE rb_eEOFError
EOFError exception.
Definition: io.c:181
VALUE rb_eNoMatchingPatternError
NoMatchingPatternError exception.
Definition: error.c:1104
VALUE rb_vrescue2(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*r_proc)(VALUE, VALUE), VALUE data2, va_list ap)
Identical to rb_rescue2(), except it takes va_list instead of variadic number of arguments.
Definition: eval.c:904
void rb_fatal(const char *fmt,...)
Raises the unsung "fatal" exception.
Definition: error.c:3199
VALUE rb_eEncCompatError
Encoding::CompatibilityError exception.
Definition: error.c:1098
void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg)
Raises appropriate exception using the parameters.
Definition: io.c:14560
void rb_iter_break_value(VALUE val)
Identical to rb_iter_break(), except it additionally takes the "value" of this breakage.
Definition: vm.c:1907
rb_io_wait_readwrite
for rb_readwrite_sys_fail first argument
Definition: error.h:57
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:384
VALUE rb_eFatal
fatal exception.
Definition: error.c:1087
VALUE rb_eInterrupt
Interrupt exception.
Definition: error.c:1085
VALUE rb_eNameError
NameError exception.
Definition: error.c:1096
VALUE rb_eNoMethodError
NoMethodError exception.
Definition: error.c:1099
VALUE rb_eRuntimeError
RuntimeError exception.
Definition: error.c:1089
VALUE * rb_ruby_verbose_ptr(void)
This is an implementation detail of ruby_verbose.
Definition: vm.c:4084
void * rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type)
Identical to rb_typeddata_is_kind_of(), except it raises exceptions instead of returning false.
Definition: error.c:1058
VALUE rb_eStopIteration
StopIteration exception.
Definition: enumerator.c:173
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:411
VALUE rb_eNoMatchingPatternKeyError
NoMatchingPatternKeyError exception.
Definition: error.c:1105
VALUE rb_eArgError
ArgumentError exception.
Definition: error.c:1092
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:822
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:374
VALUE rb_eException
Mother of all exceptions.
Definition: error.c:1083
VALUE rb_eIndexError
IndexError exception.
Definition: error.c:1093
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:964
VALUE * rb_ruby_debug_ptr(void)
This is an implementation detail of ruby_debug.
Definition: vm.c:4091
VALUE rb_ensure(VALUE(*b_proc)(VALUE), VALUE data1, VALUE(*e_proc)(VALUE), VALUE data2)
An equivalent to ensure clause.
Definition: eval.c:993
VALUE rb_errinfo(void)
This is the same as $! in Ruby.
Definition: eval.c:1870
VALUE rb_eSysStackError
SystemStackError exception.
Definition: eval.c:50
VALUE rb_eSyntaxError
SyntaxError exception.
Definition: error.c:1108
VALUE rb_eEncodingError
EncodingError exception.
Definition: error.c:1097
VALUE rb_syserr_new(int err, const char *msg)
Creates an exception object that represents the given C errno.
Definition: error.c:3246
VALUE rb_eSecurityError
SecurityError exception.
Definition: error.c:1100
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:3278
void rb_unexpected_type(VALUE x, int t)
Fails with the given object's type incompatibility to the type.
Definition: error.c:1021
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:3334
VALUE rb_eThreadError
ThreadError exception.
Definition: eval.c:882
void rb_exit(int status)
Terminates the current execution context.
Definition: process.c:4510
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:998
VALUE rb_eSystemCallError
SystemCallError exception.
Definition: error.c:1111
void rb_warning(const char *fmt,...)
Issues a warning.
Definition: error.c:442
VALUE rb_eSignal
SignalException exception.
Definition: error.c:1086
VALUE rb_cClass
Class class.
Definition: object.c:54
VALUE rb_cRational
Rational class.
Definition: rational.c:47
VALUE rb_cUnboundMethod
UnboundMethod class.
Definition: proc.c:49
VALUE rb_cTime
Time class.
Definition: time.c:672
VALUE rb_class_get_superclass(VALUE klass)
Returns the superclass of a class.
Definition: object.c:2013
VALUE rb_cDir
Dir class.
Definition: dir.c:458
VALUE rb_mKernel
Kernel module.
Definition: object.c:51
VALUE rb_obj_reveal(VALUE obj, VALUE klass)
Make a hidden object visible again.
Definition: object.c:93
VALUE rb_cComplex
Complex class.
Definition: complex.c:38
VALUE rb_cArray
Array class.
Definition: array.c:40
VALUE rb_cObject
Documented in include/ruby/internal/globals.h.
VALUE rb_mProcess
Process module.
Definition: process.c:8770
VALUE rb_mMath
Math module.
Definition: math.c:29
VALUE rb_cIO
IO class.
Definition: io.c:180
VALUE rb_mEnumerable
Enumerable module.
Definition: enum.c:27
VALUE rb_cMatch
MatchData class.
Definition: re.c:960
VALUE rb_cStruct
Struct class.
Definition: struct.c:34
VALUE rb_cEnumerator
Enumerator class.
Definition: enumerator.c:158
VALUE rb_cRefinement
Refinement class.
Definition: object.c:55
VALUE rb_cInteger
Module class.
Definition: numeric.c:192
VALUE rb_obj_hide(VALUE obj)
Make the object invisible from Ruby code.
Definition: object.c:84
VALUE rb_cNilClass
NilClass class.
Definition: object.c:57
VALUE rb_stdin
STDIN constant.
Definition: io.c:194
VALUE rb_cStat
File::Stat class.
Definition: file.c:178
VALUE rb_cBinding
Binding class.
Definition: proc.c:51
VALUE rb_cRegexp
Regexp class.
Definition: re.c:2544
VALUE rb_mGC
GC module.
Definition: gc.c:1209
VALUE rb_cHash
Hash class.
Definition: hash.c:94
VALUE rb_stderr
STDERR constant.
Definition: io.c:194
VALUE rb_cFalseClass
FalseClass class.
Definition: object.c:59
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_obj_class(VALUE obj)
Queries the class of an object.
Definition: object.c:190
VALUE rb_cEncoding
Encoding class.
VALUE rb_cSymbol
Sumbol class.
Definition: string.c:80
VALUE rb_cBasicObject
BasicObject class.
Definition: object.c:50
VALUE rb_cThread
Thread class.
Definition: vm.c:466
VALUE rb_cModule
Module class.
Definition: object.c:53
VALUE rb_cRange
Range class.
Definition: range.c:31
VALUE rb_mFileTest
FileTest module.
Definition: file.c:177
double rb_num2dbl(VALUE num)
Converts an instance of rb_cNumeric into C's double.
Definition: object.c:3619
VALUE rb_mWaitReadable
IO::WaitReadable module.
Definition: io.c:184
VALUE rb_mWaitWritable
IO::WaitReadable module.
Definition: io.c:185
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:176
VALUE rb_cTrueClass
TrueClass class.
Definition: object.c:58
VALUE rb_stdout
STDOUT constant.
Definition: io.c:194
VALUE rb_cString
String class.
Definition: string.c:79
VALUE rb_cMethod
Method class.
Definition: proc.c:50
VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type)
Fills common fields in the object.
Definition: object.c:102
void ruby_init(void)
Calls ruby_setup() and check error.
Definition: eval.c:99
void ruby_show_copyright(void)
Prints the copyright notice of the CRuby interpreter to stdout.
Definition: version.c:179
void ruby_sysinit(int *argc, char ***argv)
Initializes the process for libruby.
Definition: ruby.c:2777
void ruby_show_version(void)
Prints the version information of the CRuby interpreter to stdout.
Definition: version.c:165
int ruby_executable_node(void *n, int *status)
Checks the return value of ruby_options().
Definition: eval.c:304
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:1882
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:1861
VALUE rb_eval_string(const char *str)
Evaluates the given string.
Definition: vm_eval.c:1849
void rb_remove_method(VALUE klass, const char *name)
Removes a method.
Definition: vm_method.c:1587
VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker)
Raises rb_eNotImpError.
Definition: vm_method.c:368
#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
unsigned long rb_num2uint(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: numeric.c:3296
long rb_fix2int(VALUE num)
Identical to rb_num2int().
Definition: numeric.c:3290
long rb_num2int(VALUE num)
Converts an instance of rb_cNumeric into C's long.
Definition: numeric.c:3284
unsigned long rb_fix2uint(VALUE num)
Identical to rb_num2uint().
Definition: numeric.c:3302
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.
VALUE rb_ull2inum(unsigned LONG_LONG num)
Converts a C's unsigned long long into an instance of rb_cInteger.
VALUE rb_ll2inum(LONG_LONG num)
Converts a C's long long into an instance of rb_cInteger.
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:2303
rb_block_call_func * rb_block_call_func_t
Shorthand type that represents an iterator-written-in-C function pointer.
Definition: iterator.h:88
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:2278
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:1570
static int rb_long2int_inline(long n)
Checks if int can hold the given integer.
Definition: long.h:135
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:3211
long rb_num2long(VALUE num)
Converts an instance of rb_cNumeric into C's long.
Definition: numeric.c:3136
unsigned long rb_num2ulong(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned long.
Definition: numeric.c:3205
static unsigned long rb_fix2ulong(VALUE x)
Converts a Fixnum into C's unsigned long.
Definition: long.h:252
static long rb_array_len(VALUE a)
Queries the length of the array.
Definition: rarray.h:317
ruby_rarray_consts
This is an enum because GDB wants it (rather than a macro).
Definition: rarray.h:163
ruby_rvalue_flags
This is an enum because GDB wants it (rather than a macro).
Definition: rbasic.h:53
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
VALUE rb_str_export_locale(VALUE obj)
Identical to rb_str_export(), except it converts into the locale encoding instead.
Definition: string.c:1307
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:2616
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:2500
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:1301
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:2511
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:1609
VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v)
Resembles Struct#[]=.
Definition: struct.c:1292
VALUE rb_struct_size(VALUE st)
Returns the number of struct members.
Definition: struct.c:1545
VALUE rb_struct_aref(VALUE st, VALUE k)
Resembles Struct#[].
Definition: struct.c:1254
short rb_num2short(VALUE num)
Converts an instance of rb_cNumeric into C's short.
Definition: numeric.c:3340
unsigned short rb_num2ushort(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned short.
Definition: numeric.c:3358
short rb_fix2short(VALUE num)
Identical to rb_num2short().
Definition: numeric.c:3349
unsigned short rb_fix2ushort(VALUE num)
Identical to rb_num2ushort().
Definition: numeric.c:3368
static VALUE rb_special_const_p(VALUE obj)
Identical to RB_SPECIAL_CONST_P, except it returns a VALUE.
ruby_special_consts
special constants - i.e.
@ RUBY_SPECIAL_SHIFT
Least significant 8 bits are reserved.
@ RUBY_FIXNUM_FLAG
Flag to denote a fixnum.
@ RUBY_FLONUM_MASK
Bit mask detecting a flonum.
@ RUBY_FLONUM_FLAG
Flag to denote a flonum.
@ RUBY_SYMBOL_FLAG
Flag to denote a static symbol.
@ RUBY_IMMEDIATE_MASK
Bit mask detecting special consts.
Ruby's array.
Definition: rarray.h:176
union RArray::@45 as
Array's specific fields.
struct RBasic basic
Basic part, including flags and class.
Definition: rarray.h:179
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
Definition: class.h:62
Definition: rdata.h:124
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
Definition: rdata.h:147
void * data
Pointer to the actual C level struct that you want to wrap.
Definition: rdata.h:150
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
Definition: rdata.h:138
struct RBasic basic
Basic part, including flags and class.
Definition: rdata.h:127
Ruby's File and IO.
Definition: rfile.h:35
struct RBasic basic
Basic part, including flags and class.
Definition: rfile.h:38
struct rb_io_t * fptr
IO's specific fields.
Definition: rfile.h:41
Ruby's ordinal objects.
Definition: robject.h:94
struct RObject::@48::@49 heap
Object that use separated memory region for instance variables use this pattern.
struct RBasic basic
Basic part, including flags and class.
Definition: robject.h:97
VALUE * ivptr
Pointer to a C array that holds instance variables.
Definition: robject.h:108
struct rb_id_table * iv_index_tbl
This is a table that holds instance variable name to index mapping.
Definition: robject.h:118
VALUE ary[ROBJECT_EMBED_LEN_MAX]
Embedded instance variables.
Definition: robject.h:136
union RObject::@48 as
Object's specific fields.
Ruby's regular expression.
Definition: rregexp.h:60
struct RBasic basic
Basic part, including flags and class.
Definition: rregexp.h:63
const VALUE src
Source code of this expression.
Definition: rregexp.h:74
struct re_pattern_buffer * ptr
The pattern buffer.
Definition: rregexp.h:71
unsigned long usecnt
Reference count.
Definition: rregexp.h:90
Ruby's String.
Definition: rstring.h:231
union RString::@50 as
String's specific fields.
struct RString::@50::@51 heap
Strings that use separated memory region for contents use this pattern.
struct RBasic basic
Basic part, including flags and class.
Definition: rstring.h:234
long len
Length of the string, not including terminating NUL character.
Definition: rstring.h:250
char * ptr
Pointer to the contents of the string.
Definition: rstring.h:258
"Typed" user data.
Definition: rtypeddata.h:340
const rb_data_type_t * type
This field stores various information about how Ruby should handle a data.
Definition: rtypeddata.h:350
VALUE typed_flag
This has to be always 1.
Definition: rtypeddata.h:359
void * data
Pointer to the actual C level struct that you want to wrap.
Definition: rtypeddata.h:362
struct RBasic basic
The part that all ruby objects have in common.
Definition: rtypeddata.h:343
size_t(* dsize)(const void *)
This function is to query the size of the underlying memory regions.
Definition: rtypeddata.h:230
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
Definition: rtypeddata.h:220
void * data
Type-specific static data.
Definition: rtypeddata.h:286
void * reserved[1]
This field is reserved for future extension.
Definition: rtypeddata.h:247
RUBY_DATA_FUNC dcompact
This function is called when the object is relocated.
Definition: rtypeddata.h:241
struct rb_data_type_struct::@54 function
Function pointers.
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
Definition: rtypeddata.h:211
const char * wrap_struct_name
Name of structs of this kind.
Definition: rtypeddata.h:197
VALUE flags
Type-specific behavioural characteristics.
Definition: rtypeddata.h:299
const rb_data_type_t * parent
Parent of this class.
Definition: rtypeddata.h:280
Ruby's IO, metadata and buffers.
Definition: io.h:138
Definition: st.c:133
Definition: st.h:79
uintptr_t VALUE
Type that represents a Ruby object.
Definition: value.h:40
uintptr_t ID
Type that represents a Ruby identifier such as a variable name.
Definition: value.h:52
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 bool rb_integer_type_p(VALUE obj)
Queries if the object is an instance of rb_cInteger.
Definition: value_type.h:203
ruby_value_type
C-level type of an object.
Definition: value_type.h:112
@ 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