Ruby 3.2.2p53 (2023-03-30 revision e51014f9c05aa65cbf203442d37fef7c12390015)
rb_mjit_min_header-3.2.2.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;
708char *mkdtemp (char *);
709const char *getprogname (void);
710void setprogname (const char *);
711char *canonicalize_file_name (const char *);
712int unsetenv (const char *);
713int clearenv (void);
714char *ptsname (int);
715int grantpt (int);
716int unlockpt (int);
717int ptsname_r(int, char *, size_t);
718int getpt (void);
719int posix_openpt (int);
720extern void *memalign (size_t, size_t);
721extern void *valloc (size_t);
722int getloadavg(double loadavg[], int nelem);
723struct __locale_t;
724typedef struct __locale_t *locale_t;
725
726typedef struct
727{
728 int quot;
729 int rem;
730} div_t;
731typedef struct
732{
733 long quot;
734 long rem;
735} ldiv_t;
736typedef struct
737{
738 long long int quot;
739 long long int rem;
740} lldiv_t;
741typedef int (*__compar_fn_t) (const void *, const void *);
742int __locale_mb_cur_max (void);
743void abort (void) __attribute__ ((__noreturn__));
744int abs (int);
745__uint32_t arc4random (void);
746__uint32_t arc4random_uniform (__uint32_t);
747void arc4random_buf (void *, size_t);
748int atexit (void (*__func)(void));
749double atof (const char *__nptr);
750float atoff (const char *__nptr);
751int atoi (const char *__nptr);
752int _atoi_r (struct _reent *, const char *__nptr);
753long atol (const char *__nptr);
754long _atol_r (struct _reent *, const char *__nptr);
755void * bsearch (const void *__key,
756 const void *__base,
757 size_t __nmemb,
758 size_t __size,
759 __compar_fn_t _compar);
760void *calloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__))
761 __attribute__((__alloc_size__(1, 2))) ;
762div_t div (int __numer, int __denom);
763void exit (int __status) __attribute__ ((__noreturn__));
764void free (void *) ;
765char * getenv (const char *__string);
766char * _getenv_r (struct _reent *, const char *__string);
767char * secure_getenv (const char *__string);
768char * _findenv (const char *, int *);
769char * _findenv_r (struct _reent *, const char *, int *);
770extern char *suboptarg;
771int getsubopt (char **, char * const *, char **);
772long labs (long);
773ldiv_t ldiv (long __numer, long __denom);
774void *malloc(size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(1))) ;
775int mblen (const char *, size_t);
776int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
777int mbtowc (wchar_t *__restrict__, const char *__restrict__, size_t);
778int _mbtowc_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
779int wctomb (char *, wchar_t);
780int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
781size_t mbstowcs (wchar_t *__restrict__, const char *__restrict__, size_t);
782size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
783size_t wcstombs (char *__restrict__, const wchar_t *__restrict__, size_t);
784size_t _wcstombs_r (struct _reent *, char *__restrict__, const wchar_t *__restrict__, size_t, _mbstate_t *);
785char * mkdtemp (char *);
786int mkostemp (char *, int);
787int mkostemps (char *, int, int);
788int mkstemp (char *);
789int mkstemps (char *, int);
790char * mktemp (char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
791char * _mkdtemp_r (struct _reent *, char *);
792int _mkostemp_r (struct _reent *, char *, int);
793int _mkostemps_r (struct _reent *, char *, int, int);
794int _mkstemp_r (struct _reent *, char *);
795int _mkstemps_r (struct _reent *, char *, int);
796char * _mktemp_r (struct _reent *, char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
797void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar);
798int rand (void);
799void *realloc(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2))) ;
800void *reallocarray(void *, size_t, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2, 3)));
801void *reallocf(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2)));
802char * realpath (const char *__restrict__ path, char *__restrict__ resolved_path);
803int rpmatch (const char *response);
804void setkey (const char *__key);
805void srand (unsigned __seed);
806double strtod (const char *__restrict__ __n, char **__restrict__ __end_PTR);
807double _strtod_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR);
808float strtof (const char *__restrict__ __n, char **__restrict__ __end_PTR);
809long strtol (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
810long _strtol_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
811unsigned long strtoul (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
812unsigned long _strtoul_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
813double strtod_l (const char *__restrict__, char **__restrict__, locale_t);
814float strtof_l (const char *__restrict__, char **__restrict__, locale_t);
815extern long double strtold_l (const char *__restrict__, char **__restrict__,
816 locale_t);
817long strtol_l (const char *__restrict__, char **__restrict__, int, locale_t);
818unsigned long strtoul_l (const char *__restrict__, char **__restrict__, int,
819 locale_t __loc);
820long long strtoll_l (const char *__restrict__, char **__restrict__, int, locale_t);
821unsigned long long strtoull_l (const char *__restrict__, char **__restrict__, int,
822 locale_t __loc);
823int system (const char *__string);
824long a64l (const char *__input);
825char * l64a (long __input);
826char * _l64a_r (struct _reent *,long __input);
827int on_exit (void (*__func)(int, void *),void *__arg);
828void _Exit (int __status) __attribute__ ((__noreturn__));
829int putenv (char *__string);
830int _putenv_r (struct _reent *, char *__string);
831void * _reallocf_r (struct _reent *, void *, size_t);
832int setenv (const char *__string, const char *__value, int __overwrite);
833int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);
834char * __itoa (int, char *, int);
835char * __utoa (unsigned, char *, int);
836char * itoa (int, char *, int);
837char * utoa (unsigned, char *, int);
838int rand_r (unsigned *__seed);
839double drand48 (void);
840double _drand48_r (struct _reent *);
841double erand48 (unsigned short [3]);
842double _erand48_r (struct _reent *, unsigned short [3]);
843long jrand48 (unsigned short [3]);
844long _jrand48_r (struct _reent *, unsigned short [3]);
845void lcong48 (unsigned short [7]);
846void _lcong48_r (struct _reent *, unsigned short [7]);
847long lrand48 (void);
848long _lrand48_r (struct _reent *);
849long mrand48 (void);
850long _mrand48_r (struct _reent *);
851long nrand48 (unsigned short [3]);
852long _nrand48_r (struct _reent *, unsigned short [3]);
853unsigned short *
854 seed48 (unsigned short [3]);
855unsigned short *
856 _seed48_r (struct _reent *, unsigned short [3]);
857void srand48 (long);
858void _srand48_r (struct _reent *, long);
859char * initstate (unsigned, char *, size_t);
860long random (void);
861char * setstate (char *);
862void srandom (unsigned);
863long long atoll (const char *__nptr);
864long long _atoll_r (struct _reent *, const char *__nptr);
865long long llabs (long long);
866lldiv_t lldiv (long long __numer, long long __denom);
867long long strtoll (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
868long long _strtoll_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
869unsigned long long strtoull (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
870unsigned long long _strtoull_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
871int posix_memalign (void **, size_t, size_t) __attribute__((__nonnull__ (1)))
872 __attribute__((__warn_unused_result__));
873char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);
874int _system_r (struct _reent *, const char *);
875void __eprintf (const char *, const char *, unsigned int, const char *);
876void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk);
877extern long double _strtold_r (struct _reent *, const char *__restrict__, char **__restrict__);
878extern long double strtold (const char *__restrict__, char **__restrict__);
879void * aligned_alloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__alloc_align__(1)))
880 __attribute__((__alloc_size__(2))) __attribute__((__warn_unused_result__));
881int at_quick_exit(void (*)(void));
882_Noreturn void
883 quick_exit(int);
884
885
886size_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)
887{
888 if (__buf != ((void *)0))
889 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(wchar_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
890 return __ssp_real_mbstowcs (__buf, __src, __n);
891}
892size_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); };
893int __ssp_real_wctomb (char *__buf, wchar_t __wc) __asm__("" "wctomb"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int wctomb (char *__buf, wchar_t __wc)
894{
895 if (__buf != ((void *)0))
896 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __locale_mb_cur_max() > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
897 return __ssp_real_wctomb (__buf, __wc);
898}
899
900
901int bcmp(const void *, const void *, size_t) __attribute__((__pure__));
902void bcopy(const void *, void *, size_t);
903void bzero(void *, size_t);
904void explicit_bzero(void *, size_t);
905int ffs(int) __attribute__((__const__));
906int ffsl(long) __attribute__((__const__));
907int ffsll(long long) __attribute__((__const__));
908int fls(int) __attribute__((__const__));
909int flsl(long) __attribute__((__const__));
910int flsll(long long) __attribute__((__const__));
911char *index(const char *, int) __attribute__((__pure__));
912char *rindex(const char *, int) __attribute__((__pure__));
913int strcasecmp(const char *, const char *) __attribute__((__pure__));
914int strncasecmp(const char *, const char *, size_t) __attribute__((__pure__));
915int strcasecmp_l (const char *, const char *, locale_t);
916int strncasecmp_l (const char *, const char *, size_t, locale_t);
917
918void __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); };
919
920void * memchr (const void *, int, size_t);
921int memcmp (const void *, const void *, size_t);
922void * memcpy (void *__restrict__, const void *__restrict__, size_t);
923void * memmove (void *, const void *, size_t);
924void * memset (void *, int, size_t);
925char *strcat (char *__restrict__, const char *__restrict__);
926char *strchr (const char *, int);
927int strcmp (const char *, const char *);
928int strcoll (const char *, const char *);
929char *strcpy (char *__restrict__, const char *__restrict__);
930size_t strcspn (const char *, const char *);
931char *strerror (int);
932size_t strlen (const char *);
933char *strncat (char *__restrict__, const char *__restrict__, size_t);
934int strncmp (const char *, const char *, size_t);
935char *strncpy (char *__restrict__, const char *__restrict__, size_t);
936char *strpbrk (const char *, const char *);
937char *strrchr (const char *, int);
938size_t strspn (const char *, const char *);
939char *strstr (const char *, const char *);
940char *strtok (char *__restrict__, const char *__restrict__);
941size_t strxfrm (char *__restrict__, const char *__restrict__, size_t);
942int strcoll_l (const char *, const char *, locale_t);
943char *strerror_l (int, locale_t);
944size_t strxfrm_l (char *__restrict__, const char *__restrict__, size_t, locale_t);
945char *strtok_r (char *__restrict__, const char *__restrict__, char **__restrict__);
946int timingsafe_bcmp (const void *, const void *, size_t);
947int timingsafe_memcmp (const void *, const void *, size_t);
948void * memccpy (void *__restrict__, const void *__restrict__, int, size_t);
949void * mempcpy (void *, const void *, size_t);
950void * memmem (const void *, size_t, const void *, size_t);
951void * memrchr (const void *, int, size_t);
952void * rawmemchr (const void *, int);
953char *stpcpy (char *__restrict__, const char *__restrict__);
954char *stpncpy (char *__restrict__, const char *__restrict__, size_t);
955char *strcasestr (const char *, const char *);
956char *strchrnul (const char *, int);
957char *strdup (const char *) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
958char *_strdup_r (struct _reent *, const char *);
959char *strndup (const char *, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
960char *_strndup_r (struct _reent *, const char *, size_t);
961char *strerror_r (int, char *, size_t);
962char * _strerror_r (struct _reent *, int, int, int *);
963size_t strlcat (char *, const char *, size_t);
964size_t strlcpy (char *, const char *, size_t);
965size_t strnlen (const char *, size_t);
966char *strsep (char **, const char *);
967char *strnstr(const char *, const char *, size_t) __attribute__((__pure__));
968char *strlwr (char *);
969char *strupr (char *);
970char *strsignal (int __signo);
971int strtosigno (const char *__name);
972int strverscmp (const char *, const char *);
973char *__attribute__((__nonnull__ (1))) basename (const char *) __asm__("" "__gnu_basename");
974
975
976void *__memcpy_chk(void *, const void *, size_t, size_t);
977void *__memmove_chk(void *, void *, size_t, size_t);
978void *__mempcpy_chk(void *, const void *, size_t, size_t);
979void *__memset_chk(void *, int, size_t, size_t);
980char *__stpcpy_chk(char *, const char *, size_t);
981char *__strcat_chk(char *, const char *, size_t);
982char *__strcpy_chk(char *, const char *, size_t);
983char *__strncat_chk(char *, const char *, size_t, size_t);
984char *__strncpy_chk(char *, const char *, size_t, size_t);
985
986
987extern __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)); }
988extern __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)); }
989extern __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)); }
990extern __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)); }
991extern __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)); }
992extern __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)); }
993extern __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)); }
994extern __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)); }
995extern __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)); }
996extern __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)); }
997
998typedef long unsigned int __cpu_mask;
999typedef struct
1000{
1001 __cpu_mask __bits[(1024 / (8 * sizeof (__cpu_mask)))];
1002} cpu_set_t;
1003int __sched_getaffinity_sys (pid_t, size_t, cpu_set_t *);
1004static __inline size_t
1005__cpuset_alloc_size (int num)
1006{
1007 return (size_t) (((num + (8 * sizeof (__cpu_mask)) - 1) / (8 * sizeof (__cpu_mask))) * sizeof (__cpu_mask));
1008}
1009static __inline cpu_set_t *
1010__cpuset_alloc (int num)
1011{
1012 return (cpu_set_t *) malloc (__cpuset_alloc_size (num));
1013}
1014static __inline void
1015__cpuset_free (cpu_set_t *set)
1016{
1017 free (set);
1018}
1019static __inline void
1020__cpuset_zero_s (size_t siz, cpu_set_t *set)
1021{
1022 (void) ((__builtin_object_size(set, 0) != (size_t)-1) ? __builtin___memset_chk(set, 0, siz, __builtin_object_size(set, 0)) : __memset_ichk(set, 0, siz));
1023}
1024static __inline void
1025__cpuset_set_s (int cpu, size_t siz, cpu_set_t *set)
1026{
1027 if (cpu >= 0 && cpu < 8 * siz)
1028 (set)->__bits[((cpu) / (8 * sizeof (__cpu_mask)))] |= ((__cpu_mask) 1 << ((cpu) % (8 * sizeof (__cpu_mask))));
1029}
1030static __inline void
1031__cpuset_clr_s (int cpu, size_t siz, cpu_set_t *set)
1032{
1033 if (cpu >= 0 && cpu < 8 * siz)
1034 (set)->__bits[((cpu) / (8 * sizeof (__cpu_mask)))] &= ~(((__cpu_mask) 1 << ((cpu) % (8 * sizeof (__cpu_mask)))));
1035}
1036static __inline int
1037__cpuset_isset_s (int cpu, size_t siz, cpu_set_t *set)
1038{
1039 int res = 0;
1040 if (cpu >= 0 && cpu < 8 * siz)
1041 res = !!((set)->__bits[((cpu) / (8 * sizeof (__cpu_mask)))] & ((__cpu_mask) 1 << ((cpu) % (8 * sizeof (__cpu_mask)))));
1042 return res;
1043}
1044static __inline int
1045__cpuset_count_s (size_t siz, cpu_set_t *set)
1046{
1047 int i, res = 0;
1048 for (i = 0; i < siz / sizeof (__cpu_mask); i++)
1049 res += __builtin_popcountl ((set)->__bits[i]);
1050 return res;
1051}
1052static __inline void
1053__cpuset_and_s (size_t siz, cpu_set_t *dst, cpu_set_t *src1, cpu_set_t *src2)
1054{
1055 int i;
1056 for (i = 0; i < siz / sizeof (__cpu_mask); i++)
1057 (dst)->__bits[i] = (src1)->__bits[i] & (src2)->__bits[i];
1058}
1059static __inline void
1060__cpuset_or_s (size_t siz, cpu_set_t *dst, cpu_set_t *src1, cpu_set_t *src2)
1061{
1062 int i;
1063 for (i = 0; i < siz / sizeof (__cpu_mask); i++)
1064 (dst)->__bits[i] = (src1)->__bits[i] | (src2)->__bits[i];
1065}
1066static __inline void
1067__cpuset_xor_s (size_t siz, cpu_set_t *dst, cpu_set_t *src1, cpu_set_t *src2)
1068{
1069 int i;
1070 for (i = 0; i < siz / sizeof (__cpu_mask); i++)
1071 (dst)->__bits[i] = (src1)->__bits[i] ^ (src2)->__bits[i];
1072}
1073static __inline int
1074__cpuset_equal_s (size_t siz, cpu_set_t *src1, cpu_set_t *src2)
1075{
1076 int i, res = 1;
1077 for (i = 0; res && i < siz / sizeof (__cpu_mask); i++)
1078 res &= (src1)->__bits[i] == (src2)->__bits[i];
1079 return res;
1080}
1081typedef struct __pthread_t {char __dummy;} *pthread_t;
1082typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
1083typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
1084typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
1085typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
1086typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
1087typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
1088typedef struct __pthread_barrierattr_t {char __dummy;} *pthread_barrierattr_t;
1089typedef struct __pthread_barrier_t {char __dummy;} *pthread_barrier_t;
1090typedef struct
1091{
1092 pthread_mutex_t mutex;
1093 int state;
1094}
1096typedef struct __pthread_spinlock_t {char __dummy;} *pthread_spinlock_t;
1097typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
1098typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
1099static __inline unsigned short
1100__bswap_16 (unsigned short __x)
1101{
1102 return (__x >> 8) | (__x << 8);
1103}
1104static __inline unsigned int
1105__bswap_32 (unsigned int __x)
1106{
1107 return (__bswap_16 (__x & 0xffff) << 16) | (__bswap_16 (__x >> 16));
1108}
1109static __inline unsigned long long
1110__bswap_64 (unsigned long long __x)
1111{
1112 return (((unsigned long long) __bswap_32 (__x & 0xffffffffull)) << 32) | (__bswap_32 (__x >> 32));
1113}
1114typedef struct timespec timespec_t;
1115typedef struct timespec timestruc_t;
1116typedef __loff_t loff_t;
1117struct flock {
1118 short l_type;
1119 short l_whence;
1120 off_t l_start;
1121 off_t l_len;
1122 pid_t l_pid;
1123};
1124typedef unsigned long vm_offset_t;
1125typedef unsigned long vm_size_t;
1126typedef void *vm_object_t;
1127typedef char *addr_t;
1128static __inline__ int gnu_dev_major(dev_t);
1129static __inline__ int gnu_dev_minor(dev_t);
1130static __inline__ dev_t gnu_dev_makedev(int, int);
1131static __inline__ int
1132gnu_dev_major(dev_t dev)
1133{
1134 return (int)(((dev) >> 16) & 0xffff);
1135}
1136static __inline__ int
1137gnu_dev_minor(dev_t dev)
1138{
1139 return (int)((dev) & 0xffff);
1140}
1141static __inline__ dev_t
1142gnu_dev_makedev(int maj, int min)
1143{
1144 return (((maj) << 16) | ((min) & 0xffff));
1145}
1146
1147struct tm
1148{
1149 int tm_sec;
1150 int tm_min;
1151 int tm_hour;
1152 int tm_mday;
1153 int tm_mon;
1154 int tm_year;
1155 int tm_wday;
1156 int tm_yday;
1157 int tm_isdst;
1158 long tm_gmtoff;
1159 const char *tm_zone;
1160};
1161clock_t clock (void);
1162double difftime (time_t _time2, time_t _time1);
1163time_t mktime (struct tm *_timeptr);
1164time_t time (time_t *_timer);
1165char *asctime (const struct tm *_tblock);
1166char *ctime (const time_t *_time);
1167struct tm *gmtime (const time_t *_timer);
1168struct tm *localtime (const time_t *_timer);
1169size_t strftime (char *__restrict__ _s,
1170 size_t _maxsize, const char *__restrict__ _fmt,
1171 const struct tm *__restrict__ _t);
1172extern size_t strftime_l (char *__restrict__ _s, size_t _maxsize,
1173 const char *__restrict__ _fmt,
1174 const struct tm *__restrict__ _t, locale_t _l);
1175char *asctime_r (const struct tm *__restrict__,
1176 char *__restrict__);
1177char *ctime_r (const time_t *, char *);
1178struct tm *gmtime_r (const time_t *__restrict__,
1179 struct tm *__restrict__);
1180struct tm *localtime_r (const time_t *__restrict__,
1181 struct tm *__restrict__);
1182
1183char *strptime (const char *__restrict__,
1184 const char *__restrict__,
1185 struct tm *__restrict__);
1186char *strptime_l (const char *__restrict__, const char *__restrict__,
1187 struct tm *__restrict__, locale_t);
1188void tzset (void);
1189void _tzset_r (struct _reent *);
1190extern __attribute__((dllimport)) long _timezone;
1191extern __attribute__((dllimport)) int _daylight;
1192extern __attribute__((dllimport)) char *_tzname[2];
1193int clock_setres (clockid_t, struct timespec *);
1194time_t timelocal (struct tm *);
1195time_t timegm (struct tm *);
1196extern int stime (const time_t *);
1197extern int daylight __asm__ ("_daylight");
1198extern long timezone __asm__ ("_timezone");
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215typedef __int_least8_t int_least8_t;
1216typedef __uint_least8_t uint_least8_t;
1217typedef __int_least16_t int_least16_t;
1218typedef __uint_least16_t uint_least16_t;
1219typedef __int_least32_t int_least32_t;
1220typedef __uint_least32_t uint_least32_t;
1221typedef __int_least64_t int_least64_t;
1222typedef __uint_least64_t uint_least64_t;
1223 typedef signed char int_fast8_t;
1224 typedef unsigned char uint_fast8_t;
1225 typedef long int int_fast16_t;
1226 typedef long unsigned int uint_fast16_t;
1227 typedef long int int_fast32_t;
1228 typedef long unsigned int uint_fast32_t;
1229 typedef long int int_fast64_t;
1230 typedef long unsigned int uint_fast64_t;
1232 __uint16_t significand[4];
1233 __uint16_t exponent;
1234 __uint16_t padding[3];
1235};
1237 __uint32_t element[4];
1238};
1240{
1241 __uint16_t cwd;
1242 __uint16_t swd;
1243 __uint16_t ftw;
1244 __uint16_t fop;
1245 __uint64_t rip;
1246 __uint64_t rdp;
1247 __uint32_t mxcsr;
1248 __uint32_t mxcr_mask;
1249 struct _uc_fpxreg st[8];
1250 struct _uc_xmmreg xmm[16];
1251 __uint32_t padding[24];
1252};
1253struct __attribute__ ((__aligned__ (16))) __mcontext
1254{
1255 __uint64_t p1home;
1256 __uint64_t p2home;
1257 __uint64_t p3home;
1258 __uint64_t p4home;
1259 __uint64_t p5home;
1260 __uint64_t p6home;
1261 __uint32_t ctxflags;
1262 __uint32_t mxcsr;
1263 __uint16_t cs;
1264 __uint16_t ds;
1265 __uint16_t es;
1266 __uint16_t fs;
1267 __uint16_t gs;
1268 __uint16_t ss;
1269 __uint32_t eflags;
1270 __uint64_t dr0;
1271 __uint64_t dr1;
1272 __uint64_t dr2;
1273 __uint64_t dr3;
1274 __uint64_t dr6;
1275 __uint64_t dr7;
1276 __uint64_t rax;
1277 __uint64_t rcx;
1278 __uint64_t rdx;
1279 __uint64_t rbx;
1280 __uint64_t rsp;
1281 __uint64_t rbp;
1282 __uint64_t rsi;
1283 __uint64_t rdi;
1284 __uint64_t r8;
1285 __uint64_t r9;
1286 __uint64_t r10;
1287 __uint64_t r11;
1288 __uint64_t r12;
1289 __uint64_t r13;
1290 __uint64_t r14;
1291 __uint64_t r15;
1292 __uint64_t rip;
1293 struct _fpstate fpregs;
1294 __uint64_t vregs[52];
1295 __uint64_t vcx;
1296 __uint64_t dbc;
1297 __uint64_t btr;
1298 __uint64_t bfr;
1299 __uint64_t etr;
1300 __uint64_t efr;
1301 __uint64_t oldmask;
1302 __uint64_t cr2;
1303};
1304typedef union sigval
1305{
1306 int sival_int;
1307 void *sival_ptr;
1308} sigval_t;
1309typedef struct sigevent
1310{
1311 sigval_t sigev_value;
1312 int sigev_signo;
1313 int sigev_notify;
1314 void (*sigev_notify_function) (sigval_t);
1315 pthread_attr_t *sigev_notify_attributes;
1316} sigevent_t;
1318{
1319 __uint32_t _si_code;
1320 void *_si_read_handle;
1321 void *_si_write_handle;
1322 void *_si_process_handle;
1323 __extension__ union
1324 {
1325 struct {
1326 int _si_fd;
1327 uint32_t _si_flags;
1328 };
1329 int64_t _si_pipe_unique_id;
1330 char *_si_str;
1331 };
1332};
1333typedef struct
1334{
1335 int si_signo;
1336 int si_code;
1337 pid_t si_pid;
1338 uid_t si_uid;
1339 int si_errno;
1340 __extension__ union
1341 {
1342 __uint32_t __pad[32];
1343 struct _sigcommune _si_commune;
1344 __extension__ struct
1345 {
1346 __extension__ union
1347 {
1348 sigval_t si_sigval;
1349 sigval_t si_value;
1350 };
1351 __extension__ struct
1352 {
1353 timer_t si_tid;
1354 unsigned int si_overrun;
1355 };
1356 };
1357 __extension__ struct
1358 {
1359 int si_status;
1360 clock_t si_utime;
1361 clock_t si_stime;
1362 };
1363 void *si_addr;
1364 };
1365} siginfo_t;
1366enum
1367{
1368 SI_USER = 0,
1369 SI_ASYNCIO = 2,
1370 SI_MESGQ,
1371 SI_TIMER,
1372 SI_QUEUE,
1373 SI_KERNEL,
1374 ILL_ILLOPC = 7,
1375 ILL_ILLOPN,
1376 ILL_ILLADR,
1377 ILL_ILLTRP,
1378 ILL_PRVOPC,
1379 ILL_PRVREG,
1380 ILL_COPROC,
1381 ILL_BADSTK,
1382 FPE_INTDIV = 15,
1383 FPE_INTOVF,
1384 FPE_FLTDIV,
1385 FPE_FLTOVF,
1386 FPE_FLTUND,
1387 FPE_FLTRES,
1388 FPE_FLTINV,
1389 FPE_FLTSUB,
1390 SEGV_MAPERR = 23,
1391 SEGV_ACCERR,
1392 BUS_ADRALN = 25,
1393 BUS_ADRERR,
1394 BUS_OBJERR,
1395 CLD_EXITED = 28,
1396 CLD_KILLED,
1397 CLD_DUMPED,
1398 CLD_TRAPPED,
1399 CLD_STOPPED,
1400 CLD_CONTINUED
1401};
1402enum
1403{
1404 SIGEV_SIGNAL = 0,
1405 SIGEV_NONE,
1406 SIGEV_THREAD
1407};
1408typedef void (*_sig_func_ptr)(int);
1410{
1411 __extension__ union
1412 {
1413 _sig_func_ptr sa_handler;
1414 void (*sa_sigaction) ( int, siginfo_t *, void * );
1415 };
1416 sigset_t sa_mask;
1417 int sa_flags;
1418};
1419void psiginfo (const siginfo_t *, const char *);
1420int sigwait (const sigset_t *, int *);
1421int sigwaitinfo (const sigset_t *, siginfo_t *);
1422int sighold (int);
1423int sigignore (int);
1424int sigrelse (int);
1425_sig_func_ptr sigset (int, _sig_func_ptr);
1426int sigqueue(pid_t, int, const union sigval);
1427int siginterrupt (int, int);
1428extern const char __attribute__((dllimport)) *sys_sigabbrev[];
1429extern const char __attribute__((dllimport)) *sys_siglist[];
1430typedef struct sigaltstack {
1431 void *ss_sp;
1432 int ss_flags;
1433 size_t ss_size;
1434} stack_t;
1435int sigprocmask (int, const sigset_t *, sigset_t *);
1436int pthread_sigmask (int, const sigset_t *, sigset_t *);
1437int kill (pid_t, int);
1438int killpg (pid_t, int);
1439int sigaction (int, const struct sigaction *, struct sigaction *);
1440int sigaddset (sigset_t *, const int);
1441int sigdelset (sigset_t *, const int);
1442int sigismember (const sigset_t *, int);
1443int sigfillset (sigset_t *);
1444int sigemptyset (sigset_t *);
1445int sigpending (sigset_t *);
1446int sigsuspend (const sigset_t *);
1447int sigwait (const sigset_t *, int *);
1448int sigpause (int) __asm__ ("" "__xpg_sigpause");
1449int sigaltstack (const stack_t *__restrict__, stack_t *__restrict__);
1450int pthread_kill (pthread_t, int);
1451int sigwaitinfo (const sigset_t *, siginfo_t *);
1452int sigtimedwait (const sigset_t *, siginfo_t *, const struct timespec *);
1453int sigqueue (pid_t, int, const union sigval);
1454int sig2str(int, char *);
1455int str2sig(const char *__restrict__, int *__restrict__);
1456typedef struct __mcontext mcontext_t;
1457typedef __attribute__ ((__aligned__ (16))) struct __ucontext {
1458 mcontext_t uc_mcontext;
1459 struct __ucontext *uc_link;
1460 sigset_t uc_sigmask;
1461 stack_t uc_stack;
1462 unsigned long int uc_flags;
1463} ucontext_t;
1464
1465typedef int sig_atomic_t;
1466typedef _sig_func_ptr sig_t;
1467typedef _sig_func_ptr sighandler_t;
1468struct _reent;
1469_sig_func_ptr _signal_r (struct _reent *, int, _sig_func_ptr);
1470int _raise_r (struct _reent *, int);
1471_sig_func_ptr signal (int, _sig_func_ptr);
1472int raise (int);
1473void psignal (int, const char *);
1474
1475int clock_settime (clockid_t clock_id, const struct timespec *tp);
1476int clock_gettime (clockid_t clock_id, struct timespec *tp);
1477int clock_getres (clockid_t clock_id, struct timespec *res);
1478int timer_create (clockid_t clock_id,
1479 struct sigevent *__restrict__ evp,
1480 timer_t *__restrict__ timerid);
1481int timer_delete (timer_t timerid);
1482int timer_settime (timer_t timerid, int flags,
1483 const struct itimerspec *__restrict__ value,
1484 struct itimerspec *__restrict__ ovalue);
1485int timer_gettime (timer_t timerid, struct itimerspec *value);
1486int timer_getoverrun (timer_t timerid);
1487int nanosleep (const struct timespec *rqtp, struct timespec *rmtp);
1488int clock_nanosleep (clockid_t clock_id, int flags,
1489 const struct timespec *rqtp, struct timespec *rmtp);
1490int clock_getcpuclockid (pid_t pid, clockid_t *clock_id);
1491int clock_setenable_attr (clockid_t clock_id, int attr);
1492int clock_getenable_attr (clockid_t clock_id, int *attr);
1493struct stat
1494{
1495 dev_t st_dev;
1496 ino_t st_ino;
1497 mode_t st_mode;
1498 nlink_t st_nlink;
1499 uid_t st_uid;
1500 gid_t st_gid;
1501 dev_t st_rdev;
1502 off_t st_size;
1503 timestruc_t st_atim;
1504 timestruc_t st_mtim;
1505 timestruc_t st_ctim;
1506 blksize_t st_blksize;
1507 blkcnt_t st_blocks;
1508 timestruc_t st_birthtim;
1509};
1510int chmod (const char *__path, mode_t __mode );
1511int fchmod (int __fd, mode_t __mode);
1512int fstat (int __fd, struct stat *__sbuf );
1513int mkdir (const char *_path, mode_t __mode );
1514int mkfifo (const char *__path, mode_t __mode );
1515int stat (const char *__restrict__ __path, struct stat *__restrict__ __sbuf );
1516mode_t umask (mode_t __mask );
1517int lstat (const char *__restrict__ __path, struct stat *__restrict__ __buf );
1518int mknod (const char *__path, mode_t __mode, dev_t __dev );
1519int fchmodat (int, const char *, mode_t, int);
1520int fstatat (int, const char *__restrict__ , struct stat *__restrict__, int);
1521int mkdirat (int, const char *, mode_t);
1522int mkfifoat (int, const char *, mode_t);
1523int mknodat (int, const char *, mode_t, dev_t);
1524int utimensat (int, const char *, const struct timespec [2], int);
1525int futimens (int, const struct timespec [2]);
1526typedef struct {
1527 intmax_t quot;
1528 intmax_t rem;
1529} imaxdiv_t;
1530struct _reent;
1531extern intmax_t imaxabs(intmax_t);
1532extern imaxdiv_t imaxdiv(intmax_t __numer, intmax_t __denomer);
1533extern intmax_t strtoimax(const char *__restrict__, char **__restrict__, int);
1534extern intmax_t _strtoimax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1535extern uintmax_t strtoumax(const char *__restrict__, char **__restrict__, int);
1536extern uintmax_t _strtoumax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1537extern intmax_t wcstoimax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1538extern intmax_t _wcstoimax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1539extern uintmax_t wcstoumax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1540extern uintmax_t _wcstoumax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1541extern intmax_t strtoimax_l(const char *__restrict__, char **_restrict, int, locale_t);
1542extern uintmax_t strtoumax_l(const char *__restrict__, char **_restrict, int, locale_t);
1543extern intmax_t wcstoimax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1544extern uintmax_t wcstoumax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1545extern char **environ;
1546void _exit (int __status) __attribute__ ((__noreturn__));
1547int access (const char *__path, int __amode);
1548unsigned alarm (unsigned __secs);
1549int chdir (const char *__path);
1550int chmod (const char *__path, mode_t __mode);
1551int chown (const char *__path, uid_t __owner, gid_t __group);
1552int chroot (const char *__path);
1553int close (int __fildes);
1554size_t confstr (int __name, char *__buf, size_t __len);
1555char * crypt (const char *__key, const char *__salt);
1556int daemon (int nochdir, int noclose);
1557int dup (int __fildes);
1558int dup2 (int __fildes, int __fildes2);
1559int dup3 (int __fildes, int __fildes2, int flags);
1560int eaccess (const char *__path, int __mode);
1561void encrypt (char *__block, int __edflag);
1562void endusershell (void);
1563int euidaccess (const char *__path, int __mode);
1564int execl (const char *__path, const char *, ...);
1565int execle (const char *__path, const char *, ...);
1566int execlp (const char *__file, const char *, ...);
1567int execlpe (const char *__file, const char *, ...);
1568int execv (const char *__path, char * const __argv[]);
1569int execve (const char *__path, char * const __argv[], char * const __envp[]);
1570int execvp (const char *__file, char * const __argv[]);
1571int execvpe (const char *__file, char * const __argv[], char * const __envp[]);
1572int faccessat (int __dirfd, const char *__path, int __mode, int __flags);
1573int fchdir (int __fildes);
1574int fchmod (int __fildes, mode_t __mode);
1575int fchown (int __fildes, uid_t __owner, gid_t __group);
1576int fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags);
1577int fexecve (int __fd, char * const __argv[], char * const __envp[]);
1578pid_t fork (void);
1579long fpathconf (int __fd, int __name);
1580int fsync (int __fd);
1581int fdatasync (int __fd);
1582char * get_current_dir_name (void);
1583char * getcwd (char *__buf, size_t __size);
1584int getdomainname (char *__name, size_t __len);
1585int getentropy (void *, size_t);
1586gid_t getegid (void);
1587uid_t geteuid (void);
1588gid_t getgid (void);
1589int getgroups (int __gidsetsize, gid_t __grouplist[]);
1590long gethostid (void);
1591char * getlogin (void);
1592int getlogin_r (char *name, size_t namesize) ;
1593char * getpass (const char *__prompt);
1594int getpagesize (void);
1595int getpeereid (int, uid_t *, gid_t *);
1596pid_t getpgid (pid_t);
1597pid_t getpgrp (void);
1598pid_t getpid (void);
1599pid_t getppid (void);
1600pid_t getsid (pid_t);
1601uid_t getuid (void);
1602char * getusershell (void);
1603char * getwd (char *__buf);
1604int iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser);
1605int isatty (int __fildes);
1606int issetugid (void);
1607int lchown (const char *__path, uid_t __owner, gid_t __group);
1608int link (const char *__path1, const char *__path2);
1609int linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags);
1610int nice (int __nice_value);
1611off_t lseek (int __fildes, off_t __offset, int __whence);
1612int lockf (int __fd, int __cmd, off_t __len);
1613long pathconf (const char *__path, int __name);
1614int pause (void);
1615int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
1616int pipe (int __fildes[2]);
1617int pipe2 (int __fildes[2], int flags);
1618ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
1619ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset);
1620_ssize_t read (int __fd, void *__buf, size_t __nbyte);
1621int rresvport (int *__alport);
1622int revoke (char *__path);
1623int rmdir (const char *__path);
1624int ruserok (const char *rhost, int superuser, const char *ruser, const char *luser);
1625void * sbrk (ptrdiff_t __incr);
1626int setegid (gid_t __gid);
1627int seteuid (uid_t __uid);
1628int setgid (gid_t __gid);
1629int setgroups (int ngroups, const gid_t *grouplist);
1630int sethostname (const char *, size_t);
1631int setpgid (pid_t __pid, pid_t __pgid);
1632int setpgrp (void);
1633int setregid (gid_t __rgid, gid_t __egid);
1634int setreuid (uid_t __ruid, uid_t __euid);
1635pid_t setsid (void);
1636int setuid (uid_t __uid);
1637void setusershell (void);
1638unsigned sleep (unsigned int __seconds);
1639void swab (const void *__restrict__, void *__restrict__, ssize_t);
1640long sysconf (int __name);
1641pid_t tcgetpgrp (int __fildes);
1642int tcsetpgrp (int __fildes, pid_t __pgrp_id);
1643char * ttyname (int __fildes);
1644int ttyname_r (int, char *, size_t);
1645int unlink (const char *__path);
1646int usleep (useconds_t __useconds);
1647int vhangup (void);
1648_ssize_t write (int __fd, const void *__buf, size_t __nbyte);
1649extern int __attribute__((dllimport)) opterr;
1650extern int __attribute__((dllimport)) optind;
1651extern int __attribute__((dllimport)) optopt;
1652extern int __attribute__((dllimport)) optreset;
1653extern char __attribute__((dllimport)) *optarg;
1654int getopt (int, char * const *, const char *);
1655pid_t vfork (void);
1656int ftruncate (int __fd, off_t __length);
1657int truncate (const char *, off_t __length);
1658int getdtablesize (void);
1659useconds_t ualarm (useconds_t __useconds, useconds_t __interval);
1660 int gethostname (char *__name, size_t __len);
1661int setdtablesize (int);
1662void sync (void);
1663ssize_t readlink (const char *__restrict__ __path,
1664 char *__restrict__ __buf, size_t __buflen);
1665int symlink (const char *__name1, const char *__name2);
1666ssize_t readlinkat (int __dirfd1, const char *__restrict__ __path,
1667 char *__restrict__ __buf, size_t __buflen);
1668int symlinkat (const char *, int, const char *);
1669int unlinkat (int, const char *, int);
1670
1671size_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); };
1672char * __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); };
1673int __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); };
1674int __ssp_real_getgroups (int __n, gid_t __buf[]) __asm__("" "getgroups"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int getgroups (int __n, gid_t __buf[])
1675{
1676 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(gid_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1677 return __ssp_real_getgroups (__n, __buf);
1678}
1679int __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); };
1680int __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); };
1681ssize_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); };
1682_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); };
1683ssize_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); };
1684ssize_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); };
1685int __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); };
1686
1687
1688
1689[[nodiscard]]
1690__attribute__((__malloc__))
1691__attribute__((__returns_nonnull__))
1692__attribute__((__alloc_size__ (1)))
1693void *ruby_xmalloc(size_t size)
1694
1695;
1696[[nodiscard]]
1697__attribute__((__malloc__))
1698__attribute__((__returns_nonnull__))
1699__attribute__((__alloc_size__ (1,2)))
1700void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
1701
1702;
1703[[nodiscard]]
1704__attribute__((__malloc__))
1705__attribute__((__returns_nonnull__))
1706__attribute__((__alloc_size__ (1,2)))
1707void *ruby_xcalloc(size_t nelems, size_t elemsiz)
1708
1709;
1710[[nodiscard]]
1711__attribute__((__returns_nonnull__))
1712__attribute__((__alloc_size__ (2)))
1713void *ruby_xrealloc(void *ptr, size_t newsiz)
1714
1715;
1716[[nodiscard]]
1717__attribute__((__returns_nonnull__))
1718__attribute__((__alloc_size__ (2,3)))
1719void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
1720
1721;
1722void ruby_xfree(void *ptr)
1723
1724;
1725
1726
1727#define RBIMPL_ATTR_COLD_H
1728#define RBIMPL_ATTR_COLD() __attribute__((__cold__))
1729
1730
1731__attribute__((__noreturn__))
1732__attribute__((__cold__))
1733void rb_assert_failure(const char *file, int line, const char *name, const char *expr);
1734
1735
1736#define COLDFUNC RBIMPL_ATTR_COLD()
1737
1738extern double atan (double);
1739extern double cos (double);
1740extern double sin (double);
1741extern double tan (double);
1742extern double tanh (double);
1743extern double frexp (double, int *);
1744extern double modf (double, double *);
1745extern double ceil (double);
1746extern double fabs (double);
1747extern double floor (double);
1748extern double acos (double);
1749extern double asin (double);
1750extern double atan2 (double, double);
1751extern double cosh (double);
1752extern double sinh (double);
1753extern double exp (double);
1754extern double ldexp (double, int);
1755extern double log (double);
1756extern double log10 (double);
1757extern double pow (double, double);
1758extern double sqrt (double);
1759extern double fmod (double, double);
1760extern int finite (double);
1761extern int finitef (float);
1762extern int finitel (long double);
1763extern int isinff (float);
1764extern int isnanf (float);
1765extern int isinfl (long double);
1766extern int isnanl (long double);
1767extern int isinf (double);
1768extern int isnan (double);
1769 typedef float float_t;
1770 typedef double double_t;
1771extern int __isinff (float);
1772extern int __isinfd (double);
1773extern int __isnanf (float);
1774extern int __isnand (double);
1775extern int __fpclassifyf (float);
1776extern int __fpclassifyd (double);
1777extern int __signbitf (float);
1778extern int __signbitd (double);
1779extern double infinity (void);
1780extern double nan (const char *);
1781extern double copysign (double, double);
1782extern double logb (double);
1783extern int ilogb (double);
1784extern double asinh (double);
1785extern double cbrt (double);
1786extern double nextafter (double, double);
1787extern double rint (double);
1788extern double scalbn (double, int);
1789extern double exp2 (double);
1790extern double scalbln (double, long int);
1791extern double tgamma (double);
1792extern double nearbyint (double);
1793extern long int lrint (double);
1794extern long long int llrint (double);
1795extern double round (double);
1796extern long int lround (double);
1797extern long long int llround (double);
1798extern double trunc (double);
1799extern double remquo (double, double, int *);
1800extern double fdim (double, double);
1801extern double fmax (double, double);
1802extern double fmin (double, double);
1803extern double fma (double, double, double);
1804extern double log1p (double);
1805extern double expm1 (double);
1806extern double acosh (double);
1807extern double atanh (double);
1808extern double remainder (double, double);
1809extern double gamma (double);
1810extern double lgamma (double);
1811extern double erf (double);
1812extern double erfc (double);
1813extern double log2 (double);
1814extern double hypot (double, double);
1815extern float atanf (float);
1816extern float cosf (float);
1817extern float sinf (float);
1818extern float tanf (float);
1819extern float tanhf (float);
1820extern float frexpf (float, int *);
1821extern float modff (float, float *);
1822extern float ceilf (float);
1823extern float fabsf (float);
1824extern float floorf (float);
1825extern float acosf (float);
1826extern float asinf (float);
1827extern float atan2f (float, float);
1828extern float coshf (float);
1829extern float sinhf (float);
1830extern float expf (float);
1831extern float ldexpf (float, int);
1832extern float logf (float);
1833extern float log10f (float);
1834extern float powf (float, float);
1835extern float sqrtf (float);
1836extern float fmodf (float, float);
1837extern float exp2f (float);
1838extern float scalblnf (float, long int);
1839extern float tgammaf (float);
1840extern float nearbyintf (float);
1841extern long int lrintf (float);
1842extern long long int llrintf (float);
1843extern float roundf (float);
1844extern long int lroundf (float);
1845extern long long int llroundf (float);
1846extern float truncf (float);
1847extern float remquof (float, float, int *);
1848extern float fdimf (float, float);
1849extern float fmaxf (float, float);
1850extern float fminf (float, float);
1851extern float fmaf (float, float, float);
1852extern float infinityf (void);
1853extern float nanf (const char *);
1854extern float copysignf (float, float);
1855extern float logbf (float);
1856extern int ilogbf (float);
1857extern float asinhf (float);
1858extern float cbrtf (float);
1859extern float nextafterf (float, float);
1860extern float rintf (float);
1861extern float scalbnf (float, int);
1862extern float log1pf (float);
1863extern float expm1f (float);
1864extern float acoshf (float);
1865extern float atanhf (float);
1866extern float remainderf (float, float);
1867extern float gammaf (float);
1868extern float lgammaf (float);
1869extern float erff (float);
1870extern float erfcf (float);
1871extern float log2f (float);
1872extern float hypotf (float, float);
1873extern long double atanl (long double);
1874extern long double cosl (long double);
1875extern long double sinl (long double);
1876extern long double tanl (long double);
1877extern long double tanhl (long double);
1878extern long double frexpl (long double, int *);
1879extern long double modfl (long double, long double *);
1880extern long double ceill (long double);
1881extern long double fabsl (long double);
1882extern long double floorl (long double);
1883extern long double log1pl (long double);
1884extern long double expm1l (long double);
1885extern long double acosl (long double);
1886extern long double asinl (long double);
1887extern long double atan2l (long double, long double);
1888extern long double coshl (long double);
1889extern long double sinhl (long double);
1890extern long double expl (long double);
1891extern long double ldexpl (long double, int);
1892extern long double logl (long double);
1893extern long double log10l (long double);
1894extern long double powl (long double, long double);
1895extern long double sqrtl (long double);
1896extern long double fmodl (long double, long double);
1897extern long double hypotl (long double, long double);
1898extern long double copysignl (long double, long double);
1899extern long double nanl (const char *);
1900extern int ilogbl (long double);
1901extern long double asinhl (long double);
1902extern long double cbrtl (long double);
1903extern long double nextafterl (long double, long double);
1904extern float nexttowardf (float, long double);
1905extern double nexttoward (double, long double);
1906extern long double nexttowardl (long double, long double);
1907extern long double logbl (long double);
1908extern long double log2l (long double);
1909extern long double rintl (long double);
1910extern long double scalbnl (long double, int);
1911extern long double exp2l (long double);
1912extern long double scalblnl (long double, long);
1913extern long double tgammal (long double);
1914extern long double nearbyintl (long double);
1915extern long int lrintl (long double);
1916extern long long int llrintl (long double);
1917extern long double roundl (long double);
1918extern long lroundl (long double);
1919extern long long int llroundl (long double);
1920extern long double truncl (long double);
1921extern long double remquol (long double, long double, int *);
1922extern long double fdiml (long double, long double);
1923extern long double fmaxl (long double, long double);
1924extern long double fminl (long double, long double);
1925extern long double fmal (long double, long double, long double);
1926extern long double acoshl (long double);
1927extern long double atanhl (long double);
1928extern long double remainderl (long double, long double);
1929extern long double lgammal (long double);
1930extern long double erfl (long double);
1931extern long double erfcl (long double);
1932extern double drem (double, double);
1933extern float dremf (float, float);
1934extern float dreml (long double, long double);
1935extern double gamma_r (double, int *);
1936extern double lgamma_r (double, int *);
1937extern float gammaf_r (float, int *);
1938extern float lgammaf_r (float, int *);
1939extern double y0 (double);
1940extern double y1 (double);
1941extern double yn (int, double);
1942extern double j0 (double);
1943extern double j1 (double);
1944extern double jn (int, double);
1945extern float y0f (float);
1946extern float y1f (float);
1947extern float ynf (int, float);
1948extern float j0f (float);
1949extern float j1f (float);
1950extern float jnf (int, float);
1951extern void sincos (double, double *, double *);
1952extern void sincosf (float, float *, float *);
1953extern void sincosl (long double, long double *, long double *);
1954extern double exp10 (double);
1955extern double pow10 (double);
1956extern float exp10f (float);
1957extern float pow10f (float);
1958extern float exp10l (float);
1959extern float pow10l (float);
1960extern int *__signgam (void);
1961
1962struct timezone {
1963 int tz_minuteswest;
1964 int tz_dsttime;
1965};
1966struct bintime {
1967 time_t sec;
1968 uint64_t frac;
1969};
1970static __inline void
1971bintime_addx(struct bintime *_bt, uint64_t _x)
1972{
1973 uint64_t _u;
1974 _u = _bt->frac;
1975 _bt->frac += _x;
1976 if (_u > _bt->frac)
1977 _bt->sec++;
1978}
1979static __inline void
1980bintime_add(struct bintime *_bt, const struct bintime *_bt2)
1981{
1982 uint64_t _u;
1983 _u = _bt->frac;
1984 _bt->frac += _bt2->frac;
1985 if (_u > _bt->frac)
1986 _bt->sec++;
1987 _bt->sec += _bt2->sec;
1988}
1989static __inline void
1990bintime_sub(struct bintime *_bt, const struct bintime *_bt2)
1991{
1992 uint64_t _u;
1993 _u = _bt->frac;
1994 _bt->frac -= _bt2->frac;
1995 if (_u < _bt->frac)
1996 _bt->sec--;
1997 _bt->sec -= _bt2->sec;
1998}
1999static __inline void
2000bintime_mul(struct bintime *_bt, u_int _x)
2001{
2002 uint64_t _p1, _p2;
2003 _p1 = (_bt->frac & 0xffffffffull) * _x;
2004 _p2 = (_bt->frac >> 32) * _x + (_p1 >> 32);
2005 _bt->sec *= _x;
2006 _bt->sec += (_p2 >> 32);
2007 _bt->frac = (_p2 << 32) | (_p1 & 0xffffffffull);
2008}
2009static __inline void
2010bintime_shift(struct bintime *_bt, int _exp)
2011{
2012 if (_exp > 0) {
2013 _bt->sec <<= _exp;
2014 _bt->sec |= _bt->frac >> (64 - _exp);
2015 _bt->frac <<= _exp;
2016 } else if (_exp < 0) {
2017 _bt->frac >>= -_exp;
2018 _bt->frac |= (uint64_t)_bt->sec << (64 + _exp);
2019 _bt->sec >>= -_exp;
2020 }
2021}
2022static __inline int
2023sbintime_getsec(sbintime_t _sbt)
2024{
2025 return (_sbt >> 32);
2026}
2027static __inline sbintime_t
2028bttosbt(const struct bintime _bt)
2029{
2030 return (((sbintime_t)_bt.sec << 32) + (_bt.frac >> 32));
2031}
2032static __inline struct bintime
2033sbttobt(sbintime_t _sbt)
2034{
2035 struct bintime _bt;
2036 _bt.sec = _sbt >> 32;
2037 _bt.frac = _sbt << 32;
2038 return (_bt);
2039}
2040static __inline int64_t
2041sbttons(sbintime_t _sbt)
2042{
2043 uint64_t ns;
2044 ns = _sbt;
2045 if (ns >= ((sbintime_t)1 << 32))
2046 ns = (ns >> 32) * 1000000000;
2047 else
2048 ns = 0;
2049 return (ns + (1000000000 * (_sbt & 0xffffffffu) >> 32));
2050}
2051static __inline sbintime_t
2052nstosbt(int64_t _ns)
2053{
2054 sbintime_t sb = 0;
2055 if (_ns >= ((sbintime_t)1 << 32)) {
2056 sb = (_ns / 1000000000) * ((sbintime_t)1 << 32);
2057 _ns = _ns % 1000000000;
2058 }
2059 sb += ((_ns * 9223372037ull) + 0x7fffffff) >> 31;
2060 return (sb);
2061}
2062static __inline int64_t
2063sbttous(sbintime_t _sbt)
2064{
2065 return ((1000000 * _sbt) >> 32);
2066}
2067static __inline sbintime_t
2068ustosbt(int64_t _us)
2069{
2070 sbintime_t sb = 0;
2071 if (_us >= ((sbintime_t)1 << 32)) {
2072 sb = (_us / 1000000) * ((sbintime_t)1 << 32);
2073 _us = _us % 1000000;
2074 }
2075 sb += ((_us * 9223372036855ull) + 0x7fffffff) >> 31;
2076 return (sb);
2077}
2078static __inline int64_t
2079sbttoms(sbintime_t _sbt)
2080{
2081 return ((1000 * _sbt) >> 32);
2082}
2083static __inline sbintime_t
2084mstosbt(int64_t _ms)
2085{
2086 sbintime_t sb = 0;
2087 if (_ms >= ((sbintime_t)1 << 32)) {
2088 sb = (_ms / 1000) * ((sbintime_t)1 << 32);
2089 _ms = _ms % 1000;
2090 }
2091 sb += ((_ms * 9223372036854776ull) + 0x7fffffff) >> 31;
2092 return (sb);
2093}
2094static __inline void
2095bintime2timespec(const struct bintime *_bt, struct timespec *_ts)
2096{
2097 _ts->tv_sec = _bt->sec;
2098 _ts->tv_nsec = ((uint64_t)1000000000 *
2099 (uint32_t)(_bt->frac >> 32)) >> 32;
2100}
2101static __inline void
2102timespec2bintime(const struct timespec *_ts, struct bintime *_bt)
2103{
2104 _bt->sec = _ts->tv_sec;
2105 _bt->frac = _ts->tv_nsec * (uint64_t)18446744073LL;
2106}
2107static __inline void
2108bintime2timeval(const struct bintime *_bt, struct timeval *_tv)
2109{
2110 _tv->tv_sec = _bt->sec;
2111 _tv->tv_usec = ((uint64_t)1000000 * (uint32_t)(_bt->frac >> 32)) >> 32;
2112}
2113static __inline void
2114timeval2bintime(const struct timeval *_tv, struct bintime *_bt)
2115{
2116 _bt->sec = _tv->tv_sec;
2117 _bt->frac = _tv->tv_usec * (uint64_t)18446744073709LL;
2118}
2119static __inline struct timespec
2120sbttots(sbintime_t _sbt)
2121{
2122 struct timespec _ts;
2123 _ts.tv_sec = _sbt >> 32;
2124 _ts.tv_nsec = sbttons((uint32_t)_sbt);
2125 return (_ts);
2126}
2127static __inline sbintime_t
2128tstosbt(struct timespec _ts)
2129{
2130 return (((sbintime_t)_ts.tv_sec << 32) + nstosbt(_ts.tv_nsec));
2131}
2132static __inline struct timeval
2133sbttotv(sbintime_t _sbt)
2134{
2135 struct timeval _tv;
2136 _tv.tv_sec = _sbt >> 32;
2137 _tv.tv_usec = sbttous((uint32_t)_sbt);
2138 return (_tv);
2139}
2140static __inline sbintime_t
2141tvtosbt(struct timeval _tv)
2142{
2143 return (((sbintime_t)_tv.tv_sec << 32) + ustosbt(_tv.tv_usec));
2144}
2146 struct timeval it_interval;
2147 struct timeval it_value;
2148};
2149
2150int utimes (const char *, const struct timeval [2]);
2151int adjtime (const struct timeval *, struct timeval *);
2152int futimes (int, const struct timeval [2]);
2153int lutimes (const char *, const struct timeval [2]);
2154int settimeofday (const struct timeval *, const struct timezone *);
2155int getitimer (int __which, struct itimerval *__value);
2156int setitimer (int __which, const struct itimerval *__restrict__ __value,
2157 struct itimerval *__restrict__ __ovalue);
2158int gettimeofday (struct timeval *__restrict__ __p,
2159 void *__restrict__ __tz);
2160int futimesat (int, const char *, const struct timeval [2]);
2161
2162
2163typedef union
2164{
2165 double value;
2166 struct
2167 {
2168 unsigned int fraction1:32;
2169 unsigned int fraction0:20;
2170 unsigned int exponent :11;
2171 unsigned int sign : 1;
2172 } number;
2173 struct
2174 {
2175 unsigned int function1:32;
2176 unsigned int function0:19;
2177 unsigned int quiet:1;
2178 unsigned int exponent: 11;
2179 unsigned int sign : 1;
2180 } nan;
2181 struct
2182 {
2183 unsigned long lsw;
2184 unsigned long msw;
2185 } parts;
2186 long aslong[2];
2188typedef union
2189{
2190 float value;
2191 struct
2192 {
2193 unsigned int fraction0: 7;
2194 unsigned int fraction1: 16;
2195 unsigned int exponent: 8;
2196 unsigned int sign : 1;
2197 } number;
2198 struct
2199 {
2200 unsigned int function1:16;
2201 unsigned int function0:6;
2202 unsigned int quiet:1;
2203 unsigned int exponent:8;
2204 unsigned int sign:1;
2205 } nan;
2206 long p1;
2208typedef struct ieee_ext
2209{
2210 unsigned int ext_fracl : 32;
2211 unsigned int ext_frach : 32;
2212 unsigned int ext_exp : 15;
2213 unsigned int ext_sign : 1;
2214} ieee_ext;
2215typedef union ieee_ext_u
2216{
2217 long double extu_ld;
2218 struct ieee_ext extu_ext;
2219} ieee_ext_u;
2220typedef int fp_rnd;
2221fp_rnd fpgetround (void);
2222fp_rnd fpsetround (fp_rnd);
2223typedef int fp_except;
2224fp_except fpgetmask (void);
2225fp_except fpsetmask (fp_except);
2226fp_except fpgetsticky (void);
2227fp_except fpsetsticky (fp_except);
2228typedef int fp_rdi;
2229fp_rdi fpgetroundtoi (void);
2230fp_rdi fpsetroundtoi (fp_rdi);
2231
2232
2233
2234__attribute__((__format__(__printf__, 1, 2)))
2235extern void setproctitle(const char *fmt, ...);
2236
2237
2238void __assert (const char *, int, const char *)
2239 __attribute__ ((__noreturn__));
2240void __assert_func (const char *, int, const char *, const char *)
2241 __attribute__ ((__noreturn__));
2242typedef unsigned long VALUE;
2243typedef unsigned long ID;
2244__extension__ _Static_assert(4 == sizeof(int), "sizeof_int" ": " "SIZEOF_INT == sizeof(int)");
2245__extension__ _Static_assert(8 == sizeof(long), "sizeof_long" ": " "SIZEOF_LONG == sizeof(long)");
2246__extension__ _Static_assert(8 == sizeof(long long), "sizeof_long_long" ": " "SIZEOF_LONG_LONG == sizeof(LONG_LONG)");
2247__extension__ _Static_assert(8 == sizeof(void *), "sizeof_voidp" ": " "SIZEOF_VOIDP == sizeof(void *)");
2248
2249
2250VALUE rb_class_new(VALUE super);
2251VALUE rb_mod_init_copy(VALUE clone, VALUE orig);
2252void rb_check_inheritable(VALUE super);
2253VALUE rb_define_class_id(ID id, VALUE super);
2254VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super);
2255VALUE rb_module_new(void);
2260VALUE rb_mod_include_p(VALUE child, VALUE parent);
2262VALUE rb_class_descendants(VALUE klass);
2265VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod);
2266VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod);
2267VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod);
2268VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod);
2269VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj);
2270void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(), int arity);
2271void rb_undef(VALUE mod, ID mid);
2272__attribute__((__nonnull__ ()))
2273void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2274__attribute__((__nonnull__ ()))
2275void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2276__attribute__((__nonnull__ ()))
2277void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(), int arity);
2279
2280
2281
2282
2283int rb_sourceline(void);
2284const char *rb_sourcefile(void);
2285int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);
2286VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv);
2287VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
2288VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat);
2289VALUE rb_apply(VALUE recv, ID mid, VALUE args);
2290VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv);
2291VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv);
2292VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod);
2293VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod);
2294typedef VALUE (*rb_alloc_func_t)(VALUE klass);
2295void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func);
2296void rb_undef_alloc_func(VALUE klass);
2297rb_alloc_func_t rb_get_alloc_func(VALUE klass);
2298void rb_clear_constant_cache_for_id(ID id);
2299void rb_alias(VALUE klass, ID dst, ID src);
2300void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility);
2301__attribute__((__nonnull__ ()))
2302void rb_remove_method(VALUE klass, const char *name);
2303void rb_remove_method_id(VALUE klass, ID mid);
2304int rb_method_boundp(VALUE klass, ID id, int ex);
2305int rb_method_basic_definition_p(VALUE klass, ID mid);
2306int rb_obj_respond_to(VALUE obj, ID mid, int private_p);
2307int rb_respond_to(VALUE obj, ID mid);
2308__attribute__((__noreturn__))
2309VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker);
2310void rb_backtrace(void);
2311VALUE rb_make_backtrace(void);
2312
2313
2314
2315
2316__attribute__((__nonnull__ ()))
2317void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2318__attribute__((__nonnull__ ()))
2319void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2320__attribute__((__nonnull__ ()))
2321void rb_define_global_function(const char *mid, VALUE (*func)(), int arity);
2322__attribute__((__nonnull__ ()))
2323void rb_undef_method(VALUE klass, const char *name);
2324__attribute__((__nonnull__ ()))
2325void rb_define_alias(VALUE klass, const char *dst, const char *src);
2326__attribute__((__nonnull__ ()))
2327void rb_define_attr(VALUE klass, const char *name, int read, int write);
2328
2329
2330
2331
2332VALUE rb_int2big(intptr_t i);
2333VALUE rb_int2inum(intptr_t i);
2334VALUE rb_uint2big(uintptr_t i);
2335VALUE rb_uint2inum(uintptr_t i);
2336
2337
2338enum
2339
2341 RUBY_Qfalse = 0x00,
2342 RUBY_Qnil = 0x04,
2343 RUBY_Qtrue = 0x14,
2344 RUBY_Qundef = 0x24,
2345 RUBY_IMMEDIATE_MASK = 0x07,
2346 RUBY_FIXNUM_FLAG = 0x01,
2347 RUBY_FLONUM_MASK = 0x03,
2348 RUBY_FLONUM_FLAG = 0x02,
2349 RUBY_SYMBOL_FLAG = 0x0c,
2351};
2352__attribute__((__const__))
2353
2354__attribute__((__artificial__))
2355static inline _Bool
2356RB_TEST(VALUE obj)
2357{
2358 return obj & ~RUBY_Qnil;
2359}
2360__attribute__((__const__))
2361
2362__attribute__((__artificial__))
2363static inline _Bool
2364RB_NIL_P(VALUE obj)
2365{
2366 return obj == RUBY_Qnil;
2367}
2368__attribute__((__const__))
2369
2370__attribute__((__artificial__))
2371static inline _Bool
2372RB_UNDEF_P(VALUE obj)
2373{
2374 return obj == RUBY_Qundef;
2375}
2376__attribute__((__const__))
2377
2378__attribute__((__artificial__))
2379static inline _Bool
2380RB_NIL_OR_UNDEF_P(VALUE obj)
2381{
2382 const VALUE mask = ~(RUBY_Qundef ^ RUBY_Qnil);
2383 const VALUE common_bits = RUBY_Qundef & RUBY_Qnil;
2384 return (obj & mask) == common_bits;
2385}
2386__attribute__((__const__))
2387
2388__attribute__((__artificial__))
2389static inline _Bool
2390RB_FIXNUM_P(VALUE obj)
2391{
2392 return obj & RUBY_FIXNUM_FLAG;
2393}
2394__attribute__((__const__))
2395
2396__attribute__((__artificial__))
2397static inline _Bool
2398RB_STATIC_SYM_P(VALUE obj)
2399{
2400
2401 const VALUE mask = ~((0x7fffffffffffffffL * 2UL + 1) << RUBY_SPECIAL_SHIFT);
2402 return (obj & mask) == RUBY_SYMBOL_FLAG;
2403}
2404__attribute__((__const__))
2405
2406__attribute__((__artificial__))
2407static inline _Bool
2408RB_FLONUM_P(VALUE obj)
2409{
2410 return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG;
2411}
2412__attribute__((__const__))
2413
2414__attribute__((__artificial__))
2415static inline _Bool
2416RB_IMMEDIATE_P(VALUE obj)
2417{
2418 return obj & RUBY_IMMEDIATE_MASK;
2419}
2420__attribute__((__const__))
2421
2422__attribute__((__artificial__))
2423static inline _Bool
2424RB_SPECIAL_CONST_P(VALUE obj)
2425{
2426 return RB_IMMEDIATE_P(obj) || obj == RUBY_Qfalse;
2427}
2428__attribute__((__const__))
2429
2430static inline VALUE
2432{
2433 return RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue;
2434}
2435
2436
2437__attribute__((__noreturn__))
2438__attribute__((__cold__))
2439void rb_out_of_int(long num);
2440long rb_num2long(VALUE num);
2441unsigned long rb_num2ulong(VALUE num);
2442
2443
2444__attribute__((__const__))
2445
2446__attribute__((__artificial__))
2447static inline VALUE
2448RB_INT2FIX(long i)
2449{
2450 ((void)0);
2451 const unsigned long j = i;
2452 const unsigned long k = (j << 1) + RUBY_FIXNUM_FLAG;
2453 const long l = k;
2454 const long m = l;
2455 const VALUE n = m;
2456 ((void)0);
2457 return n;
2458}
2459static inline int
2460rb_long2int_inline(long n)
2461{
2462 int i = ((int)n);
2463 if (sizeof(long) <= sizeof(int)) {
2464 ((__builtin_expect(!!(!!(i == n)), 1)) ? ((void)0) : __builtin_unreachable());
2465 }
2466 if (i != n)
2467 rb_out_of_int(n);
2468 return i;
2469}
2470__attribute__((__const__))
2471
2472static inline long
2473rbimpl_fix2long_by_idiv(VALUE x)
2474{
2475 ((void)0);
2476 const long y = x - RUBY_FIXNUM_FLAG;
2477 const long z = y / 2;
2478 const long w = ((long)z);
2479 ((void)0);
2480 return w;
2481}
2482__attribute__((__const__))
2483
2484static inline long
2485rbimpl_fix2long_by_shift(VALUE x)
2486{
2487 ((void)0);
2488 const long y = x;
2489 const long z = y >> 1;
2490 const long w = ((long)z);
2491 ((void)0);
2492 return w;
2493}
2494__attribute__((__const__))
2495
2496static inline _Bool
2497rbimpl_right_shift_is_arithmetic_p(void)
2498{
2499 return (-1 >> 1) == -1;
2500}
2501__attribute__((__const__))
2502
2503static inline long
2505{
2506 if (rbimpl_right_shift_is_arithmetic_p()) {
2507 return rbimpl_fix2long_by_shift(x);
2508 }
2509 else {
2510 return rbimpl_fix2long_by_idiv(x);
2511 }
2512}
2513__attribute__((__const__))
2514
2515static inline unsigned long
2517{
2518 ((void)0);
2519 return rb_fix2long(x);
2520}
2521static inline long
2522rb_num2long_inline(VALUE x)
2523{
2524 if (RB_FIXNUM_P(x))
2525 return rb_fix2long(x);
2526 else
2527 return rb_num2long(x);
2528}
2529static inline unsigned long
2530rb_num2ulong_inline(VALUE x)
2531{
2532 if (RB_FIXNUM_P(x))
2533 return rb_fix2ulong(x);
2534 else
2535 return rb_num2ulong(x);
2536}
2537static inline VALUE
2538rb_long2num_inline(long v)
2539{
2540 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2541 return RB_INT2FIX(v);
2542 else
2543 return rb_int2big(v);
2544}
2545static inline VALUE
2546rb_ulong2num_inline(unsigned long v)
2547{
2548 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2549 return RB_INT2FIX(v);
2550 else
2551 return rb_uint2big(v);
2552}
2553
2554
2555long rb_num2int(VALUE num);
2556long rb_fix2int(VALUE num);
2557unsigned long rb_num2uint(VALUE num);
2558unsigned long rb_fix2uint(VALUE num);
2559
2560
2561__attribute__((__artificial__))
2562static inline int
2563RB_FIX2INT(VALUE x)
2564{
2565 long ret;
2566 if (sizeof(int) < sizeof(long)) {
2567 ret = rb_fix2int(x);
2568 }
2569 else {
2570 ret = rb_fix2long(x);
2571 }
2572 return ((int)ret);
2573}
2574static inline int
2575rb_num2int_inline(VALUE x)
2576{
2577 long ret;
2578 if (sizeof(int) == sizeof(long)) {
2579 ret = rb_num2long_inline(x);
2580 }
2581 else if (RB_FIXNUM_P(x)) {
2582 ret = rb_fix2int(x);
2583 }
2584 else {
2585 ret = rb_num2int(x);
2586 }
2587 return ((int)ret);
2588}
2589__attribute__((__artificial__))
2590static inline unsigned int
2591RB_NUM2UINT(VALUE x)
2592{
2593 unsigned long ret;
2594 if (sizeof(int) < sizeof(long)) {
2595 ret = rb_num2uint(x);
2596 }
2597 else {
2598 ret = rb_num2ulong_inline(x);
2599 }
2600 return ((unsigned int)ret);
2601}
2602__attribute__((__artificial__))
2603static inline unsigned int
2604RB_FIX2UINT(VALUE x)
2605{
2606 unsigned long ret;
2607 if (sizeof(int) < sizeof(long)) {
2608 ret = rb_fix2uint(x);
2609 }
2610 else {
2611 ret = rb_fix2ulong(x);
2612 }
2613 return ((unsigned int)ret);
2614}
2615
2616
2617
2618
2619static inline VALUE
2620rb_int2num_inline(int v)
2621{
2622 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2623 return RB_INT2FIX(v);
2624 else
2625 return rb_int2big(v);
2626}
2627static inline VALUE
2628rb_uint2num_inline(unsigned int v)
2629{
2630 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2631 return RB_INT2FIX(v);
2632 else
2633 return rb_uint2big(v);
2634}
2635
2636
2637enum ruby_rvalue_flags {
2638 RVALUE_EMBED_LEN_MAX = 3
2639};
2640struct
2641__attribute__((__aligned__(8)))
2642RBasic {
2643 VALUE flags;
2644 const VALUE klass;
2645};
2646
2647
2649VALUE rb_obj_reveal(VALUE obj, VALUE klass);
2650
2651
2652__attribute__((__pure__))
2653__attribute__((__artificial__))
2654static inline VALUE
2655RBASIC_CLASS(VALUE obj)
2656{
2657 ((void)0);
2658 return ((struct RBasic *)(obj))->klass;
2659}
2660typedef enum {
2664 RB_WARN_CATEGORY_ALL_BITS = 0x6
2666enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
2667
2668
2669VALUE rb_errinfo(void);
2670void rb_set_errinfo(VALUE err);
2671__attribute__((__noreturn__))
2672__attribute__((__nonnull__ (2)))
2673__attribute__((__format__(__printf__, 2, 3)))
2674void rb_raise(VALUE exc, const char *fmt, ...);
2675__attribute__((__noreturn__))
2676__attribute__((__nonnull__ (1)))
2677__attribute__((__format__(__printf__, 1, 2)))
2678void rb_fatal(const char *fmt, ...);
2679__attribute__((__cold__))
2680__attribute__((__noreturn__))
2681__attribute__((__nonnull__ (1)))
2682__attribute__((__format__(__printf__, 1, 2)))
2683void rb_bug(const char *fmt, ...);
2684__attribute__((__noreturn__))
2685__attribute__((__nonnull__ ()))
2686void rb_bug_errno(const char *msg, int err);
2687__attribute__((__noreturn__))
2688void rb_sys_fail(const char *msg);
2689__attribute__((__noreturn__))
2690void rb_sys_fail_str(VALUE msg);
2691__attribute__((__noreturn__))
2692__attribute__((__nonnull__ (2)))
2693void rb_mod_sys_fail(VALUE mod, const char *msg);
2694__attribute__((__noreturn__))
2695void rb_mod_sys_fail_str(VALUE mod, VALUE msg);
2696__attribute__((__noreturn__))
2697void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg);
2698__attribute__((__noreturn__))
2699void rb_iter_break(void);
2700__attribute__((__noreturn__))
2701void rb_iter_break_value(VALUE val);
2702__attribute__((__noreturn__))
2703void rb_exit(int status);
2704__attribute__((__noreturn__))
2705void rb_notimplement(void);
2706VALUE rb_syserr_new(int err, const char * msg);
2707VALUE rb_syserr_new_str(int n, VALUE arg);
2708__attribute__((__noreturn__))
2709void rb_syserr_fail(int err, const char *msg);
2710__attribute__((__noreturn__))
2711void rb_syserr_fail_str(int err, VALUE msg);
2712__attribute__((__noreturn__))
2713__attribute__((__nonnull__ ()))
2714void rb_mod_syserr_fail(VALUE mod, int err, const char *msg);
2715__attribute__((__noreturn__))
2716void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg);
2717__attribute__((__noreturn__))
2718void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg);
2719__attribute__((__cold__))
2720__attribute__((__noreturn__))
2721void rb_unexpected_type(VALUE self, int t);
2724__attribute__((__nonnull__ (1)))
2725__attribute__((__format__(__printf__, 1, 2)))
2726void rb_warning(const char *fmt, ...);
2727__attribute__((__nonnull__ (2)))
2728__attribute__((__format__(__printf__, 2, 3)))
2729void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...);
2730__attribute__((__nonnull__ (1, 3)))
2731__attribute__((__format__(__printf__, 3, 4)))
2732void rb_compile_warning(const char *file, int line, const char *fmt, ...);
2733__attribute__((__nonnull__ (1)))
2734__attribute__((__format__(__printf__, 1, 2)))
2735void rb_sys_warning(const char *fmt, ...);
2736__attribute__((__cold__))
2737__attribute__((__nonnull__ (1)))
2738__attribute__((__format__(__printf__, 1, 2)))
2739void rb_warn(const char *fmt, ...);
2740__attribute__((__cold__))
2741__attribute__((__nonnull__ (2)))
2742__attribute__((__format__(__printf__, 2, 3)))
2743void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...);
2744__attribute__((__nonnull__ (1, 3)))
2745__attribute__((__format__(__printf__, 3, 4)))
2746void rb_compile_warn(const char *file, int line, const char *fmt, ...);
2747__attribute__((__nonnull__ (2, 4)))
2748__attribute__((__format__(__printf__, 4, 5)))
2749void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...);
2750
2751
2752enum
2753
2755 RUBY_T_NONE = 0x00,
2756 RUBY_T_OBJECT = 0x01,
2757 RUBY_T_CLASS = 0x02,
2758 RUBY_T_MODULE = 0x03,
2759 RUBY_T_FLOAT = 0x04,
2760 RUBY_T_STRING = 0x05,
2761 RUBY_T_REGEXP = 0x06,
2762 RUBY_T_ARRAY = 0x07,
2763 RUBY_T_HASH = 0x08,
2764 RUBY_T_STRUCT = 0x09,
2765 RUBY_T_BIGNUM = 0x0a,
2766 RUBY_T_FILE = 0x0b,
2767 RUBY_T_DATA = 0x0c,
2768 RUBY_T_MATCH = 0x0d,
2769 RUBY_T_COMPLEX = 0x0e,
2770 RUBY_T_RATIONAL = 0x0f,
2771 RUBY_T_NIL = 0x11,
2772 RUBY_T_TRUE = 0x12,
2773 RUBY_T_FALSE = 0x13,
2774 RUBY_T_SYMBOL = 0x14,
2775 RUBY_T_FIXNUM = 0x15,
2776 RUBY_T_UNDEF = 0x16,
2777 RUBY_T_IMEMO = 0x1a,
2778 RUBY_T_NODE = 0x1b,
2779 RUBY_T_ICLASS = 0x1c,
2780 RUBY_T_ZOMBIE = 0x1d,
2781 RUBY_T_MOVED = 0x1e,
2782 RUBY_T_MASK = 0x1f
2783};
2784
2785
2786__attribute__((__cold__))
2787void rb_check_type(VALUE obj, int t);
2788
2789
2790__attribute__((__pure__))
2791__attribute__((__artificial__))
2792static inline enum ruby_value_type
2793RB_BUILTIN_TYPE(VALUE obj)
2794{
2795 ((void)0);
2796 VALUE ret = ((struct RBasic *)(obj))->flags & RUBY_T_MASK;
2797 return ((enum ruby_value_type)ret);
2798}
2799__attribute__((__pure__))
2800static inline _Bool
2802{
2803 if (RB_FIXNUM_P(obj)) {
2804 return 1;
2805 }
2806 else if (RB_SPECIAL_CONST_P(obj)) {
2807 return 0;
2808 }
2809 else {
2810 return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM;
2811 }
2812}
2813__attribute__((__pure__))
2814static inline enum ruby_value_type
2815rb_type(VALUE obj)
2816{
2817 if (! RB_SPECIAL_CONST_P(obj)) {
2818 return RB_BUILTIN_TYPE(obj);
2819 }
2820 else if (obj == ((VALUE)RUBY_Qfalse)) {
2821 return RUBY_T_FALSE;
2822 }
2823 else if (obj == ((VALUE)RUBY_Qnil)) {
2824 return RUBY_T_NIL;
2825 }
2826 else if (obj == ((VALUE)RUBY_Qtrue)) {
2827 return RUBY_T_TRUE;
2828 }
2829 else if (obj == ((VALUE)RUBY_Qundef)) {
2830 return RUBY_T_UNDEF;
2831 }
2832 else if (RB_FIXNUM_P(obj)) {
2833 return RUBY_T_FIXNUM;
2834 }
2835 else if (RB_STATIC_SYM_P(obj)) {
2836 return RUBY_T_SYMBOL;
2837 }
2838 else {
2839 ((__builtin_expect(!!(!!(RB_FLONUM_P(obj))), 1)) ? ((void)0) : __builtin_unreachable());
2840 return RUBY_T_FLOAT;
2841 }
2842}
2843__attribute__((__pure__))
2844__attribute__((__artificial__))
2845static inline _Bool
2846RB_FLOAT_TYPE_P(VALUE obj)
2847{
2848 if (RB_FLONUM_P(obj)) {
2849 return 1;
2850 }
2851 else if (RB_SPECIAL_CONST_P(obj)) {
2852 return 0;
2853 }
2854 else {
2855 return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT;
2856 }
2857}
2858__attribute__((__pure__))
2859__attribute__((__artificial__))
2860static inline _Bool
2861RB_DYNAMIC_SYM_P(VALUE obj)
2862{
2863 if (RB_SPECIAL_CONST_P(obj)) {
2864 return 0;
2865 }
2866 else {
2867 return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL;
2868 }
2869}
2870__attribute__((__pure__))
2871__attribute__((__artificial__))
2872static inline _Bool
2873RB_SYMBOL_P(VALUE obj)
2874{
2875 return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj);
2876}
2877__attribute__((__pure__))
2878__attribute__((__artificial__))
2879__attribute__((__always_inline__)) inline
2880static _Bool
2881rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t)
2882{
2883 if (t == RUBY_T_TRUE) {
2884 return obj == ((VALUE)RUBY_Qtrue);
2885 }
2886 else if (t == RUBY_T_FALSE) {
2887 return obj == ((VALUE)RUBY_Qfalse);
2888 }
2889 else if (t == RUBY_T_NIL) {
2890 return obj == ((VALUE)RUBY_Qnil);
2891 }
2892 else if (t == RUBY_T_UNDEF) {
2893 return obj == ((VALUE)RUBY_Qundef);
2894 }
2895 else if (t == RUBY_T_FIXNUM) {
2896 return RB_FIXNUM_P(obj);
2897 }
2898 else if (t == RUBY_T_SYMBOL) {
2899 return RB_SYMBOL_P(obj);
2900 }
2901 else if (t == RUBY_T_FLOAT) {
2902 return RB_FLOAT_TYPE_P(obj);
2903 }
2904 else if (RB_SPECIAL_CONST_P(obj)) {
2905 return 0;
2906 }
2907 else if (t == RB_BUILTIN_TYPE(obj)) {
2908 return 1;
2909 }
2910 else {
2911 return 0;
2912 }
2913}
2914__attribute__((__pure__))
2915__attribute__((__artificial__))
2916static inline _Bool
2917RB_TYPE_P(VALUE obj, enum ruby_value_type t)
2918{
2919 if (__builtin_constant_p(t)) {
2920 return rbimpl_RB_TYPE_P_fastpath(obj, t);
2921 }
2922 else {
2923 return t == rb_type(obj);
2924 }
2925}
2926__attribute__((__pure__))
2927__attribute__((__artificial__))
2928static inline _Bool rbimpl_rtypeddata_p(VALUE obj);
2929__attribute__((__artificial__))
2930static inline void
2931Check_Type(VALUE v, enum ruby_value_type t)
2932{
2933 if ((__builtin_expect(!!(! RB_TYPE_P(v, t)), 0))) {
2934 goto unexpected_type;
2935 }
2936 else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) {
2937 goto unexpected_type;
2938 }
2939 else {
2940 return;
2941 }
2942 unexpected_type:
2943 rb_unexpected_type(v, t);
2944}
2945enum ruby_fl_ushift {
2946 RUBY_FL_USHIFT = 12
2947};
2948__extension__
2949enum
2950
2952 RUBY_FL_WB_PROTECTED = (1<<5),
2953 RUBY_FL_PROMOTED0 = (1<<5),
2954 RUBY_FL_PROMOTED1 = (1<<6),
2956 RUBY_FL_FINALIZE = (1<<7),
2958 __attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
2959 = (1<<8),
2960 RUBY_FL_SHAREABLE = (1<<8),
2962 __attribute__((__deprecated__ ("trustedness turned out to be a wrong idea.")))
2963 = (1<<8),
2964 RUBY_FL_SEEN_OBJ_ID = (1<<9),
2965 RUBY_FL_EXIVAR = (1<<10),
2966 RUBY_FL_FREEZE = (1<<11),
2967 RUBY_FL_USER0 = (1<<(RUBY_FL_USHIFT+0)),
2968 RUBY_FL_USER1 = (1<<(RUBY_FL_USHIFT+1)),
2969 RUBY_FL_USER2 = (1<<(RUBY_FL_USHIFT+2)),
2970 RUBY_FL_USER3 = (1<<(RUBY_FL_USHIFT+3)),
2971 RUBY_FL_USER4 = (1<<(RUBY_FL_USHIFT+4)),
2972 RUBY_FL_USER5 = (1<<(RUBY_FL_USHIFT+5)),
2973 RUBY_FL_USER6 = (1<<(RUBY_FL_USHIFT+6)),
2974 RUBY_FL_USER7 = (1<<(RUBY_FL_USHIFT+7)),
2975 RUBY_FL_USER8 = (1<<(RUBY_FL_USHIFT+8)),
2976 RUBY_FL_USER9 = (1<<(RUBY_FL_USHIFT+9)),
2977 RUBY_FL_USER10 = (1<<(RUBY_FL_USHIFT+10)),
2978 RUBY_FL_USER11 = (1<<(RUBY_FL_USHIFT+11)),
2979 RUBY_FL_USER12 = (1<<(RUBY_FL_USHIFT+12)),
2980 RUBY_FL_USER13 = (1<<(RUBY_FL_USHIFT+13)),
2981 RUBY_FL_USER14 = (1<<(RUBY_FL_USHIFT+14)),
2982 RUBY_FL_USER15 = (1<<(RUBY_FL_USHIFT+15)),
2983 RUBY_FL_USER16 = (1<<(RUBY_FL_USHIFT+16)),
2984 RUBY_FL_USER17 = (1<<(RUBY_FL_USHIFT+17)),
2985 RUBY_FL_USER18 = (1<<(RUBY_FL_USHIFT+18)),
2986 RUBY_FL_USER19 = (1<<(RUBY_FL_USHIFT+19)),
2987 RUBY_ELTS_SHARED = RUBY_FL_USER2,
2989};
2990enum {
2992 __attribute__((__deprecated__ ("It seems there is no actual usage of this enum.")))
2993 = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR
2994};
2995
2996
2998
2999
3000__attribute__((__pure__))
3001__attribute__((__artificial__))
3002__attribute__((__always_inline__)) inline
3003static _Bool
3004RB_FL_ABLE(VALUE obj)
3005{
3006 if (RB_SPECIAL_CONST_P(obj)) {
3007 return 0;
3008 }
3009 else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
3010 return 0;
3011 }
3012 else {
3013 return 1;
3014 }
3015}
3016__attribute__((__pure__))
3017__attribute__((__artificial__))
3018static inline VALUE
3019RB_FL_TEST_RAW(VALUE obj, VALUE flags)
3020{
3021 ((void)0);
3022 return ((struct RBasic *)(obj))->flags & flags;
3023}
3024__attribute__((__pure__))
3025__attribute__((__artificial__))
3026static inline VALUE
3027RB_FL_TEST(VALUE obj, VALUE flags)
3028{
3029 if (RB_FL_ABLE(obj)) {
3030 return RB_FL_TEST_RAW(obj, flags);
3031 }
3032 else {
3033 return 0UL;
3034 }
3035}
3036__attribute__((__pure__))
3037__attribute__((__artificial__))
3038static inline _Bool
3039RB_FL_ANY_RAW(VALUE obj, VALUE flags)
3040{
3041 return RB_FL_TEST_RAW(obj, flags);
3042}
3043__attribute__((__pure__))
3044__attribute__((__artificial__))
3045static inline _Bool
3046RB_FL_ANY(VALUE obj, VALUE flags)
3047{
3048 return RB_FL_TEST(obj, flags);
3049}
3050__attribute__((__pure__))
3051__attribute__((__artificial__))
3052static inline _Bool
3053RB_FL_ALL_RAW(VALUE obj, VALUE flags)
3054{
3055 return RB_FL_TEST_RAW(obj, flags) == flags;
3056}
3057__attribute__((__pure__))
3058__attribute__((__artificial__))
3059static inline _Bool
3060RB_FL_ALL(VALUE obj, VALUE flags)
3061{
3062 return RB_FL_TEST(obj, flags) == flags;
3063}
3064
3065__attribute__((__artificial__))
3066static inline void
3067rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
3068{
3069 obj->flags |= flags;
3070}
3071__attribute__((__artificial__))
3072static inline void
3073RB_FL_SET_RAW(VALUE obj, VALUE flags)
3074{
3075 ((void)0);
3076 rbimpl_fl_set_raw_raw(((struct RBasic *)(obj)), flags);
3077}
3078__attribute__((__artificial__))
3079static inline void
3080RB_FL_SET(VALUE obj, VALUE flags)
3081{
3082 if (RB_FL_ABLE(obj)) {
3083 RB_FL_SET_RAW(obj, flags);
3084 }
3085}
3086
3087__attribute__((__artificial__))
3088static inline void
3089rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
3090{
3091 obj->flags &= ~flags;
3092}
3093__attribute__((__artificial__))
3094static inline void
3095RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
3096{
3097 ((void)0);
3098 rbimpl_fl_unset_raw_raw(((struct RBasic *)(obj)), flags);
3099}
3100__attribute__((__artificial__))
3101static inline void
3102RB_FL_UNSET(VALUE obj, VALUE flags)
3103{
3104 if (RB_FL_ABLE(obj)) {
3105 RB_FL_UNSET_RAW(obj, flags);
3106 }
3107}
3108
3109__attribute__((__artificial__))
3110static inline void
3111rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
3112{
3113 obj->flags ^= flags;
3114}
3115__attribute__((__artificial__))
3116static inline void
3117RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
3118{
3119 ((void)0);
3120 rbimpl_fl_reverse_raw_raw(((struct RBasic *)(obj)), flags);
3121}
3122__attribute__((__artificial__))
3123static inline void
3124RB_FL_REVERSE(VALUE obj, VALUE flags)
3125{
3126 if (RB_FL_ABLE(obj)) {
3127 RB_FL_REVERSE_RAW(obj, flags);
3128 }
3129}
3130__attribute__((__pure__))
3131__attribute__((__artificial__))
3132__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3133static inline _Bool
3134RB_OBJ_TAINTABLE(VALUE obj)
3135{
3136 return 0;
3137}
3138__attribute__((__pure__))
3139__attribute__((__artificial__))
3140__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3141static inline VALUE
3142RB_OBJ_TAINTED_RAW(VALUE obj)
3143{
3144 return 0;
3145}
3146__attribute__((__pure__))
3147__attribute__((__artificial__))
3148__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3149static inline _Bool
3150RB_OBJ_TAINTED(VALUE obj)
3151{
3152 return 0;
3153}
3154__attribute__((__artificial__))
3155__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3156static inline void
3157RB_OBJ_TAINT_RAW(VALUE obj)
3158{
3159 return;
3160}
3161__attribute__((__artificial__))
3162__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3163static inline void
3164RB_OBJ_TAINT(VALUE obj)
3165{
3166 return;
3167}
3168__attribute__((__artificial__))
3169__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3170static inline void
3171RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
3172{
3173 return;
3174}
3175__attribute__((__artificial__))
3176__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3177static inline void
3178RB_OBJ_INFECT(VALUE dst, VALUE src)
3179{
3180 return;
3181}
3182__attribute__((__pure__))
3183__attribute__((__artificial__))
3184static inline VALUE
3185RB_OBJ_FROZEN_RAW(VALUE obj)
3186{
3187 return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
3188}
3189__attribute__((__pure__))
3190__attribute__((__artificial__))
3191static inline _Bool
3192RB_OBJ_FROZEN(VALUE obj)
3193{
3194 if (! RB_FL_ABLE(obj)) {
3195 return 1;
3196 }
3197 else {
3198 return RB_OBJ_FROZEN_RAW(obj);
3199 }
3200}
3201__attribute__((__artificial__))
3202static inline void
3203RB_OBJ_FREEZE_RAW(VALUE obj)
3204{
3205 RB_FL_SET_RAW(obj, RUBY_FL_FREEZE);
3206}
3207
3208
3209void rb_obj_freeze_inline(VALUE obj);
3210
3211
3212enum ruby_rstring_flags {
3213 RSTRING_NOEMBED = RUBY_FL_USER1,
3214 RSTRING_FSTR = RUBY_FL_USER17
3215};
3216struct RString {
3217 struct RBasic basic;
3218 union {
3219 struct {
3220 long len;
3221 char *ptr;
3222 union {
3223 long capa;
3224 VALUE shared;
3225 } aux;
3226 } heap;
3227 struct {
3228 long len;
3229 char ary[1];
3230 } embed;
3231 } as;
3232};
3233
3234
3236VALUE rb_string_value(volatile VALUE *ptr);
3237char *rb_string_value_ptr(volatile VALUE *ptr);
3238char *rb_string_value_cstr(volatile VALUE *ptr);
3241__attribute__((__error__ ("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead")))
3242void rb_check_safe_str(VALUE);
3243void rb_debug_rstring_null_ptr(const char *func);
3244
3245
3246__attribute__((__pure__))
3247__attribute__((__artificial__))
3248static inline long
3249RSTRING_EMBED_LEN(VALUE str)
3250{
3251 ((void)0);
3252 ((void)0);
3253 long f = ((struct RString *)(str))->as.embed.len;
3254 return f;
3255}
3256
3257
3258__attribute__((__pure__))
3259__attribute__((__artificial__))
3260static inline struct RString
3261rbimpl_rstring_getmem(VALUE str)
3262{
3263 ((void)0);
3264 if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) {
3265 return *((struct RString *)(str));
3266 }
3267 else {
3268 struct RString retval;
3269 retval.as.heap.len = RSTRING_EMBED_LEN(str);
3270 retval.as.heap.ptr = ((struct RString *)(str))->as.embed.ary;
3271 return retval;
3272 }
3273}
3274
3275
3276__attribute__((__pure__))
3277__attribute__((__artificial__))
3278static inline long
3279RSTRING_LEN(VALUE str)
3280{
3281 return rbimpl_rstring_getmem(str).as.heap.len;
3282}
3283__attribute__((__artificial__))
3284static inline char *
3285RSTRING_PTR(VALUE str)
3286{
3287 char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr;
3288 if ((__builtin_expect(!!(! ptr), 0))) {
3289 rb_debug_rstring_null_ptr("RSTRING_PTR");
3290 }
3291 return ptr;
3292}
3293__attribute__((__artificial__))
3294static inline char *
3295RSTRING_END(VALUE str)
3296{
3297 struct RString buf = rbimpl_rstring_getmem(str);
3298 if ((__builtin_expect(!!(! buf.as.heap.ptr), 0))) {
3299 rb_debug_rstring_null_ptr("RSTRING_END");
3300 }
3301 return &buf.as.heap.ptr[buf.as.heap.len];
3302}
3303__attribute__((__artificial__))
3304static inline int
3305RSTRING_LENINT(VALUE str)
3306{
3307 return rb_long2int_inline(RSTRING_LEN(str));
3308}
3309__attribute__((__const__))
3310
3311__attribute__((__artificial__))
3312static inline VALUE
3313RB_CHR2FIX(unsigned char c)
3314{
3315 return RB_INT2FIX(c);
3316}
3317static inline char
3318rb_num2char_inline(VALUE x)
3319{
3320 if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
3321 return RSTRING_PTR(x)[0];
3322 else
3323 return ((char)rb_num2int_inline(x));
3324}
3325
3326
3327double rb_num2dbl(VALUE num);
3328__attribute__((__pure__))
3329double rb_float_value(VALUE num);
3330VALUE rb_float_new(double d);
3331VALUE rb_float_new_in_heap(double d);
3332
3333
3334
3335
3336VALUE rb_ll2inum(long long num);
3337VALUE rb_ull2inum(unsigned long long num);
3338long long rb_num2ll(VALUE num);
3339unsigned long long rb_num2ull(VALUE num);
3340
3341
3342static inline VALUE
3343rb_ll2num_inline(long long n)
3344{
3345 if ((((n) < (0x7fffffffffffffffL / 2) + 1) && ((n) >= ((-0x7fffffffffffffffL -1L) / 2)))) return RB_INT2FIX((long)n);
3346 return rb_ll2inum(n);
3347}
3348static inline VALUE
3349rb_ull2num_inline(unsigned long long n)
3350{
3351 if (((n) < (0x7fffffffffffffffL / 2) + 1)) return RB_INT2FIX((long)n);
3352 return rb_ull2inum(n);
3353}
3354static inline long long
3355rb_num2ll_inline(VALUE x)
3356{
3357 if (RB_FIXNUM_P(x))
3358 return rb_fix2long(x);
3359 else
3360 return rb_num2ll(x);
3361}
3362static inline unsigned long long
3363rb_num2ull_inline(VALUE x)
3364{
3365 if (RB_FIXNUM_P(x))
3366 return rb_fix2long(x);
3367 else
3368 return rb_num2ull(x);
3369}
3370
3371
3372short rb_num2short(VALUE num);
3373unsigned short rb_num2ushort(VALUE num);
3374short rb_fix2short(VALUE num);
3375unsigned short rb_fix2ushort(VALUE num);
3376
3377
3378static inline short
3379rb_num2short_inline(VALUE x)
3380{
3381 if (RB_FIXNUM_P(x))
3382 return rb_fix2short(x);
3383 else
3384 return rb_num2short(x);
3385}
3386
3387
3388typedef unsigned long st_data_t;
3389typedef struct st_table st_table;
3390typedef st_data_t st_index_t;
3391typedef int st_compare_func(st_data_t, st_data_t);
3392typedef st_index_t st_hash_func(st_data_t);
3393typedef char st_check_for_sizeof_st_index_t[8 == (int)sizeof(st_index_t) ? 1 : -1];
3394struct st_hash_type {
3395 int (*compare)(st_data_t, st_data_t);
3396 st_index_t (*hash)(st_data_t);
3397};
3398typedef struct st_table_entry st_table_entry;
3399struct st_table_entry;
3400struct st_table {
3401 unsigned char entry_power, bin_power, size_ind;
3402 unsigned int rebuilds_num;
3403 const struct st_hash_type *type;
3404 st_index_t num_entries;
3405 st_index_t *bins;
3406 st_index_t entries_start, entries_bound;
3407 st_table_entry *entries;
3408};
3409enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE};
3410st_table *rb_st_init_table(const struct st_hash_type *);
3411st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t);
3412st_table *rb_st_init_numtable(void);
3413st_table *rb_st_init_numtable_with_size(st_index_t);
3414st_table *rb_st_init_strtable(void);
3415st_table *rb_st_init_strtable_with_size(st_index_t);
3416st_table *rb_st_init_strcasetable(void);
3417st_table *rb_st_init_strcasetable_with_size(st_index_t);
3418int rb_st_delete(st_table *, st_data_t *, st_data_t *);
3419int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
3420int rb_st_shift(st_table *, st_data_t *, st_data_t *);
3421int rb_st_insert(st_table *, st_data_t, st_data_t);
3422int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
3423int rb_st_lookup(st_table *, st_data_t, st_data_t *);
3424int rb_st_get_key(st_table *, st_data_t, st_data_t *);
3425typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
3426int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
3427typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t);
3428typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int);
3429int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
3430int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t);
3431int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t);
3432st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size);
3433st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
3434st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size);
3435st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
3436void rb_st_add_direct(st_table *, st_data_t, st_data_t);
3437void rb_st_free_table(st_table *);
3438void rb_st_cleanup_safe(st_table *, st_data_t);
3439void rb_st_clear(st_table *);
3440st_table *rb_st_copy(st_table *);
3441__attribute__((__const__)) int rb_st_numcmp(st_data_t, st_data_t);
3442__attribute__((__const__)) st_index_t rb_st_numhash(st_data_t);
3443__attribute__((__pure__)) int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3444__attribute__((__pure__)) int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3445__attribute__((__pure__)) size_t rb_st_memsize(const st_table *);
3446__attribute__((__pure__)) st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h);
3447__attribute__((__const__)) st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i);
3448__attribute__((__const__)) st_index_t rb_st_hash_uint(st_index_t h, st_index_t i);
3449__attribute__((__const__)) st_index_t rb_st_hash_end(st_index_t h);
3450__attribute__((__const__)) st_index_t rb_st_hash_start(st_index_t h);
3451void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE);
3452
3453
3454__attribute__((__const__))
3455
3456__attribute__((__artificial__))
3457static inline VALUE
3458RB_ST2FIX(st_data_t i)
3459{
3460 long x = i;
3461 if (x >= 0) {
3462 x &= (0x7fffffffffffffffL / 2);
3463 }
3464 else {
3465 x |= ((-0x7fffffffffffffffL -1L) / 2);
3466 }
3467 ((void)0);
3468 unsigned long y = ((unsigned long)x);
3469 return RB_INT2FIX(y);
3470}
3471
3472
3473void rb_gc_writebarrier(VALUE old, VALUE young);
3474void rb_gc_writebarrier_unprotect(VALUE obj);
3475
3476
3477__attribute__((__pure__))
3478__attribute__((__artificial__))
3479static inline _Bool
3480RB_OBJ_PROMOTED_RAW(VALUE obj)
3481{
3482 ((void)0);
3483 return RB_FL_ANY_RAW(obj, RUBY_FL_PROMOTED);
3484}
3485__attribute__((__pure__))
3486__attribute__((__artificial__))
3487static inline _Bool
3488RB_OBJ_PROMOTED(VALUE obj)
3489{
3490 if (! RB_FL_ABLE(obj)) {
3491 return 0;
3492 }
3493 else {
3494 return RB_OBJ_PROMOTED_RAW(obj);
3495 }
3496}
3497static inline VALUE
3498rb_obj_wb_unprotect(
3499 VALUE x,
3500 [[maybe_unused]]
3501 const char *filename,
3502 [[maybe_unused]]
3503 int line)
3504{
3505 rb_gc_writebarrier_unprotect(x);
3506 return x;
3507}
3508static inline VALUE
3509rb_obj_written(
3510 VALUE a,
3511 [[maybe_unused]]
3512 VALUE oldv,
3513 VALUE b,
3514 [[maybe_unused]]
3515 const char *filename,
3516 [[maybe_unused]]
3517 int line)
3518{
3519 if (!RB_SPECIAL_CONST_P(b)) {
3520 rb_gc_writebarrier(a, b);
3521 }
3522 return a;
3523}
3524static inline VALUE
3525rb_obj_write(
3526 VALUE a, VALUE *slot, VALUE b,
3527 [[maybe_unused]]
3528 const char *filename,
3529 [[maybe_unused]]
3530 int line)
3531{
3532 *slot = b;
3533 rb_obj_written(a, ((VALUE)RUBY_Qundef) , b, filename, line);
3534 return a;
3535}
3536enum ruby_rarray_flags {
3537 RARRAY_EMBED_FLAG = RUBY_FL_USER1,
3538 RARRAY_EMBED_LEN_MASK = RUBY_FL_USER9 | RUBY_FL_USER8 | RUBY_FL_USER7 | RUBY_FL_USER6 |
3540 ,
3541 RARRAY_TRANSIENT_FLAG = RUBY_FL_USER13
3542};
3543enum ruby_rarray_consts {
3544 RARRAY_EMBED_LEN_SHIFT = RUBY_FL_USHIFT + 3
3545};
3546struct RArray {
3547 struct RBasic basic;
3548 union {
3549 struct {
3550 long len;
3551 union {
3552 long capa;
3553 const
3554 VALUE shared_root;
3555 } aux;
3556 const VALUE *ptr;
3557 } heap;
3558 const VALUE ary[1];
3559 } as;
3560};
3561
3562
3563VALUE *rb_ary_ptr_use_start(VALUE ary);
3564void rb_ary_ptr_use_end(VALUE a);
3565void rb_ary_detransient(VALUE a);
3566
3567
3568__attribute__((__pure__))
3569__attribute__((__artificial__))
3570static inline long
3571RARRAY_EMBED_LEN(VALUE ary)
3572{
3573 ((void)0);
3574 ((void)0);
3575 VALUE f = ((struct RBasic *)(ary))->flags;
3576 f &= RARRAY_EMBED_LEN_MASK;
3577 f >>= RARRAY_EMBED_LEN_SHIFT;
3578 return ((long)f);
3579}
3580__attribute__((__pure__))
3581static inline long
3583{
3584 ((void)0);
3585 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3586 return RARRAY_EMBED_LEN(a);
3587 }
3588 else {
3589 return ((struct RArray *)(a))->as.heap.len;
3590 }
3591}
3592__attribute__((__artificial__))
3593static inline int
3594RARRAY_LENINT(VALUE ary)
3595{
3596 return rb_long2int_inline(rb_array_len(ary));
3597}
3598__attribute__((__pure__))
3599__attribute__((__artificial__))
3600static inline _Bool
3601RARRAY_TRANSIENT_P(VALUE ary)
3602{
3603 ((void)0);
3604 return RB_FL_ANY_RAW(ary, RARRAY_TRANSIENT_FLAG);
3605}
3606__attribute__((__pure__))
3607static inline const VALUE *
3608rb_array_const_ptr_transient(VALUE a)
3609{
3610 ((void)0);
3611 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3612 return (((struct RArray *)(a))->as.ary);
3613 }
3614 else {
3615 return (((struct RArray *)(a))->as.heap.ptr);
3616 }
3617}
3618static inline const VALUE *
3619rb_array_const_ptr(VALUE a)
3620{
3621 ((void)0);
3622 if (RARRAY_TRANSIENT_P(a)) {
3623 rb_ary_detransient(a);
3624 }
3625 return rb_array_const_ptr_transient(a);
3626}
3627static inline VALUE *
3628rb_array_ptr_use_start(VALUE a,
3629 [[maybe_unused]]
3630 int allow_transient)
3631{
3632 ((void)0);
3633 if (!allow_transient) {
3634 if (RARRAY_TRANSIENT_P(a)) {
3635 rb_ary_detransient(a);
3636 }
3637 }
3638 return rb_ary_ptr_use_start(a);
3639}
3640static inline void
3641rb_array_ptr_use_end(VALUE a,
3642 [[maybe_unused]]
3643 int allow_transient)
3644{
3645 ((void)0);
3646 rb_ary_ptr_use_end(a);
3647}
3648static inline VALUE *
3649RARRAY_PTR(VALUE ary)
3650{
3651 ((void)0);
3652 VALUE tmp = (1 ? rb_obj_wb_unprotect(ary, "../ruby-3.2.2/include/ruby/internal/core/rarray.h", 550) : ary);
3653 return ((VALUE *)rb_array_const_ptr(tmp));
3654}
3655static inline void
3656RARRAY_ASET(VALUE ary, long i, VALUE v)
3657{
3658 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.2/include/ruby/internal/core/rarray.h", 569)); rb_array_ptr_use_end(rbimpl_ary, (1)); } while (0);
3659}
3660
3661
3662int rb_big_sign(VALUE num);
3663
3664
3665static inline _Bool
3666RBIGNUM_POSITIVE_P(VALUE b)
3667{
3668 ((void)0);
3669 return rb_big_sign(b);
3670}
3671static inline _Bool
3672RBIGNUM_NEGATIVE_P(VALUE b)
3673{
3674 ((void)0);
3675 return ! RBIGNUM_POSITIVE_P(b);
3676}
3677enum ruby_rmodule_flags {
3678 RMODULE_IS_REFINEMENT = RUBY_FL_USER3
3679};
3680struct RClass;
3681
3682
3684
3685
3686typedef void (*RUBY_DATA_FUNC)(void*);
3687struct RData {
3688 struct RBasic basic;
3691 void *data;
3692};
3693
3694
3695VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3696VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3697extern VALUE rb_cObject;
3698
3699
3700__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3701static inline VALUE
3702rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free)
3703{
3704 return rb_data_object_wrap(klass, ptr, mark, free);
3705}
3706static inline void *
3707rb_data_object_get(VALUE obj)
3708{
3709 Check_Type(obj, RUBY_T_DATA);
3710 return ((struct RData *)(obj))->data;
3711}
3712__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3713static inline void *
3714rb_data_object_get_warning(VALUE obj)
3715{
3716 return rb_data_object_get(obj);
3717}
3718static inline VALUE
3719rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
3720{
3721 VALUE result = rb_data_object_zalloc( (klass), (size), ((void (*)(void *))(mark_func)), ((void (*)(void *))(free_func))); (*datap) = ((void *)((struct RData *)(result))->data); ((void)(*datap));
3722 return result;
3723}
3724__attribute__((__deprecated__ ("by: rb_data_object_wrap")))
3725static inline VALUE
3726rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
3727{
3728 return rb_data_object_wrap(klass, data, dmark, dfree);
3729}
3730struct rb_io_t;
3731struct RFile {
3732 struct RBasic basic;
3733 struct rb_io_t *fptr;
3734};
3735struct st_table;
3736
3737
3738size_t rb_hash_size_num(VALUE hash);
3739struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line);
3740VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone);
3741
3742
3743enum ruby_robject_flags {
3744 ROBJECT_EMBED = RUBY_FL_USER1
3745};
3746struct st_table;
3747struct RObject {
3748 struct RBasic basic;
3749 union {
3750 struct {
3751 VALUE *ivptr;
3752 struct rb_id_table *iv_index_tbl;
3753 } heap;
3754 VALUE ary[1];
3755 } as;
3756};
3757static const int32_t ROBJECT_OFFSET_AS_HEAP_IVPTR = __builtin_offsetof (struct RObject, as.heap.ivptr);
3758static const int32_t ROBJECT_OFFSET_AS_HEAP_IV_INDEX_TBL = __builtin_offsetof (struct RObject, as.heap.iv_index_tbl);
3759static const int32_t ROBJECT_OFFSET_AS_ARY = __builtin_offsetof (struct RObject, as.ary);
3760__attribute__((__pure__))
3761__attribute__((__artificial__))
3762static inline VALUE *
3763ROBJECT_IVPTR(VALUE obj)
3764{
3765 ((void)0);
3766 struct RObject *const ptr = ((struct RObject *)(obj));
3767 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
3768 return ptr->as.ary;
3769 }
3770 else {
3771 return ptr->as.heap.ivptr;
3772 }
3773}
3774struct re_patter_buffer;
3775struct RRegexp {
3776 struct RBasic basic;
3777 struct re_pattern_buffer *ptr;
3778 const VALUE src;
3779 unsigned long usecnt;
3780};
3781__attribute__((__pure__))
3782__attribute__((__artificial__))
3783static inline VALUE
3784RREGEXP_SRC(VALUE rexp)
3785{
3786 ((void)0);
3787 VALUE ret = ((struct RRegexp *)(rexp))->src;
3788 ((void)0);
3789 return ret;
3790}
3791__attribute__((__pure__))
3792__attribute__((__artificial__))
3793static inline char *
3794RREGEXP_SRC_PTR(VALUE rexp)
3795{
3796 return RSTRING_PTR(RREGEXP_SRC(rexp));
3797}
3798__attribute__((__pure__))
3799__attribute__((__artificial__))
3800static inline long
3801RREGEXP_SRC_LEN(VALUE rexp)
3802{
3803 return RSTRING_LEN(RREGEXP_SRC(rexp));
3804}
3805__attribute__((__pure__))
3806__attribute__((__artificial__))
3807static inline char *
3808RREGEXP_SRC_END(VALUE rexp)
3809{
3810 return RSTRING_END(RREGEXP_SRC(rexp));
3811}
3812
3813
3817
3818
3819__attribute__((__artificial__))
3820static inline long
3821RSTRUCT_LEN(VALUE st)
3822{
3823 ((void)0);
3824 return rb_num2long_inline(rb_struct_size(st));
3825}
3826__attribute__((__artificial__))
3827static inline VALUE
3828RSTRUCT_SET(VALUE st, int k, VALUE v)
3829{
3830 ((void)0);
3831 return rb_struct_aset(st, rb_int2num_inline(k), (v));
3832}
3833__attribute__((__artificial__))
3834static inline VALUE
3835RSTRUCT_GET(VALUE st, int k)
3836{
3837 ((void)0);
3838 return rb_struct_aref(st, rb_int2num_inline(k));
3839}
3840enum
3841
3842rbimpl_typeddata_flags {
3843 RUBY_TYPED_FREE_IMMEDIATELY = 1,
3844 RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE,
3845 RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED,
3846 RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1
3847};
3848typedef struct rb_data_type_struct rb_data_type_t;
3849struct rb_data_type_struct {
3850 const char *wrap_struct_name;
3851 struct {
3854 size_t (*dsize)(const void *);
3856 void *reserved[1];
3857 } function;
3858 const rb_data_type_t *parent;
3859 void *data;
3860 VALUE flags;
3861};
3862struct RTypedData {
3863 struct RBasic basic;
3864 const rb_data_type_t *type;
3866 void *data;
3867};
3868
3869
3870__attribute__((__nonnull__ (3)))
3871VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type);
3872VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);
3873int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);
3874int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);
3875void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
3876
3877
3878__attribute__((__pure__))
3879__attribute__((__artificial__))
3880static inline _Bool
3881rbimpl_rtypeddata_p(VALUE obj)
3882{
3883 return ((struct RTypedData *)(obj))->typed_flag == 1;
3884}
3885__attribute__((__pure__))
3886__attribute__((__artificial__))
3887static inline _Bool
3888RTYPEDDATA_P(VALUE obj)
3889{
3890 return rbimpl_rtypeddata_p(obj);
3891}
3892__attribute__((__pure__))
3893__attribute__((__artificial__))
3894static inline const struct rb_data_type_struct *
3895RTYPEDDATA_TYPE(VALUE obj)
3896{
3897 return ((struct RTypedData *)(obj))->type;
3898}
3899static inline VALUE
3900rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
3901{
3902 VALUE result = rb_data_typed_object_zalloc(klass, size, type); (*datap) = ((void *)(((struct RTypedData *)(result))->data)); ((void)(*datap));
3903 return result;
3904}
3905__attribute__((__deprecated__ ("by: rb_data_typed_object_wrap")))
3906static inline VALUE
3907rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
3908{
3909 return rb_data_typed_object_wrap(klass, datap, type);
3910}
3911
3912int isalnum (int __c);
3913int isalpha (int __c);
3914int iscntrl (int __c);
3915int isdigit (int __c);
3916int isgraph (int __c);
3917int islower (int __c);
3918int isprint (int __c);
3919int ispunct (int __c);
3920int isspace (int __c);
3921int isupper (int __c);
3922int isxdigit (int __c);
3923int tolower (int __c);
3924int toupper (int __c);
3925int isblank (int __c);
3926int isascii (int __c);
3927int toascii (int __c);
3928extern int isalnum_l (int __c, locale_t __l);
3929extern int isalpha_l (int __c, locale_t __l);
3930extern int isblank_l (int __c, locale_t __l);
3931extern int iscntrl_l (int __c, locale_t __l);
3932extern int isdigit_l (int __c, locale_t __l);
3933extern int isgraph_l (int __c, locale_t __l);
3934extern int islower_l (int __c, locale_t __l);
3935extern int isprint_l (int __c, locale_t __l);
3936extern int ispunct_l (int __c, locale_t __l);
3937extern int isspace_l (int __c, locale_t __l);
3938extern int isupper_l (int __c, locale_t __l);
3939extern int isxdigit_l(int __c, locale_t __l);
3940extern int tolower_l (int __c, locale_t __l);
3941extern int toupper_l (int __c, locale_t __l);
3942extern int isascii_l (int __c, locale_t __l);
3943extern int toascii_l (int __c, locale_t __l);
3944extern __attribute__((dllimport)) const char _ctype_[];
3945const char *__locale_ctype_ptr (void);
3946const char *__locale_ctype_ptr_l (locale_t);
3947
3948
3949
3950__attribute__((__nonnull__ ()))
3951int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3952__attribute__((__nonnull__ ()))
3953int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3954__attribute__((__nonnull__ (1)))
3955unsigned long ruby_strtoul(const char *str, char **endptr, int base);
3956
3957
3958__attribute__((__const__))
3959
3960__attribute__((__artificial__))
3961static inline int
3962rb_isascii(int c)
3963{
3964 return '\0' <= c && c <= '\x7f';
3965}
3966__attribute__((__const__))
3967
3968__attribute__((__artificial__))
3969static inline int
3970rb_isupper(int c)
3971{
3972 return 'A' <= c && c <= 'Z';
3973}
3974__attribute__((__const__))
3975
3976__attribute__((__artificial__))
3977static inline int
3978rb_islower(int c)
3979{
3980 return 'a' <= c && c <= 'z';
3981}
3982__attribute__((__const__))
3983
3984__attribute__((__artificial__))
3985static inline int
3986rb_isalpha(int c)
3987{
3988 return rb_isupper(c) || rb_islower(c);
3989}
3990__attribute__((__const__))
3991
3992__attribute__((__artificial__))
3993static inline int
3994rb_isdigit(int c)
3995{
3996 return '0' <= c && c <= '9';
3997}
3998__attribute__((__const__))
3999
4000__attribute__((__artificial__))
4001static inline int
4002rb_isalnum(int c)
4003{
4004 return rb_isalpha(c) || rb_isdigit(c);
4005}
4006__attribute__((__const__))
4007
4008__attribute__((__artificial__))
4009static inline int
4010rb_isxdigit(int c)
4011{
4012 return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
4013}
4014__attribute__((__const__))
4015
4016__attribute__((__artificial__))
4017static inline int
4018rb_isblank(int c)
4019{
4020 return c == ' ' || c == '\t';
4021}
4022__attribute__((__const__))
4023
4024__attribute__((__artificial__))
4025static inline int
4026rb_isspace(int c)
4027{
4028 return c == ' ' || ('\t' <= c && c <= '\r');
4029}
4030__attribute__((__const__))
4031
4032__attribute__((__artificial__))
4033static inline int
4034rb_iscntrl(int c)
4035{
4036 return ('\0' <= c && c < ' ') || c == '\x7f';
4037}
4038__attribute__((__const__))
4039
4040__attribute__((__artificial__))
4041static inline int
4042rb_isprint(int c)
4043{
4044 return ' ' <= c && c <= '\x7e';
4045}
4046__attribute__((__const__))
4047
4048__attribute__((__artificial__))
4049static inline int
4050rb_ispunct(int c)
4051{
4052 return !rb_isalnum(c);
4053}
4054__attribute__((__const__))
4055
4056__attribute__((__artificial__))
4057static inline int
4058rb_isgraph(int c)
4059{
4060 return '!' <= c && c <= '\x7e';
4061}
4062__attribute__((__const__))
4063
4064__attribute__((__artificial__))
4065static inline int
4066rb_tolower(int c)
4067{
4068 return rb_isupper(c) ? (c|0x20) : c;
4069}
4070__attribute__((__const__))
4071
4072__attribute__((__artificial__))
4073static inline int
4074rb_toupper(int c)
4075{
4076 return rb_islower(c) ? (c&0x5f) : c;
4077}
4078
4079
4080__attribute__((__nonnull__ ()))
4081VALUE rb_eval_string(const char *str);
4082__attribute__((__nonnull__ (1)))
4083VALUE rb_eval_string_protect(const char *str, int *state);
4084__attribute__((__nonnull__ (1)))
4085VALUE rb_eval_string_wrap(const char *str, int *state);
4086VALUE rb_funcall(VALUE recv, ID mid, int n, ...);
4087VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv);
4088VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4089VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv);
4090VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4091VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv);
4092VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4093VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval);
4094VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat);
4095VALUE rb_call_super(int argc, const VALUE *argv);
4096VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat);
4097VALUE rb_current_receiver(void);
4098__attribute__((__nonnull__ (2)))
4099int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values);
4100__attribute__((__nonnull__ ()))
4102
4103
4104typedef uint32_t rb_event_flag_t;
4105typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);
4106
4107
4108void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
4109int rb_remove_event_hook(rb_event_hook_func_t func);
4110
4111
4112
4113
4114void rb_gc_register_address(VALUE *valptr);
4116void rb_gc_unregister_address(VALUE *valptr);
4117void rb_gc_register_mark_object(VALUE object);
4118
4119
4120
4121
4122typedef int ruby_glob_func(const char *path, VALUE arg, void *enc);
4123__attribute__((__nonnull__ ()))
4124void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg);
4125__attribute__((__nonnull__ ()))
4126int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4127__attribute__((__nonnull__ ()))
4128int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4129
4130
4131
4132
4133extern VALUE rb_mKernel;
4134extern VALUE rb_mComparable;
4135extern VALUE rb_mEnumerable;
4136extern VALUE rb_mErrno;
4137extern VALUE rb_mFileTest;
4138extern VALUE rb_mGC;
4139extern VALUE rb_mMath;
4140extern VALUE rb_mProcess;
4141extern VALUE rb_mWaitReadable;
4142extern VALUE rb_mWaitWritable;
4143extern VALUE rb_cBasicObject;
4145extern VALUE rb_cArray;
4146extern VALUE rb_cBinding;
4147extern VALUE rb_cClass;
4148extern VALUE rb_cDir;
4149extern VALUE rb_cEncoding;
4150extern VALUE rb_cEnumerator;
4151extern VALUE rb_cFalseClass;
4152extern VALUE rb_cFile;
4153extern VALUE rb_cComplex;
4154extern VALUE rb_cFloat;
4155extern VALUE rb_cHash;
4156extern VALUE rb_cIO;
4157extern VALUE rb_cInteger;
4158extern VALUE rb_cMatch;
4159extern VALUE rb_cMethod;
4160extern VALUE rb_cModule;
4161extern VALUE rb_cRefinement;
4163extern VALUE rb_cNilClass;
4164extern VALUE rb_cNumeric;
4165extern VALUE rb_cProc;
4166extern VALUE rb_cRandom;
4167extern VALUE rb_cRange;
4168extern VALUE rb_cRational;
4169extern VALUE rb_cRegexp;
4170extern VALUE rb_cStat;
4171extern VALUE rb_cString;
4172extern VALUE rb_cStruct;
4173extern VALUE rb_cSymbol;
4174extern VALUE rb_cThread;
4175extern VALUE rb_cTime;
4176extern VALUE rb_cTrueClass;
4178extern VALUE rb_eException;
4180extern VALUE rb_eSystemExit;
4181extern VALUE rb_eInterrupt;
4182extern VALUE rb_eSignal;
4183extern VALUE rb_eFatal;
4184extern VALUE rb_eArgError;
4185extern VALUE rb_eEOFError;
4186extern VALUE rb_eIndexError;
4188extern VALUE rb_eKeyError;
4189extern VALUE rb_eRangeError;
4190extern VALUE rb_eIOError;
4191extern VALUE rb_eRuntimeError;
4192extern VALUE rb_eFrozenError;
4195extern VALUE rb_eThreadError;
4196extern VALUE rb_eTypeError;
4197extern VALUE rb_eZeroDivError;
4198extern VALUE rb_eNotImpError;
4199extern VALUE rb_eNoMemError;
4204extern VALUE rb_eRegexpError;
4209extern VALUE rb_eScriptError;
4210extern VALUE rb_eNameError;
4211extern VALUE rb_eSyntaxError;
4212extern VALUE rb_eLoadError;
4214extern VALUE rb_stdin;
4215extern VALUE rb_stdout;
4216extern VALUE rb_stderr;
4217__attribute__((__pure__))
4218static inline VALUE
4219rb_class_of(VALUE obj)
4220{
4221 if (! RB_SPECIAL_CONST_P(obj)) {
4222 return RBASIC_CLASS(obj);
4223 }
4224 else if (obj == ((VALUE)RUBY_Qfalse)) {
4225 return rb_cFalseClass;
4226 }
4227 else if (obj == ((VALUE)RUBY_Qnil)) {
4228 return rb_cNilClass;
4229 }
4230 else if (obj == ((VALUE)RUBY_Qtrue)) {
4231 return rb_cTrueClass;
4232 }
4233 else if (RB_FIXNUM_P(obj)) {
4234 return rb_cInteger;
4235 }
4236 else if (RB_STATIC_SYM_P(obj)) {
4237 return rb_cSymbol;
4238 }
4239 else if (RB_FLONUM_P(obj)) {
4240 return rb_cFloat;
4241 }
4242 __builtin_unreachable();
4243}
4244
4245
4246
4247
4248__attribute__((__nonnull__ ()))
4249void ruby_sysinit(int *argc, char ***argv);
4250void ruby_init(void);
4251void* ruby_options(int argc, char** argv);
4252int ruby_executable_node(void *n, int *status);
4253int ruby_run_node(void *n);
4254void ruby_show_version(void);
4255void ruby_show_copyright(void);
4256void ruby_init_stack(volatile VALUE *addr);
4257int ruby_setup(void);
4258int ruby_cleanup(int ex);
4259void ruby_finalize(void);
4260__attribute__((__noreturn__))
4261void ruby_stop(int);
4262int ruby_stack_check(void);
4263size_t ruby_stack_length(VALUE **topnotch);
4264int ruby_exec_node(void *n);
4265void ruby_script(const char* name);
4266void ruby_set_script_name(VALUE name);
4267void ruby_prog_init(void);
4268void ruby_set_argv(int argc, char **argv);
4269void *ruby_process_options(int argc, char **argv);
4270void ruby_init_loadpath(void);
4271void ruby_incpush(const char *path);
4272void ruby_sig_finalize(void);
4273
4274
4275
4276
4277typedef VALUE rb_block_call_func(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4278typedef rb_block_call_func *rb_block_call_func_t;
4279VALUE rb_each(VALUE obj);
4280VALUE rb_yield(VALUE val);
4281VALUE rb_yield_values(int n, ...);
4282VALUE rb_yield_values2(int n, const VALUE *argv);
4283VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat);
4284VALUE rb_yield_splat(VALUE ary);
4285VALUE rb_yield_splat_kw(VALUE ary, int kw_splat);
4286VALUE rb_yield_block(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4287int rb_keyword_given_p(void);
4288int rb_block_given_p(void);
4289void rb_need_block(void);
4290__attribute__((__deprecated__ ("by: rb_block_call since 1.9")))
4291VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);
4292VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2);
4293VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat);
4294VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);
4295VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...);
4296VALUE rb_vrescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, va_list ap);
4297VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
4298VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data);
4299VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data);
4300__attribute__((__noreturn__))
4301void rb_throw(const char *tag, VALUE val);
4302__attribute__((__noreturn__))
4303void rb_throw_obj(VALUE tag, VALUE val);
4304
4305
4306struct rbimpl_size_mul_overflow_tag {
4307 _Bool left;
4308 size_t right;
4309};
4310
4311
4312__attribute__((__malloc__))
4313__attribute__((__returns_nonnull__))
4314__attribute__((__alloc_size__ (2)))
4315__attribute__((__nonnull__ ()))
4316void *rb_alloc_tmp_buffer(volatile VALUE *store, long len);
4317__attribute__((__malloc__))
4318__attribute__((__returns_nonnull__))
4319__attribute__((__alloc_size__ (2,3)))
4320__attribute__((__nonnull__ ()))
4321void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count);
4322void rb_free_tmp_buffer(volatile VALUE *store);
4323__attribute__((__noreturn__))
4324void ruby_malloc_size_overflow(size_t x, size_t y);
4325
4326
4327static inline int
4328rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
4329{
4330 __extension__ unsigned __int128 da, db, c2;
4331 da = a;
4332 db = b;
4333 c2 = da * db;
4334 if (c2 > max) return 1;
4335 *c = ((size_t)c2);
4336 return 0;
4337}
4338
4339__attribute__((__const__))
4340static inline struct rbimpl_size_mul_overflow_tag
4341rbimpl_size_mul_overflow(size_t x, size_t y)
4342{
4343 struct rbimpl_size_mul_overflow_tag ret = { 0, 0, };
4344 ret.left = __builtin_mul_overflow(x, y, &ret.right);
4345 return ret;
4346}
4347static inline size_t
4348rbimpl_size_mul_or_raise(size_t x, size_t y)
4349{
4350 struct rbimpl_size_mul_overflow_tag size =
4351 rbimpl_size_mul_overflow(x, y);
4352 if ((__builtin_expect(!!(! size.left), 1))) {
4353 return size.right;
4354 }
4355 else {
4356 ruby_malloc_size_overflow(x, y);
4357 __builtin_unreachable();
4358 }
4359}
4360static inline void *
4361rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
4362{
4363 const size_t total_size = rbimpl_size_mul_or_raise(count, elsize);
4364 const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
4365 return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
4366}
4367
4368
4369
4370__attribute__((__nonnull__ (1)))
4371__attribute__((__returns_nonnull__))
4372static inline void *
4373ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
4374{
4375 if (n) {
4376 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));
4377 }
4378 else {
4379 return dest;
4380 }
4381}
4382
4383
4384
4385
4386__attribute__((__nonnull__ ()))
4387VALUE rb_define_class(const char *name, VALUE super);
4388__attribute__((__nonnull__ ()))
4389VALUE rb_define_module(const char *name);
4390__attribute__((__nonnull__ ()))
4391VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super);
4392__attribute__((__nonnull__ ()))
4393VALUE rb_define_module_under(VALUE outer, const char *name);
4394void rb_include_module(VALUE klass, VALUE module);
4395void rb_extend_object(VALUE obj, VALUE mod);
4396void rb_prepend_module(VALUE klass, VALUE module);
4397
4398
4399
4400
4401VALUE rb_newobj(void);
4402VALUE rb_newobj_of(VALUE klass, VALUE flags);
4403VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);
4406void rb_singleton_class_attached(VALUE klass, VALUE obj);
4407void rb_copy_generic_ivar(VALUE clone, VALUE obj);
4408
4409
4410__attribute__((__deprecated__ ("This is no longer how Object#clone works.")))
4411static inline void
4412rb_clone_setup(VALUE clone, VALUE obj)
4413{
4414 return;
4415}
4416__attribute__((__deprecated__ ("This is no longer how Object#dup works.")))
4417static inline void
4418rb_dup_setup(VALUE dup, VALUE obj)
4419{
4420 return;
4421}
4422
4423
4424__attribute__((__nonnull__ ()))
4425
4426void rb_mem_clear(VALUE *buf, long len)
4427
4428 ;
4429VALUE rb_assoc_new(VALUE car, VALUE cdr);
4430VALUE rb_check_array_type(VALUE obj);
4431VALUE rb_ary_new(void);
4432VALUE rb_ary_new_capa(long capa);
4433VALUE rb_ary_new_from_args(long n, ...);
4434VALUE rb_ary_new_from_values(long n, const VALUE *elts);
4435VALUE rb_ary_hidden_new(long capa);
4436void rb_ary_free(VALUE ary);
4437void rb_ary_modify(VALUE ary);
4438VALUE rb_ary_freeze(VALUE obj);
4439__attribute__((__pure__))
4440VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs);
4441VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary);
4442VALUE rb_ary_subseq(VALUE ary, long beg, long len);
4443void rb_ary_store(VALUE ary, long key, VALUE val);
4444VALUE rb_ary_dup(VALUE ary);
4445VALUE rb_ary_resurrect(VALUE ary);
4446VALUE rb_ary_to_ary(VALUE obj);
4447VALUE rb_ary_to_s(VALUE ary);
4448VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len);
4449VALUE rb_ary_push(VALUE ary, VALUE elem);
4450VALUE rb_ary_pop(VALUE ary);
4451VALUE rb_ary_shift(VALUE ary);
4452VALUE rb_ary_unshift(VALUE ary, VALUE elem);
4453__attribute__((__pure__))
4454VALUE rb_ary_entry(VALUE ary, long off);
4455VALUE rb_ary_each(VALUE ary);
4456VALUE rb_ary_join(VALUE ary, VALUE sep);
4457VALUE rb_ary_reverse(VALUE ary);
4458VALUE rb_ary_rotate(VALUE ary, long rot);
4459VALUE rb_ary_sort(VALUE ary);
4460VALUE rb_ary_sort_bang(VALUE ary);
4461VALUE rb_ary_delete(VALUE ary, VALUE elem);
4462VALUE rb_ary_delete_at(VALUE ary, long pos);
4463VALUE rb_ary_clear(VALUE ary);
4464VALUE rb_ary_plus(VALUE lhs, VALUE rhs);
4465VALUE rb_ary_concat(VALUE lhs, VALUE rhs);
4466VALUE rb_ary_assoc(VALUE alist, VALUE key);
4467VALUE rb_ary_rassoc(VALUE alist, VALUE key);
4468VALUE rb_ary_includes(VALUE ary, VALUE elem);
4469VALUE rb_ary_cmp(VALUE lhs, VALUE rhs);
4470VALUE rb_ary_replace(VALUE copy, VALUE orig);
4471VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx));
4472VALUE rb_ary_resize(VALUE ary, long len);
4473
4474
4475
4476
4477VALUE rb_exc_new(VALUE etype, const char *ptr, long len);
4478__attribute__((__nonnull__ ()))
4479VALUE rb_exc_new_cstr(VALUE etype, const char *str);
4480VALUE rb_exc_new_str(VALUE etype, VALUE str);
4481__attribute__((__noreturn__))
4482__attribute__((__nonnull__ (1)))
4483__attribute__((__format__(__printf__, 1, 2)))
4484void rb_loaderror(const char *fmt, ...);
4485__attribute__((__noreturn__))
4486__attribute__((__nonnull__ (2)))
4487__attribute__((__format__(__printf__, 2, 3)))
4488void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
4489__attribute__((__noreturn__))
4490__attribute__((__nonnull__ (2)))
4491__attribute__((__format__(__printf__, 2, 3)))
4492void rb_name_error(ID name, const char *fmt, ...);
4493__attribute__((__noreturn__))
4494__attribute__((__nonnull__ (2)))
4495__attribute__((__format__(__printf__, 2, 3)))
4496void rb_name_error_str(VALUE name, const char *fmt, ...);
4497__attribute__((__noreturn__))
4498__attribute__((__nonnull__ (2)))
4499__attribute__((__format__(__printf__, 2, 3)))
4500void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);
4501__attribute__((__noreturn__))
4502__attribute__((__nonnull__ ()))
4503void rb_invalid_str(const char *str, const char *type);
4504__attribute__((__noreturn__))
4505__attribute__((__nonnull__ ()))
4506void rb_error_frozen(const char *what);
4507__attribute__((__noreturn__))
4508void rb_error_frozen_object(VALUE what);
4509void rb_check_frozen(VALUE obj);
4510void rb_check_copyable(VALUE obj, VALUE orig);
4511__attribute__((__noreturn__))
4512static void rb_error_arity(int argc, int min, int max);
4513
4514
4515static inline void
4516rb_check_frozen_inline(VALUE obj)
4517{
4518 if ((__builtin_expect(!!(RB_OBJ_FROZEN(obj)), 0))) {
4519 rb_error_frozen_object(obj);
4520 }
4521}
4522static inline int
4523rb_check_arity(int argc, int min, int max)
4524{
4525 if ((argc < min) || (max != (-1) && argc > max))
4526 rb_error_arity(argc, min, max);
4527 return argc;
4528}
4529
4530
4531__attribute__((__nonnull__ ()))
4532void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg);
4533VALUE rb_check_hash_type(VALUE obj);
4534__attribute__((__nonnull__ ()))
4535void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg);
4536VALUE rb_hash(VALUE obj);
4537VALUE rb_hash_new(void);
4538VALUE rb_hash_new_capa(long capa);
4539VALUE rb_hash_dup(VALUE hash);
4540VALUE rb_hash_freeze(VALUE obj);
4541VALUE rb_hash_aref(VALUE hash, VALUE key);
4542VALUE rb_hash_lookup(VALUE hash, VALUE key);
4543VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def);
4544VALUE rb_hash_fetch(VALUE hash, VALUE key);
4545VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val);
4546VALUE rb_hash_clear(VALUE hash);
4547VALUE rb_hash_delete_if(VALUE hash);
4548VALUE rb_hash_delete(VALUE hash, VALUE key);
4549void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash);
4550typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value);
4551VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func);
4552int rb_path_check(const char *path);
4553VALUE rb_env_clear(void);
4554VALUE rb_hash_size(VALUE hash);
4555
4556
4557
4558
4559VALUE rb_block_proc(void);
4560VALUE rb_block_lambda(void);
4561VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg);
4562VALUE rb_obj_is_proc(VALUE recv);
4563VALUE rb_proc_call(VALUE recv, VALUE args);
4564VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat);
4565VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc);
4566VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat);
4567int rb_proc_arity(VALUE recv);
4568VALUE rb_proc_lambda_p(VALUE recv);
4569VALUE rb_binding_new(void);
4570VALUE rb_obj_method(VALUE recv, VALUE mid);
4571VALUE rb_obj_is_method(VALUE recv);
4572VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv);
4573VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat);
4574VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc);
4575VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat);
4576int rb_mod_method_arity(VALUE mod, ID mid);
4577int rb_obj_method_arity(VALUE obj, ID mid);
4578__attribute__((__nonnull__ (1)))
4579VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state);
4580
4581
4582
4583
4584__attribute__((__nonnull__ (2, 3)))
4585int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...);
4586__attribute__((__nonnull__ (3, 4)))
4587int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...);
4588__attribute__((__error__ ("bad scan arg format")))
4589void rb_scan_args_bad_format(const char*);
4590__attribute__((__error__ ("variable argument length doesn't match")))
4591void rb_scan_args_length_mismatch(const char*,int);
4592
4593
4594static inline _Bool
4595rb_scan_args_keyword_p(int kw_flag, VALUE last)
4596{
4597 switch (kw_flag) {
4598 case 0:
4599 return !! rb_keyword_given_p();
4600 case 1:
4601 return 1;
4602 case 3:
4603 return RB_TYPE_P(last, RUBY_T_HASH);
4604 default:
4605 return 0;
4606 }
4607}
4608__attribute__((__always_inline__)) inline
4609static _Bool
4610rb_scan_args_lead_p(const char *fmt)
4611{
4612 return (((unsigned char)((fmt[0])-'0'))<10);
4613}
4614__attribute__((__always_inline__)) inline
4615static int
4616rb_scan_args_n_lead(const char *fmt)
4617{
4618 return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0);
4619}
4620__attribute__((__always_inline__)) inline
4621static _Bool
4622rb_scan_args_opt_p(const char *fmt)
4623{
4624 return (rb_scan_args_lead_p(fmt) && (((unsigned char)((fmt[1])-'0'))<10));
4625}
4626__attribute__((__always_inline__)) inline
4627static int
4628rb_scan_args_n_opt(const char *fmt)
4629{
4630 return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0);
4631}
4632__attribute__((__always_inline__)) inline
4633static int
4634rb_scan_args_var_idx(const char *fmt)
4635{
4636 return (!rb_scan_args_lead_p(fmt) ? 0 : !(((unsigned char)((fmt[1])-'0'))<10) ? 1 : 2);
4637}
4638__attribute__((__always_inline__)) inline
4639static _Bool
4640rb_scan_args_f_var(const char *fmt)
4641{
4642 return (fmt[rb_scan_args_var_idx(fmt)]=='*');
4643}
4644__attribute__((__always_inline__)) inline
4645static int
4646rb_scan_args_trail_idx(const char *fmt)
4647{
4648 const int idx = rb_scan_args_var_idx(fmt);
4649 return idx+(fmt[idx]=='*');
4650}
4651__attribute__((__always_inline__)) inline
4652static int
4653rb_scan_args_n_trail(const char *fmt)
4654{
4655 const int idx = rb_scan_args_trail_idx(fmt);
4656 return ((((unsigned char)((fmt[idx])-'0'))<10) ? fmt[idx]-'0' : 0);
4657}
4658__attribute__((__always_inline__)) inline
4659static int
4660rb_scan_args_hash_idx(const char *fmt)
4661{
4662 const int idx = rb_scan_args_trail_idx(fmt);
4663 return idx+(((unsigned char)((fmt[idx])-'0'))<10);
4664}
4665__attribute__((__always_inline__)) inline
4666static _Bool
4667rb_scan_args_f_hash(const char *fmt)
4668{
4669 return (fmt[rb_scan_args_hash_idx(fmt)]==':');
4670}
4671__attribute__((__always_inline__)) inline
4672static int
4673rb_scan_args_block_idx(const char *fmt)
4674{
4675 const int idx = rb_scan_args_hash_idx(fmt);
4676 return idx+(fmt[idx]==':');
4677}
4678__attribute__((__always_inline__)) inline
4679static _Bool
4680rb_scan_args_f_block(const char *fmt)
4681{
4682 return (fmt[rb_scan_args_block_idx(fmt)]=='&');
4683}
4684__attribute__((__always_inline__)) inline
4685static int
4686rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
4687 int n_lead, int n_opt, int n_trail,
4688 _Bool f_var, _Bool f_hash, _Bool f_block,
4689 VALUE *vars[], const char *fmt [[maybe_unused]], int varc [[maybe_unused]])
4690
4691
4692{
4693 int i, argi = 0, vari = 0;
4694 VALUE *var, hash = ((VALUE)RUBY_Qnil);
4695 const int n_mand = n_lead + n_trail;
4696 if (f_hash && argc > 0) {
4697 VALUE last = argv[argc - 1];
4698 if (rb_scan_args_keyword_p(kw_flag, last)) {
4699 hash = rb_hash_dup(last);
4700 argc--;
4701 }
4702 }
4703 if (argc < n_mand) {
4704 goto argc_error;
4705 }
4706 for (i = 0; i < n_lead; i++) {
4707 var = vars[vari++];
4708 if (var) *var = argv[argi];
4709 argi++;
4710 }
4711 for (i = 0; i < n_opt; i++) {
4712 var = vars[vari++];
4713 if (argi < argc - n_trail) {
4714 if (var) *var = argv[argi];
4715 argi++;
4716 }
4717 else {
4718 if (var) *var = ((VALUE)RUBY_Qnil);
4719 }
4720 }
4721 if (f_var) {
4722 int n_var = argc - argi - n_trail;
4723 var = vars[vari++];
4724 if (0 < n_var) {
4725 if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
4726 argi += n_var;
4727 }
4728 else {
4729 if (var) *var = rb_ary_new();
4730 }
4731 }
4732 for (i = 0; i < n_trail; i++) {
4733 var = vars[vari++];
4734 if (var) *var = argv[argi];
4735 argi++;
4736 }
4737 if (f_hash) {
4738 var = vars[vari++];
4739 if (var) *var = hash;
4740 }
4741 if (f_block) {
4742 var = vars[vari++];
4743 if (rb_block_given_p()) {
4744 *var = rb_block_proc();
4745 }
4746 else {
4747 *var = ((VALUE)RUBY_Qnil);
4748 }
4749 }
4750 if (argi == argc) {
4751 return argc;
4752 }
4753 argc_error:
4754 rb_error_arity(argc, n_mand, f_var ? (-1) : n_mand + n_opt);
4755 __builtin_unreachable();
4756}
4757
4758
4759ID rb_sym2id(VALUE obj);
4760VALUE rb_id2sym(ID id);
4761__attribute__((__nonnull__ ()))
4762ID rb_intern(const char *name);
4763ID rb_intern2(const char *name, long len);
4764ID rb_intern_str(VALUE str);
4765const char *rb_id2name(ID id);
4766__attribute__((__nonnull__ ()))
4767ID rb_check_id(volatile VALUE *namep);
4768ID rb_to_id(VALUE str);
4769VALUE rb_id2str(ID id);
4770VALUE rb_sym2str(VALUE id);
4771VALUE rb_to_symbol(VALUE name);
4772__attribute__((__nonnull__ ()))
4773VALUE rb_check_symbol(volatile VALUE *namep);
4774
4775
4776__attribute__((__pure__))
4777__attribute__((__nonnull__ ()))
4778static inline ID
4779rb_intern_const(const char *str)
4780{
4781 size_t len = strlen(str);
4782 return rb_intern2(str, ((long)len));
4783}
4784
4785__attribute__((__nonnull__ ()))
4786static inline ID
4787rbimpl_intern_const(ID *ptr, const char *str)
4788{
4789 while (! *ptr) {
4790 *ptr = rb_intern_const(str);
4791 }
4792 return *ptr;
4793}
4794
4795
4796typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);
4797typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data);
4798typedef void rb_gvar_marker_t(VALUE *var);
4799rb_gvar_getter_t rb_gvar_undef_getter;
4800rb_gvar_setter_t rb_gvar_undef_setter;
4801rb_gvar_marker_t rb_gvar_undef_marker;
4802rb_gvar_getter_t rb_gvar_val_getter;
4803rb_gvar_setter_t rb_gvar_val_setter;
4804rb_gvar_marker_t rb_gvar_val_marker;
4805rb_gvar_getter_t rb_gvar_var_getter;
4806rb_gvar_setter_t rb_gvar_var_setter;
4807rb_gvar_marker_t rb_gvar_var_marker;
4808__attribute__((__noreturn__))
4809rb_gvar_setter_t rb_gvar_readonly_setter;
4810__attribute__((__nonnull__ ()))
4811void rb_define_variable(const char *name, VALUE *var);
4812__attribute__((__nonnull__ (1)))
4813void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4814__attribute__((__nonnull__ (1)))
4815void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4816__attribute__((__nonnull__ ()))
4817void rb_define_readonly_variable(const char *name, const VALUE *var);
4818__attribute__((__nonnull__ ()))
4819void rb_define_const(VALUE klass, const char *name, VALUE val);
4820__attribute__((__nonnull__ ()))
4821void rb_define_global_const(const char *name, VALUE val);
4822__attribute__((__nonnull__ ()))
4823void rb_deprecate_constant(VALUE mod, const char *name);
4824__attribute__((__nonnull__ ()))
4825VALUE rb_gv_set(const char *name, VALUE val);
4826__attribute__((__nonnull__ ()))
4827VALUE rb_gv_get(const char *name);
4828__attribute__((__nonnull__ ()))
4829VALUE rb_iv_get(VALUE obj, const char *name);
4830__attribute__((__nonnull__ ()))
4831VALUE rb_iv_set(VALUE obj, const char *name, VALUE val);
4832
4833
4834
4835
4836VALUE rb_get_path(VALUE obj);
4837VALUE rb_get_path_no_checksafe(VALUE);
4838__attribute__((__error__ (" argument length doesn't match"))) int rb_varargs_bad_length(int,int);
4839const char *rb_class2name(VALUE klass);
4840const char *rb_obj_classname(VALUE obj);
4841void rb_p(VALUE obj);
4842VALUE rb_equal(VALUE lhs, VALUE rhs);
4843VALUE rb_require(const char *feature);
4844
4845
4846VALUE rb_big_new(size_t len, int sign);
4847int rb_bigzero_p(VALUE x);
4848VALUE rb_big_clone(VALUE num);
4849void rb_big_2comp(VALUE num);
4850VALUE rb_big_norm(VALUE x);
4851void rb_big_resize(VALUE big, size_t len);
4852__attribute__((__nonnull__ ()))
4853VALUE rb_cstr_to_inum(const char *str, int base, int badcheck);
4854VALUE rb_str_to_inum(VALUE str, int base, int badcheck);
4855__attribute__((__nonnull__ ()))
4856VALUE rb_cstr2inum(const char *str, int base);
4857VALUE rb_str2inum(VALUE str, int base);
4858VALUE rb_big2str(VALUE x, int base);
4859long rb_big2long(VALUE x);
4860unsigned long rb_big2ulong(VALUE x);
4861long long rb_big2ll(VALUE);
4862unsigned long long rb_big2ull(VALUE);
4863__attribute__((__nonnull__ ()))
4864void rb_big_pack(VALUE val, unsigned long *buf, long num_longs);
4865__attribute__((__nonnull__ ()))
4866VALUE rb_big_unpack(unsigned long *buf, long num_longs);
4867__attribute__((__nonnull__ ()))
4868int rb_uv_to_utf8(char buf[6], unsigned long uv);
4869VALUE rb_dbl2big(double d);
4870double rb_big2dbl(VALUE x);
4871VALUE rb_big_cmp(VALUE lhs, VALUE rhs);
4872VALUE rb_big_eq(VALUE lhs, VALUE rhs);
4873VALUE rb_big_eql(VALUE lhs, VALUE rhs);
4874VALUE rb_big_plus(VALUE x, VALUE y);
4875VALUE rb_big_minus(VALUE x, VALUE y);
4876VALUE rb_big_mul(VALUE x, VALUE y);
4877VALUE rb_big_div(VALUE x, VALUE y);
4878VALUE rb_big_idiv(VALUE x, VALUE y);
4879VALUE rb_big_modulo(VALUE x, VALUE y);
4880VALUE rb_big_divmod(VALUE x, VALUE y);
4881VALUE rb_big_pow(VALUE x, VALUE y);
4882VALUE rb_big_and(VALUE x, VALUE y);
4883VALUE rb_big_or(VALUE x, VALUE y);
4884VALUE rb_big_xor(VALUE x, VALUE y);
4885VALUE rb_big_lshift(VALUE x, VALUE y);
4886VALUE rb_big_rshift(VALUE x, VALUE y);
4887__attribute__((__nonnull__ ()))
4888int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4889__attribute__((__nonnull__ ()))
4890VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4891size_t rb_absint_size(VALUE val, int *nlz_bits_ret);
4892size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret);
4893int rb_absint_singlebit_p(VALUE val);
4894
4895
4896
4897
4898int rb_cmpint(VALUE val, VALUE a, VALUE b);
4899__attribute__((__cold__))
4900__attribute__((__noreturn__))
4901void rb_cmperr(VALUE a, VALUE b);
4902
4903
4904
4905
4906VALUE rb_complex_raw(VALUE real, VALUE imag);
4907VALUE rb_complex_new(VALUE real, VALUE imag);
4908VALUE rb_complex_new_polar(VALUE abs, VALUE arg);
4909__attribute__((__deprecated__ ("by: rb_complex_new_polar")))
4910VALUE rb_complex_polar(VALUE abs, VALUE arg);
4911__attribute__((__pure__))
4912VALUE rb_complex_real(VALUE z);
4913__attribute__((__pure__))
4914VALUE rb_complex_imag(VALUE z);
4915VALUE rb_complex_plus(VALUE x, VALUE y);
4916VALUE rb_complex_minus(VALUE x, VALUE y);
4917VALUE rb_complex_mul(VALUE x, VALUE y);
4918VALUE rb_complex_div(VALUE x, VALUE y);
4919VALUE rb_complex_uminus(VALUE z);
4920VALUE rb_complex_conjugate(VALUE z);
4921VALUE rb_complex_abs(VALUE z);
4922VALUE rb_complex_arg(VALUE z);
4923VALUE rb_complex_pow(VALUE base, VALUE exp);
4924VALUE rb_dbl_complex_new(double real, double imag);
4925VALUE rb_Complex(VALUE real, VALUE imag);
4926
4927
4928
4929
4930VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj);
4931VALUE rb_fiber_new_storage(rb_block_call_func_t func, VALUE callback_obj, VALUE storage);
4932VALUE rb_fiber_current(void);
4933VALUE rb_fiber_alive_p(VALUE fiber);
4934VALUE rb_obj_is_fiber(VALUE obj);
4935VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv);
4936VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4937VALUE rb_fiber_yield(int argc, const VALUE *argv);
4938VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat);
4939VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv);
4940VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4941VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv);
4942
4943
4944
4945
4946VALUE rb_dir_getwd(void);
4947
4948
4949
4950
4951VALUE rb_enum_values_pack(int argc, const VALUE *argv);
4952
4953
4954
4955
4956__attribute__((__noreturn__))
4957void rb_exc_raise(VALUE exc);
4958__attribute__((__noreturn__))
4959void rb_exc_fatal(VALUE exc);
4960__attribute__((__noreturn__))
4961VALUE rb_f_exit(int argc, const VALUE *argv);
4962__attribute__((__noreturn__))
4963VALUE rb_f_abort(int argc, const VALUE *argv);
4964__attribute__((__noreturn__))
4965void rb_interrupt(void);
4966ID rb_frame_this_func(void);
4967__attribute__((__noreturn__))
4968void rb_jump_tag(int state);
4969void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv);
4970void rb_obj_call_init_kw(VALUE, int, const VALUE*, int);
4971ID rb_frame_callee(void);
4972VALUE rb_make_exception(int argc, const VALUE *argv);
4973void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg);
4974
4975
4976
4977
4978typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj);
4979typedef struct {
4980 VALUE begin;
4981 VALUE end;
4982 VALUE step;
4983 int exclude_end;
4984} rb_arithmetic_sequence_components_t;
4985VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv);
4986VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func);
4987VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat);
4988__attribute__((__nonnull__ ()))
4989int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf);
4990__attribute__((__nonnull__ ()))
4991VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err);
4992
4993
4994
4995
4996__attribute__((__nonnull__ ()))
4997VALUE rb_file_s_expand_path(int argc, const VALUE *argv);
4998VALUE rb_file_expand_path(VALUE fname, VALUE dname);
4999__attribute__((__nonnull__ ()))
5000VALUE rb_file_s_absolute_path(int argc, const VALUE *argv);
5001VALUE rb_file_absolute_path(VALUE fname, VALUE dname);
5002VALUE rb_file_dirname(VALUE fname);
5003__attribute__((__nonnull__ ()))
5004int rb_find_file_ext(VALUE *feature, const char *const *exts);
5005VALUE rb_find_file(VALUE path);
5006VALUE rb_file_directory_p(VALUE _, VALUE path);
5007VALUE rb_str_encode_ospath(VALUE path);
5008__attribute__((__nonnull__ ()))
5009__attribute__((__pure__))
5010int rb_is_absolute_path(const char *path);
5011off_t rb_file_size(VALUE file);
5012
5013
5014
5015
5016__attribute__((__cold__))
5017__attribute__((__noreturn__))
5018void rb_memerror(void);
5019__attribute__((__pure__))
5020int rb_during_gc(void);
5021__attribute__((__nonnull__ (1)))
5022void rb_gc_mark_locations(const VALUE *start, const VALUE *end);
5023void rb_mark_tbl(struct st_table *tbl);
5024void rb_mark_tbl_no_pin(struct st_table *tbl);
5025void rb_mark_set(struct st_table *tbl);
5026void rb_mark_hash(struct st_table *tbl);
5027void rb_gc_update_tbl_refs(st_table *ptr);
5028void rb_gc_mark_maybe(VALUE obj);
5029void rb_gc_mark(VALUE obj);
5030void rb_gc_mark_movable(VALUE obj);
5031VALUE rb_gc_location(VALUE obj);
5032__attribute__((__deprecated__ ("this is now a no-op function")))
5033void rb_gc_force_recycle(VALUE obj);
5034void rb_gc(void);
5035void rb_gc_copy_finalizer(VALUE dst, VALUE src);
5036VALUE rb_gc_enable(void);
5037VALUE rb_gc_disable(void);
5038VALUE rb_gc_start(void);
5039VALUE rb_define_finalizer(VALUE obj, VALUE block);
5040VALUE rb_undefine_finalizer(VALUE obj);
5041size_t rb_gc_count(void);
5042size_t rb_gc_stat(VALUE key_or_buf);
5043VALUE rb_gc_latest_gc_info(VALUE key_or_buf);
5044void rb_gc_adjust_memory_usage(ssize_t diff);
5045
5046
5047
5048
5049extern VALUE rb_fs;
5050extern VALUE rb_output_fs;
5051extern VALUE rb_rs;
5052extern VALUE rb_default_rs;
5053extern VALUE rb_output_rs;
5054VALUE rb_io_write(VALUE io, VALUE str);
5055VALUE rb_io_gets(VALUE io);
5056VALUE rb_io_getbyte(VALUE io);
5057VALUE rb_io_ungetc(VALUE io, VALUE c);
5058VALUE rb_io_ungetbyte(VALUE io, VALUE b);
5059VALUE rb_io_close(VALUE io);
5060VALUE rb_io_flush(VALUE io);
5061VALUE rb_io_eof(VALUE io);
5062VALUE rb_io_binmode(VALUE io);
5063VALUE rb_io_ascii8bit_binmode(VALUE io);
5064VALUE rb_io_addstr(VALUE io, VALUE str);
5065VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io);
5066VALUE rb_io_print(int argc, const VALUE *argv, VALUE io);
5067VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io);
5068VALUE rb_io_fdopen(int fd, int flags, const char *path);
5069__attribute__((__nonnull__ ()))
5070VALUE rb_file_open(const char *fname, const char *fmode);
5071__attribute__((__nonnull__ ()))
5072VALUE rb_file_open_str(VALUE fname, const char *fmode);
5073VALUE rb_gets(void);
5074__attribute__((__nonnull__ ()))
5075void rb_write_error(const char *str);
5076void rb_write_error2(const char *str, long len);
5077void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
5078__attribute__((__nonnull__ ()))
5079int rb_pipe(int *pipes);
5080int rb_reserved_fd_p(int fd);
5081int rb_cloexec_open(const char *pathname, int flags, mode_t mode);
5082int rb_cloexec_dup(int oldfd);
5083int rb_cloexec_dup2(int oldfd, int newfd);
5084__attribute__((__nonnull__ ()))
5085int rb_cloexec_pipe(int fildes[2]);
5086int rb_cloexec_fcntl_dupfd(int fd, int minfd);
5087void rb_update_max_fd(int fd);
5088void rb_fd_fix_cloexec(int fd);
5089
5090
5091
5092
5093void rb_load(VALUE path, int wrap);
5094void rb_load_protect(VALUE path, int wrap, int *state);
5095__attribute__((__nonnull__ ()))
5096int rb_provided(const char *feature);
5097__attribute__((__nonnull__ (1)))
5098int rb_feature_provided(const char *feature, const char **loading);
5099__attribute__((__nonnull__ ()))
5100void rb_provide(const char *feature);
5101VALUE rb_f_require(VALUE self, VALUE feature);
5102VALUE rb_require_string(VALUE feature);
5103void rb_ext_ractor_safe(_Bool flag);
5104
5105
5106
5107
5108VALUE rb_marshal_dump(VALUE obj, VALUE port);
5109VALUE rb_marshal_load(VALUE port);
5110void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));
5111
5112
5113
5114
5115__attribute__((__noreturn__))
5116__attribute__((__cold__))
5117void rb_num_zerodiv(void);
5118VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op);
5119VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op);
5120VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op);
5121VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op);
5122VALUE rb_num2fix(VALUE val);
5123VALUE rb_fix2str(VALUE val, int base);
5124__attribute__((__const__))
5125VALUE rb_dbl_cmp(double lhs, double rhs);
5126extern VALUE rb_int_positive_pow(long x, unsigned long y);
5127
5128
5129
5130
5131VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);
5132VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);
5133VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);
5134int rb_eql(VALUE lhs, VALUE rhs);
5135VALUE rb_any_to_s(VALUE obj);
5136VALUE rb_inspect(VALUE obj);
5137VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);
5138VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);
5139VALUE rb_obj_alloc(VALUE klass);
5140VALUE rb_obj_clone(VALUE obj);
5141VALUE rb_obj_dup(VALUE obj);
5142VALUE rb_obj_init_copy(VALUE src, VALUE dst);
5143VALUE rb_obj_freeze(VALUE obj);
5144__attribute__((__pure__))
5145VALUE rb_obj_frozen_p(VALUE obj);
5146VALUE rb_obj_id(VALUE obj);
5147__attribute__((__const__))
5148VALUE rb_memory_id(VALUE obj);
5149__attribute__((__pure__))
5150VALUE rb_class_real(VALUE klass);
5151__attribute__((__pure__))
5152VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant);
5153__attribute__((__pure__))
5154VALUE rb_class_superclass(VALUE klass);
5155__attribute__((__nonnull__ ()))
5156VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid);
5157__attribute__((__nonnull__ ()))
5158VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid);
5159__attribute__((__nonnull__ ()))
5160VALUE rb_check_to_integer(VALUE val, const char *mid);
5161VALUE rb_check_to_float(VALUE val);
5162VALUE rb_to_int(VALUE val);
5163VALUE rb_check_to_int(VALUE val);
5164VALUE rb_Integer(VALUE val);
5165VALUE rb_to_float(VALUE val);
5166VALUE rb_Float(VALUE val);
5167VALUE rb_String(VALUE val);
5168VALUE rb_Array(VALUE val);
5169VALUE rb_Hash(VALUE val);
5170__attribute__((__nonnull__ ()))
5171double rb_cstr_to_dbl(const char *str, int mode);
5172double rb_str_to_dbl(VALUE str, int mode);
5173
5174
5175
5176
5177ID rb_id_attrset(ID id);
5178__attribute__((__const__))
5179int rb_is_const_id(ID id);
5180__attribute__((__const__))
5181int rb_is_global_id(ID id);
5182__attribute__((__const__))
5183int rb_is_instance_id(ID id);
5184__attribute__((__const__))
5185int rb_is_attrset_id(ID id);
5186__attribute__((__const__))
5187int rb_is_class_id(ID id);
5188__attribute__((__const__))
5189int rb_is_local_id(ID id);
5190__attribute__((__const__))
5191int rb_is_junk_id(ID);
5192__attribute__((__nonnull__ ()))
5193int rb_symname_p(const char *str);
5194VALUE rb_backref_get(void);
5195void rb_backref_set(VALUE md);
5196VALUE rb_lastline_get(void);
5197void rb_lastline_set(VALUE str);
5198VALUE rb_sym_all_symbols(void);
5199
5200
5201
5202
5203void rb_last_status_set(int status, pid_t pid);
5204VALUE rb_last_status_get(void);
5205__attribute__((__nonnull__ ()))
5206int rb_proc_exec(const char *cmd);
5207__attribute__((__noreturn__))
5208VALUE rb_f_exec(int argc, const VALUE *argv);
5209pid_t rb_waitpid(pid_t pid, int *status, int flags);
5210void rb_syswait(pid_t pid);
5211pid_t rb_spawn(int argc, const VALUE *argv);
5212pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen);
5213VALUE rb_proc_times(VALUE _);
5214VALUE rb_detach_process(pid_t pid);
5215
5216
5217
5218
5219unsigned int rb_genrand_int32(void);
5220double rb_genrand_real(void);
5221void rb_reset_random_seed(void);
5222VALUE rb_random_bytes(VALUE rnd, long n);
5223unsigned int rb_random_int32(VALUE rnd);
5224double rb_random_real(VALUE rnd);
5225unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit);
5226unsigned long rb_genrand_ulong_limited(unsigned long i);
5227
5228
5229
5230
5231VALUE rb_range_new(VALUE beg, VALUE end, int excl);
5232__attribute__((__nonnull__ ()))
5233VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err);
5234__attribute__((__nonnull__ ()))
5235int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp);
5236
5237
5238
5239
5240VALUE rb_rational_raw(VALUE num, VALUE den);
5241VALUE rb_rational_new(VALUE num, VALUE den);
5242VALUE rb_Rational(VALUE num, VALUE den);
5243__attribute__((__pure__))
5244VALUE rb_rational_num(VALUE rat);
5245__attribute__((__pure__))
5246VALUE rb_rational_den(VALUE rat);
5247VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec);
5248VALUE rb_flt_rationalize(VALUE flt);
5249
5250
5251
5252
5253int rb_memcicmp(const void *s1,const void *s2, long n);
5254void rb_match_busy(VALUE md);
5255VALUE rb_reg_nth_defined(int n, VALUE md);
5256VALUE rb_reg_nth_match(int n, VALUE md);
5257int rb_reg_backref_number(VALUE match, VALUE backref);
5258VALUE rb_reg_last_match(VALUE md);
5259VALUE rb_reg_match_pre(VALUE md);
5260VALUE rb_reg_match_post(VALUE md);
5261VALUE rb_reg_match_last(VALUE md);
5262VALUE rb_reg_new_str(VALUE src, int opts);
5263__attribute__((__nonnull__ ()))
5264VALUE rb_reg_new(const char *src, long len, int opts);
5265VALUE rb_reg_alloc(void);
5266VALUE rb_reg_init_str(VALUE re, VALUE s, int options);
5267VALUE rb_reg_match(VALUE re, VALUE str);
5268VALUE rb_reg_match2(VALUE re);
5269int rb_reg_options(VALUE re);
5270
5271
5272
5273
5274extern VALUE rb_argv0;
5275VALUE rb_get_argv(void);
5276__attribute__((__nonnull__ ()))
5277void *rb_load_file(const char *file);
5278void *rb_load_file_str(VALUE file);
5279
5280
5281struct timeval;
5282typedef struct {
5283 int maxfd;
5284 fd_set *fdset;
5285} rb_fdset_t;
5286
5287
5288__attribute__((__nonnull__ ()))
5289void rb_fd_init(rb_fdset_t *f);
5290__attribute__((__nonnull__ ()))
5291void rb_fd_term(rb_fdset_t *f);
5292__attribute__((__nonnull__ ()))
5293void rb_fd_zero(rb_fdset_t *f);
5294__attribute__((__nonnull__ ()))
5295void rb_fd_set(int fd, rb_fdset_t *f);
5296__attribute__((__nonnull__ ()))
5297void rb_fd_clr(int fd, rb_fdset_t *f);
5298__attribute__((__nonnull__ ()))
5299__attribute__((__pure__))
5300int rb_fd_isset(int fd, const rb_fdset_t *f);
5301void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max);
5302void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
5303int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5304
5305
5306__attribute__((__nonnull__ ()))
5307__attribute__((__pure__))
5308static inline fd_set *
5309rb_fd_ptr(const rb_fdset_t *f)
5310{
5311 return f->fdset;
5312}
5313__attribute__((__nonnull__ ()))
5314__attribute__((__pure__))
5315static inline int
5316rb_fd_max(const rb_fdset_t *f)
5317{
5318 return f->maxfd;
5319}
5320
5321
5322struct timeval;
5323int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5324
5325
5326
5327
5328__attribute__((__nonnull__ ()))
5329VALUE rb_f_kill(int argc, const VALUE *argv);
5330void (*ruby_posix_signal(int, void (*)(int)))(int);
5331__attribute__((__pure__))
5332const char *ruby_signal_name(int signo);
5333void ruby_default_signal(int sig);
5334
5335
5336
5337
5338VALUE rb_f_sprintf(int argc, const VALUE *argv);
5339__attribute__((__nonnull__ (1)))
5340__attribute__((__format__(__printf__, 1, 2)))
5341VALUE rb_sprintf(const char *fmt, ...);
5342__attribute__((__nonnull__ (1)))
5343__attribute__((__format__(__printf__, 1, 0)))
5344VALUE rb_vsprintf(const char *fmt, va_list ap);
5345__attribute__((__nonnull__ (2)))
5346__attribute__((__format__(__printf__, 2, 3)))
5347VALUE rb_str_catf(VALUE dst, const char *fmt, ...);
5348__attribute__((__nonnull__ (2)))
5349__attribute__((__format__(__printf__, 2, 0)))
5350VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap);
5351VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt);
5352
5353
5354
5355
5356VALUE rb_str_new(const char *ptr, long len);
5357VALUE rb_str_new_cstr(const char *ptr);
5358VALUE rb_str_new_shared(VALUE str);
5359VALUE rb_str_new_frozen(VALUE str);
5360VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);
5361VALUE rb_external_str_new(const char *ptr, long len);
5362__attribute__((__nonnull__ ()))
5363VALUE rb_external_str_new_cstr(const char *ptr);
5364VALUE rb_locale_str_new(const char *ptr, long len);
5365__attribute__((__nonnull__ ()))
5366VALUE rb_locale_str_new_cstr(const char *ptr);
5367VALUE rb_filesystem_str_new(const char *ptr, long len);
5368__attribute__((__nonnull__ ()))
5369VALUE rb_filesystem_str_new_cstr(const char *ptr);
5370VALUE rb_str_buf_new(long capa);
5371__attribute__((__nonnull__ ()))
5372VALUE rb_str_buf_new_cstr(const char *ptr);
5373VALUE rb_str_tmp_new(long len);
5374VALUE rb_usascii_str_new(const char *ptr, long len);
5375VALUE rb_usascii_str_new_cstr(const char *ptr);
5376VALUE rb_utf8_str_new(const char *ptr, long len);
5377VALUE rb_utf8_str_new_cstr(const char *ptr);
5378VALUE rb_str_new_static(const char *ptr, long len);
5379VALUE rb_usascii_str_new_static(const char *ptr, long len);
5380VALUE rb_utf8_str_new_static(const char *ptr, long len);
5381VALUE rb_str_to_interned_str(VALUE str);
5382VALUE rb_interned_str(const char *ptr, long len);
5383__attribute__((__nonnull__ ()))
5384VALUE rb_interned_str_cstr(const char *ptr);
5385void rb_str_free(VALUE str);
5386void rb_str_shared_replace(VALUE dst, VALUE src);
5387VALUE rb_str_buf_append(VALUE dst, VALUE src);
5388VALUE rb_str_buf_cat(VALUE, const char*, long);
5389VALUE rb_str_buf_cat2(VALUE, const char*);
5390__attribute__((__nonnull__ ()))
5391VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src);
5392VALUE rb_obj_as_string(VALUE obj);
5393VALUE rb_check_string_type(VALUE obj);
5394void rb_must_asciicompat(VALUE obj);
5395VALUE rb_str_dup(VALUE str);
5396VALUE rb_str_resurrect(VALUE str);
5397VALUE rb_str_locktmp(VALUE str);
5398VALUE rb_str_unlocktmp(VALUE str);
5399VALUE rb_str_dup_frozen(VALUE);
5400VALUE rb_str_plus(VALUE lhs, VALUE rhs);
5401VALUE rb_str_times(VALUE str, VALUE num);
5402long rb_str_sublen(VALUE str, long pos);
5403VALUE rb_str_substr(VALUE str, long beg, long len);
5404VALUE rb_str_subseq(VALUE str, long beg, long len);
5405char *rb_str_subpos(VALUE str, long beg, long *len);
5406void rb_str_modify(VALUE str);
5407void rb_str_modify_expand(VALUE str, long capa);
5408VALUE rb_str_freeze(VALUE str);
5409void rb_str_set_len(VALUE str, long len);
5410VALUE rb_str_resize(VALUE str, long len);
5411VALUE rb_str_cat(VALUE dst, const char *src, long srclen);
5412VALUE rb_str_cat_cstr(VALUE dst, const char *src);
5413VALUE rb_str_cat2(VALUE, const char*);
5414VALUE rb_str_append(VALUE dst, VALUE src);
5415VALUE rb_str_concat(VALUE dst, VALUE src);
5416st_index_t rb_memhash(const void *ptr, long len);
5417st_index_t rb_hash_start(st_index_t i);
5418st_index_t rb_str_hash(VALUE str);
5419int rb_str_hash_cmp(VALUE str1, VALUE str2);
5420int rb_str_comparable(VALUE str1, VALUE str2);
5421int rb_str_cmp(VALUE lhs, VALUE rhs);
5422VALUE rb_str_equal(VALUE str1, VALUE str2);
5423VALUE rb_str_drop_bytes(VALUE str, long len);
5424void rb_str_update(VALUE dst, long beg, long len, VALUE src);
5425VALUE rb_str_replace(VALUE dst, VALUE src);
5426VALUE rb_str_inspect(VALUE str);
5427VALUE rb_str_dump(VALUE str);
5428VALUE rb_str_split(VALUE str, const char *delim);
5429rb_gvar_setter_t rb_str_setter;
5430VALUE rb_str_intern(VALUE str);
5431VALUE rb_sym_to_s(VALUE sym);
5432long rb_str_strlen(VALUE str);
5433VALUE rb_str_length(VALUE);
5434long rb_str_offset(VALUE str, long pos);
5435__attribute__((__pure__))
5436size_t rb_str_capacity(VALUE str);
5437VALUE rb_str_ellipsize(VALUE str, long len);
5438VALUE rb_str_scrub(VALUE str, VALUE repl);
5439VALUE rb_str_succ(VALUE orig);
5440__attribute__((__nonnull__ ()))
5441static inline long
5442rbimpl_strlen(const char *str)
5443{
5444 return ((long)strlen(str));
5445}
5446__attribute__((__nonnull__ ()))
5447static inline VALUE
5448rbimpl_str_new_cstr(const char *str)
5449{
5450 long len = rbimpl_strlen(str);
5451 return rb_str_new_static(str, len);
5452}
5453__attribute__((__nonnull__ ()))
5454static inline VALUE
5455rbimpl_usascii_str_new_cstr(const char *str)
5456{
5457 long len = rbimpl_strlen(str);
5458 return rb_usascii_str_new_static(str, len);
5459}
5460__attribute__((__nonnull__ ()))
5461static inline VALUE
5462rbimpl_utf8_str_new_cstr(const char *str)
5463{
5464 long len = rbimpl_strlen(str);
5465 return rb_utf8_str_new_static(str, len);
5466}
5467__attribute__((__nonnull__ ()))
5468static inline VALUE
5469rbimpl_external_str_new_cstr(const char *str)
5470{
5471 long len = rbimpl_strlen(str);
5472 return rb_external_str_new(str, len);
5473}
5474__attribute__((__nonnull__ ()))
5475static inline VALUE
5476rbimpl_locale_str_new_cstr(const char *str)
5477{
5478 long len = rbimpl_strlen(str);
5479 return rb_locale_str_new(str, len);
5480}
5481__attribute__((__nonnull__ ()))
5482static inline VALUE
5483rbimpl_str_buf_new_cstr(const char *str)
5484{
5485 long len = rbimpl_strlen(str);
5486 VALUE buf = rb_str_buf_new(len);
5487 return rb_str_buf_cat(buf, str, len);
5488}
5489__attribute__((__nonnull__ ()))
5490static inline VALUE
5491rbimpl_str_cat_cstr(VALUE buf, const char *str)
5492{
5493 long len = rbimpl_strlen(str);
5494 return rb_str_cat(buf, str, len);
5495}
5496__attribute__((__nonnull__ ()))
5497static inline VALUE
5498rbimpl_exc_new_cstr(VALUE exc, const char *str)
5499{
5500 long len = rbimpl_strlen(str);
5501 return rb_exc_new(exc, str, len);
5502}
5503
5504
5505
5506
5507VALUE rb_struct_new(VALUE klass, ...);
5508VALUE rb_struct_define(const char *name, ...);
5509__attribute__((__nonnull__ (2)))
5510VALUE rb_struct_define_under(VALUE space, const char *name, ...);
5511VALUE rb_struct_alloc(VALUE klass, VALUE values);
5512VALUE rb_struct_initialize(VALUE self, VALUE values);
5513VALUE rb_struct_getmember(VALUE self, ID key);
5514VALUE rb_struct_s_members(VALUE klass);
5515VALUE rb_struct_members(VALUE self);
5516VALUE rb_struct_alloc_noinit(VALUE klass);
5517VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...);
5518__attribute__((__nonnull__ (2)))
5519VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...);
5520
5521
5522
5523
5524struct timeval;
5525void rb_thread_schedule(void);
5526int rb_thread_wait_fd(int fd);
5527int rb_thread_fd_writable(int fd);
5528void rb_thread_fd_close(int fd);
5529int rb_thread_alone(void);
5530void rb_thread_sleep(int sec);
5531void rb_thread_sleep_forever(void);
5532void rb_thread_sleep_deadly(void);
5533VALUE rb_thread_stop(void);
5534VALUE rb_thread_wakeup(VALUE thread);
5535VALUE rb_thread_wakeup_alive(VALUE thread);
5536VALUE rb_thread_run(VALUE thread);
5537VALUE rb_thread_kill(VALUE thread);
5538__attribute__((__nonnull__ (1)))
5539VALUE rb_thread_create(VALUE (*f)(void *g), void *g);
5540void rb_thread_wait_for(struct timeval time);
5541VALUE rb_thread_current(void);
5542VALUE rb_thread_main(void);
5543VALUE rb_thread_local_aref(VALUE thread, ID key);
5544VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val);
5545void rb_thread_atfork(void);
5546void rb_thread_atfork_before_exec(void);
5547VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5548VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5549VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5550VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5551typedef void rb_unblock_function_t(void *);
5552typedef VALUE rb_blocking_function_t(void *);
5553void rb_thread_check_ints(void);
5554int rb_thread_interrupted(VALUE thval);
5555VALUE rb_mutex_new(void);
5556VALUE rb_mutex_locked_p(VALUE mutex);
5557VALUE rb_mutex_trylock(VALUE mutex);
5558VALUE rb_mutex_lock(VALUE mutex);
5559VALUE rb_mutex_unlock(VALUE mutex);
5560VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
5561VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
5562
5563
5564
5565
5566struct timespec;
5567struct timeval;
5568__attribute__((__nonnull__ ()))
5569void rb_timespec_now(struct timespec *ts);
5570VALUE rb_time_new(time_t sec, long usec);
5571VALUE rb_time_nano_new(time_t sec, long nsec);
5572__attribute__((__nonnull__ ()))
5573VALUE rb_time_timespec_new(const struct timespec *ts, int offset);
5574VALUE rb_time_num_new(VALUE timev, VALUE off);
5575struct timeval rb_time_interval(VALUE num);
5576struct timeval rb_time_timeval(VALUE time);
5577struct timespec rb_time_timespec(VALUE time);
5578struct timespec rb_time_timespec_interval(VALUE num);
5579VALUE rb_time_utc_offset(VALUE time);
5580
5581
5582
5583
5584VALUE rb_mod_name(VALUE mod);
5585VALUE rb_class_path(VALUE mod);
5586VALUE rb_class_path_cached(VALUE mod);
5587__attribute__((__nonnull__ ()))
5588void rb_set_class_path(VALUE klass, VALUE space, const char *name);
5589void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);
5590VALUE rb_path_to_class(VALUE path);
5591__attribute__((__nonnull__ ()))
5592VALUE rb_path2class(const char *path);
5593VALUE rb_class_name(VALUE obj);
5594VALUE rb_autoload_load(VALUE space, ID name);
5595VALUE rb_autoload_p(VALUE space, ID name);
5596VALUE rb_f_trace_var(int argc, const VALUE *argv);
5597VALUE rb_f_untrace_var(int argc, const VALUE *argv);
5598VALUE rb_f_global_variables(void);
5599void rb_alias_variable(ID dst, ID src);
5600void rb_free_generic_ivar(VALUE obj);
5601VALUE rb_ivar_get(VALUE obj, ID name);
5602VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);
5603VALUE rb_ivar_defined(VALUE obj, ID name);
5604void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);
5605st_index_t rb_ivar_count(VALUE obj);
5606VALUE rb_attr_get(VALUE obj, ID name);
5607VALUE rb_obj_instance_variables(VALUE obj);
5608VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name);
5609void *rb_mod_const_at(VALUE, void*);
5610void *rb_mod_const_of(VALUE, void*);
5611VALUE rb_const_list(void*);
5612VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv);
5613VALUE rb_mod_remove_const(VALUE space, VALUE name);
5614int rb_const_defined(VALUE space, ID name);
5615int rb_const_defined_at(VALUE space, ID name);
5616int rb_const_defined_from(VALUE space, ID name);
5617VALUE rb_const_get(VALUE space, ID name);
5618VALUE rb_const_get_at(VALUE space, ID name);
5619VALUE rb_const_get_from(VALUE space, ID name);
5620void rb_const_set(VALUE space, ID name, VALUE val);
5621VALUE rb_const_remove(VALUE space, ID name);
5622VALUE rb_cvar_defined(VALUE klass, ID name);
5623void rb_cvar_set(VALUE klass, ID name, VALUE val);
5624VALUE rb_cvar_get(VALUE klass, ID name);
5625__attribute__((__nonnull__ ()))
5626VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front);
5627__attribute__((__nonnull__ ()))
5628void rb_cv_set(VALUE klass, const char *name, VALUE val);
5629__attribute__((__nonnull__ ()))
5630VALUE rb_cv_get(VALUE klass, const char *name);
5631__attribute__((__nonnull__ ()))
5632void rb_define_class_variable(VALUE, const char*, VALUE);
5633VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv);
5634VALUE rb_mod_remove_cvar(VALUE mod, VALUE name);
5635
5636
5637int ruby_native_thread_p(void);
5638__attribute__((__nonnull__ (3)))
5639__attribute__((__format__(__printf__, 3, 4)))
5640int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
5641__attribute__((__nonnull__ (3)))
5642__attribute__((__format__(__printf__, 3, 0)))
5643int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
5644
5645
5646
5647typedef long jmp_buf[32];
5648
5649typedef long sigjmp_buf[32 +1+((sizeof (long) + sizeof (sigset_t) - 1)
5650 /sizeof (long))];
5651extern void siglongjmp (sigjmp_buf, int) __attribute__ ((__noreturn__));
5652extern int sigsetjmp (sigjmp_buf, int);
5653extern void _longjmp (jmp_buf, int) __attribute__ ((__noreturn__));
5654extern int _setjmp (jmp_buf);
5655
5656void longjmp (jmp_buf __jmpb, int __retval)
5657 __attribute__ ((__noreturn__));
5658int setjmp (jmp_buf __jmpb);
5659
5660void __assert (const char *, int, const char *)
5661 __attribute__ ((__noreturn__));
5662void __assert_func (const char *, int, const char *, const char *)
5663 __attribute__ ((__noreturn__));
5664static inline char *container_of_or_null_(void *member_ptr, size_t offset)
5665{
5666 return member_ptr ? (char *)member_ptr - offset : ((void *)0);
5667}
5668struct ccan_list_node
5669{
5670 struct ccan_list_node *next, *prev;
5671};
5672struct ccan_list_head
5673{
5674 struct ccan_list_node n;
5675};
5676static inline void ccan_list_head_init(struct ccan_list_head *h)
5677{
5678 h->n.next = h->n.prev = &h->n;
5679}
5680static inline void ccan_list_node_init(struct ccan_list_node *n)
5681{
5682 n->next = n->prev = n;
5683}
5684static inline void ccan_list_add_after_(struct ccan_list_head *h,
5685 struct ccan_list_node *p,
5686 struct ccan_list_node *n,
5687 const char *abortstr)
5688{
5689 n->next = p->next;
5690 n->prev = p;
5691 p->next->prev = n;
5692 p->next = n;
5693 (void)((void)abortstr, h);
5694}
5695static inline void ccan_list_add_(struct ccan_list_head *h,
5696 struct ccan_list_node *n,
5697 const char *abortstr)
5698{
5699 ccan_list_add_after_(h, &h->n, n, abortstr);
5700}
5701static inline void ccan_list_add_before_(struct ccan_list_head *h,
5702 struct ccan_list_node *p,
5703 struct ccan_list_node *n,
5704 const char *abortstr)
5705{
5706 n->next = p;
5707 n->prev = p->prev;
5708 p->prev->next = n;
5709 p->prev = n;
5710 (void)((void)abortstr, h);
5711}
5712static inline void ccan_list_add_tail_(struct ccan_list_head *h,
5713 struct ccan_list_node *n,
5714 const char *abortstr)
5715{
5716 ccan_list_add_before_(h, &h->n, n, abortstr);
5717}
5718static inline int ccan_list_empty_(const struct ccan_list_head *h, const char* abortstr)
5719{
5720 (void)((void)abortstr, h);
5721 return h->n.next == &h->n;
5722}
5723static inline _Bool ccan_list_empty_nocheck(const struct ccan_list_head *h)
5724{
5725 return h->n.next == &h->n;
5726}
5727static inline void ccan_list_del_(struct ccan_list_node *n, const char* abortstr)
5728{
5729 (void)((void)abortstr, n);
5730 n->next->prev = n->prev;
5731 n->prev->next = n->next;
5732}
5733static inline void ccan_list_del_init_(struct ccan_list_node *n, const char *abortstr)
5734{
5735 ccan_list_del_(n, abortstr);
5736 ccan_list_node_init(n);
5737}
5738static inline void ccan_list_del_from(struct ccan_list_head *h, struct ccan_list_node *n)
5739{
5740 ((void)0);
5741 ccan_list_del_(n, "../ruby-3.2.2/ccan/list/list.h" ":" "329");
5742}
5743static inline void ccan_list_swap_(struct ccan_list_node *o,
5744 struct ccan_list_node *n,
5745 const char* abortstr)
5746{
5747 (void)((void)abortstr, o);
5748 *n = *o;
5749 n->next->prev = n;
5750 n->prev->next = n;
5751}
5752static inline const void *ccan_list_top_(const struct ccan_list_head *h, size_t off)
5753{
5754 if (ccan_list_empty_(h, "../ruby-3.2.2/ccan/list/list.h" ":" "399"))
5755 return ((void *)0);
5756 return (const char *)h->n.next - off;
5757}
5758static inline const void *ccan_list_pop_(const struct ccan_list_head *h, size_t off)
5759{
5760 struct ccan_list_node *n;
5761 if (ccan_list_empty_(h, "../ruby-3.2.2/ccan/list/list.h" ":" "425"))
5762 return ((void *)0);
5763 n = h->n.next;
5764 ccan_list_del_(n, "../ruby-3.2.2/ccan/list/list.h" ":" "428");
5765 return (const char *)n - off;
5766}
5767static inline const void *ccan_list_tail_(const struct ccan_list_head *h, size_t off)
5768{
5769 if (ccan_list_empty_(h, "../ruby-3.2.2/ccan/list/list.h" ":" "451"))
5770 return ((void *)0);
5771 return (const char *)h->n.prev - off;
5772}
5773static inline void ccan_list_append_list_(struct ccan_list_head *to,
5774 struct ccan_list_head *from,
5775 const char *abortstr)
5776{
5777 struct ccan_list_node *from_tail = ((void)abortstr, from)->n.prev;
5778 struct ccan_list_node *to_tail = ((void)abortstr, to)->n.prev;
5779 to->n.prev = from_tail;
5780 from_tail->next = &to->n;
5781 to_tail->next = &from->n;
5782 from->n.prev = to_tail;
5783 ccan_list_del_(&from->n, "../ruby-3.2.2/ccan/list/list.h" ":" "600");
5784 ccan_list_head_init(from);
5785}
5786static inline void ccan_list_prepend_list_(struct ccan_list_head *to,
5787 struct ccan_list_head *from,
5788 const char *abortstr)
5789{
5790 struct ccan_list_node *from_tail = ((void)abortstr, from)->n.prev;
5791 struct ccan_list_node *to_head = ((void)abortstr, to)->n.next;
5792 to->n.next = &from->n;
5793 from->n.prev = &to->n;
5794 to_head->prev = from_tail;
5795 from_tail->next = to_head;
5796 ccan_list_del_(&from->n, "../ruby-3.2.2/ccan/list/list.h" ":" "632");
5797 ccan_list_head_init(from);
5798}
5799static inline void *ccan_list_node_to_off_(struct ccan_list_node *node, size_t off)
5800{
5801 return (void *)((char *)node - off);
5802}
5803static inline struct ccan_list_node *ccan_list_node_from_off_(void *ptr, size_t off)
5804{
5805 return (struct ccan_list_node *)((char *)ptr + off);
5806}
5807static inline void *ccan_list_entry_or_null(const struct ccan_list_head *h,
5808 const struct ccan_list_node *n,
5809 size_t off)
5810{
5811 if (n == &h->n)
5812 return ((void *)0);
5813 return (char *)n - off;
5814}
5815enum ruby_id_types {
5816 RUBY_ID_STATIC_SYM = 0x01,
5817 RUBY_ID_LOCAL = 0x00,
5818 RUBY_ID_INSTANCE = (0x01<<1),
5819 RUBY_ID_GLOBAL = (0x03<<1),
5820 RUBY_ID_ATTRSET = (0x04<<1),
5821 RUBY_ID_CONST = (0x05<<1),
5822 RUBY_ID_CLASS = (0x06<<1),
5823 RUBY_ID_JUNK = (0x07<<1),
5824 RUBY_ID_INTERNAL = RUBY_ID_JUNK,
5825 RUBY_ID_SCOPE_SHIFT = 4,
5826 RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1)
5827};
5828enum ruby_method_ids {
5829 idDot2 = 128,
5830 idDot3 = 129,
5831 idUPlus = 132,
5832 idUMinus = 133,
5833 idPow = 134,
5834 idCmp = 135,
5835 idPLUS = '+',
5836 idMINUS = '-',
5837 idMULT = '*',
5838 idDIV = '/',
5839 idMOD = '%',
5840 idLTLT = 136,
5841 idGTGT = 137,
5842 idLT = '<',
5843 idLE = 138,
5844 idGT = '>',
5845 idGE = 139,
5846 idEq = 140,
5847 idEqq = 141,
5848 idNeq = 142,
5849 idNot = '!',
5850 idAnd = '&',
5851 idOr = '|',
5852 idBackquote = '`',
5853 idEqTilde = 143,
5854 idNeqTilde = 144,
5855 idAREF = 145,
5856 idASET = 146,
5857 idCOLON2 = 147,
5858 idANDOP = 148,
5859 idOROP = 149,
5860 idANDDOT = 150,
5861 tPRESERVED_ID_BEGIN = 150,
5862 idNilP,
5863 idNULL,
5864 idEmptyP,
5865 idEqlP,
5866 idRespond_to,
5867 idRespond_to_missing,
5868 idIFUNC,
5869 idCFUNC,
5870 id_core_set_method_alias,
5871 id_core_set_variable_alias,
5872 id_core_undef_method,
5873 id_core_define_method,
5874 id_core_define_singleton_method,
5875 id_core_set_postexe,
5876 id_core_hash_merge_ptr,
5877 id_core_hash_merge_kwd,
5878 id_core_raise,
5879 id_core_sprintf,
5880 id_debug_created_info,
5881 tPRESERVED_ID_END,
5882 tTOKEN_LOCAL_BEGIN = tPRESERVED_ID_END-1,
5883 tMax,
5884 tMin,
5885 tFreeze,
5886 tInspect,
5887 tIntern,
5888 tObject_id,
5889 tConst_added,
5890 tConst_missing,
5891 tMethodMissing,
5892 tMethod_added,
5893 tSingleton_method_added,
5894 tMethod_removed,
5895 tSingleton_method_removed,
5896 tMethod_undefined,
5897 tSingleton_method_undefined,
5898 tLength,
5899 tSize,
5900 tGets,
5901 tSucc,
5902 tEach,
5903 tProc,
5904 tLambda,
5905 tSend,
5906 t__send__,
5907 t__attached__,
5908 t__recursive_key__,
5909 tInitialize,
5910 tInitialize_copy,
5911 tInitialize_clone,
5912 tInitialize_dup,
5913 tTo_int,
5914 tTo_ary,
5915 tTo_str,
5916 tTo_sym,
5917 tTo_hash,
5918 tTo_proc,
5919 tTo_io,
5920 tTo_a,
5921 tTo_s,
5922 tTo_i,
5923 tTo_f,
5924 tTo_r,
5925 tBt,
5926 tBt_locations,
5927 tCall,
5928 tMesg,
5929 tException,
5930 tLocals,
5931 tNOT,
5932 tAND,
5933 tOR,
5934 tDiv,
5935 tDivmod,
5936 tFdiv,
5937 tQuo,
5938 tName,
5939 tNil,
5940 tPath,
5941 tUScore,
5942 tNUMPARAM_1,
5943 tNUMPARAM_2,
5944 tNUMPARAM_3,
5945 tNUMPARAM_4,
5946 tNUMPARAM_5,
5947 tNUMPARAM_6,
5948 tNUMPARAM_7,
5949 tNUMPARAM_8,
5950 tNUMPARAM_9,
5951 tDefault,
5952 tTOKEN_LOCAL_END,
5953 tTOKEN_INSTANCE_BEGIN = tTOKEN_LOCAL_END-1,
5954 tTOKEN_INSTANCE_END,
5955 tTOKEN_GLOBAL_BEGIN = tTOKEN_INSTANCE_END-1,
5956 tLASTLINE,
5957 tBACKREF,
5958 tERROR_INFO,
5959 tTOKEN_GLOBAL_END,
5960 tTOKEN_CONST_BEGIN = tTOKEN_GLOBAL_END-1,
5961 tTOKEN_CONST_END,
5962 tTOKEN_CLASS_BEGIN = tTOKEN_CONST_END-1,
5963 tTOKEN_CLASS_END,
5964 tTOKEN_ATTRSET_BEGIN = tTOKEN_CLASS_END-1,
5965 tTOKEN_ATTRSET_END,
5966 tNEXT_ID = tTOKEN_ATTRSET_END,
5967 idMax = ((tMax<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5968 idMin = ((tMin<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5969 idFreeze = ((tFreeze<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5970 idInspect = ((tInspect<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5971 idIntern = ((tIntern<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5972 idObject_id = ((tObject_id<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5973 idConst_added = ((tConst_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5974 idConst_missing = ((tConst_missing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5975 idMethodMissing = ((tMethodMissing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5976 idMethod_added = ((tMethod_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5977 idSingleton_method_added = ((tSingleton_method_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5978 idMethod_removed = ((tMethod_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5979 idSingleton_method_removed = ((tSingleton_method_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5980 idMethod_undefined = ((tMethod_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5981 idSingleton_method_undefined = ((tSingleton_method_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5982 idLength = ((tLength<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5983 idSize = ((tSize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5984 idGets = ((tGets<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5985 idSucc = ((tSucc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5986 idEach = ((tEach<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5987 idProc = ((tProc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5988 idLambda = ((tLambda<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5989 idSend = ((tSend<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5990 id__send__ = ((t__send__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5991 id__attached__ = ((t__attached__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5992 id__recursive_key__ = ((t__recursive_key__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5993 idInitialize = ((tInitialize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5994 idInitialize_copy = ((tInitialize_copy<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5995 idInitialize_clone = ((tInitialize_clone<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5996 idInitialize_dup = ((tInitialize_dup<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5997 idTo_int = ((tTo_int<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5998 idTo_ary = ((tTo_ary<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5999 idTo_str = ((tTo_str<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6000 idTo_sym = ((tTo_sym<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6001 idTo_hash = ((tTo_hash<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6002 idTo_proc = ((tTo_proc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6003 idTo_io = ((tTo_io<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6004 idTo_a = ((tTo_a<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6005 idTo_s = ((tTo_s<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6006 idTo_i = ((tTo_i<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6007 idTo_f = ((tTo_f<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6008 idTo_r = ((tTo_r<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6009 idBt = ((tBt<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6010 idBt_locations = ((tBt_locations<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6011 idCall = ((tCall<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6012 idMesg = ((tMesg<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6013 idException = ((tException<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6014 idLocals = ((tLocals<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6015 idNOT = ((tNOT<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6016 idAND = ((tAND<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6017 idOR = ((tOR<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6018 idDiv = ((tDiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6019 idDivmod = ((tDivmod<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6020 idFdiv = ((tFdiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6021 idQuo = ((tQuo<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6022 idName = ((tName<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6023 idNil = ((tNil<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6024 idPath = ((tPath<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6025 idUScore = ((tUScore<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6026 idNUMPARAM_1 = ((tNUMPARAM_1<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6027 idNUMPARAM_2 = ((tNUMPARAM_2<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6028 idNUMPARAM_3 = ((tNUMPARAM_3<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6029 idNUMPARAM_4 = ((tNUMPARAM_4<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6030 idNUMPARAM_5 = ((tNUMPARAM_5<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6031 idNUMPARAM_6 = ((tNUMPARAM_6<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6032 idNUMPARAM_7 = ((tNUMPARAM_7<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6033 idNUMPARAM_8 = ((tNUMPARAM_8<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6034 idNUMPARAM_9 = ((tNUMPARAM_9<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6035 idDefault = ((tDefault<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6036 idLASTLINE = ((tLASTLINE<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6037 idBACKREF = ((tBACKREF<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6038 idERROR_INFO = ((tERROR_INFO<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6039 tLAST_OP_ID = tPRESERVED_ID_END-1,
6040 idLAST_OP_ID = tLAST_OP_ID >> RUBY_ID_SCOPE_SHIFT
6041};
6042void rb_obj_info_dump(VALUE obj);
6043void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
6044
6045
6046void ruby_debug_breakpoint(void);
6047__attribute__((__format__(__printf__, (1), (2)))) void ruby_debug_printf(const char*, ...);
6048
6049
6050VALUE rb_ary_last(int, const VALUE *, VALUE);
6051void rb_ary_set_len(VALUE, long);
6052void rb_ary_delete_same(VALUE, VALUE);
6053VALUE rb_ary_hidden_new_fill(long capa);
6054VALUE rb_ary_at(VALUE, VALUE);
6055size_t rb_ary_memsize(VALUE);
6056VALUE rb_to_array_type(VALUE obj);
6057VALUE rb_to_array(VALUE obj);
6058void rb_ary_cancel_sharing(VALUE ary);
6059size_t rb_ary_size_as_embedded(VALUE ary);
6060void rb_ary_make_embedded(VALUE ary);
6061_Bool rb_ary_embeddable_p(VALUE ary);
6062VALUE rb_ary_diff(VALUE ary1, VALUE ary2);
6063static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
6064static inline _Bool ARY_PTR_USING_P(VALUE ary);
6065static inline void RARY_TRANSIENT_SET(VALUE ary);
6066static inline void RARY_TRANSIENT_UNSET(VALUE ary);
6067
6068
6069VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
6070VALUE rb_check_to_array(VALUE ary);
6071VALUE rb_ary_behead(VALUE, long);
6072VALUE rb_ary_aref1(VALUE ary, VALUE i);
6073struct rb_execution_context_struct;
6074VALUE rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts);
6075
6076
6077static inline VALUE
6078rb_ary_entry_internal(VALUE ary, long offset)
6079{
6080 long len = rb_array_len(ary);
6081 const VALUE *ptr = rb_array_const_ptr_transient(ary);
6082 if (len == 0) return ((VALUE)RUBY_Qnil);
6083 if (offset < 0) {
6084 offset += len;
6085 if (offset < 0) return ((VALUE)RUBY_Qnil);
6086 }
6087 else if (len <= offset) {
6088 return ((VALUE)RUBY_Qnil);
6089 }
6090 return ptr[offset];
6091}
6092static inline _Bool
6093ARY_PTR_USING_P(VALUE ary)
6094{
6095 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER14));
6096}
6097[[maybe_unused]]
6098static inline int
6099ary_should_not_be_shared_and_embedded(VALUE ary)
6100{
6101 return !RB_FL_ALL_RAW(ary, RUBY_ELTS_SHARED|RARRAY_EMBED_FLAG);
6102}
6103static inline _Bool
6104ARY_SHARED_P(VALUE ary)
6105{
6106 ((void)0);
6107 ((void)0);
6108 return RB_FL_TEST_RAW(ary, RUBY_ELTS_SHARED);
6109}
6110static inline _Bool
6111ARY_EMBED_P(VALUE ary)
6112{
6113 ((void)0);
6114 ((void)0);
6115 return RB_FL_TEST_RAW(ary, RARRAY_EMBED_FLAG);
6116}
6117static inline VALUE
6118ARY_SHARED_ROOT(VALUE ary)
6119{
6120 ((void)0);
6121 return ((struct RArray *)(ary))->as.heap.aux.shared_root;
6122}
6123static inline _Bool
6124ARY_SHARED_ROOT_P(VALUE ary)
6125{
6126 ((void)0);
6127 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER12));
6128}
6129static inline long
6130ARY_SHARED_ROOT_REFCNT(VALUE ary)
6131{
6132 ((void)0);
6133 return ((struct RArray *)(ary))->as.heap.aux.capa;
6134}
6135static inline void
6136RARY_TRANSIENT_SET(VALUE ary)
6137{
6138 RB_FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6139}
6140static inline void
6141RARY_TRANSIENT_UNSET(VALUE ary)
6142{
6143 RB_FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6144}
6145__attribute__((__pure__))
6146__attribute__((__artificial__))
6147static inline VALUE
6148RARRAY_AREF(VALUE ary, long i)
6149{
6150 ((void)0);
6151 return rb_array_const_ptr_transient(ary)[i];
6152}
6153enum ruby_basic_operators {
6154 BOP_PLUS,
6155 BOP_MINUS,
6156 BOP_MULT,
6157 BOP_DIV,
6158 BOP_MOD,
6159 BOP_EQ,
6160 BOP_EQQ,
6161 BOP_LT,
6162 BOP_LE,
6163 BOP_LTLT,
6164 BOP_AREF,
6165 BOP_ASET,
6166 BOP_LENGTH,
6167 BOP_SIZE,
6168 BOP_EMPTY_P,
6169 BOP_NIL_P,
6170 BOP_SUCC,
6171 BOP_GT,
6172 BOP_GE,
6173 BOP_NOT,
6174 BOP_NEQ,
6175 BOP_MATCH,
6176 BOP_FREEZE,
6177 BOP_UMINUS,
6178 BOP_MAX,
6179 BOP_MIN,
6180 BOP_CALL,
6181 BOP_AND,
6182 BOP_OR,
6183 BOP_CMP,
6184 BOP_DEFAULT,
6185 BOP_LAST_
6186};
6187
6188
6189extern short ruby_vm_redefined_flag[BOP_LAST_];
6190
6191
6192typedef unsigned long long rb_serial_t;
6193struct rb_callable_method_entry_struct;
6194struct rb_method_definition_struct;
6195struct rb_execution_context_struct;
6196struct rb_control_frame_struct;
6197struct rb_callinfo;
6198enum method_missing_reason {
6199 MISSING_NOENTRY = 0x00,
6200 MISSING_PRIVATE = 0x01,
6201 MISSING_PROTECTED = 0x02,
6202 MISSING_FCALL = 0x04,
6203 MISSING_VCALL = 0x08,
6204 MISSING_SUPER = 0x10,
6205 MISSING_MISSING = 0x20,
6206 MISSING_NONE = 0x40
6207};static inline
6208VALUE rb_vm_push_frame_fname(struct rb_execution_context_struct *ec, VALUE fname);
6209VALUE rb_obj_is_thread(VALUE obj);
6210void rb_vm_mark(void *ptr);
6211void rb_vm_each_stack_value(void *ptr, void (*cb)(VALUE, void*), void *ctx);
6212__attribute__((__pure__)) VALUE rb_vm_top_self(void);
6213const void **rb_vm_get_insns_address_table(void);
6214VALUE rb_source_location(int *pline);
6215const char *rb_source_location_cstr(int *pline);
6216static void rb_vm_pop_cfunc_frame(void);
6217int rb_vm_add_root_module(VALUE module);
6218void rb_vm_check_redefinition_by_prepend(VALUE klass);
6219int rb_vm_check_optimizable_mid(VALUE mid);
6220VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
6221static VALUE ruby_vm_special_exception_copy(VALUE);
6222__attribute__((__pure__)) st_table *rb_vm_fstring_table(void);
6223
6224
6225VALUE rb_vm_exec(struct rb_execution_context_struct *, _Bool);
6226
6227
6228VALUE rb_current_realfilepath(void);
6229VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
6230typedef void rb_check_funcall_hook(int, VALUE, ID, int, const VALUE *, VALUE);
6231VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
6232 rb_check_funcall_hook *hook, VALUE arg);
6233VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *argv,
6234 rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
6235const char *rb_type_str(enum ruby_value_type type);
6236VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
6237VALUE rb_check_funcall_basic_kw(VALUE, ID, VALUE, int, const VALUE*, int);
6238VALUE rb_yield_1(VALUE val);
6239VALUE rb_yield_force_blockarg(VALUE values);
6240VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
6241 rb_block_call_func_t bl_proc, int min_argc, int max_argc,
6242 VALUE data2);
6243void rb_check_stack_overflow(void);
6244VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
6245VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
6246struct rb_iseq_struct;
6247
6248
6249const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass);
6250
6251
6252struct rb_execution_context_struct;
6253
6254
6255int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE obj, ID id, int priv);
6256
6257
6258void rb_clear_constant_cache(void);
6259void rb_print_backtrace(void);
6260VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
6261VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval);
6262VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6263VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6264VALUE rb_make_backtrace(void);
6265void rb_backtrace_print_as_bugreport(void);
6266int rb_backtrace_p(VALUE obj);
6267VALUE rb_backtrace_to_str_ary(VALUE obj);
6268VALUE rb_backtrace_to_location_ary(VALUE obj);
6269void rb_backtrace_each(VALUE (*iter)(VALUE recv, VALUE str), VALUE output);
6270int rb_frame_info_p(VALUE obj);
6271int rb_get_node_id_from_frame_info(VALUE obj);
6272const struct rb_iseq_struct *rb_get_iseq_from_frame_info(VALUE obj);
6273
6274
6275VALUE rb_ec_backtrace_object(const struct rb_execution_context_struct *ec);
6276void rb_backtrace_use_iseq_first_lineno_for_last_location(VALUE self);
6277
6278
6279struct rb_execution_context_struct;
6280struct rb_objspace;
6281typedef struct ractor_newobj_size_pool_cache {
6282 struct RVALUE *freelist;
6283 struct heap_page *using_page;
6284} rb_ractor_newobj_size_pool_cache_t;
6285typedef struct ractor_newobj_cache {
6286 size_t incremental_mark_step_allocated_slots;
6287 rb_ractor_newobj_size_pool_cache_t size_pool_caches[5];
6288} rb_ractor_newobj_cache_t;
6289extern VALUE *ruby_initial_gc_stress_ptr;
6290extern int ruby_disable_gc;
6291__attribute__((__malloc__)) void *ruby_mimmalloc(size_t size);
6292void ruby_mimfree(void *ptr);
6293void rb_objspace_set_event_hook(const rb_event_flag_t event);
6294VALUE rb_objspace_gc_enable(struct rb_objspace *);
6295VALUE rb_objspace_gc_disable(struct rb_objspace *);
6296void ruby_gc_set_params(void);
6297void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
6298__attribute__((__alloc_align__(1)))
6299__attribute__((__malloc__)) void *rb_aligned_malloc(size_t, size_t) __attribute__((__alloc_size__ (2)));
6300size_t rb_size_mul_or_raise(size_t, size_t, VALUE);
6301size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE);
6302__attribute__((__malloc__)) void *rb_xmalloc_mul_add(size_t, size_t, size_t);
6303__attribute__((__malloc__)) void *rb_xcalloc_mul_add(size_t, size_t, size_t);
6304void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
6305__attribute__((__malloc__)) void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6306__attribute__((__malloc__)) void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6307static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6308static 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)));
6309static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
6310VALUE rb_class_allocate_instance(VALUE klass);
6311void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
6312size_t rb_gc_obj_slot_size(VALUE obj);
6313_Bool rb_gc_size_allocatable_p(size_t size);
6314int rb_objspace_garbage_object_p(VALUE obj);
6315
6316
6317const char *rb_objspace_data_type_name(VALUE obj);
6318VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
6319VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
6320VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
6321size_t rb_obj_memsize_of(VALUE);
6322void rb_gc_verify_internal_consistency(void);
6323size_t rb_obj_gc_flags(VALUE, ID[], size_t);
6324void rb_gc_mark_values(long n, const VALUE *values);
6325void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
6326void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6327void *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)));
6328void ruby_sized_xfree(void *x, size_t size);
6329
6330
6331
6332
6333int rb_ec_stack_check(struct rb_execution_context_struct *ec);
6334void rb_gc_writebarrier_remember(VALUE obj);
6335const char *rb_obj_info(VALUE obj);
6336
6337
6338static inline void *
6339ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
6340{
6341 return ruby_xrealloc(ptr, new_size);
6342}
6343static inline void *
6344ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
6345{
6346 return ruby_xrealloc2(ptr, new_count, elemsiz);
6347}
6348static inline void
6349ruby_sized_xfree_inlined(void *ptr, size_t size)
6350{
6351 ruby_xfree(ptr);
6352}
6353enum imemo_type {
6354 imemo_env = 0,
6355 imemo_cref = 1,
6356 imemo_svar = 2,
6357 imemo_throw_data = 3,
6358 imemo_ifunc = 4,
6359 imemo_memo = 5,
6360 imemo_ment = 6,
6361 imemo_iseq = 7,
6362 imemo_tmpbuf = 8,
6363 imemo_ast = 9,
6364 imemo_parser_strterm = 10,
6365 imemo_callinfo = 11,
6366 imemo_callcache = 12,
6367 imemo_constcache = 13,
6368};
6369struct vm_svar {
6370 VALUE flags;
6371 const VALUE cref_or_me;
6372 const VALUE lastline;
6373 const VALUE backref;
6374 const VALUE others;
6375};
6376struct vm_throw_data {
6377 VALUE flags;
6378 VALUE reserved;
6379 const VALUE throw_obj;
6380 const struct rb_control_frame_struct *catch_frame;
6381 int throw_state;
6382};
6383struct vm_ifunc_argc {
6384 int min, max;
6385};
6386struct vm_ifunc {
6387 VALUE flags;
6388 VALUE reserved;
6389 rb_block_call_func_t func;
6390 const void *data;
6391 struct vm_ifunc_argc argc;
6392};
6393struct rb_imemo_tmpbuf_struct {
6394 VALUE flags;
6395 VALUE reserved;
6396 VALUE *ptr;
6397 struct rb_imemo_tmpbuf_struct *next;
6398 size_t cnt;
6399};
6400struct MEMO {
6401 VALUE flags;
6402 VALUE reserved;
6403 const VALUE v1;
6404 const VALUE v2;
6405 union {
6406 long cnt;
6407 long state;
6408 const VALUE value;
6409 void (*func)(void);
6410 } u3;
6411};
6412typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
6413rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
6414struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
6415void rb_strterm_mark(VALUE obj);
6416static inline enum imemo_type imemo_type(VALUE imemo);
6417static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
6418static inline _Bool imemo_throw_data_p(VALUE imemo);
6419static inline struct vm_ifunc *rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data);
6420static inline VALUE rb_imemo_tmpbuf_auto_free_pointer(void);
6421static inline void *RB_IMEMO_TMPBUF_PTR(VALUE v);
6422static inline void *rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr);
6423static inline VALUE rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str);
6424static inline void MEMO_V1_SET(struct MEMO *m, VALUE v);
6425static inline void MEMO_V2_SET(struct MEMO *m, VALUE v);
6426
6427
6428VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
6429const char *rb_imemo_name(enum imemo_type type);
6430
6431
6432static inline enum imemo_type
6433imemo_type(VALUE imemo)
6434{
6435 return (((struct RBasic *)(imemo))->flags >> ((VALUE)RUBY_FL_USHIFT)) & 0x0f;
6436}
6437static inline int
6438imemo_type_p(VALUE imemo, enum imemo_type imemo_type)
6439{
6440 if ((__builtin_expect(!!(!RB_SPECIAL_CONST_P(imemo)), 1))) {
6441 const VALUE mask = (0x0f << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_MASK;
6442 const VALUE expected_type = (imemo_type << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_IMEMO;
6443 return expected_type == (((struct RBasic *)(imemo))->flags & mask);
6444 }
6445 else {
6446 return 0;
6447 }
6448}
6449static inline _Bool
6450imemo_throw_data_p(VALUE imemo)
6451{
6452 return RB_TYPE_P(imemo, RUBY_T_IMEMO);
6453}
6454static inline struct vm_ifunc *
6455rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data)
6456{
6457 return rb_vm_ifunc_new(func, data, 0, (-1));
6458}
6459static inline VALUE
6460rb_imemo_tmpbuf_auto_free_pointer(void)
6461{
6462 return rb_imemo_new(imemo_tmpbuf, 0, 0, 0, 0);
6463}
6464static inline void *
6465RB_IMEMO_TMPBUF_PTR(VALUE v)
6466{
6467 const struct rb_imemo_tmpbuf_struct *p = (const void *)v;
6468 return p->ptr;
6469}
6470static inline void *
6471rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr)
6472{
6473 return ((rb_imemo_tmpbuf_t *)v)->ptr = ptr;
6474}
6475static inline VALUE
6476rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str)
6477{
6478 const void *src;
6479 VALUE imemo;
6480 rb_imemo_tmpbuf_t *tmpbuf;
6481 void *dst;
6482 size_t len;
6483 rb_string_value(&(str));
6484 imemo = rb_imemo_tmpbuf_auto_free_pointer();
6485 tmpbuf = (rb_imemo_tmpbuf_t *)imemo;
6486 len = RSTRING_LEN(str);
6487 src = RSTRING_PTR(str);
6488 dst = ruby_xmalloc(len);
6489 ruby_nonempty_memcpy(dst, src, len);
6490 tmpbuf->ptr = dst;
6491 return imemo;
6492}
6493static inline void
6494MEMO_V1_SET(struct MEMO *m, VALUE v)
6495{
6496 rb_obj_write((VALUE)(m), __extension__({
6497 ;
6498 ; __typeof__((VALUE *)(&m->v1)) unaligned_member_access_result = ((VALUE *)(&m->v1));
6499 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.2/internal/imemo.h", 233);
6500}
6501static inline void
6502MEMO_V2_SET(struct MEMO *m, VALUE v)
6503{
6504 rb_obj_write((VALUE)(m), __extension__({
6505 ;
6506 ; __typeof__((VALUE *)(&m->v2)) unaligned_member_access_result = ((VALUE *)(&m->v2));
6507 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.2/internal/imemo.h", 239);
6508}
6509typedef enum {
6510 METHOD_VISI_UNDEF = 0x00,
6511 METHOD_VISI_PUBLIC = 0x01,
6512 METHOD_VISI_PRIVATE = 0x02,
6513 METHOD_VISI_PROTECTED = 0x03,
6514 METHOD_VISI_MASK = 0x03
6515} rb_method_visibility_t;
6516typedef struct rb_scope_visi_struct {
6517 rb_method_visibility_t method_visi : 3;
6518 unsigned int module_func : 1;
6519} rb_scope_visibility_t;
6520typedef struct rb_cref_struct {
6521 VALUE flags;
6522 VALUE refinements;
6523 VALUE klass_or_self;
6524 struct rb_cref_struct * next;
6525 const rb_scope_visibility_t scope_visi;
6526} rb_cref_t;
6527typedef struct rb_method_entry_struct {
6528 VALUE flags;
6529 VALUE defined_class;
6530 struct rb_method_definition_struct * const def;
6531 ID called_id;
6532 VALUE owner;
6533} rb_method_entry_t;
6534typedef struct rb_callable_method_entry_struct {
6535 VALUE flags;
6536 const VALUE defined_class;
6537 struct rb_method_definition_struct * const def;
6538 ID called_id;
6539 const VALUE owner;
6540} rb_callable_method_entry_t;
6541static inline void
6542METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
6543{
6544 ((void)0);
6545 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) | (visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0));
6546}
6547static inline void
6548METHOD_ENTRY_BASIC_SET(rb_method_entry_t *me, unsigned int basic)
6549{
6550 ((void)0);
6551 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER6) )) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2));
6552}
6553static inline void
6554METHOD_ENTRY_FLAGS_SET(rb_method_entry_t *me, rb_method_visibility_t visi, unsigned int basic)
6555{
6556 ((void)0);
6557 ((void)0);
6558 me->flags =
6559 (me->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6560 ((visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2)));
6561}
6562static inline void
6563METHOD_ENTRY_FLAGS_COPY(rb_method_entry_t *dst, const rb_method_entry_t *src)
6564{
6565 dst->flags =
6566 (dst->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6567 (src->flags & (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)));
6568}
6569typedef enum {
6570 VM_METHOD_TYPE_ISEQ,
6571 VM_METHOD_TYPE_CFUNC,
6572 VM_METHOD_TYPE_ATTRSET,
6573 VM_METHOD_TYPE_IVAR,
6574 VM_METHOD_TYPE_BMETHOD,
6575 VM_METHOD_TYPE_ZSUPER,
6576 VM_METHOD_TYPE_ALIAS,
6577 VM_METHOD_TYPE_UNDEF,
6578 VM_METHOD_TYPE_NOTIMPLEMENTED,
6579 VM_METHOD_TYPE_OPTIMIZED,
6580 VM_METHOD_TYPE_MISSING,
6581 VM_METHOD_TYPE_REFINED,
6582
6583} rb_method_type_t;
6584__extension__ _Static_assert(VM_METHOD_TYPE_REFINED <= (1<<4), "VM_METHOD_TYPE_MINIMUM_BITS" ": " "VM_METHOD_TYPE_REFINED <= (1<<VM_METHOD_TYPE_MINIMUM_BITS)");
6585typedef struct rb_iseq_struct rb_iseq_t;
6586typedef struct rb_method_iseq_struct {
6587 const rb_iseq_t * iseqptr;
6588 rb_cref_t * cref;
6589} rb_method_iseq_t;
6590typedef struct rb_method_cfunc_struct {
6591 VALUE (*func)();
6592 VALUE (*invoker)(VALUE recv, int argc, const VALUE *argv, VALUE (*func)());
6593 int argc;
6594} rb_method_cfunc_t;
6595typedef struct rb_method_attr_struct {
6596 ID id;
6597 VALUE location;
6598} rb_method_attr_t;
6599typedef struct rb_method_alias_struct {
6600 struct rb_method_entry_struct * original_me;
6601} rb_method_alias_t;
6602typedef struct rb_method_refined_struct {
6603 struct rb_method_entry_struct * orig_me;
6604 VALUE owner;
6605} rb_method_refined_t;
6606typedef struct rb_method_bmethod_struct {
6607 VALUE proc;
6608 struct rb_hook_list_struct *hooks;
6609 VALUE defined_ractor;
6610} rb_method_bmethod_t;
6611enum method_optimized_type {
6612 OPTIMIZED_METHOD_TYPE_SEND,
6613 OPTIMIZED_METHOD_TYPE_CALL,
6614 OPTIMIZED_METHOD_TYPE_BLOCK_CALL,
6615 OPTIMIZED_METHOD_TYPE_STRUCT_AREF,
6616 OPTIMIZED_METHOD_TYPE_STRUCT_ASET,
6617 OPTIMIZED_METHOD_TYPE__MAX
6618};
6619typedef struct rb_method_optimized {
6620 enum method_optimized_type type;
6621 unsigned int index;
6622} rb_method_optimized_t;
6623struct rb_method_definition_struct {
6624 rb_method_type_t type : 4;
6625 unsigned int iseq_overload: 1;
6626 int alias_count : 27;
6627 int complemented_count : 28;
6628 unsigned int no_redef_warning: 1;
6629 union {
6630 rb_method_iseq_t iseq;
6631 rb_method_cfunc_t cfunc;
6632 rb_method_attr_t attr;
6633 rb_method_alias_t alias;
6634 rb_method_refined_t refined;
6635 rb_method_bmethod_t bmethod;
6636 rb_method_optimized_t optimized;
6637 } body;
6638 ID original_id;
6639 uintptr_t method_serial;
6640};
6641struct rb_id_table;
6642typedef struct rb_method_definition_struct rb_method_definition_t;
6643__extension__ _Static_assert(__builtin_offsetof (rb_method_definition_t, body)==8, "sizeof_method_def" ": " "offsetof(rb_method_definition_t, body)==8");
6644void rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi);
6645void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(), int argc, rb_method_visibility_t visi);
6646void rb_add_method_iseq(VALUE klass, ID mid, const rb_iseq_t *iseq, rb_cref_t *cref, rb_method_visibility_t visi);
6647void rb_add_method_optimized(VALUE klass, ID mid, enum method_optimized_type, unsigned int index, rb_method_visibility_t visi);
6648void rb_add_refined_method_entry(VALUE refined_class, ID mid);
6649rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex);
6650rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def);
6651const rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
6652const rb_method_entry_t *rb_method_entry(VALUE klass, ID id);
6653const rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6654const rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6655const rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
6656
6657
6658const rb_method_entry_t *rb_resolve_me_location(const rb_method_entry_t *, VALUE[5]);
6659
6660
6661const rb_callable_method_entry_t *rb_callable_method_entry(VALUE klass, ID id);
6662const rb_callable_method_entry_t *rb_callable_method_entry_or_negative(VALUE klass, ID id);
6663const rb_callable_method_entry_t *rb_callable_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6664const rb_callable_method_entry_t *rb_callable_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6665int rb_method_entry_arity(const rb_method_entry_t *me);
6666int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2);
6667st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
6668VALUE rb_method_entry_location(const rb_method_entry_t *me);
6669void rb_free_method_entry(const rb_method_entry_t *me);
6670const rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me);
6671const rb_callable_method_entry_t *rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID called_id, VALUE defined_class);
6672void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src);
6673void rb_method_table_insert(VALUE klass, struct rb_id_table *table, ID method_id, const rb_method_entry_t *me);
6674void rb_scope_visibility_set(rb_method_visibility_t);
6675VALUE rb_unnamed_parameters(int arity);
6676void rb_clear_method_cache(VALUE klass_or_module, ID mid);
6677void rb_clear_method_cache_all(void);
6678enum node_type {
6679 NODE_SCOPE,
6680 NODE_BLOCK,
6681 NODE_IF,
6682 NODE_UNLESS,
6683 NODE_CASE,
6684 NODE_CASE2,
6685 NODE_CASE3,
6686 NODE_WHEN,
6687 NODE_IN,
6688 NODE_WHILE,
6689 NODE_UNTIL,
6690 NODE_ITER,
6691 NODE_FOR,
6692 NODE_FOR_MASGN,
6693 NODE_BREAK,
6694 NODE_NEXT,
6695 NODE_REDO,
6696 NODE_RETRY,
6697 NODE_BEGIN,
6698 NODE_RESCUE,
6699 NODE_RESBODY,
6700 NODE_ENSURE,
6701 NODE_AND,
6702 NODE_OR,
6703 NODE_MASGN,
6704 NODE_LASGN,
6705 NODE_DASGN,
6706 NODE_GASGN,
6707 NODE_IASGN,
6708 NODE_CDECL,
6709 NODE_CVASGN,
6710 NODE_OP_ASGN1,
6711 NODE_OP_ASGN2,
6712 NODE_OP_ASGN_AND,
6713 NODE_OP_ASGN_OR,
6714 NODE_OP_CDECL,
6715 NODE_CALL,
6716 NODE_OPCALL,
6717 NODE_FCALL,
6718 NODE_VCALL,
6719 NODE_QCALL,
6720 NODE_SUPER,
6721 NODE_ZSUPER,
6722 NODE_LIST,
6723 NODE_ZLIST,
6724 NODE_VALUES,
6725 NODE_HASH,
6726 NODE_RETURN,
6727 NODE_YIELD,
6728 NODE_LVAR,
6729 NODE_DVAR,
6730 NODE_GVAR,
6731 NODE_IVAR,
6732 NODE_CONST,
6733 NODE_CVAR,
6734 NODE_NTH_REF,
6735 NODE_BACK_REF,
6736 NODE_MATCH,
6737 NODE_MATCH2,
6738 NODE_MATCH3,
6739 NODE_LIT,
6740 NODE_STR,
6741 NODE_DSTR,
6742 NODE_XSTR,
6743 NODE_DXSTR,
6744 NODE_EVSTR,
6745 NODE_DREGX,
6746 NODE_ONCE,
6747 NODE_ARGS,
6748 NODE_ARGS_AUX,
6749 NODE_OPT_ARG,
6750 NODE_KW_ARG,
6751 NODE_POSTARG,
6752 NODE_ARGSCAT,
6753 NODE_ARGSPUSH,
6754 NODE_SPLAT,
6755 NODE_BLOCK_PASS,
6756 NODE_DEFN,
6757 NODE_DEFS,
6758 NODE_ALIAS,
6759 NODE_VALIAS,
6760 NODE_UNDEF,
6761 NODE_CLASS,
6762 NODE_MODULE,
6763 NODE_SCLASS,
6764 NODE_COLON2,
6765 NODE_COLON3,
6766 NODE_DOT2,
6767 NODE_DOT3,
6768 NODE_FLIP2,
6769 NODE_FLIP3,
6770 NODE_SELF,
6771 NODE_NIL,
6772 NODE_TRUE,
6773 NODE_FALSE,
6774 NODE_ERRINFO,
6775 NODE_DEFINED,
6776 NODE_POSTEXE,
6777 NODE_DSYM,
6778 NODE_ATTRASGN,
6779 NODE_LAMBDA,
6780 NODE_ARYPTN,
6781 NODE_HSHPTN,
6782 NODE_FNDPTN,
6783 NODE_ERROR,
6784 NODE_LAST
6785};
6786typedef struct rb_code_position_struct {
6787 int lineno;
6788 int column;
6789} rb_code_position_t;
6790typedef struct rb_code_location_struct {
6791 rb_code_position_t beg_pos;
6792 rb_code_position_t end_pos;
6793} rb_code_location_t;
6794static inline rb_code_location_t
6795code_loc_gen(const rb_code_location_t *loc1, const rb_code_location_t *loc2)
6796{
6797 rb_code_location_t loc;
6798 loc.beg_pos = loc1->beg_pos;
6799 loc.end_pos = loc2->end_pos;
6800 return loc;
6801}
6802typedef struct rb_ast_id_table {
6803 int size;
6804 ID ids[];
6805} rb_ast_id_table_t;
6806typedef struct RNode {
6807 VALUE flags;
6808 union {
6809 struct RNode *node;
6810 ID id;
6811 VALUE value;
6812 rb_ast_id_table_t *tbl;
6813 } u1;
6814 union {
6815 struct RNode *node;
6816 ID id;
6817 long argc;
6818 VALUE value;
6819 } u2;
6820 union {
6821 struct RNode *node;
6822 ID id;
6823 long state;
6824 struct rb_args_info *args;
6825 struct rb_ary_pattern_info *apinfo;
6826 struct rb_fnd_pattern_info *fpinfo;
6827 VALUE value;
6828 } u3;
6829 rb_code_location_t nd_loc;
6830 int node_id;
6831} NODE;
6832VALUE rb_node_case_when_optimizable_literal(const NODE *const node);
6833
6834
6835typedef struct node_buffer_struct node_buffer_t;
6836typedef struct rb_ast_body_struct {
6837 const NODE *root;
6838 VALUE compile_option;
6839 VALUE script_lines;
6840} rb_ast_body_t;
6841typedef struct rb_ast_struct {
6842 VALUE flags;
6843 node_buffer_t *node_buffer;
6844 rb_ast_body_t body;
6845} rb_ast_t;
6846rb_ast_t *rb_ast_new(void);
6847void rb_ast_mark(rb_ast_t*);
6848void rb_ast_update_references(rb_ast_t*);
6849void rb_ast_dispose(rb_ast_t*);
6850void rb_ast_free(rb_ast_t*);
6851size_t rb_ast_memsize(const rb_ast_t*);
6852void rb_ast_add_mark_object(rb_ast_t*, VALUE);
6853void rb_ast_set_tokens(rb_ast_t*, VALUE);
6854VALUE rb_ast_tokens(rb_ast_t *ast);
6855NODE *rb_ast_newnode(rb_ast_t*, enum node_type type);
6856void rb_ast_delete_node(rb_ast_t*, NODE *n);
6857rb_ast_id_table_t *rb_ast_new_local_table(rb_ast_t*, int);
6858rb_ast_id_table_t *rb_ast_resize_latest_local_table(rb_ast_t*, int);
6859VALUE rb_parser_new(void);
6860VALUE rb_parser_end_seen_p(VALUE);
6861VALUE rb_parser_encoding(VALUE);
6862VALUE rb_parser_set_yydebug(VALUE, VALUE);
6863VALUE rb_parser_dump_tree(const NODE *node, int comment);
6864void rb_parser_set_options(VALUE, int, int, int, int);
6865rb_ast_t *rb_parser_compile_string(VALUE, const char*, VALUE, int);
6866rb_ast_t *rb_parser_compile_string_path(VALUE vparser, VALUE fname, VALUE src, int line);
6867rb_ast_t *rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE input, int line);
6868rb_ast_t *rb_parser_compile_generic(VALUE vparser, VALUE (*lex_gets)(VALUE, int), VALUE fname, VALUE input, int line);
6869void rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2);
6870const char *ruby_node_name(int node);
6871const struct kwtable *rb_reserved_word(const char *, unsigned int);
6872struct rb_args_info {
6873 NODE *pre_init;
6874 NODE *post_init;
6875 int pre_args_num;
6876 int post_args_num;
6877 ID first_post_arg;
6878 ID rest_arg;
6879 ID block_arg;
6880 NODE *kw_args;
6881 NODE *kw_rest_arg;
6882 NODE *opt_args;
6883 unsigned int no_kwarg: 1;
6884 unsigned int ruby2_keywords: 1;
6885 unsigned int forwarding: 1;
6886 VALUE imemo;
6887};
6888struct rb_ary_pattern_info {
6889 NODE *pre_args;
6890 NODE *rest_arg;
6891 NODE *post_args;
6892};
6893struct rb_fnd_pattern_info {
6894 NODE *pre_rest_arg;
6895 NODE *args;
6896 NODE *post_rest_arg;
6897};
6898struct parser_params;
6899void *rb_parser_malloc(struct parser_params *, size_t);
6900void *rb_parser_realloc(struct parser_params *, void *, size_t);
6901void *rb_parser_calloc(struct parser_params *, size_t, size_t);
6902void rb_parser_free(struct parser_params *, void *);
6903__attribute__((__format__(__printf__, (2), (3)))) void rb_parser_printf(struct parser_params *parser, const char *fmt, ...);
6904void rb_ast_node_type_change(NODE *n, enum node_type type);
6905
6906
6907static inline VALUE
6908rb_node_set_type(NODE *n, enum node_type t)
6909{
6910 return (n)->flags=(((n)->flags&~(((VALUE)0x7f)<<8))|((((unsigned long)(t))<<8)&(((VALUE)0x7f)<<8)));
6911}
6912static inline _Bool
6913nd_type_p(const NODE *n, enum node_type t)
6914{
6915 return (enum node_type)((int) (((n)->flags & (((VALUE)0x7f)<<8))>>8)) == t;
6916}
6917typedef unsigned int rb_atomic_t;
6918__attribute__((__artificial__))
6919
6920__attribute__((__nonnull__ (1)))
6921static inline rb_atomic_t
6922rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6923{
6924 return __atomic_fetch_add(ptr, val, 5);
6925}
6926__attribute__((__artificial__))
6927
6928__attribute__((__nonnull__ (1)))
6929static inline void
6930rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6931{
6932 __atomic_add_fetch(ptr, val, 5);
6933}
6934__attribute__((__artificial__))
6935
6936__attribute__((__nonnull__ (1)))
6937static inline void
6938rbimpl_atomic_size_add(volatile size_t *ptr, size_t val)
6939{
6940 __atomic_add_fetch(ptr, val, 5);
6941}
6942__attribute__((__artificial__))
6943
6944__attribute__((__nonnull__ (1)))
6945static inline void
6946rbimpl_atomic_inc(volatile rb_atomic_t *ptr)
6947{
6948 rbimpl_atomic_add(ptr, 1);
6949}
6950__attribute__((__artificial__))
6951
6952__attribute__((__nonnull__ (1)))
6953static inline void
6954rbimpl_atomic_size_inc(volatile size_t *ptr)
6955{
6956 rbimpl_atomic_size_add(ptr, 1);
6957}
6958__attribute__((__artificial__))
6959
6960__attribute__((__nonnull__ (1)))
6961static inline rb_atomic_t
6962rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6963{
6964 return __atomic_fetch_sub(ptr, val, 5);
6965}
6966__attribute__((__artificial__))
6967
6968__attribute__((__nonnull__ (1)))
6969static inline void
6970rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6971{
6972 __atomic_sub_fetch(ptr, val, 5);
6973}
6974__attribute__((__artificial__))
6975
6976__attribute__((__nonnull__ (1)))
6977static inline void
6978rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val)
6979{
6980 __atomic_sub_fetch(ptr, val, 5);
6981}
6982__attribute__((__artificial__))
6983
6984__attribute__((__nonnull__ (1)))
6985static inline void
6986rbimpl_atomic_dec(volatile rb_atomic_t *ptr)
6987{
6988 rbimpl_atomic_sub(ptr, 1);
6989}
6990__attribute__((__artificial__))
6991
6992__attribute__((__nonnull__ (1)))
6993static inline void
6994rbimpl_atomic_size_dec(volatile size_t *ptr)
6995{
6996 rbimpl_atomic_size_sub(ptr, 1);
6997}
6998__attribute__((__artificial__))
6999
7000__attribute__((__nonnull__ (1)))
7001static inline void
7002rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val)
7003{
7004 __atomic_or_fetch(ptr, val, 5);
7005}
7006__attribute__((__artificial__))
7007
7008__attribute__((__nonnull__ (1)))
7009static inline rb_atomic_t
7010rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val)
7011{
7012 return __atomic_exchange_n(ptr, val, 5);
7013}
7014__attribute__((__artificial__))
7015
7016__attribute__((__nonnull__ (1)))
7017static inline size_t
7018rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val)
7019{
7020 return __atomic_exchange_n(ptr, val, 5);
7021}
7022__attribute__((__artificial__))
7023
7024__attribute__((__nonnull__ (1)))
7025static inline void *
7026rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val)
7027{
7028 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
7029 const size_t sval = ((size_t)val);
7030 volatile size_t *const sptr = ((volatile size_t *)ptr);
7031 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
7032 return ((void *)sret);
7033}
7034__attribute__((__artificial__))
7035
7036__attribute__((__nonnull__ (1)))
7037static inline VALUE
7038rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val)
7039{
7040 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
7041 const size_t sval = ((size_t)val);
7042 volatile size_t *const sptr = ((volatile size_t *)ptr);
7043 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
7044 return ((VALUE)sret);
7045}
7046__attribute__((__artificial__))
7047
7048__attribute__((__nonnull__ (1)))
7049static inline void
7050rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val)
7051{
7052 __atomic_store_n(ptr, val, 5);
7053}
7054__attribute__((__artificial__))
7055
7056__attribute__((__nonnull__ (1)))
7057static inline rb_atomic_t
7058rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval)
7059{
7060 __atomic_compare_exchange_n(
7061 ptr, &oldval, newval, 0, 5, 5);
7062 return oldval;
7063}
7064__attribute__((__artificial__))
7065
7066__attribute__((__nonnull__ (1)))
7067static inline size_t
7068rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval)
7069{
7070 __atomic_compare_exchange_n(
7071 ptr, &oldval, newval, 0, 5, 5);
7072 return oldval;
7073}
7074__attribute__((__artificial__))
7075
7076__attribute__((__nonnull__ (1)))
7077static inline void *
7078rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval)
7079{
7080 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
7081 const size_t snew = ((size_t)newval);
7082 const size_t sold = ((size_t)oldval);
7083 volatile size_t *const sptr = ((volatile size_t *)ptr);
7084 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
7085 return ((void *)sret);
7086}
7087__attribute__((__artificial__))
7088
7089__attribute__((__nonnull__ (1)))
7090static inline VALUE
7091rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval)
7092{
7093 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
7094 const size_t snew = ((size_t)newval);
7095 const size_t sold = ((size_t)oldval);
7096 volatile size_t *const sptr = ((volatile size_t *)ptr);
7097 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
7098 return ((VALUE)sret);
7099}
7100typedef uint32_t attr_index_t;
7101typedef uint32_t shape_id_t;
7102struct rb_shape {
7103 struct rb_id_table * edges;
7104 ID edge_name;
7105 attr_index_t next_iv_index;
7106 uint32_t capacity;
7107 uint8_t type;
7108 uint8_t size_pool_index;
7109 shape_id_t parent_id;
7110};
7111typedef struct rb_shape rb_shape_t;
7112enum shape_type {
7113 SHAPE_ROOT,
7114 SHAPE_IVAR,
7115 SHAPE_FROZEN,
7116 SHAPE_CAPACITY_CHANGE,
7117 SHAPE_INITIAL_CAPACITY,
7118 SHAPE_T_OBJECT,
7119 SHAPE_OBJ_TOO_COMPLEX,
7120};
7121static inline shape_id_t
7122RBASIC_SHAPE_ID(VALUE obj)
7123{
7124 ((void)0);
7125 return (shape_id_t)((((uintptr_t)1 << 32) - 1) & ((((struct RBasic *)(obj))->flags) >> ((8 * 8) - 32)));
7126}
7127static inline void
7128RBASIC_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id)
7129{
7130 ((struct RBasic *)(obj))->flags &= (((VALUE)-1) >> 32);
7131 ((struct RBasic *)(obj))->flags |= ((VALUE)(shape_id) << ((8 * 8) - 32));
7132}
7133static inline shape_id_t
7134ROBJECT_SHAPE_ID(VALUE obj)
7135{
7136 ((void)0);
7137 return RBASIC_SHAPE_ID(obj);
7138}
7139static inline void
7140ROBJECT_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id)
7141{
7142 ((void)0);
7143 RBASIC_SET_SHAPE_ID(obj, shape_id);
7144}
7145static inline shape_id_t
7146RCLASS_SHAPE_ID(VALUE obj)
7147{
7148 ((void)0);
7149 return RBASIC_SHAPE_ID(obj);
7150}
7151_Bool rb_shape_root_shape_p(rb_shape_t* shape);
7152rb_shape_t * rb_shape_get_root_shape(void);
7153uint8_t rb_shape_id_num_bits(void);
7154int32_t rb_shape_id_offset(void);
7155rb_shape_t* rb_shape_get_shape_by_id_without_assertion(shape_id_t shape_id);
7156rb_shape_t * rb_shape_get_parent(rb_shape_t * shape);
7157
7158
7159rb_shape_t* rb_shape_get_shape_by_id(shape_id_t shape_id);
7160shape_id_t rb_shape_get_shape_id(VALUE obj);
7161rb_shape_t * rb_shape_get_next_iv_shape(rb_shape_t * shape, ID id);
7162_Bool rb_shape_get_iv_index(rb_shape_t * shape, ID id, attr_index_t * value);
7163_Bool rb_shape_obj_too_complex(VALUE obj);
7164
7165
7166void rb_shape_set_shape(VALUE obj, rb_shape_t* shape);
7167rb_shape_t* rb_shape_get_shape(VALUE obj);
7168int rb_shape_frozen_shape_p(rb_shape_t* shape);
7169void rb_shape_transition_shape_frozen(VALUE obj);
7170void rb_shape_transition_shape_remove_ivar(VALUE obj, ID id, rb_shape_t *shape, VALUE * removed);
7171rb_shape_t * rb_shape_transition_shape_capa(rb_shape_t * shape, uint32_t new_capacity);
7172rb_shape_t* rb_shape_get_next(rb_shape_t* shape, VALUE obj, ID id);
7173rb_shape_t * rb_shape_rebuild_shape(rb_shape_t * initial_shape, rb_shape_t * dest_shape);
7174static inline uint32_t
7175ROBJECT_IV_CAPACITY(VALUE obj)
7176{
7177 ((void)0);
7178 ((void)0);
7179 return rb_shape_get_shape_by_id(ROBJECT_SHAPE_ID(obj))->capacity;
7180}
7181static inline struct rb_id_table *
7182ROBJECT_IV_HASH(VALUE obj)
7183{
7184 ((void)0);
7185 ((void)0);
7186 return (struct rb_id_table *)((struct RObject *)(obj))->as.heap.ivptr;
7187}
7188static inline void
7189ROBJECT_SET_IV_HASH(VALUE obj, const struct rb_id_table *tbl)
7190{
7191 ((void)0);
7192 ((void)0);
7193 ((struct RObject *)(obj))->as.heap.ivptr = (VALUE *)tbl;
7194}
7195size_t rb_id_table_size(const struct rb_id_table *tbl);
7196static inline uint32_t
7197ROBJECT_IV_COUNT(VALUE obj)
7198{
7199 if (ROBJECT_SHAPE_ID(obj) == ((5 * 2) + 1)) {
7200 return (uint32_t)rb_id_table_size(ROBJECT_IV_HASH(obj));
7201 }
7202 else {
7203 ((void)0);
7204 ((void)0);
7205 return rb_shape_get_shape_by_id(ROBJECT_SHAPE_ID(obj))->next_iv_index;
7206 }
7207}
7208static inline uint32_t
7209RBASIC_IV_COUNT(VALUE obj)
7210{
7211 return rb_shape_get_shape_by_id(rb_shape_get_shape_id(obj))->next_iv_index;
7212}
7213static inline uint32_t
7214RCLASS_IV_COUNT(VALUE obj)
7215{
7216 ((void)0);
7217 uint32_t ivc = rb_shape_get_shape_by_id(RCLASS_SHAPE_ID(obj))->next_iv_index;
7218 return ivc;
7219}
7220rb_shape_t * rb_shape_alloc(ID edge_name, rb_shape_t * parent);
7221rb_shape_t * rb_shape_alloc_with_size_pool_index(ID edge_name, rb_shape_t * parent, uint8_t size_pool_index);
7222rb_shape_t * rb_shape_alloc_with_parent_id(ID edge_name, shape_id_t parent_id);
7223rb_shape_t *rb_shape_traverse_from_new_root(rb_shape_t *initial_shape, rb_shape_t *orig_shape);
7224_Bool rb_shape_set_shape_id(VALUE obj, shape_id_t shape_id);
7225VALUE rb_obj_debug_shape(VALUE self, VALUE obj);
7226VALUE rb_shape_flags_mask(void);
7227void rb_shape_set_too_complex(VALUE obj);
7228
7229
7230typedef void each_shape_callback(rb_shape_t * shape, void *data);
7231void rb_shape_each_shape(each_shape_callback callback, void *data);
7232size_t rb_shape_memsize(rb_shape_t *shape);
7233size_t rb_shape_edges_count(rb_shape_t *shape);
7234size_t rb_shape_depth(rb_shape_t *shape);
7235shape_id_t rb_shape_id(rb_shape_t * shape);
7236
7237
7238struct sched_param {
7239 int sched_priority;
7240};
7241int sched_setparam(
7242 pid_t __pid,
7243 const struct sched_param *__param
7244);
7245int sched_getparam(
7246 pid_t __pid,
7247 struct sched_param *__param
7248);
7249int sched_setscheduler(
7250 pid_t __pid,
7251 int __policy,
7252 const struct sched_param *__param
7253);
7254int sched_getscheduler(
7255 pid_t __pid
7256);
7257int sched_get_priority_max(
7258 int __policy
7259);
7260int sched_get_priority_min(
7261 int __policy
7262);
7263int sched_rr_get_interval(
7264 pid_t __pid,
7265 struct timespec *__interval
7266);
7267int sched_yield( void );
7268int sched_getcpu(void);
7269int sched_getaffinity (pid_t, size_t, cpu_set_t *);
7270int sched_get_thread_affinity (void *, size_t, cpu_set_t *);
7271int sched_setaffinity (pid_t, size_t, const cpu_set_t *);
7272int sched_set_thread_affinity (void *, size_t, const cpu_set_t *);
7273int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
7274int pthread_attr_destroy (pthread_attr_t *);
7275int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
7276int pthread_attr_getguardsize (const pthread_attr_t *, size_t *);
7277int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
7278int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
7279int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
7280int pthread_attr_getscope (const pthread_attr_t *, int *);
7281int pthread_attr_init (pthread_attr_t *);
7282int pthread_attr_setdetachstate (pthread_attr_t *, int);
7283int pthread_attr_setguardsize (pthread_attr_t *, size_t);
7284int pthread_attr_setinheritsched (pthread_attr_t *, int);
7285int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
7286int pthread_attr_setschedpolicy (pthread_attr_t *, int);
7287int pthread_attr_setscope (pthread_attr_t *, int);
7288int pthread_attr_getstack (const pthread_attr_t *, void **, size_t *);
7289int pthread_attr_setstack (pthread_attr_t *, void *, size_t);
7290int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
7291int pthread_attr_setstacksize (pthread_attr_t *, size_t);
7292int pthread_cancel (pthread_t);
7293typedef void (*__cleanup_routine_type) (void *);
7294typedef struct _pthread_cleanup_handler
7295{
7296 __cleanup_routine_type function;
7297 void *arg;
7298 struct _pthread_cleanup_handler *next;
7299} __pthread_cleanup_handler;
7300void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
7301void _pthread_cleanup_pop (int execute);
7302int pthread_cond_broadcast (pthread_cond_t *);
7303int pthread_cond_destroy (pthread_cond_t *);
7304int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
7305int pthread_cond_signal (pthread_cond_t *);
7306int pthread_cond_clockwait (pthread_cond_t *, pthread_mutex_t *,
7307 clockid_t, const struct timespec *);
7308int pthread_cond_timedwait (pthread_cond_t *,
7309 pthread_mutex_t *, const struct timespec *);
7310int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
7311int pthread_condattr_destroy (pthread_condattr_t *);
7312int pthread_condattr_getclock (const pthread_condattr_t *, clockid_t *);
7313int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
7314int pthread_condattr_init (pthread_condattr_t *);
7315int pthread_condattr_setclock (pthread_condattr_t *, clockid_t);
7316int pthread_condattr_setpshared (pthread_condattr_t *, int);
7317int pthread_barrierattr_init (pthread_barrierattr_t *);
7318int pthread_barrierattr_setpshared (pthread_barrierattr_t *, int);
7319int pthread_barrierattr_getpshared (const pthread_barrierattr_t *, int *);
7320int pthread_barrierattr_destroy (pthread_barrierattr_t *);
7321int pthread_barrier_init (pthread_barrier_t *,
7322 const pthread_barrierattr_t *, unsigned);
7323int pthread_barrier_destroy (pthread_barrier_t *);
7324int pthread_barrier_wait (pthread_barrier_t *);
7325int pthread_create (pthread_t *, const pthread_attr_t *,
7326 void *(*)(void *), void *);
7327int pthread_detach (pthread_t);
7328int pthread_equal (pthread_t, pthread_t);
7329void pthread_exit (void *) __attribute__ ((__noreturn__));
7330int pthread_getcpuclockid (pthread_t, clockid_t *);
7331int pthread_getschedparam (pthread_t, int *, struct sched_param *);
7332void *pthread_getspecific (pthread_key_t);
7333int pthread_join (pthread_t, void **);
7334int pthread_key_create (pthread_key_t *, void (*)(void *));
7335int pthread_key_delete (pthread_key_t);
7336int pthread_mutex_destroy (pthread_mutex_t *);
7337int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
7338int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
7339int pthread_mutex_lock (pthread_mutex_t *);
7340int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
7341int pthread_mutex_clocklock (pthread_mutex_t *, clockid_t,
7342 const struct timespec *);
7343int pthread_mutex_timedlock (pthread_mutex_t *, const struct timespec *);
7344int pthread_mutex_trylock (pthread_mutex_t *);
7345int pthread_mutex_unlock (pthread_mutex_t *);
7346int pthread_mutexattr_destroy (pthread_mutexattr_t *);
7347int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
7348int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
7349int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
7350int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
7351int pthread_mutexattr_init (pthread_mutexattr_t *);
7352int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
7353int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
7354int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
7355int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
7356int pthread_spin_destroy (pthread_spinlock_t *);
7357int pthread_spin_init (pthread_spinlock_t *, int);
7358int pthread_spin_lock (pthread_spinlock_t *);
7359int pthread_spin_trylock (pthread_spinlock_t *);
7360int pthread_spin_unlock (pthread_spinlock_t *);
7361int pthread_rwlock_destroy (pthread_rwlock_t *);
7362int pthread_rwlock_init (pthread_rwlock_t *, const pthread_rwlockattr_t *);
7363int pthread_rwlock_rdlock (pthread_rwlock_t *);
7364int pthread_rwlock_clockrdlock (pthread_rwlock_t *, clockid_t,
7365 const struct timespec *);
7366int pthread_rwlock_timedrdlock (pthread_rwlock_t *, const struct timespec *);
7367int pthread_rwlock_tryrdlock (pthread_rwlock_t *);
7368int pthread_rwlock_wrlock (pthread_rwlock_t *);
7369int pthread_rwlock_clockwrlock (pthread_rwlock_t *, clockid_t,
7370 const struct timespec *);
7371int pthread_rwlock_timedwrlock (pthread_rwlock_t *, const struct timespec *);
7372int pthread_rwlock_trywrlock (pthread_rwlock_t *);
7373int pthread_rwlock_unlock (pthread_rwlock_t *);
7374int pthread_rwlockattr_init (pthread_rwlockattr_t *);
7375int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *, int *);
7376int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *, int);
7377int pthread_rwlockattr_destroy (pthread_rwlockattr_t *);
7378int pthread_once (pthread_once_t *, void (*)(void));
7379int pthread_getconcurrency (void);
7380int pthread_setconcurrency (int);
7381pthread_t pthread_self (void);
7382int pthread_setcancelstate (int, int *);
7383int pthread_setcanceltype (int, int *);
7384int pthread_setschedparam (pthread_t, int, const struct sched_param *);
7385int pthread_setschedprio (pthread_t, int);
7386int pthread_setspecific (pthread_key_t, const void *);
7387void pthread_testcancel (void);
7388int pthread_getaffinity_np (pthread_t, size_t, cpu_set_t *);
7389int pthread_getattr_np (pthread_t, pthread_attr_t *);
7390int pthread_getname_np (pthread_t, char *, size_t) __attribute__((__nonnull__(2)));
7391int pthread_setaffinity_np (pthread_t, size_t, const cpu_set_t *);
7392int pthread_setname_np (pthread_t, const char *) __attribute__((__nonnull__(2)));
7393int pthread_sigqueue (pthread_t *, int, const union sigval);
7394int pthread_timedjoin_np (pthread_t, void **, const struct timespec *);
7395int pthread_tryjoin_np (pthread_t, void **);
7396int pthread_yield (void);
7397int pthread_suspend (pthread_t);
7398int pthread_continue (pthread_t);
7399typedef pthread_t rb_nativethread_id_t;
7400typedef pthread_mutex_t rb_nativethread_lock_t;
7401typedef pthread_cond_t rb_nativethread_cond_t;
7402
7403
7404rb_nativethread_id_t rb_nativethread_self(void);
7405void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
7406void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
7407void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
7408void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
7409void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
7410int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
7411void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
7412void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
7413void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
7414void rb_native_cond_signal(rb_nativethread_cond_t *cond);
7415void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
7416void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
7417void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
7418void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
7419void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
7420
7421
7422void *rb_allocate_sigaltstack(void);
7423void *rb_register_sigaltstack(void *);
7424struct rb_thread_sched_item {
7425 union {
7426 struct ccan_list_node ubf;
7427 struct ccan_list_node readyq;
7428 } node;
7429};
7430struct rb_native_thread {
7431 int id;
7432 rb_nativethread_id_t thread_id;
7433 struct rb_thread_struct *running_thread;
7434 struct
7435 {
7436 rb_nativethread_cond_t intr;
7437 rb_nativethread_cond_t readyq;
7438 } cond;
7439 void *altstack;
7440};
7441struct rb_thread_sched {
7442 const struct rb_thread_struct *running;
7443 rb_nativethread_lock_t lock;
7444 struct ccan_list_head readyq;
7445 const struct rb_thread_struct *timer;
7446 int timer_err;
7447 rb_nativethread_cond_t switch_cond;
7448 rb_nativethread_cond_t switch_wait_cond;
7449 int need_yield;
7450 int wait_yield;
7451};
7452
7453
7454extern _Thread_local struct rb_execution_context_struct *ruby_current_ec;
7455
7456
7457void rb_vm_encoded_insn_data_table_init(void);
7458typedef unsigned long rb_num_t;
7459typedef signed long rb_snum_t;
7460enum ruby_tag_type {
7461 RUBY_TAG_NONE = 0x0,
7462 RUBY_TAG_RETURN = 0x1,
7463 RUBY_TAG_BREAK = 0x2,
7464 RUBY_TAG_NEXT = 0x3,
7465 RUBY_TAG_RETRY = 0x4,
7466 RUBY_TAG_REDO = 0x5,
7467 RUBY_TAG_RAISE = 0x6,
7468 RUBY_TAG_THROW = 0x7,
7469 RUBY_TAG_FATAL = 0x8,
7470 RUBY_TAG_MASK = 0xf
7471};
7472enum ruby_vm_throw_flags {
7473 VM_THROW_NO_ESCAPE_FLAG = 0x8000,
7474 VM_THROW_STATE_MASK = 0xff
7475};
7476struct rb_thread_struct;
7477struct rb_control_frame_struct;
7478typedef struct rb_compile_option_struct rb_compile_option_t;
7479union ic_serial_entry {
7480 rb_serial_t raw;
7481 VALUE data[2];
7482};
7483struct iseq_inline_constant_cache_entry {
7484 VALUE flags;
7485 VALUE value;
7486 VALUE _unused1;
7487 VALUE _unused2;
7488 const rb_cref_t *ic_cref;
7489};
7490__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");
7491struct iseq_inline_constant_cache {
7492 struct iseq_inline_constant_cache_entry *entry;
7493 const ID *segments;
7494};
7495struct iseq_inline_iv_cache_entry {
7496 uintptr_t value;
7497 ID iv_set_name;
7498};
7499struct iseq_inline_cvar_cache_entry {
7500 struct rb_cvar_class_tbl_entry *entry;
7501};
7502union iseq_inline_storage_entry {
7503 struct {
7504 struct rb_thread_struct *running_thread;
7505 VALUE value;
7506 } once;
7507 struct iseq_inline_constant_cache ic_cache;
7508 struct iseq_inline_iv_cache_entry iv_cache;
7509};
7510struct rb_calling_info {
7511 const struct rb_callinfo *ci;
7512 const struct rb_callcache *cc;
7513 VALUE block_handler;
7514 VALUE recv;
7515 int argc;
7516 int kw_splat;
7517};
7518struct rb_execution_context_struct;
7519typedef struct rb_iseq_location_struct {
7520 VALUE pathobj;
7521 VALUE base_label;
7522 VALUE label;
7523 int first_lineno;
7524 int node_id;
7525 rb_code_location_t code_location;
7526} rb_iseq_location_t;
7527static inline VALUE
7528pathobj_path(VALUE pathobj)
7529{
7530 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7531 return pathobj;
7532 }
7533 else {
7534 ((void)0);
7535 return RARRAY_AREF(pathobj, 0);
7536 }
7537}
7538static inline VALUE
7539pathobj_realpath(VALUE pathobj)
7540{
7541 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7542 return pathobj;
7543 }
7544 else {
7545 ((void)0);
7546 return RARRAY_AREF(pathobj, 1);
7547 }
7548}
7549struct rb_mjit_unit;
7550typedef uintptr_t iseq_bits_t;
7551enum rb_iseq_type {
7552 ISEQ_TYPE_TOP,
7553 ISEQ_TYPE_METHOD,
7554 ISEQ_TYPE_BLOCK,
7555 ISEQ_TYPE_CLASS,
7556 ISEQ_TYPE_RESCUE,
7557 ISEQ_TYPE_ENSURE,
7558 ISEQ_TYPE_EVAL,
7559 ISEQ_TYPE_MAIN,
7560 ISEQ_TYPE_PLAIN
7561};
7562struct rb_iseq_constant_body {
7563 enum rb_iseq_type type;
7564 unsigned int iseq_size;
7565 VALUE *iseq_encoded;
7566 struct {
7567 struct {
7568 unsigned int has_lead : 1;
7569 unsigned int has_opt : 1;
7570 unsigned int has_rest : 1;
7571 unsigned int has_post : 1;
7572 unsigned int has_kw : 1;
7573 unsigned int has_kwrest : 1;
7574 unsigned int has_block : 1;
7575 unsigned int ambiguous_param0 : 1;
7576 unsigned int accepts_no_kwarg : 1;
7577 unsigned int ruby2_keywords: 1;
7578 } flags;
7579 unsigned int size;
7580 int lead_num;
7581 int opt_num;
7582 int rest_start;
7583 int post_start;
7584 int post_num;
7585 int block_start;
7586 const VALUE *opt_table;
7587 const struct rb_iseq_param_keyword {
7588 int num;
7589 int required_num;
7590 int bits_start;
7591 int rest_start;
7592 const ID *table;
7593 VALUE *default_values;
7594 } *keyword;
7595 } param;
7596 rb_iseq_location_t location;
7597 struct iseq_insn_info {
7598 const struct iseq_insn_info_entry *body;
7599 unsigned int *positions;
7600 unsigned int size;
7601 struct succ_index_table *succ_index_table;
7602 } insns_info;
7603 const ID *local_table;
7604 struct iseq_catch_table *catch_table;
7605 const struct rb_iseq_struct *parent_iseq;
7606 struct rb_iseq_struct *local_iseq;
7607 union iseq_inline_storage_entry *is_entries;
7608 struct rb_call_data *call_data;
7609 struct {
7610 rb_snum_t flip_count;
7611 VALUE script_lines;
7612 VALUE coverage;
7613 VALUE pc2branchindex;
7614 VALUE *original_iseq;
7615 } variable;
7616 unsigned int local_table_size;
7617 unsigned int ic_size;
7618 unsigned int ise_size;
7619 unsigned int ivc_size;
7620 unsigned int icvarc_size;
7621 unsigned int ci_size;
7622 unsigned int stack_max;
7623 _Bool catch_except_p;
7624 _Bool builtin_inline_p;
7625 union {
7626 iseq_bits_t * list;
7627 iseq_bits_t single;
7628 } mark_bits;
7629 struct rb_id_table *outer_variables;
7630 const rb_iseq_t *mandatory_only_iseq;
7631 VALUE (*jit_func)(struct rb_execution_context_struct *, struct rb_control_frame_struct *);
7632 long unsigned total_calls;
7633 struct rb_mjit_unit *mjit_unit;
7634};
7635struct rb_iseq_struct {
7636 VALUE flags;
7637 VALUE wrapper;
7638 struct rb_iseq_constant_body *body;
7639 union {
7640 struct iseq_compile_data *compile_data;
7641 struct {
7642 VALUE obj;
7643 int index;
7644 } loader;
7645 struct {
7646 struct rb_hook_list_struct *local_hooks;
7647 rb_event_flag_t global_trace_events;
7648 } exec;
7649 } aux;
7650};
7651static inline const rb_iseq_t *
7652rb_iseq_check(const rb_iseq_t *iseq)
7653{
7654 return iseq;
7655}
7656static inline const rb_iseq_t *
7657def_iseq_ptr(rb_method_definition_t *def)
7658{
7659 return rb_iseq_check(def->body.iseq.iseqptr);
7660}
7661enum ruby_special_exceptions {
7662 ruby_error_reenter,
7663 ruby_error_nomemory,
7664 ruby_error_sysstack,
7665 ruby_error_stackfatal,
7666 ruby_error_stream_closed,
7667 ruby_special_error_count
7668};
7669struct rb_vm_struct;
7670typedef void rb_vm_at_exit_func(struct rb_vm_struct*);
7671typedef struct rb_at_exit_list {
7672 rb_vm_at_exit_func *func;
7673 struct rb_at_exit_list *next;
7674} rb_at_exit_list;
7675struct rb_objspace;
7676struct rb_objspace *rb_objspace_alloc(void);
7677void rb_objspace_free(struct rb_objspace *);
7678void rb_objspace_call_finalizer(struct rb_objspace *);
7679typedef struct rb_hook_list_struct {
7680 struct rb_event_hook_struct *hooks;
7681 rb_event_flag_t events;
7682 unsigned int running;
7683 _Bool need_clean;
7684 _Bool is_local;
7685} rb_hook_list_t;
7686typedef const struct rb_builtin_function *RB_BUILTIN;
7687typedef struct rb_vm_struct {
7688 VALUE self;
7689 struct {
7690 struct ccan_list_head set;
7691 unsigned int cnt;
7692 unsigned int blocking_cnt;
7693 struct rb_ractor_struct *main_ractor;
7694 struct rb_thread_struct *main_thread;
7695 struct {
7696 rb_nativethread_lock_t lock;
7697 struct rb_ractor_struct *lock_owner;
7698 unsigned int lock_rec;
7699 _Bool barrier_waiting;
7700 unsigned int barrier_cnt;
7701 rb_nativethread_cond_t barrier_cond;
7702 rb_nativethread_cond_t terminate_cond;
7703 _Bool terminate_waiting;
7704 } sync;
7705 } ractor;
7706 void *main_altstack;
7707 rb_serial_t fork_gen;
7708 rb_nativethread_lock_t waitpid_lock;
7709 struct ccan_list_head waiting_pids;
7710 struct ccan_list_head waiting_grps;
7711 struct ccan_list_head waiting_fds;
7712 volatile int ubf_async_safe;
7713 unsigned int running: 1;
7714 unsigned int thread_abort_on_exception: 1;
7715 unsigned int thread_report_on_exception: 1;
7716 unsigned int thread_ignore_deadlock: 1;
7717 VALUE mark_object_ary;
7718 const VALUE special_exceptions[ruby_special_error_count];
7719 rb_shape_t *shape_list;
7720 rb_shape_t *root_shape;
7721 shape_id_t next_shape_id;
7722 VALUE top_self;
7723 VALUE load_path;
7724 VALUE load_path_snapshot;
7725 VALUE load_path_check_cache;
7726 VALUE expanded_load_path;
7727 VALUE loaded_features;
7728 VALUE loaded_features_snapshot;
7729 VALUE loaded_features_realpaths;
7730 struct st_table *loaded_features_index;
7731 struct st_table *loading_table;
7732 struct {
7733 VALUE cmd[65];
7734 } trap_list;
7735 struct st_table *ensure_rollback_table;
7736 struct rb_postponed_job_struct *postponed_job_buffer;
7737 rb_atomic_t postponed_job_index;
7738 int src_encoding_index;
7739 struct ccan_list_head workqueue;
7740 rb_nativethread_lock_t workqueue_lock;
7741 VALUE orig_progname, progname;
7742 VALUE coverages, me2counter;
7743 int coverage_mode;
7744 st_table * defined_module_hash;
7745 struct rb_objspace *objspace;
7746 rb_at_exit_list *at_exit;
7747 st_table *frozen_strings;
7748 const struct rb_builtin_function *builtin_function_table;
7749 int builtin_inline_index;
7750 struct rb_id_table *negative_cme_table;
7751 st_table *overloaded_cme_table;
7752 struct rb_id_table *constant_cache;
7753 const struct rb_callcache *global_cc_cache_table[1023];
7754 struct {
7755 size_t thread_vm_stack_size;
7756 size_t thread_machine_stack_size;
7757 size_t fiber_vm_stack_size;
7758 size_t fiber_machine_stack_size;
7759 } default_params;
7760} rb_vm_t;
7761struct rb_captured_block {
7762 VALUE self;
7763 const VALUE *ep;
7764 union {
7765 const rb_iseq_t *iseq;
7766 const struct vm_ifunc *ifunc;
7767 VALUE val;
7768 } code;
7769};
7770enum rb_block_handler_type {
7771 block_handler_type_iseq,
7772 block_handler_type_ifunc,
7773 block_handler_type_symbol,
7774 block_handler_type_proc
7775};
7776enum rb_block_type {
7777 block_type_iseq,
7778 block_type_ifunc,
7779 block_type_symbol,
7780 block_type_proc
7781};
7782struct rb_block {
7783 union {
7784 struct rb_captured_block captured;
7785 VALUE symbol;
7786 VALUE proc;
7787 } as;
7788 enum rb_block_type type;
7789};
7790typedef struct rb_control_frame_struct {
7791 const VALUE *pc;
7792 VALUE *sp;
7793 const rb_iseq_t *iseq;
7794 VALUE self;
7795 const VALUE *ep;
7796 const void *block_code;
7797 VALUE *__bp__;
7798 void *jit_return;
7799} rb_control_frame_t;
7800extern const rb_data_type_t ruby_threadptr_data_type;
7801static inline struct rb_thread_struct *
7802rb_thread_ptr(VALUE thval)
7803{
7804 return (struct rb_thread_struct *)rb_check_typeddata(thval, &ruby_threadptr_data_type);
7805}
7806enum rb_thread_status {
7807 THREAD_RUNNABLE,
7808 THREAD_STOPPED,
7809 THREAD_STOPPED_FOREVER,
7810 THREAD_KILLED
7811};
7812typedef void *rb_jmpbuf_t[5];
7813struct rb_vm_tag {
7814 VALUE tag;
7815 VALUE retval;
7816 rb_jmpbuf_t buf;
7817 struct rb_vm_tag *prev;
7818 enum ruby_tag_type state;
7819 unsigned int lock_rec;
7820};
7821__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) > 0, "rb_vm_tag_buf_offset" ": " "offsetof(struct rb_vm_tag, buf) > 0");
7822__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)");
7823struct rb_unblock_callback {
7824 rb_unblock_function_t *func;
7825 void *arg;
7826};
7827struct rb_mutex_struct;
7828typedef struct rb_ensure_entry {
7829 VALUE marker;
7830 VALUE (*e_proc)(VALUE);
7831 VALUE data2;
7832} rb_ensure_entry_t;
7833typedef struct rb_ensure_list {
7834 struct rb_ensure_list *next;
7835 struct rb_ensure_entry entry;
7836} rb_ensure_list_t;
7837typedef struct rb_fiber_struct rb_fiber_t;
7838struct rb_waiting_list {
7839 struct rb_waiting_list *next;
7840 struct rb_thread_struct *thread;
7841 struct rb_fiber_struct *fiber;
7842};
7843struct rb_execution_context_struct {
7844 VALUE *vm_stack;
7845 size_t vm_stack_size;
7846 rb_control_frame_t *cfp;
7847 struct rb_vm_tag *tag;
7848 rb_atomic_t interrupt_flag;
7849 rb_atomic_t interrupt_mask;
7850 rb_fiber_t *fiber_ptr;
7851 struct rb_thread_struct *thread_ptr;
7852 struct rb_id_table *local_storage;
7853 VALUE local_storage_recursive_hash;
7854 VALUE local_storage_recursive_hash_for_trace;
7855 VALUE storage;
7856 const VALUE *root_lep;
7857 VALUE root_svar;
7858 rb_ensure_list_t *ensure_list;
7859 struct rb_trace_arg_struct *trace_arg;
7860 VALUE errinfo;
7861 VALUE passed_block_handler;
7862 uint8_t raised_flag;
7863 enum method_missing_reason method_missing_reason : 8;
7864 VALUE private_const_reference;
7865 struct {
7866 VALUE *stack_start;
7867 VALUE *stack_end;
7868 size_t stack_maxsize;
7869 __attribute__((__aligned__(8))) jmp_buf regs;
7870 } machine;
7871};
7872typedef struct rb_execution_context_struct rb_execution_context_t;
7873void rb_ec_set_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7874void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7875void rb_ec_clear_vm_stack(rb_execution_context_t *ec);
7876struct rb_ext_config {
7877 _Bool ractor_safe;
7878};
7879typedef struct rb_ractor_struct rb_ractor_t;
7880struct rb_native_thread;
7881typedef struct rb_thread_struct {
7882 struct ccan_list_node lt_node;
7883 VALUE self;
7884 rb_ractor_t *ractor;
7885 rb_vm_t *vm;
7886 struct rb_native_thread *nt;
7887 rb_execution_context_t *ec;
7888 struct rb_thread_sched_item sched;
7889 rb_atomic_t serial;
7890 VALUE last_status;
7891 struct rb_calling_info *calling;
7892 VALUE top_self;
7893 VALUE top_wrapper;
7894 enum rb_thread_status status : 2;
7895 unsigned int locking_native_thread : 1;
7896 unsigned int to_kill : 1;
7897 unsigned int abort_on_exception: 1;
7898 unsigned int report_on_exception: 1;
7899 unsigned int pending_interrupt_queue_checked: 1;
7900 int8_t priority;
7901 uint32_t running_time_us;
7902 void *blocking_region_buffer;
7903 VALUE thgroup;
7904 VALUE value;
7905 VALUE pending_interrupt_queue;
7906 VALUE pending_interrupt_mask_stack;
7907 rb_nativethread_lock_t interrupt_lock;
7908 struct rb_unblock_callback unblock;
7909 VALUE locking_mutex;
7910 struct rb_mutex_struct *keeping_mutexes;
7911 struct rb_waiting_list *join_list;
7912 union {
7913 struct {
7914 VALUE proc;
7915 VALUE args;
7916 int kw_splat;
7917 } proc;
7918 struct {
7919 VALUE (*func)(void *);
7920 void *arg;
7921 } func;
7922 } invoke_arg;
7923 enum thread_invoke_type {
7924 thread_invoke_type_none = 0,
7925 thread_invoke_type_proc,
7926 thread_invoke_type_ractor_proc,
7927 thread_invoke_type_func
7928 } invoke_type;
7929 VALUE stat_insn_usage;
7930 rb_fiber_t *root_fiber;
7931 VALUE scheduler;
7932 unsigned int blocking;
7933 VALUE name;
7934 struct rb_ext_config ext_config;
7935} rb_thread_t;
7936static inline unsigned int
7937rb_th_serial(const rb_thread_t *th)
7938{
7939 return (unsigned int)th->serial;
7940}
7941typedef enum {
7942 VM_DEFINECLASS_TYPE_CLASS = 0x00,
7943 VM_DEFINECLASS_TYPE_SINGLETON_CLASS = 0x01,
7944 VM_DEFINECLASS_TYPE_MODULE = 0x02,
7945 VM_DEFINECLASS_TYPE_MASK = 0x07
7946} rb_vm_defineclass_type_t;
7947
7948
7949rb_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);
7950rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
7951rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent, int opt);
7952rb_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);
7953rb_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,
7954 enum rb_iseq_type, const rb_compile_option_t*);
7955struct iseq_link_anchor;
7956struct rb_iseq_new_with_callback_callback_func {
7957 VALUE flags;
7958 VALUE reserved;
7959 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *);
7960 const void *data;
7961};
7962static inline struct rb_iseq_new_with_callback_callback_func *
7963rb_iseq_new_with_callback_new_callback(
7964 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *), const void *ptr)
7965{
7966 VALUE memo = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)ptr, ((VALUE)RUBY_Qundef), ((VALUE)RUBY_Qfalse));
7967 return (struct rb_iseq_new_with_callback_callback_func *)memo;
7968}
7969rb_iseq_t *rb_iseq_new_with_callback(const struct rb_iseq_new_with_callback_callback_func * ifunc,
7970 VALUE name, VALUE path, VALUE realpath, int first_lineno,
7971 const rb_iseq_t *parent, enum rb_iseq_type, const rb_compile_option_t*);
7972VALUE rb_iseq_disasm(const rb_iseq_t *iseq);
7973int rb_iseq_disasm_insn(VALUE str, const VALUE *iseqval, size_t pos, const rb_iseq_t *iseq, VALUE child);
7974attr_index_t rb_estimate_iv_count(VALUE klass, const rb_iseq_t * initialize_iseq);
7975VALUE rb_iseq_coverage(const rb_iseq_t *iseq);
7976extern VALUE rb_cISeq;
7977extern VALUE rb_cRubyVM;
7978extern VALUE rb_mRubyVMFrozenCore;
7979extern VALUE rb_block_param_proxy;
7980
7981
7982typedef struct {
7983 const struct rb_block block;
7984 unsigned int is_from_method: 1;
7985 unsigned int is_lambda: 1;
7986 unsigned int is_isolated: 1;
7987} rb_proc_t;
7988
7989
7990VALUE rb_proc_isolate(VALUE self);
7991VALUE rb_proc_isolate_bang(VALUE self);
7992VALUE rb_proc_ractor_make_shareable(VALUE self);
7993
7994
7995typedef struct {
7996 VALUE flags;
7997 rb_iseq_t *iseq;
7998 const VALUE *ep;
7999 const VALUE *env;
8000 unsigned int env_size;
8001} rb_env_t;
8002extern const rb_data_type_t ruby_binding_data_type;
8003typedef struct {
8004 const struct rb_block block;
8005 const VALUE pathobj;
8006 int first_lineno;
8007} rb_binding_t;
8008enum vm_check_match_type {
8009 VM_CHECKMATCH_TYPE_WHEN = 1,
8010 VM_CHECKMATCH_TYPE_CASE = 2,
8011 VM_CHECKMATCH_TYPE_RESCUE = 3
8012};
8013enum vm_special_object_type {
8014 VM_SPECIAL_OBJECT_VMCORE = 1,
8015 VM_SPECIAL_OBJECT_CBASE,
8016 VM_SPECIAL_OBJECT_CONST_BASE
8017};
8018enum vm_svar_index {
8019 VM_SVAR_LASTLINE = 0,
8020 VM_SVAR_BACKREF = 1,
8021 VM_SVAR_EXTRA_START = 2,
8022 VM_SVAR_FLIPFLOP_START = 2
8023};
8024typedef struct iseq_inline_constant_cache *IC;
8025typedef struct iseq_inline_iv_cache_entry *IVC;
8026typedef struct iseq_inline_cvar_cache_entry *ICVARC;
8027typedef union iseq_inline_storage_entry *ISE;
8028typedef const struct rb_callinfo *CALL_INFO;
8029typedef const struct rb_callcache *CALL_CACHE;
8030typedef struct rb_call_data *CALL_DATA;
8031typedef VALUE CDHASH;
8032typedef rb_control_frame_t *
8033 (__attribute__ ((__fastcall__)) *rb_insn_func_t)(rb_execution_context_t *, rb_control_frame_t *);
8034enum vm_frame_env_flags {
8035 VM_FRAME_MAGIC_METHOD = 0x11110001,
8036 VM_FRAME_MAGIC_BLOCK = 0x22220001,
8037 VM_FRAME_MAGIC_CLASS = 0x33330001,
8038 VM_FRAME_MAGIC_TOP = 0x44440001,
8039 VM_FRAME_MAGIC_CFUNC = 0x55550001,
8040 VM_FRAME_MAGIC_IFUNC = 0x66660001,
8041 VM_FRAME_MAGIC_EVAL = 0x77770001,
8042 VM_FRAME_MAGIC_RESCUE = 0x78880001,
8043 VM_FRAME_MAGIC_DUMMY = 0x79990001,
8044 VM_FRAME_MAGIC_MASK = 0x7fff0001,
8045 VM_FRAME_FLAG_FINISH = 0x0020,
8046 VM_FRAME_FLAG_BMETHOD = 0x0040,
8047 VM_FRAME_FLAG_CFRAME = 0x0080,
8048 VM_FRAME_FLAG_LAMBDA = 0x0100,
8049 VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
8050 VM_FRAME_FLAG_CFRAME_KW = 0x0400,
8051 VM_FRAME_FLAG_PASSED = 0x0800,
8052 VM_ENV_FLAG_LOCAL = 0x0002,
8053 VM_ENV_FLAG_ESCAPED = 0x0004,
8054 VM_ENV_FLAG_WB_REQUIRED = 0x0008,
8055 VM_ENV_FLAG_ISOLATED = 0x0010,
8056};
8057static inline void VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value);
8058static inline void
8059VM_ENV_FLAGS_SET(const VALUE *ep, VALUE flag)
8060{
8061 VALUE flags = ep[( 0)];
8062 ((void)0);
8063 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags | flag);
8064}
8065static inline void
8066VM_ENV_FLAGS_UNSET(const VALUE *ep, VALUE flag)
8067{
8068 VALUE flags = ep[( 0)];
8069 ((void)0);
8070 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags & ~flag);
8071}
8072static inline unsigned long
8073VM_ENV_FLAGS(const VALUE *ep, long flag)
8074{
8075 VALUE flags = ep[( 0)];
8076 ((void)0);
8077 return flags & flag;
8078}
8079static inline unsigned long
8080VM_FRAME_TYPE(const rb_control_frame_t *cfp)
8081{
8082 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_MAGIC_MASK);
8083}
8084static inline int
8085VM_FRAME_LAMBDA_P(const rb_control_frame_t *cfp)
8086{
8087 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_LAMBDA) != 0;
8088}
8089static inline int
8090VM_FRAME_CFRAME_KW_P(const rb_control_frame_t *cfp)
8091{
8092 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME_KW) != 0;
8093}
8094static inline int
8095VM_FRAME_FINISHED_P(const rb_control_frame_t *cfp)
8096{
8097 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_FINISH) != 0;
8098}
8099static inline int
8100VM_FRAME_BMETHOD_P(const rb_control_frame_t *cfp)
8101{
8102 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BMETHOD) != 0;
8103}
8104static inline int
8105rb_obj_is_iseq(VALUE iseq)
8106{
8107 return imemo_type_p(iseq, imemo_iseq);
8108}
8109static inline int
8110VM_FRAME_CFRAME_P(const rb_control_frame_t *cfp)
8111{
8112 int cframe_p = VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME) != 0;
8113 ((void)0);
8114 return cframe_p;
8115}
8116static inline int
8117VM_FRAME_RUBYFRAME_P(const rb_control_frame_t *cfp)
8118{
8119 return !VM_FRAME_CFRAME_P(cfp);
8120}
8121static inline int
8122VM_ENV_LOCAL_P(const VALUE *ep)
8123{
8124 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_LOCAL) ? 1 : 0;
8125}
8126static inline const VALUE *
8127VM_ENV_PREV_EP(const VALUE *ep)
8128{
8129 ((void)0);
8130 return ((void *)(((ep[(-1)])) & ~0x03));
8131}
8132static inline VALUE
8133VM_ENV_BLOCK_HANDLER(const VALUE *ep)
8134{
8135 ((void)0);
8136 return ep[(-1)];
8137}
8138static inline int
8139VM_ENV_ESCAPED_P(const VALUE *ep)
8140{
8141 ((void)0);
8142 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED) ? 1 : 0;
8143}
8144__attribute__((__nonnull__ (1)))
8145static inline VALUE
8146VM_ENV_ENVVAL(const VALUE *ep)
8147{
8148 VALUE envval = ep[( 1)];
8149 ((void)0);
8150 ((void)0);
8151 return envval;
8152}
8153__attribute__((__nonnull__ (1)))
8154static inline const rb_env_t *
8155VM_ENV_ENVVAL_PTR(const VALUE *ep)
8156{
8157 return (const rb_env_t *)VM_ENV_ENVVAL(ep);
8158}
8159static inline const rb_env_t *
8160vm_env_new(VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
8161{
8162 rb_env_t *env = (rb_env_t *)rb_imemo_new(imemo_env, (VALUE)env_ep, (VALUE)env_body, 0, (VALUE)iseq);
8163 env->env_size = env_size;
8164 env_ep[( 1)] = (VALUE)env;
8165 return env;
8166}
8167static inline void
8168VM_FORCE_WRITE(const VALUE *ptr, VALUE v)
8169{
8170 *((VALUE *)ptr) = v;
8171}
8172static inline void
8173VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value)
8174{
8175 ((void)0);
8176 VM_FORCE_WRITE(ptr, special_const_value);
8177}
8178static inline void
8179VM_STACK_ENV_WRITE(const VALUE *ep, int index, VALUE v)
8180{
8181 ((void)0);
8182 VM_FORCE_WRITE(&ep[index], v);
8183}static inline
8184const VALUE *rb_vm_ep_local_ep(const VALUE *ep);
8185const VALUE *rb_vm_proc_local_ep(VALUE proc);static inline
8186void rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep);
8187void rb_vm_block_copy(VALUE obj, const struct rb_block *dst, const struct rb_block *src);static inline
8188VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
8189static inline const rb_control_frame_t *
8190RUBY_VM_END_CONTROL_FRAME(const rb_execution_context_t *ec)
8191{
8192 return (rb_control_frame_t *)(ec->vm_stack + ec->vm_stack_size);
8193}
8194static inline int
8195RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
8196{
8197 return !((void *)(RUBY_VM_END_CONTROL_FRAME(ec)) > (void *)(cfp));
8198}
8199static inline int
8200VM_BH_ISEQ_BLOCK_P(VALUE block_handler)
8201{
8202 if ((block_handler & 0x03) == 0x01) {
8203 return 1;
8204 }
8205 else {
8206 return 0;
8207 }
8208}
8209static inline VALUE
8210VM_BH_FROM_ISEQ_BLOCK(const struct rb_captured_block *captured)
8211{
8212 VALUE block_handler = ((VALUE)(captured) | (0x01));
8213 ((void)0);
8214 return block_handler;
8215}
8216static inline const struct rb_captured_block *
8217VM_BH_TO_ISEQ_BLOCK(VALUE block_handler)
8218{
8219 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8220 ((void)0);
8221 return captured;
8222}
8223static inline int
8224VM_BH_IFUNC_P(VALUE block_handler)
8225{
8226 if ((block_handler & 0x03) == 0x03) {
8227 return 1;
8228 }
8229 else {
8230 return 0;
8231 }
8232}
8233static inline VALUE
8234VM_BH_FROM_IFUNC_BLOCK(const struct rb_captured_block *captured)
8235{
8236 VALUE block_handler = ((VALUE)(captured) | (0x03));
8237 ((void)0);
8238 return block_handler;
8239}
8240static inline const struct rb_captured_block *
8241VM_BH_TO_IFUNC_BLOCK(VALUE block_handler)
8242{
8243 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8244 ((void)0);
8245 return captured;
8246}
8247static inline const struct rb_captured_block *
8248VM_BH_TO_CAPT_BLOCK(VALUE block_handler)
8249{
8250 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8251 ((void)0);
8252 return captured;
8253}
8254static inline enum rb_block_handler_type
8255vm_block_handler_type(VALUE block_handler)
8256{
8257 if (VM_BH_ISEQ_BLOCK_P(block_handler)) {
8258 return block_handler_type_iseq;
8259 }
8260 else if (VM_BH_IFUNC_P(block_handler)) {
8261 return block_handler_type_ifunc;
8262 }
8263 else if (RB_SYMBOL_P(block_handler)) {
8264 return block_handler_type_symbol;
8265 }
8266 else {
8267 ((void)0);
8268 return block_handler_type_proc;
8269 }
8270}
8271static inline void
8272vm_block_handler_verify(__attribute__ ((__unused__)) VALUE block_handler)
8273{
8274 ((void)0);
8275}
8276static inline int
8277vm_cfp_forwarded_bh_p(const rb_control_frame_t *cfp, VALUE block_handler)
8278{
8279 return ((VALUE) cfp->block_code) == block_handler;
8280}
8281static inline enum rb_block_type
8282vm_block_type(const struct rb_block *block)
8283{
8284 return block->type;
8285}
8286static inline void
8287vm_block_type_set(const struct rb_block *block, enum rb_block_type type)
8288{
8289 struct rb_block *mb = (struct rb_block *)block;
8290 mb->type = type;
8291}
8292static inline const struct rb_block *
8293vm_proc_block(VALUE procval)
8294{
8295 ((void)0);
8296 return &((rb_proc_t *)(((struct RTypedData *)(procval))->data))->block;
8297}
8298static inline const rb_iseq_t *vm_block_iseq(const struct rb_block *block);
8299static inline const VALUE *vm_block_ep(const struct rb_block *block);
8300static inline const rb_iseq_t *
8301vm_proc_iseq(VALUE procval)
8302{
8303 return vm_block_iseq(vm_proc_block(procval));
8304}
8305static inline const VALUE *
8306vm_proc_ep(VALUE procval)
8307{
8308 return vm_block_ep(vm_proc_block(procval));
8309}
8310static inline const rb_iseq_t *
8311vm_block_iseq(const struct rb_block *block)
8312{
8313 switch (vm_block_type(block)) {
8314 case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq);
8315 case block_type_proc: return vm_proc_iseq(block->as.proc);
8316 case block_type_ifunc:
8317 case block_type_symbol: return ((void *)0);
8318 }
8319 __builtin_unreachable();
8320 return ((void *)0);
8321}
8322static inline const VALUE *
8323vm_block_ep(const struct rb_block *block)
8324{
8325 switch (vm_block_type(block)) {
8326 case block_type_iseq:
8327 case block_type_ifunc: return block->as.captured.ep;
8328 case block_type_proc: return vm_proc_ep(block->as.proc);
8329 case block_type_symbol: return ((void *)0);
8330 }
8331 __builtin_unreachable();
8332 return ((void *)0);
8333}
8334static inline VALUE
8335vm_block_self(const struct rb_block *block)
8336{
8337 switch (vm_block_type(block)) {
8338 case block_type_iseq:
8339 case block_type_ifunc:
8340 return block->as.captured.self;
8341 case block_type_proc:
8342 return vm_block_self(vm_proc_block(block->as.proc));
8343 case block_type_symbol:
8344 return ((VALUE)RUBY_Qundef);
8345 }
8346 __builtin_unreachable();
8347 return ((VALUE)RUBY_Qundef);
8348}
8349static inline VALUE
8350VM_BH_TO_SYMBOL(VALUE block_handler)
8351{
8352 ((void)0);
8353 return block_handler;
8354}
8355static inline VALUE
8356VM_BH_FROM_SYMBOL(VALUE symbol)
8357{
8358 ((void)0);
8359 return symbol;
8360}
8361static inline VALUE
8362VM_BH_TO_PROC(VALUE block_handler)
8363{
8364 ((void)0);
8365 return block_handler;
8366}
8367static inline VALUE
8368VM_BH_FROM_PROC(VALUE procval)
8369{
8370 ((void)0);
8371 return procval;
8372}
8373VALUE rb_thread_alloc(VALUE klass);
8374VALUE rb_binding_alloc(VALUE klass);
8375VALUE rb_proc_alloc(VALUE klass);
8376VALUE rb_proc_dup(VALUE self);
8377extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8378extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
8379extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp
8380);
8381void rb_vm_bugreport(const void *);
8382typedef void (*ruby_sighandler_t)(int);
8383__attribute__((__format__(__printf__, 4, 5)))
8384__attribute__((__noreturn__)) void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...);
8385
8386
8387VALUE rb_iseq_eval(const rb_iseq_t *iseq);
8388VALUE rb_iseq_eval_main(const rb_iseq_t *iseq);
8389VALUE rb_iseq_path(const rb_iseq_t *iseq);
8390VALUE rb_iseq_realpath(const rb_iseq_t *iseq);
8391
8392
8393VALUE rb_iseq_pathobj_new(VALUE path, VALUE realpath);
8394void rb_iseq_pathobj_set(const rb_iseq_t *iseq, VALUE path, VALUE realpath);
8395int rb_ec_frame_method_id_and_class(const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp);
8396void rb_ec_setup_exception(const rb_execution_context_t *ec, VALUE mesg, VALUE cause);
8397VALUE rb_vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
8398VALUE rb_vm_make_proc_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
8399static inline VALUE
8400rb_vm_make_proc(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8401{
8402 return rb_vm_make_proc_lambda(ec, captured, klass, 0);
8403}
8404static inline VALUE
8405rb_vm_make_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8406{
8407 return rb_vm_make_proc_lambda(ec, captured, klass, 1);
8408}
8409VALUE rb_vm_make_binding(const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp);
8410VALUE rb_vm_env_local_variables(const rb_env_t *env);
8411const rb_env_t *rb_vm_env_prev_env(const rb_env_t *env);
8412const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars);
8413void rb_vm_inc_const_missing_count(void);
8414VALUE rb_vm_call_kw(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc,
8415 const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat);static inline
8416void rb_vm_pop_frame_no_int(rb_execution_context_t *ec);
8417static void rb_vm_pop_frame(rb_execution_context_t *ec);
8418void rb_thread_start_timer_thread(void);
8419void rb_thread_stop_timer_thread(void);
8420void rb_thread_reset_timer_thread(void);
8421void rb_thread_wakeup_timer_thread(int);
8422static inline void
8423rb_vm_living_threads_init(rb_vm_t *vm)
8424{
8425 ccan_list_head_init(&vm->waiting_fds);
8426 ccan_list_head_init(&vm->waiting_pids);
8427 ccan_list_head_init(&vm->workqueue);
8428 ccan_list_head_init(&vm->waiting_grps);
8429 ccan_list_head_init(&vm->ractor.set);
8430}
8431typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
8432rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8433rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8434int rb_vm_get_sourceline(const rb_control_frame_t *);
8435void rb_vm_stack_to_heap(rb_execution_context_t *ec);
8436void ruby_thread_init_stack(rb_thread_t *th);
8437rb_thread_t * ruby_thread_from_native(void);
8438int ruby_thread_set_native(rb_thread_t *th);
8439int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
8440void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
8441static VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
8442void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
8443void rb_gc_mark_machine_stack(const rb_execution_context_t *ec);static inline
8444void rb_vm_rewrite_cref(rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr);
8445static const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
8446VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, enum ruby_tag_type *stateptr);
8447rb_execution_context_t *rb_vm_main_ractor_ec(rb_vm_t *vm);
8448
8449
8450extern struct rb_ractor_struct *ruby_single_main_ractor;
8451extern rb_vm_t *ruby_current_vm_ptr;
8452extern rb_event_flag_t ruby_vm_event_flags;
8453extern rb_event_flag_t ruby_vm_event_enabled_global_flags;
8454extern unsigned int ruby_vm_event_local_num;
8455
8456
8457static inline rb_thread_t *
8458rb_ec_thread_ptr(const rb_execution_context_t *ec)
8459{
8460 return ec->thread_ptr;
8461}
8462static inline rb_ractor_t *
8463rb_ec_ractor_ptr(const rb_execution_context_t *ec)
8464{
8465 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8466 if (th) {
8467 ((void)0);
8468 return th->ractor;
8469 }
8470 else {
8471 return ((void *)0);
8472 }
8473}
8474static inline rb_vm_t *
8475rb_ec_vm_ptr(const rb_execution_context_t *ec)
8476{
8477 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8478 if (th) {
8479 return th->vm;
8480 }
8481 else {
8482 return ((void *)0);
8483 }
8484}
8485static inline rb_execution_context_t *
8486rb_current_execution_context(_Bool expect_ec)
8487{
8488 rb_execution_context_t *ec = ruby_current_ec;
8489 ((void)0);
8490 return ec;
8491}
8492static inline rb_thread_t *
8493rb_current_thread(void)
8494{
8495 const rb_execution_context_t *ec = rb_current_execution_context(1);
8496 return rb_ec_thread_ptr(ec);
8497}
8498static inline rb_ractor_t *
8499rb_current_ractor(void)
8500{
8501 if (ruby_single_main_ractor) {
8502 return ruby_single_main_ractor;
8503 }
8504 else {
8505 const rb_execution_context_t *ec = rb_current_execution_context(1);
8506 return rb_ec_ractor_ptr(ec);
8507 }
8508}
8509static inline rb_vm_t *
8510rb_current_vm(void)
8511{
8512 return ruby_current_vm_ptr;
8513}
8514void rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec,
8515 unsigned int recorded_lock_rec,
8516 unsigned int current_lock_rec);
8517static inline unsigned int
8518rb_ec_vm_lock_rec(const rb_execution_context_t *ec)
8519{
8520 rb_vm_t *vm = rb_ec_vm_ptr(ec);
8521 if (vm->ractor.sync.lock_owner != rb_ec_ractor_ptr(ec)) {
8522 return 0;
8523 }
8524 else {
8525 return vm->ractor.sync.lock_rec;
8526 }
8527}
8528enum {
8529 TIMER_INTERRUPT_MASK = 0x01,
8530 PENDING_INTERRUPT_MASK = 0x02,
8531 POSTPONED_JOB_INTERRUPT_MASK = 0x04,
8532 TRAP_INTERRUPT_MASK = 0x08,
8533 TERMINATE_INTERRUPT_MASK = 0x10,
8534 VM_BARRIER_INTERRUPT_MASK = 0x20,
8535};
8536static inline _Bool
8537RUBY_VM_INTERRUPTED_ANY(rb_execution_context_t *ec)
8538{
8539 return ec->interrupt_flag & ~(ec)->interrupt_mask;
8540}
8541VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
8542int rb_signal_buff_size(void);
8543int rb_signal_exec(rb_thread_t *th, int sig);
8544void rb_threadptr_check_signal(rb_thread_t *mth);
8545void rb_threadptr_signal_raise(rb_thread_t *th, int sig);
8546void rb_threadptr_signal_exit(rb_thread_t *th);
8547int rb_threadptr_execute_interrupts(rb_thread_t *, int);
8548void rb_threadptr_interrupt(rb_thread_t *th);
8549void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
8550void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
8551void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
8552VALUE rb_ec_get_errinfo(const rb_execution_context_t *ec);
8553void rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo);
8554void rb_execution_context_update(rb_execution_context_t *ec);
8555void rb_execution_context_mark(const rb_execution_context_t *ec);
8556void rb_fiber_close(rb_fiber_t *fib);
8557void Init_native_thread(rb_thread_t *th);
8558int rb_vm_check_ints_blocking(rb_execution_context_t *ec);
8559void rb_vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond);
8560void rb_vm_cond_timedwait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec);
8561static inline void
8562rb_vm_check_ints(rb_execution_context_t *ec)
8563{
8564 ((void)0);
8565 if ((__builtin_expect(!!(RUBY_VM_INTERRUPTED_ANY(ec)), 0))) {
8566 rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);
8567 }
8568}
8569struct rb_trace_arg_struct {
8570 rb_event_flag_t event;
8571 rb_execution_context_t *ec;
8572 const rb_control_frame_t *cfp;
8573 VALUE self;
8574 ID id;
8575 ID called_id;
8576 VALUE klass;
8577 VALUE data;
8578 int klass_solved;
8579 int lineno;
8580 VALUE path;
8581};
8582void rb_hook_list_mark(rb_hook_list_t *hooks);
8583void rb_hook_list_free(rb_hook_list_t *hooks);
8584void rb_hook_list_connect_tracepoint(VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line);
8585void rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval);
8586void rb_exec_event_hooks(struct rb_trace_arg_struct *trace_arg, rb_hook_list_t *hooks, int pop_p);
8587static inline void
8588rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_event_flag_t flag,
8589 VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
8590{
8591 struct rb_trace_arg_struct trace_arg;
8592 ((void)0);
8593 trace_arg.event = flag;
8594 trace_arg.ec = ec;
8595 trace_arg.cfp = ec->cfp;
8596 trace_arg.self = self;
8597 trace_arg.id = id;
8598 trace_arg.called_id = called_id;
8599 trace_arg.klass = klass;
8600 trace_arg.data = data;
8601 trace_arg.path = ((VALUE)RUBY_Qundef);
8602 trace_arg.klass_solved = 0;
8603 rb_exec_event_hooks(&trace_arg, hooks, pop_p);
8604}
8605struct rb_ractor_pub {
8606 VALUE self;
8607 uint32_t id;
8608 rb_hook_list_t hooks;
8609};
8610static inline rb_hook_list_t *
8611rb_ec_ractor_hooks(const rb_execution_context_t *ec)
8612{
8613 struct rb_ractor_pub *cr_pub = (struct rb_ractor_pub *)rb_ec_ractor_ptr(ec);
8614 return &cr_pub->hooks;
8615}
8616static inline void
8617rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
8618{
8619 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);
8620}
8621void rb_vm_trap_exit(rb_vm_t *vm);
8622
8623
8624int rb_thread_check_trap_pending(void);
8625extern VALUE rb_get_coverages(void);
8626extern void rb_set_coverages(VALUE, int, VALUE);
8627extern void rb_clear_coverages(void);
8628extern void rb_reset_coverages(void);
8629extern void rb_resume_coverages(void);
8630extern void rb_suspend_coverages(void);
8631void rb_postponed_job_flush(rb_vm_t *vm);
8632extern VALUE rb_eRactorUnsafeError;
8633extern VALUE rb_eRactorIsolationError;
8634
8635
8636static inline void
8637vm_passed_block_handler_set(rb_execution_context_t *ec, VALUE block_handler)
8638{
8639 vm_block_handler_verify(block_handler);
8640 ec->passed_block_handler = block_handler;
8641}
8642static inline void
8643pass_passed_block_handler(rb_execution_context_t *ec)
8644{
8645 VALUE block_handler = rb_vm_frame_block_handler(ec->cfp);
8646 vm_passed_block_handler_set(ec, block_handler);
8647 VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_PASSED);
8648}
8649int _setjmp(jmp_buf);
8650__attribute__((__noreturn__)) void _longjmp(jmp_buf, int);
8651typedef int error_t;
8652extern int *__errno (void);
8653extern __attribute__((dllimport)) const char * const _sys_errlist[];
8654extern __attribute__((dllimport)) int _sys_nerr;
8655extern __attribute__((dllimport)) const char * const sys_errlist[];
8656extern __attribute__((dllimport)) int sys_nerr;
8657extern __attribute__((dllimport)) char *program_invocation_name;
8658extern __attribute__((dllimport)) char *program_invocation_short_name;
8659static inline void
8660rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec)
8661{
8662 unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec);
8663 if (current_lock_rec != recorded_lock_rec) {
8664 rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec);
8665 }
8666}
8667static inline int
8668rb_ec_tag_state(const rb_execution_context_t *ec)
8669{
8670 struct rb_vm_tag *tag = ec->tag;
8671 enum ruby_tag_type state = tag->state;
8672 tag->state = RUBY_TAG_NONE;
8673 rb_ec_vm_lock_rec_check(ec, tag->lock_rec);
8674 return state;
8675}
8676__attribute__((__noreturn__)) static inline void rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st);
8677static inline void
8678rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st)
8679{
8680 ec->tag->state = st;
8681 __builtin_longjmp(((ec->tag->buf)),(1));
8682}
8683static inline int CREF_SINGLETON(const rb_cref_t *cref);
8684static inline VALUE
8685CREF_CLASS(const rb_cref_t *cref)
8686{
8687 if (CREF_SINGLETON(cref)) {
8688 return rb_class_of(cref->klass_or_self);
8689 }
8690 else {
8691 return cref->klass_or_self;
8692 }
8693}
8694static inline VALUE
8695CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref)
8696{
8697 if (CREF_SINGLETON(cref)) {
8698 return rb_singleton_class(cref->klass_or_self);
8699 }
8700 else {
8701 return cref->klass_or_self;
8702 }
8703}
8704static inline rb_cref_t *
8705CREF_NEXT(const rb_cref_t *cref)
8706{
8707 return cref->next;
8708}
8709static inline const rb_scope_visibility_t *
8710CREF_SCOPE_VISI(const rb_cref_t *cref)
8711{
8712 return &cref->scope_visi;
8713}
8714static inline VALUE
8715CREF_REFINEMENTS(const rb_cref_t *cref)
8716{
8717 return cref->refinements;
8718}
8719static inline void
8720CREF_REFINEMENTS_SET(rb_cref_t *cref, VALUE refs)
8721{
8722 rb_obj_write((VALUE)(cref), __extension__({
8723 ;
8724 ; __typeof__((VALUE *)(&cref->refinements)) unaligned_member_access_result = ((VALUE *)(&cref->refinements));
8725 ; unaligned_member_access_result; }), (VALUE)(refs), "../ruby-3.2.2/eval_intern.h", 227);
8726}
8727static inline int
8728CREF_PUSHED_BY_EVAL(const rb_cref_t *cref)
8729{
8730 return cref->flags & ((VALUE)RUBY_FL_USER5);
8731}
8732static inline void
8733CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref)
8734{
8735 cref->flags |= ((VALUE)RUBY_FL_USER5);
8736}
8737static inline int
8738CREF_SINGLETON(const rb_cref_t *cref)
8739{
8740 return cref->flags & ((VALUE)RUBY_FL_USER7);
8741}
8742static inline void
8743CREF_SINGLETON_SET(rb_cref_t *cref)
8744{
8745 cref->flags |= ((VALUE)RUBY_FL_USER7);
8746}
8747static inline int
8748CREF_OMOD_SHARED(const rb_cref_t *cref)
8749{
8750 return cref->flags & ((VALUE)RUBY_FL_USER6);
8751}
8752static inline void
8753CREF_OMOD_SHARED_SET(rb_cref_t *cref)
8754{
8755 cref->flags |= ((VALUE)RUBY_FL_USER6);
8756}
8757static inline void
8758CREF_OMOD_SHARED_UNSET(rb_cref_t *cref)
8759{
8760 cref->flags &= ~((VALUE)RUBY_FL_USER6);
8761}
8762enum {
8763 RAISED_EXCEPTION = 1,
8764 RAISED_STACKOVERFLOW = 2,
8765 RAISED_NOMEMORY = 4
8766};
8767int rb_ec_set_raised(rb_execution_context_t *ec);
8768int rb_ec_reset_raised(rb_execution_context_t *ec);
8769int rb_ec_stack_check(rb_execution_context_t *ec);
8770VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
8771VALUE rb_make_exception(int argc, const VALUE *argv);
8772__attribute__((__noreturn__)) void rb_method_name_error(VALUE, VALUE);
8773__attribute__((__noreturn__)) void rb_fiber_start(rb_fiber_t*);
8774__attribute__((__noreturn__)) void rb_print_undef(VALUE, ID, rb_method_visibility_t);
8775__attribute__((__noreturn__)) void rb_print_undef_str(VALUE, VALUE);
8776__attribute__((__noreturn__)) void rb_print_inaccessible(VALUE, ID, rb_method_visibility_t);
8777__attribute__((__noreturn__)) void rb_vm_localjump_error(const char *,VALUE, int);
8778__attribute__((__noreturn__)) void rb_vm_jump_tag_but_local_jump(int);
8779VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
8780rb_cref_t *rb_vm_cref(void);
8781rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void);
8782VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename);
8783void rb_vm_set_progname(VALUE filename);
8784VALUE rb_vm_cbase(void);
8785VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec);
8786VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n);
8787VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, _Bool skip_internal);
8788static inline char *
8789rb_char_next(const char *p)
8790{
8791 if (p) {
8792 int len = mblen(p, 0x7fffffff);
8793 p += len > 0 ? len : 1;
8794 }
8795 return (char *)p;
8796}
8797static inline void
8798translit_char(char *p, int from, int to)
8799{
8800 while (*p) {
8801 if ((unsigned char)*p == from)
8802 *p = to;
8803 p = rb_char_next(p);
8804 }
8805}
8806const char *rb_obj_info(VALUE obj);
8807const char *rb_raw_obj_info(char *const buff, const size_t buff_size, VALUE obj);
8808VALUE rb_gc_disable_no_rest(void);
8809struct rb_thread_struct;
8810size_t rb_size_pool_slot_size(unsigned char pool_id);
8811
8812
8813size_t rb_objspace_data_type_memsize(VALUE obj);
8814void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
8815void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
8816int rb_objspace_markable_object_p(VALUE obj);
8817int rb_objspace_internal_object_p(VALUE obj);
8818int rb_objspace_marked_object_p(VALUE obj);
8819void rb_objspace_each_objects(
8820 int (*callback)(void *start, void *end, size_t stride, void *data),
8821 void *data);
8822void rb_objspace_each_objects_without_setup(
8823 int (*callback)(void *, void *, size_t, void *),
8824 void *data);
8825size_t rb_gc_obj_slot_size(VALUE obj);
8826
8827
8828struct rb_iseq_struct;
8829int rb_dvar_defined(ID, const struct rb_iseq_struct *);
8830int rb_local_defined(ID, const struct rb_iseq_struct *);
8831const char *rb_insns_name(int i);
8832VALUE rb_insns_name_array(void);
8833int rb_iseq_cdhash_cmp(VALUE val, VALUE lit);
8834st_index_t rb_iseq_cdhash_hash(VALUE a);
8835int rb_vm_insn_addr2insn(const void *);
8836int rb_vm_insn_decode(const VALUE encoded);
8837extern _Bool ruby_vm_keep_script_lines;
8838
8839
8840rb_event_flag_t rb_iseq_event_flags(const struct rb_iseq_struct *iseq, size_t pos);
8841
8842
8843extern const int ruby_api_version[];
8844typedef void (*rb_iseq_callback)(const rb_iseq_t *, void *);
8845extern const ID rb_iseq_shared_exc_local_tbl[];
8846static inline rb_snum_t
8847ISEQ_FLIP_CNT_INCREMENT(const rb_iseq_t *iseq)
8848{
8849 rb_snum_t cnt = ((iseq)->body)->variable.flip_count;
8850 ((iseq)->body)->variable.flip_count += 1;
8851 return cnt;
8852}
8853static inline VALUE *
8854ISEQ_ORIGINAL_ISEQ(const rb_iseq_t *iseq)
8855{
8856 return ((iseq)->body)->variable.original_iseq;
8857}
8858static inline void
8859ISEQ_ORIGINAL_ISEQ_CLEAR(const rb_iseq_t *iseq)
8860{
8861 void *ptr = ((iseq)->body)->variable.original_iseq;
8862 ((iseq)->body)->variable.original_iseq = ((void *)0);
8863 if (ptr) {
8864 ruby_xfree(ptr);
8865 }
8866}
8867static inline VALUE *
8868ISEQ_ORIGINAL_ISEQ_ALLOC(const rb_iseq_t *iseq, long size)
8869{
8870 return ((iseq)->body)->variable.original_iseq =
8871 ((VALUE *)ruby_xmalloc2((size), sizeof(VALUE)));
8872}
8873struct iseq_compile_data {
8874 const VALUE err_info;
8875 const VALUE catch_table_ary;
8876 struct iseq_label_data *start_label;
8877 struct iseq_label_data *end_label;
8878 struct iseq_label_data *redo_label;
8879 const rb_iseq_t *current_block;
8880 struct iseq_compile_data_ensure_node_stack *ensure_node_stack;
8881 struct {
8882 struct iseq_compile_data_storage *storage_head;
8883 struct iseq_compile_data_storage *storage_current;
8884 } node;
8885 struct {
8886 struct iseq_compile_data_storage *storage_head;
8887 struct iseq_compile_data_storage *storage_current;
8888 } insn;
8889 _Bool in_rescue;
8890 int loopval_popped;
8891 int last_line;
8892 int label_no;
8893 int node_level;
8894 int isolated_depth;
8895 unsigned int ci_index;
8896 unsigned int ic_index;
8897 const rb_compile_option_t *option;
8898 struct rb_id_table *ivar_cache_table;
8899 const struct rb_builtin_function *builtin_function_table;
8900 const NODE *root_node;
8901};
8902static inline struct iseq_compile_data *
8903ISEQ_COMPILE_DATA(const rb_iseq_t *iseq)
8904{
8905 if (iseq->flags & ((VALUE)RUBY_FL_USER6)) {
8906 return iseq->aux.compile_data;
8907 }
8908 else {
8909 return ((void *)0);
8910 }
8911}
8912static inline void
8913ISEQ_COMPILE_DATA_ALLOC(rb_iseq_t *iseq)
8914{
8915 iseq->aux.compile_data = (((struct iseq_compile_data *)ruby_xcalloc((1), sizeof(struct iseq_compile_data))));
8916 iseq->flags |= ((VALUE)RUBY_FL_USER6);
8917}
8918static inline void
8919ISEQ_COMPILE_DATA_CLEAR(rb_iseq_t *iseq)
8920{
8921 iseq->flags &= ~((VALUE)RUBY_FL_USER6);
8922 iseq->aux.compile_data = ((void *)0);
8923}
8924static inline rb_iseq_t *
8925iseq_imemo_alloc(void)
8926{
8927 return (rb_iseq_t *)rb_imemo_new(imemo_iseq, 0, 0, 0, 0);
8928}
8929VALUE rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
8930void rb_ibf_load_iseq_complete(rb_iseq_t *iseq);
8931const rb_iseq_t *rb_iseq_ibf_load(VALUE str);
8932const rb_iseq_t *rb_iseq_ibf_load_bytes(const char *cstr, size_t);
8933VALUE rb_iseq_ibf_load_extra_data(VALUE str);
8934void rb_iseq_init_trace(rb_iseq_t *iseq);
8935int 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);
8936int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval);
8937const rb_iseq_t *rb_iseq_load_iseq(VALUE fname);
8938unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
8939int rb_vm_insn_addr2opcode(const void *addr);
8940
8941
8942VALUE rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node);
8943VALUE rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc);
8944VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
8945void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
8946 VALUE locals, VALUE args,
8947 VALUE exception, VALUE body);
8948void rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *arena);
8949VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
8950VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
8951unsigned int rb_iseq_line_no(const rb_iseq_t *iseq, size_t pos);
8952int rb_iseq_node_id(const rb_iseq_t *iseq, size_t pos);
8953void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
8954void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
8955void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
8956struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
8957VALUE rb_iseqw_new(const rb_iseq_t *iseq);
8958const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
8959VALUE rb_iseq_absolute_path(const rb_iseq_t *iseq);
8960int rb_iseq_from_eval_p(const rb_iseq_t *iseq);
8961VALUE rb_iseq_type(const rb_iseq_t *iseq);
8962VALUE rb_iseq_label(const rb_iseq_t *iseq);
8963VALUE rb_iseq_base_label(const rb_iseq_t *iseq);
8964VALUE rb_iseq_first_lineno(const rb_iseq_t *iseq);
8965VALUE rb_iseq_method_name(const rb_iseq_t *iseq);
8966void rb_iseq_code_location(const rb_iseq_t *iseq, int *first_lineno, int *first_column, int *last_lineno, int *last_column);
8967void rb_iseq_remove_coverage_all(void);
8968const rb_iseq_t *rb_method_iseq(VALUE body);
8969const rb_iseq_t *rb_proc_get_iseq(VALUE proc, int *is_proc);
8970struct rb_compile_option_struct {
8971 unsigned int inline_const_cache: 1;
8972 unsigned int peephole_optimization: 1;
8973 unsigned int tailcall_optimization: 1;
8974 unsigned int specialized_instruction: 1;
8975 unsigned int operands_unification: 1;
8976 unsigned int instructions_unification: 1;
8977 unsigned int stack_caching: 1;
8978 unsigned int frozen_string_literal: 1;
8979 unsigned int debug_frozen_string_literal: 1;
8980 unsigned int coverage_enabled: 1;
8981 int debug_level;
8982};
8983struct iseq_insn_info_entry {
8984 int line_no;
8985 int node_id;
8986 rb_event_flag_t events;
8987};
8988enum rb_catch_type {
8989 CATCH_TYPE_RESCUE = __builtin_choose_expr( __builtin_constant_p(1), ((VALUE)(1)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(1)),
8990 CATCH_TYPE_ENSURE = __builtin_choose_expr( __builtin_constant_p(2), ((VALUE)(2)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(2)),
8991 CATCH_TYPE_RETRY = __builtin_choose_expr( __builtin_constant_p(3), ((VALUE)(3)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(3)),
8992 CATCH_TYPE_BREAK = __builtin_choose_expr( __builtin_constant_p(4), ((VALUE)(4)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(4)),
8993 CATCH_TYPE_REDO = __builtin_choose_expr( __builtin_constant_p(5), ((VALUE)(5)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(5)),
8994 CATCH_TYPE_NEXT = __builtin_choose_expr( __builtin_constant_p(6), ((VALUE)(6)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(6))
8995};
8996struct iseq_catch_table_entry {
8997 enum rb_catch_type type;
8998 rb_iseq_t *iseq;
8999 unsigned int start;
9000 unsigned int end;
9001 unsigned int cont;
9002 unsigned int sp;
9003};
9004struct iseq_catch_table { unsigned int size; struct iseq_catch_table_entry entries[]; } __attribute__((packed));
9005static inline int
9006iseq_catch_table_bytes(int n)
9007{
9008 enum {
9009 catch_table_entry_size = sizeof(struct iseq_catch_table_entry),
9010 catch_table_entries_max = (0x7fffffff - __builtin_offsetof (struct iseq_catch_table, entries)) / catch_table_entry_size
9011 };
9012 if (n > catch_table_entries_max) rb_fatal("too large iseq_catch_table - %d", n);
9013 return (int)(__builtin_offsetof (struct iseq_catch_table, entries) +
9014 n * catch_table_entry_size);
9015}
9016struct iseq_compile_data_storage {
9017 struct iseq_compile_data_storage *next;
9018 unsigned int pos;
9019 unsigned int size;
9020 char buff[];
9021};
9022enum defined_type {
9023 DEFINED_NOT_DEFINED,
9024 DEFINED_NIL = 1,
9025 DEFINED_IVAR,
9026 DEFINED_LVAR,
9027 DEFINED_GVAR,
9028 DEFINED_CVAR,
9029 DEFINED_CONST,
9030 DEFINED_METHOD,
9031 DEFINED_YIELD,
9032 DEFINED_ZSUPER,
9033 DEFINED_SELF,
9034 DEFINED_TRUE,
9035 DEFINED_FALSE,
9036 DEFINED_ASGN,
9037 DEFINED_EXPR,
9038 DEFINED_REF,
9039 DEFINED_FUNC,
9040 DEFINED_CONST_FROM
9041};
9042VALUE rb_iseq_defined_string(enum defined_type type);
9043VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
9044
9045
9046struct rb_thread_struct;
9047struct rb_fiber_struct;
9048struct rb_execution_context_struct;
9049void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
9050void ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(VALUE), VALUE (*rollback_func)(VALUE));
9051void rb_jit_cont_init(void);
9052void rb_jit_cont_each_iseq(rb_iseq_callback callback, void *data);
9053void rb_jit_cont_finish(void);
9054VALUE rb_fiber_inherit_storage(struct rb_execution_context_struct *ec, struct rb_fiber_struct *fiber);
9055VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
9056unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
9057struct rb_execution_context_struct * rb_fiberptr_get_ec(struct rb_fiber_struct *fiber);
9058
9059
9060enum ruby_coderange_type {
9061 RUBY_ENC_CODERANGE_UNKNOWN = 0,
9062 RUBY_ENC_CODERANGE_7BIT = ((int)RUBY_FL_USER8),
9063 RUBY_ENC_CODERANGE_VALID = ((int)RUBY_FL_USER9),
9064 RUBY_ENC_CODERANGE_BROKEN = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)),
9065 RUBY_ENC_CODERANGE_MASK = (RUBY_ENC_CODERANGE_7BIT|
9066 RUBY_ENC_CODERANGE_VALID|
9067 RUBY_ENC_CODERANGE_BROKEN)
9068};
9069__attribute__((__const__))
9070static inline int
9071rb_enc_coderange_clean_p(int cr)
9072{
9073 return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT;
9074}
9075__attribute__((__const__))
9076static inline _Bool
9077RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr)
9078{
9079 return rb_enc_coderange_clean_p(cr);
9080}
9081__attribute__((__pure__))
9082static inline enum ruby_coderange_type
9083RB_ENC_CODERANGE(VALUE obj)
9084{
9085 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9086 return ((enum ruby_coderange_type)ret);
9087}
9088__attribute__((__pure__))
9089static inline _Bool
9090RB_ENC_CODERANGE_ASCIIONLY(VALUE obj)
9091{
9092 return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT;
9093}
9094static inline void
9095RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr)
9096{
9097 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9098 RB_FL_SET_RAW(obj, cr);
9099}
9100static inline void
9101RB_ENC_CODERANGE_CLEAR(VALUE obj)
9102{
9103 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9104}
9105__attribute__((__const__))
9106static inline enum ruby_coderange_type
9107RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b)
9108{
9109 if (a == RUBY_ENC_CODERANGE_7BIT) {
9110 return b;
9111 }
9112 else if (a != RUBY_ENC_CODERANGE_VALID) {
9113 return RUBY_ENC_CODERANGE_UNKNOWN;
9114 }
9115 else if (b == RUBY_ENC_CODERANGE_7BIT) {
9116 return RUBY_ENC_CODERANGE_VALID;
9117 }
9118 else {
9119 return b;
9120 }
9121}
9122
9123
9124
9125
9126typedef unsigned char OnigUChar;
9127typedef unsigned int OnigCodePoint;
9128typedef unsigned int OnigCtype;
9129typedef size_t OnigDistance;
9130typedef ptrdiff_t OnigPosition;
9131typedef unsigned int OnigCaseFoldType;
9132extern OnigCaseFoldType OnigDefaultCaseFoldFlag;
9133typedef struct {
9134 int byte_len;
9135 int code_len;
9136 OnigCodePoint code[3];
9137} OnigCaseFoldCodeItem;
9138typedef struct {
9139 OnigCodePoint esc;
9140 OnigCodePoint anychar;
9141 OnigCodePoint anytime;
9142 OnigCodePoint zero_or_one_time;
9143 OnigCodePoint one_or_more_time;
9144 OnigCodePoint anychar_anytime;
9145} OnigMetaCharTableType;
9146typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
9147typedef struct OnigEncodingTypeST {
9148 int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
9149 const char* name;
9150 int max_enc_len;
9151 int min_enc_len;
9152 int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9153 OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9154 int (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
9155 int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
9156 int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
9157 int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
9158 int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
9159 int (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
9160 int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
9161 int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
9162 OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9163 int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9164 int (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
9165 int ruby_encoding_index;
9166 unsigned int flags;
9167} OnigEncodingType;
9168typedef const OnigEncodingType* OnigEncoding;
9169extern const OnigEncodingType OnigEncodingASCII;
9170extern
9171int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
9172extern
9173int onigenc_mbclen(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
9174extern
9175OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
9176extern
9177int onigenc_init(void);
9178extern
9179int onigenc_set_default_encoding(OnigEncoding enc);
9180extern
9181OnigEncoding onigenc_get_default_encoding(void);
9182extern
9183OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
9184extern
9185OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9186extern
9187OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9188extern
9189OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9190extern
9191int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
9192extern
9193int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
9194extern
9195int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);
9196typedef unsigned int OnigOptionType;
9197typedef struct {
9198 unsigned int op;
9199 unsigned int op2;
9200 unsigned int behavior;
9201 OnigOptionType options;
9202 OnigMetaCharTableType meta_char_table;
9203} OnigSyntaxType;
9204extern const OnigSyntaxType OnigSyntaxASIS;
9205extern const OnigSyntaxType OnigSyntaxPosixBasic;
9206extern const OnigSyntaxType OnigSyntaxPosixExtended;
9207extern const OnigSyntaxType OnigSyntaxEmacs;
9208extern const OnigSyntaxType OnigSyntaxGrep;
9209extern const OnigSyntaxType OnigSyntaxGnuRegex;
9210extern const OnigSyntaxType OnigSyntaxJava;
9211extern const OnigSyntaxType OnigSyntaxPerl58;
9212extern const OnigSyntaxType OnigSyntaxPerl58_NG;
9213extern const OnigSyntaxType OnigSyntaxPerl;
9214extern const OnigSyntaxType OnigSyntaxRuby;
9215extern const OnigSyntaxType OnigSyntaxPython;
9216extern const OnigSyntaxType* OnigDefaultSyntax;
9217struct re_registers {
9218 int allocated;
9219 int num_regs;
9220 OnigPosition* beg;
9221 OnigPosition* end;
9222};
9223typedef struct re_registers OnigRegion;
9224typedef struct {
9225 OnigEncoding enc;
9226 OnigUChar* par;
9227 OnigUChar* par_end;
9228} OnigErrorInfo;
9229typedef struct {
9230 int lower;
9231 int upper;
9232 long base_num;
9233 long inner_num;
9234} OnigRepeatRange;
9235typedef void (*OnigWarnFunc)(const char* s);
9236extern void onig_null_warn(const char* s);
9237typedef struct re_pattern_buffer {
9238 unsigned char* p;
9239 unsigned int used;
9240 unsigned int alloc;
9241 int num_mem;
9242 int num_repeat;
9243 int num_null_check;
9244 int num_comb_exp_check;
9245 int num_call;
9246 unsigned int capture_history;
9247 unsigned int bt_mem_start;
9248 unsigned int bt_mem_end;
9249 int stack_pop_level;
9250 int repeat_range_alloc;
9251 OnigOptionType options;
9252 OnigRepeatRange* repeat_range;
9253 OnigEncoding enc;
9254 const OnigSyntaxType* syntax;
9255 void* name_table;
9256 OnigCaseFoldType case_fold_flag;
9257 int optimize;
9258 int threshold_len;
9259 int anchor;
9260 OnigDistance anchor_dmin;
9261 OnigDistance anchor_dmax;
9262 int sub_anchor;
9263 unsigned char *exact;
9264 unsigned char *exact_end;
9265 unsigned char map[256];
9266 int *int_map;
9267 int *int_map_backward;
9268 OnigDistance dmin;
9269 OnigDistance dmax;
9270 uint64_t timelimit;
9271 struct re_pattern_buffer* chain;
9272} OnigRegexType;
9273typedef OnigRegexType* OnigRegex;
9274typedef OnigRegexType regex_t;
9275typedef struct {
9276 int num_of_elements;
9277 OnigEncoding pattern_enc;
9278 OnigEncoding target_enc;
9279 const OnigSyntaxType* syntax;
9280 OnigOptionType option;
9281 OnigCaseFoldType case_fold_flag;
9282} OnigCompileInfo;
9283extern
9284int onig_initialize(OnigEncoding encodings[], int n);
9285extern
9286int onig_init(void);
9287extern
9288int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
9289extern
9290void onig_set_warn_func(OnigWarnFunc f);
9291extern
9292void onig_set_verb_warn_func(OnigWarnFunc f);
9293extern
9294int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
9295extern
9296int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
9297extern
9298int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
9299extern
9300int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
9301extern
9302void onig_free(OnigRegex);
9303extern
9304void onig_free_body(OnigRegex);
9305extern
9306OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
9307extern
9308OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
9309extern
9310OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
9311extern
9312OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
9313extern
9314int onig_check_linear_time(OnigRegex reg);
9315extern
9316OnigRegion* onig_region_new(void);
9317extern
9318void onig_region_init(OnigRegion* region);
9319extern
9320void onig_region_free(OnigRegion* region, int free_self);
9321extern
9322void onig_region_copy(OnigRegion* to, const OnigRegion* from);
9323extern
9324void onig_region_clear(OnigRegion* region);
9325extern
9326int onig_region_resize(OnigRegion* region, int n);
9327extern
9328int onig_region_set(OnigRegion* region, int at, int beg, int end);
9329extern
9330int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
9331extern
9332int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
9333extern
9334int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
9335extern
9336int onig_number_of_names(const OnigRegexType *reg);
9337extern
9338int onig_number_of_captures(const OnigRegexType *reg);
9339extern
9340int onig_number_of_capture_histories(const OnigRegexType *reg);
9341extern
9342int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
9343extern
9344int onig_noname_group_capture_is_active(const OnigRegexType *reg);
9345extern
9346OnigEncoding onig_get_encoding(const OnigRegexType *reg);
9347extern
9348OnigOptionType onig_get_options(const OnigRegexType *reg);
9349extern
9350OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
9351extern
9352const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
9353extern
9354int onig_set_default_syntax(const OnigSyntaxType* syntax);
9355extern
9356void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
9357extern
9358unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
9359extern
9360unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
9361extern
9362unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
9363extern
9364OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
9365extern
9366void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
9367extern
9368void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
9369extern
9370void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
9371extern
9372void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
9373extern
9374int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
9375extern
9376void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
9377extern
9378OnigCaseFoldType onig_get_default_case_fold_flag(void);
9379extern
9380int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
9381extern
9382unsigned int onig_get_match_stack_limit_size(void);
9383extern
9384int onig_set_match_stack_limit_size(unsigned int size);
9385extern
9386unsigned int onig_get_parse_depth_limit(void);
9387extern
9388int onig_set_parse_depth_limit(unsigned int depth);
9389extern
9390int onig_end(void);
9391extern
9392const char* onig_version(void);
9393extern
9394const char* onig_copyright(void);
9395
9396
9397
9398
9399extern VALUE rb_cEncoding;
9400enum ruby_encoding_consts {
9401 RUBY_ENCODING_INLINE_MAX = 127,
9402 RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10),
9403 RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<<RUBY_ENCODING_SHIFT
9404 ),
9405 RUBY_ENCODING_MAXNAMELEN = 42
9406};
9407static inline void
9408RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
9409{
9410 VALUE f = encindex;
9411 f <<= RUBY_ENCODING_SHIFT;
9412 RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
9413 RB_FL_SET_RAW(obj, f);
9414}
9415static inline int
9416RB_ENCODING_GET_INLINED(VALUE obj)
9417{
9418 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT;
9419 return ((int)ret);
9420}
9421typedef const OnigEncodingType rb_encoding;
9422
9423int rb_char_to_option_kcode(int c, int *option, int *kcode);
9424int rb_enc_replicate(const char *name, rb_encoding *src);
9425int rb_define_dummy_encoding(const char *name);
9426__attribute__((__pure__))
9427int rb_enc_dummy_p(rb_encoding *enc);
9428__attribute__((__pure__))
9429int rb_enc_to_index(rb_encoding *enc);
9430int rb_enc_get_index(VALUE obj);
9431static inline int
9432RB_ENCODING_GET(VALUE obj)
9433{
9434 int encindex = RB_ENCODING_GET_INLINED(obj);
9435 if (encindex == RUBY_ENCODING_INLINE_MAX) {
9436 return rb_enc_get_index(obj);
9437 }
9438 else {
9439 return encindex;
9440 }
9441}
9442void rb_enc_set_index(VALUE obj, int encindex);
9443static inline void
9444RB_ENCODING_SET(VALUE obj, int encindex)
9445{
9446 rb_enc_set_index(obj, encindex);
9447}
9448static inline void
9449RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr)
9450{
9451 RB_ENCODING_SET(obj, encindex);
9452 RB_ENC_CODERANGE_SET(obj, cr);
9453}
9454__attribute__((__pure__))
9455int rb_enc_capable(VALUE obj);
9456int rb_enc_find_index(const char *name);
9457int rb_enc_alias(const char *alias, const char *orig);
9458int rb_to_encoding_index(VALUE obj);
9459rb_encoding *rb_to_encoding(VALUE obj);
9460rb_encoding *rb_find_encoding(VALUE obj);
9461rb_encoding *rb_enc_get(VALUE obj);
9462rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2);
9463rb_encoding *rb_enc_check(VALUE str1,VALUE str2);
9464VALUE rb_enc_associate_index(VALUE obj, int encindex);
9465VALUE rb_enc_associate(VALUE obj, rb_encoding *enc);
9466void rb_enc_copy(VALUE dst, VALUE src);
9467rb_encoding *rb_enc_from_index(int idx);
9468rb_encoding *rb_enc_find(const char *name);
9469static inline const char *
9470rb_enc_name(rb_encoding *enc)
9471{
9472 return enc->name;
9473}
9474static inline int
9475rb_enc_mbminlen(rb_encoding *enc)
9476{
9477 return enc->min_enc_len;
9478}
9479static inline int
9480rb_enc_mbmaxlen(rb_encoding *enc)
9481{
9482 return enc->max_enc_len;
9483}
9484int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);
9485int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc);
9486int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);
9487int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);
9488unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc);
9489static inline unsigned int
9490rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc)
9491{
9492 return rb_enc_codepoint_len(p, e, 0, enc);
9493}
9494static inline OnigCodePoint
9495rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc)
9496{
9497 const OnigUChar *up = ((const OnigUChar *)p);
9498 const OnigUChar *ue = ((const OnigUChar *)e);
9499 return (enc)->mbc_to_code((up),(ue),enc);
9500}
9501int rb_enc_codelen(int code, rb_encoding *enc);
9502static inline int
9503rb_enc_code_to_mbclen(int c, rb_encoding *enc)
9504{
9505 OnigCodePoint uc = ((OnigCodePoint)c);
9506 return (enc)->code_to_mbclen(uc,enc);
9507}
9508static inline int
9509rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc)
9510{
9511 OnigCodePoint uc = ((OnigCodePoint)c);
9512 OnigUChar *ubuf = ((OnigUChar *)buf);
9513 return (enc)->code_to_mbc(uc,ubuf,enc);
9514}
9515static inline char *
9516rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc)
9517{
9518 const OnigUChar *us = ((const OnigUChar *)s);
9519 const OnigUChar *up = ((const OnigUChar *)p);
9520 const OnigUChar *ue = ((const OnigUChar *)e);
9521 OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue);
9522 return ((char *)ur);
9523}
9524static inline char *
9525rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9526{
9527 const OnigUChar *us = ((const OnigUChar *)s);
9528 const OnigUChar *up = ((const OnigUChar *)p);
9529 const OnigUChar *ue = ((const OnigUChar *)e);
9530 OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue);
9531 return ((char *)ur);
9532}
9533static inline char *
9534rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9535{
9536 const OnigUChar *us = ((const OnigUChar *)s);
9537 const OnigUChar *up = ((const OnigUChar *)p);
9538 const OnigUChar *ue = ((const OnigUChar *)e);
9539 OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue);
9540 return ((char *)ur);
9541}
9542static inline char *
9543rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc)
9544{
9545 const OnigUChar *us = ((const OnigUChar *)s);
9546 const OnigUChar *up = ((const OnigUChar *)p);
9547 const OnigUChar *ue = ((const OnigUChar *)e);
9548 const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n);
9549 return ((char *)ur);
9550}
9551static inline int
9552rb_enc_asciicompat_inline(rb_encoding *enc)
9553{
9554 return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc);
9555}
9556static inline _Bool
9557rb_enc_asciicompat(rb_encoding *enc)
9558{
9559 if (rb_enc_mbminlen(enc) != 1) {
9560 return 0;
9561 }
9562 else if (rb_enc_dummy_p(enc)) {
9563 return 0;
9564 }
9565 else {
9566 return 1;
9567 }
9568}
9569static inline _Bool
9570rb_enc_str_asciicompat_p(VALUE str)
9571{
9572 rb_encoding *enc = rb_enc_get(str);
9573 return rb_enc_asciicompat(enc);
9574}
9575VALUE rb_enc_from_encoding(rb_encoding *enc);
9576__attribute__((__pure__))
9577int rb_enc_unicode_p(rb_encoding *enc);
9578__attribute__((__returns_nonnull__))
9579rb_encoding *rb_ascii8bit_encoding(void);
9580__attribute__((__returns_nonnull__))
9581rb_encoding *rb_utf8_encoding(void);
9582__attribute__((__returns_nonnull__))
9583rb_encoding *rb_usascii_encoding(void);
9584rb_encoding *rb_locale_encoding(void);
9585rb_encoding *rb_filesystem_encoding(void);
9586rb_encoding *rb_default_external_encoding(void);
9587rb_encoding *rb_default_internal_encoding(void);
9588__attribute__((__const__))
9589int rb_ascii8bit_encindex(void);
9590static inline _Bool
9591RB_ENCODING_IS_ASCII8BIT(VALUE obj)
9592{
9593 return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex();
9594}
9595__attribute__((__const__))
9596int rb_utf8_encindex(void);
9597__attribute__((__const__))
9598int rb_usascii_encindex(void);
9599int rb_locale_encindex(void);
9600int rb_filesystem_encindex(void);
9601VALUE rb_enc_default_external(void);
9602VALUE rb_enc_default_internal(void);
9603void rb_enc_set_default_external(VALUE encoding);
9604void rb_enc_set_default_internal(VALUE encoding);
9605VALUE rb_locale_charmap(VALUE klass);
9606
9607
9608
9609
9610static inline _Bool
9611rb_enc_is_newline(const char *p, const char *e, rb_encoding *enc)
9612{
9613 OnigUChar *up = ((OnigUChar *)p);
9614 OnigUChar *ue = ((OnigUChar *)e);
9615 return (enc)->is_mbc_newline((up),(ue),enc);
9616}
9617static inline _Bool
9618rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc)
9619{
9620 return (enc)->is_code_ctype(c,t,enc);
9621}
9622static inline _Bool
9623rb_enc_isascii(OnigCodePoint c, rb_encoding *enc)
9624{
9625 return ((c) < 128);
9626}
9627static inline _Bool
9628rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc)
9629{
9630 return (enc)->is_code_ctype(c,1,enc);
9631}
9632static inline _Bool
9633rb_enc_islower(OnigCodePoint c, rb_encoding *enc)
9634{
9635 return (enc)->is_code_ctype(c,6,enc);
9636}
9637static inline _Bool
9638rb_enc_isupper(OnigCodePoint c, rb_encoding *enc)
9639{
9640 return (enc)->is_code_ctype(c,10,enc);
9641}
9642static inline _Bool
9643rb_enc_iscntrl(OnigCodePoint c, rb_encoding *enc)
9644{
9645 return (enc)->is_code_ctype(c,3,enc);
9646}
9647static inline _Bool
9648rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc)
9649{
9650 return (enc)->is_code_ctype(c,8,enc);
9651}
9652static inline _Bool
9653rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc)
9654{
9655 return (enc)->is_code_ctype(c,13,enc);
9656}
9657static inline _Bool
9658rb_enc_isprint(OnigCodePoint c, rb_encoding *enc)
9659{
9660 return (enc)->is_code_ctype(c,7,enc);
9661}
9662static inline _Bool
9663rb_enc_isspace(OnigCodePoint c, rb_encoding *enc)
9664{
9665 return (enc)->is_code_ctype(c,9,enc);
9666}
9667static inline _Bool
9668rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc)
9669{
9670 return (enc)->is_code_ctype(c,4,enc);
9671}
9672__attribute__((__const__))
9673int rb_enc_toupper(int c, rb_encoding *enc);
9674__attribute__((__const__))
9675int rb_enc_tolower(int c, rb_encoding *enc);
9676
9677
9678
9679
9680__attribute__((__nonnull__ ()))
9681char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc);
9682__attribute__((__nonnull__ ()))
9683char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc);
9684__attribute__((__nonnull__ ()))
9685char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc);
9686__attribute__((__nonnull__ ()))
9687char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc);
9688__attribute__((__nonnull__ (1, 4)))
9689const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc);
9690__attribute__((__nonnull__ (1, 3)))
9691const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc);
9692
9693
9694
9695
9696VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts);
9697
9698
9699
9700
9701__attribute__((__nonnull__ (2)))
9702__attribute__((__format__(__printf__, 2, 3)))
9703VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...);
9704__attribute__((__nonnull__ (2)))
9705__attribute__((__format__(__printf__, 2, 0)))
9706VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap);
9707__attribute__((__noreturn__))
9708__attribute__((__nonnull__ (3)))
9709__attribute__((__format__(__printf__, 3, 4)))
9710void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...);
9711
9712
9713
9714
9715VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc);
9716__attribute__((__nonnull__ (1)))
9717VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc);
9718VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc);
9719VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc);
9720__attribute__((__nonnull__ (1)))
9721VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc);
9722long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc);
9723char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc);
9724VALUE rb_obj_encoding(VALUE obj);
9725VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);
9726VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc);
9727VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc);
9728VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc);
9729VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
9730VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
9731int rb_enc_str_coderange(VALUE str);
9732long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr);
9733int rb_enc_str_asciionly_p(VALUE str);
9734__attribute__((__nonnull__ ()))
9735long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc);
9736__attribute__((__nonnull__ ()))
9737static inline VALUE
9738rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc)
9739{
9740 long len = rbimpl_strlen(str);
9741 return rb_enc_str_new_static(str, len, enc);
9742}
9743
9744
9745
9746
9747ID rb_intern3(const char *name, long len, rb_encoding *enc);
9748__attribute__((__nonnull__ ()))
9749int rb_enc_symname_p(const char *str, rb_encoding *enc);
9750int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc);
9751ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc);
9752VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc);
9753
9754
9755
9756
9757typedef enum {
9758 econv_invalid_byte_sequence,
9759 econv_undefined_conversion,
9760 econv_destination_buffer_full,
9761 econv_source_buffer_empty,
9762 econv_finished,
9763 econv_after_output,
9764 econv_incomplete_input
9765} rb_econv_result_t;
9766typedef struct rb_econv_t rb_econv_t;
9767VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);
9768int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);
9769int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags);
9770int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);
9771rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);
9772rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);
9773rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
9774 const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
9775 unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
9776 int flags);
9777void rb_econv_close(rb_econv_t *ec);
9778int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);
9779int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);
9780int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);
9781VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);
9782int rb_econv_insert_output(rb_econv_t *ec,
9783 const unsigned char *str, size_t len, const char *str_encoding);
9784const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);
9785void rb_econv_check_error(rb_econv_t *ec);
9786VALUE rb_econv_make_exception(rb_econv_t *ec);
9787int rb_econv_putbackable(rb_econv_t *ec);
9788void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);
9789const char *rb_econv_asciicompat_encoding(const char *encname);
9790VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);
9791VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);
9792VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);
9793VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);
9794VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags);
9795void rb_econv_binmode(rb_econv_t *ec);
9796enum ruby_econv_flag_type {
9797 RUBY_ECONV_ERROR_HANDLER_MASK = 0x000000ff,
9798 RUBY_ECONV_INVALID_MASK = 0x0000000f,
9799 RUBY_ECONV_INVALID_REPLACE = 0x00000002,
9800 RUBY_ECONV_UNDEF_MASK = 0x000000f0,
9801 RUBY_ECONV_UNDEF_REPLACE = 0x00000020,
9802 RUBY_ECONV_UNDEF_HEX_CHARREF = 0x00000030,
9803 RUBY_ECONV_DECORATOR_MASK = 0x0001ff00,
9804 RUBY_ECONV_NEWLINE_DECORATOR_MASK = 0x00007f00,
9805 RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK = 0x00000f00,
9806 RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK = 0x00007000,
9807 RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR = 0x00000100,
9808 RUBY_ECONV_CRLF_NEWLINE_DECORATOR = 0x00001000,
9809 RUBY_ECONV_CR_NEWLINE_DECORATOR = 0x00002000,
9810 RUBY_ECONV_LF_NEWLINE_DECORATOR = 0x00004000,
9811 RUBY_ECONV_XML_TEXT_DECORATOR = 0x00008000,
9812 RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR = 0x00010000,
9813 RUBY_ECONV_STATEFUL_DECORATOR_MASK = 0x00f00000,
9814 RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR = 0x00100000,
9815 RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR =
9816 0,
9817 RUBY_ECONV_PARTIAL_INPUT = 0x00020000,
9818 RUBY_ECONV_AFTER_OUTPUT = 0x00040000,
9819 RUBY_ECONV_FLAGS_PLACEHOLDER
9820};
9821
9822
9823VALUE rb_fstring(VALUE);
9824VALUE rb_fstring_cstr(const char *str);
9825VALUE rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc);
9826int rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p);
9827int rb_str_symname_p(VALUE);
9828VALUE rb_str_quote_unprintable(VALUE);
9829char *rb_str_fill_terminator(VALUE str, const int termlen);
9830void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen);
9831VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
9832VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
9833VALUE rb_external_str_with_enc(VALUE str, rb_encoding *eenc);
9834VALUE rb_str_cat_conv_enc_opts(VALUE newstr, long ofs, const char *ptr, long len,
9835 rb_encoding *from, int ecflags, VALUE ecopts);
9836VALUE rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl);
9837VALUE rb_str_escape(VALUE str);
9838size_t rb_str_memsize(VALUE);
9839char *rb_str_to_cstr(VALUE str);
9840const char *ruby_escaped_char(int c);
9841void rb_str_make_independent(VALUE str);
9842int rb_enc_str_coderange_scan(VALUE str, rb_encoding *enc);
9843int rb_ascii8bit_appendable_encoding_index(rb_encoding *enc, unsigned int code);
9844VALUE rb_str_include(VALUE str, VALUE arg);
9845static inline _Bool STR_EMBED_P(VALUE str);
9846static inline _Bool STR_SHARED_P(VALUE str);
9847static inline VALUE QUOTE(VALUE v);
9848static inline VALUE QUOTE_ID(ID v);
9849static inline _Bool is_ascii_string(VALUE str);
9850static inline _Bool is_broken_string(VALUE str);
9851static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2);
9852
9853
9854VALUE rb_str_tmp_frozen_acquire(VALUE str);
9855void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
9856VALUE rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encoding *enc);
9857VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE);
9858VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE);
9859void rb_str_make_embedded(VALUE);
9860size_t rb_str_size_as_embedded(VALUE);
9861_Bool rb_str_reembeddable_p(VALUE);
9862void rb_str_update_shared_ary(VALUE str, VALUE old_root, VALUE new_root);
9863
9864
9865
9866
9867VALUE rb_fstring_new(const char *ptr, long len);
9868VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
9869VALUE rb_str_opt_plus(VALUE x, VALUE y);
9870VALUE rb_str_concat_literals(size_t num, const VALUE *strary);
9871VALUE rb_str_eql(VALUE str1, VALUE str2);
9872VALUE rb_id_quote_unprintable(ID);
9873VALUE rb_sym_proc_call(ID mid, int argc, const VALUE *argv, int kw_splat, VALUE passed_proc);
9874struct rb_execution_context_struct;
9875VALUE rb_ec_str_resurrect(struct rb_execution_context_struct *ec, VALUE str);
9876
9877
9878static inline VALUE
9879QUOTE(VALUE v)
9880{
9881 return rb_str_quote_unprintable(v);
9882}
9883static inline VALUE
9884QUOTE_ID(ID i)
9885{
9886 return rb_id_quote_unprintable(i);
9887}
9888static inline _Bool
9889STR_EMBED_P(VALUE str)
9890{
9891 return ! RB_FL_TEST_RAW(str, ((VALUE)RUBY_FL_USER1));
9892}
9893static inline _Bool
9894STR_SHARED_P(VALUE str)
9895{
9896 return RB_FL_ALL_RAW(str, ((VALUE)RUBY_FL_USER1) | ((VALUE)RUBY_FL_USER2));
9897}
9898static inline _Bool
9899is_ascii_string(VALUE str)
9900{
9901 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_7BIT;
9902}
9903static inline _Bool
9904is_broken_string(VALUE str)
9905{
9906 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_BROKEN;
9907}
9908static inline VALUE
9909rb_str_eql_internal(const VALUE str1, const VALUE str2)
9910{
9911 const long len = RSTRING_LEN(str1);
9912 const char *ptr1, *ptr2;
9913 if (len != RSTRING_LEN(str2)) return ((VALUE)RUBY_Qfalse);
9914 if (!rb_str_comparable(str1, str2)) return ((VALUE)RUBY_Qfalse);
9915 if ((ptr1 = RSTRING_PTR(str1)) == (ptr2 = RSTRING_PTR(str2)))
9916 return ((VALUE)RUBY_Qtrue);
9917 if (memcmp(ptr1, ptr2, len) == 0)
9918 return ((VALUE)RUBY_Qtrue);
9919 return ((VALUE)RUBY_Qfalse);
9920}
9921extern long rb_backtrace_length_limit;
9922extern VALUE rb_eEAGAIN;
9923extern VALUE rb_eEWOULDBLOCK;
9924extern VALUE rb_eEINPROGRESS;
9925__attribute__((__format__(__printf__, 3, 0)))
9926void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
9927__attribute__((__noreturn__)) void rb_async_bug_errno(const char *,int);
9928const char *rb_builtin_type_name(int t);
9929const char *rb_builtin_class_name(VALUE x);
9930__attribute__((__format__(__printf__, (1), (3)))) void rb_warn_deprecated(const char *fmt, const char *suggest, ...);
9931__attribute__((__format__(__printf__, (2), (4)))) void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...);
9932__attribute__((__format__(__printf__, 6, 0)))
9933VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
9934__attribute__((__format__(__printf__, (2), (3)))) void rb_enc_warn(rb_encoding *enc, const char *fmt, ...);
9935__attribute__((__format__(__printf__, (2), (3)))) void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...);
9936__attribute__((__format__(__printf__, (3), (4)))) void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...);
9937rb_warning_category_t rb_warning_category_from_name(VALUE category);
9938_Bool rb_warning_category_enabled_p(rb_warning_category_t category);
9939VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
9940VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int priv);
9941VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
9942__attribute__((__format__(__printf__, (1), (2)))) VALUE rb_warning_string(const char *fmt, ...);
9943__attribute__((__format__(__printf__, 2, 0)))
9944__attribute__((__noreturn__)) void rb_vraise(VALUE, const char *, va_list);
9945__attribute__((__noreturn__)) static inline void rb_raise_cstr(VALUE etype, const char *mesg);
9946__attribute__((__noreturn__)) static inline void rb_raise_cstr_i(VALUE etype, VALUE mesg);
9947__attribute__((__noreturn__)) static inline void rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name);
9948__attribute__((__noreturn__)) static inline void rb_name_err_raise(const char *mesg, VALUE recv, VALUE name);
9949__attribute__((__noreturn__)) static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name);
9950static inline void Check_Type(VALUE v, enum ruby_value_type t);
9951static inline _Bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
9952
9953
9954int rb_bug_reporter_add(void (*func)(FILE *, void *), void *data);
9955__attribute__((__noreturn__)) void rb_sys_fail_path_in(const char *func_name, VALUE path);
9956__attribute__((__noreturn__)) void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path);
9957VALUE rb_syserr_new_path_in(const char *func_name, int n, VALUE path);
9958
9959
9960static inline void
9961rb_raise_cstr_i(VALUE etype, VALUE mesg)
9962{
9963 VALUE exc = rb_exc_new_str(etype, mesg);
9964 rb_exc_raise(exc);
9965}
9966static inline void
9967rb_raise_cstr(VALUE etype, const char *mesg)
9968{
9969 VALUE str = ((__builtin_constant_p(mesg) ? rbimpl_str_new_cstr : rb_str_new_cstr) (mesg));
9970 rb_raise_cstr_i(etype, str);
9971}
9972static inline void
9973rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name)
9974{
9975 VALUE exc = rb_name_err_new(mesg, recv, name);
9976 rb_exc_raise(exc);
9977}
9978static inline void
9979rb_name_err_raise(const char *mesg, VALUE recv, VALUE name)
9980{
9981 VALUE str = (__builtin_constant_p(mesg) ? rb_fstring_new((mesg), (long)strlen(mesg)) : (rb_fstring_cstr)(mesg));
9982 rb_name_err_raise_str(str, recv, name);
9983}
9984static inline void
9985rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
9986{
9987 VALUE exc = rb_key_err_new(mesg, recv, name);
9988 rb_exc_raise(exc);
9989}
9990static inline _Bool
9991rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type)
9992{
9993 return RB_TYPE_P(obj, RUBY_T_DATA) && RTYPEDDATA_P(obj) && (RTYPEDDATA_TYPE(obj) == data_type);
9994}
9995extern ID ruby_static_id_signo;
9996extern ID ruby_static_id_status;
9997VALUE rb_refinement_module_get_refined_class(VALUE module);
9998void rb_class_modify_check(VALUE);
9999__attribute__((__noreturn__)) VALUE rb_f_raise(int argc, VALUE *argv);
10000VALUE rb_get_backtrace(VALUE info);
10001void rb_call_end_proc(VALUE data);
10002void rb_mark_end_proc(void);
10003void Init_class_hierarchy(void);
10004void Init_enc(void);
10005void Init_ext(void);
10006void Init_File(void);
10007void Init_heap(void);
10008int Init_enc_set_filesystem_encoding(void);
10009void Init_newline(void);
10010void Init_BareVM(void);
10011void Init_vm_objects(void);
10012void Init_vm_backtrace(void);
10013void Init_vm_eval(void);static inline
10014void Init_vm_stack_canary(void);
10015void Init_eval_method(void);
10016void rb_call_inits(void);
10017VALUE rb_class_search_ancestor(VALUE klass, VALUE super);
10018__attribute__((__noreturn__)) void rb_undefined_alloc(VALUE klass);
10019double rb_num_to_dbl(VALUE val);
10020VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound);
10021VALUE rb_immutable_obj_clone(int, VALUE *, VALUE);
10022VALUE rb_check_convert_type_with_id(VALUE,int,const char*,ID);
10023int rb_bool_expected(VALUE, const char *, int raise);
10024static inline void RBASIC_CLEAR_CLASS(VALUE obj);
10025static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass);
10026static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass);
10027
10028
10029int rb_opts_exception_p(VALUE opts, int default_value);
10030
10031
10032
10033
10034__attribute__((__const__)) VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
10035__attribute__((__const__)) VALUE rb_obj_not(VALUE obj);
10036VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
10037void rb_obj_copy_ivar(VALUE dest, VALUE obj);
10038VALUE rb_false(VALUE obj);
10039VALUE rb_convert_type_with_id(VALUE v, int t, const char* nam, ID mid);
10040VALUE rb_obj_size(VALUE self, VALUE args, VALUE obj);
10041VALUE rb_get_freeze_opt(int argc, VALUE *argv);
10042
10043
10044static inline void
10045RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass)
10046{
10047 const VALUE *ptr = &((struct RBasic *)(obj))->klass;
10048 *(VALUE *)ptr = klass;
10049}
10050static inline void
10051RBASIC_CLEAR_CLASS(VALUE obj)
10052{
10053 RBASIC_SET_CLASS_RAW(obj, 0);
10054}
10055static inline void
10056RBASIC_SET_CLASS(VALUE obj, VALUE klass)
10057{
10058 VALUE oldv = RBASIC_CLASS(obj);
10059 RBASIC_SET_CLASS_RAW(obj, klass);
10060 (rb_obj_written((VALUE)(obj), (VALUE)(oldv), (VALUE)(klass), "../ruby-3.2.2/internal/object.h", 59));
10061}
10062struct rb_iseq_struct;
10063VALUE rb_parser_set_yydebug(VALUE, VALUE);
10064void *rb_parser_load_file(VALUE parser, VALUE name);
10065void rb_parser_keep_script_lines(VALUE vparser);
10066void rb_parser_error_tolerant(VALUE vparser);
10067void rb_parser_keep_tokens(VALUE vparser);
10068
10069
10070VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
10071
10072
10073struct rb_block;
10074struct rb_iseq_struct;
10075VALUE rb_proc_location(VALUE self);
10076st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
10077int rb_block_pair_yield_optimizable(void);
10078int rb_block_arity(void);
10079int rb_block_min_max_arity(int *max);
10080VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additional_info);
10081VALUE rb_callable_receiver(VALUE);
10082
10083
10084VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
10085VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
10086VALUE rb_iseq_location(const struct rb_iseq_struct *iseq);
10087VALUE rb_sym_to_proc(VALUE sym);
10088
10089
10090VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
10091VALUE rb_reg_check_preprocess(VALUE);
10092long rb_reg_search0(VALUE, VALUE, long, int, int);
10093VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
10094_Bool rb_reg_start_with_p(VALUE re, VALUE str);
10095VALUE rb_reg_hash(VALUE re);
10096VALUE rb_reg_equal(VALUE re1, VALUE re2);
10097void rb_backref_set_string(VALUE string, long pos, long len);
10098void rb_match_unbusy(VALUE);
10099int rb_match_count(VALUE match);
10100int rb_match_nth_defined(int nth, VALUE match);
10101
10102
10103VALUE rb_reg_new_ary(VALUE ary, int options);
10104
10105
10106VALUE rb_to_symbol_type(VALUE obj);
10107VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc);
10108VALUE rb_sym_intern_ascii(const char *ptr, long len);
10109VALUE rb_sym_intern_ascii_cstr(const char *ptr);
10110int rb_is_const_name(VALUE name);
10111int rb_is_class_name(VALUE name);
10112int rb_is_instance_name(VALUE name);
10113int rb_is_local_name(VALUE name);
10114__attribute__((__pure__)) int rb_is_const_sym(VALUE sym);
10115__attribute__((__pure__)) int rb_is_attrset_sym(VALUE sym);
10116ID rb_make_internal_id(void);
10117ID rb_make_temporary_id(size_t n);
10118void rb_gc_free_dsymbol(VALUE);
10119int rb_static_id_valid_p(ID id);
10120struct rb_thread_struct;
10121VALUE rb_obj_is_mutex(VALUE obj);
10122VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg);
10123void rb_thread_execute_interrupts(VALUE th);
10124VALUE rb_get_coverages(void);
10125int rb_get_coverage_mode(void);
10126VALUE rb_default_coverage(int);
10127VALUE rb_thread_shield_new(void);
10128_Bool rb_thread_shield_owned(VALUE self);
10129VALUE rb_thread_shield_wait(VALUE self);
10130VALUE rb_thread_shield_release(VALUE self);
10131VALUE rb_thread_shield_destroy(VALUE self);
10132int rb_thread_to_be_killed(VALUE thread);
10133void rb_mutex_allow_trap(VALUE self, int val);
10134VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data);
10135VALUE rb_mutex_owned_p(VALUE self);
10136VALUE rb_exec_recursive_outer_mid(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h, ID mid);
10137int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout);
10138
10139
10140VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
10141int ruby_thread_has_gvl_p(void);
10142
10143
10144
10145
10146int rb_threadptr_execute_interrupts(struct rb_thread_struct *th, int blocking_timing);
10147
10148
10149struct rb_id_table;
10150enum rb_id_table_iterator_result {
10151 ID_TABLE_CONTINUE = ST_CONTINUE,
10152 ID_TABLE_STOP = ST_STOP,
10153 ID_TABLE_DELETE = ST_DELETE,
10154 ID_TABLE_REPLACE = ST_REPLACE,
10155 ID_TABLE_ITERATOR_RESULT_END
10156};
10157struct rb_id_table *rb_id_table_create(size_t size);
10158void rb_id_table_free(struct rb_id_table *tbl);
10159void rb_id_table_clear(struct rb_id_table *tbl);
10160size_t rb_id_table_memsize(const struct rb_id_table *tbl);
10161int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val);
10162int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp);
10163int rb_id_table_delete(struct rb_id_table *tbl, ID id);
10164typedef enum rb_id_table_iterator_result rb_id_table_update_value_callback_func_t(VALUE *val, void *data, int existing);
10165typedef enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data);
10166typedef enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data);
10167void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data);
10168void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data);
10169void 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);
10170
10171
10172size_t rb_id_table_size(const struct rb_id_table *tbl);
10173
10174
10175typedef enum {
10176 CONST_DEPRECATED = 0x100,
10177 CONST_VISIBILITY_MASK = 0xff,
10178 CONST_PUBLIC = 0x00,
10179 CONST_PRIVATE,
10180 CONST_VISIBILITY_MAX
10181} rb_const_flag_t;
10182typedef struct rb_const_entry_struct {
10183 rb_const_flag_t flag;
10184 int line;
10185 VALUE value;
10186 VALUE file;
10187} rb_const_entry_t;
10188VALUE rb_mod_private_constant(int argc, const VALUE *argv, VALUE obj);
10189VALUE rb_mod_public_constant(int argc, const VALUE *argv, VALUE obj);
10190VALUE rb_mod_deprecate_constant(int argc, const VALUE *argv, VALUE obj);
10191void rb_free_const_table(struct rb_id_table *tbl);
10192VALUE rb_const_source_location(VALUE, ID);
10193
10194
10195int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag);
10196rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
10197VALUE rb_public_const_get_at(VALUE klass, ID id);
10198VALUE rb_public_const_get_from(VALUE klass, ID id);
10199int rb_public_const_defined_from(VALUE klass, ID id);
10200VALUE rb_const_source_location_at(VALUE, ID);
10201
10202
10203void rb_gc_mark_global_tbl(void);
10204void rb_gc_update_global_tbl(void);
10205size_t rb_generic_ivar_memsize(VALUE);
10206VALUE rb_search_class_path(VALUE);
10207VALUE rb_attr_delete(VALUE, ID);
10208void rb_autoload_str(VALUE mod, ID id, VALUE file);
10209VALUE rb_autoload_at_p(VALUE, ID, int);
10210__attribute__((__noreturn__)) VALUE rb_mod_const_missing(VALUE,VALUE);
10211rb_gvar_getter_t *rb_gvar_getter_function_of(ID);
10212rb_gvar_setter_t *rb_gvar_setter_function_of(ID);
10213void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_);
10214void rb_gvar_ractor_local(const char *name);
10215static inline _Bool ROBJ_TRANSIENT_P(VALUE obj);
10216static inline void ROBJ_TRANSIENT_SET(VALUE obj);
10217static inline void ROBJ_TRANSIENT_UNSET(VALUE obj);
10218struct gen_ivtbl;
10219int rb_gen_ivtbl_get(VALUE obj, ID id, struct gen_ivtbl **ivtbl);
10220int rb_obj_evacuate_ivs_to_hash_table(ID key, VALUE val, st_data_t arg);
10221
10222
10223void rb_mark_generic_ivar(VALUE);
10224void rb_mv_generic_ivar(VALUE src, VALUE dst);
10225VALUE rb_const_missing(VALUE klass, VALUE name);
10226int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
10227void rb_iv_tbl_copy(VALUE dst, VALUE src);
10228
10229
10230
10231
10232VALUE rb_ivar_lookup(VALUE obj, ID id, VALUE undef);
10233VALUE rb_gvar_get(ID);
10234VALUE rb_gvar_set(ID, VALUE);
10235VALUE rb_gvar_defined(ID);
10236void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID);
10237rb_shape_t * rb_grow_iv_list(VALUE obj);
10238void rb_ensure_iv_list_size(VALUE obj, uint32_t len, uint32_t newsize);
10239struct gen_ivtbl *rb_ensure_generic_iv_list_size(VALUE obj, rb_shape_t *shape, uint32_t newsize);
10240attr_index_t rb_obj_ivar_set(VALUE obj, ID id, VALUE val);
10241
10242
10243static inline _Bool
10244ROBJ_TRANSIENT_P(VALUE obj)
10245{
10246 return RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_USER2));
10247}
10248static inline void
10249ROBJ_TRANSIENT_SET(VALUE obj)
10250{
10251 RB_FL_SET_RAW(obj, ((VALUE)RUBY_FL_USER2));
10252}
10253static inline void
10254ROBJ_TRANSIENT_UNSET(VALUE obj)
10255{
10256 RB_FL_UNSET_RAW(obj, ((VALUE)RUBY_FL_USER2));
10257}
10258enum rb_mjit_func_state {
10259 MJIT_FUNC_NOT_COMPILED = 0,
10260 MJIT_FUNC_COMPILING = 1,
10261 MJIT_FUNC_FAILED = 2,
10262};
10263struct mjit_options {
10264 _Bool on;
10265 _Bool save_temps;
10266 _Bool warnings;
10267 _Bool debug;
10268 char* debug_flags;
10269 _Bool wait;
10270 unsigned int call_threshold;
10271 int verbose;
10272 int max_cache_size;
10273 _Bool pause;
10274 _Bool custom;
10275};
10276struct rb_mjit_compile_info {
10277 _Bool disable_ivar_cache;
10278 _Bool disable_exivar_cache;
10279 _Bool disable_send_cache;
10280 _Bool disable_inlining;
10281 _Bool disable_const_cache;
10282};
10283typedef VALUE (*jit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
10284
10285
10286extern struct mjit_options mjit_opts;
10287extern _Bool mjit_call_p;
10288extern void rb_mjit_add_iseq_to_process(const rb_iseq_t *iseq);
10289extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
10290extern void rb_mjit_recompile_send(const rb_iseq_t *iseq);
10291extern void rb_mjit_recompile_ivar(const rb_iseq_t *iseq);
10292extern void rb_mjit_recompile_exivar(const rb_iseq_t *iseq);
10293extern void rb_mjit_recompile_inlining(const rb_iseq_t *iseq);
10294extern void rb_mjit_recompile_const(const rb_iseq_t *iseq);
10295
10296
10297extern void mjit_cancel_all(const char *reason);
10298extern _Bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id);
10299extern void mjit_init(const struct mjit_options *opts);
10300extern void mjit_free_iseq(const rb_iseq_t *iseq);
10301extern void mjit_update_references(const rb_iseq_t *iseq);
10302extern void mjit_mark(void);
10303extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body);
10304extern void mjit_notify_waitpid(int exit_code);
10305extern void rb_mjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop);
10306extern void rb_mjit_cme_invalidate(rb_callable_method_entry_t *cme);
10307extern void rb_mjit_before_ractor_spawn(void);
10308extern void rb_mjit_constant_state_changed(ID id);
10309extern void rb_mjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic, unsigned insn_idx);
10310extern void rb_mjit_tracing_invalidate_all(rb_event_flag_t new_iseq_events);
10311void mjit_child_after_fork(void);
10312VALUE mjit_pause(_Bool wait_p);
10313VALUE mjit_resume(void);
10314void mjit_finish(_Bool close_handle_p);
10315static inline _Bool rb_yjit_enabled_p(void) { return 0; }
10316static inline unsigned rb_yjit_call_threshold(void) { return (0x7fffffff * 2U + 1); }
10317static inline void rb_yjit_invalidate_all_method_lookup_assumptions(void) {}
10318static inline void rb_yjit_cme_invalidate(rb_callable_method_entry_t *cme) {}
10319static inline void rb_yjit_collect_vm_usage_insn(int insn) {}
10320static inline void rb_yjit_collect_binding_alloc(void) {}
10321static inline void rb_yjit_collect_binding_set(void) {}
10322static inline _Bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec) { return 0; }
10323static inline void rb_yjit_init(void) {}
10324static inline void rb_yjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop) {}
10325static inline void rb_yjit_constant_state_changed(ID id) {}
10326static inline void rb_yjit_iseq_mark(void *payload) {}
10327static inline void rb_yjit_iseq_update_references(void *payload) {}
10328static inline void rb_yjit_iseq_free(void *payload) {}
10329static inline void rb_yjit_before_ractor_spawn(void) {}
10330static inline void rb_yjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic, unsigned insn_idx) {}
10331static inline void rb_yjit_tracing_invalidate_all(void) {}
10332
10333
10334typedef struct rb_vm_struct ruby_vm_t;
10335int ruby_vm_destruct(ruby_vm_t *vm);
10336void ruby_vm_at_exit(void(*func)(ruby_vm_t *));
10337
10338
10339enum rb_debug_counter_type {
10340RB_DEBUG_COUNTER_mc_inline_hit,
10341RB_DEBUG_COUNTER_mc_inline_miss_klass,
10342RB_DEBUG_COUNTER_mc_inline_miss_invalidated,
10343RB_DEBUG_COUNTER_mc_inline_miss_empty,
10344RB_DEBUG_COUNTER_mc_inline_miss_same_cc,
10345RB_DEBUG_COUNTER_mc_inline_miss_same_cme,
10346RB_DEBUG_COUNTER_mc_inline_miss_same_def,
10347RB_DEBUG_COUNTER_mc_inline_miss_diff,
10348RB_DEBUG_COUNTER_cvar_write_inline_hit,
10349RB_DEBUG_COUNTER_cvar_read_inline_hit,
10350RB_DEBUG_COUNTER_cvar_inline_miss,
10351RB_DEBUG_COUNTER_cvar_class_invalidate,
10352RB_DEBUG_COUNTER_cvar_include_invalidate,
10353RB_DEBUG_COUNTER_mc_cme_complement,
10354RB_DEBUG_COUNTER_mc_cme_complement_hit,
10355RB_DEBUG_COUNTER_mc_search,
10356RB_DEBUG_COUNTER_mc_search_notfound,
10357RB_DEBUG_COUNTER_mc_search_super,
10358RB_DEBUG_COUNTER_ci_packed,
10359RB_DEBUG_COUNTER_ci_kw,
10360RB_DEBUG_COUNTER_ci_nokw,
10361RB_DEBUG_COUNTER_ci_runtime,
10362RB_DEBUG_COUNTER_cc_new,
10363RB_DEBUG_COUNTER_cc_temp,
10364RB_DEBUG_COUNTER_cc_found_in_ccs,
10365RB_DEBUG_COUNTER_cc_not_found_in_ccs,
10366RB_DEBUG_COUNTER_cc_ent_invalidate,
10367RB_DEBUG_COUNTER_cc_cme_invalidate,
10368RB_DEBUG_COUNTER_cc_invalidate_leaf,
10369RB_DEBUG_COUNTER_cc_invalidate_leaf_ccs,
10370RB_DEBUG_COUNTER_cc_invalidate_leaf_callable,
10371RB_DEBUG_COUNTER_cc_invalidate_tree,
10372RB_DEBUG_COUNTER_cc_invalidate_tree_cme,
10373RB_DEBUG_COUNTER_cc_invalidate_tree_callable,
10374RB_DEBUG_COUNTER_cc_invalidate_negative,
10375RB_DEBUG_COUNTER_ccs_free,
10376RB_DEBUG_COUNTER_ccs_maxlen,
10377RB_DEBUG_COUNTER_ccs_found,
10378RB_DEBUG_COUNTER_ccs_not_found,
10379RB_DEBUG_COUNTER_call0_public,
10380RB_DEBUG_COUNTER_call0_other,
10381RB_DEBUG_COUNTER_gccct_hit,
10382RB_DEBUG_COUNTER_gccct_miss,
10383RB_DEBUG_COUNTER_gccct_null,
10384RB_DEBUG_COUNTER_iseq_num,
10385RB_DEBUG_COUNTER_iseq_cd_num,
10386RB_DEBUG_COUNTER_ccf_general,
10387RB_DEBUG_COUNTER_ccf_iseq_setup,
10388RB_DEBUG_COUNTER_ccf_iseq_setup_0start,
10389RB_DEBUG_COUNTER_ccf_iseq_setup_tailcall_0start,
10390RB_DEBUG_COUNTER_ccf_iseq_fix,
10391RB_DEBUG_COUNTER_ccf_iseq_opt,
10392RB_DEBUG_COUNTER_ccf_iseq_kw1,
10393RB_DEBUG_COUNTER_ccf_iseq_kw2,
10394RB_DEBUG_COUNTER_ccf_cfunc,
10395RB_DEBUG_COUNTER_ccf_cfunc_with_frame,
10396RB_DEBUG_COUNTER_ccf_ivar,
10397RB_DEBUG_COUNTER_ccf_attrset,
10398RB_DEBUG_COUNTER_ccf_method_missing,
10399RB_DEBUG_COUNTER_ccf_zsuper,
10400RB_DEBUG_COUNTER_ccf_bmethod,
10401RB_DEBUG_COUNTER_ccf_opt_send,
10402RB_DEBUG_COUNTER_ccf_opt_call,
10403RB_DEBUG_COUNTER_ccf_opt_block_call,
10404RB_DEBUG_COUNTER_ccf_opt_struct_aref,
10405RB_DEBUG_COUNTER_ccf_opt_struct_aset,
10406RB_DEBUG_COUNTER_ccf_super_method,
10407RB_DEBUG_COUNTER_frame_push,
10408RB_DEBUG_COUNTER_frame_push_method,
10409RB_DEBUG_COUNTER_frame_push_block,
10410RB_DEBUG_COUNTER_frame_push_class,
10411RB_DEBUG_COUNTER_frame_push_top,
10412RB_DEBUG_COUNTER_frame_push_cfunc,
10413RB_DEBUG_COUNTER_frame_push_ifunc,
10414RB_DEBUG_COUNTER_frame_push_eval,
10415RB_DEBUG_COUNTER_frame_push_rescue,
10416RB_DEBUG_COUNTER_frame_push_dummy,
10417RB_DEBUG_COUNTER_frame_R2R,
10418RB_DEBUG_COUNTER_frame_R2C,
10419RB_DEBUG_COUNTER_frame_C2C,
10420RB_DEBUG_COUNTER_frame_C2R,
10421RB_DEBUG_COUNTER_ivar_get_ic_hit,
10422RB_DEBUG_COUNTER_ivar_get_ic_miss,
10423RB_DEBUG_COUNTER_ivar_get_ic_miss_noobject,
10424RB_DEBUG_COUNTER_ivar_set_ic_hit,
10425RB_DEBUG_COUNTER_ivar_set_ic_miss,
10426RB_DEBUG_COUNTER_ivar_set_ic_miss_iv_hit,
10427RB_DEBUG_COUNTER_ivar_set_ic_miss_noobject,
10428RB_DEBUG_COUNTER_ivar_get_base,
10429RB_DEBUG_COUNTER_ivar_set_base,
10430RB_DEBUG_COUNTER_ivar_get_ic_miss_set,
10431RB_DEBUG_COUNTER_ivar_get_cc_miss_set,
10432RB_DEBUG_COUNTER_ivar_get_ic_miss_unset,
10433RB_DEBUG_COUNTER_ivar_get_cc_miss_unset,
10434RB_DEBUG_COUNTER_lvar_get,
10435RB_DEBUG_COUNTER_lvar_get_dynamic,
10436RB_DEBUG_COUNTER_lvar_set,
10437RB_DEBUG_COUNTER_lvar_set_dynamic,
10438RB_DEBUG_COUNTER_lvar_set_slowpath,
10439RB_DEBUG_COUNTER_gc_count,
10440RB_DEBUG_COUNTER_gc_minor_newobj,
10441RB_DEBUG_COUNTER_gc_minor_malloc,
10442RB_DEBUG_COUNTER_gc_minor_method,
10443RB_DEBUG_COUNTER_gc_minor_capi,
10444RB_DEBUG_COUNTER_gc_minor_stress,
10445RB_DEBUG_COUNTER_gc_major_nofree,
10446RB_DEBUG_COUNTER_gc_major_oldgen,
10447RB_DEBUG_COUNTER_gc_major_shady,
10448RB_DEBUG_COUNTER_gc_major_force,
10449RB_DEBUG_COUNTER_gc_major_oldmalloc,
10450RB_DEBUG_COUNTER_gc_enter_start,
10451RB_DEBUG_COUNTER_gc_enter_mark_continue,
10452RB_DEBUG_COUNTER_gc_enter_sweep_continue,
10453RB_DEBUG_COUNTER_gc_enter_rest,
10454RB_DEBUG_COUNTER_gc_enter_finalizer,
10455RB_DEBUG_COUNTER_gc_isptr_trial,
10456RB_DEBUG_COUNTER_gc_isptr_range,
10457RB_DEBUG_COUNTER_gc_isptr_align,
10458RB_DEBUG_COUNTER_gc_isptr_maybe,
10459RB_DEBUG_COUNTER_obj_newobj,
10460RB_DEBUG_COUNTER_obj_newobj_slowpath,
10461RB_DEBUG_COUNTER_obj_newobj_wb_unprotected,
10462RB_DEBUG_COUNTER_obj_free,
10463RB_DEBUG_COUNTER_obj_promote,
10464RB_DEBUG_COUNTER_obj_wb_unprotect,
10465RB_DEBUG_COUNTER_obj_obj_embed,
10466RB_DEBUG_COUNTER_obj_obj_transient,
10467RB_DEBUG_COUNTER_obj_obj_ptr,
10468RB_DEBUG_COUNTER_obj_obj_too_complex,
10469RB_DEBUG_COUNTER_obj_str_ptr,
10470RB_DEBUG_COUNTER_obj_str_embed,
10471RB_DEBUG_COUNTER_obj_str_shared,
10472RB_DEBUG_COUNTER_obj_str_nofree,
10473RB_DEBUG_COUNTER_obj_str_fstr,
10474RB_DEBUG_COUNTER_obj_ary_embed,
10475RB_DEBUG_COUNTER_obj_ary_transient,
10476RB_DEBUG_COUNTER_obj_ary_ptr,
10477RB_DEBUG_COUNTER_obj_ary_extracapa,
10478RB_DEBUG_COUNTER_obj_ary_shared_create,
10479RB_DEBUG_COUNTER_obj_ary_shared,
10480RB_DEBUG_COUNTER_obj_ary_shared_root_occupied,
10481RB_DEBUG_COUNTER_obj_hash_empty,
10482RB_DEBUG_COUNTER_obj_hash_1,
10483RB_DEBUG_COUNTER_obj_hash_2,
10484RB_DEBUG_COUNTER_obj_hash_3,
10485RB_DEBUG_COUNTER_obj_hash_4,
10486RB_DEBUG_COUNTER_obj_hash_5_8,
10487RB_DEBUG_COUNTER_obj_hash_g8,
10488RB_DEBUG_COUNTER_obj_hash_null,
10489RB_DEBUG_COUNTER_obj_hash_ar,
10490RB_DEBUG_COUNTER_obj_hash_st,
10491RB_DEBUG_COUNTER_obj_hash_transient,
10492RB_DEBUG_COUNTER_obj_hash_force_convert,
10493RB_DEBUG_COUNTER_obj_struct_embed,
10494RB_DEBUG_COUNTER_obj_struct_transient,
10495RB_DEBUG_COUNTER_obj_struct_ptr,
10496RB_DEBUG_COUNTER_obj_data_empty,
10497RB_DEBUG_COUNTER_obj_data_xfree,
10498RB_DEBUG_COUNTER_obj_data_imm_free,
10499RB_DEBUG_COUNTER_obj_data_zombie,
10500RB_DEBUG_COUNTER_obj_match_under4,
10501RB_DEBUG_COUNTER_obj_match_ge4,
10502RB_DEBUG_COUNTER_obj_match_ge8,
10503RB_DEBUG_COUNTER_obj_match_ptr,
10504RB_DEBUG_COUNTER_obj_iclass_ptr,
10505RB_DEBUG_COUNTER_obj_class_ptr,
10506RB_DEBUG_COUNTER_obj_module_ptr,
10507RB_DEBUG_COUNTER_obj_bignum_ptr,
10508RB_DEBUG_COUNTER_obj_bignum_embed,
10509RB_DEBUG_COUNTER_obj_float,
10510RB_DEBUG_COUNTER_obj_complex,
10511RB_DEBUG_COUNTER_obj_rational,
10512RB_DEBUG_COUNTER_obj_regexp_ptr,
10513RB_DEBUG_COUNTER_obj_file_ptr,
10514RB_DEBUG_COUNTER_obj_symbol,
10515RB_DEBUG_COUNTER_obj_imemo_ment,
10516RB_DEBUG_COUNTER_obj_imemo_iseq,
10517RB_DEBUG_COUNTER_obj_imemo_env,
10518RB_DEBUG_COUNTER_obj_imemo_tmpbuf,
10519RB_DEBUG_COUNTER_obj_imemo_ast,
10520RB_DEBUG_COUNTER_obj_imemo_cref,
10521RB_DEBUG_COUNTER_obj_imemo_svar,
10522RB_DEBUG_COUNTER_obj_imemo_throw_data,
10523RB_DEBUG_COUNTER_obj_imemo_ifunc,
10524RB_DEBUG_COUNTER_obj_imemo_memo,
10525RB_DEBUG_COUNTER_obj_imemo_parser_strterm,
10526RB_DEBUG_COUNTER_obj_imemo_callinfo,
10527RB_DEBUG_COUNTER_obj_imemo_callcache,
10528RB_DEBUG_COUNTER_obj_imemo_constcache,
10529RB_DEBUG_COUNTER_artable_hint_hit,
10530RB_DEBUG_COUNTER_artable_hint_miss,
10531RB_DEBUG_COUNTER_artable_hint_notfound,
10532RB_DEBUG_COUNTER_heap_xmalloc,
10533RB_DEBUG_COUNTER_heap_xrealloc,
10534RB_DEBUG_COUNTER_heap_xfree,
10535RB_DEBUG_COUNTER_theap_alloc,
10536RB_DEBUG_COUNTER_theap_alloc_fail,
10537RB_DEBUG_COUNTER_theap_evacuate,
10538RB_DEBUG_COUNTER_vm_sync_lock,
10539RB_DEBUG_COUNTER_vm_sync_lock_enter,
10540RB_DEBUG_COUNTER_vm_sync_lock_enter_nb,
10541RB_DEBUG_COUNTER_vm_sync_lock_enter_cr,
10542RB_DEBUG_COUNTER_vm_sync_barrier,
10543 RB_DEBUG_COUNTER_MAX
10544};
10545void rb_debug_counter_show_results(const char *msg);
10546
10547
10548size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
10549void ruby_debug_counter_reset(void);
10550void ruby_debug_counter_show_at_exit(int enable);
10551
10552
10553struct rb_subclass_entry {
10554 VALUE klass;
10555 struct rb_subclass_entry *next;
10556 struct rb_subclass_entry *prev;
10557};
10558struct rb_cvar_class_tbl_entry {
10559 uint32_t index;
10560 rb_serial_t global_cvar_state;
10561 VALUE class_value;
10562};
10563struct rb_classext_struct {
10564 VALUE *iv_ptr;
10565 struct rb_id_table *const_tbl;
10566 struct rb_id_table *callable_m_tbl;
10567 struct rb_id_table *cc_tbl;
10568 struct rb_id_table *cvc_tbl;
10569 size_t superclass_depth;
10570 VALUE *superclasses;
10571 struct rb_subclass_entry *subclasses;
10572 struct rb_subclass_entry *subclass_entry;
10573 struct rb_subclass_entry *module_subclass_entry;
10574 const VALUE origin_;
10575 const VALUE refined_class;
10576 rb_alloc_func_t allocator;
10577 const VALUE includer;
10578 uint32_t max_iv_count;
10579 uint32_t variation_count;
10580};
10581struct RClass {
10582 struct RBasic basic;
10583 VALUE super;
10584 struct rb_id_table *m_tbl;
10585};
10586typedef struct rb_subclass_entry rb_subclass_entry_t;
10587typedef struct rb_classext_struct rb_classext_t;
10588void rb_class_subclass_add(VALUE super, VALUE klass);
10589void rb_class_remove_from_super_subclasses(VALUE);
10590void rb_class_update_superclasses(VALUE);
10591size_t rb_class_superclasses_memsize(VALUE);
10592void rb_class_remove_subclass_head(VALUE);
10593int rb_singleton_class_internal_p(VALUE sklass);
10594VALUE rb_class_boot(VALUE);
10595VALUE rb_class_s_alloc(VALUE klass);
10596VALUE rb_module_s_alloc(VALUE klass);
10597void rb_module_set_initialized(VALUE module);
10598void rb_module_check_initializable(VALUE module);
10599VALUE rb_make_metaclass(VALUE, VALUE);
10600VALUE rb_include_class_new(VALUE, VALUE);
10601void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
10602void rb_class_detach_subclasses(VALUE);
10603void rb_class_detach_module_subclasses(VALUE);
10604void rb_class_remove_from_module_subclasses(VALUE);
10605VALUE rb_obj_methods(int argc, const VALUE *argv, VALUE obj);
10606VALUE rb_obj_protected_methods(int argc, const VALUE *argv, VALUE obj);
10607VALUE rb_obj_private_methods(int argc, const VALUE *argv, VALUE obj);
10608VALUE rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj);
10609VALUE rb_class_undefined_instance_methods(VALUE mod);
10610VALUE rb_special_singleton_class(VALUE);
10611VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach);
10612VALUE rb_singleton_class_get(VALUE obj);
10613void rb_undef_methods_from(VALUE klass, VALUE super);
10614static inline void RCLASS_SET_ORIGIN(VALUE klass, VALUE origin);
10615static inline void RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass);
10616static inline VALUE RCLASS_SUPER(VALUE klass);
10617static inline VALUE RCLASS_SET_SUPER(VALUE klass, VALUE super);
10618static inline void RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass);
10619
10620
10621VALUE rb_class_inherited(VALUE, VALUE);
10622VALUE rb_keyword_error_new(const char *, VALUE);
10623
10624
10625static inline void
10626RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
10627{
10628 rb_obj_write((VALUE)(klass), __extension__({
10629 ;
10630 ; __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_)));
10631 ; unaligned_member_access_result; }), (VALUE)(origin), "../ruby-3.2.2/internal/class.h", 142);
10632 if (klass != origin) RB_FL_SET(origin, ((VALUE)RUBY_FL_USER0));
10633}
10634static inline void
10635RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass)
10636{
10637 RB_FL_SET(iclass, ((VALUE)RUBY_FL_USER3));
10638}
10639static inline _Bool
10640RICLASS_OWNS_M_TBL_P(VALUE iclass)
10641{
10642 return RB_FL_TEST_RAW(iclass, ((VALUE)RUBY_FL_USER0) | ((VALUE)RUBY_FL_USER3)) == ((VALUE)RUBY_FL_USER0);
10643}
10644static inline void
10645RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass)
10646{
10647 rb_obj_write((VALUE)(iclass), __extension__({
10648 ;
10649 ; __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)));
10650 ; unaligned_member_access_result; }), (VALUE)(klass), "../ruby-3.2.2/internal/class.h", 161);
10651}
10652static inline VALUE
10653RCLASS_SUPER(VALUE klass)
10654{
10655 return ((struct RClass *)(klass))->super;
10656}
10657static inline VALUE
10658RCLASS_SET_SUPER(VALUE klass, VALUE super)
10659{
10660 if (super) {
10661 rb_class_remove_from_super_subclasses(klass);
10662 rb_class_subclass_add(super, klass);
10663 }
10664 rb_obj_write((VALUE)(klass), __extension__({
10665 ;
10666 ; __typeof__((VALUE *)(&((struct RClass *)(klass))->super)) unaligned_member_access_result = ((VALUE *)(&((struct RClass *)(klass))->super));
10667 ; unaligned_member_access_result; }), (VALUE)(super), "../ruby-3.2.2/internal/class.h", 177);
10668 rb_class_update_superclasses(klass);
10669 return super;
10670}
10671enum vm_call_flag_bits {
10672 VM_CALL_ARGS_SPLAT_bit,
10673 VM_CALL_ARGS_BLOCKARG_bit,
10674 VM_CALL_FCALL_bit,
10675 VM_CALL_VCALL_bit,
10676 VM_CALL_ARGS_SIMPLE_bit,
10677 VM_CALL_BLOCKISEQ_bit,
10678 VM_CALL_KWARG_bit,
10679 VM_CALL_KW_SPLAT_bit,
10680 VM_CALL_TAILCALL_bit,
10681 VM_CALL_SUPER_bit,
10682 VM_CALL_ZSUPER_bit,
10683 VM_CALL_OPT_SEND_bit,
10684 VM_CALL_KW_SPLAT_MUT_bit,
10685 VM_CALL__END
10686};
10687struct rb_callinfo_kwarg {
10688 int keyword_len;
10689 VALUE keywords[];
10690};
10691static inline size_t
10692rb_callinfo_kwarg_bytes(int keyword_len)
10693{
10694 return rb_size_mul_add_or_raise(
10695 keyword_len,
10696 sizeof(VALUE),
10697 sizeof(struct rb_callinfo_kwarg),
10698 rb_eRuntimeError);
10699}
10700struct rb_callinfo {
10701 VALUE flags;
10702 const struct rb_callinfo_kwarg *kwarg;
10703 VALUE mid;
10704 VALUE flag;
10705 VALUE argc;
10706};
10707static inline _Bool
10708vm_ci_packed_p(const struct rb_callinfo *ci)
10709{
10710 if ((__builtin_expect(!!(((VALUE)ci) & 0x01), 1))) {
10711 return 1;
10712 }
10713 else {
10714 ((void)0);
10715 return 0;
10716 }
10717}
10718static inline _Bool
10719vm_ci_p(const struct rb_callinfo *ci)
10720{
10721 if (vm_ci_packed_p(ci) || imemo_type_p((VALUE)ci, imemo_callinfo)) {
10722 return 1;
10723 }
10724 else {
10725 return 0;
10726 }
10727}
10728static inline ID
10729vm_ci_mid(const struct rb_callinfo *ci)
10730{
10731 if (vm_ci_packed_p(ci)) {
10732 return (((VALUE)ci) >> (1 + 15 + 16)) & ((((VALUE)1)<<32) - 1);
10733 }
10734 else {
10735 return (ID)ci->mid;
10736 }
10737}
10738static inline unsigned int
10739vm_ci_flag(const struct rb_callinfo *ci)
10740{
10741 if (vm_ci_packed_p(ci)) {
10742 return (unsigned int)((((VALUE)ci) >> (1 + 15)) & ((((VALUE)1)<<16) - 1));
10743 }
10744 else {
10745 return (unsigned int)ci->flag;
10746 }
10747}
10748static inline unsigned int
10749vm_ci_argc(const struct rb_callinfo *ci)
10750{
10751 if (vm_ci_packed_p(ci)) {
10752 return (unsigned int)((((VALUE)ci) >> (1)) & ((((VALUE)1)<<15) - 1));
10753 }
10754 else {
10755 return (unsigned int)ci->argc;
10756 }
10757}
10758static inline const struct rb_callinfo_kwarg *
10759vm_ci_kwarg(const struct rb_callinfo *ci)
10760{
10761 if (vm_ci_packed_p(ci)) {
10762 return ((void *)0);
10763 }
10764 else {
10765 return ci->kwarg;
10766 }
10767}
10768static inline void
10769vm_ci_dump(const struct rb_callinfo *ci)
10770{
10771 if (vm_ci_packed_p(ci)) {
10772 ruby_debug_printf("packed_ci ID:%s flag:%x argc:%u\n",
10773 rb_id2name(vm_ci_mid(ci)), vm_ci_flag(ci), vm_ci_argc(ci));
10774 }
10775 else {
10776 rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.2.2/vm_callinfo.h", 177, __func__);
10777 }
10778}
10779static inline const struct rb_callinfo *
10780vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10781{
10782 if ((((mid ) & ~((((VALUE)1)<<32) - 1)) ? 0 : ((flag) & ~((((VALUE)1)<<16) - 1)) ? 0 : ((argc) & ~((((VALUE)1)<<15) - 1)) ? 0 : (kwarg) ? 0 : 1)) {
10783 ((void)0);
10784 return ((const struct rb_callinfo *) ((((VALUE)(mid )) << (1 + 15 + 16)) | (((VALUE)(flag)) << (1 + 15)) | (((VALUE)(argc)) << (1)) | RUBY_FIXNUM_FLAG));
10785 }
10786 const _Bool debug = 0;
10787 if (debug) ruby_debug_printf("%s:%d ", file, line);
10788 const struct rb_callinfo *ci = (const struct rb_callinfo *)
10789 rb_imemo_new(imemo_callinfo,
10790 (VALUE)mid,
10791 (VALUE)flag,
10792 (VALUE)argc,
10793 (VALUE)kwarg);
10794 if (debug) rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.2.2/vm_callinfo.h", 218, __func__);
10795 if (kwarg) {
10796 ((void)0);
10797 }
10798 else {
10799 ((void)0);
10800 }
10801 ((void)0);
10802 ((void)0);
10803 return ci;
10804}
10805static inline const struct rb_callinfo *
10806vm_ci_new_runtime_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10807{
10808 ((void)0);
10809 return vm_ci_new_(mid, flag, argc, kwarg, file, line);
10810}
10811static inline _Bool
10812vm_ci_markable(const struct rb_callinfo *ci)
10813{
10814 if (! ci) {
10815 return 0;
10816 }
10817 else if (vm_ci_packed_p(ci)) {
10818 return 1;
10819 }
10820 else {
10821 ((void)0);
10822 return ! RB_FL_ANY_RAW((VALUE)ci, ((VALUE)RUBY_FL_USER4));
10823 }
10824}
10825typedef VALUE (*vm_call_handler)(
10826 struct rb_execution_context_struct *ec,
10827 struct rb_control_frame_struct *cfp,
10828 struct rb_calling_info *calling);
10829struct rb_callcache {
10830 const VALUE flags;
10831 const VALUE klass;
10832 const struct rb_callable_method_entry_struct * const cme_;
10833 const vm_call_handler call_;
10834 union {
10835 struct {
10836 uintptr_t value;
10837 } attr;
10838 const enum method_missing_reason method_missing_reason;
10839 VALUE v;
10840 } aux_;
10841};
10842extern const struct rb_callcache *rb_vm_empty_cc(void);
10843extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
10844static inline void vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id_t dest_shape_id);
10845static inline void
10846vm_cc_attr_index_initialize(const struct rb_callcache *cc, shape_id_t shape_id)
10847{
10848 vm_cc_attr_index_set(cc, (attr_index_t)-1, shape_id);
10849}
10850static inline const struct rb_callcache *
10851vm_cc_new(VALUE klass,
10852 const struct rb_callable_method_entry_struct *cme,
10853 vm_call_handler call)
10854{
10855 const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
10856 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
10857 ((void)0);
10858 return cc;
10859}
10860static inline _Bool
10861vm_cc_class_check(const struct rb_callcache *cc, VALUE klass)
10862{
10863 ((void)0);
10864 ((void)0);
10865 return cc->klass == klass;
10866}
10867static inline int
10868vm_cc_markable(const struct rb_callcache *cc)
10869{
10870 ((void)0);
10871 return RB_FL_TEST_RAW((VALUE)cc, ((VALUE)RUBY_FL_FREEZE)) == 0;
10872}
10873static inline const struct rb_callable_method_entry_struct *
10874vm_cc_cme(const struct rb_callcache *cc)
10875{
10876 ((void)0);
10877 ((void)0);
10878 return cc->cme_;
10879}
10880static inline vm_call_handler
10881vm_cc_call(const struct rb_callcache *cc)
10882{
10883 ((void)0);
10884 ((void)0);
10885 return cc->call_;
10886}
10887static inline attr_index_t
10888vm_cc_attr_index(const struct rb_callcache *cc)
10889{
10890 ((void)0);
10891 return (attr_index_t)((cc->aux_.attr.value & (((VALUE)-1) >> 32)) - 1);
10892}
10893static inline shape_id_t
10894vm_cc_attr_index_dest_shape_id(const struct rb_callcache *cc)
10895{
10896 ((void)0);
10897 return cc->aux_.attr.value >> ((8 * 8) - 32);
10898}
10899static inline void
10900vm_cc_atomic_shape_and_index(const struct rb_callcache *cc, shape_id_t * shape_id, attr_index_t * index)
10901{
10902 uintptr_t cache_value = cc->aux_.attr.value;
10903 *shape_id = (shape_id_t)(cache_value >> ((8 * 8) - 32));
10904 *index = (attr_index_t)(cache_value & (((VALUE)-1) >> 32)) - 1;
10905 return;
10906}
10907static inline void
10908vm_ic_atomic_shape_and_index(const struct iseq_inline_iv_cache_entry *ic, shape_id_t * shape_id, attr_index_t * index)
10909{
10910 uintptr_t cache_value = ic->value;
10911 *shape_id = (shape_id_t)(cache_value >> ((8 * 8) - 32));
10912 *index = (attr_index_t)(cache_value & (((VALUE)-1) >> 32)) - 1;
10913 return;
10914}
10915static inline shape_id_t
10916vm_ic_attr_index_dest_shape_id(const struct iseq_inline_iv_cache_entry *ic)
10917{
10918 return (shape_id_t)(ic->value >> ((8 * 8) - 32));
10919}
10920static inline unsigned int
10921vm_cc_cmethod_missing_reason(const struct rb_callcache *cc)
10922{
10923 ((void)0);
10924 return cc->aux_.method_missing_reason;
10925}
10926static inline _Bool
10927vm_cc_invalidated_p(const struct rb_callcache *cc)
10928{
10929 if (cc->klass && !((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))) {
10930 return 0;
10931 }
10932 else {
10933 return 1;
10934 }
10935}
10936static inline _Bool
10937vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass)
10938{
10939 ((void)0);
10940 if (cc->klass == klass && !((cc_cme)->flags & ((VALUE)RUBY_FL_USER9))) {
10941 return 1;
10942 }
10943 else {
10944 return 0;
10945 }
10946}
10947static inline void
10948vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
10949{
10950 ((void)0);
10951 ((void)0);
10952 *(vm_call_handler *)&cc->call_ = call;
10953}
10954static inline void
10955vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id_t dest_shape_id)
10956{
10957 uintptr_t *attr_value = (uintptr_t *)&cc->aux_.attr.value;
10958 if (!vm_cc_markable(cc)) {
10959 *attr_value = (uintptr_t)(((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32);
10960 return;
10961 }
10962 ((void)0);
10963 ((void)0);
10964 *attr_value = (attr_index_t)(index + 1) | ((uintptr_t)(dest_shape_id) << ((8 * 8) - 32));
10965}
10966static inline void
10967vm_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)
10968{
10969 *(uintptr_t *)&ic->value = ((uintptr_t)dest_shape_id << ((8 * 8) - 32)) | (attr_index_t)(index + 1);
10970}
10971static inline void
10972vm_ic_attr_index_initialize(const struct iseq_inline_iv_cache_entry *ic, shape_id_t shape_id)
10973{
10974 *(uintptr_t *)&ic->value = (uintptr_t)shape_id << ((8 * 8) - 32);
10975}
10976static inline void
10977vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missing_reason reason)
10978{
10979 ((void)0);
10980 ((void)0);
10981 *(enum method_missing_reason *)&cc->aux_.method_missing_reason = reason;
10982}
10983static inline void
10984vm_cc_invalidate(const struct rb_callcache *cc)
10985{
10986 ((void)0);
10987 ((void)0);
10988 ((void)0);
10989 *(VALUE *)&cc->klass = 0;
10990 ((void)0);
10991}
10992struct rb_call_data {
10993 const struct rb_callinfo *ci;
10994 const struct rb_callcache *cc;
10995};
10996struct rb_class_cc_entries {
10997 int capa;
10998 int len;
10999 const struct rb_callable_method_entry_struct *cme;
11000 struct rb_class_cc_entries_entry {
11001 const struct rb_callinfo *ci;
11002 const struct rb_callcache *cc;
11003 } *entries;
11004};
11005void rb_vm_ccs_free(struct rb_class_cc_entries *ccs);
11006
11007
11008struct RNode;
11009VALUE ruby_debug_print_value(int level, int debug_level, const char *header, VALUE v);
11010ID ruby_debug_print_id(int level, int debug_level, const char *header, ID id);
11011struct RNode *ruby_debug_print_node(int level, int debug_level, const char *header, const struct RNode *node);
11012int ruby_debug_print_indent(int level, int debug_level, int indent_level);
11013void ruby_debug_gc_check_func(void);
11014void ruby_set_debug_option(const char *str);
11015
11016
11017extern enum ruby_debug_log_mode {
11018 ruby_debug_log_disabled = 0x00,
11019 ruby_debug_log_memory = 0x01,
11020 ruby_debug_log_stderr = 0x02,
11021 ruby_debug_log_file = 0x04,
11022} ruby_debug_log_mode;
11023__attribute__((__format__(__printf__, 4, 5)))
11024void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
11025void ruby_debug_log_print(unsigned int n);
11026_Bool ruby_debug_log_filter(const char *func_name, const char *file_name);
11027typedef long OFFSET;
11028typedef unsigned long lindex_t;
11029typedef VALUE GENTRY;
11030typedef rb_iseq_t *ISEQ;
11031
11032
11033extern VALUE ruby_vm_const_missing_count;
11034extern rb_serial_t ruby_vm_constant_cache_invalidations;
11035extern rb_serial_t ruby_vm_constant_cache_misses;
11036extern rb_serial_t ruby_vm_global_cvar_state;
11037
11038
11039static inline void
11040CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, _Bool enabled)
11041{
11042 if ((__builtin_expect(!!(enabled), 1))) {
11043 vm_cc_call_set(cc, func);
11044 }
11045}
11046static inline struct vm_throw_data *
11047THROW_DATA_NEW(VALUE val, const rb_control_frame_t *cf, int st)
11048{
11049 struct vm_throw_data *obj = (struct vm_throw_data *)rb_imemo_new(imemo_throw_data, val, (VALUE)cf, 0, 0);
11050 obj->throw_state = st;
11051 return obj;
11052}
11053static inline VALUE
11054THROW_DATA_VAL(const struct vm_throw_data *obj)
11055{
11056 ((void)0);
11057 return obj->throw_obj;
11058}
11059static inline const rb_control_frame_t *
11060THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj)
11061{
11062 ((void)0);
11063 return obj->catch_frame;
11064}
11065static inline int
11066THROW_DATA_STATE(const struct vm_throw_data *obj)
11067{
11068 ((void)0);
11069 return obj->throw_state;
11070}
11071static inline int
11072THROW_DATA_CONSUMED_P(const struct vm_throw_data *obj)
11073{
11074 ((void)0);
11075 return obj->flags & ((VALUE)RUBY_FL_USER4);
11076}
11077static inline void
11078THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
11079{
11080 ((void)0);
11081 obj->catch_frame = cfp;
11082}
11083static inline void
11084THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
11085{
11086 ((void)0);
11087 obj->throw_state = st;
11088}
11089static inline void
11090THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
11091{
11092 if (imemo_throw_data_p((VALUE)obj) &&
11093 THROW_DATA_STATE(obj) == RUBY_TAG_BREAK) {
11094 obj->flags |= ((VALUE)RUBY_FL_USER4);
11095 }
11096}
11097static inline _Bool
11098vm_call_cacheable(const struct rb_callinfo *ci, const struct rb_callcache *cc)
11099{
11100 return (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) ||
11101 (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;
11102}
11103static inline _Bool
11104vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
11105{
11106 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);
11107}
11108struct rb_ractor_local_storage_type {
11109 void (*mark)(void *ptr);
11110 void (*free)(void *ptr);
11111};
11112typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t;
11113
11114
11115extern VALUE rb_cRactor;
11116VALUE rb_ractor_stdin(void);
11117VALUE rb_ractor_stdout(void);
11118VALUE rb_ractor_stderr(void);
11119void rb_ractor_stdin_set(VALUE io);
11120void rb_ractor_stdout_set(VALUE io);
11121void rb_ractor_stderr_set(VALUE io);
11122rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);
11123VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);
11124_Bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);
11125void rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);
11126extern const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;
11127rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type);
11128void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);
11129void rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);
11130VALUE rb_ractor_make_shareable(VALUE obj);
11131VALUE rb_ractor_make_shareable_copy(VALUE obj);
11132
11133
11134static inline _Bool
11135rb_ractor_shareable_p(VALUE obj)
11136{
11137 _Bool rb_ractor_shareable_p_continue(VALUE obj);
11138 if (RB_SPECIAL_CONST_P(obj)) {
11139 return 1;
11140 }
11141 else if (RB_FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)) {
11142 return 1;
11143 }
11144 else {
11145 return rb_ractor_shareable_p_continue(obj);
11146 }
11147}
11148enum rb_ractor_basket_type {
11149 basket_type_none,
11150 basket_type_ref,
11151 basket_type_copy,
11152 basket_type_move,
11153 basket_type_will,
11154 basket_type_deleted,
11155 basket_type_reserved,
11156};
11157struct rb_ractor_basket {
11158 _Bool exception;
11159 enum rb_ractor_basket_type type;
11160 VALUE v;
11161 VALUE sender;
11162};
11163struct rb_ractor_queue {
11164 struct rb_ractor_basket *baskets;
11165 int start;
11166 int cnt;
11167 int size;
11168 unsigned int serial;
11169 unsigned int reserved_cnt;
11170};
11171struct rb_ractor_waiting_list {
11172 int cnt;
11173 int size;
11174 rb_ractor_t **ractors;
11175};
11176enum rb_ractor_wait_status {
11177 wait_none = 0x00,
11178 wait_receiving = 0x01,
11179 wait_taking = 0x02,
11180 wait_yielding = 0x04,
11181 wait_moving = 0x08,
11182};
11183enum rb_ractor_wakeup_status {
11184 wakeup_none,
11185 wakeup_by_send,
11186 wakeup_by_yield,
11187 wakeup_by_take,
11188 wakeup_by_close,
11189 wakeup_by_interrupt,
11190 wakeup_by_retry,
11191};
11192struct rb_ractor_sync {
11193 rb_nativethread_lock_t lock;
11194 rb_nativethread_cond_t cond;
11195 struct rb_ractor_queue incoming_queue;
11196 struct rb_ractor_waiting_list taking_ractors;
11197 _Bool incoming_port_closed;
11198 _Bool outgoing_port_closed;
11199 struct ractor_wait {
11200 enum rb_ractor_wait_status status;
11201 enum rb_ractor_wakeup_status wakeup_status;
11202 struct rb_ractor_basket yielded_basket;
11203 struct rb_ractor_basket taken_basket;
11204 } wait;
11205};
11206enum ractor_status {
11207 ractor_created,
11208 ractor_running,
11209 ractor_blocking,
11210 ractor_terminated,
11211};
11212struct rb_ractor_struct {
11213 struct rb_ractor_pub pub;
11214 struct rb_ractor_sync sync;
11215 VALUE receiving_mutex;
11216 _Bool yield_atexit;
11217 rb_nativethread_cond_t barrier_wait_cond;
11218 struct {
11219 struct ccan_list_head set;
11220 unsigned int cnt;
11221 unsigned int blocking_cnt;
11222 unsigned int sleeper;
11223 struct rb_thread_sched sched;
11224 rb_execution_context_t *running_ec;
11225 rb_thread_t *main;
11226 } threads;
11227 VALUE thgroup_default;
11228 VALUE name;
11229 VALUE loc;
11230 enum ractor_status status_;
11231 struct ccan_list_node vmlr_node;
11232 st_table *local_storage;
11233 struct rb_id_table *idkey_local_storage;
11234 VALUE r_stdin;
11235 VALUE r_stdout;
11236 VALUE r_stderr;
11237 VALUE verbose;
11238 VALUE debug;
11239 rb_ractor_newobj_cache_t newobj_cache;
11240 struct gc_mark_func_data_struct {
11241 void *data;
11242 void (*mark_func)(VALUE v, void *data);
11243 } *mfd;
11244};
11245static inline VALUE
11246rb_ractor_self(const rb_ractor_t *r)
11247{
11248 return r->pub.self;
11249}
11250rb_ractor_t *rb_ractor_main_alloc(void);
11251void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread);
11252void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result);
11253void rb_ractor_atexit_exception(rb_execution_context_t *ec);
11254void rb_ractor_teardown(rb_execution_context_t *ec);
11255void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
11256void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args);
11257VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc);
11258int rb_ractor_living_thread_num(const rb_ractor_t *);
11259VALUE rb_ractor_thread_list(rb_ractor_t *r);
11260_Bool rb_ractor_p(VALUE rv);
11261void rb_ractor_living_threads_init(rb_ractor_t *r);
11262void rb_ractor_living_threads_insert(rb_ractor_t *r, rb_thread_t *th);
11263void rb_ractor_living_threads_remove(rb_ractor_t *r, rb_thread_t *th);
11264void rb_ractor_blocking_threads_inc(rb_ractor_t *r, const char *file, int line);
11265void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line);
11266void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r);
11267void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r);
11268void rb_ractor_terminate_all(void);
11269_Bool rb_ractor_main_p_(void);
11270void rb_ractor_finish_marking(void);
11271void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th);
11272VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name);
11273
11274
11275_Bool rb_ractor_shareable_p_continue(VALUE obj);
11276void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key);
11277
11278
11279static inline _Bool
11280rb_ractor_main_p(void)
11281{
11282 if (ruby_single_main_ractor) {
11283 return 1;
11284 }
11285 else {
11286 return rb_ractor_main_p_();
11287 }
11288}
11289static inline _Bool
11290rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status)
11291{
11292 return r->status_ == status;
11293}
11294static inline void
11295rb_ractor_sleeper_threads_inc(rb_ractor_t *r)
11296{
11297 r->threads.sleeper++;
11298}
11299static inline void
11300rb_ractor_sleeper_threads_dec(rb_ractor_t *r)
11301{
11302 r->threads.sleeper--;
11303}
11304static inline void
11305rb_ractor_sleeper_threads_clear(rb_ractor_t *r)
11306{
11307 r->threads.sleeper = 0;
11308}
11309static inline int
11310rb_ractor_sleeper_thread_num(rb_ractor_t *r)
11311{
11312 return r->threads.sleeper;
11313}
11314static inline void
11315rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
11316{
11317 if (cr->threads.running_ec != th->ec) {
11318 if (0) {
11319 ruby_debug_printf("rb_ractor_thread_switch ec:%p->%p\n",
11320 (void *)cr->threads.running_ec, (void *)th->ec);
11321 }
11322 }
11323 else {
11324 return;
11325 }
11326 if (cr->threads.running_ec != th->ec) {
11327 th->running_time_us = 0;
11328 }
11329 cr->threads.running_ec = th->ec;
11330 ((void)0);
11331}
11332static inline void
11333rb_ractor_set_current_ec_(rb_ractor_t *cr, rb_execution_context_t *ec, const char *file, int line)
11334{
11335 ruby_current_ec = ec;
11336 ;
11337 ((void)0);
11338 cr->threads.running_ec = ec;
11339}
11340void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11341void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11342static inline uint32_t
11343rb_ractor_id(const rb_ractor_t *r)
11344{
11345 return r->pub.id;
11346}
11347_Bool rb_vm_locked_p(void);
11348void rb_vm_lock_body(void);
11349void rb_vm_unlock_body(void);
11350struct rb_ractor_struct;
11351void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev );
11352void rb_vm_lock_enter_body_nb(unsigned int *lev );
11353void rb_vm_lock_enter_body(unsigned int *lev );
11354void rb_vm_lock_leave_body(unsigned int *lev );
11355void rb_vm_barrier(void);
11356extern struct rb_ractor_struct *ruby_single_main_ractor;
11357static inline _Bool
11358rb_multi_ractor_p(void)
11359{
11360 if ((__builtin_expect(!!(ruby_single_main_ractor), 1))) {
11361 ((void)0);
11362 return 0;
11363 }
11364 else {
11365 return 1;
11366 }
11367}
11368static inline void
11369rb_vm_lock(const char *file, int line)
11370{
11371 ((void)0);
11372 if (rb_multi_ractor_p()) {
11373 rb_vm_lock_body();
11374 }
11375}
11376static inline void
11377rb_vm_unlock(const char *file, int line)
11378{
11379 if (rb_multi_ractor_p()) {
11380 rb_vm_unlock_body();
11381 }
11382}
11383static inline void
11384rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
11385{
11386 ((void)0);
11387 if (rb_multi_ractor_p()) {
11388 rb_vm_lock_enter_body(lev );
11389 }
11390}
11391static inline void
11392rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
11393{
11394 ((void)0);
11395 if (rb_multi_ractor_p()) {
11396 rb_vm_lock_enter_body_nb(lev );
11397 }
11398}
11399static inline void
11400rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
11401{
11402 if (rb_multi_ractor_p()) {
11403 rb_vm_lock_leave_body(lev );
11404 }
11405}
11406static inline void
11407rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11408{
11409 ((void)0);
11410 rb_vm_lock_enter_body_cr(cr, levp );
11411}
11412static inline void
11413rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11414{
11415 rb_vm_lock_leave_body(levp );
11416}
11417struct rb_builtin_function {
11418 const void * const func_ptr;
11419 const int argc;
11420 const int index;
11421 const char * const name;
11422 void (*compiler)(VALUE, long, unsigned, _Bool);
11423};
11424void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
11425typedef VALUE (*rb_builtin_arity0_function_type)(rb_execution_context_t *ec, VALUE self);
11426typedef VALUE (*rb_builtin_arity1_function_type)(rb_execution_context_t *ec, VALUE self,
11427 VALUE);
11428typedef VALUE (*rb_builtin_arity2_function_type)(rb_execution_context_t *ec, VALUE self,
11429 VALUE, VALUE);
11430typedef VALUE (*rb_builtin_arity3_function_type)(rb_execution_context_t *ec, VALUE self,
11431 VALUE, VALUE, VALUE);
11432typedef VALUE (*rb_builtin_arity4_function_type)(rb_execution_context_t *ec, VALUE self,
11433 VALUE, VALUE, VALUE, VALUE);
11434typedef VALUE (*rb_builtin_arity5_function_type)(rb_execution_context_t *ec, VALUE self,
11435 VALUE, VALUE, VALUE, VALUE, VALUE);
11436typedef VALUE (*rb_builtin_arity6_function_type)(rb_execution_context_t *ec, VALUE self,
11437 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11438typedef VALUE (*rb_builtin_arity7_function_type)(rb_execution_context_t *ec, VALUE self,
11439 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11440typedef VALUE (*rb_builtin_arity8_function_type)(rb_execution_context_t *ec, VALUE self,
11441 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11442typedef VALUE (*rb_builtin_arity9_function_type)(rb_execution_context_t *ec, VALUE self,
11443 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11444typedef VALUE (*rb_builtin_arity10_function_type)(rb_execution_context_t *ec, VALUE self,
11445 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11446typedef VALUE (*rb_builtin_arity11_function_type)(rb_execution_context_t *ec, VALUE self,
11447 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11448typedef VALUE (*rb_builtin_arity12_function_type)(rb_execution_context_t *ec, VALUE self,
11449 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11450typedef VALUE (*rb_builtin_arity13_function_type)(rb_execution_context_t *ec, VALUE self,
11451 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11452typedef VALUE (*rb_builtin_arity14_function_type)(rb_execution_context_t *ec, VALUE self,
11453 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11454typedef VALUE (*rb_builtin_arity15_function_type)(rb_execution_context_t *ec, VALUE self,
11455 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11456static inline void rb_builtin_function_check_arity0(rb_builtin_arity0_function_type f){}
11457static inline void rb_builtin_function_check_arity1(rb_builtin_arity1_function_type f){}
11458static inline void rb_builtin_function_check_arity2(rb_builtin_arity2_function_type f){}
11459static inline void rb_builtin_function_check_arity3(rb_builtin_arity3_function_type f){}
11460static inline void rb_builtin_function_check_arity4(rb_builtin_arity4_function_type f){}
11461static inline void rb_builtin_function_check_arity5(rb_builtin_arity5_function_type f){}
11462static inline void rb_builtin_function_check_arity6(rb_builtin_arity6_function_type f){}
11463static inline void rb_builtin_function_check_arity7(rb_builtin_arity7_function_type f){}
11464static inline void rb_builtin_function_check_arity8(rb_builtin_arity8_function_type f){}
11465static inline void rb_builtin_function_check_arity9(rb_builtin_arity9_function_type f){}
11466static inline void rb_builtin_function_check_arity10(rb_builtin_arity10_function_type f){}
11467static inline void rb_builtin_function_check_arity11(rb_builtin_arity11_function_type f){}
11468static inline void rb_builtin_function_check_arity12(rb_builtin_arity12_function_type f){}
11469static inline void rb_builtin_function_check_arity13(rb_builtin_arity13_function_type f){}
11470static inline void rb_builtin_function_check_arity14(rb_builtin_arity14_function_type f){}
11471static inline void rb_builtin_function_check_arity15(rb_builtin_arity15_function_type f){}static inline
11472__attribute__((__pure__)) VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);static inline
11473VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
11474__attribute__((__pure__)) static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index);
11475static inline VALUE
11476rb_vm_lvar(rb_execution_context_t *ec, int index)
11477{
11478 return ec->cfp->ep[index];
11479}
11480struct builtin_binary {
11481 const char *feature;
11482 const unsigned char *bin;
11483 size_t bin_size;
11484};
11485struct ruby_dtrace_method_hook_args {
11486 const char *classname;
11487 const char *methodname;
11488 const char *filename;
11489 int line_no;
11490 volatile VALUE klass;
11491 volatile VALUE name;
11492};
11493
11494
11495__attribute__((__noinline__)) int rb_dtrace_setup(rb_execution_context_t *, VALUE, ID, struct ruby_dtrace_method_hook_args *);
11496
11497
11498VALUE rb_str_concat_literals(size_t, const VALUE*);
11499__attribute__ ((__visibility__("default"))) extern
11500VALUE rb_vm_exec(rb_execution_context_t *, _Bool);
11501extern const char *const rb_debug_counter_names[];
11502__attribute__((__pure__)) static inline const VALUE *VM_EP_LEP(const VALUE *);
11503static inline const VALUE *
11504VM_EP_LEP(const VALUE *ep)
11505{
11506 while (!VM_ENV_LOCAL_P(ep)) {
11507 ep = VM_ENV_PREV_EP(ep);
11508 }
11509 return ep;
11510}
11511static inline const rb_control_frame_t *
11512rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE * const ep)
11513{
11514 if (!ep) {
11515 return ((void *)0);
11516 }
11517 else {
11518 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
11519 while (cfp < eocfp) {
11520 if (cfp->ep == ep) {
11521 return cfp;
11522 }
11523 cfp = ((cfp)+1);
11524 }
11525 return ((void *)0);
11526 }
11527}static inline
11528const VALUE *
11529rb_vm_ep_local_ep(const VALUE *ep)
11530{
11531 return VM_EP_LEP(ep);
11532}
11533__attribute__((__pure__)) static inline const VALUE *VM_CF_LEP(const rb_control_frame_t * const cfp);
11534static inline const VALUE *
11535VM_CF_LEP(const rb_control_frame_t * const cfp)
11536{
11537 return VM_EP_LEP(cfp->ep);
11538}
11539static inline const VALUE *
11540VM_CF_PREV_EP(const rb_control_frame_t * const cfp)
11541{
11542 return VM_ENV_PREV_EP(cfp->ep);
11543}
11544__attribute__((__pure__)) static inline VALUE VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp);
11545static inline VALUE
11546VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp)
11547{
11548 const VALUE *ep = VM_CF_LEP(cfp);
11549 return VM_ENV_BLOCK_HANDLER(ep);
11550}static inline
11551int
11552rb_vm_cframe_keyword_p(const rb_control_frame_t *cfp)
11553{
11554 return VM_FRAME_CFRAME_KW_P(cfp);
11555}static inline
11556VALUE
11557rb_vm_frame_block_handler(const rb_control_frame_t *cfp)
11558{
11559 return VM_CF_BLOCK_HANDLER(cfp);
11560}
11561static struct rb_captured_block *
11562VM_CFP_TO_CAPTURED_BLOCK(const rb_control_frame_t *cfp)
11563{
11564 ((void)0);
11565 return (struct rb_captured_block *)&cfp->self;
11566}
11567static rb_control_frame_t *
11568VM_CAPTURED_BLOCK_TO_CFP(const struct rb_captured_block *captured)
11569{
11570 rb_control_frame_t *cfp = ((rb_control_frame_t *)((VALUE *)(captured) - 3));
11571 ((void)0);
11572 ((void)0);
11573 return cfp;
11574}
11575static int
11576VM_BH_FROM_CFP_P(VALUE block_handler, const rb_control_frame_t *cfp)
11577{
11578 const struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
11579 return ((void *)((block_handler) & ~0x03)) == captured;
11580}
11581static VALUE
11582vm_passed_block_handler(rb_execution_context_t *ec)
11583{
11584 VALUE block_handler = ec->passed_block_handler;
11585 ec->passed_block_handler = 0;
11586 vm_block_handler_verify(block_handler);
11587 return block_handler;
11588}
11589static rb_cref_t *
11590vm_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)
11591{
11592 VALUE refinements = ((VALUE)RUBY_Qnil);
11593 int omod_shared = 0;
11594 rb_cref_t *cref;
11595 union {
11596 rb_scope_visibility_t visi;
11597 VALUE value;
11598 } scope_visi;
11599 scope_visi.visi.method_visi = visi;
11600 scope_visi.visi.module_func = module_func;
11601 if (prev_cref != ((void *)0) && prev_cref != (void *)1 ) {
11602 refinements = CREF_REFINEMENTS(prev_cref);
11603 if (!RB_NIL_P(refinements)) {
11604 omod_shared = 1;
11605 CREF_OMOD_SHARED_SET(prev_cref);
11606 }
11607 }
11608 ((void)0);
11609 cref = (rb_cref_t *)rb_imemo_new(imemo_cref, klass, (VALUE)(use_prev_prev ? CREF_NEXT(prev_cref) : prev_cref), scope_visi.value, refinements);
11610 if (pushed_by_eval) CREF_PUSHED_BY_EVAL_SET(cref);
11611 if (omod_shared) CREF_OMOD_SHARED_SET(cref);
11612 if (singleton) CREF_SINGLETON_SET(cref);
11613 return cref;
11614}
11615static rb_cref_t *
11616vm_cref_new(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int singleton)
11617{
11618 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 0, singleton);
11619}
11620static rb_cref_t *
11621vm_cref_new_use_prev(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval)
11622{
11623 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 1, 0);
11624}
11625static int
11626ref_delete_symkey(VALUE key, VALUE value, VALUE unused)
11627{
11628 return RB_SYMBOL_P(key) ? ST_DELETE : ST_CONTINUE;
11629}
11630static rb_cref_t *
11631vm_cref_dup(const rb_cref_t *cref)
11632{
11633 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11634 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11635 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11636 int singleton = CREF_SINGLETON(cref);
11637 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11638 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11639 VALUE ref = rb_hash_dup(CREF_REFINEMENTS(cref));
11640 rb_hash_foreach(ref, ref_delete_symkey, ((VALUE)RUBY_Qnil));
11641 CREF_REFINEMENTS_SET(new_cref, ref);
11642 CREF_OMOD_SHARED_UNSET(new_cref);
11643 }
11644 return new_cref;
11645}static inline
11646rb_cref_t *
11647rb_vm_cref_dup_without_refinements(const rb_cref_t *cref)
11648{
11649 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11650 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11651 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11652 int singleton = CREF_SINGLETON(cref);
11653 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11654 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11655 CREF_REFINEMENTS_SET(new_cref, ((VALUE)RUBY_Qnil));
11656 CREF_OMOD_SHARED_UNSET(new_cref);
11657 }
11658 return new_cref;
11659}
11660static rb_cref_t *
11661vm_cref_new_toplevel(rb_execution_context_t *ec)
11662{
11663 rb_cref_t *cref = vm_cref_new(rb_cObject, METHOD_VISI_PRIVATE , 0, ((void *)0), 0, 0);
11664 VALUE top_wrapper = rb_ec_thread_ptr(ec)->top_wrapper;
11665 if (top_wrapper) {
11666 cref = vm_cref_new(top_wrapper, METHOD_VISI_PRIVATE, 0, cref, 0, 0);
11667 }
11668 return cref;
11669}static inline
11670rb_cref_t *
11671rb_vm_cref_new_toplevel(void)
11672{
11673 return vm_cref_new_toplevel(rb_current_execution_context(1));
11674}
11675static void
11676vm_cref_dump(const char *mesg, const rb_cref_t *cref)
11677{
11678 ruby_debug_printf("vm_cref_dump: %s (%p)\n", mesg, (void *)cref);
11679 while (cref) {
11680 ruby_debug_printf("= cref| klass: %s\n", RSTRING_PTR(rb_class_path(CREF_CLASS(cref))));
11681 cref = CREF_NEXT(cref);
11682 }
11683}static inline
11684void
11685rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep)
11686{
11687 *((const VALUE **)&dst->as.captured.ep) = ep;
11688 (rb_obj_written((VALUE)(obj), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(VM_ENV_ENVVAL(ep)), "../ruby-3.2.2/vm.c", 360));
11689}
11690static void
11691vm_bind_update_env(VALUE bindval, rb_binding_t *bind, VALUE envval)
11692{
11693 const rb_env_t *env = (rb_env_t *)envval;
11694 rb_obj_write((VALUE)(bindval), __extension__({
11695 ;
11696 ; __typeof__((VALUE *)(&bind->block.as.captured.code.iseq)) unaligned_member_access_result = ((VALUE *)(&bind->block.as.captured.code.iseq));
11697 ; unaligned_member_access_result; }), (VALUE)(env->iseq), "../ruby-3.2.2/vm.c", 367);
11698 rb_vm_block_ep_update(bindval, &bind->block, env->ep);
11699}
11700static VALUE vm_make_env_object(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
11701extern VALUE rb_vm_invoke_bmethod(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self,
11702 int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
11703 const rb_callable_method_entry_t *me);
11704static 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);
11705__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);
11706static VALUE
11707mjit_check_iseq(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
11708{
11709 uintptr_t mjit_state = (uintptr_t)(body->jit_func);
11710 ((__builtin_expect(!!(!!(((uintptr_t)(mjit_state) <= (uintptr_t)MJIT_FUNC_FAILED))), 1)) ? ((void)0) : __builtin_unreachable());
11711 switch ((enum rb_mjit_func_state)mjit_state) {
11712 case MJIT_FUNC_NOT_COMPILED:
11713 if (body->total_calls == mjit_opts.call_threshold) {
11714 rb_mjit_add_iseq_to_process(iseq);
11715 if ((__builtin_expect(!!(mjit_opts.wait && !((uintptr_t)(body->jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)), 0))) {
11716 return body->jit_func(ec, ec->cfp);
11717 }
11718 }
11719 break;
11720 case MJIT_FUNC_COMPILING:
11721 case MJIT_FUNC_FAILED:
11722 break;
11723 }
11724 return ((VALUE)RUBY_Qundef);
11725}
11726static inline VALUE
11727jit_exec(rb_execution_context_t *ec)
11728{
11729 const rb_iseq_t *iseq = ec->cfp->iseq;
11730 struct rb_iseq_constant_body *body = ((iseq)->body);
11731 _Bool yjit_enabled = rb_yjit_enabled_p();
11732 if (yjit_enabled || mjit_call_p) {
11733 body->total_calls++;
11734 }
11735 else {
11736 return ((VALUE)RUBY_Qundef);
11737 }
11738 jit_func_t func;
11739 if (yjit_enabled) {
11740 if (body->total_calls == rb_yjit_call_threshold()) {
11741 if (!rb_yjit_compile_iseq(iseq, ec)) {
11742 return ((VALUE)RUBY_Qundef);
11743 }
11744 }
11745 if ((func = body->jit_func) == 0) {
11746 return ((VALUE)RUBY_Qundef);
11747 }
11748 }
11749 else if ((__builtin_expect(!!(((uintptr_t)(func = body->jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)), 0))) {
11750 return mjit_check_iseq(ec, iseq, body);
11751 }
11752 return func(ec, ec->cfp);
11753}
11754VALUE rb_invcmp(VALUE, VALUE);
11755struct ar_table_struct;
11756typedef unsigned char ar_hint_t;
11757enum ruby_rhash_flags {
11758 RHASH_PASS_AS_KEYWORDS = ((VALUE)RUBY_FL_USER1),
11759 RHASH_PROC_DEFAULT = ((VALUE)RUBY_FL_USER2),
11760 RHASH_ST_TABLE_FLAG = ((VALUE)RUBY_FL_USER3),
11761 RHASH_AR_TABLE_SIZE_MASK = (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)|((VALUE)RUBY_FL_USER7)),
11762 RHASH_AR_TABLE_SIZE_SHIFT = (((VALUE)RUBY_FL_USHIFT)+4),
11763 RHASH_AR_TABLE_BOUND_MASK = (((VALUE)RUBY_FL_USER8)|((VALUE)RUBY_FL_USER9)|((VALUE)RUBY_FL_USER10)|((VALUE)RUBY_FL_USER11)),
11764 RHASH_AR_TABLE_BOUND_SHIFT = (((VALUE)RUBY_FL_USHIFT)+8),
11765 RHASH_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER12),
11766 RHASH_LEV_SHIFT = (((VALUE)RUBY_FL_USHIFT) + 13),
11767 RHASH_LEV_MAX = 127,
11768};
11769struct RHash {
11770 struct RBasic basic;
11771 union {
11772 st_table *st;
11773 struct ar_table_struct *ar;
11774 } as;
11775 const VALUE ifnone;
11776 union {
11777 ar_hint_t ary[8];
11778 VALUE word;
11779 } ar_hint;
11780};
11781void rb_hash_st_table_set(VALUE hash, st_table *st);
11782VALUE rb_hash_default_value(VALUE hash, VALUE key);
11783VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
11784long rb_dbl_long_hash(double d);
11785st_table *rb_init_identtable(void);
11786VALUE rb_to_hash_type(VALUE obj);
11787VALUE rb_hash_key_str(VALUE);
11788VALUE rb_hash_values(VALUE hash);
11789VALUE rb_hash_rehash(VALUE hash);
11790int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val);
11791VALUE rb_hash_set_pair(VALUE hash, VALUE pair);
11792int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
11793int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
11794int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
11795extern st_table *rb_hash_st_table(VALUE hash);
11796VALUE rb_ident_hash_new_with_size(st_index_t size);
11797static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
11798static inline VALUE RHASH_IFNONE(VALUE h);
11799static inline size_t RHASH_SIZE(VALUE h);
11800static inline _Bool RHASH_EMPTY_P(VALUE h);
11801static inline _Bool RHASH_AR_TABLE_P(VALUE h);
11802static inline _Bool RHASH_ST_TABLE_P(VALUE h);
11803static inline struct ar_table_struct *RHASH_AR_TABLE(VALUE h);
11804static inline st_table *RHASH_ST_TABLE(VALUE h);
11805static inline size_t RHASH_ST_SIZE(VALUE h);
11806static inline void RHASH_ST_CLEAR(VALUE h);
11807static inline _Bool RHASH_TRANSIENT_P(VALUE h);
11808static inline void RHASH_SET_TRANSIENT_FLAG(VALUE h);
11809static inline void RHASH_UNSET_TRANSIENT_FLAG(VALUE h);
11810
11811
11812VALUE rb_hash_delete_entry(VALUE hash, VALUE key);
11813VALUE rb_ident_hash_new(void);
11814int rb_hash_stlike_foreach(VALUE hash, st_foreach_callback_func *func, st_data_t arg);
11815
11816
11817
11818
11819VALUE rb_hash_new_with_size(st_index_t size);
11820VALUE rb_hash_resurrect(VALUE hash);
11821int rb_hash_stlike_lookup(VALUE hash, st_data_t key, st_data_t *pval);
11822VALUE rb_hash_keys(VALUE hash);
11823VALUE rb_hash_has_key(VALUE hash, VALUE key);
11824VALUE rb_hash_compare_by_id_p(VALUE hash);
11825st_table *rb_hash_tbl_raw(VALUE hash, const char *file, int line);
11826
11827
11828VALUE rb_hash_compare_by_id(VALUE hash);
11829static inline _Bool
11830RHASH_AR_TABLE_P(VALUE h)
11831{
11832 return ! RB_FL_TEST_RAW(h, RHASH_ST_TABLE_FLAG);
11833}
11834static inline struct ar_table_struct *
11835RHASH_AR_TABLE(VALUE h)
11836{
11837 return ((struct RHash *)(h))->as.ar;
11838}
11839static inline st_table *
11840RHASH_ST_TABLE(VALUE h)
11841{
11842 return ((struct RHash *)(h))->as.st;
11843}
11844static inline VALUE
11845RHASH_IFNONE(VALUE h)
11846{
11847 return ((struct RHash *)(h))->ifnone;
11848}
11849static inline size_t
11850RHASH_SIZE(VALUE h)
11851{
11852 if (RHASH_AR_TABLE_P(h)) {
11853 return RHASH_AR_TABLE_SIZE_RAW(h);
11854 }
11855 else {
11856 return RHASH_ST_SIZE(h);
11857 }
11858}
11859static inline _Bool
11860RHASH_EMPTY_P(VALUE h)
11861{
11862 return RHASH_SIZE(h) == 0;
11863}
11864static inline _Bool
11865RHASH_ST_TABLE_P(VALUE h)
11866{
11867 return ! RHASH_AR_TABLE_P(h);
11868}
11869static inline size_t
11870RHASH_ST_SIZE(VALUE h)
11871{
11872 return RHASH_ST_TABLE(h)->num_entries;
11873}
11874static inline void
11875RHASH_ST_CLEAR(VALUE h)
11876{
11877 RB_FL_UNSET_RAW(h, RHASH_ST_TABLE_FLAG);
11878 ((struct RHash *)(h))->as.ar = ((void *)0);
11879}
11880static inline unsigned
11881RHASH_AR_TABLE_SIZE_RAW(VALUE h)
11882{
11883 VALUE ret = RB_FL_TEST_RAW(h, RHASH_AR_TABLE_SIZE_MASK);
11884 ret >>= RHASH_AR_TABLE_SIZE_SHIFT;
11885 return (unsigned)ret;
11886}
11887static inline _Bool
11888RHASH_TRANSIENT_P(VALUE h)
11889{
11890 return RB_FL_TEST_RAW(h, RHASH_TRANSIENT_FLAG);
11891}
11892static inline void
11893RHASH_SET_TRANSIENT_FLAG(VALUE h)
11894{
11895 RB_FL_SET_RAW(h, RHASH_TRANSIENT_FLAG);
11896}
11897static inline void
11898RHASH_UNSET_TRANSIENT_FLAG(VALUE h)
11899{
11900 RB_FL_UNSET_RAW(h, RHASH_TRANSIENT_FLAG);
11901}
11902enum rb_int_parse_flags {
11903 RB_INT_PARSE_SIGN = 0x01,
11904 RB_INT_PARSE_UNDERSCORE = 0x02,
11905 RB_INT_PARSE_PREFIX = 0x04,
11906 RB_INT_PARSE_ALL = 0x07,
11907 RB_INT_PARSE_DEFAULT = 0x07,
11908};
11909struct RBignum {
11910 struct RBasic basic;
11911 union {
11912 struct {
11913 size_t len;
11914 unsigned int *digits;
11915 } heap;
11916 unsigned int ary[(8*3/4)];
11917 } as;
11918};
11919extern const char ruby_digitmap[];
11920double rb_big_fdiv_double(VALUE x, VALUE y);
11921VALUE rb_big_uminus(VALUE x);
11922VALUE rb_big_hash(VALUE);
11923VALUE rb_big_odd_p(VALUE);
11924VALUE rb_big_even_p(VALUE);
11925size_t rb_big_size(VALUE);
11926VALUE rb_integer_float_cmp(VALUE x, VALUE y);
11927VALUE rb_integer_float_eq(VALUE x, VALUE y);
11928VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
11929VALUE rb_big_comp(VALUE x);
11930VALUE rb_big_aref(VALUE x, VALUE y);
11931VALUE rb_big_abs(VALUE x);
11932VALUE rb_big_size_m(VALUE big);
11933VALUE rb_big_bit_length(VALUE big);
11934VALUE rb_big_remainder(VALUE x, VALUE y);
11935VALUE rb_big_gt(VALUE x, VALUE y);
11936VALUE rb_big_ge(VALUE x, VALUE y);
11937VALUE rb_big_lt(VALUE x, VALUE y);
11938VALUE rb_big_le(VALUE x, VALUE y);
11939VALUE rb_int_powm(int const argc, VALUE * const argv, VALUE const num);
11940VALUE rb_big_isqrt(VALUE n);
11941static inline _Bool BIGNUM_SIGN(VALUE b);
11942static inline _Bool BIGNUM_POSITIVE_P(VALUE b);
11943static inline _Bool BIGNUM_NEGATIVE_P(VALUE b);
11944static inline void BIGNUM_SET_SIGN(VALUE b, _Bool sign);
11945static inline void BIGNUM_NEGATE(VALUE b);
11946static inline size_t BIGNUM_LEN(VALUE b);
11947static inline unsigned int *BIGNUM_DIGITS(VALUE b);
11948static inline int BIGNUM_LENINT(VALUE b);
11949static inline _Bool BIGNUM_EMBED_P(VALUE b);
11950
11951
11952VALUE rb_big_mul_normal(VALUE x, VALUE y);
11953VALUE rb_big_mul_balance(VALUE x, VALUE y);
11954VALUE rb_big_mul_karatsuba(VALUE x, VALUE y);
11955VALUE rb_big_mul_toom3(VALUE x, VALUE y);
11956VALUE rb_big_sq_fast(VALUE x);
11957VALUE rb_big_divrem_normal(VALUE x, VALUE y);
11958VALUE rb_big2str_poweroftwo(VALUE x, int base);
11959VALUE rb_big2str_generic(VALUE x, int base);
11960VALUE rb_str2big_poweroftwo(VALUE arg, int base, int badcheck);
11961VALUE rb_str2big_normal(VALUE arg, int base, int badcheck);
11962VALUE rb_str2big_karatsuba(VALUE arg, int base, int badcheck);
11963VALUE rb_big_mul_gmp(VALUE x, VALUE y);
11964VALUE rb_big_divrem_gmp(VALUE x, VALUE y);
11965VALUE rb_big2str_gmp(VALUE x, int base);
11966VALUE rb_str2big_gmp(VALUE arg, int base, int badcheck);
11967VALUE rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, int base, int flags);
11968
11969
11970
11971
11972VALUE rb_int128t2big(__int128 n);
11973
11974
11975static inline _Bool
11976BIGNUM_SIGN(VALUE b)
11977{
11978 return RB_FL_TEST_RAW(b, ((VALUE)RUBY_FL_USER1));
11979}
11980static inline _Bool
11981BIGNUM_POSITIVE_P(VALUE b)
11982{
11983 return BIGNUM_SIGN(b);
11984}
11985static inline _Bool
11986BIGNUM_NEGATIVE_P(VALUE b)
11987{
11988 return ! BIGNUM_POSITIVE_P(b);
11989}
11990static inline void
11991BIGNUM_SET_SIGN(VALUE b, _Bool sign)
11992{
11993 if (sign) {
11994 RB_FL_SET_RAW(b, ((VALUE)RUBY_FL_USER1));
11995 }
11996 else {
11997 RB_FL_UNSET_RAW(b, ((VALUE)RUBY_FL_USER1));
11998 }
11999}
12000static inline void
12001BIGNUM_NEGATE(VALUE b)
12002{
12003 RB_FL_REVERSE_RAW(b, ((VALUE)RUBY_FL_USER1));
12004}
12005static inline size_t
12006BIGNUM_LEN(VALUE b)
12007{
12008 if (! BIGNUM_EMBED_P(b)) {
12009 return ((struct RBignum *)(b))->as.heap.len;
12010 }
12011 else {
12012 size_t ret = ((struct RBasic *)(b))->flags;
12013 ret &= (~(~(VALUE)0U << 3) << (((VALUE)RUBY_FL_USHIFT)+3));
12014 ret >>= (((VALUE)RUBY_FL_USHIFT)+3);
12015 return ret;
12016 }
12017}
12018static inline int
12019BIGNUM_LENINT(VALUE b)
12020{
12021 return rb_long2int_inline(BIGNUM_LEN(b));
12022}
12023static inline unsigned int *
12024BIGNUM_DIGITS(VALUE b)
12025{
12026 if (BIGNUM_EMBED_P(b)) {
12027 return ((struct RBignum *)(b))->as.ary;
12028 }
12029 else {
12030 return ((struct RBignum *)(b))->as.heap.digits;
12031 }
12032}
12033static inline _Bool
12034BIGNUM_EMBED_P(VALUE b)
12035{
12036 return RB_FL_TEST_RAW(b, ((VALUE)((VALUE)RUBY_FL_USER2)));
12037}
12038static inline uint16_t ruby_swap16(uint16_t);
12039static inline uint32_t ruby_swap32(uint32_t);
12040static inline uint64_t ruby_swap64(uint64_t);
12041static inline unsigned nlz_int(unsigned x);
12042static inline unsigned nlz_long(unsigned long x);
12043static inline unsigned nlz_long_long(unsigned long long x);
12044static inline unsigned nlz_intptr(uintptr_t x);
12045static inline unsigned nlz_int32(uint32_t x);
12046static inline unsigned nlz_int64(uint64_t x);
12047static inline unsigned nlz_int128(unsigned __int128 x);
12048static inline unsigned rb_popcount32(uint32_t x);
12049static inline unsigned rb_popcount64(uint64_t x);
12050static inline unsigned rb_popcount_intptr(uintptr_t x);
12051static inline int ntz_int32(uint32_t x);
12052static inline int ntz_int64(uint64_t x);
12053static inline int ntz_intptr(uintptr_t x);
12054static inline VALUE RUBY_BIT_ROTL(VALUE, int);
12055static inline VALUE RUBY_BIT_ROTR(VALUE, int);
12056static inline uint16_t
12057ruby_swap16(uint16_t x)
12058{
12059 return __builtin_bswap16(x);
12060}
12061static inline uint32_t
12062ruby_swap32(uint32_t x)
12063{
12064 return __builtin_bswap32(x);
12065}
12066static inline uint64_t
12067ruby_swap64(uint64_t x)
12068{
12069 return __builtin_bswap64(x);
12070}
12071static inline unsigned int
12072nlz_int32(uint32_t x)
12073{
12074 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
12075 return x ? (unsigned int)__builtin_clz(x) : 32;
12076}
12077static inline unsigned int
12078nlz_int64(uint64_t x)
12079{
12080 if (x == 0) {
12081 return 64;
12082 }
12083 else if (sizeof(long) * 8 == 64) {
12084 return (unsigned int)__builtin_clzl((unsigned long)x);
12085 }
12086 else if (sizeof(long long) * 8 == 64) {
12087 return (unsigned int)__builtin_clzll((unsigned long long)x);
12088 }
12089 else {
12090 __builtin_unreachable();
12091 }
12092}
12093static inline unsigned int
12094nlz_int128(unsigned __int128 x)
12095{
12096 uint64_t y = (uint64_t)(x >> 64);
12097 if (x == 0) {
12098 return 128;
12099 }
12100 else if (y == 0) {
12101 return (unsigned int)nlz_int64(x) + 64;
12102 }
12103 else {
12104 return (unsigned int)nlz_int64(y);
12105 }
12106}
12107static inline unsigned int
12108nlz_int(unsigned int x)
12109{
12110 if (sizeof(unsigned int) * 8 == 32) {
12111 return nlz_int32((uint32_t)x);
12112 }
12113 else if (sizeof(unsigned int) * 8 == 64) {
12114 return nlz_int64((uint64_t)x);
12115 }
12116 else {
12117 __builtin_unreachable();
12118 }
12119}
12120static inline unsigned int
12121nlz_long(unsigned long x)
12122{
12123 if (sizeof(unsigned long) * 8 == 32) {
12124 return nlz_int32((uint32_t)x);
12125 }
12126 else if (sizeof(unsigned long) * 8 == 64) {
12127 return nlz_int64((uint64_t)x);
12128 }
12129 else {
12130 __builtin_unreachable();
12131 }
12132}
12133static inline unsigned int
12134nlz_long_long(unsigned long long x)
12135{
12136 if (sizeof(unsigned long long) * 8 == 64) {
12137 return nlz_int64((uint64_t)x);
12138 }
12139 else if (sizeof(unsigned long long) * 8 == 128) {
12140 return nlz_int128((unsigned __int128)x);
12141 }
12142 else {
12143 __builtin_unreachable();
12144 }
12145}
12146static inline unsigned int
12147nlz_intptr(uintptr_t x)
12148{
12149 if (sizeof(uintptr_t) == sizeof(unsigned int)) {
12150 return nlz_int((unsigned int)x);
12151 }
12152 if (sizeof(uintptr_t) == sizeof(unsigned long)) {
12153 return nlz_long((unsigned long)x);
12154 }
12155 if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
12156 return nlz_long_long((unsigned long long)x);
12157 }
12158 else {
12159 __builtin_unreachable();
12160 }
12161}
12162static inline unsigned int
12163rb_popcount32(uint32_t x)
12164{
12165 __extension__ _Static_assert(sizeof(int) * 8 >= 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT >= 32");
12166 return (unsigned int)__builtin_popcount(x);
12167}
12168static inline unsigned int
12169rb_popcount64(uint64_t x)
12170{
12171 if (sizeof(long) * 8 == 64) {
12172 return (unsigned int)__builtin_popcountl((unsigned long)x);
12173 }
12174 else if (sizeof(long long) * 8 == 64) {
12175 return (unsigned int)__builtin_popcountll((unsigned long long)x);
12176 }
12177 else {
12178 __builtin_unreachable();
12179 }
12180}
12181static inline unsigned int
12182rb_popcount_intptr(uintptr_t x)
12183{
12184 if (sizeof(uintptr_t) * 8 == 64) {
12185 return rb_popcount64((uint64_t)x);
12186 }
12187 else if (sizeof(uintptr_t) * 8 == 32) {
12188 return rb_popcount32((uint32_t)x);
12189 }
12190 else {
12191 __builtin_unreachable();
12192 }
12193}
12194static inline int
12195ntz_int32(uint32_t x)
12196{
12197 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
12198 return x ? (unsigned)__builtin_ctz(x) : 32;
12199}
12200static inline int
12201ntz_int64(uint64_t x)
12202{
12203 if (x == 0) {
12204 return 64;
12205 }
12206 else if (sizeof(long) * 8 == 64) {
12207 return (unsigned)__builtin_ctzl((unsigned long)x);
12208 }
12209 else if (sizeof(long long) * 8 == 64) {
12210 return (unsigned)__builtin_ctzll((unsigned long long)x);
12211 }
12212 else {
12213 __builtin_unreachable();
12214 }
12215}
12216static inline int
12217ntz_intptr(uintptr_t x)
12218{
12219 if (sizeof(uintptr_t) * 8 == 64) {
12220 return ntz_int64((uint64_t)x);
12221 }
12222 else if (sizeof(uintptr_t) * 8 == 32) {
12223 return ntz_int32((uint32_t)x);
12224 }
12225 else {
12226 __builtin_unreachable();
12227 }
12228}
12229static inline VALUE
12230RUBY_BIT_ROTL(VALUE v, int n)
12231{
12232 const int m = (sizeof(VALUE) * 8) - 1;
12233 return (v << (n & m)) | (v >> (-n & m));
12234}
12235static inline VALUE
12236RUBY_BIT_ROTR(VALUE v, int n)
12237{
12238 const int m = (sizeof(VALUE) * 8) - 1;
12239 return (v << (-n & m)) | (v >> (n & m));
12240}
12241VALUE rb_int128t2big(__int128 n);
12242static inline long rb_overflowed_fix_to_int(long x);
12243static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
12244static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
12245static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
12246static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
12247static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
12248static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
12249static inline _Bool FIXNUM_POSITIVE_P(VALUE num);
12250static inline _Bool FIXNUM_NEGATIVE_P(VALUE num);
12251static inline _Bool FIXNUM_ZERO_P(VALUE num);
12252static inline long
12253rb_overflowed_fix_to_int(long x)
12254{
12255 return (long)((unsigned long)(x >> 1) ^ (1LU << (8 * 8 - 1)));
12256}
12257static inline VALUE
12258rb_fix_plus_fix(VALUE x, VALUE y)
12259{
12260 long lz;
12261 if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
12262 return rb_int2big(rb_overflowed_fix_to_int(lz));
12263 }
12264 else {
12265 return (VALUE)lz;
12266 }
12267}
12268static inline VALUE
12269rb_fix_minus_fix(VALUE x, VALUE y)
12270{
12271 long lz;
12272 if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
12273 return rb_int2big(rb_overflowed_fix_to_int(lz));
12274 }
12275 else {
12276 return (VALUE)lz;
12277 }
12278}
12279static inline VALUE
12280rb_fix_mul_fix(VALUE x, VALUE y)
12281{
12282 long lx = rb_fix2long(x);
12283 long ly = rb_fix2long(y);
12284 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));
12285}
12286static inline void
12287rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
12288{
12289 long x = rb_fix2long(a);
12290 long y = rb_fix2long(b);
12291 long div, mod;
12292 if (x == ((-0x7fffffffffffffffL -1L) / 2) && y == -1) {
12293 if (divp) *divp = rb_long2num_inline(-((-0x7fffffffffffffffL -1L) / 2));
12294 if (modp) *modp = RB_INT2FIX(0);
12295 return;
12296 }
12297 div = x / y;
12298 mod = x % y;
12299 if (y > 0 ? mod < 0 : mod > 0) {
12300 mod += y;
12301 div -= 1;
12302 }
12303 if (divp) *divp = RB_INT2FIX(div);
12304 if (modp) *modp = RB_INT2FIX(mod);
12305}
12306static inline VALUE
12307rb_fix_div_fix(VALUE x, VALUE y)
12308{
12309 VALUE div;
12310 rb_fix_divmod_fix(x, y, &div, ((void *)0));
12311 return div;
12312}
12313static inline VALUE
12314rb_fix_mod_fix(VALUE x, VALUE y)
12315{
12316 VALUE mod;
12317 rb_fix_divmod_fix(x, y, ((void *)0), &mod);
12318 return mod;
12319}
12320static inline _Bool
12321FIXNUM_POSITIVE_P(VALUE num)
12322{
12323 return (long)num > (long)__builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12324}
12325static inline _Bool
12326FIXNUM_NEGATIVE_P(VALUE num)
12327{
12328 return (long)num < 0;
12329}
12330static inline _Bool
12331FIXNUM_ZERO_P(VALUE num)
12332{
12333 return num == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12334}
12335enum ruby_num_rounding_mode {
12336 RUBY_NUM_ROUND_HALF_UP,
12337 RUBY_NUM_ROUND_HALF_EVEN,
12338 RUBY_NUM_ROUND_HALF_DOWN,
12339 RUBY_NUM_ROUND_DEFAULT = RUBY_NUM_ROUND_HALF_UP,
12340};
12341typedef double rb_float_value_type;
12342struct RFloat {
12343 struct RBasic basic;
12344 rb_float_value_type float_value;
12345};
12346int rb_num_to_uint(VALUE val, unsigned int *ret);
12347VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl);
12348double ruby_float_step_size(double beg, double end, double unit, int excl);
12349int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl, int allow_endless);
12350int rb_num_negative_p(VALUE);
12351VALUE rb_int_succ(VALUE num);
12352VALUE rb_float_uminus(VALUE num);
12353VALUE rb_int_plus(VALUE x, VALUE y);
12354VALUE rb_float_plus(VALUE x, VALUE y);
12355VALUE rb_int_minus(VALUE x, VALUE y);
12356VALUE rb_float_minus(VALUE x, VALUE y);
12357VALUE rb_int_mul(VALUE x, VALUE y);
12358VALUE rb_float_mul(VALUE x, VALUE y);
12359VALUE rb_float_div(VALUE x, VALUE y);
12360VALUE rb_int_idiv(VALUE x, VALUE y);
12361VALUE rb_int_modulo(VALUE x, VALUE y);
12362VALUE rb_int2str(VALUE num, int base);
12363VALUE rb_fix_plus(VALUE x, VALUE y);
12364VALUE rb_int_gt(VALUE x, VALUE y);
12365VALUE rb_float_gt(VALUE x, VALUE y);
12366VALUE rb_int_ge(VALUE x, VALUE y);
12367enum ruby_num_rounding_mode rb_num_get_rounding_option(VALUE opts);
12368double rb_int_fdiv_double(VALUE x, VALUE y);
12369VALUE rb_int_pow(VALUE x, VALUE y);
12370VALUE rb_float_pow(VALUE x, VALUE y);
12371VALUE rb_int_cmp(VALUE x, VALUE y);
12372VALUE rb_int_equal(VALUE x, VALUE y);
12373VALUE rb_int_divmod(VALUE x, VALUE y);
12374VALUE rb_int_and(VALUE x, VALUE y);
12375VALUE rb_int_lshift(VALUE x, VALUE y);
12376VALUE rb_int_div(VALUE x, VALUE y);
12377int rb_int_positive_p(VALUE num);
12378int rb_int_negative_p(VALUE num);
12379VALUE rb_check_integer_type(VALUE);
12380VALUE rb_num_pow(VALUE x, VALUE y);
12381VALUE rb_float_ceil(VALUE num, int ndigits);
12382VALUE rb_float_floor(VALUE x, int ndigits);
12383VALUE rb_float_abs(VALUE flt);
12384static inline VALUE rb_num_compare_with_zero(VALUE num, ID mid);
12385static inline int rb_num_positive_int_p(VALUE num);
12386static inline int rb_num_negative_int_p(VALUE num);
12387static inline double rb_float_flonum_value(VALUE v);
12388static inline double rb_float_noflonum_value(VALUE v);
12389static inline double rb_float_value_inline(VALUE v);
12390static inline VALUE rb_float_new_inline(double d);
12391static inline _Bool INT_POSITIVE_P(VALUE num);
12392static inline _Bool INT_NEGATIVE_P(VALUE num);
12393static inline _Bool FLOAT_ZERO_P(VALUE num);
12394
12395
12396
12397
12398
12399
12400VALUE rb_flo_div_flo(VALUE x, VALUE y);
12401double ruby_float_mod(double x, double y);
12402VALUE rb_float_equal(VALUE x, VALUE y);
12403int rb_float_cmp(VALUE x, VALUE y);
12404VALUE rb_float_eql(VALUE x, VALUE y);
12405VALUE rb_fix_aref(VALUE fix, VALUE idx);
12406VALUE rb_int_zero_p(VALUE num);
12407VALUE rb_int_even_p(VALUE num);
12408VALUE rb_int_odd_p(VALUE num);
12409VALUE rb_int_abs(VALUE num);
12410VALUE rb_int_bit_length(VALUE num);
12411VALUE rb_int_uminus(VALUE num);
12412VALUE rb_int_comp(VALUE num);
12413
12414
12415static inline _Bool
12416INT_POSITIVE_P(VALUE num)
12417{
12418 if (RB_FIXNUM_P(num)) {
12419 return FIXNUM_POSITIVE_P(num);
12420 }
12421 else {
12422 return BIGNUM_POSITIVE_P(num);
12423 }
12424}
12425static inline _Bool
12426INT_NEGATIVE_P(VALUE num)
12427{
12428 if (RB_FIXNUM_P(num)) {
12429 return FIXNUM_NEGATIVE_P(num);
12430 }
12431 else {
12432 return BIGNUM_NEGATIVE_P(num);
12433 }
12434}
12435static inline _Bool
12436FLOAT_ZERO_P(VALUE num)
12437{
12438 return rb_float_value_inline(num) == 0.0;
12439}
12440static inline VALUE
12441rb_num_compare_with_zero(VALUE num, ID mid)
12442{
12443 VALUE zero = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12444 VALUE r = rb_check_funcall(num, mid, 1, &zero);
12445 if (r == ((VALUE)RUBY_Qundef)) {
12446 rb_cmperr(num, zero);
12447 }
12448 return r;
12449}
12450static inline int
12451rb_num_positive_int_p(VALUE num)
12452{
12453 const ID mid = '>';
12454 if (RB_FIXNUM_P(num)) {
12455 if (rb_method_basic_definition_p(rb_cInteger, mid))
12456 return FIXNUM_POSITIVE_P(num);
12457 }
12458 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12459 if (rb_method_basic_definition_p(rb_cInteger, mid))
12460 return BIGNUM_POSITIVE_P(num);
12461 }
12462 return RB_TEST(rb_num_compare_with_zero(num, mid));
12463}
12464static inline int
12465rb_num_negative_int_p(VALUE num)
12466{
12467 const ID mid = '<';
12468 if (RB_FIXNUM_P(num)) {
12469 if (rb_method_basic_definition_p(rb_cInteger, mid))
12470 return FIXNUM_NEGATIVE_P(num);
12471 }
12472 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12473 if (rb_method_basic_definition_p(rb_cInteger, mid))
12474 return BIGNUM_NEGATIVE_P(num);
12475 }
12476 return RB_TEST(rb_num_compare_with_zero(num, mid));
12477}
12478static inline double
12479rb_float_flonum_value(VALUE v)
12480{
12481 if (v != (VALUE)0x8000000000000002) {
12482 union {
12483 double d;
12484 VALUE v;
12485 } t;
12486 VALUE b63 = (v >> 63);
12487 t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~(VALUE)0x03), 3);
12488 return t.d;
12489 }
12490 return 0.0;
12491}
12492static inline double
12493rb_float_noflonum_value(VALUE v)
12494{
12495 return ((struct RFloat *)(v))->float_value;
12496}
12497static inline double
12498rb_float_value_inline(VALUE v)
12499{
12500 if (RB_FLONUM_P(v)) {
12501 return rb_float_flonum_value(v);
12502 }
12503 return rb_float_noflonum_value(v);
12504}
12505static inline VALUE
12506rb_float_new_inline(double d)
12507{
12508 union {
12509 double d;
12510 VALUE v;
12511 } t;
12512 int bits;
12513 t.d = d;
12514 bits = (int)((VALUE)(t.v >> 60) & 0x7);
12515 if (t.v != 0x3000000000000000 &&
12516 !((bits-3) & ~0x01)) {
12517 return (RUBY_BIT_ROTL(t.v, 3) & ~(VALUE)0x01) | 0x02;
12518 }
12519 else if (t.v == (VALUE)0) {
12520 return 0x8000000000000002;
12521 }
12522 return rb_float_new_in_heap(d);
12523}
12524int ruby_fill_random_bytes(void *, size_t, int);
12525enum {
12526 RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
12527 RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
12528 RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1),
12529 RSTRUCT_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER3),
12530};
12531struct RStruct {
12532 struct RBasic basic;
12533 union {
12534 struct {
12535 long len;
12536 const VALUE *ptr;
12537 } heap;
12538 const VALUE ary[RSTRUCT_EMBED_LEN_MAX];
12539 } as;
12540};
12541VALUE rb_struct_init_copy(VALUE copy, VALUE s);
12542VALUE rb_struct_lookup(VALUE s, VALUE idx);
12543VALUE rb_struct_s_keyword_init(VALUE klass);
12544static inline const VALUE *rb_struct_const_heap_ptr(VALUE st);
12545static inline _Bool RSTRUCT_TRANSIENT_P(VALUE st);
12546static inline void RSTRUCT_TRANSIENT_SET(VALUE st);
12547static inline void RSTRUCT_TRANSIENT_UNSET(VALUE st);
12548static inline long RSTRUCT_EMBED_LEN(VALUE st);
12549static inline long internal_RSTRUCT_LEN(VALUE st);
12550static inline int RSTRUCT_LENINT(VALUE st);
12551static inline const VALUE *RSTRUCT_CONST_PTR(VALUE st);
12552static inline void internal_RSTRUCT_SET(VALUE st, long k, VALUE v);
12553static inline VALUE internal_RSTRUCT_GET(VALUE st, long k);
12554static inline _Bool
12555RSTRUCT_TRANSIENT_P(VALUE st)
12556{
12557 return RB_FL_TEST_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12558}
12559static inline void
12560RSTRUCT_TRANSIENT_SET(VALUE st)
12561{
12562 RB_FL_SET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12563}
12564static inline void
12565RSTRUCT_TRANSIENT_UNSET(VALUE st)
12566{
12567 RB_FL_UNSET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12568}
12569static inline long
12570RSTRUCT_EMBED_LEN(VALUE st)
12571{
12572 long ret = RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK);
12573 ret >>= RSTRUCT_EMBED_LEN_SHIFT;
12574 return ret;
12575}
12576static inline long
12577internal_RSTRUCT_LEN(VALUE st)
12578{
12579 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12580 return RSTRUCT_EMBED_LEN(st);
12581 }
12582 else {
12583 return ((struct RStruct *)(st))->as.heap.len;
12584 }
12585}
12586static inline int
12587RSTRUCT_LENINT(VALUE st)
12588{
12589 return rb_long2int_inline(internal_RSTRUCT_LEN(st));
12590}
12591static inline const VALUE *
12592RSTRUCT_CONST_PTR(VALUE st)
12593{
12594 const struct RStruct *p = ((struct RStruct *)(st));
12595 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12596 return p->as.ary;
12597 }
12598 else {
12599 return p->as.heap.ptr;
12600 }
12601}
12602static inline void
12603internal_RSTRUCT_SET(VALUE st, long k, VALUE v)
12604{
12605 rb_obj_write((VALUE)(st), __extension__({
12606 ;
12607 ; __typeof__((VALUE *)(&RSTRUCT_CONST_PTR(st)[k])) unaligned_member_access_result = ((VALUE *)(&RSTRUCT_CONST_PTR(st)[k]));
12608 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.2/internal/struct.h", 137);
12609}
12610static inline VALUE
12611internal_RSTRUCT_GET(VALUE st, long k)
12612{
12613 return RSTRUCT_CONST_PTR(st)[k];
12614}
12615static inline const VALUE *
12616rb_struct_const_heap_ptr(VALUE st)
12617{
12618 return ((struct RStruct *)(st))->as.heap.ptr;
12619}
12620struct gen_ivtbl {
12621 uint32_t numiv;
12622 VALUE ivptr[];
12623};
12624int rb_ivar_generic_ivtbl_lookup(VALUE obj, struct gen_ivtbl **);
12625enum ruby_vminsn_type {
12626 YARVINSN_nop,
12627 YARVINSN_getlocal,
12628 YARVINSN_setlocal,
12629 YARVINSN_getblockparam,
12630 YARVINSN_setblockparam,
12631 YARVINSN_getblockparamproxy,
12632 YARVINSN_getspecial,
12633 YARVINSN_setspecial,
12634 YARVINSN_getinstancevariable,
12635 YARVINSN_setinstancevariable,
12636 YARVINSN_getclassvariable,
12637 YARVINSN_setclassvariable,
12638 YARVINSN_opt_getconstant_path,
12639 YARVINSN_getconstant,
12640 YARVINSN_setconstant,
12641 YARVINSN_getglobal,
12642 YARVINSN_setglobal,
12643 YARVINSN_putnil,
12644 YARVINSN_putself,
12645 YARVINSN_putobject,
12646 YARVINSN_putspecialobject,
12647 YARVINSN_putstring,
12648 YARVINSN_concatstrings,
12649 YARVINSN_anytostring,
12650 YARVINSN_toregexp,
12651 YARVINSN_intern,
12652 YARVINSN_newarray,
12653 YARVINSN_newarraykwsplat,
12654 YARVINSN_duparray,
12655 YARVINSN_duphash,
12656 YARVINSN_expandarray,
12657 YARVINSN_concatarray,
12658 YARVINSN_splatarray,
12659 YARVINSN_newhash,
12660 YARVINSN_newrange,
12661 YARVINSN_pop,
12662 YARVINSN_dup,
12663 YARVINSN_dupn,
12664 YARVINSN_swap,
12665 YARVINSN_opt_reverse,
12666 YARVINSN_topn,
12667 YARVINSN_setn,
12668 YARVINSN_adjuststack,
12669 YARVINSN_defined,
12670 YARVINSN_checkmatch,
12671 YARVINSN_checkkeyword,
12672 YARVINSN_checktype,
12673 YARVINSN_defineclass,
12674 YARVINSN_definemethod,
12675 YARVINSN_definesmethod,
12676 YARVINSN_send,
12677 YARVINSN_opt_send_without_block,
12678 YARVINSN_objtostring,
12679 YARVINSN_opt_str_freeze,
12680 YARVINSN_opt_nil_p,
12681 YARVINSN_opt_str_uminus,
12682 YARVINSN_opt_newarray_max,
12683 YARVINSN_opt_newarray_min,
12684 YARVINSN_invokesuper,
12685 YARVINSN_invokeblock,
12686 YARVINSN_leave,
12687 YARVINSN_throw,
12688 YARVINSN_jump,
12689 YARVINSN_branchif,
12690 YARVINSN_branchunless,
12691 YARVINSN_branchnil,
12692 YARVINSN_once,
12693 YARVINSN_opt_case_dispatch,
12694 YARVINSN_opt_plus,
12695 YARVINSN_opt_minus,
12696 YARVINSN_opt_mult,
12697 YARVINSN_opt_div,
12698 YARVINSN_opt_mod,
12699 YARVINSN_opt_eq,
12700 YARVINSN_opt_neq,
12701 YARVINSN_opt_lt,
12702 YARVINSN_opt_le,
12703 YARVINSN_opt_gt,
12704 YARVINSN_opt_ge,
12705 YARVINSN_opt_ltlt,
12706 YARVINSN_opt_and,
12707 YARVINSN_opt_or,
12708 YARVINSN_opt_aref,
12709 YARVINSN_opt_aset,
12710 YARVINSN_opt_aset_with,
12711 YARVINSN_opt_aref_with,
12712 YARVINSN_opt_length,
12713 YARVINSN_opt_size,
12714 YARVINSN_opt_empty_p,
12715 YARVINSN_opt_succ,
12716 YARVINSN_opt_not,
12717 YARVINSN_opt_regexpmatch2,
12718 YARVINSN_invokebuiltin,
12719 YARVINSN_opt_invokebuiltin_delegate,
12720 YARVINSN_opt_invokebuiltin_delegate_leave,
12721 YARVINSN_getlocal_WC_0,
12722 YARVINSN_getlocal_WC_1,
12723 YARVINSN_setlocal_WC_0,
12724 YARVINSN_setlocal_WC_1,
12725 YARVINSN_putobject_INT2FIX_0_,
12726 YARVINSN_putobject_INT2FIX_1_,
12727 YARVINSN_trace_nop,
12728 YARVINSN_trace_getlocal,
12729 YARVINSN_trace_setlocal,
12730 YARVINSN_trace_getblockparam,
12731 YARVINSN_trace_setblockparam,
12732 YARVINSN_trace_getblockparamproxy,
12733 YARVINSN_trace_getspecial,
12734 YARVINSN_trace_setspecial,
12735 YARVINSN_trace_getinstancevariable,
12736 YARVINSN_trace_setinstancevariable,
12737 YARVINSN_trace_getclassvariable,
12738 YARVINSN_trace_setclassvariable,
12739 YARVINSN_trace_opt_getconstant_path,
12740 YARVINSN_trace_getconstant,
12741 YARVINSN_trace_setconstant,
12742 YARVINSN_trace_getglobal,
12743 YARVINSN_trace_setglobal,
12744 YARVINSN_trace_putnil,
12745 YARVINSN_trace_putself,
12746 YARVINSN_trace_putobject,
12747 YARVINSN_trace_putspecialobject,
12748 YARVINSN_trace_putstring,
12749 YARVINSN_trace_concatstrings,
12750 YARVINSN_trace_anytostring,
12751 YARVINSN_trace_toregexp,
12752 YARVINSN_trace_intern,
12753 YARVINSN_trace_newarray,
12754 YARVINSN_trace_newarraykwsplat,
12755 YARVINSN_trace_duparray,
12756 YARVINSN_trace_duphash,
12757 YARVINSN_trace_expandarray,
12758 YARVINSN_trace_concatarray,
12759 YARVINSN_trace_splatarray,
12760 YARVINSN_trace_newhash,
12761 YARVINSN_trace_newrange,
12762 YARVINSN_trace_pop,
12763 YARVINSN_trace_dup,
12764 YARVINSN_trace_dupn,
12765 YARVINSN_trace_swap,
12766 YARVINSN_trace_opt_reverse,
12767 YARVINSN_trace_topn,
12768 YARVINSN_trace_setn,
12769 YARVINSN_trace_adjuststack,
12770 YARVINSN_trace_defined,
12771 YARVINSN_trace_checkmatch,
12772 YARVINSN_trace_checkkeyword,
12773 YARVINSN_trace_checktype,
12774 YARVINSN_trace_defineclass,
12775 YARVINSN_trace_definemethod,
12776 YARVINSN_trace_definesmethod,
12777 YARVINSN_trace_send,
12778 YARVINSN_trace_opt_send_without_block,
12779 YARVINSN_trace_objtostring,
12780 YARVINSN_trace_opt_str_freeze,
12781 YARVINSN_trace_opt_nil_p,
12782 YARVINSN_trace_opt_str_uminus,
12783 YARVINSN_trace_opt_newarray_max,
12784 YARVINSN_trace_opt_newarray_min,
12785 YARVINSN_trace_invokesuper,
12786 YARVINSN_trace_invokeblock,
12787 YARVINSN_trace_leave,
12788 YARVINSN_trace_throw,
12789 YARVINSN_trace_jump,
12790 YARVINSN_trace_branchif,
12791 YARVINSN_trace_branchunless,
12792 YARVINSN_trace_branchnil,
12793 YARVINSN_trace_once,
12794 YARVINSN_trace_opt_case_dispatch,
12795 YARVINSN_trace_opt_plus,
12796 YARVINSN_trace_opt_minus,
12797 YARVINSN_trace_opt_mult,
12798 YARVINSN_trace_opt_div,
12799 YARVINSN_trace_opt_mod,
12800 YARVINSN_trace_opt_eq,
12801 YARVINSN_trace_opt_neq,
12802 YARVINSN_trace_opt_lt,
12803 YARVINSN_trace_opt_le,
12804 YARVINSN_trace_opt_gt,
12805 YARVINSN_trace_opt_ge,
12806 YARVINSN_trace_opt_ltlt,
12807 YARVINSN_trace_opt_and,
12808 YARVINSN_trace_opt_or,
12809 YARVINSN_trace_opt_aref,
12810 YARVINSN_trace_opt_aset,
12811 YARVINSN_trace_opt_aset_with,
12812 YARVINSN_trace_opt_aref_with,
12813 YARVINSN_trace_opt_length,
12814 YARVINSN_trace_opt_size,
12815 YARVINSN_trace_opt_empty_p,
12816 YARVINSN_trace_opt_succ,
12817 YARVINSN_trace_opt_not,
12818 YARVINSN_trace_opt_regexpmatch2,
12819 YARVINSN_trace_invokebuiltin,
12820 YARVINSN_trace_opt_invokebuiltin_delegate,
12821 YARVINSN_trace_opt_invokebuiltin_delegate_leave,
12822 YARVINSN_trace_getlocal_WC_0,
12823 YARVINSN_trace_getlocal_WC_1,
12824 YARVINSN_trace_setlocal_WC_0,
12825 YARVINSN_trace_setlocal_WC_1,
12826 YARVINSN_trace_putobject_INT2FIX_0_,
12827 YARVINSN_trace_putobject_INT2FIX_1_,
12828 VM_INSTRUCTION_SIZE
12829};
12830extern rb_method_definition_t *rb_method_definition_create(rb_method_type_t type, ID mid);
12831extern void rb_method_definition_set(const rb_method_entry_t *me, rb_method_definition_t *def, void *opts);
12832extern int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2);
12833extern VALUE rb_make_no_method_exception(VALUE exc, VALUE format, VALUE obj,
12834 int argc, const VALUE *argv, int priv);
12835static rb_control_frame_t *vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
12836static VALUE
12837ruby_vm_special_exception_copy(VALUE exc)
12838{
12839 VALUE e = rb_obj_alloc(rb_class_real(RBASIC_CLASS(exc)));
12840 rb_obj_copy_ivar(e, exc);
12841 return e;
12842}
12843__attribute__((__noreturn__)) static void ec_stack_overflow(rb_execution_context_t *ec, int);
12844static void
12845ec_stack_overflow(rb_execution_context_t *ec, int setup)
12846{
12847 VALUE mesg = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_sysstack];
12848 ec->raised_flag = RAISED_STACKOVERFLOW;
12849 if (setup) {
12850 VALUE at = rb_ec_backtrace_object(ec);
12851 mesg = ruby_vm_special_exception_copy(mesg);
12852 rb_ivar_set(mesg, idBt, at);
12853 rb_ivar_set(mesg, idBt_locations, at);
12854 }
12855 ec->errinfo = mesg;
12856 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12857}
12858__attribute__((__noreturn__)) static void vm_stackoverflow(void);
12859__attribute__((__noinline__)) static __attribute__((__cold__)) void vm_stackoverflow(void);
12860static void
12861vm_stackoverflow(void)
12862{
12863 ec_stack_overflow(rb_current_execution_context(1), 1);
12864}
12865__attribute__((__noreturn__)) static void rb_ec_stack_overflow(rb_execution_context_t *ec, int crit);
12866static void
12867rb_ec_stack_overflow(rb_execution_context_t *ec, int crit)
12868{
12869 if (rb_during_gc()) {
12870 rb_bug("system stack overflow during GC. Faulty native extension?");
12871 }
12872 if (crit) {
12873 ec->raised_flag = RAISED_STACKOVERFLOW;
12874 ec->errinfo = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_stackfatal];
12875 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12876 }
12877 ec_stack_overflow(ec, 1);
12878}
12879__extension__ _Static_assert((-2) == -2, "VM_ENV_DATA_INDEX_ME_CREF" ": " "VM_ENV_DATA_INDEX_ME_CREF == -2");
12880__extension__ _Static_assert((-1) == -1, "VM_ENV_DATA_INDEX_SPECVAL" ": " "VM_ENV_DATA_INDEX_SPECVAL == -1");
12881__extension__ _Static_assert(( 0) == -0, "VM_ENV_DATA_INDEX_FLAGS" ": " "VM_ENV_DATA_INDEX_FLAGS == -0");
12882static void
12883vm_push_frame(rb_execution_context_t *ec,
12884 const rb_iseq_t *iseq,
12885 VALUE type,
12886 VALUE self,
12887 VALUE specval,
12888 VALUE cref_or_me,
12889 const VALUE *pc,
12890 VALUE *sp,
12891 int local_size,
12892 int stack_max)
12893{
12894 rb_control_frame_t *const cfp = ((ec->cfp)-1);
12895 ;
12896 ((void)0);
12897 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);
12898 ;
12899 for (int i=0; i < local_size; i++) {
12900 *sp++ = ((VALUE)RUBY_Qnil);
12901 }
12902 *sp++ = cref_or_me;
12903 *sp++ = specval ;
12904 *sp++ = type;
12905 *cfp = (const struct rb_control_frame_struct) {
12906 .pc = pc,
12907 .sp = sp,
12908 .iseq = iseq,
12909 .self = self,
12910 .ep = sp - 1,
12911 .block_code = ((void *)0),
12912 .__bp__ = sp,
12913 .jit_return = ((void *)0)
12914 };
12915 ec->cfp = cfp;
12916 if (0 == 2) {
12917 rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12918 }
12919 ;
12920}static inline
12921void
12922rb_vm_pop_frame_no_int(rb_execution_context_t *ec)
12923{
12924 rb_control_frame_t *cfp = ec->cfp;
12925 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12926 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12927 ec->cfp = ((cfp)+1);
12928}
12929static inline int
12930vm_pop_frame(rb_execution_context_t *ec, rb_control_frame_t *cfp, const VALUE *ep)
12931{
12932 VALUE flags = ep[( 0)];
12933 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12934 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12935 rb_vm_check_ints(ec);
12936 ec->cfp = ((cfp)+1);
12937 return flags & VM_FRAME_FLAG_FINISH;
12938}
12939static void
12940rb_vm_pop_frame(rb_execution_context_t *ec)
12941{
12942 vm_pop_frame(ec, ec->cfp, ec->cfp->ep);
12943}static inline
12944VALUE
12945rb_vm_push_frame_fname(rb_execution_context_t *ec, VALUE fname)
12946{
12947 VALUE tmpbuf = rb_imemo_tmpbuf_auto_free_pointer();
12948 void *ptr = ruby_xcalloc(sizeof(struct rb_iseq_constant_body) + sizeof(struct rb_iseq_struct), 1);
12949 rb_imemo_tmpbuf_set_ptr(tmpbuf, ptr);
12950 struct rb_iseq_struct *dmy_iseq = (struct rb_iseq_struct *)ptr;
12951 struct rb_iseq_constant_body *dmy_body = (struct rb_iseq_constant_body *)&dmy_iseq[1];
12952 dmy_iseq->body = dmy_body;
12953 dmy_body->type = ISEQ_TYPE_TOP;
12954 dmy_body->location.pathobj = fname;
12955 vm_push_frame(ec,
12956 dmy_iseq,
12957 VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH,
12958 ec->cfp->self,
12959 0,
12960 ((VALUE)RUBY_Qfalse),
12961 ((void *)0),
12962 ec->cfp->sp,
12963 0,
12964 0);
12965 return tmpbuf;
12966}
12967static inline VALUE
12968rb_arity_error_new(int argc, int min, int max)
12969{
12970 VALUE err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d", argc, min);
12971 if (min == max) {
12972 }
12973 else if (max == (-1)) {
12974 ((__builtin_constant_p("+") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((err_mess), ("+")));
12975 }
12976 else {
12977 rb_str_catf(err_mess, "..%d", max);
12978 }
12979 ((__builtin_constant_p(")") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((err_mess), (")")));
12980 return rb_exc_new_str(rb_eArgError, err_mess);
12981}
12982static void
12983rb_error_arity(int argc, int min, int max)
12984{
12985 rb_exc_raise(rb_arity_error_new(argc, min, max));
12986}
12987__attribute__((__noinline__)) static void vm_env_write_slowpath(const VALUE *ep, int index, VALUE v);
12988static void
12989vm_env_write_slowpath(const VALUE *ep, int index, VALUE v)
12990{
12991 rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep));
12992 VM_FORCE_WRITE(&ep[index], v);
12993 VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED);
12994 ((void)0);
12995}
12996static inline void
12997vm_env_write(const VALUE *ep, int index, VALUE v)
12998{
12999 VALUE flags = ep[( 0)];
13000 if ((__builtin_expect(!!((flags & VM_ENV_FLAG_WB_REQUIRED) == 0), 1))) {
13001 VM_STACK_ENV_WRITE(ep, index, v);
13002 }
13003 else {
13004 vm_env_write_slowpath(ep, index, v);
13005 }
13006}
13007static VALUE
13008rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler)
13009{
13010 if (block_handler == 0) {
13011 return ((VALUE)RUBY_Qnil);
13012 }
13013 else {
13014 switch (vm_block_handler_type(block_handler)) {
13015 case block_handler_type_iseq:
13016 case block_handler_type_ifunc:
13017 return rb_vm_make_proc(ec, VM_BH_TO_CAPT_BLOCK(block_handler), rb_cProc);
13018 case block_handler_type_symbol:
13019 return rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
13020 case block_handler_type_proc:
13021 return VM_BH_TO_PROC(block_handler);
13022 default:
13023 __builtin_unreachable();
13024 }
13025 }
13026}
13027static inline struct vm_svar *
13028lep_svar(const rb_execution_context_t *ec, const VALUE *lep)
13029{
13030 VALUE svar;
13031 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
13032 svar = lep[(-2)];
13033 }
13034 else {
13035 svar = ec->root_svar;
13036 }
13037 ((void)0);
13038 return (struct vm_svar *)svar;
13039}
13040static inline void
13041lep_svar_write(const rb_execution_context_t *ec, const VALUE *lep, const struct vm_svar *svar)
13042{
13043 ((void)0);
13044 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
13045 vm_env_write(lep, (-2), (VALUE)svar);
13046 }
13047 else {
13048 rb_obj_write((VALUE)(rb_ec_thread_ptr(ec)->self), __extension__({
13049 ;
13050 ; __typeof__((VALUE *)(&ec->root_svar)) unaligned_member_access_result = ((VALUE *)(&ec->root_svar));
13051 ; unaligned_member_access_result; }), (VALUE)(svar), "../ruby-3.2.2/vm_insnhelper.c", 586);
13052 }
13053}
13054static VALUE
13055lep_svar_get(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key)
13056{
13057 const struct vm_svar *svar = lep_svar(ec, lep);
13058 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) return ((VALUE)RUBY_Qnil);
13059 switch (key) {
13060 case VM_SVAR_LASTLINE:
13061 return svar->lastline;
13062 case VM_SVAR_BACKREF:
13063 return svar->backref;
13064 default: {
13065 const VALUE ary = svar->others;
13066 if (RB_NIL_P(ary)) {
13067 return ((VALUE)RUBY_Qnil);
13068 }
13069 else {
13070 return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START);
13071 }
13072 }
13073 }
13074}
13075static struct vm_svar *
13076svar_new(VALUE obj)
13077{
13078 return (struct vm_svar *)rb_imemo_new(imemo_svar, ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), obj);
13079}
13080static void
13081lep_svar_set(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, VALUE val)
13082{
13083 struct vm_svar *svar = lep_svar(ec, lep);
13084 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) {
13085 lep_svar_write(ec, lep, svar = svar_new((VALUE)svar));
13086 }
13087 switch (key) {
13088 case VM_SVAR_LASTLINE:
13089 rb_obj_write((VALUE)(svar), __extension__({
13090 ;
13091 ; __typeof__((VALUE *)(&svar->lastline)) unaligned_member_access_result = ((VALUE *)(&svar->lastline));
13092 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.2/vm_insnhelper.c", 632);
13093 return;
13094 case VM_SVAR_BACKREF:
13095 rb_obj_write((VALUE)(svar), __extension__({
13096 ;
13097 ; __typeof__((VALUE *)(&svar->backref)) unaligned_member_access_result = ((VALUE *)(&svar->backref));
13098 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.2/vm_insnhelper.c", 635);
13099 return;
13100 default: {
13101 VALUE ary = svar->others;
13102 if (RB_NIL_P(ary)) {
13103 rb_obj_write((VALUE)(svar), __extension__({
13104 ;
13105 ; __typeof__((VALUE *)(&svar->others)) unaligned_member_access_result = ((VALUE *)(&svar->others));
13106 ; unaligned_member_access_result; }), (VALUE)(ary = rb_ary_new()), "../ruby-3.2.2/vm_insnhelper.c", 641);
13107 }
13108 rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val);
13109 }
13110 }
13111}
13112static inline VALUE
13113vm_getspecial(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, rb_num_t type)
13114{
13115 VALUE val;
13116 if (type == 0) {
13117 val = lep_svar_get(ec, lep, key);
13118 }
13119 else {
13120 VALUE backref = lep_svar_get(ec, lep, VM_SVAR_BACKREF);
13121 if (type & 0x01) {
13122 switch (type >> 1) {
13123 case '&':
13124 val = rb_reg_last_match(backref);
13125 break;
13126 case '`':
13127 val = rb_reg_match_pre(backref);
13128 break;
13129 case '\'':
13130 val = rb_reg_match_post(backref);
13131 break;
13132 case '+':
13133 val = rb_reg_match_last(backref);
13134 break;
13135 default:
13136 rb_bug("unexpected back-ref");
13137 }
13138 }
13139 else {
13140 val = rb_reg_nth_match((int)(type >> 1), backref);
13141 }
13142 }
13143 return val;
13144}
13145__attribute__((__pure__)) static rb_callable_method_entry_t *check_method_entry(VALUE obj, int can_be_svar);
13146static rb_callable_method_entry_t *
13147check_method_entry(VALUE obj, int can_be_svar)
13148{
13149 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
13150 switch (imemo_type(obj)) {
13151 case imemo_ment:
13152 return (rb_callable_method_entry_t *)obj;
13153 case imemo_cref:
13154 return ((void *)0);
13155 case imemo_svar:
13156 if (can_be_svar) {
13157 return check_method_entry(((struct vm_svar *)obj)->cref_or_me, 0);
13158 }
13159 default:
13160 return ((void *)0);
13161 }
13162}
13163static const rb_callable_method_entry_t *
13164rb_vm_frame_method_entry(const rb_control_frame_t *cfp)
13165{
13166 const VALUE *ep = cfp->ep;
13167 rb_callable_method_entry_t *me;
13168 while (!VM_ENV_LOCAL_P(ep)) {
13169 if ((me = check_method_entry(ep[(-2)], 0)) != ((void *)0)) return me;
13170 ep = VM_ENV_PREV_EP(ep);
13171 }
13172 return check_method_entry(ep[(-2)], 1);
13173}
13174static const rb_iseq_t *
13175method_entry_iseqptr(const rb_callable_method_entry_t *me)
13176{
13177 switch (me->def->type) {
13178 case VM_METHOD_TYPE_ISEQ:
13179 return me->def->body.iseq.iseqptr;
13180 default:
13181 return ((void *)0);
13182 }
13183}
13184static rb_cref_t *
13185method_entry_cref(const rb_callable_method_entry_t *me)
13186{
13187 switch (me->def->type) {
13188 case VM_METHOD_TYPE_ISEQ:
13189 return me->def->body.iseq.cref;
13190 default:
13191 return ((void *)0);
13192 }
13193}
13194__attribute__((__pure__)) static rb_cref_t *check_cref(VALUE, int);
13195static rb_cref_t *
13196check_cref(VALUE obj, int can_be_svar)
13197{
13198 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
13199 switch (imemo_type(obj)) {
13200 case imemo_ment:
13201 return method_entry_cref((rb_callable_method_entry_t *)obj);
13202 case imemo_cref:
13203 return (rb_cref_t *)obj;
13204 case imemo_svar:
13205 if (can_be_svar) {
13206 return check_cref(((struct vm_svar *)obj)->cref_or_me, 0);
13207 }
13208 default:
13209 return ((void *)0);
13210 }
13211}
13212static inline rb_cref_t *
13213vm_env_cref(const VALUE *ep)
13214{
13215 rb_cref_t *cref;
13216 while (!VM_ENV_LOCAL_P(ep)) {
13217 if ((cref = check_cref(ep[(-2)], 0)) != ((void *)0)) return cref;
13218 ep = VM_ENV_PREV_EP(ep);
13219 }
13220 return check_cref(ep[(-2)], 1);
13221}
13222static int
13223is_cref(const VALUE v, int can_be_svar)
13224{
13225 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
13226 switch (imemo_type(v)) {
13227 case imemo_cref:
13228 return 1;
13229 case imemo_svar:
13230 if (can_be_svar) return is_cref(((struct vm_svar *)v)->cref_or_me, 0);
13231 default:
13232 break;
13233 }
13234 }
13235 return 0;
13236}
13237static int
13238vm_env_cref_by_cref(const VALUE *ep)
13239{
13240 while (!VM_ENV_LOCAL_P(ep)) {
13241 if (is_cref(ep[(-2)], 0)) return 1;
13242 ep = VM_ENV_PREV_EP(ep);
13243 }
13244 return is_cref(ep[(-2)], 1);
13245}
13246static rb_cref_t *
13247cref_replace_with_duplicated_cref_each_frame(const VALUE *vptr, int can_be_svar, VALUE parent)
13248{
13249 const VALUE v = *vptr;
13250 rb_cref_t *cref, *new_cref;
13251 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
13252 switch (imemo_type(v)) {
13253 case imemo_cref:
13254 cref = (rb_cref_t *)v;
13255 new_cref = vm_cref_dup(cref);
13256 if (parent) {
13257 rb_obj_write((VALUE)(parent), __extension__({
13258 ;
13259 ; __typeof__((VALUE *)(vptr)) unaligned_member_access_result = ((VALUE *)(vptr));
13260 ; unaligned_member_access_result; }), (VALUE)(new_cref), "../ruby-3.2.2/vm_insnhelper.c", 827);
13261 }
13262 else {
13263 VM_FORCE_WRITE(vptr, (VALUE)new_cref);
13264 }
13265 return (rb_cref_t *)new_cref;
13266 case imemo_svar:
13267 if (can_be_svar) {
13268 return cref_replace_with_duplicated_cref_each_frame(&((struct vm_svar *)v)->cref_or_me, 0, v);
13269 }
13270 case imemo_ment:
13271 rb_bug("cref_replace_with_duplicated_cref_each_frame: unreachable");
13272 default:
13273 break;
13274 }
13275 }
13276 return ((void *)0);
13277}
13278static rb_cref_t *
13279vm_cref_replace_with_duplicated_cref(const VALUE *ep)
13280{
13281 if (vm_env_cref_by_cref(ep)) {
13282 rb_cref_t *cref;
13283 VALUE envval;
13284 while (!VM_ENV_LOCAL_P(ep)) {
13285 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13286 if ((cref = cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 0, envval)) != ((void *)0)) {
13287 return cref;
13288 }
13289 ep = VM_ENV_PREV_EP(ep);
13290 }
13291 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13292 return cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 1, envval);
13293 }
13294 else {
13295 rb_bug("vm_cref_dup: unreachable");
13296 }
13297}
13298static rb_cref_t *
13299vm_get_cref(const VALUE *ep)
13300{
13301 rb_cref_t *cref = vm_env_cref(ep);
13302 if (cref != ((void *)0)) {
13303 return cref;
13304 }
13305 else {
13306 rb_bug("vm_get_cref: unreachable");
13307 }
13308}static inline
13309rb_cref_t *
13310rb_vm_get_cref(const VALUE *ep)
13311{
13312 return vm_get_cref(ep);
13313}
13314static rb_cref_t *
13315vm_ec_cref(const rb_execution_context_t *ec)
13316{
13317 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
13318 if (cfp == ((void *)0)) {
13319 return ((void *)0);
13320 }
13321 return vm_get_cref(cfp->ep);
13322}
13323static const rb_cref_t *
13324vm_get_const_key_cref(const VALUE *ep)
13325{
13326 const rb_cref_t *cref = vm_get_cref(ep);
13327 const rb_cref_t *key_cref = cref;
13328 while (cref) {
13329 if (RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13330 RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_USER1))) {
13331 return key_cref;
13332 }
13333 cref = CREF_NEXT(cref);
13334 }
13335 return ((void *)0);
13336}static inline
13337void
13338rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr)
13339{
13340 rb_cref_t *new_cref;
13341 while (cref) {
13342 if (CREF_CLASS(cref) == old_klass) {
13343 new_cref = vm_cref_new_use_prev(new_klass, METHOD_VISI_UNDEF, 0, cref, 0);
13344 *new_cref_ptr = new_cref;
13345 return;
13346 }
13347 new_cref = vm_cref_new_use_prev(CREF_CLASS(cref), METHOD_VISI_UNDEF, 0, cref, 0);
13348 cref = CREF_NEXT(cref);
13349 *new_cref_ptr = new_cref;
13350 new_cref_ptr = &new_cref->next;
13351 }
13352 *new_cref_ptr = ((void *)0);
13353}
13354static rb_cref_t *
13355vm_cref_push(const rb_execution_context_t *ec, VALUE klass, const VALUE *ep, int pushed_by_eval, int singleton)
13356{
13357 rb_cref_t *prev_cref = ((void *)0);
13358 if (ep) {
13359 prev_cref = vm_env_cref(ep);
13360 }
13361 else {
13362 rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(ec, ec->cfp);
13363 if (cfp) {
13364 prev_cref = vm_env_cref(cfp->ep);
13365 }
13366 }
13367 return vm_cref_new(klass, METHOD_VISI_PUBLIC, 0, prev_cref, pushed_by_eval, singleton);
13368}
13369static inline VALUE
13370vm_get_cbase(const VALUE *ep)
13371{
13372 const rb_cref_t *cref = vm_get_cref(ep);
13373 return CREF_CLASS_FOR_DEFINITION(cref);
13374}
13375static inline VALUE
13376vm_get_const_base(const VALUE *ep)
13377{
13378 const rb_cref_t *cref = vm_get_cref(ep);
13379 while (cref) {
13380 if (!CREF_PUSHED_BY_EVAL(cref)) {
13381 return CREF_CLASS_FOR_DEFINITION(cref);
13382 }
13383 cref = CREF_NEXT(cref);
13384 }
13385 return ((VALUE)RUBY_Qundef);
13386}
13387static inline void
13388vm_check_if_namespace(VALUE klass)
13389{
13390 if (!RB_TYPE_P(klass, RUBY_T_CLASS) && !RB_TYPE_P(klass, RUBY_T_MODULE)) {
13391 rb_raise(rb_eTypeError, "%+""l""i" "\v"" is not a class/module", klass);
13392 }
13393}
13394static inline void
13395vm_ensure_not_refinement_module(VALUE self)
13396{
13397 if (RB_TYPE_P(self, RUBY_T_MODULE) && RB_FL_TEST(self, RMODULE_IS_REFINEMENT)) {
13398 rb_warn("not defined at the refinement, but at the outer class/module");
13399 }
13400}
13401static inline VALUE
13402vm_get_iclass(const rb_control_frame_t *cfp, VALUE klass)
13403{
13404 return klass;
13405}
13406static inline VALUE
13407vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, _Bool allow_nil, int is_defined)
13408{
13409 void rb_const_warn_if_deprecated(const rb_const_entry_t *ce, VALUE klass, ID id);
13410 VALUE val;
13411 if (RB_NIL_P(orig_klass) && allow_nil) {
13412 const rb_cref_t *root_cref = vm_get_cref(ec->cfp->ep);
13413 const rb_cref_t *cref;
13414 VALUE klass = ((VALUE)RUBY_Qnil);
13415 while (root_cref && CREF_PUSHED_BY_EVAL(root_cref)) {
13416 root_cref = CREF_NEXT(root_cref);
13417 }
13418 cref = root_cref;
13419 while (cref && CREF_NEXT(cref)) {
13420 if (CREF_PUSHED_BY_EVAL(cref)) {
13421 klass = ((VALUE)RUBY_Qnil);
13422 }
13423 else {
13424 klass = CREF_CLASS(cref);
13425 }
13426 cref = CREF_NEXT(cref);
13427 if (!RB_NIL_P(klass)) {
13428 VALUE av, am = 0;
13429 rb_const_entry_t *ce;
13430 search_continue:
13431 if ((ce = rb_const_lookup(klass, id))) {
13432 rb_const_warn_if_deprecated(ce, klass, id);
13433 val = ce->value;
13434 if (RB_UNDEF_P(val)) {
13435 if (am == klass) break;
13436 am = klass;
13437 if (is_defined) return 1;
13438 if (rb_autoloading_value(klass, id, &av, ((void *)0))) return av;
13439 rb_autoload_load(klass, id);
13440 goto search_continue;
13441 }
13442 else {
13443 if (is_defined) {
13444 return 1;
13445 }
13446 else {
13447 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13448 if (!rb_ractor_shareable_p(val)) {
13449 rb_raise(rb_eRactorIsolationError,
13450 "can not access non-shareable objects in constant %""l""i" "\v""::%s by non-main ractor.", rb_class_path(klass), rb_id2name(id));
13451 }
13452 }
13453 return val;
13454 }
13455 }
13456 }
13457 }
13458 }
13459 if (root_cref && !RB_NIL_P(CREF_CLASS(root_cref))) {
13460 klass = vm_get_iclass(ec->cfp, CREF_CLASS(root_cref));
13461 }
13462 else {
13463 klass = rb_class_of(ec->cfp->self);
13464 }
13465 if (is_defined) {
13466 return rb_const_defined(klass, id);
13467 }
13468 else {
13469 return rb_const_get(klass, id);
13470 }
13471 }
13472 else {
13473 vm_check_if_namespace(orig_klass);
13474 if (is_defined) {
13475 return rb_public_const_defined_from(orig_klass, id);
13476 }
13477 else {
13478 return rb_public_const_get_from(orig_klass, id);
13479 }
13480 }
13481}static inline
13482VALUE
13483rb_vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, VALUE allow_nil)
13484{
13485 return vm_get_ev_const(ec, orig_klass, id, allow_nil == ((VALUE)RUBY_Qtrue), 0);
13486}
13487static inline VALUE
13488vm_get_ev_const_chain(rb_execution_context_t *ec, const ID *segments)
13489{
13490 VALUE val = ((VALUE)RUBY_Qnil);
13491 int idx = 0;
13492 int allow_nil = 1;
13493 if (segments[0] == idNULL) {
13494 val = rb_cObject;
13495 idx++;
13496 allow_nil = 0;
13497 }
13498 while (segments[idx]) {
13499 ID id = segments[idx++];
13500 val = vm_get_ev_const(ec, val, id, allow_nil, 0);
13501 allow_nil = 0;
13502 }
13503 return val;
13504}
13505static inline VALUE
13506vm_get_cvar_base(const rb_cref_t *cref, const rb_control_frame_t *cfp, int top_level_raise)
13507{
13508 VALUE klass;
13509 if (!cref) {
13510 rb_bug("vm_get_cvar_base: no cref");
13511 }
13512 while (CREF_NEXT(cref) &&
13513 (RB_NIL_P(CREF_CLASS(cref)) || RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13514 CREF_PUSHED_BY_EVAL(cref) || CREF_SINGLETON(cref))) {
13515 cref = CREF_NEXT(cref);
13516 }
13517 if (top_level_raise && !CREF_NEXT(cref)) {
13518 rb_raise(rb_eRuntimeError, "class variable access from toplevel");
13519 }
13520 klass = vm_get_iclass(cfp, CREF_CLASS(cref));
13521 if (RB_NIL_P(klass)) {
13522 rb_raise(rb_eTypeError, "no class variables available");
13523 }
13524 return klass;
13525}
13526__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);
13527static inline void
13528fill_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)
13529{
13530 if (is_attr) {
13531 vm_cc_attr_index_set(cc, index, shape_id);
13532 }
13533 else {
13534 vm_ic_attr_index_set(iseq, ic, index, shape_id);
13535 }
13536}
13537__attribute__ ((__always_inline__)) static VALUE vm_getivar(VALUE, ID, const rb_iseq_t *, IVC, const struct rb_callcache *, int);
13538static inline VALUE
13539vm_getivar(VALUE obj, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13540{
13541 VALUE val = ((VALUE)RUBY_Qundef);
13542 shape_id_t shape_id;
13543 VALUE * ivar_list;
13544 if (RB_SPECIAL_CONST_P(obj)) {
13545 return ((VALUE)RUBY_Qnil);
13546 }
13547 shape_id = RBASIC_SHAPE_ID(obj);
13548 switch (RB_BUILTIN_TYPE(obj)) {
13549 case RUBY_T_OBJECT:
13550 ivar_list = ROBJECT_IVPTR(obj);
13551 ((void)0);
13552 break;
13553 case RUBY_T_CLASS:
13554 case RUBY_T_MODULE:
13555 {
13556 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13557 goto general_path;
13558 }
13559 ivar_list = (((rb_classext_t *)((char *)(obj) + sizeof(struct RClass)))->iv_ptr);
13560 break;
13561 }
13562 default:
13563 if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
13564 struct gen_ivtbl *ivtbl;
13565 rb_gen_ivtbl_get(obj, id, &ivtbl);
13566 ivar_list = ivtbl->ivptr;
13567 }
13568 else {
13569 return ((VALUE)RUBY_Qnil);
13570 }
13571 }
13572 shape_id_t cached_id;
13573 attr_index_t index;
13574 if (is_attr) {
13575 vm_cc_atomic_shape_and_index(cc, &cached_id, &index);
13576 }
13577 else {
13578 vm_ic_atomic_shape_and_index(ic, &cached_id, &index);
13579 }
13580 if ((__builtin_expect(!!(cached_id == shape_id), 1))) {
13581 ((void)0);
13582 if (index == (attr_index_t)-1) {
13583 return ((VALUE)RUBY_Qnil);
13584 }
13585 val = ivar_list[index];
13586 ((void)0);
13587 }
13588 else {
13589 rb_shape_t *shape = rb_shape_get_shape_by_id(shape_id);
13590 if (shape_id == ((5 * 2) + 1)) {
13591 if (!rb_id_table_lookup(ROBJECT_IV_HASH(obj), id, &val)) {
13592 val = ((VALUE)RUBY_Qnil);
13593 }
13594 }
13595 else {
13596 if (rb_shape_get_iv_index(shape, id, &index)) {
13597 fill_ivar_cache(iseq, ic, cc, is_attr, index, shape_id);
13598 val = ivar_list[index];
13599 ((void)0);
13600 }
13601 else {
13602 if (is_attr) {
13603 vm_cc_attr_index_initialize(cc, shape_id);
13604 }
13605 else {
13606 vm_ic_attr_index_initialize(ic, shape_id);
13607 }
13608 val = ((VALUE)RUBY_Qnil);
13609 }
13610 }
13611 }
13612 ((void)0);
13613 return val;
13614general_path:
13615 ((void)0);
13616 if (is_attr) {
13617 return rb_attr_get(obj, id);
13618 }
13619 else {
13620 return rb_ivar_get(obj, id);
13621 }
13622}
13623static void
13624populate_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)
13625{
13626 ((void)0);
13627 if (is_attr) {
13628 vm_cc_attr_index_set(cc, index, next_shape_id);
13629 }
13630 else {
13631 vm_ic_attr_index_set(iseq, ic, index, next_shape_id);
13632 }
13633}
13634__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);
13635__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic);
13636__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc);
13637static VALUE
13638vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13639{
13640 switch (RB_BUILTIN_TYPE(obj)) {
13641 case RUBY_T_OBJECT:
13642 {
13643 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
13644 attr_index_t index = rb_obj_ivar_set(obj, id, val);
13645 shape_id_t next_shape_id = ROBJECT_SHAPE_ID(obj);
13646 if (next_shape_id != ((5 * 2) + 1)) {
13647 populate_cache(index, next_shape_id, id, iseq, ic, cc, is_attr);
13648 }
13649 ((void)0);
13650 return val;
13651 }
13652 case RUBY_T_CLASS:
13653 case RUBY_T_MODULE:
13654 break;
13655 default:
13656 {
13657 rb_ivar_set(obj, id, val);
13658 shape_id_t next_shape_id = rb_shape_get_shape_id(obj);
13659 rb_shape_t *next_shape = rb_shape_get_shape_by_id(next_shape_id);
13660 attr_index_t index;
13661 if (rb_shape_get_iv_index(next_shape, id, &index)) {
13662 if (index >= (attr_index_t)(-1)) {
13663 rb_raise(rb_eArgError, "too many instance variables");
13664 }
13665 populate_cache(index, next_shape_id, id, iseq, ic, cc, is_attr);
13666 }
13667 else {
13668 rb_bug("didn't find the id\n");
13669 }
13670 return val;
13671 }
13672 }
13673 ((void)0);
13674 return rb_ivar_set(obj, id, val);
13675}
13676static VALUE
13677vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic)
13678{
13679 return vm_setivar_slowpath(obj, id, val, iseq, ic, ((void *)0), 0);
13680}
13681static VALUE
13682vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc)
13683{
13684 return vm_setivar_slowpath(obj, id, val, ((void *)0), ((void *)0), cc, 1);
13685}
13686__attribute__((__noinline__)) static VALUE vm_setivar_default(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index);
13687static VALUE
13688vm_setivar_default(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index)
13689{
13690 shape_id_t shape_id = RBASIC_SHAPE_ID(obj);
13691 struct gen_ivtbl *ivtbl = 0;
13692 if (shape_id == dest_shape_id) {
13693 ((void)0);
13694 rb_gen_ivtbl_get(obj, 0, &ivtbl);
13695 }
13696 else if (dest_shape_id != (((uintptr_t)1 << 32) - 1)) {
13697 rb_shape_t * dest_shape = rb_shape_get_shape_by_id(dest_shape_id);
13698 shape_id_t source_shape_id = dest_shape->parent_id;
13699 if (shape_id == source_shape_id && dest_shape->edge_name == id && dest_shape->type == SHAPE_IVAR) {
13700 ivtbl = rb_ensure_generic_iv_list_size(obj, dest_shape, index + 1);
13701 RBASIC_SET_SHAPE_ID(obj, dest_shape_id);
13702 }
13703 else {
13704 return ((VALUE)RUBY_Qundef);
13705 }
13706 }
13707 else {
13708 return ((VALUE)RUBY_Qundef);
13709 }
13710 VALUE *ptr = ivtbl->ivptr;
13711 rb_obj_write((VALUE)(obj), __extension__({
13712 ;
13713 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13714 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.2/vm_insnhelper.c", 1423);
13715 ((void)0);
13716 return val;
13717}
13718static inline VALUE
13719vm_setivar(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index)
13720{
13721 switch (RB_BUILTIN_TYPE(obj)) {
13722 case RUBY_T_OBJECT:
13723 {
13724 ((void)0);
13725 shape_id_t shape_id = ROBJECT_SHAPE_ID(obj);
13726 ((void)0);
13727 if ((__builtin_expect(!!(shape_id == dest_shape_id), 1))) {
13728 ((void)0);
13729 ((void)0);
13730 }
13731 else if (dest_shape_id != (((uintptr_t)1 << 32) - 1)) {
13732 rb_shape_t *dest_shape = rb_shape_get_shape_by_id(dest_shape_id);
13733 shape_id_t source_shape_id = dest_shape->parent_id;
13734 if (shape_id == source_shape_id && dest_shape->edge_name == id) {
13735 ((void)0);
13736 ROBJECT_SET_SHAPE_ID(obj, dest_shape_id);
13737 ((void)0);
13738 ((void)0);
13739 }
13740 else {
13741 break;
13742 }
13743 }
13744 else {
13745 break;
13746 }
13747 VALUE *ptr = ROBJECT_IVPTR(obj);
13748 ((void)0);
13749 rb_obj_write((VALUE)(obj), __extension__({
13750 ;
13751 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13752 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.2/vm_insnhelper.c", 1469);
13753 ((void)0);
13754 return val;
13755 }
13756 break;
13757 case RUBY_T_CLASS:
13758 case RUBY_T_MODULE:
13759 ((void)0);
13760 default:
13761 break;
13762 }
13763 return ((VALUE)RUBY_Qundef);
13764}
13765static VALUE
13766update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic)
13767{
13768 VALUE defined_class = 0;
13769 VALUE cvar_value = rb_cvar_find(klass, id, &defined_class);
13770 if (RB_TYPE_P(defined_class, RUBY_T_ICLASS)) {
13771 defined_class = ((struct RBasic *)(defined_class))->klass;
13772 }
13773 struct rb_id_table *rb_cvc_tbl = (((rb_classext_t *)((char *)(defined_class) + sizeof(struct RClass)))->cvc_tbl);
13774 if (!rb_cvc_tbl) {
13775 rb_bug("the cvc table should be set");
13776 }
13777 VALUE ent_data;
13778 if (!rb_id_table_lookup(rb_cvc_tbl, id, &ent_data)) {
13779 rb_bug("should have cvar cache entry");
13780 }
13781 struct rb_cvar_class_tbl_entry *ent = (void *)ent_data;
13782 ent->global_cvar_state = (ruby_vm_global_cvar_state);
13783 ic->entry = ent;
13784 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.2.2/vm_insnhelper.c", 1510));
13785 return cvar_value;
13786}
13787static inline VALUE
13788vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, ICVARC ic)
13789{
13790 const rb_cref_t *cref;
13791 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state) && (__builtin_expect(!!(rb_ractor_main_p()), 1))) {
13792 ((void)0);
13793 VALUE v = rb_ivar_lookup(ic->entry->class_value, id, ((VALUE)RUBY_Qundef));
13794 ((void)0);
13795 return v;
13796 }
13797 cref = vm_get_cref(((((reg_cfp)->ep))));
13798 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13799 return update_classvariable_cache(iseq, klass, id, ic);
13800}static inline
13801VALUE
13802rb_vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, ICVARC ic)
13803{
13804 return vm_getclassvariable(iseq, cfp, id, ic);
13805}
13806static inline void
13807vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic)
13808{
13809 const rb_cref_t *cref;
13810 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
13811 ((void)0);
13812 rb_class_ivar_set(ic->entry->class_value, id, val);
13813 return;
13814 }
13815 cref = vm_get_cref(((((reg_cfp)->ep))));
13816 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13817 rb_cvar_set(klass, id, val);
13818 update_classvariable_cache(iseq, klass, id, ic);
13819}static inline
13820void
13821rb_vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, VALUE val, ICVARC ic)
13822{
13823 vm_setclassvariable(iseq, cfp, id, val, ic);
13824}
13825static inline VALUE
13826vm_getinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, IVC ic)
13827{
13828 return vm_getivar(obj, id, iseq, ic, ((void *)0), 0);
13829}
13830static inline void
13831vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13832{
13833 if (RB_SPECIAL_CONST_P(obj)) {
13834 rb_error_frozen_object(obj);
13835 return;
13836 }
13837 shape_id_t dest_shape_id;
13838 attr_index_t index;
13839 vm_ic_atomic_shape_and_index(ic, &dest_shape_id, &index);
13840 if ((__builtin_expect(!!(RB_UNDEF_P(vm_setivar(obj, id, val, dest_shape_id, index))), 0))) {
13841 switch (RB_BUILTIN_TYPE(obj)) {
13842 case RUBY_T_OBJECT:
13843 case RUBY_T_CLASS:
13844 case RUBY_T_MODULE:
13845 break;
13846 default:
13847 if (!RB_UNDEF_P(vm_setivar_default(obj, id, val, dest_shape_id, index))) {
13848 return;
13849 }
13850 }
13851 vm_setivar_slowpath_ivar(obj, id, val, iseq, ic);
13852 }
13853}static inline
13854void
13855rb_vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13856{
13857 vm_setinstancevariable(iseq, obj, id, val, ic);
13858}
13859static VALUE
13860vm_throw_continue(const rb_execution_context_t *ec, VALUE err)
13861{
13862 if (RB_FIXNUM_P(err)) {
13863 ec->tag->state = RB_FIX2INT(err);
13864 }
13865 else if (RB_SYMBOL_P(err)) {
13866 ec->tag->state = RUBY_TAG_THROW;
13867 }
13868 else if (imemo_throw_data_p((VALUE)err)) {
13869 ec->tag->state = THROW_DATA_STATE((struct vm_throw_data *)err);
13870 }
13871 else {
13872 ec->tag->state = RUBY_TAG_RAISE;
13873 }
13874 return err;
13875}
13876static VALUE
13877vm_throw_start(const rb_execution_context_t *ec, rb_control_frame_t *const reg_cfp, enum ruby_tag_type state,
13878 const int flag, const VALUE throwobj)
13879{
13880 const rb_control_frame_t *escape_cfp = ((void *)0);
13881 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
13882 if (flag != 0) {
13883 }
13884 else if (state == RUBY_TAG_BREAK) {
13885 int is_orphan = 1;
13886 const VALUE *ep = ((((reg_cfp)->ep)));
13887 const rb_iseq_t *base_iseq = ((((reg_cfp)))->iseq);
13888 escape_cfp = reg_cfp;
13889 while (((base_iseq)->body)->type != ISEQ_TYPE_BLOCK) {
13890 if (((escape_cfp->iseq)->body)->type == ISEQ_TYPE_CLASS) {
13891 escape_cfp = ((escape_cfp)+1);
13892 ep = escape_cfp->ep;
13893 base_iseq = escape_cfp->iseq;
13894 }
13895 else {
13896 ep = VM_ENV_PREV_EP(ep);
13897 base_iseq = ((base_iseq)->body)->parent_iseq;
13898 escape_cfp = rb_vm_search_cf_from_ep(ec, escape_cfp, ep);
13899 ((void)0);
13900 }
13901 }
13902 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13903 is_orphan = 0;
13904 state = RUBY_TAG_RETURN;
13905 }
13906 else {
13907 ep = VM_ENV_PREV_EP(ep);
13908 while (escape_cfp < eocfp) {
13909 if (escape_cfp->ep == ep) {
13910 const rb_iseq_t *const iseq = escape_cfp->iseq;
13911 const VALUE epc = escape_cfp->pc - ((iseq)->body)->iseq_encoded;
13912 const struct iseq_catch_table *const ct = ((iseq)->body)->catch_table;
13913 unsigned int i;
13914 if (!ct) break;
13915 for (i=0; i < ct->size; i++) {
13916 const struct iseq_catch_table_entry *const entry =
13917 __extension__({
13918 ;
13919 ; __typeof__(&(ct)->entries[i]) unaligned_member_access_result = (&(ct)->entries[i]);
13920 ; unaligned_member_access_result; });
13921 if (entry->type == CATCH_TYPE_BREAK &&
13922 entry->iseq == base_iseq &&
13923 entry->start < epc && entry->end >= epc) {
13924 if (entry->cont == epc) {
13925 is_orphan = 0;
13926 }
13927 break;
13928 }
13929 }
13930 break;
13931 }
13932 escape_cfp = ((escape_cfp)+1);
13933 }
13934 }
13935 if (is_orphan) {
13936 rb_vm_localjump_error("break from proc-closure", throwobj, RUBY_TAG_BREAK);
13937 }
13938 }
13939 else if (state == RUBY_TAG_RETRY) {
13940 const VALUE *ep = VM_ENV_PREV_EP(((((reg_cfp)->ep))));
13941 escape_cfp = rb_vm_search_cf_from_ep(ec, reg_cfp, ep);
13942 }
13943 else if (state == RUBY_TAG_RETURN) {
13944 const VALUE *current_ep = ((((reg_cfp)->ep)));
13945 const VALUE *target_ep = ((void *)0), *target_lep, *ep = current_ep;
13946 int in_class_frame = 0;
13947 int toplevel = 1;
13948 escape_cfp = reg_cfp;
13949 while (!VM_ENV_LOCAL_P(ep)) {
13950 if (VM_ENV_FLAGS(ep, VM_FRAME_FLAG_LAMBDA) && target_ep == ((void *)0)) {
13951 target_ep = ep;
13952 }
13953 ep = VM_ENV_PREV_EP(ep);
13954 }
13955 target_lep = ep;
13956 while (escape_cfp < eocfp) {
13957 const VALUE *lep = VM_CF_LEP(escape_cfp);
13958 if (!target_lep) {
13959 target_lep = lep;
13960 }
13961 if (lep == target_lep &&
13962 VM_FRAME_RUBYFRAME_P(escape_cfp) &&
13963 ((escape_cfp->iseq)->body)->type == ISEQ_TYPE_CLASS) {
13964 in_class_frame = 1;
13965 target_lep = 0;
13966 }
13967 if (lep == target_lep) {
13968 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13969 toplevel = 0;
13970 if (in_class_frame) {
13971 goto valid_return;
13972 }
13973 else {
13974 const VALUE *tep = current_ep;
13975 while (target_lep != tep) {
13976 if (escape_cfp->ep == tep) {
13977 if (tep == target_ep) {
13978 goto valid_return;
13979 }
13980 else {
13981 goto unexpected_return;
13982 }
13983 }
13984 tep = VM_ENV_PREV_EP(tep);
13985 }
13986 }
13987 }
13988 else if (VM_FRAME_RUBYFRAME_P(escape_cfp)) {
13989 switch (((escape_cfp->iseq)->body)->type) {
13990 case ISEQ_TYPE_TOP:
13991 case ISEQ_TYPE_MAIN:
13992 if (toplevel) {
13993 if (in_class_frame) goto unexpected_return;
13994 if (target_ep == ((void *)0)) {
13995 goto valid_return;
13996 }
13997 else {
13998 goto unexpected_return;
13999 }
14000 }
14001 break;
14002 case ISEQ_TYPE_EVAL:
14003 case ISEQ_TYPE_CLASS:
14004 toplevel = 0;
14005 break;
14006 default:
14007 break;
14008 }
14009 }
14010 }
14011 if (escape_cfp->ep == target_lep && ((escape_cfp->iseq)->body)->type == ISEQ_TYPE_METHOD) {
14012 if (target_ep == ((void *)0)) {
14013 goto valid_return;
14014 }
14015 else {
14016 goto unexpected_return;
14017 }
14018 }
14019 escape_cfp = ((escape_cfp)+1);
14020 }
14021 unexpected_return:;
14022 rb_vm_localjump_error("unexpected return", throwobj, RUBY_TAG_RETURN);
14023 valid_return:;
14024 }
14025 else {
14026 rb_bug("isns(throw): unsupported throw type");
14027 }
14028 ec->tag->state = state;
14029 return (VALUE)THROW_DATA_NEW(throwobj, escape_cfp, state);
14030}
14031static VALUE
14032vm_throw(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
14033 rb_num_t throw_state, VALUE throwobj)
14034{
14035 const int state = (int)(throw_state & VM_THROW_STATE_MASK);
14036 const int flag = (int)(throw_state & VM_THROW_NO_ESCAPE_FLAG);
14037 if (state != 0) {
14038 return vm_throw_start(ec, reg_cfp, state, flag, throwobj);
14039 }
14040 else {
14041 return vm_throw_continue(ec, throwobj);
14042 }
14043}
14044static inline void
14045vm_expandarray(VALUE *sp, VALUE ary, rb_num_t num, int flag)
14046{
14047 int is_splat = flag & 0x01;
14048 rb_num_t space_size = num + is_splat;
14049 VALUE *base = sp - 1;
14050 const VALUE *ptr;
14051 rb_num_t len;
14052 const VALUE obj = ary;
14053 if (!RB_TYPE_P(ary, RUBY_T_ARRAY) && RB_NIL_P(ary = rb_check_array_type(ary))) {
14054 ary = obj;
14055 ptr = &ary;
14056 len = 1;
14057 }
14058 else {
14059 ptr = rb_array_const_ptr_transient(ary);
14060 len = (rb_num_t)rb_array_len(ary);
14061 }
14062 if (space_size == 0) {
14063 }
14064 else if (flag & 0x02) {
14065 rb_num_t i = 0, j;
14066 if (len < num) {
14067 for (i=0; i<num-len; i++) {
14068 *base++ = ((VALUE)RUBY_Qnil);
14069 }
14070 }
14071 for (j=0; i<num; i++, j++) {
14072 VALUE v = ptr[len - j - 1];
14073 *base++ = v;
14074 }
14075 if (is_splat) {
14076 *base = rb_ary_new_from_values(len - j, ptr);
14077 }
14078 }
14079 else {
14080 rb_num_t i;
14081 VALUE *bptr = &base[space_size - 1];
14082 for (i=0; i<num; i++) {
14083 if (len <= i) {
14084 for (; i<num; i++) {
14085 *bptr-- = ((VALUE)RUBY_Qnil);
14086 }
14087 break;
14088 }
14089 *bptr-- = ptr[i];
14090 }
14091 if (is_splat) {
14092 if (num > len) {
14093 *bptr = rb_ary_new();
14094 }
14095 else {
14096 *bptr = rb_ary_new_from_values(len - num, ptr + num);
14097 }
14098 }
14099 }
14100 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(ary); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
14101}
14102static VALUE vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
14103static VALUE vm_mtbl_dump(VALUE klass, ID target_mid);
14104static struct rb_class_cc_entries *
14105vm_ccs_create(VALUE klass, const rb_callable_method_entry_t *cme)
14106{
14107 struct rb_class_cc_entries *ccs = ((struct rb_class_cc_entries *)ruby_xmalloc(sizeof(struct rb_class_cc_entries)));
14108 ccs->capa = 0;
14109 ccs->len = 0;
14110 rb_obj_write((VALUE)(klass), __extension__({
14111 ;
14112 ; __typeof__((VALUE *)(&ccs->cme)) unaligned_member_access_result = ((VALUE *)(&ccs->cme));
14113 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.2.2/vm_insnhelper.c", 1898);
14114 (((rb_callable_method_entry_t *)cme)->flags |= ((VALUE)RUBY_FL_USER8));
14115 ccs->entries = ((void *)0);
14116 return ccs;
14117}
14118static void
14119vm_ccs_push(VALUE klass, struct rb_class_cc_entries *ccs, const struct rb_callinfo *ci, const struct rb_callcache *cc)
14120{
14121 if (! vm_cc_markable(cc)) {
14122 return;
14123 }
14124 else if (! vm_ci_markable(ci)) {
14125 return;
14126 }
14127 if ((__builtin_expect(!!(ccs->len == ccs->capa), 0))) {
14128 if (ccs->capa == 0) {
14129 ccs->capa = 1;
14130 ccs->entries = ((struct rb_class_cc_entries_entry *)ruby_xmalloc2((ccs->capa), sizeof(struct rb_class_cc_entries_entry)));
14131 }
14132 else {
14133 ccs->capa *= 2;
14134 ((ccs->entries) = ((struct rb_class_cc_entries_entry *)ruby_xrealloc2((void *)(ccs->entries), (ccs->capa), sizeof(struct rb_class_cc_entries_entry))));
14135 }
14136 }
14137 ((void)0);
14138 const int pos = ccs->len++;
14139 rb_obj_write((VALUE)(klass), __extension__({
14140 ;
14141 ; __typeof__((VALUE *)(&ccs->entries[pos].ci)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].ci));
14142 ; unaligned_member_access_result; }), (VALUE)(ci), "../ruby-3.2.2/vm_insnhelper.c", 1927);
14143 rb_obj_write((VALUE)(klass), __extension__({
14144 ;
14145 ; __typeof__((VALUE *)(&ccs->entries[pos].cc)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].cc));
14146 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.2/vm_insnhelper.c", 1928);
14147 if (0) {
14148 }
14149}
14150static const struct rb_callcache *
14151vm_search_method_slowpath0(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
14152{
14153 const struct rb_callcache *cc = rb_vm_search_method_slowpath(cd->ci, klass);
14154 cd->cc = cc;
14155 const struct rb_callcache *empty_cc =
14156 rb_vm_empty_cc();
14157 if (cd_owner && cc != empty_cc) (rb_obj_written((VALUE)(cd_owner), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cc), "../ruby-3.2.2/vm_insnhelper.c", 2110));
14158 ((void)0);
14159 return cc;
14160}
14161static const struct rb_callcache *
14162vm_search_method_fastpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
14163{
14164 const struct rb_callcache *cc = cd->cc;
14165 if ((__builtin_expect(!!(vm_cc_class_check(cc, klass)), 1))) {
14166 if ((__builtin_expect(!!(!((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))), 1))) {
14167 ((void)0);
14168 ((void)0);
14169 ((void)0);
14170 return cc;
14171 }
14172 ((void)0);
14173 }
14174 else {
14175 ((void)0);
14176 }
14177 return vm_search_method_slowpath0(cd_owner, cd, klass);
14178}
14179static const struct rb_callcache *
14180vm_search_method(VALUE cd_owner, struct rb_call_data *cd, VALUE recv)
14181{
14182 VALUE klass = rb_class_of(recv);
14183 ((void)0);
14184 ((void)0);
14185 return vm_search_method_fastpath(cd_owner, cd, klass);
14186}
14187typedef union {
14188 VALUE (*anyargs)();
14189 VALUE (*f00)(VALUE);
14190 VALUE (*f01)(VALUE, VALUE);
14191 VALUE (*f02)(VALUE, VALUE, VALUE);
14192 VALUE (*f03)(VALUE, VALUE, VALUE, VALUE);
14193 VALUE (*f04)(VALUE, VALUE, VALUE, VALUE, VALUE);
14194 VALUE (*f05)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14195 VALUE (*f06)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14196 VALUE (*f07)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14197 VALUE (*f08)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14198 VALUE (*f09)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14199 VALUE (*f10)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14200 VALUE (*f11)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14201 VALUE (*f12)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14202 VALUE (*f13)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14203 VALUE (*f14)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14204 VALUE (*f15)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14205 VALUE (*fm1)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE);
14206} __attribute__((__transparent_union__)) cfunc_type;
14207static inline int
14208check_cfunc(const rb_callable_method_entry_t *me, cfunc_type func)
14209{
14210 if (! me) {
14211 return 0;
14212 }
14213 else {
14214 ((void)0);
14215 ((void)0);
14216 ((void)0);
14217 if (me->def->type != VM_METHOD_TYPE_CFUNC) {
14218 return 0;
14219 }
14220 else {
14221 return me->def->body.cfunc.func == func.anyargs;
14222 }
14223 }
14224}
14225static inline int
14226vm_method_cfunc_is(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv, cfunc_type func)
14227{
14228 ((void)0);
14229 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
14230 return check_cfunc(vm_cc_cme(cc), func);
14231}
14232static inline _Bool
14233FIXNUM_2_P(VALUE a, VALUE b)
14234{
14235 long x = a;
14236 long y = b;
14237 long z = x & y & 1;
14238 return z == 1;
14239}
14240static inline _Bool
14241FLONUM_2_P(VALUE a, VALUE b)
14242{
14243 long x = a;
14244 long y = b;
14245 long z = ((x ^ 2) | (y ^ 2)) & 3;
14246 return !z;
14247}
14248static VALUE
14249opt_equality_specialized(VALUE recv, VALUE obj)
14250{
14251 if (FIXNUM_2_P(recv, obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 0))) == 0), 1)))) {
14252 goto compare_by_identity;
14253 }
14254 else if (FLONUM_2_P(recv, obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
14255 goto compare_by_identity;
14256 }
14257 else if (RB_STATIC_SYM_P(recv) && RB_STATIC_SYM_P(obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 6))) == 0), 1)))) {
14258 goto compare_by_identity;
14259 }
14260 else if (RB_SPECIAL_CONST_P(recv)) {
14261 }
14262 else if (RBASIC_CLASS(recv) == rb_cFloat && RB_FLOAT_TYPE_P(obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
14263 double a = rb_float_value_inline(recv);
14264 double b = rb_float_value_inline(obj);
14265 return ((a == b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14266 }
14267 else if (RBASIC_CLASS(recv) == rb_cString && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 2))) == 0), 1)))) {
14268 if (recv == obj) {
14269 return ((VALUE)RUBY_Qtrue);
14270 }
14271 else if (RB_TYPE_P(obj, RUBY_T_STRING)) {
14272 return rb_str_eql_internal(obj, recv);
14273 }
14274 }
14275 return ((VALUE)RUBY_Qundef);
14276 compare_by_identity:
14277 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14278}
14279static VALUE
14280opt_equality(const rb_iseq_t *cd_owner, VALUE recv, VALUE obj, CALL_DATA cd)
14281{
14282 ((void)0);
14283 VALUE val = opt_equality_specialized(recv, obj);
14284 if (!RB_UNDEF_P(val)) return val;
14285 if (!vm_method_cfunc_is(cd_owner, cd, recv, rb_obj_equal)) {
14286 return ((VALUE)RUBY_Qundef);
14287 }
14288 else {
14289 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14290 }
14291}
14292extern VALUE rb_vm_call0(rb_execution_context_t *ec, VALUE, ID, int, const VALUE*, const rb_callable_method_entry_t *, int kw_splat);
14293extern VALUE rb_vm_call_with_refinements(rb_execution_context_t *, VALUE, ID, int, const VALUE *, int);
14294static VALUE
14295check_match(rb_execution_context_t *ec, VALUE pattern, VALUE target, enum vm_check_match_type type)
14296{
14297 switch (type) {
14298 case VM_CHECKMATCH_TYPE_WHEN:
14299 return pattern;
14300 case VM_CHECKMATCH_TYPE_RESCUE:
14301 if (!rb_obj_is_kind_of(pattern, rb_cModule)) {
14302 rb_raise(rb_eTypeError, "class or module required for rescue clause");
14303 }
14304 case VM_CHECKMATCH_TYPE_CASE: {
14305 return rb_vm_call_with_refinements(ec, pattern, idEqq, 1, &target, 0);
14306 }
14307 default:
14308 rb_bug("check_match: unreachable");
14309 }
14310}
14311static inline VALUE
14312double_cmp_lt(double a, double b)
14313{
14314 ;
14315 return ((a < b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14316}
14317static inline VALUE
14318double_cmp_le(double a, double b)
14319{
14320 ;
14321 return ((a <= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14322}
14323static inline VALUE
14324double_cmp_gt(double a, double b)
14325{
14326 ;
14327 return ((a > b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14328}
14329static inline VALUE
14330double_cmp_ge(double a, double b)
14331{
14332 ;
14333 return ((a >= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14334}
14335static inline VALUE *
14336vm_base_ptr(const rb_control_frame_t *cfp)
14337{
14338 return cfp->__bp__;
14339}
14340__attribute__((__noreturn__)) static void raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc);
14341__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);
14342__attribute__((__noreturn__)) static void argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys);
14343VALUE rb_keyword_error_new(const char *error, VALUE keys);
14344static VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv,
14345 enum method_missing_reason call_status, int kw_splat);
14346__attribute__ ((__visibility__("default"))) extern
14347const rb_callable_method_entry_t *rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
14348struct args_info {
14349 VALUE *argv;
14350 int argc;
14351 int rest_index;
14352 int rest_dupped;
14353 const struct rb_callinfo_kwarg *kw_arg;
14354 VALUE *kw_argv;
14355 VALUE rest;
14356};
14357enum arg_setup_type {
14358 arg_setup_method,
14359 arg_setup_block
14360};
14361static inline void
14362arg_rest_dup(struct args_info *args)
14363{
14364 if (!args->rest_dupped) {
14365 args->rest = rb_ary_dup(args->rest);
14366 args->rest_dupped = 1;
14367 }
14368}
14369static inline int
14370args_argc(struct args_info *args)
14371{
14372 if (args->rest == ((VALUE)RUBY_Qfalse)) {
14373 return args->argc;
14374 }
14375 else {
14376 return args->argc + RARRAY_LENINT(args->rest) - args->rest_index;
14377 }
14378}
14379static inline void
14380args_extend(struct args_info *args, const int min_argc)
14381{
14382 int i;
14383 if (args->rest) {
14384 arg_rest_dup(args);
14385 ((void)0);
14386 for (i=args->argc + RARRAY_LENINT(args->rest); i<min_argc; i++) {
14387 rb_ary_push(args->rest, ((VALUE)RUBY_Qnil));
14388 }
14389 }
14390 else {
14391 for (i=args->argc; i<min_argc; i++) {
14392 args->argv[args->argc++] = ((VALUE)RUBY_Qnil);
14393 }
14394 }
14395}
14396static inline void
14397args_reduce(struct args_info *args, int over_argc)
14398{
14399 if (args->rest) {
14400 const long len = rb_array_len(args->rest);
14401 if (len > over_argc) {
14402 arg_rest_dup(args);
14403 rb_ary_resize(args->rest, len - over_argc);
14404 return;
14405 }
14406 else {
14407 args->rest = ((VALUE)RUBY_Qfalse);
14408 over_argc -= len;
14409 }
14410 }
14411 ((void)0);
14412 args->argc -= over_argc;
14413}
14414static inline int
14415args_check_block_arg0(struct args_info *args)
14416{
14417 VALUE ary = ((VALUE)RUBY_Qnil);
14418 if (args->rest && rb_array_len(args->rest) == 1) {
14419 VALUE arg0 = RARRAY_AREF(args->rest, 0);
14420 ary = rb_check_array_type(arg0);
14421 }
14422 else if (args->argc == 1) {
14423 VALUE arg0 = args->argv[0];
14424 ary = rb_check_array_type(arg0);
14425 args->argv[0] = arg0;
14426 }
14427 if (!RB_NIL_P(ary)) {
14428 args->rest = ary;
14429 args->rest_index = 0;
14430 args->argc = 0;
14431 return 1;
14432 }
14433 return 0;
14434}
14435static inline void
14436args_copy(struct args_info *args)
14437{
14438 if (args->rest != ((VALUE)RUBY_Qfalse)) {
14439 int argc = args->argc;
14440 args->argc = 0;
14441 arg_rest_dup(args);
14442 while (args->rest_index > 0 && argc > 0) {
14443 RARRAY_ASET(args->rest, --args->rest_index, args->argv[--argc]);
14444 }
14445 while (argc > 0) {
14446 rb_ary_unshift(args->rest, args->argv[--argc]);
14447 }
14448 }
14449 else if (args->argc > 0) {
14450 args->rest = rb_ary_new_from_values(args->argc, args->argv);
14451 args->rest_index = 0;
14452 args->rest_dupped = 1;
14453 args->argc = 0;
14454 }
14455}
14456static inline const VALUE *
14457args_rest_argv(struct args_info *args)
14458{
14459 return rb_array_const_ptr_transient(args->rest) + args->rest_index;
14460}
14461static inline VALUE
14462args_rest_array(struct args_info *args)
14463{
14464 VALUE ary;
14465 if (args->rest) {
14466 ary = rb_ary_behead(args->rest, args->rest_index);
14467 args->rest_index = 0;
14468 args->rest = 0;
14469 }
14470 else {
14471 ary = rb_ary_new();
14472 }
14473 return ary;
14474}
14475static int
14476args_kw_argv_to_hash(struct args_info *args)
14477{
14478 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14479 const VALUE *const passed_keywords = kw_arg->keywords;
14480 const int kw_len = kw_arg->keyword_len;
14481 VALUE h = rb_hash_new_with_size(kw_len);
14482 const int kw_start = args->argc - kw_len;
14483 const VALUE * const kw_argv = args->argv + kw_start;
14484 int i;
14485 args->argc = kw_start + 1;
14486 for (i=0; i<kw_len; i++) {
14487 rb_hash_aset(h, passed_keywords[i], kw_argv[i]);
14488 }
14489 args->argv[args->argc - 1] = h;
14490 return args->argc;
14491}
14492static inline void
14493args_setup_lead_parameters(struct args_info *args, int argc, VALUE *locals)
14494{
14495 if (args->argc >= argc) {
14496 args->argc -= argc;
14497 args->argv += argc;
14498 }
14499 else {
14500 int i, j;
14501 const VALUE *argv = args_rest_argv(args);
14502 for (i=args->argc, j=0; i<argc; i++, j++) {
14503 locals[i] = argv[j];
14504 }
14505 args->rest_index += argc - args->argc;
14506 args->argc = 0;
14507 }
14508}
14509static inline void
14510args_setup_post_parameters(struct args_info *args, int argc, VALUE *locals)
14511{
14512 long len;
14513 len = rb_array_len(args->rest);
14514 ruby_nonempty_memcpy((locals), (rb_array_const_ptr_transient(args->rest) + len - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
14515 rb_ary_resize(args->rest, len - argc);
14516}
14517static inline int
14518args_setup_opt_parameters(struct args_info *args, int opt_max, VALUE *locals)
14519{
14520 int i;
14521 if (args->argc >= opt_max) {
14522 args->argc -= opt_max;
14523 args->argv += opt_max;
14524 i = opt_max;
14525 }
14526 else {
14527 int j;
14528 i = args->argc;
14529 args->argc = 0;
14530 if (args->rest) {
14531 int len = RARRAY_LENINT(args->rest);
14532 const VALUE *argv = rb_array_const_ptr_transient(args->rest);
14533 for (; i<opt_max && args->rest_index < len; i++, args->rest_index++) {
14534 locals[i] = argv[args->rest_index];
14535 }
14536 }
14537 for (j=i; j<opt_max; j++) {
14538 locals[j] = ((VALUE)RUBY_Qnil);
14539 }
14540 }
14541 return i;
14542}
14543static inline void
14544args_setup_rest_parameter(struct args_info *args, VALUE *locals)
14545{
14546 *locals = args_rest_array(args);
14547}
14548static VALUE
14549make_unknown_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14550{
14551 int i;
14552 VALUE obj = rb_ary_hidden_new(1);
14553 for (i=0; i<passed_keyword_len; i++) {
14554 if (!RB_UNDEF_P(kw_argv[i])) {
14555 rb_ary_push(obj, passed_keywords[i]);
14556 }
14557 }
14558 return obj;
14559}
14560static VALUE
14561make_rest_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14562{
14563 int i;
14564 VALUE obj = rb_hash_new_with_size(passed_keyword_len);
14565 for (i=0; i<passed_keyword_len; i++) {
14566 if (!RB_UNDEF_P(kw_argv[i])) {
14567 rb_hash_aset(obj, passed_keywords[i], kw_argv[i]);
14568 }
14569 }
14570 return obj;
14571}
14572static inline int
14573args_setup_kw_parameters_lookup(const ID key, VALUE *ptr, const VALUE *const passed_keywords, VALUE *passed_values, const int passed_keyword_len)
14574{
14575 int i;
14576 const VALUE keyname = rb_id2sym(key);
14577 for (i=0; i<passed_keyword_len; i++) {
14578 if (keyname == passed_keywords[i]) {
14579 *ptr = passed_values[i];
14580 passed_values[i] = ((VALUE)RUBY_Qundef);
14581 return 1;
14582 }
14583 }
14584 return 0;
14585}
14586static void
14587args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
14588 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
14589 VALUE *const locals)
14590{
14591 const ID *acceptable_keywords = ((iseq)->body)->param.keyword->table;
14592 const int req_key_num = ((iseq)->body)->param.keyword->required_num;
14593 const int key_num = ((iseq)->body)->param.keyword->num;
14594 const VALUE * const default_values = ((iseq)->body)->param.keyword->default_values;
14595 VALUE missing = 0;
14596 int i, di, found = 0;
14597 int unspecified_bits = 0;
14598 VALUE unspecified_bits_value = ((VALUE)RUBY_Qnil);
14599 for (i=0; i<req_key_num; i++) {
14600 ID key = acceptable_keywords[i];
14601 if (args_setup_kw_parameters_lookup(key, &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14602 found++;
14603 }
14604 else {
14605 if (!missing) missing = rb_ary_hidden_new(1);
14606 rb_ary_push(missing, rb_id2sym(key));
14607 }
14608 }
14609 if (missing) argument_kw_error(ec, iseq, "missing", missing);
14610 for (di=0; i<key_num; i++, di++) {
14611 if (args_setup_kw_parameters_lookup(acceptable_keywords[i], &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14612 found++;
14613 }
14614 else {
14615 if (RB_UNDEF_P(default_values[di])) {
14616 locals[i] = ((VALUE)RUBY_Qnil);
14617 if ((__builtin_expect(!!(i < (32-1)), 1))) {
14618 unspecified_bits |= 0x01 << di;
14619 }
14620 else {
14621 if (RB_NIL_P(unspecified_bits_value)) {
14622 int j;
14623 unspecified_bits_value = rb_hash_new();
14624 for (j=0; j<(32-1); j++) {
14625 if (unspecified_bits & (0x01 << j)) {
14626 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));
14627 }
14628 }
14629 }
14630 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));
14631 }
14632 }
14633 else {
14634 locals[i] = default_values[di];
14635 }
14636 }
14637 }
14638 if (((iseq)->body)->param.flags.has_kwrest) {
14639 const int rest_hash_index = key_num + 1;
14640 locals[rest_hash_index] = make_rest_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14641 }
14642 else {
14643 if (found != passed_keyword_len) {
14644 VALUE keys = make_unknown_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14645 argument_kw_error(ec, iseq, "unknown", keys);
14646 }
14647 }
14648 if (RB_NIL_P(unspecified_bits_value)) {
14649 unspecified_bits_value = __builtin_choose_expr( __builtin_constant_p(unspecified_bits), ((VALUE)(unspecified_bits)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(unspecified_bits));
14650 }
14651 locals[key_num] = unspecified_bits_value;
14652}
14653static inline void
14654args_setup_kw_rest_parameter(VALUE keyword_hash, VALUE *locals, int kw_flag)
14655{
14656 if (RB_NIL_P(keyword_hash)) {
14657 keyword_hash = rb_hash_new();
14658 }
14659 else if (!(kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
14660 keyword_hash = rb_hash_dup(keyword_hash);
14661 }
14662 locals[0] = keyword_hash;
14663}
14664static inline void
14665args_setup_block_parameter(const rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE *locals)
14666{
14667 VALUE block_handler = calling->block_handler;
14668 *locals = rb_vm_bh_to_procval(ec, block_handler);
14669}
14670struct fill_values_arg {
14671 VALUE *keys;
14672 VALUE *vals;
14673 int argc;
14674};
14675static int
14676fill_keys_values(st_data_t key, st_data_t val, st_data_t ptr)
14677{
14678 struct fill_values_arg *arg = (struct fill_values_arg *)ptr;
14679 int i = arg->argc++;
14680 arg->keys[i] = (VALUE)key;
14681 arg->vals[i] = (VALUE)val;
14682 return ST_CONTINUE;
14683}
14684static inline int
14685ignore_keyword_hash_p(VALUE keyword_hash, const rb_iseq_t * const iseq, unsigned int * kw_flag, VALUE * converted_keyword_hash)
14686{
14687 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
14688 keyword_hash = rb_to_hash_type(keyword_hash);
14689 }
14690 if (!(*kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit)) &&
14691 (((iseq)->body)->param.flags.has_kwrest ||
14692 ((iseq)->body)->param.flags.ruby2_keywords)) {
14693 *kw_flag |= (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14694 keyword_hash = rb_hash_dup(keyword_hash);
14695 }
14696 *converted_keyword_hash = keyword_hash;
14697 return !(((iseq)->body)->param.flags.has_kw) &&
14698 !(((iseq)->body)->param.flags.has_kwrest) &&
14699 RHASH_EMPTY_P(keyword_hash);
14700}
14701COLDFUNC static int
14702setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * const iseq,
14703 struct rb_calling_info *const calling,
14704 const struct rb_callinfo *ci,
14705 VALUE * const locals, const enum arg_setup_type arg_setup_type) {
14706 const int min_argc = ((iseq)->body)->param.lead_num + ((iseq)->body)->param.post_num;
14707 const int max_argc = (((iseq)->body)->param.flags.has_rest == 0) ? min_argc + ((iseq)->body)->param.opt_num : (-1);
14708 int given_argc;
14709 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));
14710 int opt_pc = 0, allow_autosplat = !kw_flag;
14711 struct args_info args_body, *args;
14712 VALUE keyword_hash = ((VALUE)RUBY_Qnil);
14713 VALUE * const orig_sp = ec->cfp->sp;
14714 unsigned int i;
14715 VALUE flag_keyword_hash = 0;
14716 VALUE splat_flagged_keyword_hash = 0;
14717 VALUE converted_keyword_hash = 0;
14718 VALUE rest_last = 0;
14719 ;
14720 for (i=calling->argc; i<((iseq)->body)->param.size; i++) {
14721 locals[i] = ((VALUE)RUBY_Qnil);
14722 }
14723 ec->cfp->sp = &locals[i];
14724 args = &args_body;
14725 given_argc = args->argc = calling->argc;
14726 args->argv = locals;
14727 args->rest_dupped = 0;
14728 if (kw_flag & (0x01 << VM_CALL_KWARG_bit)) {
14729 args->kw_arg = vm_ci_kwarg(ci);
14730 if (((iseq)->body)->param.flags.has_kw) {
14731 int kw_len = args->kw_arg->keyword_len;
14732 args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len))));
14733 args->argc -= kw_len;
14734 given_argc -= kw_len;
14735 ruby_nonempty_memcpy((args->kw_argv), (locals + args->argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len)));
14736 }
14737 else {
14738 args->kw_argv = ((void *)0);
14739 given_argc = args_kw_argv_to_hash(args);
14740 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14741 }
14742 }
14743 else {
14744 args->kw_arg = ((void *)0);
14745 args->kw_argv = ((void *)0);
14746 }
14747 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) {
14748 int len;
14749 args->rest = locals[--args->argc];
14750 args->rest_index = 0;
14751 len = RARRAY_LENINT(args->rest);
14752 given_argc += len - 1;
14753 rest_last = RARRAY_AREF(args->rest, len - 1);
14754 if (!kw_flag && len > 0) {
14755 if (RB_TYPE_P(rest_last, RUBY_T_HASH) &&
14756 (((struct RHash *)rest_last)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
14757 splat_flagged_keyword_hash = rest_last;
14758 rest_last = rb_hash_dup(rest_last);
14759 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14760 }
14761 else {
14762 rest_last = 0;
14763 }
14764 }
14765 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14766 if (ignore_keyword_hash_p(rest_last, iseq, &kw_flag, &converted_keyword_hash)) {
14767 arg_rest_dup(args);
14768 rb_ary_pop(args->rest);
14769 given_argc--;
14770 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14771 }
14772 else {
14773 if (rest_last != converted_keyword_hash) {
14774 rest_last = converted_keyword_hash;
14775 arg_rest_dup(args);
14776 RARRAY_ASET(args->rest, len - 1, rest_last);
14777 }
14778 if (((iseq)->body)->param.flags.ruby2_keywords && rest_last) {
14779 flag_keyword_hash = rest_last;
14780 }
14781 else if (((iseq)->body)->param.flags.has_kw || ((iseq)->body)->param.flags.has_kwrest) {
14782 arg_rest_dup(args);
14783 rb_ary_pop(args->rest);
14784 given_argc--;
14785 keyword_hash = rest_last;
14786 }
14787 }
14788 }
14789 }
14790 else {
14791 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14792 VALUE last_arg = args->argv[args->argc-1];
14793 if (ignore_keyword_hash_p(last_arg, iseq, &kw_flag, &converted_keyword_hash)) {
14794 args->argc--;
14795 given_argc--;
14796 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14797 }
14798 else {
14799 if (last_arg != converted_keyword_hash) {
14800 last_arg = converted_keyword_hash;
14801 args->argv[args->argc-1] = last_arg;
14802 }
14803 if (((iseq)->body)->param.flags.ruby2_keywords) {
14804 flag_keyword_hash = last_arg;
14805 }
14806 else if (((iseq)->body)->param.flags.has_kw || ((iseq)->body)->param.flags.has_kwrest) {
14807 args->argc--;
14808 given_argc--;
14809 keyword_hash = last_arg;
14810 }
14811 }
14812 }
14813 args->rest = ((VALUE)RUBY_Qfalse);
14814 }
14815 if (flag_keyword_hash && RB_TYPE_P(flag_keyword_hash, RUBY_T_HASH)) {
14816 ((struct RHash *)flag_keyword_hash)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
14817 }
14818 if (kw_flag && ((iseq)->body)->param.flags.accepts_no_kwarg) {
14819 rb_raise(rb_eArgError, "no keywords accepted");
14820 }
14821 switch (arg_setup_type) {
14822 case arg_setup_method:
14823 break;
14824 case arg_setup_block:
14825 if (given_argc == (RB_NIL_P(keyword_hash) ? 1 : 2) &&
14826 allow_autosplat &&
14827 (min_argc > 0 || ((iseq)->body)->param.opt_num > 1) &&
14828 !((iseq)->body)->param.flags.ambiguous_param0 &&
14829 !((((iseq)->body)->param.flags.has_kw ||
14830 ((iseq)->body)->param.flags.has_kwrest)
14831 && max_argc == 1) &&
14832 args_check_block_arg0(args)) {
14833 given_argc = RARRAY_LENINT(args->rest);
14834 }
14835 break;
14836 }
14837 if (given_argc < min_argc) {
14838 if (arg_setup_type == arg_setup_block) {
14839 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);
14840 given_argc = min_argc;
14841 args_extend(args, min_argc);
14842 }
14843 else {
14844 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14845 }
14846 }
14847 if (given_argc > max_argc && max_argc != (-1)) {
14848 if (arg_setup_type == arg_setup_block) {
14849 args_reduce(args, given_argc - max_argc);
14850 given_argc = max_argc;
14851 }
14852 else {
14853 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14854 }
14855 }
14856 if (((iseq)->body)->param.flags.has_lead) {
14857 args_setup_lead_parameters(args, ((iseq)->body)->param.lead_num, locals + 0);
14858 }
14859 if (((iseq)->body)->param.flags.has_rest || ((iseq)->body)->param.flags.has_post){
14860 args_copy(args);
14861 }
14862 if (((iseq)->body)->param.flags.has_post) {
14863 args_setup_post_parameters(args, ((iseq)->body)->param.post_num, locals + ((iseq)->body)->param.post_start);
14864 }
14865 if (((iseq)->body)->param.flags.has_opt) {
14866 int opt = args_setup_opt_parameters(args, ((iseq)->body)->param.opt_num, locals + ((iseq)->body)->param.lead_num);
14867 opt_pc = (int)((iseq)->body)->param.opt_table[opt];
14868 }
14869 if (((iseq)->body)->param.flags.has_rest) {
14870 args_setup_rest_parameter(args, locals + ((iseq)->body)->param.rest_start);
14871 VALUE ary = *(locals + ((iseq)->body)->param.rest_start);
14872 VALUE index = rb_array_len(ary) - 1;
14873 if (splat_flagged_keyword_hash &&
14874 !((iseq)->body)->param.flags.ruby2_keywords &&
14875 !((iseq)->body)->param.flags.has_kw &&
14876 !((iseq)->body)->param.flags.has_kwrest &&
14877 RARRAY_AREF(ary, index) == splat_flagged_keyword_hash) {
14878 ((struct RHash *)rest_last)->basic.flags &= ~RHASH_PASS_AS_KEYWORDS;
14879 RARRAY_ASET(ary, index, rest_last);
14880 }
14881 }
14882 if (((iseq)->body)->param.flags.has_kw) {
14883 VALUE * const klocals = locals + ((iseq)->body)->param.keyword->bits_start - ((iseq)->body)->param.keyword->num;
14884 if (args->kw_argv != ((void *)0)) {
14885 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14886 args_setup_kw_parameters(ec, iseq, args->kw_argv, kw_arg->keyword_len, kw_arg->keywords, klocals);
14887 }
14888 else if (!RB_NIL_P(keyword_hash)) {
14889 int kw_len = rb_long2int_inline(RHASH_SIZE(keyword_hash));
14890 struct fill_values_arg arg;
14891 arg.keys = args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len * 2))));
14892 arg.vals = arg.keys + kw_len;
14893 arg.argc = 0;
14894 rb_hash_foreach(keyword_hash, fill_keys_values, (VALUE)&arg);
14895 ((void)0);
14896 args_setup_kw_parameters(ec, iseq, arg.vals, kw_len, arg.keys, klocals);
14897 }
14898 else {
14899 ((void)0);
14900 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
14901 }
14902 }
14903 else if (((iseq)->body)->param.flags.has_kwrest) {
14904 args_setup_kw_rest_parameter(keyword_hash, locals + ((iseq)->body)->param.keyword->rest_start, kw_flag);
14905 }
14906 else if (!RB_NIL_P(keyword_hash) && RHASH_SIZE(keyword_hash) > 0 && arg_setup_type == arg_setup_method) {
14907 argument_kw_error(ec, iseq, "unknown", rb_hash_keys(keyword_hash));
14908 }
14909 if (((iseq)->body)->param.flags.has_block) {
14910 if (((iseq)->body)->local_iseq == iseq) {
14911 }
14912 else {
14913 args_setup_block_parameter(ec, calling, locals + ((iseq)->body)->param.block_start);
14914 }
14915 }
14916 ec->cfp->sp = orig_sp;
14917 return opt_pc;
14918}
14919static void
14920raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc)
14921{
14922 VALUE at;
14923 if (iseq) {
14924 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL, ((VALUE)RUBY_Qnil) ,
14925 0 , ((VALUE)RUBY_Qfalse) ,
14926 ((iseq)->body)->iseq_encoded,
14927 ec->cfp->sp, 0, 0 );
14928 at = rb_ec_backtrace_object(ec);
14929 rb_backtrace_use_iseq_first_lineno_for_last_location(at);
14930 rb_vm_pop_frame(ec);
14931 }
14932 else {
14933 at = rb_ec_backtrace_object(ec);
14934 }
14935 rb_ivar_set(exc, idBt_locations, at);
14936 rb_exc_set_backtrace(exc, at);
14937 rb_exc_raise(exc);
14938}
14939static void
14940argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc)
14941{
14942 VALUE exc = rb_arity_error_new(miss_argc, min_argc, max_argc);
14943 if (((iseq)->body)->param.flags.has_kw) {
14944 const struct rb_iseq_param_keyword *const kw = ((iseq)->body)->param.keyword;
14945 const ID *keywords = kw->table;
14946 int req_key_num = kw->required_num;
14947 if (req_key_num > 0) {
14948 static const char required[] = "; required keywords";
14949 VALUE mesg = rb_attr_get(exc, idMesg);
14950 rb_str_resize(mesg, RSTRING_LEN(mesg)-1);
14951 rb_str_cat(mesg, required, sizeof(required) - 1 - (req_key_num == 1));
14952 ((__builtin_constant_p(":") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (":")));
14953 do {
14954 ((__builtin_constant_p(" ") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (" ")));
14955 rb_str_append(mesg, rb_id2str(*keywords++));
14956 ((__builtin_constant_p(",") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (",")));
14957 } while (--req_key_num);
14958 RSTRING_PTR(mesg)[RSTRING_LEN(mesg)-1] = ')';
14959 }
14960 }
14961 raise_argument_error(ec, iseq, exc);
14962}
14963static void
14964argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys)
14965{
14966 raise_argument_error(ec, iseq, rb_keyword_error_new(error, keys));
14967}
14968static inline void
14969vm_caller_setup_arg_splat(rb_control_frame_t *cfp, struct rb_calling_info *calling)
14970{
14971 int argc = calling->argc;
14972 VALUE *argv = cfp->sp - argc;
14973 VALUE ary = argv[argc-1];
14974 ;
14975 cfp->sp--;
14976 if (!RB_NIL_P(ary)) {
14977 const VALUE *ptr = rb_array_const_ptr_transient(ary);
14978 long len = rb_array_len(ary), i;
14979 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);
14980 for (i = 0; i < len; i++) {
14981 *cfp->sp++ = ptr[i];
14982 }
14983 calling->argc += i - 1;
14984 }
14985}
14986static inline void
14987vm_caller_setup_arg_kw(rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci)
14988{
14989 const VALUE *const passed_keywords = vm_ci_kwarg(ci)->keywords;
14990 const int kw_len = vm_ci_kwarg(ci)->keyword_len;
14991 const VALUE h = rb_hash_new_with_size(kw_len);
14992 VALUE *sp = cfp->sp;
14993 int i;
14994 for (i=0; i<kw_len; i++) {
14995 rb_hash_aset(h, passed_keywords[i], (sp - kw_len)[i]);
14996 }
14997 (sp-kw_len)[0] = h;
14998 cfp->sp -= kw_len - 1;
14999 calling->argc -= kw_len - 1;
15000 calling->kw_splat = 1;
15001}
15002static VALUE
15003vm_to_proc(VALUE proc)
15004{
15005 if ((__builtin_expect(!!(!rb_obj_is_proc(proc)), 0))) {
15006 VALUE b;
15007 const rb_callable_method_entry_t *me =
15008 rb_callable_method_entry_with_refinements(rb_class_of(proc), idTo_proc, ((void *)0));
15009 if (me) {
15010 b = rb_vm_call0(rb_current_execution_context(1), proc, idTo_proc, 0, ((void *)0), me, 0);
15011 }
15012 else {
15013 b = rb_check_convert_type_with_id(proc, RUBY_T_DATA, "Proc", idTo_proc);
15014 }
15015 if (RB_NIL_P(b) || !rb_obj_is_proc(b)) {
15016 rb_raise(rb_eTypeError,
15017 "wrong argument type %s (expected Proc)",
15018 rb_obj_classname(proc));
15019 }
15020 return b;
15021 }
15022 else {
15023 return proc;
15024 }
15025}
15026static VALUE
15027refine_sym_proc_call(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg)
15028{
15029 VALUE obj;
15030 ID mid;
15031 const rb_callable_method_entry_t *me = 0;
15032 rb_execution_context_t *ec;
15033 const VALUE symbol = RARRAY_AREF(callback_arg, 0);
15034 const VALUE refinements = RARRAY_AREF(callback_arg, 1);
15035 int kw_splat = rb_keyword_given_p();
15036 VALUE klass;
15037 if (argc-- < 1) {
15038 rb_raise(rb_eArgError, "no receiver given");
15039 }
15040 obj = *argv++;
15041 mid = rb_sym2id(symbol);
15042 for (klass = rb_class_of(obj); klass; klass = RCLASS_SUPER(klass)) {
15043 me = rb_callable_method_entry(klass, mid);
15044 if (me) {
15045 me = rb_resolve_refined_method_callable(refinements, me);
15046 if (me) break;
15047 }
15048 }
15049 ec = rb_current_execution_context(1);
15050 if (!RB_NIL_P(blockarg)) {
15051 vm_passed_block_handler_set(ec, blockarg);
15052 }
15053 if (!me) {
15054 return method_missing(ec, obj, mid, argc, argv, MISSING_NOENTRY, kw_splat);
15055 }
15056 return rb_vm_call0(ec, obj, mid, argc, argv, me, kw_splat);
15057}
15058static VALUE
15059vm_caller_setup_arg_block(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15060 const struct rb_callinfo *ci, const rb_iseq_t *blockiseq, const int is_super)
15061{
15062 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_BLOCKARG_bit)) {
15063 VALUE block_code = *(--reg_cfp->sp);
15064 if (RB_NIL_P(block_code)) {
15065 return 0;
15066 }
15067 else if (block_code == rb_block_param_proxy) {
15068 ((void)0);
15069 VALUE handler = VM_CF_BLOCK_HANDLER(reg_cfp);
15070 reg_cfp->block_code = (const void *) handler;
15071 return handler;
15072 }
15073 else if (RB_SYMBOL_P(block_code) && rb_method_basic_definition_p(rb_cSymbol, idTo_proc)) {
15074 const rb_cref_t *cref = vm_env_cref(reg_cfp->ep);
15075 if (cref && !RB_NIL_P(cref->refinements)) {
15076 VALUE ref = cref->refinements;
15077 VALUE func = rb_hash_lookup(ref, block_code);
15078 if (RB_NIL_P(func)) {
15079 VALUE callback_arg = rb_ary_hidden_new(2);
15080 rb_ary_push(callback_arg, block_code);
15081 rb_ary_push(callback_arg, ref);
15082 RB_OBJ_FREEZE_RAW(callback_arg);
15083 func = rb_func_lambda_new(refine_sym_proc_call, callback_arg, 1, (-1));
15084 rb_hash_aset(ref, block_code, func);
15085 }
15086 block_code = func;
15087 }
15088 return block_code;
15089 }
15090 else {
15091 return vm_to_proc(block_code);
15092 }
15093 }
15094 else if (blockiseq != ((void *)0)) {
15095 struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(reg_cfp);
15096 captured->code.iseq = blockiseq;
15097 return VM_BH_FROM_ISEQ_BLOCK(captured);
15098 }
15099 else {
15100 if (is_super) {
15101 return ((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]);
15102 }
15103 else {
15104 return 0;
15105 }
15106 }
15107}
15108static 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);
15109__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);
15110static 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);
15111static VALUE vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
15112static VALUE vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15113static VALUE vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15114static inline VALUE vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15115static vm_call_handler vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size);
15116static VALUE
15117vm_call_iseq_setup_tailcall_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15118{
15119 ((void)0);
15120 return vm_call_iseq_setup_tailcall(ec, cfp, calling, 0);
15121}
15122static VALUE
15123vm_call_iseq_setup_normal_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15124{
15125 ((void)0);
15126 const struct rb_callcache *cc = calling->cc;
15127 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15128 int param = ((iseq)->body)->param.size;
15129 int local = ((iseq)->body)->local_table_size;
15130 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15131}
15132static _Bool
15133rb_simple_iseq_p(const rb_iseq_t *iseq)
15134{
15135 return ((iseq)->body)->param.flags.has_opt == 0 &&
15136 ((iseq)->body)->param.flags.has_rest == 0 &&
15137 ((iseq)->body)->param.flags.has_post == 0 &&
15138 ((iseq)->body)->param.flags.has_kw == 0 &&
15139 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15140 ((iseq)->body)->param.flags.accepts_no_kwarg == 0 &&
15141 ((iseq)->body)->param.flags.has_block == 0;
15142}static inline
15143__attribute__ ((__visibility__("default"))) _Bool
15144rb_iseq_only_optparam_p(const rb_iseq_t *iseq)
15145{
15146 return ((iseq)->body)->param.flags.has_opt == 1 &&
15147 ((iseq)->body)->param.flags.has_rest == 0 &&
15148 ((iseq)->body)->param.flags.has_post == 0 &&
15149 ((iseq)->body)->param.flags.has_kw == 0 &&
15150 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15151 ((iseq)->body)->param.flags.accepts_no_kwarg == 0 &&
15152 ((iseq)->body)->param.flags.has_block == 0;
15153}static inline
15154__attribute__ ((__visibility__("default"))) _Bool
15155rb_iseq_only_kwparam_p(const rb_iseq_t *iseq)
15156{
15157 return ((iseq)->body)->param.flags.has_opt == 0 &&
15158 ((iseq)->body)->param.flags.has_rest == 0 &&
15159 ((iseq)->body)->param.flags.has_post == 0 &&
15160 ((iseq)->body)->param.flags.has_kw == 1 &&
15161 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15162 ((iseq)->body)->param.flags.has_block == 0;
15163}
15164static _Bool
15165rb_splat_or_kwargs_p(const struct rb_callinfo *__restrict__ ci)
15166{
15167 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)));
15168}
15169static inline void
15170CALLER_SETUP_ARG(struct rb_control_frame_struct *__restrict__ cfp,
15171 struct rb_calling_info *__restrict__ calling,
15172 const struct rb_callinfo *__restrict__ ci)
15173{
15174 if ((__builtin_expect(!!((vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))), 0))) {
15175 VALUE final_hash;
15176 vm_caller_setup_arg_splat(cfp, calling);
15177 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit))) &&
15178 calling->argc > 0 &&
15179 RB_TYPE_P((final_hash = *(cfp->sp - 1)), RUBY_T_HASH) &&
15180 (((struct RHash *)final_hash)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
15181 *(cfp->sp - 1) = rb_hash_dup(final_hash);
15182 calling->kw_splat = 1;
15183 }
15184 }
15185 if ((__builtin_expect(!!((vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)))), 0))) {
15186 if ((vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit))) {
15187 vm_caller_setup_arg_kw(cfp, calling, ci);
15188 }
15189 else {
15190 VALUE keyword_hash = cfp->sp[-1];
15191 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
15192 cfp->sp[-1] = rb_hash_dup(rb_to_hash_type(keyword_hash));
15193 }
15194 else if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
15195 cfp->sp[-1] = rb_hash_dup(keyword_hash);
15196 }
15197 }
15198 }
15199}
15200static inline void
15201CALLER_REMOVE_EMPTY_KW_SPLAT(struct rb_control_frame_struct *__restrict__ cfp,
15202 struct rb_calling_info *__restrict__ calling,
15203 const struct rb_callinfo *__restrict__ ci)
15204{
15205 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15206 if (RHASH_EMPTY_P(cfp->sp[-1])) {
15207 cfp->sp--;
15208 calling->argc--;
15209 calling->kw_splat = 0;
15210 }
15211 }
15212}
15213static VALUE
15214vm_call_iseq_setup_normal_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15215 struct rb_calling_info *calling)
15216{
15217 const struct rb_callcache *cc = calling->cc;
15218 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15219 const int lead_num = ((iseq)->body)->param.lead_num;
15220 const int opt = calling->argc - lead_num;
15221 const int opt_num = ((iseq)->body)->param.opt_num;
15222 const int opt_pc = (int)((iseq)->body)->param.opt_table[opt];
15223 const int param = ((iseq)->body)->param.size;
15224 const int local = ((iseq)->body)->local_table_size;
15225 const int delta = opt_num - opt;
15226 ((void)0);
15227 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param - delta, local);
15228}
15229static VALUE
15230vm_call_iseq_setup_tailcall_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15231 struct rb_calling_info *calling)
15232{
15233 const struct rb_callcache *cc = calling->cc;
15234 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15235 const int lead_num = ((iseq)->body)->param.lead_num;
15236 const int opt = calling->argc - lead_num;
15237 const int opt_pc = (int)((iseq)->body)->param.opt_table[opt];
15238 ((void)0);
15239 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
15240}
15241static void
15242args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
15243 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
15244 VALUE *const locals);
15245static VALUE
15246vm_call_iseq_setup_kwparm_kwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15247 struct rb_calling_info *calling)
15248{
15249 const struct rb_callinfo *ci = calling->ci;
15250 const struct rb_callcache *cc = calling->cc;
15251 ((void)0);
15252 ((void)0);
15253 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15254 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15255 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
15256 const int ci_kw_len = kw_arg->keyword_len;
15257 const VALUE * const ci_keywords = kw_arg->keywords;
15258 VALUE *argv = cfp->sp - calling->argc;
15259 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15260 const int lead_num = ((iseq)->body)->param.lead_num;
15261 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
15262 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
15263 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
15264 int param = ((iseq)->body)->param.size;
15265 int local = ((iseq)->body)->local_table_size;
15266 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15267}
15268static VALUE
15269vm_call_iseq_setup_kwparm_nokwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15270 struct rb_calling_info *calling)
15271{
15272 const struct rb_callinfo *__attribute__ ((__unused__)) ci = calling->ci;
15273 const struct rb_callcache *cc = calling->cc;
15274 ((void)0);
15275 ((void)0);
15276 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15277 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15278 VALUE * const argv = cfp->sp - calling->argc;
15279 VALUE * const klocals = argv + kw_param->bits_start - kw_param->num;
15280 int i;
15281 for (i=0; i<kw_param->num; i++) {
15282 klocals[i] = kw_param->default_values[i];
15283 }
15284 klocals[i] = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
15285 int param = ((iseq)->body)->param.size;
15286 int local = ((iseq)->body)->local_table_size;
15287 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15288}
15289static inline int
15290vm_callee_setup_arg(rb_execution_context_t *ec, struct rb_calling_info *calling,
15291 const rb_iseq_t *iseq, VALUE *argv, int param_size, int local_size)
15292{
15293 const struct rb_callinfo *ci = calling->ci;
15294 const struct rb_callcache *cc = calling->cc;
15295 _Bool cacheable_ci = vm_ci_markable(ci);
15296 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit))), 1))) {
15297 if ((__builtin_expect(!!(rb_simple_iseq_p(iseq)), 1))) {
15298 rb_control_frame_t *cfp = ec->cfp;
15299 CALLER_SETUP_ARG(cfp, calling, ci);
15300 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15301 if (calling->argc != ((iseq)->body)->param.lead_num) {
15302 argument_arity_error(ec, iseq, calling->argc, ((iseq)->body)->param.lead_num, ((iseq)->body)->param.lead_num);
15303 }
15304 ((void)0);
15305 ((void)0);
15306 CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size), cacheable_ci && vm_call_iseq_optimizable_p(ci, cc));
15307 return 0;
15308 }
15309 else if (rb_iseq_only_optparam_p(iseq)) {
15310 rb_control_frame_t *cfp = ec->cfp;
15311 CALLER_SETUP_ARG(cfp, calling, ci);
15312 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15313 const int lead_num = ((iseq)->body)->param.lead_num;
15314 const int opt_num = ((iseq)->body)->param.opt_num;
15315 const int argc = calling->argc;
15316 const int opt = argc - lead_num;
15317 if (opt < 0 || opt > opt_num) {
15318 argument_arity_error(ec, iseq, argc, lead_num, lead_num + opt_num);
15319 }
15320 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
15321 CC_SET_FASTPATH(cc, vm_call_iseq_setup_normal_opt_start,
15322 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
15323 cacheable_ci && vm_call_cacheable(ci, cc));
15324 }
15325 else {
15326 CC_SET_FASTPATH(cc, vm_call_iseq_setup_tailcall_opt_start,
15327 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
15328 cacheable_ci && vm_call_cacheable(ci, cc));
15329 }
15330 ((void)0);
15331 for (int i=argc; i<lead_num + opt_num; i++) {
15332 argv[i] = ((VALUE)RUBY_Qnil);
15333 }
15334 return (int)((iseq)->body)->param.opt_table[opt];
15335 }
15336 else if (rb_iseq_only_kwparam_p(iseq) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))) {
15337 const int lead_num = ((iseq)->body)->param.lead_num;
15338 const int argc = calling->argc;
15339 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15340 if (vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) {
15341 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
15342 if (argc - kw_arg->keyword_len == lead_num) {
15343 const int ci_kw_len = kw_arg->keyword_len;
15344 const VALUE * const ci_keywords = kw_arg->keywords;
15345 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
15346 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
15347 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15348 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
15349 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_kwarg,
15350 cacheable_ci && vm_call_cacheable(ci, cc));
15351 return 0;
15352 }
15353 }
15354 else if (argc == lead_num) {
15355 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15356 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
15357 if (klocals[kw_param->num] == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0))) {
15358 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_nokwarg,
15359 cacheable_ci && vm_call_cacheable(ci, cc));
15360 }
15361 return 0;
15362 }
15363 }
15364 }
15365 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_method);
15366}
15367COLDFUNC static VALUE
15368vm_call_iseq_setup(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
15369 ((void)0);
15370 const struct rb_callcache *cc = calling->cc;
15371 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15372 const int param_size = ((iseq)->body)->param.size;
15373 const int local_size = ((iseq)->body)->local_table_size;
15374 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);
15375 return vm_call_iseq_setup_2(ec, cfp, calling, opt_pc, param_size, local_size);
15376}
15377COLDFUNC static VALUE
15378vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
15379 int opt_pc, int param_size, int local_size) {
15380 const struct rb_callinfo *ci = calling->ci;
15381 const struct rb_callcache *cc = calling->cc;
15382 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
15383 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param_size, local_size);
15384 }
15385 else {
15386 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
15387 }
15388}
15389static inline VALUE
15390vm_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,
15391 int opt_pc, int param_size, int local_size)
15392{
15393 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15394 VALUE *argv = cfp->sp - calling->argc;
15395 VALUE *sp = argv + param_size;
15396 cfp->sp = argv - 1 ;
15397 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL, calling->recv,
15398 calling->block_handler, (VALUE)me,
15399 ((iseq)->body)->iseq_encoded + opt_pc, sp,
15400 local_size - param_size,
15401 ((iseq)->body)->stack_max);
15402 return ((VALUE)RUBY_Qundef);
15403}
15404COLDFUNC static VALUE
15405vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc) {
15406 const struct rb_callcache *cc = calling->cc;
15407 unsigned int i;
15408 VALUE *argv = cfp->sp - calling->argc;
15409 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15410 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15411 VALUE *src_argv = argv;
15412 VALUE *sp_orig, *sp;
15413 VALUE finish_flag = VM_FRAME_FINISHED_P(cfp) ? VM_FRAME_FLAG_FINISH : 0;
15414 if (VM_BH_FROM_CFP_P(calling->block_handler, cfp)) {
15415 struct rb_captured_block *dst_captured = VM_CFP_TO_CAPTURED_BLOCK(((cfp)+1));
15416 const struct rb_captured_block *src_captured = VM_BH_TO_CAPT_BLOCK(calling->block_handler);
15417 dst_captured->code.val = src_captured->code.val;
15418 if (VM_BH_ISEQ_BLOCK_P(calling->block_handler)) {
15419 calling->block_handler = VM_BH_FROM_ISEQ_BLOCK(dst_captured);
15420 }
15421 else {
15422 calling->block_handler = VM_BH_FROM_IFUNC_BLOCK(dst_captured);
15423 }
15424 }
15425 vm_pop_frame(ec, cfp, cfp->ep);
15426 cfp = ec->cfp;
15427 sp_orig = sp = cfp->sp;
15428 sp[0] = calling->recv;
15429 sp++;
15430 for (i=0; i < ((iseq)->body)->param.size; i++) {
15431 *sp++ = src_argv[i];
15432 }
15433 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL | finish_flag,
15434 calling->recv, calling->block_handler, (VALUE)me,
15435 ((iseq)->body)->iseq_encoded + opt_pc, sp,
15436 ((iseq)->body)->local_table_size - ((iseq)->body)->param.size,
15437 ((iseq)->body)->stack_max);
15438 cfp->sp = sp_orig;
15439 return ((VALUE)RUBY_Qundef);
15440}
15441static void
15442ractor_unsafe_check(void)
15443{
15444 if (!rb_ractor_main_p()) {
15445 rb_raise(rb_eRactorUnsafeError, "ractor unsafe method called from not main ractor");
15446 }
15447}
15448static VALUE
15449call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15450{
15451 ractor_unsafe_check();
15452 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15453 return (*f)(recv, rb_ary_new_from_values(argc, argv));
15454}
15455static VALUE
15456call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15457{
15458 ractor_unsafe_check();
15459 VALUE(*f)(int, const VALUE *, VALUE) = (VALUE(*)(int, const VALUE *, VALUE))func;
15460 return (*f)(argc, argv, recv);
15461}
15462static VALUE
15463call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15464{
15465 ractor_unsafe_check();
15466 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15467 return (*f)(recv);
15468}
15469static VALUE
15470call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15471{
15472 ractor_unsafe_check();
15473 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15474 return (*f)(recv, argv[0]);
15475}
15476static VALUE
15477call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15478{
15479 ractor_unsafe_check();
15480 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15481 return (*f)(recv, argv[0], argv[1]);
15482}
15483static VALUE
15484call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15485{
15486 ractor_unsafe_check();
15487 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15488 return (*f)(recv, argv[0], argv[1], argv[2]);
15489}
15490static VALUE
15491call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15492{
15493 ractor_unsafe_check();
15494 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15495 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15496}
15497static VALUE
15498call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15499{
15500 ractor_unsafe_check();
15501 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15502 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15503}
15504static VALUE
15505call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15506{
15507 ractor_unsafe_check();
15508 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15509 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15510}
15511static VALUE
15512call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15513{
15514 ractor_unsafe_check();
15515 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15516 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15517}
15518static VALUE
15519call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15520{
15521 ractor_unsafe_check();
15522 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15523 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15524}
15525static VALUE
15526call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15527{
15528 ractor_unsafe_check();
15529 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15530 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15531}
15532static VALUE
15533call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15534{
15535 ractor_unsafe_check();
15536 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;
15537 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15538}
15539static VALUE
15540call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15541{
15542 ractor_unsafe_check();
15543 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;
15544 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]);
15545}
15546static VALUE
15547call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15548{
15549 ractor_unsafe_check();
15550 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;
15551 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]);
15552}
15553static VALUE
15554call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15555{
15556 ractor_unsafe_check();
15557 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;
15558 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]);
15559}
15560static VALUE
15561call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15562{
15563 ractor_unsafe_check();
15564 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;
15565 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]);
15566}
15567static VALUE
15568call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15569{
15570 ractor_unsafe_check();
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, 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], argv[10], argv[11], argv[12], argv[13], argv[14]);
15573}
15574static VALUE
15575ractor_safe_call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15576{
15577 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15578 return (*f)(recv, rb_ary_new_from_values(argc, argv));
15579}
15580static VALUE
15581ractor_safe_call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15582{
15583 VALUE(*f)(int, const VALUE *, VALUE) = (VALUE(*)(int, const VALUE *, VALUE))func;
15584 return (*f)(argc, argv, recv);
15585}
15586static VALUE
15587ractor_safe_call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15588{
15589 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15590 return (*f)(recv);
15591}
15592static VALUE
15593ractor_safe_call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15594{
15595 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15596 return (*f)(recv, argv[0]);
15597}
15598static VALUE
15599ractor_safe_call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15600{
15601 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15602 return (*f)(recv, argv[0], argv[1]);
15603}
15604static VALUE
15605ractor_safe_call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15606{
15607 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15608 return (*f)(recv, argv[0], argv[1], argv[2]);
15609}
15610static VALUE
15611ractor_safe_call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15612{
15613 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15614 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15615}
15616static VALUE
15617ractor_safe_call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15618{
15619 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15620 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15621}
15622static VALUE
15623ractor_safe_call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15624{
15625 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15626 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15627}
15628static VALUE
15629ractor_safe_call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15630{
15631 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15632 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15633}
15634static VALUE
15635ractor_safe_call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15636{
15637 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15638 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15639}
15640static VALUE
15641ractor_safe_call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15642{
15643 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15644 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15645}
15646static VALUE
15647ractor_safe_call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15648{
15649 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;
15650 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15651}
15652static VALUE
15653ractor_safe_call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15654{
15655 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;
15656 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]);
15657}
15658static VALUE
15659ractor_safe_call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15660{
15661 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;
15662 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]);
15663}
15664static VALUE
15665ractor_safe_call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15666{
15667 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;
15668 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]);
15669}
15670static VALUE
15671ractor_safe_call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15672{
15673 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;
15674 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]);
15675}
15676static VALUE
15677ractor_safe_call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15678{
15679 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;
15680 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]);
15681}
15682static inline int
15683vm_cfp_consistent_p(rb_execution_context_t *ec, const rb_control_frame_t *reg_cfp)
15684{
15685 const int ov_flags = RAISED_STACKOVERFLOW;
15686 if ((__builtin_expect(!!(reg_cfp == ec->cfp + 1), 1))) return 1;
15687 if ((((ec)->raised_flag & (ov_flags)) != 0)) {
15688 ((ec)->raised_flag &= ~(ov_flags));
15689 return 1;
15690 }
15691 return 0;
15692}
15693static inline
15694const rb_method_cfunc_t *
15695vm_method_cfunc_entry(const rb_callable_method_entry_t *me)
15696{
15697 return __extension__({
15698 ;
15699 ; __typeof__(&(me->def)->body.cfunc) unaligned_member_access_result = (&(me->def)->body.cfunc);
15700 ; unaligned_member_access_result; });
15701}
15702static VALUE
15703vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15704{
15705 ((void)0);
15706 const struct rb_callinfo *ci = calling->ci;
15707 const struct rb_callcache *cc = calling->cc;
15708 VALUE val;
15709 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15710 const rb_method_cfunc_t *cfunc = vm_method_cfunc_entry(me);
15711 int len = cfunc->argc;
15712 VALUE recv = calling->recv;
15713 VALUE block_handler = calling->block_handler;
15714 VALUE frame_type = VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL;
15715 int argc = calling->argc;
15716 int orig_argc = argc;
15717 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15718 frame_type |= VM_FRAME_FLAG_CFRAME_KW;
15719 }
15720 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);
15721 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);
15722 vm_push_frame(ec, ((void *)0), frame_type, recv,
15723 block_handler, (VALUE)me,
15724 0, ec->cfp->sp, 0, 0);
15725 if (len >= 0) rb_check_arity(argc, len, len);
15726 reg_cfp->sp -= orig_argc + 1;
15727 val = (*cfunc->invoker)(recv, argc, reg_cfp->sp + 1, cfunc->func);
15728 ((__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)));
15729 rb_vm_pop_frame(ec);
15730 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);
15731 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);
15732 return val;
15733}
15734static VALUE
15735vm_call_cfunc(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15736{
15737 const struct rb_callinfo *ci = calling->ci;
15738 ((void)0);
15739 CALLER_SETUP_ARG(reg_cfp, calling, ci);
15740 CALLER_REMOVE_EMPTY_KW_SPLAT(reg_cfp, calling, ci);
15741 CC_SET_FASTPATH(calling->cc, vm_call_cfunc_with_frame, !rb_splat_or_kwargs_p(ci) && !calling->kw_splat);
15742 return vm_call_cfunc_with_frame(ec, reg_cfp, calling);
15743}
15744static VALUE
15745vm_call_ivar(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15746{
15747 const struct rb_callcache *cc = calling->cc;
15748 ((void)0);
15749 cfp->sp -= 1;
15750 VALUE ivar = vm_getivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, ((void *)0), ((void *)0), cc, 1);
15751 return ivar;
15752}
15753static VALUE
15754vm_call_attrset_direct(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_callcache *cc, VALUE obj)
15755{
15756 ((void)0);
15757 VALUE val = *(cfp->sp - 1);
15758 cfp->sp -= 2;
15759 attr_index_t index = vm_cc_attr_index(cc);
15760 shape_id_t dest_shape_id = vm_cc_attr_index_dest_shape_id(cc);
15761 ID id = vm_cc_cme(cc)->def->body.attr.id;
15762 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
15763 VALUE res = vm_setivar(obj, id, val, dest_shape_id, index);
15764 if (RB_UNDEF_P(res)) {
15765 switch (RB_BUILTIN_TYPE(obj)) {
15766 case RUBY_T_OBJECT:
15767 case RUBY_T_CLASS:
15768 case RUBY_T_MODULE:
15769 break;
15770 default:
15771 {
15772 res = vm_setivar_default(obj, id, val, dest_shape_id, index);
15773 if (!RB_UNDEF_P(res)) {
15774 return res;
15775 }
15776 }
15777 }
15778 res = vm_setivar_slowpath_attr(obj, id, val, cc);
15779 }
15780 return res;
15781}
15782static VALUE
15783vm_call_attrset(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15784{
15785 return vm_call_attrset_direct(ec, cfp, calling->cc, calling->recv);
15786}static inline
15787_Bool
15788rb_vm_call_ivar_attrset_p(const vm_call_handler ch)
15789{
15790 return (ch == vm_call_ivar || ch == vm_call_attrset);
15791}
15792static inline VALUE
15793vm_call_bmethod_body(rb_execution_context_t *ec, struct rb_calling_info *calling, const VALUE *argv)
15794{
15795 rb_proc_t *proc;
15796 VALUE val;
15797 const struct rb_callcache *cc = calling->cc;
15798 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15799 VALUE procv = cme->def->body.bmethod.proc;
15800 if (!RB_FL_TEST_RAW((procv), RUBY_FL_SHAREABLE) &&
15801 cme->def->body.bmethod.defined_ractor != rb_ractor_self(rb_ec_ractor_ptr(ec))) {
15802 rb_raise(rb_eRuntimeError, "defined with an un-shareable Proc in a different Ractor");
15803 }
15804 (((proc)) = (rb_proc_t*)((struct RData *)(((procv))))->data);
15805 val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat, calling->block_handler, vm_cc_cme(cc));
15806 return val;
15807}
15808static VALUE
15809vm_call_bmethod(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15810{
15811 ((void)0);
15812 VALUE *argv;
15813 int argc;
15814 const struct rb_callinfo *ci = calling->ci;
15815 CALLER_SETUP_ARG(cfp, calling, ci);
15816 argc = calling->argc;
15817 argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (argc))));
15818 ruby_nonempty_memcpy((argv), (cfp->sp - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
15819 cfp->sp += - argc - 1;
15820 return vm_call_bmethod_body(ec, calling, argv);
15821}static inline
15822__attribute__ ((__visibility__("default"))) VALUE
15823rb_find_defined_class_by_owner(VALUE current_class, VALUE target_owner)
15824{
15825 VALUE klass = current_class;
15826 if (RB_TYPE_P(klass, RUBY_T_ICLASS) && RB_FL_TEST(klass, ((VALUE)RUBY_FL_USER0)) &&
15827 RB_TYPE_P(RBASIC_CLASS(klass), RUBY_T_CLASS)) {
15828 klass = RBASIC_CLASS(klass);
15829 }
15830 while (RB_TEST(klass)) {
15831 VALUE owner = RB_TYPE_P(klass, RUBY_T_ICLASS) ? RBASIC_CLASS(klass) : klass;
15832 if (owner == target_owner) {
15833 return klass;
15834 }
15835 klass = RCLASS_SUPER(klass);
15836 }
15837 return current_class;
15838}
15839static const rb_callable_method_entry_t *
15840aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15841{
15842 const rb_method_entry_t *orig_me = me->def->body.alias.original_me;
15843 const rb_callable_method_entry_t *cme;
15844 if (orig_me->defined_class == 0) {
15845 VALUE defined_class = rb_find_defined_class_by_owner(me->defined_class, orig_me->owner);
15846 ((void)0);
15847 cme = rb_method_entry_complement_defined_class(orig_me, me->called_id, defined_class);
15848 if (me->def->alias_count + me->def->complemented_count == 0) {
15849 rb_obj_write((VALUE)(me), __extension__({
15850 ;
15851 ; __typeof__((VALUE *)(&me->def->body.alias.original_me)) unaligned_member_access_result = ((VALUE *)(&me->def->body.alias.original_me));
15852 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.2.2/vm_insnhelper.c", 3417);
15853 }
15854 else {
15855 rb_method_definition_t *def =
15856 rb_method_definition_create(VM_METHOD_TYPE_ALIAS, me->def->original_id);
15857 rb_method_definition_set((rb_method_entry_t *)me, def, (void *)cme);
15858 }
15859 }
15860 else {
15861 cme = (const rb_callable_method_entry_t *)orig_me;
15862 }
15863 ((void)0);
15864 return cme;
15865}static inline
15866const rb_callable_method_entry_t *
15867rb_aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15868{
15869 return aliased_callable_method_entry(me);
15870}
15871static VALUE
15872vm_call_alias(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15873{
15874 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}}, };
15875 return vm_call_method_each_type(ec, cfp, calling);
15876}
15877static enum method_missing_reason
15878ci_missing_reason(const struct rb_callinfo *ci)
15879{
15880 enum method_missing_reason stat = MISSING_NOENTRY;
15881 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
15882 if (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) stat |= MISSING_FCALL;
15883 if (vm_ci_flag(ci) & (0x01 << VM_CALL_SUPER_bit)) stat |= MISSING_SUPER;
15884 return stat;
15885}
15886static VALUE vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
15887static VALUE
15888vm_call_symbol(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15889 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE symbol, int flags)
15890{
15891 ((__builtin_expect(!!(!!(calling->argc >= 0)), 1)) ? ((void)0) : __builtin_unreachable());
15892 enum method_missing_reason missing_reason = MISSING_NOENTRY;
15893 int argc = calling->argc;
15894 VALUE recv = calling->recv;
15895 VALUE klass = rb_class_of(recv);
15896 ID mid = rb_check_id(&symbol);
15897 flags |= (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15898 if ((__builtin_expect(!!(! mid), 0))) {
15899 mid = idMethodMissing;
15900 missing_reason = ci_missing_reason(ci);
15901 ec->method_missing_reason = missing_reason;
15902 int i = argc;
15903 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);
15904 (((reg_cfp)->sp) += (((1))));
15905 ((__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))));
15906 argc = ++calling->argc;
15907 if (rb_method_basic_definition_p(klass, idMethodMissing)) {
15908 (*(((((reg_cfp)->sp)))-(i)-1)) = symbol;
15909 int priv = vm_ci_flag(ci) & ((0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_VCALL_bit));
15910 const VALUE *argv = (((((reg_cfp)->sp)))-(argc));
15911 VALUE exc = rb_make_no_method_exception(
15912 rb_eNoMethodError, 0, recv, argc, argv, priv);
15913 rb_exc_raise(exc);
15914 }
15915 else {
15916 (*(((((reg_cfp)->sp)))-(i)-1)) = rb_str_intern(symbol);
15917 }
15918 }
15919 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), };
15920 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 }, };
15921 if (flags & (0x01 << VM_CALL_FCALL_bit)) {
15922 return vm_call_method(ec, reg_cfp, calling);
15923 }
15924 const struct rb_callcache *cc = calling->cc;
15925 ((void)0);
15926 if (vm_cc_cme(cc) != ((void *)0)) {
15927 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
15928 case METHOD_VISI_PUBLIC:
15929 return vm_call_method_each_type(ec, reg_cfp, calling);
15930 case METHOD_VISI_PRIVATE:
15931 vm_cc_method_missing_reason_set(cc, MISSING_PRIVATE);
15932 break;
15933 case METHOD_VISI_PROTECTED:
15934 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
15935 break;
15936 default:
15937 __builtin_unreachable();
15938 }
15939 return vm_call_method_missing(ec, reg_cfp, calling);
15940 }
15941 return vm_call_method_nome(ec, reg_cfp, calling);
15942}
15943static VALUE
15944vm_call_opt_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15945{
15946 ((void)0);
15947 int i;
15948 VALUE sym;
15949 CALLER_SETUP_ARG(reg_cfp, calling, calling->ci);
15950 i = calling->argc - 1;
15951 if (calling->argc == 0) {
15952 rb_raise(rb_eArgError, "no method name given");
15953 }
15954 else {
15955 sym = (*(((((reg_cfp)->sp)))-(i)-1));
15956 if (i > 0) {
15957 ((__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))));
15958 }
15959 calling->argc -= 1;
15960 (((reg_cfp)->sp) -= (((1))));
15961 return vm_call_symbol(ec, reg_cfp, calling, calling->ci, sym, (0x01 << VM_CALL_FCALL_bit));
15962 }
15963}
15964static VALUE
15965vm_call_method_missing_body(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling,
15966 const struct rb_callinfo *orig_ci, enum method_missing_reason reason)
15967{
15968 ((void)0);
15969 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
15970 unsigned int argc;
15971 CALLER_SETUP_ARG(reg_cfp, calling, orig_ci);
15972 argc = calling->argc + 1;
15973 unsigned int flag = (0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15974 calling->argc = argc;
15975 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);
15976 ;
15977 if (argc > 1) {
15978 ((__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))));
15979 }
15980 argv[0] = rb_id2sym(vm_ci_mid(orig_ci));
15981 (((reg_cfp)->sp) += (((1))));
15982 ec->method_missing_reason = reason;
15983 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), };
15984 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 }}, };
15985 return vm_call_method(ec, reg_cfp, calling);
15986}
15987static VALUE
15988vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15989{
15990 return vm_call_method_missing_body(ec, reg_cfp, calling, calling->ci, vm_cc_cmethod_missing_reason(calling->cc));
15991}
15992static const rb_callable_method_entry_t *refined_method_callable_without_refinement(const rb_callable_method_entry_t *me);
15993static VALUE
15994vm_call_zsuper(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, VALUE klass)
15995{
15996 klass = RCLASS_SUPER(klass);
15997 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, vm_ci_mid(calling->ci)) : ((void *)0);
15998 if (cme == ((void *)0)) {
15999 return vm_call_method_nome(ec, cfp, calling);
16000 }
16001 if (cme->def->type == VM_METHOD_TYPE_REFINED &&
16002 cme->def->body.refined.orig_me) {
16003 cme = refined_method_callable_without_refinement(cme);
16004 }
16005 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 }}, };
16006 return vm_call_method_each_type(ec, cfp, calling);
16007}
16008static inline VALUE
16009find_refinement(VALUE refinements, VALUE klass)
16010{
16011 if (RB_NIL_P(refinements)) {
16012 return ((VALUE)RUBY_Qnil);
16013 }
16014 return rb_hash_lookup(refinements, klass);
16015}
16016__attribute__((__pure__)) static rb_control_frame_t * current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
16017static rb_control_frame_t *
16018current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp)
16019{
16020 rb_control_frame_t *top_cfp = cfp;
16021 if (cfp->iseq && ((cfp->iseq)->body)->type == ISEQ_TYPE_BLOCK) {
16022 const rb_iseq_t *local_iseq = ((cfp->iseq)->body)->local_iseq;
16023 do {
16024 cfp = ((cfp)+1);
16025 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
16026 return top_cfp;
16027 }
16028 } while (cfp->iseq != local_iseq);
16029 }
16030 return cfp;
16031}
16032static const rb_callable_method_entry_t *
16033refined_method_callable_without_refinement(const rb_callable_method_entry_t *me)
16034{
16035 const rb_method_entry_t *orig_me = me->def->body.refined.orig_me;
16036 const rb_callable_method_entry_t *cme;
16037 if (orig_me->defined_class == 0) {
16038 cme = ((void *)0);
16039 rb_notimplement();
16040 }
16041 else {
16042 cme = (const rb_callable_method_entry_t *)orig_me;
16043 }
16044 ((void)0);
16045 if ((!(cme) || !(cme)->def || (cme)->def->type == VM_METHOD_TYPE_UNDEF)) {
16046 cme = ((void *)0);
16047 }
16048 return cme;
16049}
16050static const rb_callable_method_entry_t *
16051search_refined_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16052{
16053 ID mid = vm_ci_mid(calling->ci);
16054 const rb_cref_t *cref = vm_get_cref(cfp->ep);
16055 const struct rb_callcache * const cc = calling->cc;
16056 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
16057 for (; cref; cref = CREF_NEXT(cref)) {
16058 const VALUE refinement = find_refinement(CREF_REFINEMENTS(cref), vm_cc_cme(cc)->owner);
16059 if (RB_NIL_P(refinement)) continue;
16060 const rb_callable_method_entry_t *const ref_me =
16061 rb_callable_method_entry(refinement, mid);
16062 if (ref_me) {
16063 if (vm_cc_call(cc) == vm_call_super_method) {
16064 const rb_control_frame_t *top_cfp = current_method_entry(ec, cfp);
16065 const rb_callable_method_entry_t *top_me = rb_vm_frame_method_entry(top_cfp);
16066 if (top_me && rb_method_definition_eq(ref_me->def, top_me->def)) {
16067 continue;
16068 }
16069 }
16070 if (cme->def->type != VM_METHOD_TYPE_REFINED ||
16071 cme->def != ref_me->def) {
16072 cme = ref_me;
16073 }
16074 if (ref_me->def->type != VM_METHOD_TYPE_REFINED) {
16075 return cme;
16076 }
16077 }
16078 else {
16079 return ((void *)0);
16080 }
16081 }
16082 if (vm_cc_cme(cc)->def->body.refined.orig_me) {
16083 return refined_method_callable_without_refinement(vm_cc_cme(cc));
16084 }
16085 else {
16086 VALUE klass = RCLASS_SUPER(vm_cc_cme(cc)->defined_class);
16087 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, mid) : ((void *)0);
16088 return cme;
16089 }
16090}
16091static VALUE
16092vm_call_refined(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16093{
16094 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 }}, };
16095 if (vm_cc_cme(ref_cc)) {
16096 calling->cc= ref_cc;
16097 return vm_call_method(ec, cfp, calling);
16098 }
16099 else {
16100 return vm_call_method_nome(ec, cfp, calling);
16101 }
16102}
16103static 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);
16104__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);
16105static VALUE
16106vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16107 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler)
16108{
16109 int argc = calling->argc;
16110 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))));
16111 (((reg_cfp)->sp) -= (((1))));
16112 return vm_invoke_block(ec, reg_cfp, calling, ci, 0, block_handler);
16113}
16114static VALUE
16115vm_call_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16116{
16117 ((void)0);
16118 const struct rb_callinfo *ci = calling->ci;
16119 VALUE procval = calling->recv;
16120 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, VM_BH_FROM_PROC(procval));
16121}
16122static VALUE
16123vm_call_opt_block_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16124{
16125 ((void)0);
16126 VALUE block_handler = VM_ENV_BLOCK_HANDLER(VM_CF_LEP(reg_cfp));
16127 const struct rb_callinfo *ci = calling->ci;
16128 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CALL)]&((1 << 12))) == 0), 1)))) {
16129 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, block_handler);
16130 }
16131 else {
16132 calling->recv = rb_vm_bh_to_procval(ec, block_handler);
16133 calling->cc = rb_vm_search_method_slowpath(ci, rb_class_of(calling->recv));
16134 return vm_call_general(ec, reg_cfp, calling);
16135 }
16136}
16137static VALUE
16138vm_call_opt_struct_aref0(rb_execution_context_t *ec, struct rb_calling_info *calling)
16139{
16140 VALUE recv = calling->recv;
16141 ((void)0);
16142 ((void)0);
16143 ((void)0);
16144 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
16145 return internal_RSTRUCT_GET(recv, off);
16146}
16147static VALUE
16148vm_call_opt_struct_aref(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16149{
16150 ((void)0);
16151 VALUE ret = vm_call_opt_struct_aref0(ec, calling);
16152 reg_cfp->sp -= 1;
16153 return ret;
16154}
16155static VALUE
16156vm_call_opt_struct_aset0(rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE val)
16157{
16158 VALUE recv = calling->recv;
16159 ((void)0);
16160 ((void)0);
16161 ((void)0);
16162 rb_check_frozen_inline(recv);
16163 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
16164 internal_RSTRUCT_SET(recv, off, val);
16165 return val;
16166}
16167static VALUE
16168vm_call_opt_struct_aset(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16169{
16170 ((void)0);
16171 VALUE ret = vm_call_opt_struct_aset0(ec, calling, *(reg_cfp->sp - 1));
16172 reg_cfp->sp -= 2;
16173 return ret;
16174}
16175__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);
16176static VALUE
16177vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
16178 const struct rb_callinfo *ci, const struct rb_callcache *cc)
16179{
16180 switch (vm_cc_cme(cc)->def->body.optimized.type) {
16181 case OPTIMIZED_METHOD_TYPE_SEND:
16182 CC_SET_FASTPATH(cc, vm_call_opt_send, 1);
16183 return vm_call_opt_send(ec, cfp, calling);
16184 case OPTIMIZED_METHOD_TYPE_CALL:
16185 CC_SET_FASTPATH(cc, vm_call_opt_call, 1);
16186 return vm_call_opt_call(ec, cfp, calling);
16187 case OPTIMIZED_METHOD_TYPE_BLOCK_CALL:
16188 CC_SET_FASTPATH(cc, vm_call_opt_block_call, 1);
16189 return vm_call_opt_block_call(ec, cfp, calling);
16190 case OPTIMIZED_METHOD_TYPE_STRUCT_AREF:
16191 CALLER_SETUP_ARG(cfp, calling, ci);
16192 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16193 rb_check_arity(calling->argc, 0, 0);
16194 CC_SET_FASTPATH(cc, vm_call_opt_struct_aref, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
16195 return vm_call_opt_struct_aref(ec, cfp, calling);
16196 case OPTIMIZED_METHOD_TYPE_STRUCT_ASET:
16197 CALLER_SETUP_ARG(cfp, calling, ci);
16198 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16199 rb_check_arity(calling->argc, 1, 1);
16200 CC_SET_FASTPATH(cc, vm_call_opt_struct_aset, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
16201 return vm_call_opt_struct_aset(ec, cfp, calling);
16202 default:
16203 rb_bug("vm_call_method: unsupported optimized method type (%d)", vm_cc_cme(cc)->def->body.optimized.type);
16204 }
16205}
16206COLDFUNC static VALUE
16207vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
16208 const struct rb_callinfo *ci = calling->ci;
16209 const struct rb_callcache *cc = calling->cc;
16210 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
16211 VALUE v;
16212 switch (cme->def->type) {
16213 case VM_METHOD_TYPE_ISEQ:
16214 CC_SET_FASTPATH(cc, vm_call_iseq_setup, 1);
16215 return vm_call_iseq_setup(ec, cfp, calling);
16216 case VM_METHOD_TYPE_NOTIMPLEMENTED:
16217 case VM_METHOD_TYPE_CFUNC:
16218 CC_SET_FASTPATH(cc, vm_call_cfunc, 1);
16219 return vm_call_cfunc(ec, cfp, calling);
16220 case VM_METHOD_TYPE_ATTRSET:
16221 CALLER_SETUP_ARG(cfp, calling, ci);
16222 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16223 rb_check_arity(calling->argc, 1, 1);
16224 const unsigned int aset_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KWARG_bit));
16225 if (vm_cc_markable(cc)) {
16226 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
16227 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); };
16228 }
16229 else {
16230 cc = &((struct rb_callcache) {
16231 .flags = RUBY_T_IMEMO |
16232 (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) |
16233 ((VALUE)RUBY_FL_FREEZE) |
16234 ((VALUE)(((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32)) |
16235 ((VALUE)RUBY_FL_EXIVAR),
16236 .klass = cc->klass,
16237 .cme_ = cc->cme_,
16238 .call_ = cc->call_,
16239 .aux_ = {
16240 .attr = {
16241 .value = (((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32),
16242 }
16243 },
16244 });
16245 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); };
16246 }
16247 return v;
16248 case VM_METHOD_TYPE_IVAR:
16249 CALLER_SETUP_ARG(cfp, calling, ci);
16250 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16251 rb_check_arity(calling->argc, 0, 0);
16252 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
16253 const unsigned int ivar_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit));
16254 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); };
16255 return v;
16256 case VM_METHOD_TYPE_MISSING:
16257 vm_cc_method_missing_reason_set(cc, 0);
16258 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
16259 return vm_call_method_missing(ec, cfp, calling);
16260 case VM_METHOD_TYPE_BMETHOD:
16261 CC_SET_FASTPATH(cc, vm_call_bmethod, 1);
16262 return vm_call_bmethod(ec, cfp, calling);
16263 case VM_METHOD_TYPE_ALIAS:
16264 CC_SET_FASTPATH(cc, vm_call_alias, 1);
16265 return vm_call_alias(ec, cfp, calling);
16266 case VM_METHOD_TYPE_OPTIMIZED:
16267 return vm_call_optimized(ec, cfp, calling, ci, cc);
16268 case VM_METHOD_TYPE_UNDEF:
16269 break;
16270 case VM_METHOD_TYPE_ZSUPER:
16271 return vm_call_zsuper(ec, cfp, calling, (((rb_classext_t *)((char *)(vm_cc_cme(cc)->defined_class) + sizeof(struct RClass)))->origin_));
16272 case VM_METHOD_TYPE_REFINED:
16273 return vm_call_refined(ec, cfp, calling);
16274 }
16275 rb_bug("vm_call_method: unsupported method type (%d)", vm_cc_cme(cc)->def->type);
16276}
16277__attribute__((__noreturn__)) static void vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj, int call_status);
16278static VALUE
16279vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16280{
16281 const struct rb_callinfo *ci = calling->ci;
16282 const int stat = ci_missing_reason(ci);
16283 if (vm_ci_mid(ci) == idMethodMissing) {
16284 rb_control_frame_t *reg_cfp = cfp;
16285 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
16286 vm_raise_method_missing(ec, calling->argc, argv, calling->recv, stat);
16287 }
16288 else {
16289 return vm_call_method_missing_body(ec, cfp, calling, ci, stat);
16290 }
16291}
16292static VALUE
16293vm_defined_class_for_protected_call(const rb_callable_method_entry_t *me)
16294{
16295 VALUE defined_class = me->defined_class;
16296 VALUE refined_class = (((rb_classext_t *)((char *)(defined_class) + sizeof(struct RClass)))->refined_class);
16297 return RB_NIL_P(refined_class) ? defined_class : refined_class;
16298}
16299static inline VALUE
16300vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16301{
16302 const struct rb_callinfo *ci = calling->ci;
16303 const struct rb_callcache *cc = calling->cc;
16304 ((void)0);
16305 if (vm_cc_cme(cc) != ((void *)0)) {
16306 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16307 case METHOD_VISI_PUBLIC:
16308 return vm_call_method_each_type(ec, cfp, calling);
16309 case METHOD_VISI_PRIVATE:
16310 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit))) {
16311 enum method_missing_reason stat = MISSING_PRIVATE;
16312 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
16313 vm_cc_method_missing_reason_set(cc, stat);
16314 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
16315 return vm_call_method_missing(ec, cfp, calling);
16316 }
16317 return vm_call_method_each_type(ec, cfp, calling);
16318 case METHOD_VISI_PROTECTED:
16319 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_OPT_SEND_bit) | (0x01 << VM_CALL_FCALL_bit)))) {
16320 VALUE defined_class = vm_defined_class_for_protected_call(vm_cc_cme(cc));
16321 if (!rb_obj_is_kind_of(cfp->self, defined_class)) {
16322 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
16323 return vm_call_method_missing(ec, cfp, calling);
16324 }
16325 else {
16326 ((void)0);
16327 struct rb_callcache cc_on_stack = *cc;
16328 RB_FL_SET_RAW((VALUE)&cc_on_stack, ((VALUE)RUBY_FL_FREEZE));
16329 calling->cc = &cc_on_stack;
16330 return vm_call_method_each_type(ec, cfp, calling);
16331 }
16332 }
16333 return vm_call_method_each_type(ec, cfp, calling);
16334 default:
16335 rb_bug("unreachable");
16336 }
16337 }
16338 else {
16339 return vm_call_method_nome(ec, cfp, calling);
16340 }
16341}
16342static VALUE
16343vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16344{
16345 ((void)0);
16346 return vm_call_method(ec, reg_cfp, calling);
16347}static inline
16348void
16349rb_vm_cc_general(const struct rb_callcache *cc)
16350{
16351 ((void)0);
16352 ((void)0);
16353 *(vm_call_handler *)&cc->call_ = vm_call_general;
16354}
16355static VALUE
16356vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16357{
16358 ((void)0);
16359 if (ec == ((void *)0)) rb_bug("unreachable");
16360 ((void)0);
16361 return vm_call_method(ec, reg_cfp, calling);
16362}
16363static inline VALUE
16364vm_search_normal_superclass(VALUE klass)
16365{
16366 if (RB_BUILTIN_TYPE(klass) == RUBY_T_ICLASS &&
16367 RB_TYPE_P(((struct RBasic *)(klass))->klass, RUBY_T_MODULE) &&
16368 RB_FL_TEST_RAW(((struct RBasic *)(klass))->klass, RMODULE_IS_REFINEMENT)) {
16369 klass = ((struct RBasic *)(klass))->klass;
16370 }
16371 klass = (((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->origin_);
16372 return RCLASS_SUPER(klass);
16373}
16374__attribute__((__noreturn__)) static void vm_super_outside(void);
16375static void
16376vm_super_outside(void)
16377{
16378 rb_raise(rb_eNoMethodError, "super called outside of method");
16379}
16380static const struct rb_callcache *
16381empty_cc_for_super(void)
16382{
16383 return rb_vm_empty_cc_for_super();
16384}
16385static const struct rb_callcache *
16386vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *cd, VALUE recv)
16387{
16388 VALUE current_defined_class;
16389 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
16390 if (!me) {
16391 vm_super_outside();
16392 }
16393 current_defined_class = vm_defined_class_for_protected_call(me);
16394 if (RB_BUILTIN_TYPE(current_defined_class) != RUBY_T_MODULE &&
16395 reg_cfp->iseq != method_entry_iseqptr(me) &&
16396 !rb_obj_is_kind_of(recv, current_defined_class)) {
16397 VALUE m = RB_TYPE_P(current_defined_class, RUBY_T_ICLASS) ?
16398 (((rb_classext_t *)((char *)(current_defined_class) + sizeof(struct RClass)))->includer) : current_defined_class;
16399 if (m) {
16400 rb_raise(rb_eTypeError,
16401 "self has wrong type to call super in this context: "
16402 "%""l""i" "\v"" (expected %""l""i" "\v"")",
16403 rb_obj_class(recv), m);
16404 }
16405 }
16406 if (me->def->type == VM_METHOD_TYPE_BMETHOD && (vm_ci_flag(cd->ci) & (0x01 << VM_CALL_ZSUPER_bit))) {
16407 rb_raise(rb_eRuntimeError,
16408 "implicit argument passing of super from method defined"
16409 " by define_method() is not supported."
16410 " Specify all arguments explicitly.");
16411 }
16412 ID mid = me->def->original_id;
16413 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.2/vm_insnhelper.c", 4183);
16414 (rb_obj_written((VALUE)(reg_cfp->iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cd->ci), "../ruby-3.2.2/vm_insnhelper.c", 4188));
16415 const struct rb_callcache *cc;
16416 VALUE klass = vm_search_normal_superclass(me->defined_class);
16417 if (!klass) {
16418 cc = vm_cc_new(klass, ((void *)0), vm_call_method_missing);
16419 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
16420 ;
16421 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
16422 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.2/vm_insnhelper.c", 4197);
16423 }
16424 else {
16425 cc = vm_search_method_fastpath((VALUE)reg_cfp->iseq, cd, klass);
16426 const rb_callable_method_entry_t *cached_cme = vm_cc_cme(cc);
16427 if (cached_cme == ((void *)0)) {
16428 cd->cc = empty_cc_for_super();
16429 }
16430 else if (cached_cme->called_id != mid) {
16431 const rb_callable_method_entry_t *cme = rb_callable_method_entry(klass, mid);
16432 if (cme) {
16433 cc = vm_cc_new(klass, cme, vm_call_super_method);
16434 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
16435 ;
16436 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
16437 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.2/vm_insnhelper.c", 4212);
16438 }
16439 else {
16440 cd->cc = cc = empty_cc_for_super();
16441 }
16442 }
16443 else {
16444 switch (cached_cme->def->type) {
16445 case VM_METHOD_TYPE_REFINED:
16446 case VM_METHOD_TYPE_ATTRSET:
16447 case VM_METHOD_TYPE_IVAR:
16448 vm_cc_call_set(cc, vm_call_super_method);
16449 break;
16450 default:
16451 break;
16452 }
16453 }
16454 }
16455 ((void)0);
16456 return cc;
16457}
16458static inline int
16459block_proc_is_lambda(const VALUE procval)
16460{
16461 rb_proc_t *proc;
16462 if (procval) {
16463 (((proc)) = (rb_proc_t*)((struct RData *)(((procval))))->data);
16464 return proc->is_lambda;
16465 }
16466 else {
16467 return 0;
16468 }
16469}
16470static VALUE
16471vm_yield_with_cfunc(rb_execution_context_t *ec,
16472 const struct rb_captured_block *captured,
16473 VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
16474 const rb_callable_method_entry_t *me)
16475{
16476 int is_lambda = 0;
16477 VALUE val, arg, blockarg;
16478 int frame_flag;
16479 const struct vm_ifunc *ifunc = captured->code.ifunc;
16480 if (is_lambda) {
16481 arg = rb_ary_new_from_values(argc, argv);
16482 }
16483 else if (argc == 0) {
16484 arg = ((VALUE)RUBY_Qnil);
16485 }
16486 else {
16487 arg = argv[0];
16488 }
16489 blockarg = rb_vm_bh_to_procval(ec, block_handler);
16490 frame_flag = VM_FRAME_MAGIC_IFUNC | VM_FRAME_FLAG_CFRAME | (me ? VM_FRAME_FLAG_BMETHOD : 0);
16491 if (kw_splat) {
16492 frame_flag |= VM_FRAME_FLAG_CFRAME_KW;
16493 }
16494 vm_push_frame(ec, (const rb_iseq_t *)captured->code.ifunc,
16495 frame_flag,
16496 self,
16497 ((VALUE)((captured->ep)) | (0x01)),
16498 (VALUE)me,
16499 0, ec->cfp->sp, 0, 0);
16500 val = (*ifunc->func)(arg, (VALUE)ifunc->data, argc, argv, blockarg);
16501 rb_vm_pop_frame(ec);
16502 return val;
16503}
16504static VALUE
16505vm_yield_with_symbol(rb_execution_context_t *ec, VALUE symbol, int argc, const VALUE *argv, int kw_splat, VALUE block_handler)
16506{
16507 return rb_sym_proc_call(rb_sym2id(symbol), argc, argv, kw_splat, rb_vm_bh_to_procval(ec, block_handler));
16508}
16509static inline int
16510vm_callee_setup_block_arg_arg0_splat(rb_control_frame_t *cfp, const rb_iseq_t *iseq, VALUE *argv, VALUE ary)
16511{
16512 int i;
16513 long len = rb_array_len(ary);
16514 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);
16515 for (i=0; i<len && i<((iseq)->body)->param.lead_num; i++) {
16516 argv[i] = RARRAY_AREF(ary, i);
16517 }
16518 return i;
16519}
16520static inline VALUE
16521vm_callee_setup_block_arg_arg0_check(VALUE *argv)
16522{
16523 VALUE ary, arg0 = argv[0];
16524 ary = rb_check_array_type(arg0);
16525 ((void)0);
16526 return ary;
16527}
16528static int
16529vm_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)
16530{
16531 if (rb_simple_iseq_p(iseq)) {
16532 rb_control_frame_t *cfp = ec->cfp;
16533 VALUE arg0;
16534 CALLER_SETUP_ARG(cfp, calling, ci);
16535 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16536 if (arg_setup_type == arg_setup_block &&
16537 calling->argc == 1 &&
16538 ((iseq)->body)->param.flags.has_lead &&
16539 !((iseq)->body)->param.flags.ambiguous_param0 &&
16540 !RB_NIL_P(arg0 = vm_callee_setup_block_arg_arg0_check(argv))) {
16541 calling->argc = vm_callee_setup_block_arg_arg0_splat(cfp, iseq, argv, arg0);
16542 }
16543 if (calling->argc != ((iseq)->body)->param.lead_num) {
16544 if (arg_setup_type == arg_setup_block) {
16545 if (calling->argc < ((iseq)->body)->param.lead_num) {
16546 int i;
16547 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);
16548 for (i=calling->argc; i<((iseq)->body)->param.lead_num; i++) argv[i] = ((VALUE)RUBY_Qnil);
16549 calling->argc = ((iseq)->body)->param.lead_num;
16550 }
16551 else if (calling->argc > ((iseq)->body)->param.lead_num) {
16552 calling->argc = ((iseq)->body)->param.lead_num;
16553 }
16554 }
16555 else {
16556 argument_arity_error(ec, iseq, calling->argc, ((iseq)->body)->param.lead_num, ((iseq)->body)->param.lead_num);
16557 }
16558 }
16559 return 0;
16560 }
16561 else {
16562 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_type);
16563 }
16564}
16565static int
16566vm_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)
16567{
16568 struct rb_calling_info calling_entry, *calling;
16569 calling = &calling_entry;
16570 calling->argc = argc;
16571 calling->block_handler = block_handler;
16572 calling->kw_splat = kw_splat;
16573 calling->recv = ((VALUE)RUBY_Qundef);
16574 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, };
16575 return vm_callee_setup_block_arg(ec, calling, &dummy_ci, iseq, argv, arg_setup_type);
16576}
16577static VALUE
16578vm_invoke_iseq_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16579 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16580 _Bool is_lambda, VALUE block_handler)
16581{
16582 const struct rb_captured_block *captured = VM_BH_TO_ISEQ_BLOCK(block_handler);
16583 const rb_iseq_t *iseq = rb_iseq_check(captured->code.iseq);
16584 const int arg_size = ((iseq)->body)->param.size;
16585 VALUE * const rsp = ((((reg_cfp)->sp))) - calling->argc;
16586 int opt_pc = vm_callee_setup_block_arg(ec, calling, ci, iseq, rsp, is_lambda ? arg_setup_method : arg_setup_block);
16587 (((reg_cfp)->sp) = (((rsp))));
16588 vm_push_frame(ec, iseq,
16589 VM_FRAME_MAGIC_BLOCK | (is_lambda ? VM_FRAME_FLAG_LAMBDA : 0),
16590 captured->self,
16591 ((VALUE)((captured->ep)) | (0x01)), 0,
16592 ((iseq)->body)->iseq_encoded + opt_pc,
16593 rsp + arg_size,
16594 ((iseq)->body)->local_table_size - arg_size, ((iseq)->body)->stack_max);
16595 return ((VALUE)RUBY_Qundef);
16596}
16597static VALUE
16598vm_invoke_symbol_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16599 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16600 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16601{
16602 if (calling->argc < 1) {
16603 rb_raise(rb_eArgError, "no receiver given");
16604 }
16605 else {
16606 VALUE symbol = VM_BH_TO_SYMBOL(block_handler);
16607 CALLER_SETUP_ARG(reg_cfp, calling, ci);
16608 calling->recv = (*(((((reg_cfp)->sp)))-(--calling->argc)-1));
16609 return vm_call_symbol(ec, reg_cfp, calling, ci, symbol, 0);
16610 }
16611}
16612static VALUE
16613vm_invoke_ifunc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16614 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16615 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16616{
16617 VALUE val;
16618 int argc;
16619 const struct rb_captured_block *captured = VM_BH_TO_IFUNC_BLOCK(block_handler);
16620 CALLER_SETUP_ARG(ec->cfp, calling, ci);
16621 CALLER_REMOVE_EMPTY_KW_SPLAT(ec->cfp, calling, ci);
16622 argc = calling->argc;
16623 val = vm_yield_with_cfunc(ec, captured, captured->self, argc, (((((reg_cfp)->sp)))-(argc)), calling->kw_splat, calling->block_handler, ((void *)0));
16624 ((((reg_cfp)->sp) -= (((argc)))));
16625 return val;
16626}
16627static VALUE
16628vm_proc_to_block_handler(VALUE procval)
16629{
16630 const struct rb_block *block = vm_proc_block(procval);
16631 switch (vm_block_type(block)) {
16632 case block_type_iseq:
16633 return VM_BH_FROM_ISEQ_BLOCK(&block->as.captured);
16634 case block_type_ifunc:
16635 return VM_BH_FROM_IFUNC_BLOCK(&block->as.captured);
16636 case block_type_symbol:
16637 return VM_BH_FROM_SYMBOL(block->as.symbol);
16638 case block_type_proc:
16639 return VM_BH_FROM_PROC(block->as.proc);
16640 }
16641 __builtin_unreachable();
16642 return ((VALUE)RUBY_Qundef);
16643}
16644static VALUE
16645vm_invoke_proc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16646 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16647 _Bool is_lambda, VALUE block_handler)
16648{
16649 while (vm_block_handler_type(block_handler) == block_handler_type_proc) {
16650 VALUE proc = VM_BH_TO_PROC(block_handler);
16651 is_lambda = block_proc_is_lambda(proc);
16652 block_handler = vm_proc_to_block_handler(proc);
16653 }
16654 return vm_invoke_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16655}
16656static inline VALUE
16657vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16658 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16659 _Bool is_lambda, VALUE block_handler)
16660{
16661 VALUE (*func)(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16662 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16663 _Bool is_lambda, VALUE block_handler);
16664 switch (vm_block_handler_type(block_handler)) {
16665 case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
16666 case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
16667 case block_handler_type_proc: func = vm_invoke_proc_block; break;
16668 case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
16669 default: rb_bug("vm_invoke_block: unreachable");
16670 }
16671 return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16672}
16673static VALUE
16674vm_make_proc_with_iseq(const rb_iseq_t *blockiseq)
16675{
16676 const rb_execution_context_t *ec = rb_current_execution_context(1);
16677 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16678 struct rb_captured_block *captured;
16679 if (cfp == 0) {
16680 rb_bug("vm_make_proc_with_iseq: unreachable");
16681 }
16682 captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
16683 captured->code.iseq = blockiseq;
16684 return rb_vm_make_proc(ec, captured, rb_cProc);
16685}
16686static VALUE
16687vm_once_exec(VALUE iseq)
16688{
16689 VALUE proc = vm_make_proc_with_iseq((rb_iseq_t *)iseq);
16690 return rb_proc_call_with_block(proc, 0, 0, ((VALUE)RUBY_Qnil));
16691}
16692static VALUE
16693vm_once_clear(VALUE data)
16694{
16695 union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)data;
16696 is->once.running_thread = ((void *)0);
16697 return ((VALUE)RUBY_Qnil);
16698}
16699static _Bool
16700check_respond_to_missing(VALUE obj, VALUE v)
16701{
16702 VALUE args[2];
16703 VALUE r;
16704 args[0] = obj; args[1] = ((VALUE)RUBY_Qfalse);
16705 r = rb_check_funcall(v, idRespond_to_missing, 2, args);
16706 if (!RB_UNDEF_P(r) && RB_TEST(r)) {
16707 return 1;
16708 }
16709 else {
16710 return 0;
16711 }
16712}
16713static _Bool
16714vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16715{
16716 VALUE klass;
16717 enum defined_type type = (enum defined_type)op_type;
16718 switch (type) {
16719 case DEFINED_IVAR:
16720 return rb_ivar_defined((((((reg_cfp)))->self)), rb_sym2id(obj));
16721 break;
16722 case DEFINED_GVAR:
16723 return rb_gvar_defined(rb_sym2id(obj));
16724 break;
16725 case DEFINED_CVAR: {
16726 const rb_cref_t *cref = vm_get_cref(((((reg_cfp)->ep))));
16727 klass = vm_get_cvar_base(cref, (((reg_cfp))), 0);
16728 return rb_cvar_defined(klass, rb_sym2id(obj));
16729 break;
16730 }
16731 case DEFINED_CONST:
16732 case DEFINED_CONST_FROM: {
16733 _Bool allow_nil = type == DEFINED_CONST;
16734 klass = v;
16735 return vm_get_ev_const(ec, klass, rb_sym2id(obj), allow_nil, 1);
16736 break;
16737 }
16738 case DEFINED_FUNC:
16739 klass = rb_class_of(v);
16740 return rb_ec_obj_respond_to(ec, v, rb_sym2id(obj), 1);
16741 break;
16742 case DEFINED_METHOD:{
16743 VALUE klass = rb_class_of(v);
16744 const rb_method_entry_t *me = rb_method_entry_with_refinements(klass, rb_sym2id(obj), ((void *)0));
16745 if (me) {
16746 switch ((rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16747 case METHOD_VISI_PRIVATE:
16748 break;
16749 case METHOD_VISI_PROTECTED:
16750 if (!rb_obj_is_kind_of((((((reg_cfp)))->self)), rb_class_real(me->defined_class))) {
16751 break;
16752 }
16753 case METHOD_VISI_PUBLIC:
16754 return 1;
16755 break;
16756 default:
16757 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)));
16758 }
16759 }
16760 else {
16761 return check_respond_to_missing(obj, v);
16762 }
16763 break;
16764 }
16765 case DEFINED_YIELD:
16766 if (((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]) != 0) {
16767 return 1;
16768 }
16769 break;
16770 case DEFINED_ZSUPER:
16771 {
16772 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry((((reg_cfp))));
16773 if (me) {
16774 VALUE klass = vm_search_normal_superclass(me->defined_class);
16775 ID id = me->def->original_id;
16776 return rb_method_boundp(klass, id, 0);
16777 }
16778 }
16779 break;
16780 case DEFINED_REF:{
16781 return vm_getspecial(ec, (VM_EP_LEP(((((reg_cfp)->ep))))), ((VALUE)RUBY_Qfalse), RB_FIX2INT(obj)) != ((VALUE)RUBY_Qnil);
16782 break;
16783 }
16784 default:
16785 rb_bug("unimplemented defined? type (VM)");
16786 break;
16787 }
16788 return 0;
16789}static inline
16790_Bool
16791rb_vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16792{
16793 return vm_defined(ec, reg_cfp, op_type, obj, v);
16794}
16795static const VALUE *
16796vm_get_ep(const VALUE *const reg_ep, rb_num_t lv)
16797{
16798 rb_num_t i;
16799 const VALUE *ep = reg_ep;
16800 for (i = 0; i < lv; i++) {
16801 ep = ((VALUE *)((ep)[(-1)] & ~0x03));
16802 }
16803 return ep;
16804}
16805static VALUE
16806vm_get_special_object(const VALUE *const reg_ep,
16807 enum vm_special_object_type type)
16808{
16809 switch (type) {
16810 case VM_SPECIAL_OBJECT_VMCORE:
16811 return rb_mRubyVMFrozenCore;
16812 case VM_SPECIAL_OBJECT_CBASE:
16813 return vm_get_cbase(reg_ep);
16814 case VM_SPECIAL_OBJECT_CONST_BASE:
16815 return vm_get_const_base(reg_ep);
16816 default:
16817 rb_bug("putspecialobject insn: unknown value_type %d", type);
16818 }
16819}
16820static VALUE
16821vm_concat_array(VALUE ary1, VALUE ary2st)
16822{
16823 const VALUE ary2 = ary2st;
16824 VALUE tmp1 = rb_check_to_array(ary1);
16825 VALUE tmp2 = rb_check_to_array(ary2);
16826 if (RB_NIL_P(tmp1)) {
16827 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); });
16828 }
16829 if (RB_NIL_P(tmp2)) {
16830 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); });
16831 }
16832 if (tmp1 == ary1) {
16833 tmp1 = rb_ary_dup(ary1);
16834 }
16835 return rb_ary_concat(tmp1, tmp2);
16836}static inline
16837VALUE
16838rb_vm_concat_array(VALUE ary1, VALUE ary2st)
16839{
16840 return vm_concat_array(ary1, ary2st);
16841}
16842static VALUE
16843vm_splat_array(VALUE flag, VALUE ary)
16844{
16845 VALUE tmp = rb_check_to_array(ary);
16846 if (RB_NIL_P(tmp)) {
16847 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); });
16848 }
16849 else if (RB_TEST(flag)) {
16850 return rb_ary_dup(tmp);
16851 }
16852 else {
16853 return tmp;
16854 }
16855}static inline
16856VALUE
16857rb_vm_splat_array(VALUE flag, VALUE ary)
16858{
16859 return vm_splat_array(flag, ary);
16860}
16861static VALUE
16862vm_check_match(rb_execution_context_t *ec, VALUE target, VALUE pattern, rb_num_t flag)
16863{
16864 enum vm_check_match_type type = ((int)flag) & 0x03;
16865 if (flag & 0x04) {
16866 long i;
16867 const long n = rb_array_len(pattern);
16868 for (i = 0; i < n; i++) {
16869 VALUE v = RARRAY_AREF(pattern, i);
16870 VALUE c = check_match(ec, v, target, type);
16871 if (RB_TEST(c)) {
16872 return c;
16873 }
16874 }
16875 return ((VALUE)RUBY_Qfalse);
16876 }
16877 else {
16878 return check_match(ec, pattern, target, type);
16879 }
16880}
16881static VALUE
16882vm_check_keyword(lindex_t bits, lindex_t idx, const VALUE *ep)
16883{
16884 const VALUE kw_bits = *(ep - bits);
16885 if (RB_FIXNUM_P(kw_bits)) {
16886 unsigned int b = (unsigned int)rb_fix2ulong(kw_bits);
16887 if ((idx < (32-1)) && (b & (0x01 << idx)))
16888 return ((VALUE)RUBY_Qfalse);
16889 }
16890 else {
16891 ((void)0);
16892 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);
16893 }
16894 return ((VALUE)RUBY_Qtrue);
16895}
16896static void
16897vm_dtrace(rb_event_flag_t flag, rb_execution_context_t *ec)
16898{
16899 if (0 ||
16900 0 ||
16901 0 ||
16902 0) {
16903 switch (flag) {
16904 case 0x0008:
16905 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);
16906 return;
16907 case 0x0020:
16908 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);
16909 return;
16910 case 0x0010:
16911 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);
16912 return;
16913 case 0x0040:
16914 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);
16915 return;
16916 }
16917 }
16918}
16919static VALUE
16920vm_const_get_under(ID id, rb_num_t flags, VALUE cbase)
16921{
16922 if (!rb_const_defined_at(cbase, id)) {
16923 return 0;
16924 }
16925 else if (((flags) & 0x08)) {
16926 return rb_public_const_get_at(cbase, id);
16927 }
16928 else {
16929 return rb_const_get_at(cbase, id);
16930 }
16931}
16932static VALUE
16933vm_check_if_class(ID id, rb_num_t flags, VALUE super, VALUE klass)
16934{
16935 if (!RB_TYPE_P(klass, RUBY_T_CLASS)) {
16936 return 0;
16937 }
16938 else if (((flags) & 0x10)) {
16939 VALUE tmp = rb_class_real(RCLASS_SUPER(klass));
16940 if (tmp != super) {
16941 rb_raise(rb_eTypeError,
16942 "superclass mismatch for class %""l""i" "\v""",
16943 rb_id2str(id));
16944 }
16945 else {
16946 return klass;
16947 }
16948 }
16949 else {
16950 return klass;
16951 }
16952}
16953static VALUE
16954vm_check_if_module(ID id, VALUE mod)
16955{
16956 if (!RB_TYPE_P(mod, RUBY_T_MODULE)) {
16957 return 0;
16958 }
16959 else {
16960 return mod;
16961 }
16962}
16963static VALUE
16964declare_under(ID id, VALUE cbase, VALUE c)
16965{
16966 rb_set_class_path_string(c, cbase, rb_id2str(id));
16967 rb_const_set(cbase, id, c);
16968 return c;
16969}
16970static VALUE
16971vm_declare_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16972{
16973 VALUE s = ((flags) & 0x10) ? super : rb_cObject;
16974 VALUE c = declare_under(id, cbase, rb_define_class_id(id, s));
16975 rb_define_alloc_func(c, rb_get_alloc_func(c));
16976 rb_class_inherited(s, c);
16977 return c;
16978}
16979static VALUE
16980vm_declare_module(ID id, VALUE cbase)
16981{
16982 return declare_under(id, cbase, rb_module_new());
16983}
16984__attribute__((__noreturn__)) static void unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old);
16985static void
16986unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old)
16987{
16988 VALUE name = rb_id2str(id);
16989 VALUE message = rb_sprintf("%""l""i" "\v"" is not a %s",
16990 name, type);
16991 VALUE location = rb_const_source_location_at(cbase, id);
16992 if (!RB_NIL_P(location)) {
16993 rb_str_catf(message, "\n%""l""i" "\v"":%""l""i" "\v"":"
16994 " previous definition of %""l""i" "\v"" was here",
16995 rb_ary_entry(location, 0), rb_ary_entry(location, 1), name);
16996 }
16997 rb_exc_raise(rb_exc_new_str(rb_eTypeError, message));
16998}
16999static VALUE
17000vm_define_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
17001{
17002 VALUE klass;
17003 if (((flags) & 0x10) && !RB_TYPE_P(super, RUBY_T_CLASS)) {
17004 rb_raise(rb_eTypeError,
17005 "superclass must be an instance of Class (given an instance of %""l""i" "\v"")",
17006 rb_obj_class(super));
17007 }
17008 vm_check_if_namespace(cbase);
17009 rb_autoload_load(cbase, id);
17010 if ((klass = vm_const_get_under(id, flags, cbase)) != 0) {
17011 if (!vm_check_if_class(id, flags, super, klass))
17012 unmatched_redefinition("class", cbase, id, klass);
17013 return klass;
17014 }
17015 else {
17016 return vm_declare_class(id, flags, cbase, super);
17017 }
17018}
17019static VALUE
17020vm_define_module(ID id, rb_num_t flags, VALUE cbase)
17021{
17022 VALUE mod;
17023 vm_check_if_namespace(cbase);
17024 if ((mod = vm_const_get_under(id, flags, cbase)) != 0) {
17025 if (!vm_check_if_module(id, mod))
17026 unmatched_redefinition("module", cbase, id, mod);
17027 return mod;
17028 }
17029 else {
17030 return vm_declare_module(id, cbase);
17031 }
17032}
17033static VALUE
17034vm_find_or_create_class_by_id(ID id,
17035 rb_num_t flags,
17036 VALUE cbase,
17037 VALUE super)
17038{
17039 rb_vm_defineclass_type_t type = ((rb_vm_defineclass_type_t)(flags) & VM_DEFINECLASS_TYPE_MASK);
17040 switch (type) {
17041 case VM_DEFINECLASS_TYPE_CLASS:
17042 return vm_define_class(id, flags, cbase, super);
17043 case VM_DEFINECLASS_TYPE_SINGLETON_CLASS:
17044 return rb_singleton_class(cbase);
17045 case VM_DEFINECLASS_TYPE_MODULE:
17046 return vm_define_module(id, flags, cbase);
17047 default:
17048 rb_bug("unknown defineclass type: %d", (int)type);
17049 }
17050}
17051static rb_method_visibility_t
17052vm_scope_visibility_get(const rb_execution_context_t *ec)
17053{
17054 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
17055 if (!vm_env_cref_by_cref(cfp->ep)) {
17056 return METHOD_VISI_PUBLIC;
17057 }
17058 else {
17059 return CREF_SCOPE_VISI(vm_ec_cref(ec))->method_visi;
17060 }
17061}
17062static int
17063vm_scope_module_func_check(const rb_execution_context_t *ec)
17064{
17065 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
17066 if (!vm_env_cref_by_cref(cfp->ep)) {
17067 return 0;
17068 }
17069 else {
17070 return CREF_SCOPE_VISI(vm_ec_cref(ec))->module_func;
17071 }
17072}
17073static void
17074vm_define_method(const rb_execution_context_t *ec, VALUE obj, ID id, VALUE iseqval, int is_singleton)
17075{
17076 VALUE klass;
17077 rb_method_visibility_t visi;
17078 rb_cref_t *cref = vm_ec_cref(ec);
17079 if (is_singleton) {
17080 klass = rb_singleton_class(obj);
17081 visi = METHOD_VISI_PUBLIC;
17082 }
17083 else {
17084 klass = CREF_CLASS_FOR_DEFINITION(cref);
17085 visi = vm_scope_visibility_get(ec);
17086 }
17087 if (RB_NIL_P(klass)) {
17088 rb_raise(rb_eTypeError, "no class/module to add method");
17089 }
17090 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, visi);
17091 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)) {
17092 ((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->max_iv_count = rb_estimate_iv_count(klass, (const rb_iseq_t *)iseqval);
17093 }
17094 if (!is_singleton && vm_scope_module_func_check(ec)) {
17095 klass = rb_singleton_class(klass);
17096 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, METHOD_VISI_PUBLIC);
17097 }
17098}
17099static VALUE
17100vm_invokeblock_i(struct rb_execution_context_struct *ec,
17101 struct rb_control_frame_struct *reg_cfp,
17102 struct rb_calling_info *calling)
17103{
17104 const struct rb_callinfo *ci = calling->ci;
17105 VALUE block_handler = VM_CF_BLOCK_HANDLER((((reg_cfp))));
17106 if (block_handler == 0) {
17107 rb_vm_localjump_error("no block given (yield)", ((VALUE)RUBY_Qnil), 0);
17108 }
17109 else {
17110 return vm_invoke_block(ec, (((reg_cfp))), calling, ci, 0, block_handler);
17111 }
17112}
17113static const struct rb_callcache *
17114vm_search_method_wrap(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
17115{
17116 return vm_search_method((VALUE)reg_cfp->iseq, cd, recv);
17117}
17118static const struct rb_callcache *
17119vm_search_invokeblock(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
17120{
17121 static const struct rb_callcache cc = {
17122 .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE),
17123 .klass = 0,
17124 .cme_ = 0,
17125 .call_ = vm_invokeblock_i,
17126 .aux_ = {0},
17127 };
17128 return &cc;
17129}
17130static
17131VALUE
17132vm_sendish(
17133 struct rb_execution_context_struct *ec,
17134 struct rb_control_frame_struct *reg_cfp,
17135 struct rb_call_data *cd,
17136 VALUE block_handler,
17137 const struct rb_callcache *(*method_explorer)(const struct rb_control_frame_struct *cfp, struct rb_call_data *cd, VALUE recv)
17138) {
17139 VALUE val = ((VALUE)RUBY_Qundef);
17140 const struct rb_callinfo *ci = cd->ci;
17141 const struct rb_callcache *cc;
17142 int argc = vm_ci_argc(ci);
17143 VALUE recv = (*(((((reg_cfp)->sp)))-(argc)-1));
17144 struct rb_calling_info calling = {
17145 .block_handler = block_handler,
17146 .kw_splat = (vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit)) > 0,
17147 .recv = recv,
17148 .argc = argc,
17149 .ci = ci,
17150 };
17151 calling.cc = cc = method_explorer((((reg_cfp))), cd, recv);
17152 val = vm_cc_call(cc)(ec, (((reg_cfp))), &calling);
17153 if (!RB_UNDEF_P(val)) {
17154 return val;
17155 }
17156 else {
17157 do { (reg_cfp) = ec->cfp; } while (0);
17158 }
17159 if (((((((reg_cfp)))->iseq))->body)->catch_except_p) {
17160 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
17161 return rb_vm_exec(ec, 1);
17162 }
17163 else if (RB_UNDEF_P(val = jit_exec(ec))) {
17164 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
17165 return rb_vm_exec(ec, 0);
17166 }
17167 else {
17168 return val;
17169 }
17170}
17171VALUE rb_nil_to_s(VALUE);
17172VALUE rb_true_to_s(VALUE);
17173VALUE rb_false_to_s(VALUE);
17174VALUE rb_int_to_s(int argc, VALUE *argv, VALUE x);
17175VALUE rb_fix_to_s(VALUE);
17176VALUE rb_mod_to_s(VALUE);
17177VALUE rb_mod_name(VALUE);
17178static VALUE
17179vm_objtostring(const rb_iseq_t *iseq, VALUE recv, CALL_DATA cd)
17180{
17181 int type = ((int)rb_type(recv));
17182 if (type == RUBY_T_STRING) {
17183 return recv;
17184 }
17185 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
17186 switch (type) {
17187 case RUBY_T_SYMBOL:
17188 if (check_cfunc(vm_cc_cme(cc), rb_sym_to_s)) {
17189 return rb_sym2str(recv);
17190 }
17191 break;
17192 case RUBY_T_MODULE:
17193 case RUBY_T_CLASS:
17194 if (check_cfunc(vm_cc_cme(cc), rb_mod_to_s)) {
17195 VALUE val = rb_mod_name(recv);
17196 if (RB_NIL_P(val)) {
17197 val = rb_mod_to_s(recv);
17198 }
17199 return val;
17200 }
17201 break;
17202 case RUBY_T_NIL:
17203 if (check_cfunc(vm_cc_cme(cc), rb_nil_to_s)) {
17204 return rb_nil_to_s(recv);
17205 }
17206 break;
17207 case RUBY_T_TRUE:
17208 if (check_cfunc(vm_cc_cme(cc), rb_true_to_s)) {
17209 return rb_true_to_s(recv);
17210 }
17211 break;
17212 case RUBY_T_FALSE:
17213 if (check_cfunc(vm_cc_cme(cc), rb_false_to_s)) {
17214 return rb_false_to_s(recv);
17215 }
17216 break;
17217 case RUBY_T_FIXNUM:
17218 if (check_cfunc(vm_cc_cme(cc), rb_int_to_s)) {
17219 return rb_fix_to_s(recv);
17220 }
17221 break;
17222 }
17223 return ((VALUE)RUBY_Qundef);
17224}
17225static VALUE
17226vm_opt_str_freeze(VALUE str, int bop, ID id)
17227{
17228 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17229 return str;
17230 }
17231 else {
17232 return ((VALUE)RUBY_Qundef);
17233 }
17234}
17235static VALUE
17236vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17237{
17238 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MAX)]&((1 << 3))) == 0), 1)))) {
17239 if (num == 0) {
17240 return ((VALUE)RUBY_Qnil);
17241 }
17242 else {
17243 VALUE result = *ptr;
17244 rb_snum_t i = num - 1;
17245 while (i-- > 0) {
17246 const VALUE v = *++ptr;
17247 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) {
17248 result = v;
17249 }
17250 }
17251 return result;
17252 }
17253 }
17254 else {
17255 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMax, 0, ((void *)0), 0);
17256 }
17257}static inline
17258VALUE
17259rb_vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17260{
17261 return vm_opt_newarray_max(ec, num, ptr);
17262}
17263static VALUE
17264vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17265{
17266 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MIN)]&((1 << 3))) == 0), 1)))) {
17267 if (num == 0) {
17268 return ((VALUE)RUBY_Qnil);
17269 }
17270 else {
17271 VALUE result = *ptr;
17272 rb_snum_t i = num - 1;
17273 while (i-- > 0) {
17274 const VALUE v = *++ptr;
17275 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) {
17276 result = v;
17277 }
17278 }
17279 return result;
17280 }
17281 }
17282 else {
17283 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMin, 0, ((void *)0), 0);
17284 }
17285}static inline
17286VALUE
17287rb_vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17288{
17289 return vm_opt_newarray_min(ec, num, ptr);
17290}
17291static void
17292vm_track_constant_cache(ID id, void *ic)
17293{
17294 struct rb_id_table *const_cache = rb_current_vm()->constant_cache;
17295 VALUE lookup_result;
17296 st_table *ics;
17297 if (rb_id_table_lookup(const_cache, id, &lookup_result)) {
17298 ics = (st_table *)lookup_result;
17299 }
17300 else {
17301 ics = rb_st_init_numtable();
17302 rb_id_table_insert(const_cache, id, (VALUE)ics);
17303 }
17304 rb_st_insert(ics, (st_data_t) ic, (st_data_t) ((VALUE)RUBY_Qtrue));
17305}
17306static void
17307vm_ic_track_const_chain(rb_control_frame_t *cfp, IC ic, const ID *segments)
17308{
17309 { unsigned int _lev; rb_vm_lock_enter(&_lev, "../ruby-3.2.2/vm_insnhelper.c", 5291);;
17310 for (int i = 0; segments[i]; i++) {
17311 ID id = segments[i];
17312 if (id == idNULL) continue;
17313 vm_track_constant_cache(id, ic);
17314 }
17315 rb_vm_lock_leave(&_lev, "../ruby-3.2.2/vm_insnhelper.c", 5299); };
17316}
17317static inline _Bool
17318vm_inlined_ic_hit_p(VALUE flags, VALUE value, const rb_cref_t *ic_cref, const VALUE *reg_ep)
17319{
17320 if ((flags & ((VALUE)RUBY_FL_USER4)) || rb_ractor_main_p()) {
17321 ((void)0);
17322 return (ic_cref == ((void *)0) ||
17323 ic_cref == vm_get_cref(reg_ep));
17324 }
17325 return 0;
17326}
17327static _Bool
17328vm_ic_hit_p(const struct iseq_inline_constant_cache_entry *ice, const VALUE *reg_ep)
17329{
17330 ((void)0);
17331 return vm_inlined_ic_hit_p(ice->flags, ice->value, ice->ic_cref, reg_ep);
17332}static inline
17333_Bool
17334rb_vm_ic_hit_p(IC ic, const VALUE *reg_ep)
17335{
17336 return ic->entry && vm_ic_hit_p(ic->entry, reg_ep);
17337}
17338COLDFUNC static void
17339vm_ic_update(const rb_iseq_t *iseq, IC ic, VALUE val, const VALUE *reg_ep, const VALUE *pc) {
17340 if (ruby_vm_const_missing_count > 0) {
17341 ruby_vm_const_missing_count = 0;
17342 ic->entry = ((void *)0);
17343 return;
17344 }
17345 struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)rb_imemo_new(imemo_constcache, 0, 0, 0, 0);
17346 rb_obj_write((VALUE)(ice), __extension__({
17347 ;
17348 ; __typeof__((VALUE *)(&ice->value)) unaligned_member_access_result = ((VALUE *)(&ice->value));
17349 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.2/vm_insnhelper.c", 5339);
17350 ice->ic_cref = vm_get_const_key_cref(reg_ep);
17351 if (rb_ractor_shareable_p(val)) ice->flags |= ((VALUE)RUBY_FL_USER4);
17352 rb_obj_write((VALUE)(iseq), __extension__({
17353 ;
17354 ; __typeof__((VALUE *)(&ic->entry)) unaligned_member_access_result = ((VALUE *)(&ic->entry));
17355 ; unaligned_member_access_result; }), (VALUE)(ice), "../ruby-3.2.2/vm_insnhelper.c", 5342);
17356 ((void)0);
17357 unsigned pos = (unsigned)(pc - ((iseq)->body)->iseq_encoded);
17358 rb_yjit_constant_ic_update(iseq, ic, pos);
17359 rb_mjit_constant_ic_update(iseq, ic, pos);
17360}
17361static VALUE
17362vm_once_dispatch(rb_execution_context_t *ec, ISEQ iseq, ISE is)
17363{
17364 rb_thread_t *th = rb_ec_thread_ptr(ec);
17365 rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
17366 again:
17367 if (is->once.running_thread == RUNNING_THREAD_ONCE_DONE) {
17368 return is->once.value;
17369 }
17370 else if (is->once.running_thread == ((void *)0)) {
17371 VALUE val;
17372 is->once.running_thread = th;
17373 val = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
17374 rb_obj_write((VALUE)(ec->cfp->iseq), __extension__({
17375 ;
17376 ; __typeof__((VALUE *)(&is->once.value)) unaligned_member_access_result = ((VALUE *)(&is->once.value));
17377 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.2/vm_insnhelper.c", 5364);
17378 is->once.running_thread = RUNNING_THREAD_ONCE_DONE;
17379 return val;
17380 }
17381 else if (is->once.running_thread == th) {
17382 return vm_once_exec((VALUE)iseq);
17383 }
17384 else {
17385 rb_vm_check_ints(ec);
17386 rb_thread_schedule();
17387 goto again;
17388 }
17389}
17390static OFFSET
17391vm_case_dispatch(CDHASH hash, OFFSET else_offset, VALUE key)
17392{
17393 switch (__extension__({ VALUE arg_obj = (key); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })) {
17394 case -1:
17395 case RUBY_T_FLOAT:
17396 case RUBY_T_SYMBOL:
17397 case RUBY_T_BIGNUM:
17398 case RUBY_T_STRING:
17399 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)))) {
17400 st_data_t val;
17401 if (RB_FLOAT_TYPE_P(key)) {
17402 double kval = rb_float_value_inline(key);
17403 if (!(__builtin_isinf_sign (kval)) && modf(kval, &kval) == 0.0) {
17404 key = (((kval) < (0x7fffffffffffffffL / 2) + 1) && ((kval) >= ((-0x7fffffffffffffffL -1L) / 2))) ? RB_INT2FIX((long)kval) : rb_dbl2big(kval);
17405 }
17406 }
17407 if (rb_hash_stlike_lookup(hash, key, &val)) {
17408 return rb_fix2long((VALUE)val);
17409 }
17410 else {
17411 return else_offset;
17412 }
17413 }
17414 }
17415 return 0;
17416}
17417__attribute__((__noreturn__)) static void vm_stack_consistency_error(const rb_execution_context_t *ec, const rb_control_frame_t *, const VALUE *);
17418static void
17419vm_stack_consistency_error(const rb_execution_context_t *ec,
17420 const rb_control_frame_t *cfp,
17421 const VALUE *bp)
17422{
17423 const ptrdiff_t nsp = ((cfp->sp) - (ec)->vm_stack);
17424 const ptrdiff_t nbp = ((bp) - (ec)->vm_stack);
17425 static const char stack_consistency_error[] =
17426 "Stack consistency error (sp: %""t""d"", bp: %""t""d"")";
17427 rb_bug(stack_consistency_error, nsp, nbp);
17428}
17429ALWAYS_INLINE(static inline VALUE
17430vm_opt_plus(VALUE recv, VALUE obj));
17431static inline VALUE
17432vm_opt_plus(VALUE recv, VALUE obj) {
17433 if (FIXNUM_2_P(recv, obj) &&
17434 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 0))) == 0), 1)))) {
17435 return rb_fix_plus_fix(recv, obj);
17436 }
17437 else if (FLONUM_2_P(recv, obj) &&
17438 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
17439 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
17440 }
17441 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17442 return ((VALUE)RUBY_Qundef);
17443 }
17444 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17445 RBASIC_CLASS(obj) == rb_cFloat &&
17446 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
17447 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
17448 }
17449 else if (RBASIC_CLASS(recv) == rb_cString &&
17450 RBASIC_CLASS(obj) == rb_cString &&
17451 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 2))) == 0), 1)))) {
17452 return rb_str_opt_plus(recv, obj);
17453 }
17454 else if (RBASIC_CLASS(recv) == rb_cArray &&
17455 RBASIC_CLASS(obj) == rb_cArray &&
17456 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 3))) == 0), 1)))) {
17457 return rb_ary_plus(recv, obj);
17458 }
17459 else {
17460 return ((VALUE)RUBY_Qundef);
17461 }
17462}
17463ALWAYS_INLINE(static inline VALUE
17464vm_opt_minus(VALUE recv, VALUE obj));
17465static inline VALUE
17466vm_opt_minus(VALUE recv, VALUE obj) {
17467 if (FIXNUM_2_P(recv, obj) &&
17468 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 0))) == 0), 1)))) {
17469 return rb_fix_minus_fix(recv, obj);
17470 }
17471 else if (FLONUM_2_P(recv, obj) &&
17472 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
17473 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
17474 }
17475 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17476 return ((VALUE)RUBY_Qundef);
17477 }
17478 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17479 RBASIC_CLASS(obj) == rb_cFloat &&
17480 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
17481 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
17482 }
17483 else {
17484 return ((VALUE)RUBY_Qundef);
17485 }
17486}
17487ALWAYS_INLINE(static inline VALUE
17488vm_opt_mult(VALUE recv, VALUE obj));
17489static inline VALUE
17490vm_opt_mult(VALUE recv, VALUE obj) {
17491 if (FIXNUM_2_P(recv, obj) &&
17492 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 0))) == 0), 1)))) {
17493 return rb_fix_mul_fix(recv, obj);
17494 }
17495 else if (FLONUM_2_P(recv, obj) &&
17496 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
17497 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
17498 }
17499 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17500 return ((VALUE)RUBY_Qundef);
17501 }
17502 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17503 RBASIC_CLASS(obj) == rb_cFloat &&
17504 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
17505 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
17506 }
17507 else {
17508 return ((VALUE)RUBY_Qundef);
17509 }
17510}
17511ALWAYS_INLINE(static inline VALUE
17512vm_opt_div(VALUE recv, VALUE obj));
17513static inline VALUE
17514vm_opt_div(VALUE recv, VALUE obj) {
17515 if (FIXNUM_2_P(recv, obj) &&
17516 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 0))) == 0), 1)))) {
17517 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_div_fix(recv, obj);
17518 }
17519 else if (FLONUM_2_P(recv, obj) &&
17520 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17521 return rb_flo_div_flo(recv, obj);
17522 }
17523 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17524 return ((VALUE)RUBY_Qundef);
17525 }
17526 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17527 RBASIC_CLASS(obj) == rb_cFloat &&
17528 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17529 return rb_flo_div_flo(recv, obj);
17530 }
17531 else {
17532 return ((VALUE)RUBY_Qundef);
17533 }
17534}
17535ALWAYS_INLINE(static inline VALUE
17536vm_opt_mod(VALUE recv, VALUE obj));
17537static inline VALUE
17538vm_opt_mod(VALUE recv, VALUE obj) {
17539 if (FIXNUM_2_P(recv, obj) &&
17540 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 0))) == 0), 1)))) {
17541 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_mod_fix(recv, obj);
17542 }
17543 else if (FLONUM_2_P(recv, obj) &&
17544 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17545 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17546 }
17547 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17548 return ((VALUE)RUBY_Qundef);
17549 }
17550 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17551 RBASIC_CLASS(obj) == rb_cFloat &&
17552 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17553 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17554 }
17555 else {
17556 return ((VALUE)RUBY_Qundef);
17557 }
17558}
17559ALWAYS_INLINE(static inline VALUE
17560vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj));
17561static inline VALUE
17562vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj) {
17563 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not_equal)) {
17564 VALUE val = opt_equality(iseq, recv, obj, cd_eq);
17565 if (!RB_UNDEF_P(val)) {
17566 return ((!RB_TEST(val)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17567 }
17568 }
17569 return ((VALUE)RUBY_Qundef);
17570}
17571ALWAYS_INLINE(static inline VALUE
17572vm_opt_lt(VALUE recv, VALUE obj));
17573static inline VALUE
17574vm_opt_lt(VALUE recv, VALUE obj) {
17575 if (FIXNUM_2_P(recv, obj) &&
17576 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 0))) == 0), 1)))) {
17577 return (((long)recv < (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17578 }
17579 else if (FLONUM_2_P(recv, obj) &&
17580 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17581 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17582 }
17583 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17584 return ((VALUE)RUBY_Qundef);
17585 }
17586 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17587 RBASIC_CLASS(obj) == rb_cFloat &&
17588 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17589 ;
17590 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17591 }
17592 else {
17593 return ((VALUE)RUBY_Qundef);
17594 }
17595}
17596ALWAYS_INLINE(static inline VALUE
17597vm_opt_le(VALUE recv, VALUE obj));
17598static inline VALUE
17599vm_opt_le(VALUE recv, VALUE obj) {
17600 if (FIXNUM_2_P(recv, obj) &&
17601 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 0))) == 0), 1)))) {
17602 return (((long)recv <= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17603 }
17604 else if (FLONUM_2_P(recv, obj) &&
17605 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17606 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17607 }
17608 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17609 return ((VALUE)RUBY_Qundef);
17610 }
17611 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17612 RBASIC_CLASS(obj) == rb_cFloat &&
17613 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17614 ;
17615 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17616 }
17617 else {
17618 return ((VALUE)RUBY_Qundef);
17619 }
17620}
17621ALWAYS_INLINE(static inline VALUE
17622vm_opt_gt(VALUE recv, VALUE obj));
17623static inline VALUE
17624vm_opt_gt(VALUE recv, VALUE obj) {
17625 if (FIXNUM_2_P(recv, obj) &&
17626 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 0))) == 0), 1)))) {
17627 return (((long)recv > (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17628 }
17629 else if (FLONUM_2_P(recv, obj) &&
17630 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17631 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17632 }
17633 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17634 return ((VALUE)RUBY_Qundef);
17635 }
17636 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17637 RBASIC_CLASS(obj) == rb_cFloat &&
17638 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17639 ;
17640 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17641 }
17642 else {
17643 return ((VALUE)RUBY_Qundef);
17644 }
17645}
17646ALWAYS_INLINE(static inline VALUE
17647vm_opt_ge(VALUE recv, VALUE obj));
17648static inline VALUE
17649vm_opt_ge(VALUE recv, VALUE obj) {
17650 if (FIXNUM_2_P(recv, obj) &&
17651 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 0))) == 0), 1)))) {
17652 return (((long)recv >= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17653 }
17654 else if (FLONUM_2_P(recv, obj) &&
17655 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17656 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17657 }
17658 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17659 return ((VALUE)RUBY_Qundef);
17660 }
17661 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17662 RBASIC_CLASS(obj) == rb_cFloat &&
17663 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17664 ;
17665 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17666 }
17667 else {
17668 return ((VALUE)RUBY_Qundef);
17669 }
17670}
17671ALWAYS_INLINE(static inline VALUE
17672vm_opt_ltlt(VALUE recv, VALUE obj));
17673static inline VALUE
17674vm_opt_ltlt(VALUE recv, VALUE obj) {
17675 if (RB_SPECIAL_CONST_P(recv)) {
17676 return ((VALUE)RUBY_Qundef);
17677 }
17678 else if (RBASIC_CLASS(recv) == rb_cString &&
17679 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LTLT)]&((1 << 2))) == 0), 1)))) {
17680 if ((__builtin_expect(!!(RB_TYPE_P(obj, RUBY_T_STRING)), 1))) {
17681 return rb_str_buf_append(recv, obj);
17682 }
17683 else {
17684 return rb_str_concat(recv, obj);
17685 }
17686 }
17687 else if (RBASIC_CLASS(recv) == rb_cArray &&
17688 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LTLT)]&((1 << 3))) == 0), 1)))) {
17689 return rb_ary_push(recv, obj);
17690 }
17691 else {
17692 return ((VALUE)RUBY_Qundef);
17693 }
17694}
17695ALWAYS_INLINE(static inline VALUE
17696vm_opt_and(VALUE recv, VALUE obj));
17697static inline VALUE
17698vm_opt_and(VALUE recv, VALUE obj) {
17699 VALUE ret = ((long) recv) & ((long) obj);
17700 if (RB_FIXNUM_P(ret) &&
17701 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AND)]&((1 << 0))) == 0), 1)))) {
17702 return ret;
17703 }
17704 else {
17705 return ((VALUE)RUBY_Qundef);
17706 }
17707}
17708ALWAYS_INLINE(static inline VALUE
17709vm_opt_or(VALUE recv, VALUE obj));
17710static inline VALUE
17711vm_opt_or(VALUE recv, VALUE obj) {
17712 if (FIXNUM_2_P(recv, obj) &&
17713 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_OR)]&((1 << 0))) == 0), 1)))) {
17714 return recv | obj;
17715 }
17716 else {
17717 return ((VALUE)RUBY_Qundef);
17718 }
17719}
17720ALWAYS_INLINE(static inline VALUE
17721vm_opt_aref(VALUE recv, VALUE obj));
17722static inline VALUE
17723vm_opt_aref(VALUE recv, VALUE obj) {
17724 if (RB_SPECIAL_CONST_P(recv)) {
17725 if (FIXNUM_2_P(recv, obj) &&
17726 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 0))) == 0), 1)))) {
17727 return rb_fix_aref(recv, obj);
17728 }
17729 return ((VALUE)RUBY_Qundef);
17730 }
17731 else if (RBASIC_CLASS(recv) == rb_cArray &&
17732 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 3))) == 0), 1)))) {
17733 if (RB_FIXNUM_P(obj)) {
17734 return rb_ary_entry_internal(recv, rb_fix2long(obj));
17735 }
17736 else {
17737 return rb_ary_aref1(recv, obj);
17738 }
17739 }
17740 else if (RBASIC_CLASS(recv) == rb_cHash &&
17741 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1)))) {
17742 return rb_hash_aref(recv, obj);
17743 }
17744 else {
17745 return ((VALUE)RUBY_Qundef);
17746 }
17747}
17748ALWAYS_INLINE(static inline VALUE
17749vm_opt_aset(VALUE recv, VALUE obj, VALUE set));
17750static inline VALUE
17751vm_opt_aset(VALUE recv, VALUE obj, VALUE set) {
17752 if (RB_SPECIAL_CONST_P(recv)) {
17753 return ((VALUE)RUBY_Qundef);
17754 }
17755 else if (RBASIC_CLASS(recv) == rb_cArray &&
17756 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 3))) == 0), 1))) &&
17757 RB_FIXNUM_P(obj)) {
17758 rb_ary_store(recv, rb_fix2long(obj), set);
17759 return set;
17760 }
17761 else if (RBASIC_CLASS(recv) == rb_cHash &&
17762 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1)))) {
17763 rb_hash_aset(recv, obj, set);
17764 return set;
17765 }
17766 else {
17767 return ((VALUE)RUBY_Qundef);
17768 }
17769}
17770ALWAYS_INLINE(static inline VALUE
17771vm_opt_aref_with(VALUE recv, VALUE key));
17772static inline VALUE
17773vm_opt_aref_with(VALUE recv, VALUE key) {
17774 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17775 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1))) &&
17776 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse) &&
17777 !RB_FL_TEST(recv, RHASH_PROC_DEFAULT)) {
17778 return rb_hash_aref(recv, key);
17779 }
17780 else {
17781 return ((VALUE)RUBY_Qundef);
17782 }
17783}
17784ALWAYS_INLINE(static inline VALUE
17785vm_opt_aset_with(VALUE recv, VALUE key, VALUE val));
17786static inline VALUE
17787vm_opt_aset_with(VALUE recv, VALUE key, VALUE val) {
17788 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17789 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1))) &&
17790 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
17791 return rb_hash_aset(recv, key, val);
17792 }
17793 else {
17794 return ((VALUE)RUBY_Qundef);
17795 }
17796}
17797static VALUE
17798vm_opt_length(VALUE recv, int bop)
17799{
17800 if (RB_SPECIAL_CONST_P(recv)) {
17801 return ((VALUE)RUBY_Qundef);
17802 }
17803 else if (RBASIC_CLASS(recv) == rb_cString &&
17804 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17805 if (bop == BOP_EMPTY_P) {
17806 return rb_long2num_inline(RSTRING_LEN(recv));
17807 }
17808 else {
17809 return rb_str_length(recv);
17810 }
17811 }
17812 else if (RBASIC_CLASS(recv) == rb_cArray &&
17813 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 3))) == 0), 1)))) {
17814 return rb_long2num_inline(rb_array_len(recv));
17815 }
17816 else if (RBASIC_CLASS(recv) == rb_cHash &&
17817 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 4))) == 0), 1)))) {
17818 return __builtin_choose_expr( __builtin_constant_p(RHASH_SIZE(recv)), ((VALUE)(RHASH_SIZE(recv))) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(RHASH_SIZE(recv)));
17819 }
17820 else {
17821 return ((VALUE)RUBY_Qundef);
17822 }
17823}
17824static VALUE
17825vm_opt_empty_p(VALUE recv)
17826{
17827 switch (vm_opt_length(recv, BOP_EMPTY_P)) {
17828 case ((VALUE)RUBY_Qundef): return ((VALUE)RUBY_Qundef);
17829 case __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0)): return ((VALUE)RUBY_Qtrue);
17830 default: return ((VALUE)RUBY_Qfalse);
17831 }
17832}
17833VALUE rb_false(VALUE obj);
17834static VALUE
17835vm_opt_nil_p(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv)
17836{
17837 if (RB_NIL_P(recv) &&
17838 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_NIL_P)]&((1 << 9))) == 0), 1)))) {
17839 return ((VALUE)RUBY_Qtrue);
17840 }
17841 else if (vm_method_cfunc_is(iseq, cd, recv, rb_false)) {
17842 return ((VALUE)RUBY_Qfalse);
17843 }
17844 else {
17845 return ((VALUE)RUBY_Qundef);
17846 }
17847}
17848static VALUE
17849fix_succ(VALUE x)
17850{
17851 switch (x) {
17852 case ~0UL:
17853 return __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
17854 case ((~0UL)>>(int)(1)):
17855 return rb_uint2big(1UL << (8 * 8 - 2));
17856 default:
17857 return x + 2;
17858 }
17859}
17860static VALUE
17861vm_opt_succ(VALUE recv)
17862{
17863 if (RB_FIXNUM_P(recv) &&
17864 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_SUCC)]&((1 << 0))) == 0), 1)))) {
17865 return fix_succ(recv);
17866 }
17867 else if (RB_SPECIAL_CONST_P(recv)) {
17868 return ((VALUE)RUBY_Qundef);
17869 }
17870 else if (RBASIC_CLASS(recv) == rb_cString &&
17871 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_SUCC)]&((1 << 2))) == 0), 1)))) {
17872 return rb_str_succ(recv);
17873 }
17874 else {
17875 return ((VALUE)RUBY_Qundef);
17876 }
17877}
17878ALWAYS_INLINE(static inline VALUE
17879vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv));
17880static inline VALUE
17881vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv) {
17882 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not)) {
17883 return ((!RB_TEST(recv)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17884 }
17885 else {
17886 return ((VALUE)RUBY_Qundef);
17887 }
17888}
17889static VALUE
17890vm_opt_regexpmatch2(VALUE recv, VALUE obj)
17891{
17892 if (RB_SPECIAL_CONST_P(recv)) {
17893 return ((VALUE)RUBY_Qundef);
17894 }
17895 else if (RBASIC_CLASS(recv) == rb_cString &&
17896 rb_class_of(obj) == rb_cRegexp &&
17897 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MATCH)]&((1 << 2))) == 0), 1)))) {
17898 return rb_reg_match(obj, recv);
17899 }
17900 else if (RBASIC_CLASS(recv) == rb_cRegexp &&
17901 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MATCH)]&((1 << 8))) == 0), 1)))) {
17902 return rb_reg_match(recv, obj);
17903 }
17904 else {
17905 return ((VALUE)RUBY_Qundef);
17906 }
17907}
17908rb_event_flag_t rb_iseq_event_flags(const rb_iseq_t *iseq, size_t pos);
17909__attribute__((__noinline__)) static void vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp);
17910static inline void
17911vm_trace_hook(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const VALUE *pc,
17912 rb_event_flag_t pc_events, rb_event_flag_t target_event,
17913 rb_hook_list_t *global_hooks, rb_hook_list_t *const *local_hooks_ptr, VALUE val)
17914{
17915 rb_event_flag_t event = pc_events & target_event;
17916 VALUE self = (((((reg_cfp)))->self));
17917 ((void)0);
17918 if (event & global_hooks->events) {
17919 reg_cfp->pc++;
17920 vm_dtrace(event, ec);
17921 rb_exec_event_hook_orig(ec, global_hooks, event, self, 0, 0, 0 , val, 0);
17922 reg_cfp->pc--;
17923 }
17924 rb_hook_list_t *local_hooks = *local_hooks_ptr;
17925 if (local_hooks != ((void *)0)) {
17926 if (event & local_hooks->events) {
17927 reg_cfp->pc++;
17928 rb_exec_event_hook_orig(ec, local_hooks, event, self, 0, 0, 0 , val, 0);
17929 reg_cfp->pc--;
17930 }
17931 }
17932}static inline
17933_Bool
17934rb_vm_opt_cfunc_p(CALL_CACHE cc, int insn)
17935{
17936 switch (insn) {
17937 case YARVINSN_opt_eq:
17938 return check_cfunc(vm_cc_cme(cc), rb_obj_equal);
17939 case YARVINSN_opt_nil_p:
17940 return check_cfunc(vm_cc_cme(cc), rb_false);
17941 case YARVINSN_opt_not:
17942 return check_cfunc(vm_cc_cme(cc), rb_obj_not);
17943 default:
17944 return 0;
17945 }
17946}
17947static void
17948vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp)
17949{
17950 const VALUE *pc = reg_cfp->pc;
17951 rb_event_flag_t enabled_flags = ruby_vm_event_flags & (0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010| 0x0020| 0x0040| 0x0100| 0x0200| 0x010000| 0x020000);
17952 rb_event_flag_t global_events = enabled_flags;
17953 if (enabled_flags == 0 && ruby_vm_event_local_num == 0) {
17954 return;
17955 }
17956 else {
17957 const rb_iseq_t *iseq = reg_cfp->iseq;
17958 VALUE iseq_val = (VALUE)iseq;
17959 size_t pos = pc - ((iseq)->body)->iseq_encoded;
17960 rb_event_flag_t pc_events = rb_iseq_event_flags(iseq, pos);
17961 rb_hook_list_t *local_hooks = iseq->aux.exec.local_hooks;
17962 rb_hook_list_t *const *local_hooks_ptr = &iseq->aux.exec.local_hooks;
17963 rb_event_flag_t iseq_local_events = local_hooks != ((void *)0) ? local_hooks->events : 0;
17964 rb_hook_list_t *bmethod_local_hooks = ((void *)0);
17965 rb_hook_list_t **bmethod_local_hooks_ptr = ((void *)0);
17966 rb_event_flag_t bmethod_local_events = 0;
17967 const _Bool bmethod_frame = VM_FRAME_BMETHOD_P(reg_cfp);
17968 enabled_flags |= iseq_local_events;
17969 ((void)0);
17970 if (bmethod_frame) {
17971 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
17972 ((void)0);
17973 bmethod_local_hooks = me->def->body.bmethod.hooks;
17974 bmethod_local_hooks_ptr = &me->def->body.bmethod.hooks;
17975 if (bmethod_local_hooks) {
17976 bmethod_local_events = bmethod_local_hooks->events;
17977 }
17978 }
17979 if ((pc_events & enabled_flags) == 0 && !bmethod_frame) {
17980 return;
17981 }
17982 else if (ec->trace_arg != ((void *)0)) {
17983 return;
17984 }
17985 else {
17986 rb_hook_list_t *global_hooks = rb_ec_ractor_hooks(ec);
17987 rb_event_flag_t bmethod_events = global_events | bmethod_local_events;
17988 if (0) {
17989 ruby_debug_printf("vm_trace>>%4d (%4x) - %s:%d %s\n",
17990 (int)pos,
17991 (int)pc_events,
17992 RSTRING_PTR(rb_iseq_path(iseq)),
17993 (int)rb_iseq_line_no(iseq, pos),
17994 RSTRING_PTR(rb_iseq_label(iseq)));
17995 }
17996 ((void)0);
17997 ((void)0);
17998 if ((pc_events & 0x0100) && bmethod_frame && (bmethod_events & 0x0008)) {
17999 vm_trace_hook(ec, reg_cfp, pc, 0x0008, 0x0008, global_hooks, bmethod_local_hooks_ptr, ((VALUE)RUBY_Qundef));
18000 }
18001 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);
18002 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);
18003 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);
18004 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);
18005 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);
18006 if ((pc_events & 0x0200) && bmethod_frame && (bmethod_events & 0x0010)) {
18007 vm_trace_hook(ec, reg_cfp, pc, 0x0010, 0x0010, global_hooks, bmethod_local_hooks_ptr, (*(((((reg_cfp)->sp)))-(0)-1)));
18008 }
18009 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(iseq_val); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
18010 }
18011 }
18012}static inline
18013void Init_vm_stack_canary(void) { }
18014static VALUE
18015builtin_invoker0(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18016{
18017 typedef VALUE (*rb_invoke_funcptr0_t)(rb_execution_context_t *ec, VALUE self);
18018 return (*(rb_invoke_funcptr0_t)funcptr)(ec, self);
18019}
18020static VALUE
18021builtin_invoker1(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18022{
18023 typedef VALUE (*rb_invoke_funcptr1_t)(rb_execution_context_t *ec, VALUE self, VALUE v1);
18024 return (*(rb_invoke_funcptr1_t)funcptr)(ec, self, argv[0]);
18025}
18026static VALUE
18027builtin_invoker2(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18028{
18029 typedef VALUE (*rb_invoke_funcptr2_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2);
18030 return (*(rb_invoke_funcptr2_t)funcptr)(ec, self, argv[0], argv[1]);
18031}
18032static VALUE
18033builtin_invoker3(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18034{
18035 typedef VALUE (*rb_invoke_funcptr3_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3);
18036 return (*(rb_invoke_funcptr3_t)funcptr)(ec, self, argv[0], argv[1], argv[2]);
18037}
18038static VALUE
18039builtin_invoker4(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18040{
18041 typedef VALUE (*rb_invoke_funcptr4_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4);
18042 return (*(rb_invoke_funcptr4_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3]);
18043}
18044static VALUE
18045builtin_invoker5(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18046{
18047 typedef VALUE (*rb_invoke_funcptr5_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5);
18048 return (*(rb_invoke_funcptr5_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4]);
18049}
18050static VALUE
18051builtin_invoker6(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18052{
18053 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);
18054 return (*(rb_invoke_funcptr6_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
18055}
18056static VALUE
18057builtin_invoker7(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18058{
18059 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);
18060 return (*(rb_invoke_funcptr7_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
18061}
18062static VALUE
18063builtin_invoker8(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18064{
18065 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);
18066 return (*(rb_invoke_funcptr8_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
18067}
18068static VALUE
18069builtin_invoker9(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18070{
18071 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);
18072 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]);
18073}
18074static VALUE
18075builtin_invoker10(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18076{
18077 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);
18078 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]);
18079}
18080static VALUE
18081builtin_invoker11(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18082{
18083 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);
18084 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]);
18085}
18086static VALUE
18087builtin_invoker12(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18088{
18089 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);
18090 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]);
18091}
18092static VALUE
18093builtin_invoker13(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18094{
18095 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);
18096 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]);
18097}
18098static VALUE
18099builtin_invoker14(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18100{
18101 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);
18102 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]);
18103}
18104static VALUE
18105builtin_invoker15(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18106{
18107 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);
18108 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]);
18109}
18110typedef VALUE (*builtin_invoker)(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr);
18111static builtin_invoker
18112lookup_builtin_invoker(int argc)
18113{
18114 static const builtin_invoker invokers[] = {
18115 builtin_invoker0,
18116 builtin_invoker1,
18117 builtin_invoker2,
18118 builtin_invoker3,
18119 builtin_invoker4,
18120 builtin_invoker5,
18121 builtin_invoker6,
18122 builtin_invoker7,
18123 builtin_invoker8,
18124 builtin_invoker9,
18125 builtin_invoker10,
18126 builtin_invoker11,
18127 builtin_invoker12,
18128 builtin_invoker13,
18129 builtin_invoker14,
18130 builtin_invoker15,
18131 };
18132 return invokers[argc];
18133}
18134static inline VALUE
18135invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const struct rb_builtin_function* bf, const VALUE *argv)
18136{
18137 const _Bool canary_p = ((reg_cfp->iseq)->body)->builtin_inline_p;
18138 if (canary_p) {} else {};
18139 VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, (rb_insn_func_t)bf->func_ptr);
18140 if (canary_p) {(void)(YARVINSN_invokebuiltin);};
18141 return ret;
18142}
18143static VALUE
18144vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf, const VALUE *argv)
18145{
18146 return invoke_bf(ec, cfp, bf, argv);
18147}
18148static VALUE
18149vm_invoke_builtin_delegate(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function *bf, unsigned int start_index)
18150{
18151 if (0) {
18152 fputs("vm_invoke_builtin_delegate: passing -> ", (((__getreent()))->_stderr));
18153 for (int i=0; i<bf->argc; i++) {
18154 ruby_debug_printf(":%s ", rb_id2name(((cfp->iseq)->body)->local_table[i+start_index]));
18155 }
18156 ruby_debug_printf("\n" "%s %s(%d):%p\n", __func__, bf->name, bf->argc, bf->func_ptr);
18157 }
18158 if (bf->argc == 0) {
18159 return invoke_bf(ec, cfp, bf, ((void *)0));
18160 }
18161 else {
18162 const VALUE *argv = cfp->ep - ((cfp->iseq)->body)->local_table_size - ( 3) + 1 + start_index;
18163 return invoke_bf(ec, cfp, bf, argv);
18164 }
18165}static inline
18166VALUE
18167rb_vm_lvar_exposed(rb_execution_context_t *ec, int index)
18168{
18169 const rb_control_frame_t *cfp = ec->cfp;
18170 return cfp->ep[index];
18171}
18172struct local_var_list {
18173 VALUE tbl;
18174};
18175static 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);
18176static 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);
18177static inline VALUE vm_yield(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat);
18178static inline VALUE vm_yield_with_block(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE block_handler, int kw_splat);
18179static inline VALUE vm_yield_force_blockarg(rb_execution_context_t *ec, VALUE args);
18180VALUE rb_vm_exec(rb_execution_context_t *ec, _Bool jit_enable_p);
18181static 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);
18182static int vm_collect_local_variables_in_heap(const VALUE *dfp, const struct local_var_list *vars);
18183static VALUE rb_eUncaughtThrow;
18184static ID id_result, id_tag, id_value;
18185typedef enum call_type {
18186 CALL_PUBLIC,
18187 CALL_FCALL,
18188 CALL_VCALL,
18189 CALL_PUBLIC_KW,
18190 CALL_FCALL_KW,
18191 CALL_TYPE_MAX
18192} call_type;
18193static VALUE send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope);
18194static VALUE vm_call0_body(rb_execution_context_t* ec, struct rb_calling_info *calling, const VALUE *argv);
18195static inline void
18196stack_check(rb_execution_context_t *ec)
18197{
18198 if (!(((ec)->raised_flag & (RAISED_STACKOVERFLOW)) != 0) &&
18199 rb_ec_stack_check(ec)) {
18200 ((ec)->raised_flag |= (RAISED_STACKOVERFLOW));
18201 rb_ec_stack_overflow(ec, 0);
18202 }
18203}
18204static void
18205raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj,
18206 enum method_missing_reason last_call_status)
18207{
18208 VALUE exc = rb_eNoMethodError;
18209 VALUE format = 0;
18210 if ((__builtin_expect(!!(argc == 0), 0))) {
18211 rb_raise(rb_eArgError, "no method name given");
18212 }
18213 else if ((__builtin_expect(!!(!RB_SYMBOL_P(argv[0])), 0))) {
18214 const VALUE e = rb_eArgError;
18215 rb_raise(e, "method name must be a Symbol but %""l""i" "\v"" is given",
18216 rb_obj_class(argv[0]));
18217 }
18218 stack_check(ec);
18219 if (last_call_status & MISSING_PRIVATE) {
18220 format = rb_fstring_new(("private method `%s' called for %s%s%s"), (sizeof("private method `%s' called for %s%s%s" "") - 1));
18221 }
18222 else if (last_call_status & MISSING_PROTECTED) {
18223 format = rb_fstring_new(("protected method `%s' called for %s%s%s"), (sizeof("protected method `%s' called for %s%s%s" "") - 1));
18224 }
18225 else if (last_call_status & MISSING_VCALL) {
18226 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));
18227 exc = rb_eNameError;
18228 }
18229 else if (last_call_status & MISSING_SUPER) {
18230 format = rb_fstring_new(("super: no superclass method `%s' for %s%s%s"), (sizeof("super: no superclass method `%s' for %s%s%s" "") - 1));
18231 }
18232 {
18233 exc = rb_make_no_method_exception(exc, format, obj, argc, argv,
18234 last_call_status & (MISSING_FCALL|MISSING_VCALL));
18235 if (!(last_call_status & MISSING_MISSING)) {
18236 rb_vm_pop_cfunc_frame();
18237 }
18238 rb_exc_raise(exc);
18239 }
18240}
18241static void
18242vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv,
18243 VALUE obj, int call_status)
18244{
18245 vm_passed_block_handler_set(ec, 0);
18246 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
18247}
18248static inline VALUE
18249method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat)
18250{
18251 VALUE *nargv, result, work, klass;
18252 VALUE block_handler = vm_passed_block_handler(ec);
18253 const rb_callable_method_entry_t *me;
18254 ec->method_missing_reason = call_status;
18255 if (id == idMethodMissing) {
18256 goto missing;
18257 }
18258 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))));
18259 nargv[0] = rb_id2sym(id);
18260 ruby_nonempty_memcpy((nargv + 1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
18261 ++argc;
18262 argv = nargv;
18263 klass = rb_class_of(obj);
18264 if (!klass) goto missing;
18265 me = rb_callable_method_entry(klass, idMethodMissing);
18266 if (!me || (int) (((me)->flags & (((VALUE)RUBY_FL_USER6) )) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+2))) goto missing;
18267 vm_passed_block_handler_set(ec, block_handler);
18268 result = rb_vm_call_kw(ec, obj, idMethodMissing, argc, argv, me, kw_splat);
18269 if (work) rb_free_tmp_buffer(&(work));
18270 return result;
18271 missing:
18272 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
18273 __builtin_unreachable();
18274}
18275static rb_control_frame_t *
18276vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
18277{
18278 if (VM_FRAME_RUBYFRAME_P(cfp)) {
18279 return (rb_control_frame_t *)cfp;
18280 }
18281 cfp = ((cfp)+1);
18282 while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
18283 if (VM_FRAME_RUBYFRAME_P(cfp)) {
18284 return (rb_control_frame_t *)cfp;
18285 }
18286 if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_PASSED) == 0) {
18287 break;
18288 }
18289 cfp = ((cfp)+1);
18290 }
18291 return 0;
18292}
18293static void
18294rb_vm_pop_cfunc_frame(void)
18295{
18296 rb_execution_context_t *ec = rb_current_execution_context(1);
18297 rb_control_frame_t *cfp = ec->cfp;
18298 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
18299 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);
18300 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);
18301 vm_pop_frame(ec, cfp, cfp->ep);
18302}
18303static VALUE
18304vm_call_iseq_setup_normal_0start_0params_0locals(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, 0, 0);
18308}
18309static VALUE
18310vm_call_iseq_setup_normal_0start_0params_1locals(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, 0, 1);
18314}
18315static VALUE
18316vm_call_iseq_setup_normal_0start_0params_2locals(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, 0, 2);
18320}
18321static VALUE
18322vm_call_iseq_setup_normal_0start_0params_3locals(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, 0, 3);
18326}
18327static VALUE
18328vm_call_iseq_setup_normal_0start_0params_4locals(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, 0, 4);
18332}
18333static VALUE
18334vm_call_iseq_setup_normal_0start_0params_5locals(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, 0, 5);
18338}
18339static VALUE
18340vm_call_iseq_setup_normal_0start_1params_0locals(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, 1, 0);
18344}
18345static VALUE
18346vm_call_iseq_setup_normal_0start_1params_1locals(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, 1, 1);
18350}
18351static VALUE
18352vm_call_iseq_setup_normal_0start_1params_2locals(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, 1, 2);
18356}
18357static VALUE
18358vm_call_iseq_setup_normal_0start_1params_3locals(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, 1, 3);
18362}
18363static VALUE
18364vm_call_iseq_setup_normal_0start_1params_4locals(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, 1, 4);
18368}
18369static VALUE
18370vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18371{
18372 ((void)0);
18373 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 5);
18374}
18375static VALUE
18376vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18377{
18378 ((void)0);
18379 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 0);
18380}
18381static VALUE
18382vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18383{
18384 ((void)0);
18385 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 1);
18386}
18387static VALUE
18388vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18389{
18390 ((void)0);
18391 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 2);
18392}
18393static VALUE
18394vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18395{
18396 ((void)0);
18397 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 3);
18398}
18399static VALUE
18400vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18401{
18402 ((void)0);
18403 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 4);
18404}
18405static VALUE
18406vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18407{
18408 ((void)0);
18409 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 5);
18410}
18411static VALUE
18412vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18413{
18414 ((void)0);
18415 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 0);
18416}
18417static VALUE
18418vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18419{
18420 ((void)0);
18421 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 1);
18422}
18423static VALUE
18424vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18425{
18426 ((void)0);
18427 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 2);
18428}
18429static VALUE
18430vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18431{
18432 ((void)0);
18433 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 3);
18434}
18435static VALUE
18436vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18437{
18438 ((void)0);
18439 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 4);
18440}
18441static VALUE
18442vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18443{
18444 ((void)0);
18445 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 5);
18446}
18447static const vm_call_handler vm_call_iseq_handlers[][6] = {
18448 {
18449 vm_call_iseq_setup_normal_0start_0params_0locals,
18450 vm_call_iseq_setup_normal_0start_0params_1locals,
18451 vm_call_iseq_setup_normal_0start_0params_2locals,
18452 vm_call_iseq_setup_normal_0start_0params_3locals,
18453 vm_call_iseq_setup_normal_0start_0params_4locals,
18454 vm_call_iseq_setup_normal_0start_0params_5locals,
18455 },
18456 {
18457 vm_call_iseq_setup_normal_0start_1params_0locals,
18458 vm_call_iseq_setup_normal_0start_1params_1locals,
18459 vm_call_iseq_setup_normal_0start_1params_2locals,
18460 vm_call_iseq_setup_normal_0start_1params_3locals,
18461 vm_call_iseq_setup_normal_0start_1params_4locals,
18462 vm_call_iseq_setup_normal_0start_1params_5locals,
18463 },
18464 {
18465 vm_call_iseq_setup_normal_0start_2params_0locals,
18466 vm_call_iseq_setup_normal_0start_2params_1locals,
18467 vm_call_iseq_setup_normal_0start_2params_2locals,
18468 vm_call_iseq_setup_normal_0start_2params_3locals,
18469 vm_call_iseq_setup_normal_0start_2params_4locals,
18470 vm_call_iseq_setup_normal_0start_2params_5locals,
18471 },
18472 {
18473 vm_call_iseq_setup_normal_0start_3params_0locals,
18474 vm_call_iseq_setup_normal_0start_3params_1locals,
18475 vm_call_iseq_setup_normal_0start_3params_2locals,
18476 vm_call_iseq_setup_normal_0start_3params_3locals,
18477 vm_call_iseq_setup_normal_0start_3params_4locals,
18478 vm_call_iseq_setup_normal_0start_3params_5locals,
18479 },
18480};
18481static inline vm_call_handler
18482vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size)
18483{
18484 if ((__builtin_expect(!!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit)), 0))) {
18485 return &vm_call_iseq_setup_tailcall_0start;
18486 }
18487 else if (0) {
18488 return &vm_call_iseq_setup_normal_0start;
18489 }
18490 else if (param_size <= 3 && local_size <= 5) {
18491 ((void)0);
18492 return vm_call_iseq_handlers[param_size][local_size];
18493 }
18494 else {
18495 return &vm_call_iseq_setup_normal_0start;
18496 }
18497}
18498#define MJIT_HEADER 1
18499#undef _FORTIFY_SOURCE
18500#define _FORTIFY_SOURCE 2
18501#define RUBY_EXPORT 1
18502#define _XOPEN_SOURCE 1
18503#define _GNU_SOURCE 1
18504#define vm_exec rb_vm_exec
18505#define RUBY_EVAL_INTERN_H
18506#define RUBY_RUBY_H 1
18507#define RBIMPL_CONFIG_H
18508#define INCLUDE_RUBY_CONFIG_H 1
18509#define HAVE_STDIO_H 1
18510#define HAVE_STDLIB_H 1
18511#define HAVE_STRING_H 1
18512#define HAVE_INTTYPES_H 1
18513#define HAVE_STDINT_H 1
18514#define HAVE_STRINGS_H 1
18515#define HAVE_SYS_STAT_H 1
18516#define HAVE_SYS_TYPES_H 1
18517#define HAVE_UNISTD_H 1
18518#define HAVE_WCHAR_H 1
18519#define STDC_HEADERS 1
18520#define _ALL_SOURCE 1
18521#define _DARWIN_C_SOURCE 1
18522#define _GNU_SOURCE 1
18523#define _HPUX_ALT_XOPEN_SOCKET_API 1
18524#define _NETBSD_SOURCE 1
18525#define _OPENBSD_SOURCE 1
18526#define _POSIX_PTHREAD_SEMANTICS 1
18527#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
18528#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
18529#define __STDC_WANT_IEC_60559_DFP_EXT__ 1
18530#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
18531#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
18532#define __STDC_WANT_LIB_EXT2__ 1
18533#define __STDC_WANT_MATH_SPEC_FUNCS__ 1
18534#define _TANDEM_SOURCE 1
18535#define __EXTENSIONS__ 1
18536#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)")
18537#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop")
18538#define HAVE_STMT_AND_DECL_IN_EXPR 1
18539#define HAVE_PTHREAD_H 1
18540#define _REENTRANT 1
18541#define _THREAD_SAFE 1
18542#define HAVE_LIBPTHREAD 1
18543#define THREAD_IMPL_H "thread_pthread.h"
18544#define THREAD_IMPL_SRC "thread_pthread.c"
18545#define HAVE_CYGWIN_CONV_PATH 1
18546#define HAVE_LIBCRYPT 1
18547#define HAVE_LIBDL 1
18548#define HAVE_DIRENT_H 1
18549#define HAVE__BOOL 1
18550#define HAVE_STDBOOL_H 1
18551#define HAVE_SYS_WAIT_H 1
18552#define HAVE_GRP_H 1
18553#define HAVE_FCNTL_H 1
18554#define HAVE_FLOAT_H 1
18555#define HAVE_IEEEFP_H 1
18556#define HAVE_LANGINFO_H 1
18557#define HAVE_LIMITS_H 1
18558#define HAVE_LOCALE_H 1
18559#define HAVE_MALLOC_H 1
18560#define HAVE_PROCESS_H 1
18561#define HAVE_PWD_H 1
18562#define HAVE_STDALIGN_H 1
18563#define HAVE_STDIO_H 1
18564#define HAVE_SYS_FCNTL_H 1
18565#define HAVE_SYS_FILE_H 1
18566#define HAVE_SYS_IOCTL_H 1
18567#define HAVE_SYS_PARAM_H 1
18568#define HAVE_SYS_RANDOM_H 1
18569#define HAVE_SYS_RESOURCE_H 1
18570#define HAVE_SYS_SELECT_H 1
18571#define HAVE_SYS_SOCKET_H 1
18572#define HAVE_SYS_SYSMACROS_H 1
18573#define HAVE_SYS_TIME_H 1
18574#define HAVE_SYS_TIMES_H 1
18575#define HAVE_SYS_UIO_H 1
18576#define HAVE_SYS_UTIME_H 1
18577#define HAVE_TIME_H 1
18578#define HAVE_UCONTEXT_H 1
18579#define HAVE_UTIME_H 1
18580#define HAVE_X86INTRIN_H 1
18581#define HAVE_X86INTRIN_H 1
18582#define HAVE_GMP_H 1
18583#define HAVE_LIBGMP 1
18584#define HAVE_TYPEOF 1
18585#define restrict __restrict__
18586#define HAVE_LONG_LONG 1
18587#define HAVE_OFF_T 1
18588#define SIZEOF_INT 4
18589#define SIZEOF_SHORT 2
18590#define SIZEOF_LONG 8
18591#define SIZEOF_LONG_LONG 8
18592#define SIZEOF___INT64 0
18593#define SIZEOF___INT128 16
18594#define SIZEOF_OFF_T 8
18595#define SIZEOF_VOIDP 8
18596#define SIZEOF_FLOAT 4
18597#define SIZEOF_DOUBLE 8
18598#define SIZEOF_TIME_T 8
18599#define SIZEOF_CLOCK_T 8
18600#define PACKED_STRUCT(x) x __attribute__((packed))
18601#define USE_UNALIGNED_MEMBER_ACCESS 1
18602#define PRI_LL_PREFIX "ll"
18603#define HAVE_PID_T 1
18604#define rb_pid_t pid_t
18605#define SIGNEDNESS_OF_PID_T -1
18606#define PIDT2NUM(v) INT2NUM(v)
18607#define NUM2PIDT(v) NUM2INT(v)
18608#define PRI_PIDT_PREFIX PRI_INT_PREFIX
18609#define HAVE_UID_T 1
18610#define rb_uid_t uid_t
18611#define SIGNEDNESS_OF_UID_T +1
18612#define UIDT2NUM(v) UINT2NUM(v)
18613#define NUM2UIDT(v) NUM2UINT(v)
18614#define PRI_UIDT_PREFIX PRI_INT_PREFIX
18615#define HAVE_GID_T 1
18616#define rb_gid_t gid_t
18617#define SIGNEDNESS_OF_GID_T +1
18618#define GIDT2NUM(v) UINT2NUM(v)
18619#define NUM2GIDT(v) NUM2UINT(v)
18620#define PRI_GIDT_PREFIX PRI_INT_PREFIX
18621#define HAVE_TIME_T 1
18622#define rb_time_t time_t
18623#define SIGNEDNESS_OF_TIME_T -1
18624#define TIMET2NUM(v) LONG2NUM(v)
18625#define NUM2TIMET(v) NUM2LONG(v)
18626#define PRI_TIMET_PREFIX PRI_LONG_PREFIX
18627#define HAVE_DEV_T 1
18628#define rb_dev_t dev_t
18629#define SIGNEDNESS_OF_DEV_T +1
18630#define DEVT2NUM(v) UINT2NUM(v)
18631#define NUM2DEVT(v) NUM2UINT(v)
18632#define PRI_DEVT_PREFIX PRI_INT_PREFIX
18633#define HAVE_MODE_T 1
18634#define rb_mode_t mode_t
18635#define SIGNEDNESS_OF_MODE_T +1
18636#define MODET2NUM(v) UINT2NUM(v)
18637#define NUM2MODET(v) NUM2UINT(v)
18638#define PRI_MODET_PREFIX PRI_INT_PREFIX
18639#define HAVE_RLIM_T 1
18640#define rb_rlim_t rlim_t
18641#define SIGNEDNESS_OF_RLIM_T +1
18642#define RLIM2NUM(v) ULONG2NUM(v)
18643#define NUM2RLIM(v) NUM2ULONG(v)
18644#define PRI_RLIM_PREFIX PRI_LONG_PREFIX
18645#define HAVE_OFF_T 1
18646#define rb_off_t off_t
18647#define SIGNEDNESS_OF_OFF_T -1
18648#define OFFT2NUM(v) LONG2NUM(v)
18649#define NUM2OFFT(v) NUM2LONG(v)
18650#define PRI_OFFT_PREFIX PRI_LONG_PREFIX
18651#define HAVE_CLOCKID_T 1
18652#define rb_clockid_t clockid_t
18653#define SIGNEDNESS_OF_CLOCKID_T +1
18654#define CLOCKID2NUM(v) ULONG2NUM(v)
18655#define NUM2CLOCKID(v) NUM2ULONG(v)
18656#define PRI_CLOCKID_PREFIX PRI_LONG_PREFIX
18657#define HAVE_VA_ARGS_MACRO 1
18658#define HAVE__ALIGNOF 1
18659#define CONSTFUNC(x) __attribute__ ((__const__)) x
18660#define PUREFUNC(x) __attribute__ ((__pure__)) x
18661#define NORETURN(x) __attribute__ ((__noreturn__)) x
18662#define DEPRECATED(x) __attribute__ ((__deprecated__)) x
18663#define DEPRECATED_BY(n,x) __attribute__ ((__deprecated__("by "#n))) x
18664#define NOINLINE(x) __attribute__ ((__noinline__)) x
18665#define NO_SANITIZE(san,x) __attribute__ ((__no_sanitize__(san))) x
18666#define NO_SANITIZE_ADDRESS(x) __attribute__ ((__no_sanitize_address__)) x
18667#define NO_ADDRESS_SAFETY_ANALYSIS(x) __attribute__ ((__no_address_safety_analysis__)) x
18668#define WARN_UNUSED_RESULT(x) __attribute__ ((__warn_unused_result__)) x
18669#define MAYBE_UNUSED(x) __attribute__ ((__unused__)) x
18670#define ERRORFUNC(mesg,x) __attribute__ ((__error__ mesg)) x
18671#define WARNINGFUNC(mesg,x) __attribute__ ((__warning__ mesg)) x
18672#define WEAK(x) __attribute__ ((__weak__)) x
18673#define HAVE_FUNC_WEAK 1
18674#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
18675#define HAVE_NULLPTR 1
18676#define FUNC_STDCALL(x) __attribute__ ((__stdcall__)) x
18677#define FUNC_CDECL(x) __attribute__ ((__cdecl__)) x
18678#define FUNC_FASTCALL(x) __attribute__ ((__fastcall__)) x
18679#define FUNC_UNOPTIMIZED(x) __attribute__ ((__optimize__("O0"))) x
18680#define FUNC_MINIMIZED(x) __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
18681#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1
18682#define RUBY_ALIAS_FUNCTION_TYPE(type,prot,name,args) type prot __attribute__((alias(#name)));
18683#define RUBY_ALIAS_FUNCTION_VOID(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)
18684#define HAVE_GCC_ATOMIC_BUILTINS 1
18685#define HAVE_GCC_SYNC_BUILTINS 1
18686#define HAVE___BUILTIN_UNREACHABLE 1
18687#define RUBY_FUNC_EXPORTED __attribute__ ((__visibility__("default"))) extern
18688#define RUBY_FUNC_NONNULL(n,x) __attribute__ ((__nonnull__(n))) x
18689#define RUBY_FUNCTION_NAME_STRING __func__
18690#define ENUM_OVER_INT 1
18691#define HAVE_DECL_SYS_NERR 1
18692#define HAVE_DECL_GETENV 1
18693#define SIZEOF_SIZE_T 8
18694#define SIZEOF_PTRDIFF_T 8
18695#define SIZEOF_DEV_T 4
18696#define PRI_SIZE_PREFIX "z"
18697#define PRI_PTRDIFF_PREFIX "t"
18698#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
18699#define HAVE_STRUCT_STAT_ST_BLOCKS 1
18700#define HAVE_STRUCT_STAT_ST_RDEV 1
18701#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T
18702#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T
18703#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG
18704#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T
18705#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T
18706#define HAVE_STRUCT_STAT_ST_ATIM 1
18707#define HAVE_STRUCT_STAT_ST_MTIM 1
18708#define HAVE_STRUCT_STAT_ST_CTIM 1
18709#define HAVE_STRUCT_TIMEVAL 1
18710#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T
18711#define HAVE_STRUCT_TIMESPEC 1
18712#define HAVE_STRUCT_TIMEZONE 1
18713#define HAVE_RB_FD_INIT 1
18714#define HAVE_INT8_T 1
18715#define SIZEOF_INT8_T 1
18716#define HAVE_UINT8_T 1
18717#define SIZEOF_UINT8_T 1
18718#define HAVE_INT16_T 1
18719#define SIZEOF_INT16_T 2
18720#define HAVE_UINT16_T 1
18721#define SIZEOF_UINT16_T 2
18722#define HAVE_INT32_T 1
18723#define SIZEOF_INT32_T 4
18724#define HAVE_UINT32_T 1
18725#define SIZEOF_UINT32_T 4
18726#define HAVE_INT64_T 1
18727#define SIZEOF_INT64_T 8
18728#define HAVE_UINT64_T 1
18729#define SIZEOF_UINT64_T 8
18730#define HAVE_INT128_T 1
18731#define int128_t __int128
18732#define SIZEOF_INT128_T SIZEOF___INT128
18733#define HAVE_UINT128_T 1
18734#define uint128_t unsigned __int128
18735#define SIZEOF_UINT128_T SIZEOF___INT128
18736#define HAVE_INTPTR_T 1
18737#define SIZEOF_INTPTR_T 8
18738#define HAVE_UINTPTR_T 1
18739#define SIZEOF_UINTPTR_T 8
18740#define HAVE_SSIZE_T 1
18741#define SIZEOF_SSIZE_T 8
18742#define GETGROUPS_T gid_t
18743#define HAVE_ALLOCA_H 1
18744#define HAVE_ALLOCA 1
18745#define HAVE_DUP 1
18746#define HAVE_DUP2 1
18747#define HAVE_ACOSH 1
18748#define HAVE_CBRT 1
18749#define HAVE_CRYPT 1
18750#define HAVE_ERF 1
18751#define HAVE_EXPLICIT_BZERO 1
18752#define HAVE_FFS 1
18753#define HAVE_FLOCK 1
18754#define HAVE_HYPOT 1
18755#define HAVE_LGAMMA_R 1
18756#define HAVE_MEMMOVE 1
18757#define HAVE_NAN 1
18758#define HAVE_NEXTAFTER 1
18759#define HAVE_STRCHR 1
18760#define HAVE_STRERROR 1
18761#define HAVE_STRLCAT 1
18762#define HAVE_STRLCPY 1
18763#define HAVE_STRSTR 1
18764#define HAVE_TGAMMA 1
18765#define HAVE_ISFINITE 1
18766#define HAVE_SIGNBIT 1
18767#define HAVE_FORK 1
18768#define HAVE_VFORK 1
18769#define HAVE_WORKING_VFORK 1
18770#define HAVE_WORKING_FORK 1
18771#define HAVE__LONGJMP 1
18772#define HAVE_ARC4RANDOM_BUF 1
18773#define HAVE_ATAN2L 1
18774#define HAVE_ATAN2F 1
18775#define HAVE_CHMOD 1
18776#define HAVE_CHOWN 1
18777#define HAVE_CHROOT 1
18778#define HAVE_CLOCK_GETTIME 1
18779#define HAVE_COSH 1
18780#define HAVE_CRYPT_R 1
18781#define HAVE_DIRFD 1
18782#define HAVE_DLOPEN 1
18783#define HAVE_DLADDR 1
18784#define HAVE_DUP3 1
18785#define HAVE_EACCESS 1
18786#define HAVE_ENDGRENT 1
18787#define HAVE_EXECL 1
18788#define HAVE_EXECLE 1
18789#define HAVE_EXECV 1
18790#define HAVE_EXECVE 1
18791#define HAVE_FCHMOD 1
18792#define HAVE_FCHOWN 1
18793#define HAVE_FCNTL 1
18794#define HAVE_FDATASYNC 1
18795#define HAVE_FDOPENDIR 1
18796#define HAVE_FMOD 1
18797#define HAVE_FSTATAT 1
18798#define HAVE_FSYNC 1
18799#define HAVE_FTRUNCATE 1
18800#define HAVE_GETCWD 1
18801#define HAVE_GETEGID 1
18802#define HAVE_GETENTROPY 1
18803#define HAVE_GETEUID 1
18804#define HAVE_GETGID 1
18805#define HAVE_GETGRNAM 1
18806#define HAVE_GETGRNAM_R 1
18807#define HAVE_GETGROUPS 1
18808#define HAVE_GETLOGIN 1
18809#define HAVE_GETLOGIN_R 1
18810#define HAVE_GETPGID 1
18811#define HAVE_GETPGRP 1
18812#define HAVE_GETPPID 1
18813#define HAVE_GETPRIORITY 1
18814#define HAVE_GETPWNAM 1
18815#define HAVE_GETPWNAM_R 1
18816#define HAVE_GETPWUID 1
18817#define HAVE_GETPWUID_R 1
18818#define HAVE_GETRANDOM 1
18819#define HAVE_GETRLIMIT 1
18820#define HAVE_GETSID 1
18821#define HAVE_GETTIMEOFDAY 1
18822#define HAVE_GETUID 1
18823#define HAVE_GMTIME_R 1
18824#define HAVE_GRANTPT 1
18825#define HAVE_INITGROUPS 1
18826#define HAVE_IOCTL 1
18827#define HAVE_ISSETUGID 1
18828#define HAVE_KILL 1
18829#define HAVE_KILLPG 1
18830#define HAVE_LCHOWN 1
18831#define HAVE_LINK 1
18832#define HAVE_LLABS 1
18833#define HAVE_LOCKF 1
18834#define HAVE_LOG2 1
18835#define HAVE_LSTAT 1
18836#define HAVE_LUTIMES 1
18837#define HAVE_MALLOC_USABLE_SIZE 1
18838#define HAVE_MBLEN 1
18839#define HAVE_MEMALIGN 1
18840#define HAVE_WRITEV 1
18841#define HAVE_MEMRCHR 1
18842#define HAVE_MEMMEM 1
18843#define HAVE_MKFIFO 1
18844#define HAVE_MKNOD 1
18845#define HAVE_MKTIME 1
18846#define HAVE_MMAP 1
18847#define HAVE_OPENAT 1
18848#define HAVE_PCLOSE 1
18849#define HAVE_PIPE 1
18850#define HAVE_PIPE2 1
18851#define HAVE_POLL 1
18852#define HAVE_POPEN 1
18853#define HAVE_POSIX_FADVISE 1
18854#define HAVE_POSIX_MADVISE 1
18855#define HAVE_POSIX_MEMALIGN 1
18856#define HAVE_PPOLL 1
18857#define HAVE_PREAD 1
18858#define HAVE_PWRITE 1
18859#define HAVE_QSORT_R 1
18860#define HAVE_READLINK 1
18861#define HAVE_REALPATH 1
18862#define HAVE_ROUND 1
18863#define HAVE_SCHED_GETAFFINITY 1
18864#define HAVE_SEEKDIR 1
18865#define HAVE_SETEGID 1
18866#define HAVE_SETENV 1
18867#define HAVE_SETEUID 1
18868#define HAVE_SETGID 1
18869#define HAVE_SETGROUPS 1
18870#define HAVE_SETPGID 1
18871#define HAVE_SETPGRP 1
18872#define HAVE_SETREGID 1
18873#define HAVE_SETREUID 1
18874#define HAVE_SETRLIMIT 1
18875#define HAVE_SETSID 1
18876#define HAVE_SETUID 1
18877#define HAVE_SHUTDOWN 1
18878#define HAVE_SIGACTION 1
18879#define HAVE_SIGALTSTACK 1
18880#define HAVE_SIGPROCMASK 1
18881#define HAVE_SINH 1
18882#define HAVE_SPAWNV 1
18883#define HAVE_SYMLINK 1
18884#define HAVE_SYSCONF 1
18885#define HAVE_SYSTEM 1
18886#define HAVE_TANH 1
18887#define HAVE_TELLDIR 1
18888#define HAVE_TIMEGM 1
18889#define HAVE_TIMES 1
18890#define HAVE_TRUNCATE 1
18891#define HAVE_TZSET 1
18892#define HAVE_UMASK 1
18893#define HAVE_UNSETENV 1
18894#define HAVE_UTIMENSAT 1
18895#define HAVE_UTIMES 1
18896#define HAVE_WAIT4 1
18897#define HAVE_WAITPID 1
18898#define HAVE_CRYPT_H 1
18899#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1
18900#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1
18901#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1
18902#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
18903#define HAVE_BUILTIN___BUILTIN_BSWAP32 1
18904#define HAVE_BUILTIN___BUILTIN_BSWAP64 1
18905#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1
18906#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1
18907#define HAVE_BUILTIN___BUILTIN_CLZ 1
18908#define HAVE_BUILTIN___BUILTIN_CLZL 1
18909#define HAVE_BUILTIN___BUILTIN_CLZLL 1
18910#define HAVE_BUILTIN___BUILTIN_CTZ 1
18911#define HAVE_BUILTIN___BUILTIN_CTZLL 1
18912#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1
18913#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1
18914#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1
18915#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1
18916#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1
18917#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1
18918#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1
18919#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1
18920#define HAVE_BUILTIN___BUILTIN_TRAP 1
18921#define HAVE_BUILTIN___BUILTIN_EXPECT 1
18922#define HAVE_GNU_QSORT_R 1
18923#define ATAN2_INF_C99 1
18924#define HAVE_CLOCK_GETRES 1
18925#define HAVE_LIBRT 1
18926#define HAVE_LIBRT 1
18927#define HAVE_TIMER_CREATE 1
18928#define HAVE_TIMER_SETTIME 1
18929#define HAVE_STRUCT_TM_TM_ZONE 1
18930#define HAVE_TM_ZONE 1
18931#define HAVE_STRUCT_TM_TM_GMTOFF 1
18932#define HAVE_DAYLIGHT 1
18933#define NEGATIVE_TIME_T 1
18934#define POSIX_SIGNAL 1
18935#define HAVE_SIG_T 1
18936#define RSHIFT(x,y) ((x)>>(int)(y))
18937#define HAVE__SC_CLK_TCK 1
18938#define STACK_GROW_DIRECTION -1
18939#define HAVE_GETCONTEXT 1
18940#define HAVE_SWAPCONTEXT 1
18941#define HAVE_MAKECONTEXT 1
18942#define COROUTINE_H "coroutine/ucontext/Context.h"
18943#define HAVE_SCHED_YIELD 1
18944#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1
18945#define HAVE_PTHREAD_ATTR_GETSTACK 1
18946#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
18947#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
18948#define HAVE_PTHREAD_SETNAME_NP 1
18949#define HAVE_PTHREAD_SIGMASK 1
18950#define HAVE_PTHREAD_GETATTR_NP 1
18951#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name)
18952#define SET_ANOTHER_THREAD_NAME(thid,name) pthread_setname_np(thid, name)
18953#define DEFINE_MCONTEXT_PTR(mc,uc) mcontext_t *mc = &(uc)->uc_mcontext
18954#define HAVE_GETCONTEXT 1
18955#define HAVE_SETCONTEXT 1
18956#define HAVE_CONST_PAGE_SIZE 0
18957#define IOCTL_REQ_TYPE unsigned long
18958#define NUM2IOCTLREQ(num) NUM2ULONG(num)
18959#define DLEXT_MAXLEN 3
18960#define DLEXT ".so"
18961#define LIBDIR_BASENAME "lib"
18962#define EXECUTABLE_EXTS ".exe",".com",".cmd",".bat"
18963#define HAVE__SETJMP 1
18964#define RUBY_SETJMP(env) __builtin_setjmp((env))
18965#define RUBY_LONGJMP(env,val) __builtin_longjmp((env),val)
18966#define USE_MJIT 1
18967#define USE_YJIT 0
18968#define RUBY_PLATFORM "x86_64-cygwin"
18969#define RBIMPL_COMPILER_SINCE_H
18970#define RBIMPL_COMPILER_IS_H
18971#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc
18972#define RBIMPL_COMPILER_IS_APPLE_H
18973#define RBIMPL_COMPILER_IS_Apple 0
18974#define RBIMPL_COMPILER_IS_CLANG_H
18975#define RBIMPL_COMPILER_IS_Clang 0
18976#define RBIMPL_COMPILER_IS_GCC_H
18977#define RBIMPL_COMPILER_IS_INTEL_H
18978#define RBIMPL_COMPILER_IS_Intel 0
18979#define RBIMPL_COMPILER_IS_GCC 1
18980#define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__
18981#define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__
18982#define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__
18983#define RBIMPL_COMPILER_IS_MSVC_H
18984#define RBIMPL_COMPILER_IS_MSVC 0
18985#define RBIMPL_COMPILER_IS_SUNPRO_H
18986#define RBIMPL_COMPILER_IS_SunPro 0
18987#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)))))))
18988#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)))))))
18989#undef HAVE_PROTOTYPES
18990#define HAVE_PROTOTYPES 1
18991#undef HAVE_STDARG_PROTOTYPES
18992#define HAVE_STDARG_PROTOTYPES 1
18993#undef TOKEN_PASTE
18994#define TOKEN_PASTE(x,y) x ##y
18995#define STRINGIZE(expr) STRINGIZE0(expr)
18996#define STRINGIZE0(expr) #expr
18997#define UNALIGNED_WORD_ACCESS 1
18998#define RBIMPL_TEST3(q,w,e,...) e
18999#define RBIMPL_TEST2(...) RBIMPL_TEST3(__VA_OPT__(,),1,0,0)
19000#define RBIMPL_TEST1() RBIMPL_TEST2("ruby")
19001#define HAVE___VA_OPT__
19002#undef RBIMPL_TEST1
19003#undef RBIMPL_TEST2
19004#undef RBIMPL_TEST3
19005#define USE_RVARGC 1
19006#define _STDARG_H
19007#define _ANSI_STDARG_H_
19008#undef __need___va_list
19009#define __GNUC_VA_LIST
19010#define va_start(v,l) __builtin_va_start(v,l)
19011#define va_end(v) __builtin_va_end(v)
19012#define va_arg(v,l) __builtin_va_arg(v,l)
19013#define va_copy(d,s) __builtin_va_copy(d,s)
19014#define __va_copy(d,s) __builtin_va_copy(d,s)
19015#define _VA_LIST_
19016#define _VA_LIST
19017#define _VA_LIST_DEFINED
19018#define _VA_LIST_T_H
19019#define __va_list__
19020#define RUBY_DEFINES_H 1
19021#define _STDIO_H_
19022#define _ANSIDECL_H_
19023#define __NEWLIB_H__ 1
19024#define _NEWLIB_VERSION_H__ 1
19025#define _NEWLIB_VERSION "4.2.0"
19026#define __NEWLIB__ 4
19027#define __NEWLIB_MINOR__ 2
19028#define __NEWLIB_PATCHLEVEL__ 0
19029#define _ATEXIT_DYNAMIC_ALLOC 1
19030#define _FSEEK_OPTIMIZATION 1
19031#define _FVWRITE_IN_STREAMIO 1
19032#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1
19033#define _HAVE_LONG_DOUBLE 1
19034#define _MB_CAPABLE 1
19035#define _MB_LEN_MAX 8
19036#define _REENT_CHECK_VERIFY 1
19037#define _UNBUF_STREAM_OPT 1
19038#define _WANT_IO_C99_FORMATS 1
19039#define _WANT_IO_LONG_DOUBLE 1
19040#define _WANT_IO_LONG_LONG 1
19041#define _WANT_IO_POS_ARGS 1
19042#define _WANT_USE_GDTOA 1
19043#define _WIDE_ORIENT 1
19044#define __SYS_CONFIG_H__
19045#define __IEEE_LITTLE_ENDIAN
19046#define _SUPPORTS_ERREXCEPT
19047#define __OBSOLETE_MATH_DEFAULT 0
19048#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT
19049#define _SYS_FEATURES_H
19050#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
19051#define __GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi)
19052#undef _ATFILE_SOURCE
19053#define _ATFILE_SOURCE 1
19054#undef _DEFAULT_SOURCE
19055#define _DEFAULT_SOURCE 1
19056#undef _ISOC99_SOURCE
19057#define _ISOC99_SOURCE 1
19058#undef _ISOC11_SOURCE
19059#define _ISOC11_SOURCE 1
19060#undef _POSIX_SOURCE
19061#define _POSIX_SOURCE 1
19062#undef _POSIX_C_SOURCE
19063#define _POSIX_C_SOURCE 200809L
19064#undef _XOPEN_SOURCE
19065#define _XOPEN_SOURCE 700
19066#undef _XOPEN_SOURCE_EXTENDED
19067#define _XOPEN_SOURCE_EXTENDED 1
19068#undef _POSIX_SOURCE
19069#define _POSIX_SOURCE 1
19070#undef _POSIX_C_SOURCE
19071#define _POSIX_C_SOURCE 200809L
19072#undef _ATFILE_SOURCE
19073#define _ATFILE_SOURCE 1
19074#define __ATFILE_VISIBLE 1
19075#define __BSD_VISIBLE 1
19076#define __GNU_VISIBLE 1
19077#define __ISO_C_VISIBLE 2011
19078#define __LARGEFILE_VISIBLE 1
19079#define __MISC_VISIBLE 1
19080#define __POSIX_VISIBLE 200809
19081#define __SVID_VISIBLE 1
19082#define __XSI_VISIBLE 700
19083#define __SSP_FORTIFY_LEVEL 2
19084#define _POSIX_VERSION 200809L
19085#define _POSIX2_VERSION 200809L
19086#define _XOPEN_VERSION __XSI_VISIBLE
19087#define _POSIX_ADVISORY_INFO 200809L
19088#define _POSIX_ASYNCHRONOUS_IO 200809L
19089#define _POSIX_BARRIERS 200809L
19090#define _POSIX_CHOWN_RESTRICTED 1
19091#define _POSIX_CLOCK_SELECTION 200809L
19092#define _POSIX_CPUTIME 200809L
19093#define _POSIX_FSYNC 200809L
19094#define _POSIX_IPV6 200809L
19095#define _POSIX_JOB_CONTROL 1
19096#define _POSIX_MAPPED_FILES 200809L
19097#define _POSIX_MEMLOCK_RANGE 200809L
19098#define _POSIX_MEMORY_PROTECTION 200809L
19099#define _POSIX_MESSAGE_PASSING 200809L
19100#define _POSIX_MONOTONIC_CLOCK 200809L
19101#define _POSIX_NO_TRUNC 1
19102#define _POSIX_PRIORITY_SCHEDULING 200809L
19103#define _POSIX_RAW_SOCKETS 200809L
19104#define _POSIX_READER_WRITER_LOCKS 200809L
19105#define _POSIX_REALTIME_SIGNALS 200809L
19106#define _POSIX_REGEXP 1
19107#define _POSIX_SAVED_IDS 1
19108#define _POSIX_SEMAPHORES 200809L
19109#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
19110#define _POSIX_SHELL 1
19111#define _POSIX_SPAWN 200809L
19112#define _POSIX_SPIN_LOCKS 200809L
19113#define _POSIX_SYNCHRONIZED_IO 200809L
19114#define _POSIX_THREAD_ATTR_STACKADDR 200809L
19115#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
19116#define _POSIX_THREAD_CPUTIME 200809L
19117#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
19118#define _POSIX_THREAD_PROCESS_SHARED 200809L
19119#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
19120#define _POSIX_THREADS 200809L
19121#define _POSIX_TIMEOUTS 200809L
19122#define _POSIX_TIMERS 200809L
19123#define _POSIX_VDISABLE '\0'
19124#define _POSIX2_C_VERSION _POSIX2_VERSION
19125#define _POSIX2_C_BIND _POSIX2_VERSION
19126#define _POSIX2_C_DEV _POSIX2_VERSION
19127#define _POSIX2_CHAR_TERM _POSIX2_VERSION
19128#define _POSIX2_SW_DEV _POSIX2_VERSION
19129#define _POSIX2_UPE _POSIX2_VERSION
19130#define _POSIX_V6_ILP32_OFF32 -1
19131#define _POSIX_V6_ILP32_OFFBIG -1
19132#define _POSIX_V6_LP64_OFF64 1
19133#define _POSIX_V6_LPBIG_OFFBIG 1
19134#define _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
19135#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
19136#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64
19137#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
19138#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
19139#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
19140#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
19141#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
19142#define _XOPEN_CRYPT 1
19143#define _XOPEN_ENH_I18N 1
19144#define _XOPEN_SHM 1
19145#define __STDC_ISO_10646__ 201806L
19146#define _POINTER_INT long
19147#undef __RAND_MAX
19148#define __RAND_MAX 0x7fffffff
19149#define _CYGWIN_CONFIG_H
19150#define __DYNAMIC_REENT__
19151#define __CYGTLS_PADSIZE__ 12800
19152#define _SYMSTR(x) #x
19153#define __FILENAME_MAX__ 4096
19154#define _READ_WRITE_RETURN_TYPE _ssize_t
19155#define _READ_WRITE_BUFSIZE_TYPE size_t
19156#define __LINUX_ERRNO_EXTENSIONS__ 1
19157#define _MB_EXTENDED_CHARSETS_ALL 1
19158#define __HAVE_LOCALE_INFO__ 1
19159#define __HAVE_LOCALE_INFO_EXTENDED__ 1
19160#define _WANT_C99_TIME_FORMATS 1
19161#define _GLIBC_EXTENSION 1
19162#define _STDIO_BSD_SEMANTICS 1
19163#define __TM_GMTOFF tm_gmtoff
19164#define __TM_ZONE tm_zone
19165#define _USE_LONG_TIME_T 1
19166#define _REENT_BACKWARD_BINARY_COMPAT 1
19167#define __EXPORT
19168#define __IMPORT __declspec(dllimport)
19169#define DEFAULT_LOCALE "C.UTF-8"
19170#define _USE_GDTOA
19171#define _MB_EXTENDED_CHARSETS_ISO 1
19172#define _MB_EXTENDED_CHARSETS_WINDOWS 1
19173#define _BEGIN_STD_C
19174#define _END_STD_C
19175#define _NOTHROW
19176#define _LONG_DOUBLE long double
19177#define _ATTRIBUTE(attrs) __attribute__ (attrs)
19178#define _ELIDABLE_INLINE static __inline__
19179#define _NOINLINE __attribute__ ((__noinline__))
19180#define _NOINLINE_STATIC _NOINLINE static
19181#define _FSTDIO
19182#define __need_size_t
19183#define __need_NULL
19184#define _SYS_CDEFS_H_
19185#define _MACHINE__DEFAULT_TYPES_H
19186#define __EXP(x) __ ##x ##__
19187#define __have_longlong64 1
19188#define __have_long64 1
19189#define ___int8_t_defined 1
19190#define ___int16_t_defined 1
19191#define ___int32_t_defined 1
19192#define ___int64_t_defined 1
19193#define ___int_least8_t_defined 1
19194#define ___int_least16_t_defined 1
19195#define ___int_least32_t_defined 1
19196#define ___int_least64_t_defined 1
19197#undef __EXP
19198#define __size_t__
19199#define __SIZE_T__
19200#define _SIZE_T
19201#define _SYS_SIZE_T_H
19202#define _T_SIZE_
19203#define _T_SIZE
19204#define __SIZE_T
19205#define _SIZE_T_
19206#define _BSD_SIZE_T_
19207#define _SIZE_T_DEFINED_
19208#define _SIZE_T_DEFINED
19209#define _BSD_SIZE_T_DEFINED_
19210#define _SIZE_T_DECLARED
19211#define ___int_size_t_h
19212#define _GCC_SIZE_T
19213#define _SIZET_
19214#define __size_t
19215#undef __need_size_t
19216#undef NULL
19217#define NULL ((void *)0)
19218#undef __need_NULL
19219#define __PMT(args) args
19220#define __DOTS , ...
19221#define __THROW
19222#define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
19223#define __ptr_t void *
19224#define __long_double_t long double
19225#define __attribute_malloc__
19226#define __attribute_pure__
19227#define __attribute_format_strfmon__(a,b)
19228#define __flexarr [0]
19229#define __bounded
19230#define __unbounded
19231#define __ptrvalue
19232#define __has_extension __has_feature
19233#define __has_feature(x) 0
19234#define __BEGIN_DECLS
19235#define __END_DECLS
19236#define __GNUCLIKE_ASM 3
19237#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
19238#define __GNUCLIKE___TYPEOF 1
19239#define __GNUCLIKE___SECTION 1
19240#define __GNUCLIKE_CTOR_SECTION_HANDLING 1
19241#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
19242#define __GNUCLIKE_BUILTIN_VARARGS 1
19243#define __GNUCLIKE_BUILTIN_STDARG 1
19244#define __GNUCLIKE_BUILTIN_VAALIST 1
19245#define __GNUC_VA_LIST_COMPATIBILITY 1
19246#define __compiler_membar() __asm __volatile(" " : : : "memory")
19247#define __GNUCLIKE_BUILTIN_NEXT_ARG 1
19248#define __GNUCLIKE_MATH_BUILTIN_RELOPS
19249#define __GNUCLIKE_BUILTIN_MEMCPY 1
19250#define __CC_SUPPORTS_INLINE 1
19251#define __CC_SUPPORTS___INLINE 1
19252#define __CC_SUPPORTS___INLINE__ 1
19253#define __CC_SUPPORTS___FUNC__ 1
19254#define __CC_SUPPORTS_WARNING 1
19255#define __CC_SUPPORTS_VARADIC_XXX 1
19256#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
19257#define __P(protos) protos
19258#define __CONCAT1(x,y) x ## y
19259#define __CONCAT(x,y) __CONCAT1(x,y)
19260#define __STRING(x) #x
19261#define __XSTRING(x) __STRING(x)
19262#define __const const
19263#define __signed signed
19264#define __volatile volatile
19265#define __weak_symbol __attribute__((__weak__))
19266#define __dead2 __attribute__((__noreturn__))
19267#define __pure2 __attribute__((__const__))
19268#define __unused __attribute__((__unused__))
19269#define __used __attribute__((__used__))
19270#define __packed __attribute__((__packed__))
19271#define __aligned(x) __attribute__((__aligned__(x)))
19272#define __section(x) __attribute__((__section__(x)))
19273#define __alloc_size(x) __attribute__((__alloc_size__(x)))
19274#define __alloc_size2(n,x) __attribute__((__alloc_size__(n, x)))
19275#define __alloc_align(x) __attribute__((__alloc_align__(x)))
19276#define __generic(expr,t,yes,no) _Generic(expr, t: yes, default: no)
19277#define __min_size(x) static (x)
19278#define __malloc_like __attribute__((__malloc__))
19279#define __pure __attribute__((__pure__))
19280#define __always_inline __inline__ __attribute__((__always_inline__))
19281#define __noinline __attribute__ ((__noinline__))
19282#define __nonnull(x) __attribute__((__nonnull__ x))
19283#define __nonnull_all __attribute__((__nonnull__))
19284#define __fastcall __attribute__((__fastcall__))
19285#define __result_use_check __attribute__((__warn_unused_result__))
19286#define __returns_twice __attribute__((__returns_twice__))
19287#define __unreachable() __builtin_unreachable()
19288#define __restrict restrict
19289#define __predict_true(exp) __builtin_expect((exp), 1)
19290#define __predict_false(exp) __builtin_expect((exp), 0)
19291#define __null_sentinel __attribute__((__sentinel__))
19292#define __exported __attribute__((__visibility__("default")))
19293#define __hidden
19294#define __offsetof(type,field) offsetof(type, field)
19295#define __rangeof(type,start,end) (__offsetof(type, end) - __offsetof(type, start))
19296#define __containerof(x,s,m) ({ const volatile __typeof(((s *)0)->m) *__x = (x); __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));})
19297#define __printflike(fmtarg,firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
19298#define __scanflike(fmtarg,firstvararg) __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
19299#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
19300#define __strfmonlike(fmtarg,firstvararg) __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
19301#define __strftimelike(fmtarg,firstvararg) __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
19302#define __printf0like(fmtarg,firstvararg)
19303#define __strong_reference(sym,aliassym) extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
19304#define __weak_reference(sym,alias) __asm__(".stabs \"_" #alias "\",11,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
19305#define __warn_references(sym,msg) __asm__(".stabs \"" msg "\",30,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
19306#define __FBSDID(s) struct __hack
19307#define __RCSID(s) struct __hack
19308#define __RCSID_SOURCE(s) struct __hack
19309#define __SCCSID(s) struct __hack
19310#define __COPYRIGHT(s) struct __hack
19311#define __DECONST(type,var) ((type)(__uintptr_t)(const void *)(var))
19312#define __DEVOLATILE(type,var) ((type)(__uintptr_t)(volatile void *)(var))
19313#define __DEQUALIFY(type,var) ((type)(__uintptr_t)(const volatile void *)(var))
19314#define _Nonnull
19315#define _Nullable
19316#define _Null_unspecified
19317#define __NULLABILITY_PRAGMA_PUSH
19318#define __NULLABILITY_PRAGMA_POP
19319#define __arg_type_tag(arg_kind,arg_idx,type_tag_idx)
19320#define __datatype_type_tag(kind,type)
19321#define __lock_annotate(x)
19322#define __lockable __lock_annotate(lockable)
19323#define __locks_exclusive(...) __lock_annotate(exclusive_lock_function(__VA_ARGS__))
19324#define __locks_shared(...) __lock_annotate(shared_lock_function(__VA_ARGS__))
19325#define __trylocks_exclusive(...) __lock_annotate(exclusive_trylock_function(__VA_ARGS__))
19326#define __trylocks_shared(...) __lock_annotate(shared_trylock_function(__VA_ARGS__))
19327#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
19328#define __asserts_exclusive(...) __lock_annotate(assert_exclusive_lock(__VA_ARGS__))
19329#define __asserts_shared(...) __lock_annotate(assert_shared_lock(__VA_ARGS__))
19330#define __requires_exclusive(...) __lock_annotate(exclusive_locks_required(__VA_ARGS__))
19331#define __requires_shared(...) __lock_annotate(shared_locks_required(__VA_ARGS__))
19332#define __requires_unlocked(...) __lock_annotate(locks_excluded(__VA_ARGS__))
19333#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
19334#define __nosanitizeaddress
19335#define __nosanitizememory
19336#define __nosanitizethread
19337#define __guarded_by(x) __lock_annotate(guarded_by(x))
19338#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))
19339#define __builtin_is_aligned(x,align) (((__uintptr_t)x & ((align) - 1)) == 0)
19340#define __builtin_align_up(x,align) ((__typeof__(x))(((__uintptr_t)(x)+((align)-1))&(~((align)-1))))
19341#define __builtin_align_down(x,align) ((__typeof__(x))((x)&(~((align)-1))))
19342#define __align_up(x,y) __builtin_align_up(x, y)
19343#define __align_down(x,y) __builtin_align_down(x, y)
19344#define __is_aligned(x,y) __builtin_is_aligned(x, y)
19345#define _STDDEF_H
19346#define _STDDEF_H_
19347#define _ANSI_STDDEF_H
19348#define _PTRDIFF_T
19349#define _T_PTRDIFF_
19350#define _T_PTRDIFF
19351#define __PTRDIFF_T
19352#define _PTRDIFF_T_
19353#define _BSD_PTRDIFF_T_
19354#define ___int_ptrdiff_t_h
19355#define _GCC_PTRDIFF_T
19356#define _PTRDIFF_T_DECLARED
19357#undef __need_ptrdiff_t
19358#undef __need_size_t
19359#define __wchar_t__
19360#define __WCHAR_T__
19361#define _WCHAR_T
19362#define _T_WCHAR_
19363#define _T_WCHAR
19364#define __WCHAR_T
19365#define _WCHAR_T_
19366#define _BSD_WCHAR_T_
19367#define _WCHAR_T_DEFINED_
19368#define _WCHAR_T_DEFINED
19369#define _WCHAR_T_H
19370#define ___int_wchar_t_h
19371#define __INT_WCHAR_T_H
19372#define _GCC_WCHAR_T
19373#define _WCHAR_T_DECLARED
19374#undef _BSD_WCHAR_T_
19375#undef __need_wchar_t
19376#undef NULL
19377#define NULL ((void *)0)
19378#undef __need_NULL
19379#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19380#define _GCC_MAX_ALIGN_T
19381#define __need___va_list
19382#define _SYS_REENT_H_
19383#define _SYS__TYPES_H
19384#define __need_size_t
19385#define __need_wint_t
19386#undef __need_ptrdiff_t
19387#undef __need_size_t
19388#undef __need_wchar_t
19389#define _WINT_T
19390#undef __need_wint_t
19391#undef NULL
19392#define NULL ((void *)0)
19393#undef __need_NULL
19394#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19395#define _MACHINE__TYPES_H
19396#define __machine_blkcnt_t_defined
19397#define __machine_blksize_t_defined
19398#define __machine_dev_t_defined
19399#define __machine_fsblkcnt_t_defined
19400#define __machine_fsfilcnt_t_defined
19401#define __machine_uid_t_defined
19402#define __machine_gid_t_defined
19403#define __machine_ino_t_defined
19404#define __machine_key_t_defined
19405#define __machine_sa_family_t_defined
19406#define __machine_socklen_t_defined
19407#undef __size_t
19408#define unsigned signed
19409#undef unsigned
19410#define _CLOCK_T_ unsigned long
19411#define _TIME_T_ long
19412#define _CLOCKID_T_ unsigned long
19413#define _TIMER_T_ unsigned long
19414#define _NULL 0
19415#define __Long int
19416#define _SYS_LOCK_H_
19417#define _LOCK_RECURSIVE_T _LOCK_T
19418#define _LOCK_T_RECURSIVE_INITIALIZER ((_LOCK_T)18)
19419#define _LOCK_T_INITIALIZER ((_LOCK_T)19)
19420#define __LOCK_INIT(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_INITIALIZER;
19421#define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_RECURSIVE_INITIALIZER;
19422#define __lock_init(__lock) __cygwin_lock_init(&__lock)
19423#define __lock_init_recursive(__lock) __cygwin_lock_init_recursive(&__lock)
19424#define __lock_close(__lock) __cygwin_lock_fini(&__lock)
19425#define __lock_close_recursive(__lock) __cygwin_lock_fini(&__lock)
19426#define __lock_acquire(__lock) __cygwin_lock_lock(&__lock)
19427#define __lock_acquire_recursive(__lock) __cygwin_lock_lock(&__lock)
19428#define __lock_try_acquire(lock) __cygwin_lock_trylock(&__lock)
19429#define __lock_try_acquire_recursive(lock) __cygwin_lock_trylock(&__lock)
19430#define __lock_release(__lock) __cygwin_lock_unlock(&__lock)
19431#define __lock_release_recursive(__lock) __cygwin_lock_unlock(&__lock)
19432#define _ATEXIT_SIZE 32
19433#define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
19434#define _REENT_SMALL_CHECK_INIT(ptr)
19435#define _fpos64_t _fpos_t
19436#define _RAND48_SEED_0 (0x330e)
19437#define _RAND48_SEED_1 (0xabcd)
19438#define _RAND48_SEED_2 (0x1234)
19439#define _RAND48_MULT_0 (0xe66d)
19440#define _RAND48_MULT_1 (0xdeec)
19441#define _RAND48_MULT_2 (0x0005)
19442#define _RAND48_ADD (0x000b)
19443#define _REENT_EMERGENCY_SIZE 25
19444#define _REENT_ASCTIME_SIZE 26
19445#define _REENT_SIGNAL_SIZE 24
19446#define _REENT_INIT_RESERVED_0 0,
19447#define _REENT_INIT_RESERVED_1 0,
19448#define _REENT_INIT_RESERVED_2 0,
19449#define _REENT_INIT_RESERVED_6_7 _NULL, _ATEXIT_INIT,
19450#define _REENT_INIT_RESERVED_8 {_NULL, 0, _NULL},
19451#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 }
19452#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; }
19453#define _REENT_CHECK_RAND48(ptr)
19454#define _REENT_CHECK_MP(ptr)
19455#define _REENT_CHECK_TM(ptr)
19456#define _REENT_CHECK_ASCTIME_BUF(ptr)
19457#define _REENT_CHECK_EMERGENCY(ptr)
19458#define _REENT_CHECK_MISC(ptr)
19459#define _REENT_CHECK_SIGNAL_BUF(ptr)
19460#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
19461#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
19462#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
19463#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
19464#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
19465#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
19466#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
19467#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
19468#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
19469#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
19470#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
19471#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
19472#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
19473#define _REENT_MBTOWC_STATE(ptr) ((ptr)->_new._reent._mbtowc_state)
19474#define _REENT_WCTOMB_STATE(ptr) ((ptr)->_new._reent._wctomb_state)
19475#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_new._reent._mbrlen_state)
19476#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_new._reent._mbrtowc_state)
19477#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_new._reent._mbsrtowcs_state)
19478#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_new._reent._wcrtomb_state)
19479#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_new._reent._wcsrtombs_state)
19480#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
19481#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
19482#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
19483#define _REENT_CLEANUP(_ptr) ((_ptr)->__cleanup)
19484#define _REENT_CVTBUF(_ptr) ((_ptr)->_cvtbuf)
19485#define _REENT_CVTLEN(_ptr) ((_ptr)->_cvtlen)
19486#define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency)
19487#define _REENT_ERRNO(_ptr) ((_ptr)->_errno)
19488#define _REENT_INC(_ptr) ((_ptr)->_inc)
19489#define _REENT_LOCALE(_ptr) ((_ptr)->_locale)
19490#define _REENT_SIG_FUNC(_ptr) ((_ptr)->_sig_func)
19491#define _REENT_STDIN(_ptr) ((_ptr)->_stdin)
19492#define _REENT_STDOUT(_ptr) ((_ptr)->_stdout)
19493#define _REENT_STDERR(_ptr) ((_ptr)->_stderr)
19494#define _REENT_INIT_PTR(var) { memset((var), 0, sizeof(*(var))); _REENT_INIT_PTR_ZEROED(var); }
19495#define __ATTRIBUTE_IMPURE_PTR__
19496#define __ATTRIBUTE_IMPURE_DATA__
19497#define _REENT (__getreent())
19498#define _REENT_IS_NULL(_ptr) ((_ptr) == NULL)
19499#define _GLOBAL_REENT (&_impure_data)
19500#define _Kmax (sizeof (size_t) << 3)
19501#define __FILE_defined
19502#define _OFF_T_DECLARED
19503#define _SSIZE_T_DECLARED
19504#define _SYS_STDIO_H_
19505#define _flockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_lock ((_LOCK_T *)&(fp)->_lock); })
19506#define _ftrylockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __cygwin_lock_trylock ((_LOCK_T *)&(fp)->_lock))
19507#define _funlockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_unlock ((_LOCK_T *)&(fp)->_lock); })
19508#define __SLBF 0x0001
19509#define __SNBF 0x0002
19510#define __SRD 0x0004
19511#define __SWR 0x0008
19512#define __SRW 0x0010
19513#define __SEOF 0x0020
19514#define __SERR 0x0040
19515#define __SMBF 0x0080
19516#define __SAPP 0x0100
19517#define __SSTR 0x0200
19518#define __SOPT 0x0400
19519#define __SNPT 0x0800
19520#define __SOFF 0x1000
19521#define __SORD 0x2000
19522#define __SCLE 0x4000
19523#define __SL64 0x8000
19524#define __SNLK 0x0001
19525#define __SWID 0x2000
19526#define _IOFBF 0
19527#define _IOLBF 1
19528#define _IONBF 2
19529#define EOF (-1)
19530#define BUFSIZ 1024
19531#define FOPEN_MAX 20
19532#define FILENAME_MAX __FILENAME_MAX__
19533#define L_tmpnam FILENAME_MAX
19534#define P_tmpdir "/tmp"
19535#define SEEK_SET 0
19536#define SEEK_CUR 1
19537#define SEEK_END 2
19538#define TMP_MAX 26
19539#define stdin _REENT_STDIN(_REENT)
19540#define stdout _REENT_STDOUT(_REENT)
19541#define stderr _REENT_STDERR(_REENT)
19542#define _stdin_r(x) _REENT_STDIN(x)
19543#define _stdout_r(x) _REENT_STDOUT(x)
19544#define _stderr_r(x) _REENT_STDERR(x)
19545#define __VALIST __gnuc_va_list
19546#define fropen(__cookie,__fn) funopen(__cookie, __fn, (int (*)())0, (fpos_t (*)())0, (int (*)())0)
19547#define fwopen(__cookie,__fn) funopen(__cookie, (int (*)())0, __fn, (fpos_t (*)())0, (int (*)())0)
19548#define __sgetc_raw_r(__ptr,__f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++))
19549#define __sfeof(p) ((int)(((p)->_flags & __SEOF) != 0))
19550#define __sferror(p) ((int)(((p)->_flags & __SERR) != 0))
19551#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
19552#define __sfileno(p) ((p)->_file)
19553#define feof(p) __sfeof(p)
19554#define ferror(p) __sferror(p)
19555#define clearerr(p) __sclearerr(p)
19556#define feof_unlocked(p) __sfeof(p)
19557#define ferror_unlocked(p) __sferror(p)
19558#define clearerr_unlocked(p) __sclearerr(p)
19559#define getchar_unlocked() _getchar_unlocked()
19560#define putchar_unlocked(_c) _putchar_unlocked(_c)
19561#define fast_putc(x,p) (--(p)->_w < 0 ? __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0))
19562#define L_cuserid 9
19563#define L_ctermid 16
19564#define _SSP_STDIO_H_
19565#define _SSP_SSP_H_
19566#define __ssp_real_(fun) __ssp_real_ ## fun
19567#define __ssp_real(fun) __ssp_real_(fun)
19568#define __ssp_inline extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
19569#define __ssp_bos(ptr) __builtin_object_size(ptr, __SSP_FORTIFY_LEVEL > 1)
19570#define __ssp_bos0(ptr) __builtin_object_size(ptr, 0)
19571#define __ssp_check(buf,len,bos) if (bos(buf) != (size_t)-1 && len > bos(buf)) __chk_fail()
19572#define __ssp_decl(rtype,fun,args) rtype __ssp_real_(fun) args __asm__(__ASMNAME(#fun)); __ssp_inline rtype fun args
19573#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; }
19574#define __ssp_redirect(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos)
19575#define __ssp_redirect0(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos0)
19576#define __ssp_overlap(a,b,l) (((a) <= (b) && (b) < (a) + (l)) || ((b) <= (a) && (a) < (b) + (l)))
19577#define sprintf(str,...) __builtin___sprintf_chk(str, 0, __ssp_bos(str), __VA_ARGS__)
19578#define vsprintf(str,fmt,ap) __builtin___vsprintf_chk(str, 0, __ssp_bos(str), fmt, ap)
19579#define snprintf(str,len,...) __builtin___snprintf_chk(str, len, 0, __ssp_bos(str), __VA_ARGS__)
19580#define vsnprintf(str,len,fmt,ap) __builtin___vsnprintf_chk(str, len, 0, __ssp_bos(str), fmt, ap)
19581#define gets(str) __gets_chk(str, __ssp_bos(str))
19582#define __BIT_TYPES_DEFINED__ 1
19583#define _SYS_TYPES_H
19584#define _SYS__STDINT_H
19585#define _INT8_T_DECLARED
19586#define _UINT8_T_DECLARED
19587#define __int8_t_defined 1
19588#define _INT16_T_DECLARED
19589#define _UINT16_T_DECLARED
19590#define __int16_t_defined 1
19591#define _INT32_T_DECLARED
19592#define _UINT32_T_DECLARED
19593#define __int32_t_defined 1
19594#define _INT64_T_DECLARED
19595#define _UINT64_T_DECLARED
19596#define __int64_t_defined 1
19597#define _INTMAX_T_DECLARED
19598#define _UINTMAX_T_DECLARED
19599#define _INTPTR_T_DECLARED
19600#define _UINTPTR_T_DECLARED
19601#define __MACHINE_ENDIAN_H__
19602#define _BITS_ENDIAN_H_
19603#define __BIG_ENDIAN 4321
19604#define __LITTLE_ENDIAN 1234
19605#define __BYTE_ORDER __LITTLE_ENDIAN
19606#define _LITTLE_ENDIAN __LITTLE_ENDIAN
19607#define _BIG_ENDIAN __BIG_ENDIAN
19608#define _PDP_ENDIAN __PDP_ENDIAN
19609#define _BYTE_ORDER __BYTE_ORDER
19610#define __machine_host_to_from_network_defined
19611#define __htonl(_x) __ntohl(_x)
19612#define __htons(_x) __ntohs(_x)
19613#define _QUAD_HIGHWORD 1
19614#define _QUAD_LOWWORD 0
19615#define LITTLE_ENDIAN _LITTLE_ENDIAN
19616#define BIG_ENDIAN _BIG_ENDIAN
19617#define PDP_ENDIAN _PDP_ENDIAN
19618#define BYTE_ORDER _BYTE_ORDER
19619#define __bswap16(_x) __builtin_bswap16(_x)
19620#define __bswap32(_x) __builtin_bswap32(_x)
19621#define __bswap64(_x) __builtin_bswap64(_x)
19622#define _SYS_SELECT_H
19623#define _SYS__SIGSET_H_
19624#define _SYS__TIMEVAL_H_
19625#define _SUSECONDS_T_DECLARED
19626#define __time_t_defined
19627#define _TIME_T_DECLARED
19628#define _TIMEVAL_DEFINED
19629#define _SYS_TIMESPEC_H_
19630#define _SYS__TIMESPEC_H_
19631#define TIMEVAL_TO_TIMESPEC(tv,ts) do { (ts)->tv_sec = (tv)->tv_sec; (ts)->tv_nsec = (tv)->tv_usec * 1000; } while (0)
19632#define TIMESPEC_TO_TIMEVAL(tv,ts) do { (tv)->tv_sec = (ts)->tv_sec; (tv)->tv_usec = (ts)->tv_nsec / 1000; } while (0)
19633#define _SIGSET_T_DECLARED
19634#define _SYS_TYPES_FD_SET
19635#define FD_SETSIZE 1024
19636#define _NFDBITS ((int)sizeof(__fd_mask) * 8)
19637#define NFDBITS _NFDBITS
19638#define _howmany(x,y) (((x) + ((y) - 1)) / (y))
19639#define fds_bits __fds_bits
19640#define __fdset_mask(n) ((__fd_mask)1 << ((n) % _NFDBITS))
19641#define FD_CLR(n,p) ((p)->__fds_bits[(n)/_NFDBITS] &= ~__fdset_mask(n))
19642#define FD_COPY(f,t) (void)(*(t) = *(f))
19643#define FD_ISSET(n,p) (((p)->__fds_bits[(n)/_NFDBITS] & __fdset_mask(n)) != 0)
19644#define FD_SET(n,p) ((p)->__fds_bits[(n)/_NFDBITS] |= __fdset_mask(n))
19645#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)
19646#define physadr physadr_t
19647#define quad quad_t
19648#define _IN_ADDR_T_DECLARED
19649#define _IN_PORT_T_DECLARED
19650#define __u_char_defined
19651#define __u_short_defined
19652#define __u_int_defined
19653#define __u_long_defined
19654#define _BSDTYPES_DEFINED
19655#define _BLKCNT_T_DECLARED
19656#define _BLKSIZE_T_DECLARED
19657#define __clock_t_defined
19658#define _CLOCK_T_DECLARED
19659#define __caddr_t_defined
19660#define _FSBLKCNT_T_DECLARED
19661#define _ID_T_DECLARED
19662#define _INO_T_DECLARED
19663#define _DEV_T_DECLARED
19664#define _UID_T_DECLARED
19665#define _GID_T_DECLARED
19666#define _PID_T_DECLARED
19667#define _KEY_T_DECLARED
19668#define _MODE_T_DECLARED
19669#define _NLINK_T_DECLARED
19670#define __clockid_t_defined
19671#define _CLOCKID_T_DECLARED
19672#define __timer_t_defined
19673#define _TIMER_T_DECLARED
19674#define _USECONDS_T_DECLARED
19675#define _SYS__PTHREADTYPES_H_
19676#define _SYS_CPUSET_H_
19677#define _STDLIB_H_
19678#define __need_size_t
19679#define __need_wchar_t
19680#define __need_NULL
19681#undef __need_ptrdiff_t
19682#undef __need_size_t
19683#undef __need_wchar_t
19684#undef NULL
19685#define NULL ((void *)0)
19686#undef __need_NULL
19687#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19688#define _MACHSTDLIB_H_
19689#define _NEWLIB_ALLOCA_H
19690#undef alloca
19691#define alloca(size) __builtin_alloca(size)
19692#define _CYGWIN_STDLIB_H
19693#define _CYGWIN_WAIT_H
19694#define WAIT_ANY (pid_t)-1
19695#define WAIT_MYPGRP (pid_t)0
19696#define WNOHANG 1
19697#define WUNTRACED 2
19698#define WCONTINUED 8
19699#define __W_CONTINUED 0xffff
19700#define WIFEXITED(_w) (((_w) & 0xff) == 0)
19701#define WIFSIGNALED(_w) (((_w) & 0x7f) > 0 && (((_w) & 0x7f) < 0x7f))
19702#define WIFSTOPPED(_w) (((_w) & 0xff) == 0x7f)
19703#define WIFCONTINUED(_w) (((_w) & 0xffff) == __W_CONTINUED)
19704#define WEXITSTATUS(_w) (((_w) >> 8) & 0xff)
19705#define WTERMSIG(_w) ((_w) & 0x7f)
19706#define WSTOPSIG WEXITSTATUS
19707#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & 0x80))
19708#undef _malloc_r
19709#define _malloc_r(r,s) malloc (s)
19710#undef _free_r
19711#define _free_r(r,p) free (p)
19712#undef _realloc_r
19713#define _realloc_r(r,p,s) realloc (p, s)
19714#undef _calloc_r
19715#define _calloc_r(r,s1,s2) calloc (s1, s2);
19716#undef _memalign_r
19717#define _memalign_r(r,s1,s2) memalign (s1, s2);
19718#undef _mallinfo_r
19719#define _mallinfo_r(r) mallinfo ()
19720#undef _malloc_stats_r
19721#define _malloc_stats_r(r) malloc_stats ()
19722#undef _mallopt_r
19723#define _mallopt_r(i1,i2) mallopt (i1, i2)
19724#undef _malloc_usable_size_r
19725#define _malloc_usable_size_r(r,p) malloc_usable_size (p)
19726#undef _valloc_r
19727#define _valloc_r(r,s) valloc (s)
19728#undef _pvalloc_r
19729#define _pvalloc_r(r,s) pvalloc (s)
19730#undef _malloc_trim_r
19731#define _malloc_trim_r(r,s) malloc_trim (s)
19732#undef _mstats_r
19733#define _mstats_r(r,p) mstats (p)
19734#define _SYS__LOCALE_H
19735#define __compar_fn_t_defined
19736#define EXIT_FAILURE 1
19737#define EXIT_SUCCESS 0
19738#define RAND_MAX __RAND_MAX
19739#define MB_CUR_MAX __locale_mb_cur_max()
19740#define strtodf strtof
19741#define _SSP_STDLIB_H_
19742#define _STRING_H_
19743#define __need_size_t
19744#define __need_NULL
19745#undef __need_ptrdiff_t
19746#undef __need_size_t
19747#undef __need_wchar_t
19748#undef NULL
19749#define NULL ((void *)0)
19750#undef __need_NULL
19751#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19752#define _STRINGS_H_
19753#define _SSP_STRINGS_H_
19754#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))
19755#define bzero(dst,len) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___memset_chk(dst, 0, len, __ssp_bos0(dst)) : __memset_ichk(dst, 0, len))
19756#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);}))
19757#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);}))
19758#define basename basename
19759#define _SSP_STRING_H_
19760#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))
19761#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))
19762#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)); }
19763#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)); }
19764#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)); }
19765#define memcpy(dst,src,len) __ssp_bos_check3(memcpy, dst, src, len)
19766#define memmove(dst,src,len) __ssp_bos_check3(memmove, dst, src, len)
19767#define mempcpy(dst,src,len) __ssp_bos_check3(mempcpy, dst, src, len)
19768#define memset(dst,val,len) __ssp_bos_check3(memset, dst, val, len)
19769#define stpcpy(dst,src) __ssp_bos_check2(stpcpy, dst, src)
19770#define stpncpy(dst,src,len) __ssp_bos_check3(stpncpy, dst, src, len)
19771#define strcpy(dst,src) __ssp_bos_check2(strcpy, dst, src)
19772#define strcat(dst,src) __ssp_bos_check2(strcat, dst, src)
19773#define strncpy(dst,src,len) __ssp_bos_check3(strncpy, dst, src, len)
19774#define strncat(dst,src,len) __ssp_bos_check3(strncat, dst, src, len)
19775#define __CPU_SETSIZE 1024
19776#define __NCPUBITS (8 * sizeof (__cpu_mask))
19777#define __CPU_GROUPMAX (__CPU_SETSIZE / __NCPUBITS)
19778#define __CPUELT(cpu) ((cpu) / __NCPUBITS)
19779#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
19780#define CPU_ALLOC_SIZE(num) __cpuset_alloc_size (num)
19781#define CPU_ALLOC(num) __cpuset_alloc (num)
19782#define CPU_FREE(set) __cpuset_free (set)
19783#define CPU_ZERO_S(siz,set) __cpuset_zero_s (siz, set)
19784#define CPU_SET_S(cpu,siz,set) __cpuset_set_s (cpu, siz, set)
19785#define CPU_CLR_S(cpu,siz,set) __cpuset_clr_s (cpu, siz, set)
19786#define CPU_ISSET_S(cpu,siz,set) __cpuset_isset_s (cpu, siz, set)
19787#define CPU_COUNT_S(siz,set) __cpuset_count_s (siz, set)
19788#define CPU_AND_S(siz,dst,src1,src2) __cpuset_and_s (siz, dst, src1, src2)
19789#define CPU_OR_S(siz,dst,src1,src2) __cpuset_or_s (siz, dst, src1, src2)
19790#define CPU_XOR_S(siz,dst,src1,src2) __cpuset_xor_s (siz, dst, src1, src2)
19791#define CPU_EQUAL_S(siz,src1,src2) __cpuset_equal_s (siz, src1, src2)
19792#define CPU_ZERO(set) CPU_ZERO_S(sizeof (cpu_set_t), set)
19793#define CPU_SET(cpu,set) CPU_SET_S(cpu, sizeof (cpu_set_t), set)
19794#define CPU_CLR(cpu,set) CPU_CLR_S(cpu, sizeof (cpu_set_t), set)
19795#define CPU_ISSET(cpu,set) CPU_ISSET_S(cpu, sizeof (cpu_set_t), set)
19796#define CPU_COUNT(set) CPU_COUNT_S(sizeof (cpu_set_t), set)
19797#define CPU_AND(dst,src1,src2) CPU_AND_S(sizeof (cpu_set_t), dst, src1, src2)
19798#define CPU_OR(dst,src1,src2) CPU_OR_S(sizeof (cpu_set_t), dst, src1, src2)
19799#define CPU_XOR(dst,src1,src2) CPU_XOR_S(sizeof (cpu_set_t), dst, src1, src2)
19800#define CPU_EQUAL(src1,src2) CPU_EQUAL_S(sizeof (cpu_set_t), src1, src2)
19801#define CPU_SETSIZE __CPU_SETSIZE
19802#define _ENDIAN_H_
19803#define __LONG_LONG_PAIR(HI,LO) LO, HI
19804#define _BITS_BYTESWAP_H
19805#define htobe16(x) __bswap_16(x)
19806#define htobe32(x) __bswap_32(x)
19807#define htobe64(x) __bswap_64(x)
19808#define be16toh(x) __bswap_16(x)
19809#define be32toh(x) __bswap_32(x)
19810#define be64toh(x) __bswap_64(x)
19811#define htole16(x) (x)
19812#define htole32(x) (x)
19813#define htole64(x) (x)
19814#define le16toh(x) (x)
19815#define le32toh(x) (x)
19816#define le64toh(x) (x)
19817#define _WORDSIZE_H 1
19818#define __WORDSIZE 64
19819#define __timespec_t_defined
19820#define __timestruc_t_defined
19821#define __BIT_TYPES_DEFINED__ 1
19822#define __vm_offset_t_defined
19823#define __vm_size_t_defined
19824#define __vm_object_t_defined
19825#define __addr_t_defined
19826#define _SYS_SYSMACROS_H
19827#define major(dev) gnu_dev_major(dev)
19828#define minor(dev) gnu_dev_minor(dev)
19829#define makedev(maj,min) gnu_dev_makedev(maj, min)
19830#undef __need_inttypes
19831#define _SYS_STAT_H
19832#define _TIME_H_
19833#define __need_size_t
19834#define __need_NULL
19835#undef __need_ptrdiff_t
19836#undef __need_size_t
19837#undef __need_wchar_t
19838#undef NULL
19839#define NULL ((void *)0)
19840#undef __need_NULL
19841#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19842#define _MACHTIME_H_
19843#define _CLOCKS_PER_SEC_ 1000
19844#define CLOCKS_PER_SEC _CLOCKS_PER_SEC_
19845#define CLK_TCK CLOCKS_PER_SEC
19846#define tzname _tzname
19847#define _CYGWIN_TIME_H
19848#define TIMER_RELTIME 0
19849#define _SIGNAL_H_
19850#define _SYS_SIGNAL_H
19851#define _STDINT_H
19852#define _SYS__INTSUP_H
19853#define __STDINT_EXP(x) __ ##x ##__
19854#undef signed
19855#undef unsigned
19856#undef char
19857#undef short
19858#undef int
19859#undef __int20
19860#undef __int20__
19861#undef long
19862#define signed +0
19863#define unsigned +0
19864#define char +0
19865#define short +1
19866#define __int20 +2
19867#define __int20__ +2
19868#define int +2
19869#define long +4
19870#define _INTPTR_EQ_LONG
19871#define __INT8 "hh"
19872#define __INT16 "h"
19873#define __INT32
19874#define __INT64 "l"
19875#define __FAST8 "hh"
19876#define __FAST16 "l"
19877#define __FAST32 "l"
19878#define __FAST64 "l"
19879#define __LEAST8 "hh"
19880#define __LEAST16 "h"
19881#define __LEAST32
19882#define __LEAST64 "l"
19883#undef signed
19884#undef unsigned
19885#undef char
19886#undef short
19887#undef int
19888#undef long
19889#undef __int20
19890#undef __int20__
19891#define __int_least8_t_defined 1
19892#define __int_least16_t_defined 1
19893#define __int_least32_t_defined 1
19894#define __int_least64_t_defined 1
19895#define __int_fast8_t_defined 1
19896#define __int_fast16_t_defined 1
19897#define __int_fast32_t_defined 1
19898#define __int_fast64_t_defined 1
19899#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
19900#define INTPTR_MAX (__INTPTR_MAX__)
19901#define UINTPTR_MAX (__UINTPTR_MAX__)
19902#define INT8_MIN (-__INT8_MAX__ - 1)
19903#define INT8_MAX (__INT8_MAX__)
19904#define UINT8_MAX (__UINT8_MAX__)
19905#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
19906#define INT_LEAST8_MAX (__INT_LEAST8_MAX__)
19907#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)
19908#define INT16_MIN (-__INT16_MAX__ - 1)
19909#define INT16_MAX (__INT16_MAX__)
19910#define UINT16_MAX (__UINT16_MAX__)
19911#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
19912#define INT_LEAST16_MAX (__INT_LEAST16_MAX__)
19913#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)
19914#define INT32_MIN (-__INT32_MAX__ - 1)
19915#define INT32_MAX (__INT32_MAX__)
19916#define UINT32_MAX (__UINT32_MAX__)
19917#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
19918#define INT_LEAST32_MAX (__INT_LEAST32_MAX__)
19919#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)
19920#define INT64_MIN (-__INT64_MAX__ - 1)
19921#define INT64_MAX (__INT64_MAX__)
19922#define UINT64_MAX (__UINT64_MAX__)
19923#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
19924#define INT_LEAST64_MAX (__INT_LEAST64_MAX__)
19925#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)
19926#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
19927#define INT_FAST8_MAX (__INT_FAST8_MAX__)
19928#define UINT_FAST8_MAX (__UINT_FAST8_MAX__)
19929#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
19930#define INT_FAST16_MAX (__INT_FAST16_MAX__)
19931#define UINT_FAST16_MAX (__UINT_FAST16_MAX__)
19932#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
19933#define INT_FAST32_MAX (__INT_FAST32_MAX__)
19934#define UINT_FAST32_MAX (__UINT_FAST32_MAX__)
19935#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
19936#define INT_FAST64_MAX (__INT_FAST64_MAX__)
19937#define UINT_FAST64_MAX (__UINT_FAST64_MAX__)
19938#define INTMAX_MAX (__INTMAX_MAX__)
19939#define INTMAX_MIN (-INTMAX_MAX - 1)
19940#define UINTMAX_MAX (__UINTMAX_MAX__)
19941#define SIZE_MAX (__SIZE_MAX__)
19942#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
19943#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))
19944#define PTRDIFF_MAX (__PTRDIFF_MAX__)
19945#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
19946#define WCHAR_MIN (__WCHAR_MIN__)
19947#define WCHAR_MAX (__WCHAR_MAX__)
19948#define WINT_MAX (__WINT_MAX__)
19949#define WINT_MIN (__WINT_MIN__)
19950#define INT8_C(x) __INT8_C(x)
19951#define UINT8_C(x) __UINT8_C(x)
19952#define INT16_C(x) __INT16_C(x)
19953#define UINT16_C(x) __UINT16_C(x)
19954#define INT32_C(x) __INT32_C(x)
19955#define UINT32_C(x) __UINT32_C(x)
19956#define INT64_C(x) __INT64_C(x)
19957#define UINT64_C(x) __UINT64_C(x)
19958#define INTMAX_C(x) __INTMAX_C(x)
19959#define UINTMAX_C(x) __UINTMAX_C(x)
19960#define _GCC_WRAP_STDINT_H
19961#define _CYGWIN_SIGNAL_H
19962#define __COPY_CONTEXT_SIZE 816
19963#pragma pack(push,4)
19964#define __SI_PAD_SIZE 32
19965#pragma pack(pop)
19966#define SI_USER SI_USER
19967#define SI_ASYNCIO SI_ASYNCIO
19968#define SI_MESGQ SI_MESGQ
19969#define SI_TIMER SI_TIMER
19970#define SI_QUEUE SI_QUEUE
19971#define SI_KERNEL SI_KERNEL
19972#define ILL_ILLOPC ILL_ILLOPC
19973#define ILL_ILLOPN ILL_ILLOPN
19974#define ILL_ILLADR ILL_ILLADR
19975#define ILL_ILLTRP ILL_ILLTRP
19976#define ILL_PRVOPC ILL_PRVOPC
19977#define ILL_PRVREG ILL_PRVREG
19978#define ILL_COPROC ILL_COPROC
19979#define ILL_BADSTK ILL_BADSTK
19980#define FPE_INTDIV FPE_INTDIV
19981#define FPE_INTOVF FPE_INTOVF
19982#define FPE_FLTDIV FPE_FLTDIV
19983#define FPE_FLTOVF FPE_FLTOVF
19984#define FPE_FLTUND FPE_FLTUND
19985#define FPE_FLTRES FPE_FLTRES
19986#define FPE_FLTINV FPE_FLTINV
19987#define FPE_FLTSUB FPE_FLTSUB
19988#define SEGV_MAPERR SEGV_MAPERR
19989#define SEGV_ACCERR SEGV_ACCERR
19990#define BUS_ADRALN BUS_ADRALN
19991#define BUS_ADRERR BUS_ADRERR
19992#define BUS_OBJERR BUS_OBJERR
19993#define CLD_EXITED CLD_EXITED
19994#define CLD_KILLED CLD_KILLED
19995#define CLD_DUMPED CLD_DUMPED
19996#define CLD_TRAPPED CLD_TRAPPED
19997#define CLD_STOPPED CLD_STOPPED
19998#define CLD_CONTINUED CLD_CONTINUED
19999#define SIGEV_SIGNAL SIGEV_SIGNAL
20000#define SIGEV_NONE SIGEV_NONE
20001#define SIGEV_THREAD SIGEV_THREAD
20002#define SA_NOCLDSTOP 1
20003#define SA_SIGINFO 2
20004#define SA_RESTART 0x10000000
20005#define SA_ONSTACK 0x20000000
20006#define SA_NODEFER 0x40000000
20007#define SA_RESETHAND 0x80000000
20008#define SA_ONESHOT SA_RESETHAND
20009#define SA_NOMASK SA_NODEFER
20010#define _SA_INTERNAL_MASK 0xf000
20011#undef MINSIGSTKSZ
20012#define MINSIGSTKSZ 8192
20013#undef SIGSTKSZ
20014#define SIGSTKSZ 32768
20015#define SIGHUP 1
20016#define SIGINT 2
20017#define SIGQUIT 3
20018#define SIGILL 4
20019#define SIGTRAP 5
20020#define SIGABRT 6
20021#define SIGIOT SIGABRT
20022#define SIGEMT 7
20023#define SIGFPE 8
20024#define SIGKILL 9
20025#define SIGBUS 10
20026#define SIGSEGV 11
20027#define SIGSYS 12
20028#define SIGPIPE 13
20029#define SIGALRM 14
20030#define SIGTERM 15
20031#define SIGURG 16
20032#define SIGSTOP 17
20033#define SIGTSTP 18
20034#define SIGCONT 19
20035#define SIGCHLD 20
20036#define SIGCLD 20
20037#define SIGTTIN 21
20038#define SIGTTOU 22
20039#define SIGIO 23
20040#define SIGPOLL SIGIO
20041#define SIGXCPU 24
20042#define SIGXFSZ 25
20043#define SIGVTALRM 26
20044#define SIGPROF 27
20045#define SIGWINCH 28
20046#define SIGLOST 29
20047#define SIGPWR SIGLOST
20048#define SIGUSR1 30
20049#define SIGUSR2 31
20050#define _NSIG 65
20051#define NSIG _NSIG
20052#define SIGRTMIN 32
20053#define SIGRTMAX (_NSIG - 1)
20054#define SIG_HOLD ((_sig_func_ptr)2)
20055#define SS_ONSTACK 0x1
20056#define SS_DISABLE 0x2
20057#define SIG_SETMASK 0
20058#define SIG_BLOCK 1
20059#define SIG_UNBLOCK 2
20060#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("4294967295") - 1)
20061#define _SYS_UCONTEXT_H_
20062#define SIG_DFL ((_sig_func_ptr)0)
20063#define SIG_IGN ((_sig_func_ptr)1)
20064#define SIG_ERR ((_sig_func_ptr)-1)
20065#define CLOCK_ENABLED 1
20066#define CLOCK_DISABLED 0
20067#define CLOCK_ALLOWED 1
20068#define CLOCK_DISALLOWED 0
20069#define TIMER_ABSTIME 4
20070#define CLOCK_REALTIME_COARSE ((clockid_t) 0)
20071#define CLOCK_REALTIME ((clockid_t) 1)
20072#define CLOCK_PROCESS_CPUTIME_ID ((clockid_t) 2)
20073#define CLOCK_THREAD_CPUTIME_ID ((clockid_t) 3)
20074#define CLOCK_MONOTONIC ((clockid_t) 4)
20075#define CLOCK_MONOTONIC_RAW ((clockid_t) 5)
20076#define CLOCK_MONOTONIC_COARSE ((clockid_t) 6)
20077#define CLOCK_BOOTTIME ((clockid_t) 7)
20078#define CLOCK_REALTIME_ALARM ((clockid_t) 8)
20079#define CLOCK_BOOTTIME_ALARM ((clockid_t) 9)
20080#define _CYGWIN_STAT_H
20081#define st_atime st_atim.tv_sec
20082#define st_mtime st_mtim.tv_sec
20083#define st_ctime st_ctim.tv_sec
20084#define st_birthtime st_birthtim.tv_sec
20085#define S_TYPEISMQ(buf) ((void)(buf)->st_mode,0)
20086#define S_TYPEISSEM(buf) ((void)(buf)->st_mode,0)
20087#define S_TYPEISSHM(buf) ((void)(buf)->st_mode,0)
20088#define _IFMT 0170000
20089#define _IFDIR 0040000
20090#define _IFCHR 0020000
20091#define _IFBLK 0060000
20092#define _IFREG 0100000
20093#define _IFLNK 0120000
20094#define _IFSOCK 0140000
20095#define _IFIFO 0010000
20096#define S_BLKSIZE 1024
20097#define S_ISUID 0004000
20098#define S_ISGID 0002000
20099#define S_ISVTX 0001000
20100#define S_IREAD 0000400
20101#define S_IWRITE 0000200
20102#define S_IEXEC 0000100
20103#define S_ENFMT 0002000
20104#define S_IFMT _IFMT
20105#define S_IFDIR _IFDIR
20106#define S_IFCHR _IFCHR
20107#define S_IFBLK _IFBLK
20108#define S_IFREG _IFREG
20109#define S_IFLNK _IFLNK
20110#define S_IFSOCK _IFSOCK
20111#define S_IFIFO _IFIFO
20112#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
20113#define S_IRUSR 0000400
20114#define S_IWUSR 0000200
20115#define S_IXUSR 0000100
20116#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
20117#define S_IRGRP 0000040
20118#define S_IWGRP 0000020
20119#define S_IXGRP 0000010
20120#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
20121#define S_IROTH 0000004
20122#define S_IWOTH 0000002
20123#define S_IXOTH 0000001
20124#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
20125#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
20126#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
20127#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK)
20128#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR)
20129#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
20130#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)
20131#define S_ISREG(m) (((m)&_IFMT) == _IFREG)
20132#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK)
20133#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)
20134#define UTIME_NOW -2L
20135#define UTIME_OMIT -1L
20136#define _INTTYPES_H
20137#define __need_wchar_t
20138#undef __need_ptrdiff_t
20139#undef __need_size_t
20140#undef __need_wchar_t
20141#undef NULL
20142#define NULL ((void *)0)
20143#undef __need_NULL
20144#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20145#define __STRINGIFY(a) #a
20146#define __PRI8(x) __INT8 __STRINGIFY(x)
20147#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x)
20148#define __PRI8FAST(x) __FAST8 __STRINGIFY(x)
20149#define __SCN8(x) __INT8 __STRINGIFY(x)
20150#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x)
20151#define __SCN8FAST(x) __FAST8 __STRINGIFY(x)
20152#define PRId8 __PRI8(d)
20153#define PRIi8 __PRI8(i)
20154#define PRIo8 __PRI8(o)
20155#define PRIu8 __PRI8(u)
20156#define PRIx8 __PRI8(x)
20157#define PRIX8 __PRI8(X)
20158#define SCNd8 __SCN8(d)
20159#define SCNi8 __SCN8(i)
20160#define SCNo8 __SCN8(o)
20161#define SCNu8 __SCN8(u)
20162#define SCNx8 __SCN8(x)
20163#define PRIdLEAST8 __PRI8LEAST(d)
20164#define PRIiLEAST8 __PRI8LEAST(i)
20165#define PRIoLEAST8 __PRI8LEAST(o)
20166#define PRIuLEAST8 __PRI8LEAST(u)
20167#define PRIxLEAST8 __PRI8LEAST(x)
20168#define PRIXLEAST8 __PRI8LEAST(X)
20169#define SCNdLEAST8 __SCN8LEAST(d)
20170#define SCNiLEAST8 __SCN8LEAST(i)
20171#define SCNoLEAST8 __SCN8LEAST(o)
20172#define SCNuLEAST8 __SCN8LEAST(u)
20173#define SCNxLEAST8 __SCN8LEAST(x)
20174#define PRIdFAST8 __PRI8FAST(d)
20175#define PRIiFAST8 __PRI8FAST(i)
20176#define PRIoFAST8 __PRI8FAST(o)
20177#define PRIuFAST8 __PRI8FAST(u)
20178#define PRIxFAST8 __PRI8FAST(x)
20179#define PRIXFAST8 __PRI8FAST(X)
20180#define SCNdFAST8 __SCN8FAST(d)
20181#define SCNiFAST8 __SCN8FAST(i)
20182#define SCNoFAST8 __SCN8FAST(o)
20183#define SCNuFAST8 __SCN8FAST(u)
20184#define SCNxFAST8 __SCN8FAST(x)
20185#define __PRI16(x) __INT16 __STRINGIFY(x)
20186#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x)
20187#define __PRI16FAST(x) __FAST16 __STRINGIFY(x)
20188#define __SCN16(x) __INT16 __STRINGIFY(x)
20189#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x)
20190#define __SCN16FAST(x) __FAST16 __STRINGIFY(x)
20191#define PRId16 __PRI16(d)
20192#define PRIi16 __PRI16(i)
20193#define PRIo16 __PRI16(o)
20194#define PRIu16 __PRI16(u)
20195#define PRIx16 __PRI16(x)
20196#define PRIX16 __PRI16(X)
20197#define SCNd16 __SCN16(d)
20198#define SCNi16 __SCN16(i)
20199#define SCNo16 __SCN16(o)
20200#define SCNu16 __SCN16(u)
20201#define SCNx16 __SCN16(x)
20202#define PRIdLEAST16 __PRI16LEAST(d)
20203#define PRIiLEAST16 __PRI16LEAST(i)
20204#define PRIoLEAST16 __PRI16LEAST(o)
20205#define PRIuLEAST16 __PRI16LEAST(u)
20206#define PRIxLEAST16 __PRI16LEAST(x)
20207#define PRIXLEAST16 __PRI16LEAST(X)
20208#define SCNdLEAST16 __SCN16LEAST(d)
20209#define SCNiLEAST16 __SCN16LEAST(i)
20210#define SCNoLEAST16 __SCN16LEAST(o)
20211#define SCNuLEAST16 __SCN16LEAST(u)
20212#define SCNxLEAST16 __SCN16LEAST(x)
20213#define PRIdFAST16 __PRI16FAST(d)
20214#define PRIiFAST16 __PRI16FAST(i)
20215#define PRIoFAST16 __PRI16FAST(o)
20216#define PRIuFAST16 __PRI16FAST(u)
20217#define PRIxFAST16 __PRI16FAST(x)
20218#define PRIXFAST16 __PRI16FAST(X)
20219#define SCNdFAST16 __SCN16FAST(d)
20220#define SCNiFAST16 __SCN16FAST(i)
20221#define SCNoFAST16 __SCN16FAST(o)
20222#define SCNuFAST16 __SCN16FAST(u)
20223#define SCNxFAST16 __SCN16FAST(x)
20224#define __PRI32(x) __INT32 __STRINGIFY(x)
20225#define __SCN32(x) __INT32 __STRINGIFY(x)
20226#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x)
20227#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x)
20228#define __PRI32FAST(x) __FAST32 __STRINGIFY(x)
20229#define __SCN32FAST(x) __FAST32 __STRINGIFY(x)
20230#define PRId32 __PRI32(d)
20231#define PRIi32 __PRI32(i)
20232#define PRIo32 __PRI32(o)
20233#define PRIu32 __PRI32(u)
20234#define PRIx32 __PRI32(x)
20235#define PRIX32 __PRI32(X)
20236#define SCNd32 __SCN32(d)
20237#define SCNi32 __SCN32(i)
20238#define SCNo32 __SCN32(o)
20239#define SCNu32 __SCN32(u)
20240#define SCNx32 __SCN32(x)
20241#define PRIdLEAST32 __PRI32LEAST(d)
20242#define PRIiLEAST32 __PRI32LEAST(i)
20243#define PRIoLEAST32 __PRI32LEAST(o)
20244#define PRIuLEAST32 __PRI32LEAST(u)
20245#define PRIxLEAST32 __PRI32LEAST(x)
20246#define PRIXLEAST32 __PRI32LEAST(X)
20247#define SCNdLEAST32 __SCN32LEAST(d)
20248#define SCNiLEAST32 __SCN32LEAST(i)
20249#define SCNoLEAST32 __SCN32LEAST(o)
20250#define SCNuLEAST32 __SCN32LEAST(u)
20251#define SCNxLEAST32 __SCN32LEAST(x)
20252#define PRIdFAST32 __PRI32FAST(d)
20253#define PRIiFAST32 __PRI32FAST(i)
20254#define PRIoFAST32 __PRI32FAST(o)
20255#define PRIuFAST32 __PRI32FAST(u)
20256#define PRIxFAST32 __PRI32FAST(x)
20257#define PRIXFAST32 __PRI32FAST(X)
20258#define SCNdFAST32 __SCN32FAST(d)
20259#define SCNiFAST32 __SCN32FAST(i)
20260#define SCNoFAST32 __SCN32FAST(o)
20261#define SCNuFAST32 __SCN32FAST(u)
20262#define SCNxFAST32 __SCN32FAST(x)
20263#define __PRI64(x) __INT64 __STRINGIFY(x)
20264#define __SCN64(x) __INT64 __STRINGIFY(x)
20265#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x)
20266#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x)
20267#define __PRI64FAST(x) __FAST64 __STRINGIFY(x)
20268#define __SCN64FAST(x) __FAST64 __STRINGIFY(x)
20269#define PRId64 __PRI64(d)
20270#define PRIi64 __PRI64(i)
20271#define PRIo64 __PRI64(o)
20272#define PRIu64 __PRI64(u)
20273#define PRIx64 __PRI64(x)
20274#define PRIX64 __PRI64(X)
20275#define SCNd64 __SCN64(d)
20276#define SCNi64 __SCN64(i)
20277#define SCNo64 __SCN64(o)
20278#define SCNu64 __SCN64(u)
20279#define SCNx64 __SCN64(x)
20280#define PRIdLEAST64 __PRI64LEAST(d)
20281#define PRIiLEAST64 __PRI64LEAST(i)
20282#define PRIoLEAST64 __PRI64LEAST(o)
20283#define PRIuLEAST64 __PRI64LEAST(u)
20284#define PRIxLEAST64 __PRI64LEAST(x)
20285#define PRIXLEAST64 __PRI64LEAST(X)
20286#define SCNdLEAST64 __SCN64LEAST(d)
20287#define SCNiLEAST64 __SCN64LEAST(i)
20288#define SCNoLEAST64 __SCN64LEAST(o)
20289#define SCNuLEAST64 __SCN64LEAST(u)
20290#define SCNxLEAST64 __SCN64LEAST(x)
20291#define PRIdFAST64 __PRI64FAST(d)
20292#define PRIiFAST64 __PRI64FAST(i)
20293#define PRIoFAST64 __PRI64FAST(o)
20294#define PRIuFAST64 __PRI64FAST(u)
20295#define PRIxFAST64 __PRI64FAST(x)
20296#define PRIXFAST64 __PRI64FAST(X)
20297#define SCNdFAST64 __SCN64FAST(d)
20298#define SCNiFAST64 __SCN64FAST(i)
20299#define SCNoFAST64 __SCN64FAST(o)
20300#define SCNuFAST64 __SCN64FAST(u)
20301#define SCNxFAST64 __SCN64FAST(x)
20302#define __PRIMAX(x) __STRINGIFY(l ##x)
20303#define __SCNMAX(x) __STRINGIFY(l ##x)
20304#define PRIdMAX __PRIMAX(d)
20305#define PRIiMAX __PRIMAX(i)
20306#define PRIoMAX __PRIMAX(o)
20307#define PRIuMAX __PRIMAX(u)
20308#define PRIxMAX __PRIMAX(x)
20309#define PRIXMAX __PRIMAX(X)
20310#define SCNdMAX __SCNMAX(d)
20311#define SCNiMAX __SCNMAX(i)
20312#define SCNoMAX __SCNMAX(o)
20313#define SCNuMAX __SCNMAX(u)
20314#define SCNxMAX __SCNMAX(x)
20315#define __PRIPTR(x) __STRINGIFY(l ##x)
20316#define __SCNPTR(x) __STRINGIFY(l ##x)
20317#define PRIdPTR __PRIPTR(d)
20318#define PRIiPTR __PRIPTR(i)
20319#define PRIoPTR __PRIPTR(o)
20320#define PRIuPTR __PRIPTR(u)
20321#define PRIxPTR __PRIPTR(x)
20322#define PRIXPTR __PRIPTR(X)
20323#define SCNdPTR __SCNPTR(d)
20324#define SCNiPTR __SCNPTR(i)
20325#define SCNoPTR __SCNPTR(o)
20326#define SCNuPTR __SCNPTR(u)
20327#define SCNxPTR __SCNPTR(x)
20328#define _STDALIGN_H
20329#define alignas _Alignas
20330#define alignof _Alignof
20331#define __alignas_is_defined 1
20332#define __alignof_is_defined 1
20333#define _UNISTD_H_
20334#define _SYS_UNISTD_H
20335#define __need_size_t
20336#define __need_ptrdiff_t
20337#undef __need_ptrdiff_t
20338#undef __need_size_t
20339#undef __need_wchar_t
20340#undef NULL
20341#define NULL ((void *)0)
20342#undef __need_NULL
20343#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20344#define F_ULOCK 0
20345#define F_LOCK 1
20346#define F_TLOCK 2
20347#define F_TEST 3
20348#define __UNISTD_GETOPT__
20349#define __GETOPT_H__
20350#undef __UNISTD_GETOPT__
20351#define F_OK 0
20352#define R_OK 4
20353#define W_OK 2
20354#define X_OK 1
20355#define SEEK_SET 0
20356#define SEEK_CUR 1
20357#define SEEK_END 2
20358#define STDIN_FILENO 0
20359#define STDOUT_FILENO 1
20360#define STDERR_FILENO 2
20361#define _SC_ARG_MAX 0
20362#define _SC_CHILD_MAX 1
20363#define _SC_CLK_TCK 2
20364#define _SC_NGROUPS_MAX 3
20365#define _SC_OPEN_MAX 4
20366#define _SC_JOB_CONTROL 5
20367#define _SC_SAVED_IDS 6
20368#define _SC_VERSION 7
20369#define _SC_PAGESIZE 8
20370#define _SC_PAGE_SIZE _SC_PAGESIZE
20371#define _SC_NPROCESSORS_CONF 9
20372#define _SC_NPROCESSORS_ONLN 10
20373#define _SC_PHYS_PAGES 11
20374#define _SC_AVPHYS_PAGES 12
20375#define _SC_MQ_OPEN_MAX 13
20376#define _SC_MQ_PRIO_MAX 14
20377#define _SC_RTSIG_MAX 15
20378#define _SC_SEM_NSEMS_MAX 16
20379#define _SC_SEM_VALUE_MAX 17
20380#define _SC_SIGQUEUE_MAX 18
20381#define _SC_TIMER_MAX 19
20382#define _SC_TZNAME_MAX 20
20383#define _SC_ASYNCHRONOUS_IO 21
20384#define _SC_FSYNC 22
20385#define _SC_MAPPED_FILES 23
20386#define _SC_MEMLOCK 24
20387#define _SC_MEMLOCK_RANGE 25
20388#define _SC_MEMORY_PROTECTION 26
20389#define _SC_MESSAGE_PASSING 27
20390#define _SC_PRIORITIZED_IO 28
20391#define _SC_REALTIME_SIGNALS 29
20392#define _SC_SEMAPHORES 30
20393#define _SC_SHARED_MEMORY_OBJECTS 31
20394#define _SC_SYNCHRONIZED_IO 32
20395#define _SC_TIMERS 33
20396#define _SC_AIO_LISTIO_MAX 34
20397#define _SC_AIO_MAX 35
20398#define _SC_AIO_PRIO_DELTA_MAX 36
20399#define _SC_DELAYTIMER_MAX 37
20400#define _SC_THREAD_KEYS_MAX 38
20401#define _SC_THREAD_STACK_MIN 39
20402#define _SC_THREAD_THREADS_MAX 40
20403#define _SC_TTY_NAME_MAX 41
20404#define _SC_THREADS 42
20405#define _SC_THREAD_ATTR_STACKADDR 43
20406#define _SC_THREAD_ATTR_STACKSIZE 44
20407#define _SC_THREAD_PRIORITY_SCHEDULING 45
20408#define _SC_THREAD_PRIO_INHERIT 46
20409#define _SC_THREAD_PRIO_PROTECT 47
20410#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
20411#define _SC_THREAD_PROCESS_SHARED 48
20412#define _SC_THREAD_SAFE_FUNCTIONS 49
20413#define _SC_GETGR_R_SIZE_MAX 50
20414#define _SC_GETPW_R_SIZE_MAX 51
20415#define _SC_LOGIN_NAME_MAX 52
20416#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
20417#define _SC_ADVISORY_INFO 54
20418#define _SC_ATEXIT_MAX 55
20419#define _SC_BARRIERS 56
20420#define _SC_BC_BASE_MAX 57
20421#define _SC_BC_DIM_MAX 58
20422#define _SC_BC_SCALE_MAX 59
20423#define _SC_BC_STRING_MAX 60
20424#define _SC_CLOCK_SELECTION 61
20425#define _SC_COLL_WEIGHTS_MAX 62
20426#define _SC_CPUTIME 63
20427#define _SC_EXPR_NEST_MAX 64
20428#define _SC_HOST_NAME_MAX 65
20429#define _SC_IOV_MAX 66
20430#define _SC_IPV6 67
20431#define _SC_LINE_MAX 68
20432#define _SC_MONOTONIC_CLOCK 69
20433#define _SC_RAW_SOCKETS 70
20434#define _SC_READER_WRITER_LOCKS 71
20435#define _SC_REGEXP 72
20436#define _SC_RE_DUP_MAX 73
20437#define _SC_SHELL 74
20438#define _SC_SPAWN 75
20439#define _SC_SPIN_LOCKS 76
20440#define _SC_SPORADIC_SERVER 77
20441#define _SC_SS_REPL_MAX 78
20442#define _SC_SYMLOOP_MAX 79
20443#define _SC_THREAD_CPUTIME 80
20444#define _SC_THREAD_SPORADIC_SERVER 81
20445#define _SC_TIMEOUTS 82
20446#define _SC_TRACE 83
20447#define _SC_TRACE_EVENT_FILTER 84
20448#define _SC_TRACE_EVENT_NAME_MAX 85
20449#define _SC_TRACE_INHERIT 86
20450#define _SC_TRACE_LOG 87
20451#define _SC_TRACE_NAME_MAX 88
20452#define _SC_TRACE_SYS_MAX 89
20453#define _SC_TRACE_USER_EVENT_MAX 90
20454#define _SC_TYPED_MEMORY_OBJECTS 91
20455#define _SC_V7_ILP32_OFF32 92
20456#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
20457#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
20458#define _SC_V7_ILP32_OFFBIG 93
20459#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
20460#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
20461#define _SC_V7_LP64_OFF64 94
20462#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
20463#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
20464#define _SC_V7_LPBIG_OFFBIG 95
20465#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
20466#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
20467#define _SC_XOPEN_CRYPT 96
20468#define _SC_XOPEN_ENH_I18N 97
20469#define _SC_XOPEN_LEGACY 98
20470#define _SC_XOPEN_REALTIME 99
20471#define _SC_STREAM_MAX 100
20472#define _SC_PRIORITY_SCHEDULING 101
20473#define _SC_XOPEN_REALTIME_THREADS 102
20474#define _SC_XOPEN_SHM 103
20475#define _SC_XOPEN_STREAMS 104
20476#define _SC_XOPEN_UNIX 105
20477#define _SC_XOPEN_VERSION 106
20478#define _SC_2_CHAR_TERM 107
20479#define _SC_2_C_BIND 108
20480#define _SC_2_C_DEV 109
20481#define _SC_2_FORT_DEV 110
20482#define _SC_2_FORT_RUN 111
20483#define _SC_2_LOCALEDEF 112
20484#define _SC_2_PBS 113
20485#define _SC_2_PBS_ACCOUNTING 114
20486#define _SC_2_PBS_CHECKPOINT 115
20487#define _SC_2_PBS_LOCATE 116
20488#define _SC_2_PBS_MESSAGE 117
20489#define _SC_2_PBS_TRACK 118
20490#define _SC_2_SW_DEV 119
20491#define _SC_2_UPE 120
20492#define _SC_2_VERSION 121
20493#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
20494#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
20495#define _SC_XOPEN_UUCP 124
20496#define _SC_LEVEL1_ICACHE_SIZE 125
20497#define _SC_LEVEL1_ICACHE_ASSOC 126
20498#define _SC_LEVEL1_ICACHE_LINESIZE 127
20499#define _SC_LEVEL1_DCACHE_SIZE 128
20500#define _SC_LEVEL1_DCACHE_ASSOC 129
20501#define _SC_LEVEL1_DCACHE_LINESIZE 130
20502#define _SC_LEVEL2_CACHE_SIZE 131
20503#define _SC_LEVEL2_CACHE_ASSOC 132
20504#define _SC_LEVEL2_CACHE_LINESIZE 133
20505#define _SC_LEVEL3_CACHE_SIZE 134
20506#define _SC_LEVEL3_CACHE_ASSOC 135
20507#define _SC_LEVEL3_CACHE_LINESIZE 136
20508#define _SC_LEVEL4_CACHE_SIZE 137
20509#define _SC_LEVEL4_CACHE_ASSOC 138
20510#define _SC_LEVEL4_CACHE_LINESIZE 139
20511#define _SC_POSIX_26_VERSION 140
20512#define _PC_LINK_MAX 0
20513#define _PC_MAX_CANON 1
20514#define _PC_MAX_INPUT 2
20515#define _PC_NAME_MAX 3
20516#define _PC_PATH_MAX 4
20517#define _PC_PIPE_BUF 5
20518#define _PC_CHOWN_RESTRICTED 6
20519#define _PC_NO_TRUNC 7
20520#define _PC_VDISABLE 8
20521#define _PC_ASYNC_IO 9
20522#define _PC_PRIO_IO 10
20523#define _PC_SYNC_IO 11
20524#define _PC_FILESIZEBITS 12
20525#define _PC_2_SYMLINKS 13
20526#define _PC_SYMLINK_MAX 14
20527#define _PC_ALLOC_SIZE_MIN 15
20528#define _PC_REC_INCR_XFER_SIZE 16
20529#define _PC_REC_MAX_XFER_SIZE 17
20530#define _PC_REC_MIN_XFER_SIZE 18
20531#define _PC_REC_XFER_ALIGN 19
20532#define _PC_TIMESTAMP_RESOLUTION 20
20533#define _PC_POSIX_PERMISSIONS 90
20534#define _PC_POSIX_SECURITY 91
20535#define _PC_CASE_INSENSITIVE 92
20536#define _CS_PATH 0
20537#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
20538#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
20539#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
20540#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
20541#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
20542#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
20543#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
20544#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
20545#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
20546#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
20547#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
20548#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
20549#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
20550#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
20551#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20552#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20553#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
20554#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20555#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20556#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
20557#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
20558#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20559#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20560#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
20561#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20562#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20563#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
20564#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20565#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20566#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
20567#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
20568#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20569#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20570#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
20571#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20572#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20573#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
20574#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20575#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20576#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
20577#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
20578#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20579#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20580#define _CS_POSIX_V7_THREADS_CFLAGS 18
20581#define _CS_POSIX_V7_THREADS_LDFLAGS 19
20582#define _CS_V7_ENV 20
20583#define _CS_V6_ENV _CS_V7_ENV
20584#define _CS_LFS_CFLAGS 21
20585#define _CS_LFS_LDFLAGS 22
20586#define _CS_LFS_LIBS 23
20587#define _CS_LFS_LINTFLAGS 24
20588#define _SSP_UNISTD_H_
20589#define RBIMPL_DLLEXPORT_H
20590#undef RUBY_EXTERN
20591#define RUBY_EXTERN extern
20592#define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
20593#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN
20594#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END
20595#define MJIT_STATIC static
20596#define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
20597#define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END
20598#define RBIMPL_XMALLOC_H
20599#define RBIMPL_ATTR_ALLOC_SIZE_H
20600#define RBIMPL_HAS_ATTRIBUTE_H
20601#define RBIMPL_HAVE___HAS_ATTRIBUTE 1
20602#define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_)
20603#define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple))
20604#define RBIMPL_ATTR_NODISCARD_H
20605#define RBIMPL_HAS_C_ATTRIBUTE_H
20606#define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)
20607#define RBIMPL_HAS_CPP_ATTRIBUTE_H
20608#define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)
20609#define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
20610#define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
20611#define RBIMPL_ATTR_NOEXCEPT_H
20612#define RBIMPL_HAS_FEATURE_H
20613#define RBIMPL_HAS_FEATURE(_) __has_feature(_)
20614#define RBIMPL_ATTR_NOEXCEPT(_)
20615#define RBIMPL_ATTR_RESTRICT_H
20616#define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__))
20617#define RBIMPL_ATTR_RETURNS_NONNULL_H
20618#define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__))
20619#define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
20620#define xmalloc ruby_xmalloc
20621#define xmalloc2 ruby_xmalloc2
20622#define xcalloc ruby_xcalloc
20623#define xrealloc ruby_xrealloc
20624#define xrealloc2 ruby_xrealloc2
20625#define xfree ruby_xfree
20626#pragma GCC visibility push(default)
20627#pragma GCC visibility pop
20628#define RUBY_BACKWARD2_ASSUME_H
20629#define RBIMPL_ASSUME_H
20630#define RBIMPL_CAST_H
20631#define RBIMPL_HAS_WARNING_H
20632#define RBIMPL_HAS_WARNING(_) 0
20633#define RBIMPL_WARNING_PUSH_H
20634#define RBIMPL_WARNING_PRAGMA0(x) _Pragma(#x)
20635#define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(GCC diagnostic x)
20636#define RBIMPL_WARNING_PRAGMA2(x,y) RBIMPL_WARNING_PRAGMA1(x #y)
20637#define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push)
20638#define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop)
20639#define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag)
20640#define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)
20641#define RBIMPL_CAST(expr) (expr)
20642#define RBIMPL_HAS_BUILTIN_H
20643#define RBIMPL_HAVE___HAS_BUILTIN 1
20644#define RBIMPL_HAS_BUILTIN(_) __has_builtin(_)
20645#define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()
20646#define RBIMPL_UNREACHABLE __builtin_unreachable
20647#define RBIMPL_ASSUME(_) (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
20648#define ASSUME RBIMPL_ASSUME
20649#define UNREACHABLE RBIMPL_UNREACHABLE()
20650#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN
20651#define RB_LIKELY(x) (__builtin_expect(!!(x), 1))
20652#define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
20653#define RUBY_BACKWARD2_ATTRIBUTES_H
20654#define RBIMPL_ATTR_CONST_H
20655#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H
20656#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _)
20657#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20658#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20659#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20660#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20661#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918)
20662#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20663#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20664#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0)
20665#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20666#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0)
20667#undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow
20668#define RBIMPL_ATTR_CONST() __attribute__((__const__))
20669#define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST()
20670#define RBIMPL_ATTR_DEPRECATED_H
20671#define RBIMPL_HAS_EXTENSION_H
20672#define RBIMPL_HAS_EXTENSION(_) __has_extension(_)
20673#define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))
20674#define RBIMPL_ATTR_DEPRECATED_EXT(msg)
20675#define RBIMPL_ATTR_ERROR_H
20676#define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg))
20677#define RBIMPL_ATTR_FORCEINLINE_H
20678#define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline
20679#define RBIMPL_ATTR_FORMAT_H
20680#define RBIMPL_ATTR_FORMAT(x,y,z) __attribute__((__format__(x, y, z)))
20681#define RBIMPL_PRINTF_FORMAT __printf__
20682#define RBIMPL_ATTR_MAYBE_UNUSED_H
20683#define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
20684#define RBIMPL_ATTR_NOINLINE_H
20685#define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__))
20686#define RBIMPL_ATTR_NONNULL_H
20687#define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list))
20688#define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING
20689#define RBIMPL_ATTR_NORETURN_H
20690#define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__))
20691#define RBIMPL_ATTR_PURE_H
20692#define RUBY_ASSERT_H
20693#define RBIMPL_RUBY_DEBUG 0
20694#define RBIMPL_NDEBUG 0
20695#undef RUBY_DEBUG
20696#undef RUBY_NDEBUG
20697#undef NDEBUG
20698#define RUBY_DEBUG 0
20699#define RUBY_NDEBUG 1
20700#define NDEBUG
20701#undef RBIMPL_NDEBUG
20702#undef RBIMPL_RUBY_DEBUG
20703#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)
20704#pragma GCC visibility push(default)
20705#pragma GCC visibility pop
20706#define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
20707#define RUBY_ASSERT_FAIL(mesg) rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
20708#define RUBY_ASSERT_MESG(expr,mesg) (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
20709#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
20710#define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
20711#define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
20712#define RUBY_ASSERT_MESG_WHEN(cond,expr,mesg) ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
20713#define RUBY_ASSERT_WHEN(cond,expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
20714#define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
20715#define RBIMPL_ATTR_PURE() __attribute__((__pure__))
20716#define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE()
20717#define RBIMPL_ATTR_WARNING_H
20718#define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg))
20719#undef CONSTFUNC
20720#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x
20721#undef PUREFUNC
20722#define PUREFUNC(x) RBIMPL_ATTR_PURE() x
20723#undef DEPRECATED
20724#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x
20725#undef DEPRECATED_BY
20726#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " #n)) x
20727#undef DEPRECATED_TYPE
20728#define DEPRECATED_TYPE(mesg,decl) _Pragma("message \"DEPRECATED_TYPE is deprecated\""); decl RBIMPL_ATTR_DEPRECATED(mseg)
20729#undef RUBY_CXX_DEPRECATED
20730#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))
20731#undef NOINLINE
20732#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x
20733#undef ERRORFUNC
20734#define ERRORFUNC(mesg,x) RBIMPL_ATTR_ERROR(mesg) x
20735#define HAVE_ATTRIBUTE_ERRORFUNC 1
20736#undef WARNINGFUNC
20737#define WARNINGFUNC(mesg,x) RBIMPL_ATTR_WARNING(mesg) x
20738#define HAVE_ATTRIBUTE_WARNINGFUNC 1
20739#undef COLDFUNC
20740#define PRINTF_ARGS(decl,string_index,first_to_check) RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) decl
20741#undef RUBY_ATTR_ALLOC_SIZE
20742#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE
20743#undef RUBY_ATTR_MALLOC
20744#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()
20745#undef RUBY_ATTR_RETURNS_NONNULL
20746#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()
20747#define RUBY_ALIAS_FUNCTION(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
20748#undef RUBY_FUNC_NONNULL
20749#define RUBY_FUNC_NONNULL(n,x) RBIMPL_ATTR_NONNULL(n) x
20750#undef NORETURN
20751#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
20752#define NORETURN_STYLE_NEW
20753#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
20754#undef RB_UNUSED_VAR
20755#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()
20756#define RUBY_BACKWARD2_BOOL_H
20757#define RBIMPL_STDBOOL_H
20758#define _STDBOOL_H
20759#define bool _Bool
20760#define true 1
20761#define false 0
20762#define __bool_true_false_are_defined 1
20763#define FALSE false
20764#define TRUE true
20765#define RUBY_BACKWARD2_LONG_LONG_H
20766#define HAVE_TRUE_LONG_LONG 1
20767#define LONG_LONG long long
20768#define RUBY_BACKWARD2_STDALIGN_H
20769#define RBIMPL_STDALIGN_H
20770#define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))
20771#define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T))
20772#undef RUBY_ALIGNAS
20773#undef RUBY_ALIGNOF
20774#define RUBY_ALIGNAS RBIMPL_ALIGNAS
20775#define RUBY_ALIGNOF RBIMPL_ALIGNOF
20776#define RUBY_BACKWARD2_STDARG_H
20777#undef _
20778#define _(args) args
20779#undef __
20780#define __(args) args
20781#define ANYARGS
20782#define RBIMPL_DOSISH_H
20783#undef _WIN32
20784#define PATH_SEP ":"
20785#define PATH_SEP_CHAR PATH_SEP[0]
20786#define PATH_ENV "PATH"
20787#define CASEFOLD_FILESYSTEM 0
20788#define RUBY_MISSING_H 1
20789#define _MATH_H_
20790#define _M_LN2 0.693147180559945309417
20791#define HUGE_VAL (__builtin_huge_val())
20792#define HUGE_VALF (__builtin_huge_valf())
20793#define HUGE_VALL (__builtin_huge_vall())
20794#define INFINITY (__builtin_inff())
20795#define NAN (__builtin_nanf(""))
20796#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
20797#define __TMP_FLT_EVAL_METHOD
20798#undef FLT_EVAL_METHOD
20799#define FP_NAN 0
20800#define FP_INFINITE 1
20801#define FP_ZERO 2
20802#define FP_SUBNORMAL 3
20803#define FP_NORMAL 4
20804#define FP_ILOGB0 (-__INT_MAX__)
20805#define FP_ILOGBNAN __INT_MAX__
20806#define MATH_ERRNO 1
20807#define MATH_ERREXCEPT 2
20808#define _MATH_ERRHANDLING_ERRNO MATH_ERRNO
20809#define _MATH_ERRHANDLING_ERREXCEPT MATH_ERREXCEPT
20810#define math_errhandling (_MATH_ERRHANDLING_ERRNO | _MATH_ERRHANDLING_ERREXCEPT)
20811#define fpclassify(__x) (__builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x))
20812#define isfinite(__x) (__builtin_isfinite (__x))
20813#define isinf(__x) (__builtin_isinf_sign (__x))
20814#define isnan(__x) (__builtin_isnan (__x))
20815#define isnormal(__x) (__builtin_isnormal (__x))
20816#define signbit(__x) ((sizeof(__x) == sizeof(float)) ? __builtin_signbitf(__x) : (sizeof(__x) == sizeof(double)) ? __builtin_signbit (__x) : __builtin_signbitl(__x))
20817#define isgreater(__x,__y) (__builtin_isgreater (__x, __y))
20818#define isgreaterequal(__x,__y) (__builtin_isgreaterequal (__x, __y))
20819#define isless(__x,__y) (__builtin_isless (__x, __y))
20820#define islessequal(__x,__y) (__builtin_islessequal (__x, __y))
20821#define islessgreater(__x,__y) (__builtin_islessgreater (__x, __y))
20822#define isunordered(__x,__y) (__builtin_isunordered (__x, __y))
20823#define log2(x) (log (x) / _M_LN2)
20824#define signgam (*__signgam())
20825#define __signgam_r(ptr) _REENT_SIGNGAM(ptr)
20826#define MAXFLOAT 3.40282347e+38F
20827#define M_E 2.7182818284590452354
20828#define M_LOG2E 1.4426950408889634074
20829#define M_LOG10E 0.43429448190325182765
20830#define M_LN2 _M_LN2
20831#define M_LN10 2.30258509299404568402
20832#define M_PI 3.14159265358979323846
20833#define M_PI_2 1.57079632679489661923
20834#define M_PI_4 0.78539816339744830962
20835#define M_1_PI 0.31830988618379067154
20836#define M_2_PI 0.63661977236758134308
20837#define M_2_SQRTPI 1.12837916709551257390
20838#define M_SQRT2 1.41421356237309504880
20839#define M_SQRT1_2 0.70710678118654752440
20840#define M_TWOPI (M_PI * 2.0)
20841#define M_3PI_4 2.3561944901923448370E0
20842#define M_SQRTPI 1.77245385090551602792981
20843#define M_LN2LO 1.9082149292705877000E-10
20844#define M_LN2HI 6.9314718036912381649E-1
20845#define M_SQRT3 1.73205080756887719000
20846#define M_IVLN10 0.43429448190325182765
20847#define M_LOG2_E _M_LN2
20848#define M_INVLN2 1.4426950408889633870E0
20849#define _SYS_TIME_H_
20850#define DST_NONE 0
20851#define DST_USA 1
20852#define DST_AUST 2
20853#define DST_WET 3
20854#define DST_MET 4
20855#define DST_EET 5
20856#define DST_CAN 6
20857#define bintime_clear(a) ((a)->sec = (a)->frac = 0)
20858#define bintime_isset(a) ((a)->sec || (a)->frac)
20859#define bintime_cmp(a,b,cmp) (((a)->sec == (b)->sec) ? ((a)->frac cmp (b)->frac) : ((a)->sec cmp (b)->sec))
20860#define SBT_1S ((sbintime_t)1 << 32)
20861#define SBT_1M (SBT_1S * 60)
20862#define SBT_1MS (SBT_1S / 1000)
20863#define SBT_1US (SBT_1S / 1000000)
20864#define SBT_1NS (SBT_1S / 1000000000)
20865#define SBT_MAX 0x7fffffffffffffffLL
20866#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
20867#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
20868#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))
20869#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)
20870#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)
20871#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
20872#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
20873#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))
20874#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)
20875#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)
20876#define ITIMER_REAL 0
20877#define ITIMER_VIRTUAL 1
20878#define ITIMER_PROF 2
20879#define _IEEE_FP_H_
20880#define _FLOAT_H___
20881#undef FLT_RADIX
20882#define FLT_RADIX __FLT_RADIX__
20883#undef FLT_MANT_DIG
20884#undef DBL_MANT_DIG
20885#undef LDBL_MANT_DIG
20886#define FLT_MANT_DIG __FLT_MANT_DIG__
20887#define DBL_MANT_DIG __DBL_MANT_DIG__
20888#define LDBL_MANT_DIG __LDBL_MANT_DIG__
20889#undef FLT_DIG
20890#undef DBL_DIG
20891#undef LDBL_DIG
20892#define FLT_DIG __FLT_DIG__
20893#define DBL_DIG __DBL_DIG__
20894#define LDBL_DIG __LDBL_DIG__
20895#undef FLT_MIN_EXP
20896#undef DBL_MIN_EXP
20897#undef LDBL_MIN_EXP
20898#define FLT_MIN_EXP __FLT_MIN_EXP__
20899#define DBL_MIN_EXP __DBL_MIN_EXP__
20900#define LDBL_MIN_EXP __LDBL_MIN_EXP__
20901#undef FLT_MIN_10_EXP
20902#undef DBL_MIN_10_EXP
20903#undef LDBL_MIN_10_EXP
20904#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
20905#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
20906#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
20907#undef FLT_MAX_EXP
20908#undef DBL_MAX_EXP
20909#undef LDBL_MAX_EXP
20910#define FLT_MAX_EXP __FLT_MAX_EXP__
20911#define DBL_MAX_EXP __DBL_MAX_EXP__
20912#define LDBL_MAX_EXP __LDBL_MAX_EXP__
20913#undef FLT_MAX_10_EXP
20914#undef DBL_MAX_10_EXP
20915#undef LDBL_MAX_10_EXP
20916#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
20917#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
20918#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
20919#undef FLT_MAX
20920#undef DBL_MAX
20921#undef LDBL_MAX
20922#define FLT_MAX __FLT_MAX__
20923#define DBL_MAX __DBL_MAX__
20924#define LDBL_MAX __LDBL_MAX__
20925#undef FLT_EPSILON
20926#undef DBL_EPSILON
20927#undef LDBL_EPSILON
20928#define FLT_EPSILON __FLT_EPSILON__
20929#define DBL_EPSILON __DBL_EPSILON__
20930#define LDBL_EPSILON __LDBL_EPSILON__
20931#undef FLT_MIN
20932#undef DBL_MIN
20933#undef LDBL_MIN
20934#define FLT_MIN __FLT_MIN__
20935#define DBL_MIN __DBL_MIN__
20936#define LDBL_MIN __LDBL_MIN__
20937#undef FLT_ROUNDS
20938#define FLT_ROUNDS 1
20939#undef FLT_EVAL_METHOD
20940#define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__
20941#undef DECIMAL_DIG
20942#define DECIMAL_DIG __DECIMAL_DIG__
20943#undef FLT_DECIMAL_DIG
20944#undef DBL_DECIMAL_DIG
20945#undef LDBL_DECIMAL_DIG
20946#define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
20947#define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
20948#define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
20949#undef FLT_HAS_SUBNORM
20950#undef DBL_HAS_SUBNORM
20951#undef LDBL_HAS_SUBNORM
20952#define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
20953#define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
20954#define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
20955#undef FLT_TRUE_MIN
20956#undef DBL_TRUE_MIN
20957#undef LDBL_TRUE_MIN
20958#define FLT_TRUE_MIN __FLT_DENORM_MIN__
20959#define DBL_TRUE_MIN __DBL_DENORM_MIN__
20960#define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
20961#define CR_DECIMAL_DIG __UINTMAX_MAX__
20962#undef FLT32_MANT_DIG
20963#define FLT32_MANT_DIG __FLT32_MANT_DIG__
20964#undef FLT32_DIG
20965#define FLT32_DIG __FLT32_DIG__
20966#undef FLT32_MIN_EXP
20967#define FLT32_MIN_EXP __FLT32_MIN_EXP__
20968#undef FLT32_MIN_10_EXP
20969#define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__
20970#undef FLT32_MAX_EXP
20971#define FLT32_MAX_EXP __FLT32_MAX_EXP__
20972#undef FLT32_MAX_10_EXP
20973#define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__
20974#undef FLT32_MAX
20975#define FLT32_MAX __FLT32_MAX__
20976#undef FLT32_EPSILON
20977#define FLT32_EPSILON __FLT32_EPSILON__
20978#undef FLT32_MIN
20979#define FLT32_MIN __FLT32_MIN__
20980#undef FLT32_DECIMAL_DIG
20981#define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__
20982#undef FLT32_TRUE_MIN
20983#define FLT32_TRUE_MIN __FLT32_DENORM_MIN__
20984#undef FLT64_MANT_DIG
20985#define FLT64_MANT_DIG __FLT64_MANT_DIG__
20986#undef FLT64_DIG
20987#define FLT64_DIG __FLT64_DIG__
20988#undef FLT64_MIN_EXP
20989#define FLT64_MIN_EXP __FLT64_MIN_EXP__
20990#undef FLT64_MIN_10_EXP
20991#define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__
20992#undef FLT64_MAX_EXP
20993#define FLT64_MAX_EXP __FLT64_MAX_EXP__
20994#undef FLT64_MAX_10_EXP
20995#define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__
20996#undef FLT64_MAX
20997#define FLT64_MAX __FLT64_MAX__
20998#undef FLT64_EPSILON
20999#define FLT64_EPSILON __FLT64_EPSILON__
21000#undef FLT64_MIN
21001#define FLT64_MIN __FLT64_MIN__
21002#undef FLT64_DECIMAL_DIG
21003#define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__
21004#undef FLT64_TRUE_MIN
21005#define FLT64_TRUE_MIN __FLT64_DENORM_MIN__
21006#undef FLT128_MANT_DIG
21007#define FLT128_MANT_DIG __FLT128_MANT_DIG__
21008#undef FLT128_DIG
21009#define FLT128_DIG __FLT128_DIG__
21010#undef FLT128_MIN_EXP
21011#define FLT128_MIN_EXP __FLT128_MIN_EXP__
21012#undef FLT128_MIN_10_EXP
21013#define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__
21014#undef FLT128_MAX_EXP
21015#define FLT128_MAX_EXP __FLT128_MAX_EXP__
21016#undef FLT128_MAX_10_EXP
21017#define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__
21018#undef FLT128_MAX
21019#define FLT128_MAX __FLT128_MAX__
21020#undef FLT128_EPSILON
21021#define FLT128_EPSILON __FLT128_EPSILON__
21022#undef FLT128_MIN
21023#define FLT128_MIN __FLT128_MIN__
21024#undef FLT128_DECIMAL_DIG
21025#define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__
21026#undef FLT128_TRUE_MIN
21027#define FLT128_TRUE_MIN __FLT128_DENORM_MIN__
21028#undef FLT32X_MANT_DIG
21029#define FLT32X_MANT_DIG __FLT32X_MANT_DIG__
21030#undef FLT32X_DIG
21031#define FLT32X_DIG __FLT32X_DIG__
21032#undef FLT32X_MIN_EXP
21033#define FLT32X_MIN_EXP __FLT32X_MIN_EXP__
21034#undef FLT32X_MIN_10_EXP
21035#define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__
21036#undef FLT32X_MAX_EXP
21037#define FLT32X_MAX_EXP __FLT32X_MAX_EXP__
21038#undef FLT32X_MAX_10_EXP
21039#define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__
21040#undef FLT32X_MAX
21041#define FLT32X_MAX __FLT32X_MAX__
21042#undef FLT32X_EPSILON
21043#define FLT32X_EPSILON __FLT32X_EPSILON__
21044#undef FLT32X_MIN
21045#define FLT32X_MIN __FLT32X_MIN__
21046#undef FLT32X_DECIMAL_DIG
21047#define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__
21048#undef FLT32X_TRUE_MIN
21049#define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__
21050#undef FLT64X_MANT_DIG
21051#define FLT64X_MANT_DIG __FLT64X_MANT_DIG__
21052#undef FLT64X_DIG
21053#define FLT64X_DIG __FLT64X_DIG__
21054#undef FLT64X_MIN_EXP
21055#define FLT64X_MIN_EXP __FLT64X_MIN_EXP__
21056#undef FLT64X_MIN_10_EXP
21057#define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__
21058#undef FLT64X_MAX_EXP
21059#define FLT64X_MAX_EXP __FLT64X_MAX_EXP__
21060#undef FLT64X_MAX_10_EXP
21061#define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__
21062#undef FLT64X_MAX
21063#define FLT64X_MAX __FLT64X_MAX__
21064#undef FLT64X_EPSILON
21065#define FLT64X_EPSILON __FLT64X_EPSILON__
21066#undef FLT64X_MIN
21067#define FLT64X_MIN __FLT64X_MIN__
21068#undef FLT64X_DECIMAL_DIG
21069#define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__
21070#undef FLT64X_TRUE_MIN
21071#define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__
21072#undef DEC32_MANT_DIG
21073#undef DEC64_MANT_DIG
21074#undef DEC128_MANT_DIG
21075#define DEC32_MANT_DIG __DEC32_MANT_DIG__
21076#define DEC64_MANT_DIG __DEC64_MANT_DIG__
21077#define DEC128_MANT_DIG __DEC128_MANT_DIG__
21078#undef DEC32_MIN_EXP
21079#undef DEC64_MIN_EXP
21080#undef DEC128_MIN_EXP
21081#define DEC32_MIN_EXP __DEC32_MIN_EXP__
21082#define DEC64_MIN_EXP __DEC64_MIN_EXP__
21083#define DEC128_MIN_EXP __DEC128_MIN_EXP__
21084#undef DEC32_MAX_EXP
21085#undef DEC64_MAX_EXP
21086#undef DEC128_MAX_EXP
21087#define DEC32_MAX_EXP __DEC32_MAX_EXP__
21088#define DEC64_MAX_EXP __DEC64_MAX_EXP__
21089#define DEC128_MAX_EXP __DEC128_MAX_EXP__
21090#undef DEC32_MAX
21091#undef DEC64_MAX
21092#undef DEC128_MAX
21093#define DEC32_MAX __DEC32_MAX__
21094#define DEC64_MAX __DEC64_MAX__
21095#define DEC128_MAX __DEC128_MAX__
21096#undef DEC32_EPSILON
21097#undef DEC64_EPSILON
21098#undef DEC128_EPSILON
21099#define DEC32_EPSILON __DEC32_EPSILON__
21100#define DEC64_EPSILON __DEC64_EPSILON__
21101#define DEC128_EPSILON __DEC128_EPSILON__
21102#undef DEC32_MIN
21103#undef DEC64_MIN
21104#undef DEC128_MIN
21105#define DEC32_MIN __DEC32_MIN__
21106#define DEC64_MIN __DEC64_MIN__
21107#define DEC128_MIN __DEC128_MIN__
21108#undef DEC_EVAL_METHOD
21109#define DEC_EVAL_METHOD __DEC_EVAL_METHOD__
21110#undef DEC32_TRUE_MIN
21111#undef DEC64_TRUE_MIN
21112#undef DEC128_TRUE_MIN
21113#define DEC32_TRUE_MIN __DEC32_SUBNORMAL_MIN__
21114#define DEC64_TRUE_MIN __DEC64_SUBNORMAL_MIN__
21115#define DEC128_TRUE_MIN __DEC128_SUBNORMAL_MIN__
21116#define EXT_EXPBITS 15
21117#define EXT_FRACHBITS 32
21118#define EXT_FRACLBITS 32
21119#define __ieee_ext_field_type unsigned int
21120#define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1)
21121#define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1)
21122#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS)
21123#define FP_RN 0
21124#define FP_RM 1
21125#define FP_RP 2
21126#define FP_RZ 3
21127#define FP_X_INV 0x10
21128#define FP_X_DX 0x80
21129#define FP_X_OFL 0x04
21130#define FP_X_UFL 0x02
21131#define FP_X_IMP 0x01
21132#define FP_RDI_TOZ 0
21133#define FP_RDI_RD 1
21134#define __IEEE_DBL_EXPBIAS 1023
21135#define __IEEE_FLT_EXPBIAS 127
21136#define __IEEE_DBL_EXPLEN 11
21137#define __IEEE_FLT_EXPLEN 8
21138#define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1))
21139#define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1))
21140#define __IEEE_DBL_MAXPOWTWO ((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1))
21141#define __IEEE_FLT_MAXPOWTWO ((float)(1L << (32-8) - 1))
21142#define __IEEE_DBL_NAN_EXP 0x7ff
21143#define __IEEE_FLT_NAN_EXP 0xff
21144#pragma GCC visibility push(default)
21145#define HAVE_FINITE 1
21146#define finite(x) isfinite(x)
21147#pragma GCC visibility pop
21148#define RUBY
21149#define RB_GNUC_EXTENSION __extension__
21150#define RB_GNUC_EXTENSION_BLOCK(x) __extension__ ({ x; })
21151#define RUBY_MBCHAR_MAXSIZE INT_MAX
21152#define FLUSH_REGISTER_WINDOWS ((void)0)
21153#define RUBY_ABI_H
21154#define RBIMPL_ANYARGS_H
21155#define RBIMPL_ATTR_WEAKREF_H
21156#define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(#sym)))
21157#define RBIMPL_INTERN_CLASS_H
21158#define RBIMPL_VALUE_H
21159#define RBIMPL_STATIC_ASSERT_H
21160#undef assert
21161#define assert(__e) ((void)0)
21162#define static_assert _Static_assert
21163#define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
21164#define RBIMPL_STATIC_ASSERT(name,expr) RBIMPL_STATIC_ASSERT0(expr, #name ": " #expr)
21165#define RUBY_BACKWARD2_LIMITS_H
21166#define _GCC_LIMITS_H_
21167#define _GCC_NEXT_LIMITS_H
21168#define _FEATURES_H
21169#define _CYGWIN_LIMITS_H__
21170#define __AIO_LISTIO_MAX 32
21171#define __AIO_MAX 8
21172#define __AIO_PRIO_DELTA_MAX 0
21173#define __ARG_MAX 32000
21174#define __ATEXIT_MAX 32
21175#define __CHILD_MAX 256
21176#define __DELAYTIMER_MAX __INT_MAX__
21177#define __HOST_NAME_MAX 255
21178#define __IOV_MAX 1024
21179#define __LOGIN_NAME_MAX 256
21180#define __MQ_OPEN_MAX 256
21181#define __MQ_PRIO_MAX INT_MAX
21182#define __OPEN_MAX 3200
21183#define __PAGESIZE 65536
21184#define __PTHREAD_DESTRUCTOR_ITERATIONS 4
21185#define __PTHREAD_KEYS_MAX 1024
21186#define __PTHREAD_STACK_MIN 65536
21187#define __RTSIG_MAX 33
21188#define __SEM_VALUE_MAX 1147483648
21189#define __SIGQUEUE_MAX 32
21190#define __STREAM_MAX 20
21191#define __SYMLOOP_MAX 10
21192#define __TIMER_MAX 32
21193#define __TTY_NAME_MAX 32
21194#define __FILESIZEBITS 64
21195#define __LINK_MAX 1024
21196#define __MAX_CANON 255
21197#define __MAX_INPUT 255
21198#define __NAME_MAX 255
21199#define __PATH_MAX 4096
21200#define __PIPE_BUF 4096
21201#define _LIMITS_H___
21202#define _MACH_MACHLIMITS_H_
21203#undef CHAR_BIT
21204#define CHAR_BIT __CHAR_BIT__
21205#undef LONG_BIT
21206#define LONG_BIT (__SIZEOF_LONG__ * __CHAR_BIT__)
21207#undef WORD_BIT
21208#define WORD_BIT (__SIZEOF_INT__ * __CHAR_BIT__)
21209#define MB_LEN_MAX 8
21210#undef SCHAR_MIN
21211#define SCHAR_MIN (-128)
21212#undef SCHAR_MAX
21213#define SCHAR_MAX 127
21214#undef UCHAR_MAX
21215#define UCHAR_MAX 255
21216#undef CHAR_MIN
21217#define CHAR_MIN (-128)
21218#undef CHAR_MAX
21219#define CHAR_MAX 127
21220#undef SHRT_MIN
21221#define SHRT_MIN (-32768)
21222#undef SHRT_MAX
21223#define SHRT_MAX 32767
21224#undef USHRT_MAX
21225#define USHRT_MAX 65535
21226#undef INT_MIN
21227#define INT_MIN (-INT_MAX-1)
21228#undef INT_MAX
21229#define INT_MAX __INT_MAX__
21230#undef UINT_MAX
21231#define UINT_MAX (INT_MAX * 2U + 1)
21232#undef LONG_MIN
21233#define LONG_MIN (-LONG_MAX-1L)
21234#undef LONG_MAX
21235#define LONG_MAX __LONG_MAX__
21236#undef ULONG_MAX
21237#define ULONG_MAX (LONG_MAX * 2UL + 1)
21238#undef LONG_LONG_MIN
21239#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
21240#undef LONG_LONG_MAX
21241#define LONG_LONG_MAX __LONG_LONG_MAX__
21242#undef ULONG_LONG_MAX
21243#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
21244#undef LLONG_MIN
21245#define LLONG_MIN (-LLONG_MAX-1)
21246#undef LLONG_MAX
21247#define LLONG_MAX __LONG_LONG_MAX__
21248#undef ULLONG_MAX
21249#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
21250#undef SSIZE_MAX
21251#define SSIZE_MAX (__LONG_MAX__)
21252#define AIO_LISTIO_MAX __AIO_LISTIO_MAX
21253#define AIO_MAX __AIO_MAX
21254#define AIO_PRIO_DELTA_MAX __AIO_PRIO_DELTA_MAX
21255#undef ARG_MAX
21256#define ARG_MAX __ARG_MAX
21257#undef ATEXIT_MAX
21258#define ATEXIT_MAX __ATEXIT_MAX
21259#undef CHILD_MAX
21260#define CHILD_MAX __CHILD_MAX
21261#undef DELAYTIMER_MAX
21262#define DELAYTIMER_MAX __DELAYTIMER_MAX
21263#undef HOST_NAME_MAX
21264#define HOST_NAME_MAX __HOST_NAME_MAX
21265#undef IOV_MAX
21266#define IOV_MAX __IOV_MAX
21267#undef LOGIN_NAME_MAX
21268#define LOGIN_NAME_MAX __LOGIN_NAME_MAX
21269#undef MQ_OPEN_MAX
21270#define MQ_OPEN_MAX __MQ_OPEN_MAX
21271#undef MQ_PRIO_MAX
21272#define MQ_PRIO_MAX __MQ_PRIO_MAX
21273#undef OPEN_MAX
21274#define OPEN_MAX __OPEN_MAX
21275#undef PAGESIZE
21276#define PAGESIZE __PAGESIZE
21277#undef PAGE_SIZE
21278#define PAGE_SIZE PAGESIZE
21279#undef PTHREAD_DESTRUCTOR_ITERATIONS
21280#define PTHREAD_DESTRUCTOR_ITERATIONS __PTHREAD_DESTRUCTOR_ITERATIONS
21281#undef PTHREAD_KEYS_MAX
21282#define PTHREAD_KEYS_MAX __PTHREAD_KEYS_MAX
21283#undef PTHREAD_STACK_MIN
21284#define PTHREAD_STACK_MIN __PTHREAD_STACK_MIN
21285#undef PTHREAD_THREADS_MAX
21286#undef RTSIG_MAX
21287#define RTSIG_MAX __RTSIG_MAX
21288#undef SEM_NSEMS_MAX
21289#undef SEM_VALUE_MAX
21290#define SEM_VALUE_MAX __SEM_VALUE_MAX
21291#undef SIGQUEUE_MAX
21292#define SIGQUEUE_MAX __SIGQUEUE_MAX
21293#undef SS_REPL_MAX
21294#undef STREAM_MAX
21295#define STREAM_MAX __STREAM_MAX
21296#undef SYMLOOP_MAX
21297#define SYMLOOP_MAX __SYMLOOP_MAX
21298#undef TIMER_MAX
21299#define TIMER_MAX __TIMER_MAX
21300#undef TRACE_EVENT_NAME_MAX
21301#undef TRACE_NAME_MAX
21302#undef TRACE_SYS_MAX
21303#undef TRACE_USER_EVENT_MAX
21304#undef TTY_NAME_MAX
21305#define TTY_NAME_MAX __TTY_NAME_MAX
21306#undef TZNAME_MAX
21307#undef FILESIZEBITS
21308#define FILESIZEBITS __FILESIZEBITS
21309#undef LINK_MAX
21310#define LINK_MAX __LINK_MAX
21311#undef MAX_CANON
21312#define MAX_CANON __MAX_CANON
21313#undef MAX_INPUT
21314#define MAX_INPUT __MAX_INPUT
21315#undef NAME_MAX
21316#define NAME_MAX __NAME_MAX
21317#undef PATH_MAX
21318#define PATH_MAX __PATH_MAX
21319#undef PIPE_BUF
21320#define PIPE_BUF __PIPE_BUF
21321#undef POSIX_ALLOC_SIZE_MIN
21322#undef POSIX_REC_INCR_XFER_SIZE
21323#undef POSIX_REC_MAX_XFER_SIZE
21324#undef POSIX_REC_MIN_XFER_SIZE
21325#undef POSIX_REC_XFER_ALIGN
21326#undef SYMLINK_MAX
21327#define SYMLINK_MAX (PATH_MAX - 1)
21328#undef BC_BASE_MAX
21329#define BC_BASE_MAX 99
21330#undef BC_DIM_MAX
21331#define BC_DIM_MAX 2048
21332#undef BC_SCALE_MAX
21333#define BC_SCALE_MAX 99
21334#undef BC_STRING_MAX
21335#define BC_STRING_MAX 1000
21336#undef CHARCLASS_NAME_MAX
21337#undef COLL_WEIGHTS_MAX
21338#undef EXPR_NEST_MAX
21339#define EXPR_NEST_MAX 32
21340#undef LINE_MAX
21341#define LINE_MAX 2048
21342#undef NGROUPS_MAX
21343#define NGROUPS_MAX 1024
21344#undef RE_DUP_MAX
21345#define RE_DUP_MAX 255
21346#define _POSIX_CLOCKRES_MIN 20000000
21347#define _POSIX_AIO_LISTIO_MAX 2
21348#define _POSIX_AIO_MAX 1
21349#define _POSIX_ARG_MAX 4096
21350#define _POSIX_CHILD_MAX 25
21351#define _POSIX_DELAYTIMER_MAX 32
21352#define _POSIX_HOST_NAME_MAX 255
21353#define _POSIX_LINK_MAX 8
21354#define _POSIX_LOGIN_NAME_MAX 9
21355#define _POSIX_MAX_CANON 255
21356#define _POSIX_MAX_INPUT 255
21357#define _POSIX_MQ_OPEN_MAX 8
21358#define _POSIX_MQ_PRIO_MAX 32
21359#define _POSIX_NAME_MAX 14
21360#define _POSIX_NGROUPS_MAX 8
21361#define _POSIX_OPEN_MAX 20
21362#define _POSIX_PATH_MAX 256
21363#define _POSIX_PIPE_BUF 512
21364#define _POSIX_RE_DUP_MAX 255
21365#define _POSIX_RTSIG_MAX 8
21366#define _POSIX_SEM_NSEMS_MAX 256
21367#define _POSIX_SEM_VALUE_MAX 32767
21368#define _POSIX_SIGQUEUE_MAX 32
21369#define _POSIX_SSIZE_MAX 32767
21370#define _POSIX_STREAM_MAX 8
21371#define _POSIX_SS_REPL_MAX 4
21372#define _POSIX_SYMLINK_MAX 255
21373#define _POSIX_SYMLOOP_MAX 8
21374#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
21375#define _POSIX_THREAD_KEYS_MAX 128
21376#define _POSIX_THREAD_THREADS_MAX 64
21377#define _POSIX_TIMER_MAX 32
21378#define _POSIX_TRACE_EVENT_NAME_MAX 30
21379#define _POSIX_TRACE_NAME_MAX 8
21380#define _POSIX_TRACE_SYS_MAX 8
21381#define _POSIX_TRACE_USER_EVENT_MAX 32
21382#define _POSIX_TTY_NAME_MAX 9
21383#define _POSIX_TZNAME_MAX 6
21384#define _POSIX2_BC_BASE_MAX 99
21385#define _POSIX2_BC_DIM_MAX 2048
21386#define _POSIX2_BC_SCALE_MAX 99
21387#define _POSIX2_BC_STRING_MAX 1000
21388#define _POSIX2_COLL_WEIGHTS_MAX 2
21389#define _POSIX2_EXPR_NEST_MAX 32
21390#define _POSIX2_LINE_MAX 2048
21391#define _POSIX2_RE_DUP_MAX 255
21392#define _XOPEN_IOV_MAX 16
21393#define _XOPEN_NAME_MAX 255
21394#define _XOPEN_PATH_MAX 1024
21395#define NL_ARGMAX 9
21396#define NL_LANGMAX 14
21397#define NL_MSGMAX 32767
21398#define NL_SETMAX 255
21399#define NL_TEXTMAX _POSIX2_LINE_MAX
21400#undef NZERO
21401#define NZERO 20
21402#undef _GCC_NEXT_LIMITS_H
21403#define SIGNED_VALUE long
21404#define SIZEOF_VALUE SIZEOF_LONG
21405#define PRI_VALUE_PREFIX "l"
21406#define RBIMPL_VALUE_NULL 0UL
21407#define RBIMPL_VALUE_ONE 1UL
21408#define RBIMPL_VALUE_FULL ULONG_MAX
21409#pragma GCC visibility push(default)
21410#pragma GCC visibility pop
21411#define RBIMPL_INTERN_VM_H
21412#pragma GCC visibility push(default)
21413#define HAVE_RB_DEFINE_ALLOC_FUNC 1
21414#pragma GCC visibility pop
21415#define RBIMPL_METHOD_H
21416#pragma GCC visibility push(default)
21417#pragma GCC visibility pop
21418#define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))
21419#define RBIMPL_ARITHMETIC_H
21420#define RBIMPL_ARITHMETIC_CHAR_H
21421#define RBIMPL_ARITHMETIC_INT_H
21422#define RBIMPL_ARITHMETIC_FIXNUM_H
21423#define FIXABLE RB_FIXABLE
21424#define FIXNUM_MAX RUBY_FIXNUM_MAX
21425#define FIXNUM_MIN RUBY_FIXNUM_MIN
21426#define NEGFIXABLE RB_NEGFIXABLE
21427#define POSFIXABLE RB_POSFIXABLE
21428#define RB_POSFIXABLE(_) ((_) < RUBY_FIXNUM_MAX + 1)
21429#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN)
21430#define RB_FIXABLE(_) (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_))
21431#define RUBY_FIXNUM_MAX (LONG_MAX / 2)
21432#define RUBY_FIXNUM_MIN (LONG_MIN / 2)
21433#define RBIMPL_ARITHMETIC_INTPTR_T_H
21434#define rb_int_new rb_int2inum
21435#define rb_uint_new rb_uint2inum
21436#pragma GCC visibility push(default)
21437#pragma GCC visibility pop
21438#define RBIMPL_ARITHMETIC_LONG_H
21439#define RBIMPL_ATTR_ARTIFICIAL_H
21440#define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__))
21441#define RBIMPL_ATTR_CONSTEXPR_H
21442#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
21443#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0
21444#define RBIMPL_ATTR_CONSTEXPR(_)
21445#define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_)
21446#define RBIMPL_SPECIAL_CONSTS_H
21447#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H
21448#define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_)
21449#define USE_FLONUM 1
21450#define RTEST RB_TEST
21451#define FIXNUM_P RB_FIXNUM_P
21452#define IMMEDIATE_P RB_IMMEDIATE_P
21453#define NIL_P RB_NIL_P
21454#define SPECIAL_CONST_P RB_SPECIAL_CONST_P
21455#define STATIC_SYM_P RB_STATIC_SYM_P
21456#define Qfalse RUBY_Qfalse
21457#define Qnil RUBY_Qnil
21458#define Qtrue RUBY_Qtrue
21459#define Qundef RUBY_Qundef
21460#define FIXNUM_FLAG RUBY_FIXNUM_FLAG
21461#define FLONUM_FLAG RUBY_FLONUM_FLAG
21462#define FLONUM_MASK RUBY_FLONUM_MASK
21463#define FLONUM_P RB_FLONUM_P
21464#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
21465#define SYMBOL_FLAG RUBY_SYMBOL_FLAG
21466#define RB_FIXNUM_P RB_FIXNUM_P
21467#define RB_FLONUM_P RB_FLONUM_P
21468#define RB_IMMEDIATE_P RB_IMMEDIATE_P
21469#define RB_NIL_P RB_NIL_P
21470#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P
21471#define RB_STATIC_SYM_P RB_STATIC_SYM_P
21472#define RB_TEST RB_TEST
21473#define RB_UNDEF_P RB_UNDEF_P
21474#define RB_NIL_OR_UNDEF_P RB_NIL_OR_UNDEF_P
21475#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse)
21476#define RUBY_Qtrue RBIMPL_CAST((VALUE)RUBY_Qtrue)
21477#define RUBY_Qnil RBIMPL_CAST((VALUE)RUBY_Qnil)
21478#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef)
21479#define FIX2LONG RB_FIX2LONG
21480#define FIX2ULONG RB_FIX2ULONG
21481#define INT2FIX RB_INT2FIX
21482#define LONG2FIX RB_INT2FIX
21483#define LONG2NUM RB_LONG2NUM
21484#define NUM2LONG RB_NUM2LONG
21485#define NUM2ULONG RB_NUM2ULONG
21486#define RB_FIX2LONG rb_fix2long
21487#define RB_FIX2ULONG rb_fix2ulong
21488#define RB_LONG2FIX RB_INT2FIX
21489#define RB_LONG2NUM rb_long2num_inline
21490#define RB_NUM2LONG rb_num2long_inline
21491#define RB_NUM2ULONG rb_num2ulong_inline
21492#define RB_ULONG2NUM rb_ulong2num_inline
21493#define ULONG2NUM RB_ULONG2NUM
21494#define rb_fix_new RB_INT2FIX
21495#define rb_long2int rb_long2int_inline
21496#define RB_INT2FIX RB_INT2FIX
21497#pragma GCC visibility push(default)
21498#pragma GCC visibility pop
21499#undef INT2FIX
21500#define INT2FIX(i) __builtin_choose_expr( __builtin_constant_p(i), RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(i))
21501#define RB_INT2NUM rb_int2num_inline
21502#define RB_NUM2INT rb_num2int_inline
21503#define RB_UINT2NUM rb_uint2num_inline
21504#define FIX2INT RB_FIX2INT
21505#define FIX2UINT RB_FIX2UINT
21506#define INT2NUM RB_INT2NUM
21507#define NUM2INT RB_NUM2INT
21508#define NUM2UINT RB_NUM2UINT
21509#define UINT2NUM RB_UINT2NUM
21510#define RB_FIX2INT RB_FIX2INT
21511#define RB_NUM2UINT RB_NUM2UINT
21512#define RB_FIX2UINT RB_FIX2UINT
21513#pragma GCC visibility push(default)
21514#pragma GCC visibility pop
21515#pragma GCC diagnostic push
21516#pragma GCC diagnostic ignored "-Wtype-limits"
21517#pragma GCC diagnostic pop
21518#define RBIMPL_RSTRING_H
21519#define RBIMPL_RBASIC_H
21520#define RBIMPL_ATTR_NOALIAS_H
21521#define RBIMPL_ATTR_NOALIAS()
21522#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj))
21523#define RBASIC_CLASS RBASIC_CLASS
21524#define RBIMPL_RVALUE_EMBED_LEN_MAX 3
21525#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
21526#define RBIMPL_EMBED_LEN_MAX_OF(T) RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
21527#pragma GCC visibility push(default)
21528#pragma GCC visibility pop
21529#define RBIMPL_FL_TYPE_H
21530#define RBIMPL_ATTR_FLAG_ENUM_H
21531#define RBIMPL_ATTR_FLAG_ENUM()
21532#define RBIMPL_VALUE_TYPE_H
21533#define RBIMPL_CONSTANT_P_H
21534#define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr)
21535#define RBIMPL_ERROR_H
21536#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
21537#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
21538#pragma GCC visibility push(default)
21539#define ruby_verbose (*rb_ruby_verbose_ptr())
21540#define ruby_debug (*rb_ruby_debug_ptr())
21541#pragma GCC visibility pop
21542#define T_ARRAY RUBY_T_ARRAY
21543#define T_BIGNUM RUBY_T_BIGNUM
21544#define T_CLASS RUBY_T_CLASS
21545#define T_COMPLEX RUBY_T_COMPLEX
21546#define T_DATA RUBY_T_DATA
21547#define T_FALSE RUBY_T_FALSE
21548#define T_FILE RUBY_T_FILE
21549#define T_FIXNUM RUBY_T_FIXNUM
21550#define T_FLOAT RUBY_T_FLOAT
21551#define T_HASH RUBY_T_HASH
21552#define T_ICLASS RUBY_T_ICLASS
21553#define T_IMEMO RUBY_T_IMEMO
21554#define T_MASK RUBY_T_MASK
21555#define T_MATCH RUBY_T_MATCH
21556#define T_MODULE RUBY_T_MODULE
21557#define T_MOVED RUBY_T_MOVED
21558#define T_NIL RUBY_T_NIL
21559#define T_NODE RUBY_T_NODE
21560#define T_NONE RUBY_T_NONE
21561#define T_OBJECT RUBY_T_OBJECT
21562#define T_RATIONAL RUBY_T_RATIONAL
21563#define T_REGEXP RUBY_T_REGEXP
21564#define T_STRING RUBY_T_STRING
21565#define T_STRUCT RUBY_T_STRUCT
21566#define T_SYMBOL RUBY_T_SYMBOL
21567#define T_TRUE RUBY_T_TRUE
21568#define T_UNDEF RUBY_T_UNDEF
21569#define T_ZOMBIE RUBY_T_ZOMBIE
21570#define BUILTIN_TYPE RB_BUILTIN_TYPE
21571#define DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21572#define RB_INTEGER_TYPE_P rb_integer_type_p
21573#define SYMBOL_P RB_SYMBOL_P
21574#define rb_type_p RB_TYPE_P
21575#define RB_BUILTIN_TYPE RB_BUILTIN_TYPE
21576#define RB_DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21577#define RB_FLOAT_TYPE_P RB_FLOAT_TYPE_P
21578#define RB_SYMBOL_P RB_SYMBOL_P
21579#define RB_TYPE_P RB_TYPE_P
21580#define Check_Type Check_Type
21581#define RBIMPL_ASSERT_TYPE(v,t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P((v), (t)))
21582#define TYPE(_) RBIMPL_CAST((int)rb_type(_))
21583#pragma GCC visibility push(default)
21584#pragma GCC visibility pop
21585#define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
21586#define RBIMPL_WIDER_ENUM 1
21587#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
21588#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
21589#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
21590#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
21591#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
21592#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
21593#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
21594#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
21595#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
21596#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
21597#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
21598#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
21599#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
21600#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
21601#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
21602#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
21603#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
21604#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
21605#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
21606#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
21607#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
21608#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
21609#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
21610#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
21611#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
21612#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
21613#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
21614#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
21615#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
21616#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
21617#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
21618#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
21619#define ELTS_SHARED RUBY_ELTS_SHARED
21620#define RB_OBJ_FREEZE rb_obj_freeze_inline
21621#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
21622#define RB_FL_ABLE RB_FL_ABLE
21623#define RB_FL_ALL RB_FL_ALL
21624#define RB_FL_ALL_RAW RB_FL_ALL_RAW
21625#define RB_FL_ANY RB_FL_ANY
21626#define RB_FL_ANY_RAW RB_FL_ANY_RAW
21627#define RB_FL_REVERSE RB_FL_REVERSE
21628#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
21629#define RB_FL_SET RB_FL_SET
21630#define RB_FL_SET_RAW RB_FL_SET_RAW
21631#define RB_FL_TEST RB_FL_TEST
21632#define RB_FL_TEST_RAW RB_FL_TEST_RAW
21633#define RB_FL_UNSET RB_FL_UNSET
21634#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
21635#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21636#define RB_OBJ_FROZEN RB_OBJ_FROZEN
21637#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21638#define RB_OBJ_INFECT RB_OBJ_INFECT
21639#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21640#define RB_OBJ_TAINT RB_OBJ_TAINT
21641#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
21642#define RB_OBJ_TAINTED RB_OBJ_TAINTED
21643#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21644#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21645#define RB_OBJ_UNTRUST RB_OBJ_TAINT
21646#define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED
21647#define FL_ABLE RB_FL_ABLE
21648#define FL_ALL RB_FL_ALL
21649#define FL_ALL_RAW RB_FL_ALL_RAW
21650#define FL_ANY RB_FL_ANY
21651#define FL_ANY_RAW RB_FL_ANY_RAW
21652#define FL_REVERSE RB_FL_REVERSE
21653#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
21654#define FL_SET RB_FL_SET
21655#define FL_SET_RAW RB_FL_SET_RAW
21656#define FL_TEST RB_FL_TEST
21657#define FL_TEST_RAW RB_FL_TEST_RAW
21658#define FL_UNSET RB_FL_UNSET
21659#define FL_UNSET_RAW RB_FL_UNSET_RAW
21660#define OBJ_FREEZE RB_OBJ_FREEZE
21661#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21662#define OBJ_FROZEN RB_OBJ_FROZEN
21663#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21664#define OBJ_INFECT RB_OBJ_INFECT
21665#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21666#define OBJ_TAINT RB_OBJ_TAINT
21667#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
21668#define OBJ_TAINTED RB_OBJ_TAINTED
21669#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21670#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21671#define OBJ_UNTRUST RB_OBJ_UNTRUST
21672#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
21673#define RBIMPL_FL_USER_N(n) RUBY_FL_USER ##n = (1<<(RUBY_FL_USHIFT+n))
21674#undef RBIMPL_FL_USER_N
21675#undef RBIMPL_WIDER_ENUM
21676#undef RBIMPL_HAVE_ENUM_ATTRIBUTE
21677#pragma GCC visibility push(default)
21678#pragma GCC visibility pop
21679#pragma GCC visibility push(default)
21680#pragma GCC visibility pop
21681#define RSTRING(obj) RBIMPL_CAST((struct RString *)(obj))
21682#define RSTRING_NOEMBED RSTRING_NOEMBED
21683#define RSTRING_FSTR RSTRING_FSTR
21684#define RSTRING_EMBED_LEN RSTRING_EMBED_LEN
21685#define RSTRING_LEN RSTRING_LEN
21686#define RSTRING_LENINT RSTRING_LENINT
21687#define RSTRING_PTR RSTRING_PTR
21688#define RSTRING_END RSTRING_END
21689#define StringValue(v) rb_string_value(&(v))
21690#define StringValuePtr(v) rb_string_value_ptr(&(v))
21691#define StringValueCStr(v) rb_string_value_cstr(&(v))
21692#define SafeStringValue(v) StringValue(v)
21693#define ExportStringValue(v) do { StringValue(v); (v) = rb_str_export(v); } while (0)
21694#pragma GCC visibility push(default)
21695#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v)))
21696#pragma GCC visibility pop
21697#pragma GCC diagnostic push
21698#pragma GCC diagnostic pop
21699#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; })
21700#define RB_NUM2CHR rb_num2char_inline
21701#define NUM2CHR RB_NUM2CHR
21702#define CHR2FIX RB_CHR2FIX
21703#define RB_CHR2FIX RB_CHR2FIX
21704#define RBIMPL_ARITHMETIC_DOUBLE_H
21705#define NUM2DBL rb_num2dbl
21706#define RFLOAT_VALUE rb_float_value
21707#define DBL2NUM rb_float_new
21708#pragma GCC visibility push(default)
21709#pragma GCC visibility pop
21710#define RBIMPL_ARITHMETIC_GID_T_H
21711#define RBIMPL_ARITHMETIC_LONG_LONG_H
21712#define RB_LL2NUM rb_ll2num_inline
21713#define RB_ULL2NUM rb_ull2num_inline
21714#define LL2NUM RB_LL2NUM
21715#define ULL2NUM RB_ULL2NUM
21716#define RB_NUM2LL rb_num2ll_inline
21717#define RB_NUM2ULL rb_num2ull_inline
21718#define NUM2LL RB_NUM2LL
21719#define NUM2ULL RB_NUM2ULL
21720#pragma GCC visibility push(default)
21721#pragma GCC visibility pop
21722#define RBIMPL_ARITHMETIC_MODE_T_H
21723#define RBIMPL_ARITHMETIC_OFF_T_H
21724#define RBIMPL_ARITHMETIC_PID_T_H
21725#define RBIMPL_ARITHMETIC_SHORT_H
21726#define RB_NUM2SHORT rb_num2short_inline
21727#define RB_NUM2USHORT rb_num2ushort
21728#define NUM2SHORT RB_NUM2SHORT
21729#define NUM2USHORT RB_NUM2USHORT
21730#define USHORT2NUM RB_INT2FIX
21731#define RB_FIX2SHORT rb_fix2short
21732#define FIX2SHORT RB_FIX2SHORT
21733#pragma GCC visibility push(default)
21734#pragma GCC visibility pop
21735#define RBIMPL_ARITHMETIC_SIZE_T_H
21736#define RB_SIZE2NUM RB_ULL2NUM
21737#define RB_SSIZE2NUM RB_LL2NUM
21738#define RB_NUM2SIZE RB_NUM2ULL
21739#define RB_NUM2SSIZE RB_NUM2LL
21740#define NUM2SIZET RB_NUM2SIZE
21741#define SIZET2NUM RB_SIZE2NUM
21742#define NUM2SSIZET RB_NUM2SSIZE
21743#define SSIZET2NUM RB_SSIZE2NUM
21744#define RBIMPL_ARITHMERIC_ST_DATA_T_H
21745#define RUBY_ST_H 1
21746#pragma GCC visibility push(default)
21747#define ST_DATA_T_DEFINED
21748#define MAX_ST_INDEX_VAL (~(st_index_t) 0)
21749#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
21750#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
21751#define ST_DATA_COMPATIBLE_P(type) __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
21752#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)
21753#define st_init_table rb_st_init_table
21754#define st_init_table_with_size rb_st_init_table_with_size
21755#define st_init_numtable rb_st_init_numtable
21756#define st_init_numtable_with_size rb_st_init_numtable_with_size
21757#define st_init_strtable rb_st_init_strtable
21758#define st_init_strtable_with_size rb_st_init_strtable_with_size
21759#define st_init_strcasetable rb_st_init_strcasetable
21760#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size
21761#define st_delete rb_st_delete
21762#define st_delete_safe rb_st_delete_safe
21763#define st_shift rb_st_shift
21764#define st_insert rb_st_insert
21765#define st_insert2 rb_st_insert2
21766#define st_lookup rb_st_lookup
21767#define st_get_key rb_st_get_key
21768#define st_update rb_st_update
21769#define st_foreach_with_replace rb_st_foreach_with_replace
21770#define st_foreach rb_st_foreach
21771#define st_foreach_check rb_st_foreach_check
21772#define st_keys rb_st_keys
21773#define st_keys_check rb_st_keys_check
21774#define st_values rb_st_values
21775#define st_values_check rb_st_values_check
21776#define st_add_direct rb_st_add_direct
21777#define st_free_table rb_st_free_table
21778#define st_cleanup_safe rb_st_cleanup_safe
21779#define st_clear rb_st_clear
21780#define st_copy rb_st_copy
21781#define st_numcmp rb_st_numcmp
21782#define st_numhash rb_st_numhash
21783#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp
21784#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp
21785#define st_strcasecmp rb_st_locale_insensitive_strcasecmp
21786#define st_strncasecmp rb_st_locale_insensitive_strncasecmp
21787#define st_memsize rb_st_memsize
21788#define st_hash rb_st_hash
21789#define st_hash_uint32 rb_st_hash_uint32
21790#define st_hash_uint rb_st_hash_uint
21791#define st_hash_end rb_st_hash_end
21792#define st_hash_start(h) ((st_index_t)(h))
21793#pragma GCC visibility pop
21794#define ST2FIX RB_ST2FIX
21795#define RB_ST2FIX RB_ST2FIX
21796#define RBIMPL_ARITHMETIC_UID_T_H
21797#define RBIMPL_CORE_H
21798#define RBIMPL_RARRAY_H
21799#define RBIMPL_RGENGC_H
21800#undef USE_RGENGC
21801#define USE_RGENGC 1
21802#define USE_RINCGC 1
21803#define USE_RGENGC_LOGGING_WB_UNPROTECT 0
21804#define RGENGC_WB_PROTECTED_ARRAY 1
21805#define RGENGC_WB_PROTECTED_HASH 1
21806#define RGENGC_WB_PROTECTED_STRUCT 1
21807#define RGENGC_WB_PROTECTED_STRING 1
21808#define RGENGC_WB_PROTECTED_OBJECT 1
21809#define RGENGC_WB_PROTECTED_REGEXP 1
21810#define RGENGC_WB_PROTECTED_CLASS 1
21811#define RGENGC_WB_PROTECTED_FLOAT 1
21812#define RGENGC_WB_PROTECTED_COMPLEX 1
21813#define RGENGC_WB_PROTECTED_RATIONAL 1
21814#define RGENGC_WB_PROTECTED_BIGNUM 1
21815#define RGENGC_WB_PROTECTED_NODE_CREF 1
21816#define RB_OBJ_WRITE(old,slot,young) RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
21817#define RB_OBJ_WRITTEN(old,oldv,young) RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
21818#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21819#define OBJ_PROMOTED RB_OBJ_PROMOTED
21820#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
21821#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
21822#define RB_OBJ_WB_UNPROTECT_FOR(type,obj) (RGENGC_WB_PROTECTED_ ##type ? OBJ_WB_UNPROTECT(obj) : obj)
21823#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
21824#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21825#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
21826#pragma GCC visibility push(default)
21827#pragma GCC visibility pop
21828#define USE_TRANSIENT_HEAP 1
21829#define RARRAY(obj) RBIMPL_CAST((struct RArray *)(obj))
21830#define RARRAY_EMBED_FLAG RARRAY_EMBED_FLAG
21831#define RARRAY_EMBED_LEN_MASK RARRAY_EMBED_LEN_MASK
21832#define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX
21833#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
21834#define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG
21835#define RARRAY_LEN rb_array_len
21836#define RARRAY_CONST_PTR rb_array_const_ptr
21837#define RARRAY_CONST_PTR_TRANSIENT rb_array_const_ptr_transient
21838#define FIX_CONST_VALUE_PTR(x) (x)
21839#define RARRAY_EMBED_LEN RARRAY_EMBED_LEN
21840#define RARRAY_LENINT RARRAY_LENINT
21841#define RARRAY_TRANSIENT_P RARRAY_TRANSIENT_P
21842#define RARRAY_ASET RARRAY_ASET
21843#define RARRAY_PTR RARRAY_PTR
21844#pragma GCC visibility push(default)
21845#pragma GCC visibility pop
21846#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)
21847#define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0)
21848#define RARRAY_PTR_USE(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(0, ary, ptr_name, expr)
21849#define RARRAY_PTR_USE_TRANSIENT(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(1, ary, ptr_name, expr)
21850#define RARRAY_AREF(a,i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
21851#define RBIMPL_RBIGNUM_H
21852#define RBIGNUM_SIGN rb_big_sign
21853#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P
21854#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P
21855#pragma GCC visibility push(default)
21856#pragma GCC visibility pop
21857#define RBIMPL_RCLASS_H
21858#define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT
21859#define RCLASS(obj) RBIMPL_CAST((struct RClass *)(obj))
21860#define RMODULE RCLASS
21861#define RCLASS_SUPER rb_class_get_superclass
21862#pragma GCC visibility push(default)
21863#pragma GCC visibility pop
21864#define RBIMPL_RDATA_H
21865#define RUBY_UNTYPED_DATA_WARNING 1
21866#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
21867#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) RBIMPL_ATTR_DEPRECATED(("by TypedData"))
21868#define RBIMPL_MACRO_SELECT(x,y) x ## y
21869#define RUBY_MACRO_SELECT(x,y) RBIMPL_MACRO_SELECT(x, y)
21870#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj))
21871#define DATA_PTR(obj) RDATA(obj)->data
21872#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1)
21873#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0)
21874#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
21875#pragma GCC visibility push(default)
21876#pragma GCC visibility pop
21877#define Data_Wrap_Struct(klass,mark,free,sval) rb_data_object_wrap( (klass), (sval), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free))
21878#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))
21879#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; })
21880#define Data_Get_Struct(obj,type,sval) ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))
21881#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)))
21882#define rb_data_object_wrap_0 rb_data_object_wrap
21883#define rb_data_object_wrap_1 rb_data_object_wrap_warning
21884#define rb_data_object_wrap_2 rb_data_object_wrap_
21885#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING)
21886#define rb_data_object_get_0 rb_data_object_get
21887#define rb_data_object_get_1 rb_data_object_get_warning
21888#define rb_data_object_get_2 rb_data_object_get_
21889#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING)
21890#define rb_data_object_make_0 rb_data_object_make
21891#define rb_data_object_make_1 rb_data_object_make_warning
21892#define rb_data_object_make_2 rb_data_object_make_
21893#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING)
21894#define RBIMPL_RFILE_H
21895#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj))
21896#define RBIMPL_RHASH_H
21897#define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
21898#define RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
21899#define RHASH_IFNONE(h) rb_hash_ifnone(h)
21900#define RHASH_SIZE(h) rb_hash_size_num(h)
21901#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
21902#define RHASH_SET_IFNONE(h,ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
21903#pragma GCC visibility push(default)
21904#pragma GCC visibility pop
21905#define RBIMPL_ROBJECT_H
21906#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj))
21907#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
21908#define ROBJECT_EMBED ROBJECT_EMBED
21909#define ROBJECT_IV_CAPACITY ROBJECT_IV_CAPACITY
21910#define ROBJECT_IVPTR ROBJECT_IVPTR
21911#define RBIMPL_RREGEXP_H
21912#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj))
21913#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
21914#define RREGEXP_SRC RREGEXP_SRC
21915#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
21916#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
21917#define RREGEXP_SRC_END RREGEXP_SRC_END
21918#define RBIMPL_RSTRUCT_H
21919#define RSTRUCT_PTR(st) rb_struct_ptr(st)
21920#define RSTRUCT_LEN RSTRUCT_LEN
21921#define RSTRUCT_SET RSTRUCT_SET
21922#define RSTRUCT_GET RSTRUCT_GET
21923#pragma GCC visibility push(default)
21924#pragma GCC visibility pop
21925#define RBIMPL_RTYPEDDATA_H
21926#define HAVE_TYPE_RB_DATA_TYPE_T 1
21927#define HAVE_RB_DATA_TYPE_T_FUNCTION 1
21928#define HAVE_RB_DATA_TYPE_T_PARENT 1
21929#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
21930#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
21931#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
21932#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
21933#define Check_TypedStruct(v,t) rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
21934#define RTYPEDDATA_P RTYPEDDATA_P
21935#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
21936#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
21937#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE
21938#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
21939#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
21940#pragma GCC visibility push(default)
21941#pragma GCC visibility pop
21942#define TypedData_Wrap_Struct(klass,data_type,sval) rb_data_typed_object_wrap((klass),(sval),(data_type))
21943#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))
21944#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; })
21945#define TypedData_Get_Struct(obj,type,data_type,sval) ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
21946#define RBIMPL_CTYPE_H
21947#define _CTYPE_H_
21948#define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a')
21949#define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A')
21950#define _U 01
21951#define _L 02
21952#define _N 04
21953#define _S 010
21954#define _P 020
21955#define _C 040
21956#define _X 0100
21957#define _B 0200
21958#define __CTYPE_PTR (__locale_ctype_ptr ())
21959#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)])
21960#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L))
21961#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U)
21962#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L)
21963#define isdigit(__c) (__ctype_lookup(__c)&_N)
21964#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N))
21965#define isspace(__c) (__ctype_lookup(__c)&_S)
21966#define ispunct(__c) (__ctype_lookup(__c)&_P)
21967#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N))
21968#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B))
21969#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N))
21970#define iscntrl(__c) (__ctype_lookup(__c)&_C)
21971#define isblank(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup(__x)&_B) || (int) (__x) == '\t';})
21972#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)])
21973#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L))
21974#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U)
21975#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L)
21976#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N)
21977#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N))
21978#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S)
21979#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P)
21980#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N))
21981#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B))
21982#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N))
21983#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C)
21984#define isblank_l(__c,__l) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';})
21985#define isascii(__c) ((unsigned)(__c)<=0177)
21986#define toascii(__c) ((__c)&0177)
21987#define isascii_l(__c,__l) ((__l),(unsigned)(__c)<=0177)
21988#define toascii_l(__c,__l) ((__l),(__c)&0177)
21989#define toupper(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (toupper) (__x);})
21990#define tolower(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (tolower) (__x);})
21991#define ISASCII rb_isascii
21992#define ISPRINT rb_isprint
21993#define ISGRAPH rb_isgraph
21994#define ISSPACE rb_isspace
21995#define ISUPPER rb_isupper
21996#define ISLOWER rb_islower
21997#define ISALNUM rb_isalnum
21998#define ISALPHA rb_isalpha
21999#define ISDIGIT rb_isdigit
22000#define ISXDIGIT rb_isxdigit
22001#define ISBLANK rb_isblank
22002#define ISCNTRL rb_iscntrl
22003#define ISPUNCT rb_ispunct
22004#define TOUPPER rb_toupper
22005#define TOLOWER rb_tolower
22006#define STRCASECMP st_locale_insensitive_strcasecmp
22007#define STRNCASECMP st_locale_insensitive_strncasecmp
22008#define STRTOUL ruby_strtoul
22009#pragma GCC visibility push(default)
22010#pragma GCC visibility pop
22011#define RBIMPL_EVAL_H
22012#pragma GCC visibility push(default)
22013#define rb_funcall2 rb_funcallv
22014#define rb_funcall3 rb_funcallv_public
22015#pragma GCC visibility pop
22016#define RBIMPL_EVENT_H
22017#define RUBY_EVENT_NONE 0x0000
22018#define RUBY_EVENT_LINE 0x0001
22019#define RUBY_EVENT_CLASS 0x0002
22020#define RUBY_EVENT_END 0x0004
22021#define RUBY_EVENT_CALL 0x0008
22022#define RUBY_EVENT_RETURN 0x0010
22023#define RUBY_EVENT_C_CALL 0x0020
22024#define RUBY_EVENT_C_RETURN 0x0040
22025#define RUBY_EVENT_RAISE 0x0080
22026#define RUBY_EVENT_ALL 0x00ff
22027#define RUBY_EVENT_B_CALL 0x0100
22028#define RUBY_EVENT_B_RETURN 0x0200
22029#define RUBY_EVENT_THREAD_BEGIN 0x0400
22030#define RUBY_EVENT_THREAD_END 0x0800
22031#define RUBY_EVENT_FIBER_SWITCH 0x1000
22032#define RUBY_EVENT_SCRIPT_COMPILED 0x2000
22033#define RUBY_EVENT_TRACEPOINT_ALL 0xffff
22034#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
22035#define RUBY_INTERNAL_EVENT_SWITCH 0x040000
22036#define RUBY_EVENT_SWITCH 0x040000
22037#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
22038#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
22039#define RUBY_INTERNAL_EVENT_GC_START 0x400000
22040#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
22041#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
22042#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
22043#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
22044#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
22045#define RUBY_INTERNAL_EVENT_MASK 0xffff0000
22046#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
22047#pragma GCC visibility push(default)
22048#pragma GCC visibility pop
22049#define RBIMPL_GC_H
22050#pragma GCC visibility push(default)
22051#pragma GCC visibility pop
22052#define RBIMPL_GLOB_H
22053#pragma GCC visibility push(default)
22054#pragma GCC visibility pop
22055#define RBIMPL_GLOBALS_H
22056#pragma GCC visibility push(default)
22057#define RUBY_INTEGER_UNIFICATION 1
22058#define CLASS_OF rb_class_of
22059#pragma GCC visibility pop
22060#define RBIMPL_INTERPRETER_H
22061#pragma GCC visibility push(default)
22062#define RUBY_INIT_STACK VALUE variable_in_this_stack_frame; ruby_init_stack(&variable_in_this_stack_frame);
22063#pragma GCC visibility pop
22064#define RBIMPL_ITERATOR_H
22065#pragma GCC visibility push(default)
22066#define RB_BLOCK_CALL_FUNC_STRICT 1
22067#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
22068#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg,callback_arg) VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
22069#pragma GCC visibility pop
22070#define RBIMPL_MEMORY_H
22071#define DSIZE_T uint128_t
22072#define RUBY_ALLOCV_LIMIT 1024
22073#define RB_GC_GUARD(v) (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(v); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }))
22074#define RB_ALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type)))
22075#define RB_ALLOC(type) RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type)))
22076#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type)))
22077#define RB_ZALLOC(type) (RB_ZALLOC_N(type, 1))
22078#define RB_REALLOC_N(var,type,n) ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type))))
22079#define ALLOCA_N(type,n) RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))
22080#define RB_ALLOCV(v,n) ((n) < RUBY_ALLOCV_LIMIT ? ((v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n)))
22081#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))))
22082#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))
22083#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n)))
22084#define MEMCPY(p1,p2,type,n) ruby_nonempty_memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22085#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22086#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22087#define ALLOC_N RB_ALLOC_N
22088#define ALLOC RB_ALLOC
22089#define ZALLOC_N RB_ZALLOC_N
22090#define ZALLOC RB_ZALLOC
22091#define REALLOC_N RB_REALLOC_N
22092#define ALLOCV RB_ALLOCV
22093#define ALLOCV_N RB_ALLOCV_N
22094#define ALLOCV_END RB_ALLOCV_END
22095#pragma GCC visibility push(default)
22096#pragma GCC visibility pop
22097#pragma GCC visibility push(default)
22098#pragma GCC visibility pop
22099#define RBIMPL_MODULE_H
22100#pragma GCC visibility push(default)
22101#pragma GCC visibility pop
22102#define RBIMPL_NEWOBJ_H
22103#define RB_NEWOBJ(obj,type) type *(obj) = RBIMPL_CAST((type *)rb_newobj())
22104#define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = RBIMPL_CAST((type *)rb_newobj_of(klass, flags))
22105#define NEWOBJ RB_NEWOBJ
22106#define NEWOBJ_OF RB_NEWOBJ_OF
22107#define OBJSETUP rb_obj_setup
22108#define CLONESETUP rb_clone_setup
22109#define DUPSETUP rb_dup_setup
22110#pragma GCC visibility push(default)
22111#pragma GCC visibility pop
22112#define RBIMPL_SCAN_ARGS_H
22113#define RBIMPL_ATTR_DIAGNOSE_IF_H
22114#define RBIMPL_ATTR_DIAGNOSE_IF(_,__,___)
22115#define RBIMPL_INTERN_ARRAY_H
22116#pragma GCC visibility push(default)
22117#define rb_ary_tmp_new rb_ary_hidden_new
22118#define rb_ary_new2 rb_ary_new_capa
22119#define rb_ary_new3 rb_ary_new_from_args
22120#define rb_ary_new4 rb_ary_new_from_values
22121#pragma GCC visibility pop
22122#define RBIMPL_INTERN_ERROR_H
22123#define UNLIMITED_ARGUMENTS (-1)
22124#define rb_exc_new2 rb_exc_new_cstr
22125#define rb_exc_new3 rb_exc_new_str
22126#define rb_check_arity rb_check_arity
22127#pragma GCC visibility push(default)
22128#pragma GCC visibility pop
22129#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)
22130#define rb_check_frozen rb_check_frozen_inline
22131#define RBIMPL_INTERN_HASH_H
22132#pragma GCC visibility push(default)
22133#define st_foreach_safe rb_st_foreach_safe
22134#pragma GCC visibility pop
22135#define RBIMPL_INTERN_PROC_H
22136#pragma GCC visibility push(default)
22137#pragma GCC visibility pop
22138#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0
22139#define RB_SCAN_ARGS_KEYWORDS 1
22140#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3
22141#define RB_NO_KEYWORDS 0
22142#define RB_PASS_KEYWORDS 1
22143#define RB_PASS_CALLED_KEYWORDS rb_keyword_given_p()
22144#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
22145#pragma GCC visibility push(default)
22146#pragma GCC visibility pop
22147#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10)
22148#define rb_scan_args_count_end(fmt,ofs,vari) ((fmt)[ofs] ? -1 : (vari))
22149#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))
22150#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))
22151#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')))
22152#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))
22153#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'))
22154#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'))
22155#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)
22156#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)
22157#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)
22158#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)
22159#define rb_scan_args_next_param() vars[vari++]
22160#undef rb_scan_args_next_param
22161#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__)))
22162#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__)))
22163#define RBIMPL_SYMBOL_H
22164#define RB_ID2SYM rb_id2sym
22165#define RB_SYM2ID rb_sym2id
22166#define ID2SYM RB_ID2SYM
22167#define SYM2ID RB_SYM2ID
22168#define CONST_ID_CACHE RUBY_CONST_ID_CACHE
22169#define CONST_ID RUBY_CONST_ID
22170#define rb_intern_const rb_intern_const
22171#pragma GCC visibility push(default)
22172#pragma GCC visibility pop
22173#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; }
22174#define RUBY_CONST_ID(var,str) do { static ID rbimpl_id; (var) = rbimpl_intern_const(&rbimpl_id, (str)); } while (0)
22175#define rb_intern(str) (RBIMPL_CONSTANT_P(str) ? __extension__ ({ static ID rbimpl_id; rbimpl_intern_const(&rbimpl_id, (str)); }) : (rb_intern)(str))
22176#define RBIMPL_VARIABLE_H
22177#pragma GCC visibility push(default)
22178#pragma GCC visibility pop
22179#define RUBY_BACKWARD2_INTTYPES_H
22180#define PRI_INT_PREFIX ""
22181#define PRI_LONG_PREFIX "l"
22182#define PRI_SHORT_PREFIX "h"
22183#define PRI_64_PREFIX PRI_LONG_PREFIX
22184#define RUBY_PRI_VALUE_MARK "\v"
22185#define PRIdVALUE PRI_VALUE_PREFIX"d"
22186#define PRIoVALUE PRI_VALUE_PREFIX"o"
22187#define PRIuVALUE PRI_VALUE_PREFIX"u"
22188#define PRIxVALUE PRI_VALUE_PREFIX"x"
22189#define PRIXVALUE PRI_VALUE_PREFIX"X"
22190#define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
22191#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
22192#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
22193#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
22194#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
22195#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
22196#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
22197#define PRIdSIZE PRI_SIZE_PREFIX"d"
22198#define PRIiSIZE PRI_SIZE_PREFIX"i"
22199#define PRIoSIZE PRI_SIZE_PREFIX"o"
22200#define PRIuSIZE PRI_SIZE_PREFIX"u"
22201#define PRIxSIZE PRI_SIZE_PREFIX"x"
22202#define PRIXSIZE PRI_SIZE_PREFIX"X"
22203#pragma GCC visibility push(default)
22204#define USE_SYMBOL_AS_METHOD_NAME 1
22205#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
22206#define FilePathStringValue(v) ((v) = rb_get_path(v))
22207#define rb_varargs_argc_check_runtime(argc,vargc) (((argc) <= (vargc)) ? (argc) : (rb_fatal("argc(%d) exceeds actual arguments(%d)", argc, vargc), 0))
22208#define rb_varargs_argc_valid_p(argc,vargc) ((argc) == 0 ? (vargc) <= 1 : (argc) == (vargc))
22209#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))
22210#define RUBY_INTERN_H 1
22211#define RBIMPL_INTERN_BIGNUM_H
22212#pragma GCC visibility push(default)
22213#define rb_big2int(x) rb_big2long(x)
22214#define rb_big2uint(x) rb_big2ulong(x)
22215#define INTEGER_PACK_MSWORD_FIRST 0x01
22216#define INTEGER_PACK_LSWORD_FIRST 0x02
22217#define INTEGER_PACK_MSBYTE_FIRST 0x10
22218#define INTEGER_PACK_LSBYTE_FIRST 0x20
22219#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40
22220#define INTEGER_PACK_2COMP 0x80
22221#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400
22222#define INTEGER_PACK_FORCE_BIGNUM 0x100
22223#define INTEGER_PACK_NEGATIVE 0x200
22224#define INTEGER_PACK_LITTLE_ENDIAN (INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_LSBYTE_FIRST)
22225#define INTEGER_PACK_BIG_ENDIAN (INTEGER_PACK_MSWORD_FIRST | INTEGER_PACK_MSBYTE_FIRST)
22226#pragma GCC visibility pop
22227#define RBIMPL_INTERN_COMPAR_H
22228#pragma GCC visibility push(default)
22229#pragma GCC visibility pop
22230#define RBIMPL_INTERN_COMPLEX_H
22231#pragma GCC visibility push(default)
22232#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0))
22233#define rb_complex_raw2(x,y) rb_complex_raw((x), (y))
22234#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0))
22235#define rb_complex_new2(x,y) rb_complex_new((x), (y))
22236#define rb_complex_add rb_complex_plus
22237#define rb_complex_sub rb_complex_minus
22238#define rb_complex_nagate rb_complex_uminus
22239#define rb_Complex1(x) rb_Complex((x), INT2FIX(0))
22240#define rb_Complex2(x,y) rb_Complex((x), (y))
22241#pragma GCC visibility pop
22242#define RBIMPL_INTERN_CONT_H
22243#pragma GCC visibility push(default)
22244#pragma GCC visibility pop
22245#define RBIMPL_INTERN_DIR_H
22246#pragma GCC visibility push(default)
22247#pragma GCC visibility pop
22248#define RBIMPL_INTERN_ENUM_H
22249#pragma GCC visibility push(default)
22250#pragma GCC visibility pop
22251#define RBIMPL_INTERN_ENUMERATOR_H
22252#define RBIMPL_INTERN_EVAL_H
22253#pragma GCC visibility push(default)
22254#pragma GCC visibility pop
22255#pragma GCC visibility push(default)
22256#pragma GCC visibility pop
22257#define SIZED_ENUMERATOR(obj,argc,argv,size_fn) rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn))
22258#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))
22259#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)
22260#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)
22261#define RETURN_ENUMERATOR(obj,argc,argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)
22262#define RETURN_ENUMERATOR_KW(obj,argc,argv,kw_splat) RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat)
22263#define RBIMPL_INTERN_FILE_H
22264#pragma GCC visibility push(default)
22265#pragma GCC visibility pop
22266#define RBIMPL_INTERN_GC_H
22267#pragma GCC visibility push(default)
22268#pragma GCC visibility pop
22269#define RBIMPL_INTERN_IO_H
22270#pragma GCC visibility push(default)
22271#define rb_defout rb_stdout
22272#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)
22273#pragma GCC visibility pop
22274#define RBIMPL_INTERN_LOAD_H
22275#pragma GCC visibility push(default)
22276#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f)
22277#define HAVE_RB_EXT_RACTOR_SAFE 1
22278#pragma GCC visibility pop
22279#define RBIMPL_INTERN_MARSHAL_H
22280#pragma GCC visibility push(default)
22281#pragma GCC visibility pop
22282#define RBIMPL_INTERN_NUMERIC_H
22283#define RB_NUM_COERCE_FUNCS_NEED_OPID 1
22284#pragma GCC visibility push(default)
22285#pragma GCC visibility pop
22286#define RBIMPL_INTERN_OBJECT_H
22287#pragma GCC visibility push(default)
22288#define RB_OBJ_INIT_COPY(obj,orig) ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
22289#define OBJ_INIT_COPY(obj,orig) RB_OBJ_INIT_COPY(obj, orig)
22290#pragma GCC visibility pop
22291#define RBIMPL_INTERN_PARSE_H
22292#pragma GCC visibility push(default)
22293#pragma GCC visibility pop
22294#define RBIMPL_INTERN_PROCESS_H
22295#pragma GCC visibility push(default)
22296#pragma GCC visibility pop
22297#define RBIMPL_INTERN_RANDOM_H
22298#pragma GCC visibility push(default)
22299#pragma GCC visibility pop
22300#define RBIMPL_INTERN_RANGE_H
22301#pragma GCC visibility push(default)
22302#pragma GCC visibility pop
22303#define RBIMPL_INTERN_RATIONAL_H
22304#pragma GCC visibility push(default)
22305#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1))
22306#define rb_rational_raw2(x,y) rb_rational_raw((x), (y))
22307#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1))
22308#define rb_rational_new2(x,y) rb_rational_new((x), (y))
22309#define rb_Rational1(x) rb_Rational((x), INT2FIX(1))
22310#define rb_Rational2(x,y) rb_Rational((x), (y))
22311#pragma GCC visibility pop
22312#define RBIMPL_INTERN_RE_H
22313#pragma GCC visibility push(default)
22314#define rb_memcmp memcmp
22315#define HAVE_RB_REG_NEW_STR 1
22316#pragma GCC visibility pop
22317#define RBIMPL_INTERN_RUBY_H
22318#pragma GCC visibility push(default)
22319#define rb_argv rb_get_argv()
22320#pragma GCC visibility pop
22321#define RBIMPL_INTERN_SELECT_H
22322#define RBIMPL_INTERN_SELECT_LARGESIZE_H
22323#define rb_fd_ptr rb_fd_ptr
22324#define rb_fd_max rb_fd_max
22325#pragma GCC visibility push(default)
22326#pragma GCC visibility pop
22327#pragma GCC visibility push(default)
22328#pragma GCC visibility pop
22329#define RBIMPL_INTERN_SIGNAL_H
22330#pragma GCC visibility push(default)
22331#define posix_signal ruby_posix_signal
22332#pragma GCC visibility pop
22333#define RBIMPL_INTERN_SPRINTF_H
22334#pragma GCC visibility push(default)
22335#pragma GCC visibility pop
22336#define RBIMPL_INTERN_STRING_H
22337#pragma GCC visibility push(default)
22338#define rb_str_dup_frozen rb_str_new_frozen
22339#define rb_hash_uint32(h,i) st_hash_uint32((h), (i))
22340#define rb_hash_uint(h,i) st_hash_uint((h), (i))
22341#define rb_hash_end(h) st_hash_end(h)
22342#define rb_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_str_new_static : rb_str_new) ((str), (len)))
22343#define rb_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_new_cstr : rb_str_new_cstr) (str))
22344#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)))
22345#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)))
22346#define rb_usascii_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_usascii_str_new_cstr : rb_usascii_str_new_cstr) (str))
22347#define rb_utf8_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_utf8_str_new_cstr : rb_utf8_str_new_cstr) (str))
22348#define rb_external_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_external_str_new_cstr : rb_external_str_new_cstr) (str))
22349#define rb_locale_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_locale_str_new_cstr : rb_locale_str_new_cstr) (str))
22350#define rb_str_buf_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_buf_new_cstr : rb_str_buf_new_cstr) (str))
22351#define rb_str_cat_cstr(buf,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((buf), (str)))
22352#define rb_exc_new_cstr(exc,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_exc_new_cstr : rb_exc_new_cstr) ((exc), (str)))
22353#define rb_str_new2 rb_str_new_cstr
22354#define rb_str_new3 rb_str_new_shared
22355#define rb_str_new4 rb_str_new_frozen
22356#define rb_str_new5 rb_str_new_with_class
22357#define rb_str_buf_new2 rb_str_buf_new_cstr
22358#define rb_usascii_str_new2 rb_usascii_str_new_cstr
22359#define rb_str_buf_cat rb_str_cat
22360#define rb_str_buf_cat2 rb_str_cat_cstr
22361#define rb_str_cat2 rb_str_cat_cstr
22362#define rb_strlen_lit(str) (sizeof(str "") - 1)
22363#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str))
22364#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str))
22365#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str))
22366#define rb_enc_str_new_lit(str,enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc))
22367#define rb_str_new_literal(str) rb_str_new_lit(str)
22368#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str)
22369#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str)
22370#define rb_enc_str_new_literal(str,enc) rb_enc_str_new_lit(str, enc)
22371#pragma GCC visibility pop
22372#define RBIMPL_INTERN_STRUCT_H
22373#pragma GCC visibility push(default)
22374#pragma GCC visibility pop
22375#define RBIMPL_INTERN_THREAD_H
22376#pragma GCC visibility push(default)
22377#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1)
22378#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1)
22379#pragma GCC visibility pop
22380#define RBIMPL_INTERN_TIME_H
22381#pragma GCC visibility push(default)
22382#pragma GCC visibility pop
22383#define RBIMPL_INTERN_VARIABLE_H
22384#pragma GCC visibility push(default)
22385#pragma GCC visibility pop
22386#define RUBY_VM 1
22387#define HAVE_NATIVETHREAD
22388#define InitVM(ext) {void InitVM_ ##ext(void);InitVM_ ##ext();}
22389#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); })
22390#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); })
22391#define RUBY_SUBST_H 1
22392#undef snprintf
22393#undef vsnprintf
22394#define snprintf ruby_snprintf
22395#define vsnprintf ruby_vsnprintf
22396#pragma GCC visibility pop
22397#define RUBY_VM_CORE_H
22398#define N_OR_RUBY_DEBUG(n) (((n) > 0) ? (n) : RUBY_DEBUG)
22399#define VM_CHECK_MODE N_OR_RUBY_DEBUG(0)
22400#define VMDEBUG 0
22401#define RUBY_TOPLEVEL_ASSERT_H
22402#undef assert
22403#define assert RUBY_ASSERT_NDEBUG
22404#define VM_ASSERT(expr) ((void)0)
22405#define VM_UNREACHABLE(func) UNREACHABLE
22406#define RUBY_DEBUG_THREAD_SCHEDULE()
22407#define RUBY_ASSERT_MUTEX_OWNED(mutex) VM_ASSERT(rb_mutex_owned_p(mutex))
22408#define RUBY_ASSERT_CRITICAL_SECTION_ENTER()
22409#define RUBY_ASSERT_CRITICAL_SECTION_LEAVE()
22410#define _SETJMP_H_
22411#define _JBTYPE long
22412#define _JBLEN 32
22413#define _SAVEMASK _JBLEN
22414#define _SIGMASK (_JBLEN+1)
22415#define _CYGWIN_WORKING_SIGSETJMP
22416#define __SIGMASK_FUNC pthread_sigmask
22417#define sigsetjmp(env,savemask) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((*_sjbuf)[_SAVEMASK] = savemask, __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)), setjmp (*_sjbuf)); })
22418#define siglongjmp(env,val) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((((*_sjbuf)[_SAVEMASK]) ? __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0) : 0), longjmp (*_sjbuf, val)); })
22419#define CCAN_LIST_H
22420#undef assert
22421#define assert(__e) ((void)0)
22422#define static_assert _Static_assert
22423#define CCAN_STR_H
22424#define stringify(expr) ccan_stringify_1(expr)
22425#define ccan_stringify(expr) ccan_stringify_1(expr)
22426#define ccan_stringify_1(expr) #expr
22427#define CCAN_CONTAINER_OF_H
22428#define CCAN_CHECK_TYPE_H
22429#define ccan_check_type(expr,type) ((typeof(expr) *)0 != (type *)0)
22430#define ccan_check_types_match(expr1,expr2) ((typeof(expr1) *)0 != (typeof(expr2) *)0)
22431#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))
22432#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))
22433#define ccan_container_off(containing_type,member) offsetof(containing_type, member)
22434#define ccan_container_of_var(member_ptr,container_var,member) ccan_container_of(member_ptr, typeof(*container_var), member)
22435#define ccan_container_off_var(var,member) ccan_container_off(typeof(*var), member)
22436#define CCAN_LIST_LOC __FILE__ ":" ccan_stringify(__LINE__)
22437#define ccan_list_debug(h,loc) ((void)loc, h)
22438#define ccan_list_debug_node(n,loc) ((void)loc, n)
22439#define CCAN_LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
22440#define CCAN_LIST_HEAD(name) struct ccan_list_head name = CCAN_LIST_HEAD_INIT(name)
22441#define ccan_list_add_after(h,p,n) ccan_list_add_after_(h, p, n, CCAN_LIST_LOC)
22442#define ccan_list_add(h,n) ccan_list_add_(h, n, CCAN_LIST_LOC)
22443#define ccan_list_add_before(h,p,n) ccan_list_add_before_(h, p, n, CCAN_LIST_LOC)
22444#define ccan_list_add_tail(h,n) ccan_list_add_tail_(h, n, CCAN_LIST_LOC)
22445#define ccan_list_empty(h) ccan_list_empty_(h, CCAN_LIST_LOC)
22446#define ccan_list_empty_nodebug(h) ccan_list_empty(h)
22447#define ccan_list_del(n) ccan_list_del_(n, CCAN_LIST_LOC)
22448#define ccan_list_del_init(n) ccan_list_del_init_(n, CCAN_LIST_LOC)
22449#define ccan_list_swap(o,n) ccan_list_swap_(o, n, CCAN_LIST_LOC)
22450#define ccan_list_entry(n,type,member) ccan_container_of(n, type, member)
22451#define ccan_list_top(h,type,member) ((type *)ccan_list_top_((h), ccan_list_off_(type, member)))
22452#define ccan_list_pop(h,type,member) ((type *)ccan_list_pop_((h), ccan_list_off_(type, member)))
22453#define ccan_list_tail(h,type,member) ((type *)ccan_list_tail_((h), ccan_list_off_(type, member)))
22454#define ccan_list_for_each(h,i,member) ccan_list_for_each_off(h, i, ccan_list_off_var_(i, member))
22455#define ccan_list_for_each_rev(h,i,member) ccan_list_for_each_rev_off(h, i, ccan_list_off_var_(i, member))
22456#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))
22457#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))
22458#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)))
22459#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)))
22460#define ccan_list_append_list(t,f) ccan_list_append_list_(t, f, __FILE__ ":" ccan_stringify(__LINE__))
22461#define ccan_list_prepend_list(t,f) ccan_list_prepend_list_(t, f, CCAN_LIST_LOC)
22462#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)))
22463#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)))
22464#define ccan_list_for_each_off(h,i,off) ccan_list_for_each_off_dir_((h),(i),(off),next)
22465#define ccan_list_for_each_rev_off(h,i,off) ccan_list_for_each_off_dir_((h),(i),(off),prev)
22466#define ccan_list_for_each_safe_off(h,i,nxt,off) ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
22467#define ccan_list_for_each_rev_safe_off(h,i,nxt,off) ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
22468#define ccan_list_entry_off(n,type,off) ((type *)ccan_list_node_from_off_((n), (off)))
22469#define ccan_list_head_off(h,type,off) ((type *)ccan_list_head_off((h), (off)))
22470#define ccan_list_tail_off(h,type,off) ((type *)ccan_list_tail_((h), (off)))
22471#define ccan_list_add_off(h,n,off) ccan_list_add((h), ccan_list_node_from_off_((n), (off)))
22472#define ccan_list_del_off(n,off) ccan_list_del(ccan_list_node_from_off_((n), (off)))
22473#define ccan_list_del_from_off(h,n,off) ccan_list_del_from(h, ccan_list_node_from_off_((n), (off)))
22474#define ccan_list_off_(type,member) (ccan_container_off(type, member) + ccan_check_type(((type *)0)->member, struct ccan_list_node))
22475#define ccan_list_off_var_(var,member) (ccan_container_off_var(var, member) + ccan_check_type(var->member, struct ccan_list_node))
22476#define ccan_list_typeof(var) typeof(var)
22477#define RUBY_ID_H
22478#define ID_STATIC_SYM RUBY_ID_STATIC_SYM
22479#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT
22480#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK
22481#define ID_LOCAL RUBY_ID_LOCAL
22482#define ID_INSTANCE RUBY_ID_INSTANCE
22483#define ID_GLOBAL RUBY_ID_GLOBAL
22484#define ID_ATTRSET RUBY_ID_ATTRSET
22485#define ID_CONST RUBY_ID_CONST
22486#define ID_CLASS RUBY_ID_CLASS
22487#define ID_JUNK RUBY_ID_JUNK
22488#define ID_INTERNAL RUBY_ID_INTERNAL
22489#define symIFUNC ID2SYM(idIFUNC)
22490#define symCFUNC ID2SYM(idCFUNC)
22491#define RUBY_TOKEN_DOT2 128
22492#define RUBY_TOKEN_DOT3 129
22493#define RUBY_TOKEN_BDOT2 130
22494#define RUBY_TOKEN_BDOT3 131
22495#define RUBY_TOKEN_UPLUS 132
22496#define RUBY_TOKEN_UMINUS 133
22497#define RUBY_TOKEN_POW 134
22498#define RUBY_TOKEN_CMP 135
22499#define RUBY_TOKEN_LSHFT 136
22500#define RUBY_TOKEN_RSHFT 137
22501#define RUBY_TOKEN_LEQ 138
22502#define RUBY_TOKEN_GEQ 139
22503#define RUBY_TOKEN_EQ 140
22504#define RUBY_TOKEN_EQQ 141
22505#define RUBY_TOKEN_NEQ 142
22506#define RUBY_TOKEN_MATCH 143
22507#define RUBY_TOKEN_NMATCH 144
22508#define RUBY_TOKEN_AREF 145
22509#define RUBY_TOKEN_ASET 146
22510#define RUBY_TOKEN_COLON2 147
22511#define RUBY_TOKEN_ANDOP 148
22512#define RUBY_TOKEN_OROP 149
22513#define RUBY_TOKEN_ANDDOT 150
22514#define RUBY_TOKEN(t) RUBY_TOKEN_ ##t
22515#define RUBY_TOKEN2ID_TYPE(tok,type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM)
22516#define TOKEN2LOCALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_LOCAL)
22517#define TOKEN2INSTANCEID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_INSTANCE)
22518#define TOKEN2GLOBALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_GLOBAL)
22519#define TOKEN2CONSTID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CONST)
22520#define TOKEN2CLASSID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CLASS)
22521#define TOKEN2ATTRSETID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_ATTRSET)
22522#define DEFINE_LOCALID_FROM_TOKEN(n) id ##n = TOKEN2LOCALID(t ##n)
22523#define DEFINE_INSTANCEID_FROM_TOKEN(n) id ##n = TOKEN2INSTANCEID(t ##n)
22524#define DEFINE_GLOBALID_FROM_TOKEN(n) id ##n = TOKEN2GLOBALID(t ##n)
22525#define DEFINE_CONSTID_FROM_TOKEN(n) id ##n = TOKEN2CONSTID(t ##n)
22526#define DEFINE_CLASSID_FROM_TOKEN(n) id ##n = TOKEN2CLASSID(t ##n)
22527#define DEFINE_ATTRSETID_FROM_TOKEN(n) id ##n = TOKEN2ATTRSETID(t ##n)
22528#define RUBY_INTERNAL_H 1
22529#define LIKELY(x) RB_LIKELY(x)
22530#define UNLIKELY(x) RB_UNLIKELY(x)
22531#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
22532#define roomof(x,y) (((x) + (y) - 1) / (y))
22533#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
22534#define ACCESS_ONCE(type,x) (*((volatile type *)&(x)))
22535#define UNDEF_P RB_UNDEF_P
22536#define NIL_OR_UNDEF_P RB_NIL_OR_UNDEF_P
22537#undef RARRAY_AREF
22538#undef RClass
22539#undef RCLASS_SUPER
22540#undef NEWOBJ_OF
22541#undef RB_NEWOBJ_OF
22542#undef RB_OBJ_WRITE
22543#undef RHASH_IFNONE
22544#undef RHASH_SIZE
22545#undef RHASH_TBL
22546#undef RHASH_EMPTY_P
22547#undef RSTRUCT_LEN
22548#undef RSTRUCT_PTR
22549#undef RSTRUCT_SET
22550#undef RSTRUCT_GET
22551#define rb_ary_new_from_args(...) rb_nonexistent_symbol(__VA_ARGS__)
22552#define rb_io_fptr_finalize(...) rb_nonexistent_symbol(__VA_ARGS__)
22553#define rb_fstring_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22554#define rb_sym_intern_ascii_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22555#define rb_funcallv(...) rb_nonexistent_symbol(__VA_ARGS__)
22556#define rb_method_basic_definition_p(...) rb_nonexistent_symbol(__VA_ARGS__)
22557#pragma GCC visibility push(default)
22558#pragma GCC visibility pop
22559#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
22560#define rp_m(msg,obj) do { fputs((msg), stderr); rb_obj_info_dump((VALUE)(obj)); } while (0)
22561#define bp() ruby_debug_breakpoint()
22562#define RBOOL(v) ((v) ? Qtrue : Qfalse)
22563#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
22564#undef memcpy
22565#define memcpy ruby_nonempty_memcpy
22566#define INTERNAL_ARRAY_H
22567#define INTERNAL_STATIC_ASSERT_H
22568#define STATIC_ASSERT RBIMPL_STATIC_ASSERT
22569#define ARRAY_DEBUG (0+RUBY_DEBUG)
22570#define RARRAY_SHARED_FLAG ELTS_SHARED
22571#define RARRAY_SHARED_ROOT_FLAG FL_USER12
22572#define RARRAY_PTR_IN_USE_FLAG FL_USER14
22573#pragma GCC visibility push(default)
22574#pragma GCC visibility pop
22575#undef rb_ary_new_from_args
22576#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); })
22577#undef RARRAY_AREF
22578#define INTERNAL_BOP_H
22579#pragma GCC visibility push(default)
22580#pragma GCC visibility pop
22581#define INTEGER_REDEFINED_OP_FLAG (1 << 0)
22582#define FLOAT_REDEFINED_OP_FLAG (1 << 1)
22583#define STRING_REDEFINED_OP_FLAG (1 << 2)
22584#define ARRAY_REDEFINED_OP_FLAG (1 << 3)
22585#define HASH_REDEFINED_OP_FLAG (1 << 4)
22586#define SYMBOL_REDEFINED_OP_FLAG (1 << 6)
22587#define TIME_REDEFINED_OP_FLAG (1 << 7)
22588#define REGEXP_REDEFINED_OP_FLAG (1 << 8)
22589#define NIL_REDEFINED_OP_FLAG (1 << 9)
22590#define TRUE_REDEFINED_OP_FLAG (1 << 10)
22591#define FALSE_REDEFINED_OP_FLAG (1 << 11)
22592#define PROC_REDEFINED_OP_FLAG (1 << 12)
22593#define BASIC_OP_UNREDEFINED_P(op,klass) (LIKELY((ruby_vm_redefined_flag[(op)]&(klass)) == 0))
22594#define INTERNAL_SERIAL_H
22595#define SERIALT2NUM ULL2NUM
22596#define PRI_SERIALT_PREFIX PRI_LL_PREFIX
22597#define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
22598#define INTERNAL_VM_H
22599#undef rb_funcallv
22600#undef rb_method_basic_definition_p
22601#pragma GCC visibility push(default)
22602#pragma GCC visibility pop
22603#pragma GCC visibility push(default)
22604#pragma GCC visibility pop
22605#pragma GCC visibility push(default)
22606#pragma GCC visibility pop
22607#pragma GCC visibility push(default)
22608#pragma GCC visibility pop
22609#define RUBY_DTRACE_CREATE_HOOK(name,arg) RUBY_DTRACE_HOOK(name ##_CREATE, arg)
22610#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)
22611#define RUBY_METHOD_H 1
22612#define INTERNAL_IMEMO_H
22613#define INTERNAL_GC_H
22614#define INTERNAL_COMPILERS_H
22615#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
22616#define GCC_VERSION_SINCE(x,y,z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
22617#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))))))
22618#define MSC_VERSION_SINCE(_) RBIMPL_COMPILER_SINCE(MSVC, (_) / 100, (_) % 100, 0)
22619#define MSC_VERSION_BEFORE(_) RBIMPL_COMPILER_BEFORE(MSVC, (_) / 100, (_) % 100, 0)
22620#define __has_declspec_attribute(...) RBIMPL_HAS_DECLSPEC_ATTRIBUTE(__VA_ARGS__)
22621#define __has_warning(...) RBIMPL_HAS_WARNING(__VA_ARGS__)
22622#define RB_OBJ_BUILTIN_TYPE(obj) rb_obj_builtin_type(obj)
22623#define OBJ_BUILTIN_TYPE(obj) RB_OBJ_BUILTIN_TYPE(obj)
22624#define rb_obj_builtin_type(obj) __extension__({ VALUE arg_obj = (obj); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })
22625#define FLEX_ARY_LEN
22626#define BITFIELD(type,name,size) type name : size
22627#define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
22628#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))
22629#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))
22630#define RB_NEWOBJ_OF(var,T,c,f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
22631#define RB_EC_NEWOBJ_OF(ec,var,T,c,f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
22632#define NEWOBJ_OF(var,T,c,f) RB_NEWOBJ_OF((var), T, (c), (f))
22633#define RVARGC_NEWOBJ_OF(var,T,c,f,s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
22634#define RB_OBJ_GC_FLAGS_MAX 6
22635#define INTERNAL_WARNINGS_H
22636#define COMPILER_WARNING_PUSH RBIMPL_WARNING_PUSH()
22637#define COMPILER_WARNING_POP RBIMPL_WARNING_POP()
22638#define COMPILER_WARNING_ERROR(flag) RBIMPL_WARNING_ERROR(flag)
22639#define COMPILER_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag)
22640#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; })
22641#define UNALIGNED_MEMBER_PTR(ptr,mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
22642#define RB_OBJ_WRITE(a,slot,b) rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), (VALUE)(b), __FILE__, __LINE__)
22643#define SIZE_POOL_COUNT 5
22644#define RCLASS_EXT_EMBEDDED (SIZE_POOL_COUNT > 1)
22645#pragma GCC visibility push(default)
22646#pragma GCC visibility pop
22647#pragma GCC visibility push(default)
22648#pragma GCC visibility pop
22649#define SIZED_REALLOC_N(x,y,z,w) REALLOC_N(x, y, z)
22650#define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
22651#define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
22652#define ruby_sized_xfree ruby_sized_xfree_inlined
22653#define IMEMO_DEBUG 0
22654#define IMEMO_MASK 0x0f
22655#define IMEMO_FL_USHIFT (FL_USHIFT + 4)
22656#define IMEMO_FL_USER0 FL_USER4
22657#define IMEMO_FL_USER1 FL_USER5
22658#define IMEMO_FL_USER2 FL_USER6
22659#define IMEMO_FL_USER3 FL_USER7
22660#define IMEMO_FL_USER4 FL_USER8
22661#define IMEMO_FL_USER5 FL_USER9
22662#define THROW_DATA_CONSUMED IMEMO_FL_USER0
22663#define THROW_DATA_P(err) imemo_throw_data_p((VALUE)err)
22664#define MEMO_CAST(m) ((struct MEMO *)(m))
22665#define MEMO_NEW(a,b,c) ((struct MEMO *)rb_imemo_new(imemo_memo, (VALUE)(a), (VALUE)(b), (VALUE)(c), 0))
22666#define MEMO_FOR(type,value) ((type *)RARRAY_PTR(value))
22667#define NEW_MEMO_FOR(type,value) ((value) = rb_ary_hidden_new_fill(type_roomof(type, VALUE)), MEMO_FOR(type, value))
22668#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))
22669#pragma GCC visibility push(default)
22670#pragma GCC visibility pop
22671#define IMEMO_TYPE_P(v,t) imemo_type_p((VALUE)v, t)
22672#pragma GCC diagnostic push
22673#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22674#pragma GCC diagnostic pop
22675#pragma GCC diagnostic push
22676#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22677#pragma GCC diagnostic pop
22678#define END_OF_ENUMERATION(key)
22679#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
22680#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
22681#define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
22682#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags |= IMEMO_FL_USER3)
22683#define METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4)
22684#define METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4)
22685#define METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5)
22686#define METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5)
22687#define VM_METHOD_TYPE_MINIMUM_BITS 4
22688#define rb_iseq_t rb_iseq_t
22689#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
22690#define UNDEFINED_REFINED_METHOD_P(def) ((def)->type == VM_METHOD_TYPE_REFINED && UNDEFINED_METHOD_ENTRY_P((def)->body.refined.orig_me))
22691#pragma GCC visibility push(default)
22692#pragma GCC visibility pop
22693#define RUBY_NODE_H 1
22694#define RNODE(obj) ((struct RNode *)(obj))
22695#define NODE_FL_NEWLINE (((VALUE)1)<<7)
22696#define NODE_TYPESHIFT 8
22697#define NODE_TYPEMASK (((VALUE)0x7f)<<NODE_TYPESHIFT)
22698#define nd_type(n) ((int) (((n)->flags & NODE_TYPEMASK)>>NODE_TYPESHIFT))
22699#define nd_set_type(n,t) rb_node_set_type(n, t)
22700#define nd_init_type(n,t) (n)->flags=(((n)->flags&~NODE_TYPEMASK)|((((unsigned long)(t))<<NODE_TYPESHIFT)&NODE_TYPEMASK))
22701#define NODE_LSHIFT (NODE_TYPESHIFT+7)
22702#define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
22703#define nd_line(n) (int)(((SIGNED_VALUE)(n)->flags)>>NODE_LSHIFT)
22704#define nd_set_line(n,l) (n)->flags=(((n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
22705#define nd_first_column(n) ((int)((n)->nd_loc.beg_pos.column))
22706#define nd_set_first_column(n,v) ((n)->nd_loc.beg_pos.column = (v))
22707#define nd_first_lineno(n) ((int)((n)->nd_loc.beg_pos.lineno))
22708#define nd_set_first_lineno(n,v) ((n)->nd_loc.beg_pos.lineno = (v))
22709#define nd_first_loc(n) ((n)->nd_loc.beg_pos)
22710#define nd_set_first_loc(n,v) (nd_first_loc(n) = (v))
22711#define nd_last_column(n) ((int)((n)->nd_loc.end_pos.column))
22712#define nd_set_last_column(n,v) ((n)->nd_loc.end_pos.column = (v))
22713#define nd_last_lineno(n) ((int)((n)->nd_loc.end_pos.lineno))
22714#define nd_set_last_lineno(n,v) ((n)->nd_loc.end_pos.lineno = (v))
22715#define nd_last_loc(n) ((n)->nd_loc.end_pos)
22716#define nd_set_last_loc(n,v) (nd_last_loc(n) = (v))
22717#define nd_node_id(n) ((n)->node_id)
22718#define nd_set_node_id(n,id) ((n)->node_id = (id))
22719#define nd_head u1.node
22720#define nd_alen u2.argc
22721#define nd_next u3.node
22722#define nd_cond u1.node
22723#define nd_body u2.node
22724#define nd_else u3.node
22725#define nd_resq u2.node
22726#define nd_ensr u3.node
22727#define nd_1st u1.node
22728#define nd_2nd u2.node
22729#define nd_stts u1.node
22730#define nd_entry u3.id
22731#define nd_vid u1.id
22732#define nd_var u1.node
22733#define nd_iter u3.node
22734#define nd_value u2.node
22735#define nd_aid u3.id
22736#define nd_lit u1.value
22737#define nd_recv u1.node
22738#define nd_mid u2.id
22739#define nd_args u3.node
22740#define nd_ainfo u3.args
22741#define nd_defn u3.node
22742#define nd_cpath u1.node
22743#define nd_super u3.node
22744#define nd_beg u1.node
22745#define nd_end u2.node
22746#define nd_state u3.state
22747#define nd_nth u2.argc
22748#define nd_alias u1.id
22749#define nd_orig u2.id
22750#define nd_undef u2.node
22751#define nd_brace u2.argc
22752#define nd_pconst u1.node
22753#define nd_pkwargs u2.node
22754#define nd_pkwrestarg u3.node
22755#define nd_apinfo u3.apinfo
22756#define nd_fpinfo u3.fpinfo
22757#define nd_tbl u1.tbl
22758#define nd_pid u1.id
22759#define nd_plen u2.argc
22760#define nd_cflag u2.id
22761#define nd_cval u3.value
22762#define nd_rval u2.value
22763#define nd_tag u1.id
22764#define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
22765#define NEW_NODE_WITH_LOCALS(t,a1,a2,loc) node_newnode_with_locals(p, (t),(VALUE)(a1),(VALUE)(a2),loc)
22766#define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
22767#define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
22768#define NEW_SCOPE(a,b,loc) NEW_NODE_WITH_LOCALS(NODE_SCOPE,b,a,loc)
22769#define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
22770#define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
22771#define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
22772#define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
22773#define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
22774#define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc)
22775#define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
22776#define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc)
22777#define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
22778#define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
22779#define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc)
22780#define NEW_FOR_MASGN(v,loc) NEW_NODE(NODE_FOR_MASGN,v,0,0,loc)
22781#define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
22782#define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
22783#define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
22784#define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
22785#define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
22786#define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
22787#define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
22788#define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
22789#define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
22790#define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
22791#define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
22792#define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
22793#define NEW_LIST(a,loc) NEW_NODE(NODE_LIST,a,1,0,loc)
22794#define NEW_ZLIST(loc) NEW_NODE(NODE_ZLIST,0,0,0,loc)
22795#define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
22796#define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
22797#define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,v,loc)
22798#define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
22799#define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
22800#define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
22801#define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
22802#define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
22803#define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
22804#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)
22805#define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
22806#define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
22807#define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
22808#define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
22809#define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,v,loc)
22810#define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
22811#define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
22812#define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
22813#define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
22814#define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
22815#define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
22816#define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
22817#define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
22818#define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
22819#define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
22820#define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
22821#define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
22822#define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
22823#define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
22824#define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
22825#define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
22826#define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
22827#define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
22828#define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
22829#define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
22830#define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
22831#define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
22832#define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
22833#define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
22834#define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
22835#define NEW_KW_ARG(i,v,loc) NEW_NODE(NODE_KW_ARG,i,v,0,loc)
22836#define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
22837#define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
22838#define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
22839#define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
22840#define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
22841#define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
22842#define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
22843#define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
22844#define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
22845#define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
22846#define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
22847#define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
22848#define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
22849#define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
22850#define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
22851#define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,1,loc)
22852#define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
22853#define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
22854#define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
22855#define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
22856#define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
22857#define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
22858#define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
22859#define NEW_ERROR(loc) NEW_NODE(NODE_ERROR,0,0,0,loc)
22860#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
22861#define NODE_REQUIRED_KEYWORD_P(node) ((node)->nd_value == NODE_SPECIAL_REQUIRED_KEYWORD)
22862#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
22863#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
22864#define NODE_SPECIAL_EXCESSIVE_COMMA ((ID)1)
22865#define NODE_SPECIAL_NO_REST_KEYWORD ((NODE *)-1)
22866#pragma GCC visibility push(default)
22867#pragma GCC visibility pop
22868#define RUBY_ATOMIC_H
22869#define RUBY_ATOMIC_GENERIC_MACRO 1
22870#define RUBY_ATOMIC_FETCH_ADD(var,val) rbimpl_atomic_fetch_add(&(var), (val))
22871#define RUBY_ATOMIC_FETCH_SUB(var,val) rbimpl_atomic_fetch_sub(&(var), (val))
22872#define RUBY_ATOMIC_OR(var,val) rbimpl_atomic_or(&(var), (val))
22873#define RUBY_ATOMIC_EXCHANGE(var,val) rbimpl_atomic_exchange(&(var), (val))
22874#define RUBY_ATOMIC_CAS(var,oldval,newval) rbimpl_atomic_cas(&(var), (oldval), (newval))
22875#define RUBY_ATOMIC_SET(var,val) rbimpl_atomic_set(&(var), (val))
22876#define RUBY_ATOMIC_ADD(var,val) rbimpl_atomic_add(&(var), (val))
22877#define RUBY_ATOMIC_SUB(var,val) rbimpl_atomic_sub(&(var), (val))
22878#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var))
22879#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var))
22880#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var))
22881#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var))
22882#define RUBY_ATOMIC_SIZE_EXCHANGE(var,val) rbimpl_atomic_size_exchange(&(var), (val))
22883#define RUBY_ATOMIC_SIZE_CAS(var,oldval,newval) rbimpl_atomic_size_cas(&(var), (oldval), (newval))
22884#define RUBY_ATOMIC_SIZE_ADD(var,val) rbimpl_atomic_size_add(&(var), (val))
22885#define RUBY_ATOMIC_SIZE_SUB(var,val) rbimpl_atomic_size_sub(&(var), (val))
22886#define RUBY_ATOMIC_PTR_EXCHANGE(var,val) RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val))
22887#define RUBY_ATOMIC_PTR_CAS(var,oldval,newval) RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (oldval), (newval)))
22888#define RUBY_ATOMIC_VALUE_EXCHANGE(var,val) rbimpl_atomic_value_exchange(&(var), (val))
22889#define RUBY_ATOMIC_VALUE_CAS(var,oldval,newval) rbimpl_atomic_value_cas(&(var), (oldval), (newval))
22890#define ATOMIC_ADD(var,val) RUBY_ATOMIC_ADD(var, val)
22891#define ATOMIC_CAS(var,oldval,newval) RUBY_ATOMIC_CAS(var, oldval, newval)
22892#define ATOMIC_DEC(var) RUBY_ATOMIC_DEC(var)
22893#define ATOMIC_EXCHANGE(var,val) RUBY_ATOMIC_EXCHANGE(var, val)
22894#define ATOMIC_FETCH_ADD(var,val) RUBY_ATOMIC_FETCH_ADD(var, val)
22895#define ATOMIC_FETCH_SUB(var,val) RUBY_ATOMIC_FETCH_SUB(var, val)
22896#define ATOMIC_INC(var) RUBY_ATOMIC_INC(var)
22897#define ATOMIC_OR(var,val) RUBY_ATOMIC_OR(var, val)
22898#define ATOMIC_PTR_CAS(var,oldval,newval) RUBY_ATOMIC_PTR_CAS(var, oldval, newval)
22899#define ATOMIC_PTR_EXCHANGE(var,val) RUBY_ATOMIC_PTR_EXCHANGE(var, val)
22900#define ATOMIC_SET(var,val) RUBY_ATOMIC_SET(var, val)
22901#define ATOMIC_SIZE_ADD(var,val) RUBY_ATOMIC_SIZE_ADD(var, val)
22902#define ATOMIC_SIZE_CAS(var,oldval,newval) RUBY_ATOMIC_SIZE_CAS(var, oldval, newval)
22903#define ATOMIC_SIZE_DEC(var) RUBY_ATOMIC_SIZE_DEC(var)
22904#define ATOMIC_SIZE_EXCHANGE(var,val) RUBY_ATOMIC_SIZE_EXCHANGE(var, val)
22905#define ATOMIC_SIZE_INC(var) RUBY_ATOMIC_SIZE_INC(var)
22906#define ATOMIC_SIZE_SUB(var,val) RUBY_ATOMIC_SIZE_SUB(var, val)
22907#define ATOMIC_SUB(var,val) RUBY_ATOMIC_SUB(var, val)
22908#define ATOMIC_VALUE_CAS(var,oldval,val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
22909#define ATOMIC_VALUE_EXCHANGE(var,val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
22910#define RUBY_VM_OPTS_H
22911#define OPT_TAILCALL_OPTIMIZATION 0
22912#define OPT_PEEPHOLE_OPTIMIZATION 1
22913#define OPT_SPECIALISED_INSTRUCTION 1
22914#define OPT_INLINE_CONST_CACHE 1
22915#define OPT_FROZEN_STRING_LITERAL 0
22916#define OPT_DEBUG_FROZEN_STRING_LITERAL 0
22917#define OPT_THREADED_CODE 0
22918#define OPT_DIRECT_THREADED_CODE (OPT_THREADED_CODE == 0)
22919#define OPT_TOKEN_THREADED_CODE (OPT_THREADED_CODE == 1)
22920#define OPT_CALL_THREADED_CODE (OPT_THREADED_CODE == 2)
22921#define OPT_CHECKED_RUN 1
22922#define OPT_INLINE_METHOD_CACHE 1
22923#define OPT_GLOBAL_METHOD_CACHE 1
22924#define OPT_BLOCKINLINING 0
22925#define OPT_IC_FOR_IVAR 1
22926#define OPT_OPERANDS_UNIFICATION 1
22927#define OPT_INSTRUCTIONS_UNIFICATION 0
22928#define OPT_UNIFY_ALL_COMBINATION 0
22929#define OPT_STACK_CACHING 0
22930#define OPT_SUPPORT_JOKE 0
22931#define OPT_SUPPORT_CALL_C_FUNCTION 0
22932#define VM_COLLECT_USAGE_DETAILS 0
22933#define RUBY_SHAPE_H
22934#define SIZEOF_SHAPE_T 4
22935#define SHAPE_IN_BASIC_FLAGS 1
22936#define MAX_IVARS (attr_index_t)(-1)
22937#define SHAPE_ID_NUM_BITS 32
22938#define SHAPE_MASK (((uintptr_t)1 << SHAPE_ID_NUM_BITS) - 1)
22939#define SHAPE_FLAG_MASK (((VALUE)-1) >> SHAPE_ID_NUM_BITS)
22940#define SHAPE_FLAG_SHIFT ((SIZEOF_VALUE * 8) - SHAPE_ID_NUM_BITS)
22941#define SHAPE_BITMAP_SIZE 16384
22942#define SHAPE_MAX_VARIATIONS 8
22943#define MAX_SHAPE_ID (SHAPE_MASK - 1)
22944#define INVALID_SHAPE_ID SHAPE_MASK
22945#define ROOT_SHAPE_ID 0x0
22946#define SPECIAL_CONST_SHAPE_ID (SIZE_POOL_COUNT * 2)
22947#define OBJ_TOO_COMPLEX_SHAPE_ID (SPECIAL_CONST_SHAPE_ID + 1)
22948#pragma GCC visibility push(default)
22949#pragma GCC visibility pop
22950#pragma GCC visibility push(default)
22951#pragma GCC visibility pop
22952#define RUBY_THREAD_NATIVE_H 1
22953#define _SCHED_H_
22954#define _SYS_SCHED_H_
22955#define SCHED_OTHER 3
22956#define SCHED_FIFO 1
22957#define SCHED_RR 2
22958#define _PTHREAD_H
22959#define PTHREAD_CANCEL_ASYNCHRONOUS 1
22960#define PTHREAD_CANCEL_ENABLE 0
22961#define PTHREAD_CANCEL_DEFERRED 0
22962#define PTHREAD_CANCEL_DISABLE 1
22963#define PTHREAD_CANCELED ((void *)-1)
22964#define PTHREAD_COND_INITIALIZER (pthread_cond_t)21
22965#define PTHREAD_CREATE_DETACHED 1
22966#define PTHREAD_CREATE_JOINABLE 0
22967#define PTHREAD_EXPLICIT_SCHED 1
22968#define PTHREAD_INHERIT_SCHED 0
22969#define PTHREAD_MUTEX_RECURSIVE 0
22970#define PTHREAD_MUTEX_ERRORCHECK 1
22971#define PTHREAD_MUTEX_NORMAL 2
22972#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
22973#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pthread_mutex_t)18
22974#define PTHREAD_NORMAL_MUTEX_INITIALIZER_NP (pthread_mutex_t)19
22975#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pthread_mutex_t)20
22976#define PTHREAD_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER_NP
22977#define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 }
22978#define PTHREAD_PROCESS_SHARED 1
22979#define PTHREAD_PROCESS_PRIVATE 0
22980#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)22
22981#define PTHREAD_SCOPE_PROCESS 0
22982#define PTHREAD_SCOPE_SYSTEM 1
22983#define PTHREAD_BARRIER_SERIAL_THREAD (-1)
22984#define pthread_cleanup_push(_fn,_arg) { __pthread_cleanup_handler __cleanup_handler = { _fn, _arg, NULL }; _pthread_cleanup_push( &__cleanup_handler );
22985#define pthread_cleanup_pop(_execute) _pthread_cleanup_pop( _execute ); }
22986#pragma GCC visibility push(default)
22987#pragma GCC visibility pop
22988#define VM_INSN_INFO_TABLE_IMPL 2
22989#define RUBY_NSIG NSIG
22990#define RUBY_SIGCHLD (SIGCLD)
22991#define SIGCHLD_LOSSY (0)
22992#define WAITPID_USE_SIGCHLD (RUBY_SIGCHLD || SIGCHLD_LOSSY)
22993#define USE_SIGALTSTACK
22994#define RB_ALTSTACK_INIT(var,altstack) var = rb_register_sigaltstack(altstack)
22995#define RB_ALTSTACK_FREE(var) free(var)
22996#define RB_ALTSTACK(var) var
22997#define RUBY_THREAD_PTHREAD_H
22998#define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
22999#define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
23000#undef except
23001#undef try
23002#undef leave
23003#undef finally
23004#define RB_THREAD_LOCAL_SPECIFIER _Thread_local
23005#pragma GCC visibility push(default)
23006#pragma GCC visibility pop
23007#define RUBY_VM_THREAD_MODEL 2
23008#define TAG_NONE RUBY_TAG_NONE
23009#define TAG_RETURN RUBY_TAG_RETURN
23010#define TAG_BREAK RUBY_TAG_BREAK
23011#define TAG_NEXT RUBY_TAG_NEXT
23012#define TAG_RETRY RUBY_TAG_RETRY
23013#define TAG_REDO RUBY_TAG_REDO
23014#define TAG_RAISE RUBY_TAG_RAISE
23015#define TAG_THROW RUBY_TAG_THROW
23016#define TAG_FATAL RUBY_TAG_FATAL
23017#define TAG_MASK RUBY_TAG_MASK
23018#define CoreDataFromValue(obj,type) (type*)DATA_PTR(obj)
23019#define GetCoreDataFromValue(obj,type,ptr) ((ptr) = CoreDataFromValue((obj), type))
23020#define PATHOBJ_PATH 0
23021#define PATHOBJ_REALPATH 1
23022#define ISEQ_IS_SIZE(body) (body->ic_size + body->ivc_size + body->ise_size + body->icvarc_size)
23023#define ISEQ_IS_IC_ENTRY(body,idx) (body->is_entries[(idx) + body->ise_size + body->icvarc_size + body->ivc_size].ic_cache);
23024#define ISEQ_BODY(iseq) ((iseq)->body)
23025#define EXTSTATIC 0
23026#define USE_LAZY_LOAD 0
23027#define GetVMPtr(obj,ptr) GetCoreDataFromValue((obj), rb_vm_t, (ptr))
23028#define VM_GLOBAL_CC_CACHE_TABLE_SIZE 1023
23029#define RUBY_VM_SIZE_ALIGN 4096
23030#define RUBY_VM_THREAD_VM_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
23031#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
23032#define RUBY_VM_THREAD_MACHINE_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
23033#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
23034#define RUBY_VM_FIBER_VM_STACK_SIZE ( 16 * 1024 * sizeof(VALUE))
23035#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
23036#define RUBY_VM_FIBER_MACHINE_STACK_SIZE ( 64 * 1024 * sizeof(VALUE))
23037#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
23038#define VM_DEBUG_BP_CHECK 0
23039#define VM_DEBUG_VERIFY_METHOD_CACHE (VMDEBUG != 0)
23040#define rb_execution_context_t rb_execution_context_t
23041#define VM_CORE_H_EC_DEFINED 1
23042#define VM_DEFINECLASS_TYPE(x) ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)
23043#define VM_DEFINECLASS_FLAG_SCOPED 0x08
23044#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS 0x10
23045#define VM_DEFINECLASS_SCOPED_P(x) ((x) & VM_DEFINECLASS_FLAG_SCOPED)
23046#define VM_DEFINECLASS_HAS_SUPERCLASS_P(x) ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)
23047#pragma GCC visibility push(default)
23048#pragma GCC visibility pop
23049#define GetProcPtr(obj,ptr) GetCoreDataFromValue((obj), rb_proc_t, (ptr))
23050#pragma GCC visibility push(default)
23051#pragma GCC visibility pop
23052#define GetBindingPtr(obj,ptr) GetCoreDataFromValue((obj), rb_binding_t, (ptr))
23053#define VM_CHECKMATCH_TYPE_MASK 0x03
23054#define VM_CHECKMATCH_ARRAY 0x04
23055#define VM_TAGGED_PTR_SET(p,tag) ((VALUE)(p) | (tag))
23056#define VM_TAGGED_PTR_REF(v,mask) ((void *)((v) & ~mask))
23057#define GC_GUARDED_PTR(p) VM_TAGGED_PTR_SET((p), 0x01)
23058#define GC_GUARDED_PTR_REF(p) VM_TAGGED_PTR_REF((p), 0x03)
23059#define GC_GUARDED_PTR_P(p) (((VALUE)(p)) & 0x01)
23060#define VM_ENV_DATA_SIZE ( 3)
23061#define VM_ENV_DATA_INDEX_ME_CREF (-2)
23062#define VM_ENV_DATA_INDEX_SPECVAL (-1)
23063#define VM_ENV_DATA_INDEX_FLAGS ( 0)
23064#define VM_ENV_DATA_INDEX_ENV ( 1)
23065#define VM_ENV_INDEX_LAST_LVAR (-VM_ENV_DATA_SIZE)
23066#define RUBYVM_CFUNC_FRAME_P(cfp) (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)
23067#define VM_GUARDED_PREV_EP(ep) GC_GUARDED_PTR(ep)
23068#define VM_BLOCK_HANDLER_NONE 0
23069#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
23070#define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
23071#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp,ecfp) ((void *)(ecfp) > (void *)(cfp))
23072#define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
23073#define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
23074#pragma GCC visibility push(default)
23075#pragma GCC visibility pop
23076#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)))
23077#define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]
23078#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)
23079#define CHECK_VM_STACK_OVERFLOW(cfp,margin) CHECK_VM_STACK_OVERFLOW0((cfp), (cfp)->sp, (margin))
23080#pragma GCC visibility push(default)
23081#pragma GCC visibility pop
23082#define GET_VM() rb_current_vm()
23083#define GET_RACTOR() rb_current_ractor()
23084#define GET_THREAD() rb_current_thread()
23085#define GET_EC() rb_current_execution_context(true)
23086#define RUBY_VM_SET_TIMER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TIMER_INTERRUPT_MASK)
23087#define RUBY_VM_SET_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, PENDING_INTERRUPT_MASK)
23088#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
23089#define RUBY_VM_SET_TRAP_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TRAP_INTERRUPT_MASK)
23090#define RUBY_VM_SET_TERMINATE_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TERMINATE_INTERRUPT_MASK)
23091#define RUBY_VM_SET_VM_BARRIER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, VM_BARRIER_INTERRUPT_MASK)
23092#define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
23093#define RUBY_VM_CHECK_INTS(ec) rb_vm_check_ints(ec)
23094#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)
23095#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)
23096#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)
23097#pragma GCC visibility push(default)
23098#define RUBY_EVENT_COVERAGE_LINE 0x010000
23099#define RUBY_EVENT_COVERAGE_BRANCH 0x020000
23100#pragma GCC visibility pop
23101#define PASS_PASSED_BLOCK_HANDLER_EC(ec) pass_passed_block_handler(ec)
23102#define PASS_PASSED_BLOCK_HANDLER() pass_passed_block_handler(GET_EC())
23103#define ruby_setjmp(env) RUBY_SETJMP(env)
23104#define ruby_longjmp(env,val) RUBY_LONGJMP((env),(val))
23105#define __ERRNO_H__
23106#define __error_t_defined 1
23107#define _SYS_ERRNO_H_
23108#define errno (*__errno())
23109#define __errno_r(ptr) _REENT_ERRNO(ptr)
23110#define EPERM 1
23111#define ENOENT 2
23112#define ESRCH 3
23113#define EINTR 4
23114#define EIO 5
23115#define ENXIO 6
23116#define E2BIG 7
23117#define ENOEXEC 8
23118#define EBADF 9
23119#define ECHILD 10
23120#define EAGAIN 11
23121#define ENOMEM 12
23122#define EACCES 13
23123#define EFAULT 14
23124#define ENOTBLK 15
23125#define EBUSY 16
23126#define EEXIST 17
23127#define EXDEV 18
23128#define ENODEV 19
23129#define ENOTDIR 20
23130#define EISDIR 21
23131#define EINVAL 22
23132#define ENFILE 23
23133#define EMFILE 24
23134#define ENOTTY 25
23135#define ETXTBSY 26
23136#define EFBIG 27
23137#define ENOSPC 28
23138#define ESPIPE 29
23139#define EROFS 30
23140#define EMLINK 31
23141#define EPIPE 32
23142#define EDOM 33
23143#define ERANGE 34
23144#define ENOMSG 35
23145#define EIDRM 36
23146#define ECHRNG 37
23147#define EL2NSYNC 38
23148#define EL3HLT 39
23149#define EL3RST 40
23150#define ELNRNG 41
23151#define EUNATCH 42
23152#define ENOCSI 43
23153#define EL2HLT 44
23154#define EDEADLK 45
23155#define ENOLCK 46
23156#define EBADE 50
23157#define EBADR 51
23158#define EXFULL 52
23159#define ENOANO 53
23160#define EBADRQC 54
23161#define EBADSLT 55
23162#define EDEADLOCK 56
23163#define EBFONT 57
23164#define ENOSTR 60
23165#define ENODATA 61
23166#define ETIME 62
23167#define ENOSR 63
23168#define ENONET 64
23169#define ENOPKG 65
23170#define EREMOTE 66
23171#define ENOLINK 67
23172#define EADV 68
23173#define ESRMNT 69
23174#define ECOMM 70
23175#define EPROTO 71
23176#define EMULTIHOP 74
23177#define ELBIN 75
23178#define EDOTDOT 76
23179#define EBADMSG 77
23180#define EFTYPE 79
23181#define ENOTUNIQ 80
23182#define EBADFD 81
23183#define EREMCHG 82
23184#define ELIBACC 83
23185#define ELIBBAD 84
23186#define ELIBSCN 85
23187#define ELIBMAX 86
23188#define ELIBEXEC 87
23189#define ENOSYS 88
23190#define ENMFILE 89
23191#define ENOTEMPTY 90
23192#define ENAMETOOLONG 91
23193#define ELOOP 92
23194#define EOPNOTSUPP 95
23195#define EPFNOSUPPORT 96
23196#define ECONNRESET 104
23197#define ENOBUFS 105
23198#define EAFNOSUPPORT 106
23199#define EPROTOTYPE 107
23200#define ENOTSOCK 108
23201#define ENOPROTOOPT 109
23202#define ESHUTDOWN 110
23203#define ECONNREFUSED 111
23204#define EADDRINUSE 112
23205#define ECONNABORTED 113
23206#define ENETUNREACH 114
23207#define ENETDOWN 115
23208#define ETIMEDOUT 116
23209#define EHOSTDOWN 117
23210#define EHOSTUNREACH 118
23211#define EINPROGRESS 119
23212#define EALREADY 120
23213#define EDESTADDRREQ 121
23214#define EMSGSIZE 122
23215#define EPROTONOSUPPORT 123
23216#define ESOCKTNOSUPPORT 124
23217#define EADDRNOTAVAIL 125
23218#define ENETRESET 126
23219#define EISCONN 127
23220#define ENOTCONN 128
23221#define ETOOMANYREFS 129
23222#define EPROCLIM 130
23223#define EUSERS 131
23224#define EDQUOT 132
23225#define ESTALE 133
23226#define ENOTSUP 134
23227#define ENOMEDIUM 135
23228#define ENOSHARE 136
23229#define ECASECLASH 137
23230#define EILSEQ 138
23231#define EOVERFLOW 139
23232#define ECANCELED 140
23233#define ENOTRECOVERABLE 141
23234#define EOWNERDEAD 142
23235#define ESTRPIPE 143
23236#define EWOULDBLOCK EAGAIN
23237#define __ELASTERROR 2000
23238#define _SYS_PARAM_H
23239#define __need_NULL
23240#undef __need_ptrdiff_t
23241#undef __need_size_t
23242#undef __need_wchar_t
23243#undef NULL
23244#define NULL ((void *)0)
23245#undef __need_NULL
23246#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
23247#define NOFILE OPEN_MAX
23248#define NGROUPS NGROUPS_MAX
23249#define HZ 1000
23250#define MAXHOSTNAMELEN 128
23251#define MAXPATHLEN PATH_MAX
23252#define MAXSYMLINKS SYMLOOP_MAX
23253#define DEV_BSIZE 1024
23254#define NBBY 8
23255#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
23256#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
23257#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
23258#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
23259#define howmany(x,y) (((x)+((y)-1))/(y))
23260#define rounddown(x,y) (((x)/(y))*(y))
23261#define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
23262#define roundup2(x,y) (((x)+((y)-1))&(~((y)-1)))
23263#define powerof2(x) ((((x)-1)&(x))==0)
23264#define MIN(a,b) (((a)<(b))?(a):(b))
23265#define MAX(a,b) (((a)>(b))?(a):(b))
23266#define SAVE_ROOT_JMPBUF(th,stmt) do if (true) { stmt; } else if (th) { } while (0)
23267#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);
23268#define EC_POP_TAG() _ec->tag = _tag.prev; } while (0)
23269#define EC_TMPPOP_TAG() _ec->tag = _tag.prev
23270#define EC_REPUSH_TAG() (void)(_ec->tag = &_tag)
23271#define VAR_FROM_MEMORY(var) (var)
23272#define VAR_INITIALIZED(var) ((void)&(var))
23273#define VAR_NOCLOBBERED(var) var
23274#define EC_EXEC_TAG() (ruby_setjmp(_tag.buf) ? rb_ec_tag_state(VAR_FROM_MEMORY(_ec)) : (EC_REPUSH_TAG(), 0))
23275#define EC_JUMP_TAG(ec,st) rb_ec_tag_jump(ec, st)
23276#define INTERNAL_EXCEPTION_P(exc) FIXNUM_P(exc)
23277#define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1
23278#define CREF_FL_OMOD_SHARED IMEMO_FL_USER2
23279#define CREF_FL_SINGLETON IMEMO_FL_USER3
23280#pragma GCC diagnostic push
23281#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23282#pragma GCC diagnostic pop
23283#define rb_ec_raised_set(ec,f) ((ec)->raised_flag |= (f))
23284#define rb_ec_raised_reset(ec,f) ((ec)->raised_flag &= ~(f))
23285#define rb_ec_raised_p(ec,f) (((ec)->raised_flag & (f)) != 0)
23286#define rb_ec_raised_clear(ec) ((ec)->raised_flag = 0)
23287#define CharNext(p) rb_char_next(p)
23288#define RUBY_GC_H 1
23289#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
23290#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)
23291#define RUBY_MARK_FREE_DEBUG 0
23292#define RUBY_MARK_ENTER(msg)
23293#define RUBY_MARK_LEAVE(msg)
23294#define RUBY_FREE_ENTER(msg)
23295#define RUBY_FREE_LEAVE(msg)
23296#define RUBY_GC_INFO if(0)printf
23297#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} } while (0)
23298#define RUBY_MARK_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark(markobj);} } while (0)
23299#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
23300#define STACK_UPPER(x,a,b) (b)
23301#define STACK_GROW_DIR_DETECTION
23302#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
23303#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
23304#pragma GCC visibility push(default)
23305#pragma GCC visibility pop
23306#define INTERNAL_COMPILE_H
23307#pragma GCC visibility push(default)
23308#pragma GCC visibility pop
23309#define INTERNAL_CONT_H
23310#define RUBY_ISEQ_H 1
23311#define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
23312#define ISEQ_MINOR_VERSION ((unsigned int)ruby_api_version[1])
23313#define ISEQ_MBITS_SIZE sizeof(iseq_bits_t)
23314#define ISEQ_MBITS_BITLENGTH (ISEQ_MBITS_SIZE * CHAR_BIT)
23315#define ISEQ_MBITS_SET(buf,i) (buf[(i) / ISEQ_MBITS_BITLENGTH] |= ((iseq_bits_t)1 << ((i) % ISEQ_MBITS_BITLENGTH)))
23316#define ISEQ_MBITS_SET_P(buf,i) ((buf[(i) / ISEQ_MBITS_BITLENGTH] >> ((i) % ISEQ_MBITS_BITLENGTH)) & 0x1)
23317#define ISEQ_MBITS_BUFLEN(size) roomof(size, ISEQ_MBITS_BITLENGTH)
23318#define USE_ISEQ_NODE_ID 1
23319#define ISEQ_COVERAGE(iseq) ISEQ_BODY(iseq)->variable.coverage
23320#define ISEQ_COVERAGE_SET(iseq,cov) RB_OBJ_WRITE(iseq, &ISEQ_BODY(iseq)->variable.coverage, cov)
23321#define ISEQ_LINE_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
23322#define ISEQ_BRANCH_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_BRANCHES)
23323#define ISEQ_PC2BRANCHINDEX(iseq) ISEQ_BODY(iseq)->variable.pc2branchindex
23324#define ISEQ_PC2BRANCHINDEX_SET(iseq,h) RB_OBJ_WRITE(iseq, &ISEQ_BODY(iseq)->variable.pc2branchindex, h)
23325#define ISEQ_FLIP_CNT(iseq) ISEQ_BODY(iseq)->variable.flip_count
23326#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)
23327#define ISEQ_NOT_LOADED_YET IMEMO_FL_USER1
23328#define ISEQ_USE_COMPILE_DATA IMEMO_FL_USER2
23329#define ISEQ_TRANSLATED IMEMO_FL_USER3
23330#define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW(((VALUE)iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
23331#pragma GCC visibility push(default)
23332#define INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE (512)
23333#pragma GCC visibility pop
23334#define INTERNAL_ERROR_H
23335#define INTERNAL_STRING_H
23336#define RUBY_ENCODING_H 1
23337#define RUBY_INTERNAL_ENCODING_CODERANGE_H
23338#pragma GCC visibility push(default)
23339#define ENC_CODERANGE_MASK RUBY_ENC_CODERANGE_MASK
23340#define ENC_CODERANGE_UNKNOWN RUBY_ENC_CODERANGE_UNKNOWN
23341#define ENC_CODERANGE_7BIT RUBY_ENC_CODERANGE_7BIT
23342#define ENC_CODERANGE_VALID RUBY_ENC_CODERANGE_VALID
23343#define ENC_CODERANGE_BROKEN RUBY_ENC_CODERANGE_BROKEN
23344#define ENC_CODERANGE_CLEAN_P(cr) RB_ENC_CODERANGE_CLEAN_P(cr)
23345#define ENC_CODERANGE(obj) RB_ENC_CODERANGE(obj)
23346#define ENC_CODERANGE_ASCIIONLY(obj) RB_ENC_CODERANGE_ASCIIONLY(obj)
23347#define ENC_CODERANGE_SET(obj,cr) RB_ENC_CODERANGE_SET(obj,cr)
23348#define ENC_CODERANGE_CLEAR(obj) RB_ENC_CODERANGE_CLEAR(obj)
23349#define ENC_CODERANGE_AND(a,b) RB_ENC_CODERANGE_AND(a, b)
23350#define ENCODING_CODERANGE_SET(obj,encindex,cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr)
23351#define RB_ENC_CODERANGE RB_ENC_CODERANGE
23352#define RB_ENC_CODERANGE_AND RB_ENC_CODERANGE_AND
23353#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY
23354#define RB_ENC_CODERANGE_CLEAN_P RB_ENC_CODERANGE_CLEAN_P
23355#define RB_ENC_CODERANGE_CLEAR RB_ENC_CODERANGE_CLEAR
23356#define RB_ENC_CODERANGE_SET RB_ENC_CODERANGE_SET
23357#pragma GCC visibility pop
23358#define RUBY_INTERNAL_ENCODING_CTYPE_H
23359#define ONIGMO_H
23360#define ONIGMO_VERSION_MAJOR 6
23361#define ONIGMO_VERSION_MINOR 1
23362#define ONIGMO_VERSION_TEENY 3
23363#define ONIG_EXTERN RUBY_EXTERN
23364#pragma GCC visibility push(default)
23365#define UChar OnigUChar
23366#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)
23367#define OnigCodePointMaskWidth 3
23368#define OnigCodePointMask ((1<<OnigCodePointMaskWidth)-1)
23369#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
23370#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)
23371#define OnigSpecialIndexShift 3
23372#define OnigSpecialIndexWidth 10
23373#define ONIGENC_CASE_UPCASE (1<<13)
23374#define ONIGENC_CASE_DOWNCASE (1<<14)
23375#define ONIGENC_CASE_TITLECASE (1<<15)
23376#define ONIGENC_CASE_SPECIAL_OFFSET 3
23377#define ONIGENC_CASE_UP_SPECIAL (1<<16)
23378#define ONIGENC_CASE_DOWN_SPECIAL (1<<17)
23379#define ONIGENC_CASE_MODIFIED (1<<18)
23380#define ONIGENC_CASE_FOLD (1<<19)
23381#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20)
23382#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<21)
23383#define ONIGENC_CASE_ASCII_ONLY (1<<22)
23384#define ONIGENC_CASE_IS_TITLECASE (1<<23)
23385#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30)
23386#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
23387#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag
23388#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3
23389#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13
23390#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0])
23391#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1]
23392#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2]
23393#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)
23394#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)
23395#define ONIGENC_CODE_TO_MBC_MAXLEN 7
23396#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18
23397#define ONIGENC_CTYPE_NEWLINE 0
23398#define ONIGENC_CTYPE_ALPHA 1
23399#define ONIGENC_CTYPE_BLANK 2
23400#define ONIGENC_CTYPE_CNTRL 3
23401#define ONIGENC_CTYPE_DIGIT 4
23402#define ONIGENC_CTYPE_GRAPH 5
23403#define ONIGENC_CTYPE_LOWER 6
23404#define ONIGENC_CTYPE_PRINT 7
23405#define ONIGENC_CTYPE_PUNCT 8
23406#define ONIGENC_CTYPE_SPACE 9
23407#define ONIGENC_CTYPE_UPPER 10
23408#define ONIGENC_CTYPE_XDIGIT 11
23409#define ONIGENC_CTYPE_WORD 12
23410#define ONIGENC_CTYPE_ALNUM 13
23411#define ONIGENC_CTYPE_ASCII 14
23412#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII
23413#define ONIGENC_FLAG_NONE 0U
23414#define ONIGENC_FLAG_UNICODE 1U
23415#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e)
23416#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)
23417#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)
23418#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
23419#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)
23420#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
23421#define ONIGENC_IS_MBC_WORD(enc,s,end) ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
23422#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)
23423#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE)
23424#define ONIGENC_NAME(enc) ((enc)->name)
23425#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
23426#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) (enc)->is_allowed_reverse_match(s,end,enc)
23427#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) (enc)->left_adjust_char_head(start, s, end, enc)
23428#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
23429#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)
23430#define ONIGENC_STEP_BACK(enc,start,s,end,n) onigenc_step_back((enc),(start),(s),(end),(n))
23431#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n)
23432#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r))
23433#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r)
23434#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1)
23435#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1)
23436#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n))
23437#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1)
23438#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r))
23439#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc)
23440#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen(p,e,enc)
23441#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)
23442#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)
23443#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len)
23444#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc)
23445#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc)
23446#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc)
23447#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc)
23448#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) (enc)->property_name_to_ctype(enc,p,end)
23449#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc)
23450#define ONIGENC_IS_CODE_NEWLINE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
23451#define ONIGENC_IS_CODE_GRAPH(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
23452#define ONIGENC_IS_CODE_PRINT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
23453#define ONIGENC_IS_CODE_ALNUM(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
23454#define ONIGENC_IS_CODE_ALPHA(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
23455#define ONIGENC_IS_CODE_LOWER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
23456#define ONIGENC_IS_CODE_UPPER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
23457#define ONIGENC_IS_CODE_CNTRL(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
23458#define ONIGENC_IS_CODE_PUNCT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
23459#define ONIGENC_IS_CODE_SPACE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
23460#define ONIGENC_IS_CODE_BLANK(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
23461#define ONIGENC_IS_CODE_DIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
23462#define ONIGENC_IS_CODE_XDIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
23463#define ONIGENC_IS_CODE_WORD(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
23464#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
23465#define ONIG_NREGION 4
23466#define ONIG_MAX_CAPTURE_GROUP_NUM 32767
23467#define ONIG_MAX_BACKREF_NUM 1000
23468#define ONIG_MAX_REPEAT_NUM 100000
23469#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
23470#define ONIG_MAX_ERROR_MESSAGE_LEN 90
23471#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE
23472#define ONIG_OPTION_NONE 0U
23473#define ONIG_OPTION_IGNORECASE 1U
23474#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
23475#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
23476#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE
23477#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)
23478#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)
23479#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)
23480#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)
23481#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
23482#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
23483#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
23484#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
23485#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NOTEOL << 1)
23486#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1)
23487#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_NOTEOS << 1)
23488#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
23489#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
23490#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
23491#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF
23492#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
23493#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
23494#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))
23495#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)
23496#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
23497#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
23498#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
23499#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
23500#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
23501#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
23502#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58)
23503#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG)
23504#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
23505#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
23506#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython)
23507#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
23508#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0)
23509#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1)
23510#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2)
23511#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3)
23512#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4)
23513#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5)
23514#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6)
23515#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7)
23516#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8)
23517#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9)
23518#define ONIG_SYN_OP_VBAR_ALT (1U<<10)
23519#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11)
23520#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12)
23521#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13)
23522#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14)
23523#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15)
23524#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16)
23525#define ONIG_SYN_OP_BRACKET_CC (1U<<17)
23526#define ONIG_SYN_OP_ESC_W_WORD (1U<<18)
23527#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19)
23528#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20)
23529#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21)
23530#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22)
23531#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23)
23532#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24)
23533#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25)
23534#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26)
23535#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27)
23536#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28)
23537#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29)
23538#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30)
23539#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31)
23540#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0)
23541#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1)
23542#define ONIG_SYN_OP2_OPTION_PERL (1U<<2)
23543#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3)
23544#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4)
23545#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5)
23546#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6)
23547#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7)
23548#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8)
23549#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9)
23550#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10)
23551#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11)
23552#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12)
23553#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13)
23554#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14)
23555#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15)
23556#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16)
23557#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17)
23558#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19)
23559#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20)
23560#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21)
23561#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22)
23562#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23)
23563#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24)
23564#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25)
23565#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26)
23566#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27)
23567#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28)
23568#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29)
23569#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30)
23570#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT (1U<<31)
23571#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31)
23572#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0)
23573#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1)
23574#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2)
23575#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3)
23576#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4)
23577#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5)
23578#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6)
23579#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7)
23580#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)
23581#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9)
23582#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)
23583#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP (1U<<11)
23584#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20)
23585#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21)
23586#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22)
23587#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23)
23588#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24)
23589#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25)
23590#define ONIG_SYN_WARN_CC_DUP (1U<<26)
23591#define ONIG_META_CHAR_ESCAPE 0
23592#define ONIG_META_CHAR_ANYCHAR 1
23593#define ONIG_META_CHAR_ANYTIME 2
23594#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3
23595#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4
23596#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5
23597#define ONIG_INEFFECTIVE_META_CHAR 0
23598#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)
23599#define ONIG_NORMAL 0
23600#define ONIG_MISMATCH -1
23601#define ONIG_NO_SUPPORT_CONFIG -2
23602#define ONIGERR_MEMORY -5
23603#define ONIGERR_TYPE_BUG -6
23604#define ONIGERR_PARSER_BUG -11
23605#define ONIGERR_STACK_BUG -12
23606#define ONIGERR_UNDEFINED_BYTECODE -13
23607#define ONIGERR_UNEXPECTED_BYTECODE -14
23608#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
23609#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16
23610#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21
23611#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
23612#define ONIGERR_INVALID_ARGUMENT -30
23613#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
23614#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
23615#define ONIGERR_EMPTY_CHAR_CLASS -102
23616#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103
23617#define ONIGERR_END_PATTERN_AT_ESCAPE -104
23618#define ONIGERR_END_PATTERN_AT_META -105
23619#define ONIGERR_END_PATTERN_AT_CONTROL -106
23620#define ONIGERR_META_CODE_SYNTAX -108
23621#define ONIGERR_CONTROL_CODE_SYNTAX -109
23622#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110
23623#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111
23624#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112
23625#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113
23626#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114
23627#define ONIGERR_NESTED_REPEAT_OPERATOR -115
23628#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116
23629#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117
23630#define ONIGERR_END_PATTERN_IN_GROUP -118
23631#define ONIGERR_UNDEFINED_GROUP_OPTION -119
23632#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121
23633#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122
23634#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123
23635#define ONIGERR_INVALID_CONDITION_PATTERN -124
23636#define ONIGERR_TOO_BIG_NUMBER -200
23637#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201
23638#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202
23639#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203
23640#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204
23641#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205
23642#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206
23643#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207
23644#define ONIGERR_INVALID_BACKREF -208
23645#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209
23646#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -210
23647#define ONIGERR_TOO_SHORT_DIGITS -211
23648#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212
23649#define ONIGERR_EMPTY_GROUP_NAME -214
23650#define ONIGERR_INVALID_GROUP_NAME -215
23651#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216
23652#define ONIGERR_UNDEFINED_NAME_REFERENCE -217
23653#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218
23654#define ONIGERR_MULTIPLEX_DEFINED_NAME -219
23655#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220
23656#define ONIGERR_NEVER_ENDING_RECURSION -221
23657#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
23658#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
23659#define ONIGERR_INVALID_CODE_POINT_VALUE -400
23660#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
23661#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
23662#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402
23663#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403
23664#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
23665#define ONIG_IS_CAPTURE_HISTORY_GROUP(r,i) ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
23666#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1
23667#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2
23668#define ONIG_TRAVERSE_CALLBACK_AT_BOTH ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
23669#define ONIG_REGION_NOTPOS -1
23670#define ONIG_NULL_WARN onig_null_warn
23671#define ONIG_CHAR_TABLE_SIZE 256
23672#pragma GCC visibility pop
23673#define RUBY_INTERNAL_ENCODING_ENCODING_H
23674#define ONIGURUMA_H
23675#define ONIGURUMA
23676#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR
23677#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR
23678#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY
23679#pragma GCC visibility push(default)
23680#define ENCODING_INLINE_MAX RUBY_ENCODING_INLINE_MAX
23681#define ENCODING_SHIFT RUBY_ENCODING_SHIFT
23682#define ENCODING_MASK RUBY_ENCODING_MASK
23683#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i)
23684#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i)
23685#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj)
23686#define ENCODING_GET(obj) RB_ENCODING_GET(obj)
23687#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj)
23688#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN
23689#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret)
23690#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret)
23691#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret)
23692#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret)
23693#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret)
23694#pragma GCC visibility pop
23695#define RB_ENCODING_GET RB_ENCODING_GET
23696#define RB_ENCODING_GET_INLINED RB_ENCODING_GET_INLINED
23697#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT
23698#define RB_ENCODING_SET RB_ENCODING_SET
23699#define RB_ENCODING_SET_INLINED RB_ENCODING_SET_INLINED
23700#define rb_enc_asciicompat rb_enc_asciicompat
23701#define rb_enc_code_to_mbclen rb_enc_code_to_mbclen
23702#define rb_enc_codepoint rb_enc_codepoint
23703#define rb_enc_left_char_head rb_enc_left_char_head
23704#define rb_enc_mbc_to_codepoint rb_enc_mbc_to_codepoint
23705#define rb_enc_mbcput rb_enc_mbcput
23706#define rb_enc_mbmaxlen rb_enc_mbmaxlen
23707#define rb_enc_mbminlen rb_enc_mbminlen
23708#define rb_enc_name rb_enc_name
23709#define rb_enc_prev_char rb_enc_prev_char
23710#define rb_enc_right_char_head rb_enc_right_char_head
23711#define rb_enc_step_back rb_enc_step_back
23712#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p
23713#pragma GCC visibility push(default)
23714#pragma GCC visibility pop
23715#define rb_enc_is_newline rb_enc_is_newline
23716#define rb_enc_isalnum rb_enc_isalnum
23717#define rb_enc_isalpha rb_enc_isalpha
23718#define rb_enc_isascii rb_enc_isascii
23719#define rb_enc_isctype rb_enc_isctype
23720#define rb_enc_isdigit rb_enc_isdigit
23721#define rb_enc_islower rb_enc_islower
23722#define rb_enc_isprint rb_enc_isprint
23723#define rb_enc_iscntrl rb_enc_iscntrl
23724#define rb_enc_ispunct rb_enc_ispunct
23725#define rb_enc_isspace rb_enc_isspace
23726#define rb_enc_isupper rb_enc_isupper
23727#define RUBY_INTERNAL_ENCODING_PATHNAME_H
23728#pragma GCC visibility push(default)
23729#pragma GCC visibility pop
23730#define RUBY_INTERNAL_ENCODING_RE_H
23731#pragma GCC visibility push(default)
23732#pragma GCC visibility pop
23733#define RUBY_INTERNAL_ENCODING_SPRINTF_H
23734#pragma GCC visibility push(default)
23735#pragma GCC visibility pop
23736#define RUBY_INTERNAL_ENCODING_STRING_H
23737#pragma GCC visibility push(default)
23738#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)))
23739#define rb_enc_str_new_cstr(str,enc) ((RBIMPL_CONSTANT_P(str) ? rbimpl_enc_str_new_cstr : rb_enc_str_new_cstr) ((str), (enc)))
23740#pragma GCC visibility pop
23741#define RUBY_INTERNAL_ENCODING_SYMBOL_H
23742#pragma GCC visibility push(default)
23743#pragma GCC visibility pop
23744#define RUBY_INTERNAL_ENCODING_TRANSCODE_H
23745#pragma GCC visibility push(default)
23746#define ECONV_ERROR_HANDLER_MASK RUBY_ECONV_ERROR_HANDLER_MASK
23747#define ECONV_INVALID_MASK RUBY_ECONV_INVALID_MASK
23748#define ECONV_INVALID_REPLACE RUBY_ECONV_INVALID_REPLACE
23749#define ECONV_UNDEF_MASK RUBY_ECONV_UNDEF_MASK
23750#define ECONV_UNDEF_REPLACE RUBY_ECONV_UNDEF_REPLACE
23751#define ECONV_UNDEF_HEX_CHARREF RUBY_ECONV_UNDEF_HEX_CHARREF
23752#define ECONV_DECORATOR_MASK RUBY_ECONV_DECORATOR_MASK
23753#define ECONV_NEWLINE_DECORATOR_MASK RUBY_ECONV_NEWLINE_DECORATOR_MASK
23754#define ECONV_NEWLINE_DECORATOR_READ_MASK RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK
23755#define ECONV_NEWLINE_DECORATOR_WRITE_MASK RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK
23756#define ECONV_UNIVERSAL_NEWLINE_DECORATOR RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR
23757#define ECONV_CRLF_NEWLINE_DECORATOR RUBY_ECONV_CRLF_NEWLINE_DECORATOR
23758#define ECONV_CR_NEWLINE_DECORATOR RUBY_ECONV_CR_NEWLINE_DECORATOR
23759#define ECONV_LF_NEWLINE_DECORATOR RUBY_ECONV_LF_NEWLINE_DECORATOR
23760#define ECONV_XML_TEXT_DECORATOR RUBY_ECONV_XML_TEXT_DECORATOR
23761#define ECONV_XML_ATTR_CONTENT_DECORATOR RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR
23762#define ECONV_STATEFUL_DECORATOR_MASK RUBY_ECONV_STATEFUL_DECORATOR_MASK
23763#define ECONV_XML_ATTR_QUOTE_DECORATOR RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR
23764#define ECONV_DEFAULT_NEWLINE_DECORATOR RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR
23765#define ECONV_PARTIAL_INPUT RUBY_ECONV_PARTIAL_INPUT
23766#define ECONV_AFTER_OUTPUT RUBY_ECONV_AFTER_OUTPUT
23767#pragma GCC visibility pop
23768#define STR_NOEMBED FL_USER1
23769#define STR_SHARED FL_USER2
23770#undef rb_fstring_cstr
23771#pragma GCC visibility push(default)
23772#pragma GCC visibility pop
23773#pragma GCC visibility push(default)
23774#pragma GCC visibility pop
23775#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
23776#define rb_fstring_literal(str) rb_fstring_lit(str)
23777#define rb_fstring_enc_lit(str,enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
23778#define rb_fstring_enc_literal(str,enc) rb_fstring_enc_lit(str, enc)
23779#define rb_fstring_cstr(str) (__builtin_constant_p(str) ? rb_fstring_new((str), (long)strlen(str)) : (rb_fstring_cstr)(str))
23780#undef Check_Type
23781#define rb_raise_static(e,m) rb_raise_cstr_i((e), rb_str_new_static((m), rb_strlen_lit(m)))
23782#define rb_sys_fail_path(path) rb_sys_fail_path_in(RUBY_FUNCTION_NAME_STRING, path)
23783#define rb_syserr_fail_path(err,path) rb_syserr_fail_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23784#define rb_syserr_new_path(err,path) rb_syserr_new_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23785#define rb_warn_deprecated_to_remove_at(removal,...) rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
23786#define RUBY_VERSION_SINCE(major,minor) 0
23787#define RUBY_VERSION_BEFORE(major,minor) 0
23788#define RBIMPL_TODO0(x)
23789#define RBIMPL_TODO(message) RBIMPL_TODO0("TODO: " message)
23790#define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
23791#pragma GCC visibility push(default)
23792#pragma GCC visibility pop
23793#define INTERNAL_EVAL_H
23794#define id_signo ruby_static_id_signo
23795#define id_status ruby_static_id_status
23796#define INTERNAL_INITS_H
23797#define INTERNAL_OBJECT_H
23798#pragma GCC visibility push(default)
23799#pragma GCC visibility pop
23800#pragma GCC visibility push(default)
23801#pragma GCC visibility pop
23802#define INTERNAL_PARSE_H
23803#pragma GCC visibility push(default)
23804#pragma GCC visibility pop
23805#define INTERNAL_PROC_H
23806#pragma GCC visibility push(default)
23807#pragma GCC visibility pop
23808#define INTERNAL_RE_H
23809#pragma GCC visibility push(default)
23810#pragma GCC visibility pop
23811#define INTERNAL_SYMBOL_H
23812#undef rb_sym_intern_ascii_cstr
23813#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))
23814#define INTERNAL_THREAD_H
23815#define COVERAGE_INDEX_LINES 0
23816#define COVERAGE_INDEX_BRANCHES 1
23817#define COVERAGE_TARGET_LINES 1
23818#define COVERAGE_TARGET_BRANCHES 2
23819#define COVERAGE_TARGET_METHODS 4
23820#define COVERAGE_TARGET_ONESHOT_LINES 8
23821#define COVERAGE_TARGET_EVAL 16
23822#pragma GCC visibility push(default)
23823#pragma GCC visibility pop
23824#pragma GCC visibility push(default)
23825#pragma GCC visibility pop
23826#define INTERNAL_SANITIZERS_H
23827#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) NO_SANITIZE_ADDRESS(NOINLINE(x))
23828#undef NO_SANITIZE
23829#define NO_SANITIZE(x,y) COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Wattributes); __attribute__((__no_sanitize__(x))) y; COMPILER_WARNING_POP
23830#define __asan_poison_memory_region(x,y)
23831#define __asan_unpoison_memory_region(x,y)
23832#define __asan_region_is_poisoned(x,y) 0
23833#define __msan_allocated_memory(x,y) ((void)(x), (void)(y))
23834#define __msan_poison(x,y) ((void)(x), (void)(y))
23835#define __msan_unpoison(x,y) ((void)(x), (void)(y))
23836#define __msan_unpoison_string(x) ((void)(x))
23837#define VALGRIND_MAKE_MEM_DEFINED(p,n) 0
23838#define VALGRIND_MAKE_MEM_UNDEFINED(p,n) 0
23839#define INTERNAL_VARIABLE_H
23840#define CONSTANT_H
23841#define RUBY_ID_TABLE_H 1
23842#pragma GCC visibility push(default)
23843#pragma GCC visibility pop
23844#define RB_CONST_PRIVATE_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PRIVATE)
23845#define RB_CONST_PUBLIC_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PUBLIC)
23846#define RB_CONST_DEPRECATED_P(ce) ((ce)->flag & CONST_DEPRECATED)
23847#pragma GCC visibility push(default)
23848#pragma GCC visibility pop
23849#define ROBJECT_TRANSIENT_FLAG FL_USER2
23850#pragma GCC visibility push(default)
23851#pragma GCC visibility pop
23852#pragma GCC visibility push(default)
23853#pragma GCC visibility pop
23854#define RUBY_MJIT_H 1
23855#define RUBY_H 1
23856#define HAVE_RUBY_ATOMIC_H 1
23857#define HAVE_RUBY_DEBUG_H 1
23858#define HAVE_RUBY_DEFINES_H 1
23859#define HAVE_RUBY_ENCODING_H 1
23860#define HAVE_RUBY_FIBER_SCHEDULER_H 1
23861#define HAVE_RUBY_INTERN_H 1
23862#define HAVE_RUBY_IO_H 1
23863#define HAVE_RUBY_MEMORY_VIEW_H 1
23864#define HAVE_RUBY_MISSING_H 1
23865#define HAVE_RUBY_ONIGMO_H 1
23866#define HAVE_RUBY_ONIGURUMA_H 1
23867#define HAVE_RUBY_RACTOR_H 1
23868#define HAVE_RUBY_RANDOM_H 1
23869#define HAVE_RUBY_RE_H 1
23870#define HAVE_RUBY_REGEX_H 1
23871#define HAVE_RUBY_RUBY_H 1
23872#define HAVE_RUBY_ST_H 1
23873#define HAVE_RUBY_THREAD_H 1
23874#define HAVE_RUBY_THREAD_NATIVE_H 1
23875#define HAVE_RUBY_UTIL_H 1
23876#define HAVE_RUBY_VERSION_H 1
23877#define HAVE_RUBY_VM_H 1
23878#define MJIT_FUNC_STATE_P(jit_func) ((uintptr_t)(jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)
23879#pragma GCC visibility push(default)
23880#pragma GCC visibility pop
23881#define mjit_enabled true
23882#define YJIT_H 1
23883#define YJIT_STATS RUBY_DEBUG
23884#define RUBY_VM_H 1
23885#pragma GCC visibility push(default)
23886#pragma GCC visibility pop
23887#define RUBY_VM_CALLINFO_H
23888#define USE_DEBUG_COUNTER 0
23889#define RUBY_DEBUG_COUNTER_H 1
23890#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_ ##name,
23891#undef RB_DEBUG_COUNTER
23892#define RB_DEBUG_COUNTER_INC(type) ((void)0)
23893#define RB_DEBUG_COUNTER_INC_UNLESS(type,cond) (!!(cond))
23894#define RB_DEBUG_COUNTER_INC_IF(type,cond) (!!(cond))
23895#define RB_DEBUG_COUNTER_ADD(type,num) ((void)0)
23896#define RB_DEBUG_COUNTER_SETMAX(type,num) 0
23897#pragma GCC visibility push(default)
23898#pragma GCC visibility pop
23899#define INTERNAL_CLASS_H
23900#define RCLASS_EXT(c) ((rb_classext_t *)((char *)(c) + sizeof(struct RClass)))
23901#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
23902#define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
23903#define RCLASS_IVPTR(c) (RCLASS_EXT(c)->iv_ptr)
23904#define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl)
23905#define RCLASS_CC_TBL(c) (RCLASS_EXT(c)->cc_tbl)
23906#define RCLASS_CVC_TBL(c) (RCLASS_EXT(c)->cvc_tbl)
23907#define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_)
23908#define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class)
23909#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
23910#define RCLASS_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->subclass_entry)
23911#define RCLASS_MODULE_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->module_subclass_entry)
23912#define RCLASS_ALLOCATOR(c) (RCLASS_EXT(c)->allocator)
23913#define RCLASS_SUBCLASSES(c) (RCLASS_EXT(c)->subclasses)
23914#define RCLASS_SUPERCLASS_DEPTH(c) (RCLASS_EXT(c)->superclass_depth)
23915#define RCLASS_SUPERCLASSES(c) (RCLASS_EXT(c)->superclasses)
23916#define RICLASS_IS_ORIGIN FL_USER0
23917#define RCLASS_CLONED FL_USER1
23918#define RCLASS_SUPERCLASSES_INCLUDE_SELF FL_USER2
23919#define RICLASS_ORIGIN_SHARED_MTBL FL_USER3
23920#pragma GCC visibility push(default)
23921#pragma GCC visibility pop
23922#pragma GCC diagnostic push
23923#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23924#pragma GCC diagnostic pop
23925#pragma GCC diagnostic push
23926#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23927#pragma GCC diagnostic pop
23928#pragma GCC diagnostic push
23929#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23930#pragma GCC diagnostic pop
23931#define VM_CALL_ARGS_SPLAT (0x01 << VM_CALL_ARGS_SPLAT_bit)
23932#define VM_CALL_ARGS_BLOCKARG (0x01 << VM_CALL_ARGS_BLOCKARG_bit)
23933#define VM_CALL_FCALL (0x01 << VM_CALL_FCALL_bit)
23934#define VM_CALL_VCALL (0x01 << VM_CALL_VCALL_bit)
23935#define VM_CALL_ARGS_SIMPLE (0x01 << VM_CALL_ARGS_SIMPLE_bit)
23936#define VM_CALL_BLOCKISEQ (0x01 << VM_CALL_BLOCKISEQ_bit)
23937#define VM_CALL_KWARG (0x01 << VM_CALL_KWARG_bit)
23938#define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
23939#define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
23940#define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
23941#define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
23942#define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
23943#define VM_CALL_KW_SPLAT_MUT (0x01 << VM_CALL_KW_SPLAT_MUT_bit)
23944#define USE_EMBED_CI 1
23945#define CI_EMBED_TAG_bits 1
23946#define CI_EMBED_ARGC_bits 15
23947#define CI_EMBED_FLAG_bits 16
23948#define CI_EMBED_ID_bits 32
23949#define CI_EMBED_FLAG 0x01
23950#define CI_EMBED_ARGC_SHFT (CI_EMBED_TAG_bits)
23951#define CI_EMBED_ARGC_MASK ((((VALUE)1)<<CI_EMBED_ARGC_bits) - 1)
23952#define CI_EMBED_FLAG_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits)
23953#define CI_EMBED_FLAG_MASK ((((VALUE)1)<<CI_EMBED_FLAG_bits) - 1)
23954#define CI_EMBED_ID_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits)
23955#define CI_EMBED_ID_MASK ((((VALUE)1)<<CI_EMBED_ID_bits) - 1)
23956#define vm_ci_new(mid,flag,argc,kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23957#define vm_ci_new_runtime(mid,flag,argc,kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23958#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)
23959#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))
23960#define VM_CALLINFO_NOT_UNDER_GC IMEMO_FL_USER0
23961#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_, }
23962#define VM_CALLCACHE_UNMARKABLE FL_FREEZE
23963#define VM_CALLCACHE_ON_STACK FL_EXIVAR
23964#define vm_cc_empty() rb_vm_empty_cc()
23965#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, }
23966#define RUBY_DEBUG_H
23967#pragma GCC visibility push(default)
23968#define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
23969#define dp(v) ruby_debug_print_value(-1, 0, "", (v))
23970#define dpi(i) ruby_debug_print_id(-1, 0, "", (i))
23971#define dpn(n) ruby_debug_print_node(-1, 0, "", (n))
23972#pragma GCC visibility pop
23973#define USE_RUBY_DEBUG_LOG 0
23974#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())
23975#define _RUBY_DEBUG_LOG(...) ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__)
23976#define RUBY_DEBUG_LOG(...)
23977#define RUBY_DEBUG_LOG2(file,line,...)
23978#define RUBY_VM_EXEC_H
23979#define debugs
23980#define DEBUG_ENTER_INSN(insn)
23981#define DEBUG_END_INSN()
23982#define throwdebug if(0)ruby_debug_printf
23983#define USE_INSNS_COUNTER 0
23984#define LABEL(x) INSN_LABEL_ ##x
23985#define ELABEL(x) INSN_ELABEL_ ##x
23986#define LABEL_PTR(x) RB_GNUC_EXTENSION(&&LABEL(x))
23987#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));
23988#define INSN_DISPATCH_SIG(insn)
23989#define INSN_ENTRY(insn) LABEL(insn): INSN_ENTRY_SIG(insn);
23990#define TC_DISPATCH(insn) INSN_DISPATCH_SIG(insn); RB_GNUC_EXTENSION_BLOCK(goto *(void const *)GET_CURRENT_INSN()); ;
23991#define END_INSN(insn) DEBUG_END_INSN(); TC_DISPATCH(insn);
23992#define INSN_DISPATCH() TC_DISPATCH(__START__) {
23993#define END_INSNS_DISPATCH() rb_bug("unknown insn: %"PRIdVALUE, GET_CURRENT_INSN()); }
23994#define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
23995#define START_OF_ORIGINAL_INSN(x) if (0) goto start_of_ ##x; start_of_ ##x:
23996#define DISPATCH_ORIGINAL_INSN(x) goto start_of_ ##x;
23997#define VM_SP_CNT(ec,sp) ((sp) - (ec)->vm_stack)
23998#define THROW_EXCEPTION(exc) do { ec->errinfo = (VALUE)(exc); EC_JUMP_TAG(ec, ec->tag->state); } while (0)
23999#define SCREG(r) (reg_ ##r)
24000#define VM_DEBUG_STACKOVERFLOW 0
24001#define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp,margin)
24002#define INSN_LABEL2(insn,name) INSN_LABEL_ ## insn ## _ ## name
24003#define INSN_LABEL(x) INSN_LABEL2(NAME_OF_CURRENT_INSN, x)
24004#define RUBY_INSNHELPER_H
24005#pragma GCC visibility push(default)
24006#pragma GCC visibility pop
24007#define COLLECT_USAGE_INSN(insn)
24008#define COLLECT_USAGE_OPERAND(insn,n,op)
24009#define COLLECT_USAGE_REGISTER(reg,s)
24010#define PUSH(x) (SET_SV(x), INC_SP(1))
24011#define TOPN(n) (*(GET_SP()-(n)-1))
24012#define POPN(n) (DEC_SP(n))
24013#define POP() (DEC_SP(1))
24014#define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
24015#define VM_REG_CFP (reg_cfp)
24016#define VM_REG_PC (VM_REG_CFP->pc)
24017#define VM_REG_SP (VM_REG_CFP->sp)
24018#define VM_REG_EP (VM_REG_CFP->ep)
24019#define RESTORE_REGS() do { VM_REG_CFP = ec->cfp; } while (0)
24020#define COLLECT_USAGE_REGISTER_HELPER(a,b,v) (v)
24021#define GET_PC() (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))
24022#define SET_PC(x) (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))
24023#define GET_CURRENT_INSN() (*GET_PC())
24024#define GET_OPERAND(n) (GET_PC()[(n)])
24025#define ADD_PC(n) (SET_PC(VM_REG_PC + (n)))
24026#define JUMP(dst) (SET_PC(VM_REG_PC + (dst)))
24027#define GET_CFP() (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))
24028#define GET_EP() (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))
24029#define SET_EP(x) (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))
24030#define GET_LEP() (VM_EP_LEP(GET_EP()))
24031#define GET_SP() (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))
24032#define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
24033#define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
24034#define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
24035#define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
24036#define GET_ISEQ() (GET_CFP()->iseq)
24037#define GET_PREV_EP(ep) ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))
24038#define GET_SELF() (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))
24039#define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
24040#define SETUP_CANARY(cond) if (cond) {} else {}
24041#define CHECK_CANARY(cond,insn) if (cond) {(void)(insn);}
24042#define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state)
24043#define INC_GLOBAL_CVAR_STATE() (++ruby_vm_global_cvar_state)
24044#define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
24045#define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
24046#define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
24047#define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
24048#define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
24049#define RUBY_RACTOR_H 1
24050#pragma GCC visibility push(default)
24051#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free)
24052#pragma GCC visibility pop
24053#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)
24054#define RACTOR_CHECK_MODE (VM_CHECK_MODE || RUBY_DEBUG) && (SIZEOF_UINT64_T == SIZEOF_VALUE)
24055#pragma GCC visibility push(default)
24056#pragma GCC visibility pop
24057#define rb_ractor_set_current_ec(cr,ec) rb_ractor_set_current_ec_(cr, ec, __FILE__, __LINE__)
24058#define rb_ractor_confirm_belonging(obj) obj
24059#define RUBY_VM_SYNC_H
24060#define LOCATION_ARGS void
24061#define LOCATION_PARAMS
24062#define APPEND_LOCATION_ARGS
24063#define APPEND_LOCATION_PARAMS
24064#define RB_VM_LOCKED_P() rb_vm_locked_p()
24065#define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
24066#define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
24067#define RB_VM_LOCK_ENTER_CR_LEV(cr,levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
24068#define RB_VM_LOCK_LEAVE_CR_LEV(cr,levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
24069#define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
24070#define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
24071#define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
24072#define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
24073#define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
24074#define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
24075#define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
24076#define ASSERT_vm_locking()
24077#define ASSERT_vm_unlocking()
24078#define BUILTIN_H_INCLUDED
24079#define RB_BUILTIN_FUNCTION(_i,_name,_fname,_arity,_compiler) { .name = _i < 0 ? NULL : #_name, .func_ptr = (void *)_fname, .argc = _arity, .index = _i, .compiler = _compiler, }
24080#define _PROBES_H
24081#define DTRACE_PROBES_DISABLED 1
24082#define RUBY_DTRACE_METHOD_ENTRY_ENABLED() 0
24083#define RUBY_DTRACE_METHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
24084#define RUBY_DTRACE_METHOD_RETURN_ENABLED() 0
24085#define RUBY_DTRACE_METHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
24086#define RUBY_DTRACE_CMETHOD_ENTRY_ENABLED() 0
24087#define RUBY_DTRACE_CMETHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
24088#define RUBY_DTRACE_CMETHOD_RETURN_ENABLED() 0
24089#define RUBY_DTRACE_CMETHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
24090#define RUBY_DTRACE_REQUIRE_ENTRY_ENABLED() 0
24091#define RUBY_DTRACE_REQUIRE_ENTRY(rquiredfile,filename,lineno) do {} while (0)
24092#define RUBY_DTRACE_REQUIRE_RETURN_ENABLED() 0
24093#define RUBY_DTRACE_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
24094#define RUBY_DTRACE_FIND_REQUIRE_ENTRY_ENABLED() 0
24095#define RUBY_DTRACE_FIND_REQUIRE_ENTRY(requiredfile,filename,lineno) do {} while (0)
24096#define RUBY_DTRACE_FIND_REQUIRE_RETURN_ENABLED() 0
24097#define RUBY_DTRACE_FIND_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
24098#define RUBY_DTRACE_LOAD_ENTRY_ENABLED() 0
24099#define RUBY_DTRACE_LOAD_ENTRY(loadedfile,filename,lineno) do {} while (0)
24100#define RUBY_DTRACE_LOAD_RETURN_ENABLED() 0
24101#define RUBY_DTRACE_LOAD_RETURN(loadedfile,filename,lineno) do {} while (0)
24102#define RUBY_DTRACE_RAISE_ENABLED() 0
24103#define RUBY_DTRACE_RAISE(classname,filename,lineno) do {} while (0)
24104#define RUBY_DTRACE_OBJECT_CREATE_ENABLED() 0
24105#define RUBY_DTRACE_OBJECT_CREATE(classname,filename,lineno) do {} while (0)
24106#define RUBY_DTRACE_ARRAY_CREATE_ENABLED() 0
24107#define RUBY_DTRACE_ARRAY_CREATE(length,filename,lineno) do {} while (0)
24108#define RUBY_DTRACE_HASH_CREATE_ENABLED() 0
24109#define RUBY_DTRACE_HASH_CREATE(length,filename,lineno) do {} while (0)
24110#define RUBY_DTRACE_STRING_CREATE_ENABLED() 0
24111#define RUBY_DTRACE_STRING_CREATE(length,filename,lineno) do {} while (0)
24112#define RUBY_DTRACE_SYMBOL_CREATE_ENABLED() 0
24113#define RUBY_DTRACE_SYMBOL_CREATE(str,filename,lineno) do {} while (0)
24114#define RUBY_DTRACE_PARSE_BEGIN_ENABLED() 0
24115#define RUBY_DTRACE_PARSE_BEGIN(sourcefile,lineno) do {} while (0)
24116#define RUBY_DTRACE_PARSE_END_ENABLED() 0
24117#define RUBY_DTRACE_PARSE_END(sourcefile,lineno) do {} while (0)
24118#define RUBY_DTRACE_INSN_ENABLED() 0
24119#define RUBY_DTRACE_INSN(insns_name) do {} while (0)
24120#define RUBY_DTRACE_INSN_OPERAND_ENABLED() 0
24121#define RUBY_DTRACE_INSN_OPERAND(val,insns_name) do {} while (0)
24122#define RUBY_DTRACE_GC_MARK_BEGIN_ENABLED() 0
24123#define RUBY_DTRACE_GC_MARK_BEGIN() do {} while (0)
24124#define RUBY_DTRACE_GC_MARK_END_ENABLED() 0
24125#define RUBY_DTRACE_GC_MARK_END() do {} while (0)
24126#define RUBY_DTRACE_GC_SWEEP_BEGIN_ENABLED() 0
24127#define RUBY_DTRACE_GC_SWEEP_BEGIN() do {} while (0)
24128#define RUBY_DTRACE_GC_SWEEP_END_ENABLED() 0
24129#define RUBY_DTRACE_GC_SWEEP_END() do {} while (0)
24130#define RUBY_PROBES_HELPER_H
24131#pragma GCC visibility push(default)
24132#pragma GCC visibility pop
24133#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)
24134#define RUBY_DTRACE_METHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_ENTRY, ec, klass, id)
24135#define RUBY_DTRACE_METHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_RETURN, ec, klass, id)
24136#define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_ENTRY, ec, klass, id)
24137#define RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_RETURN, ec, klass, id)
24138#pragma GCC diagnostic push
24139#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24140#pragma GCC diagnostic pop
24141#define INTERNAL_COMPAR_H
24142#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
24143#define CMP_OPTIMIZABLE(type) BASIC_OP_UNREDEFINED_P(BOP_CMP, type ##_REDEFINED_OP_FLAG)
24144#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))
24145#define INTERNAL_HASH_H
24146#define RHASH_AR_TABLE_MAX_SIZE SIZEOF_VALUE
24147#define RHASH_LEV_MASK (FL_USER13 | FL_USER14 | FL_USER15 | FL_USER16 | FL_USER17 | FL_USER18 | FL_USER19)
24148#define RHASH(obj) ((struct RHash *)(obj))
24149#pragma GCC visibility push(default)
24150#pragma GCC visibility pop
24151#pragma GCC visibility push(default)
24152#define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h, __FILE__, __LINE__)
24153#pragma GCC visibility pop
24154#define INTERNAL_NUMERIC_H
24155#define INTERNAL_BIGNUM_H
24156#define BDIGIT unsigned int
24157#define SIZEOF_BDIGIT SIZEOF_INT
24158#define BDIGIT_DBL unsigned LONG_LONG
24159#define BDIGIT_DBL_SIGNED LONG_LONG
24160#define PRI_BDIGIT_PREFIX ""
24161#define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
24162#define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
24163#define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
24164#define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
24165#define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
24166#define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
24167#define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
24168#define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
24169#define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
24170#define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
24171#define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
24172#define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
24173#define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
24174#define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
24175#define RBIGNUM(obj) ((struct RBignum *)(obj))
24176#define BIGNUM_SIGN_BIT FL_USER1
24177#define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
24178#define BIGNUM_EMBED_LEN_NUMBITS 3
24179#define BIGNUM_EMBED_LEN_MASK (~(~(VALUE)0U << BIGNUM_EMBED_LEN_NUMBITS) << BIGNUM_EMBED_LEN_SHIFT)
24180#define BIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
24181#define BIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*RBIMPL_RVALUE_EMBED_LEN_MAX/SIZEOF_ACTUAL_BDIGIT)
24182#pragma GCC visibility push(default)
24183#pragma GCC visibility pop
24184#pragma GCC visibility push(default)
24185#pragma GCC visibility pop
24186#define INTERNAL_BITS_H
24187#define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
24188#define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
24189#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))))
24190#define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
24191#define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
24192#define MUL_OVERFLOW_P(a,b) __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
24193#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)))
24194#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); })
24195#define MUL_OVERFLOW_LONG_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
24196#define MUL_OVERFLOW_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
24197#define MUL_OVERFLOW_INT_P(a,b) MUL_OVERFLOW_P(a, b)
24198#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)))
24199#define swap16 ruby_swap16
24200#define swap32 ruby_swap32
24201#define swap64 ruby_swap64
24202#define INTERNAL_FIXNUM_H
24203#define DLONG int128_t
24204#define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
24205#define ROUND_TO(mode,even,up,down) ((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even : (mode) == RUBY_NUM_ROUND_HALF_UP ? up : down)
24206#define ROUND_FUNC(mode,name) ROUND_TO(mode, name ##_half_even, name ##_half_up, name ##_half_down)
24207#define ROUND_CALL(mode,name,args) ROUND_TO(mode, name ##_half_even args, name ##_half_up args, name ##_half_down args)
24208#define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP
24209#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
24210#define roomof(x,y) (((x) + (y) - 1) / (y))
24211#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
24212#define RFLOAT(obj) ((struct RFloat *)(obj))
24213#define rb_float_value rb_float_value_inline
24214#define rb_float_new rb_float_new_inline
24215#pragma GCC visibility push(default)
24216#pragma GCC visibility pop
24217#pragma GCC visibility push(default)
24218#pragma GCC visibility pop
24219#define INTERNAL_RANDOM_H
24220#define INTERNAL_STRUCT_H
24221#define RSTRUCT(obj) ((struct RStruct *)(obj))
24222#define RSTRUCT_LEN internal_RSTRUCT_LEN
24223#define RSTRUCT_SET internal_RSTRUCT_SET
24224#define RSTRUCT_GET internal_RSTRUCT_GET
24225#pragma GCC diagnostic push
24226#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24227#pragma GCC diagnostic pop
24228#define RUBY_TOPLEVEL_VARIABLE_H
24229#define BIN(n) YARVINSN_ ##n
24230#define ASSERT_VM_INSTRUCTION_SIZE(array) STATIC_ASSERT(numberof_ ##array, numberof(array) == VM_INSTRUCTION_SIZE)
24231#define vm_check_canary(ec,sp)
24232#define vm_check_frame(a,b,c,d)
24233#define vm_push_frame_debug_counter_inc(ec,cfp,t)
24234#pragma GCC diagnostic push
24235#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24236#pragma GCC diagnostic pop
24237#pragma GCC diagnostic push
24238#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24239#pragma GCC diagnostic pop
24240#pragma GCC diagnostic push
24241#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24242#pragma GCC diagnostic pop
24243#pragma GCC diagnostic push
24244#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24245#pragma GCC diagnostic pop
24246#pragma GCC diagnostic push
24247#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24248#pragma GCC diagnostic pop
24249#define ractor_incidental_shareable_p(cond,val) (!(cond) || rb_ractor_shareable_p(val))
24250#define ractor_object_incidental_shareable_p(obj,val) ractor_incidental_shareable_p(rb_ractor_shareable_p(obj), val)
24251#define ATTR_INDEX_NOT_SET (attr_index_t)-1
24252#pragma GCC diagnostic push
24253#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24254#pragma GCC diagnostic pop
24255#pragma GCC diagnostic push
24256#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24257#pragma GCC diagnostic pop
24258#pragma GCC diagnostic push
24259#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24260#pragma GCC diagnostic pop
24261#pragma GCC diagnostic push
24262#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24263#pragma GCC diagnostic pop
24264#pragma GCC diagnostic push
24265#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24266#pragma GCC diagnostic pop
24267#pragma GCC diagnostic push
24268#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24269#pragma GCC diagnostic pop
24270#define EQ_UNREDEFINED_P(t) BASIC_OP_UNREDEFINED_P(BOP_EQ, t ##_REDEFINED_OP_FLAG)
24271#undef EQ_UNREDEFINED_P
24272#define CHECK_CMP_NAN(a,b)
24273#define KW_SPECIFIED_BITS_MAX (32-1)
24274#define USE_OPT_HIST 0
24275#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)))
24276#pragma GCC diagnostic push
24277#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24278#pragma GCC diagnostic pop
24279#pragma GCC diagnostic push
24280#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24281#pragma GCC diagnostic pop
24282#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; }
24283#pragma GCC diagnostic push
24284#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24285#pragma GCC diagnostic pop
24286#pragma GCC diagnostic push
24287#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24288#pragma GCC diagnostic pop
24289#define mexp_search_method vm_search_method_wrap
24290#define mexp_search_super vm_search_super_method
24291#define mexp_search_invokeblock vm_search_invokeblock
24292#define id_cmp idCmp
24293#undef id_cmp
24294#define IMEMO_CONST_CACHE_SHAREABLE IMEMO_FL_USER0
24295#pragma GCC diagnostic push
24296#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24297#pragma GCC diagnostic pop
24298#pragma GCC diagnostic push
24299#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24300#pragma GCC diagnostic pop
24301#pragma GCC diagnostic push
24302#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24303#pragma GCC diagnostic pop
24304#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)
24305#undef VM_TRACE_HOOK
24306#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.
#define rb_define_method_id(klass, mid, func, arity)
Defines klass#mid.
#define rb_define_singleton_method(klass, mid, func, arity)
Defines klass.mid.
#define rb_define_protected_method(klass, mid, func, arity)
Defines klass#mid and makes it protected.
#define rb_define_module_function(klass, mid, func, arity)
Defines klass#mid and makes it a module function.
#define rb_define_private_method(klass, mid, func, arity)
Defines klass#mid and makes it private.
#define rb_define_global_function(mid, func, arity)
Defines rb_mKernel #mid.
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:1569
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
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
@ 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_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:2617
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:2501
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:2512
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