Ruby 3.2.1p31 (2023-02-08 revision 31819e82c88c6f8ecfaeb162519bfa26a14b21fd)
rb_mjit_min_header-3.2.1.h
1#ifdef __GNUC__
2# pragma GCC system_header
3#endif
4#define ALWAYS_INLINE(x) __attribute__ ((__always_inline__)) x
5typedef __builtin_va_list __gnuc_va_list;
6typedef __gnuc_va_list va_list;
7typedef signed char __int8_t;
8typedef unsigned char __uint8_t;
9typedef short int __int16_t;
10typedef short unsigned int __uint16_t;
11typedef int __int32_t;
12typedef unsigned int __uint32_t;
13typedef long int __int64_t;
14typedef long unsigned int __uint64_t;
15typedef signed char __int_least8_t;
16typedef unsigned char __uint_least8_t;
17typedef short int __int_least16_t;
18typedef short unsigned int __uint_least16_t;
19typedef int __int_least32_t;
20typedef unsigned int __uint_least32_t;
21typedef long int __int_least64_t;
22typedef long unsigned int __uint_least64_t;
23typedef long int __intmax_t;
24typedef long unsigned int __uintmax_t;
25typedef long int __intptr_t;
26typedef long unsigned int __uintptr_t;
27typedef long unsigned int size_t;
28typedef long int ptrdiff_t;
29typedef short unsigned int wchar_t;
30typedef struct {
31 long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
32 long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
34typedef unsigned int wint_t;
35typedef __int64_t __blkcnt_t;
36typedef __int32_t __blksize_t;
37typedef __uint32_t __dev_t;
38typedef unsigned long __fsblkcnt_t;
39typedef unsigned long __fsfilcnt_t;
40typedef __uint32_t __uid_t;
41typedef __uint32_t __gid_t;
42typedef __uint64_t __ino_t;
43typedef long long __key_t;
44typedef __uint16_t __sa_family_t;
45typedef int __socklen_t;
46typedef long _off_t;
47typedef int __pid_t;
48typedef __uint32_t __id_t;
49typedef __uint32_t __mode_t;
50__extension__ typedef long long _off64_t;
51typedef _off_t __off_t;
52typedef _off64_t __loff_t;
53typedef long _fpos_t;
54typedef long unsigned int __size_t;
55typedef long signed int _ssize_t;
56typedef _ssize_t __ssize_t;
57typedef struct
58{
59 int __count;
60 union
61 {
62 wint_t __wch;
63 unsigned char __wchb[4];
64 } __value;
66typedef void *_iconv_t;
67typedef unsigned long __clock_t;
68typedef long __time_t;
69typedef unsigned long __clockid_t;
70typedef long __daddr_t;
71typedef unsigned long __timer_t;
72typedef int __nl_item;
73typedef unsigned short __nlink_t;
74typedef long __suseconds_t;
75typedef unsigned long __useconds_t;
76typedef __builtin_va_list __va_list;
77typedef unsigned int __ULong;
78typedef void *_LOCK_T;
79void __cygwin_lock_init(_LOCK_T *);
80void __cygwin_lock_init_recursive(_LOCK_T *);
81void __cygwin_lock_fini(_LOCK_T *);
82void __cygwin_lock_lock(_LOCK_T *);
83int __cygwin_lock_trylock(_LOCK_T *);
84void __cygwin_lock_unlock(_LOCK_T *);
85typedef _LOCK_T _flock_t;
86struct _reent;
87struct __locale_t;
88struct _Bigint
89{
90 struct _Bigint *_next;
91 int _k, _maxwds, _sign, _wds;
92 __ULong _x[1];
93};
94struct __tm
95{
96 int __tm_sec;
97 int __tm_min;
98 int __tm_hour;
99 int __tm_mday;
100 int __tm_mon;
101 int __tm_year;
102 int __tm_wday;
103 int __tm_yday;
104 int __tm_isdst;
105};
107 void * _fnargs[32];
108 void * _dso_handle[32];
109 __ULong _fntypes;
110 __ULong _is_cxa;
111};
112struct _atexit {
113 struct _atexit *_next;
114 int _ind;
115 void (*_fns[32])(void);
117};
118struct __sbuf {
119 unsigned char *_base;
120 int _size;
121};
122struct __sFILE64 {
123 unsigned char *_p;
124 int _r;
125 int _w;
126 short _flags;
127 short _file;
128 struct __sbuf _bf;
129 int _lbfsize;
130 struct _reent *_data;
131 void * _cookie;
132 _ssize_t (*_read) (struct _reent *, void *,
133 char *, size_t);
134 _ssize_t (*_write) (struct _reent *, void *,
135 const char *,
136 size_t);
137 _fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
138 int (*_close) (struct _reent *, void *);
139 struct __sbuf _ub;
140 unsigned char *_up;
141 int _ur;
142 unsigned char _ubuf[3];
143 unsigned char _nbuf[1];
144 struct __sbuf _lb;
145 int _blksize;
146 int _flags2;
147 _off64_t _offset;
148 _fpos_t (*_seek64) (struct _reent *, void *, _fpos_t, int);
149 _flock_t _lock;
150 _mbstate_t _mbstate;
151};
152typedef struct __sFILE64 __FILE;
153extern __FILE __sf[3];
154struct _glue
155{
156 struct _glue *_next;
157 int _niobs;
158 __FILE *_iobs;
159};
160extern struct _glue __sglue;
161struct _rand48 {
162 unsigned short _seed[3];
163 unsigned short _mult[3];
164 unsigned short _add;
165};
166struct _reent
167{
168 int _errno;
169 __FILE *_stdin, *_stdout, *_stderr;
170 int _inc;
171 char _emergency[25];
172 int _reserved_1;
173 struct __locale_t *_locale;
174 int _reserved_0;
175 void (*__cleanup) (struct _reent *);
176 struct _Bigint *_result;
177 int _result_k;
178 struct _Bigint *_p5s;
179 struct _Bigint **_freelist;
180 int _cvtlen;
181 char *_cvtbuf;
182 union
183 {
184 struct
185 {
186 unsigned int _reserved_2;
187 char * _strtok_last;
188 char _asctime_buf[26];
189 struct __tm _localtime_buf;
190 int _gamma_signgam;
191 __extension__ unsigned long long _rand_next;
192 struct _rand48 _r48;
193 _mbstate_t _mblen_state;
194 _mbstate_t _mbtowc_state;
195 _mbstate_t _wctomb_state;
196 char _l64a_buf[8];
197 char _signal_buf[24];
198 int _getdate_err;
199 _mbstate_t _mbrlen_state;
200 _mbstate_t _mbrtowc_state;
201 _mbstate_t _mbsrtowcs_state;
202 _mbstate_t _wcrtomb_state;
203 _mbstate_t _wcsrtombs_state;
204 int _h_errno;
205 } _reent;
206 struct
207 {
208 unsigned char * _reserved_3[30];
209 unsigned int _reserved_4[30];
210 } _reserved_5;
211 } _new;
212 struct _atexit *_reserved_6;
213 struct _atexit _reserved_7;
214 void (**_sig_func)(int);
215};
216extern struct _reent *_impure_ptr ;
217extern struct _reent _impure_data ;
218 struct _reent * __getreent (void);
219extern struct _atexit *__atexit;
220extern struct _atexit __atexit0;
221extern void (*__stdio_exit_handler) (void);
222void _reclaim_reent (struct _reent *);
223extern int _fwalk_sglue (struct _reent *, int (*)(struct _reent *, __FILE *),
224 struct _glue *);
225
226typedef __FILE FILE;
227typedef _fpos_t fpos_t;
228typedef __off_t off_t;
229typedef _ssize_t ssize_t;
230
231ssize_t getline (char **, size_t *, FILE *);
232ssize_t getdelim (char **, size_t *, int, FILE *);
233
234char * ctermid (char *);
235char * cuserid (char *);
236FILE * tmpfile (void);
237char * tmpnam (char *);
238char * tempnam (const char *, const char *) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
239int fclose (FILE *);
240int fflush (FILE *);
241FILE * freopen (const char *__restrict__, const char *__restrict__, FILE *__restrict__);
242void setbuf (FILE *__restrict__, char *__restrict__);
243int setvbuf (FILE *__restrict__, char *__restrict__, int, size_t);
244int fprintf (FILE *__restrict__, const char *__restrict__, ...)
245 __attribute__ ((__format__ (__printf__, 2, 3)));
246int fscanf (FILE *__restrict__, const char *__restrict__, ...)
247 __attribute__ ((__format__ (__scanf__, 2, 3)));
248int printf (const char *__restrict__, ...)
249 __attribute__ ((__format__ (__printf__, 1, 2)));
250int scanf (const char *__restrict__, ...)
251 __attribute__ ((__format__ (__scanf__, 1, 2)));
252int sscanf (const char *__restrict__, const char *__restrict__, ...)
253 __attribute__ ((__format__ (__scanf__, 2, 3)));
254int vfprintf (FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
255 __attribute__ ((__format__ (__printf__, 2, 0)));
256int vprintf (const char *, __gnuc_va_list)
257 __attribute__ ((__format__ (__printf__, 1, 0)));
258int vsprintf (char *__restrict__, const char *__restrict__, __gnuc_va_list)
259 __attribute__ ((__format__ (__printf__, 2, 0)));
260int fgetc (FILE *);
261char * fgets (char *__restrict__, int, FILE *__restrict__);
262int fputc (int, FILE *);
263int fputs (const char *__restrict__, FILE *__restrict__);
264int getc (FILE *);
265int getchar (void);
266char * gets (char *);
267int putc (int, FILE *);
268int putchar (int);
269int puts (const char *);
270int ungetc (int, FILE *);
271size_t fread (void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
272size_t fwrite (const void *__restrict__ , size_t _size, size_t _n, FILE *);
273int fgetpos (FILE *__restrict__, fpos_t *__restrict__);
274int fseek (FILE *, long, int);
275int fsetpos (FILE *, const fpos_t *);
276long ftell ( FILE *);
277void rewind (FILE *);
278void clearerr (FILE *);
279int feof (FILE *);
280int ferror (FILE *);
281void perror (const char *);
282FILE * fopen (const char *__restrict__ _name, const char *__restrict__ _type);
283int sprintf (char *__restrict__, const char *__restrict__, ...)
284 __attribute__ ((__format__ (__printf__, 2, 3)));
285int remove (const char *);
286int rename (const char *, const char *);
287int fseeko (FILE *, off_t, int);
288off_t ftello (FILE *);
289int fcloseall (void);
290int snprintf (char *__restrict__, size_t, const char *__restrict__, ...)
291 __attribute__ ((__format__ (__printf__, 3, 4)));
292int vsnprintf (char *__restrict__, size_t, const char *__restrict__, __gnuc_va_list)
293 __attribute__ ((__format__ (__printf__, 3, 0)));
294int vfscanf (FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
295 __attribute__ ((__format__ (__scanf__, 2, 0)));
296int vscanf (const char *, __gnuc_va_list)
297 __attribute__ ((__format__ (__scanf__, 1, 0)));
298int vsscanf (const char *__restrict__, const char *__restrict__, __gnuc_va_list)
299 __attribute__ ((__format__ (__scanf__, 2, 0)));
300int asprintf (char **__restrict__, const char *__restrict__, ...)
301 __attribute__ ((__format__ (__printf__, 2, 3)));
302int vasprintf (char **, const char *, __gnuc_va_list)
303 __attribute__ ((__format__ (__printf__, 2, 0)));
304int asiprintf (char **, const char *, ...)
305 __attribute__ ((__format__ (__printf__, 2, 3)));
306char * asniprintf (char *, size_t *, const char *, ...)
307 __attribute__ ((__format__ (__printf__, 3, 4)));
308char * asnprintf (char *__restrict__, size_t *__restrict__, const char *__restrict__, ...)
309 __attribute__ ((__format__ (__printf__, 3, 4)));
310int diprintf (int, const char *, ...)
311 __attribute__ ((__format__ (__printf__, 2, 3)));
312int fiprintf (FILE *, const char *, ...)
313 __attribute__ ((__format__ (__printf__, 2, 3)));
314int fiscanf (FILE *, const char *, ...)
315 __attribute__ ((__format__ (__scanf__, 2, 3)));
316int iprintf (const char *, ...)
317 __attribute__ ((__format__ (__printf__, 1, 2)));
318int iscanf (const char *, ...)
319 __attribute__ ((__format__ (__scanf__, 1, 2)));
320int siprintf (char *, const char *, ...)
321 __attribute__ ((__format__ (__printf__, 2, 3)));
322int siscanf (const char *, const char *, ...)
323 __attribute__ ((__format__ (__scanf__, 2, 3)));
324int sniprintf (char *, size_t, const char *, ...)
325 __attribute__ ((__format__ (__printf__, 3, 4)));
326int vasiprintf (char **, const char *, __gnuc_va_list)
327 __attribute__ ((__format__ (__printf__, 2, 0)));
328char * vasniprintf (char *, size_t *, const char *, __gnuc_va_list)
329 __attribute__ ((__format__ (__printf__, 3, 0)));
330char * vasnprintf (char *, size_t *, const char *, __gnuc_va_list)
331 __attribute__ ((__format__ (__printf__, 3, 0)));
332int vdiprintf (int, const char *, __gnuc_va_list)
333 __attribute__ ((__format__ (__printf__, 2, 0)));
334int vfiprintf (FILE *, const char *, __gnuc_va_list)
335 __attribute__ ((__format__ (__printf__, 2, 0)));
336int vfiscanf (FILE *, const char *, __gnuc_va_list)
337 __attribute__ ((__format__ (__scanf__, 2, 0)));
338int viprintf (const char *, __gnuc_va_list)
339 __attribute__ ((__format__ (__printf__, 1, 0)));
340int viscanf (const char *, __gnuc_va_list)
341 __attribute__ ((__format__ (__scanf__, 1, 0)));
342int vsiprintf (char *, const char *, __gnuc_va_list)
343 __attribute__ ((__format__ (__printf__, 2, 0)));
344int vsiscanf (const char *, const char *, __gnuc_va_list)
345 __attribute__ ((__format__ (__scanf__, 2, 0)));
346int vsniprintf (char *, size_t, const char *, __gnuc_va_list)
347 __attribute__ ((__format__ (__printf__, 3, 0)));
348FILE * fdopen (int, const char *);
349int fileno (FILE *);
350int pclose (FILE *);
351FILE * popen (const char *, const char *);
352void setbuffer (FILE *, char *, int);
353int setlinebuf (FILE *);
354int getw (FILE *);
355int putw (int, FILE *);
356int getc_unlocked (FILE *);
357int getchar_unlocked (void);
358void flockfile (FILE *);
359int ftrylockfile (FILE *);
360void funlockfile (FILE *);
361int putc_unlocked (int, FILE *);
362int putchar_unlocked (int);
363int dprintf (int, const char *__restrict__, ...)
364 __attribute__ ((__format__ (__printf__, 2, 3)));
365FILE * fmemopen (void *__restrict__, size_t, const char *__restrict__);
366FILE * open_memstream (char **, size_t *);
367int vdprintf (int, const char *__restrict__, __gnuc_va_list)
368 __attribute__ ((__format__ (__printf__, 2, 0)));
369int renameat (int, const char *, int, const char *);
370int renameat2 (int, const char *, int, const char *, unsigned int);
371int _asiprintf_r (struct _reent *, char **, const char *, ...)
372 __attribute__ ((__format__ (__printf__, 3, 4)));
373char * _asniprintf_r (struct _reent *, char *, size_t *, const char *, ...)
374 __attribute__ ((__format__ (__printf__, 4, 5)));
375char * _asnprintf_r (struct _reent *, char *__restrict__, size_t *__restrict__, const char *__restrict__, ...)
376 __attribute__ ((__format__ (__printf__, 4, 5)));
377int _asprintf_r (struct _reent *, char **__restrict__, const char *__restrict__, ...)
378 __attribute__ ((__format__ (__printf__, 3, 4)));
379int _diprintf_r (struct _reent *, int, const char *, ...)
380 __attribute__ ((__format__ (__printf__, 3, 4)));
381int _dprintf_r (struct _reent *, int, const char *__restrict__, ...)
382 __attribute__ ((__format__ (__printf__, 3, 4)));
383int _fclose_r (struct _reent *, FILE *);
384int _fcloseall_r (struct _reent *);
385FILE * _fdopen_r (struct _reent *, int, const char *);
386int _fflush_r (struct _reent *, FILE *);
387int _fgetc_r (struct _reent *, FILE *);
388int _fgetc_unlocked_r (struct _reent *, FILE *);
389char * _fgets_r (struct _reent *, char *__restrict__, int, FILE *__restrict__);
390char * _fgets_unlocked_r (struct _reent *, char *__restrict__, int, FILE *__restrict__);
391int _fgetpos_r (struct _reent *, FILE *, fpos_t *);
392int _fsetpos_r (struct _reent *, FILE *, const fpos_t *);
393int _fiprintf_r (struct _reent *, FILE *, const char *, ...)
394 __attribute__ ((__format__ (__printf__, 3, 4)));
395int _fiscanf_r (struct _reent *, FILE *, const char *, ...)
396 __attribute__ ((__format__ (__scanf__, 3, 4)));
397FILE * _fmemopen_r (struct _reent *, void *__restrict__, size_t, const char *__restrict__);
398FILE * _fopen_r (struct _reent *, const char *__restrict__, const char *__restrict__);
399FILE * _freopen_r (struct _reent *, const char *__restrict__, const char *__restrict__, FILE *__restrict__);
400int _fprintf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, ...)
401 __attribute__ ((__format__ (__printf__, 3, 4)));
402int _fpurge_r (struct _reent *, FILE *);
403int _fputc_r (struct _reent *, int, FILE *);
404int _fputc_unlocked_r (struct _reent *, int, FILE *);
405int _fputs_r (struct _reent *, const char *__restrict__, FILE *__restrict__);
406int _fputs_unlocked_r (struct _reent *, const char *__restrict__, FILE *__restrict__);
407size_t _fread_r (struct _reent *, void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
408size_t _fread_unlocked_r (struct _reent *, void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
409int _fscanf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, ...)
410 __attribute__ ((__format__ (__scanf__, 3, 4)));
411int _fseek_r (struct _reent *, FILE *, long, int);
412int _fseeko_r (struct _reent *, FILE *, _off_t, int);
413long _ftell_r (struct _reent *, FILE *);
414_off_t _ftello_r (struct _reent *, FILE *);
415void _rewind_r (struct _reent *, FILE *);
416size_t _fwrite_r (struct _reent *, const void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
417size_t _fwrite_unlocked_r (struct _reent *, const void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
418int _getc_r (struct _reent *, FILE *);
419int _getc_unlocked_r (struct _reent *, FILE *);
420int _getchar_r (struct _reent *);
421int _getchar_unlocked_r (struct _reent *);
422char * _gets_r (struct _reent *, char *);
423int _iprintf_r (struct _reent *, const char *, ...)
424 __attribute__ ((__format__ (__printf__, 2, 3)));
425int _iscanf_r (struct _reent *, const char *, ...)
426 __attribute__ ((__format__ (__scanf__, 2, 3)));
427FILE * _open_memstream_r (struct _reent *, char **, size_t *);
428void _perror_r (struct _reent *, const char *);
429int _printf_r (struct _reent *, const char *__restrict__, ...)
430 __attribute__ ((__format__ (__printf__, 2, 3)));
431int _putc_r (struct _reent *, int, FILE *);
432int _putc_unlocked_r (struct _reent *, int, FILE *);
433int _putchar_unlocked_r (struct _reent *, int);
434int _putchar_r (struct _reent *, int);
435int _puts_r (struct _reent *, const char *);
436int _remove_r (struct _reent *, const char *);
437int _rename_r (struct _reent *,
438 const char *_old, const char *_new);
439int _scanf_r (struct _reent *, const char *__restrict__, ...)
440 __attribute__ ((__format__ (__scanf__, 2, 3)));
441int _siprintf_r (struct _reent *, char *, const char *, ...)
442 __attribute__ ((__format__ (__printf__, 3, 4)));
443int _siscanf_r (struct _reent *, const char *, const char *, ...)
444 __attribute__ ((__format__ (__scanf__, 3, 4)));
445int _sniprintf_r (struct _reent *, char *, size_t, const char *, ...)
446 __attribute__ ((__format__ (__printf__, 4, 5)));
447int _snprintf_r (struct _reent *, char *__restrict__, size_t, const char *__restrict__, ...)
448 __attribute__ ((__format__ (__printf__, 4, 5)));
449int _sprintf_r (struct _reent *, char *__restrict__, const char *__restrict__, ...)
450 __attribute__ ((__format__ (__printf__, 3, 4)));
451int _sscanf_r (struct _reent *, const char *__restrict__, const char *__restrict__, ...)
452 __attribute__ ((__format__ (__scanf__, 3, 4)));
453char * _tempnam_r (struct _reent *, const char *, const char *);
454FILE * _tmpfile_r (struct _reent *);
455char * _tmpnam_r (struct _reent *, char *);
456int _ungetc_r (struct _reent *, int, FILE *);
457int _vasiprintf_r (struct _reent *, char **, const char *, __gnuc_va_list)
458 __attribute__ ((__format__ (__printf__, 3, 0)));
459char * _vasniprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list)
460 __attribute__ ((__format__ (__printf__, 4, 0)));
461char * _vasnprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list)
462 __attribute__ ((__format__ (__printf__, 4, 0)));
463int _vasprintf_r (struct _reent *, char **, const char *, __gnuc_va_list)
464 __attribute__ ((__format__ (__printf__, 3, 0)));
465int _vdiprintf_r (struct _reent *, int, const char *, __gnuc_va_list)
466 __attribute__ ((__format__ (__printf__, 3, 0)));
467int _vdprintf_r (struct _reent *, int, const char *__restrict__, __gnuc_va_list)
468 __attribute__ ((__format__ (__printf__, 3, 0)));
469int _vfiprintf_r (struct _reent *, FILE *, const char *, __gnuc_va_list)
470 __attribute__ ((__format__ (__printf__, 3, 0)));
471int _vfiscanf_r (struct _reent *, FILE *, const char *, __gnuc_va_list)
472 __attribute__ ((__format__ (__scanf__, 3, 0)));
473int _vfprintf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
474 __attribute__ ((__format__ (__printf__, 3, 0)));
475int _vfscanf_r (struct _reent *, FILE *__restrict__, const char *__restrict__, __gnuc_va_list)
476 __attribute__ ((__format__ (__scanf__, 3, 0)));
477int _viprintf_r (struct _reent *, const char *, __gnuc_va_list)
478 __attribute__ ((__format__ (__printf__, 2, 0)));
479int _viscanf_r (struct _reent *, const char *, __gnuc_va_list)
480 __attribute__ ((__format__ (__scanf__, 2, 0)));
481int _vprintf_r (struct _reent *, const char *__restrict__, __gnuc_va_list)
482 __attribute__ ((__format__ (__printf__, 2, 0)));
483int _vscanf_r (struct _reent *, const char *__restrict__, __gnuc_va_list)
484 __attribute__ ((__format__ (__scanf__, 2, 0)));
485int _vsiprintf_r (struct _reent *, char *, const char *, __gnuc_va_list)
486 __attribute__ ((__format__ (__printf__, 3, 0)));
487int _vsiscanf_r (struct _reent *, const char *, const char *, __gnuc_va_list)
488 __attribute__ ((__format__ (__scanf__, 3, 0)));
489int _vsniprintf_r (struct _reent *, char *, size_t, const char *, __gnuc_va_list)
490 __attribute__ ((__format__ (__printf__, 4, 0)));
491int _vsnprintf_r (struct _reent *, char *__restrict__, size_t, const char *__restrict__, __gnuc_va_list)
492 __attribute__ ((__format__ (__printf__, 4, 0)));
493int _vsprintf_r (struct _reent *, char *__restrict__, const char *__restrict__, __gnuc_va_list)
494 __attribute__ ((__format__ (__printf__, 3, 0)));
495int _vsscanf_r (struct _reent *, const char *__restrict__, const char *__restrict__, __gnuc_va_list)
496 __attribute__ ((__format__ (__scanf__, 3, 0)));
497int fpurge (FILE *);
498ssize_t __getdelim (char **, size_t *, int, FILE *);
499ssize_t __getline (char **, size_t *, FILE *);
500void clearerr_unlocked (FILE *);
501int feof_unlocked (FILE *);
502int ferror_unlocked (FILE *);
503int fileno_unlocked (FILE *);
504int fflush_unlocked (FILE *);
505int fgetc_unlocked (FILE *);
506int fputc_unlocked (int, FILE *);
507size_t fread_unlocked (void *__restrict__, size_t _size, size_t _n, FILE *__restrict__);
508size_t fwrite_unlocked (const void *__restrict__ , size_t _size, size_t _n, FILE *);
509char * fgets_unlocked (char *__restrict__, int, FILE *__restrict__);
510int fputs_unlocked (const char *__restrict__, FILE *__restrict__);
511int __srget_r (struct _reent *, FILE *);
512int __swbuf_r (struct _reent *, int, FILE *);
513FILE *funopen (const void *__cookie,
514 int (*__readfn)(void *__cookie, char *__buf,
515 size_t __n),
516 int (*__writefn)(void *__cookie, const char *__buf,
517 size_t __n),
518 fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence),
519 int (*__closefn)(void *__cookie));
520FILE *_funopen_r (struct _reent *, const void *__cookie,
521 int (*__readfn)(void *__cookie, char *__buf,
522 size_t __n),
523 int (*__writefn)(void *__cookie, const char *__buf,
524 size_t __n),
525 fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence),
526 int (*__closefn)(void *__cookie));
527typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n);
528typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf,
529 size_t __n);
530typedef int cookie_seek_function_t(void *__cookie, off_t *__off, int __whence);
531typedef int cookie_close_function_t(void *__cookie);
532typedef struct
533{
534 cookie_read_function_t *read;
535 cookie_write_function_t *write;
536 cookie_seek_function_t *seek;
537 cookie_close_function_t *close;
539FILE *fopencookie (void *__cookie,
540 const char *__mode, cookie_io_functions_t __functions);
541FILE *_fopencookie_r (struct _reent *, void *__cookie,
542 const char *__mode, cookie_io_functions_t __functions);
543static __inline__ int __sgetc_r(struct _reent *__ptr, FILE *__p);
544static __inline__ int __sgetc_r(struct _reent *__ptr, FILE *__p)
545 {
546 int __c = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
547 if ((__p->_flags & 0x4000) && (__c == '\r'))
548 {
549 int __c2 = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
550 if (__c2 == '\n')
551 __c = __c2;
552 else
553 ungetc(__c2, __p);
554 }
555 return __c;
556 }
557static __inline__ int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
558 if ((_p->_flags & 0x4000) && _c == '\n')
559 __sputc_r (_ptr, '\r', _p);
560 if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
561 return (*_p->_p++ = _c);
562 else
563 return (__swbuf_r(_ptr, _c, _p));
564}
565static __inline int
566_getchar_unlocked(void)
567{
568 struct _reent *_ptr;
569 _ptr = (__getreent());
570 return (__sgetc_r(_ptr, ((_ptr)->_stdin)));
571}
572static __inline int
573_putchar_unlocked(int _c)
574{
575 struct _reent *_ptr;
576 _ptr = (__getreent());
577 return (__sputc_r(_ptr, _c, ((_ptr)->_stdout)));
578}
579
580
581void __stack_chk_fail(void) __attribute__((__noreturn__));
582void __chk_fail(void) __attribute__((__noreturn__));
583
584
585int __sprintf_chk(char *__restrict__, int, size_t, const char *__restrict__, ...)
586 __attribute__((__format__ (__printf__, 4, 5)));
587int __vsprintf_chk(char *__restrict__, int, size_t, const char *__restrict__,
588 __va_list)
589 __attribute__((__format__ (__printf__, 4, 0)));
590int __snprintf_chk(char *__restrict__, size_t, int, size_t,
591 const char *__restrict__, ...)
592 __attribute__((__format__ (__printf__, 5, 6)));
593int __vsnprintf_chk(char *__restrict__, size_t, int, size_t,
594 const char *__restrict__, __va_list)
595 __attribute__((__format__ (__printf__, 5, 0)));
596char *__gets_chk(char *, size_t);
597
598char * __ssp_real_fgets (char *__restrict__ __buf, int __len, FILE *__fp) __asm__("" "fgets"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * fgets (char *__restrict__ __buf, int __len, FILE *__fp)
599{
600 if (__len > 0)
601 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && (size_t)__len > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
602 return __ssp_real_fgets(__buf, __len, __fp);
603}
604char * __ssp_real_fgets_unlocked (char *__restrict__ __buf, int __len, FILE *__fp) __asm__("" "fgets_unlocked"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) char * fgets_unlocked (char *__restrict__ __buf, int __len, FILE *__fp)
605{
606 if (__len > 0)
607 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && (size_t)__len > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
608 return __ssp_real_fgets_unlocked(__buf, __len, __fp);
609}
610size_t __ssp_real_fread (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp) __asm__("" "fread"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) size_t fread (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp)
611{
612 if (__builtin_object_size(__ptr, 0) != (size_t)-1 && __size * __n > __builtin_object_size(__ptr, 0)) __chk_fail();
613 return __ssp_real_fread(__ptr, __size, __n, __fp);
614}
615size_t __ssp_real_fread_unlocked (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp) __asm__("" "fread_unlocked"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) size_t fread_unlocked (void *__restrict__ __ptr, size_t __size, size_t __n, FILE *__restrict__ __fp)
616{
617 if (__builtin_object_size(__ptr, 0) != (size_t)-1 && __size * __n > __builtin_object_size(__ptr, 0)) __chk_fail();
618 return __ssp_real_fread_unlocked(__ptr, __size, __n, __fp);
619}
620typedef __uint8_t u_int8_t;
621typedef __uint16_t u_int16_t;
622typedef __uint32_t u_int32_t;
623typedef __uint64_t u_int64_t;
624typedef __intptr_t register_t;
625typedef __int8_t int8_t ;
626typedef __uint8_t uint8_t ;
627typedef __int16_t int16_t ;
628typedef __uint16_t uint16_t ;
629typedef __int32_t int32_t ;
630typedef __uint32_t uint32_t ;
631typedef __int64_t int64_t ;
632typedef __uint64_t uint64_t ;
633typedef __intmax_t intmax_t;
634typedef __uintmax_t uintmax_t;
635typedef __intptr_t intptr_t;
636typedef __uintptr_t uintptr_t;
637static __inline__ __uint32_t __ntohl(__uint32_t);
638static __inline__ __uint16_t __ntohs(__uint16_t);
639static __inline__ __uint32_t
640__ntohl(__uint32_t _x)
641{
642 __asm__("bswap %0" : "=r" (_x) : "0" (_x));
643 return _x;
644}
645static __inline__ __uint16_t
646__ntohs(__uint16_t _x)
647{
648 __asm__("xchgb %b0,%h0"
649 : "=Q" (_x)
650 : "0" (_x));
651 return _x;
652}
653typedef unsigned long __sigset_t;
654typedef __suseconds_t suseconds_t;
655typedef long time_t;
656struct timeval {
657 time_t tv_sec;
658 suseconds_t tv_usec;
659};
660struct timespec {
661 time_t tv_sec;
662 long tv_nsec;
663};
665 struct timespec it_interval;
666 struct timespec it_value;
667};
668typedef __sigset_t sigset_t;
669typedef unsigned long __fd_mask;
670typedef __fd_mask fd_mask;
671typedef struct fd_set {
672 __fd_mask __fds_bits[(((1024) + ((((int)sizeof(__fd_mask) * 8)) - 1)) / (((int)sizeof(__fd_mask) * 8)))];
673} fd_set;
674
675int select (int __n, fd_set *__readfds, fd_set *__writefds, fd_set *__exceptfds, struct timeval *__timeout);
676int pselect (int __n, fd_set *__readfds, fd_set *__writefds, fd_set *__exceptfds, const struct timespec *__timeout, const sigset_t *__set);
677
678typedef __uint32_t in_addr_t;
679typedef __uint16_t in_port_t;
680typedef __uintptr_t u_register_t;
681typedef unsigned char u_char;
682typedef unsigned short u_short;
683typedef unsigned int u_int;
684typedef unsigned long u_long;
685typedef unsigned short ushort;
686typedef unsigned int uint;
687typedef unsigned long ulong;
688typedef __blkcnt_t blkcnt_t;
689typedef __blksize_t blksize_t;
690typedef unsigned long clock_t;
691typedef __daddr_t daddr_t;
692typedef char * caddr_t;
693typedef __fsblkcnt_t fsblkcnt_t;
694typedef __fsfilcnt_t fsfilcnt_t;
695typedef __id_t id_t;
696typedef __ino_t ino_t;
697typedef __dev_t dev_t;
698typedef __uid_t uid_t;
699typedef __gid_t gid_t;
700typedef __pid_t pid_t;
701typedef __key_t key_t;
702typedef __mode_t mode_t;
703typedef __nlink_t nlink_t;
704typedef __clockid_t clockid_t;
705typedef __timer_t timer_t;
706typedef __useconds_t useconds_t;
707typedef __int64_t sbintime_t;
708typedef long unsigned int __cpu_mask;
709typedef struct
710{
711 __cpu_mask __bits[(1024 / (8 * sizeof (__cpu_mask)))];
712} cpu_set_t;
713int __sched_getaffinity_sys (pid_t, size_t, cpu_set_t *);
714static inline size_t
715__cpuset_alloc_size (int num)
716{
717 return (size_t) (((num + (8 * sizeof (__cpu_mask)) - 1) / (8 * sizeof (__cpu_mask))) * sizeof (__cpu_mask));
718}
719static inline cpu_set_t *
720__cpuset_alloc (int num)
721{
722 return (cpu_set_t *) __builtin_malloc (__cpuset_alloc_size (num));
723}
724static inline void
725__cpuset_free (cpu_set_t *set)
726{
727 __builtin_free (set);
728}
729static inline void
730__cpuset_zero_s (size_t siz, cpu_set_t *set)
731{
732 (void) __builtin_memset (set, 0, siz);
733}
734static inline void
735__cpuset_set_s (int cpu, size_t siz, cpu_set_t *set)
736{
737 if (cpu >= 0 && cpu < 8 * siz)
738 (set)->__bits[((cpu) / (8 * sizeof (__cpu_mask)))] |= ((__cpu_mask) 1 << ((cpu) % (8 * sizeof (__cpu_mask))));
739}
740static inline void
741__cpuset_clr_s (int cpu, size_t siz, cpu_set_t *set)
742{
743 if (cpu >= 0 && cpu < 8 * siz)
744 (set)->__bits[((cpu) / (8 * sizeof (__cpu_mask)))] &= ~(((__cpu_mask) 1 << ((cpu) % (8 * sizeof (__cpu_mask)))));
745}
746static inline int
747__cpuset_isset_s (int cpu, size_t siz, cpu_set_t *set)
748{
749 int res = 0;
750 if (cpu >= 0 && cpu < 8 * siz)
751 res = !!((set)->__bits[((cpu) / (8 * sizeof (__cpu_mask)))] & ((__cpu_mask) 1 << ((cpu) % (8 * sizeof (__cpu_mask)))));
752 return res;
753}
754static inline int
755__cpuset_count_s (size_t siz, cpu_set_t *set)
756{
757 int res = 0;
758 for (int i = 0; i < siz / sizeof (__cpu_mask); i++)
759 res += __builtin_popcountl ((set)->__bits[i]);
760 return res;
761}
762static inline void
763__cpuset_and_s (size_t siz, cpu_set_t *dst, cpu_set_t *src1, cpu_set_t *src2)
764{
765 for (int i = 0; i < siz / sizeof (__cpu_mask); i++)
766 (dst)->__bits[i] = (src1)->__bits[i] & (src2)->__bits[i];
767}
768static inline void
769__cpuset_or_s (size_t siz, cpu_set_t *dst, cpu_set_t *src1, cpu_set_t *src2)
770{
771 for (int i = 0; i < siz / sizeof (__cpu_mask); i++)
772 (dst)->__bits[i] = (src1)->__bits[i] | (src2)->__bits[i];
773}
774static inline void
775__cpuset_xor_s (size_t siz, cpu_set_t *dst, cpu_set_t *src1, cpu_set_t *src2)
776{
777 for (int i = 0; i < siz / sizeof (__cpu_mask); i++)
778 (dst)->__bits[i] = (src1)->__bits[i] ^ (src2)->__bits[i];
779}
780static inline int
781__cpuset_equal_s (size_t siz, cpu_set_t *src1, cpu_set_t *src2)
782{
783 int res = 1;
784 for (int i = 0; res && i < siz / sizeof (__cpu_mask); i++)
785 res &= (src1)->__bits[i] == (src2)->__bits[i];
786 return res;
787}
788typedef struct __pthread_t {char __dummy;} *pthread_t;
789typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
790typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
791typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
792typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
793typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
794typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
795typedef struct __pthread_barrierattr_t {char __dummy;} *pthread_barrierattr_t;
796typedef struct __pthread_barrier_t {char __dummy;} *pthread_barrier_t;
797typedef struct
798{
799 pthread_mutex_t mutex;
800 int state;
801}
803typedef struct __pthread_spinlock_t {char __dummy;} *pthread_spinlock_t;
804typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
805typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
806static __inline unsigned short
807__bswap_16 (unsigned short __x)
808{
809 return (__x >> 8) | (__x << 8);
810}
811static __inline unsigned int
812__bswap_32 (unsigned int __x)
813{
814 return (__bswap_16 (__x & 0xffff) << 16) | (__bswap_16 (__x >> 16));
815}
816static __inline unsigned long long
817__bswap_64 (unsigned long long __x)
818{
819 return (((unsigned long long) __bswap_32 (__x & 0xffffffffull)) << 32) | (__bswap_32 (__x >> 32));
820}
821typedef struct timespec timespec_t;
822typedef struct timespec timestruc_t;
823typedef __loff_t loff_t;
824struct flock {
825 short l_type;
826 short l_whence;
827 off_t l_start;
828 off_t l_len;
829 pid_t l_pid;
830};
831typedef unsigned long vm_offset_t;
832typedef unsigned long vm_size_t;
833typedef void *vm_object_t;
834typedef char *addr_t;
835static __inline__ int gnu_dev_major(dev_t);
836static __inline__ int gnu_dev_minor(dev_t);
837static __inline__ dev_t gnu_dev_makedev(int, int);
838static __inline__ int
839gnu_dev_major(dev_t dev)
840{
841 return (int)(((dev) >> 16) & 0xffff);
842}
843static __inline__ int
844gnu_dev_minor(dev_t dev)
845{
846 return (int)((dev) & 0xffff);
847}
848static __inline__ dev_t
849gnu_dev_makedev(int maj, int min)
850{
851 return (((maj) << 16) | ((min) & 0xffff));
852}
853struct __locale_t;
854typedef struct __locale_t *locale_t;
855
856struct tm
857{
858 int tm_sec;
859 int tm_min;
860 int tm_hour;
861 int tm_mday;
862 int tm_mon;
863 int tm_year;
864 int tm_wday;
865 int tm_yday;
866 int tm_isdst;
867 long tm_gmtoff;
868 const char *tm_zone;
869};
870clock_t clock (void);
871double difftime (time_t _time2, time_t _time1);
872time_t mktime (struct tm *_timeptr);
873time_t time (time_t *_timer);
874char *asctime (const struct tm *_tblock);
875char *ctime (const time_t *_time);
876struct tm *gmtime (const time_t *_timer);
877struct tm *localtime (const time_t *_timer);
878size_t strftime (char *__restrict__ _s,
879 size_t _maxsize, const char *__restrict__ _fmt,
880 const struct tm *__restrict__ _t);
881extern size_t strftime_l (char *__restrict__ _s, size_t _maxsize,
882 const char *__restrict__ _fmt,
883 const struct tm *__restrict__ _t, locale_t _l);
884char *asctime_r (const struct tm *__restrict__,
885 char *__restrict__);
886char *ctime_r (const time_t *, char *);
887struct tm *gmtime_r (const time_t *__restrict__,
888 struct tm *__restrict__);
889struct tm *localtime_r (const time_t *__restrict__,
890 struct tm *__restrict__);
891
892char *strptime (const char *__restrict__,
893 const char *__restrict__,
894 struct tm *__restrict__);
895char *strptime_l (const char *__restrict__, const char *__restrict__,
896 struct tm *__restrict__, locale_t);
897void tzset (void);
898void _tzset_r (struct _reent *);
899extern __attribute__((dllimport)) long _timezone;
900extern __attribute__((dllimport)) int _daylight;
901extern __attribute__((dllimport)) char *_tzname[2];
902int clock_setres (clockid_t, struct timespec *);
903time_t timelocal (struct tm *);
904time_t timegm (struct tm *);
905extern int stime (const time_t *);
906extern int daylight __asm__ ("_daylight");
907extern long timezone __asm__ ("_timezone");
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924typedef __int_least8_t int_least8_t;
925typedef __uint_least8_t uint_least8_t;
926typedef __int_least16_t int_least16_t;
927typedef __uint_least16_t uint_least16_t;
928typedef __int_least32_t int_least32_t;
929typedef __uint_least32_t uint_least32_t;
930typedef __int_least64_t int_least64_t;
931typedef __uint_least64_t uint_least64_t;
932 typedef signed char int_fast8_t;
933 typedef unsigned char uint_fast8_t;
934 typedef long int int_fast16_t;
935 typedef long unsigned int uint_fast16_t;
936 typedef long int int_fast32_t;
937 typedef long unsigned int uint_fast32_t;
938 typedef long int int_fast64_t;
939 typedef long unsigned int uint_fast64_t;
941 __uint16_t significand[4];
942 __uint16_t exponent;
943 __uint16_t padding[3];
944};
946 __uint32_t element[4];
947};
949{
950 __uint16_t cwd;
951 __uint16_t swd;
952 __uint16_t ftw;
953 __uint16_t fop;
954 __uint64_t rip;
955 __uint64_t rdp;
956 __uint32_t mxcsr;
957 __uint32_t mxcr_mask;
958 struct _uc_fpxreg st[8];
959 struct _uc_xmmreg xmm[16];
960 __uint32_t padding[24];
961};
962struct __attribute__ ((__aligned__ (16))) __mcontext
963{
964 __uint64_t p1home;
965 __uint64_t p2home;
966 __uint64_t p3home;
967 __uint64_t p4home;
968 __uint64_t p5home;
969 __uint64_t p6home;
970 __uint32_t ctxflags;
971 __uint32_t mxcsr;
972 __uint16_t cs;
973 __uint16_t ds;
974 __uint16_t es;
975 __uint16_t fs;
976 __uint16_t gs;
977 __uint16_t ss;
978 __uint32_t eflags;
979 __uint64_t dr0;
980 __uint64_t dr1;
981 __uint64_t dr2;
982 __uint64_t dr3;
983 __uint64_t dr6;
984 __uint64_t dr7;
985 __uint64_t rax;
986 __uint64_t rcx;
987 __uint64_t rdx;
988 __uint64_t rbx;
989 __uint64_t rsp;
990 __uint64_t rbp;
991 __uint64_t rsi;
992 __uint64_t rdi;
993 __uint64_t r8;
994 __uint64_t r9;
995 __uint64_t r10;
996 __uint64_t r11;
997 __uint64_t r12;
998 __uint64_t r13;
999 __uint64_t r14;
1000 __uint64_t r15;
1001 __uint64_t rip;
1002 struct _fpstate fpregs;
1003 __uint64_t vregs[52];
1004 __uint64_t vcx;
1005 __uint64_t dbc;
1006 __uint64_t btr;
1007 __uint64_t bfr;
1008 __uint64_t etr;
1009 __uint64_t efr;
1010 __uint64_t oldmask;
1011 __uint64_t cr2;
1012};
1013typedef union sigval
1014{
1015 int sival_int;
1016 void *sival_ptr;
1017} sigval_t;
1018typedef struct sigevent
1019{
1020 sigval_t sigev_value;
1021 int sigev_signo;
1022 int sigev_notify;
1023 void (*sigev_notify_function) (sigval_t);
1024 pthread_attr_t *sigev_notify_attributes;
1025} sigevent_t;
1027{
1028 __uint32_t _si_code;
1029 void *_si_read_handle;
1030 void *_si_write_handle;
1031 void *_si_process_handle;
1032 __extension__ union
1033 {
1034 struct {
1035 int _si_fd;
1036 uint32_t _si_flags;
1037 };
1038 int64_t _si_pipe_unique_id;
1039 char *_si_str;
1040 };
1041};
1042typedef struct
1043{
1044 int si_signo;
1045 int si_code;
1046 pid_t si_pid;
1047 uid_t si_uid;
1048 int si_errno;
1049 __extension__ union
1050 {
1051 __uint32_t __pad[32];
1052 struct _sigcommune _si_commune;
1053 __extension__ struct
1054 {
1055 __extension__ union
1056 {
1057 sigval_t si_sigval;
1058 sigval_t si_value;
1059 };
1060 __extension__ struct
1061 {
1062 timer_t si_tid;
1063 unsigned int si_overrun;
1064 };
1065 };
1066 __extension__ struct
1067 {
1068 int si_status;
1069 clock_t si_utime;
1070 clock_t si_stime;
1071 };
1072 void *si_addr;
1073 };
1074} siginfo_t;
1075enum
1076{
1077 SI_USER = 0,
1078 SI_ASYNCIO = 2,
1079 SI_MESGQ,
1080 SI_TIMER,
1081 SI_QUEUE,
1082 SI_KERNEL,
1083 ILL_ILLOPC = 7,
1084 ILL_ILLOPN,
1085 ILL_ILLADR,
1086 ILL_ILLTRP,
1087 ILL_PRVOPC,
1088 ILL_PRVREG,
1089 ILL_COPROC,
1090 ILL_BADSTK,
1091 FPE_INTDIV = 15,
1092 FPE_INTOVF,
1093 FPE_FLTDIV,
1094 FPE_FLTOVF,
1095 FPE_FLTUND,
1096 FPE_FLTRES,
1097 FPE_FLTINV,
1098 FPE_FLTSUB,
1099 SEGV_MAPERR = 23,
1100 SEGV_ACCERR,
1101 BUS_ADRALN = 25,
1102 BUS_ADRERR,
1103 BUS_OBJERR,
1104 CLD_EXITED = 28,
1105 CLD_KILLED,
1106 CLD_DUMPED,
1107 CLD_TRAPPED,
1108 CLD_STOPPED,
1109 CLD_CONTINUED
1110};
1111enum
1112{
1113 SIGEV_SIGNAL = 0,
1114 SIGEV_NONE,
1115 SIGEV_THREAD
1116};
1117typedef void (*_sig_func_ptr)(int);
1119{
1120 __extension__ union
1121 {
1122 _sig_func_ptr sa_handler;
1123 void (*sa_sigaction) ( int, siginfo_t *, void * );
1124 };
1125 sigset_t sa_mask;
1126 int sa_flags;
1127};
1128void psiginfo (const siginfo_t *, const char *);
1129int sigwait (const sigset_t *, int *);
1130int sigwaitinfo (const sigset_t *, siginfo_t *);
1131int sighold (int);
1132int sigignore (int);
1133int sigrelse (int);
1134_sig_func_ptr sigset (int, _sig_func_ptr);
1135int sigqueue(pid_t, int, const union sigval);
1136int siginterrupt (int, int);
1137extern const char __attribute__((dllimport)) *sys_sigabbrev[];
1138extern const char __attribute__((dllimport)) *sys_siglist[];
1139typedef struct sigaltstack {
1140 void *ss_sp;
1141 int ss_flags;
1142 size_t ss_size;
1143} stack_t;
1144int sigprocmask (int, const sigset_t *, sigset_t *);
1145int pthread_sigmask (int, const sigset_t *, sigset_t *);
1146int kill (pid_t, int);
1147int killpg (pid_t, int);
1148int sigaction (int, const struct sigaction *, struct sigaction *);
1149int sigaddset (sigset_t *, const int);
1150int sigdelset (sigset_t *, const int);
1151int sigismember (const sigset_t *, int);
1152int sigfillset (sigset_t *);
1153int sigemptyset (sigset_t *);
1154int sigpending (sigset_t *);
1155int sigsuspend (const sigset_t *);
1156int sigwait (const sigset_t *, int *);
1157int sigpause (int) __asm__ ("" "__xpg_sigpause");
1158int sigaltstack (const stack_t *__restrict__, stack_t *__restrict__);
1159int pthread_kill (pthread_t, int);
1160int sigwaitinfo (const sigset_t *, siginfo_t *);
1161int sigtimedwait (const sigset_t *, siginfo_t *, const struct timespec *);
1162int sigqueue (pid_t, int, const union sigval);
1163int sig2str(int, char *);
1164int str2sig(const char *__restrict__, int *__restrict__);
1165typedef struct __mcontext mcontext_t;
1166typedef __attribute__ ((__aligned__ (16))) struct __ucontext {
1167 mcontext_t uc_mcontext;
1168 struct __ucontext *uc_link;
1169 sigset_t uc_sigmask;
1170 stack_t uc_stack;
1171 unsigned long int uc_flags;
1172} ucontext_t;
1173
1174typedef int sig_atomic_t;
1175typedef _sig_func_ptr sig_t;
1176typedef _sig_func_ptr sighandler_t;
1177struct _reent;
1178_sig_func_ptr _signal_r (struct _reent *, int, _sig_func_ptr);
1179int _raise_r (struct _reent *, int);
1180_sig_func_ptr signal (int, _sig_func_ptr);
1181int raise (int);
1182void psignal (int, const char *);
1183
1184int clock_settime (clockid_t clock_id, const struct timespec *tp);
1185int clock_gettime (clockid_t clock_id, struct timespec *tp);
1186int clock_getres (clockid_t clock_id, struct timespec *res);
1187int timer_create (clockid_t clock_id,
1188 struct sigevent *__restrict__ evp,
1189 timer_t *__restrict__ timerid);
1190int timer_delete (timer_t timerid);
1191int timer_settime (timer_t timerid, int flags,
1192 const struct itimerspec *__restrict__ value,
1193 struct itimerspec *__restrict__ ovalue);
1194int timer_gettime (timer_t timerid, struct itimerspec *value);
1195int timer_getoverrun (timer_t timerid);
1196int nanosleep (const struct timespec *rqtp, struct timespec *rmtp);
1197int clock_nanosleep (clockid_t clock_id, int flags,
1198 const struct timespec *rqtp, struct timespec *rmtp);
1199int clock_getcpuclockid (pid_t pid, clockid_t *clock_id);
1200int clock_setenable_attr (clockid_t clock_id, int attr);
1201int clock_getenable_attr (clockid_t clock_id, int *attr);
1202struct stat
1203{
1204 dev_t st_dev;
1205 ino_t st_ino;
1206 mode_t st_mode;
1207 nlink_t st_nlink;
1208 uid_t st_uid;
1209 gid_t st_gid;
1210 dev_t st_rdev;
1211 off_t st_size;
1212 timestruc_t st_atim;
1213 timestruc_t st_mtim;
1214 timestruc_t st_ctim;
1215 blksize_t st_blksize;
1216 blkcnt_t st_blocks;
1217 timestruc_t st_birthtim;
1218};
1219int chmod (const char *__path, mode_t __mode );
1220int fchmod (int __fd, mode_t __mode);
1221int fstat (int __fd, struct stat *__sbuf );
1222int mkdir (const char *_path, mode_t __mode );
1223int mkfifo (const char *__path, mode_t __mode );
1224int stat (const char *__restrict__ __path, struct stat *__restrict__ __sbuf );
1225mode_t umask (mode_t __mask );
1226int lstat (const char *__restrict__ __path, struct stat *__restrict__ __buf );
1227int mknod (const char *__path, mode_t __mode, dev_t __dev );
1228int fchmodat (int, const char *, mode_t, int);
1229int fstatat (int, const char *__restrict__ , struct stat *__restrict__, int);
1230int mkdirat (int, const char *, mode_t);
1231int mkfifoat (int, const char *, mode_t);
1232int mknodat (int, const char *, mode_t, dev_t);
1233int utimensat (int, const char *, const struct timespec [2], int);
1234int futimens (int, const struct timespec [2]);
1235char *mkdtemp (char *);
1236const char *getprogname (void);
1237void setprogname (const char *);
1238char *canonicalize_file_name (const char *);
1239int unsetenv (const char *);
1240int clearenv (void);
1241char *ptsname (int);
1242int grantpt (int);
1243int unlockpt (int);
1244int ptsname_r(int, char *, size_t);
1245int getpt (void);
1246int posix_openpt (int);
1247extern void *memalign (size_t, size_t);
1248extern void *valloc (size_t);
1249int getloadavg(double loadavg[], int nelem);
1250
1251typedef struct
1252{
1253 int quot;
1254 int rem;
1255} div_t;
1256typedef struct
1257{
1258 long quot;
1259 long rem;
1260} ldiv_t;
1261typedef struct
1262{
1263 long long int quot;
1264 long long int rem;
1265} lldiv_t;
1266typedef int (*__compar_fn_t) (const void *, const void *);
1267int __locale_mb_cur_max (void);
1268void abort (void) __attribute__ ((__noreturn__));
1269int abs (int);
1270__uint32_t arc4random (void);
1271__uint32_t arc4random_uniform (__uint32_t);
1272void arc4random_buf (void *, size_t);
1273int atexit (void (*__func)(void));
1274double atof (const char *__nptr);
1275float atoff (const char *__nptr);
1276int atoi (const char *__nptr);
1277int _atoi_r (struct _reent *, const char *__nptr);
1278long atol (const char *__nptr);
1279long _atol_r (struct _reent *, const char *__nptr);
1280void * bsearch (const void *__key,
1281 const void *__base,
1282 size_t __nmemb,
1283 size_t __size,
1284 __compar_fn_t _compar);
1285void *calloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__))
1286 __attribute__((__alloc_size__(1, 2))) ;
1287div_t div (int __numer, int __denom);
1288void exit (int __status) __attribute__ ((__noreturn__));
1289void free (void *) ;
1290char * getenv (const char *__string);
1291char * _getenv_r (struct _reent *, const char *__string);
1292char * secure_getenv (const char *__string);
1293char * _findenv (const char *, int *);
1294char * _findenv_r (struct _reent *, const char *, int *);
1295extern char *suboptarg;
1296int getsubopt (char **, char * const *, char **);
1297long labs (long);
1298ldiv_t ldiv (long __numer, long __denom);
1299void *malloc(size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(1))) ;
1300int mblen (const char *, size_t);
1301int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
1302int mbtowc (wchar_t *__restrict__, const char *__restrict__, size_t);
1303int _mbtowc_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
1304int wctomb (char *, wchar_t);
1305int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
1306size_t mbstowcs (wchar_t *__restrict__, const char *__restrict__, size_t);
1307size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict__, const char *__restrict__, size_t, _mbstate_t *);
1308size_t wcstombs (char *__restrict__, const wchar_t *__restrict__, size_t);
1309size_t _wcstombs_r (struct _reent *, char *__restrict__, const wchar_t *__restrict__, size_t, _mbstate_t *);
1310char * mkdtemp (char *);
1311int mkostemp (char *, int);
1312int mkostemps (char *, int, int);
1313int mkstemp (char *);
1314int mkstemps (char *, int);
1315char * mktemp (char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
1316char * _mkdtemp_r (struct _reent *, char *);
1317int _mkostemp_r (struct _reent *, char *, int);
1318int _mkostemps_r (struct _reent *, char *, int, int);
1319int _mkstemp_r (struct _reent *, char *);
1320int _mkstemps_r (struct _reent *, char *, int);
1321char * _mktemp_r (struct _reent *, char *) __attribute__ ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
1322void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar);
1323int rand (void);
1324void *realloc(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2))) ;
1325void *reallocarray(void *, size_t, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2, 3)));
1326void *reallocf(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2)));
1327char * realpath (const char *__restrict__ path, char *__restrict__ resolved_path);
1328int rpmatch (const char *response);
1329void setkey (const char *__key);
1330void srand (unsigned __seed);
1331double strtod (const char *__restrict__ __n, char **__restrict__ __end_PTR);
1332double _strtod_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR);
1333float strtof (const char *__restrict__ __n, char **__restrict__ __end_PTR);
1334long strtol (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1335long _strtol_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1336unsigned long strtoul (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1337unsigned long _strtoul_r (struct _reent *,const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1338double strtod_l (const char *__restrict__, char **__restrict__, locale_t);
1339float strtof_l (const char *__restrict__, char **__restrict__, locale_t);
1340extern long double strtold_l (const char *__restrict__, char **__restrict__,
1341 locale_t);
1342long strtol_l (const char *__restrict__, char **__restrict__, int, locale_t);
1343unsigned long strtoul_l (const char *__restrict__, char **__restrict__, int,
1344 locale_t __loc);
1345long long strtoll_l (const char *__restrict__, char **__restrict__, int, locale_t);
1346unsigned long long strtoull_l (const char *__restrict__, char **__restrict__, int,
1347 locale_t __loc);
1348int system (const char *__string);
1349long a64l (const char *__input);
1350char * l64a (long __input);
1351char * _l64a_r (struct _reent *,long __input);
1352int on_exit (void (*__func)(int, void *),void *__arg);
1353void _Exit (int __status) __attribute__ ((__noreturn__));
1354int putenv (char *__string);
1355int _putenv_r (struct _reent *, char *__string);
1356void * _reallocf_r (struct _reent *, void *, size_t);
1357int setenv (const char *__string, const char *__value, int __overwrite);
1358int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);
1359char * __itoa (int, char *, int);
1360char * __utoa (unsigned, char *, int);
1361char * itoa (int, char *, int);
1362char * utoa (unsigned, char *, int);
1363int rand_r (unsigned *__seed);
1364double drand48 (void);
1365double _drand48_r (struct _reent *);
1366double erand48 (unsigned short [3]);
1367double _erand48_r (struct _reent *, unsigned short [3]);
1368long jrand48 (unsigned short [3]);
1369long _jrand48_r (struct _reent *, unsigned short [3]);
1370void lcong48 (unsigned short [7]);
1371void _lcong48_r (struct _reent *, unsigned short [7]);
1372long lrand48 (void);
1373long _lrand48_r (struct _reent *);
1374long mrand48 (void);
1375long _mrand48_r (struct _reent *);
1376long nrand48 (unsigned short [3]);
1377long _nrand48_r (struct _reent *, unsigned short [3]);
1378unsigned short *
1379 seed48 (unsigned short [3]);
1380unsigned short *
1381 _seed48_r (struct _reent *, unsigned short [3]);
1382void srand48 (long);
1383void _srand48_r (struct _reent *, long);
1384char * initstate (unsigned, char *, size_t);
1385long random (void);
1386char * setstate (char *);
1387void srandom (unsigned);
1388long long atoll (const char *__nptr);
1389long long _atoll_r (struct _reent *, const char *__nptr);
1390long long llabs (long long);
1391lldiv_t lldiv (long long __numer, long long __denom);
1392long long strtoll (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1393long long _strtoll_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1394unsigned long long strtoull (const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1395unsigned long long _strtoull_r (struct _reent *, const char *__restrict__ __n, char **__restrict__ __end_PTR, int __base);
1396int posix_memalign (void **, size_t, size_t) __attribute__((__nonnull__ (1)))
1397 __attribute__((__warn_unused_result__));
1398char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);
1399int _system_r (struct _reent *, const char *);
1400void __eprintf (const char *, const char *, unsigned int, const char *);
1401void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk);
1402extern long double _strtold_r (struct _reent *, const char *__restrict__, char **__restrict__);
1403extern long double strtold (const char *__restrict__, char **__restrict__);
1404void * aligned_alloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__alloc_align__(1)))
1405 __attribute__((__alloc_size__(2))) __attribute__((__warn_unused_result__));
1406int at_quick_exit(void (*)(void));
1407_Noreturn void
1408 quick_exit(int);
1409
1410
1411size_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)
1412{
1413 if (__buf != ((void *)0))
1414 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(wchar_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1415 return __ssp_real_mbstowcs (__buf, __src, __n);
1416}
1417size_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); };
1418int __ssp_real_wctomb (char *__buf, wchar_t __wc) __asm__("" "wctomb"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int wctomb (char *__buf, wchar_t __wc)
1419{
1420 if (__buf != ((void *)0))
1421 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __locale_mb_cur_max() > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1422 return __ssp_real_wctomb (__buf, __wc);
1423}
1424
1425
1426int bcmp(const void *, const void *, size_t) __attribute__((__pure__));
1427void bcopy(const void *, void *, size_t);
1428void bzero(void *, size_t);
1429void explicit_bzero(void *, size_t);
1430int ffs(int) __attribute__((__const__));
1431int ffsl(long) __attribute__((__const__));
1432int ffsll(long long) __attribute__((__const__));
1433int fls(int) __attribute__((__const__));
1434int flsl(long) __attribute__((__const__));
1435int flsll(long long) __attribute__((__const__));
1436char *index(const char *, int) __attribute__((__pure__));
1437char *rindex(const char *, int) __attribute__((__pure__));
1438int strcasecmp(const char *, const char *) __attribute__((__pure__));
1439int strncasecmp(const char *, const char *, size_t) __attribute__((__pure__));
1440int strcasecmp_l (const char *, const char *, locale_t);
1441int strncasecmp_l (const char *, const char *, size_t, locale_t);
1442
1443void __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); };
1444
1445void * memchr (const void *, int, size_t);
1446int memcmp (const void *, const void *, size_t);
1447void * memcpy (void *__restrict__, const void *__restrict__, size_t);
1448void * memmove (void *, const void *, size_t);
1449void * memset (void *, int, size_t);
1450char *strcat (char *__restrict__, const char *__restrict__);
1451char *strchr (const char *, int);
1452int strcmp (const char *, const char *);
1453int strcoll (const char *, const char *);
1454char *strcpy (char *__restrict__, const char *__restrict__);
1455size_t strcspn (const char *, const char *);
1456char *strerror (int);
1457size_t strlen (const char *);
1458char *strncat (char *__restrict__, const char *__restrict__, size_t);
1459int strncmp (const char *, const char *, size_t);
1460char *strncpy (char *__restrict__, const char *__restrict__, size_t);
1461char *strpbrk (const char *, const char *);
1462char *strrchr (const char *, int);
1463size_t strspn (const char *, const char *);
1464char *strstr (const char *, const char *);
1465char *strtok (char *__restrict__, const char *__restrict__);
1466size_t strxfrm (char *__restrict__, const char *__restrict__, size_t);
1467int strcoll_l (const char *, const char *, locale_t);
1468char *strerror_l (int, locale_t);
1469size_t strxfrm_l (char *__restrict__, const char *__restrict__, size_t, locale_t);
1470char *strtok_r (char *__restrict__, const char *__restrict__, char **__restrict__);
1471int timingsafe_bcmp (const void *, const void *, size_t);
1472int timingsafe_memcmp (const void *, const void *, size_t);
1473void * memccpy (void *__restrict__, const void *__restrict__, int, size_t);
1474void * mempcpy (void *, const void *, size_t);
1475void * memmem (const void *, size_t, const void *, size_t);
1476void * memrchr (const void *, int, size_t);
1477void * rawmemchr (const void *, int);
1478char *stpcpy (char *__restrict__, const char *__restrict__);
1479char *stpncpy (char *__restrict__, const char *__restrict__, size_t);
1480char *strcasestr (const char *, const char *);
1481char *strchrnul (const char *, int);
1482char *strdup (const char *) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
1483char *_strdup_r (struct _reent *, const char *);
1484char *strndup (const char *, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__));
1485char *_strndup_r (struct _reent *, const char *, size_t);
1486char *strerror_r (int, char *, size_t);
1487char * _strerror_r (struct _reent *, int, int, int *);
1488size_t strlcat (char *, const char *, size_t);
1489size_t strlcpy (char *, const char *, size_t);
1490size_t strnlen (const char *, size_t);
1491char *strsep (char **, const char *);
1492char *strnstr(const char *, const char *, size_t) __attribute__((__pure__));
1493char *strlwr (char *);
1494char *strupr (char *);
1495char *strsignal (int __signo);
1496int strtosigno (const char *__name);
1497int strverscmp (const char *, const char *);
1498char *__attribute__((__nonnull__ (1))) basename (const char *) __asm__("" "__gnu_basename");
1499
1500
1501void *__memcpy_chk(void *, const void *, size_t, size_t);
1502void *__memmove_chk(void *, void *, size_t, size_t);
1503void *__mempcpy_chk(void *, const void *, size_t, size_t);
1504void *__memset_chk(void *, int, size_t, size_t);
1505char *__stpcpy_chk(char *, const char *, size_t);
1506char *__strcat_chk(char *, const char *, size_t);
1507char *__strcpy_chk(char *, const char *, size_t);
1508char *__strncat_chk(char *, const char *, size_t, size_t);
1509char *__strncpy_chk(char *, const char *, size_t, size_t);
1510
1511
1512extern __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)); }
1513extern __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)); }
1514extern __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)); }
1515extern __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)); }
1516extern __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)); }
1517extern __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)); }
1518extern __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)); }
1519extern __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)); }
1520extern __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)); }
1521extern __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)); }
1522
1523typedef struct {
1524 intmax_t quot;
1525 intmax_t rem;
1526} imaxdiv_t;
1527struct _reent;
1528extern intmax_t imaxabs(intmax_t);
1529extern imaxdiv_t imaxdiv(intmax_t __numer, intmax_t __denomer);
1530extern intmax_t strtoimax(const char *__restrict__, char **__restrict__, int);
1531extern intmax_t _strtoimax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1532extern uintmax_t strtoumax(const char *__restrict__, char **__restrict__, int);
1533extern uintmax_t _strtoumax_r(struct _reent *, const char *__restrict__, char **__restrict__, int);
1534extern intmax_t wcstoimax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1535extern intmax_t _wcstoimax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1536extern uintmax_t wcstoumax(const wchar_t *__restrict__, wchar_t **__restrict__, int);
1537extern uintmax_t _wcstoumax_r(struct _reent *, const wchar_t *__restrict__, wchar_t **__restrict__, int);
1538extern intmax_t strtoimax_l(const char *__restrict__, char **_restrict, int, locale_t);
1539extern uintmax_t strtoumax_l(const char *__restrict__, char **_restrict, int, locale_t);
1540extern intmax_t wcstoimax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1541extern uintmax_t wcstoumax_l(const wchar_t *__restrict__, wchar_t **_restrict, int, locale_t);
1542extern char **environ;
1543void _exit (int __status) __attribute__ ((__noreturn__));
1544int access (const char *__path, int __amode);
1545unsigned alarm (unsigned __secs);
1546int chdir (const char *__path);
1547int chmod (const char *__path, mode_t __mode);
1548int chown (const char *__path, uid_t __owner, gid_t __group);
1549int chroot (const char *__path);
1550int close (int __fildes);
1551size_t confstr (int __name, char *__buf, size_t __len);
1552char * crypt (const char *__key, const char *__salt);
1553int daemon (int nochdir, int noclose);
1554int dup (int __fildes);
1555int dup2 (int __fildes, int __fildes2);
1556int dup3 (int __fildes, int __fildes2, int flags);
1557int eaccess (const char *__path, int __mode);
1558void encrypt (char *__block, int __edflag);
1559void endusershell (void);
1560int euidaccess (const char *__path, int __mode);
1561int execl (const char *__path, const char *, ...);
1562int execle (const char *__path, const char *, ...);
1563int execlp (const char *__file, const char *, ...);
1564int execlpe (const char *__file, const char *, ...);
1565int execv (const char *__path, char * const __argv[]);
1566int execve (const char *__path, char * const __argv[], char * const __envp[]);
1567int execvp (const char *__file, char * const __argv[]);
1568int execvpe (const char *__file, char * const __argv[], char * const __envp[]);
1569int faccessat (int __dirfd, const char *__path, int __mode, int __flags);
1570int fchdir (int __fildes);
1571int fchmod (int __fildes, mode_t __mode);
1572int fchown (int __fildes, uid_t __owner, gid_t __group);
1573int fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags);
1574int fexecve (int __fd, char * const __argv[], char * const __envp[]);
1575pid_t fork (void);
1576long fpathconf (int __fd, int __name);
1577int fsync (int __fd);
1578int fdatasync (int __fd);
1579char * get_current_dir_name (void);
1580char * getcwd (char *__buf, size_t __size);
1581int getdomainname (char *__name, size_t __len);
1582int getentropy (void *, size_t);
1583gid_t getegid (void);
1584uid_t geteuid (void);
1585gid_t getgid (void);
1586int getgroups (int __gidsetsize, gid_t __grouplist[]);
1587long gethostid (void);
1588char * getlogin (void);
1589int getlogin_r (char *name, size_t namesize) ;
1590char * getpass (const char *__prompt);
1591int getpagesize (void);
1592int getpeereid (int, uid_t *, gid_t *);
1593pid_t getpgid (pid_t);
1594pid_t getpgrp (void);
1595pid_t getpid (void);
1596pid_t getppid (void);
1597pid_t getsid (pid_t);
1598uid_t getuid (void);
1599char * getusershell (void);
1600char * getwd (char *__buf);
1601int iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser);
1602int isatty (int __fildes);
1603int issetugid (void);
1604int lchown (const char *__path, uid_t __owner, gid_t __group);
1605int link (const char *__path1, const char *__path2);
1606int linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags);
1607int nice (int __nice_value);
1608off_t lseek (int __fildes, off_t __offset, int __whence);
1609int lockf (int __fd, int __cmd, off_t __len);
1610long pathconf (const char *__path, int __name);
1611int pause (void);
1612int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
1613int pipe (int __fildes[2]);
1614int pipe2 (int __fildes[2], int flags);
1615ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
1616ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset);
1617_ssize_t read (int __fd, void *__buf, size_t __nbyte);
1618int rresvport (int *__alport);
1619int revoke (char *__path);
1620int rmdir (const char *__path);
1621int ruserok (const char *rhost, int superuser, const char *ruser, const char *luser);
1622void * sbrk (ptrdiff_t __incr);
1623int setegid (gid_t __gid);
1624int seteuid (uid_t __uid);
1625int setgid (gid_t __gid);
1626int setgroups (int ngroups, const gid_t *grouplist);
1627int sethostname (const char *, size_t);
1628int setpgid (pid_t __pid, pid_t __pgid);
1629int setpgrp (void);
1630int setregid (gid_t __rgid, gid_t __egid);
1631int setreuid (uid_t __ruid, uid_t __euid);
1632pid_t setsid (void);
1633int setuid (uid_t __uid);
1634void setusershell (void);
1635unsigned sleep (unsigned int __seconds);
1636void swab (const void *__restrict__, void *__restrict__, ssize_t);
1637long sysconf (int __name);
1638pid_t tcgetpgrp (int __fildes);
1639int tcsetpgrp (int __fildes, pid_t __pgrp_id);
1640char * ttyname (int __fildes);
1641int ttyname_r (int, char *, size_t);
1642int unlink (const char *__path);
1643int usleep (useconds_t __useconds);
1644int vhangup (void);
1645_ssize_t write (int __fd, const void *__buf, size_t __nbyte);
1646extern int __attribute__((dllimport)) opterr;
1647extern int __attribute__((dllimport)) optind;
1648extern int __attribute__((dllimport)) optopt;
1649extern int __attribute__((dllimport)) optreset;
1650extern char __attribute__((dllimport)) *optarg;
1651int getopt (int, char * const *, const char *);
1652pid_t vfork (void);
1653int ftruncate (int __fd, off_t __length);
1654int truncate (const char *, off_t __length);
1655int getdtablesize (void);
1656useconds_t ualarm (useconds_t __useconds, useconds_t __interval);
1657 int gethostname (char *__name, size_t __len);
1658int setdtablesize (int);
1659void sync (void);
1660ssize_t readlink (const char *__restrict__ __path,
1661 char *__restrict__ __buf, size_t __buflen);
1662int symlink (const char *__name1, const char *__name2);
1663ssize_t readlinkat (int __dirfd1, const char *__restrict__ __path,
1664 char *__restrict__ __buf, size_t __buflen);
1665int symlinkat (const char *, int, const char *);
1666int unlinkat (int, const char *, int);
1667
1668size_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); };
1669char * __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); };
1670int __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); };
1671int __ssp_real_getgroups (int __n, gid_t __buf[]) __asm__("" "getgroups"); extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) int getgroups (int __n, gid_t __buf[])
1672{
1673 if (__builtin_object_size(__buf, 2 > 1) != (size_t)-1 && __n * sizeof(gid_t) > __builtin_object_size(__buf, 2 > 1)) __chk_fail();
1674 return __ssp_real_getgroups (__n, __buf);
1675}
1676int __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); };
1677int __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); };
1678ssize_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); };
1679_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); };
1680ssize_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); };
1681ssize_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); };
1682int __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); };
1683
1684
1685
1686[[nodiscard]]
1687__attribute__((__malloc__))
1688__attribute__((__returns_nonnull__))
1689__attribute__((__alloc_size__ (1)))
1690void *ruby_xmalloc(size_t size)
1691
1692;
1693[[nodiscard]]
1694__attribute__((__malloc__))
1695__attribute__((__returns_nonnull__))
1696__attribute__((__alloc_size__ (1,2)))
1697void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
1698
1699;
1700[[nodiscard]]
1701__attribute__((__malloc__))
1702__attribute__((__returns_nonnull__))
1703__attribute__((__alloc_size__ (1,2)))
1704void *ruby_xcalloc(size_t nelems, size_t elemsiz)
1705
1706;
1707[[nodiscard]]
1708__attribute__((__returns_nonnull__))
1709__attribute__((__alloc_size__ (2)))
1710void *ruby_xrealloc(void *ptr, size_t newsiz)
1711
1712;
1713[[nodiscard]]
1714__attribute__((__returns_nonnull__))
1715__attribute__((__alloc_size__ (2,3)))
1716void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
1717
1718;
1719void ruby_xfree(void *ptr)
1720
1721;
1722
1723
1724#define RBIMPL_ATTR_COLD_H
1725#define RBIMPL_ATTR_COLD() __attribute__((__cold__))
1726
1727
1728__attribute__((__noreturn__))
1729__attribute__((__cold__))
1730void rb_assert_failure(const char *file, int line, const char *name, const char *expr);
1731
1732
1733#define COLDFUNC RBIMPL_ATTR_COLD()
1734
1735extern double atan (double);
1736extern double cos (double);
1737extern double sin (double);
1738extern double tan (double);
1739extern double tanh (double);
1740extern double frexp (double, int *);
1741extern double modf (double, double *);
1742extern double ceil (double);
1743extern double fabs (double);
1744extern double floor (double);
1745extern double acos (double);
1746extern double asin (double);
1747extern double atan2 (double, double);
1748extern double cosh (double);
1749extern double sinh (double);
1750extern double exp (double);
1751extern double ldexp (double, int);
1752extern double log (double);
1753extern double log10 (double);
1754extern double pow (double, double);
1755extern double sqrt (double);
1756extern double fmod (double, double);
1757extern int finite (double);
1758extern int finitef (float);
1759extern int finitel (long double);
1760extern int isinff (float);
1761extern int isnanf (float);
1762extern int isinfl (long double);
1763extern int isnanl (long double);
1764extern int isinf (double);
1765extern int isnan (double);
1766 typedef float float_t;
1767 typedef double double_t;
1768extern int __isinff (float);
1769extern int __isinfd (double);
1770extern int __isnanf (float);
1771extern int __isnand (double);
1772extern int __fpclassifyf (float);
1773extern int __fpclassifyd (double);
1774extern int __signbitf (float);
1775extern int __signbitd (double);
1776extern double infinity (void);
1777extern double nan (const char *);
1778extern double copysign (double, double);
1779extern double logb (double);
1780extern int ilogb (double);
1781extern double asinh (double);
1782extern double cbrt (double);
1783extern double nextafter (double, double);
1784extern double rint (double);
1785extern double scalbn (double, int);
1786extern double exp2 (double);
1787extern double scalbln (double, long int);
1788extern double tgamma (double);
1789extern double nearbyint (double);
1790extern long int lrint (double);
1791extern long long int llrint (double);
1792extern double round (double);
1793extern long int lround (double);
1794extern long long int llround (double);
1795extern double trunc (double);
1796extern double remquo (double, double, int *);
1797extern double fdim (double, double);
1798extern double fmax (double, double);
1799extern double fmin (double, double);
1800extern double fma (double, double, double);
1801extern double log1p (double);
1802extern double expm1 (double);
1803extern double acosh (double);
1804extern double atanh (double);
1805extern double remainder (double, double);
1806extern double gamma (double);
1807extern double lgamma (double);
1808extern double erf (double);
1809extern double erfc (double);
1810extern double log2 (double);
1811extern double hypot (double, double);
1812extern float atanf (float);
1813extern float cosf (float);
1814extern float sinf (float);
1815extern float tanf (float);
1816extern float tanhf (float);
1817extern float frexpf (float, int *);
1818extern float modff (float, float *);
1819extern float ceilf (float);
1820extern float fabsf (float);
1821extern float floorf (float);
1822extern float acosf (float);
1823extern float asinf (float);
1824extern float atan2f (float, float);
1825extern float coshf (float);
1826extern float sinhf (float);
1827extern float expf (float);
1828extern float ldexpf (float, int);
1829extern float logf (float);
1830extern float log10f (float);
1831extern float powf (float, float);
1832extern float sqrtf (float);
1833extern float fmodf (float, float);
1834extern float exp2f (float);
1835extern float scalblnf (float, long int);
1836extern float tgammaf (float);
1837extern float nearbyintf (float);
1838extern long int lrintf (float);
1839extern long long int llrintf (float);
1840extern float roundf (float);
1841extern long int lroundf (float);
1842extern long long int llroundf (float);
1843extern float truncf (float);
1844extern float remquof (float, float, int *);
1845extern float fdimf (float, float);
1846extern float fmaxf (float, float);
1847extern float fminf (float, float);
1848extern float fmaf (float, float, float);
1849extern float infinityf (void);
1850extern float nanf (const char *);
1851extern float copysignf (float, float);
1852extern float logbf (float);
1853extern int ilogbf (float);
1854extern float asinhf (float);
1855extern float cbrtf (float);
1856extern float nextafterf (float, float);
1857extern float rintf (float);
1858extern float scalbnf (float, int);
1859extern float log1pf (float);
1860extern float expm1f (float);
1861extern float acoshf (float);
1862extern float atanhf (float);
1863extern float remainderf (float, float);
1864extern float gammaf (float);
1865extern float lgammaf (float);
1866extern float erff (float);
1867extern float erfcf (float);
1868extern float log2f (float);
1869extern float hypotf (float, float);
1870extern long double atanl (long double);
1871extern long double cosl (long double);
1872extern long double sinl (long double);
1873extern long double tanl (long double);
1874extern long double tanhl (long double);
1875extern long double frexpl (long double, int *);
1876extern long double modfl (long double, long double *);
1877extern long double ceill (long double);
1878extern long double fabsl (long double);
1879extern long double floorl (long double);
1880extern long double log1pl (long double);
1881extern long double expm1l (long double);
1882extern long double acosl (long double);
1883extern long double asinl (long double);
1884extern long double atan2l (long double, long double);
1885extern long double coshl (long double);
1886extern long double sinhl (long double);
1887extern long double expl (long double);
1888extern long double ldexpl (long double, int);
1889extern long double logl (long double);
1890extern long double log10l (long double);
1891extern long double powl (long double, long double);
1892extern long double sqrtl (long double);
1893extern long double fmodl (long double, long double);
1894extern long double hypotl (long double, long double);
1895extern long double copysignl (long double, long double);
1896extern long double nanl (const char *);
1897extern int ilogbl (long double);
1898extern long double asinhl (long double);
1899extern long double cbrtl (long double);
1900extern long double nextafterl (long double, long double);
1901extern float nexttowardf (float, long double);
1902extern double nexttoward (double, long double);
1903extern long double nexttowardl (long double, long double);
1904extern long double logbl (long double);
1905extern long double log2l (long double);
1906extern long double rintl (long double);
1907extern long double scalbnl (long double, int);
1908extern long double exp2l (long double);
1909extern long double scalblnl (long double, long);
1910extern long double tgammal (long double);
1911extern long double nearbyintl (long double);
1912extern long int lrintl (long double);
1913extern long long int llrintl (long double);
1914extern long double roundl (long double);
1915extern long lroundl (long double);
1916extern long long int llroundl (long double);
1917extern long double truncl (long double);
1918extern long double remquol (long double, long double, int *);
1919extern long double fdiml (long double, long double);
1920extern long double fmaxl (long double, long double);
1921extern long double fminl (long double, long double);
1922extern long double fmal (long double, long double, long double);
1923extern long double acoshl (long double);
1924extern long double atanhl (long double);
1925extern long double remainderl (long double, long double);
1926extern long double lgammal (long double);
1927extern long double erfl (long double);
1928extern long double erfcl (long double);
1929extern double drem (double, double);
1930extern float dremf (float, float);
1931extern float dreml (long double, long double);
1932extern double gamma_r (double, int *);
1933extern double lgamma_r (double, int *);
1934extern float gammaf_r (float, int *);
1935extern float lgammaf_r (float, int *);
1936extern double y0 (double);
1937extern double y1 (double);
1938extern double yn (int, double);
1939extern double j0 (double);
1940extern double j1 (double);
1941extern double jn (int, double);
1942extern float y0f (float);
1943extern float y1f (float);
1944extern float ynf (int, float);
1945extern float j0f (float);
1946extern float j1f (float);
1947extern float jnf (int, float);
1948extern void sincos (double, double *, double *);
1949extern void sincosf (float, float *, float *);
1950extern void sincosl (long double, long double *, long double *);
1951extern double exp10 (double);
1952extern double pow10 (double);
1953extern float exp10f (float);
1954extern float pow10f (float);
1955extern float exp10l (float);
1956extern float pow10l (float);
1957extern int *__signgam (void);
1958
1959struct timezone {
1960 int tz_minuteswest;
1961 int tz_dsttime;
1962};
1963struct bintime {
1964 time_t sec;
1965 uint64_t frac;
1966};
1967static __inline void
1968bintime_addx(struct bintime *_bt, uint64_t _x)
1969{
1970 uint64_t _u;
1971 _u = _bt->frac;
1972 _bt->frac += _x;
1973 if (_u > _bt->frac)
1974 _bt->sec++;
1975}
1976static __inline void
1977bintime_add(struct bintime *_bt, const struct bintime *_bt2)
1978{
1979 uint64_t _u;
1980 _u = _bt->frac;
1981 _bt->frac += _bt2->frac;
1982 if (_u > _bt->frac)
1983 _bt->sec++;
1984 _bt->sec += _bt2->sec;
1985}
1986static __inline void
1987bintime_sub(struct bintime *_bt, const struct bintime *_bt2)
1988{
1989 uint64_t _u;
1990 _u = _bt->frac;
1991 _bt->frac -= _bt2->frac;
1992 if (_u < _bt->frac)
1993 _bt->sec--;
1994 _bt->sec -= _bt2->sec;
1995}
1996static __inline void
1997bintime_mul(struct bintime *_bt, u_int _x)
1998{
1999 uint64_t _p1, _p2;
2000 _p1 = (_bt->frac & 0xffffffffull) * _x;
2001 _p2 = (_bt->frac >> 32) * _x + (_p1 >> 32);
2002 _bt->sec *= _x;
2003 _bt->sec += (_p2 >> 32);
2004 _bt->frac = (_p2 << 32) | (_p1 & 0xffffffffull);
2005}
2006static __inline void
2007bintime_shift(struct bintime *_bt, int _exp)
2008{
2009 if (_exp > 0) {
2010 _bt->sec <<= _exp;
2011 _bt->sec |= _bt->frac >> (64 - _exp);
2012 _bt->frac <<= _exp;
2013 } else if (_exp < 0) {
2014 _bt->frac >>= -_exp;
2015 _bt->frac |= (uint64_t)_bt->sec << (64 + _exp);
2016 _bt->sec >>= -_exp;
2017 }
2018}
2019static __inline int
2020sbintime_getsec(sbintime_t _sbt)
2021{
2022 return (_sbt >> 32);
2023}
2024static __inline sbintime_t
2025bttosbt(const struct bintime _bt)
2026{
2027 return (((sbintime_t)_bt.sec << 32) + (_bt.frac >> 32));
2028}
2029static __inline struct bintime
2030sbttobt(sbintime_t _sbt)
2031{
2032 struct bintime _bt;
2033 _bt.sec = _sbt >> 32;
2034 _bt.frac = _sbt << 32;
2035 return (_bt);
2036}
2037static __inline int64_t
2038sbttons(sbintime_t _sbt)
2039{
2040 uint64_t ns;
2041 ns = _sbt;
2042 if (ns >= ((sbintime_t)1 << 32))
2043 ns = (ns >> 32) * 1000000000;
2044 else
2045 ns = 0;
2046 return (ns + (1000000000 * (_sbt & 0xffffffffu) >> 32));
2047}
2048static __inline sbintime_t
2049nstosbt(int64_t _ns)
2050{
2051 sbintime_t sb = 0;
2052 if (_ns >= ((sbintime_t)1 << 32)) {
2053 sb = (_ns / 1000000000) * ((sbintime_t)1 << 32);
2054 _ns = _ns % 1000000000;
2055 }
2056 sb += ((_ns * 9223372037ull) + 0x7fffffff) >> 31;
2057 return (sb);
2058}
2059static __inline int64_t
2060sbttous(sbintime_t _sbt)
2061{
2062 return ((1000000 * _sbt) >> 32);
2063}
2064static __inline sbintime_t
2065ustosbt(int64_t _us)
2066{
2067 sbintime_t sb = 0;
2068 if (_us >= ((sbintime_t)1 << 32)) {
2069 sb = (_us / 1000000) * ((sbintime_t)1 << 32);
2070 _us = _us % 1000000;
2071 }
2072 sb += ((_us * 9223372036855ull) + 0x7fffffff) >> 31;
2073 return (sb);
2074}
2075static __inline int64_t
2076sbttoms(sbintime_t _sbt)
2077{
2078 return ((1000 * _sbt) >> 32);
2079}
2080static __inline sbintime_t
2081mstosbt(int64_t _ms)
2082{
2083 sbintime_t sb = 0;
2084 if (_ms >= ((sbintime_t)1 << 32)) {
2085 sb = (_ms / 1000) * ((sbintime_t)1 << 32);
2086 _ms = _ms % 1000;
2087 }
2088 sb += ((_ms * 9223372036854776ull) + 0x7fffffff) >> 31;
2089 return (sb);
2090}
2091static __inline void
2092bintime2timespec(const struct bintime *_bt, struct timespec *_ts)
2093{
2094 _ts->tv_sec = _bt->sec;
2095 _ts->tv_nsec = ((uint64_t)1000000000 *
2096 (uint32_t)(_bt->frac >> 32)) >> 32;
2097}
2098static __inline void
2099timespec2bintime(const struct timespec *_ts, struct bintime *_bt)
2100{
2101 _bt->sec = _ts->tv_sec;
2102 _bt->frac = _ts->tv_nsec * (uint64_t)18446744073LL;
2103}
2104static __inline void
2105bintime2timeval(const struct bintime *_bt, struct timeval *_tv)
2106{
2107 _tv->tv_sec = _bt->sec;
2108 _tv->tv_usec = ((uint64_t)1000000 * (uint32_t)(_bt->frac >> 32)) >> 32;
2109}
2110static __inline void
2111timeval2bintime(const struct timeval *_tv, struct bintime *_bt)
2112{
2113 _bt->sec = _tv->tv_sec;
2114 _bt->frac = _tv->tv_usec * (uint64_t)18446744073709LL;
2115}
2116static __inline struct timespec
2117sbttots(sbintime_t _sbt)
2118{
2119 struct timespec _ts;
2120 _ts.tv_sec = _sbt >> 32;
2121 _ts.tv_nsec = sbttons((uint32_t)_sbt);
2122 return (_ts);
2123}
2124static __inline sbintime_t
2125tstosbt(struct timespec _ts)
2126{
2127 return (((sbintime_t)_ts.tv_sec << 32) + nstosbt(_ts.tv_nsec));
2128}
2129static __inline struct timeval
2130sbttotv(sbintime_t _sbt)
2131{
2132 struct timeval _tv;
2133 _tv.tv_sec = _sbt >> 32;
2134 _tv.tv_usec = sbttous((uint32_t)_sbt);
2135 return (_tv);
2136}
2137static __inline sbintime_t
2138tvtosbt(struct timeval _tv)
2139{
2140 return (((sbintime_t)_tv.tv_sec << 32) + ustosbt(_tv.tv_usec));
2141}
2143 struct timeval it_interval;
2144 struct timeval it_value;
2145};
2146
2147int utimes (const char *, const struct timeval [2]);
2148int adjtime (const struct timeval *, struct timeval *);
2149int futimes (int, const struct timeval [2]);
2150int lutimes (const char *, const struct timeval [2]);
2151int settimeofday (const struct timeval *, const struct timezone *);
2152int getitimer (int __which, struct itimerval *__value);
2153int setitimer (int __which, const struct itimerval *__restrict__ __value,
2154 struct itimerval *__restrict__ __ovalue);
2155int gettimeofday (struct timeval *__restrict__ __p,
2156 void *__restrict__ __tz);
2157int futimesat (int, const char *, const struct timeval [2]);
2158
2159
2160typedef union
2161{
2162 double value;
2163 struct
2164 {
2165 unsigned int fraction1:32;
2166 unsigned int fraction0:20;
2167 unsigned int exponent :11;
2168 unsigned int sign : 1;
2169 } number;
2170 struct
2171 {
2172 unsigned int function1:32;
2173 unsigned int function0:19;
2174 unsigned int quiet:1;
2175 unsigned int exponent: 11;
2176 unsigned int sign : 1;
2177 } nan;
2178 struct
2179 {
2180 unsigned long lsw;
2181 unsigned long msw;
2182 } parts;
2183 long aslong[2];
2185typedef union
2186{
2187 float value;
2188 struct
2189 {
2190 unsigned int fraction0: 7;
2191 unsigned int fraction1: 16;
2192 unsigned int exponent: 8;
2193 unsigned int sign : 1;
2194 } number;
2195 struct
2196 {
2197 unsigned int function1:16;
2198 unsigned int function0:6;
2199 unsigned int quiet:1;
2200 unsigned int exponent:8;
2201 unsigned int sign:1;
2202 } nan;
2203 long p1;
2205typedef struct ieee_ext
2206{
2207 unsigned int ext_fracl : 32;
2208 unsigned int ext_frach : 32;
2209 unsigned int ext_exp : 15;
2210 unsigned int ext_sign : 1;
2211} ieee_ext;
2212typedef union ieee_ext_u
2213{
2214 long double extu_ld;
2215 struct ieee_ext extu_ext;
2216} ieee_ext_u;
2217typedef int fp_rnd;
2218fp_rnd fpgetround (void);
2219fp_rnd fpsetround (fp_rnd);
2220typedef int fp_except;
2221fp_except fpgetmask (void);
2222fp_except fpsetmask (fp_except);
2223fp_except fpgetsticky (void);
2224fp_except fpsetsticky (fp_except);
2225typedef int fp_rdi;
2226fp_rdi fpgetroundtoi (void);
2227fp_rdi fpsetroundtoi (fp_rdi);
2228
2229
2230
2231__attribute__((__format__(__printf__, 1, 2)))
2232extern void setproctitle(const char *fmt, ...);
2233
2234
2235void __assert (const char *, int, const char *)
2236 __attribute__ ((__noreturn__));
2237void __assert_func (const char *, int, const char *, const char *)
2238 __attribute__ ((__noreturn__));
2239typedef unsigned long VALUE;
2240typedef unsigned long ID;
2241__extension__ _Static_assert(4 == sizeof(int), "sizeof_int" ": " "SIZEOF_INT == sizeof(int)");
2242__extension__ _Static_assert(8 == sizeof(long), "sizeof_long" ": " "SIZEOF_LONG == sizeof(long)");
2243__extension__ _Static_assert(8 == sizeof(long long), "sizeof_long_long" ": " "SIZEOF_LONG_LONG == sizeof(LONG_LONG)");
2244__extension__ _Static_assert(8 == sizeof(void *), "sizeof_voidp" ": " "SIZEOF_VOIDP == sizeof(void *)");
2245
2246
2247VALUE rb_class_new(VALUE super);
2248VALUE rb_mod_init_copy(VALUE clone, VALUE orig);
2249void rb_check_inheritable(VALUE super);
2250VALUE rb_define_class_id(ID id, VALUE super);
2251VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super);
2252VALUE rb_module_new(void);
2257VALUE rb_mod_include_p(VALUE child, VALUE parent);
2259VALUE rb_class_descendants(VALUE klass);
2262VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod);
2263VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod);
2264VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod);
2265VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod);
2266VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj);
2267void rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(), int arity);
2268void rb_undef(VALUE mod, ID mid);
2269__attribute__((__nonnull__ ()))
2270void rb_define_protected_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2271__attribute__((__nonnull__ ()))
2272void rb_define_private_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2273__attribute__((__nonnull__ ()))
2274void rb_define_singleton_method(VALUE obj, const char *mid, VALUE(*func)(), int arity);
2276
2277
2278
2279
2280int rb_sourceline(void);
2281const char *rb_sourcefile(void);
2282int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);
2283VALUE rb_check_funcall(VALUE recv, ID mid, int argc, const VALUE *argv);
2284VALUE rb_check_funcall_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
2285VALUE rb_eval_cmd_kw(VALUE cmd, VALUE arg, int kw_splat);
2286VALUE rb_apply(VALUE recv, ID mid, VALUE args);
2287VALUE rb_obj_instance_eval(int argc, const VALUE *argv, VALUE recv);
2288VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE recv);
2289VALUE rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod);
2290VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod);
2291typedef VALUE (*rb_alloc_func_t)(VALUE klass);
2292void rb_define_alloc_func(VALUE klass, rb_alloc_func_t func);
2293void rb_undef_alloc_func(VALUE klass);
2294rb_alloc_func_t rb_get_alloc_func(VALUE klass);
2295void rb_clear_constant_cache_for_id(ID id);
2296void rb_alias(VALUE klass, ID dst, ID src);
2297void rb_attr(VALUE klass, ID name, int need_reader, int need_writer, int honour_visibility);
2298__attribute__((__nonnull__ ()))
2299void rb_remove_method(VALUE klass, const char *name);
2300void rb_remove_method_id(VALUE klass, ID mid);
2301int rb_method_boundp(VALUE klass, ID id, int ex);
2302int rb_method_basic_definition_p(VALUE klass, ID mid);
2303int rb_obj_respond_to(VALUE obj, ID mid, int private_p);
2304int rb_respond_to(VALUE obj, ID mid);
2305__attribute__((__noreturn__))
2306VALUE rb_f_notimplement(int argc, const VALUE *argv, VALUE obj, VALUE marker);
2307void rb_backtrace(void);
2308VALUE rb_make_backtrace(void);
2309
2310
2311
2312
2313__attribute__((__nonnull__ ()))
2314void rb_define_method(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2315__attribute__((__nonnull__ ()))
2316void rb_define_module_function(VALUE klass, const char *mid, VALUE (*func)(), int arity);
2317__attribute__((__nonnull__ ()))
2318void rb_define_global_function(const char *mid, VALUE (*func)(), int arity);
2319__attribute__((__nonnull__ ()))
2320void rb_undef_method(VALUE klass, const char *name);
2321__attribute__((__nonnull__ ()))
2322void rb_define_alias(VALUE klass, const char *dst, const char *src);
2323__attribute__((__nonnull__ ()))
2324void rb_define_attr(VALUE klass, const char *name, int read, int write);
2325
2326
2327
2328
2329VALUE rb_int2big(intptr_t i);
2330VALUE rb_int2inum(intptr_t i);
2331VALUE rb_uint2big(uintptr_t i);
2332VALUE rb_uint2inum(uintptr_t i);
2333
2334
2335enum
2336
2338 RUBY_Qfalse = 0x00,
2339 RUBY_Qnil = 0x04,
2340 RUBY_Qtrue = 0x14,
2341 RUBY_Qundef = 0x24,
2342 RUBY_IMMEDIATE_MASK = 0x07,
2343 RUBY_FIXNUM_FLAG = 0x01,
2344 RUBY_FLONUM_MASK = 0x03,
2345 RUBY_FLONUM_FLAG = 0x02,
2346 RUBY_SYMBOL_FLAG = 0x0c,
2348};
2349__attribute__((__const__))
2350
2351__attribute__((__artificial__))
2352static inline _Bool
2353RB_TEST(VALUE obj)
2354{
2355 return obj & ~RUBY_Qnil;
2356}
2357__attribute__((__const__))
2358
2359__attribute__((__artificial__))
2360static inline _Bool
2361RB_NIL_P(VALUE obj)
2362{
2363 return obj == RUBY_Qnil;
2364}
2365__attribute__((__const__))
2366
2367__attribute__((__artificial__))
2368static inline _Bool
2369RB_UNDEF_P(VALUE obj)
2370{
2371 return obj == RUBY_Qundef;
2372}
2373__attribute__((__const__))
2374
2375__attribute__((__artificial__))
2376static inline _Bool
2377RB_NIL_OR_UNDEF_P(VALUE obj)
2378{
2379 const VALUE mask = ~(RUBY_Qundef ^ RUBY_Qnil);
2380 const VALUE common_bits = RUBY_Qundef & RUBY_Qnil;
2381 return (obj & mask) == common_bits;
2382}
2383__attribute__((__const__))
2384
2385__attribute__((__artificial__))
2386static inline _Bool
2387RB_FIXNUM_P(VALUE obj)
2388{
2389 return obj & RUBY_FIXNUM_FLAG;
2390}
2391__attribute__((__const__))
2392
2393__attribute__((__artificial__))
2394static inline _Bool
2395RB_STATIC_SYM_P(VALUE obj)
2396{
2397
2398 const VALUE mask = ~((0x7fffffffffffffffL * 2UL + 1) << RUBY_SPECIAL_SHIFT);
2399 return (obj & mask) == RUBY_SYMBOL_FLAG;
2400}
2401__attribute__((__const__))
2402
2403__attribute__((__artificial__))
2404static inline _Bool
2405RB_FLONUM_P(VALUE obj)
2406{
2407 return (obj & RUBY_FLONUM_MASK) == RUBY_FLONUM_FLAG;
2408}
2409__attribute__((__const__))
2410
2411__attribute__((__artificial__))
2412static inline _Bool
2413RB_IMMEDIATE_P(VALUE obj)
2414{
2415 return obj & RUBY_IMMEDIATE_MASK;
2416}
2417__attribute__((__const__))
2418
2419__attribute__((__artificial__))
2420static inline _Bool
2421RB_SPECIAL_CONST_P(VALUE obj)
2422{
2423 return RB_IMMEDIATE_P(obj) || obj == RUBY_Qfalse;
2424}
2425__attribute__((__const__))
2426
2427static inline VALUE
2429{
2430 return RB_SPECIAL_CONST_P(obj) * RUBY_Qtrue;
2431}
2432
2433
2434__attribute__((__noreturn__))
2435__attribute__((__cold__))
2436void rb_out_of_int(long num);
2437long rb_num2long(VALUE num);
2438unsigned long rb_num2ulong(VALUE num);
2439
2440
2441__attribute__((__const__))
2442
2443__attribute__((__artificial__))
2444static inline VALUE
2445RB_INT2FIX(long i)
2446{
2447 ((void)0);
2448 const unsigned long j = i;
2449 const unsigned long k = (j << 1) + RUBY_FIXNUM_FLAG;
2450 const long l = k;
2451 const long m = l;
2452 const VALUE n = m;
2453 ((void)0);
2454 return n;
2455}
2456static inline int
2457rb_long2int_inline(long n)
2458{
2459 int i = ((int)n);
2460 if (sizeof(long) <= sizeof(int)) {
2461 ((__builtin_expect(!!(!!(i == n)), 1)) ? ((void)0) : __builtin_unreachable());
2462 }
2463 if (i != n)
2464 rb_out_of_int(n);
2465 return i;
2466}
2467__attribute__((__const__))
2468
2469static inline long
2470rbimpl_fix2long_by_idiv(VALUE x)
2471{
2472 ((void)0);
2473 const long y = x - RUBY_FIXNUM_FLAG;
2474 const long z = y / 2;
2475 const long w = ((long)z);
2476 ((void)0);
2477 return w;
2478}
2479__attribute__((__const__))
2480
2481static inline long
2482rbimpl_fix2long_by_shift(VALUE x)
2483{
2484 ((void)0);
2485 const long y = x;
2486 const long z = y >> 1;
2487 const long w = ((long)z);
2488 ((void)0);
2489 return w;
2490}
2491__attribute__((__const__))
2492
2493static inline _Bool
2494rbimpl_right_shift_is_arithmetic_p(void)
2495{
2496 return (-1 >> 1) == -1;
2497}
2498__attribute__((__const__))
2499
2500static inline long
2502{
2503 if (rbimpl_right_shift_is_arithmetic_p()) {
2504 return rbimpl_fix2long_by_shift(x);
2505 }
2506 else {
2507 return rbimpl_fix2long_by_idiv(x);
2508 }
2509}
2510__attribute__((__const__))
2511
2512static inline unsigned long
2514{
2515 ((void)0);
2516 return rb_fix2long(x);
2517}
2518static inline long
2519rb_num2long_inline(VALUE x)
2520{
2521 if (RB_FIXNUM_P(x))
2522 return rb_fix2long(x);
2523 else
2524 return rb_num2long(x);
2525}
2526static inline unsigned long
2527rb_num2ulong_inline(VALUE x)
2528{
2529 if (RB_FIXNUM_P(x))
2530 return rb_fix2ulong(x);
2531 else
2532 return rb_num2ulong(x);
2533}
2534static inline VALUE
2535rb_long2num_inline(long v)
2536{
2537 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2538 return RB_INT2FIX(v);
2539 else
2540 return rb_int2big(v);
2541}
2542static inline VALUE
2543rb_ulong2num_inline(unsigned long v)
2544{
2545 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2546 return RB_INT2FIX(v);
2547 else
2548 return rb_uint2big(v);
2549}
2550
2551
2552long rb_num2int(VALUE num);
2553long rb_fix2int(VALUE num);
2554unsigned long rb_num2uint(VALUE num);
2555unsigned long rb_fix2uint(VALUE num);
2556
2557
2558__attribute__((__artificial__))
2559static inline int
2560RB_FIX2INT(VALUE x)
2561{
2562 long ret;
2563 if (sizeof(int) < sizeof(long)) {
2564 ret = rb_fix2int(x);
2565 }
2566 else {
2567 ret = rb_fix2long(x);
2568 }
2569 return ((int)ret);
2570}
2571static inline int
2572rb_num2int_inline(VALUE x)
2573{
2574 long ret;
2575 if (sizeof(int) == sizeof(long)) {
2576 ret = rb_num2long_inline(x);
2577 }
2578 else if (RB_FIXNUM_P(x)) {
2579 ret = rb_fix2int(x);
2580 }
2581 else {
2582 ret = rb_num2int(x);
2583 }
2584 return ((int)ret);
2585}
2586__attribute__((__artificial__))
2587static inline unsigned int
2588RB_NUM2UINT(VALUE x)
2589{
2590 unsigned long ret;
2591 if (sizeof(int) < sizeof(long)) {
2592 ret = rb_num2uint(x);
2593 }
2594 else {
2595 ret = rb_num2ulong_inline(x);
2596 }
2597 return ((unsigned int)ret);
2598}
2599__attribute__((__artificial__))
2600static inline unsigned int
2601RB_FIX2UINT(VALUE x)
2602{
2603 unsigned long ret;
2604 if (sizeof(int) < sizeof(long)) {
2605 ret = rb_fix2uint(x);
2606 }
2607 else {
2608 ret = rb_fix2ulong(x);
2609 }
2610 return ((unsigned int)ret);
2611}
2612
2613
2614
2615
2616static inline VALUE
2617rb_int2num_inline(int v)
2618{
2619 if ((((v) < (0x7fffffffffffffffL / 2) + 1) && ((v) >= ((-0x7fffffffffffffffL -1L) / 2))))
2620 return RB_INT2FIX(v);
2621 else
2622 return rb_int2big(v);
2623}
2624static inline VALUE
2625rb_uint2num_inline(unsigned int v)
2626{
2627 if (((v) < (0x7fffffffffffffffL / 2) + 1))
2628 return RB_INT2FIX(v);
2629 else
2630 return rb_uint2big(v);
2631}
2632
2633
2634enum ruby_rvalue_flags {
2635 RVALUE_EMBED_LEN_MAX = 3
2636};
2637struct
2638__attribute__((__aligned__(8)))
2639RBasic {
2640 VALUE flags;
2641 const VALUE klass;
2642};
2643
2644
2646VALUE rb_obj_reveal(VALUE obj, VALUE klass);
2647
2648
2649__attribute__((__pure__))
2650__attribute__((__artificial__))
2651static inline VALUE
2652RBASIC_CLASS(VALUE obj)
2653{
2654 ((void)0);
2655 return ((struct RBasic *)(obj))->klass;
2656}
2657typedef enum {
2661 RB_WARN_CATEGORY_ALL_BITS = 0x6
2663enum rb_io_wait_readwrite {RB_IO_WAIT_READABLE, RB_IO_WAIT_WRITABLE};
2664
2665
2666VALUE rb_errinfo(void);
2667void rb_set_errinfo(VALUE err);
2668__attribute__((__noreturn__))
2669__attribute__((__nonnull__ (2)))
2670__attribute__((__format__(__printf__, 2, 3)))
2671void rb_raise(VALUE exc, const char *fmt, ...);
2672__attribute__((__noreturn__))
2673__attribute__((__nonnull__ (1)))
2674__attribute__((__format__(__printf__, 1, 2)))
2675void rb_fatal(const char *fmt, ...);
2676__attribute__((__cold__))
2677__attribute__((__noreturn__))
2678__attribute__((__nonnull__ (1)))
2679__attribute__((__format__(__printf__, 1, 2)))
2680void rb_bug(const char *fmt, ...);
2681__attribute__((__noreturn__))
2682__attribute__((__nonnull__ ()))
2683void rb_bug_errno(const char *msg, int err);
2684__attribute__((__noreturn__))
2685void rb_sys_fail(const char *msg);
2686__attribute__((__noreturn__))
2687void rb_sys_fail_str(VALUE msg);
2688__attribute__((__noreturn__))
2689__attribute__((__nonnull__ (2)))
2690void rb_mod_sys_fail(VALUE mod, const char *msg);
2691__attribute__((__noreturn__))
2692void rb_mod_sys_fail_str(VALUE mod, VALUE msg);
2693__attribute__((__noreturn__))
2694void rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *msg);
2695__attribute__((__noreturn__))
2696void rb_iter_break(void);
2697__attribute__((__noreturn__))
2698void rb_iter_break_value(VALUE val);
2699__attribute__((__noreturn__))
2700void rb_exit(int status);
2701__attribute__((__noreturn__))
2702void rb_notimplement(void);
2703VALUE rb_syserr_new(int err, const char * msg);
2704VALUE rb_syserr_new_str(int n, VALUE arg);
2705__attribute__((__noreturn__))
2706void rb_syserr_fail(int err, const char *msg);
2707__attribute__((__noreturn__))
2708void rb_syserr_fail_str(int err, VALUE msg);
2709__attribute__((__noreturn__))
2710__attribute__((__nonnull__ ()))
2711void rb_mod_syserr_fail(VALUE mod, int err, const char *msg);
2712__attribute__((__noreturn__))
2713void rb_mod_syserr_fail_str(VALUE mod, int err, VALUE msg);
2714__attribute__((__noreturn__))
2715void rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int err, const char *msg);
2716__attribute__((__cold__))
2717__attribute__((__noreturn__))
2718void rb_unexpected_type(VALUE self, int t);
2721__attribute__((__nonnull__ (1)))
2722__attribute__((__format__(__printf__, 1, 2)))
2723void rb_warning(const char *fmt, ...);
2724__attribute__((__nonnull__ (2)))
2725__attribute__((__format__(__printf__, 2, 3)))
2726void rb_category_warning(rb_warning_category_t cat, const char *fmt, ...);
2727__attribute__((__nonnull__ (1, 3)))
2728__attribute__((__format__(__printf__, 3, 4)))
2729void rb_compile_warning(const char *file, int line, const char *fmt, ...);
2730__attribute__((__nonnull__ (1)))
2731__attribute__((__format__(__printf__, 1, 2)))
2732void rb_sys_warning(const char *fmt, ...);
2733__attribute__((__cold__))
2734__attribute__((__nonnull__ (1)))
2735__attribute__((__format__(__printf__, 1, 2)))
2736void rb_warn(const char *fmt, ...);
2737__attribute__((__cold__))
2738__attribute__((__nonnull__ (2)))
2739__attribute__((__format__(__printf__, 2, 3)))
2740void rb_category_warn(rb_warning_category_t cat, const char *fmt, ...);
2741__attribute__((__nonnull__ (1, 3)))
2742__attribute__((__format__(__printf__, 3, 4)))
2743void rb_compile_warn(const char *file, int line, const char *fmt, ...);
2744__attribute__((__nonnull__ (2, 4)))
2745__attribute__((__format__(__printf__, 4, 5)))
2746void rb_category_compile_warn(rb_warning_category_t cat, const char *file, int line, const char *fmt, ...);
2747
2748
2749enum
2750
2752 RUBY_T_NONE = 0x00,
2753 RUBY_T_OBJECT = 0x01,
2754 RUBY_T_CLASS = 0x02,
2755 RUBY_T_MODULE = 0x03,
2756 RUBY_T_FLOAT = 0x04,
2757 RUBY_T_STRING = 0x05,
2758 RUBY_T_REGEXP = 0x06,
2759 RUBY_T_ARRAY = 0x07,
2760 RUBY_T_HASH = 0x08,
2761 RUBY_T_STRUCT = 0x09,
2762 RUBY_T_BIGNUM = 0x0a,
2763 RUBY_T_FILE = 0x0b,
2764 RUBY_T_DATA = 0x0c,
2765 RUBY_T_MATCH = 0x0d,
2766 RUBY_T_COMPLEX = 0x0e,
2767 RUBY_T_RATIONAL = 0x0f,
2768 RUBY_T_NIL = 0x11,
2769 RUBY_T_TRUE = 0x12,
2770 RUBY_T_FALSE = 0x13,
2771 RUBY_T_SYMBOL = 0x14,
2772 RUBY_T_FIXNUM = 0x15,
2773 RUBY_T_UNDEF = 0x16,
2774 RUBY_T_IMEMO = 0x1a,
2775 RUBY_T_NODE = 0x1b,
2776 RUBY_T_ICLASS = 0x1c,
2777 RUBY_T_ZOMBIE = 0x1d,
2778 RUBY_T_MOVED = 0x1e,
2779 RUBY_T_MASK = 0x1f
2780};
2781
2782
2783__attribute__((__cold__))
2784void rb_check_type(VALUE obj, int t);
2785
2786
2787__attribute__((__pure__))
2788__attribute__((__artificial__))
2789static inline enum ruby_value_type
2790RB_BUILTIN_TYPE(VALUE obj)
2791{
2792 ((void)0);
2793 VALUE ret = ((struct RBasic *)(obj))->flags & RUBY_T_MASK;
2794 return ((enum ruby_value_type)ret);
2795}
2796__attribute__((__pure__))
2797static inline _Bool
2799{
2800 if (RB_FIXNUM_P(obj)) {
2801 return 1;
2802 }
2803 else if (RB_SPECIAL_CONST_P(obj)) {
2804 return 0;
2805 }
2806 else {
2807 return RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM;
2808 }
2809}
2810__attribute__((__pure__))
2811static inline enum ruby_value_type
2812rb_type(VALUE obj)
2813{
2814 if (! RB_SPECIAL_CONST_P(obj)) {
2815 return RB_BUILTIN_TYPE(obj);
2816 }
2817 else if (obj == ((VALUE)RUBY_Qfalse)) {
2818 return RUBY_T_FALSE;
2819 }
2820 else if (obj == ((VALUE)RUBY_Qnil)) {
2821 return RUBY_T_NIL;
2822 }
2823 else if (obj == ((VALUE)RUBY_Qtrue)) {
2824 return RUBY_T_TRUE;
2825 }
2826 else if (obj == ((VALUE)RUBY_Qundef)) {
2827 return RUBY_T_UNDEF;
2828 }
2829 else if (RB_FIXNUM_P(obj)) {
2830 return RUBY_T_FIXNUM;
2831 }
2832 else if (RB_STATIC_SYM_P(obj)) {
2833 return RUBY_T_SYMBOL;
2834 }
2835 else {
2836 ((__builtin_expect(!!(!!(RB_FLONUM_P(obj))), 1)) ? ((void)0) : __builtin_unreachable());
2837 return RUBY_T_FLOAT;
2838 }
2839}
2840__attribute__((__pure__))
2841__attribute__((__artificial__))
2842static inline _Bool
2843RB_FLOAT_TYPE_P(VALUE obj)
2844{
2845 if (RB_FLONUM_P(obj)) {
2846 return 1;
2847 }
2848 else if (RB_SPECIAL_CONST_P(obj)) {
2849 return 0;
2850 }
2851 else {
2852 return RB_BUILTIN_TYPE(obj) == RUBY_T_FLOAT;
2853 }
2854}
2855__attribute__((__pure__))
2856__attribute__((__artificial__))
2857static inline _Bool
2858RB_DYNAMIC_SYM_P(VALUE obj)
2859{
2860 if (RB_SPECIAL_CONST_P(obj)) {
2861 return 0;
2862 }
2863 else {
2864 return RB_BUILTIN_TYPE(obj) == RUBY_T_SYMBOL;
2865 }
2866}
2867__attribute__((__pure__))
2868__attribute__((__artificial__))
2869static inline _Bool
2870RB_SYMBOL_P(VALUE obj)
2871{
2872 return RB_STATIC_SYM_P(obj) || RB_DYNAMIC_SYM_P(obj);
2873}
2874__attribute__((__pure__))
2875__attribute__((__artificial__))
2876__attribute__((__always_inline__)) inline
2877static _Bool
2878rbimpl_RB_TYPE_P_fastpath(VALUE obj, enum ruby_value_type t)
2879{
2880 if (t == RUBY_T_TRUE) {
2881 return obj == ((VALUE)RUBY_Qtrue);
2882 }
2883 else if (t == RUBY_T_FALSE) {
2884 return obj == ((VALUE)RUBY_Qfalse);
2885 }
2886 else if (t == RUBY_T_NIL) {
2887 return obj == ((VALUE)RUBY_Qnil);
2888 }
2889 else if (t == RUBY_T_UNDEF) {
2890 return obj == ((VALUE)RUBY_Qundef);
2891 }
2892 else if (t == RUBY_T_FIXNUM) {
2893 return RB_FIXNUM_P(obj);
2894 }
2895 else if (t == RUBY_T_SYMBOL) {
2896 return RB_SYMBOL_P(obj);
2897 }
2898 else if (t == RUBY_T_FLOAT) {
2899 return RB_FLOAT_TYPE_P(obj);
2900 }
2901 else if (RB_SPECIAL_CONST_P(obj)) {
2902 return 0;
2903 }
2904 else if (t == RB_BUILTIN_TYPE(obj)) {
2905 return 1;
2906 }
2907 else {
2908 return 0;
2909 }
2910}
2911__attribute__((__pure__))
2912__attribute__((__artificial__))
2913static inline _Bool
2914RB_TYPE_P(VALUE obj, enum ruby_value_type t)
2915{
2916 if (__builtin_constant_p(t)) {
2917 return rbimpl_RB_TYPE_P_fastpath(obj, t);
2918 }
2919 else {
2920 return t == rb_type(obj);
2921 }
2922}
2923__attribute__((__pure__))
2924__attribute__((__artificial__))
2925static inline _Bool rbimpl_rtypeddata_p(VALUE obj);
2926__attribute__((__artificial__))
2927static inline void
2928Check_Type(VALUE v, enum ruby_value_type t)
2929{
2930 if ((__builtin_expect(!!(! RB_TYPE_P(v, t)), 0))) {
2931 goto unexpected_type;
2932 }
2933 else if (t == RUBY_T_DATA && rbimpl_rtypeddata_p(v)) {
2934 goto unexpected_type;
2935 }
2936 else {
2937 return;
2938 }
2939 unexpected_type:
2940 rb_unexpected_type(v, t);
2941}
2942enum ruby_fl_ushift {
2943 RUBY_FL_USHIFT = 12
2944};
2945__extension__
2946enum
2947
2949 RUBY_FL_WB_PROTECTED = (1<<5),
2950 RUBY_FL_PROMOTED0 = (1<<5),
2951 RUBY_FL_PROMOTED1 = (1<<6),
2953 RUBY_FL_FINALIZE = (1<<7),
2955 __attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
2956 = (1<<8),
2957 RUBY_FL_SHAREABLE = (1<<8),
2959 __attribute__((__deprecated__ ("trustedness turned out to be a wrong idea.")))
2960 = (1<<8),
2961 RUBY_FL_SEEN_OBJ_ID = (1<<9),
2962 RUBY_FL_EXIVAR = (1<<10),
2963 RUBY_FL_FREEZE = (1<<11),
2964 RUBY_FL_USER0 = (1<<(RUBY_FL_USHIFT+0)),
2965 RUBY_FL_USER1 = (1<<(RUBY_FL_USHIFT+1)),
2966 RUBY_FL_USER2 = (1<<(RUBY_FL_USHIFT+2)),
2967 RUBY_FL_USER3 = (1<<(RUBY_FL_USHIFT+3)),
2968 RUBY_FL_USER4 = (1<<(RUBY_FL_USHIFT+4)),
2969 RUBY_FL_USER5 = (1<<(RUBY_FL_USHIFT+5)),
2970 RUBY_FL_USER6 = (1<<(RUBY_FL_USHIFT+6)),
2971 RUBY_FL_USER7 = (1<<(RUBY_FL_USHIFT+7)),
2972 RUBY_FL_USER8 = (1<<(RUBY_FL_USHIFT+8)),
2973 RUBY_FL_USER9 = (1<<(RUBY_FL_USHIFT+9)),
2974 RUBY_FL_USER10 = (1<<(RUBY_FL_USHIFT+10)),
2975 RUBY_FL_USER11 = (1<<(RUBY_FL_USHIFT+11)),
2976 RUBY_FL_USER12 = (1<<(RUBY_FL_USHIFT+12)),
2977 RUBY_FL_USER13 = (1<<(RUBY_FL_USHIFT+13)),
2978 RUBY_FL_USER14 = (1<<(RUBY_FL_USHIFT+14)),
2979 RUBY_FL_USER15 = (1<<(RUBY_FL_USHIFT+15)),
2980 RUBY_FL_USER16 = (1<<(RUBY_FL_USHIFT+16)),
2981 RUBY_FL_USER17 = (1<<(RUBY_FL_USHIFT+17)),
2982 RUBY_FL_USER18 = (1<<(RUBY_FL_USHIFT+18)),
2983 RUBY_FL_USER19 = (1<<(RUBY_FL_USHIFT+19)),
2984 RUBY_ELTS_SHARED = RUBY_FL_USER2,
2986};
2987enum {
2989 __attribute__((__deprecated__ ("It seems there is no actual usage of this enum.")))
2990 = (int)RUBY_T_MASK | (int)RUBY_FL_EXIVAR
2991};
2992
2993
2995
2996
2997__attribute__((__pure__))
2998__attribute__((__artificial__))
2999__attribute__((__always_inline__)) inline
3000static _Bool
3001RB_FL_ABLE(VALUE obj)
3002{
3003 if (RB_SPECIAL_CONST_P(obj)) {
3004 return 0;
3005 }
3006 else if (RB_TYPE_P(obj, RUBY_T_NODE)) {
3007 return 0;
3008 }
3009 else {
3010 return 1;
3011 }
3012}
3013__attribute__((__pure__))
3014__attribute__((__artificial__))
3015static inline VALUE
3016RB_FL_TEST_RAW(VALUE obj, VALUE flags)
3017{
3018 ((void)0);
3019 return ((struct RBasic *)(obj))->flags & flags;
3020}
3021__attribute__((__pure__))
3022__attribute__((__artificial__))
3023static inline VALUE
3024RB_FL_TEST(VALUE obj, VALUE flags)
3025{
3026 if (RB_FL_ABLE(obj)) {
3027 return RB_FL_TEST_RAW(obj, flags);
3028 }
3029 else {
3030 return 0UL;
3031 }
3032}
3033__attribute__((__pure__))
3034__attribute__((__artificial__))
3035static inline _Bool
3036RB_FL_ANY_RAW(VALUE obj, VALUE flags)
3037{
3038 return RB_FL_TEST_RAW(obj, flags);
3039}
3040__attribute__((__pure__))
3041__attribute__((__artificial__))
3042static inline _Bool
3043RB_FL_ANY(VALUE obj, VALUE flags)
3044{
3045 return RB_FL_TEST(obj, flags);
3046}
3047__attribute__((__pure__))
3048__attribute__((__artificial__))
3049static inline _Bool
3050RB_FL_ALL_RAW(VALUE obj, VALUE flags)
3051{
3052 return RB_FL_TEST_RAW(obj, flags) == flags;
3053}
3054__attribute__((__pure__))
3055__attribute__((__artificial__))
3056static inline _Bool
3057RB_FL_ALL(VALUE obj, VALUE flags)
3058{
3059 return RB_FL_TEST(obj, flags) == flags;
3060}
3061
3062__attribute__((__artificial__))
3063static inline void
3064rbimpl_fl_set_raw_raw(struct RBasic *obj, VALUE flags)
3065{
3066 obj->flags |= flags;
3067}
3068__attribute__((__artificial__))
3069static inline void
3070RB_FL_SET_RAW(VALUE obj, VALUE flags)
3071{
3072 ((void)0);
3073 rbimpl_fl_set_raw_raw(((struct RBasic *)(obj)), flags);
3074}
3075__attribute__((__artificial__))
3076static inline void
3077RB_FL_SET(VALUE obj, VALUE flags)
3078{
3079 if (RB_FL_ABLE(obj)) {
3080 RB_FL_SET_RAW(obj, flags);
3081 }
3082}
3083
3084__attribute__((__artificial__))
3085static inline void
3086rbimpl_fl_unset_raw_raw(struct RBasic *obj, VALUE flags)
3087{
3088 obj->flags &= ~flags;
3089}
3090__attribute__((__artificial__))
3091static inline void
3092RB_FL_UNSET_RAW(VALUE obj, VALUE flags)
3093{
3094 ((void)0);
3095 rbimpl_fl_unset_raw_raw(((struct RBasic *)(obj)), flags);
3096}
3097__attribute__((__artificial__))
3098static inline void
3099RB_FL_UNSET(VALUE obj, VALUE flags)
3100{
3101 if (RB_FL_ABLE(obj)) {
3102 RB_FL_UNSET_RAW(obj, flags);
3103 }
3104}
3105
3106__attribute__((__artificial__))
3107static inline void
3108rbimpl_fl_reverse_raw_raw(struct RBasic *obj, VALUE flags)
3109{
3110 obj->flags ^= flags;
3111}
3112__attribute__((__artificial__))
3113static inline void
3114RB_FL_REVERSE_RAW(VALUE obj, VALUE flags)
3115{
3116 ((void)0);
3117 rbimpl_fl_reverse_raw_raw(((struct RBasic *)(obj)), flags);
3118}
3119__attribute__((__artificial__))
3120static inline void
3121RB_FL_REVERSE(VALUE obj, VALUE flags)
3122{
3123 if (RB_FL_ABLE(obj)) {
3124 RB_FL_REVERSE_RAW(obj, flags);
3125 }
3126}
3127__attribute__((__pure__))
3128__attribute__((__artificial__))
3129__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3130static inline _Bool
3131RB_OBJ_TAINTABLE(VALUE obj)
3132{
3133 return 0;
3134}
3135__attribute__((__pure__))
3136__attribute__((__artificial__))
3137__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3138static inline VALUE
3139RB_OBJ_TAINTED_RAW(VALUE obj)
3140{
3141 return 0;
3142}
3143__attribute__((__pure__))
3144__attribute__((__artificial__))
3145__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3146static inline _Bool
3147RB_OBJ_TAINTED(VALUE obj)
3148{
3149 return 0;
3150}
3151__attribute__((__artificial__))
3152__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3153static inline void
3154RB_OBJ_TAINT_RAW(VALUE obj)
3155{
3156 return;
3157}
3158__attribute__((__artificial__))
3159__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3160static inline void
3161RB_OBJ_TAINT(VALUE obj)
3162{
3163 return;
3164}
3165__attribute__((__artificial__))
3166__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3167static inline void
3168RB_OBJ_INFECT_RAW(VALUE dst, VALUE src)
3169{
3170 return;
3171}
3172__attribute__((__artificial__))
3173__attribute__((__deprecated__ ("taintedness turned out to be a wrong idea.")))
3174static inline void
3175RB_OBJ_INFECT(VALUE dst, VALUE src)
3176{
3177 return;
3178}
3179__attribute__((__pure__))
3180__attribute__((__artificial__))
3181static inline VALUE
3182RB_OBJ_FROZEN_RAW(VALUE obj)
3183{
3184 return RB_FL_TEST_RAW(obj, RUBY_FL_FREEZE);
3185}
3186__attribute__((__pure__))
3187__attribute__((__artificial__))
3188static inline _Bool
3189RB_OBJ_FROZEN(VALUE obj)
3190{
3191 if (! RB_FL_ABLE(obj)) {
3192 return 1;
3193 }
3194 else {
3195 return RB_OBJ_FROZEN_RAW(obj);
3196 }
3197}
3198__attribute__((__artificial__))
3199static inline void
3200RB_OBJ_FREEZE_RAW(VALUE obj)
3201{
3202 RB_FL_SET_RAW(obj, RUBY_FL_FREEZE);
3203}
3204
3205
3206void rb_obj_freeze_inline(VALUE obj);
3207
3208
3209enum ruby_rstring_flags {
3210 RSTRING_NOEMBED = RUBY_FL_USER1,
3211 RSTRING_FSTR = RUBY_FL_USER17
3212};
3213struct RString {
3214 struct RBasic basic;
3215 union {
3216 struct {
3217 long len;
3218 char *ptr;
3219 union {
3220 long capa;
3221 VALUE shared;
3222 } aux;
3223 } heap;
3224 struct {
3225 long len;
3226 char ary[1];
3227 } embed;
3228 } as;
3229};
3230
3231
3233VALUE rb_string_value(volatile VALUE *ptr);
3234char *rb_string_value_ptr(volatile VALUE *ptr);
3235char *rb_string_value_cstr(volatile VALUE *ptr);
3238__attribute__((__error__ ("rb_check_safe_str() and Check_SafeStr() are obsolete; use StringValue() instead")))
3239void rb_check_safe_str(VALUE);
3240void rb_debug_rstring_null_ptr(const char *func);
3241
3242
3243__attribute__((__pure__))
3244__attribute__((__artificial__))
3245static inline long
3246RSTRING_EMBED_LEN(VALUE str)
3247{
3248 ((void)0);
3249 ((void)0);
3250 long f = ((struct RString *)(str))->as.embed.len;
3251 return f;
3252}
3253
3254
3255__attribute__((__pure__))
3256__attribute__((__artificial__))
3257static inline struct RString
3258rbimpl_rstring_getmem(VALUE str)
3259{
3260 ((void)0);
3261 if (RB_FL_ANY_RAW(str, RSTRING_NOEMBED)) {
3262 return *((struct RString *)(str));
3263 }
3264 else {
3265 struct RString retval;
3266 retval.as.heap.len = RSTRING_EMBED_LEN(str);
3267 retval.as.heap.ptr = ((struct RString *)(str))->as.embed.ary;
3268 return retval;
3269 }
3270}
3271
3272
3273__attribute__((__pure__))
3274__attribute__((__artificial__))
3275static inline long
3276RSTRING_LEN(VALUE str)
3277{
3278 return rbimpl_rstring_getmem(str).as.heap.len;
3279}
3280__attribute__((__artificial__))
3281static inline char *
3282RSTRING_PTR(VALUE str)
3283{
3284 char *ptr = rbimpl_rstring_getmem(str).as.heap.ptr;
3285 if ((__builtin_expect(!!(! ptr), 0))) {
3286 rb_debug_rstring_null_ptr("RSTRING_PTR");
3287 }
3288 return ptr;
3289}
3290__attribute__((__artificial__))
3291static inline char *
3292RSTRING_END(VALUE str)
3293{
3294 struct RString buf = rbimpl_rstring_getmem(str);
3295 if ((__builtin_expect(!!(! buf.as.heap.ptr), 0))) {
3296 rb_debug_rstring_null_ptr("RSTRING_END");
3297 }
3298 return &buf.as.heap.ptr[buf.as.heap.len];
3299}
3300__attribute__((__artificial__))
3301static inline int
3302RSTRING_LENINT(VALUE str)
3303{
3304 return rb_long2int_inline(RSTRING_LEN(str));
3305}
3306__attribute__((__const__))
3307
3308__attribute__((__artificial__))
3309static inline VALUE
3310RB_CHR2FIX(unsigned char c)
3311{
3312 return RB_INT2FIX(c);
3313}
3314static inline char
3315rb_num2char_inline(VALUE x)
3316{
3317 if (RB_TYPE_P(x, RUBY_T_STRING) && (RSTRING_LEN(x)>=1))
3318 return RSTRING_PTR(x)[0];
3319 else
3320 return ((char)rb_num2int_inline(x));
3321}
3322
3323
3324double rb_num2dbl(VALUE num);
3325__attribute__((__pure__))
3326double rb_float_value(VALUE num);
3327VALUE rb_float_new(double d);
3328VALUE rb_float_new_in_heap(double d);
3329
3330
3331
3332
3333VALUE rb_ll2inum(long long num);
3334VALUE rb_ull2inum(unsigned long long num);
3335long long rb_num2ll(VALUE num);
3336unsigned long long rb_num2ull(VALUE num);
3337
3338
3339static inline VALUE
3340rb_ll2num_inline(long long n)
3341{
3342 if ((((n) < (0x7fffffffffffffffL / 2) + 1) && ((n) >= ((-0x7fffffffffffffffL -1L) / 2)))) return RB_INT2FIX((long)n);
3343 return rb_ll2inum(n);
3344}
3345static inline VALUE
3346rb_ull2num_inline(unsigned long long n)
3347{
3348 if (((n) < (0x7fffffffffffffffL / 2) + 1)) return RB_INT2FIX((long)n);
3349 return rb_ull2inum(n);
3350}
3351static inline long long
3352rb_num2ll_inline(VALUE x)
3353{
3354 if (RB_FIXNUM_P(x))
3355 return rb_fix2long(x);
3356 else
3357 return rb_num2ll(x);
3358}
3359static inline unsigned long long
3360rb_num2ull_inline(VALUE x)
3361{
3362 if (RB_FIXNUM_P(x))
3363 return rb_fix2long(x);
3364 else
3365 return rb_num2ull(x);
3366}
3367
3368
3369short rb_num2short(VALUE num);
3370unsigned short rb_num2ushort(VALUE num);
3371short rb_fix2short(VALUE num);
3372unsigned short rb_fix2ushort(VALUE num);
3373
3374
3375static inline short
3376rb_num2short_inline(VALUE x)
3377{
3378 if (RB_FIXNUM_P(x))
3379 return rb_fix2short(x);
3380 else
3381 return rb_num2short(x);
3382}
3383
3384
3385typedef unsigned long st_data_t;
3386typedef struct st_table st_table;
3387typedef st_data_t st_index_t;
3388typedef int st_compare_func(st_data_t, st_data_t);
3389typedef st_index_t st_hash_func(st_data_t);
3390typedef char st_check_for_sizeof_st_index_t[8 == (int)sizeof(st_index_t) ? 1 : -1];
3391struct st_hash_type {
3392 int (*compare)(st_data_t, st_data_t);
3393 st_index_t (*hash)(st_data_t);
3394};
3395typedef struct st_table_entry st_table_entry;
3396struct st_table_entry;
3397struct st_table {
3398 unsigned char entry_power, bin_power, size_ind;
3399 unsigned int rebuilds_num;
3400 const struct st_hash_type *type;
3401 st_index_t num_entries;
3402 st_index_t *bins;
3403 st_index_t entries_start, entries_bound;
3404 st_table_entry *entries;
3405};
3406enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK, ST_REPLACE};
3407st_table *rb_st_init_table(const struct st_hash_type *);
3408st_table *rb_st_init_table_with_size(const struct st_hash_type *, st_index_t);
3409st_table *rb_st_init_numtable(void);
3410st_table *rb_st_init_numtable_with_size(st_index_t);
3411st_table *rb_st_init_strtable(void);
3412st_table *rb_st_init_strtable_with_size(st_index_t);
3413st_table *rb_st_init_strcasetable(void);
3414st_table *rb_st_init_strcasetable_with_size(st_index_t);
3415int rb_st_delete(st_table *, st_data_t *, st_data_t *);
3416int rb_st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
3417int rb_st_shift(st_table *, st_data_t *, st_data_t *);
3418int rb_st_insert(st_table *, st_data_t, st_data_t);
3419int rb_st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
3420int rb_st_lookup(st_table *, st_data_t, st_data_t *);
3421int rb_st_get_key(st_table *, st_data_t, st_data_t *);
3422typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
3423int rb_st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
3424typedef int st_foreach_callback_func(st_data_t, st_data_t, st_data_t);
3425typedef int st_foreach_check_callback_func(st_data_t, st_data_t, st_data_t, int);
3426int rb_st_foreach_with_replace(st_table *tab, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
3427int rb_st_foreach(st_table *, st_foreach_callback_func *, st_data_t);
3428int rb_st_foreach_check(st_table *, st_foreach_check_callback_func *, st_data_t, st_data_t);
3429st_index_t rb_st_keys(st_table *table, st_data_t *keys, st_index_t size);
3430st_index_t rb_st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
3431st_index_t rb_st_values(st_table *table, st_data_t *values, st_index_t size);
3432st_index_t rb_st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
3433void rb_st_add_direct(st_table *, st_data_t, st_data_t);
3434void rb_st_free_table(st_table *);
3435void rb_st_cleanup_safe(st_table *, st_data_t);
3436void rb_st_clear(st_table *);
3437st_table *rb_st_copy(st_table *);
3438__attribute__((__const__)) int rb_st_numcmp(st_data_t, st_data_t);
3439__attribute__((__const__)) st_index_t rb_st_numhash(st_data_t);
3440__attribute__((__pure__)) int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3441__attribute__((__pure__)) int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3442__attribute__((__pure__)) size_t rb_st_memsize(const st_table *);
3443__attribute__((__pure__)) st_index_t rb_st_hash(const void *ptr, size_t len, st_index_t h);
3444__attribute__((__const__)) st_index_t rb_st_hash_uint32(st_index_t h, uint32_t i);
3445__attribute__((__const__)) st_index_t rb_st_hash_uint(st_index_t h, st_index_t i);
3446__attribute__((__const__)) st_index_t rb_st_hash_end(st_index_t h);
3447__attribute__((__const__)) st_index_t rb_st_hash_start(st_index_t h);
3448void rb_hash_bulk_insert_into_st_table(long, const VALUE *, VALUE);
3449
3450
3451__attribute__((__const__))
3452
3453__attribute__((__artificial__))
3454static inline VALUE
3455RB_ST2FIX(st_data_t i)
3456{
3457 long x = i;
3458 if (x >= 0) {
3459 x &= (0x7fffffffffffffffL / 2);
3460 }
3461 else {
3462 x |= ((-0x7fffffffffffffffL -1L) / 2);
3463 }
3464 ((void)0);
3465 unsigned long y = ((unsigned long)x);
3466 return RB_INT2FIX(y);
3467}
3468
3469
3470void rb_gc_writebarrier(VALUE old, VALUE young);
3471void rb_gc_writebarrier_unprotect(VALUE obj);
3472
3473
3474__attribute__((__pure__))
3475__attribute__((__artificial__))
3476static inline _Bool
3477RB_OBJ_PROMOTED_RAW(VALUE obj)
3478{
3479 ((void)0);
3480 return RB_FL_ANY_RAW(obj, RUBY_FL_PROMOTED);
3481}
3482__attribute__((__pure__))
3483__attribute__((__artificial__))
3484static inline _Bool
3485RB_OBJ_PROMOTED(VALUE obj)
3486{
3487 if (! RB_FL_ABLE(obj)) {
3488 return 0;
3489 }
3490 else {
3491 return RB_OBJ_PROMOTED_RAW(obj);
3492 }
3493}
3494static inline VALUE
3495rb_obj_wb_unprotect(
3496 VALUE x,
3497 [[maybe_unused]]
3498 const char *filename,
3499 [[maybe_unused]]
3500 int line)
3501{
3502 rb_gc_writebarrier_unprotect(x);
3503 return x;
3504}
3505static inline VALUE
3506rb_obj_written(
3507 VALUE a,
3508 [[maybe_unused]]
3509 VALUE oldv,
3510 VALUE b,
3511 [[maybe_unused]]
3512 const char *filename,
3513 [[maybe_unused]]
3514 int line)
3515{
3516 if (!RB_SPECIAL_CONST_P(b)) {
3517 rb_gc_writebarrier(a, b);
3518 }
3519 return a;
3520}
3521static inline VALUE
3522rb_obj_write(
3523 VALUE a, VALUE *slot, VALUE b,
3524 [[maybe_unused]]
3525 const char *filename,
3526 [[maybe_unused]]
3527 int line)
3528{
3529 *slot = b;
3530 rb_obj_written(a, ((VALUE)RUBY_Qundef) , b, filename, line);
3531 return a;
3532}
3533enum ruby_rarray_flags {
3534 RARRAY_EMBED_FLAG = RUBY_FL_USER1,
3535 RARRAY_EMBED_LEN_MASK = RUBY_FL_USER9 | RUBY_FL_USER8 | RUBY_FL_USER7 | RUBY_FL_USER6 |
3537 ,
3538 RARRAY_TRANSIENT_FLAG = RUBY_FL_USER13
3539};
3540enum ruby_rarray_consts {
3541 RARRAY_EMBED_LEN_SHIFT = RUBY_FL_USHIFT + 3
3542};
3543struct RArray {
3544 struct RBasic basic;
3545 union {
3546 struct {
3547 long len;
3548 union {
3549 long capa;
3550 const
3551 VALUE shared_root;
3552 } aux;
3553 const VALUE *ptr;
3554 } heap;
3555 const VALUE ary[1];
3556 } as;
3557};
3558
3559
3560VALUE *rb_ary_ptr_use_start(VALUE ary);
3561void rb_ary_ptr_use_end(VALUE a);
3562void rb_ary_detransient(VALUE a);
3563
3564
3565__attribute__((__pure__))
3566__attribute__((__artificial__))
3567static inline long
3568RARRAY_EMBED_LEN(VALUE ary)
3569{
3570 ((void)0);
3571 ((void)0);
3572 VALUE f = ((struct RBasic *)(ary))->flags;
3573 f &= RARRAY_EMBED_LEN_MASK;
3574 f >>= RARRAY_EMBED_LEN_SHIFT;
3575 return ((long)f);
3576}
3577__attribute__((__pure__))
3578static inline long
3580{
3581 ((void)0);
3582 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3583 return RARRAY_EMBED_LEN(a);
3584 }
3585 else {
3586 return ((struct RArray *)(a))->as.heap.len;
3587 }
3588}
3589__attribute__((__artificial__))
3590static inline int
3591RARRAY_LENINT(VALUE ary)
3592{
3593 return rb_long2int_inline(rb_array_len(ary));
3594}
3595__attribute__((__pure__))
3596__attribute__((__artificial__))
3597static inline _Bool
3598RARRAY_TRANSIENT_P(VALUE ary)
3599{
3600 ((void)0);
3601 return RB_FL_ANY_RAW(ary, RARRAY_TRANSIENT_FLAG);
3602}
3603__attribute__((__pure__))
3604static inline const VALUE *
3605rb_array_const_ptr_transient(VALUE a)
3606{
3607 ((void)0);
3608 if (RB_FL_ANY_RAW(a, RARRAY_EMBED_FLAG)) {
3609 return (((struct RArray *)(a))->as.ary);
3610 }
3611 else {
3612 return (((struct RArray *)(a))->as.heap.ptr);
3613 }
3614}
3615static inline const VALUE *
3616rb_array_const_ptr(VALUE a)
3617{
3618 ((void)0);
3619 if (RARRAY_TRANSIENT_P(a)) {
3620 rb_ary_detransient(a);
3621 }
3622 return rb_array_const_ptr_transient(a);
3623}
3624static inline VALUE *
3625rb_array_ptr_use_start(VALUE a,
3626 [[maybe_unused]]
3627 int allow_transient)
3628{
3629 ((void)0);
3630 if (!allow_transient) {
3631 if (RARRAY_TRANSIENT_P(a)) {
3632 rb_ary_detransient(a);
3633 }
3634 }
3635 return rb_ary_ptr_use_start(a);
3636}
3637static inline void
3638rb_array_ptr_use_end(VALUE a,
3639 [[maybe_unused]]
3640 int allow_transient)
3641{
3642 ((void)0);
3643 rb_ary_ptr_use_end(a);
3644}
3645static inline VALUE *
3646RARRAY_PTR(VALUE ary)
3647{
3648 ((void)0);
3649 VALUE tmp = (1 ? rb_obj_wb_unprotect(ary, "../ruby-3.2.1/include/ruby/internal/core/rarray.h", 550) : ary);
3650 return ((VALUE *)rb_array_const_ptr(tmp));
3651}
3652static inline void
3653RARRAY_ASET(VALUE ary, long i, VALUE v)
3654{
3655 do { ((void)0); const VALUE rbimpl_ary = (ary); VALUE *ptr = rb_array_ptr_use_start(rbimpl_ary, (1)); (rb_obj_write((VALUE)(ary), (VALUE *)(&ptr[i]), (VALUE)(v), "../ruby-3.2.1/include/ruby/internal/core/rarray.h", 569)); rb_array_ptr_use_end(rbimpl_ary, (1)); } while (0);
3656}
3657
3658
3659int rb_big_sign(VALUE num);
3660
3661
3662static inline _Bool
3663RBIGNUM_POSITIVE_P(VALUE b)
3664{
3665 ((void)0);
3666 return rb_big_sign(b);
3667}
3668static inline _Bool
3669RBIGNUM_NEGATIVE_P(VALUE b)
3670{
3671 ((void)0);
3672 return ! RBIGNUM_POSITIVE_P(b);
3673}
3674enum ruby_rmodule_flags {
3675 RMODULE_IS_REFINEMENT = RUBY_FL_USER3
3676};
3677struct RClass;
3678
3679
3681
3682
3683typedef void (*RUBY_DATA_FUNC)(void*);
3684struct RData {
3685 struct RBasic basic;
3688 void *data;
3689};
3690
3691
3692VALUE rb_data_object_wrap(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3693VALUE rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree);
3694extern VALUE rb_cObject;
3695
3696
3697__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3698static inline VALUE
3699rb_data_object_wrap_warning(VALUE klass, void *ptr, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free)
3700{
3701 return rb_data_object_wrap(klass, ptr, mark, free);
3702}
3703static inline void *
3704rb_data_object_get(VALUE obj)
3705{
3706 Check_Type(obj, RUBY_T_DATA);
3707 return ((struct RData *)(obj))->data;
3708}
3709__attribute__((__warning__ ("untyped Data is unsafe; use TypedData instead"))) __attribute__((__deprecated__ ("by TypedData")))
3710static inline void *
3711rb_data_object_get_warning(VALUE obj)
3712{
3713 return rb_data_object_get(obj);
3714}
3715static inline VALUE
3716rb_data_object_make(VALUE klass, RUBY_DATA_FUNC mark_func, RUBY_DATA_FUNC free_func, void **datap, size_t size)
3717{
3718 VALUE result = rb_data_object_zalloc( (klass), (size), ((void (*)(void *))(mark_func)), ((void (*)(void *))(free_func))); (*datap) = ((void *)((struct RData *)(result))->data); ((void)(*datap));
3719 return result;
3720}
3721__attribute__((__deprecated__ ("by: rb_data_object_wrap")))
3722static inline VALUE
3723rb_data_object_alloc(VALUE klass, void *data, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
3724{
3725 return rb_data_object_wrap(klass, data, dmark, dfree);
3726}
3727struct rb_io_t;
3728struct RFile {
3729 struct RBasic basic;
3730 struct rb_io_t *fptr;
3731};
3732struct st_table;
3733
3734
3735size_t rb_hash_size_num(VALUE hash);
3736struct st_table *rb_hash_tbl(VALUE hash, const char *file, int line);
3737VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone);
3738
3739
3740enum ruby_robject_flags {
3741 ROBJECT_EMBED = RUBY_FL_USER1
3742};
3743struct st_table;
3744struct RObject {
3745 struct RBasic basic;
3746 union {
3747 struct {
3748 VALUE *ivptr;
3749 struct rb_id_table *iv_index_tbl;
3750 } heap;
3751 VALUE ary[1];
3752 } as;
3753};
3754static const int32_t ROBJECT_OFFSET_AS_HEAP_IVPTR = __builtin_offsetof (struct RObject, as.heap.ivptr);
3755static const int32_t ROBJECT_OFFSET_AS_HEAP_IV_INDEX_TBL = __builtin_offsetof (struct RObject, as.heap.iv_index_tbl);
3756static const int32_t ROBJECT_OFFSET_AS_ARY = __builtin_offsetof (struct RObject, as.ary);
3757__attribute__((__pure__))
3758__attribute__((__artificial__))
3759static inline VALUE *
3760ROBJECT_IVPTR(VALUE obj)
3761{
3762 ((void)0);
3763 struct RObject *const ptr = ((struct RObject *)(obj));
3764 if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
3765 return ptr->as.ary;
3766 }
3767 else {
3768 return ptr->as.heap.ivptr;
3769 }
3770}
3771struct re_patter_buffer;
3772struct RRegexp {
3773 struct RBasic basic;
3774 struct re_pattern_buffer *ptr;
3775 const VALUE src;
3776 unsigned long usecnt;
3777};
3778__attribute__((__pure__))
3779__attribute__((__artificial__))
3780static inline VALUE
3781RREGEXP_SRC(VALUE rexp)
3782{
3783 ((void)0);
3784 VALUE ret = ((struct RRegexp *)(rexp))->src;
3785 ((void)0);
3786 return ret;
3787}
3788__attribute__((__pure__))
3789__attribute__((__artificial__))
3790static inline char *
3791RREGEXP_SRC_PTR(VALUE rexp)
3792{
3793 return RSTRING_PTR(RREGEXP_SRC(rexp));
3794}
3795__attribute__((__pure__))
3796__attribute__((__artificial__))
3797static inline long
3798RREGEXP_SRC_LEN(VALUE rexp)
3799{
3800 return RSTRING_LEN(RREGEXP_SRC(rexp));
3801}
3802__attribute__((__pure__))
3803__attribute__((__artificial__))
3804static inline char *
3805RREGEXP_SRC_END(VALUE rexp)
3806{
3807 return RSTRING_END(RREGEXP_SRC(rexp));
3808}
3809
3810
3814
3815
3816__attribute__((__artificial__))
3817static inline long
3818RSTRUCT_LEN(VALUE st)
3819{
3820 ((void)0);
3821 return rb_num2long_inline(rb_struct_size(st));
3822}
3823__attribute__((__artificial__))
3824static inline VALUE
3825RSTRUCT_SET(VALUE st, int k, VALUE v)
3826{
3827 ((void)0);
3828 return rb_struct_aset(st, rb_int2num_inline(k), (v));
3829}
3830__attribute__((__artificial__))
3831static inline VALUE
3832RSTRUCT_GET(VALUE st, int k)
3833{
3834 ((void)0);
3835 return rb_struct_aref(st, rb_int2num_inline(k));
3836}
3837enum
3838
3839rbimpl_typeddata_flags {
3840 RUBY_TYPED_FREE_IMMEDIATELY = 1,
3841 RUBY_TYPED_FROZEN_SHAREABLE = RUBY_FL_SHAREABLE,
3842 RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED,
3843 RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1
3844};
3845typedef struct rb_data_type_struct rb_data_type_t;
3846struct rb_data_type_struct {
3847 const char *wrap_struct_name;
3848 struct {
3851 size_t (*dsize)(const void *);
3853 void *reserved[1];
3854 } function;
3855 const rb_data_type_t *parent;
3856 void *data;
3857 VALUE flags;
3858};
3859struct RTypedData {
3860 struct RBasic basic;
3861 const rb_data_type_t *type;
3863 void *data;
3864};
3865
3866
3867__attribute__((__nonnull__ (3)))
3868VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *type);
3869VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);
3870int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);
3871int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);
3872void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
3873
3874
3875__attribute__((__pure__))
3876__attribute__((__artificial__))
3877static inline _Bool
3878rbimpl_rtypeddata_p(VALUE obj)
3879{
3880 return ((struct RTypedData *)(obj))->typed_flag == 1;
3881}
3882__attribute__((__pure__))
3883__attribute__((__artificial__))
3884static inline _Bool
3885RTYPEDDATA_P(VALUE obj)
3886{
3887 return rbimpl_rtypeddata_p(obj);
3888}
3889__attribute__((__pure__))
3890__attribute__((__artificial__))
3891static inline const struct rb_data_type_struct *
3892RTYPEDDATA_TYPE(VALUE obj)
3893{
3894 return ((struct RTypedData *)(obj))->type;
3895}
3896static inline VALUE
3897rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
3898{
3899 VALUE result = rb_data_typed_object_zalloc(klass, size, type); (*datap) = ((void *)(((struct RTypedData *)(result))->data)); ((void)(*datap));
3900 return result;
3901}
3902__attribute__((__deprecated__ ("by: rb_data_typed_object_wrap")))
3903static inline VALUE
3904rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
3905{
3906 return rb_data_typed_object_wrap(klass, datap, type);
3907}
3908
3909int isalnum (int __c);
3910int isalpha (int __c);
3911int iscntrl (int __c);
3912int isdigit (int __c);
3913int isgraph (int __c);
3914int islower (int __c);
3915int isprint (int __c);
3916int ispunct (int __c);
3917int isspace (int __c);
3918int isupper (int __c);
3919int isxdigit (int __c);
3920int tolower (int __c);
3921int toupper (int __c);
3922int isblank (int __c);
3923int isascii (int __c);
3924int toascii (int __c);
3925extern int isalnum_l (int __c, locale_t __l);
3926extern int isalpha_l (int __c, locale_t __l);
3927extern int isblank_l (int __c, locale_t __l);
3928extern int iscntrl_l (int __c, locale_t __l);
3929extern int isdigit_l (int __c, locale_t __l);
3930extern int isgraph_l (int __c, locale_t __l);
3931extern int islower_l (int __c, locale_t __l);
3932extern int isprint_l (int __c, locale_t __l);
3933extern int ispunct_l (int __c, locale_t __l);
3934extern int isspace_l (int __c, locale_t __l);
3935extern int isupper_l (int __c, locale_t __l);
3936extern int isxdigit_l(int __c, locale_t __l);
3937extern int tolower_l (int __c, locale_t __l);
3938extern int toupper_l (int __c, locale_t __l);
3939extern int isascii_l (int __c, locale_t __l);
3940extern int toascii_l (int __c, locale_t __l);
3941extern __attribute__((dllimport)) const char _ctype_[];
3942const char *__locale_ctype_ptr (void);
3943const char *__locale_ctype_ptr_l (locale_t);
3944
3945
3946
3947__attribute__((__nonnull__ ()))
3948int rb_st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
3949__attribute__((__nonnull__ ()))
3950int rb_st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
3951__attribute__((__nonnull__ (1)))
3952unsigned long ruby_strtoul(const char *str, char **endptr, int base);
3953
3954
3955__attribute__((__const__))
3956
3957__attribute__((__artificial__))
3958static inline int
3959rb_isascii(int c)
3960{
3961 return '\0' <= c && c <= '\x7f';
3962}
3963__attribute__((__const__))
3964
3965__attribute__((__artificial__))
3966static inline int
3967rb_isupper(int c)
3968{
3969 return 'A' <= c && c <= 'Z';
3970}
3971__attribute__((__const__))
3972
3973__attribute__((__artificial__))
3974static inline int
3975rb_islower(int c)
3976{
3977 return 'a' <= c && c <= 'z';
3978}
3979__attribute__((__const__))
3980
3981__attribute__((__artificial__))
3982static inline int
3983rb_isalpha(int c)
3984{
3985 return rb_isupper(c) || rb_islower(c);
3986}
3987__attribute__((__const__))
3988
3989__attribute__((__artificial__))
3990static inline int
3991rb_isdigit(int c)
3992{
3993 return '0' <= c && c <= '9';
3994}
3995__attribute__((__const__))
3996
3997__attribute__((__artificial__))
3998static inline int
3999rb_isalnum(int c)
4000{
4001 return rb_isalpha(c) || rb_isdigit(c);
4002}
4003__attribute__((__const__))
4004
4005__attribute__((__artificial__))
4006static inline int
4007rb_isxdigit(int c)
4008{
4009 return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
4010}
4011__attribute__((__const__))
4012
4013__attribute__((__artificial__))
4014static inline int
4015rb_isblank(int c)
4016{
4017 return c == ' ' || c == '\t';
4018}
4019__attribute__((__const__))
4020
4021__attribute__((__artificial__))
4022static inline int
4023rb_isspace(int c)
4024{
4025 return c == ' ' || ('\t' <= c && c <= '\r');
4026}
4027__attribute__((__const__))
4028
4029__attribute__((__artificial__))
4030static inline int
4031rb_iscntrl(int c)
4032{
4033 return ('\0' <= c && c < ' ') || c == '\x7f';
4034}
4035__attribute__((__const__))
4036
4037__attribute__((__artificial__))
4038static inline int
4039rb_isprint(int c)
4040{
4041 return ' ' <= c && c <= '\x7e';
4042}
4043__attribute__((__const__))
4044
4045__attribute__((__artificial__))
4046static inline int
4047rb_ispunct(int c)
4048{
4049 return !rb_isalnum(c);
4050}
4051__attribute__((__const__))
4052
4053__attribute__((__artificial__))
4054static inline int
4055rb_isgraph(int c)
4056{
4057 return '!' <= c && c <= '\x7e';
4058}
4059__attribute__((__const__))
4060
4061__attribute__((__artificial__))
4062static inline int
4063rb_tolower(int c)
4064{
4065 return rb_isupper(c) ? (c|0x20) : c;
4066}
4067__attribute__((__const__))
4068
4069__attribute__((__artificial__))
4070static inline int
4071rb_toupper(int c)
4072{
4073 return rb_islower(c) ? (c&0x5f) : c;
4074}
4075
4076
4077__attribute__((__nonnull__ ()))
4078VALUE rb_eval_string(const char *str);
4079__attribute__((__nonnull__ (1)))
4080VALUE rb_eval_string_protect(const char *str, int *state);
4081__attribute__((__nonnull__ (1)))
4082VALUE rb_eval_string_wrap(const char *str, int *state);
4083VALUE rb_funcall(VALUE recv, ID mid, int n, ...);
4084VALUE rb_funcallv(VALUE recv, ID mid, int argc, const VALUE *argv);
4085VALUE rb_funcallv_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4086VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, const VALUE *argv);
4087VALUE rb_funcallv_public_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4088VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv);
4089VALUE rb_funcall_passing_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, int kw_splat);
4090VALUE rb_funcall_with_block(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval);
4091VALUE rb_funcall_with_block_kw(VALUE recv, ID mid, int argc, const VALUE *argv, VALUE procval, int kw_splat);
4092VALUE rb_call_super(int argc, const VALUE *argv);
4093VALUE rb_call_super_kw(int argc, const VALUE *argv, int kw_splat);
4094VALUE rb_current_receiver(void);
4095__attribute__((__nonnull__ (2)))
4096int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values);
4097__attribute__((__nonnull__ ()))
4099
4100
4101typedef uint32_t rb_event_flag_t;
4102typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass);
4103
4104
4105void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
4106int rb_remove_event_hook(rb_event_hook_func_t func);
4107
4108
4109
4110
4111void rb_gc_register_address(VALUE *valptr);
4113void rb_gc_unregister_address(VALUE *valptr);
4114void rb_gc_register_mark_object(VALUE object);
4115
4116
4117
4118
4119typedef int ruby_glob_func(const char *path, VALUE arg, void *enc);
4120__attribute__((__nonnull__ ()))
4121void rb_glob(const char *pattern, void (*func)(const char *path, VALUE arg, void *enc), VALUE arg);
4122__attribute__((__nonnull__ ()))
4123int ruby_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4124__attribute__((__nonnull__ ()))
4125int ruby_brace_glob(const char *pattern, int flags, ruby_glob_func *func, VALUE arg);
4126
4127
4128
4129
4130extern VALUE rb_mKernel;
4131extern VALUE rb_mComparable;
4132extern VALUE rb_mEnumerable;
4133extern VALUE rb_mErrno;
4134extern VALUE rb_mFileTest;
4135extern VALUE rb_mGC;
4136extern VALUE rb_mMath;
4137extern VALUE rb_mProcess;
4138extern VALUE rb_mWaitReadable;
4139extern VALUE rb_mWaitWritable;
4140extern VALUE rb_cBasicObject;
4142extern VALUE rb_cArray;
4143extern VALUE rb_cBinding;
4144extern VALUE rb_cClass;
4145extern VALUE rb_cDir;
4146extern VALUE rb_cEncoding;
4147extern VALUE rb_cEnumerator;
4148extern VALUE rb_cFalseClass;
4149extern VALUE rb_cFile;
4150extern VALUE rb_cComplex;
4151extern VALUE rb_cFloat;
4152extern VALUE rb_cHash;
4153extern VALUE rb_cIO;
4154extern VALUE rb_cInteger;
4155extern VALUE rb_cMatch;
4156extern VALUE rb_cMethod;
4157extern VALUE rb_cModule;
4158extern VALUE rb_cRefinement;
4160extern VALUE rb_cNilClass;
4161extern VALUE rb_cNumeric;
4162extern VALUE rb_cProc;
4163extern VALUE rb_cRandom;
4164extern VALUE rb_cRange;
4165extern VALUE rb_cRational;
4166extern VALUE rb_cRegexp;
4167extern VALUE rb_cStat;
4168extern VALUE rb_cString;
4169extern VALUE rb_cStruct;
4170extern VALUE rb_cSymbol;
4171extern VALUE rb_cThread;
4172extern VALUE rb_cTime;
4173extern VALUE rb_cTrueClass;
4175extern VALUE rb_eException;
4177extern VALUE rb_eSystemExit;
4178extern VALUE rb_eInterrupt;
4179extern VALUE rb_eSignal;
4180extern VALUE rb_eFatal;
4181extern VALUE rb_eArgError;
4182extern VALUE rb_eEOFError;
4183extern VALUE rb_eIndexError;
4185extern VALUE rb_eKeyError;
4186extern VALUE rb_eRangeError;
4187extern VALUE rb_eIOError;
4188extern VALUE rb_eRuntimeError;
4189extern VALUE rb_eFrozenError;
4192extern VALUE rb_eThreadError;
4193extern VALUE rb_eTypeError;
4194extern VALUE rb_eZeroDivError;
4195extern VALUE rb_eNotImpError;
4196extern VALUE rb_eNoMemError;
4201extern VALUE rb_eRegexpError;
4206extern VALUE rb_eScriptError;
4207extern VALUE rb_eNameError;
4208extern VALUE rb_eSyntaxError;
4209extern VALUE rb_eLoadError;
4211extern VALUE rb_stdin;
4212extern VALUE rb_stdout;
4213extern VALUE rb_stderr;
4214__attribute__((__pure__))
4215static inline VALUE
4216rb_class_of(VALUE obj)
4217{
4218 if (! RB_SPECIAL_CONST_P(obj)) {
4219 return RBASIC_CLASS(obj);
4220 }
4221 else if (obj == ((VALUE)RUBY_Qfalse)) {
4222 return rb_cFalseClass;
4223 }
4224 else if (obj == ((VALUE)RUBY_Qnil)) {
4225 return rb_cNilClass;
4226 }
4227 else if (obj == ((VALUE)RUBY_Qtrue)) {
4228 return rb_cTrueClass;
4229 }
4230 else if (RB_FIXNUM_P(obj)) {
4231 return rb_cInteger;
4232 }
4233 else if (RB_STATIC_SYM_P(obj)) {
4234 return rb_cSymbol;
4235 }
4236 else if (RB_FLONUM_P(obj)) {
4237 return rb_cFloat;
4238 }
4239 __builtin_unreachable();
4240}
4241
4242
4243
4244
4245__attribute__((__nonnull__ ()))
4246void ruby_sysinit(int *argc, char ***argv);
4247void ruby_init(void);
4248void* ruby_options(int argc, char** argv);
4249int ruby_executable_node(void *n, int *status);
4250int ruby_run_node(void *n);
4251void ruby_show_version(void);
4252void ruby_show_copyright(void);
4253void ruby_init_stack(volatile VALUE *addr);
4254int ruby_setup(void);
4255int ruby_cleanup(int ex);
4256void ruby_finalize(void);
4257__attribute__((__noreturn__))
4258void ruby_stop(int);
4259int ruby_stack_check(void);
4260size_t ruby_stack_length(VALUE **topnotch);
4261int ruby_exec_node(void *n);
4262void ruby_script(const char* name);
4263void ruby_set_script_name(VALUE name);
4264void ruby_prog_init(void);
4265void ruby_set_argv(int argc, char **argv);
4266void *ruby_process_options(int argc, char **argv);
4267void ruby_init_loadpath(void);
4268void ruby_incpush(const char *path);
4269void ruby_sig_finalize(void);
4270
4271
4272
4273
4274typedef VALUE rb_block_call_func(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4275typedef rb_block_call_func *rb_block_call_func_t;
4276VALUE rb_each(VALUE obj);
4277VALUE rb_yield(VALUE val);
4278VALUE rb_yield_values(int n, ...);
4279VALUE rb_yield_values2(int n, const VALUE *argv);
4280VALUE rb_yield_values_kw(int n, const VALUE *argv, int kw_splat);
4281VALUE rb_yield_splat(VALUE ary);
4282VALUE rb_yield_splat_kw(VALUE ary, int kw_splat);
4283VALUE rb_yield_block(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg);
4284int rb_keyword_given_p(void);
4285int rb_block_given_p(void);
4286void rb_need_block(void);
4287__attribute__((__deprecated__ ("by: rb_block_call since 1.9")))
4288VALUE rb_iterate(VALUE (*func1)(VALUE), VALUE data1, rb_block_call_func_t proc, VALUE data2);
4289VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2);
4290VALUE rb_block_call_kw(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2, int kw_splat);
4291VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);
4292VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...);
4293VALUE rb_vrescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, va_list ap);
4294VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
4295VALUE rb_catch(const char *tag, rb_block_call_func_t func, VALUE data);
4296VALUE rb_catch_obj(VALUE tag, rb_block_call_func_t func, VALUE data);
4297__attribute__((__noreturn__))
4298void rb_throw(const char *tag, VALUE val);
4299__attribute__((__noreturn__))
4300void rb_throw_obj(VALUE tag, VALUE val);
4301
4302
4303struct rbimpl_size_mul_overflow_tag {
4304 _Bool left;
4305 size_t right;
4306};
4307
4308
4309__attribute__((__malloc__))
4310__attribute__((__returns_nonnull__))
4311__attribute__((__alloc_size__ (2)))
4312__attribute__((__nonnull__ ()))
4313void *rb_alloc_tmp_buffer(volatile VALUE *store, long len);
4314__attribute__((__malloc__))
4315__attribute__((__returns_nonnull__))
4316__attribute__((__alloc_size__ (2,3)))
4317__attribute__((__nonnull__ ()))
4318void *rb_alloc_tmp_buffer_with_count(volatile VALUE *store, size_t len,size_t count);
4319void rb_free_tmp_buffer(volatile VALUE *store);
4320__attribute__((__noreturn__))
4321void ruby_malloc_size_overflow(size_t x, size_t y);
4322
4323
4324static inline int
4325rb_mul_size_overflow(size_t a, size_t b, size_t max, size_t *c)
4326{
4327 __extension__ unsigned __int128 da, db, c2;
4328 da = a;
4329 db = b;
4330 c2 = da * db;
4331 if (c2 > max) return 1;
4332 *c = ((size_t)c2);
4333 return 0;
4334}
4335
4336__attribute__((__const__))
4337static inline struct rbimpl_size_mul_overflow_tag
4338rbimpl_size_mul_overflow(size_t x, size_t y)
4339{
4340 struct rbimpl_size_mul_overflow_tag ret = { 0, 0, };
4341 ret.left = __builtin_mul_overflow(x, y, &ret.right);
4342 return ret;
4343}
4344static inline size_t
4345rbimpl_size_mul_or_raise(size_t x, size_t y)
4346{
4347 struct rbimpl_size_mul_overflow_tag size =
4348 rbimpl_size_mul_overflow(x, y);
4349 if ((__builtin_expect(!!(! size.left), 1))) {
4350 return size.right;
4351 }
4352 else {
4353 ruby_malloc_size_overflow(x, y);
4354 __builtin_unreachable();
4355 }
4356}
4357static inline void *
4358rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
4359{
4360 const size_t total_size = rbimpl_size_mul_or_raise(count, elsize);
4361 const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
4362 return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
4363}
4364
4365
4366
4367__attribute__((__nonnull__ (1)))
4368__attribute__((__returns_nonnull__))
4369static inline void *
4370ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
4371{
4372 if (n) {
4373 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));
4374 }
4375 else {
4376 return dest;
4377 }
4378}
4379
4380
4381
4382
4383__attribute__((__nonnull__ ()))
4384VALUE rb_define_class(const char *name, VALUE super);
4385__attribute__((__nonnull__ ()))
4386VALUE rb_define_module(const char *name);
4387__attribute__((__nonnull__ ()))
4388VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super);
4389__attribute__((__nonnull__ ()))
4390VALUE rb_define_module_under(VALUE outer, const char *name);
4391void rb_include_module(VALUE klass, VALUE module);
4392void rb_extend_object(VALUE obj, VALUE mod);
4393void rb_prepend_module(VALUE klass, VALUE module);
4394
4395
4396
4397
4398VALUE rb_newobj(void);
4399VALUE rb_newobj_of(VALUE klass, VALUE flags);
4400VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);
4403void rb_singleton_class_attached(VALUE klass, VALUE obj);
4404void rb_copy_generic_ivar(VALUE clone, VALUE obj);
4405
4406
4407__attribute__((__deprecated__ ("This is no longer how Object#clone works.")))
4408static inline void
4409rb_clone_setup(VALUE clone, VALUE obj)
4410{
4411 return;
4412}
4413__attribute__((__deprecated__ ("This is no longer how Object#dup works.")))
4414static inline void
4415rb_dup_setup(VALUE dup, VALUE obj)
4416{
4417 return;
4418}
4419
4420
4421__attribute__((__nonnull__ ()))
4422
4423void rb_mem_clear(VALUE *buf, long len)
4424
4425 ;
4426VALUE rb_assoc_new(VALUE car, VALUE cdr);
4427VALUE rb_check_array_type(VALUE obj);
4428VALUE rb_ary_new(void);
4429VALUE rb_ary_new_capa(long capa);
4430VALUE rb_ary_new_from_args(long n, ...);
4431VALUE rb_ary_new_from_values(long n, const VALUE *elts);
4432VALUE rb_ary_hidden_new(long capa);
4433void rb_ary_free(VALUE ary);
4434void rb_ary_modify(VALUE ary);
4435VALUE rb_ary_freeze(VALUE obj);
4436__attribute__((__pure__))
4437VALUE rb_ary_shared_with_p(VALUE lhs, VALUE rhs);
4438VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary);
4439VALUE rb_ary_subseq(VALUE ary, long beg, long len);
4440void rb_ary_store(VALUE ary, long key, VALUE val);
4441VALUE rb_ary_dup(VALUE ary);
4442VALUE rb_ary_resurrect(VALUE ary);
4443VALUE rb_ary_to_ary(VALUE obj);
4444VALUE rb_ary_to_s(VALUE ary);
4445VALUE rb_ary_cat(VALUE ary, const VALUE *train, long len);
4446VALUE rb_ary_push(VALUE ary, VALUE elem);
4447VALUE rb_ary_pop(VALUE ary);
4448VALUE rb_ary_shift(VALUE ary);
4449VALUE rb_ary_unshift(VALUE ary, VALUE elem);
4450__attribute__((__pure__))
4451VALUE rb_ary_entry(VALUE ary, long off);
4452VALUE rb_ary_each(VALUE ary);
4453VALUE rb_ary_join(VALUE ary, VALUE sep);
4454VALUE rb_ary_reverse(VALUE ary);
4455VALUE rb_ary_rotate(VALUE ary, long rot);
4456VALUE rb_ary_sort(VALUE ary);
4457VALUE rb_ary_sort_bang(VALUE ary);
4458VALUE rb_ary_delete(VALUE ary, VALUE elem);
4459VALUE rb_ary_delete_at(VALUE ary, long pos);
4460VALUE rb_ary_clear(VALUE ary);
4461VALUE rb_ary_plus(VALUE lhs, VALUE rhs);
4462VALUE rb_ary_concat(VALUE lhs, VALUE rhs);
4463VALUE rb_ary_assoc(VALUE alist, VALUE key);
4464VALUE rb_ary_rassoc(VALUE alist, VALUE key);
4465VALUE rb_ary_includes(VALUE ary, VALUE elem);
4466VALUE rb_ary_cmp(VALUE lhs, VALUE rhs);
4467VALUE rb_ary_replace(VALUE copy, VALUE orig);
4468VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func)(VALUE obj, long oidx));
4469VALUE rb_ary_resize(VALUE ary, long len);
4470
4471
4472
4473
4474VALUE rb_exc_new(VALUE etype, const char *ptr, long len);
4475__attribute__((__nonnull__ ()))
4476VALUE rb_exc_new_cstr(VALUE etype, const char *str);
4477VALUE rb_exc_new_str(VALUE etype, VALUE str);
4478__attribute__((__noreturn__))
4479__attribute__((__nonnull__ (1)))
4480__attribute__((__format__(__printf__, 1, 2)))
4481void rb_loaderror(const char *fmt, ...);
4482__attribute__((__noreturn__))
4483__attribute__((__nonnull__ (2)))
4484__attribute__((__format__(__printf__, 2, 3)))
4485void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
4486__attribute__((__noreturn__))
4487__attribute__((__nonnull__ (2)))
4488__attribute__((__format__(__printf__, 2, 3)))
4489void rb_name_error(ID name, const char *fmt, ...);
4490__attribute__((__noreturn__))
4491__attribute__((__nonnull__ (2)))
4492__attribute__((__format__(__printf__, 2, 3)))
4493void rb_name_error_str(VALUE name, const char *fmt, ...);
4494__attribute__((__noreturn__))
4495__attribute__((__nonnull__ (2)))
4496__attribute__((__format__(__printf__, 2, 3)))
4497void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);
4498__attribute__((__noreturn__))
4499__attribute__((__nonnull__ ()))
4500void rb_invalid_str(const char *str, const char *type);
4501__attribute__((__noreturn__))
4502__attribute__((__nonnull__ ()))
4503void rb_error_frozen(const char *what);
4504__attribute__((__noreturn__))
4505void rb_error_frozen_object(VALUE what);
4506void rb_check_frozen(VALUE obj);
4507void rb_check_copyable(VALUE obj, VALUE orig);
4508__attribute__((__noreturn__))
4509static void rb_error_arity(int argc, int min, int max);
4510
4511
4512static inline void
4513rb_check_frozen_inline(VALUE obj)
4514{
4515 if ((__builtin_expect(!!(RB_OBJ_FROZEN(obj)), 0))) {
4516 rb_error_frozen_object(obj);
4517 }
4518}
4519static inline int
4520rb_check_arity(int argc, int min, int max)
4521{
4522 if ((argc < min) || (max != (-1) && argc > max))
4523 rb_error_arity(argc, min, max);
4524 return argc;
4525}
4526
4527
4528__attribute__((__nonnull__ ()))
4529void rb_st_foreach_safe(struct st_table *st, st_foreach_callback_func *func, st_data_t arg);
4530VALUE rb_check_hash_type(VALUE obj);
4531__attribute__((__nonnull__ ()))
4532void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg);
4533VALUE rb_hash(VALUE obj);
4534VALUE rb_hash_new(void);
4535VALUE rb_hash_new_capa(long capa);
4536VALUE rb_hash_dup(VALUE hash);
4537VALUE rb_hash_freeze(VALUE obj);
4538VALUE rb_hash_aref(VALUE hash, VALUE key);
4539VALUE rb_hash_lookup(VALUE hash, VALUE key);
4540VALUE rb_hash_lookup2(VALUE hash, VALUE key, VALUE def);
4541VALUE rb_hash_fetch(VALUE hash, VALUE key);
4542VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val);
4543VALUE rb_hash_clear(VALUE hash);
4544VALUE rb_hash_delete_if(VALUE hash);
4545VALUE rb_hash_delete(VALUE hash, VALUE key);
4546void rb_hash_bulk_insert(long argc, const VALUE *argv, VALUE hash);
4547typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value);
4548VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func);
4549int rb_path_check(const char *path);
4550VALUE rb_env_clear(void);
4551VALUE rb_hash_size(VALUE hash);
4552
4553
4554
4555
4556VALUE rb_block_proc(void);
4557VALUE rb_block_lambda(void);
4558VALUE rb_proc_new(rb_block_call_func_t func, VALUE callback_arg);
4559VALUE rb_obj_is_proc(VALUE recv);
4560VALUE rb_proc_call(VALUE recv, VALUE args);
4561VALUE rb_proc_call_kw(VALUE recv, VALUE args, int kw_splat);
4562VALUE rb_proc_call_with_block(VALUE recv, int argc, const VALUE *argv, VALUE proc);
4563VALUE rb_proc_call_with_block_kw(VALUE recv, int argc, const VALUE *argv, VALUE proc, int kw_splat);
4564int rb_proc_arity(VALUE recv);
4565VALUE rb_proc_lambda_p(VALUE recv);
4566VALUE rb_binding_new(void);
4567VALUE rb_obj_method(VALUE recv, VALUE mid);
4568VALUE rb_obj_is_method(VALUE recv);
4569VALUE rb_method_call(int argc, const VALUE *argv, VALUE recv);
4570VALUE rb_method_call_kw(int argc, const VALUE *argv, VALUE recv, int kw_splat);
4571VALUE rb_method_call_with_block(int argc, const VALUE *argv, VALUE recv, VALUE proc);
4572VALUE rb_method_call_with_block_kw(int argc, const VALUE *argv, VALUE recv, VALUE proc, int kw_splat);
4573int rb_mod_method_arity(VALUE mod, ID mid);
4574int rb_obj_method_arity(VALUE obj, ID mid);
4575__attribute__((__nonnull__ (1)))
4576VALUE rb_protect(VALUE (*func)(VALUE args), VALUE args, int *state);
4577
4578
4579
4580
4581__attribute__((__nonnull__ (2, 3)))
4582int rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...);
4583__attribute__((__nonnull__ (3, 4)))
4584int rb_scan_args_kw(int kw_splat, int argc, const VALUE *argv, const char *fmt, ...);
4585__attribute__((__error__ ("bad scan arg format")))
4586void rb_scan_args_bad_format(const char*);
4587__attribute__((__error__ ("variable argument length doesn't match")))
4588void rb_scan_args_length_mismatch(const char*,int);
4589
4590
4591static inline _Bool
4592rb_scan_args_keyword_p(int kw_flag, VALUE last)
4593{
4594 switch (kw_flag) {
4595 case 0:
4596 return !! rb_keyword_given_p();
4597 case 1:
4598 return 1;
4599 case 3:
4600 return RB_TYPE_P(last, RUBY_T_HASH);
4601 default:
4602 return 0;
4603 }
4604}
4605__attribute__((__always_inline__)) inline
4606static _Bool
4607rb_scan_args_lead_p(const char *fmt)
4608{
4609 return (((unsigned char)((fmt[0])-'0'))<10);
4610}
4611__attribute__((__always_inline__)) inline
4612static int
4613rb_scan_args_n_lead(const char *fmt)
4614{
4615 return (rb_scan_args_lead_p(fmt) ? fmt[0]-'0' : 0);
4616}
4617__attribute__((__always_inline__)) inline
4618static _Bool
4619rb_scan_args_opt_p(const char *fmt)
4620{
4621 return (rb_scan_args_lead_p(fmt) && (((unsigned char)((fmt[1])-'0'))<10));
4622}
4623__attribute__((__always_inline__)) inline
4624static int
4625rb_scan_args_n_opt(const char *fmt)
4626{
4627 return (rb_scan_args_opt_p(fmt) ? fmt[1]-'0' : 0);
4628}
4629__attribute__((__always_inline__)) inline
4630static int
4631rb_scan_args_var_idx(const char *fmt)
4632{
4633 return (!rb_scan_args_lead_p(fmt) ? 0 : !(((unsigned char)((fmt[1])-'0'))<10) ? 1 : 2);
4634}
4635__attribute__((__always_inline__)) inline
4636static _Bool
4637rb_scan_args_f_var(const char *fmt)
4638{
4639 return (fmt[rb_scan_args_var_idx(fmt)]=='*');
4640}
4641__attribute__((__always_inline__)) inline
4642static int
4643rb_scan_args_trail_idx(const char *fmt)
4644{
4645 const int idx = rb_scan_args_var_idx(fmt);
4646 return idx+(fmt[idx]=='*');
4647}
4648__attribute__((__always_inline__)) inline
4649static int
4650rb_scan_args_n_trail(const char *fmt)
4651{
4652 const int idx = rb_scan_args_trail_idx(fmt);
4653 return ((((unsigned char)((fmt[idx])-'0'))<10) ? fmt[idx]-'0' : 0);
4654}
4655__attribute__((__always_inline__)) inline
4656static int
4657rb_scan_args_hash_idx(const char *fmt)
4658{
4659 const int idx = rb_scan_args_trail_idx(fmt);
4660 return idx+(((unsigned char)((fmt[idx])-'0'))<10);
4661}
4662__attribute__((__always_inline__)) inline
4663static _Bool
4664rb_scan_args_f_hash(const char *fmt)
4665{
4666 return (fmt[rb_scan_args_hash_idx(fmt)]==':');
4667}
4668__attribute__((__always_inline__)) inline
4669static int
4670rb_scan_args_block_idx(const char *fmt)
4671{
4672 const int idx = rb_scan_args_hash_idx(fmt);
4673 return idx+(fmt[idx]==':');
4674}
4675__attribute__((__always_inline__)) inline
4676static _Bool
4677rb_scan_args_f_block(const char *fmt)
4678{
4679 return (fmt[rb_scan_args_block_idx(fmt)]=='&');
4680}
4681__attribute__((__always_inline__)) inline
4682static int
4683rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
4684 int n_lead, int n_opt, int n_trail,
4685 _Bool f_var, _Bool f_hash, _Bool f_block,
4686 VALUE *vars[], const char *fmt [[maybe_unused]], int varc [[maybe_unused]])
4687
4688
4689{
4690 int i, argi = 0, vari = 0;
4691 VALUE *var, hash = ((VALUE)RUBY_Qnil);
4692 const int n_mand = n_lead + n_trail;
4693 if (f_hash && argc > 0) {
4694 VALUE last = argv[argc - 1];
4695 if (rb_scan_args_keyword_p(kw_flag, last)) {
4696 hash = rb_hash_dup(last);
4697 argc--;
4698 }
4699 }
4700 if (argc < n_mand) {
4701 goto argc_error;
4702 }
4703 for (i = 0; i < n_lead; i++) {
4704 var = vars[vari++];
4705 if (var) *var = argv[argi];
4706 argi++;
4707 }
4708 for (i = 0; i < n_opt; i++) {
4709 var = vars[vari++];
4710 if (argi < argc - n_trail) {
4711 if (var) *var = argv[argi];
4712 argi++;
4713 }
4714 else {
4715 if (var) *var = ((VALUE)RUBY_Qnil);
4716 }
4717 }
4718 if (f_var) {
4719 int n_var = argc - argi - n_trail;
4720 var = vars[vari++];
4721 if (0 < n_var) {
4722 if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
4723 argi += n_var;
4724 }
4725 else {
4726 if (var) *var = rb_ary_new();
4727 }
4728 }
4729 for (i = 0; i < n_trail; i++) {
4730 var = vars[vari++];
4731 if (var) *var = argv[argi];
4732 argi++;
4733 }
4734 if (f_hash) {
4735 var = vars[vari++];
4736 if (var) *var = hash;
4737 }
4738 if (f_block) {
4739 var = vars[vari++];
4740 if (rb_block_given_p()) {
4741 *var = rb_block_proc();
4742 }
4743 else {
4744 *var = ((VALUE)RUBY_Qnil);
4745 }
4746 }
4747 if (argi == argc) {
4748 return argc;
4749 }
4750 argc_error:
4751 rb_error_arity(argc, n_mand, f_var ? (-1) : n_mand + n_opt);
4752 __builtin_unreachable();
4753}
4754
4755
4756ID rb_sym2id(VALUE obj);
4757VALUE rb_id2sym(ID id);
4758__attribute__((__nonnull__ ()))
4759ID rb_intern(const char *name);
4760ID rb_intern2(const char *name, long len);
4761ID rb_intern_str(VALUE str);
4762const char *rb_id2name(ID id);
4763__attribute__((__nonnull__ ()))
4764ID rb_check_id(volatile VALUE *namep);
4765ID rb_to_id(VALUE str);
4766VALUE rb_id2str(ID id);
4767VALUE rb_sym2str(VALUE id);
4768VALUE rb_to_symbol(VALUE name);
4769__attribute__((__nonnull__ ()))
4770VALUE rb_check_symbol(volatile VALUE *namep);
4771
4772
4773__attribute__((__pure__))
4774__attribute__((__nonnull__ ()))
4775static inline ID
4776rb_intern_const(const char *str)
4777{
4778 size_t len = strlen(str);
4779 return rb_intern2(str, ((long)len));
4780}
4781
4782__attribute__((__nonnull__ ()))
4783static inline ID
4784rbimpl_intern_const(ID *ptr, const char *str)
4785{
4786 while (! *ptr) {
4787 *ptr = rb_intern_const(str);
4788 }
4789 return *ptr;
4790}
4791
4792
4793typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);
4794typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data);
4795typedef void rb_gvar_marker_t(VALUE *var);
4796rb_gvar_getter_t rb_gvar_undef_getter;
4797rb_gvar_setter_t rb_gvar_undef_setter;
4798rb_gvar_marker_t rb_gvar_undef_marker;
4799rb_gvar_getter_t rb_gvar_val_getter;
4800rb_gvar_setter_t rb_gvar_val_setter;
4801rb_gvar_marker_t rb_gvar_val_marker;
4802rb_gvar_getter_t rb_gvar_var_getter;
4803rb_gvar_setter_t rb_gvar_var_setter;
4804rb_gvar_marker_t rb_gvar_var_marker;
4805__attribute__((__noreturn__))
4806rb_gvar_setter_t rb_gvar_readonly_setter;
4807__attribute__((__nonnull__ ()))
4808void rb_define_variable(const char *name, VALUE *var);
4809__attribute__((__nonnull__ (1)))
4810void rb_define_virtual_variable(const char *name, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4811__attribute__((__nonnull__ (1)))
4812void rb_define_hooked_variable(const char *name, VALUE *var, rb_gvar_getter_t *getter, rb_gvar_setter_t *setter);
4813__attribute__((__nonnull__ ()))
4814void rb_define_readonly_variable(const char *name, const VALUE *var);
4815__attribute__((__nonnull__ ()))
4816void rb_define_const(VALUE klass, const char *name, VALUE val);
4817__attribute__((__nonnull__ ()))
4818void rb_define_global_const(const char *name, VALUE val);
4819__attribute__((__nonnull__ ()))
4820void rb_deprecate_constant(VALUE mod, const char *name);
4821__attribute__((__nonnull__ ()))
4822VALUE rb_gv_set(const char *name, VALUE val);
4823__attribute__((__nonnull__ ()))
4824VALUE rb_gv_get(const char *name);
4825__attribute__((__nonnull__ ()))
4826VALUE rb_iv_get(VALUE obj, const char *name);
4827__attribute__((__nonnull__ ()))
4828VALUE rb_iv_set(VALUE obj, const char *name, VALUE val);
4829
4830
4831
4832
4833VALUE rb_get_path(VALUE obj);
4834VALUE rb_get_path_no_checksafe(VALUE);
4835__attribute__((__error__ (" argument length doesn't match"))) int rb_varargs_bad_length(int,int);
4836const char *rb_class2name(VALUE klass);
4837const char *rb_obj_classname(VALUE obj);
4838void rb_p(VALUE obj);
4839VALUE rb_equal(VALUE lhs, VALUE rhs);
4840VALUE rb_require(const char *feature);
4841
4842
4843VALUE rb_big_new(size_t len, int sign);
4844int rb_bigzero_p(VALUE x);
4845VALUE rb_big_clone(VALUE num);
4846void rb_big_2comp(VALUE num);
4847VALUE rb_big_norm(VALUE x);
4848void rb_big_resize(VALUE big, size_t len);
4849__attribute__((__nonnull__ ()))
4850VALUE rb_cstr_to_inum(const char *str, int base, int badcheck);
4851VALUE rb_str_to_inum(VALUE str, int base, int badcheck);
4852__attribute__((__nonnull__ ()))
4853VALUE rb_cstr2inum(const char *str, int base);
4854VALUE rb_str2inum(VALUE str, int base);
4855VALUE rb_big2str(VALUE x, int base);
4856long rb_big2long(VALUE x);
4857unsigned long rb_big2ulong(VALUE x);
4858long long rb_big2ll(VALUE);
4859unsigned long long rb_big2ull(VALUE);
4860__attribute__((__nonnull__ ()))
4861void rb_big_pack(VALUE val, unsigned long *buf, long num_longs);
4862__attribute__((__nonnull__ ()))
4863VALUE rb_big_unpack(unsigned long *buf, long num_longs);
4864__attribute__((__nonnull__ ()))
4865int rb_uv_to_utf8(char buf[6], unsigned long uv);
4866VALUE rb_dbl2big(double d);
4867double rb_big2dbl(VALUE x);
4868VALUE rb_big_cmp(VALUE lhs, VALUE rhs);
4869VALUE rb_big_eq(VALUE lhs, VALUE rhs);
4870VALUE rb_big_eql(VALUE lhs, VALUE rhs);
4871VALUE rb_big_plus(VALUE x, VALUE y);
4872VALUE rb_big_minus(VALUE x, VALUE y);
4873VALUE rb_big_mul(VALUE x, VALUE y);
4874VALUE rb_big_div(VALUE x, VALUE y);
4875VALUE rb_big_idiv(VALUE x, VALUE y);
4876VALUE rb_big_modulo(VALUE x, VALUE y);
4877VALUE rb_big_divmod(VALUE x, VALUE y);
4878VALUE rb_big_pow(VALUE x, VALUE y);
4879VALUE rb_big_and(VALUE x, VALUE y);
4880VALUE rb_big_or(VALUE x, VALUE y);
4881VALUE rb_big_xor(VALUE x, VALUE y);
4882VALUE rb_big_lshift(VALUE x, VALUE y);
4883VALUE rb_big_rshift(VALUE x, VALUE y);
4884__attribute__((__nonnull__ ()))
4885int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4886__attribute__((__nonnull__ ()))
4887VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
4888size_t rb_absint_size(VALUE val, int *nlz_bits_ret);
4889size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret);
4890int rb_absint_singlebit_p(VALUE val);
4891
4892
4893
4894
4895int rb_cmpint(VALUE val, VALUE a, VALUE b);
4896__attribute__((__cold__))
4897__attribute__((__noreturn__))
4898void rb_cmperr(VALUE a, VALUE b);
4899
4900
4901
4902
4903VALUE rb_complex_raw(VALUE real, VALUE imag);
4904VALUE rb_complex_new(VALUE real, VALUE imag);
4905VALUE rb_complex_new_polar(VALUE abs, VALUE arg);
4906__attribute__((__deprecated__ ("by: rb_complex_new_polar")))
4907VALUE rb_complex_polar(VALUE abs, VALUE arg);
4908__attribute__((__pure__))
4909VALUE rb_complex_real(VALUE z);
4910__attribute__((__pure__))
4911VALUE rb_complex_imag(VALUE z);
4912VALUE rb_complex_plus(VALUE x, VALUE y);
4913VALUE rb_complex_minus(VALUE x, VALUE y);
4914VALUE rb_complex_mul(VALUE x, VALUE y);
4915VALUE rb_complex_div(VALUE x, VALUE y);
4916VALUE rb_complex_uminus(VALUE z);
4917VALUE rb_complex_conjugate(VALUE z);
4918VALUE rb_complex_abs(VALUE z);
4919VALUE rb_complex_arg(VALUE z);
4920VALUE rb_complex_pow(VALUE base, VALUE exp);
4921VALUE rb_dbl_complex_new(double real, double imag);
4922VALUE rb_Complex(VALUE real, VALUE imag);
4923
4924
4925
4926
4927VALUE rb_fiber_new(rb_block_call_func_t func, VALUE callback_obj);
4928VALUE rb_fiber_new_storage(rb_block_call_func_t func, VALUE callback_obj, VALUE storage);
4929VALUE rb_fiber_current(void);
4930VALUE rb_fiber_alive_p(VALUE fiber);
4931VALUE rb_obj_is_fiber(VALUE obj);
4932VALUE rb_fiber_resume(VALUE fiber, int argc, const VALUE *argv);
4933VALUE rb_fiber_resume_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4934VALUE rb_fiber_yield(int argc, const VALUE *argv);
4935VALUE rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat);
4936VALUE rb_fiber_transfer(VALUE fiber, int argc, const VALUE *argv);
4937VALUE rb_fiber_transfer_kw(VALUE fiber, int argc, const VALUE *argv, int kw_splat);
4938VALUE rb_fiber_raise(VALUE fiber, int argc, const VALUE *argv);
4939
4940
4941
4942
4943VALUE rb_dir_getwd(void);
4944
4945
4946
4947
4948VALUE rb_enum_values_pack(int argc, const VALUE *argv);
4949
4950
4951
4952
4953__attribute__((__noreturn__))
4954void rb_exc_raise(VALUE exc);
4955__attribute__((__noreturn__))
4956void rb_exc_fatal(VALUE exc);
4957__attribute__((__noreturn__))
4958VALUE rb_f_exit(int argc, const VALUE *argv);
4959__attribute__((__noreturn__))
4960VALUE rb_f_abort(int argc, const VALUE *argv);
4961__attribute__((__noreturn__))
4962void rb_interrupt(void);
4963ID rb_frame_this_func(void);
4964__attribute__((__noreturn__))
4965void rb_jump_tag(int state);
4966void rb_obj_call_init(VALUE obj, int argc, const VALUE *argv);
4967void rb_obj_call_init_kw(VALUE, int, const VALUE*, int);
4968ID rb_frame_callee(void);
4969VALUE rb_make_exception(int argc, const VALUE *argv);
4970void rb_set_end_proc(void (*func)(VALUE arg), VALUE arg);
4971
4972
4973
4974
4975typedef VALUE rb_enumerator_size_func(VALUE recv, VALUE argv, VALUE eobj);
4976typedef struct {
4977 VALUE begin;
4978 VALUE end;
4979 VALUE step;
4980 int exclude_end;
4981} rb_arithmetic_sequence_components_t;
4982VALUE rb_enumeratorize(VALUE recv, VALUE meth, int argc, const VALUE *argv);
4983VALUE rb_enumeratorize_with_size(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func);
4984VALUE rb_enumeratorize_with_size_kw(VALUE recv, VALUE meth, int argc, const VALUE *argv, rb_enumerator_size_func *func, int kw_splat);
4985__attribute__((__nonnull__ ()))
4986int rb_arithmetic_sequence_extract(VALUE as, rb_arithmetic_sequence_components_t *buf);
4987__attribute__((__nonnull__ ()))
4988VALUE rb_arithmetic_sequence_beg_len_step(VALUE as, long *begp, long *lenp, long *stepp, long len, int err);
4989
4990
4991
4992
4993__attribute__((__nonnull__ ()))
4994VALUE rb_file_s_expand_path(int argc, const VALUE *argv);
4995VALUE rb_file_expand_path(VALUE fname, VALUE dname);
4996__attribute__((__nonnull__ ()))
4997VALUE rb_file_s_absolute_path(int argc, const VALUE *argv);
4998VALUE rb_file_absolute_path(VALUE fname, VALUE dname);
4999VALUE rb_file_dirname(VALUE fname);
5000__attribute__((__nonnull__ ()))
5001int rb_find_file_ext(VALUE *feature, const char *const *exts);
5002VALUE rb_find_file(VALUE path);
5003VALUE rb_file_directory_p(VALUE _, VALUE path);
5004VALUE rb_str_encode_ospath(VALUE path);
5005__attribute__((__nonnull__ ()))
5006__attribute__((__pure__))
5007int rb_is_absolute_path(const char *path);
5008off_t rb_file_size(VALUE file);
5009
5010
5011
5012
5013__attribute__((__cold__))
5014__attribute__((__noreturn__))
5015void rb_memerror(void);
5016__attribute__((__pure__))
5017int rb_during_gc(void);
5018__attribute__((__nonnull__ (1)))
5019void rb_gc_mark_locations(const VALUE *start, const VALUE *end);
5020void rb_mark_tbl(struct st_table *tbl);
5021void rb_mark_tbl_no_pin(struct st_table *tbl);
5022void rb_mark_set(struct st_table *tbl);
5023void rb_mark_hash(struct st_table *tbl);
5024void rb_gc_update_tbl_refs(st_table *ptr);
5025void rb_gc_mark_maybe(VALUE obj);
5026void rb_gc_mark(VALUE obj);
5027void rb_gc_mark_movable(VALUE obj);
5028VALUE rb_gc_location(VALUE obj);
5029__attribute__((__deprecated__ ("this is now a no-op function")))
5030void rb_gc_force_recycle(VALUE obj);
5031void rb_gc(void);
5032void rb_gc_copy_finalizer(VALUE dst, VALUE src);
5033VALUE rb_gc_enable(void);
5034VALUE rb_gc_disable(void);
5035VALUE rb_gc_start(void);
5036VALUE rb_define_finalizer(VALUE obj, VALUE block);
5037VALUE rb_undefine_finalizer(VALUE obj);
5038size_t rb_gc_count(void);
5039size_t rb_gc_stat(VALUE key_or_buf);
5040VALUE rb_gc_latest_gc_info(VALUE key_or_buf);
5041void rb_gc_adjust_memory_usage(ssize_t diff);
5042
5043
5044
5045
5046extern VALUE rb_fs;
5047extern VALUE rb_output_fs;
5048extern VALUE rb_rs;
5049extern VALUE rb_default_rs;
5050extern VALUE rb_output_rs;
5051VALUE rb_io_write(VALUE io, VALUE str);
5052VALUE rb_io_gets(VALUE io);
5053VALUE rb_io_getbyte(VALUE io);
5054VALUE rb_io_ungetc(VALUE io, VALUE c);
5055VALUE rb_io_ungetbyte(VALUE io, VALUE b);
5056VALUE rb_io_close(VALUE io);
5057VALUE rb_io_flush(VALUE io);
5058VALUE rb_io_eof(VALUE io);
5059VALUE rb_io_binmode(VALUE io);
5060VALUE rb_io_ascii8bit_binmode(VALUE io);
5061VALUE rb_io_addstr(VALUE io, VALUE str);
5062VALUE rb_io_printf(int argc, const VALUE *argv, VALUE io);
5063VALUE rb_io_print(int argc, const VALUE *argv, VALUE io);
5064VALUE rb_io_puts(int argc, const VALUE *argv, VALUE io);
5065VALUE rb_io_fdopen(int fd, int flags, const char *path);
5066__attribute__((__nonnull__ ()))
5067VALUE rb_file_open(const char *fname, const char *fmode);
5068__attribute__((__nonnull__ ()))
5069VALUE rb_file_open_str(VALUE fname, const char *fmode);
5070VALUE rb_gets(void);
5071__attribute__((__nonnull__ ()))
5072void rb_write_error(const char *str);
5073void rb_write_error2(const char *str, long len);
5074void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
5075__attribute__((__nonnull__ ()))
5076int rb_pipe(int *pipes);
5077int rb_reserved_fd_p(int fd);
5078int rb_cloexec_open(const char *pathname, int flags, mode_t mode);
5079int rb_cloexec_dup(int oldfd);
5080int rb_cloexec_dup2(int oldfd, int newfd);
5081__attribute__((__nonnull__ ()))
5082int rb_cloexec_pipe(int fildes[2]);
5083int rb_cloexec_fcntl_dupfd(int fd, int minfd);
5084void rb_update_max_fd(int fd);
5085void rb_fd_fix_cloexec(int fd);
5086
5087
5088
5089
5090void rb_load(VALUE path, int wrap);
5091void rb_load_protect(VALUE path, int wrap, int *state);
5092__attribute__((__nonnull__ ()))
5093int rb_provided(const char *feature);
5094__attribute__((__nonnull__ (1)))
5095int rb_feature_provided(const char *feature, const char **loading);
5096__attribute__((__nonnull__ ()))
5097void rb_provide(const char *feature);
5098VALUE rb_f_require(VALUE self, VALUE feature);
5099VALUE rb_require_string(VALUE feature);
5100void rb_ext_ractor_safe(_Bool flag);
5101
5102
5103
5104
5105VALUE rb_marshal_dump(VALUE obj, VALUE port);
5106VALUE rb_marshal_load(VALUE port);
5107void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));
5108
5109
5110
5111
5112__attribute__((__noreturn__))
5113__attribute__((__cold__))
5114void rb_num_zerodiv(void);
5115VALUE rb_num_coerce_bin(VALUE lhs, VALUE rhs, ID op);
5116VALUE rb_num_coerce_cmp(VALUE lhs, VALUE rhs, ID op);
5117VALUE rb_num_coerce_relop(VALUE lhs, VALUE rhs, ID op);
5118VALUE rb_num_coerce_bit(VALUE lhs, VALUE rhs, ID op);
5119VALUE rb_num2fix(VALUE val);
5120VALUE rb_fix2str(VALUE val, int base);
5121__attribute__((__const__))
5122VALUE rb_dbl_cmp(double lhs, double rhs);
5123extern VALUE rb_int_positive_pow(long x, unsigned long y);
5124
5125
5126
5127
5128VALUE rb_class_new_instance_pass_kw(int argc, const VALUE *argv, VALUE klass);
5129VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass);
5130VALUE rb_class_new_instance_kw(int argc, const VALUE *argv, VALUE klass, int kw_splat);
5131int rb_eql(VALUE lhs, VALUE rhs);
5132VALUE rb_any_to_s(VALUE obj);
5133VALUE rb_inspect(VALUE obj);
5134VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass);
5135VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass);
5136VALUE rb_obj_alloc(VALUE klass);
5137VALUE rb_obj_clone(VALUE obj);
5138VALUE rb_obj_dup(VALUE obj);
5139VALUE rb_obj_init_copy(VALUE src, VALUE dst);
5140VALUE rb_obj_freeze(VALUE obj);
5141__attribute__((__pure__))
5142VALUE rb_obj_frozen_p(VALUE obj);
5143VALUE rb_obj_id(VALUE obj);
5144__attribute__((__const__))
5145VALUE rb_memory_id(VALUE obj);
5146__attribute__((__pure__))
5147VALUE rb_class_real(VALUE klass);
5148__attribute__((__pure__))
5149VALUE rb_class_inherited_p(VALUE scion, VALUE ascendant);
5150__attribute__((__pure__))
5151VALUE rb_class_superclass(VALUE klass);
5152__attribute__((__nonnull__ ()))
5153VALUE rb_convert_type(VALUE val, int type, const char *name, const char *mid);
5154__attribute__((__nonnull__ ()))
5155VALUE rb_check_convert_type(VALUE val, int type, const char *name, const char *mid);
5156__attribute__((__nonnull__ ()))
5157VALUE rb_check_to_integer(VALUE val, const char *mid);
5158VALUE rb_check_to_float(VALUE val);
5159VALUE rb_to_int(VALUE val);
5160VALUE rb_check_to_int(VALUE val);
5161VALUE rb_Integer(VALUE val);
5162VALUE rb_to_float(VALUE val);
5163VALUE rb_Float(VALUE val);
5164VALUE rb_String(VALUE val);
5165VALUE rb_Array(VALUE val);
5166VALUE rb_Hash(VALUE val);
5167__attribute__((__nonnull__ ()))
5168double rb_cstr_to_dbl(const char *str, int mode);
5169double rb_str_to_dbl(VALUE str, int mode);
5170
5171
5172
5173
5174ID rb_id_attrset(ID id);
5175__attribute__((__const__))
5176int rb_is_const_id(ID id);
5177__attribute__((__const__))
5178int rb_is_global_id(ID id);
5179__attribute__((__const__))
5180int rb_is_instance_id(ID id);
5181__attribute__((__const__))
5182int rb_is_attrset_id(ID id);
5183__attribute__((__const__))
5184int rb_is_class_id(ID id);
5185__attribute__((__const__))
5186int rb_is_local_id(ID id);
5187__attribute__((__const__))
5188int rb_is_junk_id(ID);
5189__attribute__((__nonnull__ ()))
5190int rb_symname_p(const char *str);
5191VALUE rb_backref_get(void);
5192void rb_backref_set(VALUE md);
5193VALUE rb_lastline_get(void);
5194void rb_lastline_set(VALUE str);
5195VALUE rb_sym_all_symbols(void);
5196
5197
5198
5199
5200void rb_last_status_set(int status, pid_t pid);
5201VALUE rb_last_status_get(void);
5202__attribute__((__nonnull__ ()))
5203int rb_proc_exec(const char *cmd);
5204__attribute__((__noreturn__))
5205VALUE rb_f_exec(int argc, const VALUE *argv);
5206pid_t rb_waitpid(pid_t pid, int *status, int flags);
5207void rb_syswait(pid_t pid);
5208pid_t rb_spawn(int argc, const VALUE *argv);
5209pid_t rb_spawn_err(int argc, const VALUE *argv, char *errbuf, size_t buflen);
5210VALUE rb_proc_times(VALUE _);
5211VALUE rb_detach_process(pid_t pid);
5212
5213
5214
5215
5216unsigned int rb_genrand_int32(void);
5217double rb_genrand_real(void);
5218void rb_reset_random_seed(void);
5219VALUE rb_random_bytes(VALUE rnd, long n);
5220unsigned int rb_random_int32(VALUE rnd);
5221double rb_random_real(VALUE rnd);
5222unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit);
5223unsigned long rb_genrand_ulong_limited(unsigned long i);
5224
5225
5226
5227
5228VALUE rb_range_new(VALUE beg, VALUE end, int excl);
5229__attribute__((__nonnull__ ()))
5230VALUE rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err);
5231__attribute__((__nonnull__ ()))
5232int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp);
5233
5234
5235
5236
5237VALUE rb_rational_raw(VALUE num, VALUE den);
5238VALUE rb_rational_new(VALUE num, VALUE den);
5239VALUE rb_Rational(VALUE num, VALUE den);
5240__attribute__((__pure__))
5241VALUE rb_rational_num(VALUE rat);
5242__attribute__((__pure__))
5243VALUE rb_rational_den(VALUE rat);
5244VALUE rb_flt_rationalize_with_prec(VALUE flt, VALUE prec);
5245VALUE rb_flt_rationalize(VALUE flt);
5246
5247
5248
5249
5250int rb_memcicmp(const void *s1,const void *s2, long n);
5251void rb_match_busy(VALUE md);
5252VALUE rb_reg_nth_defined(int n, VALUE md);
5253VALUE rb_reg_nth_match(int n, VALUE md);
5254int rb_reg_backref_number(VALUE match, VALUE backref);
5255VALUE rb_reg_last_match(VALUE md);
5256VALUE rb_reg_match_pre(VALUE md);
5257VALUE rb_reg_match_post(VALUE md);
5258VALUE rb_reg_match_last(VALUE md);
5259VALUE rb_reg_new_str(VALUE src, int opts);
5260__attribute__((__nonnull__ ()))
5261VALUE rb_reg_new(const char *src, long len, int opts);
5262VALUE rb_reg_alloc(void);
5263VALUE rb_reg_init_str(VALUE re, VALUE s, int options);
5264VALUE rb_reg_match(VALUE re, VALUE str);
5265VALUE rb_reg_match2(VALUE re);
5266int rb_reg_options(VALUE re);
5267
5268
5269
5270
5271extern VALUE rb_argv0;
5272VALUE rb_get_argv(void);
5273__attribute__((__nonnull__ ()))
5274void *rb_load_file(const char *file);
5275void *rb_load_file_str(VALUE file);
5276
5277
5278struct timeval;
5279typedef struct {
5280 int maxfd;
5281 fd_set *fdset;
5282} rb_fdset_t;
5283
5284
5285__attribute__((__nonnull__ ()))
5286void rb_fd_init(rb_fdset_t *f);
5287__attribute__((__nonnull__ ()))
5288void rb_fd_term(rb_fdset_t *f);
5289__attribute__((__nonnull__ ()))
5290void rb_fd_zero(rb_fdset_t *f);
5291__attribute__((__nonnull__ ()))
5292void rb_fd_set(int fd, rb_fdset_t *f);
5293__attribute__((__nonnull__ ()))
5294void rb_fd_clr(int fd, rb_fdset_t *f);
5295__attribute__((__nonnull__ ()))
5296__attribute__((__pure__))
5297int rb_fd_isset(int fd, const rb_fdset_t *f);
5298void rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int max);
5299void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
5300int rb_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5301
5302
5303__attribute__((__nonnull__ ()))
5304__attribute__((__pure__))
5305static inline fd_set *
5306rb_fd_ptr(const rb_fdset_t *f)
5307{
5308 return f->fdset;
5309}
5310__attribute__((__nonnull__ ()))
5311__attribute__((__pure__))
5312static inline int
5313rb_fd_max(const rb_fdset_t *f)
5314{
5315 return f->maxfd;
5316}
5317
5318
5319struct timeval;
5320int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
5321
5322
5323
5324
5325__attribute__((__nonnull__ ()))
5326VALUE rb_f_kill(int argc, const VALUE *argv);
5327void (*ruby_posix_signal(int, void (*)(int)))(int);
5328__attribute__((__pure__))
5329const char *ruby_signal_name(int signo);
5330void ruby_default_signal(int sig);
5331
5332
5333
5334
5335VALUE rb_f_sprintf(int argc, const VALUE *argv);
5336__attribute__((__nonnull__ (1)))
5337__attribute__((__format__(__printf__, 1, 2)))
5338VALUE rb_sprintf(const char *fmt, ...);
5339__attribute__((__nonnull__ (1)))
5340__attribute__((__format__(__printf__, 1, 0)))
5341VALUE rb_vsprintf(const char *fmt, va_list ap);
5342__attribute__((__nonnull__ (2)))
5343__attribute__((__format__(__printf__, 2, 3)))
5344VALUE rb_str_catf(VALUE dst, const char *fmt, ...);
5345__attribute__((__nonnull__ (2)))
5346__attribute__((__format__(__printf__, 2, 0)))
5347VALUE rb_str_vcatf(VALUE dst, const char *fmt, va_list ap);
5348VALUE rb_str_format(int argc, const VALUE *argv, VALUE fmt);
5349
5350
5351
5352
5353VALUE rb_str_new(const char *ptr, long len);
5354VALUE rb_str_new_cstr(const char *ptr);
5355VALUE rb_str_new_shared(VALUE str);
5356VALUE rb_str_new_frozen(VALUE str);
5357VALUE rb_str_new_with_class(VALUE obj, const char *ptr, long len);
5358VALUE rb_external_str_new(const char *ptr, long len);
5359__attribute__((__nonnull__ ()))
5360VALUE rb_external_str_new_cstr(const char *ptr);
5361VALUE rb_locale_str_new(const char *ptr, long len);
5362__attribute__((__nonnull__ ()))
5363VALUE rb_locale_str_new_cstr(const char *ptr);
5364VALUE rb_filesystem_str_new(const char *ptr, long len);
5365__attribute__((__nonnull__ ()))
5366VALUE rb_filesystem_str_new_cstr(const char *ptr);
5367VALUE rb_str_buf_new(long capa);
5368__attribute__((__nonnull__ ()))
5369VALUE rb_str_buf_new_cstr(const char *ptr);
5370VALUE rb_str_tmp_new(long len);
5371VALUE rb_usascii_str_new(const char *ptr, long len);
5372VALUE rb_usascii_str_new_cstr(const char *ptr);
5373VALUE rb_utf8_str_new(const char *ptr, long len);
5374VALUE rb_utf8_str_new_cstr(const char *ptr);
5375VALUE rb_str_new_static(const char *ptr, long len);
5376VALUE rb_usascii_str_new_static(const char *ptr, long len);
5377VALUE rb_utf8_str_new_static(const char *ptr, long len);
5378VALUE rb_str_to_interned_str(VALUE str);
5379VALUE rb_interned_str(const char *ptr, long len);
5380__attribute__((__nonnull__ ()))
5381VALUE rb_interned_str_cstr(const char *ptr);
5382void rb_str_free(VALUE str);
5383void rb_str_shared_replace(VALUE dst, VALUE src);
5384VALUE rb_str_buf_append(VALUE dst, VALUE src);
5385VALUE rb_str_buf_cat(VALUE, const char*, long);
5386VALUE rb_str_buf_cat2(VALUE, const char*);
5387__attribute__((__nonnull__ ()))
5388VALUE rb_str_buf_cat_ascii(VALUE dst, const char *src);
5389VALUE rb_obj_as_string(VALUE obj);
5390VALUE rb_check_string_type(VALUE obj);
5391void rb_must_asciicompat(VALUE obj);
5392VALUE rb_str_dup(VALUE str);
5393VALUE rb_str_resurrect(VALUE str);
5394VALUE rb_str_locktmp(VALUE str);
5395VALUE rb_str_unlocktmp(VALUE str);
5396VALUE rb_str_dup_frozen(VALUE);
5397VALUE rb_str_plus(VALUE lhs, VALUE rhs);
5398VALUE rb_str_times(VALUE str, VALUE num);
5399long rb_str_sublen(VALUE str, long pos);
5400VALUE rb_str_substr(VALUE str, long beg, long len);
5401VALUE rb_str_subseq(VALUE str, long beg, long len);
5402char *rb_str_subpos(VALUE str, long beg, long *len);
5403void rb_str_modify(VALUE str);
5404void rb_str_modify_expand(VALUE str, long capa);
5405VALUE rb_str_freeze(VALUE str);
5406void rb_str_set_len(VALUE str, long len);
5407VALUE rb_str_resize(VALUE str, long len);
5408VALUE rb_str_cat(VALUE dst, const char *src, long srclen);
5409VALUE rb_str_cat_cstr(VALUE dst, const char *src);
5410VALUE rb_str_cat2(VALUE, const char*);
5411VALUE rb_str_append(VALUE dst, VALUE src);
5412VALUE rb_str_concat(VALUE dst, VALUE src);
5413st_index_t rb_memhash(const void *ptr, long len);
5414st_index_t rb_hash_start(st_index_t i);
5415st_index_t rb_str_hash(VALUE str);
5416int rb_str_hash_cmp(VALUE str1, VALUE str2);
5417int rb_str_comparable(VALUE str1, VALUE str2);
5418int rb_str_cmp(VALUE lhs, VALUE rhs);
5419VALUE rb_str_equal(VALUE str1, VALUE str2);
5420VALUE rb_str_drop_bytes(VALUE str, long len);
5421void rb_str_update(VALUE dst, long beg, long len, VALUE src);
5422VALUE rb_str_replace(VALUE dst, VALUE src);
5423VALUE rb_str_inspect(VALUE str);
5424VALUE rb_str_dump(VALUE str);
5425VALUE rb_str_split(VALUE str, const char *delim);
5426rb_gvar_setter_t rb_str_setter;
5427VALUE rb_str_intern(VALUE str);
5428VALUE rb_sym_to_s(VALUE sym);
5429long rb_str_strlen(VALUE str);
5430VALUE rb_str_length(VALUE);
5431long rb_str_offset(VALUE str, long pos);
5432__attribute__((__pure__))
5433size_t rb_str_capacity(VALUE str);
5434VALUE rb_str_ellipsize(VALUE str, long len);
5435VALUE rb_str_scrub(VALUE str, VALUE repl);
5436VALUE rb_str_succ(VALUE orig);
5437__attribute__((__nonnull__ ()))
5438static inline long
5439rbimpl_strlen(const char *str)
5440{
5441 return ((long)strlen(str));
5442}
5443__attribute__((__nonnull__ ()))
5444static inline VALUE
5445rbimpl_str_new_cstr(const char *str)
5446{
5447 long len = rbimpl_strlen(str);
5448 return rb_str_new_static(str, len);
5449}
5450__attribute__((__nonnull__ ()))
5451static inline VALUE
5452rbimpl_usascii_str_new_cstr(const char *str)
5453{
5454 long len = rbimpl_strlen(str);
5455 return rb_usascii_str_new_static(str, len);
5456}
5457__attribute__((__nonnull__ ()))
5458static inline VALUE
5459rbimpl_utf8_str_new_cstr(const char *str)
5460{
5461 long len = rbimpl_strlen(str);
5462 return rb_utf8_str_new_static(str, len);
5463}
5464__attribute__((__nonnull__ ()))
5465static inline VALUE
5466rbimpl_external_str_new_cstr(const char *str)
5467{
5468 long len = rbimpl_strlen(str);
5469 return rb_external_str_new(str, len);
5470}
5471__attribute__((__nonnull__ ()))
5472static inline VALUE
5473rbimpl_locale_str_new_cstr(const char *str)
5474{
5475 long len = rbimpl_strlen(str);
5476 return rb_locale_str_new(str, len);
5477}
5478__attribute__((__nonnull__ ()))
5479static inline VALUE
5480rbimpl_str_buf_new_cstr(const char *str)
5481{
5482 long len = rbimpl_strlen(str);
5483 VALUE buf = rb_str_buf_new(len);
5484 return rb_str_buf_cat(buf, str, len);
5485}
5486__attribute__((__nonnull__ ()))
5487static inline VALUE
5488rbimpl_str_cat_cstr(VALUE buf, const char *str)
5489{
5490 long len = rbimpl_strlen(str);
5491 return rb_str_cat(buf, str, len);
5492}
5493__attribute__((__nonnull__ ()))
5494static inline VALUE
5495rbimpl_exc_new_cstr(VALUE exc, const char *str)
5496{
5497 long len = rbimpl_strlen(str);
5498 return rb_exc_new(exc, str, len);
5499}
5500
5501
5502
5503
5504VALUE rb_struct_new(VALUE klass, ...);
5505VALUE rb_struct_define(const char *name, ...);
5506__attribute__((__nonnull__ (2)))
5507VALUE rb_struct_define_under(VALUE space, const char *name, ...);
5508VALUE rb_struct_alloc(VALUE klass, VALUE values);
5509VALUE rb_struct_initialize(VALUE self, VALUE values);
5510VALUE rb_struct_getmember(VALUE self, ID key);
5511VALUE rb_struct_s_members(VALUE klass);
5512VALUE rb_struct_members(VALUE self);
5513VALUE rb_struct_alloc_noinit(VALUE klass);
5514VALUE rb_struct_define_without_accessor(const char *name, VALUE super, rb_alloc_func_t func, ...);
5515__attribute__((__nonnull__ (2)))
5516VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...);
5517
5518
5519
5520
5521struct timeval;
5522void rb_thread_schedule(void);
5523int rb_thread_wait_fd(int fd);
5524int rb_thread_fd_writable(int fd);
5525void rb_thread_fd_close(int fd);
5526int rb_thread_alone(void);
5527void rb_thread_sleep(int sec);
5528void rb_thread_sleep_forever(void);
5529void rb_thread_sleep_deadly(void);
5530VALUE rb_thread_stop(void);
5531VALUE rb_thread_wakeup(VALUE thread);
5532VALUE rb_thread_wakeup_alive(VALUE thread);
5533VALUE rb_thread_run(VALUE thread);
5534VALUE rb_thread_kill(VALUE thread);
5535__attribute__((__nonnull__ (1)))
5536VALUE rb_thread_create(VALUE (*f)(void *g), void *g);
5537void rb_thread_wait_for(struct timeval time);
5538VALUE rb_thread_current(void);
5539VALUE rb_thread_main(void);
5540VALUE rb_thread_local_aref(VALUE thread, ID key);
5541VALUE rb_thread_local_aset(VALUE thread, ID key, VALUE val);
5542void rb_thread_atfork(void);
5543void rb_thread_atfork_before_exec(void);
5544VALUE rb_exec_recursive(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5545VALUE rb_exec_recursive_paired(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5546VALUE rb_exec_recursive_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h);
5547VALUE rb_exec_recursive_paired_outer(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE p, VALUE h);
5548typedef void rb_unblock_function_t(void *);
5549typedef VALUE rb_blocking_function_t(void *);
5550void rb_thread_check_ints(void);
5551int rb_thread_interrupted(VALUE thval);
5552VALUE rb_mutex_new(void);
5553VALUE rb_mutex_locked_p(VALUE mutex);
5554VALUE rb_mutex_trylock(VALUE mutex);
5555VALUE rb_mutex_lock(VALUE mutex);
5556VALUE rb_mutex_unlock(VALUE mutex);
5557VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
5558VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
5559
5560
5561
5562
5563struct timespec;
5564struct timeval;
5565__attribute__((__nonnull__ ()))
5566void rb_timespec_now(struct timespec *ts);
5567VALUE rb_time_new(time_t sec, long usec);
5568VALUE rb_time_nano_new(time_t sec, long nsec);
5569__attribute__((__nonnull__ ()))
5570VALUE rb_time_timespec_new(const struct timespec *ts, int offset);
5571VALUE rb_time_num_new(VALUE timev, VALUE off);
5572struct timeval rb_time_interval(VALUE num);
5573struct timeval rb_time_timeval(VALUE time);
5574struct timespec rb_time_timespec(VALUE time);
5575struct timespec rb_time_timespec_interval(VALUE num);
5576VALUE rb_time_utc_offset(VALUE time);
5577
5578
5579
5580
5581VALUE rb_mod_name(VALUE mod);
5582VALUE rb_class_path(VALUE mod);
5583VALUE rb_class_path_cached(VALUE mod);
5584__attribute__((__nonnull__ ()))
5585void rb_set_class_path(VALUE klass, VALUE space, const char *name);
5586void rb_set_class_path_string(VALUE klass, VALUE space, VALUE name);
5587VALUE rb_path_to_class(VALUE path);
5588__attribute__((__nonnull__ ()))
5589VALUE rb_path2class(const char *path);
5590VALUE rb_class_name(VALUE obj);
5591VALUE rb_autoload_load(VALUE space, ID name);
5592VALUE rb_autoload_p(VALUE space, ID name);
5593VALUE rb_f_trace_var(int argc, const VALUE *argv);
5594VALUE rb_f_untrace_var(int argc, const VALUE *argv);
5595VALUE rb_f_global_variables(void);
5596void rb_alias_variable(ID dst, ID src);
5597void rb_free_generic_ivar(VALUE obj);
5598VALUE rb_ivar_get(VALUE obj, ID name);
5599VALUE rb_ivar_set(VALUE obj, ID name, VALUE val);
5600VALUE rb_ivar_defined(VALUE obj, ID name);
5601void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg);
5602st_index_t rb_ivar_count(VALUE obj);
5603VALUE rb_attr_get(VALUE obj, ID name);
5604VALUE rb_obj_instance_variables(VALUE obj);
5605VALUE rb_obj_remove_instance_variable(VALUE obj, VALUE name);
5606void *rb_mod_const_at(VALUE, void*);
5607void *rb_mod_const_of(VALUE, void*);
5608VALUE rb_const_list(void*);
5609VALUE rb_mod_constants(int argc, const VALUE *argv, VALUE recv);
5610VALUE rb_mod_remove_const(VALUE space, VALUE name);
5611int rb_const_defined(VALUE space, ID name);
5612int rb_const_defined_at(VALUE space, ID name);
5613int rb_const_defined_from(VALUE space, ID name);
5614VALUE rb_const_get(VALUE space, ID name);
5615VALUE rb_const_get_at(VALUE space, ID name);
5616VALUE rb_const_get_from(VALUE space, ID name);
5617void rb_const_set(VALUE space, ID name, VALUE val);
5618VALUE rb_const_remove(VALUE space, ID name);
5619VALUE rb_cvar_defined(VALUE klass, ID name);
5620void rb_cvar_set(VALUE klass, ID name, VALUE val);
5621VALUE rb_cvar_get(VALUE klass, ID name);
5622__attribute__((__nonnull__ ()))
5623VALUE rb_cvar_find(VALUE klass, ID name, VALUE *front);
5624__attribute__((__nonnull__ ()))
5625void rb_cv_set(VALUE klass, const char *name, VALUE val);
5626__attribute__((__nonnull__ ()))
5627VALUE rb_cv_get(VALUE klass, const char *name);
5628__attribute__((__nonnull__ ()))
5629void rb_define_class_variable(VALUE, const char*, VALUE);
5630VALUE rb_mod_class_variables(int argc, const VALUE *argv, VALUE recv);
5631VALUE rb_mod_remove_cvar(VALUE mod, VALUE name);
5632
5633
5634int ruby_native_thread_p(void);
5635__attribute__((__nonnull__ (3)))
5636__attribute__((__format__(__printf__, 3, 4)))
5637int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
5638__attribute__((__nonnull__ (3)))
5639__attribute__((__format__(__printf__, 3, 0)))
5640int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
5641
5642
5643
5644typedef long jmp_buf[32];
5645
5646typedef long sigjmp_buf[32 +1+((sizeof (long) + sizeof (sigset_t) - 1)
5647 /sizeof (long))];
5648extern void siglongjmp (sigjmp_buf, int) __attribute__ ((__noreturn__));
5649extern int sigsetjmp (sigjmp_buf, int);
5650extern void _longjmp (jmp_buf, int) __attribute__ ((__noreturn__));
5651extern int _setjmp (jmp_buf);
5652
5653void longjmp (jmp_buf __jmpb, int __retval)
5654 __attribute__ ((__noreturn__));
5655int setjmp (jmp_buf __jmpb);
5656
5657void __assert (const char *, int, const char *)
5658 __attribute__ ((__noreturn__));
5659void __assert_func (const char *, int, const char *, const char *)
5660 __attribute__ ((__noreturn__));
5661static inline char *container_of_or_null_(void *member_ptr, size_t offset)
5662{
5663 return member_ptr ? (char *)member_ptr - offset : ((void *)0);
5664}
5665struct ccan_list_node
5666{
5667 struct ccan_list_node *next, *prev;
5668};
5669struct ccan_list_head
5670{
5671 struct ccan_list_node n;
5672};
5673static inline void ccan_list_head_init(struct ccan_list_head *h)
5674{
5675 h->n.next = h->n.prev = &h->n;
5676}
5677static inline void ccan_list_node_init(struct ccan_list_node *n)
5678{
5679 n->next = n->prev = n;
5680}
5681static inline void ccan_list_add_after_(struct ccan_list_head *h,
5682 struct ccan_list_node *p,
5683 struct ccan_list_node *n,
5684 const char *abortstr)
5685{
5686 n->next = p->next;
5687 n->prev = p;
5688 p->next->prev = n;
5689 p->next = n;
5690 (void)((void)abortstr, h);
5691}
5692static inline void ccan_list_add_(struct ccan_list_head *h,
5693 struct ccan_list_node *n,
5694 const char *abortstr)
5695{
5696 ccan_list_add_after_(h, &h->n, n, abortstr);
5697}
5698static inline void ccan_list_add_before_(struct ccan_list_head *h,
5699 struct ccan_list_node *p,
5700 struct ccan_list_node *n,
5701 const char *abortstr)
5702{
5703 n->next = p;
5704 n->prev = p->prev;
5705 p->prev->next = n;
5706 p->prev = n;
5707 (void)((void)abortstr, h);
5708}
5709static inline void ccan_list_add_tail_(struct ccan_list_head *h,
5710 struct ccan_list_node *n,
5711 const char *abortstr)
5712{
5713 ccan_list_add_before_(h, &h->n, n, abortstr);
5714}
5715static inline int ccan_list_empty_(const struct ccan_list_head *h, const char* abortstr)
5716{
5717 (void)((void)abortstr, h);
5718 return h->n.next == &h->n;
5719}
5720static inline _Bool ccan_list_empty_nocheck(const struct ccan_list_head *h)
5721{
5722 return h->n.next == &h->n;
5723}
5724static inline void ccan_list_del_(struct ccan_list_node *n, const char* abortstr)
5725{
5726 (void)((void)abortstr, n);
5727 n->next->prev = n->prev;
5728 n->prev->next = n->next;
5729}
5730static inline void ccan_list_del_init_(struct ccan_list_node *n, const char *abortstr)
5731{
5732 ccan_list_del_(n, abortstr);
5733 ccan_list_node_init(n);
5734}
5735static inline void ccan_list_del_from(struct ccan_list_head *h, struct ccan_list_node *n)
5736{
5737 ((void)0);
5738 ccan_list_del_(n, "../ruby-3.2.1/ccan/list/list.h" ":" "329");
5739}
5740static inline void ccan_list_swap_(struct ccan_list_node *o,
5741 struct ccan_list_node *n,
5742 const char* abortstr)
5743{
5744 (void)((void)abortstr, o);
5745 *n = *o;
5746 n->next->prev = n;
5747 n->prev->next = n;
5748}
5749static inline const void *ccan_list_top_(const struct ccan_list_head *h, size_t off)
5750{
5751 if (ccan_list_empty_(h, "../ruby-3.2.1/ccan/list/list.h" ":" "399"))
5752 return ((void *)0);
5753 return (const char *)h->n.next - off;
5754}
5755static inline const void *ccan_list_pop_(const struct ccan_list_head *h, size_t off)
5756{
5757 struct ccan_list_node *n;
5758 if (ccan_list_empty_(h, "../ruby-3.2.1/ccan/list/list.h" ":" "425"))
5759 return ((void *)0);
5760 n = h->n.next;
5761 ccan_list_del_(n, "../ruby-3.2.1/ccan/list/list.h" ":" "428");
5762 return (const char *)n - off;
5763}
5764static inline const void *ccan_list_tail_(const struct ccan_list_head *h, size_t off)
5765{
5766 if (ccan_list_empty_(h, "../ruby-3.2.1/ccan/list/list.h" ":" "451"))
5767 return ((void *)0);
5768 return (const char *)h->n.prev - off;
5769}
5770static inline void ccan_list_append_list_(struct ccan_list_head *to,
5771 struct ccan_list_head *from,
5772 const char *abortstr)
5773{
5774 struct ccan_list_node *from_tail = ((void)abortstr, from)->n.prev;
5775 struct ccan_list_node *to_tail = ((void)abortstr, to)->n.prev;
5776 to->n.prev = from_tail;
5777 from_tail->next = &to->n;
5778 to_tail->next = &from->n;
5779 from->n.prev = to_tail;
5780 ccan_list_del_(&from->n, "../ruby-3.2.1/ccan/list/list.h" ":" "600");
5781 ccan_list_head_init(from);
5782}
5783static inline void ccan_list_prepend_list_(struct ccan_list_head *to,
5784 struct ccan_list_head *from,
5785 const char *abortstr)
5786{
5787 struct ccan_list_node *from_tail = ((void)abortstr, from)->n.prev;
5788 struct ccan_list_node *to_head = ((void)abortstr, to)->n.next;
5789 to->n.next = &from->n;
5790 from->n.prev = &to->n;
5791 to_head->prev = from_tail;
5792 from_tail->next = to_head;
5793 ccan_list_del_(&from->n, "../ruby-3.2.1/ccan/list/list.h" ":" "632");
5794 ccan_list_head_init(from);
5795}
5796static inline void *ccan_list_node_to_off_(struct ccan_list_node *node, size_t off)
5797{
5798 return (void *)((char *)node - off);
5799}
5800static inline struct ccan_list_node *ccan_list_node_from_off_(void *ptr, size_t off)
5801{
5802 return (struct ccan_list_node *)((char *)ptr + off);
5803}
5804static inline void *ccan_list_entry_or_null(const struct ccan_list_head *h,
5805 const struct ccan_list_node *n,
5806 size_t off)
5807{
5808 if (n == &h->n)
5809 return ((void *)0);
5810 return (char *)n - off;
5811}
5812enum ruby_id_types {
5813 RUBY_ID_STATIC_SYM = 0x01,
5814 RUBY_ID_LOCAL = 0x00,
5815 RUBY_ID_INSTANCE = (0x01<<1),
5816 RUBY_ID_GLOBAL = (0x03<<1),
5817 RUBY_ID_ATTRSET = (0x04<<1),
5818 RUBY_ID_CONST = (0x05<<1),
5819 RUBY_ID_CLASS = (0x06<<1),
5820 RUBY_ID_JUNK = (0x07<<1),
5821 RUBY_ID_INTERNAL = RUBY_ID_JUNK,
5822 RUBY_ID_SCOPE_SHIFT = 4,
5823 RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1)
5824};
5825enum ruby_method_ids {
5826 idDot2 = 128,
5827 idDot3 = 129,
5828 idUPlus = 132,
5829 idUMinus = 133,
5830 idPow = 134,
5831 idCmp = 135,
5832 idPLUS = '+',
5833 idMINUS = '-',
5834 idMULT = '*',
5835 idDIV = '/',
5836 idMOD = '%',
5837 idLTLT = 136,
5838 idGTGT = 137,
5839 idLT = '<',
5840 idLE = 138,
5841 idGT = '>',
5842 idGE = 139,
5843 idEq = 140,
5844 idEqq = 141,
5845 idNeq = 142,
5846 idNot = '!',
5847 idAnd = '&',
5848 idOr = '|',
5849 idBackquote = '`',
5850 idEqTilde = 143,
5851 idNeqTilde = 144,
5852 idAREF = 145,
5853 idASET = 146,
5854 idCOLON2 = 147,
5855 idANDOP = 148,
5856 idOROP = 149,
5857 idANDDOT = 150,
5858 tPRESERVED_ID_BEGIN = 150,
5859 idNilP,
5860 idNULL,
5861 idEmptyP,
5862 idEqlP,
5863 idRespond_to,
5864 idRespond_to_missing,
5865 idIFUNC,
5866 idCFUNC,
5867 id_core_set_method_alias,
5868 id_core_set_variable_alias,
5869 id_core_undef_method,
5870 id_core_define_method,
5871 id_core_define_singleton_method,
5872 id_core_set_postexe,
5873 id_core_hash_merge_ptr,
5874 id_core_hash_merge_kwd,
5875 id_core_raise,
5876 id_core_sprintf,
5877 id_debug_created_info,
5878 tPRESERVED_ID_END,
5879 tTOKEN_LOCAL_BEGIN = tPRESERVED_ID_END-1,
5880 tMax,
5881 tMin,
5882 tFreeze,
5883 tInspect,
5884 tIntern,
5885 tObject_id,
5886 tConst_added,
5887 tConst_missing,
5888 tMethodMissing,
5889 tMethod_added,
5890 tSingleton_method_added,
5891 tMethod_removed,
5892 tSingleton_method_removed,
5893 tMethod_undefined,
5894 tSingleton_method_undefined,
5895 tLength,
5896 tSize,
5897 tGets,
5898 tSucc,
5899 tEach,
5900 tProc,
5901 tLambda,
5902 tSend,
5903 t__send__,
5904 t__attached__,
5905 t__recursive_key__,
5906 tInitialize,
5907 tInitialize_copy,
5908 tInitialize_clone,
5909 tInitialize_dup,
5910 tTo_int,
5911 tTo_ary,
5912 tTo_str,
5913 tTo_sym,
5914 tTo_hash,
5915 tTo_proc,
5916 tTo_io,
5917 tTo_a,
5918 tTo_s,
5919 tTo_i,
5920 tTo_f,
5921 tTo_r,
5922 tBt,
5923 tBt_locations,
5924 tCall,
5925 tMesg,
5926 tException,
5927 tLocals,
5928 tNOT,
5929 tAND,
5930 tOR,
5931 tDiv,
5932 tDivmod,
5933 tFdiv,
5934 tQuo,
5935 tName,
5936 tNil,
5937 tPath,
5938 tUScore,
5939 tNUMPARAM_1,
5940 tNUMPARAM_2,
5941 tNUMPARAM_3,
5942 tNUMPARAM_4,
5943 tNUMPARAM_5,
5944 tNUMPARAM_6,
5945 tNUMPARAM_7,
5946 tNUMPARAM_8,
5947 tNUMPARAM_9,
5948 tDefault,
5949 tTOKEN_LOCAL_END,
5950 tTOKEN_INSTANCE_BEGIN = tTOKEN_LOCAL_END-1,
5951 tTOKEN_INSTANCE_END,
5952 tTOKEN_GLOBAL_BEGIN = tTOKEN_INSTANCE_END-1,
5953 tLASTLINE,
5954 tBACKREF,
5955 tERROR_INFO,
5956 tTOKEN_GLOBAL_END,
5957 tTOKEN_CONST_BEGIN = tTOKEN_GLOBAL_END-1,
5958 tTOKEN_CONST_END,
5959 tTOKEN_CLASS_BEGIN = tTOKEN_CONST_END-1,
5960 tTOKEN_CLASS_END,
5961 tTOKEN_ATTRSET_BEGIN = tTOKEN_CLASS_END-1,
5962 tTOKEN_ATTRSET_END,
5963 tNEXT_ID = tTOKEN_ATTRSET_END,
5964 idMax = ((tMax<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5965 idMin = ((tMin<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5966 idFreeze = ((tFreeze<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5967 idInspect = ((tInspect<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5968 idIntern = ((tIntern<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5969 idObject_id = ((tObject_id<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5970 idConst_added = ((tConst_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5971 idConst_missing = ((tConst_missing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5972 idMethodMissing = ((tMethodMissing<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5973 idMethod_added = ((tMethod_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5974 idSingleton_method_added = ((tSingleton_method_added<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5975 idMethod_removed = ((tMethod_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5976 idSingleton_method_removed = ((tSingleton_method_removed<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5977 idMethod_undefined = ((tMethod_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5978 idSingleton_method_undefined = ((tSingleton_method_undefined<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5979 idLength = ((tLength<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5980 idSize = ((tSize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5981 idGets = ((tGets<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5982 idSucc = ((tSucc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5983 idEach = ((tEach<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5984 idProc = ((tProc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5985 idLambda = ((tLambda<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5986 idSend = ((tSend<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5987 id__send__ = ((t__send__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5988 id__attached__ = ((t__attached__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5989 id__recursive_key__ = ((t__recursive_key__<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5990 idInitialize = ((tInitialize<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5991 idInitialize_copy = ((tInitialize_copy<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5992 idInitialize_clone = ((tInitialize_clone<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5993 idInitialize_dup = ((tInitialize_dup<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5994 idTo_int = ((tTo_int<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5995 idTo_ary = ((tTo_ary<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5996 idTo_str = ((tTo_str<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5997 idTo_sym = ((tTo_sym<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5998 idTo_hash = ((tTo_hash<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
5999 idTo_proc = ((tTo_proc<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6000 idTo_io = ((tTo_io<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6001 idTo_a = ((tTo_a<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6002 idTo_s = ((tTo_s<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6003 idTo_i = ((tTo_i<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6004 idTo_f = ((tTo_f<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6005 idTo_r = ((tTo_r<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6006 idBt = ((tBt<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6007 idBt_locations = ((tBt_locations<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6008 idCall = ((tCall<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6009 idMesg = ((tMesg<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6010 idException = ((tException<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6011 idLocals = ((tLocals<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6012 idNOT = ((tNOT<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6013 idAND = ((tAND<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6014 idOR = ((tOR<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6015 idDiv = ((tDiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6016 idDivmod = ((tDivmod<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6017 idFdiv = ((tFdiv<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6018 idQuo = ((tQuo<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6019 idName = ((tName<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6020 idNil = ((tNil<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6021 idPath = ((tPath<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6022 idUScore = ((tUScore<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6023 idNUMPARAM_1 = ((tNUMPARAM_1<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6024 idNUMPARAM_2 = ((tNUMPARAM_2<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6025 idNUMPARAM_3 = ((tNUMPARAM_3<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6026 idNUMPARAM_4 = ((tNUMPARAM_4<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6027 idNUMPARAM_5 = ((tNUMPARAM_5<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6028 idNUMPARAM_6 = ((tNUMPARAM_6<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6029 idNUMPARAM_7 = ((tNUMPARAM_7<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6030 idNUMPARAM_8 = ((tNUMPARAM_8<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6031 idNUMPARAM_9 = ((tNUMPARAM_9<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6032 idDefault = ((tDefault<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_LOCAL|RUBY_ID_STATIC_SYM),
6033 idLASTLINE = ((tLASTLINE<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6034 idBACKREF = ((tBACKREF<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6035 idERROR_INFO = ((tERROR_INFO<<RUBY_ID_SCOPE_SHIFT)|RUBY_ID_GLOBAL|RUBY_ID_STATIC_SYM),
6036 tLAST_OP_ID = tPRESERVED_ID_END-1,
6037 idLAST_OP_ID = tLAST_OP_ID >> RUBY_ID_SCOPE_SHIFT
6038};
6039void rb_obj_info_dump(VALUE obj);
6040void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
6041
6042
6043void ruby_debug_breakpoint(void);
6044__attribute__((__format__(__printf__, (1), (2)))) void ruby_debug_printf(const char*, ...);
6045
6046
6047VALUE rb_ary_last(int, const VALUE *, VALUE);
6048void rb_ary_set_len(VALUE, long);
6049void rb_ary_delete_same(VALUE, VALUE);
6050VALUE rb_ary_hidden_new_fill(long capa);
6051VALUE rb_ary_at(VALUE, VALUE);
6052size_t rb_ary_memsize(VALUE);
6053VALUE rb_to_array_type(VALUE obj);
6054VALUE rb_to_array(VALUE obj);
6055void rb_ary_cancel_sharing(VALUE ary);
6056size_t rb_ary_size_as_embedded(VALUE ary);
6057void rb_ary_make_embedded(VALUE ary);
6058_Bool rb_ary_embeddable_p(VALUE ary);
6059VALUE rb_ary_diff(VALUE ary1, VALUE ary2);
6060static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
6061static inline _Bool ARY_PTR_USING_P(VALUE ary);
6062static inline void RARY_TRANSIENT_SET(VALUE ary);
6063static inline void RARY_TRANSIENT_UNSET(VALUE ary);
6064
6065
6066VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
6067VALUE rb_check_to_array(VALUE ary);
6068VALUE rb_ary_behead(VALUE, long);
6069VALUE rb_ary_aref1(VALUE ary, VALUE i);
6070struct rb_execution_context_struct;
6071VALUE rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts);
6072
6073
6074static inline VALUE
6075rb_ary_entry_internal(VALUE ary, long offset)
6076{
6077 long len = rb_array_len(ary);
6078 const VALUE *ptr = rb_array_const_ptr_transient(ary);
6079 if (len == 0) return ((VALUE)RUBY_Qnil);
6080 if (offset < 0) {
6081 offset += len;
6082 if (offset < 0) return ((VALUE)RUBY_Qnil);
6083 }
6084 else if (len <= offset) {
6085 return ((VALUE)RUBY_Qnil);
6086 }
6087 return ptr[offset];
6088}
6089static inline _Bool
6090ARY_PTR_USING_P(VALUE ary)
6091{
6092 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER14));
6093}
6094[[maybe_unused]]
6095static inline int
6096ary_should_not_be_shared_and_embedded(VALUE ary)
6097{
6098 return !RB_FL_ALL_RAW(ary, RUBY_ELTS_SHARED|RARRAY_EMBED_FLAG);
6099}
6100static inline _Bool
6101ARY_SHARED_P(VALUE ary)
6102{
6103 ((void)0);
6104 ((void)0);
6105 return RB_FL_TEST_RAW(ary, RUBY_ELTS_SHARED);
6106}
6107static inline _Bool
6108ARY_EMBED_P(VALUE ary)
6109{
6110 ((void)0);
6111 ((void)0);
6112 return RB_FL_TEST_RAW(ary, RARRAY_EMBED_FLAG);
6113}
6114static inline VALUE
6115ARY_SHARED_ROOT(VALUE ary)
6116{
6117 ((void)0);
6118 return ((struct RArray *)(ary))->as.heap.aux.shared_root;
6119}
6120static inline _Bool
6121ARY_SHARED_ROOT_P(VALUE ary)
6122{
6123 ((void)0);
6124 return RB_FL_TEST_RAW(ary, ((VALUE)RUBY_FL_USER12));
6125}
6126static inline long
6127ARY_SHARED_ROOT_REFCNT(VALUE ary)
6128{
6129 ((void)0);
6130 return ((struct RArray *)(ary))->as.heap.aux.capa;
6131}
6132static inline void
6133RARY_TRANSIENT_SET(VALUE ary)
6134{
6135 RB_FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6136}
6137static inline void
6138RARY_TRANSIENT_UNSET(VALUE ary)
6139{
6140 RB_FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
6141}
6142__attribute__((__pure__))
6143__attribute__((__artificial__))
6144static inline VALUE
6145RARRAY_AREF(VALUE ary, long i)
6146{
6147 ((void)0);
6148 return rb_array_const_ptr_transient(ary)[i];
6149}
6150enum ruby_basic_operators {
6151 BOP_PLUS,
6152 BOP_MINUS,
6153 BOP_MULT,
6154 BOP_DIV,
6155 BOP_MOD,
6156 BOP_EQ,
6157 BOP_EQQ,
6158 BOP_LT,
6159 BOP_LE,
6160 BOP_LTLT,
6161 BOP_AREF,
6162 BOP_ASET,
6163 BOP_LENGTH,
6164 BOP_SIZE,
6165 BOP_EMPTY_P,
6166 BOP_NIL_P,
6167 BOP_SUCC,
6168 BOP_GT,
6169 BOP_GE,
6170 BOP_NOT,
6171 BOP_NEQ,
6172 BOP_MATCH,
6173 BOP_FREEZE,
6174 BOP_UMINUS,
6175 BOP_MAX,
6176 BOP_MIN,
6177 BOP_CALL,
6178 BOP_AND,
6179 BOP_OR,
6180 BOP_CMP,
6181 BOP_DEFAULT,
6182 BOP_LAST_
6183};
6184
6185
6186extern short ruby_vm_redefined_flag[BOP_LAST_];
6187
6188
6189typedef unsigned long long rb_serial_t;
6190struct rb_callable_method_entry_struct;
6191struct rb_method_definition_struct;
6192struct rb_execution_context_struct;
6193struct rb_control_frame_struct;
6194struct rb_callinfo;
6195enum method_missing_reason {
6196 MISSING_NOENTRY = 0x00,
6197 MISSING_PRIVATE = 0x01,
6198 MISSING_PROTECTED = 0x02,
6199 MISSING_FCALL = 0x04,
6200 MISSING_VCALL = 0x08,
6201 MISSING_SUPER = 0x10,
6202 MISSING_MISSING = 0x20,
6203 MISSING_NONE = 0x40
6204};static inline
6205VALUE rb_vm_push_frame_fname(struct rb_execution_context_struct *ec, VALUE fname);
6206VALUE rb_obj_is_thread(VALUE obj);
6207void rb_vm_mark(void *ptr);
6208void rb_vm_each_stack_value(void *ptr, void (*cb)(VALUE, void*), void *ctx);
6209__attribute__((__pure__)) VALUE rb_vm_top_self(void);
6210const void **rb_vm_get_insns_address_table(void);
6211VALUE rb_source_location(int *pline);
6212const char *rb_source_location_cstr(int *pline);
6213static void rb_vm_pop_cfunc_frame(void);
6214int rb_vm_add_root_module(VALUE module);
6215void rb_vm_check_redefinition_by_prepend(VALUE klass);
6216int rb_vm_check_optimizable_mid(VALUE mid);
6217VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
6218static VALUE ruby_vm_special_exception_copy(VALUE);
6219__attribute__((__pure__)) st_table *rb_vm_fstring_table(void);
6220
6221
6222VALUE rb_vm_exec(struct rb_execution_context_struct *, _Bool);
6223
6224
6225VALUE rb_current_realfilepath(void);
6226VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
6227typedef void rb_check_funcall_hook(int, VALUE, ID, int, const VALUE *, VALUE);
6228VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
6229 rb_check_funcall_hook *hook, VALUE arg);
6230VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *argv,
6231 rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
6232const char *rb_type_str(enum ruby_value_type type);
6233VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
6234VALUE rb_check_funcall_basic_kw(VALUE, ID, VALUE, int, const VALUE*, int);
6235VALUE rb_yield_1(VALUE val);
6236VALUE rb_yield_force_blockarg(VALUE values);
6237VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
6238 rb_block_call_func_t bl_proc, int min_argc, int max_argc,
6239 VALUE data2);
6240void rb_check_stack_overflow(void);
6241VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
6242VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
6243struct rb_iseq_struct;
6244
6245
6246const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass);
6247
6248
6249struct rb_execution_context_struct;
6250
6251
6252int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE obj, ID id, int priv);
6253
6254
6255void rb_clear_constant_cache(void);
6256void rb_print_backtrace(void);
6257VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
6258VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval);
6259VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6260VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
6261VALUE rb_make_backtrace(void);
6262void rb_backtrace_print_as_bugreport(void);
6263int rb_backtrace_p(VALUE obj);
6264VALUE rb_backtrace_to_str_ary(VALUE obj);
6265VALUE rb_backtrace_to_location_ary(VALUE obj);
6266void rb_backtrace_each(VALUE (*iter)(VALUE recv, VALUE str), VALUE output);
6267int rb_frame_info_p(VALUE obj);
6268int rb_get_node_id_from_frame_info(VALUE obj);
6269const struct rb_iseq_struct *rb_get_iseq_from_frame_info(VALUE obj);
6270
6271
6272VALUE rb_ec_backtrace_object(const struct rb_execution_context_struct *ec);
6273void rb_backtrace_use_iseq_first_lineno_for_last_location(VALUE self);
6274
6275
6276struct rb_execution_context_struct;
6277struct rb_objspace;
6278typedef struct ractor_newobj_size_pool_cache {
6279 struct RVALUE *freelist;
6280 struct heap_page *using_page;
6281} rb_ractor_newobj_size_pool_cache_t;
6282typedef struct ractor_newobj_cache {
6283 size_t incremental_mark_step_allocated_slots;
6284 rb_ractor_newobj_size_pool_cache_t size_pool_caches[5];
6285} rb_ractor_newobj_cache_t;
6286extern VALUE *ruby_initial_gc_stress_ptr;
6287extern int ruby_disable_gc;
6288__attribute__((__malloc__)) void *ruby_mimmalloc(size_t size);
6289void ruby_mimfree(void *ptr);
6290void rb_objspace_set_event_hook(const rb_event_flag_t event);
6291VALUE rb_objspace_gc_enable(struct rb_objspace *);
6292VALUE rb_objspace_gc_disable(struct rb_objspace *);
6293void ruby_gc_set_params(void);
6294void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
6295__attribute__((__alloc_align__(1)))
6296__attribute__((__malloc__)) void *rb_aligned_malloc(size_t, size_t) __attribute__((__alloc_size__ (2)));
6297size_t rb_size_mul_or_raise(size_t, size_t, VALUE);
6298size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE);
6299__attribute__((__malloc__)) void *rb_xmalloc_mul_add(size_t, size_t, size_t);
6300__attribute__((__malloc__)) void *rb_xcalloc_mul_add(size_t, size_t, size_t);
6301void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
6302__attribute__((__malloc__)) void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6303__attribute__((__malloc__)) void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
6304static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6305static 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)));
6306static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
6307VALUE rb_class_allocate_instance(VALUE klass);
6308void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
6309size_t rb_gc_obj_slot_size(VALUE obj);
6310_Bool rb_gc_size_allocatable_p(size_t size);
6311int rb_objspace_garbage_object_p(VALUE obj);
6312
6313
6314const char *rb_objspace_data_type_name(VALUE obj);
6315VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
6316VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
6317VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
6318size_t rb_obj_memsize_of(VALUE);
6319void rb_gc_verify_internal_consistency(void);
6320size_t rb_obj_gc_flags(VALUE, ID[], size_t);
6321void rb_gc_mark_values(long n, const VALUE *values);
6322void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
6323void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) __attribute__((__returns_nonnull__)) __attribute__((__alloc_size__ (2)));
6324void *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)));
6325void ruby_sized_xfree(void *x, size_t size);
6326
6327
6328
6329
6330int rb_ec_stack_check(struct rb_execution_context_struct *ec);
6331void rb_gc_writebarrier_remember(VALUE obj);
6332const char *rb_obj_info(VALUE obj);
6333
6334
6335static inline void *
6336ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
6337{
6338 return ruby_xrealloc(ptr, new_size);
6339}
6340static inline void *
6341ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
6342{
6343 return ruby_xrealloc2(ptr, new_count, elemsiz);
6344}
6345static inline void
6346ruby_sized_xfree_inlined(void *ptr, size_t size)
6347{
6348 ruby_xfree(ptr);
6349}
6350enum imemo_type {
6351 imemo_env = 0,
6352 imemo_cref = 1,
6353 imemo_svar = 2,
6354 imemo_throw_data = 3,
6355 imemo_ifunc = 4,
6356 imemo_memo = 5,
6357 imemo_ment = 6,
6358 imemo_iseq = 7,
6359 imemo_tmpbuf = 8,
6360 imemo_ast = 9,
6361 imemo_parser_strterm = 10,
6362 imemo_callinfo = 11,
6363 imemo_callcache = 12,
6364 imemo_constcache = 13,
6365};
6366struct vm_svar {
6367 VALUE flags;
6368 const VALUE cref_or_me;
6369 const VALUE lastline;
6370 const VALUE backref;
6371 const VALUE others;
6372};
6373struct vm_throw_data {
6374 VALUE flags;
6375 VALUE reserved;
6376 const VALUE throw_obj;
6377 const struct rb_control_frame_struct *catch_frame;
6378 int throw_state;
6379};
6380struct vm_ifunc_argc {
6381 int min, max;
6382};
6383struct vm_ifunc {
6384 VALUE flags;
6385 VALUE reserved;
6386 rb_block_call_func_t func;
6387 const void *data;
6388 struct vm_ifunc_argc argc;
6389};
6390struct rb_imemo_tmpbuf_struct {
6391 VALUE flags;
6392 VALUE reserved;
6393 VALUE *ptr;
6394 struct rb_imemo_tmpbuf_struct *next;
6395 size_t cnt;
6396};
6397struct MEMO {
6398 VALUE flags;
6399 VALUE reserved;
6400 const VALUE v1;
6401 const VALUE v2;
6402 union {
6403 long cnt;
6404 long state;
6405 const VALUE value;
6406 void (*func)(void);
6407 } u3;
6408};
6409typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
6410rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
6411struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
6412void rb_strterm_mark(VALUE obj);
6413static inline enum imemo_type imemo_type(VALUE imemo);
6414static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
6415static inline _Bool imemo_throw_data_p(VALUE imemo);
6416static inline struct vm_ifunc *rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data);
6417static inline VALUE rb_imemo_tmpbuf_auto_free_pointer(void);
6418static inline void *RB_IMEMO_TMPBUF_PTR(VALUE v);
6419static inline void *rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr);
6420static inline VALUE rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str);
6421static inline void MEMO_V1_SET(struct MEMO *m, VALUE v);
6422static inline void MEMO_V2_SET(struct MEMO *m, VALUE v);
6423
6424
6425VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0);
6426const char *rb_imemo_name(enum imemo_type type);
6427
6428
6429static inline enum imemo_type
6430imemo_type(VALUE imemo)
6431{
6432 return (((struct RBasic *)(imemo))->flags >> ((VALUE)RUBY_FL_USHIFT)) & 0x0f;
6433}
6434static inline int
6435imemo_type_p(VALUE imemo, enum imemo_type imemo_type)
6436{
6437 if ((__builtin_expect(!!(!RB_SPECIAL_CONST_P(imemo)), 1))) {
6438 const VALUE mask = (0x0f << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_MASK;
6439 const VALUE expected_type = (imemo_type << ((VALUE)RUBY_FL_USHIFT)) | RUBY_T_IMEMO;
6440 return expected_type == (((struct RBasic *)(imemo))->flags & mask);
6441 }
6442 else {
6443 return 0;
6444 }
6445}
6446static inline _Bool
6447imemo_throw_data_p(VALUE imemo)
6448{
6449 return RB_TYPE_P(imemo, RUBY_T_IMEMO);
6450}
6451static inline struct vm_ifunc *
6452rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data)
6453{
6454 return rb_vm_ifunc_new(func, data, 0, (-1));
6455}
6456static inline VALUE
6457rb_imemo_tmpbuf_auto_free_pointer(void)
6458{
6459 return rb_imemo_new(imemo_tmpbuf, 0, 0, 0, 0);
6460}
6461static inline void *
6462RB_IMEMO_TMPBUF_PTR(VALUE v)
6463{
6464 const struct rb_imemo_tmpbuf_struct *p = (const void *)v;
6465 return p->ptr;
6466}
6467static inline void *
6468rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr)
6469{
6470 return ((rb_imemo_tmpbuf_t *)v)->ptr = ptr;
6471}
6472static inline VALUE
6473rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str)
6474{
6475 const void *src;
6476 VALUE imemo;
6477 rb_imemo_tmpbuf_t *tmpbuf;
6478 void *dst;
6479 size_t len;
6480 rb_string_value(&(str));
6481 imemo = rb_imemo_tmpbuf_auto_free_pointer();
6482 tmpbuf = (rb_imemo_tmpbuf_t *)imemo;
6483 len = RSTRING_LEN(str);
6484 src = RSTRING_PTR(str);
6485 dst = ruby_xmalloc(len);
6486 ruby_nonempty_memcpy(dst, src, len);
6487 tmpbuf->ptr = dst;
6488 return imemo;
6489}
6490static inline void
6491MEMO_V1_SET(struct MEMO *m, VALUE v)
6492{
6493 rb_obj_write((VALUE)(m), __extension__({
6494 ;
6495 ; __typeof__((VALUE *)(&m->v1)) unaligned_member_access_result = ((VALUE *)(&m->v1));
6496 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.1/internal/imemo.h", 233);
6497}
6498static inline void
6499MEMO_V2_SET(struct MEMO *m, VALUE v)
6500{
6501 rb_obj_write((VALUE)(m), __extension__({
6502 ;
6503 ; __typeof__((VALUE *)(&m->v2)) unaligned_member_access_result = ((VALUE *)(&m->v2));
6504 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.1/internal/imemo.h", 239);
6505}
6506typedef enum {
6507 METHOD_VISI_UNDEF = 0x00,
6508 METHOD_VISI_PUBLIC = 0x01,
6509 METHOD_VISI_PRIVATE = 0x02,
6510 METHOD_VISI_PROTECTED = 0x03,
6511 METHOD_VISI_MASK = 0x03
6512} rb_method_visibility_t;
6513typedef struct rb_scope_visi_struct {
6514 rb_method_visibility_t method_visi : 3;
6515 unsigned int module_func : 1;
6516} rb_scope_visibility_t;
6517typedef struct rb_cref_struct {
6518 VALUE flags;
6519 VALUE refinements;
6520 VALUE klass_or_self;
6521 struct rb_cref_struct * next;
6522 const rb_scope_visibility_t scope_visi;
6523} rb_cref_t;
6524typedef struct rb_method_entry_struct {
6525 VALUE flags;
6526 VALUE defined_class;
6527 struct rb_method_definition_struct * const def;
6528 ID called_id;
6529 VALUE owner;
6530} rb_method_entry_t;
6531typedef struct rb_callable_method_entry_struct {
6532 VALUE flags;
6533 const VALUE defined_class;
6534 struct rb_method_definition_struct * const def;
6535 ID called_id;
6536 const VALUE owner;
6537} rb_callable_method_entry_t;
6538static inline void
6539METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
6540{
6541 ((void)0);
6542 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) | (visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0));
6543}
6544static inline void
6545METHOD_ENTRY_BASIC_SET(rb_method_entry_t *me, unsigned int basic)
6546{
6547 ((void)0);
6548 me->flags = (me->flags & ~(((VALUE)RUBY_FL_USER6) )) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2));
6549}
6550static inline void
6551METHOD_ENTRY_FLAGS_SET(rb_method_entry_t *me, rb_method_visibility_t visi, unsigned int basic)
6552{
6553 ((void)0);
6554 ((void)0);
6555 me->flags =
6556 (me->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6557 ((visi << ((((VALUE)RUBY_FL_USHIFT) + 4)+0)) | (basic << ((((VALUE)RUBY_FL_USHIFT) + 4)+2)));
6558}
6559static inline void
6560METHOD_ENTRY_FLAGS_COPY(rb_method_entry_t *dst, const rb_method_entry_t *src)
6561{
6562 dst->flags =
6563 (dst->flags & ~(((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6))) |
6564 (src->flags & (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)));
6565}
6566typedef enum {
6567 VM_METHOD_TYPE_ISEQ,
6568 VM_METHOD_TYPE_CFUNC,
6569 VM_METHOD_TYPE_ATTRSET,
6570 VM_METHOD_TYPE_IVAR,
6571 VM_METHOD_TYPE_BMETHOD,
6572 VM_METHOD_TYPE_ZSUPER,
6573 VM_METHOD_TYPE_ALIAS,
6574 VM_METHOD_TYPE_UNDEF,
6575 VM_METHOD_TYPE_NOTIMPLEMENTED,
6576 VM_METHOD_TYPE_OPTIMIZED,
6577 VM_METHOD_TYPE_MISSING,
6578 VM_METHOD_TYPE_REFINED,
6579
6580} rb_method_type_t;
6581__extension__ _Static_assert(VM_METHOD_TYPE_REFINED <= (1<<4), "VM_METHOD_TYPE_MINIMUM_BITS" ": " "VM_METHOD_TYPE_REFINED <= (1<<VM_METHOD_TYPE_MINIMUM_BITS)");
6582typedef struct rb_iseq_struct rb_iseq_t;
6583typedef struct rb_method_iseq_struct {
6584 const rb_iseq_t * iseqptr;
6585 rb_cref_t * cref;
6586} rb_method_iseq_t;
6587typedef struct rb_method_cfunc_struct {
6588 VALUE (*func)();
6589 VALUE (*invoker)(VALUE recv, int argc, const VALUE *argv, VALUE (*func)());
6590 int argc;
6591} rb_method_cfunc_t;
6592typedef struct rb_method_attr_struct {
6593 ID id;
6594 VALUE location;
6595} rb_method_attr_t;
6596typedef struct rb_method_alias_struct {
6597 struct rb_method_entry_struct * original_me;
6598} rb_method_alias_t;
6599typedef struct rb_method_refined_struct {
6600 struct rb_method_entry_struct * orig_me;
6601 VALUE owner;
6602} rb_method_refined_t;
6603typedef struct rb_method_bmethod_struct {
6604 VALUE proc;
6605 struct rb_hook_list_struct *hooks;
6606 VALUE defined_ractor;
6607} rb_method_bmethod_t;
6608enum method_optimized_type {
6609 OPTIMIZED_METHOD_TYPE_SEND,
6610 OPTIMIZED_METHOD_TYPE_CALL,
6611 OPTIMIZED_METHOD_TYPE_BLOCK_CALL,
6612 OPTIMIZED_METHOD_TYPE_STRUCT_AREF,
6613 OPTIMIZED_METHOD_TYPE_STRUCT_ASET,
6614 OPTIMIZED_METHOD_TYPE__MAX
6615};
6616typedef struct rb_method_optimized {
6617 enum method_optimized_type type;
6618 unsigned int index;
6619} rb_method_optimized_t;
6620struct rb_method_definition_struct {
6621 rb_method_type_t type : 4;
6622 unsigned int iseq_overload: 1;
6623 int alias_count : 27;
6624 int complemented_count : 28;
6625 unsigned int no_redef_warning: 1;
6626 union {
6627 rb_method_iseq_t iseq;
6628 rb_method_cfunc_t cfunc;
6629 rb_method_attr_t attr;
6630 rb_method_alias_t alias;
6631 rb_method_refined_t refined;
6632 rb_method_bmethod_t bmethod;
6633 rb_method_optimized_t optimized;
6634 } body;
6635 ID original_id;
6636 uintptr_t method_serial;
6637};
6638struct rb_id_table;
6639typedef struct rb_method_definition_struct rb_method_definition_t;
6640__extension__ _Static_assert(__builtin_offsetof (rb_method_definition_t, body)==8, "sizeof_method_def" ": " "offsetof(rb_method_definition_t, body)==8");
6641void rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_visibility_t visi);
6642void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(), int argc, rb_method_visibility_t visi);
6643void rb_add_method_iseq(VALUE klass, ID mid, const rb_iseq_t *iseq, rb_cref_t *cref, rb_method_visibility_t visi);
6644void rb_add_method_optimized(VALUE klass, ID mid, enum method_optimized_type, unsigned int index, rb_method_visibility_t visi);
6645void rb_add_refined_method_entry(VALUE refined_class, ID mid);
6646rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex);
6647rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def);
6648const rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
6649const rb_method_entry_t *rb_method_entry(VALUE klass, ID id);
6650const rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6651const rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6652const rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
6653
6654
6655const rb_method_entry_t *rb_resolve_me_location(const rb_method_entry_t *, VALUE[5]);
6656
6657
6658const rb_callable_method_entry_t *rb_callable_method_entry(VALUE klass, ID id);
6659const rb_callable_method_entry_t *rb_callable_method_entry_or_negative(VALUE klass, ID id);
6660const rb_callable_method_entry_t *rb_callable_method_entry_with_refinements(VALUE klass, ID id, VALUE *defined_class);
6661const rb_callable_method_entry_t *rb_callable_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
6662int rb_method_entry_arity(const rb_method_entry_t *me);
6663int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2);
6664st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
6665VALUE rb_method_entry_location(const rb_method_entry_t *me);
6666void rb_free_method_entry(const rb_method_entry_t *me);
6667const rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me);
6668const rb_callable_method_entry_t *rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID called_id, VALUE defined_class);
6669void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src);
6670void rb_method_table_insert(VALUE klass, struct rb_id_table *table, ID method_id, const rb_method_entry_t *me);
6671void rb_scope_visibility_set(rb_method_visibility_t);
6672VALUE rb_unnamed_parameters(int arity);
6673void rb_clear_method_cache(VALUE klass_or_module, ID mid);
6674void rb_clear_method_cache_all(void);
6675enum node_type {
6676 NODE_SCOPE,
6677 NODE_BLOCK,
6678 NODE_IF,
6679 NODE_UNLESS,
6680 NODE_CASE,
6681 NODE_CASE2,
6682 NODE_CASE3,
6683 NODE_WHEN,
6684 NODE_IN,
6685 NODE_WHILE,
6686 NODE_UNTIL,
6687 NODE_ITER,
6688 NODE_FOR,
6689 NODE_FOR_MASGN,
6690 NODE_BREAK,
6691 NODE_NEXT,
6692 NODE_REDO,
6693 NODE_RETRY,
6694 NODE_BEGIN,
6695 NODE_RESCUE,
6696 NODE_RESBODY,
6697 NODE_ENSURE,
6698 NODE_AND,
6699 NODE_OR,
6700 NODE_MASGN,
6701 NODE_LASGN,
6702 NODE_DASGN,
6703 NODE_GASGN,
6704 NODE_IASGN,
6705 NODE_CDECL,
6706 NODE_CVASGN,
6707 NODE_OP_ASGN1,
6708 NODE_OP_ASGN2,
6709 NODE_OP_ASGN_AND,
6710 NODE_OP_ASGN_OR,
6711 NODE_OP_CDECL,
6712 NODE_CALL,
6713 NODE_OPCALL,
6714 NODE_FCALL,
6715 NODE_VCALL,
6716 NODE_QCALL,
6717 NODE_SUPER,
6718 NODE_ZSUPER,
6719 NODE_LIST,
6720 NODE_ZLIST,
6721 NODE_VALUES,
6722 NODE_HASH,
6723 NODE_RETURN,
6724 NODE_YIELD,
6725 NODE_LVAR,
6726 NODE_DVAR,
6727 NODE_GVAR,
6728 NODE_IVAR,
6729 NODE_CONST,
6730 NODE_CVAR,
6731 NODE_NTH_REF,
6732 NODE_BACK_REF,
6733 NODE_MATCH,
6734 NODE_MATCH2,
6735 NODE_MATCH3,
6736 NODE_LIT,
6737 NODE_STR,
6738 NODE_DSTR,
6739 NODE_XSTR,
6740 NODE_DXSTR,
6741 NODE_EVSTR,
6742 NODE_DREGX,
6743 NODE_ONCE,
6744 NODE_ARGS,
6745 NODE_ARGS_AUX,
6746 NODE_OPT_ARG,
6747 NODE_KW_ARG,
6748 NODE_POSTARG,
6749 NODE_ARGSCAT,
6750 NODE_ARGSPUSH,
6751 NODE_SPLAT,
6752 NODE_BLOCK_PASS,
6753 NODE_DEFN,
6754 NODE_DEFS,
6755 NODE_ALIAS,
6756 NODE_VALIAS,
6757 NODE_UNDEF,
6758 NODE_CLASS,
6759 NODE_MODULE,
6760 NODE_SCLASS,
6761 NODE_COLON2,
6762 NODE_COLON3,
6763 NODE_DOT2,
6764 NODE_DOT3,
6765 NODE_FLIP2,
6766 NODE_FLIP3,
6767 NODE_SELF,
6768 NODE_NIL,
6769 NODE_TRUE,
6770 NODE_FALSE,
6771 NODE_ERRINFO,
6772 NODE_DEFINED,
6773 NODE_POSTEXE,
6774 NODE_DSYM,
6775 NODE_ATTRASGN,
6776 NODE_LAMBDA,
6777 NODE_ARYPTN,
6778 NODE_HSHPTN,
6779 NODE_FNDPTN,
6780 NODE_ERROR,
6781 NODE_LAST
6782};
6783typedef struct rb_code_position_struct {
6784 int lineno;
6785 int column;
6786} rb_code_position_t;
6787typedef struct rb_code_location_struct {
6788 rb_code_position_t beg_pos;
6789 rb_code_position_t end_pos;
6790} rb_code_location_t;
6791static inline rb_code_location_t
6792code_loc_gen(const rb_code_location_t *loc1, const rb_code_location_t *loc2)
6793{
6794 rb_code_location_t loc;
6795 loc.beg_pos = loc1->beg_pos;
6796 loc.end_pos = loc2->end_pos;
6797 return loc;
6798}
6799typedef struct rb_ast_id_table {
6800 int size;
6801 ID ids[];
6802} rb_ast_id_table_t;
6803typedef struct RNode {
6804 VALUE flags;
6805 union {
6806 struct RNode *node;
6807 ID id;
6808 VALUE value;
6809 rb_ast_id_table_t *tbl;
6810 } u1;
6811 union {
6812 struct RNode *node;
6813 ID id;
6814 long argc;
6815 VALUE value;
6816 } u2;
6817 union {
6818 struct RNode *node;
6819 ID id;
6820 long state;
6821 struct rb_args_info *args;
6822 struct rb_ary_pattern_info *apinfo;
6823 struct rb_fnd_pattern_info *fpinfo;
6824 VALUE value;
6825 } u3;
6826 rb_code_location_t nd_loc;
6827 int node_id;
6828} NODE;
6829VALUE rb_node_case_when_optimizable_literal(const NODE *const node);
6830
6831
6832typedef struct node_buffer_struct node_buffer_t;
6833typedef struct rb_ast_body_struct {
6834 const NODE *root;
6835 VALUE compile_option;
6836 VALUE script_lines;
6837} rb_ast_body_t;
6838typedef struct rb_ast_struct {
6839 VALUE flags;
6840 node_buffer_t *node_buffer;
6841 rb_ast_body_t body;
6842} rb_ast_t;
6843rb_ast_t *rb_ast_new(void);
6844void rb_ast_mark(rb_ast_t*);
6845void rb_ast_update_references(rb_ast_t*);
6846void rb_ast_dispose(rb_ast_t*);
6847void rb_ast_free(rb_ast_t*);
6848size_t rb_ast_memsize(const rb_ast_t*);
6849void rb_ast_add_mark_object(rb_ast_t*, VALUE);
6850void rb_ast_set_tokens(rb_ast_t*, VALUE);
6851VALUE rb_ast_tokens(rb_ast_t *ast);
6852NODE *rb_ast_newnode(rb_ast_t*, enum node_type type);
6853void rb_ast_delete_node(rb_ast_t*, NODE *n);
6854rb_ast_id_table_t *rb_ast_new_local_table(rb_ast_t*, int);
6855rb_ast_id_table_t *rb_ast_resize_latest_local_table(rb_ast_t*, int);
6856VALUE rb_parser_new(void);
6857VALUE rb_parser_end_seen_p(VALUE);
6858VALUE rb_parser_encoding(VALUE);
6859VALUE rb_parser_set_yydebug(VALUE, VALUE);
6860VALUE rb_parser_dump_tree(const NODE *node, int comment);
6861void rb_parser_set_options(VALUE, int, int, int, int);
6862rb_ast_t *rb_parser_compile_string(VALUE, const char*, VALUE, int);
6863rb_ast_t *rb_parser_compile_string_path(VALUE vparser, VALUE fname, VALUE src, int line);
6864rb_ast_t *rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE input, int line);
6865rb_ast_t *rb_parser_compile_generic(VALUE vparser, VALUE (*lex_gets)(VALUE, int), VALUE fname, VALUE input, int line);
6866void rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2);
6867const char *ruby_node_name(int node);
6868const struct kwtable *rb_reserved_word(const char *, unsigned int);
6869struct rb_args_info {
6870 NODE *pre_init;
6871 NODE *post_init;
6872 int pre_args_num;
6873 int post_args_num;
6874 ID first_post_arg;
6875 ID rest_arg;
6876 ID block_arg;
6877 NODE *kw_args;
6878 NODE *kw_rest_arg;
6879 NODE *opt_args;
6880 unsigned int no_kwarg: 1;
6881 unsigned int ruby2_keywords: 1;
6882 unsigned int forwarding: 1;
6883 VALUE imemo;
6884};
6885struct rb_ary_pattern_info {
6886 NODE *pre_args;
6887 NODE *rest_arg;
6888 NODE *post_args;
6889};
6890struct rb_fnd_pattern_info {
6891 NODE *pre_rest_arg;
6892 NODE *args;
6893 NODE *post_rest_arg;
6894};
6895struct parser_params;
6896void *rb_parser_malloc(struct parser_params *, size_t);
6897void *rb_parser_realloc(struct parser_params *, void *, size_t);
6898void *rb_parser_calloc(struct parser_params *, size_t, size_t);
6899void rb_parser_free(struct parser_params *, void *);
6900__attribute__((__format__(__printf__, (2), (3)))) void rb_parser_printf(struct parser_params *parser, const char *fmt, ...);
6901void rb_ast_node_type_change(NODE *n, enum node_type type);
6902
6903
6904static inline VALUE
6905rb_node_set_type(NODE *n, enum node_type t)
6906{
6907 return (n)->flags=(((n)->flags&~(((VALUE)0x7f)<<8))|((((unsigned long)(t))<<8)&(((VALUE)0x7f)<<8)));
6908}
6909static inline _Bool
6910nd_type_p(const NODE *n, enum node_type t)
6911{
6912 return (enum node_type)((int) (((n)->flags & (((VALUE)0x7f)<<8))>>8)) == t;
6913}
6914typedef unsigned int rb_atomic_t;
6915__attribute__((__artificial__))
6916
6917__attribute__((__nonnull__ (1)))
6918static inline rb_atomic_t
6919rbimpl_atomic_fetch_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6920{
6921 return __atomic_fetch_add(ptr, val, 5);
6922}
6923__attribute__((__artificial__))
6924
6925__attribute__((__nonnull__ (1)))
6926static inline void
6927rbimpl_atomic_add(volatile rb_atomic_t *ptr, rb_atomic_t val)
6928{
6929 __atomic_add_fetch(ptr, val, 5);
6930}
6931__attribute__((__artificial__))
6932
6933__attribute__((__nonnull__ (1)))
6934static inline void
6935rbimpl_atomic_size_add(volatile size_t *ptr, size_t val)
6936{
6937 __atomic_add_fetch(ptr, val, 5);
6938}
6939__attribute__((__artificial__))
6940
6941__attribute__((__nonnull__ (1)))
6942static inline void
6943rbimpl_atomic_inc(volatile rb_atomic_t *ptr)
6944{
6945 rbimpl_atomic_add(ptr, 1);
6946}
6947__attribute__((__artificial__))
6948
6949__attribute__((__nonnull__ (1)))
6950static inline void
6951rbimpl_atomic_size_inc(volatile size_t *ptr)
6952{
6953 rbimpl_atomic_size_add(ptr, 1);
6954}
6955__attribute__((__artificial__))
6956
6957__attribute__((__nonnull__ (1)))
6958static inline rb_atomic_t
6959rbimpl_atomic_fetch_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6960{
6961 return __atomic_fetch_sub(ptr, val, 5);
6962}
6963__attribute__((__artificial__))
6964
6965__attribute__((__nonnull__ (1)))
6966static inline void
6967rbimpl_atomic_sub(volatile rb_atomic_t *ptr, rb_atomic_t val)
6968{
6969 __atomic_sub_fetch(ptr, val, 5);
6970}
6971__attribute__((__artificial__))
6972
6973__attribute__((__nonnull__ (1)))
6974static inline void
6975rbimpl_atomic_size_sub(volatile size_t *ptr, size_t val)
6976{
6977 __atomic_sub_fetch(ptr, val, 5);
6978}
6979__attribute__((__artificial__))
6980
6981__attribute__((__nonnull__ (1)))
6982static inline void
6983rbimpl_atomic_dec(volatile rb_atomic_t *ptr)
6984{
6985 rbimpl_atomic_sub(ptr, 1);
6986}
6987__attribute__((__artificial__))
6988
6989__attribute__((__nonnull__ (1)))
6990static inline void
6991rbimpl_atomic_size_dec(volatile size_t *ptr)
6992{
6993 rbimpl_atomic_size_sub(ptr, 1);
6994}
6995__attribute__((__artificial__))
6996
6997__attribute__((__nonnull__ (1)))
6998static inline void
6999rbimpl_atomic_or(volatile rb_atomic_t *ptr, rb_atomic_t val)
7000{
7001 __atomic_or_fetch(ptr, val, 5);
7002}
7003__attribute__((__artificial__))
7004
7005__attribute__((__nonnull__ (1)))
7006static inline rb_atomic_t
7007rbimpl_atomic_exchange(volatile rb_atomic_t *ptr, rb_atomic_t val)
7008{
7009 return __atomic_exchange_n(ptr, val, 5);
7010}
7011__attribute__((__artificial__))
7012
7013__attribute__((__nonnull__ (1)))
7014static inline size_t
7015rbimpl_atomic_size_exchange(volatile size_t *ptr, size_t val)
7016{
7017 return __atomic_exchange_n(ptr, val, 5);
7018}
7019__attribute__((__artificial__))
7020
7021__attribute__((__nonnull__ (1)))
7022static inline void *
7023rbimpl_atomic_ptr_exchange(void *volatile *ptr, const void *val)
7024{
7025 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
7026 const size_t sval = ((size_t)val);
7027 volatile size_t *const sptr = ((volatile size_t *)ptr);
7028 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
7029 return ((void *)sret);
7030}
7031__attribute__((__artificial__))
7032
7033__attribute__((__nonnull__ (1)))
7034static inline VALUE
7035rbimpl_atomic_value_exchange(volatile VALUE *ptr, VALUE val)
7036{
7037 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
7038 const size_t sval = ((size_t)val);
7039 volatile size_t *const sptr = ((volatile size_t *)ptr);
7040 const size_t sret = rbimpl_atomic_size_exchange(sptr, sval);
7041 return ((VALUE)sret);
7042}
7043__attribute__((__artificial__))
7044
7045__attribute__((__nonnull__ (1)))
7046static inline void
7047rbimpl_atomic_set(volatile rb_atomic_t *ptr, rb_atomic_t val)
7048{
7049 __atomic_store_n(ptr, val, 5);
7050}
7051__attribute__((__artificial__))
7052
7053__attribute__((__nonnull__ (1)))
7054static inline rb_atomic_t
7055rbimpl_atomic_cas(volatile rb_atomic_t *ptr, rb_atomic_t oldval, rb_atomic_t newval)
7056{
7057 __atomic_compare_exchange_n(
7058 ptr, &oldval, newval, 0, 5, 5);
7059 return oldval;
7060}
7061__attribute__((__artificial__))
7062
7063__attribute__((__nonnull__ (1)))
7064static inline size_t
7065rbimpl_atomic_size_cas(volatile size_t *ptr, size_t oldval, size_t newval)
7066{
7067 __atomic_compare_exchange_n(
7068 ptr, &oldval, newval, 0, 5, 5);
7069 return oldval;
7070}
7071__attribute__((__artificial__))
7072
7073__attribute__((__nonnull__ (1)))
7074static inline void *
7075rbimpl_atomic_ptr_cas(void **ptr, const void *oldval, const void *newval)
7076{
7077 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_voidp" ": " "sizeof *ptr == sizeof(size_t)");
7078 const size_t snew = ((size_t)newval);
7079 const size_t sold = ((size_t)oldval);
7080 volatile size_t *const sptr = ((volatile size_t *)ptr);
7081 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
7082 return ((void *)sret);
7083}
7084__attribute__((__artificial__))
7085
7086__attribute__((__nonnull__ (1)))
7087static inline VALUE
7088rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval)
7089{
7090 __extension__ _Static_assert(sizeof *ptr == sizeof(size_t), "sizeof_value" ": " "sizeof *ptr == sizeof(size_t)");
7091 const size_t snew = ((size_t)newval);
7092 const size_t sold = ((size_t)oldval);
7093 volatile size_t *const sptr = ((volatile size_t *)ptr);
7094 const size_t sret = rbimpl_atomic_size_cas(sptr, sold, snew);
7095 return ((VALUE)sret);
7096}
7097typedef uint32_t attr_index_t;
7098typedef uint32_t shape_id_t;
7099struct rb_shape {
7100 struct rb_id_table * edges;
7101 ID edge_name;
7102 attr_index_t next_iv_index;
7103 uint32_t capacity;
7104 uint8_t type;
7105 uint8_t size_pool_index;
7106 shape_id_t parent_id;
7107};
7108typedef struct rb_shape rb_shape_t;
7109enum shape_type {
7110 SHAPE_ROOT,
7111 SHAPE_IVAR,
7112 SHAPE_FROZEN,
7113 SHAPE_CAPACITY_CHANGE,
7114 SHAPE_INITIAL_CAPACITY,
7115 SHAPE_T_OBJECT,
7116 SHAPE_OBJ_TOO_COMPLEX,
7117};
7118static inline shape_id_t
7119RBASIC_SHAPE_ID(VALUE obj)
7120{
7121 ((void)0);
7122 return (shape_id_t)((((uintptr_t)1 << 32) - 1) & ((((struct RBasic *)(obj))->flags) >> ((8 * 8) - 32)));
7123}
7124static inline void
7125RBASIC_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id)
7126{
7127 ((struct RBasic *)(obj))->flags &= (((VALUE)-1) >> 32);
7128 ((struct RBasic *)(obj))->flags |= ((VALUE)(shape_id) << ((8 * 8) - 32));
7129}
7130static inline shape_id_t
7131ROBJECT_SHAPE_ID(VALUE obj)
7132{
7133 ((void)0);
7134 return RBASIC_SHAPE_ID(obj);
7135}
7136static inline void
7137ROBJECT_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id)
7138{
7139 ((void)0);
7140 RBASIC_SET_SHAPE_ID(obj, shape_id);
7141}
7142static inline shape_id_t
7143RCLASS_SHAPE_ID(VALUE obj)
7144{
7145 ((void)0);
7146 return RBASIC_SHAPE_ID(obj);
7147}
7148_Bool rb_shape_root_shape_p(rb_shape_t* shape);
7149rb_shape_t * rb_shape_get_root_shape(void);
7150uint8_t rb_shape_id_num_bits(void);
7151int32_t rb_shape_id_offset(void);
7152rb_shape_t* rb_shape_get_shape_by_id_without_assertion(shape_id_t shape_id);
7153rb_shape_t * rb_shape_get_parent(rb_shape_t * shape);
7154
7155
7156rb_shape_t* rb_shape_get_shape_by_id(shape_id_t shape_id);
7157shape_id_t rb_shape_get_shape_id(VALUE obj);
7158rb_shape_t * rb_shape_get_next_iv_shape(rb_shape_t * shape, ID id);
7159_Bool rb_shape_get_iv_index(rb_shape_t * shape, ID id, attr_index_t * value);
7160_Bool rb_shape_obj_too_complex(VALUE obj);
7161
7162
7163void rb_shape_set_shape(VALUE obj, rb_shape_t* shape);
7164rb_shape_t* rb_shape_get_shape(VALUE obj);
7165int rb_shape_frozen_shape_p(rb_shape_t* shape);
7166void rb_shape_transition_shape_frozen(VALUE obj);
7167void rb_shape_transition_shape_remove_ivar(VALUE obj, ID id, rb_shape_t *shape, VALUE * removed);
7168rb_shape_t * rb_shape_transition_shape_capa(rb_shape_t * shape, uint32_t new_capacity);
7169rb_shape_t* rb_shape_get_next(rb_shape_t* shape, VALUE obj, ID id);
7170rb_shape_t * rb_shape_rebuild_shape(rb_shape_t * initial_shape, rb_shape_t * dest_shape);
7171static inline uint32_t
7172ROBJECT_IV_CAPACITY(VALUE obj)
7173{
7174 ((void)0);
7175 ((void)0);
7176 return rb_shape_get_shape_by_id(ROBJECT_SHAPE_ID(obj))->capacity;
7177}
7178static inline struct rb_id_table *
7179ROBJECT_IV_HASH(VALUE obj)
7180{
7181 ((void)0);
7182 ((void)0);
7183 return (struct rb_id_table *)((struct RObject *)(obj))->as.heap.ivptr;
7184}
7185static inline void
7186ROBJECT_SET_IV_HASH(VALUE obj, const struct rb_id_table *tbl)
7187{
7188 ((void)0);
7189 ((void)0);
7190 ((struct RObject *)(obj))->as.heap.ivptr = (VALUE *)tbl;
7191}
7192size_t rb_id_table_size(const struct rb_id_table *tbl);
7193static inline uint32_t
7194ROBJECT_IV_COUNT(VALUE obj)
7195{
7196 if (ROBJECT_SHAPE_ID(obj) == ((5 * 2) + 1)) {
7197 return (uint32_t)rb_id_table_size(ROBJECT_IV_HASH(obj));
7198 }
7199 else {
7200 ((void)0);
7201 ((void)0);
7202 return rb_shape_get_shape_by_id(ROBJECT_SHAPE_ID(obj))->next_iv_index;
7203 }
7204}
7205static inline uint32_t
7206RBASIC_IV_COUNT(VALUE obj)
7207{
7208 return rb_shape_get_shape_by_id(rb_shape_get_shape_id(obj))->next_iv_index;
7209}
7210static inline uint32_t
7211RCLASS_IV_COUNT(VALUE obj)
7212{
7213 ((void)0);
7214 uint32_t ivc = rb_shape_get_shape_by_id(RCLASS_SHAPE_ID(obj))->next_iv_index;
7215 return ivc;
7216}
7217rb_shape_t * rb_shape_alloc(ID edge_name, rb_shape_t * parent);
7218rb_shape_t * rb_shape_alloc_with_size_pool_index(ID edge_name, rb_shape_t * parent, uint8_t size_pool_index);
7219rb_shape_t * rb_shape_alloc_with_parent_id(ID edge_name, shape_id_t parent_id);
7220rb_shape_t *rb_shape_traverse_from_new_root(rb_shape_t *initial_shape, rb_shape_t *orig_shape);
7221_Bool rb_shape_set_shape_id(VALUE obj, shape_id_t shape_id);
7222VALUE rb_obj_debug_shape(VALUE self, VALUE obj);
7223VALUE rb_shape_flags_mask(void);
7224void rb_shape_set_too_complex(VALUE obj);
7225
7226
7227typedef void each_shape_callback(rb_shape_t * shape, void *data);
7228void rb_shape_each_shape(each_shape_callback callback, void *data);
7229size_t rb_shape_memsize(rb_shape_t *shape);
7230size_t rb_shape_edges_count(rb_shape_t *shape);
7231size_t rb_shape_depth(rb_shape_t *shape);
7232shape_id_t rb_shape_id(rb_shape_t * shape);
7233
7234
7235struct sched_param {
7236 int sched_priority;
7237};
7238int sched_setparam(
7239 pid_t __pid,
7240 const struct sched_param *__param
7241);
7242int sched_getparam(
7243 pid_t __pid,
7244 struct sched_param *__param
7245);
7246int sched_setscheduler(
7247 pid_t __pid,
7248 int __policy,
7249 const struct sched_param *__param
7250);
7251int sched_getscheduler(
7252 pid_t __pid
7253);
7254int sched_get_priority_max(
7255 int __policy
7256);
7257int sched_get_priority_min(
7258 int __policy
7259);
7260int sched_rr_get_interval(
7261 pid_t __pid,
7262 struct timespec *__interval
7263);
7264int sched_yield( void );
7265int sched_getcpu(void);
7266int sched_getaffinity (pid_t, size_t, cpu_set_t *);
7267int sched_get_thread_affinity (void *, size_t, cpu_set_t *);
7268int sched_setaffinity (pid_t, size_t, const cpu_set_t *);
7269int sched_set_thread_affinity (void *, size_t, const cpu_set_t *);
7270int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
7271int pthread_attr_destroy (pthread_attr_t *);
7272int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
7273int pthread_attr_getguardsize (const pthread_attr_t *, size_t *);
7274int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
7275int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
7276int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
7277int pthread_attr_getscope (const pthread_attr_t *, int *);
7278int pthread_attr_init (pthread_attr_t *);
7279int pthread_attr_setdetachstate (pthread_attr_t *, int);
7280int pthread_attr_setguardsize (pthread_attr_t *, size_t);
7281int pthread_attr_setinheritsched (pthread_attr_t *, int);
7282int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
7283int pthread_attr_setschedpolicy (pthread_attr_t *, int);
7284int pthread_attr_setscope (pthread_attr_t *, int);
7285int pthread_attr_getstack (const pthread_attr_t *, void **, size_t *);
7286int pthread_attr_setstack (pthread_attr_t *, void *, size_t);
7287int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
7288int pthread_attr_setstacksize (pthread_attr_t *, size_t);
7289int pthread_cancel (pthread_t);
7290typedef void (*__cleanup_routine_type) (void *);
7291typedef struct _pthread_cleanup_handler
7292{
7293 __cleanup_routine_type function;
7294 void *arg;
7295 struct _pthread_cleanup_handler *next;
7296} __pthread_cleanup_handler;
7297void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
7298void _pthread_cleanup_pop (int execute);
7299int pthread_cond_broadcast (pthread_cond_t *);
7300int pthread_cond_destroy (pthread_cond_t *);
7301int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
7302int pthread_cond_signal (pthread_cond_t *);
7303int pthread_cond_clockwait (pthread_cond_t *, pthread_mutex_t *,
7304 clockid_t, const struct timespec *);
7305int pthread_cond_timedwait (pthread_cond_t *,
7306 pthread_mutex_t *, const struct timespec *);
7307int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
7308int pthread_condattr_destroy (pthread_condattr_t *);
7309int pthread_condattr_getclock (const pthread_condattr_t *, clockid_t *);
7310int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
7311int pthread_condattr_init (pthread_condattr_t *);
7312int pthread_condattr_setclock (pthread_condattr_t *, clockid_t);
7313int pthread_condattr_setpshared (pthread_condattr_t *, int);
7314int pthread_barrierattr_init (pthread_barrierattr_t *);
7315int pthread_barrierattr_setpshared (pthread_barrierattr_t *, int);
7316int pthread_barrierattr_getpshared (const pthread_barrierattr_t *, int *);
7317int pthread_barrierattr_destroy (pthread_barrierattr_t *);
7318int pthread_barrier_init (pthread_barrier_t *,
7319 const pthread_barrierattr_t *, unsigned);
7320int pthread_barrier_destroy (pthread_barrier_t *);
7321int pthread_barrier_wait (pthread_barrier_t *);
7322int pthread_create (pthread_t *, const pthread_attr_t *,
7323 void *(*)(void *), void *);
7324int pthread_detach (pthread_t);
7325int pthread_equal (pthread_t, pthread_t);
7326void pthread_exit (void *) __attribute__ ((__noreturn__));
7327int pthread_getcpuclockid (pthread_t, clockid_t *);
7328int pthread_getschedparam (pthread_t, int *, struct sched_param *);
7329void *pthread_getspecific (pthread_key_t);
7330int pthread_join (pthread_t, void **);
7331int pthread_key_create (pthread_key_t *, void (*)(void *));
7332int pthread_key_delete (pthread_key_t);
7333int pthread_mutex_destroy (pthread_mutex_t *);
7334int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
7335int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
7336int pthread_mutex_lock (pthread_mutex_t *);
7337int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
7338int pthread_mutex_clocklock (pthread_mutex_t *, clockid_t,
7339 const struct timespec *);
7340int pthread_mutex_timedlock (pthread_mutex_t *, const struct timespec *);
7341int pthread_mutex_trylock (pthread_mutex_t *);
7342int pthread_mutex_unlock (pthread_mutex_t *);
7343int pthread_mutexattr_destroy (pthread_mutexattr_t *);
7344int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
7345int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
7346int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
7347int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
7348int pthread_mutexattr_init (pthread_mutexattr_t *);
7349int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
7350int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
7351int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
7352int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
7353int pthread_spin_destroy (pthread_spinlock_t *);
7354int pthread_spin_init (pthread_spinlock_t *, int);
7355int pthread_spin_lock (pthread_spinlock_t *);
7356int pthread_spin_trylock (pthread_spinlock_t *);
7357int pthread_spin_unlock (pthread_spinlock_t *);
7358int pthread_rwlock_destroy (pthread_rwlock_t *);
7359int pthread_rwlock_init (pthread_rwlock_t *, const pthread_rwlockattr_t *);
7360int pthread_rwlock_rdlock (pthread_rwlock_t *);
7361int pthread_rwlock_clockrdlock (pthread_rwlock_t *, clockid_t,
7362 const struct timespec *);
7363int pthread_rwlock_timedrdlock (pthread_rwlock_t *, const struct timespec *);
7364int pthread_rwlock_tryrdlock (pthread_rwlock_t *);
7365int pthread_rwlock_wrlock (pthread_rwlock_t *);
7366int pthread_rwlock_clockwrlock (pthread_rwlock_t *, clockid_t,
7367 const struct timespec *);
7368int pthread_rwlock_timedwrlock (pthread_rwlock_t *, const struct timespec *);
7369int pthread_rwlock_trywrlock (pthread_rwlock_t *);
7370int pthread_rwlock_unlock (pthread_rwlock_t *);
7371int pthread_rwlockattr_init (pthread_rwlockattr_t *);
7372int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *, int *);
7373int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *, int);
7374int pthread_rwlockattr_destroy (pthread_rwlockattr_t *);
7375int pthread_once (pthread_once_t *, void (*)(void));
7376int pthread_getconcurrency (void);
7377int pthread_setconcurrency (int);
7378pthread_t pthread_self (void);
7379int pthread_setcancelstate (int, int *);
7380int pthread_setcanceltype (int, int *);
7381int pthread_setschedparam (pthread_t, int, const struct sched_param *);
7382int pthread_setschedprio (pthread_t, int);
7383int pthread_setspecific (pthread_key_t, const void *);
7384void pthread_testcancel (void);
7385int pthread_getaffinity_np (pthread_t, size_t, cpu_set_t *);
7386int pthread_getattr_np (pthread_t, pthread_attr_t *);
7387int pthread_getname_np (pthread_t, char *, size_t) __attribute__((__nonnull__(2)));
7388int pthread_setaffinity_np (pthread_t, size_t, const cpu_set_t *);
7389int pthread_setname_np (pthread_t, const char *) __attribute__((__nonnull__(2)));
7390int pthread_sigqueue (pthread_t *, int, const union sigval);
7391int pthread_timedjoin_np (pthread_t, void **, const struct timespec *);
7392int pthread_tryjoin_np (pthread_t, void **);
7393int pthread_yield (void);
7394int pthread_suspend (pthread_t);
7395int pthread_continue (pthread_t);
7396typedef pthread_t rb_nativethread_id_t;
7397typedef pthread_mutex_t rb_nativethread_lock_t;
7398typedef pthread_cond_t rb_nativethread_cond_t;
7399
7400
7401rb_nativethread_id_t rb_nativethread_self(void);
7402void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
7403void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
7404void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
7405void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
7406void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
7407int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
7408void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
7409void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
7410void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
7411void rb_native_cond_signal(rb_nativethread_cond_t *cond);
7412void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
7413void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
7414void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
7415void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
7416void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
7417
7418
7419void *rb_allocate_sigaltstack(void);
7420void *rb_register_sigaltstack(void *);
7421struct rb_thread_sched_item {
7422 union {
7423 struct ccan_list_node ubf;
7424 struct ccan_list_node readyq;
7425 } node;
7426};
7427struct rb_native_thread {
7428 int id;
7429 rb_nativethread_id_t thread_id;
7430 struct rb_thread_struct *running_thread;
7431 struct
7432 {
7433 rb_nativethread_cond_t intr;
7434 rb_nativethread_cond_t readyq;
7435 } cond;
7436 void *altstack;
7437};
7438struct rb_thread_sched {
7439 const struct rb_thread_struct *running;
7440 rb_nativethread_lock_t lock;
7441 struct ccan_list_head readyq;
7442 const struct rb_thread_struct *timer;
7443 int timer_err;
7444 rb_nativethread_cond_t switch_cond;
7445 rb_nativethread_cond_t switch_wait_cond;
7446 int need_yield;
7447 int wait_yield;
7448};
7449
7450
7451extern _Thread_local struct rb_execution_context_struct *ruby_current_ec;
7452
7453
7454void rb_vm_encoded_insn_data_table_init(void);
7455typedef unsigned long rb_num_t;
7456typedef signed long rb_snum_t;
7457enum ruby_tag_type {
7458 RUBY_TAG_NONE = 0x0,
7459 RUBY_TAG_RETURN = 0x1,
7460 RUBY_TAG_BREAK = 0x2,
7461 RUBY_TAG_NEXT = 0x3,
7462 RUBY_TAG_RETRY = 0x4,
7463 RUBY_TAG_REDO = 0x5,
7464 RUBY_TAG_RAISE = 0x6,
7465 RUBY_TAG_THROW = 0x7,
7466 RUBY_TAG_FATAL = 0x8,
7467 RUBY_TAG_MASK = 0xf
7468};
7469enum ruby_vm_throw_flags {
7470 VM_THROW_NO_ESCAPE_FLAG = 0x8000,
7471 VM_THROW_STATE_MASK = 0xff
7472};
7473struct rb_thread_struct;
7474struct rb_control_frame_struct;
7475typedef struct rb_compile_option_struct rb_compile_option_t;
7476union ic_serial_entry {
7477 rb_serial_t raw;
7478 VALUE data[2];
7479};
7480struct iseq_inline_constant_cache_entry {
7481 VALUE flags;
7482 VALUE value;
7483 VALUE _unused1;
7484 VALUE _unused2;
7485 const rb_cref_t *ic_cref;
7486};
7487__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");
7488struct iseq_inline_constant_cache {
7489 struct iseq_inline_constant_cache_entry *entry;
7490 const ID *segments;
7491};
7492struct iseq_inline_iv_cache_entry {
7493 uintptr_t value;
7494 ID iv_set_name;
7495};
7496struct iseq_inline_cvar_cache_entry {
7497 struct rb_cvar_class_tbl_entry *entry;
7498};
7499union iseq_inline_storage_entry {
7500 struct {
7501 struct rb_thread_struct *running_thread;
7502 VALUE value;
7503 } once;
7504 struct iseq_inline_constant_cache ic_cache;
7505 struct iseq_inline_iv_cache_entry iv_cache;
7506};
7507struct rb_calling_info {
7508 const struct rb_callinfo *ci;
7509 const struct rb_callcache *cc;
7510 VALUE block_handler;
7511 VALUE recv;
7512 int argc;
7513 int kw_splat;
7514};
7515struct rb_execution_context_struct;
7516typedef struct rb_iseq_location_struct {
7517 VALUE pathobj;
7518 VALUE base_label;
7519 VALUE label;
7520 int first_lineno;
7521 int node_id;
7522 rb_code_location_t code_location;
7523} rb_iseq_location_t;
7524static inline VALUE
7525pathobj_path(VALUE pathobj)
7526{
7527 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7528 return pathobj;
7529 }
7530 else {
7531 ((void)0);
7532 return RARRAY_AREF(pathobj, 0);
7533 }
7534}
7535static inline VALUE
7536pathobj_realpath(VALUE pathobj)
7537{
7538 if (RB_TYPE_P(pathobj, RUBY_T_STRING)) {
7539 return pathobj;
7540 }
7541 else {
7542 ((void)0);
7543 return RARRAY_AREF(pathobj, 1);
7544 }
7545}
7546struct rb_mjit_unit;
7547typedef uintptr_t iseq_bits_t;
7548enum rb_iseq_type {
7549 ISEQ_TYPE_TOP,
7550 ISEQ_TYPE_METHOD,
7551 ISEQ_TYPE_BLOCK,
7552 ISEQ_TYPE_CLASS,
7553 ISEQ_TYPE_RESCUE,
7554 ISEQ_TYPE_ENSURE,
7555 ISEQ_TYPE_EVAL,
7556 ISEQ_TYPE_MAIN,
7557 ISEQ_TYPE_PLAIN
7558};
7559struct rb_iseq_constant_body {
7560 enum rb_iseq_type type;
7561 unsigned int iseq_size;
7562 VALUE *iseq_encoded;
7563 struct {
7564 struct {
7565 unsigned int has_lead : 1;
7566 unsigned int has_opt : 1;
7567 unsigned int has_rest : 1;
7568 unsigned int has_post : 1;
7569 unsigned int has_kw : 1;
7570 unsigned int has_kwrest : 1;
7571 unsigned int has_block : 1;
7572 unsigned int ambiguous_param0 : 1;
7573 unsigned int accepts_no_kwarg : 1;
7574 unsigned int ruby2_keywords: 1;
7575 } flags;
7576 unsigned int size;
7577 int lead_num;
7578 int opt_num;
7579 int rest_start;
7580 int post_start;
7581 int post_num;
7582 int block_start;
7583 const VALUE *opt_table;
7584 const struct rb_iseq_param_keyword {
7585 int num;
7586 int required_num;
7587 int bits_start;
7588 int rest_start;
7589 const ID *table;
7590 VALUE *default_values;
7591 } *keyword;
7592 } param;
7593 rb_iseq_location_t location;
7594 struct iseq_insn_info {
7595 const struct iseq_insn_info_entry *body;
7596 unsigned int *positions;
7597 unsigned int size;
7598 struct succ_index_table *succ_index_table;
7599 } insns_info;
7600 const ID *local_table;
7601 struct iseq_catch_table *catch_table;
7602 const struct rb_iseq_struct *parent_iseq;
7603 struct rb_iseq_struct *local_iseq;
7604 union iseq_inline_storage_entry *is_entries;
7605 struct rb_call_data *call_data;
7606 struct {
7607 rb_snum_t flip_count;
7608 VALUE script_lines;
7609 VALUE coverage;
7610 VALUE pc2branchindex;
7611 VALUE *original_iseq;
7612 } variable;
7613 unsigned int local_table_size;
7614 unsigned int ic_size;
7615 unsigned int ise_size;
7616 unsigned int ivc_size;
7617 unsigned int icvarc_size;
7618 unsigned int ci_size;
7619 unsigned int stack_max;
7620 _Bool catch_except_p;
7621 _Bool builtin_inline_p;
7622 union {
7623 iseq_bits_t * list;
7624 iseq_bits_t single;
7625 } mark_bits;
7626 struct rb_id_table *outer_variables;
7627 const rb_iseq_t *mandatory_only_iseq;
7628 VALUE (*jit_func)(struct rb_execution_context_struct *, struct rb_control_frame_struct *);
7629 long unsigned total_calls;
7630 struct rb_mjit_unit *mjit_unit;
7631};
7632struct rb_iseq_struct {
7633 VALUE flags;
7634 VALUE wrapper;
7635 struct rb_iseq_constant_body *body;
7636 union {
7637 struct iseq_compile_data *compile_data;
7638 struct {
7639 VALUE obj;
7640 int index;
7641 } loader;
7642 struct {
7643 struct rb_hook_list_struct *local_hooks;
7644 rb_event_flag_t global_trace_events;
7645 } exec;
7646 } aux;
7647};
7648static inline const rb_iseq_t *
7649rb_iseq_check(const rb_iseq_t *iseq)
7650{
7651 return iseq;
7652}
7653static inline const rb_iseq_t *
7654def_iseq_ptr(rb_method_definition_t *def)
7655{
7656 return rb_iseq_check(def->body.iseq.iseqptr);
7657}
7658enum ruby_special_exceptions {
7659 ruby_error_reenter,
7660 ruby_error_nomemory,
7661 ruby_error_sysstack,
7662 ruby_error_stackfatal,
7663 ruby_error_stream_closed,
7664 ruby_special_error_count
7665};
7666struct rb_vm_struct;
7667typedef void rb_vm_at_exit_func(struct rb_vm_struct*);
7668typedef struct rb_at_exit_list {
7669 rb_vm_at_exit_func *func;
7670 struct rb_at_exit_list *next;
7671} rb_at_exit_list;
7672struct rb_objspace;
7673struct rb_objspace *rb_objspace_alloc(void);
7674void rb_objspace_free(struct rb_objspace *);
7675void rb_objspace_call_finalizer(struct rb_objspace *);
7676typedef struct rb_hook_list_struct {
7677 struct rb_event_hook_struct *hooks;
7678 rb_event_flag_t events;
7679 unsigned int running;
7680 _Bool need_clean;
7681 _Bool is_local;
7682} rb_hook_list_t;
7683typedef const struct rb_builtin_function *RB_BUILTIN;
7684typedef struct rb_vm_struct {
7685 VALUE self;
7686 struct {
7687 struct ccan_list_head set;
7688 unsigned int cnt;
7689 unsigned int blocking_cnt;
7690 struct rb_ractor_struct *main_ractor;
7691 struct rb_thread_struct *main_thread;
7692 struct {
7693 rb_nativethread_lock_t lock;
7694 struct rb_ractor_struct *lock_owner;
7695 unsigned int lock_rec;
7696 _Bool barrier_waiting;
7697 unsigned int barrier_cnt;
7698 rb_nativethread_cond_t barrier_cond;
7699 rb_nativethread_cond_t terminate_cond;
7700 _Bool terminate_waiting;
7701 } sync;
7702 } ractor;
7703 void *main_altstack;
7704 rb_serial_t fork_gen;
7705 rb_nativethread_lock_t waitpid_lock;
7706 struct ccan_list_head waiting_pids;
7707 struct ccan_list_head waiting_grps;
7708 struct ccan_list_head waiting_fds;
7709 volatile int ubf_async_safe;
7710 unsigned int running: 1;
7711 unsigned int thread_abort_on_exception: 1;
7712 unsigned int thread_report_on_exception: 1;
7713 unsigned int thread_ignore_deadlock: 1;
7714 VALUE mark_object_ary;
7715 const VALUE special_exceptions[ruby_special_error_count];
7716 rb_shape_t *shape_list;
7717 rb_shape_t *root_shape;
7718 shape_id_t next_shape_id;
7719 VALUE top_self;
7720 VALUE load_path;
7721 VALUE load_path_snapshot;
7722 VALUE load_path_check_cache;
7723 VALUE expanded_load_path;
7724 VALUE loaded_features;
7725 VALUE loaded_features_snapshot;
7726 VALUE loaded_features_realpaths;
7727 struct st_table *loaded_features_index;
7728 struct st_table *loading_table;
7729 struct {
7730 VALUE cmd[65];
7731 } trap_list;
7732 struct st_table *ensure_rollback_table;
7733 struct rb_postponed_job_struct *postponed_job_buffer;
7734 rb_atomic_t postponed_job_index;
7735 int src_encoding_index;
7736 struct ccan_list_head workqueue;
7737 rb_nativethread_lock_t workqueue_lock;
7738 VALUE orig_progname, progname;
7739 VALUE coverages, me2counter;
7740 int coverage_mode;
7741 st_table * defined_module_hash;
7742 struct rb_objspace *objspace;
7743 rb_at_exit_list *at_exit;
7744 st_table *frozen_strings;
7745 const struct rb_builtin_function *builtin_function_table;
7746 int builtin_inline_index;
7747 struct rb_id_table *negative_cme_table;
7748 st_table *overloaded_cme_table;
7749 struct rb_id_table *constant_cache;
7750 const struct rb_callcache *global_cc_cache_table[1023];
7751 struct {
7752 size_t thread_vm_stack_size;
7753 size_t thread_machine_stack_size;
7754 size_t fiber_vm_stack_size;
7755 size_t fiber_machine_stack_size;
7756 } default_params;
7757} rb_vm_t;
7758struct rb_captured_block {
7759 VALUE self;
7760 const VALUE *ep;
7761 union {
7762 const rb_iseq_t *iseq;
7763 const struct vm_ifunc *ifunc;
7764 VALUE val;
7765 } code;
7766};
7767enum rb_block_handler_type {
7768 block_handler_type_iseq,
7769 block_handler_type_ifunc,
7770 block_handler_type_symbol,
7771 block_handler_type_proc
7772};
7773enum rb_block_type {
7774 block_type_iseq,
7775 block_type_ifunc,
7776 block_type_symbol,
7777 block_type_proc
7778};
7779struct rb_block {
7780 union {
7781 struct rb_captured_block captured;
7782 VALUE symbol;
7783 VALUE proc;
7784 } as;
7785 enum rb_block_type type;
7786};
7787typedef struct rb_control_frame_struct {
7788 const VALUE *pc;
7789 VALUE *sp;
7790 const rb_iseq_t *iseq;
7791 VALUE self;
7792 const VALUE *ep;
7793 const void *block_code;
7794 VALUE *__bp__;
7795 void *jit_return;
7796} rb_control_frame_t;
7797extern const rb_data_type_t ruby_threadptr_data_type;
7798static inline struct rb_thread_struct *
7799rb_thread_ptr(VALUE thval)
7800{
7801 return (struct rb_thread_struct *)rb_check_typeddata(thval, &ruby_threadptr_data_type);
7802}
7803enum rb_thread_status {
7804 THREAD_RUNNABLE,
7805 THREAD_STOPPED,
7806 THREAD_STOPPED_FOREVER,
7807 THREAD_KILLED
7808};
7809typedef void *rb_jmpbuf_t[5];
7810struct rb_vm_tag {
7811 VALUE tag;
7812 VALUE retval;
7813 rb_jmpbuf_t buf;
7814 struct rb_vm_tag *prev;
7815 enum ruby_tag_type state;
7816 unsigned int lock_rec;
7817};
7818__extension__ _Static_assert(__builtin_offsetof (struct rb_vm_tag, buf) > 0, "rb_vm_tag_buf_offset" ": " "offsetof(struct rb_vm_tag, buf) > 0");
7819__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)");
7820struct rb_unblock_callback {
7821 rb_unblock_function_t *func;
7822 void *arg;
7823};
7824struct rb_mutex_struct;
7825typedef struct rb_ensure_entry {
7826 VALUE marker;
7827 VALUE (*e_proc)(VALUE);
7828 VALUE data2;
7829} rb_ensure_entry_t;
7830typedef struct rb_ensure_list {
7831 struct rb_ensure_list *next;
7832 struct rb_ensure_entry entry;
7833} rb_ensure_list_t;
7834typedef struct rb_fiber_struct rb_fiber_t;
7835struct rb_waiting_list {
7836 struct rb_waiting_list *next;
7837 struct rb_thread_struct *thread;
7838 struct rb_fiber_struct *fiber;
7839};
7840struct rb_execution_context_struct {
7841 VALUE *vm_stack;
7842 size_t vm_stack_size;
7843 rb_control_frame_t *cfp;
7844 struct rb_vm_tag *tag;
7845 rb_atomic_t interrupt_flag;
7846 rb_atomic_t interrupt_mask;
7847 rb_fiber_t *fiber_ptr;
7848 struct rb_thread_struct *thread_ptr;
7849 struct rb_id_table *local_storage;
7850 VALUE local_storage_recursive_hash;
7851 VALUE local_storage_recursive_hash_for_trace;
7852 VALUE storage;
7853 const VALUE *root_lep;
7854 VALUE root_svar;
7855 rb_ensure_list_t *ensure_list;
7856 struct rb_trace_arg_struct *trace_arg;
7857 VALUE errinfo;
7858 VALUE passed_block_handler;
7859 uint8_t raised_flag;
7860 enum method_missing_reason method_missing_reason : 8;
7861 VALUE private_const_reference;
7862 struct {
7863 VALUE *stack_start;
7864 VALUE *stack_end;
7865 size_t stack_maxsize;
7866 __attribute__((__aligned__(8))) jmp_buf regs;
7867 } machine;
7868};
7869typedef struct rb_execution_context_struct rb_execution_context_t;
7870void rb_ec_set_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7871void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
7872void rb_ec_clear_vm_stack(rb_execution_context_t *ec);
7873struct rb_ext_config {
7874 _Bool ractor_safe;
7875};
7876typedef struct rb_ractor_struct rb_ractor_t;
7877struct rb_native_thread;
7878typedef struct rb_thread_struct {
7879 struct ccan_list_node lt_node;
7880 VALUE self;
7881 rb_ractor_t *ractor;
7882 rb_vm_t *vm;
7883 struct rb_native_thread *nt;
7884 rb_execution_context_t *ec;
7885 struct rb_thread_sched_item sched;
7886 rb_atomic_t serial;
7887 VALUE last_status;
7888 struct rb_calling_info *calling;
7889 VALUE top_self;
7890 VALUE top_wrapper;
7891 enum rb_thread_status status : 2;
7892 unsigned int locking_native_thread : 1;
7893 unsigned int to_kill : 1;
7894 unsigned int abort_on_exception: 1;
7895 unsigned int report_on_exception: 1;
7896 unsigned int pending_interrupt_queue_checked: 1;
7897 int8_t priority;
7898 uint32_t running_time_us;
7899 void *blocking_region_buffer;
7900 VALUE thgroup;
7901 VALUE value;
7902 VALUE pending_interrupt_queue;
7903 VALUE pending_interrupt_mask_stack;
7904 rb_nativethread_lock_t interrupt_lock;
7905 struct rb_unblock_callback unblock;
7906 VALUE locking_mutex;
7907 struct rb_mutex_struct *keeping_mutexes;
7908 struct rb_waiting_list *join_list;
7909 union {
7910 struct {
7911 VALUE proc;
7912 VALUE args;
7913 int kw_splat;
7914 } proc;
7915 struct {
7916 VALUE (*func)(void *);
7917 void *arg;
7918 } func;
7919 } invoke_arg;
7920 enum thread_invoke_type {
7921 thread_invoke_type_none = 0,
7922 thread_invoke_type_proc,
7923 thread_invoke_type_ractor_proc,
7924 thread_invoke_type_func
7925 } invoke_type;
7926 VALUE stat_insn_usage;
7927 rb_fiber_t *root_fiber;
7928 VALUE scheduler;
7929 unsigned int blocking;
7930 VALUE name;
7931 struct rb_ext_config ext_config;
7932} rb_thread_t;
7933static inline unsigned int
7934rb_th_serial(const rb_thread_t *th)
7935{
7936 return (unsigned int)th->serial;
7937}
7938typedef enum {
7939 VM_DEFINECLASS_TYPE_CLASS = 0x00,
7940 VM_DEFINECLASS_TYPE_SINGLETON_CLASS = 0x01,
7941 VM_DEFINECLASS_TYPE_MODULE = 0x02,
7942 VM_DEFINECLASS_TYPE_MASK = 0x07
7943} rb_vm_defineclass_type_t;
7944
7945
7946rb_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);
7947rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
7948rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent, int opt);
7949rb_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);
7950rb_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,
7951 enum rb_iseq_type, const rb_compile_option_t*);
7952struct iseq_link_anchor;
7953struct rb_iseq_new_with_callback_callback_func {
7954 VALUE flags;
7955 VALUE reserved;
7956 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *);
7957 const void *data;
7958};
7959static inline struct rb_iseq_new_with_callback_callback_func *
7960rb_iseq_new_with_callback_new_callback(
7961 void (*func)(rb_iseq_t *, struct iseq_link_anchor *, const void *), const void *ptr)
7962{
7963 VALUE memo = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)ptr, ((VALUE)RUBY_Qundef), ((VALUE)RUBY_Qfalse));
7964 return (struct rb_iseq_new_with_callback_callback_func *)memo;
7965}
7966rb_iseq_t *rb_iseq_new_with_callback(const struct rb_iseq_new_with_callback_callback_func * ifunc,
7967 VALUE name, VALUE path, VALUE realpath, int first_lineno,
7968 const rb_iseq_t *parent, enum rb_iseq_type, const rb_compile_option_t*);
7969VALUE rb_iseq_disasm(const rb_iseq_t *iseq);
7970int rb_iseq_disasm_insn(VALUE str, const VALUE *iseqval, size_t pos, const rb_iseq_t *iseq, VALUE child);
7971attr_index_t rb_estimate_iv_count(VALUE klass, const rb_iseq_t * initialize_iseq);
7972VALUE rb_iseq_coverage(const rb_iseq_t *iseq);
7973extern VALUE rb_cISeq;
7974extern VALUE rb_cRubyVM;
7975extern VALUE rb_mRubyVMFrozenCore;
7976extern VALUE rb_block_param_proxy;
7977
7978
7979typedef struct {
7980 const struct rb_block block;
7981 unsigned int is_from_method: 1;
7982 unsigned int is_lambda: 1;
7983 unsigned int is_isolated: 1;
7984} rb_proc_t;
7985
7986
7987VALUE rb_proc_isolate(VALUE self);
7988VALUE rb_proc_isolate_bang(VALUE self);
7989VALUE rb_proc_ractor_make_shareable(VALUE self);
7990
7991
7992typedef struct {
7993 VALUE flags;
7994 rb_iseq_t *iseq;
7995 const VALUE *ep;
7996 const VALUE *env;
7997 unsigned int env_size;
7998} rb_env_t;
7999extern const rb_data_type_t ruby_binding_data_type;
8000typedef struct {
8001 const struct rb_block block;
8002 const VALUE pathobj;
8003 int first_lineno;
8004} rb_binding_t;
8005enum vm_check_match_type {
8006 VM_CHECKMATCH_TYPE_WHEN = 1,
8007 VM_CHECKMATCH_TYPE_CASE = 2,
8008 VM_CHECKMATCH_TYPE_RESCUE = 3
8009};
8010enum vm_special_object_type {
8011 VM_SPECIAL_OBJECT_VMCORE = 1,
8012 VM_SPECIAL_OBJECT_CBASE,
8013 VM_SPECIAL_OBJECT_CONST_BASE
8014};
8015enum vm_svar_index {
8016 VM_SVAR_LASTLINE = 0,
8017 VM_SVAR_BACKREF = 1,
8018 VM_SVAR_EXTRA_START = 2,
8019 VM_SVAR_FLIPFLOP_START = 2
8020};
8021typedef struct iseq_inline_constant_cache *IC;
8022typedef struct iseq_inline_iv_cache_entry *IVC;
8023typedef struct iseq_inline_cvar_cache_entry *ICVARC;
8024typedef union iseq_inline_storage_entry *ISE;
8025typedef const struct rb_callinfo *CALL_INFO;
8026typedef const struct rb_callcache *CALL_CACHE;
8027typedef struct rb_call_data *CALL_DATA;
8028typedef VALUE CDHASH;
8029typedef rb_control_frame_t *
8030 (__attribute__ ((__fastcall__)) *rb_insn_func_t)(rb_execution_context_t *, rb_control_frame_t *);
8031enum vm_frame_env_flags {
8032 VM_FRAME_MAGIC_METHOD = 0x11110001,
8033 VM_FRAME_MAGIC_BLOCK = 0x22220001,
8034 VM_FRAME_MAGIC_CLASS = 0x33330001,
8035 VM_FRAME_MAGIC_TOP = 0x44440001,
8036 VM_FRAME_MAGIC_CFUNC = 0x55550001,
8037 VM_FRAME_MAGIC_IFUNC = 0x66660001,
8038 VM_FRAME_MAGIC_EVAL = 0x77770001,
8039 VM_FRAME_MAGIC_RESCUE = 0x78880001,
8040 VM_FRAME_MAGIC_DUMMY = 0x79990001,
8041 VM_FRAME_MAGIC_MASK = 0x7fff0001,
8042 VM_FRAME_FLAG_FINISH = 0x0020,
8043 VM_FRAME_FLAG_BMETHOD = 0x0040,
8044 VM_FRAME_FLAG_CFRAME = 0x0080,
8045 VM_FRAME_FLAG_LAMBDA = 0x0100,
8046 VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
8047 VM_FRAME_FLAG_CFRAME_KW = 0x0400,
8048 VM_FRAME_FLAG_PASSED = 0x0800,
8049 VM_ENV_FLAG_LOCAL = 0x0002,
8050 VM_ENV_FLAG_ESCAPED = 0x0004,
8051 VM_ENV_FLAG_WB_REQUIRED = 0x0008,
8052 VM_ENV_FLAG_ISOLATED = 0x0010,
8053};
8054static inline void VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value);
8055static inline void
8056VM_ENV_FLAGS_SET(const VALUE *ep, VALUE flag)
8057{
8058 VALUE flags = ep[( 0)];
8059 ((void)0);
8060 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags | flag);
8061}
8062static inline void
8063VM_ENV_FLAGS_UNSET(const VALUE *ep, VALUE flag)
8064{
8065 VALUE flags = ep[( 0)];
8066 ((void)0);
8067 VM_FORCE_WRITE_SPECIAL_CONST(&ep[( 0)], flags & ~flag);
8068}
8069static inline unsigned long
8070VM_ENV_FLAGS(const VALUE *ep, long flag)
8071{
8072 VALUE flags = ep[( 0)];
8073 ((void)0);
8074 return flags & flag;
8075}
8076static inline unsigned long
8077VM_FRAME_TYPE(const rb_control_frame_t *cfp)
8078{
8079 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_MAGIC_MASK);
8080}
8081static inline int
8082VM_FRAME_LAMBDA_P(const rb_control_frame_t *cfp)
8083{
8084 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_LAMBDA) != 0;
8085}
8086static inline int
8087VM_FRAME_CFRAME_KW_P(const rb_control_frame_t *cfp)
8088{
8089 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME_KW) != 0;
8090}
8091static inline int
8092VM_FRAME_FINISHED_P(const rb_control_frame_t *cfp)
8093{
8094 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_FINISH) != 0;
8095}
8096static inline int
8097VM_FRAME_BMETHOD_P(const rb_control_frame_t *cfp)
8098{
8099 return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BMETHOD) != 0;
8100}
8101static inline int
8102rb_obj_is_iseq(VALUE iseq)
8103{
8104 return imemo_type_p(iseq, imemo_iseq);
8105}
8106static inline int
8107VM_FRAME_CFRAME_P(const rb_control_frame_t *cfp)
8108{
8109 int cframe_p = VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME) != 0;
8110 ((void)0);
8111 return cframe_p;
8112}
8113static inline int
8114VM_FRAME_RUBYFRAME_P(const rb_control_frame_t *cfp)
8115{
8116 return !VM_FRAME_CFRAME_P(cfp);
8117}
8118static inline int
8119VM_ENV_LOCAL_P(const VALUE *ep)
8120{
8121 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_LOCAL) ? 1 : 0;
8122}
8123static inline const VALUE *
8124VM_ENV_PREV_EP(const VALUE *ep)
8125{
8126 ((void)0);
8127 return ((void *)(((ep[(-1)])) & ~0x03));
8128}
8129static inline VALUE
8130VM_ENV_BLOCK_HANDLER(const VALUE *ep)
8131{
8132 ((void)0);
8133 return ep[(-1)];
8134}
8135static inline int
8136VM_ENV_ESCAPED_P(const VALUE *ep)
8137{
8138 ((void)0);
8139 return VM_ENV_FLAGS(ep, VM_ENV_FLAG_ESCAPED) ? 1 : 0;
8140}
8141__attribute__((__nonnull__ (1)))
8142static inline VALUE
8143VM_ENV_ENVVAL(const VALUE *ep)
8144{
8145 VALUE envval = ep[( 1)];
8146 ((void)0);
8147 ((void)0);
8148 return envval;
8149}
8150__attribute__((__nonnull__ (1)))
8151static inline const rb_env_t *
8152VM_ENV_ENVVAL_PTR(const VALUE *ep)
8153{
8154 return (const rb_env_t *)VM_ENV_ENVVAL(ep);
8155}
8156static inline const rb_env_t *
8157vm_env_new(VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
8158{
8159 rb_env_t *env = (rb_env_t *)rb_imemo_new(imemo_env, (VALUE)env_ep, (VALUE)env_body, 0, (VALUE)iseq);
8160 env->env_size = env_size;
8161 env_ep[( 1)] = (VALUE)env;
8162 return env;
8163}
8164static inline void
8165VM_FORCE_WRITE(const VALUE *ptr, VALUE v)
8166{
8167 *((VALUE *)ptr) = v;
8168}
8169static inline void
8170VM_FORCE_WRITE_SPECIAL_CONST(const VALUE *ptr, VALUE special_const_value)
8171{
8172 ((void)0);
8173 VM_FORCE_WRITE(ptr, special_const_value);
8174}
8175static inline void
8176VM_STACK_ENV_WRITE(const VALUE *ep, int index, VALUE v)
8177{
8178 ((void)0);
8179 VM_FORCE_WRITE(&ep[index], v);
8180}static inline
8181const VALUE *rb_vm_ep_local_ep(const VALUE *ep);
8182const VALUE *rb_vm_proc_local_ep(VALUE proc);static inline
8183void rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep);
8184void rb_vm_block_copy(VALUE obj, const struct rb_block *dst, const struct rb_block *src);static inline
8185VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
8186static inline const rb_control_frame_t *
8187RUBY_VM_END_CONTROL_FRAME(const rb_execution_context_t *ec)
8188{
8189 return (rb_control_frame_t *)(ec->vm_stack + ec->vm_stack_size);
8190}
8191static inline int
8192RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
8193{
8194 return !((void *)(RUBY_VM_END_CONTROL_FRAME(ec)) > (void *)(cfp));
8195}
8196static inline int
8197VM_BH_ISEQ_BLOCK_P(VALUE block_handler)
8198{
8199 if ((block_handler & 0x03) == 0x01) {
8200 return 1;
8201 }
8202 else {
8203 return 0;
8204 }
8205}
8206static inline VALUE
8207VM_BH_FROM_ISEQ_BLOCK(const struct rb_captured_block *captured)
8208{
8209 VALUE block_handler = ((VALUE)(captured) | (0x01));
8210 ((void)0);
8211 return block_handler;
8212}
8213static inline const struct rb_captured_block *
8214VM_BH_TO_ISEQ_BLOCK(VALUE block_handler)
8215{
8216 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8217 ((void)0);
8218 return captured;
8219}
8220static inline int
8221VM_BH_IFUNC_P(VALUE block_handler)
8222{
8223 if ((block_handler & 0x03) == 0x03) {
8224 return 1;
8225 }
8226 else {
8227 return 0;
8228 }
8229}
8230static inline VALUE
8231VM_BH_FROM_IFUNC_BLOCK(const struct rb_captured_block *captured)
8232{
8233 VALUE block_handler = ((VALUE)(captured) | (0x03));
8234 ((void)0);
8235 return block_handler;
8236}
8237static inline const struct rb_captured_block *
8238VM_BH_TO_IFUNC_BLOCK(VALUE block_handler)
8239{
8240 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8241 ((void)0);
8242 return captured;
8243}
8244static inline const struct rb_captured_block *
8245VM_BH_TO_CAPT_BLOCK(VALUE block_handler)
8246{
8247 struct rb_captured_block *captured = ((void *)((block_handler) & ~0x03));
8248 ((void)0);
8249 return captured;
8250}
8251static inline enum rb_block_handler_type
8252vm_block_handler_type(VALUE block_handler)
8253{
8254 if (VM_BH_ISEQ_BLOCK_P(block_handler)) {
8255 return block_handler_type_iseq;
8256 }
8257 else if (VM_BH_IFUNC_P(block_handler)) {
8258 return block_handler_type_ifunc;
8259 }
8260 else if (RB_SYMBOL_P(block_handler)) {
8261 return block_handler_type_symbol;
8262 }
8263 else {
8264 ((void)0);
8265 return block_handler_type_proc;
8266 }
8267}
8268static inline void
8269vm_block_handler_verify(__attribute__ ((__unused__)) VALUE block_handler)
8270{
8271 ((void)0);
8272}
8273static inline int
8274vm_cfp_forwarded_bh_p(const rb_control_frame_t *cfp, VALUE block_handler)
8275{
8276 return ((VALUE) cfp->block_code) == block_handler;
8277}
8278static inline enum rb_block_type
8279vm_block_type(const struct rb_block *block)
8280{
8281 return block->type;
8282}
8283static inline void
8284vm_block_type_set(const struct rb_block *block, enum rb_block_type type)
8285{
8286 struct rb_block *mb = (struct rb_block *)block;
8287 mb->type = type;
8288}
8289static inline const struct rb_block *
8290vm_proc_block(VALUE procval)
8291{
8292 ((void)0);
8293 return &((rb_proc_t *)(((struct RTypedData *)(procval))->data))->block;
8294}
8295static inline const rb_iseq_t *vm_block_iseq(const struct rb_block *block);
8296static inline const VALUE *vm_block_ep(const struct rb_block *block);
8297static inline const rb_iseq_t *
8298vm_proc_iseq(VALUE procval)
8299{
8300 return vm_block_iseq(vm_proc_block(procval));
8301}
8302static inline const VALUE *
8303vm_proc_ep(VALUE procval)
8304{
8305 return vm_block_ep(vm_proc_block(procval));
8306}
8307static inline const rb_iseq_t *
8308vm_block_iseq(const struct rb_block *block)
8309{
8310 switch (vm_block_type(block)) {
8311 case block_type_iseq: return rb_iseq_check(block->as.captured.code.iseq);
8312 case block_type_proc: return vm_proc_iseq(block->as.proc);
8313 case block_type_ifunc:
8314 case block_type_symbol: return ((void *)0);
8315 }
8316 __builtin_unreachable();
8317 return ((void *)0);
8318}
8319static inline const VALUE *
8320vm_block_ep(const struct rb_block *block)
8321{
8322 switch (vm_block_type(block)) {
8323 case block_type_iseq:
8324 case block_type_ifunc: return block->as.captured.ep;
8325 case block_type_proc: return vm_proc_ep(block->as.proc);
8326 case block_type_symbol: return ((void *)0);
8327 }
8328 __builtin_unreachable();
8329 return ((void *)0);
8330}
8331static inline VALUE
8332vm_block_self(const struct rb_block *block)
8333{
8334 switch (vm_block_type(block)) {
8335 case block_type_iseq:
8336 case block_type_ifunc:
8337 return block->as.captured.self;
8338 case block_type_proc:
8339 return vm_block_self(vm_proc_block(block->as.proc));
8340 case block_type_symbol:
8341 return ((VALUE)RUBY_Qundef);
8342 }
8343 __builtin_unreachable();
8344 return ((VALUE)RUBY_Qundef);
8345}
8346static inline VALUE
8347VM_BH_TO_SYMBOL(VALUE block_handler)
8348{
8349 ((void)0);
8350 return block_handler;
8351}
8352static inline VALUE
8353VM_BH_FROM_SYMBOL(VALUE symbol)
8354{
8355 ((void)0);
8356 return symbol;
8357}
8358static inline VALUE
8359VM_BH_TO_PROC(VALUE block_handler)
8360{
8361 ((void)0);
8362 return block_handler;
8363}
8364static inline VALUE
8365VM_BH_FROM_PROC(VALUE procval)
8366{
8367 ((void)0);
8368 return procval;
8369}
8370VALUE rb_thread_alloc(VALUE klass);
8371VALUE rb_binding_alloc(VALUE klass);
8372VALUE rb_proc_alloc(VALUE klass);
8373VALUE rb_proc_dup(VALUE self);
8374extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8375extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
8376extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp
8377);
8378void rb_vm_bugreport(const void *);
8379typedef void (*ruby_sighandler_t)(int);
8380__attribute__((__format__(__printf__, 4, 5)))
8381__attribute__((__noreturn__)) void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...);
8382
8383
8384VALUE rb_iseq_eval(const rb_iseq_t *iseq);
8385VALUE rb_iseq_eval_main(const rb_iseq_t *iseq);
8386VALUE rb_iseq_path(const rb_iseq_t *iseq);
8387VALUE rb_iseq_realpath(const rb_iseq_t *iseq);
8388
8389
8390VALUE rb_iseq_pathobj_new(VALUE path, VALUE realpath);
8391void rb_iseq_pathobj_set(const rb_iseq_t *iseq, VALUE path, VALUE realpath);
8392int rb_ec_frame_method_id_and_class(const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp);
8393void rb_ec_setup_exception(const rb_execution_context_t *ec, VALUE mesg, VALUE cause);
8394VALUE rb_vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, int kw_splat, VALUE block_handler);
8395VALUE rb_vm_make_proc_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
8396static inline VALUE
8397rb_vm_make_proc(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8398{
8399 return rb_vm_make_proc_lambda(ec, captured, klass, 0);
8400}
8401static inline VALUE
8402rb_vm_make_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
8403{
8404 return rb_vm_make_proc_lambda(ec, captured, klass, 1);
8405}
8406VALUE rb_vm_make_binding(const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp);
8407VALUE rb_vm_env_local_variables(const rb_env_t *env);
8408const rb_env_t *rb_vm_env_prev_env(const rb_env_t *env);
8409const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars);
8410void rb_vm_inc_const_missing_count(void);
8411VALUE rb_vm_call_kw(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc,
8412 const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat);static inline
8413void rb_vm_pop_frame_no_int(rb_execution_context_t *ec);
8414static void rb_vm_pop_frame(rb_execution_context_t *ec);
8415void rb_thread_start_timer_thread(void);
8416void rb_thread_stop_timer_thread(void);
8417void rb_thread_reset_timer_thread(void);
8418void rb_thread_wakeup_timer_thread(int);
8419static inline void
8420rb_vm_living_threads_init(rb_vm_t *vm)
8421{
8422 ccan_list_head_init(&vm->waiting_fds);
8423 ccan_list_head_init(&vm->waiting_pids);
8424 ccan_list_head_init(&vm->workqueue);
8425 ccan_list_head_init(&vm->waiting_grps);
8426 ccan_list_head_init(&vm->ractor.set);
8427}
8428typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
8429rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8430rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
8431int rb_vm_get_sourceline(const rb_control_frame_t *);
8432void rb_vm_stack_to_heap(rb_execution_context_t *ec);
8433void ruby_thread_init_stack(rb_thread_t *th);
8434rb_thread_t * ruby_thread_from_native(void);
8435int ruby_thread_set_native(rb_thread_t *th);
8436int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
8437void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
8438static VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
8439void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
8440void rb_gc_mark_machine_stack(const rb_execution_context_t *ec);static inline
8441void rb_vm_rewrite_cref(rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr);
8442static const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
8443VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, enum ruby_tag_type *stateptr);
8444rb_execution_context_t *rb_vm_main_ractor_ec(rb_vm_t *vm);
8445
8446
8447extern struct rb_ractor_struct *ruby_single_main_ractor;
8448extern rb_vm_t *ruby_current_vm_ptr;
8449extern rb_event_flag_t ruby_vm_event_flags;
8450extern rb_event_flag_t ruby_vm_event_enabled_global_flags;
8451extern unsigned int ruby_vm_event_local_num;
8452
8453
8454static inline rb_thread_t *
8455rb_ec_thread_ptr(const rb_execution_context_t *ec)
8456{
8457 return ec->thread_ptr;
8458}
8459static inline rb_ractor_t *
8460rb_ec_ractor_ptr(const rb_execution_context_t *ec)
8461{
8462 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8463 if (th) {
8464 ((void)0);
8465 return th->ractor;
8466 }
8467 else {
8468 return ((void *)0);
8469 }
8470}
8471static inline rb_vm_t *
8472rb_ec_vm_ptr(const rb_execution_context_t *ec)
8473{
8474 const rb_thread_t *th = rb_ec_thread_ptr(ec);
8475 if (th) {
8476 return th->vm;
8477 }
8478 else {
8479 return ((void *)0);
8480 }
8481}
8482static inline rb_execution_context_t *
8483rb_current_execution_context(_Bool expect_ec)
8484{
8485 rb_execution_context_t *ec = ruby_current_ec;
8486 ((void)0);
8487 return ec;
8488}
8489static inline rb_thread_t *
8490rb_current_thread(void)
8491{
8492 const rb_execution_context_t *ec = rb_current_execution_context(1);
8493 return rb_ec_thread_ptr(ec);
8494}
8495static inline rb_ractor_t *
8496rb_current_ractor(void)
8497{
8498 if (ruby_single_main_ractor) {
8499 return ruby_single_main_ractor;
8500 }
8501 else {
8502 const rb_execution_context_t *ec = rb_current_execution_context(1);
8503 return rb_ec_ractor_ptr(ec);
8504 }
8505}
8506static inline rb_vm_t *
8507rb_current_vm(void)
8508{
8509 return ruby_current_vm_ptr;
8510}
8511void rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec,
8512 unsigned int recorded_lock_rec,
8513 unsigned int current_lock_rec);
8514static inline unsigned int
8515rb_ec_vm_lock_rec(const rb_execution_context_t *ec)
8516{
8517 rb_vm_t *vm = rb_ec_vm_ptr(ec);
8518 if (vm->ractor.sync.lock_owner != rb_ec_ractor_ptr(ec)) {
8519 return 0;
8520 }
8521 else {
8522 return vm->ractor.sync.lock_rec;
8523 }
8524}
8525enum {
8526 TIMER_INTERRUPT_MASK = 0x01,
8527 PENDING_INTERRUPT_MASK = 0x02,
8528 POSTPONED_JOB_INTERRUPT_MASK = 0x04,
8529 TRAP_INTERRUPT_MASK = 0x08,
8530 TERMINATE_INTERRUPT_MASK = 0x10,
8531 VM_BARRIER_INTERRUPT_MASK = 0x20,
8532};
8533static inline _Bool
8534RUBY_VM_INTERRUPTED_ANY(rb_execution_context_t *ec)
8535{
8536 return ec->interrupt_flag & ~(ec)->interrupt_mask;
8537}
8538VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
8539int rb_signal_buff_size(void);
8540int rb_signal_exec(rb_thread_t *th, int sig);
8541void rb_threadptr_check_signal(rb_thread_t *mth);
8542void rb_threadptr_signal_raise(rb_thread_t *th, int sig);
8543void rb_threadptr_signal_exit(rb_thread_t *th);
8544int rb_threadptr_execute_interrupts(rb_thread_t *, int);
8545void rb_threadptr_interrupt(rb_thread_t *th);
8546void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
8547void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
8548void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
8549VALUE rb_ec_get_errinfo(const rb_execution_context_t *ec);
8550void rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo);
8551void rb_execution_context_update(rb_execution_context_t *ec);
8552void rb_execution_context_mark(const rb_execution_context_t *ec);
8553void rb_fiber_close(rb_fiber_t *fib);
8554void Init_native_thread(rb_thread_t *th);
8555int rb_vm_check_ints_blocking(rb_execution_context_t *ec);
8556void rb_vm_cond_wait(rb_vm_t *vm, rb_nativethread_cond_t *cond);
8557void rb_vm_cond_timedwait(rb_vm_t *vm, rb_nativethread_cond_t *cond, unsigned long msec);
8558static inline void
8559rb_vm_check_ints(rb_execution_context_t *ec)
8560{
8561 ((void)0);
8562 if ((__builtin_expect(!!(RUBY_VM_INTERRUPTED_ANY(ec)), 0))) {
8563 rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);
8564 }
8565}
8566struct rb_trace_arg_struct {
8567 rb_event_flag_t event;
8568 rb_execution_context_t *ec;
8569 const rb_control_frame_t *cfp;
8570 VALUE self;
8571 ID id;
8572 ID called_id;
8573 VALUE klass;
8574 VALUE data;
8575 int klass_solved;
8576 int lineno;
8577 VALUE path;
8578};
8579void rb_hook_list_mark(rb_hook_list_t *hooks);
8580void rb_hook_list_free(rb_hook_list_t *hooks);
8581void rb_hook_list_connect_tracepoint(VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line);
8582void rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval);
8583void rb_exec_event_hooks(struct rb_trace_arg_struct *trace_arg, rb_hook_list_t *hooks, int pop_p);
8584static inline void
8585rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_event_flag_t flag,
8586 VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
8587{
8588 struct rb_trace_arg_struct trace_arg;
8589 ((void)0);
8590 trace_arg.event = flag;
8591 trace_arg.ec = ec;
8592 trace_arg.cfp = ec->cfp;
8593 trace_arg.self = self;
8594 trace_arg.id = id;
8595 trace_arg.called_id = called_id;
8596 trace_arg.klass = klass;
8597 trace_arg.data = data;
8598 trace_arg.path = ((VALUE)RUBY_Qundef);
8599 trace_arg.klass_solved = 0;
8600 rb_exec_event_hooks(&trace_arg, hooks, pop_p);
8601}
8602struct rb_ractor_pub {
8603 VALUE self;
8604 uint32_t id;
8605 rb_hook_list_t hooks;
8606};
8607static inline rb_hook_list_t *
8608rb_ec_ractor_hooks(const rb_execution_context_t *ec)
8609{
8610 struct rb_ractor_pub *cr_pub = (struct rb_ractor_pub *)rb_ec_ractor_ptr(ec);
8611 return &cr_pub->hooks;
8612}
8613static inline void
8614rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
8615{
8616 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);
8617}
8618void rb_vm_trap_exit(rb_vm_t *vm);
8619
8620
8621int rb_thread_check_trap_pending(void);
8622extern VALUE rb_get_coverages(void);
8623extern void rb_set_coverages(VALUE, int, VALUE);
8624extern void rb_clear_coverages(void);
8625extern void rb_reset_coverages(void);
8626extern void rb_resume_coverages(void);
8627extern void rb_suspend_coverages(void);
8628void rb_postponed_job_flush(rb_vm_t *vm);
8629extern VALUE rb_eRactorUnsafeError;
8630extern VALUE rb_eRactorIsolationError;
8631
8632
8633static inline void
8634vm_passed_block_handler_set(rb_execution_context_t *ec, VALUE block_handler)
8635{
8636 vm_block_handler_verify(block_handler);
8637 ec->passed_block_handler = block_handler;
8638}
8639static inline void
8640pass_passed_block_handler(rb_execution_context_t *ec)
8641{
8642 VALUE block_handler = rb_vm_frame_block_handler(ec->cfp);
8643 vm_passed_block_handler_set(ec, block_handler);
8644 VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_PASSED);
8645}
8646int _setjmp(jmp_buf);
8647__attribute__((__noreturn__)) void _longjmp(jmp_buf, int);
8648typedef int error_t;
8649extern int *__errno (void);
8650extern __attribute__((dllimport)) const char * const _sys_errlist[];
8651extern __attribute__((dllimport)) int _sys_nerr;
8652extern __attribute__((dllimport)) const char * const sys_errlist[];
8653extern __attribute__((dllimport)) int sys_nerr;
8654extern __attribute__((dllimport)) char *program_invocation_name;
8655extern __attribute__((dllimport)) char *program_invocation_short_name;
8656static inline void
8657rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec)
8658{
8659 unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec);
8660 if (current_lock_rec != recorded_lock_rec) {
8661 rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec);
8662 }
8663}
8664static inline int
8665rb_ec_tag_state(const rb_execution_context_t *ec)
8666{
8667 struct rb_vm_tag *tag = ec->tag;
8668 enum ruby_tag_type state = tag->state;
8669 tag->state = RUBY_TAG_NONE;
8670 rb_ec_vm_lock_rec_check(ec, tag->lock_rec);
8671 return state;
8672}
8673__attribute__((__noreturn__)) static inline void rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st);
8674static inline void
8675rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st)
8676{
8677 ec->tag->state = st;
8678 __builtin_longjmp(((ec->tag->buf)),(1));
8679}
8680static inline int CREF_SINGLETON(const rb_cref_t *cref);
8681static inline VALUE
8682CREF_CLASS(const rb_cref_t *cref)
8683{
8684 if (CREF_SINGLETON(cref)) {
8685 return rb_class_of(cref->klass_or_self);
8686 }
8687 else {
8688 return cref->klass_or_self;
8689 }
8690}
8691static inline VALUE
8692CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref)
8693{
8694 if (CREF_SINGLETON(cref)) {
8695 return rb_singleton_class(cref->klass_or_self);
8696 }
8697 else {
8698 return cref->klass_or_self;
8699 }
8700}
8701static inline rb_cref_t *
8702CREF_NEXT(const rb_cref_t *cref)
8703{
8704 return cref->next;
8705}
8706static inline const rb_scope_visibility_t *
8707CREF_SCOPE_VISI(const rb_cref_t *cref)
8708{
8709 return &cref->scope_visi;
8710}
8711static inline VALUE
8712CREF_REFINEMENTS(const rb_cref_t *cref)
8713{
8714 return cref->refinements;
8715}
8716static inline void
8717CREF_REFINEMENTS_SET(rb_cref_t *cref, VALUE refs)
8718{
8719 rb_obj_write((VALUE)(cref), __extension__({
8720 ;
8721 ; __typeof__((VALUE *)(&cref->refinements)) unaligned_member_access_result = ((VALUE *)(&cref->refinements));
8722 ; unaligned_member_access_result; }), (VALUE)(refs), "../ruby-3.2.1/eval_intern.h", 227);
8723}
8724static inline int
8725CREF_PUSHED_BY_EVAL(const rb_cref_t *cref)
8726{
8727 return cref->flags & ((VALUE)RUBY_FL_USER5);
8728}
8729static inline void
8730CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref)
8731{
8732 cref->flags |= ((VALUE)RUBY_FL_USER5);
8733}
8734static inline int
8735CREF_SINGLETON(const rb_cref_t *cref)
8736{
8737 return cref->flags & ((VALUE)RUBY_FL_USER7);
8738}
8739static inline void
8740CREF_SINGLETON_SET(rb_cref_t *cref)
8741{
8742 cref->flags |= ((VALUE)RUBY_FL_USER7);
8743}
8744static inline int
8745CREF_OMOD_SHARED(const rb_cref_t *cref)
8746{
8747 return cref->flags & ((VALUE)RUBY_FL_USER6);
8748}
8749static inline void
8750CREF_OMOD_SHARED_SET(rb_cref_t *cref)
8751{
8752 cref->flags |= ((VALUE)RUBY_FL_USER6);
8753}
8754static inline void
8755CREF_OMOD_SHARED_UNSET(rb_cref_t *cref)
8756{
8757 cref->flags &= ~((VALUE)RUBY_FL_USER6);
8758}
8759enum {
8760 RAISED_EXCEPTION = 1,
8761 RAISED_STACKOVERFLOW = 2,
8762 RAISED_NOMEMORY = 4
8763};
8764int rb_ec_set_raised(rb_execution_context_t *ec);
8765int rb_ec_reset_raised(rb_execution_context_t *ec);
8766int rb_ec_stack_check(rb_execution_context_t *ec);
8767VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
8768VALUE rb_make_exception(int argc, const VALUE *argv);
8769__attribute__((__noreturn__)) void rb_method_name_error(VALUE, VALUE);
8770__attribute__((__noreturn__)) void rb_fiber_start(rb_fiber_t*);
8771__attribute__((__noreturn__)) void rb_print_undef(VALUE, ID, rb_method_visibility_t);
8772__attribute__((__noreturn__)) void rb_print_undef_str(VALUE, VALUE);
8773__attribute__((__noreturn__)) void rb_print_inaccessible(VALUE, ID, rb_method_visibility_t);
8774__attribute__((__noreturn__)) void rb_vm_localjump_error(const char *,VALUE, int);
8775__attribute__((__noreturn__)) void rb_vm_jump_tag_but_local_jump(int);
8776VALUE rb_vm_make_jump_tag_but_local_jump(int state, VALUE val);
8777rb_cref_t *rb_vm_cref(void);
8778rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void);
8779VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename);
8780void rb_vm_set_progname(VALUE filename);
8781VALUE rb_vm_cbase(void);
8782VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec);
8783VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n);
8784VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, _Bool skip_internal);
8785static inline char *
8786rb_char_next(const char *p)
8787{
8788 if (p) {
8789 int len = mblen(p, 0x7fffffff);
8790 p += len > 0 ? len : 1;
8791 }
8792 return (char *)p;
8793}
8794static inline void
8795translit_char(char *p, int from, int to)
8796{
8797 while (*p) {
8798 if ((unsigned char)*p == from)
8799 *p = to;
8800 p = rb_char_next(p);
8801 }
8802}
8803const char *rb_obj_info(VALUE obj);
8804const char *rb_raw_obj_info(char *const buff, const size_t buff_size, VALUE obj);
8805VALUE rb_gc_disable_no_rest(void);
8806struct rb_thread_struct;
8807size_t rb_size_pool_slot_size(unsigned char pool_id);
8808
8809
8810size_t rb_objspace_data_type_memsize(VALUE obj);
8811void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
8812void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
8813int rb_objspace_markable_object_p(VALUE obj);
8814int rb_objspace_internal_object_p(VALUE obj);
8815int rb_objspace_marked_object_p(VALUE obj);
8816void rb_objspace_each_objects(
8817 int (*callback)(void *start, void *end, size_t stride, void *data),
8818 void *data);
8819void rb_objspace_each_objects_without_setup(
8820 int (*callback)(void *, void *, size_t, void *),
8821 void *data);
8822size_t rb_gc_obj_slot_size(VALUE obj);
8823
8824
8825struct rb_iseq_struct;
8826int rb_dvar_defined(ID, const struct rb_iseq_struct *);
8827int rb_local_defined(ID, const struct rb_iseq_struct *);
8828const char *rb_insns_name(int i);
8829VALUE rb_insns_name_array(void);
8830int rb_iseq_cdhash_cmp(VALUE val, VALUE lit);
8831st_index_t rb_iseq_cdhash_hash(VALUE a);
8832int rb_vm_insn_addr2insn(const void *);
8833int rb_vm_insn_decode(const VALUE encoded);
8834extern _Bool ruby_vm_keep_script_lines;
8835
8836
8837rb_event_flag_t rb_iseq_event_flags(const struct rb_iseq_struct *iseq, size_t pos);
8838
8839
8840extern const int ruby_api_version[];
8841typedef void (*rb_iseq_callback)(const rb_iseq_t *, void *);
8842extern const ID rb_iseq_shared_exc_local_tbl[];
8843static inline rb_snum_t
8844ISEQ_FLIP_CNT_INCREMENT(const rb_iseq_t *iseq)
8845{
8846 rb_snum_t cnt = ((iseq)->body)->variable.flip_count;
8847 ((iseq)->body)->variable.flip_count += 1;
8848 return cnt;
8849}
8850static inline VALUE *
8851ISEQ_ORIGINAL_ISEQ(const rb_iseq_t *iseq)
8852{
8853 return ((iseq)->body)->variable.original_iseq;
8854}
8855static inline void
8856ISEQ_ORIGINAL_ISEQ_CLEAR(const rb_iseq_t *iseq)
8857{
8858 void *ptr = ((iseq)->body)->variable.original_iseq;
8859 ((iseq)->body)->variable.original_iseq = ((void *)0);
8860 if (ptr) {
8861 ruby_xfree(ptr);
8862 }
8863}
8864static inline VALUE *
8865ISEQ_ORIGINAL_ISEQ_ALLOC(const rb_iseq_t *iseq, long size)
8866{
8867 return ((iseq)->body)->variable.original_iseq =
8868 ((VALUE *)ruby_xmalloc2((size), sizeof(VALUE)));
8869}
8870struct iseq_compile_data {
8871 const VALUE err_info;
8872 const VALUE catch_table_ary;
8873 struct iseq_label_data *start_label;
8874 struct iseq_label_data *end_label;
8875 struct iseq_label_data *redo_label;
8876 const rb_iseq_t *current_block;
8877 struct iseq_compile_data_ensure_node_stack *ensure_node_stack;
8878 struct {
8879 struct iseq_compile_data_storage *storage_head;
8880 struct iseq_compile_data_storage *storage_current;
8881 } node;
8882 struct {
8883 struct iseq_compile_data_storage *storage_head;
8884 struct iseq_compile_data_storage *storage_current;
8885 } insn;
8886 _Bool in_rescue;
8887 int loopval_popped;
8888 int last_line;
8889 int label_no;
8890 int node_level;
8891 int isolated_depth;
8892 unsigned int ci_index;
8893 unsigned int ic_index;
8894 const rb_compile_option_t *option;
8895 struct rb_id_table *ivar_cache_table;
8896 const struct rb_builtin_function *builtin_function_table;
8897 const NODE *root_node;
8898};
8899static inline struct iseq_compile_data *
8900ISEQ_COMPILE_DATA(const rb_iseq_t *iseq)
8901{
8902 if (iseq->flags & ((VALUE)RUBY_FL_USER6)) {
8903 return iseq->aux.compile_data;
8904 }
8905 else {
8906 return ((void *)0);
8907 }
8908}
8909static inline void
8910ISEQ_COMPILE_DATA_ALLOC(rb_iseq_t *iseq)
8911{
8912 iseq->aux.compile_data = (((struct iseq_compile_data *)ruby_xcalloc((1), sizeof(struct iseq_compile_data))));
8913 iseq->flags |= ((VALUE)RUBY_FL_USER6);
8914}
8915static inline void
8916ISEQ_COMPILE_DATA_CLEAR(rb_iseq_t *iseq)
8917{
8918 iseq->flags &= ~((VALUE)RUBY_FL_USER6);
8919 iseq->aux.compile_data = ((void *)0);
8920}
8921static inline rb_iseq_t *
8922iseq_imemo_alloc(void)
8923{
8924 return (rb_iseq_t *)rb_imemo_new(imemo_iseq, 0, 0, 0, 0);
8925}
8926VALUE rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
8927void rb_ibf_load_iseq_complete(rb_iseq_t *iseq);
8928const rb_iseq_t *rb_iseq_ibf_load(VALUE str);
8929const rb_iseq_t *rb_iseq_ibf_load_bytes(const char *cstr, size_t);
8930VALUE rb_iseq_ibf_load_extra_data(VALUE str);
8931void rb_iseq_init_trace(rb_iseq_t *iseq);
8932int 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);
8933int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval);
8934const rb_iseq_t *rb_iseq_load_iseq(VALUE fname);
8935unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
8936int rb_vm_insn_addr2opcode(const void *addr);
8937
8938
8939VALUE rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node);
8940VALUE rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc);
8941VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
8942void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
8943 VALUE locals, VALUE args,
8944 VALUE exception, VALUE body);
8945void rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *arena);
8946VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
8947VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
8948unsigned int rb_iseq_line_no(const rb_iseq_t *iseq, size_t pos);
8949int rb_iseq_node_id(const rb_iseq_t *iseq, size_t pos);
8950void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
8951void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
8952void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
8953struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
8954VALUE rb_iseqw_new(const rb_iseq_t *iseq);
8955const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
8956VALUE rb_iseq_absolute_path(const rb_iseq_t *iseq);
8957int rb_iseq_from_eval_p(const rb_iseq_t *iseq);
8958VALUE rb_iseq_type(const rb_iseq_t *iseq);
8959VALUE rb_iseq_label(const rb_iseq_t *iseq);
8960VALUE rb_iseq_base_label(const rb_iseq_t *iseq);
8961VALUE rb_iseq_first_lineno(const rb_iseq_t *iseq);
8962VALUE rb_iseq_method_name(const rb_iseq_t *iseq);
8963void rb_iseq_code_location(const rb_iseq_t *iseq, int *first_lineno, int *first_column, int *last_lineno, int *last_column);
8964void rb_iseq_remove_coverage_all(void);
8965const rb_iseq_t *rb_method_iseq(VALUE body);
8966const rb_iseq_t *rb_proc_get_iseq(VALUE proc, int *is_proc);
8967struct rb_compile_option_struct {
8968 unsigned int inline_const_cache: 1;
8969 unsigned int peephole_optimization: 1;
8970 unsigned int tailcall_optimization: 1;
8971 unsigned int specialized_instruction: 1;
8972 unsigned int operands_unification: 1;
8973 unsigned int instructions_unification: 1;
8974 unsigned int stack_caching: 1;
8975 unsigned int frozen_string_literal: 1;
8976 unsigned int debug_frozen_string_literal: 1;
8977 unsigned int coverage_enabled: 1;
8978 int debug_level;
8979};
8980struct iseq_insn_info_entry {
8981 int line_no;
8982 int node_id;
8983 rb_event_flag_t events;
8984};
8985enum rb_catch_type {
8986 CATCH_TYPE_RESCUE = __builtin_choose_expr( __builtin_constant_p(1), ((VALUE)(1)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(1)),
8987 CATCH_TYPE_ENSURE = __builtin_choose_expr( __builtin_constant_p(2), ((VALUE)(2)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(2)),
8988 CATCH_TYPE_RETRY = __builtin_choose_expr( __builtin_constant_p(3), ((VALUE)(3)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(3)),
8989 CATCH_TYPE_BREAK = __builtin_choose_expr( __builtin_constant_p(4), ((VALUE)(4)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(4)),
8990 CATCH_TYPE_REDO = __builtin_choose_expr( __builtin_constant_p(5), ((VALUE)(5)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(5)),
8991 CATCH_TYPE_NEXT = __builtin_choose_expr( __builtin_constant_p(6), ((VALUE)(6)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(6))
8992};
8993struct iseq_catch_table_entry {
8994 enum rb_catch_type type;
8995 rb_iseq_t *iseq;
8996 unsigned int start;
8997 unsigned int end;
8998 unsigned int cont;
8999 unsigned int sp;
9000};
9001struct iseq_catch_table { unsigned int size; struct iseq_catch_table_entry entries[]; } __attribute__((packed));
9002static inline int
9003iseq_catch_table_bytes(int n)
9004{
9005 enum {
9006 catch_table_entry_size = sizeof(struct iseq_catch_table_entry),
9007 catch_table_entries_max = (0x7fffffff - __builtin_offsetof (struct iseq_catch_table, entries)) / catch_table_entry_size
9008 };
9009 if (n > catch_table_entries_max) rb_fatal("too large iseq_catch_table - %d", n);
9010 return (int)(__builtin_offsetof (struct iseq_catch_table, entries) +
9011 n * catch_table_entry_size);
9012}
9013struct iseq_compile_data_storage {
9014 struct iseq_compile_data_storage *next;
9015 unsigned int pos;
9016 unsigned int size;
9017 char buff[];
9018};
9019enum defined_type {
9020 DEFINED_NOT_DEFINED,
9021 DEFINED_NIL = 1,
9022 DEFINED_IVAR,
9023 DEFINED_LVAR,
9024 DEFINED_GVAR,
9025 DEFINED_CVAR,
9026 DEFINED_CONST,
9027 DEFINED_METHOD,
9028 DEFINED_YIELD,
9029 DEFINED_ZSUPER,
9030 DEFINED_SELF,
9031 DEFINED_TRUE,
9032 DEFINED_FALSE,
9033 DEFINED_ASGN,
9034 DEFINED_EXPR,
9035 DEFINED_REF,
9036 DEFINED_FUNC,
9037 DEFINED_CONST_FROM
9038};
9039VALUE rb_iseq_defined_string(enum defined_type type);
9040VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
9041
9042
9043struct rb_thread_struct;
9044struct rb_fiber_struct;
9045struct rb_execution_context_struct;
9046void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
9047void ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(VALUE), VALUE (*rollback_func)(VALUE));
9048void rb_jit_cont_init(void);
9049void rb_jit_cont_each_iseq(rb_iseq_callback callback, void *data);
9050void rb_jit_cont_finish(void);
9051VALUE rb_fiber_inherit_storage(struct rb_execution_context_struct *ec, struct rb_fiber_struct *fiber);
9052VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
9053unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
9054struct rb_execution_context_struct * rb_fiberptr_get_ec(struct rb_fiber_struct *fiber);
9055
9056
9057enum ruby_coderange_type {
9058 RUBY_ENC_CODERANGE_UNKNOWN = 0,
9059 RUBY_ENC_CODERANGE_7BIT = ((int)RUBY_FL_USER8),
9060 RUBY_ENC_CODERANGE_VALID = ((int)RUBY_FL_USER9),
9061 RUBY_ENC_CODERANGE_BROKEN = ((int)(RUBY_FL_USER8|RUBY_FL_USER9)),
9062 RUBY_ENC_CODERANGE_MASK = (RUBY_ENC_CODERANGE_7BIT|
9063 RUBY_ENC_CODERANGE_VALID|
9064 RUBY_ENC_CODERANGE_BROKEN)
9065};
9066__attribute__((__const__))
9067static inline int
9068rb_enc_coderange_clean_p(int cr)
9069{
9070 return (cr ^ (cr >> 1)) & RUBY_ENC_CODERANGE_7BIT;
9071}
9072__attribute__((__const__))
9073static inline _Bool
9074RB_ENC_CODERANGE_CLEAN_P(enum ruby_coderange_type cr)
9075{
9076 return rb_enc_coderange_clean_p(cr);
9077}
9078__attribute__((__pure__))
9079static inline enum ruby_coderange_type
9080RB_ENC_CODERANGE(VALUE obj)
9081{
9082 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9083 return ((enum ruby_coderange_type)ret);
9084}
9085__attribute__((__pure__))
9086static inline _Bool
9087RB_ENC_CODERANGE_ASCIIONLY(VALUE obj)
9088{
9089 return RB_ENC_CODERANGE(obj) == RUBY_ENC_CODERANGE_7BIT;
9090}
9091static inline void
9092RB_ENC_CODERANGE_SET(VALUE obj, enum ruby_coderange_type cr)
9093{
9094 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9095 RB_FL_SET_RAW(obj, cr);
9096}
9097static inline void
9098RB_ENC_CODERANGE_CLEAR(VALUE obj)
9099{
9100 RB_FL_UNSET_RAW(obj, RUBY_ENC_CODERANGE_MASK);
9101}
9102__attribute__((__const__))
9103static inline enum ruby_coderange_type
9104RB_ENC_CODERANGE_AND(enum ruby_coderange_type a, enum ruby_coderange_type b)
9105{
9106 if (a == RUBY_ENC_CODERANGE_7BIT) {
9107 return b;
9108 }
9109 else if (a != RUBY_ENC_CODERANGE_VALID) {
9110 return RUBY_ENC_CODERANGE_UNKNOWN;
9111 }
9112 else if (b == RUBY_ENC_CODERANGE_7BIT) {
9113 return RUBY_ENC_CODERANGE_VALID;
9114 }
9115 else {
9116 return b;
9117 }
9118}
9119
9120
9121
9122
9123typedef unsigned char OnigUChar;
9124typedef unsigned int OnigCodePoint;
9125typedef unsigned int OnigCtype;
9126typedef size_t OnigDistance;
9127typedef ptrdiff_t OnigPosition;
9128typedef unsigned int OnigCaseFoldType;
9129extern OnigCaseFoldType OnigDefaultCaseFoldFlag;
9130typedef struct {
9131 int byte_len;
9132 int code_len;
9133 OnigCodePoint code[3];
9134} OnigCaseFoldCodeItem;
9135typedef struct {
9136 OnigCodePoint esc;
9137 OnigCodePoint anychar;
9138 OnigCodePoint anytime;
9139 OnigCodePoint zero_or_one_time;
9140 OnigCodePoint one_or_more_time;
9141 OnigCodePoint anychar_anytime;
9142} OnigMetaCharTableType;
9143typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
9144typedef struct OnigEncodingTypeST {
9145 int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
9146 const char* name;
9147 int max_enc_len;
9148 int min_enc_len;
9149 int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9150 OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9151 int (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
9152 int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
9153 int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
9154 int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
9155 int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
9156 int (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
9157 int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
9158 int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
9159 OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9160 int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
9161 int (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
9162 int ruby_encoding_index;
9163 unsigned int flags;
9164} OnigEncodingType;
9165typedef const OnigEncodingType* OnigEncoding;
9166extern const OnigEncodingType OnigEncodingASCII;
9167extern
9168int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
9169extern
9170int onigenc_mbclen(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
9171extern
9172OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
9173extern
9174int onigenc_init(void);
9175extern
9176int onigenc_set_default_encoding(OnigEncoding enc);
9177extern
9178OnigEncoding onigenc_get_default_encoding(void);
9179extern
9180OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
9181extern
9182OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9183extern
9184OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9185extern
9186OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
9187extern
9188int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
9189extern
9190int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
9191extern
9192int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);
9193typedef unsigned int OnigOptionType;
9194typedef struct {
9195 unsigned int op;
9196 unsigned int op2;
9197 unsigned int behavior;
9198 OnigOptionType options;
9199 OnigMetaCharTableType meta_char_table;
9200} OnigSyntaxType;
9201extern const OnigSyntaxType OnigSyntaxASIS;
9202extern const OnigSyntaxType OnigSyntaxPosixBasic;
9203extern const OnigSyntaxType OnigSyntaxPosixExtended;
9204extern const OnigSyntaxType OnigSyntaxEmacs;
9205extern const OnigSyntaxType OnigSyntaxGrep;
9206extern const OnigSyntaxType OnigSyntaxGnuRegex;
9207extern const OnigSyntaxType OnigSyntaxJava;
9208extern const OnigSyntaxType OnigSyntaxPerl58;
9209extern const OnigSyntaxType OnigSyntaxPerl58_NG;
9210extern const OnigSyntaxType OnigSyntaxPerl;
9211extern const OnigSyntaxType OnigSyntaxRuby;
9212extern const OnigSyntaxType OnigSyntaxPython;
9213extern const OnigSyntaxType* OnigDefaultSyntax;
9214struct re_registers {
9215 int allocated;
9216 int num_regs;
9217 OnigPosition* beg;
9218 OnigPosition* end;
9219};
9220typedef struct re_registers OnigRegion;
9221typedef struct {
9222 OnigEncoding enc;
9223 OnigUChar* par;
9224 OnigUChar* par_end;
9225} OnigErrorInfo;
9226typedef struct {
9227 int lower;
9228 int upper;
9229 long base_num;
9230 long inner_num;
9231} OnigRepeatRange;
9232typedef void (*OnigWarnFunc)(const char* s);
9233extern void onig_null_warn(const char* s);
9234typedef struct re_pattern_buffer {
9235 unsigned char* p;
9236 unsigned int used;
9237 unsigned int alloc;
9238 int num_mem;
9239 int num_repeat;
9240 int num_null_check;
9241 int num_comb_exp_check;
9242 int num_call;
9243 unsigned int capture_history;
9244 unsigned int bt_mem_start;
9245 unsigned int bt_mem_end;
9246 int stack_pop_level;
9247 int repeat_range_alloc;
9248 OnigOptionType options;
9249 OnigRepeatRange* repeat_range;
9250 OnigEncoding enc;
9251 const OnigSyntaxType* syntax;
9252 void* name_table;
9253 OnigCaseFoldType case_fold_flag;
9254 int optimize;
9255 int threshold_len;
9256 int anchor;
9257 OnigDistance anchor_dmin;
9258 OnigDistance anchor_dmax;
9259 int sub_anchor;
9260 unsigned char *exact;
9261 unsigned char *exact_end;
9262 unsigned char map[256];
9263 int *int_map;
9264 int *int_map_backward;
9265 OnigDistance dmin;
9266 OnigDistance dmax;
9267 uint64_t timelimit;
9268 struct re_pattern_buffer* chain;
9269} OnigRegexType;
9270typedef OnigRegexType* OnigRegex;
9271typedef OnigRegexType regex_t;
9272typedef struct {
9273 int num_of_elements;
9274 OnigEncoding pattern_enc;
9275 OnigEncoding target_enc;
9276 const OnigSyntaxType* syntax;
9277 OnigOptionType option;
9278 OnigCaseFoldType case_fold_flag;
9279} OnigCompileInfo;
9280extern
9281int onig_initialize(OnigEncoding encodings[], int n);
9282extern
9283int onig_init(void);
9284extern
9285int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
9286extern
9287void onig_set_warn_func(OnigWarnFunc f);
9288extern
9289void onig_set_verb_warn_func(OnigWarnFunc f);
9290extern
9291int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
9292extern
9293int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
9294extern
9295int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
9296extern
9297int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
9298extern
9299void onig_free(OnigRegex);
9300extern
9301void onig_free_body(OnigRegex);
9302extern
9303OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
9304extern
9305OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
9306extern
9307OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
9308extern
9309OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
9310extern
9311int onig_check_linear_time(OnigRegex reg);
9312extern
9313OnigRegion* onig_region_new(void);
9314extern
9315void onig_region_init(OnigRegion* region);
9316extern
9317void onig_region_free(OnigRegion* region, int free_self);
9318extern
9319void onig_region_copy(OnigRegion* to, const OnigRegion* from);
9320extern
9321void onig_region_clear(OnigRegion* region);
9322extern
9323int onig_region_resize(OnigRegion* region, int n);
9324extern
9325int onig_region_set(OnigRegion* region, int at, int beg, int end);
9326extern
9327int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
9328extern
9329int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
9330extern
9331int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
9332extern
9333int onig_number_of_names(const OnigRegexType *reg);
9334extern
9335int onig_number_of_captures(const OnigRegexType *reg);
9336extern
9337int onig_number_of_capture_histories(const OnigRegexType *reg);
9338extern
9339int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
9340extern
9341int onig_noname_group_capture_is_active(const OnigRegexType *reg);
9342extern
9343OnigEncoding onig_get_encoding(const OnigRegexType *reg);
9344extern
9345OnigOptionType onig_get_options(const OnigRegexType *reg);
9346extern
9347OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
9348extern
9349const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
9350extern
9351int onig_set_default_syntax(const OnigSyntaxType* syntax);
9352extern
9353void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
9354extern
9355unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
9356extern
9357unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
9358extern
9359unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
9360extern
9361OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
9362extern
9363void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
9364extern
9365void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
9366extern
9367void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
9368extern
9369void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
9370extern
9371int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
9372extern
9373void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
9374extern
9375OnigCaseFoldType onig_get_default_case_fold_flag(void);
9376extern
9377int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
9378extern
9379unsigned int onig_get_match_stack_limit_size(void);
9380extern
9381int onig_set_match_stack_limit_size(unsigned int size);
9382extern
9383unsigned int onig_get_parse_depth_limit(void);
9384extern
9385int onig_set_parse_depth_limit(unsigned int depth);
9386extern
9387int onig_end(void);
9388extern
9389const char* onig_version(void);
9390extern
9391const char* onig_copyright(void);
9392
9393
9394
9395
9396extern VALUE rb_cEncoding;
9397enum ruby_encoding_consts {
9398 RUBY_ENCODING_INLINE_MAX = 127,
9399 RUBY_ENCODING_SHIFT = (RUBY_FL_USHIFT+10),
9400 RUBY_ENCODING_MASK = (RUBY_ENCODING_INLINE_MAX<<RUBY_ENCODING_SHIFT
9401 ),
9402 RUBY_ENCODING_MAXNAMELEN = 42
9403};
9404static inline void
9405RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
9406{
9407 VALUE f = encindex;
9408 f <<= RUBY_ENCODING_SHIFT;
9409 RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
9410 RB_FL_SET_RAW(obj, f);
9411}
9412static inline int
9413RB_ENCODING_GET_INLINED(VALUE obj)
9414{
9415 VALUE ret = RB_FL_TEST_RAW(obj, RUBY_ENCODING_MASK) >> RUBY_ENCODING_SHIFT;
9416 return ((int)ret);
9417}
9418typedef const OnigEncodingType rb_encoding;
9419
9420int rb_char_to_option_kcode(int c, int *option, int *kcode);
9421int rb_enc_replicate(const char *name, rb_encoding *src);
9422int rb_define_dummy_encoding(const char *name);
9423__attribute__((__pure__))
9424int rb_enc_dummy_p(rb_encoding *enc);
9425__attribute__((__pure__))
9426int rb_enc_to_index(rb_encoding *enc);
9427int rb_enc_get_index(VALUE obj);
9428static inline int
9429RB_ENCODING_GET(VALUE obj)
9430{
9431 int encindex = RB_ENCODING_GET_INLINED(obj);
9432 if (encindex == RUBY_ENCODING_INLINE_MAX) {
9433 return rb_enc_get_index(obj);
9434 }
9435 else {
9436 return encindex;
9437 }
9438}
9439void rb_enc_set_index(VALUE obj, int encindex);
9440static inline void
9441RB_ENCODING_SET(VALUE obj, int encindex)
9442{
9443 rb_enc_set_index(obj, encindex);
9444}
9445static inline void
9446RB_ENCODING_CODERANGE_SET(VALUE obj, int encindex, enum ruby_coderange_type cr)
9447{
9448 RB_ENCODING_SET(obj, encindex);
9449 RB_ENC_CODERANGE_SET(obj, cr);
9450}
9451__attribute__((__pure__))
9452int rb_enc_capable(VALUE obj);
9453int rb_enc_find_index(const char *name);
9454int rb_enc_alias(const char *alias, const char *orig);
9455int rb_to_encoding_index(VALUE obj);
9456rb_encoding *rb_to_encoding(VALUE obj);
9457rb_encoding *rb_find_encoding(VALUE obj);
9458rb_encoding *rb_enc_get(VALUE obj);
9459rb_encoding *rb_enc_compatible(VALUE str1, VALUE str2);
9460rb_encoding *rb_enc_check(VALUE str1,VALUE str2);
9461VALUE rb_enc_associate_index(VALUE obj, int encindex);
9462VALUE rb_enc_associate(VALUE obj, rb_encoding *enc);
9463void rb_enc_copy(VALUE dst, VALUE src);
9464rb_encoding *rb_enc_from_index(int idx);
9465rb_encoding *rb_enc_find(const char *name);
9466static inline const char *
9467rb_enc_name(rb_encoding *enc)
9468{
9469 return enc->name;
9470}
9471static inline int
9472rb_enc_mbminlen(rb_encoding *enc)
9473{
9474 return enc->min_enc_len;
9475}
9476static inline int
9477rb_enc_mbmaxlen(rb_encoding *enc)
9478{
9479 return enc->max_enc_len;
9480}
9481int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);
9482int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc);
9483int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);
9484int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);
9485unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc);
9486static inline unsigned int
9487rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc)
9488{
9489 return rb_enc_codepoint_len(p, e, 0, enc);
9490}
9491static inline OnigCodePoint
9492rb_enc_mbc_to_codepoint(const char *p, const char *e, rb_encoding *enc)
9493{
9494 const OnigUChar *up = ((const OnigUChar *)p);
9495 const OnigUChar *ue = ((const OnigUChar *)e);
9496 return (enc)->mbc_to_code((up),(ue),enc);
9497}
9498int rb_enc_codelen(int code, rb_encoding *enc);
9499static inline int
9500rb_enc_code_to_mbclen(int c, rb_encoding *enc)
9501{
9502 OnigCodePoint uc = ((OnigCodePoint)c);
9503 return (enc)->code_to_mbclen(uc,enc);
9504}
9505static inline int
9506rb_enc_mbcput(unsigned int c, void *buf, rb_encoding *enc)
9507{
9508 OnigCodePoint uc = ((OnigCodePoint)c);
9509 OnigUChar *ubuf = ((OnigUChar *)buf);
9510 return (enc)->code_to_mbc(uc,ubuf,enc);
9511}
9512static inline char *
9513rb_enc_prev_char(const char *s, const char *p, const char *e, rb_encoding *enc)
9514{
9515 const OnigUChar *us = ((const OnigUChar *)s);
9516 const OnigUChar *up = ((const OnigUChar *)p);
9517 const OnigUChar *ue = ((const OnigUChar *)e);
9518 OnigUChar *ur = onigenc_get_prev_char_head(enc, us, up, ue);
9519 return ((char *)ur);
9520}
9521static inline char *
9522rb_enc_left_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9523{
9524 const OnigUChar *us = ((const OnigUChar *)s);
9525 const OnigUChar *up = ((const OnigUChar *)p);
9526 const OnigUChar *ue = ((const OnigUChar *)e);
9527 OnigUChar *ur = onigenc_get_left_adjust_char_head(enc, us, up, ue);
9528 return ((char *)ur);
9529}
9530static inline char *
9531rb_enc_right_char_head(const char *s, const char *p, const char *e, rb_encoding *enc)
9532{
9533 const OnigUChar *us = ((const OnigUChar *)s);
9534 const OnigUChar *up = ((const OnigUChar *)p);
9535 const OnigUChar *ue = ((const OnigUChar *)e);
9536 OnigUChar *ur = onigenc_get_right_adjust_char_head(enc, us, up, ue);
9537 return ((char *)ur);
9538}
9539static inline char *
9540rb_enc_step_back(const char *s, const char *p, const char *e, int n, rb_encoding *enc)
9541{
9542 const OnigUChar *us = ((const OnigUChar *)s);
9543 const OnigUChar *up = ((const OnigUChar *)p);
9544 const OnigUChar *ue = ((const OnigUChar *)e);
9545 const OnigUChar *ur = onigenc_step_back(enc, us, up, ue, n);
9546 return ((char *)ur);
9547}
9548static inline int
9549rb_enc_asciicompat_inline(rb_encoding *enc)
9550{
9551 return rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc);
9552}
9553static inline _Bool
9554rb_enc_asciicompat(rb_encoding *enc)
9555{
9556 if (rb_enc_mbminlen(enc) != 1) {
9557 return 0;
9558 }
9559 else if (rb_enc_dummy_p(enc)) {
9560 return 0;
9561 }
9562 else {
9563 return 1;
9564 }
9565}
9566static inline _Bool
9567rb_enc_str_asciicompat_p(VALUE str)
9568{
9569 rb_encoding *enc = rb_enc_get(str);
9570 return rb_enc_asciicompat(enc);
9571}
9572VALUE rb_enc_from_encoding(rb_encoding *enc);
9573__attribute__((__pure__))
9574int rb_enc_unicode_p(rb_encoding *enc);
9575__attribute__((__returns_nonnull__))
9576rb_encoding *rb_ascii8bit_encoding(void);
9577__attribute__((__returns_nonnull__))
9578rb_encoding *rb_utf8_encoding(void);
9579__attribute__((__returns_nonnull__))
9580rb_encoding *rb_usascii_encoding(void);
9581rb_encoding *rb_locale_encoding(void);
9582rb_encoding *rb_filesystem_encoding(void);
9583rb_encoding *rb_default_external_encoding(void);
9584rb_encoding *rb_default_internal_encoding(void);
9585__attribute__((__const__))
9586int rb_ascii8bit_encindex(void);
9587static inline _Bool
9588RB_ENCODING_IS_ASCII8BIT(VALUE obj)
9589{
9590 return RB_ENCODING_GET_INLINED(obj) == rb_ascii8bit_encindex();
9591}
9592__attribute__((__const__))
9593int rb_utf8_encindex(void);
9594__attribute__((__const__))
9595int rb_usascii_encindex(void);
9596int rb_locale_encindex(void);
9597int rb_filesystem_encindex(void);
9598VALUE rb_enc_default_external(void);
9599VALUE rb_enc_default_internal(void);
9600void rb_enc_set_default_external(VALUE encoding);
9601void rb_enc_set_default_internal(VALUE encoding);
9602VALUE rb_locale_charmap(VALUE klass);
9603
9604
9605
9606
9607static inline _Bool
9608rb_enc_is_newline(const char *p, const char *e, rb_encoding *enc)
9609{
9610 OnigUChar *up = ((OnigUChar *)p);
9611 OnigUChar *ue = ((OnigUChar *)e);
9612 return (enc)->is_mbc_newline((up),(ue),enc);
9613}
9614static inline _Bool
9615rb_enc_isctype(OnigCodePoint c, OnigCtype t, rb_encoding *enc)
9616{
9617 return (enc)->is_code_ctype(c,t,enc);
9618}
9619static inline _Bool
9620rb_enc_isascii(OnigCodePoint c, rb_encoding *enc)
9621{
9622 return ((c) < 128);
9623}
9624static inline _Bool
9625rb_enc_isalpha(OnigCodePoint c, rb_encoding *enc)
9626{
9627 return (enc)->is_code_ctype(c,1,enc);
9628}
9629static inline _Bool
9630rb_enc_islower(OnigCodePoint c, rb_encoding *enc)
9631{
9632 return (enc)->is_code_ctype(c,6,enc);
9633}
9634static inline _Bool
9635rb_enc_isupper(OnigCodePoint c, rb_encoding *enc)
9636{
9637 return (enc)->is_code_ctype(c,10,enc);
9638}
9639static inline _Bool
9640rb_enc_iscntrl(OnigCodePoint c, rb_encoding *enc)
9641{
9642 return (enc)->is_code_ctype(c,3,enc);
9643}
9644static inline _Bool
9645rb_enc_ispunct(OnigCodePoint c, rb_encoding *enc)
9646{
9647 return (enc)->is_code_ctype(c,8,enc);
9648}
9649static inline _Bool
9650rb_enc_isalnum(OnigCodePoint c, rb_encoding *enc)
9651{
9652 return (enc)->is_code_ctype(c,13,enc);
9653}
9654static inline _Bool
9655rb_enc_isprint(OnigCodePoint c, rb_encoding *enc)
9656{
9657 return (enc)->is_code_ctype(c,7,enc);
9658}
9659static inline _Bool
9660rb_enc_isspace(OnigCodePoint c, rb_encoding *enc)
9661{
9662 return (enc)->is_code_ctype(c,9,enc);
9663}
9664static inline _Bool
9665rb_enc_isdigit(OnigCodePoint c, rb_encoding *enc)
9666{
9667 return (enc)->is_code_ctype(c,4,enc);
9668}
9669__attribute__((__const__))
9670int rb_enc_toupper(int c, rb_encoding *enc);
9671__attribute__((__const__))
9672int rb_enc_tolower(int c, rb_encoding *enc);
9673
9674
9675
9676
9677__attribute__((__nonnull__ ()))
9678char *rb_enc_path_next(const char *path, const char *end, rb_encoding *enc);
9679__attribute__((__nonnull__ ()))
9680char *rb_enc_path_skip_prefix(const char *path, const char *end, rb_encoding *enc);
9681__attribute__((__nonnull__ ()))
9682char *rb_enc_path_last_separator(const char *path, const char *end, rb_encoding *enc);
9683__attribute__((__nonnull__ ()))
9684char *rb_enc_path_end(const char *path, const char *end, rb_encoding *enc);
9685__attribute__((__nonnull__ (1, 4)))
9686const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc);
9687__attribute__((__nonnull__ (1, 3)))
9688const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc);
9689
9690
9691
9692
9693VALUE rb_enc_reg_new(const char *ptr, long len, rb_encoding *enc, int opts);
9694
9695
9696
9697
9698__attribute__((__nonnull__ (2)))
9699__attribute__((__format__(__printf__, 2, 3)))
9700VALUE rb_enc_sprintf(rb_encoding *enc, const char *fmt, ...);
9701__attribute__((__nonnull__ (2)))
9702__attribute__((__format__(__printf__, 2, 0)))
9703VALUE rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap);
9704__attribute__((__noreturn__))
9705__attribute__((__nonnull__ (3)))
9706__attribute__((__format__(__printf__, 3, 4)))
9707void rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...);
9708
9709
9710
9711
9712VALUE rb_enc_str_new(const char *ptr, long len, rb_encoding *enc);
9713__attribute__((__nonnull__ (1)))
9714VALUE rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc);
9715VALUE rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc);
9716VALUE rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc);
9717__attribute__((__nonnull__ (1)))
9718VALUE rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc);
9719long rb_enc_strlen(const char *head, const char *tail, rb_encoding *enc);
9720char *rb_enc_nth(const char *head, const char *tail, long nth, rb_encoding *enc);
9721VALUE rb_obj_encoding(VALUE obj);
9722VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);
9723VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc);
9724VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *enc);
9725VALUE rb_str_export_to_enc(VALUE obj, rb_encoding *enc);
9726VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
9727VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
9728int rb_enc_str_coderange(VALUE str);
9729long rb_str_coderange_scan_restartable(const char *str, const char *end, rb_encoding *enc, int *cr);
9730int rb_enc_str_asciionly_p(VALUE str);
9731__attribute__((__nonnull__ ()))
9732long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc);
9733__attribute__((__nonnull__ ()))
9734static inline VALUE
9735rbimpl_enc_str_new_cstr(const char *str, rb_encoding *enc)
9736{
9737 long len = rbimpl_strlen(str);
9738 return rb_enc_str_new_static(str, len, enc);
9739}
9740
9741
9742
9743
9744ID rb_intern3(const char *name, long len, rb_encoding *enc);
9745__attribute__((__nonnull__ ()))
9746int rb_enc_symname_p(const char *str, rb_encoding *enc);
9747int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc);
9748ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc);
9749VALUE rb_check_symbol_cstr(const char *ptr, long len, rb_encoding *enc);
9750
9751
9752
9753
9754typedef enum {
9755 econv_invalid_byte_sequence,
9756 econv_undefined_conversion,
9757 econv_destination_buffer_full,
9758 econv_source_buffer_empty,
9759 econv_finished,
9760 econv_after_output,
9761 econv_incomplete_input
9762} rb_econv_result_t;
9763typedef struct rb_econv_t rb_econv_t;
9764VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);
9765int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);
9766int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags);
9767int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);
9768rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);
9769rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);
9770rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
9771 const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
9772 unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
9773 int flags);
9774void rb_econv_close(rb_econv_t *ec);
9775int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);
9776int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);
9777int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);
9778VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);
9779int rb_econv_insert_output(rb_econv_t *ec,
9780 const unsigned char *str, size_t len, const char *str_encoding);
9781const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);
9782void rb_econv_check_error(rb_econv_t *ec);
9783VALUE rb_econv_make_exception(rb_econv_t *ec);
9784int rb_econv_putbackable(rb_econv_t *ec);
9785void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);
9786const char *rb_econv_asciicompat_encoding(const char *encname);
9787VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);
9788VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);
9789VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);
9790VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);
9791VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags);
9792void rb_econv_binmode(rb_econv_t *ec);
9793enum ruby_econv_flag_type {
9794 RUBY_ECONV_ERROR_HANDLER_MASK = 0x000000ff,
9795 RUBY_ECONV_INVALID_MASK = 0x0000000f,
9796 RUBY_ECONV_INVALID_REPLACE = 0x00000002,
9797 RUBY_ECONV_UNDEF_MASK = 0x000000f0,
9798 RUBY_ECONV_UNDEF_REPLACE = 0x00000020,
9799 RUBY_ECONV_UNDEF_HEX_CHARREF = 0x00000030,
9800 RUBY_ECONV_DECORATOR_MASK = 0x0001ff00,
9801 RUBY_ECONV_NEWLINE_DECORATOR_MASK = 0x00007f00,
9802 RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK = 0x00000f00,
9803 RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK = 0x00007000,
9804 RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR = 0x00000100,
9805 RUBY_ECONV_CRLF_NEWLINE_DECORATOR = 0x00001000,
9806 RUBY_ECONV_CR_NEWLINE_DECORATOR = 0x00002000,
9807 RUBY_ECONV_LF_NEWLINE_DECORATOR = 0x00004000,
9808 RUBY_ECONV_XML_TEXT_DECORATOR = 0x00008000,
9809 RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR = 0x00010000,
9810 RUBY_ECONV_STATEFUL_DECORATOR_MASK = 0x00f00000,
9811 RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR = 0x00100000,
9812 RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR =
9813 0,
9814 RUBY_ECONV_PARTIAL_INPUT = 0x00020000,
9815 RUBY_ECONV_AFTER_OUTPUT = 0x00040000,
9816 RUBY_ECONV_FLAGS_PLACEHOLDER
9817};
9818
9819
9820VALUE rb_fstring(VALUE);
9821VALUE rb_fstring_cstr(const char *str);
9822VALUE rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc);
9823int rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p);
9824int rb_str_symname_p(VALUE);
9825VALUE rb_str_quote_unprintable(VALUE);
9826char *rb_str_fill_terminator(VALUE str, const int termlen);
9827void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen);
9828VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
9829VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
9830VALUE rb_external_str_with_enc(VALUE str, rb_encoding *eenc);
9831VALUE rb_str_cat_conv_enc_opts(VALUE newstr, long ofs, const char *ptr, long len,
9832 rb_encoding *from, int ecflags, VALUE ecopts);
9833VALUE rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl);
9834VALUE rb_str_escape(VALUE str);
9835size_t rb_str_memsize(VALUE);
9836char *rb_str_to_cstr(VALUE str);
9837const char *ruby_escaped_char(int c);
9838void rb_str_make_independent(VALUE str);
9839int rb_enc_str_coderange_scan(VALUE str, rb_encoding *enc);
9840int rb_ascii8bit_appendable_encoding_index(rb_encoding *enc, unsigned int code);
9841VALUE rb_str_include(VALUE str, VALUE arg);
9842static inline _Bool STR_EMBED_P(VALUE str);
9843static inline _Bool STR_SHARED_P(VALUE str);
9844static inline VALUE QUOTE(VALUE v);
9845static inline VALUE QUOTE_ID(ID v);
9846static inline _Bool is_ascii_string(VALUE str);
9847static inline _Bool is_broken_string(VALUE str);
9848static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2);
9849
9850
9851VALUE rb_str_tmp_frozen_acquire(VALUE str);
9852void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
9853VALUE rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encoding *enc);
9854VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE);
9855VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE);
9856void rb_str_make_embedded(VALUE);
9857size_t rb_str_size_as_embedded(VALUE);
9858_Bool rb_str_reembeddable_p(VALUE);
9859void rb_str_update_shared_ary(VALUE str, VALUE old_root, VALUE new_root);
9860
9861
9862
9863
9864VALUE rb_fstring_new(const char *ptr, long len);
9865VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
9866VALUE rb_str_opt_plus(VALUE x, VALUE y);
9867VALUE rb_str_concat_literals(size_t num, const VALUE *strary);
9868VALUE rb_str_eql(VALUE str1, VALUE str2);
9869VALUE rb_id_quote_unprintable(ID);
9870VALUE rb_sym_proc_call(ID mid, int argc, const VALUE *argv, int kw_splat, VALUE passed_proc);
9871struct rb_execution_context_struct;
9872VALUE rb_ec_str_resurrect(struct rb_execution_context_struct *ec, VALUE str);
9873
9874
9875static inline VALUE
9876QUOTE(VALUE v)
9877{
9878 return rb_str_quote_unprintable(v);
9879}
9880static inline VALUE
9881QUOTE_ID(ID i)
9882{
9883 return rb_id_quote_unprintable(i);
9884}
9885static inline _Bool
9886STR_EMBED_P(VALUE str)
9887{
9888 return ! RB_FL_TEST_RAW(str, ((VALUE)RUBY_FL_USER1));
9889}
9890static inline _Bool
9891STR_SHARED_P(VALUE str)
9892{
9893 return RB_FL_ALL_RAW(str, ((VALUE)RUBY_FL_USER1) | ((VALUE)RUBY_FL_USER2));
9894}
9895static inline _Bool
9896is_ascii_string(VALUE str)
9897{
9898 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_7BIT;
9899}
9900static inline _Bool
9901is_broken_string(VALUE str)
9902{
9903 return rb_enc_str_coderange(str) == RUBY_ENC_CODERANGE_BROKEN;
9904}
9905static inline VALUE
9906rb_str_eql_internal(const VALUE str1, const VALUE str2)
9907{
9908 const long len = RSTRING_LEN(str1);
9909 const char *ptr1, *ptr2;
9910 if (len != RSTRING_LEN(str2)) return ((VALUE)RUBY_Qfalse);
9911 if (!rb_str_comparable(str1, str2)) return ((VALUE)RUBY_Qfalse);
9912 if ((ptr1 = RSTRING_PTR(str1)) == (ptr2 = RSTRING_PTR(str2)))
9913 return ((VALUE)RUBY_Qtrue);
9914 if (memcmp(ptr1, ptr2, len) == 0)
9915 return ((VALUE)RUBY_Qtrue);
9916 return ((VALUE)RUBY_Qfalse);
9917}
9918extern long rb_backtrace_length_limit;
9919extern VALUE rb_eEAGAIN;
9920extern VALUE rb_eEWOULDBLOCK;
9921extern VALUE rb_eEINPROGRESS;
9922__attribute__((__format__(__printf__, 3, 0)))
9923void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
9924__attribute__((__noreturn__)) void rb_async_bug_errno(const char *,int);
9925const char *rb_builtin_type_name(int t);
9926const char *rb_builtin_class_name(VALUE x);
9927__attribute__((__format__(__printf__, (1), (3)))) void rb_warn_deprecated(const char *fmt, const char *suggest, ...);
9928__attribute__((__format__(__printf__, (2), (4)))) void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...);
9929__attribute__((__format__(__printf__, 6, 0)))
9930VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
9931__attribute__((__format__(__printf__, (2), (3)))) void rb_enc_warn(rb_encoding *enc, const char *fmt, ...);
9932__attribute__((__format__(__printf__, (2), (3)))) void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...);
9933__attribute__((__format__(__printf__, (3), (4)))) void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...);
9934rb_warning_category_t rb_warning_category_from_name(VALUE category);
9935_Bool rb_warning_category_enabled_p(rb_warning_category_t category);
9936VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
9937VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int priv);
9938VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
9939__attribute__((__format__(__printf__, (1), (2)))) VALUE rb_warning_string(const char *fmt, ...);
9940__attribute__((__format__(__printf__, 2, 0)))
9941__attribute__((__noreturn__)) void rb_vraise(VALUE, const char *, va_list);
9942__attribute__((__noreturn__)) static inline void rb_raise_cstr(VALUE etype, const char *mesg);
9943__attribute__((__noreturn__)) static inline void rb_raise_cstr_i(VALUE etype, VALUE mesg);
9944__attribute__((__noreturn__)) static inline void rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name);
9945__attribute__((__noreturn__)) static inline void rb_name_err_raise(const char *mesg, VALUE recv, VALUE name);
9946__attribute__((__noreturn__)) static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name);
9947static inline void Check_Type(VALUE v, enum ruby_value_type t);
9948static inline _Bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
9949
9950
9951int rb_bug_reporter_add(void (*func)(FILE *, void *), void *data);
9952__attribute__((__noreturn__)) void rb_sys_fail_path_in(const char *func_name, VALUE path);
9953__attribute__((__noreturn__)) void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path);
9954VALUE rb_syserr_new_path_in(const char *func_name, int n, VALUE path);
9955
9956
9957static inline void
9958rb_raise_cstr_i(VALUE etype, VALUE mesg)
9959{
9960 VALUE exc = rb_exc_new_str(etype, mesg);
9961 rb_exc_raise(exc);
9962}
9963static inline void
9964rb_raise_cstr(VALUE etype, const char *mesg)
9965{
9966 VALUE str = ((__builtin_constant_p(mesg) ? rbimpl_str_new_cstr : rb_str_new_cstr) (mesg));
9967 rb_raise_cstr_i(etype, str);
9968}
9969static inline void
9970rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name)
9971{
9972 VALUE exc = rb_name_err_new(mesg, recv, name);
9973 rb_exc_raise(exc);
9974}
9975static inline void
9976rb_name_err_raise(const char *mesg, VALUE recv, VALUE name)
9977{
9978 VALUE str = (__builtin_constant_p(mesg) ? rb_fstring_new((mesg), (long)strlen(mesg)) : (rb_fstring_cstr)(mesg));
9979 rb_name_err_raise_str(str, recv, name);
9980}
9981static inline void
9982rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
9983{
9984 VALUE exc = rb_key_err_new(mesg, recv, name);
9985 rb_exc_raise(exc);
9986}
9987static inline _Bool
9988rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type)
9989{
9990 return RB_TYPE_P(obj, RUBY_T_DATA) && RTYPEDDATA_P(obj) && (RTYPEDDATA_TYPE(obj) == data_type);
9991}
9992extern ID ruby_static_id_signo;
9993extern ID ruby_static_id_status;
9994VALUE rb_refinement_module_get_refined_class(VALUE module);
9995void rb_class_modify_check(VALUE);
9996__attribute__((__noreturn__)) VALUE rb_f_raise(int argc, VALUE *argv);
9997VALUE rb_get_backtrace(VALUE info);
9998void rb_call_end_proc(VALUE data);
9999void rb_mark_end_proc(void);
10000void Init_class_hierarchy(void);
10001void Init_enc(void);
10002void Init_ext(void);
10003void Init_File(void);
10004void Init_heap(void);
10005int Init_enc_set_filesystem_encoding(void);
10006void Init_newline(void);
10007void Init_BareVM(void);
10008void Init_vm_objects(void);
10009void Init_vm_backtrace(void);
10010void Init_vm_eval(void);static inline
10011void Init_vm_stack_canary(void);
10012void Init_eval_method(void);
10013void rb_call_inits(void);
10014VALUE rb_class_search_ancestor(VALUE klass, VALUE super);
10015__attribute__((__noreturn__)) void rb_undefined_alloc(VALUE klass);
10016double rb_num_to_dbl(VALUE val);
10017VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound);
10018VALUE rb_immutable_obj_clone(int, VALUE *, VALUE);
10019VALUE rb_check_convert_type_with_id(VALUE,int,const char*,ID);
10020int rb_bool_expected(VALUE, const char *, int raise);
10021static inline void RBASIC_CLEAR_CLASS(VALUE obj);
10022static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass);
10023static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass);
10024
10025
10026int rb_opts_exception_p(VALUE opts, int default_value);
10027
10028
10029
10030
10031__attribute__((__const__)) VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
10032__attribute__((__const__)) VALUE rb_obj_not(VALUE obj);
10033VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
10034void rb_obj_copy_ivar(VALUE dest, VALUE obj);
10035VALUE rb_false(VALUE obj);
10036VALUE rb_convert_type_with_id(VALUE v, int t, const char* nam, ID mid);
10037VALUE rb_obj_size(VALUE self, VALUE args, VALUE obj);
10038VALUE rb_get_freeze_opt(int argc, VALUE *argv);
10039
10040
10041static inline void
10042RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass)
10043{
10044 const VALUE *ptr = &((struct RBasic *)(obj))->klass;
10045 *(VALUE *)ptr = klass;
10046}
10047static inline void
10048RBASIC_CLEAR_CLASS(VALUE obj)
10049{
10050 RBASIC_SET_CLASS_RAW(obj, 0);
10051}
10052static inline void
10053RBASIC_SET_CLASS(VALUE obj, VALUE klass)
10054{
10055 VALUE oldv = RBASIC_CLASS(obj);
10056 RBASIC_SET_CLASS_RAW(obj, klass);
10057 (rb_obj_written((VALUE)(obj), (VALUE)(oldv), (VALUE)(klass), "../ruby-3.2.1/internal/object.h", 59));
10058}
10059struct rb_iseq_struct;
10060VALUE rb_parser_set_yydebug(VALUE, VALUE);
10061void *rb_parser_load_file(VALUE parser, VALUE name);
10062void rb_parser_keep_script_lines(VALUE vparser);
10063void rb_parser_error_tolerant(VALUE vparser);
10064void rb_parser_keep_tokens(VALUE vparser);
10065
10066
10067VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
10068
10069
10070struct rb_block;
10071struct rb_iseq_struct;
10072VALUE rb_proc_location(VALUE self);
10073st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
10074int rb_block_pair_yield_optimizable(void);
10075int rb_block_arity(void);
10076int rb_block_min_max_arity(int *max);
10077VALUE rb_block_to_s(VALUE self, const struct rb_block *block, const char *additional_info);
10078VALUE rb_callable_receiver(VALUE);
10079
10080
10081VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
10082VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
10083VALUE rb_iseq_location(const struct rb_iseq_struct *iseq);
10084VALUE rb_sym_to_proc(VALUE sym);
10085
10086
10087VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
10088VALUE rb_reg_check_preprocess(VALUE);
10089long rb_reg_search0(VALUE, VALUE, long, int, int);
10090VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
10091_Bool rb_reg_start_with_p(VALUE re, VALUE str);
10092VALUE rb_reg_hash(VALUE re);
10093VALUE rb_reg_equal(VALUE re1, VALUE re2);
10094void rb_backref_set_string(VALUE string, long pos, long len);
10095void rb_match_unbusy(VALUE);
10096int rb_match_count(VALUE match);
10097int rb_match_nth_defined(int nth, VALUE match);
10098
10099
10100VALUE rb_reg_new_ary(VALUE ary, int options);
10101
10102
10103VALUE rb_to_symbol_type(VALUE obj);
10104VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc);
10105VALUE rb_sym_intern_ascii(const char *ptr, long len);
10106VALUE rb_sym_intern_ascii_cstr(const char *ptr);
10107int rb_is_const_name(VALUE name);
10108int rb_is_class_name(VALUE name);
10109int rb_is_instance_name(VALUE name);
10110int rb_is_local_name(VALUE name);
10111__attribute__((__pure__)) int rb_is_const_sym(VALUE sym);
10112__attribute__((__pure__)) int rb_is_attrset_sym(VALUE sym);
10113ID rb_make_internal_id(void);
10114ID rb_make_temporary_id(size_t n);
10115void rb_gc_free_dsymbol(VALUE);
10116int rb_static_id_valid_p(ID id);
10117struct rb_thread_struct;
10118VALUE rb_obj_is_mutex(VALUE obj);
10119VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg);
10120void rb_thread_execute_interrupts(VALUE th);
10121VALUE rb_get_coverages(void);
10122int rb_get_coverage_mode(void);
10123VALUE rb_default_coverage(int);
10124VALUE rb_thread_shield_new(void);
10125VALUE rb_thread_shield_wait(VALUE self);
10126VALUE rb_thread_shield_release(VALUE self);
10127VALUE rb_thread_shield_destroy(VALUE self);
10128int rb_thread_to_be_killed(VALUE thread);
10129void rb_mutex_allow_trap(VALUE self, int val);
10130VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data);
10131VALUE rb_mutex_owned_p(VALUE self);
10132VALUE rb_exec_recursive_outer_mid(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h, ID mid);
10133int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout);
10134
10135
10136VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
10137int ruby_thread_has_gvl_p(void);
10138
10139
10140
10141
10142int rb_threadptr_execute_interrupts(struct rb_thread_struct *th, int blocking_timing);
10143
10144
10145struct rb_id_table;
10146enum rb_id_table_iterator_result {
10147 ID_TABLE_CONTINUE = ST_CONTINUE,
10148 ID_TABLE_STOP = ST_STOP,
10149 ID_TABLE_DELETE = ST_DELETE,
10150 ID_TABLE_REPLACE = ST_REPLACE,
10151 ID_TABLE_ITERATOR_RESULT_END
10152};
10153struct rb_id_table *rb_id_table_create(size_t size);
10154void rb_id_table_free(struct rb_id_table *tbl);
10155void rb_id_table_clear(struct rb_id_table *tbl);
10156size_t rb_id_table_memsize(const struct rb_id_table *tbl);
10157int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val);
10158int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp);
10159int rb_id_table_delete(struct rb_id_table *tbl, ID id);
10160typedef enum rb_id_table_iterator_result rb_id_table_update_value_callback_func_t(VALUE *val, void *data, int existing);
10161typedef enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data);
10162typedef enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data);
10163void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data);
10164void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data);
10165void 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);
10166
10167
10168size_t rb_id_table_size(const struct rb_id_table *tbl);
10169
10170
10171typedef enum {
10172 CONST_DEPRECATED = 0x100,
10173 CONST_VISIBILITY_MASK = 0xff,
10174 CONST_PUBLIC = 0x00,
10175 CONST_PRIVATE,
10176 CONST_VISIBILITY_MAX
10177} rb_const_flag_t;
10178typedef struct rb_const_entry_struct {
10179 rb_const_flag_t flag;
10180 int line;
10181 VALUE value;
10182 VALUE file;
10183} rb_const_entry_t;
10184VALUE rb_mod_private_constant(int argc, const VALUE *argv, VALUE obj);
10185VALUE rb_mod_public_constant(int argc, const VALUE *argv, VALUE obj);
10186VALUE rb_mod_deprecate_constant(int argc, const VALUE *argv, VALUE obj);
10187void rb_free_const_table(struct rb_id_table *tbl);
10188VALUE rb_const_source_location(VALUE, ID);
10189
10190
10191int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag);
10192rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
10193VALUE rb_public_const_get_at(VALUE klass, ID id);
10194VALUE rb_public_const_get_from(VALUE klass, ID id);
10195int rb_public_const_defined_from(VALUE klass, ID id);
10196VALUE rb_const_source_location_at(VALUE, ID);
10197
10198
10199void rb_gc_mark_global_tbl(void);
10200void rb_gc_update_global_tbl(void);
10201size_t rb_generic_ivar_memsize(VALUE);
10202VALUE rb_search_class_path(VALUE);
10203VALUE rb_attr_delete(VALUE, ID);
10204void rb_autoload_str(VALUE mod, ID id, VALUE file);
10205VALUE rb_autoload_at_p(VALUE, ID, int);
10206__attribute__((__noreturn__)) VALUE rb_mod_const_missing(VALUE,VALUE);
10207rb_gvar_getter_t *rb_gvar_getter_function_of(ID);
10208rb_gvar_setter_t *rb_gvar_setter_function_of(ID);
10209void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_);
10210void rb_gvar_ractor_local(const char *name);
10211static inline _Bool ROBJ_TRANSIENT_P(VALUE obj);
10212static inline void ROBJ_TRANSIENT_SET(VALUE obj);
10213static inline void ROBJ_TRANSIENT_UNSET(VALUE obj);
10214struct gen_ivtbl;
10215int rb_gen_ivtbl_get(VALUE obj, ID id, struct gen_ivtbl **ivtbl);
10216int rb_obj_evacuate_ivs_to_hash_table(ID key, VALUE val, st_data_t arg);
10217
10218
10219void rb_mark_generic_ivar(VALUE);
10220void rb_mv_generic_ivar(VALUE src, VALUE dst);
10221VALUE rb_const_missing(VALUE klass, VALUE name);
10222int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
10223void rb_iv_tbl_copy(VALUE dst, VALUE src);
10224
10225
10226
10227
10228VALUE rb_ivar_lookup(VALUE obj, ID id, VALUE undef);
10229VALUE rb_gvar_get(ID);
10230VALUE rb_gvar_set(ID, VALUE);
10231VALUE rb_gvar_defined(ID);
10232void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID);
10233rb_shape_t * rb_grow_iv_list(VALUE obj);
10234void rb_ensure_iv_list_size(VALUE obj, uint32_t len, uint32_t newsize);
10235struct gen_ivtbl * rb_ensure_generic_iv_list_size(VALUE obj, uint32_t newsize);
10236attr_index_t rb_obj_ivar_set(VALUE obj, ID id, VALUE val);
10237
10238
10239static inline _Bool
10240ROBJ_TRANSIENT_P(VALUE obj)
10241{
10242 return RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_USER2));
10243}
10244static inline void
10245ROBJ_TRANSIENT_SET(VALUE obj)
10246{
10247 RB_FL_SET_RAW(obj, ((VALUE)RUBY_FL_USER2));
10248}
10249static inline void
10250ROBJ_TRANSIENT_UNSET(VALUE obj)
10251{
10252 RB_FL_UNSET_RAW(obj, ((VALUE)RUBY_FL_USER2));
10253}
10254enum rb_mjit_func_state {
10255 MJIT_FUNC_NOT_COMPILED = 0,
10256 MJIT_FUNC_COMPILING = 1,
10257 MJIT_FUNC_FAILED = 2,
10258};
10259struct mjit_options {
10260 _Bool on;
10261 _Bool save_temps;
10262 _Bool warnings;
10263 _Bool debug;
10264 char* debug_flags;
10265 _Bool wait;
10266 unsigned int call_threshold;
10267 int verbose;
10268 int max_cache_size;
10269 _Bool pause;
10270 _Bool custom;
10271};
10272struct rb_mjit_compile_info {
10273 _Bool disable_ivar_cache;
10274 _Bool disable_exivar_cache;
10275 _Bool disable_send_cache;
10276 _Bool disable_inlining;
10277 _Bool disable_const_cache;
10278};
10279typedef VALUE (*jit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
10280
10281
10282extern struct mjit_options mjit_opts;
10283extern _Bool mjit_call_p;
10284extern void rb_mjit_add_iseq_to_process(const rb_iseq_t *iseq);
10285extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
10286extern void rb_mjit_recompile_send(const rb_iseq_t *iseq);
10287extern void rb_mjit_recompile_ivar(const rb_iseq_t *iseq);
10288extern void rb_mjit_recompile_exivar(const rb_iseq_t *iseq);
10289extern void rb_mjit_recompile_inlining(const rb_iseq_t *iseq);
10290extern void rb_mjit_recompile_const(const rb_iseq_t *iseq);
10291
10292
10293extern void mjit_cancel_all(const char *reason);
10294extern _Bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id);
10295extern void mjit_init(const struct mjit_options *opts);
10296extern void mjit_free_iseq(const rb_iseq_t *iseq);
10297extern void mjit_update_references(const rb_iseq_t *iseq);
10298extern void mjit_mark(void);
10299extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body);
10300extern void mjit_notify_waitpid(int exit_code);
10301extern void rb_mjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop);
10302extern void rb_mjit_cme_invalidate(rb_callable_method_entry_t *cme);
10303extern void rb_mjit_before_ractor_spawn(void);
10304extern void rb_mjit_constant_state_changed(ID id);
10305extern void rb_mjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic, unsigned insn_idx);
10306extern void rb_mjit_tracing_invalidate_all(rb_event_flag_t new_iseq_events);
10307void mjit_child_after_fork(void);
10308VALUE mjit_pause(_Bool wait_p);
10309VALUE mjit_resume(void);
10310void mjit_finish(_Bool close_handle_p);
10311static inline _Bool rb_yjit_enabled_p(void) { return 0; }
10312static inline unsigned rb_yjit_call_threshold(void) { return (0x7fffffff * 2U + 1); }
10313static inline void rb_yjit_invalidate_all_method_lookup_assumptions(void) {}
10314static inline void rb_yjit_cme_invalidate(rb_callable_method_entry_t *cme) {}
10315static inline void rb_yjit_collect_vm_usage_insn(int insn) {}
10316static inline void rb_yjit_collect_binding_alloc(void) {}
10317static inline void rb_yjit_collect_binding_set(void) {}
10318static inline _Bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec) { return 0; }
10319static inline void rb_yjit_init(void) {}
10320static inline void rb_yjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop) {}
10321static inline void rb_yjit_constant_state_changed(ID id) {}
10322static inline void rb_yjit_iseq_mark(void *payload) {}
10323static inline void rb_yjit_iseq_update_references(void *payload) {}
10324static inline void rb_yjit_iseq_free(void *payload) {}
10325static inline void rb_yjit_before_ractor_spawn(void) {}
10326static inline void rb_yjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic, unsigned insn_idx) {}
10327static inline void rb_yjit_tracing_invalidate_all(void) {}
10328
10329
10330typedef struct rb_vm_struct ruby_vm_t;
10331int ruby_vm_destruct(ruby_vm_t *vm);
10332void ruby_vm_at_exit(void(*func)(ruby_vm_t *));
10333
10334
10335enum rb_debug_counter_type {
10336RB_DEBUG_COUNTER_mc_inline_hit,
10337RB_DEBUG_COUNTER_mc_inline_miss_klass,
10338RB_DEBUG_COUNTER_mc_inline_miss_invalidated,
10339RB_DEBUG_COUNTER_mc_inline_miss_empty,
10340RB_DEBUG_COUNTER_mc_inline_miss_same_cc,
10341RB_DEBUG_COUNTER_mc_inline_miss_same_cme,
10342RB_DEBUG_COUNTER_mc_inline_miss_same_def,
10343RB_DEBUG_COUNTER_mc_inline_miss_diff,
10344RB_DEBUG_COUNTER_cvar_write_inline_hit,
10345RB_DEBUG_COUNTER_cvar_read_inline_hit,
10346RB_DEBUG_COUNTER_cvar_inline_miss,
10347RB_DEBUG_COUNTER_cvar_class_invalidate,
10348RB_DEBUG_COUNTER_cvar_include_invalidate,
10349RB_DEBUG_COUNTER_mc_cme_complement,
10350RB_DEBUG_COUNTER_mc_cme_complement_hit,
10351RB_DEBUG_COUNTER_mc_search,
10352RB_DEBUG_COUNTER_mc_search_notfound,
10353RB_DEBUG_COUNTER_mc_search_super,
10354RB_DEBUG_COUNTER_ci_packed,
10355RB_DEBUG_COUNTER_ci_kw,
10356RB_DEBUG_COUNTER_ci_nokw,
10357RB_DEBUG_COUNTER_ci_runtime,
10358RB_DEBUG_COUNTER_cc_new,
10359RB_DEBUG_COUNTER_cc_temp,
10360RB_DEBUG_COUNTER_cc_found_in_ccs,
10361RB_DEBUG_COUNTER_cc_not_found_in_ccs,
10362RB_DEBUG_COUNTER_cc_ent_invalidate,
10363RB_DEBUG_COUNTER_cc_cme_invalidate,
10364RB_DEBUG_COUNTER_cc_invalidate_leaf,
10365RB_DEBUG_COUNTER_cc_invalidate_leaf_ccs,
10366RB_DEBUG_COUNTER_cc_invalidate_leaf_callable,
10367RB_DEBUG_COUNTER_cc_invalidate_tree,
10368RB_DEBUG_COUNTER_cc_invalidate_tree_cme,
10369RB_DEBUG_COUNTER_cc_invalidate_tree_callable,
10370RB_DEBUG_COUNTER_cc_invalidate_negative,
10371RB_DEBUG_COUNTER_ccs_free,
10372RB_DEBUG_COUNTER_ccs_maxlen,
10373RB_DEBUG_COUNTER_ccs_found,
10374RB_DEBUG_COUNTER_ccs_not_found,
10375RB_DEBUG_COUNTER_call0_public,
10376RB_DEBUG_COUNTER_call0_other,
10377RB_DEBUG_COUNTER_gccct_hit,
10378RB_DEBUG_COUNTER_gccct_miss,
10379RB_DEBUG_COUNTER_gccct_null,
10380RB_DEBUG_COUNTER_iseq_num,
10381RB_DEBUG_COUNTER_iseq_cd_num,
10382RB_DEBUG_COUNTER_ccf_general,
10383RB_DEBUG_COUNTER_ccf_iseq_setup,
10384RB_DEBUG_COUNTER_ccf_iseq_setup_0start,
10385RB_DEBUG_COUNTER_ccf_iseq_setup_tailcall_0start,
10386RB_DEBUG_COUNTER_ccf_iseq_fix,
10387RB_DEBUG_COUNTER_ccf_iseq_opt,
10388RB_DEBUG_COUNTER_ccf_iseq_kw1,
10389RB_DEBUG_COUNTER_ccf_iseq_kw2,
10390RB_DEBUG_COUNTER_ccf_cfunc,
10391RB_DEBUG_COUNTER_ccf_cfunc_with_frame,
10392RB_DEBUG_COUNTER_ccf_ivar,
10393RB_DEBUG_COUNTER_ccf_attrset,
10394RB_DEBUG_COUNTER_ccf_method_missing,
10395RB_DEBUG_COUNTER_ccf_zsuper,
10396RB_DEBUG_COUNTER_ccf_bmethod,
10397RB_DEBUG_COUNTER_ccf_opt_send,
10398RB_DEBUG_COUNTER_ccf_opt_call,
10399RB_DEBUG_COUNTER_ccf_opt_block_call,
10400RB_DEBUG_COUNTER_ccf_opt_struct_aref,
10401RB_DEBUG_COUNTER_ccf_opt_struct_aset,
10402RB_DEBUG_COUNTER_ccf_super_method,
10403RB_DEBUG_COUNTER_frame_push,
10404RB_DEBUG_COUNTER_frame_push_method,
10405RB_DEBUG_COUNTER_frame_push_block,
10406RB_DEBUG_COUNTER_frame_push_class,
10407RB_DEBUG_COUNTER_frame_push_top,
10408RB_DEBUG_COUNTER_frame_push_cfunc,
10409RB_DEBUG_COUNTER_frame_push_ifunc,
10410RB_DEBUG_COUNTER_frame_push_eval,
10411RB_DEBUG_COUNTER_frame_push_rescue,
10412RB_DEBUG_COUNTER_frame_push_dummy,
10413RB_DEBUG_COUNTER_frame_R2R,
10414RB_DEBUG_COUNTER_frame_R2C,
10415RB_DEBUG_COUNTER_frame_C2C,
10416RB_DEBUG_COUNTER_frame_C2R,
10417RB_DEBUG_COUNTER_ivar_get_ic_hit,
10418RB_DEBUG_COUNTER_ivar_get_ic_miss,
10419RB_DEBUG_COUNTER_ivar_get_ic_miss_noobject,
10420RB_DEBUG_COUNTER_ivar_set_ic_hit,
10421RB_DEBUG_COUNTER_ivar_set_ic_miss,
10422RB_DEBUG_COUNTER_ivar_set_ic_miss_iv_hit,
10423RB_DEBUG_COUNTER_ivar_set_ic_miss_noobject,
10424RB_DEBUG_COUNTER_ivar_get_base,
10425RB_DEBUG_COUNTER_ivar_set_base,
10426RB_DEBUG_COUNTER_ivar_get_ic_miss_set,
10427RB_DEBUG_COUNTER_ivar_get_cc_miss_set,
10428RB_DEBUG_COUNTER_ivar_get_ic_miss_unset,
10429RB_DEBUG_COUNTER_ivar_get_cc_miss_unset,
10430RB_DEBUG_COUNTER_lvar_get,
10431RB_DEBUG_COUNTER_lvar_get_dynamic,
10432RB_DEBUG_COUNTER_lvar_set,
10433RB_DEBUG_COUNTER_lvar_set_dynamic,
10434RB_DEBUG_COUNTER_lvar_set_slowpath,
10435RB_DEBUG_COUNTER_gc_count,
10436RB_DEBUG_COUNTER_gc_minor_newobj,
10437RB_DEBUG_COUNTER_gc_minor_malloc,
10438RB_DEBUG_COUNTER_gc_minor_method,
10439RB_DEBUG_COUNTER_gc_minor_capi,
10440RB_DEBUG_COUNTER_gc_minor_stress,
10441RB_DEBUG_COUNTER_gc_major_nofree,
10442RB_DEBUG_COUNTER_gc_major_oldgen,
10443RB_DEBUG_COUNTER_gc_major_shady,
10444RB_DEBUG_COUNTER_gc_major_force,
10445RB_DEBUG_COUNTER_gc_major_oldmalloc,
10446RB_DEBUG_COUNTER_gc_enter_start,
10447RB_DEBUG_COUNTER_gc_enter_mark_continue,
10448RB_DEBUG_COUNTER_gc_enter_sweep_continue,
10449RB_DEBUG_COUNTER_gc_enter_rest,
10450RB_DEBUG_COUNTER_gc_enter_finalizer,
10451RB_DEBUG_COUNTER_gc_isptr_trial,
10452RB_DEBUG_COUNTER_gc_isptr_range,
10453RB_DEBUG_COUNTER_gc_isptr_align,
10454RB_DEBUG_COUNTER_gc_isptr_maybe,
10455RB_DEBUG_COUNTER_obj_newobj,
10456RB_DEBUG_COUNTER_obj_newobj_slowpath,
10457RB_DEBUG_COUNTER_obj_newobj_wb_unprotected,
10458RB_DEBUG_COUNTER_obj_free,
10459RB_DEBUG_COUNTER_obj_promote,
10460RB_DEBUG_COUNTER_obj_wb_unprotect,
10461RB_DEBUG_COUNTER_obj_obj_embed,
10462RB_DEBUG_COUNTER_obj_obj_transient,
10463RB_DEBUG_COUNTER_obj_obj_ptr,
10464RB_DEBUG_COUNTER_obj_obj_too_complex,
10465RB_DEBUG_COUNTER_obj_str_ptr,
10466RB_DEBUG_COUNTER_obj_str_embed,
10467RB_DEBUG_COUNTER_obj_str_shared,
10468RB_DEBUG_COUNTER_obj_str_nofree,
10469RB_DEBUG_COUNTER_obj_str_fstr,
10470RB_DEBUG_COUNTER_obj_ary_embed,
10471RB_DEBUG_COUNTER_obj_ary_transient,
10472RB_DEBUG_COUNTER_obj_ary_ptr,
10473RB_DEBUG_COUNTER_obj_ary_extracapa,
10474RB_DEBUG_COUNTER_obj_ary_shared_create,
10475RB_DEBUG_COUNTER_obj_ary_shared,
10476RB_DEBUG_COUNTER_obj_ary_shared_root_occupied,
10477RB_DEBUG_COUNTER_obj_hash_empty,
10478RB_DEBUG_COUNTER_obj_hash_1,
10479RB_DEBUG_COUNTER_obj_hash_2,
10480RB_DEBUG_COUNTER_obj_hash_3,
10481RB_DEBUG_COUNTER_obj_hash_4,
10482RB_DEBUG_COUNTER_obj_hash_5_8,
10483RB_DEBUG_COUNTER_obj_hash_g8,
10484RB_DEBUG_COUNTER_obj_hash_null,
10485RB_DEBUG_COUNTER_obj_hash_ar,
10486RB_DEBUG_COUNTER_obj_hash_st,
10487RB_DEBUG_COUNTER_obj_hash_transient,
10488RB_DEBUG_COUNTER_obj_hash_force_convert,
10489RB_DEBUG_COUNTER_obj_struct_embed,
10490RB_DEBUG_COUNTER_obj_struct_transient,
10491RB_DEBUG_COUNTER_obj_struct_ptr,
10492RB_DEBUG_COUNTER_obj_data_empty,
10493RB_DEBUG_COUNTER_obj_data_xfree,
10494RB_DEBUG_COUNTER_obj_data_imm_free,
10495RB_DEBUG_COUNTER_obj_data_zombie,
10496RB_DEBUG_COUNTER_obj_match_under4,
10497RB_DEBUG_COUNTER_obj_match_ge4,
10498RB_DEBUG_COUNTER_obj_match_ge8,
10499RB_DEBUG_COUNTER_obj_match_ptr,
10500RB_DEBUG_COUNTER_obj_iclass_ptr,
10501RB_DEBUG_COUNTER_obj_class_ptr,
10502RB_DEBUG_COUNTER_obj_module_ptr,
10503RB_DEBUG_COUNTER_obj_bignum_ptr,
10504RB_DEBUG_COUNTER_obj_bignum_embed,
10505RB_DEBUG_COUNTER_obj_float,
10506RB_DEBUG_COUNTER_obj_complex,
10507RB_DEBUG_COUNTER_obj_rational,
10508RB_DEBUG_COUNTER_obj_regexp_ptr,
10509RB_DEBUG_COUNTER_obj_file_ptr,
10510RB_DEBUG_COUNTER_obj_symbol,
10511RB_DEBUG_COUNTER_obj_imemo_ment,
10512RB_DEBUG_COUNTER_obj_imemo_iseq,
10513RB_DEBUG_COUNTER_obj_imemo_env,
10514RB_DEBUG_COUNTER_obj_imemo_tmpbuf,
10515RB_DEBUG_COUNTER_obj_imemo_ast,
10516RB_DEBUG_COUNTER_obj_imemo_cref,
10517RB_DEBUG_COUNTER_obj_imemo_svar,
10518RB_DEBUG_COUNTER_obj_imemo_throw_data,
10519RB_DEBUG_COUNTER_obj_imemo_ifunc,
10520RB_DEBUG_COUNTER_obj_imemo_memo,
10521RB_DEBUG_COUNTER_obj_imemo_parser_strterm,
10522RB_DEBUG_COUNTER_obj_imemo_callinfo,
10523RB_DEBUG_COUNTER_obj_imemo_callcache,
10524RB_DEBUG_COUNTER_obj_imemo_constcache,
10525RB_DEBUG_COUNTER_artable_hint_hit,
10526RB_DEBUG_COUNTER_artable_hint_miss,
10527RB_DEBUG_COUNTER_artable_hint_notfound,
10528RB_DEBUG_COUNTER_heap_xmalloc,
10529RB_DEBUG_COUNTER_heap_xrealloc,
10530RB_DEBUG_COUNTER_heap_xfree,
10531RB_DEBUG_COUNTER_theap_alloc,
10532RB_DEBUG_COUNTER_theap_alloc_fail,
10533RB_DEBUG_COUNTER_theap_evacuate,
10534RB_DEBUG_COUNTER_vm_sync_lock,
10535RB_DEBUG_COUNTER_vm_sync_lock_enter,
10536RB_DEBUG_COUNTER_vm_sync_lock_enter_nb,
10537RB_DEBUG_COUNTER_vm_sync_lock_enter_cr,
10538RB_DEBUG_COUNTER_vm_sync_barrier,
10539 RB_DEBUG_COUNTER_MAX
10540};
10541void rb_debug_counter_show_results(const char *msg);
10542
10543
10544size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
10545void ruby_debug_counter_reset(void);
10546void ruby_debug_counter_show_at_exit(int enable);
10547
10548
10549struct rb_subclass_entry {
10550 VALUE klass;
10551 struct rb_subclass_entry *next;
10552 struct rb_subclass_entry *prev;
10553};
10554struct rb_cvar_class_tbl_entry {
10555 uint32_t index;
10556 rb_serial_t global_cvar_state;
10557 VALUE class_value;
10558};
10559struct rb_classext_struct {
10560 VALUE *iv_ptr;
10561 struct rb_id_table *const_tbl;
10562 struct rb_id_table *callable_m_tbl;
10563 struct rb_id_table *cc_tbl;
10564 struct rb_id_table *cvc_tbl;
10565 size_t superclass_depth;
10566 VALUE *superclasses;
10567 struct rb_subclass_entry *subclasses;
10568 struct rb_subclass_entry *subclass_entry;
10569 struct rb_subclass_entry *module_subclass_entry;
10570 const VALUE origin_;
10571 const VALUE refined_class;
10572 rb_alloc_func_t allocator;
10573 const VALUE includer;
10574 uint32_t max_iv_count;
10575 uint32_t variation_count;
10576};
10577struct RClass {
10578 struct RBasic basic;
10579 VALUE super;
10580 struct rb_id_table *m_tbl;
10581};
10582typedef struct rb_subclass_entry rb_subclass_entry_t;
10583typedef struct rb_classext_struct rb_classext_t;
10584void rb_class_subclass_add(VALUE super, VALUE klass);
10585void rb_class_remove_from_super_subclasses(VALUE);
10586void rb_class_update_superclasses(VALUE);
10587size_t rb_class_superclasses_memsize(VALUE);
10588void rb_class_remove_subclass_head(VALUE);
10589int rb_singleton_class_internal_p(VALUE sklass);
10590VALUE rb_class_boot(VALUE);
10591VALUE rb_class_s_alloc(VALUE klass);
10592VALUE rb_module_s_alloc(VALUE klass);
10593void rb_module_set_initialized(VALUE module);
10594void rb_module_check_initializable(VALUE module);
10595VALUE rb_make_metaclass(VALUE, VALUE);
10596VALUE rb_include_class_new(VALUE, VALUE);
10597void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
10598void rb_class_detach_subclasses(VALUE);
10599void rb_class_detach_module_subclasses(VALUE);
10600void rb_class_remove_from_module_subclasses(VALUE);
10601VALUE rb_obj_methods(int argc, const VALUE *argv, VALUE obj);
10602VALUE rb_obj_protected_methods(int argc, const VALUE *argv, VALUE obj);
10603VALUE rb_obj_private_methods(int argc, const VALUE *argv, VALUE obj);
10604VALUE rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj);
10605VALUE rb_class_undefined_instance_methods(VALUE mod);
10606VALUE rb_special_singleton_class(VALUE);
10607VALUE rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach);
10608VALUE rb_singleton_class_get(VALUE obj);
10609void rb_undef_methods_from(VALUE klass, VALUE super);
10610static inline void RCLASS_SET_ORIGIN(VALUE klass, VALUE origin);
10611static inline void RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass);
10612static inline VALUE RCLASS_SUPER(VALUE klass);
10613static inline VALUE RCLASS_SET_SUPER(VALUE klass, VALUE super);
10614static inline void RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass);
10615
10616
10617VALUE rb_class_inherited(VALUE, VALUE);
10618VALUE rb_keyword_error_new(const char *, VALUE);
10619
10620
10621static inline void
10622RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
10623{
10624 rb_obj_write((VALUE)(klass), __extension__({
10625 ;
10626 ; __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_)));
10627 ; unaligned_member_access_result; }), (VALUE)(origin), "../ruby-3.2.1/internal/class.h", 142);
10628 if (klass != origin) RB_FL_SET(origin, ((VALUE)RUBY_FL_USER0));
10629}
10630static inline void
10631RICLASS_SET_ORIGIN_SHARED_MTBL(VALUE iclass)
10632{
10633 RB_FL_SET(iclass, ((VALUE)RUBY_FL_USER3));
10634}
10635static inline _Bool
10636RICLASS_OWNS_M_TBL_P(VALUE iclass)
10637{
10638 return RB_FL_TEST_RAW(iclass, ((VALUE)RUBY_FL_USER0) | ((VALUE)RUBY_FL_USER3)) == ((VALUE)RUBY_FL_USER0);
10639}
10640static inline void
10641RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass)
10642{
10643 rb_obj_write((VALUE)(iclass), __extension__({
10644 ;
10645 ; __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)));
10646 ; unaligned_member_access_result; }), (VALUE)(klass), "../ruby-3.2.1/internal/class.h", 161);
10647}
10648static inline VALUE
10649RCLASS_SUPER(VALUE klass)
10650{
10651 return ((struct RClass *)(klass))->super;
10652}
10653static inline VALUE
10654RCLASS_SET_SUPER(VALUE klass, VALUE super)
10655{
10656 if (super) {
10657 rb_class_remove_from_super_subclasses(klass);
10658 rb_class_subclass_add(super, klass);
10659 }
10660 rb_obj_write((VALUE)(klass), __extension__({
10661 ;
10662 ; __typeof__((VALUE *)(&((struct RClass *)(klass))->super)) unaligned_member_access_result = ((VALUE *)(&((struct RClass *)(klass))->super));
10663 ; unaligned_member_access_result; }), (VALUE)(super), "../ruby-3.2.1/internal/class.h", 177);
10664 rb_class_update_superclasses(klass);
10665 return super;
10666}
10667enum vm_call_flag_bits {
10668 VM_CALL_ARGS_SPLAT_bit,
10669 VM_CALL_ARGS_BLOCKARG_bit,
10670 VM_CALL_FCALL_bit,
10671 VM_CALL_VCALL_bit,
10672 VM_CALL_ARGS_SIMPLE_bit,
10673 VM_CALL_BLOCKISEQ_bit,
10674 VM_CALL_KWARG_bit,
10675 VM_CALL_KW_SPLAT_bit,
10676 VM_CALL_TAILCALL_bit,
10677 VM_CALL_SUPER_bit,
10678 VM_CALL_ZSUPER_bit,
10679 VM_CALL_OPT_SEND_bit,
10680 VM_CALL_KW_SPLAT_MUT_bit,
10681 VM_CALL__END
10682};
10683struct rb_callinfo_kwarg {
10684 int keyword_len;
10685 VALUE keywords[];
10686};
10687static inline size_t
10688rb_callinfo_kwarg_bytes(int keyword_len)
10689{
10690 return rb_size_mul_add_or_raise(
10691 keyword_len,
10692 sizeof(VALUE),
10693 sizeof(struct rb_callinfo_kwarg),
10694 rb_eRuntimeError);
10695}
10696struct rb_callinfo {
10697 VALUE flags;
10698 const struct rb_callinfo_kwarg *kwarg;
10699 VALUE mid;
10700 VALUE flag;
10701 VALUE argc;
10702};
10703static inline _Bool
10704vm_ci_packed_p(const struct rb_callinfo *ci)
10705{
10706 if ((__builtin_expect(!!(((VALUE)ci) & 0x01), 1))) {
10707 return 1;
10708 }
10709 else {
10710 ((void)0);
10711 return 0;
10712 }
10713}
10714static inline _Bool
10715vm_ci_p(const struct rb_callinfo *ci)
10716{
10717 if (vm_ci_packed_p(ci) || imemo_type_p((VALUE)ci, imemo_callinfo)) {
10718 return 1;
10719 }
10720 else {
10721 return 0;
10722 }
10723}
10724static inline ID
10725vm_ci_mid(const struct rb_callinfo *ci)
10726{
10727 if (vm_ci_packed_p(ci)) {
10728 return (((VALUE)ci) >> (1 + 15 + 16)) & ((((VALUE)1)<<32) - 1);
10729 }
10730 else {
10731 return (ID)ci->mid;
10732 }
10733}
10734static inline unsigned int
10735vm_ci_flag(const struct rb_callinfo *ci)
10736{
10737 if (vm_ci_packed_p(ci)) {
10738 return (unsigned int)((((VALUE)ci) >> (1 + 15)) & ((((VALUE)1)<<16) - 1));
10739 }
10740 else {
10741 return (unsigned int)ci->flag;
10742 }
10743}
10744static inline unsigned int
10745vm_ci_argc(const struct rb_callinfo *ci)
10746{
10747 if (vm_ci_packed_p(ci)) {
10748 return (unsigned int)((((VALUE)ci) >> (1)) & ((((VALUE)1)<<15) - 1));
10749 }
10750 else {
10751 return (unsigned int)ci->argc;
10752 }
10753}
10754static inline const struct rb_callinfo_kwarg *
10755vm_ci_kwarg(const struct rb_callinfo *ci)
10756{
10757 if (vm_ci_packed_p(ci)) {
10758 return ((void *)0);
10759 }
10760 else {
10761 return ci->kwarg;
10762 }
10763}
10764static inline void
10765vm_ci_dump(const struct rb_callinfo *ci)
10766{
10767 if (vm_ci_packed_p(ci)) {
10768 ruby_debug_printf("packed_ci ID:%s flag:%x argc:%u\n",
10769 rb_id2name(vm_ci_mid(ci)), vm_ci_flag(ci), vm_ci_argc(ci));
10770 }
10771 else {
10772 rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.2.1/vm_callinfo.h", 177, __func__);
10773 }
10774}
10775static inline const struct rb_callinfo *
10776vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10777{
10778 if ((((mid ) & ~((((VALUE)1)<<32) - 1)) ? 0 : ((flag) & ~((((VALUE)1)<<16) - 1)) ? 0 : ((argc) & ~((((VALUE)1)<<15) - 1)) ? 0 : (kwarg) ? 0 : 1)) {
10779 ((void)0);
10780 return ((const struct rb_callinfo *) ((((VALUE)(mid )) << (1 + 15 + 16)) | (((VALUE)(flag)) << (1 + 15)) | (((VALUE)(argc)) << (1)) | RUBY_FIXNUM_FLAG));
10781 }
10782 const _Bool debug = 0;
10783 if (debug) ruby_debug_printf("%s:%d ", file, line);
10784 const struct rb_callinfo *ci = (const struct rb_callinfo *)
10785 rb_imemo_new(imemo_callinfo,
10786 (VALUE)mid,
10787 (VALUE)flag,
10788 (VALUE)argc,
10789 (VALUE)kwarg);
10790 if (debug) rb_obj_info_dump_loc((VALUE)(ci), "../ruby-3.2.1/vm_callinfo.h", 218, __func__);
10791 if (kwarg) {
10792 ((void)0);
10793 }
10794 else {
10795 ((void)0);
10796 }
10797 ((void)0);
10798 ((void)0);
10799 return ci;
10800}
10801static inline const struct rb_callinfo *
10802vm_ci_new_runtime_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
10803{
10804 ((void)0);
10805 return vm_ci_new_(mid, flag, argc, kwarg, file, line);
10806}
10807static inline _Bool
10808vm_ci_markable(const struct rb_callinfo *ci)
10809{
10810 if (! ci) {
10811 return 0;
10812 }
10813 else if (vm_ci_packed_p(ci)) {
10814 return 1;
10815 }
10816 else {
10817 ((void)0);
10818 return ! RB_FL_ANY_RAW((VALUE)ci, ((VALUE)RUBY_FL_USER4));
10819 }
10820}
10821typedef VALUE (*vm_call_handler)(
10822 struct rb_execution_context_struct *ec,
10823 struct rb_control_frame_struct *cfp,
10824 struct rb_calling_info *calling);
10825struct rb_callcache {
10826 const VALUE flags;
10827 const VALUE klass;
10828 const struct rb_callable_method_entry_struct * const cme_;
10829 const vm_call_handler call_;
10830 union {
10831 struct {
10832 uintptr_t value;
10833 } attr;
10834 const enum method_missing_reason method_missing_reason;
10835 VALUE v;
10836 } aux_;
10837};
10838extern const struct rb_callcache *rb_vm_empty_cc(void);
10839extern const struct rb_callcache *rb_vm_empty_cc_for_super(void);
10840static inline void vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id_t dest_shape_id);
10841static inline void
10842vm_cc_attr_index_initialize(const struct rb_callcache *cc, shape_id_t shape_id)
10843{
10844 vm_cc_attr_index_set(cc, (attr_index_t)-1, shape_id);
10845}
10846static inline const struct rb_callcache *
10847vm_cc_new(VALUE klass,
10848 const struct rb_callable_method_entry_struct *cme,
10849 vm_call_handler call)
10850{
10851 const struct rb_callcache *cc = (const struct rb_callcache *)rb_imemo_new(imemo_callcache, (VALUE)cme, (VALUE)call, 0, klass);
10852 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
10853 ((void)0);
10854 return cc;
10855}
10856static inline _Bool
10857vm_cc_class_check(const struct rb_callcache *cc, VALUE klass)
10858{
10859 ((void)0);
10860 ((void)0);
10861 return cc->klass == klass;
10862}
10863static inline int
10864vm_cc_markable(const struct rb_callcache *cc)
10865{
10866 ((void)0);
10867 return RB_FL_TEST_RAW((VALUE)cc, ((VALUE)RUBY_FL_FREEZE)) == 0;
10868}
10869static inline const struct rb_callable_method_entry_struct *
10870vm_cc_cme(const struct rb_callcache *cc)
10871{
10872 ((void)0);
10873 ((void)0);
10874 return cc->cme_;
10875}
10876static inline vm_call_handler
10877vm_cc_call(const struct rb_callcache *cc)
10878{
10879 ((void)0);
10880 ((void)0);
10881 return cc->call_;
10882}
10883static inline attr_index_t
10884vm_cc_attr_index(const struct rb_callcache *cc)
10885{
10886 ((void)0);
10887 return (attr_index_t)((cc->aux_.attr.value & (((VALUE)-1) >> 32)) - 1);
10888}
10889static inline shape_id_t
10890vm_cc_attr_index_dest_shape_id(const struct rb_callcache *cc)
10891{
10892 ((void)0);
10893 return cc->aux_.attr.value >> ((8 * 8) - 32);
10894}
10895static inline void
10896vm_cc_atomic_shape_and_index(const struct rb_callcache *cc, shape_id_t * shape_id, attr_index_t * index)
10897{
10898 uintptr_t cache_value = cc->aux_.attr.value;
10899 *shape_id = (shape_id_t)(cache_value >> ((8 * 8) - 32));
10900 *index = (attr_index_t)(cache_value & (((VALUE)-1) >> 32)) - 1;
10901 return;
10902}
10903static inline void
10904vm_ic_atomic_shape_and_index(const struct iseq_inline_iv_cache_entry *ic, shape_id_t * shape_id, attr_index_t * index)
10905{
10906 uintptr_t cache_value = ic->value;
10907 *shape_id = (shape_id_t)(cache_value >> ((8 * 8) - 32));
10908 *index = (attr_index_t)(cache_value & (((VALUE)-1) >> 32)) - 1;
10909 return;
10910}
10911static inline shape_id_t
10912vm_ic_attr_index_dest_shape_id(const struct iseq_inline_iv_cache_entry *ic)
10913{
10914 return (shape_id_t)(ic->value >> ((8 * 8) - 32));
10915}
10916static inline unsigned int
10917vm_cc_cmethod_missing_reason(const struct rb_callcache *cc)
10918{
10919 ((void)0);
10920 return cc->aux_.method_missing_reason;
10921}
10922static inline _Bool
10923vm_cc_invalidated_p(const struct rb_callcache *cc)
10924{
10925 if (cc->klass && !((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))) {
10926 return 0;
10927 }
10928 else {
10929 return 1;
10930 }
10931}
10932static inline _Bool
10933vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *cc_cme, VALUE klass)
10934{
10935 ((void)0);
10936 if (cc->klass == klass && !((cc_cme)->flags & ((VALUE)RUBY_FL_USER9))) {
10937 return 1;
10938 }
10939 else {
10940 return 0;
10941 }
10942}
10943static inline void
10944vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call)
10945{
10946 ((void)0);
10947 ((void)0);
10948 *(vm_call_handler *)&cc->call_ = call;
10949}
10950static inline void
10951vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id_t dest_shape_id)
10952{
10953 uintptr_t *attr_value = (uintptr_t *)&cc->aux_.attr.value;
10954 if (!vm_cc_markable(cc)) {
10955 *attr_value = (uintptr_t)(((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32);
10956 return;
10957 }
10958 ((void)0);
10959 ((void)0);
10960 *attr_value = (attr_index_t)(index + 1) | ((uintptr_t)(dest_shape_id) << ((8 * 8) - 32));
10961}
10962static inline void
10963vm_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)
10964{
10965 *(uintptr_t *)&ic->value = ((uintptr_t)dest_shape_id << ((8 * 8) - 32)) | (attr_index_t)(index + 1);
10966}
10967static inline void
10968vm_ic_attr_index_initialize(const struct iseq_inline_iv_cache_entry *ic, shape_id_t shape_id)
10969{
10970 *(uintptr_t *)&ic->value = (uintptr_t)shape_id << ((8 * 8) - 32);
10971}
10972static inline void
10973vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missing_reason reason)
10974{
10975 ((void)0);
10976 ((void)0);
10977 *(enum method_missing_reason *)&cc->aux_.method_missing_reason = reason;
10978}
10979static inline void
10980vm_cc_invalidate(const struct rb_callcache *cc)
10981{
10982 ((void)0);
10983 ((void)0);
10984 ((void)0);
10985 *(VALUE *)&cc->klass = 0;
10986 ((void)0);
10987}
10988struct rb_call_data {
10989 const struct rb_callinfo *ci;
10990 const struct rb_callcache *cc;
10991};
10992struct rb_class_cc_entries {
10993 int capa;
10994 int len;
10995 const struct rb_callable_method_entry_struct *cme;
10996 struct rb_class_cc_entries_entry {
10997 const struct rb_callinfo *ci;
10998 const struct rb_callcache *cc;
10999 } *entries;
11000};
11001void rb_vm_ccs_free(struct rb_class_cc_entries *ccs);
11002
11003
11004struct RNode;
11005VALUE ruby_debug_print_value(int level, int debug_level, const char *header, VALUE v);
11006ID ruby_debug_print_id(int level, int debug_level, const char *header, ID id);
11007struct RNode *ruby_debug_print_node(int level, int debug_level, const char *header, const struct RNode *node);
11008int ruby_debug_print_indent(int level, int debug_level, int indent_level);
11009void ruby_debug_gc_check_func(void);
11010void ruby_set_debug_option(const char *str);
11011
11012
11013extern enum ruby_debug_log_mode {
11014 ruby_debug_log_disabled = 0x00,
11015 ruby_debug_log_memory = 0x01,
11016 ruby_debug_log_stderr = 0x02,
11017 ruby_debug_log_file = 0x04,
11018} ruby_debug_log_mode;
11019__attribute__((__format__(__printf__, 4, 5)))
11020void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
11021void ruby_debug_log_print(unsigned int n);
11022_Bool ruby_debug_log_filter(const char *func_name, const char *file_name);
11023typedef long OFFSET;
11024typedef unsigned long lindex_t;
11025typedef VALUE GENTRY;
11026typedef rb_iseq_t *ISEQ;
11027
11028
11029extern VALUE ruby_vm_const_missing_count;
11030extern rb_serial_t ruby_vm_constant_cache_invalidations;
11031extern rb_serial_t ruby_vm_constant_cache_misses;
11032extern rb_serial_t ruby_vm_global_cvar_state;
11033
11034
11035static inline void
11036CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, _Bool enabled)
11037{
11038 if ((__builtin_expect(!!(enabled), 1))) {
11039 vm_cc_call_set(cc, func);
11040 }
11041}
11042static inline struct vm_throw_data *
11043THROW_DATA_NEW(VALUE val, const rb_control_frame_t *cf, int st)
11044{
11045 struct vm_throw_data *obj = (struct vm_throw_data *)rb_imemo_new(imemo_throw_data, val, (VALUE)cf, 0, 0);
11046 obj->throw_state = st;
11047 return obj;
11048}
11049static inline VALUE
11050THROW_DATA_VAL(const struct vm_throw_data *obj)
11051{
11052 ((void)0);
11053 return obj->throw_obj;
11054}
11055static inline const rb_control_frame_t *
11056THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj)
11057{
11058 ((void)0);
11059 return obj->catch_frame;
11060}
11061static inline int
11062THROW_DATA_STATE(const struct vm_throw_data *obj)
11063{
11064 ((void)0);
11065 return obj->throw_state;
11066}
11067static inline int
11068THROW_DATA_CONSUMED_P(const struct vm_throw_data *obj)
11069{
11070 ((void)0);
11071 return obj->flags & ((VALUE)RUBY_FL_USER4);
11072}
11073static inline void
11074THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
11075{
11076 ((void)0);
11077 obj->catch_frame = cfp;
11078}
11079static inline void
11080THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
11081{
11082 ((void)0);
11083 obj->throw_state = st;
11084}
11085static inline void
11086THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
11087{
11088 if (imemo_throw_data_p((VALUE)obj) &&
11089 THROW_DATA_STATE(obj) == RUBY_TAG_BREAK) {
11090 obj->flags |= ((VALUE)RUBY_FL_USER4);
11091 }
11092}
11093static inline _Bool
11094vm_call_cacheable(const struct rb_callinfo *ci, const struct rb_callcache *cc)
11095{
11096 return (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) ||
11097 (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;
11098}
11099static inline _Bool
11100vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
11101{
11102 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);
11103}
11104struct rb_ractor_local_storage_type {
11105 void (*mark)(void *ptr);
11106 void (*free)(void *ptr);
11107};
11108typedef struct rb_ractor_local_key_struct *rb_ractor_local_key_t;
11109
11110
11111extern VALUE rb_cRactor;
11112VALUE rb_ractor_stdin(void);
11113VALUE rb_ractor_stdout(void);
11114VALUE rb_ractor_stderr(void);
11115void rb_ractor_stdin_set(VALUE io);
11116void rb_ractor_stdout_set(VALUE io);
11117void rb_ractor_stderr_set(VALUE io);
11118rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);
11119VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);
11120_Bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);
11121void rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);
11122extern const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;
11123rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_local_storage_type *type);
11124void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);
11125void rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);
11126VALUE rb_ractor_make_shareable(VALUE obj);
11127VALUE rb_ractor_make_shareable_copy(VALUE obj);
11128
11129
11130static inline _Bool
11131rb_ractor_shareable_p(VALUE obj)
11132{
11133 _Bool rb_ractor_shareable_p_continue(VALUE obj);
11134 if (RB_SPECIAL_CONST_P(obj)) {
11135 return 1;
11136 }
11137 else if (RB_FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)) {
11138 return 1;
11139 }
11140 else {
11141 return rb_ractor_shareable_p_continue(obj);
11142 }
11143}
11144enum rb_ractor_basket_type {
11145 basket_type_none,
11146 basket_type_ref,
11147 basket_type_copy,
11148 basket_type_move,
11149 basket_type_will,
11150 basket_type_deleted,
11151 basket_type_reserved,
11152};
11153struct rb_ractor_basket {
11154 _Bool exception;
11155 enum rb_ractor_basket_type type;
11156 VALUE v;
11157 VALUE sender;
11158};
11159struct rb_ractor_queue {
11160 struct rb_ractor_basket *baskets;
11161 int start;
11162 int cnt;
11163 int size;
11164 unsigned int serial;
11165 unsigned int reserved_cnt;
11166};
11167struct rb_ractor_waiting_list {
11168 int cnt;
11169 int size;
11170 rb_ractor_t **ractors;
11171};
11172enum rb_ractor_wait_status {
11173 wait_none = 0x00,
11174 wait_receiving = 0x01,
11175 wait_taking = 0x02,
11176 wait_yielding = 0x04,
11177 wait_moving = 0x08,
11178};
11179enum rb_ractor_wakeup_status {
11180 wakeup_none,
11181 wakeup_by_send,
11182 wakeup_by_yield,
11183 wakeup_by_take,
11184 wakeup_by_close,
11185 wakeup_by_interrupt,
11186 wakeup_by_retry,
11187};
11188struct rb_ractor_sync {
11189 rb_nativethread_lock_t lock;
11190 rb_nativethread_cond_t cond;
11191 struct rb_ractor_queue incoming_queue;
11192 struct rb_ractor_waiting_list taking_ractors;
11193 _Bool incoming_port_closed;
11194 _Bool outgoing_port_closed;
11195 struct ractor_wait {
11196 enum rb_ractor_wait_status status;
11197 enum rb_ractor_wakeup_status wakeup_status;
11198 struct rb_ractor_basket yielded_basket;
11199 struct rb_ractor_basket taken_basket;
11200 } wait;
11201};
11202enum ractor_status {
11203 ractor_created,
11204 ractor_running,
11205 ractor_blocking,
11206 ractor_terminated,
11207};
11208struct rb_ractor_struct {
11209 struct rb_ractor_pub pub;
11210 struct rb_ractor_sync sync;
11211 VALUE receiving_mutex;
11212 _Bool yield_atexit;
11213 rb_nativethread_cond_t barrier_wait_cond;
11214 struct {
11215 struct ccan_list_head set;
11216 unsigned int cnt;
11217 unsigned int blocking_cnt;
11218 unsigned int sleeper;
11219 struct rb_thread_sched sched;
11220 rb_execution_context_t *running_ec;
11221 rb_thread_t *main;
11222 } threads;
11223 VALUE thgroup_default;
11224 VALUE name;
11225 VALUE loc;
11226 enum ractor_status status_;
11227 struct ccan_list_node vmlr_node;
11228 st_table *local_storage;
11229 struct rb_id_table *idkey_local_storage;
11230 VALUE r_stdin;
11231 VALUE r_stdout;
11232 VALUE r_stderr;
11233 VALUE verbose;
11234 VALUE debug;
11235 rb_ractor_newobj_cache_t newobj_cache;
11236 struct gc_mark_func_data_struct {
11237 void *data;
11238 void (*mark_func)(VALUE v, void *data);
11239 } *mfd;
11240};
11241static inline VALUE
11242rb_ractor_self(const rb_ractor_t *r)
11243{
11244 return r->pub.self;
11245}
11246rb_ractor_t *rb_ractor_main_alloc(void);
11247void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread);
11248void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result);
11249void rb_ractor_atexit_exception(rb_execution_context_t *ec);
11250void rb_ractor_teardown(rb_execution_context_t *ec);
11251void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
11252void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args);
11253VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc);
11254int rb_ractor_living_thread_num(const rb_ractor_t *);
11255VALUE rb_ractor_thread_list(rb_ractor_t *r);
11256_Bool rb_ractor_p(VALUE rv);
11257void rb_ractor_living_threads_init(rb_ractor_t *r);
11258void rb_ractor_living_threads_insert(rb_ractor_t *r, rb_thread_t *th);
11259void rb_ractor_living_threads_remove(rb_ractor_t *r, rb_thread_t *th);
11260void rb_ractor_blocking_threads_inc(rb_ractor_t *r, const char *file, int line);
11261void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line);
11262void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r);
11263void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r);
11264void rb_ractor_terminate_all(void);
11265_Bool rb_ractor_main_p_(void);
11266void rb_ractor_finish_marking(void);
11267void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th);
11268VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name);
11269
11270
11271_Bool rb_ractor_shareable_p_continue(VALUE obj);
11272void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key);
11273
11274
11275static inline _Bool
11276rb_ractor_main_p(void)
11277{
11278 if (ruby_single_main_ractor) {
11279 return 1;
11280 }
11281 else {
11282 return rb_ractor_main_p_();
11283 }
11284}
11285static inline _Bool
11286rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status)
11287{
11288 return r->status_ == status;
11289}
11290static inline void
11291rb_ractor_sleeper_threads_inc(rb_ractor_t *r)
11292{
11293 r->threads.sleeper++;
11294}
11295static inline void
11296rb_ractor_sleeper_threads_dec(rb_ractor_t *r)
11297{
11298 r->threads.sleeper--;
11299}
11300static inline void
11301rb_ractor_sleeper_threads_clear(rb_ractor_t *r)
11302{
11303 r->threads.sleeper = 0;
11304}
11305static inline int
11306rb_ractor_sleeper_thread_num(rb_ractor_t *r)
11307{
11308 return r->threads.sleeper;
11309}
11310static inline void
11311rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
11312{
11313 if (cr->threads.running_ec != th->ec) {
11314 if (0) {
11315 ruby_debug_printf("rb_ractor_thread_switch ec:%p->%p\n",
11316 (void *)cr->threads.running_ec, (void *)th->ec);
11317 }
11318 }
11319 else {
11320 return;
11321 }
11322 if (cr->threads.running_ec != th->ec) {
11323 th->running_time_us = 0;
11324 }
11325 cr->threads.running_ec = th->ec;
11326 ((void)0);
11327}
11328static inline void
11329rb_ractor_set_current_ec_(rb_ractor_t *cr, rb_execution_context_t *ec, const char *file, int line)
11330{
11331 ruby_current_ec = ec;
11332 ;
11333 ((void)0);
11334 cr->threads.running_ec = ec;
11335}
11336void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11337void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
11338static inline uint32_t
11339rb_ractor_id(const rb_ractor_t *r)
11340{
11341 return r->pub.id;
11342}
11343_Bool rb_vm_locked_p(void);
11344void rb_vm_lock_body(void);
11345void rb_vm_unlock_body(void);
11346struct rb_ractor_struct;
11347void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev );
11348void rb_vm_lock_enter_body_nb(unsigned int *lev );
11349void rb_vm_lock_enter_body(unsigned int *lev );
11350void rb_vm_lock_leave_body(unsigned int *lev );
11351void rb_vm_barrier(void);
11352extern struct rb_ractor_struct *ruby_single_main_ractor;
11353static inline _Bool
11354rb_multi_ractor_p(void)
11355{
11356 if ((__builtin_expect(!!(ruby_single_main_ractor), 1))) {
11357 ((void)0);
11358 return 0;
11359 }
11360 else {
11361 return 1;
11362 }
11363}
11364static inline void
11365rb_vm_lock(const char *file, int line)
11366{
11367 ((void)0);
11368 if (rb_multi_ractor_p()) {
11369 rb_vm_lock_body();
11370 }
11371}
11372static inline void
11373rb_vm_unlock(const char *file, int line)
11374{
11375 if (rb_multi_ractor_p()) {
11376 rb_vm_unlock_body();
11377 }
11378}
11379static inline void
11380rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
11381{
11382 ((void)0);
11383 if (rb_multi_ractor_p()) {
11384 rb_vm_lock_enter_body(lev );
11385 }
11386}
11387static inline void
11388rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
11389{
11390 ((void)0);
11391 if (rb_multi_ractor_p()) {
11392 rb_vm_lock_enter_body_nb(lev );
11393 }
11394}
11395static inline void
11396rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
11397{
11398 if (rb_multi_ractor_p()) {
11399 rb_vm_lock_leave_body(lev );
11400 }
11401}
11402static inline void
11403rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11404{
11405 ((void)0);
11406 rb_vm_lock_enter_body_cr(cr, levp );
11407}
11408static inline void
11409rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
11410{
11411 rb_vm_lock_leave_body(levp );
11412}
11413struct rb_builtin_function {
11414 const void * const func_ptr;
11415 const int argc;
11416 const int index;
11417 const char * const name;
11418 void (*compiler)(VALUE, long, unsigned, _Bool);
11419};
11420void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
11421typedef VALUE (*rb_builtin_arity0_function_type)(rb_execution_context_t *ec, VALUE self);
11422typedef VALUE (*rb_builtin_arity1_function_type)(rb_execution_context_t *ec, VALUE self,
11423 VALUE);
11424typedef VALUE (*rb_builtin_arity2_function_type)(rb_execution_context_t *ec, VALUE self,
11425 VALUE, VALUE);
11426typedef VALUE (*rb_builtin_arity3_function_type)(rb_execution_context_t *ec, VALUE self,
11427 VALUE, VALUE, VALUE);
11428typedef VALUE (*rb_builtin_arity4_function_type)(rb_execution_context_t *ec, VALUE self,
11429 VALUE, VALUE, VALUE, VALUE);
11430typedef VALUE (*rb_builtin_arity5_function_type)(rb_execution_context_t *ec, VALUE self,
11431 VALUE, VALUE, VALUE, VALUE, VALUE);
11432typedef VALUE (*rb_builtin_arity6_function_type)(rb_execution_context_t *ec, VALUE self,
11433 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11434typedef VALUE (*rb_builtin_arity7_function_type)(rb_execution_context_t *ec, VALUE self,
11435 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11436typedef VALUE (*rb_builtin_arity8_function_type)(rb_execution_context_t *ec, VALUE self,
11437 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11438typedef VALUE (*rb_builtin_arity9_function_type)(rb_execution_context_t *ec, VALUE self,
11439 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11440typedef VALUE (*rb_builtin_arity10_function_type)(rb_execution_context_t *ec, VALUE self,
11441 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11442typedef VALUE (*rb_builtin_arity11_function_type)(rb_execution_context_t *ec, VALUE self,
11443 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11444typedef VALUE (*rb_builtin_arity12_function_type)(rb_execution_context_t *ec, VALUE self,
11445 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11446typedef VALUE (*rb_builtin_arity13_function_type)(rb_execution_context_t *ec, VALUE self,
11447 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11448typedef VALUE (*rb_builtin_arity14_function_type)(rb_execution_context_t *ec, VALUE self,
11449 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11450typedef VALUE (*rb_builtin_arity15_function_type)(rb_execution_context_t *ec, VALUE self,
11451 VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
11452static inline void rb_builtin_function_check_arity0(rb_builtin_arity0_function_type f){}
11453static inline void rb_builtin_function_check_arity1(rb_builtin_arity1_function_type f){}
11454static inline void rb_builtin_function_check_arity2(rb_builtin_arity2_function_type f){}
11455static inline void rb_builtin_function_check_arity3(rb_builtin_arity3_function_type f){}
11456static inline void rb_builtin_function_check_arity4(rb_builtin_arity4_function_type f){}
11457static inline void rb_builtin_function_check_arity5(rb_builtin_arity5_function_type f){}
11458static inline void rb_builtin_function_check_arity6(rb_builtin_arity6_function_type f){}
11459static inline void rb_builtin_function_check_arity7(rb_builtin_arity7_function_type f){}
11460static inline void rb_builtin_function_check_arity8(rb_builtin_arity8_function_type f){}
11461static inline void rb_builtin_function_check_arity9(rb_builtin_arity9_function_type f){}
11462static inline void rb_builtin_function_check_arity10(rb_builtin_arity10_function_type f){}
11463static inline void rb_builtin_function_check_arity11(rb_builtin_arity11_function_type f){}
11464static inline void rb_builtin_function_check_arity12(rb_builtin_arity12_function_type f){}
11465static inline void rb_builtin_function_check_arity13(rb_builtin_arity13_function_type f){}
11466static inline void rb_builtin_function_check_arity14(rb_builtin_arity14_function_type f){}
11467static inline void rb_builtin_function_check_arity15(rb_builtin_arity15_function_type f){}static inline
11468__attribute__((__pure__)) VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);static inline
11469VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
11470__attribute__((__pure__)) static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index);
11471static inline VALUE
11472rb_vm_lvar(rb_execution_context_t *ec, int index)
11473{
11474 return ec->cfp->ep[index];
11475}
11476struct builtin_binary {
11477 const char *feature;
11478 const unsigned char *bin;
11479 size_t bin_size;
11480};
11481struct ruby_dtrace_method_hook_args {
11482 const char *classname;
11483 const char *methodname;
11484 const char *filename;
11485 int line_no;
11486 volatile VALUE klass;
11487 volatile VALUE name;
11488};
11489
11490
11491__attribute__((__noinline__)) int rb_dtrace_setup(rb_execution_context_t *, VALUE, ID, struct ruby_dtrace_method_hook_args *);
11492
11493
11494VALUE rb_str_concat_literals(size_t, const VALUE*);
11495__attribute__ ((__visibility__("default"))) extern
11496VALUE rb_vm_exec(rb_execution_context_t *, _Bool);
11497extern const char *const rb_debug_counter_names[];
11498__attribute__((__pure__)) static inline const VALUE *VM_EP_LEP(const VALUE *);
11499static inline const VALUE *
11500VM_EP_LEP(const VALUE *ep)
11501{
11502 while (!VM_ENV_LOCAL_P(ep)) {
11503 ep = VM_ENV_PREV_EP(ep);
11504 }
11505 return ep;
11506}
11507static inline const rb_control_frame_t *
11508rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE * const ep)
11509{
11510 if (!ep) {
11511 return ((void *)0);
11512 }
11513 else {
11514 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
11515 while (cfp < eocfp) {
11516 if (cfp->ep == ep) {
11517 return cfp;
11518 }
11519 cfp = ((cfp)+1);
11520 }
11521 return ((void *)0);
11522 }
11523}static inline
11524const VALUE *
11525rb_vm_ep_local_ep(const VALUE *ep)
11526{
11527 return VM_EP_LEP(ep);
11528}
11529__attribute__((__pure__)) static inline const VALUE *VM_CF_LEP(const rb_control_frame_t * const cfp);
11530static inline const VALUE *
11531VM_CF_LEP(const rb_control_frame_t * const cfp)
11532{
11533 return VM_EP_LEP(cfp->ep);
11534}
11535static inline const VALUE *
11536VM_CF_PREV_EP(const rb_control_frame_t * const cfp)
11537{
11538 return VM_ENV_PREV_EP(cfp->ep);
11539}
11540__attribute__((__pure__)) static inline VALUE VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp);
11541static inline VALUE
11542VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp)
11543{
11544 const VALUE *ep = VM_CF_LEP(cfp);
11545 return VM_ENV_BLOCK_HANDLER(ep);
11546}static inline
11547int
11548rb_vm_cframe_keyword_p(const rb_control_frame_t *cfp)
11549{
11550 return VM_FRAME_CFRAME_KW_P(cfp);
11551}static inline
11552VALUE
11553rb_vm_frame_block_handler(const rb_control_frame_t *cfp)
11554{
11555 return VM_CF_BLOCK_HANDLER(cfp);
11556}
11557static struct rb_captured_block *
11558VM_CFP_TO_CAPTURED_BLOCK(const rb_control_frame_t *cfp)
11559{
11560 ((void)0);
11561 return (struct rb_captured_block *)&cfp->self;
11562}
11563static rb_control_frame_t *
11564VM_CAPTURED_BLOCK_TO_CFP(const struct rb_captured_block *captured)
11565{
11566 rb_control_frame_t *cfp = ((rb_control_frame_t *)((VALUE *)(captured) - 3));
11567 ((void)0);
11568 ((void)0);
11569 return cfp;
11570}
11571static int
11572VM_BH_FROM_CFP_P(VALUE block_handler, const rb_control_frame_t *cfp)
11573{
11574 const struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
11575 return ((void *)((block_handler) & ~0x03)) == captured;
11576}
11577static VALUE
11578vm_passed_block_handler(rb_execution_context_t *ec)
11579{
11580 VALUE block_handler = ec->passed_block_handler;
11581 ec->passed_block_handler = 0;
11582 vm_block_handler_verify(block_handler);
11583 return block_handler;
11584}
11585static rb_cref_t *
11586vm_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)
11587{
11588 VALUE refinements = ((VALUE)RUBY_Qnil);
11589 int omod_shared = 0;
11590 rb_cref_t *cref;
11591 union {
11592 rb_scope_visibility_t visi;
11593 VALUE value;
11594 } scope_visi;
11595 scope_visi.visi.method_visi = visi;
11596 scope_visi.visi.module_func = module_func;
11597 if (prev_cref != ((void *)0) && prev_cref != (void *)1 ) {
11598 refinements = CREF_REFINEMENTS(prev_cref);
11599 if (!RB_NIL_P(refinements)) {
11600 omod_shared = 1;
11601 CREF_OMOD_SHARED_SET(prev_cref);
11602 }
11603 }
11604 ((void)0);
11605 cref = (rb_cref_t *)rb_imemo_new(imemo_cref, klass, (VALUE)(use_prev_prev ? CREF_NEXT(prev_cref) : prev_cref), scope_visi.value, refinements);
11606 if (pushed_by_eval) CREF_PUSHED_BY_EVAL_SET(cref);
11607 if (omod_shared) CREF_OMOD_SHARED_SET(cref);
11608 if (singleton) CREF_SINGLETON_SET(cref);
11609 return cref;
11610}
11611static rb_cref_t *
11612vm_cref_new(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval, int singleton)
11613{
11614 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 0, singleton);
11615}
11616static rb_cref_t *
11617vm_cref_new_use_prev(VALUE klass, rb_method_visibility_t visi, int module_func, rb_cref_t *prev_cref, int pushed_by_eval)
11618{
11619 return vm_cref_new0(klass, visi, module_func, prev_cref, pushed_by_eval, 1, 0);
11620}
11621static int
11622ref_delete_symkey(VALUE key, VALUE value, VALUE unused)
11623{
11624 return RB_SYMBOL_P(key) ? ST_DELETE : ST_CONTINUE;
11625}
11626static rb_cref_t *
11627vm_cref_dup(const rb_cref_t *cref)
11628{
11629 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11630 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11631 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11632 int singleton = CREF_SINGLETON(cref);
11633 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11634 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11635 VALUE ref = rb_hash_dup(CREF_REFINEMENTS(cref));
11636 rb_hash_foreach(ref, ref_delete_symkey, ((VALUE)RUBY_Qnil));
11637 CREF_REFINEMENTS_SET(new_cref, ref);
11638 CREF_OMOD_SHARED_UNSET(new_cref);
11639 }
11640 return new_cref;
11641}static inline
11642rb_cref_t *
11643rb_vm_cref_dup_without_refinements(const rb_cref_t *cref)
11644{
11645 const rb_scope_visibility_t *visi = CREF_SCOPE_VISI(cref);
11646 rb_cref_t *next_cref = CREF_NEXT(cref), *new_cref;
11647 int pushed_by_eval = CREF_PUSHED_BY_EVAL(cref);
11648 int singleton = CREF_SINGLETON(cref);
11649 new_cref = vm_cref_new(cref->klass_or_self, visi->method_visi, visi->module_func, next_cref, pushed_by_eval, singleton);
11650 if (!RB_NIL_P(CREF_REFINEMENTS(cref))) {
11651 CREF_REFINEMENTS_SET(new_cref, ((VALUE)RUBY_Qnil));
11652 CREF_OMOD_SHARED_UNSET(new_cref);
11653 }
11654 return new_cref;
11655}
11656static rb_cref_t *
11657vm_cref_new_toplevel(rb_execution_context_t *ec)
11658{
11659 rb_cref_t *cref = vm_cref_new(rb_cObject, METHOD_VISI_PRIVATE , 0, ((void *)0), 0, 0);
11660 VALUE top_wrapper = rb_ec_thread_ptr(ec)->top_wrapper;
11661 if (top_wrapper) {
11662 cref = vm_cref_new(top_wrapper, METHOD_VISI_PRIVATE, 0, cref, 0, 0);
11663 }
11664 return cref;
11665}static inline
11666rb_cref_t *
11667rb_vm_cref_new_toplevel(void)
11668{
11669 return vm_cref_new_toplevel(rb_current_execution_context(1));
11670}
11671static void
11672vm_cref_dump(const char *mesg, const rb_cref_t *cref)
11673{
11674 ruby_debug_printf("vm_cref_dump: %s (%p)\n", mesg, (void *)cref);
11675 while (cref) {
11676 ruby_debug_printf("= cref| klass: %s\n", RSTRING_PTR(rb_class_path(CREF_CLASS(cref))));
11677 cref = CREF_NEXT(cref);
11678 }
11679}static inline
11680void
11681rb_vm_block_ep_update(VALUE obj, const struct rb_block *dst, const VALUE *ep)
11682{
11683 *((const VALUE **)&dst->as.captured.ep) = ep;
11684 (rb_obj_written((VALUE)(obj), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(VM_ENV_ENVVAL(ep)), "../ruby-3.2.1/vm.c", 360));
11685}
11686static void
11687vm_bind_update_env(VALUE bindval, rb_binding_t *bind, VALUE envval)
11688{
11689 const rb_env_t *env = (rb_env_t *)envval;
11690 rb_obj_write((VALUE)(bindval), __extension__({
11691 ;
11692 ; __typeof__((VALUE *)(&bind->block.as.captured.code.iseq)) unaligned_member_access_result = ((VALUE *)(&bind->block.as.captured.code.iseq));
11693 ; unaligned_member_access_result; }), (VALUE)(env->iseq), "../ruby-3.2.1/vm.c", 367);
11694 rb_vm_block_ep_update(bindval, &bind->block, env->ep);
11695}
11696static VALUE vm_make_env_object(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
11697extern VALUE rb_vm_invoke_bmethod(rb_execution_context_t *ec, rb_proc_t *proc, VALUE self,
11698 int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
11699 const rb_callable_method_entry_t *me);
11700static 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);
11701__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);
11702static VALUE
11703mjit_check_iseq(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
11704{
11705 uintptr_t mjit_state = (uintptr_t)(body->jit_func);
11706 ((__builtin_expect(!!(!!(((uintptr_t)(mjit_state) <= (uintptr_t)MJIT_FUNC_FAILED))), 1)) ? ((void)0) : __builtin_unreachable());
11707 switch ((enum rb_mjit_func_state)mjit_state) {
11708 case MJIT_FUNC_NOT_COMPILED:
11709 if (body->total_calls == mjit_opts.call_threshold) {
11710 rb_mjit_add_iseq_to_process(iseq);
11711 if ((__builtin_expect(!!(mjit_opts.wait && !((uintptr_t)(body->jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)), 0))) {
11712 return body->jit_func(ec, ec->cfp);
11713 }
11714 }
11715 break;
11716 case MJIT_FUNC_COMPILING:
11717 case MJIT_FUNC_FAILED:
11718 break;
11719 }
11720 return ((VALUE)RUBY_Qundef);
11721}
11722static inline VALUE
11723jit_exec(rb_execution_context_t *ec)
11724{
11725 const rb_iseq_t *iseq = ec->cfp->iseq;
11726 struct rb_iseq_constant_body *body = ((iseq)->body);
11727 _Bool yjit_enabled = rb_yjit_enabled_p();
11728 if (yjit_enabled || mjit_call_p) {
11729 body->total_calls++;
11730 }
11731 else {
11732 return ((VALUE)RUBY_Qundef);
11733 }
11734 jit_func_t func;
11735 if (yjit_enabled) {
11736 if (body->total_calls == rb_yjit_call_threshold()) {
11737 if (!rb_yjit_compile_iseq(iseq, ec)) {
11738 return ((VALUE)RUBY_Qundef);
11739 }
11740 }
11741 if ((func = body->jit_func) == 0) {
11742 return ((VALUE)RUBY_Qundef);
11743 }
11744 }
11745 else if ((__builtin_expect(!!(((uintptr_t)(func = body->jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)), 0))) {
11746 return mjit_check_iseq(ec, iseq, body);
11747 }
11748 return func(ec, ec->cfp);
11749}
11750VALUE rb_invcmp(VALUE, VALUE);
11751struct ar_table_struct;
11752typedef unsigned char ar_hint_t;
11753enum ruby_rhash_flags {
11754 RHASH_PASS_AS_KEYWORDS = ((VALUE)RUBY_FL_USER1),
11755 RHASH_PROC_DEFAULT = ((VALUE)RUBY_FL_USER2),
11756 RHASH_ST_TABLE_FLAG = ((VALUE)RUBY_FL_USER3),
11757 RHASH_AR_TABLE_SIZE_MASK = (((VALUE)RUBY_FL_USER4)|((VALUE)RUBY_FL_USER5)|((VALUE)RUBY_FL_USER6)|((VALUE)RUBY_FL_USER7)),
11758 RHASH_AR_TABLE_SIZE_SHIFT = (((VALUE)RUBY_FL_USHIFT)+4),
11759 RHASH_AR_TABLE_BOUND_MASK = (((VALUE)RUBY_FL_USER8)|((VALUE)RUBY_FL_USER9)|((VALUE)RUBY_FL_USER10)|((VALUE)RUBY_FL_USER11)),
11760 RHASH_AR_TABLE_BOUND_SHIFT = (((VALUE)RUBY_FL_USHIFT)+8),
11761 RHASH_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER12),
11762 RHASH_LEV_SHIFT = (((VALUE)RUBY_FL_USHIFT) + 13),
11763 RHASH_LEV_MAX = 127,
11764};
11765struct RHash {
11766 struct RBasic basic;
11767 union {
11768 st_table *st;
11769 struct ar_table_struct *ar;
11770 } as;
11771 const VALUE ifnone;
11772 union {
11773 ar_hint_t ary[8];
11774 VALUE word;
11775 } ar_hint;
11776};
11777void rb_hash_st_table_set(VALUE hash, st_table *st);
11778VALUE rb_hash_default_value(VALUE hash, VALUE key);
11779VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
11780long rb_dbl_long_hash(double d);
11781st_table *rb_init_identtable(void);
11782VALUE rb_to_hash_type(VALUE obj);
11783VALUE rb_hash_key_str(VALUE);
11784VALUE rb_hash_values(VALUE hash);
11785VALUE rb_hash_rehash(VALUE hash);
11786int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val);
11787VALUE rb_hash_set_pair(VALUE hash, VALUE pair);
11788int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
11789int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
11790int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
11791extern st_table *rb_hash_st_table(VALUE hash);
11792VALUE rb_ident_hash_new_with_size(st_index_t size);
11793static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
11794static inline VALUE RHASH_IFNONE(VALUE h);
11795static inline size_t RHASH_SIZE(VALUE h);
11796static inline _Bool RHASH_EMPTY_P(VALUE h);
11797static inline _Bool RHASH_AR_TABLE_P(VALUE h);
11798static inline _Bool RHASH_ST_TABLE_P(VALUE h);
11799static inline struct ar_table_struct *RHASH_AR_TABLE(VALUE h);
11800static inline st_table *RHASH_ST_TABLE(VALUE h);
11801static inline size_t RHASH_ST_SIZE(VALUE h);
11802static inline void RHASH_ST_CLEAR(VALUE h);
11803static inline _Bool RHASH_TRANSIENT_P(VALUE h);
11804static inline void RHASH_SET_TRANSIENT_FLAG(VALUE h);
11805static inline void RHASH_UNSET_TRANSIENT_FLAG(VALUE h);
11806
11807
11808VALUE rb_hash_delete_entry(VALUE hash, VALUE key);
11809VALUE rb_ident_hash_new(void);
11810int rb_hash_stlike_foreach(VALUE hash, st_foreach_callback_func *func, st_data_t arg);
11811
11812
11813
11814
11815VALUE rb_hash_new_with_size(st_index_t size);
11816VALUE rb_hash_resurrect(VALUE hash);
11817int rb_hash_stlike_lookup(VALUE hash, st_data_t key, st_data_t *pval);
11818VALUE rb_hash_keys(VALUE hash);
11819VALUE rb_hash_has_key(VALUE hash, VALUE key);
11820VALUE rb_hash_compare_by_id_p(VALUE hash);
11821st_table *rb_hash_tbl_raw(VALUE hash, const char *file, int line);
11822
11823
11824VALUE rb_hash_compare_by_id(VALUE hash);
11825static inline _Bool
11826RHASH_AR_TABLE_P(VALUE h)
11827{
11828 return ! RB_FL_TEST_RAW(h, RHASH_ST_TABLE_FLAG);
11829}
11830static inline struct ar_table_struct *
11831RHASH_AR_TABLE(VALUE h)
11832{
11833 return ((struct RHash *)(h))->as.ar;
11834}
11835static inline st_table *
11836RHASH_ST_TABLE(VALUE h)
11837{
11838 return ((struct RHash *)(h))->as.st;
11839}
11840static inline VALUE
11841RHASH_IFNONE(VALUE h)
11842{
11843 return ((struct RHash *)(h))->ifnone;
11844}
11845static inline size_t
11846RHASH_SIZE(VALUE h)
11847{
11848 if (RHASH_AR_TABLE_P(h)) {
11849 return RHASH_AR_TABLE_SIZE_RAW(h);
11850 }
11851 else {
11852 return RHASH_ST_SIZE(h);
11853 }
11854}
11855static inline _Bool
11856RHASH_EMPTY_P(VALUE h)
11857{
11858 return RHASH_SIZE(h) == 0;
11859}
11860static inline _Bool
11861RHASH_ST_TABLE_P(VALUE h)
11862{
11863 return ! RHASH_AR_TABLE_P(h);
11864}
11865static inline size_t
11866RHASH_ST_SIZE(VALUE h)
11867{
11868 return RHASH_ST_TABLE(h)->num_entries;
11869}
11870static inline void
11871RHASH_ST_CLEAR(VALUE h)
11872{
11873 RB_FL_UNSET_RAW(h, RHASH_ST_TABLE_FLAG);
11874 ((struct RHash *)(h))->as.ar = ((void *)0);
11875}
11876static inline unsigned
11877RHASH_AR_TABLE_SIZE_RAW(VALUE h)
11878{
11879 VALUE ret = RB_FL_TEST_RAW(h, RHASH_AR_TABLE_SIZE_MASK);
11880 ret >>= RHASH_AR_TABLE_SIZE_SHIFT;
11881 return (unsigned)ret;
11882}
11883static inline _Bool
11884RHASH_TRANSIENT_P(VALUE h)
11885{
11886 return RB_FL_TEST_RAW(h, RHASH_TRANSIENT_FLAG);
11887}
11888static inline void
11889RHASH_SET_TRANSIENT_FLAG(VALUE h)
11890{
11891 RB_FL_SET_RAW(h, RHASH_TRANSIENT_FLAG);
11892}
11893static inline void
11894RHASH_UNSET_TRANSIENT_FLAG(VALUE h)
11895{
11896 RB_FL_UNSET_RAW(h, RHASH_TRANSIENT_FLAG);
11897}
11898enum rb_int_parse_flags {
11899 RB_INT_PARSE_SIGN = 0x01,
11900 RB_INT_PARSE_UNDERSCORE = 0x02,
11901 RB_INT_PARSE_PREFIX = 0x04,
11902 RB_INT_PARSE_ALL = 0x07,
11903 RB_INT_PARSE_DEFAULT = 0x07,
11904};
11905struct RBignum {
11906 struct RBasic basic;
11907 union {
11908 struct {
11909 size_t len;
11910 unsigned int *digits;
11911 } heap;
11912 unsigned int ary[(8*3/4)];
11913 } as;
11914};
11915extern const char ruby_digitmap[];
11916double rb_big_fdiv_double(VALUE x, VALUE y);
11917VALUE rb_big_uminus(VALUE x);
11918VALUE rb_big_hash(VALUE);
11919VALUE rb_big_odd_p(VALUE);
11920VALUE rb_big_even_p(VALUE);
11921size_t rb_big_size(VALUE);
11922VALUE rb_integer_float_cmp(VALUE x, VALUE y);
11923VALUE rb_integer_float_eq(VALUE x, VALUE y);
11924VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
11925VALUE rb_big_comp(VALUE x);
11926VALUE rb_big_aref(VALUE x, VALUE y);
11927VALUE rb_big_abs(VALUE x);
11928VALUE rb_big_size_m(VALUE big);
11929VALUE rb_big_bit_length(VALUE big);
11930VALUE rb_big_remainder(VALUE x, VALUE y);
11931VALUE rb_big_gt(VALUE x, VALUE y);
11932VALUE rb_big_ge(VALUE x, VALUE y);
11933VALUE rb_big_lt(VALUE x, VALUE y);
11934VALUE rb_big_le(VALUE x, VALUE y);
11935VALUE rb_int_powm(int const argc, VALUE * const argv, VALUE const num);
11936VALUE rb_big_isqrt(VALUE n);
11937static inline _Bool BIGNUM_SIGN(VALUE b);
11938static inline _Bool BIGNUM_POSITIVE_P(VALUE b);
11939static inline _Bool BIGNUM_NEGATIVE_P(VALUE b);
11940static inline void BIGNUM_SET_SIGN(VALUE b, _Bool sign);
11941static inline void BIGNUM_NEGATE(VALUE b);
11942static inline size_t BIGNUM_LEN(VALUE b);
11943static inline unsigned int *BIGNUM_DIGITS(VALUE b);
11944static inline int BIGNUM_LENINT(VALUE b);
11945static inline _Bool BIGNUM_EMBED_P(VALUE b);
11946
11947
11948VALUE rb_big_mul_normal(VALUE x, VALUE y);
11949VALUE rb_big_mul_balance(VALUE x, VALUE y);
11950VALUE rb_big_mul_karatsuba(VALUE x, VALUE y);
11951VALUE rb_big_mul_toom3(VALUE x, VALUE y);
11952VALUE rb_big_sq_fast(VALUE x);
11953VALUE rb_big_divrem_normal(VALUE x, VALUE y);
11954VALUE rb_big2str_poweroftwo(VALUE x, int base);
11955VALUE rb_big2str_generic(VALUE x, int base);
11956VALUE rb_str2big_poweroftwo(VALUE arg, int base, int badcheck);
11957VALUE rb_str2big_normal(VALUE arg, int base, int badcheck);
11958VALUE rb_str2big_karatsuba(VALUE arg, int base, int badcheck);
11959VALUE rb_big_mul_gmp(VALUE x, VALUE y);
11960VALUE rb_big_divrem_gmp(VALUE x, VALUE y);
11961VALUE rb_big2str_gmp(VALUE x, int base);
11962VALUE rb_str2big_gmp(VALUE arg, int base, int badcheck);
11963VALUE rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits, int base, int flags);
11964
11965
11966
11967
11968VALUE rb_int128t2big(__int128 n);
11969
11970
11971static inline _Bool
11972BIGNUM_SIGN(VALUE b)
11973{
11974 return RB_FL_TEST_RAW(b, ((VALUE)RUBY_FL_USER1));
11975}
11976static inline _Bool
11977BIGNUM_POSITIVE_P(VALUE b)
11978{
11979 return BIGNUM_SIGN(b);
11980}
11981static inline _Bool
11982BIGNUM_NEGATIVE_P(VALUE b)
11983{
11984 return ! BIGNUM_POSITIVE_P(b);
11985}
11986static inline void
11987BIGNUM_SET_SIGN(VALUE b, _Bool sign)
11988{
11989 if (sign) {
11990 RB_FL_SET_RAW(b, ((VALUE)RUBY_FL_USER1));
11991 }
11992 else {
11993 RB_FL_UNSET_RAW(b, ((VALUE)RUBY_FL_USER1));
11994 }
11995}
11996static inline void
11997BIGNUM_NEGATE(VALUE b)
11998{
11999 RB_FL_REVERSE_RAW(b, ((VALUE)RUBY_FL_USER1));
12000}
12001static inline size_t
12002BIGNUM_LEN(VALUE b)
12003{
12004 if (! BIGNUM_EMBED_P(b)) {
12005 return ((struct RBignum *)(b))->as.heap.len;
12006 }
12007 else {
12008 size_t ret = ((struct RBasic *)(b))->flags;
12009 ret &= (~(~(VALUE)0U << 3) << (((VALUE)RUBY_FL_USHIFT)+3));
12010 ret >>= (((VALUE)RUBY_FL_USHIFT)+3);
12011 return ret;
12012 }
12013}
12014static inline int
12015BIGNUM_LENINT(VALUE b)
12016{
12017 return rb_long2int_inline(BIGNUM_LEN(b));
12018}
12019static inline unsigned int *
12020BIGNUM_DIGITS(VALUE b)
12021{
12022 if (BIGNUM_EMBED_P(b)) {
12023 return ((struct RBignum *)(b))->as.ary;
12024 }
12025 else {
12026 return ((struct RBignum *)(b))->as.heap.digits;
12027 }
12028}
12029static inline _Bool
12030BIGNUM_EMBED_P(VALUE b)
12031{
12032 return RB_FL_TEST_RAW(b, ((VALUE)((VALUE)RUBY_FL_USER2)));
12033}
12034static inline uint16_t ruby_swap16(uint16_t);
12035static inline uint32_t ruby_swap32(uint32_t);
12036static inline uint64_t ruby_swap64(uint64_t);
12037static inline unsigned nlz_int(unsigned x);
12038static inline unsigned nlz_long(unsigned long x);
12039static inline unsigned nlz_long_long(unsigned long long x);
12040static inline unsigned nlz_intptr(uintptr_t x);
12041static inline unsigned nlz_int32(uint32_t x);
12042static inline unsigned nlz_int64(uint64_t x);
12043static inline unsigned nlz_int128(unsigned __int128 x);
12044static inline unsigned rb_popcount32(uint32_t x);
12045static inline unsigned rb_popcount64(uint64_t x);
12046static inline unsigned rb_popcount_intptr(uintptr_t x);
12047static inline int ntz_int32(uint32_t x);
12048static inline int ntz_int64(uint64_t x);
12049static inline int ntz_intptr(uintptr_t x);
12050static inline VALUE RUBY_BIT_ROTL(VALUE, int);
12051static inline VALUE RUBY_BIT_ROTR(VALUE, int);
12052static inline uint16_t
12053ruby_swap16(uint16_t x)
12054{
12055 return __builtin_bswap16(x);
12056}
12057static inline uint32_t
12058ruby_swap32(uint32_t x)
12059{
12060 return __builtin_bswap32(x);
12061}
12062static inline uint64_t
12063ruby_swap64(uint64_t x)
12064{
12065 return __builtin_bswap64(x);
12066}
12067static inline unsigned int
12068nlz_int32(uint32_t x)
12069{
12070 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
12071 return x ? (unsigned int)__builtin_clz(x) : 32;
12072}
12073static inline unsigned int
12074nlz_int64(uint64_t x)
12075{
12076 if (x == 0) {
12077 return 64;
12078 }
12079 else if (sizeof(long) * 8 == 64) {
12080 return (unsigned int)__builtin_clzl((unsigned long)x);
12081 }
12082 else if (sizeof(long long) * 8 == 64) {
12083 return (unsigned int)__builtin_clzll((unsigned long long)x);
12084 }
12085 else {
12086 __builtin_unreachable();
12087 }
12088}
12089static inline unsigned int
12090nlz_int128(unsigned __int128 x)
12091{
12092 uint64_t y = (uint64_t)(x >> 64);
12093 if (x == 0) {
12094 return 128;
12095 }
12096 else if (y == 0) {
12097 return (unsigned int)nlz_int64(x) + 64;
12098 }
12099 else {
12100 return (unsigned int)nlz_int64(y);
12101 }
12102}
12103static inline unsigned int
12104nlz_int(unsigned int x)
12105{
12106 if (sizeof(unsigned int) * 8 == 32) {
12107 return nlz_int32((uint32_t)x);
12108 }
12109 else if (sizeof(unsigned int) * 8 == 64) {
12110 return nlz_int64((uint64_t)x);
12111 }
12112 else {
12113 __builtin_unreachable();
12114 }
12115}
12116static inline unsigned int
12117nlz_long(unsigned long x)
12118{
12119 if (sizeof(unsigned long) * 8 == 32) {
12120 return nlz_int32((uint32_t)x);
12121 }
12122 else if (sizeof(unsigned long) * 8 == 64) {
12123 return nlz_int64((uint64_t)x);
12124 }
12125 else {
12126 __builtin_unreachable();
12127 }
12128}
12129static inline unsigned int
12130nlz_long_long(unsigned long long x)
12131{
12132 if (sizeof(unsigned long long) * 8 == 64) {
12133 return nlz_int64((uint64_t)x);
12134 }
12135 else if (sizeof(unsigned long long) * 8 == 128) {
12136 return nlz_int128((unsigned __int128)x);
12137 }
12138 else {
12139 __builtin_unreachable();
12140 }
12141}
12142static inline unsigned int
12143nlz_intptr(uintptr_t x)
12144{
12145 if (sizeof(uintptr_t) == sizeof(unsigned int)) {
12146 return nlz_int((unsigned int)x);
12147 }
12148 if (sizeof(uintptr_t) == sizeof(unsigned long)) {
12149 return nlz_long((unsigned long)x);
12150 }
12151 if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
12152 return nlz_long_long((unsigned long long)x);
12153 }
12154 else {
12155 __builtin_unreachable();
12156 }
12157}
12158static inline unsigned int
12159rb_popcount32(uint32_t x)
12160{
12161 __extension__ _Static_assert(sizeof(int) * 8 >= 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT >= 32");
12162 return (unsigned int)__builtin_popcount(x);
12163}
12164static inline unsigned int
12165rb_popcount64(uint64_t x)
12166{
12167 if (sizeof(long) * 8 == 64) {
12168 return (unsigned int)__builtin_popcountl((unsigned long)x);
12169 }
12170 else if (sizeof(long long) * 8 == 64) {
12171 return (unsigned int)__builtin_popcountll((unsigned long long)x);
12172 }
12173 else {
12174 __builtin_unreachable();
12175 }
12176}
12177static inline unsigned int
12178rb_popcount_intptr(uintptr_t x)
12179{
12180 if (sizeof(uintptr_t) * 8 == 64) {
12181 return rb_popcount64((uint64_t)x);
12182 }
12183 else if (sizeof(uintptr_t) * 8 == 32) {
12184 return rb_popcount32((uint32_t)x);
12185 }
12186 else {
12187 __builtin_unreachable();
12188 }
12189}
12190static inline int
12191ntz_int32(uint32_t x)
12192{
12193 __extension__ _Static_assert(sizeof(int) * 8 == 32, "sizeof_int" ": " "sizeof(int) * CHAR_BIT == 32");
12194 return x ? (unsigned)__builtin_ctz(x) : 32;
12195}
12196static inline int
12197ntz_int64(uint64_t x)
12198{
12199 if (x == 0) {
12200 return 64;
12201 }
12202 else if (sizeof(long) * 8 == 64) {
12203 return (unsigned)__builtin_ctzl((unsigned long)x);
12204 }
12205 else if (sizeof(long long) * 8 == 64) {
12206 return (unsigned)__builtin_ctzll((unsigned long long)x);
12207 }
12208 else {
12209 __builtin_unreachable();
12210 }
12211}
12212static inline int
12213ntz_intptr(uintptr_t x)
12214{
12215 if (sizeof(uintptr_t) * 8 == 64) {
12216 return ntz_int64((uint64_t)x);
12217 }
12218 else if (sizeof(uintptr_t) * 8 == 32) {
12219 return ntz_int32((uint32_t)x);
12220 }
12221 else {
12222 __builtin_unreachable();
12223 }
12224}
12225static inline VALUE
12226RUBY_BIT_ROTL(VALUE v, int n)
12227{
12228 const int m = (sizeof(VALUE) * 8) - 1;
12229 return (v << (n & m)) | (v >> (-n & m));
12230}
12231static inline VALUE
12232RUBY_BIT_ROTR(VALUE v, int n)
12233{
12234 const int m = (sizeof(VALUE) * 8) - 1;
12235 return (v << (-n & m)) | (v >> (n & m));
12236}
12237VALUE rb_int128t2big(__int128 n);
12238static inline long rb_overflowed_fix_to_int(long x);
12239static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
12240static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
12241static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
12242static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
12243static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
12244static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
12245static inline _Bool FIXNUM_POSITIVE_P(VALUE num);
12246static inline _Bool FIXNUM_NEGATIVE_P(VALUE num);
12247static inline _Bool FIXNUM_ZERO_P(VALUE num);
12248static inline long
12249rb_overflowed_fix_to_int(long x)
12250{
12251 return (long)((unsigned long)(x >> 1) ^ (1LU << (8 * 8 - 1)));
12252}
12253static inline VALUE
12254rb_fix_plus_fix(VALUE x, VALUE y)
12255{
12256 long lz;
12257 if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
12258 return rb_int2big(rb_overflowed_fix_to_int(lz));
12259 }
12260 else {
12261 return (VALUE)lz;
12262 }
12263}
12264static inline VALUE
12265rb_fix_minus_fix(VALUE x, VALUE y)
12266{
12267 long lz;
12268 if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
12269 return rb_int2big(rb_overflowed_fix_to_int(lz));
12270 }
12271 else {
12272 return (VALUE)lz;
12273 }
12274}
12275static inline VALUE
12276rb_fix_mul_fix(VALUE x, VALUE y)
12277{
12278 long lx = rb_fix2long(x);
12279 long ly = rb_fix2long(y);
12280 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));
12281}
12282static inline void
12283rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
12284{
12285 long x = rb_fix2long(a);
12286 long y = rb_fix2long(b);
12287 long div, mod;
12288 if (x == ((-0x7fffffffffffffffL -1L) / 2) && y == -1) {
12289 if (divp) *divp = rb_long2num_inline(-((-0x7fffffffffffffffL -1L) / 2));
12290 if (modp) *modp = RB_INT2FIX(0);
12291 return;
12292 }
12293 div = x / y;
12294 mod = x % y;
12295 if (y > 0 ? mod < 0 : mod > 0) {
12296 mod += y;
12297 div -= 1;
12298 }
12299 if (divp) *divp = RB_INT2FIX(div);
12300 if (modp) *modp = RB_INT2FIX(mod);
12301}
12302static inline VALUE
12303rb_fix_div_fix(VALUE x, VALUE y)
12304{
12305 VALUE div;
12306 rb_fix_divmod_fix(x, y, &div, ((void *)0));
12307 return div;
12308}
12309static inline VALUE
12310rb_fix_mod_fix(VALUE x, VALUE y)
12311{
12312 VALUE mod;
12313 rb_fix_divmod_fix(x, y, ((void *)0), &mod);
12314 return mod;
12315}
12316static inline _Bool
12317FIXNUM_POSITIVE_P(VALUE num)
12318{
12319 return (long)num > (long)__builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12320}
12321static inline _Bool
12322FIXNUM_NEGATIVE_P(VALUE num)
12323{
12324 return (long)num < 0;
12325}
12326static inline _Bool
12327FIXNUM_ZERO_P(VALUE num)
12328{
12329 return num == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12330}
12331enum ruby_num_rounding_mode {
12332 RUBY_NUM_ROUND_HALF_UP,
12333 RUBY_NUM_ROUND_HALF_EVEN,
12334 RUBY_NUM_ROUND_HALF_DOWN,
12335 RUBY_NUM_ROUND_DEFAULT = RUBY_NUM_ROUND_HALF_UP,
12336};
12337typedef double rb_float_value_type;
12338struct RFloat {
12339 struct RBasic basic;
12340 rb_float_value_type float_value;
12341};
12342int rb_num_to_uint(VALUE val, unsigned int *ret);
12343VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl);
12344double ruby_float_step_size(double beg, double end, double unit, int excl);
12345int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl, int allow_endless);
12346int rb_num_negative_p(VALUE);
12347VALUE rb_int_succ(VALUE num);
12348VALUE rb_float_uminus(VALUE num);
12349VALUE rb_int_plus(VALUE x, VALUE y);
12350VALUE rb_float_plus(VALUE x, VALUE y);
12351VALUE rb_int_minus(VALUE x, VALUE y);
12352VALUE rb_float_minus(VALUE x, VALUE y);
12353VALUE rb_int_mul(VALUE x, VALUE y);
12354VALUE rb_float_mul(VALUE x, VALUE y);
12355VALUE rb_float_div(VALUE x, VALUE y);
12356VALUE rb_int_idiv(VALUE x, VALUE y);
12357VALUE rb_int_modulo(VALUE x, VALUE y);
12358VALUE rb_int2str(VALUE num, int base);
12359VALUE rb_fix_plus(VALUE x, VALUE y);
12360VALUE rb_int_gt(VALUE x, VALUE y);
12361VALUE rb_float_gt(VALUE x, VALUE y);
12362VALUE rb_int_ge(VALUE x, VALUE y);
12363enum ruby_num_rounding_mode rb_num_get_rounding_option(VALUE opts);
12364double rb_int_fdiv_double(VALUE x, VALUE y);
12365VALUE rb_int_pow(VALUE x, VALUE y);
12366VALUE rb_float_pow(VALUE x, VALUE y);
12367VALUE rb_int_cmp(VALUE x, VALUE y);
12368VALUE rb_int_equal(VALUE x, VALUE y);
12369VALUE rb_int_divmod(VALUE x, VALUE y);
12370VALUE rb_int_and(VALUE x, VALUE y);
12371VALUE rb_int_lshift(VALUE x, VALUE y);
12372VALUE rb_int_div(VALUE x, VALUE y);
12373int rb_int_positive_p(VALUE num);
12374int rb_int_negative_p(VALUE num);
12375VALUE rb_check_integer_type(VALUE);
12376VALUE rb_num_pow(VALUE x, VALUE y);
12377VALUE rb_float_ceil(VALUE num, int ndigits);
12378VALUE rb_float_floor(VALUE x, int ndigits);
12379VALUE rb_float_abs(VALUE flt);
12380static inline VALUE rb_num_compare_with_zero(VALUE num, ID mid);
12381static inline int rb_num_positive_int_p(VALUE num);
12382static inline int rb_num_negative_int_p(VALUE num);
12383static inline double rb_float_flonum_value(VALUE v);
12384static inline double rb_float_noflonum_value(VALUE v);
12385static inline double rb_float_value_inline(VALUE v);
12386static inline VALUE rb_float_new_inline(double d);
12387static inline _Bool INT_POSITIVE_P(VALUE num);
12388static inline _Bool INT_NEGATIVE_P(VALUE num);
12389static inline _Bool FLOAT_ZERO_P(VALUE num);
12390
12391
12392
12393
12394
12395
12396VALUE rb_flo_div_flo(VALUE x, VALUE y);
12397double ruby_float_mod(double x, double y);
12398VALUE rb_float_equal(VALUE x, VALUE y);
12399int rb_float_cmp(VALUE x, VALUE y);
12400VALUE rb_float_eql(VALUE x, VALUE y);
12401VALUE rb_fix_aref(VALUE fix, VALUE idx);
12402VALUE rb_int_zero_p(VALUE num);
12403VALUE rb_int_even_p(VALUE num);
12404VALUE rb_int_odd_p(VALUE num);
12405VALUE rb_int_abs(VALUE num);
12406VALUE rb_int_bit_length(VALUE num);
12407VALUE rb_int_uminus(VALUE num);
12408VALUE rb_int_comp(VALUE num);
12409
12410
12411static inline _Bool
12412INT_POSITIVE_P(VALUE num)
12413{
12414 if (RB_FIXNUM_P(num)) {
12415 return FIXNUM_POSITIVE_P(num);
12416 }
12417 else {
12418 return BIGNUM_POSITIVE_P(num);
12419 }
12420}
12421static inline _Bool
12422INT_NEGATIVE_P(VALUE num)
12423{
12424 if (RB_FIXNUM_P(num)) {
12425 return FIXNUM_NEGATIVE_P(num);
12426 }
12427 else {
12428 return BIGNUM_NEGATIVE_P(num);
12429 }
12430}
12431static inline _Bool
12432FLOAT_ZERO_P(VALUE num)
12433{
12434 return rb_float_value_inline(num) == 0.0;
12435}
12436static inline VALUE
12437rb_num_compare_with_zero(VALUE num, ID mid)
12438{
12439 VALUE zero = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
12440 VALUE r = rb_check_funcall(num, mid, 1, &zero);
12441 if (r == ((VALUE)RUBY_Qundef)) {
12442 rb_cmperr(num, zero);
12443 }
12444 return r;
12445}
12446static inline int
12447rb_num_positive_int_p(VALUE num)
12448{
12449 const ID mid = '>';
12450 if (RB_FIXNUM_P(num)) {
12451 if (rb_method_basic_definition_p(rb_cInteger, mid))
12452 return FIXNUM_POSITIVE_P(num);
12453 }
12454 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12455 if (rb_method_basic_definition_p(rb_cInteger, mid))
12456 return BIGNUM_POSITIVE_P(num);
12457 }
12458 return RB_TEST(rb_num_compare_with_zero(num, mid));
12459}
12460static inline int
12461rb_num_negative_int_p(VALUE num)
12462{
12463 const ID mid = '<';
12464 if (RB_FIXNUM_P(num)) {
12465 if (rb_method_basic_definition_p(rb_cInteger, mid))
12466 return FIXNUM_NEGATIVE_P(num);
12467 }
12468 else if (RB_TYPE_P(num, RUBY_T_BIGNUM)) {
12469 if (rb_method_basic_definition_p(rb_cInteger, mid))
12470 return BIGNUM_NEGATIVE_P(num);
12471 }
12472 return RB_TEST(rb_num_compare_with_zero(num, mid));
12473}
12474static inline double
12475rb_float_flonum_value(VALUE v)
12476{
12477 if (v != (VALUE)0x8000000000000002) {
12478 union {
12479 double d;
12480 VALUE v;
12481 } t;
12482 VALUE b63 = (v >> 63);
12483 t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~(VALUE)0x03), 3);
12484 return t.d;
12485 }
12486 return 0.0;
12487}
12488static inline double
12489rb_float_noflonum_value(VALUE v)
12490{
12491 return ((struct RFloat *)(v))->float_value;
12492}
12493static inline double
12494rb_float_value_inline(VALUE v)
12495{
12496 if (RB_FLONUM_P(v)) {
12497 return rb_float_flonum_value(v);
12498 }
12499 return rb_float_noflonum_value(v);
12500}
12501static inline VALUE
12502rb_float_new_inline(double d)
12503{
12504 union {
12505 double d;
12506 VALUE v;
12507 } t;
12508 int bits;
12509 t.d = d;
12510 bits = (int)((VALUE)(t.v >> 60) & 0x7);
12511 if (t.v != 0x3000000000000000 &&
12512 !((bits-3) & ~0x01)) {
12513 return (RUBY_BIT_ROTL(t.v, 3) & ~(VALUE)0x01) | 0x02;
12514 }
12515 else if (t.v == (VALUE)0) {
12516 return 0x8000000000000002;
12517 }
12518 return rb_float_new_in_heap(d);
12519}
12520int ruby_fill_random_bytes(void *, size_t, int);
12521enum {
12522 RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
12523 RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
12524 RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1),
12525 RSTRUCT_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER3),
12526};
12527struct RStruct {
12528 struct RBasic basic;
12529 union {
12530 struct {
12531 long len;
12532 const VALUE *ptr;
12533 } heap;
12534 const VALUE ary[RSTRUCT_EMBED_LEN_MAX];
12535 } as;
12536};
12537VALUE rb_struct_init_copy(VALUE copy, VALUE s);
12538VALUE rb_struct_lookup(VALUE s, VALUE idx);
12539VALUE rb_struct_s_keyword_init(VALUE klass);
12540static inline const VALUE *rb_struct_const_heap_ptr(VALUE st);
12541static inline _Bool RSTRUCT_TRANSIENT_P(VALUE st);
12542static inline void RSTRUCT_TRANSIENT_SET(VALUE st);
12543static inline void RSTRUCT_TRANSIENT_UNSET(VALUE st);
12544static inline long RSTRUCT_EMBED_LEN(VALUE st);
12545static inline long internal_RSTRUCT_LEN(VALUE st);
12546static inline int RSTRUCT_LENINT(VALUE st);
12547static inline const VALUE *RSTRUCT_CONST_PTR(VALUE st);
12548static inline void internal_RSTRUCT_SET(VALUE st, long k, VALUE v);
12549static inline VALUE internal_RSTRUCT_GET(VALUE st, long k);
12550static inline _Bool
12551RSTRUCT_TRANSIENT_P(VALUE st)
12552{
12553 return RB_FL_TEST_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12554}
12555static inline void
12556RSTRUCT_TRANSIENT_SET(VALUE st)
12557{
12558 RB_FL_SET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12559}
12560static inline void
12561RSTRUCT_TRANSIENT_UNSET(VALUE st)
12562{
12563 RB_FL_UNSET_RAW(st, RSTRUCT_TRANSIENT_FLAG);
12564}
12565static inline long
12566RSTRUCT_EMBED_LEN(VALUE st)
12567{
12568 long ret = RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK);
12569 ret >>= RSTRUCT_EMBED_LEN_SHIFT;
12570 return ret;
12571}
12572static inline long
12573internal_RSTRUCT_LEN(VALUE st)
12574{
12575 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12576 return RSTRUCT_EMBED_LEN(st);
12577 }
12578 else {
12579 return ((struct RStruct *)(st))->as.heap.len;
12580 }
12581}
12582static inline int
12583RSTRUCT_LENINT(VALUE st)
12584{
12585 return rb_long2int_inline(internal_RSTRUCT_LEN(st));
12586}
12587static inline const VALUE *
12588RSTRUCT_CONST_PTR(VALUE st)
12589{
12590 const struct RStruct *p = ((struct RStruct *)(st));
12591 if (RB_FL_TEST_RAW(st, RSTRUCT_EMBED_LEN_MASK)) {
12592 return p->as.ary;
12593 }
12594 else {
12595 return p->as.heap.ptr;
12596 }
12597}
12598static inline void
12599internal_RSTRUCT_SET(VALUE st, long k, VALUE v)
12600{
12601 rb_obj_write((VALUE)(st), __extension__({
12602 ;
12603 ; __typeof__((VALUE *)(&RSTRUCT_CONST_PTR(st)[k])) unaligned_member_access_result = ((VALUE *)(&RSTRUCT_CONST_PTR(st)[k]));
12604 ; unaligned_member_access_result; }), (VALUE)(v), "../ruby-3.2.1/internal/struct.h", 137);
12605}
12606static inline VALUE
12607internal_RSTRUCT_GET(VALUE st, long k)
12608{
12609 return RSTRUCT_CONST_PTR(st)[k];
12610}
12611static inline const VALUE *
12612rb_struct_const_heap_ptr(VALUE st)
12613{
12614 return ((struct RStruct *)(st))->as.heap.ptr;
12615}
12616struct gen_ivtbl {
12617 uint32_t numiv;
12618 VALUE ivptr[];
12619};
12620int rb_ivar_generic_ivtbl_lookup(VALUE obj, struct gen_ivtbl **);
12621enum ruby_vminsn_type {
12622 YARVINSN_nop,
12623 YARVINSN_getlocal,
12624 YARVINSN_setlocal,
12625 YARVINSN_getblockparam,
12626 YARVINSN_setblockparam,
12627 YARVINSN_getblockparamproxy,
12628 YARVINSN_getspecial,
12629 YARVINSN_setspecial,
12630 YARVINSN_getinstancevariable,
12631 YARVINSN_setinstancevariable,
12632 YARVINSN_getclassvariable,
12633 YARVINSN_setclassvariable,
12634 YARVINSN_opt_getconstant_path,
12635 YARVINSN_getconstant,
12636 YARVINSN_setconstant,
12637 YARVINSN_getglobal,
12638 YARVINSN_setglobal,
12639 YARVINSN_putnil,
12640 YARVINSN_putself,
12641 YARVINSN_putobject,
12642 YARVINSN_putspecialobject,
12643 YARVINSN_putstring,
12644 YARVINSN_concatstrings,
12645 YARVINSN_anytostring,
12646 YARVINSN_toregexp,
12647 YARVINSN_intern,
12648 YARVINSN_newarray,
12649 YARVINSN_newarraykwsplat,
12650 YARVINSN_duparray,
12651 YARVINSN_duphash,
12652 YARVINSN_expandarray,
12653 YARVINSN_concatarray,
12654 YARVINSN_splatarray,
12655 YARVINSN_newhash,
12656 YARVINSN_newrange,
12657 YARVINSN_pop,
12658 YARVINSN_dup,
12659 YARVINSN_dupn,
12660 YARVINSN_swap,
12661 YARVINSN_opt_reverse,
12662 YARVINSN_topn,
12663 YARVINSN_setn,
12664 YARVINSN_adjuststack,
12665 YARVINSN_defined,
12666 YARVINSN_checkmatch,
12667 YARVINSN_checkkeyword,
12668 YARVINSN_checktype,
12669 YARVINSN_defineclass,
12670 YARVINSN_definemethod,
12671 YARVINSN_definesmethod,
12672 YARVINSN_send,
12673 YARVINSN_opt_send_without_block,
12674 YARVINSN_objtostring,
12675 YARVINSN_opt_str_freeze,
12676 YARVINSN_opt_nil_p,
12677 YARVINSN_opt_str_uminus,
12678 YARVINSN_opt_newarray_max,
12679 YARVINSN_opt_newarray_min,
12680 YARVINSN_invokesuper,
12681 YARVINSN_invokeblock,
12682 YARVINSN_leave,
12683 YARVINSN_throw,
12684 YARVINSN_jump,
12685 YARVINSN_branchif,
12686 YARVINSN_branchunless,
12687 YARVINSN_branchnil,
12688 YARVINSN_once,
12689 YARVINSN_opt_case_dispatch,
12690 YARVINSN_opt_plus,
12691 YARVINSN_opt_minus,
12692 YARVINSN_opt_mult,
12693 YARVINSN_opt_div,
12694 YARVINSN_opt_mod,
12695 YARVINSN_opt_eq,
12696 YARVINSN_opt_neq,
12697 YARVINSN_opt_lt,
12698 YARVINSN_opt_le,
12699 YARVINSN_opt_gt,
12700 YARVINSN_opt_ge,
12701 YARVINSN_opt_ltlt,
12702 YARVINSN_opt_and,
12703 YARVINSN_opt_or,
12704 YARVINSN_opt_aref,
12705 YARVINSN_opt_aset,
12706 YARVINSN_opt_aset_with,
12707 YARVINSN_opt_aref_with,
12708 YARVINSN_opt_length,
12709 YARVINSN_opt_size,
12710 YARVINSN_opt_empty_p,
12711 YARVINSN_opt_succ,
12712 YARVINSN_opt_not,
12713 YARVINSN_opt_regexpmatch2,
12714 YARVINSN_invokebuiltin,
12715 YARVINSN_opt_invokebuiltin_delegate,
12716 YARVINSN_opt_invokebuiltin_delegate_leave,
12717 YARVINSN_getlocal_WC_0,
12718 YARVINSN_getlocal_WC_1,
12719 YARVINSN_setlocal_WC_0,
12720 YARVINSN_setlocal_WC_1,
12721 YARVINSN_putobject_INT2FIX_0_,
12722 YARVINSN_putobject_INT2FIX_1_,
12723 YARVINSN_trace_nop,
12724 YARVINSN_trace_getlocal,
12725 YARVINSN_trace_setlocal,
12726 YARVINSN_trace_getblockparam,
12727 YARVINSN_trace_setblockparam,
12728 YARVINSN_trace_getblockparamproxy,
12729 YARVINSN_trace_getspecial,
12730 YARVINSN_trace_setspecial,
12731 YARVINSN_trace_getinstancevariable,
12732 YARVINSN_trace_setinstancevariable,
12733 YARVINSN_trace_getclassvariable,
12734 YARVINSN_trace_setclassvariable,
12735 YARVINSN_trace_opt_getconstant_path,
12736 YARVINSN_trace_getconstant,
12737 YARVINSN_trace_setconstant,
12738 YARVINSN_trace_getglobal,
12739 YARVINSN_trace_setglobal,
12740 YARVINSN_trace_putnil,
12741 YARVINSN_trace_putself,
12742 YARVINSN_trace_putobject,
12743 YARVINSN_trace_putspecialobject,
12744 YARVINSN_trace_putstring,
12745 YARVINSN_trace_concatstrings,
12746 YARVINSN_trace_anytostring,
12747 YARVINSN_trace_toregexp,
12748 YARVINSN_trace_intern,
12749 YARVINSN_trace_newarray,
12750 YARVINSN_trace_newarraykwsplat,
12751 YARVINSN_trace_duparray,
12752 YARVINSN_trace_duphash,
12753 YARVINSN_trace_expandarray,
12754 YARVINSN_trace_concatarray,
12755 YARVINSN_trace_splatarray,
12756 YARVINSN_trace_newhash,
12757 YARVINSN_trace_newrange,
12758 YARVINSN_trace_pop,
12759 YARVINSN_trace_dup,
12760 YARVINSN_trace_dupn,
12761 YARVINSN_trace_swap,
12762 YARVINSN_trace_opt_reverse,
12763 YARVINSN_trace_topn,
12764 YARVINSN_trace_setn,
12765 YARVINSN_trace_adjuststack,
12766 YARVINSN_trace_defined,
12767 YARVINSN_trace_checkmatch,
12768 YARVINSN_trace_checkkeyword,
12769 YARVINSN_trace_checktype,
12770 YARVINSN_trace_defineclass,
12771 YARVINSN_trace_definemethod,
12772 YARVINSN_trace_definesmethod,
12773 YARVINSN_trace_send,
12774 YARVINSN_trace_opt_send_without_block,
12775 YARVINSN_trace_objtostring,
12776 YARVINSN_trace_opt_str_freeze,
12777 YARVINSN_trace_opt_nil_p,
12778 YARVINSN_trace_opt_str_uminus,
12779 YARVINSN_trace_opt_newarray_max,
12780 YARVINSN_trace_opt_newarray_min,
12781 YARVINSN_trace_invokesuper,
12782 YARVINSN_trace_invokeblock,
12783 YARVINSN_trace_leave,
12784 YARVINSN_trace_throw,
12785 YARVINSN_trace_jump,
12786 YARVINSN_trace_branchif,
12787 YARVINSN_trace_branchunless,
12788 YARVINSN_trace_branchnil,
12789 YARVINSN_trace_once,
12790 YARVINSN_trace_opt_case_dispatch,
12791 YARVINSN_trace_opt_plus,
12792 YARVINSN_trace_opt_minus,
12793 YARVINSN_trace_opt_mult,
12794 YARVINSN_trace_opt_div,
12795 YARVINSN_trace_opt_mod,
12796 YARVINSN_trace_opt_eq,
12797 YARVINSN_trace_opt_neq,
12798 YARVINSN_trace_opt_lt,
12799 YARVINSN_trace_opt_le,
12800 YARVINSN_trace_opt_gt,
12801 YARVINSN_trace_opt_ge,
12802 YARVINSN_trace_opt_ltlt,
12803 YARVINSN_trace_opt_and,
12804 YARVINSN_trace_opt_or,
12805 YARVINSN_trace_opt_aref,
12806 YARVINSN_trace_opt_aset,
12807 YARVINSN_trace_opt_aset_with,
12808 YARVINSN_trace_opt_aref_with,
12809 YARVINSN_trace_opt_length,
12810 YARVINSN_trace_opt_size,
12811 YARVINSN_trace_opt_empty_p,
12812 YARVINSN_trace_opt_succ,
12813 YARVINSN_trace_opt_not,
12814 YARVINSN_trace_opt_regexpmatch2,
12815 YARVINSN_trace_invokebuiltin,
12816 YARVINSN_trace_opt_invokebuiltin_delegate,
12817 YARVINSN_trace_opt_invokebuiltin_delegate_leave,
12818 YARVINSN_trace_getlocal_WC_0,
12819 YARVINSN_trace_getlocal_WC_1,
12820 YARVINSN_trace_setlocal_WC_0,
12821 YARVINSN_trace_setlocal_WC_1,
12822 YARVINSN_trace_putobject_INT2FIX_0_,
12823 YARVINSN_trace_putobject_INT2FIX_1_,
12824 VM_INSTRUCTION_SIZE
12825};
12826extern rb_method_definition_t *rb_method_definition_create(rb_method_type_t type, ID mid);
12827extern void rb_method_definition_set(const rb_method_entry_t *me, rb_method_definition_t *def, void *opts);
12828extern int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2);
12829extern VALUE rb_make_no_method_exception(VALUE exc, VALUE format, VALUE obj,
12830 int argc, const VALUE *argv, int priv);
12831static rb_control_frame_t *vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
12832static VALUE
12833ruby_vm_special_exception_copy(VALUE exc)
12834{
12835 VALUE e = rb_obj_alloc(rb_class_real(RBASIC_CLASS(exc)));
12836 rb_obj_copy_ivar(e, exc);
12837 return e;
12838}
12839__attribute__((__noreturn__)) static void ec_stack_overflow(rb_execution_context_t *ec, int);
12840static void
12841ec_stack_overflow(rb_execution_context_t *ec, int setup)
12842{
12843 VALUE mesg = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_sysstack];
12844 ec->raised_flag = RAISED_STACKOVERFLOW;
12845 if (setup) {
12846 VALUE at = rb_ec_backtrace_object(ec);
12847 mesg = ruby_vm_special_exception_copy(mesg);
12848 rb_ivar_set(mesg, idBt, at);
12849 rb_ivar_set(mesg, idBt_locations, at);
12850 }
12851 ec->errinfo = mesg;
12852 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12853}
12854__attribute__((__noreturn__)) static void vm_stackoverflow(void);
12855__attribute__((__noinline__)) static __attribute__((__cold__)) void vm_stackoverflow(void);
12856static void
12857vm_stackoverflow(void)
12858{
12859 ec_stack_overflow(rb_current_execution_context(1), 1);
12860}
12861__attribute__((__noreturn__)) static void rb_ec_stack_overflow(rb_execution_context_t *ec, int crit);
12862static void
12863rb_ec_stack_overflow(rb_execution_context_t *ec, int crit)
12864{
12865 if (rb_during_gc()) {
12866 rb_bug("system stack overflow during GC. Faulty native extension?");
12867 }
12868 if (crit) {
12869 ec->raised_flag = RAISED_STACKOVERFLOW;
12870 ec->errinfo = rb_ec_vm_ptr(ec)->special_exceptions[ruby_error_stackfatal];
12871 rb_ec_tag_jump(ec, RUBY_TAG_RAISE);
12872 }
12873 ec_stack_overflow(ec, 1);
12874}
12875__extension__ _Static_assert((-2) == -2, "VM_ENV_DATA_INDEX_ME_CREF" ": " "VM_ENV_DATA_INDEX_ME_CREF == -2");
12876__extension__ _Static_assert((-1) == -1, "VM_ENV_DATA_INDEX_SPECVAL" ": " "VM_ENV_DATA_INDEX_SPECVAL == -1");
12877__extension__ _Static_assert(( 0) == -0, "VM_ENV_DATA_INDEX_FLAGS" ": " "VM_ENV_DATA_INDEX_FLAGS == -0");
12878static void
12879vm_push_frame(rb_execution_context_t *ec,
12880 const rb_iseq_t *iseq,
12881 VALUE type,
12882 VALUE self,
12883 VALUE specval,
12884 VALUE cref_or_me,
12885 const VALUE *pc,
12886 VALUE *sp,
12887 int local_size,
12888 int stack_max)
12889{
12890 rb_control_frame_t *const cfp = ((ec->cfp)-1);
12891 ;
12892 ((void)0);
12893 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);
12894 ;
12895 for (int i=0; i < local_size; i++) {
12896 *sp++ = ((VALUE)RUBY_Qnil);
12897 }
12898 *sp++ = cref_or_me;
12899 *sp++ = specval ;
12900 *sp++ = type;
12901 *cfp = (const struct rb_control_frame_struct) {
12902 .pc = pc,
12903 .sp = sp,
12904 .iseq = iseq,
12905 .self = self,
12906 .ep = sp - 1,
12907 .block_code = ((void *)0),
12908 .__bp__ = sp,
12909 .jit_return = ((void *)0)
12910 };
12911 ec->cfp = cfp;
12912 if (0 == 2) {
12913 rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12914 }
12915 ;
12916}static inline
12917void
12918rb_vm_pop_frame_no_int(rb_execution_context_t *ec)
12919{
12920 rb_control_frame_t *cfp = ec->cfp;
12921 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12922 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12923 ec->cfp = ((cfp)+1);
12924}
12925static inline int
12926vm_pop_frame(rb_execution_context_t *ec, rb_control_frame_t *cfp, const VALUE *ep)
12927{
12928 VALUE flags = ep[( 0)];
12929 if ((((0) > 0) ? (0) : 0) >= 4) rb_gc_verify_internal_consistency();
12930 if (0 == 2) rb_vmdebug_stack_dump_raw(rb_current_execution_context(1), rb_current_execution_context(1)->cfp);
12931 rb_vm_check_ints(ec);
12932 ec->cfp = ((cfp)+1);
12933 return flags & VM_FRAME_FLAG_FINISH;
12934}
12935static void
12936rb_vm_pop_frame(rb_execution_context_t *ec)
12937{
12938 vm_pop_frame(ec, ec->cfp, ec->cfp->ep);
12939}static inline
12940VALUE
12941rb_vm_push_frame_fname(rb_execution_context_t *ec, VALUE fname)
12942{
12943 VALUE tmpbuf = rb_imemo_tmpbuf_auto_free_pointer();
12944 void *ptr = ruby_xcalloc(sizeof(struct rb_iseq_constant_body) + sizeof(struct rb_iseq_struct), 1);
12945 rb_imemo_tmpbuf_set_ptr(tmpbuf, ptr);
12946 struct rb_iseq_struct *dmy_iseq = (struct rb_iseq_struct *)ptr;
12947 struct rb_iseq_constant_body *dmy_body = (struct rb_iseq_constant_body *)&dmy_iseq[1];
12948 dmy_iseq->body = dmy_body;
12949 dmy_body->type = ISEQ_TYPE_TOP;
12950 dmy_body->location.pathobj = fname;
12951 vm_push_frame(ec,
12952 dmy_iseq,
12953 VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH,
12954 ec->cfp->self,
12955 0,
12956 ((VALUE)RUBY_Qfalse),
12957 ((void *)0),
12958 ec->cfp->sp,
12959 0,
12960 0);
12961 return tmpbuf;
12962}
12963static inline VALUE
12964rb_arity_error_new(int argc, int min, int max)
12965{
12966 VALUE err_mess = rb_sprintf("wrong number of arguments (given %d, expected %d", argc, min);
12967 if (min == max) {
12968 }
12969 else if (max == (-1)) {
12970 ((__builtin_constant_p("+") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((err_mess), ("+")));
12971 }
12972 else {
12973 rb_str_catf(err_mess, "..%d", max);
12974 }
12975 ((__builtin_constant_p(")") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((err_mess), (")")));
12976 return rb_exc_new_str(rb_eArgError, err_mess);
12977}
12978static void
12979rb_error_arity(int argc, int min, int max)
12980{
12981 rb_exc_raise(rb_arity_error_new(argc, min, max));
12982}
12983__attribute__((__noinline__)) static void vm_env_write_slowpath(const VALUE *ep, int index, VALUE v);
12984static void
12985vm_env_write_slowpath(const VALUE *ep, int index, VALUE v)
12986{
12987 rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep));
12988 VM_FORCE_WRITE(&ep[index], v);
12989 VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED);
12990 ((void)0);
12991}
12992static inline void
12993vm_env_write(const VALUE *ep, int index, VALUE v)
12994{
12995 VALUE flags = ep[( 0)];
12996 if ((__builtin_expect(!!((flags & VM_ENV_FLAG_WB_REQUIRED) == 0), 1))) {
12997 VM_STACK_ENV_WRITE(ep, index, v);
12998 }
12999 else {
13000 vm_env_write_slowpath(ep, index, v);
13001 }
13002}
13003static VALUE
13004rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler)
13005{
13006 if (block_handler == 0) {
13007 return ((VALUE)RUBY_Qnil);
13008 }
13009 else {
13010 switch (vm_block_handler_type(block_handler)) {
13011 case block_handler_type_iseq:
13012 case block_handler_type_ifunc:
13013 return rb_vm_make_proc(ec, VM_BH_TO_CAPT_BLOCK(block_handler), rb_cProc);
13014 case block_handler_type_symbol:
13015 return rb_sym_to_proc(VM_BH_TO_SYMBOL(block_handler));
13016 case block_handler_type_proc:
13017 return VM_BH_TO_PROC(block_handler);
13018 default:
13019 __builtin_unreachable();
13020 }
13021 }
13022}
13023static inline struct vm_svar *
13024lep_svar(const rb_execution_context_t *ec, const VALUE *lep)
13025{
13026 VALUE svar;
13027 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
13028 svar = lep[(-2)];
13029 }
13030 else {
13031 svar = ec->root_svar;
13032 }
13033 ((void)0);
13034 return (struct vm_svar *)svar;
13035}
13036static inline void
13037lep_svar_write(const rb_execution_context_t *ec, const VALUE *lep, const struct vm_svar *svar)
13038{
13039 ((void)0);
13040 if (lep && (ec == ((void *)0) || ec->root_lep != lep)) {
13041 vm_env_write(lep, (-2), (VALUE)svar);
13042 }
13043 else {
13044 rb_obj_write((VALUE)(rb_ec_thread_ptr(ec)->self), __extension__({
13045 ;
13046 ; __typeof__((VALUE *)(&ec->root_svar)) unaligned_member_access_result = ((VALUE *)(&ec->root_svar));
13047 ; unaligned_member_access_result; }), (VALUE)(svar), "../ruby-3.2.1/vm_insnhelper.c", 586);
13048 }
13049}
13050static VALUE
13051lep_svar_get(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key)
13052{
13053 const struct vm_svar *svar = lep_svar(ec, lep);
13054 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) return ((VALUE)RUBY_Qnil);
13055 switch (key) {
13056 case VM_SVAR_LASTLINE:
13057 return svar->lastline;
13058 case VM_SVAR_BACKREF:
13059 return svar->backref;
13060 default: {
13061 const VALUE ary = svar->others;
13062 if (RB_NIL_P(ary)) {
13063 return ((VALUE)RUBY_Qnil);
13064 }
13065 else {
13066 return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START);
13067 }
13068 }
13069 }
13070}
13071static struct vm_svar *
13072svar_new(VALUE obj)
13073{
13074 return (struct vm_svar *)rb_imemo_new(imemo_svar, ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), ((VALUE)RUBY_Qnil), obj);
13075}
13076static void
13077lep_svar_set(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, VALUE val)
13078{
13079 struct vm_svar *svar = lep_svar(ec, lep);
13080 if ((VALUE)svar == ((VALUE)RUBY_Qfalse) || imemo_type((VALUE)svar) != imemo_svar) {
13081 lep_svar_write(ec, lep, svar = svar_new((VALUE)svar));
13082 }
13083 switch (key) {
13084 case VM_SVAR_LASTLINE:
13085 rb_obj_write((VALUE)(svar), __extension__({
13086 ;
13087 ; __typeof__((VALUE *)(&svar->lastline)) unaligned_member_access_result = ((VALUE *)(&svar->lastline));
13088 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 632);
13089 return;
13090 case VM_SVAR_BACKREF:
13091 rb_obj_write((VALUE)(svar), __extension__({
13092 ;
13093 ; __typeof__((VALUE *)(&svar->backref)) unaligned_member_access_result = ((VALUE *)(&svar->backref));
13094 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 635);
13095 return;
13096 default: {
13097 VALUE ary = svar->others;
13098 if (RB_NIL_P(ary)) {
13099 rb_obj_write((VALUE)(svar), __extension__({
13100 ;
13101 ; __typeof__((VALUE *)(&svar->others)) unaligned_member_access_result = ((VALUE *)(&svar->others));
13102 ; unaligned_member_access_result; }), (VALUE)(ary = rb_ary_new()), "../ruby-3.2.1/vm_insnhelper.c", 641);
13103 }
13104 rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val);
13105 }
13106 }
13107}
13108static inline VALUE
13109vm_getspecial(const rb_execution_context_t *ec, const VALUE *lep, rb_num_t key, rb_num_t type)
13110{
13111 VALUE val;
13112 if (type == 0) {
13113 val = lep_svar_get(ec, lep, key);
13114 }
13115 else {
13116 VALUE backref = lep_svar_get(ec, lep, VM_SVAR_BACKREF);
13117 if (type & 0x01) {
13118 switch (type >> 1) {
13119 case '&':
13120 val = rb_reg_last_match(backref);
13121 break;
13122 case '`':
13123 val = rb_reg_match_pre(backref);
13124 break;
13125 case '\'':
13126 val = rb_reg_match_post(backref);
13127 break;
13128 case '+':
13129 val = rb_reg_match_last(backref);
13130 break;
13131 default:
13132 rb_bug("unexpected back-ref");
13133 }
13134 }
13135 else {
13136 val = rb_reg_nth_match((int)(type >> 1), backref);
13137 }
13138 }
13139 return val;
13140}
13141__attribute__((__pure__)) static rb_callable_method_entry_t *check_method_entry(VALUE obj, int can_be_svar);
13142static rb_callable_method_entry_t *
13143check_method_entry(VALUE obj, int can_be_svar)
13144{
13145 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
13146 switch (imemo_type(obj)) {
13147 case imemo_ment:
13148 return (rb_callable_method_entry_t *)obj;
13149 case imemo_cref:
13150 return ((void *)0);
13151 case imemo_svar:
13152 if (can_be_svar) {
13153 return check_method_entry(((struct vm_svar *)obj)->cref_or_me, 0);
13154 }
13155 default:
13156 return ((void *)0);
13157 }
13158}
13159static const rb_callable_method_entry_t *
13160rb_vm_frame_method_entry(const rb_control_frame_t *cfp)
13161{
13162 const VALUE *ep = cfp->ep;
13163 rb_callable_method_entry_t *me;
13164 while (!VM_ENV_LOCAL_P(ep)) {
13165 if ((me = check_method_entry(ep[(-2)], 0)) != ((void *)0)) return me;
13166 ep = VM_ENV_PREV_EP(ep);
13167 }
13168 return check_method_entry(ep[(-2)], 1);
13169}
13170static const rb_iseq_t *
13171method_entry_iseqptr(const rb_callable_method_entry_t *me)
13172{
13173 switch (me->def->type) {
13174 case VM_METHOD_TYPE_ISEQ:
13175 return me->def->body.iseq.iseqptr;
13176 default:
13177 return ((void *)0);
13178 }
13179}
13180static rb_cref_t *
13181method_entry_cref(const rb_callable_method_entry_t *me)
13182{
13183 switch (me->def->type) {
13184 case VM_METHOD_TYPE_ISEQ:
13185 return me->def->body.iseq.cref;
13186 default:
13187 return ((void *)0);
13188 }
13189}
13190__attribute__((__pure__)) static rb_cref_t *check_cref(VALUE, int);
13191static rb_cref_t *
13192check_cref(VALUE obj, int can_be_svar)
13193{
13194 if (obj == ((VALUE)RUBY_Qfalse)) return ((void *)0);
13195 switch (imemo_type(obj)) {
13196 case imemo_ment:
13197 return method_entry_cref((rb_callable_method_entry_t *)obj);
13198 case imemo_cref:
13199 return (rb_cref_t *)obj;
13200 case imemo_svar:
13201 if (can_be_svar) {
13202 return check_cref(((struct vm_svar *)obj)->cref_or_me, 0);
13203 }
13204 default:
13205 return ((void *)0);
13206 }
13207}
13208static inline rb_cref_t *
13209vm_env_cref(const VALUE *ep)
13210{
13211 rb_cref_t *cref;
13212 while (!VM_ENV_LOCAL_P(ep)) {
13213 if ((cref = check_cref(ep[(-2)], 0)) != ((void *)0)) return cref;
13214 ep = VM_ENV_PREV_EP(ep);
13215 }
13216 return check_cref(ep[(-2)], 1);
13217}
13218static int
13219is_cref(const VALUE v, int can_be_svar)
13220{
13221 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
13222 switch (imemo_type(v)) {
13223 case imemo_cref:
13224 return 1;
13225 case imemo_svar:
13226 if (can_be_svar) return is_cref(((struct vm_svar *)v)->cref_or_me, 0);
13227 default:
13228 break;
13229 }
13230 }
13231 return 0;
13232}
13233static int
13234vm_env_cref_by_cref(const VALUE *ep)
13235{
13236 while (!VM_ENV_LOCAL_P(ep)) {
13237 if (is_cref(ep[(-2)], 0)) return 1;
13238 ep = VM_ENV_PREV_EP(ep);
13239 }
13240 return is_cref(ep[(-2)], 1);
13241}
13242static rb_cref_t *
13243cref_replace_with_duplicated_cref_each_frame(const VALUE *vptr, int can_be_svar, VALUE parent)
13244{
13245 const VALUE v = *vptr;
13246 rb_cref_t *cref, *new_cref;
13247 if (RB_TYPE_P(v, RUBY_T_IMEMO)) {
13248 switch (imemo_type(v)) {
13249 case imemo_cref:
13250 cref = (rb_cref_t *)v;
13251 new_cref = vm_cref_dup(cref);
13252 if (parent) {
13253 rb_obj_write((VALUE)(parent), __extension__({
13254 ;
13255 ; __typeof__((VALUE *)(vptr)) unaligned_member_access_result = ((VALUE *)(vptr));
13256 ; unaligned_member_access_result; }), (VALUE)(new_cref), "../ruby-3.2.1/vm_insnhelper.c", 827);
13257 }
13258 else {
13259 VM_FORCE_WRITE(vptr, (VALUE)new_cref);
13260 }
13261 return (rb_cref_t *)new_cref;
13262 case imemo_svar:
13263 if (can_be_svar) {
13264 return cref_replace_with_duplicated_cref_each_frame(&((struct vm_svar *)v)->cref_or_me, 0, v);
13265 }
13266 case imemo_ment:
13267 rb_bug("cref_replace_with_duplicated_cref_each_frame: unreachable");
13268 default:
13269 break;
13270 }
13271 }
13272 return ((void *)0);
13273}
13274static rb_cref_t *
13275vm_cref_replace_with_duplicated_cref(const VALUE *ep)
13276{
13277 if (vm_env_cref_by_cref(ep)) {
13278 rb_cref_t *cref;
13279 VALUE envval;
13280 while (!VM_ENV_LOCAL_P(ep)) {
13281 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13282 if ((cref = cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 0, envval)) != ((void *)0)) {
13283 return cref;
13284 }
13285 ep = VM_ENV_PREV_EP(ep);
13286 }
13287 envval = VM_ENV_ESCAPED_P(ep) ? VM_ENV_ENVVAL(ep) : ((VALUE)RUBY_Qfalse);
13288 return cref_replace_with_duplicated_cref_each_frame(&ep[(-2)], 1, envval);
13289 }
13290 else {
13291 rb_bug("vm_cref_dup: unreachable");
13292 }
13293}
13294static rb_cref_t *
13295vm_get_cref(const VALUE *ep)
13296{
13297 rb_cref_t *cref = vm_env_cref(ep);
13298 if (cref != ((void *)0)) {
13299 return cref;
13300 }
13301 else {
13302 rb_bug("vm_get_cref: unreachable");
13303 }
13304}static inline
13305rb_cref_t *
13306rb_vm_get_cref(const VALUE *ep)
13307{
13308 return vm_get_cref(ep);
13309}
13310static rb_cref_t *
13311vm_ec_cref(const rb_execution_context_t *ec)
13312{
13313 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
13314 if (cfp == ((void *)0)) {
13315 return ((void *)0);
13316 }
13317 return vm_get_cref(cfp->ep);
13318}
13319static const rb_cref_t *
13320vm_get_const_key_cref(const VALUE *ep)
13321{
13322 const rb_cref_t *cref = vm_get_cref(ep);
13323 const rb_cref_t *key_cref = cref;
13324 while (cref) {
13325 if (RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13326 RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_USER1))) {
13327 return key_cref;
13328 }
13329 cref = CREF_NEXT(cref);
13330 }
13331 return ((void *)0);
13332}static inline
13333void
13334rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr)
13335{
13336 rb_cref_t *new_cref;
13337 while (cref) {
13338 if (CREF_CLASS(cref) == old_klass) {
13339 new_cref = vm_cref_new_use_prev(new_klass, METHOD_VISI_UNDEF, 0, cref, 0);
13340 *new_cref_ptr = new_cref;
13341 return;
13342 }
13343 new_cref = vm_cref_new_use_prev(CREF_CLASS(cref), METHOD_VISI_UNDEF, 0, cref, 0);
13344 cref = CREF_NEXT(cref);
13345 *new_cref_ptr = new_cref;
13346 new_cref_ptr = &new_cref->next;
13347 }
13348 *new_cref_ptr = ((void *)0);
13349}
13350static rb_cref_t *
13351vm_cref_push(const rb_execution_context_t *ec, VALUE klass, const VALUE *ep, int pushed_by_eval, int singleton)
13352{
13353 rb_cref_t *prev_cref = ((void *)0);
13354 if (ep) {
13355 prev_cref = vm_env_cref(ep);
13356 }
13357 else {
13358 rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(ec, ec->cfp);
13359 if (cfp) {
13360 prev_cref = vm_env_cref(cfp->ep);
13361 }
13362 }
13363 return vm_cref_new(klass, METHOD_VISI_PUBLIC, 0, prev_cref, pushed_by_eval, singleton);
13364}
13365static inline VALUE
13366vm_get_cbase(const VALUE *ep)
13367{
13368 const rb_cref_t *cref = vm_get_cref(ep);
13369 return CREF_CLASS_FOR_DEFINITION(cref);
13370}
13371static inline VALUE
13372vm_get_const_base(const VALUE *ep)
13373{
13374 const rb_cref_t *cref = vm_get_cref(ep);
13375 while (cref) {
13376 if (!CREF_PUSHED_BY_EVAL(cref)) {
13377 return CREF_CLASS_FOR_DEFINITION(cref);
13378 }
13379 cref = CREF_NEXT(cref);
13380 }
13381 return ((VALUE)RUBY_Qundef);
13382}
13383static inline void
13384vm_check_if_namespace(VALUE klass)
13385{
13386 if (!RB_TYPE_P(klass, RUBY_T_CLASS) && !RB_TYPE_P(klass, RUBY_T_MODULE)) {
13387 rb_raise(rb_eTypeError, "%+""l""i" "\v"" is not a class/module", klass);
13388 }
13389}
13390static inline void
13391vm_ensure_not_refinement_module(VALUE self)
13392{
13393 if (RB_TYPE_P(self, RUBY_T_MODULE) && RB_FL_TEST(self, RMODULE_IS_REFINEMENT)) {
13394 rb_warn("not defined at the refinement, but at the outer class/module");
13395 }
13396}
13397static inline VALUE
13398vm_get_iclass(const rb_control_frame_t *cfp, VALUE klass)
13399{
13400 return klass;
13401}
13402static inline VALUE
13403vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, _Bool allow_nil, int is_defined)
13404{
13405 void rb_const_warn_if_deprecated(const rb_const_entry_t *ce, VALUE klass, ID id);
13406 VALUE val;
13407 if (RB_NIL_P(orig_klass) && allow_nil) {
13408 const rb_cref_t *root_cref = vm_get_cref(ec->cfp->ep);
13409 const rb_cref_t *cref;
13410 VALUE klass = ((VALUE)RUBY_Qnil);
13411 while (root_cref && CREF_PUSHED_BY_EVAL(root_cref)) {
13412 root_cref = CREF_NEXT(root_cref);
13413 }
13414 cref = root_cref;
13415 while (cref && CREF_NEXT(cref)) {
13416 if (CREF_PUSHED_BY_EVAL(cref)) {
13417 klass = ((VALUE)RUBY_Qnil);
13418 }
13419 else {
13420 klass = CREF_CLASS(cref);
13421 }
13422 cref = CREF_NEXT(cref);
13423 if (!RB_NIL_P(klass)) {
13424 VALUE av, am = 0;
13425 rb_const_entry_t *ce;
13426 search_continue:
13427 if ((ce = rb_const_lookup(klass, id))) {
13428 rb_const_warn_if_deprecated(ce, klass, id);
13429 val = ce->value;
13430 if (RB_UNDEF_P(val)) {
13431 if (am == klass) break;
13432 am = klass;
13433 if (is_defined) return 1;
13434 if (rb_autoloading_value(klass, id, &av, ((void *)0))) return av;
13435 rb_autoload_load(klass, id);
13436 goto search_continue;
13437 }
13438 else {
13439 if (is_defined) {
13440 return 1;
13441 }
13442 else {
13443 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13444 if (!rb_ractor_shareable_p(val)) {
13445 rb_raise(rb_eRactorIsolationError,
13446 "can not access non-shareable objects in constant %""l""i" "\v""::%s by non-main ractor.", rb_class_path(klass), rb_id2name(id));
13447 }
13448 }
13449 return val;
13450 }
13451 }
13452 }
13453 }
13454 }
13455 if (root_cref && !RB_NIL_P(CREF_CLASS(root_cref))) {
13456 klass = vm_get_iclass(ec->cfp, CREF_CLASS(root_cref));
13457 }
13458 else {
13459 klass = rb_class_of(ec->cfp->self);
13460 }
13461 if (is_defined) {
13462 return rb_const_defined(klass, id);
13463 }
13464 else {
13465 return rb_const_get(klass, id);
13466 }
13467 }
13468 else {
13469 vm_check_if_namespace(orig_klass);
13470 if (is_defined) {
13471 return rb_public_const_defined_from(orig_klass, id);
13472 }
13473 else {
13474 return rb_public_const_get_from(orig_klass, id);
13475 }
13476 }
13477}static inline
13478VALUE
13479rb_vm_get_ev_const(rb_execution_context_t *ec, VALUE orig_klass, ID id, VALUE allow_nil)
13480{
13481 return vm_get_ev_const(ec, orig_klass, id, allow_nil == ((VALUE)RUBY_Qtrue), 0);
13482}
13483static inline VALUE
13484vm_get_ev_const_chain(rb_execution_context_t *ec, const ID *segments)
13485{
13486 VALUE val = ((VALUE)RUBY_Qnil);
13487 int idx = 0;
13488 int allow_nil = 1;
13489 if (segments[0] == idNULL) {
13490 val = rb_cObject;
13491 idx++;
13492 allow_nil = 0;
13493 }
13494 while (segments[idx]) {
13495 ID id = segments[idx++];
13496 val = vm_get_ev_const(ec, val, id, allow_nil, 0);
13497 allow_nil = 0;
13498 }
13499 return val;
13500}
13501static inline VALUE
13502vm_get_cvar_base(const rb_cref_t *cref, const rb_control_frame_t *cfp, int top_level_raise)
13503{
13504 VALUE klass;
13505 if (!cref) {
13506 rb_bug("vm_get_cvar_base: no cref");
13507 }
13508 while (CREF_NEXT(cref) &&
13509 (RB_NIL_P(CREF_CLASS(cref)) || RB_FL_TEST(CREF_CLASS(cref), ((VALUE)RUBY_FL_SINGLETON)) ||
13510 CREF_PUSHED_BY_EVAL(cref) || CREF_SINGLETON(cref))) {
13511 cref = CREF_NEXT(cref);
13512 }
13513 if (top_level_raise && !CREF_NEXT(cref)) {
13514 rb_raise(rb_eRuntimeError, "class variable access from toplevel");
13515 }
13516 klass = vm_get_iclass(cfp, CREF_CLASS(cref));
13517 if (RB_NIL_P(klass)) {
13518 rb_raise(rb_eTypeError, "no class variables available");
13519 }
13520 return klass;
13521}
13522__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);
13523static inline void
13524fill_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)
13525{
13526 if (is_attr) {
13527 vm_cc_attr_index_set(cc, index, shape_id);
13528 }
13529 else {
13530 vm_ic_attr_index_set(iseq, ic, index, shape_id);
13531 }
13532}
13533__attribute__ ((__always_inline__)) static VALUE vm_getivar(VALUE, ID, const rb_iseq_t *, IVC, const struct rb_callcache *, int);
13534static inline VALUE
13535vm_getivar(VALUE obj, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13536{
13537 VALUE val = ((VALUE)RUBY_Qundef);
13538 shape_id_t shape_id;
13539 VALUE * ivar_list;
13540 if (RB_SPECIAL_CONST_P(obj)) {
13541 return ((VALUE)RUBY_Qnil);
13542 }
13543 shape_id = RBASIC_SHAPE_ID(obj);
13544 switch (RB_BUILTIN_TYPE(obj)) {
13545 case RUBY_T_OBJECT:
13546 ivar_list = ROBJECT_IVPTR(obj);
13547 ((void)0);
13548 break;
13549 case RUBY_T_CLASS:
13550 case RUBY_T_MODULE:
13551 {
13552 if ((__builtin_expect(!!(!rb_ractor_main_p()), 0))) {
13553 goto general_path;
13554 }
13555 ivar_list = (((rb_classext_t *)((char *)(obj) + sizeof(struct RClass)))->iv_ptr);
13556 break;
13557 }
13558 default:
13559 if (RB_FL_TEST_RAW(obj, ((VALUE)RUBY_FL_EXIVAR))) {
13560 struct gen_ivtbl *ivtbl;
13561 rb_gen_ivtbl_get(obj, id, &ivtbl);
13562 ivar_list = ivtbl->ivptr;
13563 }
13564 else {
13565 return ((VALUE)RUBY_Qnil);
13566 }
13567 }
13568 shape_id_t cached_id;
13569 attr_index_t index;
13570 if (is_attr) {
13571 vm_cc_atomic_shape_and_index(cc, &cached_id, &index);
13572 }
13573 else {
13574 vm_ic_atomic_shape_and_index(ic, &cached_id, &index);
13575 }
13576 if ((__builtin_expect(!!(cached_id == shape_id), 1))) {
13577 ((void)0);
13578 if (index == (attr_index_t)-1) {
13579 return ((VALUE)RUBY_Qnil);
13580 }
13581 val = ivar_list[index];
13582 ((void)0);
13583 }
13584 else {
13585 rb_shape_t *shape = rb_shape_get_shape_by_id(shape_id);
13586 if (shape_id == ((5 * 2) + 1)) {
13587 if (!rb_id_table_lookup(ROBJECT_IV_HASH(obj), id, &val)) {
13588 val = ((VALUE)RUBY_Qnil);
13589 }
13590 }
13591 else {
13592 if (rb_shape_get_iv_index(shape, id, &index)) {
13593 fill_ivar_cache(iseq, ic, cc, is_attr, index, shape_id);
13594 val = ivar_list[index];
13595 ((void)0);
13596 }
13597 else {
13598 if (is_attr) {
13599 vm_cc_attr_index_initialize(cc, shape_id);
13600 }
13601 else {
13602 vm_ic_attr_index_initialize(ic, shape_id);
13603 }
13604 val = ((VALUE)RUBY_Qnil);
13605 }
13606 }
13607 }
13608 ((void)0);
13609 return val;
13610general_path:
13611 ((void)0);
13612 if (is_attr) {
13613 return rb_attr_get(obj, id);
13614 }
13615 else {
13616 return rb_ivar_get(obj, id);
13617 }
13618}
13619static void
13620populate_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)
13621{
13622 ((void)0);
13623 if (is_attr) {
13624 vm_cc_attr_index_set(cc, index, next_shape_id);
13625 }
13626 else {
13627 vm_ic_attr_index_set(iseq, ic, index, next_shape_id);
13628 }
13629}
13630__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);
13631__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic);
13632__attribute__((__noinline__)) static VALUE vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc);
13633static VALUE
13634vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
13635{
13636 switch (RB_BUILTIN_TYPE(obj)) {
13637 case RUBY_T_OBJECT:
13638 {
13639 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
13640 attr_index_t index = rb_obj_ivar_set(obj, id, val);
13641 shape_id_t next_shape_id = ROBJECT_SHAPE_ID(obj);
13642 if (next_shape_id != ((5 * 2) + 1)) {
13643 populate_cache(index, next_shape_id, id, iseq, ic, cc, is_attr);
13644 }
13645 ((void)0);
13646 return val;
13647 }
13648 case RUBY_T_CLASS:
13649 case RUBY_T_MODULE:
13650 break;
13651 default:
13652 {
13653 rb_ivar_set(obj, id, val);
13654 shape_id_t next_shape_id = rb_shape_get_shape_id(obj);
13655 rb_shape_t *next_shape = rb_shape_get_shape_by_id(next_shape_id);
13656 attr_index_t index;
13657 if (rb_shape_get_iv_index(next_shape, id, &index)) {
13658 if (index >= (attr_index_t)(-1)) {
13659 rb_raise(rb_eArgError, "too many instance variables");
13660 }
13661 populate_cache(index, next_shape_id, id, iseq, ic, cc, is_attr);
13662 }
13663 else {
13664 rb_bug("didn't find the id\n");
13665 }
13666 return val;
13667 }
13668 }
13669 ((void)0);
13670 return rb_ivar_set(obj, id, val);
13671}
13672static VALUE
13673vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic)
13674{
13675 return vm_setivar_slowpath(obj, id, val, iseq, ic, ((void *)0), 0);
13676}
13677static VALUE
13678vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc)
13679{
13680 return vm_setivar_slowpath(obj, id, val, ((void *)0), ((void *)0), cc, 1);
13681}
13682__attribute__((__noinline__)) static VALUE vm_setivar_default(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index);
13683static VALUE
13684vm_setivar_default(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index)
13685{
13686 shape_id_t shape_id = RBASIC_SHAPE_ID(obj);
13687 struct gen_ivtbl *ivtbl = 0;
13688 if (shape_id == dest_shape_id) {
13689 ((void)0);
13690 rb_gen_ivtbl_get(obj, 0, &ivtbl);
13691 }
13692 else if (dest_shape_id != (((uintptr_t)1 << 32) - 1)) {
13693 rb_shape_t * dest_shape = rb_shape_get_shape_by_id(dest_shape_id);
13694 shape_id_t source_shape_id = dest_shape->parent_id;
13695 if (shape_id == source_shape_id && dest_shape->edge_name == id && dest_shape->type == SHAPE_IVAR) {
13696 ivtbl = rb_ensure_generic_iv_list_size(obj, index + 1);
13697 RBASIC_SET_SHAPE_ID(obj, dest_shape_id);
13698 }
13699 else {
13700 return ((VALUE)RUBY_Qundef);
13701 }
13702 }
13703 else {
13704 return ((VALUE)RUBY_Qundef);
13705 }
13706 VALUE *ptr = ivtbl->ivptr;
13707 rb_obj_write((VALUE)(obj), __extension__({
13708 ;
13709 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13710 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 1423);
13711 ((void)0);
13712 return val;
13713}
13714static inline VALUE
13715vm_setivar(VALUE obj, ID id, VALUE val, shape_id_t dest_shape_id, attr_index_t index)
13716{
13717 switch (RB_BUILTIN_TYPE(obj)) {
13718 case RUBY_T_OBJECT:
13719 {
13720 ((void)0);
13721 shape_id_t shape_id = ROBJECT_SHAPE_ID(obj);
13722 ((void)0);
13723 if ((__builtin_expect(!!(shape_id == dest_shape_id), 1))) {
13724 ((void)0);
13725 ((void)0);
13726 }
13727 else if (dest_shape_id != (((uintptr_t)1 << 32) - 1)) {
13728 rb_shape_t *dest_shape = rb_shape_get_shape_by_id(dest_shape_id);
13729 shape_id_t source_shape_id = dest_shape->parent_id;
13730 if (shape_id == source_shape_id && dest_shape->edge_name == id) {
13731 ((void)0);
13732 ROBJECT_SET_SHAPE_ID(obj, dest_shape_id);
13733 ((void)0);
13734 ((void)0);
13735 }
13736 else {
13737 break;
13738 }
13739 }
13740 else {
13741 break;
13742 }
13743 VALUE *ptr = ROBJECT_IVPTR(obj);
13744 ((void)0);
13745 rb_obj_write((VALUE)(obj), __extension__({
13746 ;
13747 ; __typeof__((VALUE *)(&ptr[index])) unaligned_member_access_result = ((VALUE *)(&ptr[index]));
13748 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 1469);
13749 ((void)0);
13750 return val;
13751 }
13752 break;
13753 case RUBY_T_CLASS:
13754 case RUBY_T_MODULE:
13755 ((void)0);
13756 default:
13757 break;
13758 }
13759 return ((VALUE)RUBY_Qundef);
13760}
13761static VALUE
13762update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic)
13763{
13764 VALUE defined_class = 0;
13765 VALUE cvar_value = rb_cvar_find(klass, id, &defined_class);
13766 if (RB_TYPE_P(defined_class, RUBY_T_ICLASS)) {
13767 defined_class = ((struct RBasic *)(defined_class))->klass;
13768 }
13769 struct rb_id_table *rb_cvc_tbl = (((rb_classext_t *)((char *)(defined_class) + sizeof(struct RClass)))->cvc_tbl);
13770 if (!rb_cvc_tbl) {
13771 rb_bug("the cvc table should be set");
13772 }
13773 VALUE ent_data;
13774 if (!rb_id_table_lookup(rb_cvc_tbl, id, &ent_data)) {
13775 rb_bug("should have cvar cache entry");
13776 }
13777 struct rb_cvar_class_tbl_entry *ent = (void *)ent_data;
13778 ent->global_cvar_state = (ruby_vm_global_cvar_state);
13779 ic->entry = ent;
13780 (rb_obj_written((VALUE)(iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(ent->class_value), "../ruby-3.2.1/vm_insnhelper.c", 1510));
13781 return cvar_value;
13782}
13783static inline VALUE
13784vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, ICVARC ic)
13785{
13786 const rb_cref_t *cref;
13787 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state) && (__builtin_expect(!!(rb_ractor_main_p()), 1))) {
13788 ((void)0);
13789 VALUE v = rb_ivar_lookup(ic->entry->class_value, id, ((VALUE)RUBY_Qundef));
13790 ((void)0);
13791 return v;
13792 }
13793 cref = vm_get_cref(((((reg_cfp)->ep))));
13794 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13795 return update_classvariable_cache(iseq, klass, id, ic);
13796}static inline
13797VALUE
13798rb_vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, ICVARC ic)
13799{
13800 return vm_getclassvariable(iseq, cfp, id, ic);
13801}
13802static inline void
13803vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic)
13804{
13805 const rb_cref_t *cref;
13806 if (ic->entry && ic->entry->global_cvar_state == (ruby_vm_global_cvar_state)) {
13807 ((void)0);
13808 rb_class_ivar_set(ic->entry->class_value, id, val);
13809 return;
13810 }
13811 cref = vm_get_cref(((((reg_cfp)->ep))));
13812 VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
13813 rb_cvar_set(klass, id, val);
13814 update_classvariable_cache(iseq, klass, id, ic);
13815}static inline
13816void
13817rb_vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID id, VALUE val, ICVARC ic)
13818{
13819 vm_setclassvariable(iseq, cfp, id, val, ic);
13820}
13821static inline VALUE
13822vm_getinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, IVC ic)
13823{
13824 return vm_getivar(obj, id, iseq, ic, ((void *)0), 0);
13825}
13826static inline void
13827vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13828{
13829 if (RB_SPECIAL_CONST_P(obj)) {
13830 rb_error_frozen_object(obj);
13831 return;
13832 }
13833 shape_id_t dest_shape_id;
13834 attr_index_t index;
13835 vm_ic_atomic_shape_and_index(ic, &dest_shape_id, &index);
13836 if ((__builtin_expect(!!(RB_UNDEF_P(vm_setivar(obj, id, val, dest_shape_id, index))), 0))) {
13837 switch (RB_BUILTIN_TYPE(obj)) {
13838 case RUBY_T_OBJECT:
13839 case RUBY_T_CLASS:
13840 case RUBY_T_MODULE:
13841 break;
13842 default:
13843 if (!RB_UNDEF_P(vm_setivar_default(obj, id, val, dest_shape_id, index))) {
13844 return;
13845 }
13846 }
13847 vm_setivar_slowpath_ivar(obj, id, val, iseq, ic);
13848 }
13849}static inline
13850void
13851rb_vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC ic)
13852{
13853 vm_setinstancevariable(iseq, obj, id, val, ic);
13854}
13855static VALUE
13856vm_throw_continue(const rb_execution_context_t *ec, VALUE err)
13857{
13858 if (RB_FIXNUM_P(err)) {
13859 ec->tag->state = RB_FIX2INT(err);
13860 }
13861 else if (RB_SYMBOL_P(err)) {
13862 ec->tag->state = RUBY_TAG_THROW;
13863 }
13864 else if (imemo_throw_data_p((VALUE)err)) {
13865 ec->tag->state = THROW_DATA_STATE((struct vm_throw_data *)err);
13866 }
13867 else {
13868 ec->tag->state = RUBY_TAG_RAISE;
13869 }
13870 return err;
13871}
13872static VALUE
13873vm_throw_start(const rb_execution_context_t *ec, rb_control_frame_t *const reg_cfp, enum ruby_tag_type state,
13874 const int flag, const VALUE throwobj)
13875{
13876 const rb_control_frame_t *escape_cfp = ((void *)0);
13877 const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec);
13878 if (flag != 0) {
13879 }
13880 else if (state == RUBY_TAG_BREAK) {
13881 int is_orphan = 1;
13882 const VALUE *ep = ((((reg_cfp)->ep)));
13883 const rb_iseq_t *base_iseq = ((((reg_cfp)))->iseq);
13884 escape_cfp = reg_cfp;
13885 while (((base_iseq)->body)->type != ISEQ_TYPE_BLOCK) {
13886 if (((escape_cfp->iseq)->body)->type == ISEQ_TYPE_CLASS) {
13887 escape_cfp = ((escape_cfp)+1);
13888 ep = escape_cfp->ep;
13889 base_iseq = escape_cfp->iseq;
13890 }
13891 else {
13892 ep = VM_ENV_PREV_EP(ep);
13893 base_iseq = ((base_iseq)->body)->parent_iseq;
13894 escape_cfp = rb_vm_search_cf_from_ep(ec, escape_cfp, ep);
13895 ((void)0);
13896 }
13897 }
13898 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13899 is_orphan = 0;
13900 state = RUBY_TAG_RETURN;
13901 }
13902 else {
13903 ep = VM_ENV_PREV_EP(ep);
13904 while (escape_cfp < eocfp) {
13905 if (escape_cfp->ep == ep) {
13906 const rb_iseq_t *const iseq = escape_cfp->iseq;
13907 const VALUE epc = escape_cfp->pc - ((iseq)->body)->iseq_encoded;
13908 const struct iseq_catch_table *const ct = ((iseq)->body)->catch_table;
13909 unsigned int i;
13910 if (!ct) break;
13911 for (i=0; i < ct->size; i++) {
13912 const struct iseq_catch_table_entry *const entry =
13913 __extension__({
13914 ;
13915 ; __typeof__(&(ct)->entries[i]) unaligned_member_access_result = (&(ct)->entries[i]);
13916 ; unaligned_member_access_result; });
13917 if (entry->type == CATCH_TYPE_BREAK &&
13918 entry->iseq == base_iseq &&
13919 entry->start < epc && entry->end >= epc) {
13920 if (entry->cont == epc) {
13921 is_orphan = 0;
13922 }
13923 break;
13924 }
13925 }
13926 break;
13927 }
13928 escape_cfp = ((escape_cfp)+1);
13929 }
13930 }
13931 if (is_orphan) {
13932 rb_vm_localjump_error("break from proc-closure", throwobj, RUBY_TAG_BREAK);
13933 }
13934 }
13935 else if (state == RUBY_TAG_RETRY) {
13936 const VALUE *ep = VM_ENV_PREV_EP(((((reg_cfp)->ep))));
13937 escape_cfp = rb_vm_search_cf_from_ep(ec, reg_cfp, ep);
13938 }
13939 else if (state == RUBY_TAG_RETURN) {
13940 const VALUE *current_ep = ((((reg_cfp)->ep)));
13941 const VALUE *target_ep = ((void *)0), *target_lep, *ep = current_ep;
13942 int in_class_frame = 0;
13943 int toplevel = 1;
13944 escape_cfp = reg_cfp;
13945 while (!VM_ENV_LOCAL_P(ep)) {
13946 if (VM_ENV_FLAGS(ep, VM_FRAME_FLAG_LAMBDA) && target_ep == ((void *)0)) {
13947 target_ep = ep;
13948 }
13949 ep = VM_ENV_PREV_EP(ep);
13950 }
13951 target_lep = ep;
13952 while (escape_cfp < eocfp) {
13953 const VALUE *lep = VM_CF_LEP(escape_cfp);
13954 if (!target_lep) {
13955 target_lep = lep;
13956 }
13957 if (lep == target_lep &&
13958 VM_FRAME_RUBYFRAME_P(escape_cfp) &&
13959 ((escape_cfp->iseq)->body)->type == ISEQ_TYPE_CLASS) {
13960 in_class_frame = 1;
13961 target_lep = 0;
13962 }
13963 if (lep == target_lep) {
13964 if (VM_FRAME_LAMBDA_P(escape_cfp)) {
13965 toplevel = 0;
13966 if (in_class_frame) {
13967 goto valid_return;
13968 }
13969 else {
13970 const VALUE *tep = current_ep;
13971 while (target_lep != tep) {
13972 if (escape_cfp->ep == tep) {
13973 if (tep == target_ep) {
13974 goto valid_return;
13975 }
13976 else {
13977 goto unexpected_return;
13978 }
13979 }
13980 tep = VM_ENV_PREV_EP(tep);
13981 }
13982 }
13983 }
13984 else if (VM_FRAME_RUBYFRAME_P(escape_cfp)) {
13985 switch (((escape_cfp->iseq)->body)->type) {
13986 case ISEQ_TYPE_TOP:
13987 case ISEQ_TYPE_MAIN:
13988 if (toplevel) {
13989 if (in_class_frame) goto unexpected_return;
13990 if (target_ep == ((void *)0)) {
13991 goto valid_return;
13992 }
13993 else {
13994 goto unexpected_return;
13995 }
13996 }
13997 break;
13998 case ISEQ_TYPE_EVAL:
13999 case ISEQ_TYPE_CLASS:
14000 toplevel = 0;
14001 break;
14002 default:
14003 break;
14004 }
14005 }
14006 }
14007 if (escape_cfp->ep == target_lep && ((escape_cfp->iseq)->body)->type == ISEQ_TYPE_METHOD) {
14008 if (target_ep == ((void *)0)) {
14009 goto valid_return;
14010 }
14011 else {
14012 goto unexpected_return;
14013 }
14014 }
14015 escape_cfp = ((escape_cfp)+1);
14016 }
14017 unexpected_return:;
14018 rb_vm_localjump_error("unexpected return", throwobj, RUBY_TAG_RETURN);
14019 valid_return:;
14020 }
14021 else {
14022 rb_bug("isns(throw): unsupported throw type");
14023 }
14024 ec->tag->state = state;
14025 return (VALUE)THROW_DATA_NEW(throwobj, escape_cfp, state);
14026}
14027static VALUE
14028vm_throw(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
14029 rb_num_t throw_state, VALUE throwobj)
14030{
14031 const int state = (int)(throw_state & VM_THROW_STATE_MASK);
14032 const int flag = (int)(throw_state & VM_THROW_NO_ESCAPE_FLAG);
14033 if (state != 0) {
14034 return vm_throw_start(ec, reg_cfp, state, flag, throwobj);
14035 }
14036 else {
14037 return vm_throw_continue(ec, throwobj);
14038 }
14039}
14040static inline void
14041vm_expandarray(VALUE *sp, VALUE ary, rb_num_t num, int flag)
14042{
14043 int is_splat = flag & 0x01;
14044 rb_num_t space_size = num + is_splat;
14045 VALUE *base = sp - 1;
14046 const VALUE *ptr;
14047 rb_num_t len;
14048 const VALUE obj = ary;
14049 if (!RB_TYPE_P(ary, RUBY_T_ARRAY) && RB_NIL_P(ary = rb_check_array_type(ary))) {
14050 ary = obj;
14051 ptr = &ary;
14052 len = 1;
14053 }
14054 else {
14055 ptr = rb_array_const_ptr_transient(ary);
14056 len = (rb_num_t)rb_array_len(ary);
14057 }
14058 if (space_size == 0) {
14059 }
14060 else if (flag & 0x02) {
14061 rb_num_t i = 0, j;
14062 if (len < num) {
14063 for (i=0; i<num-len; i++) {
14064 *base++ = ((VALUE)RUBY_Qnil);
14065 }
14066 }
14067 for (j=0; i<num; i++, j++) {
14068 VALUE v = ptr[len - j - 1];
14069 *base++ = v;
14070 }
14071 if (is_splat) {
14072 *base = rb_ary_new_from_values(len - j, ptr);
14073 }
14074 }
14075 else {
14076 rb_num_t i;
14077 VALUE *bptr = &base[space_size - 1];
14078 for (i=0; i<num; i++) {
14079 if (len <= i) {
14080 for (; i<num; i++) {
14081 *bptr-- = ((VALUE)RUBY_Qnil);
14082 }
14083 break;
14084 }
14085 *bptr-- = ptr[i];
14086 }
14087 if (is_splat) {
14088 if (num > len) {
14089 *bptr = rb_ary_new();
14090 }
14091 else {
14092 *bptr = rb_ary_new_from_values(len - num, ptr + num);
14093 }
14094 }
14095 }
14096 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(ary); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
14097}
14098static VALUE vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
14099static VALUE vm_mtbl_dump(VALUE klass, ID target_mid);
14100static struct rb_class_cc_entries *
14101vm_ccs_create(VALUE klass, const rb_callable_method_entry_t *cme)
14102{
14103 struct rb_class_cc_entries *ccs = ((struct rb_class_cc_entries *)ruby_xmalloc(sizeof(struct rb_class_cc_entries)));
14104 ccs->capa = 0;
14105 ccs->len = 0;
14106 rb_obj_write((VALUE)(klass), __extension__({
14107 ;
14108 ; __typeof__((VALUE *)(&ccs->cme)) unaligned_member_access_result = ((VALUE *)(&ccs->cme));
14109 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.2.1/vm_insnhelper.c", 1898);
14110 (((rb_callable_method_entry_t *)cme)->flags |= ((VALUE)RUBY_FL_USER8));
14111 ccs->entries = ((void *)0);
14112 return ccs;
14113}
14114static void
14115vm_ccs_push(VALUE klass, struct rb_class_cc_entries *ccs, const struct rb_callinfo *ci, const struct rb_callcache *cc)
14116{
14117 if (! vm_cc_markable(cc)) {
14118 return;
14119 }
14120 else if (! vm_ci_markable(ci)) {
14121 return;
14122 }
14123 if ((__builtin_expect(!!(ccs->len == ccs->capa), 0))) {
14124 if (ccs->capa == 0) {
14125 ccs->capa = 1;
14126 ccs->entries = ((struct rb_class_cc_entries_entry *)ruby_xmalloc2((ccs->capa), sizeof(struct rb_class_cc_entries_entry)));
14127 }
14128 else {
14129 ccs->capa *= 2;
14130 ((ccs->entries) = ((struct rb_class_cc_entries_entry *)ruby_xrealloc2((void *)(ccs->entries), (ccs->capa), sizeof(struct rb_class_cc_entries_entry))));
14131 }
14132 }
14133 ((void)0);
14134 const int pos = ccs->len++;
14135 rb_obj_write((VALUE)(klass), __extension__({
14136 ;
14137 ; __typeof__((VALUE *)(&ccs->entries[pos].ci)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].ci));
14138 ; unaligned_member_access_result; }), (VALUE)(ci), "../ruby-3.2.1/vm_insnhelper.c", 1927);
14139 rb_obj_write((VALUE)(klass), __extension__({
14140 ;
14141 ; __typeof__((VALUE *)(&ccs->entries[pos].cc)) unaligned_member_access_result = ((VALUE *)(&ccs->entries[pos].cc));
14142 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 1928);
14143 if (0) {
14144 }
14145}
14146static const struct rb_callcache *
14147vm_search_method_slowpath0(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
14148{
14149 const struct rb_callcache *cc = rb_vm_search_method_slowpath(cd->ci, klass);
14150 cd->cc = cc;
14151 const struct rb_callcache *empty_cc =
14152 rb_vm_empty_cc();
14153 if (cd_owner && cc != empty_cc) (rb_obj_written((VALUE)(cd_owner), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 2110));
14154 ((void)0);
14155 return cc;
14156}
14157static const struct rb_callcache *
14158vm_search_method_fastpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klass)
14159{
14160 const struct rb_callcache *cc = cd->cc;
14161 if ((__builtin_expect(!!(vm_cc_class_check(cc, klass)), 1))) {
14162 if ((__builtin_expect(!!(!((vm_cc_cme(cc))->flags & ((VALUE)RUBY_FL_USER9))), 1))) {
14163 ((void)0);
14164 ((void)0);
14165 ((void)0);
14166 return cc;
14167 }
14168 ((void)0);
14169 }
14170 else {
14171 ((void)0);
14172 }
14173 return vm_search_method_slowpath0(cd_owner, cd, klass);
14174}
14175static const struct rb_callcache *
14176vm_search_method(VALUE cd_owner, struct rb_call_data *cd, VALUE recv)
14177{
14178 VALUE klass = rb_class_of(recv);
14179 ((void)0);
14180 ((void)0);
14181 return vm_search_method_fastpath(cd_owner, cd, klass);
14182}
14183typedef union {
14184 VALUE (*anyargs)();
14185 VALUE (*f00)(VALUE);
14186 VALUE (*f01)(VALUE, VALUE);
14187 VALUE (*f02)(VALUE, VALUE, VALUE);
14188 VALUE (*f03)(VALUE, VALUE, VALUE, VALUE);
14189 VALUE (*f04)(VALUE, VALUE, VALUE, VALUE, VALUE);
14190 VALUE (*f05)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14191 VALUE (*f06)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14192 VALUE (*f07)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14193 VALUE (*f08)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14194 VALUE (*f09)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14195 VALUE (*f10)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14196 VALUE (*f11)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14197 VALUE (*f12)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14198 VALUE (*f13)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14199 VALUE (*f14)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14200 VALUE (*f15)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
14201 VALUE (*fm1)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE);
14202} __attribute__((__transparent_union__)) cfunc_type;
14203static inline int
14204check_cfunc(const rb_callable_method_entry_t *me, cfunc_type func)
14205{
14206 if (! me) {
14207 return 0;
14208 }
14209 else {
14210 ((void)0);
14211 ((void)0);
14212 ((void)0);
14213 if (me->def->type != VM_METHOD_TYPE_CFUNC) {
14214 return 0;
14215 }
14216 else {
14217 return me->def->body.cfunc.func == func.anyargs;
14218 }
14219 }
14220}
14221static inline int
14222vm_method_cfunc_is(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv, cfunc_type func)
14223{
14224 ((void)0);
14225 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
14226 return check_cfunc(vm_cc_cme(cc), func);
14227}
14228static inline _Bool
14229FIXNUM_2_P(VALUE a, VALUE b)
14230{
14231 long x = a;
14232 long y = b;
14233 long z = x & y & 1;
14234 return z == 1;
14235}
14236static inline _Bool
14237FLONUM_2_P(VALUE a, VALUE b)
14238{
14239 long x = a;
14240 long y = b;
14241 long z = ((x ^ 2) | (y ^ 2)) & 3;
14242 return !z;
14243}
14244static VALUE
14245opt_equality_specialized(VALUE recv, VALUE obj)
14246{
14247 if (FIXNUM_2_P(recv, obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 0))) == 0), 1)))) {
14248 goto compare_by_identity;
14249 }
14250 else if (FLONUM_2_P(recv, obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
14251 goto compare_by_identity;
14252 }
14253 else if (RB_STATIC_SYM_P(recv) && RB_STATIC_SYM_P(obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 6))) == 0), 1)))) {
14254 goto compare_by_identity;
14255 }
14256 else if (RB_SPECIAL_CONST_P(recv)) {
14257 }
14258 else if (RBASIC_CLASS(recv) == rb_cFloat && RB_FLOAT_TYPE_P(obj) && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 1))) == 0), 1)))) {
14259 double a = rb_float_value_inline(recv);
14260 double b = rb_float_value_inline(obj);
14261 return ((a == b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14262 }
14263 else if (RBASIC_CLASS(recv) == rb_cString && ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_EQ)]&((1 << 2))) == 0), 1)))) {
14264 if (recv == obj) {
14265 return ((VALUE)RUBY_Qtrue);
14266 }
14267 else if (RB_TYPE_P(obj, RUBY_T_STRING)) {
14268 return rb_str_eql_internal(obj, recv);
14269 }
14270 }
14271 return ((VALUE)RUBY_Qundef);
14272 compare_by_identity:
14273 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14274}
14275static VALUE
14276opt_equality(const rb_iseq_t *cd_owner, VALUE recv, VALUE obj, CALL_DATA cd)
14277{
14278 ((void)0);
14279 VALUE val = opt_equality_specialized(recv, obj);
14280 if (!RB_UNDEF_P(val)) return val;
14281 if (!vm_method_cfunc_is(cd_owner, cd, recv, rb_obj_equal)) {
14282 return ((VALUE)RUBY_Qundef);
14283 }
14284 else {
14285 return ((recv == obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14286 }
14287}
14288extern VALUE rb_vm_call0(rb_execution_context_t *ec, VALUE, ID, int, const VALUE*, const rb_callable_method_entry_t *, int kw_splat);
14289extern VALUE rb_vm_call_with_refinements(rb_execution_context_t *, VALUE, ID, int, const VALUE *, int);
14290static VALUE
14291check_match(rb_execution_context_t *ec, VALUE pattern, VALUE target, enum vm_check_match_type type)
14292{
14293 switch (type) {
14294 case VM_CHECKMATCH_TYPE_WHEN:
14295 return pattern;
14296 case VM_CHECKMATCH_TYPE_RESCUE:
14297 if (!rb_obj_is_kind_of(pattern, rb_cModule)) {
14298 rb_raise(rb_eTypeError, "class or module required for rescue clause");
14299 }
14300 case VM_CHECKMATCH_TYPE_CASE: {
14301 return rb_vm_call_with_refinements(ec, pattern, idEqq, 1, &target, 0);
14302 }
14303 default:
14304 rb_bug("check_match: unreachable");
14305 }
14306}
14307static inline VALUE
14308double_cmp_lt(double a, double b)
14309{
14310 ;
14311 return ((a < b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14312}
14313static inline VALUE
14314double_cmp_le(double a, double b)
14315{
14316 ;
14317 return ((a <= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14318}
14319static inline VALUE
14320double_cmp_gt(double a, double b)
14321{
14322 ;
14323 return ((a > b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14324}
14325static inline VALUE
14326double_cmp_ge(double a, double b)
14327{
14328 ;
14329 return ((a >= b) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
14330}
14331static inline VALUE *
14332vm_base_ptr(const rb_control_frame_t *cfp)
14333{
14334 return cfp->__bp__;
14335}
14336__attribute__((__noreturn__)) static void raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc);
14337__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);
14338__attribute__((__noreturn__)) static void argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys);
14339VALUE rb_keyword_error_new(const char *error, VALUE keys);
14340static VALUE method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv,
14341 enum method_missing_reason call_status, int kw_splat);
14342__attribute__ ((__visibility__("default"))) extern
14343const rb_callable_method_entry_t *rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
14344struct args_info {
14345 VALUE *argv;
14346 int argc;
14347 int rest_index;
14348 int rest_dupped;
14349 const struct rb_callinfo_kwarg *kw_arg;
14350 VALUE *kw_argv;
14351 VALUE rest;
14352};
14353enum arg_setup_type {
14354 arg_setup_method,
14355 arg_setup_block
14356};
14357static inline void
14358arg_rest_dup(struct args_info *args)
14359{
14360 if (!args->rest_dupped) {
14361 args->rest = rb_ary_dup(args->rest);
14362 args->rest_dupped = 1;
14363 }
14364}
14365static inline int
14366args_argc(struct args_info *args)
14367{
14368 if (args->rest == ((VALUE)RUBY_Qfalse)) {
14369 return args->argc;
14370 }
14371 else {
14372 return args->argc + RARRAY_LENINT(args->rest) - args->rest_index;
14373 }
14374}
14375static inline void
14376args_extend(struct args_info *args, const int min_argc)
14377{
14378 int i;
14379 if (args->rest) {
14380 arg_rest_dup(args);
14381 ((void)0);
14382 for (i=args->argc + RARRAY_LENINT(args->rest); i<min_argc; i++) {
14383 rb_ary_push(args->rest, ((VALUE)RUBY_Qnil));
14384 }
14385 }
14386 else {
14387 for (i=args->argc; i<min_argc; i++) {
14388 args->argv[args->argc++] = ((VALUE)RUBY_Qnil);
14389 }
14390 }
14391}
14392static inline void
14393args_reduce(struct args_info *args, int over_argc)
14394{
14395 if (args->rest) {
14396 const long len = rb_array_len(args->rest);
14397 if (len > over_argc) {
14398 arg_rest_dup(args);
14399 rb_ary_resize(args->rest, len - over_argc);
14400 return;
14401 }
14402 else {
14403 args->rest = ((VALUE)RUBY_Qfalse);
14404 over_argc -= len;
14405 }
14406 }
14407 ((void)0);
14408 args->argc -= over_argc;
14409}
14410static inline int
14411args_check_block_arg0(struct args_info *args)
14412{
14413 VALUE ary = ((VALUE)RUBY_Qnil);
14414 if (args->rest && rb_array_len(args->rest) == 1) {
14415 VALUE arg0 = RARRAY_AREF(args->rest, 0);
14416 ary = rb_check_array_type(arg0);
14417 }
14418 else if (args->argc == 1) {
14419 VALUE arg0 = args->argv[0];
14420 ary = rb_check_array_type(arg0);
14421 args->argv[0] = arg0;
14422 }
14423 if (!RB_NIL_P(ary)) {
14424 args->rest = ary;
14425 args->rest_index = 0;
14426 args->argc = 0;
14427 return 1;
14428 }
14429 return 0;
14430}
14431static inline void
14432args_copy(struct args_info *args)
14433{
14434 if (args->rest != ((VALUE)RUBY_Qfalse)) {
14435 int argc = args->argc;
14436 args->argc = 0;
14437 arg_rest_dup(args);
14438 while (args->rest_index > 0 && argc > 0) {
14439 RARRAY_ASET(args->rest, --args->rest_index, args->argv[--argc]);
14440 }
14441 while (argc > 0) {
14442 rb_ary_unshift(args->rest, args->argv[--argc]);
14443 }
14444 }
14445 else if (args->argc > 0) {
14446 args->rest = rb_ary_new_from_values(args->argc, args->argv);
14447 args->rest_index = 0;
14448 args->rest_dupped = 1;
14449 args->argc = 0;
14450 }
14451}
14452static inline const VALUE *
14453args_rest_argv(struct args_info *args)
14454{
14455 return rb_array_const_ptr_transient(args->rest) + args->rest_index;
14456}
14457static inline VALUE
14458args_rest_array(struct args_info *args)
14459{
14460 VALUE ary;
14461 if (args->rest) {
14462 ary = rb_ary_behead(args->rest, args->rest_index);
14463 args->rest_index = 0;
14464 args->rest = 0;
14465 }
14466 else {
14467 ary = rb_ary_new();
14468 }
14469 return ary;
14470}
14471static int
14472args_kw_argv_to_hash(struct args_info *args)
14473{
14474 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14475 const VALUE *const passed_keywords = kw_arg->keywords;
14476 const int kw_len = kw_arg->keyword_len;
14477 VALUE h = rb_hash_new_with_size(kw_len);
14478 const int kw_start = args->argc - kw_len;
14479 const VALUE * const kw_argv = args->argv + kw_start;
14480 int i;
14481 args->argc = kw_start + 1;
14482 for (i=0; i<kw_len; i++) {
14483 rb_hash_aset(h, passed_keywords[i], kw_argv[i]);
14484 }
14485 args->argv[args->argc - 1] = h;
14486 return args->argc;
14487}
14488static inline void
14489args_setup_lead_parameters(struct args_info *args, int argc, VALUE *locals)
14490{
14491 if (args->argc >= argc) {
14492 args->argc -= argc;
14493 args->argv += argc;
14494 }
14495 else {
14496 int i, j;
14497 const VALUE *argv = args_rest_argv(args);
14498 for (i=args->argc, j=0; i<argc; i++, j++) {
14499 locals[i] = argv[j];
14500 }
14501 args->rest_index += argc - args->argc;
14502 args->argc = 0;
14503 }
14504}
14505static inline void
14506args_setup_post_parameters(struct args_info *args, int argc, VALUE *locals)
14507{
14508 long len;
14509 len = rb_array_len(args->rest);
14510 ruby_nonempty_memcpy((locals), (rb_array_const_ptr_transient(args->rest) + len - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
14511 rb_ary_resize(args->rest, len - argc);
14512}
14513static inline int
14514args_setup_opt_parameters(struct args_info *args, int opt_max, VALUE *locals)
14515{
14516 int i;
14517 if (args->argc >= opt_max) {
14518 args->argc -= opt_max;
14519 args->argv += opt_max;
14520 i = opt_max;
14521 }
14522 else {
14523 int j;
14524 i = args->argc;
14525 args->argc = 0;
14526 if (args->rest) {
14527 int len = RARRAY_LENINT(args->rest);
14528 const VALUE *argv = rb_array_const_ptr_transient(args->rest);
14529 for (; i<opt_max && args->rest_index < len; i++, args->rest_index++) {
14530 locals[i] = argv[args->rest_index];
14531 }
14532 }
14533 for (j=i; j<opt_max; j++) {
14534 locals[j] = ((VALUE)RUBY_Qnil);
14535 }
14536 }
14537 return i;
14538}
14539static inline void
14540args_setup_rest_parameter(struct args_info *args, VALUE *locals)
14541{
14542 *locals = args_rest_array(args);
14543}
14544static VALUE
14545make_unknown_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14546{
14547 int i;
14548 VALUE obj = rb_ary_hidden_new(1);
14549 for (i=0; i<passed_keyword_len; i++) {
14550 if (!RB_UNDEF_P(kw_argv[i])) {
14551 rb_ary_push(obj, passed_keywords[i]);
14552 }
14553 }
14554 return obj;
14555}
14556static VALUE
14557make_rest_kw_hash(const VALUE *passed_keywords, int passed_keyword_len, const VALUE *kw_argv)
14558{
14559 int i;
14560 VALUE obj = rb_hash_new_with_size(passed_keyword_len);
14561 for (i=0; i<passed_keyword_len; i++) {
14562 if (!RB_UNDEF_P(kw_argv[i])) {
14563 rb_hash_aset(obj, passed_keywords[i], kw_argv[i]);
14564 }
14565 }
14566 return obj;
14567}
14568static inline int
14569args_setup_kw_parameters_lookup(const ID key, VALUE *ptr, const VALUE *const passed_keywords, VALUE *passed_values, const int passed_keyword_len)
14570{
14571 int i;
14572 const VALUE keyname = rb_id2sym(key);
14573 for (i=0; i<passed_keyword_len; i++) {
14574 if (keyname == passed_keywords[i]) {
14575 *ptr = passed_values[i];
14576 passed_values[i] = ((VALUE)RUBY_Qundef);
14577 return 1;
14578 }
14579 }
14580 return 0;
14581}
14582static void
14583args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
14584 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
14585 VALUE *const locals)
14586{
14587 const ID *acceptable_keywords = ((iseq)->body)->param.keyword->table;
14588 const int req_key_num = ((iseq)->body)->param.keyword->required_num;
14589 const int key_num = ((iseq)->body)->param.keyword->num;
14590 const VALUE * const default_values = ((iseq)->body)->param.keyword->default_values;
14591 VALUE missing = 0;
14592 int i, di, found = 0;
14593 int unspecified_bits = 0;
14594 VALUE unspecified_bits_value = ((VALUE)RUBY_Qnil);
14595 for (i=0; i<req_key_num; i++) {
14596 ID key = acceptable_keywords[i];
14597 if (args_setup_kw_parameters_lookup(key, &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14598 found++;
14599 }
14600 else {
14601 if (!missing) missing = rb_ary_hidden_new(1);
14602 rb_ary_push(missing, rb_id2sym(key));
14603 }
14604 }
14605 if (missing) argument_kw_error(ec, iseq, "missing", missing);
14606 for (di=0; i<key_num; i++, di++) {
14607 if (args_setup_kw_parameters_lookup(acceptable_keywords[i], &locals[i], passed_keywords, passed_values, passed_keyword_len)) {
14608 found++;
14609 }
14610 else {
14611 if (RB_UNDEF_P(default_values[di])) {
14612 locals[i] = ((VALUE)RUBY_Qnil);
14613 if ((__builtin_expect(!!(i < (32-1)), 1))) {
14614 unspecified_bits |= 0x01 << di;
14615 }
14616 else {
14617 if (RB_NIL_P(unspecified_bits_value)) {
14618 int j;
14619 unspecified_bits_value = rb_hash_new();
14620 for (j=0; j<(32-1); j++) {
14621 if (unspecified_bits & (0x01 << j)) {
14622 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));
14623 }
14624 }
14625 }
14626 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));
14627 }
14628 }
14629 else {
14630 locals[i] = default_values[di];
14631 }
14632 }
14633 }
14634 if (((iseq)->body)->param.flags.has_kwrest) {
14635 const int rest_hash_index = key_num + 1;
14636 locals[rest_hash_index] = make_rest_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14637 }
14638 else {
14639 if (found != passed_keyword_len) {
14640 VALUE keys = make_unknown_kw_hash(passed_keywords, passed_keyword_len, passed_values);
14641 argument_kw_error(ec, iseq, "unknown", keys);
14642 }
14643 }
14644 if (RB_NIL_P(unspecified_bits_value)) {
14645 unspecified_bits_value = __builtin_choose_expr( __builtin_constant_p(unspecified_bits), ((VALUE)(unspecified_bits)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(unspecified_bits));
14646 }
14647 locals[key_num] = unspecified_bits_value;
14648}
14649static inline void
14650args_setup_kw_rest_parameter(VALUE keyword_hash, VALUE *locals, int kw_flag)
14651{
14652 if (RB_NIL_P(keyword_hash)) {
14653 keyword_hash = rb_hash_new();
14654 }
14655 else if (!(kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
14656 keyword_hash = rb_hash_dup(keyword_hash);
14657 }
14658 locals[0] = keyword_hash;
14659}
14660static inline void
14661args_setup_block_parameter(const rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE *locals)
14662{
14663 VALUE block_handler = calling->block_handler;
14664 *locals = rb_vm_bh_to_procval(ec, block_handler);
14665}
14666struct fill_values_arg {
14667 VALUE *keys;
14668 VALUE *vals;
14669 int argc;
14670};
14671static int
14672fill_keys_values(st_data_t key, st_data_t val, st_data_t ptr)
14673{
14674 struct fill_values_arg *arg = (struct fill_values_arg *)ptr;
14675 int i = arg->argc++;
14676 arg->keys[i] = (VALUE)key;
14677 arg->vals[i] = (VALUE)val;
14678 return ST_CONTINUE;
14679}
14680static inline int
14681ignore_keyword_hash_p(VALUE keyword_hash, const rb_iseq_t * const iseq, unsigned int * kw_flag, VALUE * converted_keyword_hash)
14682{
14683 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
14684 keyword_hash = rb_to_hash_type(keyword_hash);
14685 }
14686 if (!(*kw_flag & (0x01 << VM_CALL_KW_SPLAT_MUT_bit)) &&
14687 (((iseq)->body)->param.flags.has_kwrest ||
14688 ((iseq)->body)->param.flags.ruby2_keywords)) {
14689 *kw_flag |= (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14690 keyword_hash = rb_hash_dup(keyword_hash);
14691 }
14692 *converted_keyword_hash = keyword_hash;
14693 return !(((iseq)->body)->param.flags.has_kw) &&
14694 !(((iseq)->body)->param.flags.has_kwrest) &&
14695 RHASH_EMPTY_P(keyword_hash);
14696}
14697COLDFUNC static int
14698setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * const iseq,
14699 struct rb_calling_info *const calling,
14700 const struct rb_callinfo *ci,
14701 VALUE * const locals, const enum arg_setup_type arg_setup_type) {
14702 const int min_argc = ((iseq)->body)->param.lead_num + ((iseq)->body)->param.post_num;
14703 const int max_argc = (((iseq)->body)->param.flags.has_rest == 0) ? min_argc + ((iseq)->body)->param.opt_num : (-1);
14704 int given_argc;
14705 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));
14706 int opt_pc = 0, allow_autosplat = !kw_flag;
14707 struct args_info args_body, *args;
14708 VALUE keyword_hash = ((VALUE)RUBY_Qnil);
14709 VALUE * const orig_sp = ec->cfp->sp;
14710 unsigned int i;
14711 VALUE flag_keyword_hash = 0;
14712 VALUE splat_flagged_keyword_hash = 0;
14713 VALUE converted_keyword_hash = 0;
14714 VALUE rest_last = 0;
14715 ;
14716 for (i=calling->argc; i<((iseq)->body)->param.size; i++) {
14717 locals[i] = ((VALUE)RUBY_Qnil);
14718 }
14719 ec->cfp->sp = &locals[i];
14720 args = &args_body;
14721 given_argc = args->argc = calling->argc;
14722 args->argv = locals;
14723 args->rest_dupped = 0;
14724 if (kw_flag & (0x01 << VM_CALL_KWARG_bit)) {
14725 args->kw_arg = vm_ci_kwarg(ci);
14726 if (((iseq)->body)->param.flags.has_kw) {
14727 int kw_len = args->kw_arg->keyword_len;
14728 args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len))));
14729 args->argc -= kw_len;
14730 given_argc -= kw_len;
14731 ruby_nonempty_memcpy((args->kw_argv), (locals + args->argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len)));
14732 }
14733 else {
14734 args->kw_argv = ((void *)0);
14735 given_argc = args_kw_argv_to_hash(args);
14736 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14737 }
14738 }
14739 else {
14740 args->kw_arg = ((void *)0);
14741 args->kw_argv = ((void *)0);
14742 }
14743 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) {
14744 int len;
14745 args->rest = locals[--args->argc];
14746 args->rest_index = 0;
14747 len = RARRAY_LENINT(args->rest);
14748 given_argc += len - 1;
14749 rest_last = RARRAY_AREF(args->rest, len - 1);
14750 if (!kw_flag && len > 0) {
14751 if (RB_TYPE_P(rest_last, RUBY_T_HASH) &&
14752 (((struct RHash *)rest_last)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
14753 splat_flagged_keyword_hash = rest_last;
14754 rest_last = rb_hash_dup(rest_last);
14755 kw_flag |= (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit);
14756 }
14757 else {
14758 rest_last = 0;
14759 }
14760 }
14761 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14762 if (ignore_keyword_hash_p(rest_last, iseq, &kw_flag, &converted_keyword_hash)) {
14763 arg_rest_dup(args);
14764 rb_ary_pop(args->rest);
14765 given_argc--;
14766 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14767 }
14768 else {
14769 if (rest_last != converted_keyword_hash) {
14770 rest_last = converted_keyword_hash;
14771 arg_rest_dup(args);
14772 RARRAY_ASET(args->rest, len - 1, rest_last);
14773 }
14774 if (((iseq)->body)->param.flags.ruby2_keywords && rest_last) {
14775 flag_keyword_hash = rest_last;
14776 }
14777 else if (((iseq)->body)->param.flags.has_kw || ((iseq)->body)->param.flags.has_kwrest) {
14778 arg_rest_dup(args);
14779 rb_ary_pop(args->rest);
14780 given_argc--;
14781 keyword_hash = rest_last;
14782 }
14783 }
14784 }
14785 }
14786 else {
14787 if (kw_flag & (0x01 << VM_CALL_KW_SPLAT_bit)) {
14788 VALUE last_arg = args->argv[args->argc-1];
14789 if (ignore_keyword_hash_p(last_arg, iseq, &kw_flag, &converted_keyword_hash)) {
14790 args->argc--;
14791 given_argc--;
14792 kw_flag &= ~((0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_MUT_bit));
14793 }
14794 else {
14795 if (last_arg != converted_keyword_hash) {
14796 last_arg = converted_keyword_hash;
14797 args->argv[args->argc-1] = last_arg;
14798 }
14799 if (((iseq)->body)->param.flags.ruby2_keywords) {
14800 flag_keyword_hash = last_arg;
14801 }
14802 else if (((iseq)->body)->param.flags.has_kw || ((iseq)->body)->param.flags.has_kwrest) {
14803 args->argc--;
14804 given_argc--;
14805 keyword_hash = last_arg;
14806 }
14807 }
14808 }
14809 args->rest = ((VALUE)RUBY_Qfalse);
14810 }
14811 if (flag_keyword_hash && RB_TYPE_P(flag_keyword_hash, RUBY_T_HASH)) {
14812 ((struct RHash *)flag_keyword_hash)->basic.flags |= RHASH_PASS_AS_KEYWORDS;
14813 }
14814 if (kw_flag && ((iseq)->body)->param.flags.accepts_no_kwarg) {
14815 rb_raise(rb_eArgError, "no keywords accepted");
14816 }
14817 switch (arg_setup_type) {
14818 case arg_setup_method:
14819 break;
14820 case arg_setup_block:
14821 if (given_argc == (RB_NIL_P(keyword_hash) ? 1 : 2) &&
14822 allow_autosplat &&
14823 (min_argc > 0 || ((iseq)->body)->param.opt_num > 1) &&
14824 !((iseq)->body)->param.flags.ambiguous_param0 &&
14825 !((((iseq)->body)->param.flags.has_kw ||
14826 ((iseq)->body)->param.flags.has_kwrest)
14827 && max_argc == 1) &&
14828 args_check_block_arg0(args)) {
14829 given_argc = RARRAY_LENINT(args->rest);
14830 }
14831 break;
14832 }
14833 if (given_argc < min_argc) {
14834 if (arg_setup_type == arg_setup_block) {
14835 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);
14836 given_argc = min_argc;
14837 args_extend(args, min_argc);
14838 }
14839 else {
14840 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14841 }
14842 }
14843 if (given_argc > max_argc && max_argc != (-1)) {
14844 if (arg_setup_type == arg_setup_block) {
14845 args_reduce(args, given_argc - max_argc);
14846 given_argc = max_argc;
14847 }
14848 else {
14849 argument_arity_error(ec, iseq, given_argc, min_argc, max_argc);
14850 }
14851 }
14852 if (((iseq)->body)->param.flags.has_lead) {
14853 args_setup_lead_parameters(args, ((iseq)->body)->param.lead_num, locals + 0);
14854 }
14855 if (((iseq)->body)->param.flags.has_rest || ((iseq)->body)->param.flags.has_post){
14856 args_copy(args);
14857 }
14858 if (((iseq)->body)->param.flags.has_post) {
14859 args_setup_post_parameters(args, ((iseq)->body)->param.post_num, locals + ((iseq)->body)->param.post_start);
14860 }
14861 if (((iseq)->body)->param.flags.has_opt) {
14862 int opt = args_setup_opt_parameters(args, ((iseq)->body)->param.opt_num, locals + ((iseq)->body)->param.lead_num);
14863 opt_pc = (int)((iseq)->body)->param.opt_table[opt];
14864 }
14865 if (((iseq)->body)->param.flags.has_rest) {
14866 args_setup_rest_parameter(args, locals + ((iseq)->body)->param.rest_start);
14867 VALUE ary = *(locals + ((iseq)->body)->param.rest_start);
14868 VALUE index = rb_array_len(ary) - 1;
14869 if (splat_flagged_keyword_hash &&
14870 !((iseq)->body)->param.flags.ruby2_keywords &&
14871 !((iseq)->body)->param.flags.has_kw &&
14872 !((iseq)->body)->param.flags.has_kwrest &&
14873 RARRAY_AREF(ary, index) == splat_flagged_keyword_hash) {
14874 ((struct RHash *)rest_last)->basic.flags &= ~RHASH_PASS_AS_KEYWORDS;
14875 RARRAY_ASET(ary, index, rest_last);
14876 }
14877 }
14878 if (((iseq)->body)->param.flags.has_kw) {
14879 VALUE * const klocals = locals + ((iseq)->body)->param.keyword->bits_start - ((iseq)->body)->param.keyword->num;
14880 if (args->kw_argv != ((void *)0)) {
14881 const struct rb_callinfo_kwarg *kw_arg = args->kw_arg;
14882 args_setup_kw_parameters(ec, iseq, args->kw_argv, kw_arg->keyword_len, kw_arg->keywords, klocals);
14883 }
14884 else if (!RB_NIL_P(keyword_hash)) {
14885 int kw_len = rb_long2int_inline(RHASH_SIZE(keyword_hash));
14886 struct fill_values_arg arg;
14887 arg.keys = args->kw_argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (kw_len * 2))));
14888 arg.vals = arg.keys + kw_len;
14889 arg.argc = 0;
14890 rb_hash_foreach(keyword_hash, fill_keys_values, (VALUE)&arg);
14891 ((void)0);
14892 args_setup_kw_parameters(ec, iseq, arg.vals, kw_len, arg.keys, klocals);
14893 }
14894 else {
14895 ((void)0);
14896 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
14897 }
14898 }
14899 else if (((iseq)->body)->param.flags.has_kwrest) {
14900 args_setup_kw_rest_parameter(keyword_hash, locals + ((iseq)->body)->param.keyword->rest_start, kw_flag);
14901 }
14902 else if (!RB_NIL_P(keyword_hash) && RHASH_SIZE(keyword_hash) > 0 && arg_setup_type == arg_setup_method) {
14903 argument_kw_error(ec, iseq, "unknown", rb_hash_keys(keyword_hash));
14904 }
14905 if (((iseq)->body)->param.flags.has_block) {
14906 if (((iseq)->body)->local_iseq == iseq) {
14907 }
14908 else {
14909 args_setup_block_parameter(ec, calling, locals + ((iseq)->body)->param.block_start);
14910 }
14911 }
14912 ec->cfp->sp = orig_sp;
14913 return opt_pc;
14914}
14915static void
14916raise_argument_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const VALUE exc)
14917{
14918 VALUE at;
14919 if (iseq) {
14920 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL, ((VALUE)RUBY_Qnil) ,
14921 0 , ((VALUE)RUBY_Qfalse) ,
14922 ((iseq)->body)->iseq_encoded,
14923 ec->cfp->sp, 0, 0 );
14924 at = rb_ec_backtrace_object(ec);
14925 rb_backtrace_use_iseq_first_lineno_for_last_location(at);
14926 rb_vm_pop_frame(ec);
14927 }
14928 else {
14929 at = rb_ec_backtrace_object(ec);
14930 }
14931 rb_ivar_set(exc, idBt_locations, at);
14932 rb_exc_set_backtrace(exc, at);
14933 rb_exc_raise(exc);
14934}
14935static void
14936argument_arity_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const int miss_argc, const int min_argc, const int max_argc)
14937{
14938 VALUE exc = rb_arity_error_new(miss_argc, min_argc, max_argc);
14939 if (((iseq)->body)->param.flags.has_kw) {
14940 const struct rb_iseq_param_keyword *const kw = ((iseq)->body)->param.keyword;
14941 const ID *keywords = kw->table;
14942 int req_key_num = kw->required_num;
14943 if (req_key_num > 0) {
14944 static const char required[] = "; required keywords";
14945 VALUE mesg = rb_attr_get(exc, idMesg);
14946 rb_str_resize(mesg, RSTRING_LEN(mesg)-1);
14947 rb_str_cat(mesg, required, sizeof(required) - 1 - (req_key_num == 1));
14948 ((__builtin_constant_p(":") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (":")));
14949 do {
14950 ((__builtin_constant_p(" ") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (" ")));
14951 rb_str_append(mesg, rb_id2str(*keywords++));
14952 ((__builtin_constant_p(",") ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((mesg), (",")));
14953 } while (--req_key_num);
14954 RSTRING_PTR(mesg)[RSTRING_LEN(mesg)-1] = ')';
14955 }
14956 }
14957 raise_argument_error(ec, iseq, exc);
14958}
14959static void
14960argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys)
14961{
14962 raise_argument_error(ec, iseq, rb_keyword_error_new(error, keys));
14963}
14964static inline void
14965vm_caller_setup_arg_splat(rb_control_frame_t *cfp, struct rb_calling_info *calling)
14966{
14967 int argc = calling->argc;
14968 VALUE *argv = cfp->sp - argc;
14969 VALUE ary = argv[argc-1];
14970 ;
14971 cfp->sp--;
14972 if (!RB_NIL_P(ary)) {
14973 const VALUE *ptr = rb_array_const_ptr_transient(ary);
14974 long len = rb_array_len(ary), i;
14975 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);
14976 for (i = 0; i < len; i++) {
14977 *cfp->sp++ = ptr[i];
14978 }
14979 calling->argc += i - 1;
14980 }
14981}
14982static inline void
14983vm_caller_setup_arg_kw(rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_callinfo *ci)
14984{
14985 const VALUE *const passed_keywords = vm_ci_kwarg(ci)->keywords;
14986 const int kw_len = vm_ci_kwarg(ci)->keyword_len;
14987 const VALUE h = rb_hash_new_with_size(kw_len);
14988 VALUE *sp = cfp->sp;
14989 int i;
14990 for (i=0; i<kw_len; i++) {
14991 rb_hash_aset(h, passed_keywords[i], (sp - kw_len)[i]);
14992 }
14993 (sp-kw_len)[0] = h;
14994 cfp->sp -= kw_len - 1;
14995 calling->argc -= kw_len - 1;
14996 calling->kw_splat = 1;
14997}
14998static VALUE
14999vm_to_proc(VALUE proc)
15000{
15001 if ((__builtin_expect(!!(!rb_obj_is_proc(proc)), 0))) {
15002 VALUE b;
15003 const rb_callable_method_entry_t *me =
15004 rb_callable_method_entry_with_refinements(rb_class_of(proc), idTo_proc, ((void *)0));
15005 if (me) {
15006 b = rb_vm_call0(rb_current_execution_context(1), proc, idTo_proc, 0, ((void *)0), me, 0);
15007 }
15008 else {
15009 b = rb_check_convert_type_with_id(proc, RUBY_T_DATA, "Proc", idTo_proc);
15010 }
15011 if (RB_NIL_P(b) || !rb_obj_is_proc(b)) {
15012 rb_raise(rb_eTypeError,
15013 "wrong argument type %s (expected Proc)",
15014 rb_obj_classname(proc));
15015 }
15016 return b;
15017 }
15018 else {
15019 return proc;
15020 }
15021}
15022static VALUE
15023refine_sym_proc_call(VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg)
15024{
15025 VALUE obj;
15026 ID mid;
15027 const rb_callable_method_entry_t *me = 0;
15028 rb_execution_context_t *ec;
15029 const VALUE symbol = RARRAY_AREF(callback_arg, 0);
15030 const VALUE refinements = RARRAY_AREF(callback_arg, 1);
15031 int kw_splat = rb_keyword_given_p();
15032 VALUE klass;
15033 if (argc-- < 1) {
15034 rb_raise(rb_eArgError, "no receiver given");
15035 }
15036 obj = *argv++;
15037 mid = rb_sym2id(symbol);
15038 for (klass = rb_class_of(obj); klass; klass = RCLASS_SUPER(klass)) {
15039 me = rb_callable_method_entry(klass, mid);
15040 if (me) {
15041 me = rb_resolve_refined_method_callable(refinements, me);
15042 if (me) break;
15043 }
15044 }
15045 ec = rb_current_execution_context(1);
15046 if (!RB_NIL_P(blockarg)) {
15047 vm_passed_block_handler_set(ec, blockarg);
15048 }
15049 if (!me) {
15050 return method_missing(ec, obj, mid, argc, argv, MISSING_NOENTRY, kw_splat);
15051 }
15052 return rb_vm_call0(ec, obj, mid, argc, argv, me, kw_splat);
15053}
15054static VALUE
15055vm_caller_setup_arg_block(const rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15056 const struct rb_callinfo *ci, const rb_iseq_t *blockiseq, const int is_super)
15057{
15058 if (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_BLOCKARG_bit)) {
15059 VALUE block_code = *(--reg_cfp->sp);
15060 if (RB_NIL_P(block_code)) {
15061 return 0;
15062 }
15063 else if (block_code == rb_block_param_proxy) {
15064 ((void)0);
15065 VALUE handler = VM_CF_BLOCK_HANDLER(reg_cfp);
15066 reg_cfp->block_code = (const void *) handler;
15067 return handler;
15068 }
15069 else if (RB_SYMBOL_P(block_code) && rb_method_basic_definition_p(rb_cSymbol, idTo_proc)) {
15070 const rb_cref_t *cref = vm_env_cref(reg_cfp->ep);
15071 if (cref && !RB_NIL_P(cref->refinements)) {
15072 VALUE ref = cref->refinements;
15073 VALUE func = rb_hash_lookup(ref, block_code);
15074 if (RB_NIL_P(func)) {
15075 VALUE callback_arg = rb_ary_hidden_new(2);
15076 rb_ary_push(callback_arg, block_code);
15077 rb_ary_push(callback_arg, ref);
15078 RB_OBJ_FREEZE_RAW(callback_arg);
15079 func = rb_func_lambda_new(refine_sym_proc_call, callback_arg, 1, (-1));
15080 rb_hash_aset(ref, block_code, func);
15081 }
15082 block_code = func;
15083 }
15084 return block_code;
15085 }
15086 else {
15087 return vm_to_proc(block_code);
15088 }
15089 }
15090 else if (blockiseq != ((void *)0)) {
15091 struct rb_captured_block *captured = VM_CFP_TO_CAPTURED_BLOCK(reg_cfp);
15092 captured->code.iseq = blockiseq;
15093 return VM_BH_FROM_ISEQ_BLOCK(captured);
15094 }
15095 else {
15096 if (is_super) {
15097 return ((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]);
15098 }
15099 else {
15100 return 0;
15101 }
15102 }
15103}
15104static 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);
15105__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);
15106static 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);
15107static VALUE vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
15108static VALUE vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15109static VALUE vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15110static inline VALUE vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling);
15111static vm_call_handler vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size);
15112static VALUE
15113vm_call_iseq_setup_tailcall_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15114{
15115 ((void)0);
15116 return vm_call_iseq_setup_tailcall(ec, cfp, calling, 0);
15117}
15118static VALUE
15119vm_call_iseq_setup_normal_0start(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15120{
15121 ((void)0);
15122 const struct rb_callcache *cc = calling->cc;
15123 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15124 int param = ((iseq)->body)->param.size;
15125 int local = ((iseq)->body)->local_table_size;
15126 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15127}
15128static _Bool
15129rb_simple_iseq_p(const rb_iseq_t *iseq)
15130{
15131 return ((iseq)->body)->param.flags.has_opt == 0 &&
15132 ((iseq)->body)->param.flags.has_rest == 0 &&
15133 ((iseq)->body)->param.flags.has_post == 0 &&
15134 ((iseq)->body)->param.flags.has_kw == 0 &&
15135 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15136 ((iseq)->body)->param.flags.accepts_no_kwarg == 0 &&
15137 ((iseq)->body)->param.flags.has_block == 0;
15138}static inline
15139__attribute__ ((__visibility__("default"))) _Bool
15140rb_iseq_only_optparam_p(const rb_iseq_t *iseq)
15141{
15142 return ((iseq)->body)->param.flags.has_opt == 1 &&
15143 ((iseq)->body)->param.flags.has_rest == 0 &&
15144 ((iseq)->body)->param.flags.has_post == 0 &&
15145 ((iseq)->body)->param.flags.has_kw == 0 &&
15146 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15147 ((iseq)->body)->param.flags.accepts_no_kwarg == 0 &&
15148 ((iseq)->body)->param.flags.has_block == 0;
15149}static inline
15150__attribute__ ((__visibility__("default"))) _Bool
15151rb_iseq_only_kwparam_p(const rb_iseq_t *iseq)
15152{
15153 return ((iseq)->body)->param.flags.has_opt == 0 &&
15154 ((iseq)->body)->param.flags.has_rest == 0 &&
15155 ((iseq)->body)->param.flags.has_post == 0 &&
15156 ((iseq)->body)->param.flags.has_kw == 1 &&
15157 ((iseq)->body)->param.flags.has_kwrest == 0 &&
15158 ((iseq)->body)->param.flags.has_block == 0;
15159}
15160static _Bool
15161rb_splat_or_kwargs_p(const struct rb_callinfo *__restrict__ ci)
15162{
15163 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)));
15164}
15165static inline void
15166CALLER_SETUP_ARG(struct rb_control_frame_struct *__restrict__ cfp,
15167 struct rb_calling_info *__restrict__ calling,
15168 const struct rb_callinfo *__restrict__ ci)
15169{
15170 if ((__builtin_expect(!!((vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))), 0))) {
15171 VALUE final_hash;
15172 vm_caller_setup_arg_splat(cfp, calling);
15173 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit))) &&
15174 calling->argc > 0 &&
15175 RB_TYPE_P((final_hash = *(cfp->sp - 1)), RUBY_T_HASH) &&
15176 (((struct RHash *)final_hash)->basic.flags & RHASH_PASS_AS_KEYWORDS)) {
15177 *(cfp->sp - 1) = rb_hash_dup(final_hash);
15178 calling->kw_splat = 1;
15179 }
15180 }
15181 if ((__builtin_expect(!!((vm_ci_flag(ci) & ((0x01 << VM_CALL_KWARG_bit) | (0x01 << VM_CALL_KW_SPLAT_bit)))), 0))) {
15182 if ((vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit))) {
15183 vm_caller_setup_arg_kw(cfp, calling, ci);
15184 }
15185 else {
15186 VALUE keyword_hash = cfp->sp[-1];
15187 if (!RB_TYPE_P(keyword_hash, RUBY_T_HASH)) {
15188 cfp->sp[-1] = rb_hash_dup(rb_to_hash_type(keyword_hash));
15189 }
15190 else if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_MUT_bit))) {
15191 cfp->sp[-1] = rb_hash_dup(keyword_hash);
15192 }
15193 }
15194 }
15195}
15196static inline void
15197CALLER_REMOVE_EMPTY_KW_SPLAT(struct rb_control_frame_struct *__restrict__ cfp,
15198 struct rb_calling_info *__restrict__ calling,
15199 const struct rb_callinfo *__restrict__ ci)
15200{
15201 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15202 if (RHASH_EMPTY_P(cfp->sp[-1])) {
15203 cfp->sp--;
15204 calling->argc--;
15205 calling->kw_splat = 0;
15206 }
15207 }
15208}
15209static VALUE
15210vm_call_iseq_setup_normal_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15211 struct rb_calling_info *calling)
15212{
15213 const struct rb_callcache *cc = calling->cc;
15214 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15215 const int lead_num = ((iseq)->body)->param.lead_num;
15216 const int opt = calling->argc - lead_num;
15217 const int opt_num = ((iseq)->body)->param.opt_num;
15218 const int opt_pc = (int)((iseq)->body)->param.opt_table[opt];
15219 const int param = ((iseq)->body)->param.size;
15220 const int local = ((iseq)->body)->local_table_size;
15221 const int delta = opt_num - opt;
15222 ((void)0);
15223 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param - delta, local);
15224}
15225static VALUE
15226vm_call_iseq_setup_tailcall_opt_start(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15227 struct rb_calling_info *calling)
15228{
15229 const struct rb_callcache *cc = calling->cc;
15230 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15231 const int lead_num = ((iseq)->body)->param.lead_num;
15232 const int opt = calling->argc - lead_num;
15233 const int opt_pc = (int)((iseq)->body)->param.opt_table[opt];
15234 ((void)0);
15235 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
15236}
15237static void
15238args_setup_kw_parameters(rb_execution_context_t *const ec, const rb_iseq_t *const iseq,
15239 VALUE *const passed_values, const int passed_keyword_len, const VALUE *const passed_keywords,
15240 VALUE *const locals);
15241static VALUE
15242vm_call_iseq_setup_kwparm_kwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15243 struct rb_calling_info *calling)
15244{
15245 const struct rb_callinfo *ci = calling->ci;
15246 const struct rb_callcache *cc = calling->cc;
15247 ((void)0);
15248 ((void)0);
15249 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15250 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15251 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
15252 const int ci_kw_len = kw_arg->keyword_len;
15253 const VALUE * const ci_keywords = kw_arg->keywords;
15254 VALUE *argv = cfp->sp - calling->argc;
15255 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15256 const int lead_num = ((iseq)->body)->param.lead_num;
15257 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
15258 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
15259 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
15260 int param = ((iseq)->body)->param.size;
15261 int local = ((iseq)->body)->local_table_size;
15262 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15263}
15264static VALUE
15265vm_call_iseq_setup_kwparm_nokwarg(rb_execution_context_t *ec, rb_control_frame_t *cfp,
15266 struct rb_calling_info *calling)
15267{
15268 const struct rb_callinfo *__attribute__ ((__unused__)) ci = calling->ci;
15269 const struct rb_callcache *cc = calling->cc;
15270 ((void)0);
15271 ((void)0);
15272 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15273 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15274 VALUE * const argv = cfp->sp - calling->argc;
15275 VALUE * const klocals = argv + kw_param->bits_start - kw_param->num;
15276 int i;
15277 for (i=0; i<kw_param->num; i++) {
15278 klocals[i] = kw_param->default_values[i];
15279 }
15280 klocals[i] = __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
15281 int param = ((iseq)->body)->param.size;
15282 int local = ((iseq)->body)->local_table_size;
15283 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), 0, param, local);
15284}
15285static inline int
15286vm_callee_setup_arg(rb_execution_context_t *ec, struct rb_calling_info *calling,
15287 const rb_iseq_t *iseq, VALUE *argv, int param_size, int local_size)
15288{
15289 const struct rb_callinfo *ci = calling->ci;
15290 const struct rb_callcache *cc = calling->cc;
15291 _Bool cacheable_ci = vm_ci_markable(ci);
15292 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit))), 1))) {
15293 if ((__builtin_expect(!!(rb_simple_iseq_p(iseq)), 1))) {
15294 rb_control_frame_t *cfp = ec->cfp;
15295 CALLER_SETUP_ARG(cfp, calling, ci);
15296 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15297 if (calling->argc != ((iseq)->body)->param.lead_num) {
15298 argument_arity_error(ec, iseq, calling->argc, ((iseq)->body)->param.lead_num, ((iseq)->body)->param.lead_num);
15299 }
15300 ((void)0);
15301 ((void)0);
15302 CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size), cacheable_ci && vm_call_iseq_optimizable_p(ci, cc));
15303 return 0;
15304 }
15305 else if (rb_iseq_only_optparam_p(iseq)) {
15306 rb_control_frame_t *cfp = ec->cfp;
15307 CALLER_SETUP_ARG(cfp, calling, ci);
15308 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
15309 const int lead_num = ((iseq)->body)->param.lead_num;
15310 const int opt_num = ((iseq)->body)->param.opt_num;
15311 const int argc = calling->argc;
15312 const int opt = argc - lead_num;
15313 if (opt < 0 || opt > opt_num) {
15314 argument_arity_error(ec, iseq, argc, lead_num, lead_num + opt_num);
15315 }
15316 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
15317 CC_SET_FASTPATH(cc, vm_call_iseq_setup_normal_opt_start,
15318 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
15319 cacheable_ci && vm_call_cacheable(ci, cc));
15320 }
15321 else {
15322 CC_SET_FASTPATH(cc, vm_call_iseq_setup_tailcall_opt_start,
15323 !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit)) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) &&
15324 cacheable_ci && vm_call_cacheable(ci, cc));
15325 }
15326 ((void)0);
15327 for (int i=argc; i<lead_num + opt_num; i++) {
15328 argv[i] = ((VALUE)RUBY_Qnil);
15329 }
15330 return (int)((iseq)->body)->param.opt_table[opt];
15331 }
15332 else if (rb_iseq_only_kwparam_p(iseq) && !(vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SPLAT_bit))) {
15333 const int lead_num = ((iseq)->body)->param.lead_num;
15334 const int argc = calling->argc;
15335 const struct rb_iseq_param_keyword *kw_param = ((iseq)->body)->param.keyword;
15336 if (vm_ci_flag(ci) & (0x01 << VM_CALL_KWARG_bit)) {
15337 const struct rb_callinfo_kwarg *kw_arg = vm_ci_kwarg(ci);
15338 if (argc - kw_arg->keyword_len == lead_num) {
15339 const int ci_kw_len = kw_arg->keyword_len;
15340 const VALUE * const ci_keywords = kw_arg->keywords;
15341 VALUE * const ci_kws = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len))));
15342 ruby_nonempty_memcpy((ci_kws), (argv + lead_num), rbimpl_size_mul_or_raise(sizeof(VALUE), (ci_kw_len)));
15343 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15344 args_setup_kw_parameters(ec, iseq, ci_kws, ci_kw_len, ci_keywords, klocals);
15345 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_kwarg,
15346 cacheable_ci && vm_call_cacheable(ci, cc));
15347 return 0;
15348 }
15349 }
15350 else if (argc == lead_num) {
15351 VALUE *const klocals = argv + kw_param->bits_start - kw_param->num;
15352 args_setup_kw_parameters(ec, iseq, ((void *)0), 0, ((void *)0), klocals);
15353 if (klocals[kw_param->num] == __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0))) {
15354 CC_SET_FASTPATH(cc, vm_call_iseq_setup_kwparm_nokwarg,
15355 cacheable_ci && vm_call_cacheable(ci, cc));
15356 }
15357 return 0;
15358 }
15359 }
15360 }
15361 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_method);
15362}
15363COLDFUNC static VALUE
15364vm_call_iseq_setup(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
15365 ((void)0);
15366 const struct rb_callcache *cc = calling->cc;
15367 const rb_iseq_t *iseq = def_iseq_ptr(vm_cc_cme(cc)->def);
15368 const int param_size = ((iseq)->body)->param.size;
15369 const int local_size = ((iseq)->body)->local_table_size;
15370 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);
15371 return vm_call_iseq_setup_2(ec, cfp, calling, opt_pc, param_size, local_size);
15372}
15373COLDFUNC static VALUE
15374vm_call_iseq_setup_2(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
15375 int opt_pc, int param_size, int local_size) {
15376 const struct rb_callinfo *ci = calling->ci;
15377 const struct rb_callcache *cc = calling->cc;
15378 if ((__builtin_expect(!!(!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit))), 1))) {
15379 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(cc), opt_pc, param_size, local_size);
15380 }
15381 else {
15382 return vm_call_iseq_setup_tailcall(ec, cfp, calling, opt_pc);
15383 }
15384}
15385static inline VALUE
15386vm_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,
15387 int opt_pc, int param_size, int local_size)
15388{
15389 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15390 VALUE *argv = cfp->sp - calling->argc;
15391 VALUE *sp = argv + param_size;
15392 cfp->sp = argv - 1 ;
15393 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL, calling->recv,
15394 calling->block_handler, (VALUE)me,
15395 ((iseq)->body)->iseq_encoded + opt_pc, sp,
15396 local_size - param_size,
15397 ((iseq)->body)->stack_max);
15398 return ((VALUE)RUBY_Qundef);
15399}
15400COLDFUNC static VALUE
15401vm_call_iseq_setup_tailcall(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, int opt_pc) {
15402 const struct rb_callcache *cc = calling->cc;
15403 unsigned int i;
15404 VALUE *argv = cfp->sp - calling->argc;
15405 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15406 const rb_iseq_t *iseq = def_iseq_ptr(me->def);
15407 VALUE *src_argv = argv;
15408 VALUE *sp_orig, *sp;
15409 VALUE finish_flag = VM_FRAME_FINISHED_P(cfp) ? VM_FRAME_FLAG_FINISH : 0;
15410 if (VM_BH_FROM_CFP_P(calling->block_handler, cfp)) {
15411 struct rb_captured_block *dst_captured = VM_CFP_TO_CAPTURED_BLOCK(((cfp)+1));
15412 const struct rb_captured_block *src_captured = VM_BH_TO_CAPT_BLOCK(calling->block_handler);
15413 dst_captured->code.val = src_captured->code.val;
15414 if (VM_BH_ISEQ_BLOCK_P(calling->block_handler)) {
15415 calling->block_handler = VM_BH_FROM_ISEQ_BLOCK(dst_captured);
15416 }
15417 else {
15418 calling->block_handler = VM_BH_FROM_IFUNC_BLOCK(dst_captured);
15419 }
15420 }
15421 vm_pop_frame(ec, cfp, cfp->ep);
15422 cfp = ec->cfp;
15423 sp_orig = sp = cfp->sp;
15424 sp[0] = calling->recv;
15425 sp++;
15426 for (i=0; i < ((iseq)->body)->param.size; i++) {
15427 *sp++ = src_argv[i];
15428 }
15429 vm_push_frame(ec, iseq, VM_FRAME_MAGIC_METHOD | VM_ENV_FLAG_LOCAL | finish_flag,
15430 calling->recv, calling->block_handler, (VALUE)me,
15431 ((iseq)->body)->iseq_encoded + opt_pc, sp,
15432 ((iseq)->body)->local_table_size - ((iseq)->body)->param.size,
15433 ((iseq)->body)->stack_max);
15434 cfp->sp = sp_orig;
15435 return ((VALUE)RUBY_Qundef);
15436}
15437static void
15438ractor_unsafe_check(void)
15439{
15440 if (!rb_ractor_main_p()) {
15441 rb_raise(rb_eRactorUnsafeError, "ractor unsafe method called from not main ractor");
15442 }
15443}
15444static VALUE
15445call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15446{
15447 ractor_unsafe_check();
15448 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15449 return (*f)(recv, rb_ary_new_from_values(argc, argv));
15450}
15451static VALUE
15452call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15453{
15454 ractor_unsafe_check();
15455 VALUE(*f)(int, const VALUE *, VALUE) = (VALUE(*)(int, const VALUE *, VALUE))func;
15456 return (*f)(argc, argv, recv);
15457}
15458static VALUE
15459call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15460{
15461 ractor_unsafe_check();
15462 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15463 return (*f)(recv);
15464}
15465static VALUE
15466call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15467{
15468 ractor_unsafe_check();
15469 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15470 return (*f)(recv, argv[0]);
15471}
15472static VALUE
15473call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15474{
15475 ractor_unsafe_check();
15476 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15477 return (*f)(recv, argv[0], argv[1]);
15478}
15479static VALUE
15480call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15481{
15482 ractor_unsafe_check();
15483 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15484 return (*f)(recv, argv[0], argv[1], argv[2]);
15485}
15486static VALUE
15487call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15488{
15489 ractor_unsafe_check();
15490 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15491 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15492}
15493static VALUE
15494call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15495{
15496 ractor_unsafe_check();
15497 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15498 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15499}
15500static VALUE
15501call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15502{
15503 ractor_unsafe_check();
15504 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15505 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15506}
15507static VALUE
15508call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15509{
15510 ractor_unsafe_check();
15511 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15512 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15513}
15514static VALUE
15515call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15516{
15517 ractor_unsafe_check();
15518 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15519 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15520}
15521static VALUE
15522call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15523{
15524 ractor_unsafe_check();
15525 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15526 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15527}
15528static VALUE
15529call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15530{
15531 ractor_unsafe_check();
15532 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;
15533 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15534}
15535static VALUE
15536call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15537{
15538 ractor_unsafe_check();
15539 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;
15540 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]);
15541}
15542static VALUE
15543call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15544{
15545 ractor_unsafe_check();
15546 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;
15547 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]);
15548}
15549static VALUE
15550call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15551{
15552 ractor_unsafe_check();
15553 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;
15554 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]);
15555}
15556static VALUE
15557call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15558{
15559 ractor_unsafe_check();
15560 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;
15561 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]);
15562}
15563static VALUE
15564call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15565{
15566 ractor_unsafe_check();
15567 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;
15568 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]);
15569}
15570static VALUE
15571ractor_safe_call_cfunc_m2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15572{
15573 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15574 return (*f)(recv, rb_ary_new_from_values(argc, argv));
15575}
15576static VALUE
15577ractor_safe_call_cfunc_m1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15578{
15579 VALUE(*f)(int, const VALUE *, VALUE) = (VALUE(*)(int, const VALUE *, VALUE))func;
15580 return (*f)(argc, argv, recv);
15581}
15582static VALUE
15583ractor_safe_call_cfunc_0(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15584{
15585 VALUE(*f)(VALUE) = (VALUE(*)(VALUE))func;
15586 return (*f)(recv);
15587}
15588static VALUE
15589ractor_safe_call_cfunc_1(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15590{
15591 VALUE(*f)(VALUE, VALUE) = (VALUE(*)(VALUE, VALUE))func;
15592 return (*f)(recv, argv[0]);
15593}
15594static VALUE
15595ractor_safe_call_cfunc_2(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15596{
15597 VALUE(*f)(VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE))func;
15598 return (*f)(recv, argv[0], argv[1]);
15599}
15600static VALUE
15601ractor_safe_call_cfunc_3(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15602{
15603 VALUE(*f)(VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE))func;
15604 return (*f)(recv, argv[0], argv[1], argv[2]);
15605}
15606static VALUE
15607ractor_safe_call_cfunc_4(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15608{
15609 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE))func;
15610 return (*f)(recv, argv[0], argv[1], argv[2], argv[3]);
15611}
15612static VALUE
15613ractor_safe_call_cfunc_5(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15614{
15615 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15616 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);
15617}
15618static VALUE
15619ractor_safe_call_cfunc_6(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15620{
15621 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15622 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
15623}
15624static VALUE
15625ractor_safe_call_cfunc_7(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15626{
15627 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15628 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
15629}
15630static VALUE
15631ractor_safe_call_cfunc_8(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15632{
15633 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15634 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
15635}
15636static VALUE
15637ractor_safe_call_cfunc_9(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15638{
15639 VALUE(*f)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE) = (VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE))func;
15640 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]);
15641}
15642static VALUE
15643ractor_safe_call_cfunc_10(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15644{
15645 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;
15646 return (*f)(recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]);
15647}
15648static VALUE
15649ractor_safe_call_cfunc_11(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15650{
15651 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;
15652 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]);
15653}
15654static VALUE
15655ractor_safe_call_cfunc_12(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15656{
15657 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;
15658 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]);
15659}
15660static VALUE
15661ractor_safe_call_cfunc_13(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15662{
15663 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;
15664 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]);
15665}
15666static VALUE
15667ractor_safe_call_cfunc_14(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15668{
15669 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;
15670 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]);
15671}
15672static VALUE
15673ractor_safe_call_cfunc_15(VALUE recv, int argc, const VALUE *argv, VALUE (*func)())
15674{
15675 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;
15676 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]);
15677}
15678static inline int
15679vm_cfp_consistent_p(rb_execution_context_t *ec, const rb_control_frame_t *reg_cfp)
15680{
15681 const int ov_flags = RAISED_STACKOVERFLOW;
15682 if ((__builtin_expect(!!(reg_cfp == ec->cfp + 1), 1))) return 1;
15683 if ((((ec)->raised_flag & (ov_flags)) != 0)) {
15684 ((ec)->raised_flag &= ~(ov_flags));
15685 return 1;
15686 }
15687 return 0;
15688}
15689static inline
15690const rb_method_cfunc_t *
15691vm_method_cfunc_entry(const rb_callable_method_entry_t *me)
15692{
15693 return __extension__({
15694 ;
15695 ; __typeof__(&(me->def)->body.cfunc) unaligned_member_access_result = (&(me->def)->body.cfunc);
15696 ; unaligned_member_access_result; });
15697}
15698static VALUE
15699vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15700{
15701 ((void)0);
15702 const struct rb_callinfo *ci = calling->ci;
15703 const struct rb_callcache *cc = calling->cc;
15704 VALUE val;
15705 const rb_callable_method_entry_t *me = vm_cc_cme(cc);
15706 const rb_method_cfunc_t *cfunc = vm_method_cfunc_entry(me);
15707 int len = cfunc->argc;
15708 VALUE recv = calling->recv;
15709 VALUE block_handler = calling->block_handler;
15710 VALUE frame_type = VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL;
15711 int argc = calling->argc;
15712 int orig_argc = argc;
15713 if ((__builtin_expect(!!(calling->kw_splat), 0))) {
15714 frame_type |= VM_FRAME_FLAG_CFRAME_KW;
15715 }
15716 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);
15717 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);
15718 vm_push_frame(ec, ((void *)0), frame_type, recv,
15719 block_handler, (VALUE)me,
15720 0, ec->cfp->sp, 0, 0);
15721 if (len >= 0) rb_check_arity(argc, len, len);
15722 reg_cfp->sp -= orig_argc + 1;
15723 val = (*cfunc->invoker)(recv, argc, reg_cfp->sp + 1, cfunc->func);
15724 ((__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)));
15725 rb_vm_pop_frame(ec);
15726 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);
15727 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);
15728 return val;
15729}
15730static VALUE
15731vm_call_cfunc(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15732{
15733 const struct rb_callinfo *ci = calling->ci;
15734 ((void)0);
15735 CALLER_SETUP_ARG(reg_cfp, calling, ci);
15736 CALLER_REMOVE_EMPTY_KW_SPLAT(reg_cfp, calling, ci);
15737 CC_SET_FASTPATH(calling->cc, vm_call_cfunc_with_frame, !rb_splat_or_kwargs_p(ci) && !calling->kw_splat);
15738 return vm_call_cfunc_with_frame(ec, reg_cfp, calling);
15739}
15740static VALUE
15741vm_call_ivar(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15742{
15743 const struct rb_callcache *cc = calling->cc;
15744 ((void)0);
15745 cfp->sp -= 1;
15746 VALUE ivar = vm_getivar(calling->recv, vm_cc_cme(cc)->def->body.attr.id, ((void *)0), ((void *)0), cc, 1);
15747 return ivar;
15748}
15749static VALUE
15750vm_call_attrset_direct(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_callcache *cc, VALUE obj)
15751{
15752 ((void)0);
15753 VALUE val = *(cfp->sp - 1);
15754 cfp->sp -= 2;
15755 attr_index_t index = vm_cc_attr_index(cc);
15756 shape_id_t dest_shape_id = vm_cc_attr_index_dest_shape_id(cc);
15757 ID id = vm_cc_cme(cc)->def->body.attr.id;
15758 do { VALUE frozen_obj = (obj); if ((__builtin_expect(!!(RB_OBJ_FROZEN(frozen_obj)), 0))) { rb_error_frozen_object(frozen_obj); } } while (0);
15759 VALUE res = vm_setivar(obj, id, val, dest_shape_id, index);
15760 if (RB_UNDEF_P(res)) {
15761 switch (RB_BUILTIN_TYPE(obj)) {
15762 case RUBY_T_OBJECT:
15763 case RUBY_T_CLASS:
15764 case RUBY_T_MODULE:
15765 break;
15766 default:
15767 {
15768 res = vm_setivar_default(obj, id, val, dest_shape_id, index);
15769 if (!RB_UNDEF_P(res)) {
15770 return res;
15771 }
15772 }
15773 }
15774 res = vm_setivar_slowpath_attr(obj, id, val, cc);
15775 }
15776 return res;
15777}
15778static VALUE
15779vm_call_attrset(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15780{
15781 return vm_call_attrset_direct(ec, cfp, calling->cc, calling->recv);
15782}static inline
15783_Bool
15784rb_vm_call_ivar_attrset_p(const vm_call_handler ch)
15785{
15786 return (ch == vm_call_ivar || ch == vm_call_attrset);
15787}
15788static inline VALUE
15789vm_call_bmethod_body(rb_execution_context_t *ec, struct rb_calling_info *calling, const VALUE *argv)
15790{
15791 rb_proc_t *proc;
15792 VALUE val;
15793 const struct rb_callcache *cc = calling->cc;
15794 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
15795 VALUE procv = cme->def->body.bmethod.proc;
15796 if (!RB_FL_TEST_RAW((procv), RUBY_FL_SHAREABLE) &&
15797 cme->def->body.bmethod.defined_ractor != rb_ractor_self(rb_ec_ractor_ptr(ec))) {
15798 rb_raise(rb_eRuntimeError, "defined with an un-shareable Proc in a different Ractor");
15799 }
15800 (((proc)) = (rb_proc_t*)((struct RData *)(((procv))))->data);
15801 val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat, calling->block_handler, vm_cc_cme(cc));
15802 return val;
15803}
15804static VALUE
15805vm_call_bmethod(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15806{
15807 ((void)0);
15808 VALUE *argv;
15809 int argc;
15810 const struct rb_callinfo *ci = calling->ci;
15811 CALLER_SETUP_ARG(cfp, calling, ci);
15812 argc = calling->argc;
15813 argv = ((VALUE *)__builtin_alloca(rbimpl_size_mul_or_raise(sizeof(VALUE), (argc))));
15814 ruby_nonempty_memcpy((argv), (cfp->sp - argc), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
15815 cfp->sp += - argc - 1;
15816 return vm_call_bmethod_body(ec, calling, argv);
15817}static inline
15818__attribute__ ((__visibility__("default"))) VALUE
15819rb_find_defined_class_by_owner(VALUE current_class, VALUE target_owner)
15820{
15821 VALUE klass = current_class;
15822 if (RB_TYPE_P(klass, RUBY_T_ICLASS) && RB_FL_TEST(klass, ((VALUE)RUBY_FL_USER0)) &&
15823 RB_TYPE_P(RBASIC_CLASS(klass), RUBY_T_CLASS)) {
15824 klass = RBASIC_CLASS(klass);
15825 }
15826 while (RB_TEST(klass)) {
15827 VALUE owner = RB_TYPE_P(klass, RUBY_T_ICLASS) ? RBASIC_CLASS(klass) : klass;
15828 if (owner == target_owner) {
15829 return klass;
15830 }
15831 klass = RCLASS_SUPER(klass);
15832 }
15833 return current_class;
15834}
15835static const rb_callable_method_entry_t *
15836aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15837{
15838 const rb_method_entry_t *orig_me = me->def->body.alias.original_me;
15839 const rb_callable_method_entry_t *cme;
15840 if (orig_me->defined_class == 0) {
15841 VALUE defined_class = rb_find_defined_class_by_owner(me->defined_class, orig_me->owner);
15842 ((void)0);
15843 cme = rb_method_entry_complement_defined_class(orig_me, me->called_id, defined_class);
15844 if (me->def->alias_count + me->def->complemented_count == 0) {
15845 rb_obj_write((VALUE)(me), __extension__({
15846 ;
15847 ; __typeof__((VALUE *)(&me->def->body.alias.original_me)) unaligned_member_access_result = ((VALUE *)(&me->def->body.alias.original_me));
15848 ; unaligned_member_access_result; }), (VALUE)(cme), "../ruby-3.2.1/vm_insnhelper.c", 3417);
15849 }
15850 else {
15851 rb_method_definition_t *def =
15852 rb_method_definition_create(VM_METHOD_TYPE_ALIAS, me->def->original_id);
15853 rb_method_definition_set((rb_method_entry_t *)me, def, (void *)cme);
15854 }
15855 }
15856 else {
15857 cme = (const rb_callable_method_entry_t *)orig_me;
15858 }
15859 ((void)0);
15860 return cme;
15861}static inline
15862const rb_callable_method_entry_t *
15863rb_aliased_callable_method_entry(const rb_callable_method_entry_t *me)
15864{
15865 return aliased_callable_method_entry(me);
15866}
15867static VALUE
15868vm_call_alias(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
15869{
15870 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}}, };
15871 return vm_call_method_each_type(ec, cfp, calling);
15872}
15873static enum method_missing_reason
15874ci_missing_reason(const struct rb_callinfo *ci)
15875{
15876 enum method_missing_reason stat = MISSING_NOENTRY;
15877 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
15878 if (vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit)) stat |= MISSING_FCALL;
15879 if (vm_ci_flag(ci) & (0x01 << VM_CALL_SUPER_bit)) stat |= MISSING_SUPER;
15880 return stat;
15881}
15882static VALUE vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling);
15883static VALUE
15884vm_call_symbol(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
15885 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE symbol, int flags)
15886{
15887 ((__builtin_expect(!!(!!(calling->argc >= 0)), 1)) ? ((void)0) : __builtin_unreachable());
15888 enum method_missing_reason missing_reason = MISSING_NOENTRY;
15889 int argc = calling->argc;
15890 VALUE recv = calling->recv;
15891 VALUE klass = rb_class_of(recv);
15892 ID mid = rb_check_id(&symbol);
15893 flags |= (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15894 if ((__builtin_expect(!!(! mid), 0))) {
15895 mid = idMethodMissing;
15896 missing_reason = ci_missing_reason(ci);
15897 ec->method_missing_reason = missing_reason;
15898 int i = argc;
15899 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);
15900 (((reg_cfp)->sp) += (((1))));
15901 ((__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))));
15902 argc = ++calling->argc;
15903 if (rb_method_basic_definition_p(klass, idMethodMissing)) {
15904 (*(((((reg_cfp)->sp)))-(i)-1)) = symbol;
15905 int priv = vm_ci_flag(ci) & ((0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_VCALL_bit));
15906 const VALUE *argv = (((((reg_cfp)->sp)))-(argc));
15907 VALUE exc = rb_make_no_method_exception(
15908 rb_eNoMethodError, 0, recv, argc, argv, priv);
15909 rb_exc_raise(exc);
15910 }
15911 else {
15912 (*(((((reg_cfp)->sp)))-(i)-1)) = rb_str_intern(symbol);
15913 }
15914 }
15915 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), };
15916 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 }, };
15917 if (flags & (0x01 << VM_CALL_FCALL_bit)) {
15918 return vm_call_method(ec, reg_cfp, calling);
15919 }
15920 const struct rb_callcache *cc = calling->cc;
15921 ((void)0);
15922 if (vm_cc_cme(cc) != ((void *)0)) {
15923 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
15924 case METHOD_VISI_PUBLIC:
15925 return vm_call_method_each_type(ec, reg_cfp, calling);
15926 case METHOD_VISI_PRIVATE:
15927 vm_cc_method_missing_reason_set(cc, MISSING_PRIVATE);
15928 break;
15929 case METHOD_VISI_PROTECTED:
15930 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
15931 break;
15932 default:
15933 __builtin_unreachable();
15934 }
15935 return vm_call_method_missing(ec, reg_cfp, calling);
15936 }
15937 return vm_call_method_nome(ec, reg_cfp, calling);
15938}
15939static VALUE
15940vm_call_opt_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15941{
15942 ((void)0);
15943 int i;
15944 VALUE sym;
15945 CALLER_SETUP_ARG(reg_cfp, calling, calling->ci);
15946 i = calling->argc - 1;
15947 if (calling->argc == 0) {
15948 rb_raise(rb_eArgError, "no method name given");
15949 }
15950 else {
15951 sym = (*(((((reg_cfp)->sp)))-(i)-1));
15952 if (i > 0) {
15953 ((__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))));
15954 }
15955 calling->argc -= 1;
15956 (((reg_cfp)->sp) -= (((1))));
15957 return vm_call_symbol(ec, reg_cfp, calling, calling->ci, sym, (0x01 << VM_CALL_FCALL_bit));
15958 }
15959}
15960static VALUE
15961vm_call_method_missing_body(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling,
15962 const struct rb_callinfo *orig_ci, enum method_missing_reason reason)
15963{
15964 ((void)0);
15965 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
15966 unsigned int argc;
15967 CALLER_SETUP_ARG(reg_cfp, calling, orig_ci);
15968 argc = calling->argc + 1;
15969 unsigned int flag = (0x01 << VM_CALL_FCALL_bit) | (0x01 << VM_CALL_OPT_SEND_bit) | (calling->kw_splat ? (0x01 << VM_CALL_KW_SPLAT_bit) : 0);
15970 calling->argc = argc;
15971 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);
15972 ;
15973 if (argc > 1) {
15974 ((__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))));
15975 }
15976 argv[0] = rb_id2sym(vm_ci_mid(orig_ci));
15977 (((reg_cfp)->sp) += (((1))));
15978 ec->method_missing_reason = reason;
15979 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), };
15980 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 }}, };
15981 return vm_call_method(ec, reg_cfp, calling);
15982}
15983static VALUE
15984vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
15985{
15986 return vm_call_method_missing_body(ec, reg_cfp, calling, calling->ci, vm_cc_cmethod_missing_reason(calling->cc));
15987}
15988static const rb_callable_method_entry_t *refined_method_callable_without_refinement(const rb_callable_method_entry_t *me);
15989static VALUE
15990vm_call_zsuper(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, VALUE klass)
15991{
15992 klass = RCLASS_SUPER(klass);
15993 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, vm_ci_mid(calling->ci)) : ((void *)0);
15994 if (cme == ((void *)0)) {
15995 return vm_call_method_nome(ec, cfp, calling);
15996 }
15997 if (cme->def->type == VM_METHOD_TYPE_REFINED &&
15998 cme->def->body.refined.orig_me) {
15999 cme = refined_method_callable_without_refinement(cme);
16000 }
16001 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 }}, };
16002 return vm_call_method_each_type(ec, cfp, calling);
16003}
16004static inline VALUE
16005find_refinement(VALUE refinements, VALUE klass)
16006{
16007 if (RB_NIL_P(refinements)) {
16008 return ((VALUE)RUBY_Qnil);
16009 }
16010 return rb_hash_lookup(refinements, klass);
16011}
16012__attribute__((__pure__)) static rb_control_frame_t * current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp);
16013static rb_control_frame_t *
16014current_method_entry(const rb_execution_context_t *ec, rb_control_frame_t *cfp)
16015{
16016 rb_control_frame_t *top_cfp = cfp;
16017 if (cfp->iseq && ((cfp->iseq)->body)->type == ISEQ_TYPE_BLOCK) {
16018 const rb_iseq_t *local_iseq = ((cfp->iseq)->body)->local_iseq;
16019 do {
16020 cfp = ((cfp)+1);
16021 if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
16022 return top_cfp;
16023 }
16024 } while (cfp->iseq != local_iseq);
16025 }
16026 return cfp;
16027}
16028static const rb_callable_method_entry_t *
16029refined_method_callable_without_refinement(const rb_callable_method_entry_t *me)
16030{
16031 const rb_method_entry_t *orig_me = me->def->body.refined.orig_me;
16032 const rb_callable_method_entry_t *cme;
16033 if (orig_me->defined_class == 0) {
16034 cme = ((void *)0);
16035 rb_notimplement();
16036 }
16037 else {
16038 cme = (const rb_callable_method_entry_t *)orig_me;
16039 }
16040 ((void)0);
16041 if ((!(cme) || !(cme)->def || (cme)->def->type == VM_METHOD_TYPE_UNDEF)) {
16042 cme = ((void *)0);
16043 }
16044 return cme;
16045}
16046static const rb_callable_method_entry_t *
16047search_refined_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16048{
16049 ID mid = vm_ci_mid(calling->ci);
16050 const rb_cref_t *cref = vm_get_cref(cfp->ep);
16051 const struct rb_callcache * const cc = calling->cc;
16052 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
16053 for (; cref; cref = CREF_NEXT(cref)) {
16054 const VALUE refinement = find_refinement(CREF_REFINEMENTS(cref), vm_cc_cme(cc)->owner);
16055 if (RB_NIL_P(refinement)) continue;
16056 const rb_callable_method_entry_t *const ref_me =
16057 rb_callable_method_entry(refinement, mid);
16058 if (ref_me) {
16059 if (vm_cc_call(cc) == vm_call_super_method) {
16060 const rb_control_frame_t *top_cfp = current_method_entry(ec, cfp);
16061 const rb_callable_method_entry_t *top_me = rb_vm_frame_method_entry(top_cfp);
16062 if (top_me && rb_method_definition_eq(ref_me->def, top_me->def)) {
16063 continue;
16064 }
16065 }
16066 if (cme->def->type != VM_METHOD_TYPE_REFINED ||
16067 cme->def != ref_me->def) {
16068 cme = ref_me;
16069 }
16070 if (ref_me->def->type != VM_METHOD_TYPE_REFINED) {
16071 return cme;
16072 }
16073 }
16074 else {
16075 return ((void *)0);
16076 }
16077 }
16078 if (vm_cc_cme(cc)->def->body.refined.orig_me) {
16079 return refined_method_callable_without_refinement(vm_cc_cme(cc));
16080 }
16081 else {
16082 VALUE klass = RCLASS_SUPER(vm_cc_cme(cc)->defined_class);
16083 const rb_callable_method_entry_t *cme = klass ? rb_callable_method_entry(klass, mid) : ((void *)0);
16084 return cme;
16085 }
16086}
16087static VALUE
16088vm_call_refined(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16089{
16090 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 }}, };
16091 if (vm_cc_cme(ref_cc)) {
16092 calling->cc= ref_cc;
16093 return vm_call_method(ec, cfp, calling);
16094 }
16095 else {
16096 return vm_call_method_nome(ec, cfp, calling);
16097 }
16098}
16099static 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);
16100__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);
16101static VALUE
16102vm_invoke_block_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16103 struct rb_calling_info *calling, const struct rb_callinfo *ci, VALUE block_handler)
16104{
16105 int argc = calling->argc;
16106 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))));
16107 (((reg_cfp)->sp) -= (((1))));
16108 return vm_invoke_block(ec, reg_cfp, calling, ci, 0, block_handler);
16109}
16110static VALUE
16111vm_call_opt_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16112{
16113 ((void)0);
16114 const struct rb_callinfo *ci = calling->ci;
16115 VALUE procval = calling->recv;
16116 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, VM_BH_FROM_PROC(procval));
16117}
16118static VALUE
16119vm_call_opt_block_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16120{
16121 ((void)0);
16122 VALUE block_handler = VM_ENV_BLOCK_HANDLER(VM_CF_LEP(reg_cfp));
16123 const struct rb_callinfo *ci = calling->ci;
16124 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_CALL)]&((1 << 12))) == 0), 1)))) {
16125 return vm_invoke_block_opt_call(ec, reg_cfp, calling, ci, block_handler);
16126 }
16127 else {
16128 calling->recv = rb_vm_bh_to_procval(ec, block_handler);
16129 calling->cc = rb_vm_search_method_slowpath(ci, rb_class_of(calling->recv));
16130 return vm_call_general(ec, reg_cfp, calling);
16131 }
16132}
16133static VALUE
16134vm_call_opt_struct_aref0(rb_execution_context_t *ec, struct rb_calling_info *calling)
16135{
16136 VALUE recv = calling->recv;
16137 ((void)0);
16138 ((void)0);
16139 ((void)0);
16140 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
16141 return internal_RSTRUCT_GET(recv, off);
16142}
16143static VALUE
16144vm_call_opt_struct_aref(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16145{
16146 ((void)0);
16147 VALUE ret = vm_call_opt_struct_aref0(ec, calling);
16148 reg_cfp->sp -= 1;
16149 return ret;
16150}
16151static VALUE
16152vm_call_opt_struct_aset0(rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE val)
16153{
16154 VALUE recv = calling->recv;
16155 ((void)0);
16156 ((void)0);
16157 ((void)0);
16158 rb_check_frozen_inline(recv);
16159 const unsigned int off = vm_cc_cme(calling->cc)->def->body.optimized.index;
16160 internal_RSTRUCT_SET(recv, off, val);
16161 return val;
16162}
16163static VALUE
16164vm_call_opt_struct_aset(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16165{
16166 ((void)0);
16167 VALUE ret = vm_call_opt_struct_aset0(ec, calling, *(reg_cfp->sp - 1));
16168 reg_cfp->sp -= 2;
16169 return ret;
16170}
16171__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);
16172static VALUE
16173vm_call_optimized(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling,
16174 const struct rb_callinfo *ci, const struct rb_callcache *cc)
16175{
16176 switch (vm_cc_cme(cc)->def->body.optimized.type) {
16177 case OPTIMIZED_METHOD_TYPE_SEND:
16178 CC_SET_FASTPATH(cc, vm_call_opt_send, 1);
16179 return vm_call_opt_send(ec, cfp, calling);
16180 case OPTIMIZED_METHOD_TYPE_CALL:
16181 CC_SET_FASTPATH(cc, vm_call_opt_call, 1);
16182 return vm_call_opt_call(ec, cfp, calling);
16183 case OPTIMIZED_METHOD_TYPE_BLOCK_CALL:
16184 CC_SET_FASTPATH(cc, vm_call_opt_block_call, 1);
16185 return vm_call_opt_block_call(ec, cfp, calling);
16186 case OPTIMIZED_METHOD_TYPE_STRUCT_AREF:
16187 CALLER_SETUP_ARG(cfp, calling, ci);
16188 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16189 rb_check_arity(calling->argc, 0, 0);
16190 CC_SET_FASTPATH(cc, vm_call_opt_struct_aref, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
16191 return vm_call_opt_struct_aref(ec, cfp, calling);
16192 case OPTIMIZED_METHOD_TYPE_STRUCT_ASET:
16193 CALLER_SETUP_ARG(cfp, calling, ci);
16194 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16195 rb_check_arity(calling->argc, 1, 1);
16196 CC_SET_FASTPATH(cc, vm_call_opt_struct_aset, (vm_ci_flag(ci) & (0x01 << VM_CALL_ARGS_SIMPLE_bit)));
16197 return vm_call_opt_struct_aset(ec, cfp, calling);
16198 default:
16199 rb_bug("vm_call_method: unsupported optimized method type (%d)", vm_cc_cme(cc)->def->body.optimized.type);
16200 }
16201}
16202COLDFUNC static VALUE
16203vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling) {
16204 const struct rb_callinfo *ci = calling->ci;
16205 const struct rb_callcache *cc = calling->cc;
16206 const rb_callable_method_entry_t *cme = vm_cc_cme(cc);
16207 VALUE v;
16208 switch (cme->def->type) {
16209 case VM_METHOD_TYPE_ISEQ:
16210 CC_SET_FASTPATH(cc, vm_call_iseq_setup, 1);
16211 return vm_call_iseq_setup(ec, cfp, calling);
16212 case VM_METHOD_TYPE_NOTIMPLEMENTED:
16213 case VM_METHOD_TYPE_CFUNC:
16214 CC_SET_FASTPATH(cc, vm_call_cfunc, 1);
16215 return vm_call_cfunc(ec, cfp, calling);
16216 case VM_METHOD_TYPE_ATTRSET:
16217 CALLER_SETUP_ARG(cfp, calling, ci);
16218 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16219 rb_check_arity(calling->argc, 1, 1);
16220 const unsigned int aset_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit) | (0x01 << VM_CALL_KWARG_bit));
16221 if (vm_cc_markable(cc)) {
16222 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
16223 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); };
16224 }
16225 else {
16226 cc = &((struct rb_callcache) {
16227 .flags = RUBY_T_IMEMO |
16228 (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) |
16229 ((VALUE)RUBY_FL_FREEZE) |
16230 ((VALUE)(((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32)) |
16231 ((VALUE)RUBY_FL_EXIVAR),
16232 .klass = cc->klass,
16233 .cme_ = cc->cme_,
16234 .call_ = cc->call_,
16235 .aux_ = {
16236 .attr = {
16237 .value = (((uintptr_t)1 << 32) - 1) << ((8 * 8) - 32),
16238 }
16239 },
16240 });
16241 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); };
16242 }
16243 return v;
16244 case VM_METHOD_TYPE_IVAR:
16245 CALLER_SETUP_ARG(cfp, calling, ci);
16246 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16247 rb_check_arity(calling->argc, 0, 0);
16248 vm_cc_attr_index_initialize(cc, (((uintptr_t)1 << 32) - 1));
16249 const unsigned int ivar_mask = ((0x01 << VM_CALL_ARGS_SPLAT_bit) | (0x01 << VM_CALL_KW_SPLAT_bit));
16250 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); };
16251 return v;
16252 case VM_METHOD_TYPE_MISSING:
16253 vm_cc_method_missing_reason_set(cc, 0);
16254 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
16255 return vm_call_method_missing(ec, cfp, calling);
16256 case VM_METHOD_TYPE_BMETHOD:
16257 CC_SET_FASTPATH(cc, vm_call_bmethod, 1);
16258 return vm_call_bmethod(ec, cfp, calling);
16259 case VM_METHOD_TYPE_ALIAS:
16260 CC_SET_FASTPATH(cc, vm_call_alias, 1);
16261 return vm_call_alias(ec, cfp, calling);
16262 case VM_METHOD_TYPE_OPTIMIZED:
16263 return vm_call_optimized(ec, cfp, calling, ci, cc);
16264 case VM_METHOD_TYPE_UNDEF:
16265 break;
16266 case VM_METHOD_TYPE_ZSUPER:
16267 return vm_call_zsuper(ec, cfp, calling, (((rb_classext_t *)((char *)(vm_cc_cme(cc)->defined_class) + sizeof(struct RClass)))->origin_));
16268 case VM_METHOD_TYPE_REFINED:
16269 return vm_call_refined(ec, cfp, calling);
16270 }
16271 rb_bug("vm_call_method: unsupported method type (%d)", vm_cc_cme(cc)->def->type);
16272}
16273__attribute__((__noreturn__)) static void vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj, int call_status);
16274static VALUE
16275vm_call_method_nome(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16276{
16277 const struct rb_callinfo *ci = calling->ci;
16278 const int stat = ci_missing_reason(ci);
16279 if (vm_ci_mid(ci) == idMethodMissing) {
16280 rb_control_frame_t *reg_cfp = cfp;
16281 VALUE *argv = (((((reg_cfp)->sp)))-(calling->argc));
16282 vm_raise_method_missing(ec, calling->argc, argv, calling->recv, stat);
16283 }
16284 else {
16285 return vm_call_method_missing_body(ec, cfp, calling, ci, stat);
16286 }
16287}
16288static VALUE
16289vm_defined_class_for_protected_call(const rb_callable_method_entry_t *me)
16290{
16291 VALUE defined_class = me->defined_class;
16292 VALUE refined_class = (((rb_classext_t *)((char *)(defined_class) + sizeof(struct RClass)))->refined_class);
16293 return RB_NIL_P(refined_class) ? defined_class : refined_class;
16294}
16295static inline VALUE
16296vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
16297{
16298 const struct rb_callinfo *ci = calling->ci;
16299 const struct rb_callcache *cc = calling->cc;
16300 ((void)0);
16301 if (vm_cc_cme(cc) != ((void *)0)) {
16302 switch ((rb_method_visibility_t)(((vm_cc_cme(cc))->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16303 case METHOD_VISI_PUBLIC:
16304 return vm_call_method_each_type(ec, cfp, calling);
16305 case METHOD_VISI_PRIVATE:
16306 if (!(vm_ci_flag(ci) & (0x01 << VM_CALL_FCALL_bit))) {
16307 enum method_missing_reason stat = MISSING_PRIVATE;
16308 if (vm_ci_flag(ci) & (0x01 << VM_CALL_VCALL_bit)) stat |= MISSING_VCALL;
16309 vm_cc_method_missing_reason_set(cc, stat);
16310 CC_SET_FASTPATH(cc, vm_call_method_missing, 1);
16311 return vm_call_method_missing(ec, cfp, calling);
16312 }
16313 return vm_call_method_each_type(ec, cfp, calling);
16314 case METHOD_VISI_PROTECTED:
16315 if (!(vm_ci_flag(ci) & ((0x01 << VM_CALL_OPT_SEND_bit) | (0x01 << VM_CALL_FCALL_bit)))) {
16316 VALUE defined_class = vm_defined_class_for_protected_call(vm_cc_cme(cc));
16317 if (!rb_obj_is_kind_of(cfp->self, defined_class)) {
16318 vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);
16319 return vm_call_method_missing(ec, cfp, calling);
16320 }
16321 else {
16322 ((void)0);
16323 struct rb_callcache cc_on_stack = *cc;
16324 RB_FL_SET_RAW((VALUE)&cc_on_stack, ((VALUE)RUBY_FL_FREEZE));
16325 calling->cc = &cc_on_stack;
16326 return vm_call_method_each_type(ec, cfp, calling);
16327 }
16328 }
16329 return vm_call_method_each_type(ec, cfp, calling);
16330 default:
16331 rb_bug("unreachable");
16332 }
16333 }
16334 else {
16335 return vm_call_method_nome(ec, cfp, calling);
16336 }
16337}
16338static VALUE
16339vm_call_general(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16340{
16341 ((void)0);
16342 return vm_call_method(ec, reg_cfp, calling);
16343}static inline
16344void
16345rb_vm_cc_general(const struct rb_callcache *cc)
16346{
16347 ((void)0);
16348 ((void)0);
16349 *(vm_call_handler *)&cc->call_ = vm_call_general;
16350}
16351static VALUE
16352vm_call_super_method(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling)
16353{
16354 ((void)0);
16355 if (ec == ((void *)0)) rb_bug("unreachable");
16356 ((void)0);
16357 return vm_call_method(ec, reg_cfp, calling);
16358}
16359static inline VALUE
16360vm_search_normal_superclass(VALUE klass)
16361{
16362 if (RB_BUILTIN_TYPE(klass) == RUBY_T_ICLASS &&
16363 RB_TYPE_P(((struct RBasic *)(klass))->klass, RUBY_T_MODULE) &&
16364 RB_FL_TEST_RAW(((struct RBasic *)(klass))->klass, RMODULE_IS_REFINEMENT)) {
16365 klass = ((struct RBasic *)(klass))->klass;
16366 }
16367 klass = (((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->origin_);
16368 return RCLASS_SUPER(klass);
16369}
16370__attribute__((__noreturn__)) static void vm_super_outside(void);
16371static void
16372vm_super_outside(void)
16373{
16374 rb_raise(rb_eNoMethodError, "super called outside of method");
16375}
16376static const struct rb_callcache *
16377empty_cc_for_super(void)
16378{
16379 return rb_vm_empty_cc_for_super();
16380}
16381static const struct rb_callcache *
16382vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *cd, VALUE recv)
16383{
16384 VALUE current_defined_class;
16385 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
16386 if (!me) {
16387 vm_super_outside();
16388 }
16389 current_defined_class = vm_defined_class_for_protected_call(me);
16390 if (RB_BUILTIN_TYPE(current_defined_class) != RUBY_T_MODULE &&
16391 reg_cfp->iseq != method_entry_iseqptr(me) &&
16392 !rb_obj_is_kind_of(recv, current_defined_class)) {
16393 VALUE m = RB_TYPE_P(current_defined_class, RUBY_T_ICLASS) ?
16394 (((rb_classext_t *)((char *)(current_defined_class) + sizeof(struct RClass)))->includer) : current_defined_class;
16395 if (m) {
16396 rb_raise(rb_eTypeError,
16397 "self has wrong type to call super in this context: "
16398 "%""l""i" "\v"" (expected %""l""i" "\v"")",
16399 rb_obj_class(recv), m);
16400 }
16401 }
16402 if (me->def->type == VM_METHOD_TYPE_BMETHOD && (vm_ci_flag(cd->ci) & (0x01 << VM_CALL_ZSUPER_bit))) {
16403 rb_raise(rb_eRuntimeError,
16404 "implicit argument passing of super from method defined"
16405 " by define_method() is not supported."
16406 " Specify all arguments explicitly.");
16407 }
16408 ID mid = me->def->original_id;
16409 cd->ci = vm_ci_new_runtime_(mid, vm_ci_flag(cd->ci), vm_ci_argc(cd->ci), vm_ci_kwarg(cd->ci), "../ruby-3.2.1/vm_insnhelper.c", 4183);
16410 (rb_obj_written((VALUE)(reg_cfp->iseq), (VALUE)(((VALUE)RUBY_Qundef)), (VALUE)(cd->ci), "../ruby-3.2.1/vm_insnhelper.c", 4188));
16411 const struct rb_callcache *cc;
16412 VALUE klass = vm_search_normal_superclass(me->defined_class);
16413 if (!klass) {
16414 cc = vm_cc_new(klass, ((void *)0), vm_call_method_missing);
16415 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
16416 ;
16417 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
16418 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 4197);
16419 }
16420 else {
16421 cc = vm_search_method_fastpath((VALUE)reg_cfp->iseq, cd, klass);
16422 const rb_callable_method_entry_t *cached_cme = vm_cc_cme(cc);
16423 if (cached_cme == ((void *)0)) {
16424 cd->cc = empty_cc_for_super();
16425 }
16426 else if (cached_cme->called_id != mid) {
16427 const rb_callable_method_entry_t *cme = rb_callable_method_entry(klass, mid);
16428 if (cme) {
16429 cc = vm_cc_new(klass, cme, vm_call_super_method);
16430 rb_obj_write((VALUE)(reg_cfp->iseq), __extension__({
16431 ;
16432 ; __typeof__((VALUE *)(&cd->cc)) unaligned_member_access_result = ((VALUE *)(&cd->cc));
16433 ; unaligned_member_access_result; }), (VALUE)(cc), "../ruby-3.2.1/vm_insnhelper.c", 4212);
16434 }
16435 else {
16436 cd->cc = cc = empty_cc_for_super();
16437 }
16438 }
16439 else {
16440 switch (cached_cme->def->type) {
16441 case VM_METHOD_TYPE_REFINED:
16442 case VM_METHOD_TYPE_ATTRSET:
16443 case VM_METHOD_TYPE_IVAR:
16444 vm_cc_call_set(cc, vm_call_super_method);
16445 break;
16446 default:
16447 break;
16448 }
16449 }
16450 }
16451 ((void)0);
16452 return cc;
16453}
16454static inline int
16455block_proc_is_lambda(const VALUE procval)
16456{
16457 rb_proc_t *proc;
16458 if (procval) {
16459 (((proc)) = (rb_proc_t*)((struct RData *)(((procval))))->data);
16460 return proc->is_lambda;
16461 }
16462 else {
16463 return 0;
16464 }
16465}
16466static VALUE
16467vm_yield_with_cfunc(rb_execution_context_t *ec,
16468 const struct rb_captured_block *captured,
16469 VALUE self, int argc, const VALUE *argv, int kw_splat, VALUE block_handler,
16470 const rb_callable_method_entry_t *me)
16471{
16472 int is_lambda = 0;
16473 VALUE val, arg, blockarg;
16474 int frame_flag;
16475 const struct vm_ifunc *ifunc = captured->code.ifunc;
16476 if (is_lambda) {
16477 arg = rb_ary_new_from_values(argc, argv);
16478 }
16479 else if (argc == 0) {
16480 arg = ((VALUE)RUBY_Qnil);
16481 }
16482 else {
16483 arg = argv[0];
16484 }
16485 blockarg = rb_vm_bh_to_procval(ec, block_handler);
16486 frame_flag = VM_FRAME_MAGIC_IFUNC | VM_FRAME_FLAG_CFRAME | (me ? VM_FRAME_FLAG_BMETHOD : 0);
16487 if (kw_splat) {
16488 frame_flag |= VM_FRAME_FLAG_CFRAME_KW;
16489 }
16490 vm_push_frame(ec, (const rb_iseq_t *)captured->code.ifunc,
16491 frame_flag,
16492 self,
16493 ((VALUE)((captured->ep)) | (0x01)),
16494 (VALUE)me,
16495 0, ec->cfp->sp, 0, 0);
16496 val = (*ifunc->func)(arg, (VALUE)ifunc->data, argc, argv, blockarg);
16497 rb_vm_pop_frame(ec);
16498 return val;
16499}
16500static VALUE
16501vm_yield_with_symbol(rb_execution_context_t *ec, VALUE symbol, int argc, const VALUE *argv, int kw_splat, VALUE block_handler)
16502{
16503 return rb_sym_proc_call(rb_sym2id(symbol), argc, argv, kw_splat, rb_vm_bh_to_procval(ec, block_handler));
16504}
16505static inline int
16506vm_callee_setup_block_arg_arg0_splat(rb_control_frame_t *cfp, const rb_iseq_t *iseq, VALUE *argv, VALUE ary)
16507{
16508 int i;
16509 long len = rb_array_len(ary);
16510 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);
16511 for (i=0; i<len && i<((iseq)->body)->param.lead_num; i++) {
16512 argv[i] = RARRAY_AREF(ary, i);
16513 }
16514 return i;
16515}
16516static inline VALUE
16517vm_callee_setup_block_arg_arg0_check(VALUE *argv)
16518{
16519 VALUE ary, arg0 = argv[0];
16520 ary = rb_check_array_type(arg0);
16521 ((void)0);
16522 return ary;
16523}
16524static int
16525vm_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)
16526{
16527 if (rb_simple_iseq_p(iseq)) {
16528 rb_control_frame_t *cfp = ec->cfp;
16529 VALUE arg0;
16530 CALLER_SETUP_ARG(cfp, calling, ci);
16531 CALLER_REMOVE_EMPTY_KW_SPLAT(cfp, calling, ci);
16532 if (arg_setup_type == arg_setup_block &&
16533 calling->argc == 1 &&
16534 ((iseq)->body)->param.flags.has_lead &&
16535 !((iseq)->body)->param.flags.ambiguous_param0 &&
16536 !RB_NIL_P(arg0 = vm_callee_setup_block_arg_arg0_check(argv))) {
16537 calling->argc = vm_callee_setup_block_arg_arg0_splat(cfp, iseq, argv, arg0);
16538 }
16539 if (calling->argc != ((iseq)->body)->param.lead_num) {
16540 if (arg_setup_type == arg_setup_block) {
16541 if (calling->argc < ((iseq)->body)->param.lead_num) {
16542 int i;
16543 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);
16544 for (i=calling->argc; i<((iseq)->body)->param.lead_num; i++) argv[i] = ((VALUE)RUBY_Qnil);
16545 calling->argc = ((iseq)->body)->param.lead_num;
16546 }
16547 else if (calling->argc > ((iseq)->body)->param.lead_num) {
16548 calling->argc = ((iseq)->body)->param.lead_num;
16549 }
16550 }
16551 else {
16552 argument_arity_error(ec, iseq, calling->argc, ((iseq)->body)->param.lead_num, ((iseq)->body)->param.lead_num);
16553 }
16554 }
16555 return 0;
16556 }
16557 else {
16558 return setup_parameters_complex(ec, iseq, calling, ci, argv, arg_setup_type);
16559 }
16560}
16561static int
16562vm_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)
16563{
16564 struct rb_calling_info calling_entry, *calling;
16565 calling = &calling_entry;
16566 calling->argc = argc;
16567 calling->block_handler = block_handler;
16568 calling->kw_splat = kw_splat;
16569 calling->recv = ((VALUE)RUBY_Qundef);
16570 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, };
16571 return vm_callee_setup_block_arg(ec, calling, &dummy_ci, iseq, argv, arg_setup_type);
16572}
16573static VALUE
16574vm_invoke_iseq_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16575 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16576 _Bool is_lambda, VALUE block_handler)
16577{
16578 const struct rb_captured_block *captured = VM_BH_TO_ISEQ_BLOCK(block_handler);
16579 const rb_iseq_t *iseq = rb_iseq_check(captured->code.iseq);
16580 const int arg_size = ((iseq)->body)->param.size;
16581 VALUE * const rsp = ((((reg_cfp)->sp))) - calling->argc;
16582 int opt_pc = vm_callee_setup_block_arg(ec, calling, ci, iseq, rsp, is_lambda ? arg_setup_method : arg_setup_block);
16583 (((reg_cfp)->sp) = (((rsp))));
16584 vm_push_frame(ec, iseq,
16585 VM_FRAME_MAGIC_BLOCK | (is_lambda ? VM_FRAME_FLAG_LAMBDA : 0),
16586 captured->self,
16587 ((VALUE)((captured->ep)) | (0x01)), 0,
16588 ((iseq)->body)->iseq_encoded + opt_pc,
16589 rsp + arg_size,
16590 ((iseq)->body)->local_table_size - arg_size, ((iseq)->body)->stack_max);
16591 return ((VALUE)RUBY_Qundef);
16592}
16593static VALUE
16594vm_invoke_symbol_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16595 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16596 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16597{
16598 if (calling->argc < 1) {
16599 rb_raise(rb_eArgError, "no receiver given");
16600 }
16601 else {
16602 VALUE symbol = VM_BH_TO_SYMBOL(block_handler);
16603 CALLER_SETUP_ARG(reg_cfp, calling, ci);
16604 calling->recv = (*(((((reg_cfp)->sp)))-(--calling->argc)-1));
16605 return vm_call_symbol(ec, reg_cfp, calling, ci, symbol, 0);
16606 }
16607}
16608static VALUE
16609vm_invoke_ifunc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16610 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16611 __attribute__ ((__unused__)) _Bool is_lambda, VALUE block_handler)
16612{
16613 VALUE val;
16614 int argc;
16615 const struct rb_captured_block *captured = VM_BH_TO_IFUNC_BLOCK(block_handler);
16616 CALLER_SETUP_ARG(ec->cfp, calling, ci);
16617 CALLER_REMOVE_EMPTY_KW_SPLAT(ec->cfp, calling, ci);
16618 argc = calling->argc;
16619 val = vm_yield_with_cfunc(ec, captured, captured->self, argc, (((((reg_cfp)->sp)))-(argc)), calling->kw_splat, calling->block_handler, ((void *)0));
16620 ((((reg_cfp)->sp) -= (((argc)))));
16621 return val;
16622}
16623static VALUE
16624vm_proc_to_block_handler(VALUE procval)
16625{
16626 const struct rb_block *block = vm_proc_block(procval);
16627 switch (vm_block_type(block)) {
16628 case block_type_iseq:
16629 return VM_BH_FROM_ISEQ_BLOCK(&block->as.captured);
16630 case block_type_ifunc:
16631 return VM_BH_FROM_IFUNC_BLOCK(&block->as.captured);
16632 case block_type_symbol:
16633 return VM_BH_FROM_SYMBOL(block->as.symbol);
16634 case block_type_proc:
16635 return VM_BH_FROM_PROC(block->as.proc);
16636 }
16637 __builtin_unreachable();
16638 return ((VALUE)RUBY_Qundef);
16639}
16640static VALUE
16641vm_invoke_proc_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16642 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16643 _Bool is_lambda, VALUE block_handler)
16644{
16645 while (vm_block_handler_type(block_handler) == block_handler_type_proc) {
16646 VALUE proc = VM_BH_TO_PROC(block_handler);
16647 is_lambda = block_proc_is_lambda(proc);
16648 block_handler = vm_proc_to_block_handler(proc);
16649 }
16650 return vm_invoke_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16651}
16652static inline VALUE
16653vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
16654 struct rb_calling_info *calling, const struct rb_callinfo *ci,
16655 _Bool is_lambda, VALUE block_handler)
16656{
16657 VALUE (*func)(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 switch (vm_block_handler_type(block_handler)) {
16661 case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
16662 case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
16663 case block_handler_type_proc: func = vm_invoke_proc_block; break;
16664 case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
16665 default: rb_bug("vm_invoke_block: unreachable");
16666 }
16667 return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
16668}
16669static VALUE
16670vm_make_proc_with_iseq(const rb_iseq_t *blockiseq)
16671{
16672 const rb_execution_context_t *ec = rb_current_execution_context(1);
16673 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
16674 struct rb_captured_block *captured;
16675 if (cfp == 0) {
16676 rb_bug("vm_make_proc_with_iseq: unreachable");
16677 }
16678 captured = VM_CFP_TO_CAPTURED_BLOCK(cfp);
16679 captured->code.iseq = blockiseq;
16680 return rb_vm_make_proc(ec, captured, rb_cProc);
16681}
16682static VALUE
16683vm_once_exec(VALUE iseq)
16684{
16685 VALUE proc = vm_make_proc_with_iseq((rb_iseq_t *)iseq);
16686 return rb_proc_call_with_block(proc, 0, 0, ((VALUE)RUBY_Qnil));
16687}
16688static VALUE
16689vm_once_clear(VALUE data)
16690{
16691 union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)data;
16692 is->once.running_thread = ((void *)0);
16693 return ((VALUE)RUBY_Qnil);
16694}
16695static _Bool
16696check_respond_to_missing(VALUE obj, VALUE v)
16697{
16698 VALUE args[2];
16699 VALUE r;
16700 args[0] = obj; args[1] = ((VALUE)RUBY_Qfalse);
16701 r = rb_check_funcall(v, idRespond_to_missing, 2, args);
16702 if (!RB_UNDEF_P(r) && RB_TEST(r)) {
16703 return 1;
16704 }
16705 else {
16706 return 0;
16707 }
16708}
16709static _Bool
16710vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16711{
16712 VALUE klass;
16713 enum defined_type type = (enum defined_type)op_type;
16714 switch (type) {
16715 case DEFINED_IVAR:
16716 return rb_ivar_defined((((((reg_cfp)))->self)), rb_sym2id(obj));
16717 break;
16718 case DEFINED_GVAR:
16719 return rb_gvar_defined(rb_sym2id(obj));
16720 break;
16721 case DEFINED_CVAR: {
16722 const rb_cref_t *cref = vm_get_cref(((((reg_cfp)->ep))));
16723 klass = vm_get_cvar_base(cref, (((reg_cfp))), 0);
16724 return rb_cvar_defined(klass, rb_sym2id(obj));
16725 break;
16726 }
16727 case DEFINED_CONST:
16728 case DEFINED_CONST_FROM: {
16729 _Bool allow_nil = type == DEFINED_CONST;
16730 klass = v;
16731 return vm_get_ev_const(ec, klass, rb_sym2id(obj), allow_nil, 1);
16732 break;
16733 }
16734 case DEFINED_FUNC:
16735 klass = rb_class_of(v);
16736 return rb_ec_obj_respond_to(ec, v, rb_sym2id(obj), 1);
16737 break;
16738 case DEFINED_METHOD:{
16739 VALUE klass = rb_class_of(v);
16740 const rb_method_entry_t *me = rb_method_entry_with_refinements(klass, rb_sym2id(obj), ((void *)0));
16741 if (me) {
16742 switch ((rb_method_visibility_t)(((me)->flags & (((VALUE)RUBY_FL_USER4) | ((VALUE)RUBY_FL_USER5))) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+0))) {
16743 case METHOD_VISI_PRIVATE:
16744 break;
16745 case METHOD_VISI_PROTECTED:
16746 if (!rb_obj_is_kind_of((((((reg_cfp)))->self)), rb_class_real(me->defined_class))) {
16747 break;
16748 }
16749 case METHOD_VISI_PUBLIC:
16750 return 1;
16751 break;
16752 default:
16753 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)));
16754 }
16755 }
16756 else {
16757 return check_respond_to_missing(obj, v);
16758 }
16759 break;
16760 }
16761 case DEFINED_YIELD:
16762 if (((VM_EP_LEP(((((reg_cfp)->ep)))))[(-1)]) != 0) {
16763 return 1;
16764 }
16765 break;
16766 case DEFINED_ZSUPER:
16767 {
16768 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry((((reg_cfp))));
16769 if (me) {
16770 VALUE klass = vm_search_normal_superclass(me->defined_class);
16771 ID id = me->def->original_id;
16772 return rb_method_boundp(klass, id, 0);
16773 }
16774 }
16775 break;
16776 case DEFINED_REF:{
16777 return vm_getspecial(ec, (VM_EP_LEP(((((reg_cfp)->ep))))), ((VALUE)RUBY_Qfalse), RB_FIX2INT(obj)) != ((VALUE)RUBY_Qnil);
16778 break;
16779 }
16780 default:
16781 rb_bug("unimplemented defined? type (VM)");
16782 break;
16783 }
16784 return 0;
16785}static inline
16786_Bool
16787rb_vm_defined(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t op_type, VALUE obj, VALUE v)
16788{
16789 return vm_defined(ec, reg_cfp, op_type, obj, v);
16790}
16791static const VALUE *
16792vm_get_ep(const VALUE *const reg_ep, rb_num_t lv)
16793{
16794 rb_num_t i;
16795 const VALUE *ep = reg_ep;
16796 for (i = 0; i < lv; i++) {
16797 ep = ((VALUE *)((ep)[(-1)] & ~0x03));
16798 }
16799 return ep;
16800}
16801static VALUE
16802vm_get_special_object(const VALUE *const reg_ep,
16803 enum vm_special_object_type type)
16804{
16805 switch (type) {
16806 case VM_SPECIAL_OBJECT_VMCORE:
16807 return rb_mRubyVMFrozenCore;
16808 case VM_SPECIAL_OBJECT_CBASE:
16809 return vm_get_cbase(reg_ep);
16810 case VM_SPECIAL_OBJECT_CONST_BASE:
16811 return vm_get_const_base(reg_ep);
16812 default:
16813 rb_bug("putspecialobject insn: unknown value_type %d", type);
16814 }
16815}
16816static VALUE
16817vm_concat_array(VALUE ary1, VALUE ary2st)
16818{
16819 const VALUE ary2 = ary2st;
16820 VALUE tmp1 = rb_check_to_array(ary1);
16821 VALUE tmp2 = rb_check_to_array(ary2);
16822 if (RB_NIL_P(tmp1)) {
16823 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); });
16824 }
16825 if (RB_NIL_P(tmp2)) {
16826 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); });
16827 }
16828 if (tmp1 == ary1) {
16829 tmp1 = rb_ary_dup(ary1);
16830 }
16831 return rb_ary_concat(tmp1, tmp2);
16832}static inline
16833VALUE
16834rb_vm_concat_array(VALUE ary1, VALUE ary2st)
16835{
16836 return vm_concat_array(ary1, ary2st);
16837}
16838static VALUE
16839vm_splat_array(VALUE flag, VALUE ary)
16840{
16841 VALUE tmp = rb_check_to_array(ary);
16842 if (RB_NIL_P(tmp)) {
16843 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); });
16844 }
16845 else if (RB_TEST(flag)) {
16846 return rb_ary_dup(tmp);
16847 }
16848 else {
16849 return tmp;
16850 }
16851}static inline
16852VALUE
16853rb_vm_splat_array(VALUE flag, VALUE ary)
16854{
16855 return vm_splat_array(flag, ary);
16856}
16857static VALUE
16858vm_check_match(rb_execution_context_t *ec, VALUE target, VALUE pattern, rb_num_t flag)
16859{
16860 enum vm_check_match_type type = ((int)flag) & 0x03;
16861 if (flag & 0x04) {
16862 long i;
16863 const long n = rb_array_len(pattern);
16864 for (i = 0; i < n; i++) {
16865 VALUE v = RARRAY_AREF(pattern, i);
16866 VALUE c = check_match(ec, v, target, type);
16867 if (RB_TEST(c)) {
16868 return c;
16869 }
16870 }
16871 return ((VALUE)RUBY_Qfalse);
16872 }
16873 else {
16874 return check_match(ec, pattern, target, type);
16875 }
16876}
16877static VALUE
16878vm_check_keyword(lindex_t bits, lindex_t idx, const VALUE *ep)
16879{
16880 const VALUE kw_bits = *(ep - bits);
16881 if (RB_FIXNUM_P(kw_bits)) {
16882 unsigned int b = (unsigned int)rb_fix2ulong(kw_bits);
16883 if ((idx < (32-1)) && (b & (0x01 << idx)))
16884 return ((VALUE)RUBY_Qfalse);
16885 }
16886 else {
16887 ((void)0);
16888 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);
16889 }
16890 return ((VALUE)RUBY_Qtrue);
16891}
16892static void
16893vm_dtrace(rb_event_flag_t flag, rb_execution_context_t *ec)
16894{
16895 if (0 ||
16896 0 ||
16897 0 ||
16898 0) {
16899 switch (flag) {
16900 case 0x0008:
16901 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);
16902 return;
16903 case 0x0020:
16904 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);
16905 return;
16906 case 0x0010:
16907 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);
16908 return;
16909 case 0x0040:
16910 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);
16911 return;
16912 }
16913 }
16914}
16915static VALUE
16916vm_const_get_under(ID id, rb_num_t flags, VALUE cbase)
16917{
16918 if (!rb_const_defined_at(cbase, id)) {
16919 return 0;
16920 }
16921 else if (((flags) & 0x08)) {
16922 return rb_public_const_get_at(cbase, id);
16923 }
16924 else {
16925 return rb_const_get_at(cbase, id);
16926 }
16927}
16928static VALUE
16929vm_check_if_class(ID id, rb_num_t flags, VALUE super, VALUE klass)
16930{
16931 if (!RB_TYPE_P(klass, RUBY_T_CLASS)) {
16932 return 0;
16933 }
16934 else if (((flags) & 0x10)) {
16935 VALUE tmp = rb_class_real(RCLASS_SUPER(klass));
16936 if (tmp != super) {
16937 rb_raise(rb_eTypeError,
16938 "superclass mismatch for class %""l""i" "\v""",
16939 rb_id2str(id));
16940 }
16941 else {
16942 return klass;
16943 }
16944 }
16945 else {
16946 return klass;
16947 }
16948}
16949static VALUE
16950vm_check_if_module(ID id, VALUE mod)
16951{
16952 if (!RB_TYPE_P(mod, RUBY_T_MODULE)) {
16953 return 0;
16954 }
16955 else {
16956 return mod;
16957 }
16958}
16959static VALUE
16960declare_under(ID id, VALUE cbase, VALUE c)
16961{
16962 rb_set_class_path_string(c, cbase, rb_id2str(id));
16963 rb_const_set(cbase, id, c);
16964 return c;
16965}
16966static VALUE
16967vm_declare_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16968{
16969 VALUE s = ((flags) & 0x10) ? super : rb_cObject;
16970 VALUE c = declare_under(id, cbase, rb_define_class_id(id, s));
16971 rb_define_alloc_func(c, rb_get_alloc_func(c));
16972 rb_class_inherited(s, c);
16973 return c;
16974}
16975static VALUE
16976vm_declare_module(ID id, VALUE cbase)
16977{
16978 return declare_under(id, cbase, rb_module_new());
16979}
16980__attribute__((__noreturn__)) static void unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old);
16981static void
16982unmatched_redefinition(const char *type, VALUE cbase, ID id, VALUE old)
16983{
16984 VALUE name = rb_id2str(id);
16985 VALUE message = rb_sprintf("%""l""i" "\v"" is not a %s",
16986 name, type);
16987 VALUE location = rb_const_source_location_at(cbase, id);
16988 if (!RB_NIL_P(location)) {
16989 rb_str_catf(message, "\n%""l""i" "\v"":%""l""i" "\v"":"
16990 " previous definition of %""l""i" "\v"" was here",
16991 rb_ary_entry(location, 0), rb_ary_entry(location, 1), name);
16992 }
16993 rb_exc_raise(rb_exc_new_str(rb_eTypeError, message));
16994}
16995static VALUE
16996vm_define_class(ID id, rb_num_t flags, VALUE cbase, VALUE super)
16997{
16998 VALUE klass;
16999 if (((flags) & 0x10) && !RB_TYPE_P(super, RUBY_T_CLASS)) {
17000 rb_raise(rb_eTypeError,
17001 "superclass must be an instance of Class (given an instance of %""l""i" "\v"")",
17002 rb_obj_class(super));
17003 }
17004 vm_check_if_namespace(cbase);
17005 rb_autoload_load(cbase, id);
17006 if ((klass = vm_const_get_under(id, flags, cbase)) != 0) {
17007 if (!vm_check_if_class(id, flags, super, klass))
17008 unmatched_redefinition("class", cbase, id, klass);
17009 return klass;
17010 }
17011 else {
17012 return vm_declare_class(id, flags, cbase, super);
17013 }
17014}
17015static VALUE
17016vm_define_module(ID id, rb_num_t flags, VALUE cbase)
17017{
17018 VALUE mod;
17019 vm_check_if_namespace(cbase);
17020 if ((mod = vm_const_get_under(id, flags, cbase)) != 0) {
17021 if (!vm_check_if_module(id, mod))
17022 unmatched_redefinition("module", cbase, id, mod);
17023 return mod;
17024 }
17025 else {
17026 return vm_declare_module(id, cbase);
17027 }
17028}
17029static VALUE
17030vm_find_or_create_class_by_id(ID id,
17031 rb_num_t flags,
17032 VALUE cbase,
17033 VALUE super)
17034{
17035 rb_vm_defineclass_type_t type = ((rb_vm_defineclass_type_t)(flags) & VM_DEFINECLASS_TYPE_MASK);
17036 switch (type) {
17037 case VM_DEFINECLASS_TYPE_CLASS:
17038 return vm_define_class(id, flags, cbase, super);
17039 case VM_DEFINECLASS_TYPE_SINGLETON_CLASS:
17040 return rb_singleton_class(cbase);
17041 case VM_DEFINECLASS_TYPE_MODULE:
17042 return vm_define_module(id, flags, cbase);
17043 default:
17044 rb_bug("unknown defineclass type: %d", (int)type);
17045 }
17046}
17047static rb_method_visibility_t
17048vm_scope_visibility_get(const rb_execution_context_t *ec)
17049{
17050 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
17051 if (!vm_env_cref_by_cref(cfp->ep)) {
17052 return METHOD_VISI_PUBLIC;
17053 }
17054 else {
17055 return CREF_SCOPE_VISI(vm_ec_cref(ec))->method_visi;
17056 }
17057}
17058static int
17059vm_scope_module_func_check(const rb_execution_context_t *ec)
17060{
17061 const rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
17062 if (!vm_env_cref_by_cref(cfp->ep)) {
17063 return 0;
17064 }
17065 else {
17066 return CREF_SCOPE_VISI(vm_ec_cref(ec))->module_func;
17067 }
17068}
17069static void
17070vm_define_method(const rb_execution_context_t *ec, VALUE obj, ID id, VALUE iseqval, int is_singleton)
17071{
17072 VALUE klass;
17073 rb_method_visibility_t visi;
17074 rb_cref_t *cref = vm_ec_cref(ec);
17075 if (is_singleton) {
17076 klass = rb_singleton_class(obj);
17077 visi = METHOD_VISI_PUBLIC;
17078 }
17079 else {
17080 klass = CREF_CLASS_FOR_DEFINITION(cref);
17081 visi = vm_scope_visibility_get(ec);
17082 }
17083 if (RB_NIL_P(klass)) {
17084 rb_raise(rb_eTypeError, "no class/module to add method");
17085 }
17086 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, visi);
17087 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)) {
17088 ((rb_classext_t *)((char *)(klass) + sizeof(struct RClass)))->max_iv_count = rb_estimate_iv_count(klass, (const rb_iseq_t *)iseqval);
17089 }
17090 if (!is_singleton && vm_scope_module_func_check(ec)) {
17091 klass = rb_singleton_class(klass);
17092 rb_add_method_iseq(klass, id, (const rb_iseq_t *)iseqval, cref, METHOD_VISI_PUBLIC);
17093 }
17094}
17095static VALUE
17096vm_invokeblock_i(struct rb_execution_context_struct *ec,
17097 struct rb_control_frame_struct *reg_cfp,
17098 struct rb_calling_info *calling)
17099{
17100 const struct rb_callinfo *ci = calling->ci;
17101 VALUE block_handler = VM_CF_BLOCK_HANDLER((((reg_cfp))));
17102 if (block_handler == 0) {
17103 rb_vm_localjump_error("no block given (yield)", ((VALUE)RUBY_Qnil), 0);
17104 }
17105 else {
17106 return vm_invoke_block(ec, (((reg_cfp))), calling, ci, 0, block_handler);
17107 }
17108}
17109static const struct rb_callcache *
17110vm_search_method_wrap(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
17111{
17112 return vm_search_method((VALUE)reg_cfp->iseq, cd, recv);
17113}
17114static const struct rb_callcache *
17115vm_search_invokeblock(const struct rb_control_frame_struct *reg_cfp, struct rb_call_data *cd, VALUE recv)
17116{
17117 static const struct rb_callcache cc = {
17118 .flags = RUBY_T_IMEMO | (imemo_callcache << ((VALUE)RUBY_FL_USHIFT)) | ((VALUE)RUBY_FL_FREEZE),
17119 .klass = 0,
17120 .cme_ = 0,
17121 .call_ = vm_invokeblock_i,
17122 .aux_ = {0},
17123 };
17124 return &cc;
17125}
17126static
17127VALUE
17128vm_sendish(
17129 struct rb_execution_context_struct *ec,
17130 struct rb_control_frame_struct *reg_cfp,
17131 struct rb_call_data *cd,
17132 VALUE block_handler,
17133 const struct rb_callcache *(*method_explorer)(const struct rb_control_frame_struct *cfp, struct rb_call_data *cd, VALUE recv)
17134) {
17135 VALUE val = ((VALUE)RUBY_Qundef);
17136 const struct rb_callinfo *ci = cd->ci;
17137 const struct rb_callcache *cc;
17138 int argc = vm_ci_argc(ci);
17139 VALUE recv = (*(((((reg_cfp)->sp)))-(argc)-1));
17140 struct rb_calling_info calling = {
17141 .block_handler = block_handler,
17142 .kw_splat = (vm_ci_flag(ci) & (0x01 << VM_CALL_KW_SPLAT_bit)) > 0,
17143 .recv = recv,
17144 .argc = argc,
17145 .ci = ci,
17146 };
17147 calling.cc = cc = method_explorer((((reg_cfp))), cd, recv);
17148 val = vm_cc_call(cc)(ec, (((reg_cfp))), &calling);
17149 if (!RB_UNDEF_P(val)) {
17150 return val;
17151 }
17152 else {
17153 do { (reg_cfp) = ec->cfp; } while (0);
17154 }
17155 if (((((((reg_cfp)))->iseq))->body)->catch_except_p) {
17156 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
17157 return rb_vm_exec(ec, 1);
17158 }
17159 else if (RB_UNDEF_P(val = jit_exec(ec))) {
17160 VM_ENV_FLAGS_SET(((((reg_cfp)->ep))), VM_FRAME_FLAG_FINISH);
17161 return rb_vm_exec(ec, 0);
17162 }
17163 else {
17164 return val;
17165 }
17166}
17167VALUE rb_nil_to_s(VALUE);
17168VALUE rb_true_to_s(VALUE);
17169VALUE rb_false_to_s(VALUE);
17170VALUE rb_int_to_s(int argc, VALUE *argv, VALUE x);
17171VALUE rb_fix_to_s(VALUE);
17172VALUE rb_mod_to_s(VALUE);
17173VALUE rb_mod_name(VALUE);
17174static VALUE
17175vm_objtostring(const rb_iseq_t *iseq, VALUE recv, CALL_DATA cd)
17176{
17177 int type = ((int)rb_type(recv));
17178 if (type == RUBY_T_STRING) {
17179 return recv;
17180 }
17181 const struct rb_callcache *cc = vm_search_method((VALUE)iseq, cd, recv);
17182 switch (type) {
17183 case RUBY_T_SYMBOL:
17184 if (check_cfunc(vm_cc_cme(cc), rb_sym_to_s)) {
17185 return rb_sym2str(recv);
17186 }
17187 break;
17188 case RUBY_T_MODULE:
17189 case RUBY_T_CLASS:
17190 if (check_cfunc(vm_cc_cme(cc), rb_mod_to_s)) {
17191 VALUE val = rb_mod_name(recv);
17192 if (RB_NIL_P(val)) {
17193 val = rb_mod_to_s(recv);
17194 }
17195 return val;
17196 }
17197 break;
17198 case RUBY_T_NIL:
17199 if (check_cfunc(vm_cc_cme(cc), rb_nil_to_s)) {
17200 return rb_nil_to_s(recv);
17201 }
17202 break;
17203 case RUBY_T_TRUE:
17204 if (check_cfunc(vm_cc_cme(cc), rb_true_to_s)) {
17205 return rb_true_to_s(recv);
17206 }
17207 break;
17208 case RUBY_T_FALSE:
17209 if (check_cfunc(vm_cc_cme(cc), rb_false_to_s)) {
17210 return rb_false_to_s(recv);
17211 }
17212 break;
17213 case RUBY_T_FIXNUM:
17214 if (check_cfunc(vm_cc_cme(cc), rb_int_to_s)) {
17215 return rb_fix_to_s(recv);
17216 }
17217 break;
17218 }
17219 return ((VALUE)RUBY_Qundef);
17220}
17221static VALUE
17222vm_opt_str_freeze(VALUE str, int bop, ID id)
17223{
17224 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17225 return str;
17226 }
17227 else {
17228 return ((VALUE)RUBY_Qundef);
17229 }
17230}
17231static VALUE
17232vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17233{
17234 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MAX)]&((1 << 3))) == 0), 1)))) {
17235 if (num == 0) {
17236 return ((VALUE)RUBY_Qnil);
17237 }
17238 else {
17239 VALUE result = *ptr;
17240 rb_snum_t i = num - 1;
17241 while (i-- > 0) {
17242 const VALUE v = *++ptr;
17243 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) {
17244 result = v;
17245 }
17246 }
17247 return result;
17248 }
17249 }
17250 else {
17251 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMax, 0, ((void *)0), 0);
17252 }
17253}static inline
17254VALUE
17255rb_vm_opt_newarray_max(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17256{
17257 return vm_opt_newarray_max(ec, num, ptr);
17258}
17259static VALUE
17260vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17261{
17262 if (((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MIN)]&((1 << 3))) == 0), 1)))) {
17263 if (num == 0) {
17264 return ((VALUE)RUBY_Qnil);
17265 }
17266 else {
17267 VALUE result = *ptr;
17268 rb_snum_t i = num - 1;
17269 while (i-- > 0) {
17270 const VALUE v = *++ptr;
17271 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) {
17272 result = v;
17273 }
17274 }
17275 return result;
17276 }
17277 }
17278 else {
17279 return rb_vm_call_with_refinements(ec, rb_ary_new_from_values(num, ptr), idMin, 0, ((void *)0), 0);
17280 }
17281}static inline
17282VALUE
17283rb_vm_opt_newarray_min(rb_execution_context_t *ec, rb_num_t num, const VALUE *ptr)
17284{
17285 return vm_opt_newarray_min(ec, num, ptr);
17286}
17287static void
17288vm_track_constant_cache(ID id, void *ic)
17289{
17290 struct rb_id_table *const_cache = rb_current_vm()->constant_cache;
17291 VALUE lookup_result;
17292 st_table *ics;
17293 if (rb_id_table_lookup(const_cache, id, &lookup_result)) {
17294 ics = (st_table *)lookup_result;
17295 }
17296 else {
17297 ics = rb_st_init_numtable();
17298 rb_id_table_insert(const_cache, id, (VALUE)ics);
17299 }
17300 rb_st_insert(ics, (st_data_t) ic, (st_data_t) ((VALUE)RUBY_Qtrue));
17301}
17302static void
17303vm_ic_track_const_chain(rb_control_frame_t *cfp, IC ic, const ID *segments)
17304{
17305 { unsigned int _lev; rb_vm_lock_enter(&_lev, "../ruby-3.2.1/vm_insnhelper.c", 5291);;
17306 for (int i = 0; segments[i]; i++) {
17307 ID id = segments[i];
17308 if (id == idNULL) continue;
17309 vm_track_constant_cache(id, ic);
17310 }
17311 rb_vm_lock_leave(&_lev, "../ruby-3.2.1/vm_insnhelper.c", 5299); };
17312}
17313static inline _Bool
17314vm_inlined_ic_hit_p(VALUE flags, VALUE value, const rb_cref_t *ic_cref, const VALUE *reg_ep)
17315{
17316 if ((flags & ((VALUE)RUBY_FL_USER4)) || rb_ractor_main_p()) {
17317 ((void)0);
17318 return (ic_cref == ((void *)0) ||
17319 ic_cref == vm_get_cref(reg_ep));
17320 }
17321 return 0;
17322}
17323static _Bool
17324vm_ic_hit_p(const struct iseq_inline_constant_cache_entry *ice, const VALUE *reg_ep)
17325{
17326 ((void)0);
17327 return vm_inlined_ic_hit_p(ice->flags, ice->value, ice->ic_cref, reg_ep);
17328}static inline
17329_Bool
17330rb_vm_ic_hit_p(IC ic, const VALUE *reg_ep)
17331{
17332 return ic->entry && vm_ic_hit_p(ic->entry, reg_ep);
17333}
17334COLDFUNC static void
17335vm_ic_update(const rb_iseq_t *iseq, IC ic, VALUE val, const VALUE *reg_ep, const VALUE *pc) {
17336 if (ruby_vm_const_missing_count > 0) {
17337 ruby_vm_const_missing_count = 0;
17338 ic->entry = ((void *)0);
17339 return;
17340 }
17341 struct iseq_inline_constant_cache_entry *ice = (struct iseq_inline_constant_cache_entry *)rb_imemo_new(imemo_constcache, 0, 0, 0, 0);
17342 rb_obj_write((VALUE)(ice), __extension__({
17343 ;
17344 ; __typeof__((VALUE *)(&ice->value)) unaligned_member_access_result = ((VALUE *)(&ice->value));
17345 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 5339);
17346 ice->ic_cref = vm_get_const_key_cref(reg_ep);
17347 if (rb_ractor_shareable_p(val)) ice->flags |= ((VALUE)RUBY_FL_USER4);
17348 rb_obj_write((VALUE)(iseq), __extension__({
17349 ;
17350 ; __typeof__((VALUE *)(&ic->entry)) unaligned_member_access_result = ((VALUE *)(&ic->entry));
17351 ; unaligned_member_access_result; }), (VALUE)(ice), "../ruby-3.2.1/vm_insnhelper.c", 5342);
17352 ((void)0);
17353 unsigned pos = (unsigned)(pc - ((iseq)->body)->iseq_encoded);
17354 rb_yjit_constant_ic_update(iseq, ic, pos);
17355 rb_mjit_constant_ic_update(iseq, ic, pos);
17356}
17357static VALUE
17358vm_once_dispatch(rb_execution_context_t *ec, ISEQ iseq, ISE is)
17359{
17360 rb_thread_t *th = rb_ec_thread_ptr(ec);
17361 rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
17362 again:
17363 if (is->once.running_thread == RUNNING_THREAD_ONCE_DONE) {
17364 return is->once.value;
17365 }
17366 else if (is->once.running_thread == ((void *)0)) {
17367 VALUE val;
17368 is->once.running_thread = th;
17369 val = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
17370 rb_obj_write((VALUE)(ec->cfp->iseq), __extension__({
17371 ;
17372 ; __typeof__((VALUE *)(&is->once.value)) unaligned_member_access_result = ((VALUE *)(&is->once.value));
17373 ; unaligned_member_access_result; }), (VALUE)(val), "../ruby-3.2.1/vm_insnhelper.c", 5364);
17374 is->once.running_thread = RUNNING_THREAD_ONCE_DONE;
17375 return val;
17376 }
17377 else if (is->once.running_thread == th) {
17378 return vm_once_exec((VALUE)iseq);
17379 }
17380 else {
17381 rb_vm_check_ints(ec);
17382 rb_thread_schedule();
17383 goto again;
17384 }
17385}
17386static OFFSET
17387vm_case_dispatch(CDHASH hash, OFFSET else_offset, VALUE key)
17388{
17389 switch (__extension__({ VALUE arg_obj = (key); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })) {
17390 case -1:
17391 case RUBY_T_FLOAT:
17392 case RUBY_T_SYMBOL:
17393 case RUBY_T_BIGNUM:
17394 case RUBY_T_STRING:
17395 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)))) {
17396 st_data_t val;
17397 if (RB_FLOAT_TYPE_P(key)) {
17398 double kval = rb_float_value_inline(key);
17399 if (!(__builtin_isinf_sign (kval)) && modf(kval, &kval) == 0.0) {
17400 key = (((kval) < (0x7fffffffffffffffL / 2) + 1) && ((kval) >= ((-0x7fffffffffffffffL -1L) / 2))) ? RB_INT2FIX((long)kval) : rb_dbl2big(kval);
17401 }
17402 }
17403 if (rb_hash_stlike_lookup(hash, key, &val)) {
17404 return rb_fix2long((VALUE)val);
17405 }
17406 else {
17407 return else_offset;
17408 }
17409 }
17410 }
17411 return 0;
17412}
17413__attribute__((__noreturn__)) static void vm_stack_consistency_error(const rb_execution_context_t *ec, const rb_control_frame_t *, const VALUE *);
17414static void
17415vm_stack_consistency_error(const rb_execution_context_t *ec,
17416 const rb_control_frame_t *cfp,
17417 const VALUE *bp)
17418{
17419 const ptrdiff_t nsp = ((cfp->sp) - (ec)->vm_stack);
17420 const ptrdiff_t nbp = ((bp) - (ec)->vm_stack);
17421 static const char stack_consistency_error[] =
17422 "Stack consistency error (sp: %""t""d"", bp: %""t""d"")";
17423 rb_bug(stack_consistency_error, nsp, nbp);
17424}
17425ALWAYS_INLINE(static inline VALUE
17426vm_opt_plus(VALUE recv, VALUE obj));
17427static inline VALUE
17428vm_opt_plus(VALUE recv, VALUE obj) {
17429 if (FIXNUM_2_P(recv, obj) &&
17430 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 0))) == 0), 1)))) {
17431 return rb_fix_plus_fix(recv, obj);
17432 }
17433 else if (FLONUM_2_P(recv, obj) &&
17434 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
17435 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
17436 }
17437 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17438 return ((VALUE)RUBY_Qundef);
17439 }
17440 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17441 RBASIC_CLASS(obj) == rb_cFloat &&
17442 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 1))) == 0), 1)))) {
17443 return rb_float_new_inline(rb_float_value_inline(recv) + rb_float_value_inline(obj));
17444 }
17445 else if (RBASIC_CLASS(recv) == rb_cString &&
17446 RBASIC_CLASS(obj) == rb_cString &&
17447 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 2))) == 0), 1)))) {
17448 return rb_str_opt_plus(recv, obj);
17449 }
17450 else if (RBASIC_CLASS(recv) == rb_cArray &&
17451 RBASIC_CLASS(obj) == rb_cArray &&
17452 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_PLUS)]&((1 << 3))) == 0), 1)))) {
17453 return rb_ary_plus(recv, obj);
17454 }
17455 else {
17456 return ((VALUE)RUBY_Qundef);
17457 }
17458}
17459ALWAYS_INLINE(static inline VALUE
17460vm_opt_minus(VALUE recv, VALUE obj));
17461static inline VALUE
17462vm_opt_minus(VALUE recv, VALUE obj) {
17463 if (FIXNUM_2_P(recv, obj) &&
17464 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 0))) == 0), 1)))) {
17465 return rb_fix_minus_fix(recv, obj);
17466 }
17467 else if (FLONUM_2_P(recv, obj) &&
17468 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
17469 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
17470 }
17471 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17472 return ((VALUE)RUBY_Qundef);
17473 }
17474 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17475 RBASIC_CLASS(obj) == rb_cFloat &&
17476 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MINUS)]&((1 << 1))) == 0), 1)))) {
17477 return rb_float_new_inline(rb_float_value_inline(recv) - rb_float_value_inline(obj));
17478 }
17479 else {
17480 return ((VALUE)RUBY_Qundef);
17481 }
17482}
17483ALWAYS_INLINE(static inline VALUE
17484vm_opt_mult(VALUE recv, VALUE obj));
17485static inline VALUE
17486vm_opt_mult(VALUE recv, VALUE obj) {
17487 if (FIXNUM_2_P(recv, obj) &&
17488 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 0))) == 0), 1)))) {
17489 return rb_fix_mul_fix(recv, obj);
17490 }
17491 else if (FLONUM_2_P(recv, obj) &&
17492 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
17493 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
17494 }
17495 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17496 return ((VALUE)RUBY_Qundef);
17497 }
17498 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17499 RBASIC_CLASS(obj) == rb_cFloat &&
17500 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MULT)]&((1 << 1))) == 0), 1)))) {
17501 return rb_float_new_inline(rb_float_value_inline(recv) * rb_float_value_inline(obj));
17502 }
17503 else {
17504 return ((VALUE)RUBY_Qundef);
17505 }
17506}
17507ALWAYS_INLINE(static inline VALUE
17508vm_opt_div(VALUE recv, VALUE obj));
17509static inline VALUE
17510vm_opt_div(VALUE recv, VALUE obj) {
17511 if (FIXNUM_2_P(recv, obj) &&
17512 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 0))) == 0), 1)))) {
17513 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_div_fix(recv, obj);
17514 }
17515 else if (FLONUM_2_P(recv, obj) &&
17516 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17517 return rb_flo_div_flo(recv, obj);
17518 }
17519 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17520 return ((VALUE)RUBY_Qundef);
17521 }
17522 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17523 RBASIC_CLASS(obj) == rb_cFloat &&
17524 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_DIV)]&((1 << 1))) == 0), 1)))) {
17525 return rb_flo_div_flo(recv, obj);
17526 }
17527 else {
17528 return ((VALUE)RUBY_Qundef);
17529 }
17530}
17531ALWAYS_INLINE(static inline VALUE
17532vm_opt_mod(VALUE recv, VALUE obj));
17533static inline VALUE
17534vm_opt_mod(VALUE recv, VALUE obj) {
17535 if (FIXNUM_2_P(recv, obj) &&
17536 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 0))) == 0), 1)))) {
17537 return (rb_fix2long(obj) == 0) ? ((VALUE)RUBY_Qundef) : rb_fix_mod_fix(recv, obj);
17538 }
17539 else if (FLONUM_2_P(recv, obj) &&
17540 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17541 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17542 }
17543 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17544 return ((VALUE)RUBY_Qundef);
17545 }
17546 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17547 RBASIC_CLASS(obj) == rb_cFloat &&
17548 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MOD)]&((1 << 1))) == 0), 1)))) {
17549 return rb_float_new_inline(ruby_float_mod(rb_float_value_inline(recv), rb_float_value_inline(obj)));
17550 }
17551 else {
17552 return ((VALUE)RUBY_Qundef);
17553 }
17554}
17555ALWAYS_INLINE(static inline VALUE
17556vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj));
17557static inline VALUE
17558vm_opt_neq(const rb_iseq_t *iseq, CALL_DATA cd, CALL_DATA cd_eq, VALUE recv, VALUE obj) {
17559 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not_equal)) {
17560 VALUE val = opt_equality(iseq, recv, obj, cd_eq);
17561 if (!RB_UNDEF_P(val)) {
17562 return ((!RB_TEST(val)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17563 }
17564 }
17565 return ((VALUE)RUBY_Qundef);
17566}
17567ALWAYS_INLINE(static inline VALUE
17568vm_opt_lt(VALUE recv, VALUE obj));
17569static inline VALUE
17570vm_opt_lt(VALUE recv, VALUE obj) {
17571 if (FIXNUM_2_P(recv, obj) &&
17572 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 0))) == 0), 1)))) {
17573 return (((long)recv < (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17574 }
17575 else if (FLONUM_2_P(recv, obj) &&
17576 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17577 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17578 }
17579 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17580 return ((VALUE)RUBY_Qundef);
17581 }
17582 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17583 RBASIC_CLASS(obj) == rb_cFloat &&
17584 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LT)]&((1 << 1))) == 0), 1)))) {
17585 ;
17586 return ((rb_float_value_inline(recv) < rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17587 }
17588 else {
17589 return ((VALUE)RUBY_Qundef);
17590 }
17591}
17592ALWAYS_INLINE(static inline VALUE
17593vm_opt_le(VALUE recv, VALUE obj));
17594static inline VALUE
17595vm_opt_le(VALUE recv, VALUE obj) {
17596 if (FIXNUM_2_P(recv, obj) &&
17597 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 0))) == 0), 1)))) {
17598 return (((long)recv <= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17599 }
17600 else if (FLONUM_2_P(recv, obj) &&
17601 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17602 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17603 }
17604 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17605 return ((VALUE)RUBY_Qundef);
17606 }
17607 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17608 RBASIC_CLASS(obj) == rb_cFloat &&
17609 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LE)]&((1 << 1))) == 0), 1)))) {
17610 ;
17611 return ((rb_float_value_inline(recv) <= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17612 }
17613 else {
17614 return ((VALUE)RUBY_Qundef);
17615 }
17616}
17617ALWAYS_INLINE(static inline VALUE
17618vm_opt_gt(VALUE recv, VALUE obj));
17619static inline VALUE
17620vm_opt_gt(VALUE recv, VALUE obj) {
17621 if (FIXNUM_2_P(recv, obj) &&
17622 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 0))) == 0), 1)))) {
17623 return (((long)recv > (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17624 }
17625 else if (FLONUM_2_P(recv, obj) &&
17626 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17627 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17628 }
17629 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17630 return ((VALUE)RUBY_Qundef);
17631 }
17632 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17633 RBASIC_CLASS(obj) == rb_cFloat &&
17634 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GT)]&((1 << 1))) == 0), 1)))) {
17635 ;
17636 return ((rb_float_value_inline(recv) > rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17637 }
17638 else {
17639 return ((VALUE)RUBY_Qundef);
17640 }
17641}
17642ALWAYS_INLINE(static inline VALUE
17643vm_opt_ge(VALUE recv, VALUE obj));
17644static inline VALUE
17645vm_opt_ge(VALUE recv, VALUE obj) {
17646 if (FIXNUM_2_P(recv, obj) &&
17647 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 0))) == 0), 1)))) {
17648 return (((long)recv >= (long)obj) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17649 }
17650 else if (FLONUM_2_P(recv, obj) &&
17651 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17652 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17653 }
17654 else if (RB_SPECIAL_CONST_P(recv) || RB_SPECIAL_CONST_P(obj)) {
17655 return ((VALUE)RUBY_Qundef);
17656 }
17657 else if (RBASIC_CLASS(recv) == rb_cFloat &&
17658 RBASIC_CLASS(obj) == rb_cFloat &&
17659 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_GE)]&((1 << 1))) == 0), 1)))) {
17660 ;
17661 return ((rb_float_value_inline(recv) >= rb_float_value_inline(obj)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17662 }
17663 else {
17664 return ((VALUE)RUBY_Qundef);
17665 }
17666}
17667ALWAYS_INLINE(static inline VALUE
17668vm_opt_ltlt(VALUE recv, VALUE obj));
17669static inline VALUE
17670vm_opt_ltlt(VALUE recv, VALUE obj) {
17671 if (RB_SPECIAL_CONST_P(recv)) {
17672 return ((VALUE)RUBY_Qundef);
17673 }
17674 else if (RBASIC_CLASS(recv) == rb_cString &&
17675 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LTLT)]&((1 << 2))) == 0), 1)))) {
17676 if ((__builtin_expect(!!(RB_TYPE_P(obj, RUBY_T_STRING)), 1))) {
17677 return rb_str_buf_append(recv, obj);
17678 }
17679 else {
17680 return rb_str_concat(recv, obj);
17681 }
17682 }
17683 else if (RBASIC_CLASS(recv) == rb_cArray &&
17684 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_LTLT)]&((1 << 3))) == 0), 1)))) {
17685 return rb_ary_push(recv, obj);
17686 }
17687 else {
17688 return ((VALUE)RUBY_Qundef);
17689 }
17690}
17691ALWAYS_INLINE(static inline VALUE
17692vm_opt_and(VALUE recv, VALUE obj));
17693static inline VALUE
17694vm_opt_and(VALUE recv, VALUE obj) {
17695 VALUE ret = ((long) recv) & ((long) obj);
17696 if (RB_FIXNUM_P(ret) &&
17697 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AND)]&((1 << 0))) == 0), 1)))) {
17698 return ret;
17699 }
17700 else {
17701 return ((VALUE)RUBY_Qundef);
17702 }
17703}
17704ALWAYS_INLINE(static inline VALUE
17705vm_opt_or(VALUE recv, VALUE obj));
17706static inline VALUE
17707vm_opt_or(VALUE recv, VALUE obj) {
17708 if (FIXNUM_2_P(recv, obj) &&
17709 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_OR)]&((1 << 0))) == 0), 1)))) {
17710 return recv | obj;
17711 }
17712 else {
17713 return ((VALUE)RUBY_Qundef);
17714 }
17715}
17716ALWAYS_INLINE(static inline VALUE
17717vm_opt_aref(VALUE recv, VALUE obj));
17718static inline VALUE
17719vm_opt_aref(VALUE recv, VALUE obj) {
17720 if (RB_SPECIAL_CONST_P(recv)) {
17721 if (FIXNUM_2_P(recv, obj) &&
17722 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 0))) == 0), 1)))) {
17723 return rb_fix_aref(recv, obj);
17724 }
17725 return ((VALUE)RUBY_Qundef);
17726 }
17727 else if (RBASIC_CLASS(recv) == rb_cArray &&
17728 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 3))) == 0), 1)))) {
17729 if (RB_FIXNUM_P(obj)) {
17730 return rb_ary_entry_internal(recv, rb_fix2long(obj));
17731 }
17732 else {
17733 return rb_ary_aref1(recv, obj);
17734 }
17735 }
17736 else if (RBASIC_CLASS(recv) == rb_cHash &&
17737 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1)))) {
17738 return rb_hash_aref(recv, obj);
17739 }
17740 else {
17741 return ((VALUE)RUBY_Qundef);
17742 }
17743}
17744ALWAYS_INLINE(static inline VALUE
17745vm_opt_aset(VALUE recv, VALUE obj, VALUE set));
17746static inline VALUE
17747vm_opt_aset(VALUE recv, VALUE obj, VALUE set) {
17748 if (RB_SPECIAL_CONST_P(recv)) {
17749 return ((VALUE)RUBY_Qundef);
17750 }
17751 else if (RBASIC_CLASS(recv) == rb_cArray &&
17752 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 3))) == 0), 1))) &&
17753 RB_FIXNUM_P(obj)) {
17754 rb_ary_store(recv, rb_fix2long(obj), set);
17755 return set;
17756 }
17757 else if (RBASIC_CLASS(recv) == rb_cHash &&
17758 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1)))) {
17759 rb_hash_aset(recv, obj, set);
17760 return set;
17761 }
17762 else {
17763 return ((VALUE)RUBY_Qundef);
17764 }
17765}
17766ALWAYS_INLINE(static inline VALUE
17767vm_opt_aref_with(VALUE recv, VALUE key));
17768static inline VALUE
17769vm_opt_aref_with(VALUE recv, VALUE key) {
17770 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17771 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_AREF)]&((1 << 4))) == 0), 1))) &&
17772 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse) &&
17773 !RB_FL_TEST(recv, RHASH_PROC_DEFAULT)) {
17774 return rb_hash_aref(recv, key);
17775 }
17776 else {
17777 return ((VALUE)RUBY_Qundef);
17778 }
17779}
17780ALWAYS_INLINE(static inline VALUE
17781vm_opt_aset_with(VALUE recv, VALUE key, VALUE val));
17782static inline VALUE
17783vm_opt_aset_with(VALUE recv, VALUE key, VALUE val) {
17784 if (!RB_SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash &&
17785 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_ASET)]&((1 << 4))) == 0), 1))) &&
17786 rb_hash_compare_by_id_p(recv) == ((VALUE)RUBY_Qfalse)) {
17787 return rb_hash_aset(recv, key, val);
17788 }
17789 else {
17790 return ((VALUE)RUBY_Qundef);
17791 }
17792}
17793static VALUE
17794vm_opt_length(VALUE recv, int bop)
17795{
17796 if (RB_SPECIAL_CONST_P(recv)) {
17797 return ((VALUE)RUBY_Qundef);
17798 }
17799 else if (RBASIC_CLASS(recv) == rb_cString &&
17800 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 2))) == 0), 1)))) {
17801 if (bop == BOP_EMPTY_P) {
17802 return rb_long2num_inline(RSTRING_LEN(recv));
17803 }
17804 else {
17805 return rb_str_length(recv);
17806 }
17807 }
17808 else if (RBASIC_CLASS(recv) == rb_cArray &&
17809 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 3))) == 0), 1)))) {
17810 return rb_long2num_inline(rb_array_len(recv));
17811 }
17812 else if (RBASIC_CLASS(recv) == rb_cHash &&
17813 ((__builtin_expect(!!((ruby_vm_redefined_flag[(bop)]&((1 << 4))) == 0), 1)))) {
17814 return __builtin_choose_expr( __builtin_constant_p(RHASH_SIZE(recv)), ((VALUE)(RHASH_SIZE(recv))) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(RHASH_SIZE(recv)));
17815 }
17816 else {
17817 return ((VALUE)RUBY_Qundef);
17818 }
17819}
17820static VALUE
17821vm_opt_empty_p(VALUE recv)
17822{
17823 switch (vm_opt_length(recv, BOP_EMPTY_P)) {
17824 case ((VALUE)RUBY_Qundef): return ((VALUE)RUBY_Qundef);
17825 case __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0)): return ((VALUE)RUBY_Qtrue);
17826 default: return ((VALUE)RUBY_Qfalse);
17827 }
17828}
17829VALUE rb_false(VALUE obj);
17830static VALUE
17831vm_opt_nil_p(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv)
17832{
17833 if (RB_NIL_P(recv) &&
17834 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_NIL_P)]&((1 << 9))) == 0), 1)))) {
17835 return ((VALUE)RUBY_Qtrue);
17836 }
17837 else if (vm_method_cfunc_is(iseq, cd, recv, rb_false)) {
17838 return ((VALUE)RUBY_Qfalse);
17839 }
17840 else {
17841 return ((VALUE)RUBY_Qundef);
17842 }
17843}
17844static VALUE
17845fix_succ(VALUE x)
17846{
17847 switch (x) {
17848 case ~0UL:
17849 return __builtin_choose_expr( __builtin_constant_p(0), ((VALUE)(0)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(0));
17850 case ((~0UL)>>(int)(1)):
17851 return rb_uint2big(1UL << (8 * 8 - 2));
17852 default:
17853 return x + 2;
17854 }
17855}
17856static VALUE
17857vm_opt_succ(VALUE recv)
17858{
17859 if (RB_FIXNUM_P(recv) &&
17860 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_SUCC)]&((1 << 0))) == 0), 1)))) {
17861 return fix_succ(recv);
17862 }
17863 else if (RB_SPECIAL_CONST_P(recv)) {
17864 return ((VALUE)RUBY_Qundef);
17865 }
17866 else if (RBASIC_CLASS(recv) == rb_cString &&
17867 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_SUCC)]&((1 << 2))) == 0), 1)))) {
17868 return rb_str_succ(recv);
17869 }
17870 else {
17871 return ((VALUE)RUBY_Qundef);
17872 }
17873}
17874ALWAYS_INLINE(static inline VALUE
17875vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv));
17876static inline VALUE
17877vm_opt_not(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv) {
17878 if (vm_method_cfunc_is(iseq, cd, recv, rb_obj_not)) {
17879 return ((!RB_TEST(recv)) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
17880 }
17881 else {
17882 return ((VALUE)RUBY_Qundef);
17883 }
17884}
17885static VALUE
17886vm_opt_regexpmatch2(VALUE recv, VALUE obj)
17887{
17888 if (RB_SPECIAL_CONST_P(recv)) {
17889 return ((VALUE)RUBY_Qundef);
17890 }
17891 else if (RBASIC_CLASS(recv) == rb_cString &&
17892 rb_class_of(obj) == rb_cRegexp &&
17893 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MATCH)]&((1 << 2))) == 0), 1)))) {
17894 return rb_reg_match(obj, recv);
17895 }
17896 else if (RBASIC_CLASS(recv) == rb_cRegexp &&
17897 ((__builtin_expect(!!((ruby_vm_redefined_flag[(BOP_MATCH)]&((1 << 8))) == 0), 1)))) {
17898 return rb_reg_match(recv, obj);
17899 }
17900 else {
17901 return ((VALUE)RUBY_Qundef);
17902 }
17903}
17904rb_event_flag_t rb_iseq_event_flags(const rb_iseq_t *iseq, size_t pos);
17905__attribute__((__noinline__)) static void vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp);
17906static inline void
17907vm_trace_hook(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const VALUE *pc,
17908 rb_event_flag_t pc_events, rb_event_flag_t target_event,
17909 rb_hook_list_t *global_hooks, rb_hook_list_t *const *local_hooks_ptr, VALUE val)
17910{
17911 rb_event_flag_t event = pc_events & target_event;
17912 VALUE self = (((((reg_cfp)))->self));
17913 ((void)0);
17914 if (event & global_hooks->events) {
17915 reg_cfp->pc++;
17916 vm_dtrace(event, ec);
17917 rb_exec_event_hook_orig(ec, global_hooks, event, self, 0, 0, 0 , val, 0);
17918 reg_cfp->pc--;
17919 }
17920 rb_hook_list_t *local_hooks = *local_hooks_ptr;
17921 if (local_hooks != ((void *)0)) {
17922 if (event & local_hooks->events) {
17923 reg_cfp->pc++;
17924 rb_exec_event_hook_orig(ec, local_hooks, event, self, 0, 0, 0 , val, 0);
17925 reg_cfp->pc--;
17926 }
17927 }
17928}static inline
17929_Bool
17930rb_vm_opt_cfunc_p(CALL_CACHE cc, int insn)
17931{
17932 switch (insn) {
17933 case YARVINSN_opt_eq:
17934 return check_cfunc(vm_cc_cme(cc), rb_obj_equal);
17935 case YARVINSN_opt_nil_p:
17936 return check_cfunc(vm_cc_cme(cc), rb_false);
17937 case YARVINSN_opt_not:
17938 return check_cfunc(vm_cc_cme(cc), rb_obj_not);
17939 default:
17940 return 0;
17941 }
17942}
17943static void
17944vm_trace(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp)
17945{
17946 const VALUE *pc = reg_cfp->pc;
17947 rb_event_flag_t enabled_flags = ruby_vm_event_flags & (0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010| 0x0020| 0x0040| 0x0100| 0x0200| 0x010000| 0x020000);
17948 rb_event_flag_t global_events = enabled_flags;
17949 if (enabled_flags == 0 && ruby_vm_event_local_num == 0) {
17950 return;
17951 }
17952 else {
17953 const rb_iseq_t *iseq = reg_cfp->iseq;
17954 VALUE iseq_val = (VALUE)iseq;
17955 size_t pos = pc - ((iseq)->body)->iseq_encoded;
17956 rb_event_flag_t pc_events = rb_iseq_event_flags(iseq, pos);
17957 rb_hook_list_t *local_hooks = iseq->aux.exec.local_hooks;
17958 rb_hook_list_t *const *local_hooks_ptr = &iseq->aux.exec.local_hooks;
17959 rb_event_flag_t iseq_local_events = local_hooks != ((void *)0) ? local_hooks->events : 0;
17960 rb_hook_list_t *bmethod_local_hooks = ((void *)0);
17961 rb_hook_list_t **bmethod_local_hooks_ptr = ((void *)0);
17962 rb_event_flag_t bmethod_local_events = 0;
17963 const _Bool bmethod_frame = VM_FRAME_BMETHOD_P(reg_cfp);
17964 enabled_flags |= iseq_local_events;
17965 ((void)0);
17966 if (bmethod_frame) {
17967 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(reg_cfp);
17968 ((void)0);
17969 bmethod_local_hooks = me->def->body.bmethod.hooks;
17970 bmethod_local_hooks_ptr = &me->def->body.bmethod.hooks;
17971 if (bmethod_local_hooks) {
17972 bmethod_local_events = bmethod_local_hooks->events;
17973 }
17974 }
17975 if ((pc_events & enabled_flags) == 0 && !bmethod_frame) {
17976 return;
17977 }
17978 else if (ec->trace_arg != ((void *)0)) {
17979 return;
17980 }
17981 else {
17982 rb_hook_list_t *global_hooks = rb_ec_ractor_hooks(ec);
17983 rb_event_flag_t bmethod_events = global_events | bmethod_local_events;
17984 if (0) {
17985 ruby_debug_printf("vm_trace>>%4d (%4x) - %s:%d %s\n",
17986 (int)pos,
17987 (int)pc_events,
17988 RSTRING_PTR(rb_iseq_path(iseq)),
17989 (int)rb_iseq_line_no(iseq, pos),
17990 RSTRING_PTR(rb_iseq_label(iseq)));
17991 }
17992 ((void)0);
17993 ((void)0);
17994 if ((pc_events & 0x0100) && bmethod_frame && (bmethod_events & 0x0008)) {
17995 vm_trace_hook(ec, reg_cfp, pc, 0x0008, 0x0008, global_hooks, bmethod_local_hooks_ptr, ((VALUE)RUBY_Qundef));
17996 }
17997 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);
17998 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);
17999 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);
18000 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);
18001 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);
18002 if ((pc_events & 0x0200) && bmethod_frame && (bmethod_events & 0x0010)) {
18003 vm_trace_hook(ec, reg_cfp, pc, 0x0010, 0x0010, global_hooks, bmethod_local_hooks_ptr, (*(((((reg_cfp)->sp)))-(0)-1)));
18004 }
18005 (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(iseq_val); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }));
18006 }
18007 }
18008}static inline
18009void Init_vm_stack_canary(void) { }
18010static VALUE
18011builtin_invoker0(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18012{
18013 typedef VALUE (*rb_invoke_funcptr0_t)(rb_execution_context_t *ec, VALUE self);
18014 return (*(rb_invoke_funcptr0_t)funcptr)(ec, self);
18015}
18016static VALUE
18017builtin_invoker1(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18018{
18019 typedef VALUE (*rb_invoke_funcptr1_t)(rb_execution_context_t *ec, VALUE self, VALUE v1);
18020 return (*(rb_invoke_funcptr1_t)funcptr)(ec, self, argv[0]);
18021}
18022static VALUE
18023builtin_invoker2(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18024{
18025 typedef VALUE (*rb_invoke_funcptr2_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2);
18026 return (*(rb_invoke_funcptr2_t)funcptr)(ec, self, argv[0], argv[1]);
18027}
18028static VALUE
18029builtin_invoker3(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18030{
18031 typedef VALUE (*rb_invoke_funcptr3_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3);
18032 return (*(rb_invoke_funcptr3_t)funcptr)(ec, self, argv[0], argv[1], argv[2]);
18033}
18034static VALUE
18035builtin_invoker4(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18036{
18037 typedef VALUE (*rb_invoke_funcptr4_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4);
18038 return (*(rb_invoke_funcptr4_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3]);
18039}
18040static VALUE
18041builtin_invoker5(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18042{
18043 typedef VALUE (*rb_invoke_funcptr5_t)(rb_execution_context_t *ec, VALUE self, VALUE v1, VALUE v2, VALUE v3, VALUE v4, VALUE v5);
18044 return (*(rb_invoke_funcptr5_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4]);
18045}
18046static VALUE
18047builtin_invoker6(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18048{
18049 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);
18050 return (*(rb_invoke_funcptr6_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
18051}
18052static VALUE
18053builtin_invoker7(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18054{
18055 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);
18056 return (*(rb_invoke_funcptr7_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]);
18057}
18058static VALUE
18059builtin_invoker8(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18060{
18061 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);
18062 return (*(rb_invoke_funcptr8_t)funcptr)(ec, self, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
18063}
18064static VALUE
18065builtin_invoker9(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18066{
18067 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);
18068 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]);
18069}
18070static VALUE
18071builtin_invoker10(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18072{
18073 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);
18074 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]);
18075}
18076static VALUE
18077builtin_invoker11(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18078{
18079 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);
18080 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]);
18081}
18082static VALUE
18083builtin_invoker12(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18084{
18085 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);
18086 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]);
18087}
18088static VALUE
18089builtin_invoker13(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18090{
18091 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);
18092 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]);
18093}
18094static VALUE
18095builtin_invoker14(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18096{
18097 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);
18098 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]);
18099}
18100static VALUE
18101builtin_invoker15(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr)
18102{
18103 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);
18104 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]);
18105}
18106typedef VALUE (*builtin_invoker)(rb_execution_context_t *ec, VALUE self, const VALUE *argv, rb_insn_func_t funcptr);
18107static builtin_invoker
18108lookup_builtin_invoker(int argc)
18109{
18110 static const builtin_invoker invokers[] = {
18111 builtin_invoker0,
18112 builtin_invoker1,
18113 builtin_invoker2,
18114 builtin_invoker3,
18115 builtin_invoker4,
18116 builtin_invoker5,
18117 builtin_invoker6,
18118 builtin_invoker7,
18119 builtin_invoker8,
18120 builtin_invoker9,
18121 builtin_invoker10,
18122 builtin_invoker11,
18123 builtin_invoker12,
18124 builtin_invoker13,
18125 builtin_invoker14,
18126 builtin_invoker15,
18127 };
18128 return invokers[argc];
18129}
18130static inline VALUE
18131invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const struct rb_builtin_function* bf, const VALUE *argv)
18132{
18133 const _Bool canary_p = ((reg_cfp->iseq)->body)->builtin_inline_p;
18134 if (canary_p) {} else {};
18135 VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, (rb_insn_func_t)bf->func_ptr);
18136 if (canary_p) {(void)(YARVINSN_invokebuiltin);};
18137 return ret;
18138}
18139static VALUE
18140vm_invoke_builtin(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function* bf, const VALUE *argv)
18141{
18142 return invoke_bf(ec, cfp, bf, argv);
18143}
18144static VALUE
18145vm_invoke_builtin_delegate(rb_execution_context_t *ec, rb_control_frame_t *cfp, const struct rb_builtin_function *bf, unsigned int start_index)
18146{
18147 if (0) {
18148 fputs("vm_invoke_builtin_delegate: passing -> ", (((__getreent()))->_stderr));
18149 for (int i=0; i<bf->argc; i++) {
18150 ruby_debug_printf(":%s ", rb_id2name(((cfp->iseq)->body)->local_table[i+start_index]));
18151 }
18152 ruby_debug_printf("\n" "%s %s(%d):%p\n", __func__, bf->name, bf->argc, bf->func_ptr);
18153 }
18154 if (bf->argc == 0) {
18155 return invoke_bf(ec, cfp, bf, ((void *)0));
18156 }
18157 else {
18158 const VALUE *argv = cfp->ep - ((cfp->iseq)->body)->local_table_size - ( 3) + 1 + start_index;
18159 return invoke_bf(ec, cfp, bf, argv);
18160 }
18161}static inline
18162VALUE
18163rb_vm_lvar_exposed(rb_execution_context_t *ec, int index)
18164{
18165 const rb_control_frame_t *cfp = ec->cfp;
18166 return cfp->ep[index];
18167}
18168struct local_var_list {
18169 VALUE tbl;
18170};
18171static 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);
18172static 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);
18173static inline VALUE vm_yield(rb_execution_context_t *ec, int argc, const VALUE *argv, int kw_splat);
18174static inline VALUE vm_yield_with_block(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE block_handler, int kw_splat);
18175static inline VALUE vm_yield_force_blockarg(rb_execution_context_t *ec, VALUE args);
18176VALUE rb_vm_exec(rb_execution_context_t *ec, _Bool jit_enable_p);
18177static 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);
18178static int vm_collect_local_variables_in_heap(const VALUE *dfp, const struct local_var_list *vars);
18179static VALUE rb_eUncaughtThrow;
18180static ID id_result, id_tag, id_value;
18181typedef enum call_type {
18182 CALL_PUBLIC,
18183 CALL_FCALL,
18184 CALL_VCALL,
18185 CALL_PUBLIC_KW,
18186 CALL_FCALL_KW,
18187 CALL_TYPE_MAX
18188} call_type;
18189static VALUE send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope);
18190static VALUE vm_call0_body(rb_execution_context_t* ec, struct rb_calling_info *calling, const VALUE *argv);
18191static inline void
18192stack_check(rb_execution_context_t *ec)
18193{
18194 if (!(((ec)->raised_flag & (RAISED_STACKOVERFLOW)) != 0) &&
18195 rb_ec_stack_check(ec)) {
18196 ((ec)->raised_flag |= (RAISED_STACKOVERFLOW));
18197 rb_ec_stack_overflow(ec, 0);
18198 }
18199}
18200static void
18201raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv, VALUE obj,
18202 enum method_missing_reason last_call_status)
18203{
18204 VALUE exc = rb_eNoMethodError;
18205 VALUE format = 0;
18206 if ((__builtin_expect(!!(argc == 0), 0))) {
18207 rb_raise(rb_eArgError, "no method name given");
18208 }
18209 else if ((__builtin_expect(!!(!RB_SYMBOL_P(argv[0])), 0))) {
18210 const VALUE e = rb_eArgError;
18211 rb_raise(e, "method name must be a Symbol but %""l""i" "\v"" is given",
18212 rb_obj_class(argv[0]));
18213 }
18214 stack_check(ec);
18215 if (last_call_status & MISSING_PRIVATE) {
18216 format = rb_fstring_new(("private method `%s' called for %s%s%s"), (sizeof("private method `%s' called for %s%s%s" "") - 1));
18217 }
18218 else if (last_call_status & MISSING_PROTECTED) {
18219 format = rb_fstring_new(("protected method `%s' called for %s%s%s"), (sizeof("protected method `%s' called for %s%s%s" "") - 1));
18220 }
18221 else if (last_call_status & MISSING_VCALL) {
18222 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));
18223 exc = rb_eNameError;
18224 }
18225 else if (last_call_status & MISSING_SUPER) {
18226 format = rb_fstring_new(("super: no superclass method `%s' for %s%s%s"), (sizeof("super: no superclass method `%s' for %s%s%s" "") - 1));
18227 }
18228 {
18229 exc = rb_make_no_method_exception(exc, format, obj, argc, argv,
18230 last_call_status & (MISSING_FCALL|MISSING_VCALL));
18231 if (!(last_call_status & MISSING_MISSING)) {
18232 rb_vm_pop_cfunc_frame();
18233 }
18234 rb_exc_raise(exc);
18235 }
18236}
18237static void
18238vm_raise_method_missing(rb_execution_context_t *ec, int argc, const VALUE *argv,
18239 VALUE obj, int call_status)
18240{
18241 vm_passed_block_handler_set(ec, 0);
18242 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
18243}
18244static inline VALUE
18245method_missing(rb_execution_context_t *ec, VALUE obj, ID id, int argc, const VALUE *argv, enum method_missing_reason call_status, int kw_splat)
18246{
18247 VALUE *nargv, result, work, klass;
18248 VALUE block_handler = vm_passed_block_handler(ec);
18249 const rb_callable_method_entry_t *me;
18250 ec->method_missing_reason = call_status;
18251 if (id == idMethodMissing) {
18252 goto missing;
18253 }
18254 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))));
18255 nargv[0] = rb_id2sym(id);
18256 ruby_nonempty_memcpy((nargv + 1), (argv), rbimpl_size_mul_or_raise(sizeof(VALUE), (argc)));
18257 ++argc;
18258 argv = nargv;
18259 klass = rb_class_of(obj);
18260 if (!klass) goto missing;
18261 me = rb_callable_method_entry(klass, idMethodMissing);
18262 if (!me || (int) (((me)->flags & (((VALUE)RUBY_FL_USER6) )) >> ((((VALUE)RUBY_FL_USHIFT) + 4)+2))) goto missing;
18263 vm_passed_block_handler_set(ec, block_handler);
18264 result = rb_vm_call_kw(ec, obj, idMethodMissing, argc, argv, me, kw_splat);
18265 if (work) rb_free_tmp_buffer(&(work));
18266 return result;
18267 missing:
18268 raise_method_missing(ec, argc, argv, obj, call_status | MISSING_MISSING);
18269 __builtin_unreachable();
18270}
18271static rb_control_frame_t *
18272vm_get_ruby_level_caller_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
18273{
18274 if (VM_FRAME_RUBYFRAME_P(cfp)) {
18275 return (rb_control_frame_t *)cfp;
18276 }
18277 cfp = ((cfp)+1);
18278 while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(ec, cfp)) {
18279 if (VM_FRAME_RUBYFRAME_P(cfp)) {
18280 return (rb_control_frame_t *)cfp;
18281 }
18282 if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_PASSED) == 0) {
18283 break;
18284 }
18285 cfp = ((cfp)+1);
18286 }
18287 return 0;
18288}
18289static void
18290rb_vm_pop_cfunc_frame(void)
18291{
18292 rb_execution_context_t *ec = rb_current_execution_context(1);
18293 rb_control_frame_t *cfp = ec->cfp;
18294 const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
18295 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);
18296 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);
18297 vm_pop_frame(ec, cfp, cfp->ep);
18298}
18299static VALUE
18300vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18301{
18302 ((void)0);
18303 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 0);
18304}
18305static VALUE
18306vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18307{
18308 ((void)0);
18309 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 1);
18310}
18311static VALUE
18312vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18313{
18314 ((void)0);
18315 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 2);
18316}
18317static VALUE
18318vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18319{
18320 ((void)0);
18321 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 3);
18322}
18323static VALUE
18324vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18325{
18326 ((void)0);
18327 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 4);
18328}
18329static VALUE
18330vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18331{
18332 ((void)0);
18333 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 5);
18334}
18335static VALUE
18336vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18337{
18338 ((void)0);
18339 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 0);
18340}
18341static VALUE
18342vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18343{
18344 ((void)0);
18345 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 1);
18346}
18347static VALUE
18348vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18349{
18350 ((void)0);
18351 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 2);
18352}
18353static VALUE
18354vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18355{
18356 ((void)0);
18357 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 3);
18358}
18359static VALUE
18360vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18361{
18362 ((void)0);
18363 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 4);
18364}
18365static VALUE
18366vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18367{
18368 ((void)0);
18369 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 5);
18370}
18371static VALUE
18372vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18373{
18374 ((void)0);
18375 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 0);
18376}
18377static VALUE
18378vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18379{
18380 ((void)0);
18381 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 1);
18382}
18383static VALUE
18384vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18385{
18386 ((void)0);
18387 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 2);
18388}
18389static VALUE
18390vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18391{
18392 ((void)0);
18393 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 3);
18394}
18395static VALUE
18396vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18397{
18398 ((void)0);
18399 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 4);
18400}
18401static VALUE
18402vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18403{
18404 ((void)0);
18405 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 5);
18406}
18407static VALUE
18408vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18409{
18410 ((void)0);
18411 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 0);
18412}
18413static VALUE
18414vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18415{
18416 ((void)0);
18417 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 1);
18418}
18419static VALUE
18420vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18421{
18422 ((void)0);
18423 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 2);
18424}
18425static VALUE
18426vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18427{
18428 ((void)0);
18429 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 3);
18430}
18431static VALUE
18432vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18433{
18434 ((void)0);
18435 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 4);
18436}
18437static VALUE
18438vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
18439{
18440 ((void)0);
18441 return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 5);
18442}
18443static const vm_call_handler vm_call_iseq_handlers[][6] = {
18444 {
18445 vm_call_iseq_setup_normal_0start_0params_0locals,
18446 vm_call_iseq_setup_normal_0start_0params_1locals,
18447 vm_call_iseq_setup_normal_0start_0params_2locals,
18448 vm_call_iseq_setup_normal_0start_0params_3locals,
18449 vm_call_iseq_setup_normal_0start_0params_4locals,
18450 vm_call_iseq_setup_normal_0start_0params_5locals,
18451 },
18452 {
18453 vm_call_iseq_setup_normal_0start_1params_0locals,
18454 vm_call_iseq_setup_normal_0start_1params_1locals,
18455 vm_call_iseq_setup_normal_0start_1params_2locals,
18456 vm_call_iseq_setup_normal_0start_1params_3locals,
18457 vm_call_iseq_setup_normal_0start_1params_4locals,
18458 vm_call_iseq_setup_normal_0start_1params_5locals,
18459 },
18460 {
18461 vm_call_iseq_setup_normal_0start_2params_0locals,
18462 vm_call_iseq_setup_normal_0start_2params_1locals,
18463 vm_call_iseq_setup_normal_0start_2params_2locals,
18464 vm_call_iseq_setup_normal_0start_2params_3locals,
18465 vm_call_iseq_setup_normal_0start_2params_4locals,
18466 vm_call_iseq_setup_normal_0start_2params_5locals,
18467 },
18468 {
18469 vm_call_iseq_setup_normal_0start_3params_0locals,
18470 vm_call_iseq_setup_normal_0start_3params_1locals,
18471 vm_call_iseq_setup_normal_0start_3params_2locals,
18472 vm_call_iseq_setup_normal_0start_3params_3locals,
18473 vm_call_iseq_setup_normal_0start_3params_4locals,
18474 vm_call_iseq_setup_normal_0start_3params_5locals,
18475 },
18476};
18477static inline vm_call_handler
18478vm_call_iseq_setup_func(const struct rb_callinfo *ci, const int param_size, const int local_size)
18479{
18480 if ((__builtin_expect(!!(vm_ci_flag(ci) & (0x01 << VM_CALL_TAILCALL_bit)), 0))) {
18481 return &vm_call_iseq_setup_tailcall_0start;
18482 }
18483 else if (0) {
18484 return &vm_call_iseq_setup_normal_0start;
18485 }
18486 else if (param_size <= 3 && local_size <= 5) {
18487 ((void)0);
18488 return vm_call_iseq_handlers[param_size][local_size];
18489 }
18490 else {
18491 return &vm_call_iseq_setup_normal_0start;
18492 }
18493}
18494#define MJIT_HEADER 1
18495#undef _FORTIFY_SOURCE
18496#define _FORTIFY_SOURCE 2
18497#define RUBY_EXPORT 1
18498#define _XOPEN_SOURCE 1
18499#define _GNU_SOURCE 1
18500#define vm_exec rb_vm_exec
18501#define RUBY_EVAL_INTERN_H
18502#define RUBY_RUBY_H 1
18503#define RBIMPL_CONFIG_H
18504#define INCLUDE_RUBY_CONFIG_H 1
18505#define HAVE_STDIO_H 1
18506#define HAVE_STDLIB_H 1
18507#define HAVE_STRING_H 1
18508#define HAVE_INTTYPES_H 1
18509#define HAVE_STDINT_H 1
18510#define HAVE_STRINGS_H 1
18511#define HAVE_SYS_STAT_H 1
18512#define HAVE_SYS_TYPES_H 1
18513#define HAVE_UNISTD_H 1
18514#define HAVE_WCHAR_H 1
18515#define STDC_HEADERS 1
18516#define _ALL_SOURCE 1
18517#define _DARWIN_C_SOURCE 1
18518#define _GNU_SOURCE 1
18519#define _HPUX_ALT_XOPEN_SOCKET_API 1
18520#define _NETBSD_SOURCE 1
18521#define _OPENBSD_SOURCE 1
18522#define _POSIX_PTHREAD_SEMANTICS 1
18523#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
18524#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
18525#define __STDC_WANT_IEC_60559_DFP_EXT__ 1
18526#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
18527#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
18528#define __STDC_WANT_LIB_EXT2__ 1
18529#define __STDC_WANT_MATH_SPEC_FUNCS__ 1
18530#define _TANDEM_SOURCE 1
18531#define __EXTENSIONS__ 1
18532#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)")
18533#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop")
18534#define HAVE_STMT_AND_DECL_IN_EXPR 1
18535#define HAVE_PTHREAD_H 1
18536#define _REENTRANT 1
18537#define _THREAD_SAFE 1
18538#define HAVE_LIBPTHREAD 1
18539#define THREAD_IMPL_H "thread_pthread.h"
18540#define THREAD_IMPL_SRC "thread_pthread.c"
18541#define HAVE_CYGWIN_CONV_PATH 1
18542#define HAVE_LIBCRYPT 1
18543#define HAVE_LIBDL 1
18544#define HAVE_DIRENT_H 1
18545#define HAVE__BOOL 1
18546#define HAVE_STDBOOL_H 1
18547#define HAVE_SYS_WAIT_H 1
18548#define HAVE_GRP_H 1
18549#define HAVE_FCNTL_H 1
18550#define HAVE_FLOAT_H 1
18551#define HAVE_IEEEFP_H 1
18552#define HAVE_LANGINFO_H 1
18553#define HAVE_LIMITS_H 1
18554#define HAVE_LOCALE_H 1
18555#define HAVE_MALLOC_H 1
18556#define HAVE_PROCESS_H 1
18557#define HAVE_PWD_H 1
18558#define HAVE_STDALIGN_H 1
18559#define HAVE_STDIO_H 1
18560#define HAVE_SYS_FCNTL_H 1
18561#define HAVE_SYS_FILE_H 1
18562#define HAVE_SYS_IOCTL_H 1
18563#define HAVE_SYS_PARAM_H 1
18564#define HAVE_SYS_RANDOM_H 1
18565#define HAVE_SYS_RESOURCE_H 1
18566#define HAVE_SYS_SELECT_H 1
18567#define HAVE_SYS_SOCKET_H 1
18568#define HAVE_SYS_SYSMACROS_H 1
18569#define HAVE_SYS_TIME_H 1
18570#define HAVE_SYS_TIMES_H 1
18571#define HAVE_SYS_UIO_H 1
18572#define HAVE_SYS_UTIME_H 1
18573#define HAVE_TIME_H 1
18574#define HAVE_UCONTEXT_H 1
18575#define HAVE_UTIME_H 1
18576#define HAVE_X86INTRIN_H 1
18577#define HAVE_X86INTRIN_H 1
18578#define HAVE_GMP_H 1
18579#define HAVE_LIBGMP 1
18580#define HAVE_TYPEOF 1
18581#define restrict __restrict__
18582#define HAVE_LONG_LONG 1
18583#define HAVE_OFF_T 1
18584#define SIZEOF_INT 4
18585#define SIZEOF_SHORT 2
18586#define SIZEOF_LONG 8
18587#define SIZEOF_LONG_LONG 8
18588#define SIZEOF___INT64 0
18589#define SIZEOF___INT128 16
18590#define SIZEOF_OFF_T 8
18591#define SIZEOF_VOIDP 8
18592#define SIZEOF_FLOAT 4
18593#define SIZEOF_DOUBLE 8
18594#define SIZEOF_TIME_T 8
18595#define SIZEOF_CLOCK_T 8
18596#define PACKED_STRUCT(x) x __attribute__((packed))
18597#define USE_UNALIGNED_MEMBER_ACCESS 1
18598#define PRI_LL_PREFIX "ll"
18599#define HAVE_PID_T 1
18600#define rb_pid_t pid_t
18601#define SIGNEDNESS_OF_PID_T -1
18602#define PIDT2NUM(v) INT2NUM(v)
18603#define NUM2PIDT(v) NUM2INT(v)
18604#define PRI_PIDT_PREFIX PRI_INT_PREFIX
18605#define HAVE_UID_T 1
18606#define rb_uid_t uid_t
18607#define SIGNEDNESS_OF_UID_T +1
18608#define UIDT2NUM(v) UINT2NUM(v)
18609#define NUM2UIDT(v) NUM2UINT(v)
18610#define PRI_UIDT_PREFIX PRI_INT_PREFIX
18611#define HAVE_GID_T 1
18612#define rb_gid_t gid_t
18613#define SIGNEDNESS_OF_GID_T +1
18614#define GIDT2NUM(v) UINT2NUM(v)
18615#define NUM2GIDT(v) NUM2UINT(v)
18616#define PRI_GIDT_PREFIX PRI_INT_PREFIX
18617#define HAVE_TIME_T 1
18618#define rb_time_t time_t
18619#define SIGNEDNESS_OF_TIME_T -1
18620#define TIMET2NUM(v) LONG2NUM(v)
18621#define NUM2TIMET(v) NUM2LONG(v)
18622#define PRI_TIMET_PREFIX PRI_LONG_PREFIX
18623#define HAVE_DEV_T 1
18624#define rb_dev_t dev_t
18625#define SIGNEDNESS_OF_DEV_T +1
18626#define DEVT2NUM(v) UINT2NUM(v)
18627#define NUM2DEVT(v) NUM2UINT(v)
18628#define PRI_DEVT_PREFIX PRI_INT_PREFIX
18629#define HAVE_MODE_T 1
18630#define rb_mode_t mode_t
18631#define SIGNEDNESS_OF_MODE_T +1
18632#define MODET2NUM(v) UINT2NUM(v)
18633#define NUM2MODET(v) NUM2UINT(v)
18634#define PRI_MODET_PREFIX PRI_INT_PREFIX
18635#define HAVE_RLIM_T 1
18636#define rb_rlim_t rlim_t
18637#define SIGNEDNESS_OF_RLIM_T +1
18638#define RLIM2NUM(v) ULONG2NUM(v)
18639#define NUM2RLIM(v) NUM2ULONG(v)
18640#define PRI_RLIM_PREFIX PRI_LONG_PREFIX
18641#define HAVE_OFF_T 1
18642#define rb_off_t off_t
18643#define SIGNEDNESS_OF_OFF_T -1
18644#define OFFT2NUM(v) LONG2NUM(v)
18645#define NUM2OFFT(v) NUM2LONG(v)
18646#define PRI_OFFT_PREFIX PRI_LONG_PREFIX
18647#define HAVE_CLOCKID_T 1
18648#define rb_clockid_t clockid_t
18649#define SIGNEDNESS_OF_CLOCKID_T +1
18650#define CLOCKID2NUM(v) ULONG2NUM(v)
18651#define NUM2CLOCKID(v) NUM2ULONG(v)
18652#define PRI_CLOCKID_PREFIX PRI_LONG_PREFIX
18653#define HAVE_VA_ARGS_MACRO 1
18654#define HAVE__ALIGNOF 1
18655#define CONSTFUNC(x) __attribute__ ((__const__)) x
18656#define PUREFUNC(x) __attribute__ ((__pure__)) x
18657#define NORETURN(x) __attribute__ ((__noreturn__)) x
18658#define DEPRECATED(x) __attribute__ ((__deprecated__)) x
18659#define DEPRECATED_BY(n,x) __attribute__ ((__deprecated__("by "#n))) x
18660#define NOINLINE(x) __attribute__ ((__noinline__)) x
18661#define NO_SANITIZE(san,x) __attribute__ ((__no_sanitize__(san))) x
18662#define NO_SANITIZE_ADDRESS(x) __attribute__ ((__no_sanitize_address__)) x
18663#define NO_ADDRESS_SAFETY_ANALYSIS(x) __attribute__ ((__no_address_safety_analysis__)) x
18664#define WARN_UNUSED_RESULT(x) __attribute__ ((__warn_unused_result__)) x
18665#define MAYBE_UNUSED(x) __attribute__ ((__unused__)) x
18666#define ERRORFUNC(mesg,x) __attribute__ ((__error__ mesg)) x
18667#define WARNINGFUNC(mesg,x) __attribute__ ((__warning__ mesg)) x
18668#define WEAK(x) __attribute__ ((__weak__)) x
18669#define HAVE_FUNC_WEAK 1
18670#define RUBY_CXX_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
18671#define HAVE_NULLPTR 1
18672#define FUNC_STDCALL(x) __attribute__ ((__stdcall__)) x
18673#define FUNC_CDECL(x) __attribute__ ((__cdecl__)) x
18674#define FUNC_FASTCALL(x) __attribute__ ((__fastcall__)) x
18675#define FUNC_UNOPTIMIZED(x) __attribute__ ((__optimize__("O0"))) x
18676#define FUNC_MINIMIZED(x) __attribute__ ((__optimize__("-Os","-fomit-frame-pointer"))) x
18677#define HAVE_ATTRIBUTE_FUNCTION_ALIAS 1
18678#define RUBY_ALIAS_FUNCTION_TYPE(type,prot,name,args) type prot __attribute__((alias(#name)));
18679#define RUBY_ALIAS_FUNCTION_VOID(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)
18680#define HAVE_GCC_ATOMIC_BUILTINS 1
18681#define HAVE_GCC_SYNC_BUILTINS 1
18682#define HAVE___BUILTIN_UNREACHABLE 1
18683#define RUBY_FUNC_EXPORTED __attribute__ ((__visibility__("default"))) extern
18684#define RUBY_FUNC_NONNULL(n,x) __attribute__ ((__nonnull__(n))) x
18685#define RUBY_FUNCTION_NAME_STRING __func__
18686#define ENUM_OVER_INT 1
18687#define HAVE_DECL_SYS_NERR 1
18688#define HAVE_DECL_GETENV 1
18689#define SIZEOF_SIZE_T 8
18690#define SIZEOF_PTRDIFF_T 8
18691#define SIZEOF_DEV_T 4
18692#define PRI_SIZE_PREFIX "z"
18693#define PRI_PTRDIFF_PREFIX "t"
18694#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
18695#define HAVE_STRUCT_STAT_ST_BLOCKS 1
18696#define HAVE_STRUCT_STAT_ST_RDEV 1
18697#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_OFF_T
18698#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_OFF_T
18699#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG
18700#define SIZEOF_STRUCT_STAT_ST_DEV SIZEOF_DEV_T
18701#define SIZEOF_STRUCT_STAT_ST_RDEV SIZEOF_DEV_T
18702#define HAVE_STRUCT_STAT_ST_ATIM 1
18703#define HAVE_STRUCT_STAT_ST_MTIM 1
18704#define HAVE_STRUCT_STAT_ST_CTIM 1
18705#define HAVE_STRUCT_TIMEVAL 1
18706#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T
18707#define HAVE_STRUCT_TIMESPEC 1
18708#define HAVE_STRUCT_TIMEZONE 1
18709#define HAVE_RB_FD_INIT 1
18710#define HAVE_INT8_T 1
18711#define SIZEOF_INT8_T 1
18712#define HAVE_UINT8_T 1
18713#define SIZEOF_UINT8_T 1
18714#define HAVE_INT16_T 1
18715#define SIZEOF_INT16_T 2
18716#define HAVE_UINT16_T 1
18717#define SIZEOF_UINT16_T 2
18718#define HAVE_INT32_T 1
18719#define SIZEOF_INT32_T 4
18720#define HAVE_UINT32_T 1
18721#define SIZEOF_UINT32_T 4
18722#define HAVE_INT64_T 1
18723#define SIZEOF_INT64_T 8
18724#define HAVE_UINT64_T 1
18725#define SIZEOF_UINT64_T 8
18726#define HAVE_INT128_T 1
18727#define int128_t __int128
18728#define SIZEOF_INT128_T SIZEOF___INT128
18729#define HAVE_UINT128_T 1
18730#define uint128_t unsigned __int128
18731#define SIZEOF_UINT128_T SIZEOF___INT128
18732#define HAVE_INTPTR_T 1
18733#define SIZEOF_INTPTR_T 8
18734#define HAVE_UINTPTR_T 1
18735#define SIZEOF_UINTPTR_T 8
18736#define HAVE_SSIZE_T 1
18737#define SIZEOF_SSIZE_T 8
18738#define GETGROUPS_T gid_t
18739#define HAVE_ALLOCA_H 1
18740#define HAVE_ALLOCA 1
18741#define HAVE_DUP 1
18742#define HAVE_DUP2 1
18743#define HAVE_ACOSH 1
18744#define HAVE_CBRT 1
18745#define HAVE_CRYPT 1
18746#define HAVE_ERF 1
18747#define HAVE_EXPLICIT_BZERO 1
18748#define HAVE_FFS 1
18749#define HAVE_FLOCK 1
18750#define HAVE_HYPOT 1
18751#define HAVE_LGAMMA_R 1
18752#define HAVE_MEMMOVE 1
18753#define HAVE_NAN 1
18754#define HAVE_NEXTAFTER 1
18755#define HAVE_STRCHR 1
18756#define HAVE_STRERROR 1
18757#define HAVE_STRLCAT 1
18758#define HAVE_STRLCPY 1
18759#define HAVE_STRSTR 1
18760#define HAVE_TGAMMA 1
18761#define HAVE_ISFINITE 1
18762#define HAVE_SIGNBIT 1
18763#define HAVE_FORK 1
18764#define HAVE_VFORK 1
18765#define HAVE_WORKING_VFORK 1
18766#define HAVE_WORKING_FORK 1
18767#define HAVE__LONGJMP 1
18768#define HAVE_ARC4RANDOM_BUF 1
18769#define HAVE_ATAN2L 1
18770#define HAVE_ATAN2F 1
18771#define HAVE_CHMOD 1
18772#define HAVE_CHOWN 1
18773#define HAVE_CHROOT 1
18774#define HAVE_CLOCK_GETTIME 1
18775#define HAVE_COSH 1
18776#define HAVE_CRYPT_R 1
18777#define HAVE_DIRFD 1
18778#define HAVE_DLOPEN 1
18779#define HAVE_DLADDR 1
18780#define HAVE_DUP3 1
18781#define HAVE_EACCESS 1
18782#define HAVE_ENDGRENT 1
18783#define HAVE_EXECL 1
18784#define HAVE_EXECLE 1
18785#define HAVE_EXECV 1
18786#define HAVE_EXECVE 1
18787#define HAVE_FCHMOD 1
18788#define HAVE_FCHOWN 1
18789#define HAVE_FCNTL 1
18790#define HAVE_FDATASYNC 1
18791#define HAVE_FDOPENDIR 1
18792#define HAVE_FMOD 1
18793#define HAVE_FSTATAT 1
18794#define HAVE_FSYNC 1
18795#define HAVE_FTRUNCATE 1
18796#define HAVE_GETCWD 1
18797#define HAVE_GETEGID 1
18798#define HAVE_GETENTROPY 1
18799#define HAVE_GETEUID 1
18800#define HAVE_GETGID 1
18801#define HAVE_GETGRNAM 1
18802#define HAVE_GETGRNAM_R 1
18803#define HAVE_GETGROUPS 1
18804#define HAVE_GETLOGIN 1
18805#define HAVE_GETLOGIN_R 1
18806#define HAVE_GETPGID 1
18807#define HAVE_GETPGRP 1
18808#define HAVE_GETPPID 1
18809#define HAVE_GETPRIORITY 1
18810#define HAVE_GETPWNAM 1
18811#define HAVE_GETPWNAM_R 1
18812#define HAVE_GETPWUID 1
18813#define HAVE_GETPWUID_R 1
18814#define HAVE_GETRANDOM 1
18815#define HAVE_GETRLIMIT 1
18816#define HAVE_GETSID 1
18817#define HAVE_GETTIMEOFDAY 1
18818#define HAVE_GETUID 1
18819#define HAVE_GMTIME_R 1
18820#define HAVE_GRANTPT 1
18821#define HAVE_INITGROUPS 1
18822#define HAVE_IOCTL 1
18823#define HAVE_ISSETUGID 1
18824#define HAVE_KILL 1
18825#define HAVE_KILLPG 1
18826#define HAVE_LCHOWN 1
18827#define HAVE_LINK 1
18828#define HAVE_LLABS 1
18829#define HAVE_LOCKF 1
18830#define HAVE_LOG2 1
18831#define HAVE_LSTAT 1
18832#define HAVE_LUTIMES 1
18833#define HAVE_MALLOC_USABLE_SIZE 1
18834#define HAVE_MBLEN 1
18835#define HAVE_MEMALIGN 1
18836#define HAVE_WRITEV 1
18837#define HAVE_MEMRCHR 1
18838#define HAVE_MEMMEM 1
18839#define HAVE_MKFIFO 1
18840#define HAVE_MKNOD 1
18841#define HAVE_MKTIME 1
18842#define HAVE_MMAP 1
18843#define HAVE_OPENAT 1
18844#define HAVE_PCLOSE 1
18845#define HAVE_PIPE 1
18846#define HAVE_PIPE2 1
18847#define HAVE_POLL 1
18848#define HAVE_POPEN 1
18849#define HAVE_POSIX_FADVISE 1
18850#define HAVE_POSIX_MADVISE 1
18851#define HAVE_POSIX_MEMALIGN 1
18852#define HAVE_PPOLL 1
18853#define HAVE_PREAD 1
18854#define HAVE_PWRITE 1
18855#define HAVE_QSORT_R 1
18856#define HAVE_READLINK 1
18857#define HAVE_REALPATH 1
18858#define HAVE_ROUND 1
18859#define HAVE_SCHED_GETAFFINITY 1
18860#define HAVE_SEEKDIR 1
18861#define HAVE_SETEGID 1
18862#define HAVE_SETENV 1
18863#define HAVE_SETEUID 1
18864#define HAVE_SETGID 1
18865#define HAVE_SETGROUPS 1
18866#define HAVE_SETPGID 1
18867#define HAVE_SETPGRP 1
18868#define HAVE_SETREGID 1
18869#define HAVE_SETREUID 1
18870#define HAVE_SETRLIMIT 1
18871#define HAVE_SETSID 1
18872#define HAVE_SETUID 1
18873#define HAVE_SHUTDOWN 1
18874#define HAVE_SIGACTION 1
18875#define HAVE_SIGALTSTACK 1
18876#define HAVE_SIGPROCMASK 1
18877#define HAVE_SINH 1
18878#define HAVE_SPAWNV 1
18879#define HAVE_SYMLINK 1
18880#define HAVE_SYSCONF 1
18881#define HAVE_SYSTEM 1
18882#define HAVE_TANH 1
18883#define HAVE_TELLDIR 1
18884#define HAVE_TIMEGM 1
18885#define HAVE_TIMES 1
18886#define HAVE_TRUNCATE 1
18887#define HAVE_TZSET 1
18888#define HAVE_UMASK 1
18889#define HAVE_UNSETENV 1
18890#define HAVE_UTIMENSAT 1
18891#define HAVE_UTIMES 1
18892#define HAVE_WAIT4 1
18893#define HAVE_WAITPID 1
18894#define HAVE_CRYPT_H 1
18895#define HAVE_STRUCT_CRYPT_DATA_INITIALIZED 1
18896#define HAVE_BUILTIN___BUILTIN_ALLOCA_WITH_ALIGN 1
18897#define HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED 1
18898#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
18899#define HAVE_BUILTIN___BUILTIN_BSWAP32 1
18900#define HAVE_BUILTIN___BUILTIN_BSWAP64 1
18901#define HAVE_BUILTIN___BUILTIN_POPCOUNT 1
18902#define HAVE_BUILTIN___BUILTIN_POPCOUNTLL 1
18903#define HAVE_BUILTIN___BUILTIN_CLZ 1
18904#define HAVE_BUILTIN___BUILTIN_CLZL 1
18905#define HAVE_BUILTIN___BUILTIN_CLZLL 1
18906#define HAVE_BUILTIN___BUILTIN_CTZ 1
18907#define HAVE_BUILTIN___BUILTIN_CTZLL 1
18908#define HAVE_BUILTIN___BUILTIN_ADD_OVERFLOW 1
18909#define HAVE_BUILTIN___BUILTIN_SUB_OVERFLOW 1
18910#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW 1
18911#define HAVE_BUILTIN___BUILTIN_MUL_OVERFLOW_P 1
18912#define HAVE_BUILTIN___BUILTIN_CONSTANT_P 1
18913#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1
18914#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P 1
18915#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1
18916#define HAVE_BUILTIN___BUILTIN_TRAP 1
18917#define HAVE_BUILTIN___BUILTIN_EXPECT 1
18918#define HAVE_GNU_QSORT_R 1
18919#define ATAN2_INF_C99 1
18920#define HAVE_CLOCK_GETRES 1
18921#define HAVE_LIBRT 1
18922#define HAVE_LIBRT 1
18923#define HAVE_TIMER_CREATE 1
18924#define HAVE_TIMER_SETTIME 1
18925#define HAVE_STRUCT_TM_TM_ZONE 1
18926#define HAVE_TM_ZONE 1
18927#define HAVE_STRUCT_TM_TM_GMTOFF 1
18928#define HAVE_DAYLIGHT 1
18929#define NEGATIVE_TIME_T 1
18930#define POSIX_SIGNAL 1
18931#define HAVE_SIG_T 1
18932#define RSHIFT(x,y) ((x)>>(int)(y))
18933#define HAVE__SC_CLK_TCK 1
18934#define STACK_GROW_DIRECTION -1
18935#define HAVE_GETCONTEXT 1
18936#define HAVE_SWAPCONTEXT 1
18937#define HAVE_MAKECONTEXT 1
18938#define COROUTINE_H "coroutine/ucontext/Context.h"
18939#define HAVE_SCHED_YIELD 1
18940#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1
18941#define HAVE_PTHREAD_ATTR_GETSTACK 1
18942#define HAVE_PTHREAD_ATTR_GETGUARDSIZE 1
18943#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
18944#define HAVE_PTHREAD_SETNAME_NP 1
18945#define HAVE_PTHREAD_SIGMASK 1
18946#define HAVE_PTHREAD_GETATTR_NP 1
18947#define SET_CURRENT_THREAD_NAME(name) pthread_setname_np(pthread_self(), name)
18948#define SET_ANOTHER_THREAD_NAME(thid,name) pthread_setname_np(thid, name)
18949#define DEFINE_MCONTEXT_PTR(mc,uc) mcontext_t *mc = &(uc)->uc_mcontext
18950#define HAVE_GETCONTEXT 1
18951#define HAVE_SETCONTEXT 1
18952#define HAVE_CONST_PAGE_SIZE 0
18953#define IOCTL_REQ_TYPE unsigned long
18954#define NUM2IOCTLREQ(num) NUM2ULONG(num)
18955#define DLEXT_MAXLEN 3
18956#define DLEXT ".so"
18957#define LIBDIR_BASENAME "lib"
18958#define EXECUTABLE_EXTS ".exe",".com",".cmd",".bat"
18959#define HAVE__SETJMP 1
18960#define RUBY_SETJMP(env) __builtin_setjmp((env))
18961#define RUBY_LONGJMP(env,val) __builtin_longjmp((env),val)
18962#define USE_MJIT 1
18963#define USE_YJIT 0
18964#define RUBY_PLATFORM "x86_64-cygwin"
18965#define RBIMPL_COMPILER_SINCE_H
18966#define RBIMPL_COMPILER_IS_H
18967#define RBIMPL_COMPILER_IS(cc) RBIMPL_COMPILER_IS_ ## cc
18968#define RBIMPL_COMPILER_IS_APPLE_H
18969#define RBIMPL_COMPILER_IS_Apple 0
18970#define RBIMPL_COMPILER_IS_CLANG_H
18971#define RBIMPL_COMPILER_IS_Clang 0
18972#define RBIMPL_COMPILER_IS_GCC_H
18973#define RBIMPL_COMPILER_IS_INTEL_H
18974#define RBIMPL_COMPILER_IS_Intel 0
18975#define RBIMPL_COMPILER_IS_GCC 1
18976#define RBIMPL_COMPILER_VERSION_MAJOR __GNUC__
18977#define RBIMPL_COMPILER_VERSION_MINOR __GNUC_MINOR__
18978#define RBIMPL_COMPILER_VERSION_PATCH __GNUC_PATCHLEVEL__
18979#define RBIMPL_COMPILER_IS_MSVC_H
18980#define RBIMPL_COMPILER_IS_MSVC 0
18981#define RBIMPL_COMPILER_IS_SUNPRO_H
18982#define RBIMPL_COMPILER_IS_SunPro 0
18983#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)))))))
18984#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)))))))
18985#undef HAVE_PROTOTYPES
18986#define HAVE_PROTOTYPES 1
18987#undef HAVE_STDARG_PROTOTYPES
18988#define HAVE_STDARG_PROTOTYPES 1
18989#undef TOKEN_PASTE
18990#define TOKEN_PASTE(x,y) x ##y
18991#define STRINGIZE(expr) STRINGIZE0(expr)
18992#define STRINGIZE0(expr) #expr
18993#define UNALIGNED_WORD_ACCESS 1
18994#define RBIMPL_TEST3(q,w,e,...) e
18995#define RBIMPL_TEST2(...) RBIMPL_TEST3(__VA_OPT__(,),1,0,0)
18996#define RBIMPL_TEST1() RBIMPL_TEST2("ruby")
18997#define HAVE___VA_OPT__
18998#undef RBIMPL_TEST1
18999#undef RBIMPL_TEST2
19000#undef RBIMPL_TEST3
19001#define USE_RVARGC 1
19002#define _STDARG_H
19003#define _ANSI_STDARG_H_
19004#undef __need___va_list
19005#define __GNUC_VA_LIST
19006#define va_start(v,l) __builtin_va_start(v,l)
19007#define va_end(v) __builtin_va_end(v)
19008#define va_arg(v,l) __builtin_va_arg(v,l)
19009#define va_copy(d,s) __builtin_va_copy(d,s)
19010#define __va_copy(d,s) __builtin_va_copy(d,s)
19011#define _VA_LIST_
19012#define _VA_LIST
19013#define _VA_LIST_DEFINED
19014#define _VA_LIST_T_H
19015#define __va_list__
19016#define RUBY_DEFINES_H 1
19017#define _STDIO_H_
19018#define _ANSIDECL_H_
19019#define __NEWLIB_H__ 1
19020#define _NEWLIB_VERSION_H__ 1
19021#define _NEWLIB_VERSION "4.2.0"
19022#define __NEWLIB__ 4
19023#define __NEWLIB_MINOR__ 2
19024#define __NEWLIB_PATCHLEVEL__ 0
19025#define _ATEXIT_DYNAMIC_ALLOC 1
19026#define _FSEEK_OPTIMIZATION 1
19027#define _FVWRITE_IN_STREAMIO 1
19028#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1
19029#define _HAVE_LONG_DOUBLE 1
19030#define _MB_CAPABLE 1
19031#define _MB_LEN_MAX 8
19032#define _REENT_CHECK_VERIFY 1
19033#define _UNBUF_STREAM_OPT 1
19034#define _WANT_IO_C99_FORMATS 1
19035#define _WANT_IO_LONG_DOUBLE 1
19036#define _WANT_IO_LONG_LONG 1
19037#define _WANT_IO_POS_ARGS 1
19038#define _WANT_USE_GDTOA 1
19039#define _WIDE_ORIENT 1
19040#define __SYS_CONFIG_H__
19041#define __IEEE_LITTLE_ENDIAN
19042#define _SUPPORTS_ERREXCEPT
19043#define __OBSOLETE_MATH_DEFAULT 0
19044#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT
19045#define _SYS_FEATURES_H
19046#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
19047#define __GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi)
19048#undef _ATFILE_SOURCE
19049#define _ATFILE_SOURCE 1
19050#undef _DEFAULT_SOURCE
19051#define _DEFAULT_SOURCE 1
19052#undef _ISOC99_SOURCE
19053#define _ISOC99_SOURCE 1
19054#undef _ISOC11_SOURCE
19055#define _ISOC11_SOURCE 1
19056#undef _POSIX_SOURCE
19057#define _POSIX_SOURCE 1
19058#undef _POSIX_C_SOURCE
19059#define _POSIX_C_SOURCE 200809L
19060#undef _XOPEN_SOURCE
19061#define _XOPEN_SOURCE 700
19062#undef _XOPEN_SOURCE_EXTENDED
19063#define _XOPEN_SOURCE_EXTENDED 1
19064#undef _POSIX_SOURCE
19065#define _POSIX_SOURCE 1
19066#undef _POSIX_C_SOURCE
19067#define _POSIX_C_SOURCE 200809L
19068#undef _ATFILE_SOURCE
19069#define _ATFILE_SOURCE 1
19070#define __ATFILE_VISIBLE 1
19071#define __BSD_VISIBLE 1
19072#define __GNU_VISIBLE 1
19073#define __ISO_C_VISIBLE 2011
19074#define __LARGEFILE_VISIBLE 1
19075#define __MISC_VISIBLE 1
19076#define __POSIX_VISIBLE 200809
19077#define __SVID_VISIBLE 1
19078#define __XSI_VISIBLE 700
19079#define __SSP_FORTIFY_LEVEL 2
19080#define _POSIX_VERSION 200809L
19081#define _POSIX2_VERSION 200809L
19082#define _XOPEN_VERSION __XSI_VISIBLE
19083#define _POSIX_ADVISORY_INFO 200809L
19084#define _POSIX_ASYNCHRONOUS_IO 200809L
19085#define _POSIX_BARRIERS 200809L
19086#define _POSIX_CHOWN_RESTRICTED 1
19087#define _POSIX_CLOCK_SELECTION 200809L
19088#define _POSIX_CPUTIME 200809L
19089#define _POSIX_FSYNC 200809L
19090#define _POSIX_IPV6 200809L
19091#define _POSIX_JOB_CONTROL 1
19092#define _POSIX_MAPPED_FILES 200809L
19093#define _POSIX_MEMLOCK_RANGE 200809L
19094#define _POSIX_MEMORY_PROTECTION 200809L
19095#define _POSIX_MESSAGE_PASSING 200809L
19096#define _POSIX_MONOTONIC_CLOCK 200809L
19097#define _POSIX_NO_TRUNC 1
19098#define _POSIX_PRIORITY_SCHEDULING 200809L
19099#define _POSIX_RAW_SOCKETS 200809L
19100#define _POSIX_READER_WRITER_LOCKS 200809L
19101#define _POSIX_REALTIME_SIGNALS 200809L
19102#define _POSIX_REGEXP 1
19103#define _POSIX_SAVED_IDS 1
19104#define _POSIX_SEMAPHORES 200809L
19105#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
19106#define _POSIX_SHELL 1
19107#define _POSIX_SPAWN 200809L
19108#define _POSIX_SPIN_LOCKS 200809L
19109#define _POSIX_SYNCHRONIZED_IO 200809L
19110#define _POSIX_THREAD_ATTR_STACKADDR 200809L
19111#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
19112#define _POSIX_THREAD_CPUTIME 200809L
19113#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
19114#define _POSIX_THREAD_PROCESS_SHARED 200809L
19115#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
19116#define _POSIX_THREADS 200809L
19117#define _POSIX_TIMEOUTS 200809L
19118#define _POSIX_TIMERS 200809L
19119#define _POSIX_VDISABLE '\0'
19120#define _POSIX2_C_VERSION _POSIX2_VERSION
19121#define _POSIX2_C_BIND _POSIX2_VERSION
19122#define _POSIX2_C_DEV _POSIX2_VERSION
19123#define _POSIX2_CHAR_TERM _POSIX2_VERSION
19124#define _POSIX2_SW_DEV _POSIX2_VERSION
19125#define _POSIX2_UPE _POSIX2_VERSION
19126#define _POSIX_V6_ILP32_OFF32 -1
19127#define _POSIX_V6_ILP32_OFFBIG -1
19128#define _POSIX_V6_LP64_OFF64 1
19129#define _POSIX_V6_LPBIG_OFFBIG 1
19130#define _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
19131#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
19132#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64
19133#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
19134#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
19135#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
19136#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
19137#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
19138#define _XOPEN_CRYPT 1
19139#define _XOPEN_ENH_I18N 1
19140#define _XOPEN_SHM 1
19141#define __STDC_ISO_10646__ 201806L
19142#define _POINTER_INT long
19143#undef __RAND_MAX
19144#define __RAND_MAX 0x7fffffff
19145#define _CYGWIN_CONFIG_H
19146#define __DYNAMIC_REENT__
19147#define __CYGTLS_PADSIZE__ 12800
19148#define _SYMSTR(x) #x
19149#define __FILENAME_MAX__ 4096
19150#define _READ_WRITE_RETURN_TYPE _ssize_t
19151#define _READ_WRITE_BUFSIZE_TYPE size_t
19152#define __LINUX_ERRNO_EXTENSIONS__ 1
19153#define _MB_EXTENDED_CHARSETS_ALL 1
19154#define __HAVE_LOCALE_INFO__ 1
19155#define __HAVE_LOCALE_INFO_EXTENDED__ 1
19156#define _WANT_C99_TIME_FORMATS 1
19157#define _GLIBC_EXTENSION 1
19158#define _STDIO_BSD_SEMANTICS 1
19159#define __TM_GMTOFF tm_gmtoff
19160#define __TM_ZONE tm_zone
19161#define _USE_LONG_TIME_T 1
19162#define _REENT_BACKWARD_BINARY_COMPAT 1
19163#define __EXPORT
19164#define __IMPORT __declspec(dllimport)
19165#define DEFAULT_LOCALE "C.UTF-8"
19166#define _USE_GDTOA
19167#define _MB_EXTENDED_CHARSETS_ISO 1
19168#define _MB_EXTENDED_CHARSETS_WINDOWS 1
19169#define _BEGIN_STD_C
19170#define _END_STD_C
19171#define _NOTHROW
19172#define _LONG_DOUBLE long double
19173#define _ATTRIBUTE(attrs) __attribute__ (attrs)
19174#define _ELIDABLE_INLINE static __inline__
19175#define _NOINLINE __attribute__ ((__noinline__))
19176#define _NOINLINE_STATIC _NOINLINE static
19177#define _FSTDIO
19178#define __need_size_t
19179#define __need_NULL
19180#define _SYS_CDEFS_H_
19181#define _MACHINE__DEFAULT_TYPES_H
19182#define __EXP(x) __ ##x ##__
19183#define __have_longlong64 1
19184#define __have_long64 1
19185#define ___int8_t_defined 1
19186#define ___int16_t_defined 1
19187#define ___int32_t_defined 1
19188#define ___int64_t_defined 1
19189#define ___int_least8_t_defined 1
19190#define ___int_least16_t_defined 1
19191#define ___int_least32_t_defined 1
19192#define ___int_least64_t_defined 1
19193#undef __EXP
19194#define __size_t__
19195#define __SIZE_T__
19196#define _SIZE_T
19197#define _SYS_SIZE_T_H
19198#define _T_SIZE_
19199#define _T_SIZE
19200#define __SIZE_T
19201#define _SIZE_T_
19202#define _BSD_SIZE_T_
19203#define _SIZE_T_DEFINED_
19204#define _SIZE_T_DEFINED
19205#define _BSD_SIZE_T_DEFINED_
19206#define _SIZE_T_DECLARED
19207#define ___int_size_t_h
19208#define _GCC_SIZE_T
19209#define _SIZET_
19210#define __size_t
19211#undef __need_size_t
19212#undef NULL
19213#define NULL ((void *)0)
19214#undef __need_NULL
19215#define __PMT(args) args
19216#define __DOTS , ...
19217#define __THROW
19218#define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
19219#define __ptr_t void *
19220#define __long_double_t long double
19221#define __attribute_malloc__
19222#define __attribute_pure__
19223#define __attribute_format_strfmon__(a,b)
19224#define __flexarr [0]
19225#define __bounded
19226#define __unbounded
19227#define __ptrvalue
19228#define __has_extension __has_feature
19229#define __has_feature(x) 0
19230#define __BEGIN_DECLS
19231#define __END_DECLS
19232#define __GNUCLIKE_ASM 3
19233#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
19234#define __GNUCLIKE___TYPEOF 1
19235#define __GNUCLIKE___SECTION 1
19236#define __GNUCLIKE_CTOR_SECTION_HANDLING 1
19237#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
19238#define __GNUCLIKE_BUILTIN_VARARGS 1
19239#define __GNUCLIKE_BUILTIN_STDARG 1
19240#define __GNUCLIKE_BUILTIN_VAALIST 1
19241#define __GNUC_VA_LIST_COMPATIBILITY 1
19242#define __compiler_membar() __asm __volatile(" " : : : "memory")
19243#define __GNUCLIKE_BUILTIN_NEXT_ARG 1
19244#define __GNUCLIKE_MATH_BUILTIN_RELOPS
19245#define __GNUCLIKE_BUILTIN_MEMCPY 1
19246#define __CC_SUPPORTS_INLINE 1
19247#define __CC_SUPPORTS___INLINE 1
19248#define __CC_SUPPORTS___INLINE__ 1
19249#define __CC_SUPPORTS___FUNC__ 1
19250#define __CC_SUPPORTS_WARNING 1
19251#define __CC_SUPPORTS_VARADIC_XXX 1
19252#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
19253#define __P(protos) protos
19254#define __CONCAT1(x,y) x ## y
19255#define __CONCAT(x,y) __CONCAT1(x,y)
19256#define __STRING(x) #x
19257#define __XSTRING(x) __STRING(x)
19258#define __const const
19259#define __signed signed
19260#define __volatile volatile
19261#define __weak_symbol __attribute__((__weak__))
19262#define __dead2 __attribute__((__noreturn__))
19263#define __pure2 __attribute__((__const__))
19264#define __unused __attribute__((__unused__))
19265#define __used __attribute__((__used__))
19266#define __packed __attribute__((__packed__))
19267#define __aligned(x) __attribute__((__aligned__(x)))
19268#define __section(x) __attribute__((__section__(x)))
19269#define __alloc_size(x) __attribute__((__alloc_size__(x)))
19270#define __alloc_size2(n,x) __attribute__((__alloc_size__(n, x)))
19271#define __alloc_align(x) __attribute__((__alloc_align__(x)))
19272#define __generic(expr,t,yes,no) _Generic(expr, t: yes, default: no)
19273#define __min_size(x) static (x)
19274#define __malloc_like __attribute__((__malloc__))
19275#define __pure __attribute__((__pure__))
19276#define __always_inline __inline__ __attribute__((__always_inline__))
19277#define __noinline __attribute__ ((__noinline__))
19278#define __nonnull(x) __attribute__((__nonnull__ x))
19279#define __nonnull_all __attribute__((__nonnull__))
19280#define __fastcall __attribute__((__fastcall__))
19281#define __result_use_check __attribute__((__warn_unused_result__))
19282#define __returns_twice __attribute__((__returns_twice__))
19283#define __unreachable() __builtin_unreachable()
19284#define __restrict restrict
19285#define __predict_true(exp) __builtin_expect((exp), 1)
19286#define __predict_false(exp) __builtin_expect((exp), 0)
19287#define __null_sentinel __attribute__((__sentinel__))
19288#define __exported __attribute__((__visibility__("default")))
19289#define __hidden
19290#define __offsetof(type,field) offsetof(type, field)
19291#define __rangeof(type,start,end) (__offsetof(type, end) - __offsetof(type, start))
19292#define __containerof(x,s,m) ({ const volatile __typeof(((s *)0)->m) *__x = (x); __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));})
19293#define __printflike(fmtarg,firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
19294#define __scanflike(fmtarg,firstvararg) __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
19295#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
19296#define __strfmonlike(fmtarg,firstvararg) __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
19297#define __strftimelike(fmtarg,firstvararg) __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
19298#define __printf0like(fmtarg,firstvararg)
19299#define __strong_reference(sym,aliassym) extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
19300#define __weak_reference(sym,alias) __asm__(".stabs \"_" #alias "\",11,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
19301#define __warn_references(sym,msg) __asm__(".stabs \"" msg "\",30,0,0,0"); __asm__(".stabs \"_" #sym "\",1,0,0,0")
19302#define __FBSDID(s) struct __hack
19303#define __RCSID(s) struct __hack
19304#define __RCSID_SOURCE(s) struct __hack
19305#define __SCCSID(s) struct __hack
19306#define __COPYRIGHT(s) struct __hack
19307#define __DECONST(type,var) ((type)(__uintptr_t)(const void *)(var))
19308#define __DEVOLATILE(type,var) ((type)(__uintptr_t)(volatile void *)(var))
19309#define __DEQUALIFY(type,var) ((type)(__uintptr_t)(const volatile void *)(var))
19310#define _Nonnull
19311#define _Nullable
19312#define _Null_unspecified
19313#define __NULLABILITY_PRAGMA_PUSH
19314#define __NULLABILITY_PRAGMA_POP
19315#define __arg_type_tag(arg_kind,arg_idx,type_tag_idx)
19316#define __datatype_type_tag(kind,type)
19317#define __lock_annotate(x)
19318#define __lockable __lock_annotate(lockable)
19319#define __locks_exclusive(...) __lock_annotate(exclusive_lock_function(__VA_ARGS__))
19320#define __locks_shared(...) __lock_annotate(shared_lock_function(__VA_ARGS__))
19321#define __trylocks_exclusive(...) __lock_annotate(exclusive_trylock_function(__VA_ARGS__))
19322#define __trylocks_shared(...) __lock_annotate(shared_trylock_function(__VA_ARGS__))
19323#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
19324#define __asserts_exclusive(...) __lock_annotate(assert_exclusive_lock(__VA_ARGS__))
19325#define __asserts_shared(...) __lock_annotate(assert_shared_lock(__VA_ARGS__))
19326#define __requires_exclusive(...) __lock_annotate(exclusive_locks_required(__VA_ARGS__))
19327#define __requires_shared(...) __lock_annotate(shared_locks_required(__VA_ARGS__))
19328#define __requires_unlocked(...) __lock_annotate(locks_excluded(__VA_ARGS__))
19329#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
19330#define __nosanitizeaddress
19331#define __nosanitizememory
19332#define __nosanitizethread
19333#define __guarded_by(x) __lock_annotate(guarded_by(x))
19334#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))
19335#define __builtin_is_aligned(x,align) (((__uintptr_t)x & ((align) - 1)) == 0)
19336#define __builtin_align_up(x,align) ((__typeof__(x))(((__uintptr_t)(x)+((align)-1))&(~((align)-1))))
19337#define __builtin_align_down(x,align) ((__typeof__(x))((x)&(~((align)-1))))
19338#define __align_up(x,y) __builtin_align_up(x, y)
19339#define __align_down(x,y) __builtin_align_down(x, y)
19340#define __is_aligned(x,y) __builtin_is_aligned(x, y)
19341#define _STDDEF_H
19342#define _STDDEF_H_
19343#define _ANSI_STDDEF_H
19344#define _PTRDIFF_T
19345#define _T_PTRDIFF_
19346#define _T_PTRDIFF
19347#define __PTRDIFF_T
19348#define _PTRDIFF_T_
19349#define _BSD_PTRDIFF_T_
19350#define ___int_ptrdiff_t_h
19351#define _GCC_PTRDIFF_T
19352#define _PTRDIFF_T_DECLARED
19353#undef __need_ptrdiff_t
19354#undef __need_size_t
19355#define __wchar_t__
19356#define __WCHAR_T__
19357#define _WCHAR_T
19358#define _T_WCHAR_
19359#define _T_WCHAR
19360#define __WCHAR_T
19361#define _WCHAR_T_
19362#define _BSD_WCHAR_T_
19363#define _WCHAR_T_DEFINED_
19364#define _WCHAR_T_DEFINED
19365#define _WCHAR_T_H
19366#define ___int_wchar_t_h
19367#define __INT_WCHAR_T_H
19368#define _GCC_WCHAR_T
19369#define _WCHAR_T_DECLARED
19370#undef _BSD_WCHAR_T_
19371#undef __need_wchar_t
19372#undef NULL
19373#define NULL ((void *)0)
19374#undef __need_NULL
19375#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19376#define _GCC_MAX_ALIGN_T
19377#define __need___va_list
19378#define _SYS_REENT_H_
19379#define _SYS__TYPES_H
19380#define __need_size_t
19381#define __need_wint_t
19382#undef __need_ptrdiff_t
19383#undef __need_size_t
19384#undef __need_wchar_t
19385#define _WINT_T
19386#undef __need_wint_t
19387#undef NULL
19388#define NULL ((void *)0)
19389#undef __need_NULL
19390#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19391#define _MACHINE__TYPES_H
19392#define __machine_blkcnt_t_defined
19393#define __machine_blksize_t_defined
19394#define __machine_dev_t_defined
19395#define __machine_fsblkcnt_t_defined
19396#define __machine_fsfilcnt_t_defined
19397#define __machine_uid_t_defined
19398#define __machine_gid_t_defined
19399#define __machine_ino_t_defined
19400#define __machine_key_t_defined
19401#define __machine_sa_family_t_defined
19402#define __machine_socklen_t_defined
19403#undef __size_t
19404#define unsigned signed
19405#undef unsigned
19406#define _CLOCK_T_ unsigned long
19407#define _TIME_T_ long
19408#define _CLOCKID_T_ unsigned long
19409#define _TIMER_T_ unsigned long
19410#define _NULL 0
19411#define __Long int
19412#define _SYS_LOCK_H_
19413#define _LOCK_RECURSIVE_T _LOCK_T
19414#define _LOCK_T_RECURSIVE_INITIALIZER ((_LOCK_T)18)
19415#define _LOCK_T_INITIALIZER ((_LOCK_T)19)
19416#define __LOCK_INIT(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_INITIALIZER;
19417#define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _LOCK_T NAME = _LOCK_T_RECURSIVE_INITIALIZER;
19418#define __lock_init(__lock) __cygwin_lock_init(&__lock)
19419#define __lock_init_recursive(__lock) __cygwin_lock_init_recursive(&__lock)
19420#define __lock_close(__lock) __cygwin_lock_fini(&__lock)
19421#define __lock_close_recursive(__lock) __cygwin_lock_fini(&__lock)
19422#define __lock_acquire(__lock) __cygwin_lock_lock(&__lock)
19423#define __lock_acquire_recursive(__lock) __cygwin_lock_lock(&__lock)
19424#define __lock_try_acquire(lock) __cygwin_lock_trylock(&__lock)
19425#define __lock_try_acquire_recursive(lock) __cygwin_lock_trylock(&__lock)
19426#define __lock_release(__lock) __cygwin_lock_unlock(&__lock)
19427#define __lock_release_recursive(__lock) __cygwin_lock_unlock(&__lock)
19428#define _ATEXIT_SIZE 32
19429#define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
19430#define _REENT_SMALL_CHECK_INIT(ptr)
19431#define _fpos64_t _fpos_t
19432#define _RAND48_SEED_0 (0x330e)
19433#define _RAND48_SEED_1 (0xabcd)
19434#define _RAND48_SEED_2 (0x1234)
19435#define _RAND48_MULT_0 (0xe66d)
19436#define _RAND48_MULT_1 (0xdeec)
19437#define _RAND48_MULT_2 (0x0005)
19438#define _RAND48_ADD (0x000b)
19439#define _REENT_EMERGENCY_SIZE 25
19440#define _REENT_ASCTIME_SIZE 26
19441#define _REENT_SIGNAL_SIZE 24
19442#define _REENT_INIT_RESERVED_0 0,
19443#define _REENT_INIT_RESERVED_1 0,
19444#define _REENT_INIT_RESERVED_2 0,
19445#define _REENT_INIT_RESERVED_6_7 _NULL, _ATEXIT_INIT,
19446#define _REENT_INIT_RESERVED_8 {_NULL, 0, _NULL},
19447#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 }
19448#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; }
19449#define _REENT_CHECK_RAND48(ptr)
19450#define _REENT_CHECK_MP(ptr)
19451#define _REENT_CHECK_TM(ptr)
19452#define _REENT_CHECK_ASCTIME_BUF(ptr)
19453#define _REENT_CHECK_EMERGENCY(ptr)
19454#define _REENT_CHECK_MISC(ptr)
19455#define _REENT_CHECK_SIGNAL_BUF(ptr)
19456#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
19457#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
19458#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
19459#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
19460#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
19461#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
19462#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
19463#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
19464#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
19465#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
19466#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
19467#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
19468#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
19469#define _REENT_MBTOWC_STATE(ptr) ((ptr)->_new._reent._mbtowc_state)
19470#define _REENT_WCTOMB_STATE(ptr) ((ptr)->_new._reent._wctomb_state)
19471#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_new._reent._mbrlen_state)
19472#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_new._reent._mbrtowc_state)
19473#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_new._reent._mbsrtowcs_state)
19474#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_new._reent._wcrtomb_state)
19475#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_new._reent._wcsrtombs_state)
19476#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
19477#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
19478#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
19479#define _REENT_CLEANUP(_ptr) ((_ptr)->__cleanup)
19480#define _REENT_CVTBUF(_ptr) ((_ptr)->_cvtbuf)
19481#define _REENT_CVTLEN(_ptr) ((_ptr)->_cvtlen)
19482#define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency)
19483#define _REENT_ERRNO(_ptr) ((_ptr)->_errno)
19484#define _REENT_INC(_ptr) ((_ptr)->_inc)
19485#define _REENT_LOCALE(_ptr) ((_ptr)->_locale)
19486#define _REENT_SIG_FUNC(_ptr) ((_ptr)->_sig_func)
19487#define _REENT_STDIN(_ptr) ((_ptr)->_stdin)
19488#define _REENT_STDOUT(_ptr) ((_ptr)->_stdout)
19489#define _REENT_STDERR(_ptr) ((_ptr)->_stderr)
19490#define _REENT_INIT_PTR(var) { memset((var), 0, sizeof(*(var))); _REENT_INIT_PTR_ZEROED(var); }
19491#define __ATTRIBUTE_IMPURE_PTR__
19492#define __ATTRIBUTE_IMPURE_DATA__
19493#define _REENT (__getreent())
19494#define _REENT_IS_NULL(_ptr) ((_ptr) == NULL)
19495#define _GLOBAL_REENT (&_impure_data)
19496#define _Kmax (sizeof (size_t) << 3)
19497#define __FILE_defined
19498#define _OFF_T_DECLARED
19499#define _SSIZE_T_DECLARED
19500#define _SYS_STDIO_H_
19501#define _flockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_lock ((_LOCK_T *)&(fp)->_lock); })
19502#define _ftrylockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __cygwin_lock_trylock ((_LOCK_T *)&(fp)->_lock))
19503#define _funlockfile(fp) ({ if (!((fp)->_flags & __SSTR)) __cygwin_lock_unlock ((_LOCK_T *)&(fp)->_lock); })
19504#define __SLBF 0x0001
19505#define __SNBF 0x0002
19506#define __SRD 0x0004
19507#define __SWR 0x0008
19508#define __SRW 0x0010
19509#define __SEOF 0x0020
19510#define __SERR 0x0040
19511#define __SMBF 0x0080
19512#define __SAPP 0x0100
19513#define __SSTR 0x0200
19514#define __SOPT 0x0400
19515#define __SNPT 0x0800
19516#define __SOFF 0x1000
19517#define __SORD 0x2000
19518#define __SCLE 0x4000
19519#define __SL64 0x8000
19520#define __SNLK 0x0001
19521#define __SWID 0x2000
19522#define _IOFBF 0
19523#define _IOLBF 1
19524#define _IONBF 2
19525#define EOF (-1)
19526#define BUFSIZ 1024
19527#define FOPEN_MAX 20
19528#define FILENAME_MAX __FILENAME_MAX__
19529#define L_tmpnam FILENAME_MAX
19530#define P_tmpdir "/tmp"
19531#define SEEK_SET 0
19532#define SEEK_CUR 1
19533#define SEEK_END 2
19534#define TMP_MAX 26
19535#define stdin _REENT_STDIN(_REENT)
19536#define stdout _REENT_STDOUT(_REENT)
19537#define stderr _REENT_STDERR(_REENT)
19538#define _stdin_r(x) _REENT_STDIN(x)
19539#define _stdout_r(x) _REENT_STDOUT(x)
19540#define _stderr_r(x) _REENT_STDERR(x)
19541#define __VALIST __gnuc_va_list
19542#define fropen(__cookie,__fn) funopen(__cookie, __fn, (int (*)())0, (fpos_t (*)())0, (int (*)())0)
19543#define fwopen(__cookie,__fn) funopen(__cookie, (int (*)())0, __fn, (fpos_t (*)())0, (int (*)())0)
19544#define __sgetc_raw_r(__ptr,__f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++))
19545#define __sfeof(p) ((int)(((p)->_flags & __SEOF) != 0))
19546#define __sferror(p) ((int)(((p)->_flags & __SERR) != 0))
19547#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
19548#define __sfileno(p) ((p)->_file)
19549#define feof(p) __sfeof(p)
19550#define ferror(p) __sferror(p)
19551#define clearerr(p) __sclearerr(p)
19552#define feof_unlocked(p) __sfeof(p)
19553#define ferror_unlocked(p) __sferror(p)
19554#define clearerr_unlocked(p) __sclearerr(p)
19555#define getchar_unlocked() _getchar_unlocked()
19556#define putchar_unlocked(_c) _putchar_unlocked(_c)
19557#define fast_putc(x,p) (--(p)->_w < 0 ? __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0))
19558#define L_cuserid 9
19559#define L_ctermid 16
19560#define _SSP_STDIO_H_
19561#define _SSP_SSP_H_
19562#define __ssp_real_(fun) __ssp_real_ ## fun
19563#define __ssp_real(fun) __ssp_real_(fun)
19564#define __ssp_inline extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
19565#define __ssp_bos(ptr) __builtin_object_size(ptr, __SSP_FORTIFY_LEVEL > 1)
19566#define __ssp_bos0(ptr) __builtin_object_size(ptr, 0)
19567#define __ssp_check(buf,len,bos) if (bos(buf) != (size_t)-1 && len > bos(buf)) __chk_fail()
19568#define __ssp_decl(rtype,fun,args) rtype __ssp_real_(fun) args __asm__(__ASMNAME(#fun)); __ssp_inline rtype fun args
19569#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; }
19570#define __ssp_redirect(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos)
19571#define __ssp_redirect0(rtype,fun,args,call) __ssp_redirect_raw(rtype, fun, args, call, 1, __ssp_bos0)
19572#define __ssp_overlap(a,b,l) (((a) <= (b) && (b) < (a) + (l)) || ((b) <= (a) && (a) < (b) + (l)))
19573#define sprintf(str,...) __builtin___sprintf_chk(str, 0, __ssp_bos(str), __VA_ARGS__)
19574#define vsprintf(str,fmt,ap) __builtin___vsprintf_chk(str, 0, __ssp_bos(str), fmt, ap)
19575#define snprintf(str,len,...) __builtin___snprintf_chk(str, len, 0, __ssp_bos(str), __VA_ARGS__)
19576#define vsnprintf(str,len,fmt,ap) __builtin___vsnprintf_chk(str, len, 0, __ssp_bos(str), fmt, ap)
19577#define gets(str) __gets_chk(str, __ssp_bos(str))
19578#define __BIT_TYPES_DEFINED__ 1
19579#define _SYS_TYPES_H
19580#define _SYS__STDINT_H
19581#define _INT8_T_DECLARED
19582#define _UINT8_T_DECLARED
19583#define __int8_t_defined 1
19584#define _INT16_T_DECLARED
19585#define _UINT16_T_DECLARED
19586#define __int16_t_defined 1
19587#define _INT32_T_DECLARED
19588#define _UINT32_T_DECLARED
19589#define __int32_t_defined 1
19590#define _INT64_T_DECLARED
19591#define _UINT64_T_DECLARED
19592#define __int64_t_defined 1
19593#define _INTMAX_T_DECLARED
19594#define _UINTMAX_T_DECLARED
19595#define _INTPTR_T_DECLARED
19596#define _UINTPTR_T_DECLARED
19597#define __MACHINE_ENDIAN_H__
19598#define _BITS_ENDIAN_H_
19599#define __BIG_ENDIAN 4321
19600#define __LITTLE_ENDIAN 1234
19601#define __BYTE_ORDER __LITTLE_ENDIAN
19602#define _LITTLE_ENDIAN __LITTLE_ENDIAN
19603#define _BIG_ENDIAN __BIG_ENDIAN
19604#define _PDP_ENDIAN __PDP_ENDIAN
19605#define _BYTE_ORDER __BYTE_ORDER
19606#define __machine_host_to_from_network_defined
19607#define __htonl(_x) __ntohl(_x)
19608#define __htons(_x) __ntohs(_x)
19609#define _QUAD_HIGHWORD 1
19610#define _QUAD_LOWWORD 0
19611#define LITTLE_ENDIAN _LITTLE_ENDIAN
19612#define BIG_ENDIAN _BIG_ENDIAN
19613#define PDP_ENDIAN _PDP_ENDIAN
19614#define BYTE_ORDER _BYTE_ORDER
19615#define __bswap16(_x) __builtin_bswap16(_x)
19616#define __bswap32(_x) __builtin_bswap32(_x)
19617#define __bswap64(_x) __builtin_bswap64(_x)
19618#define _SYS_SELECT_H
19619#define _SYS__SIGSET_H_
19620#define _SYS__TIMEVAL_H_
19621#define _SUSECONDS_T_DECLARED
19622#define __time_t_defined
19623#define _TIME_T_DECLARED
19624#define _TIMEVAL_DEFINED
19625#define _SYS_TIMESPEC_H_
19626#define _SYS__TIMESPEC_H_
19627#define TIMEVAL_TO_TIMESPEC(tv,ts) do { (ts)->tv_sec = (tv)->tv_sec; (ts)->tv_nsec = (tv)->tv_usec * 1000; } while (0)
19628#define TIMESPEC_TO_TIMEVAL(tv,ts) do { (tv)->tv_sec = (ts)->tv_sec; (tv)->tv_usec = (ts)->tv_nsec / 1000; } while (0)
19629#define _SIGSET_T_DECLARED
19630#define _SYS_TYPES_FD_SET
19631#define FD_SETSIZE 1024
19632#define _NFDBITS ((int)sizeof(__fd_mask) * 8)
19633#define NFDBITS _NFDBITS
19634#define _howmany(x,y) (((x) + ((y) - 1)) / (y))
19635#define fds_bits __fds_bits
19636#define __fdset_mask(n) ((__fd_mask)1 << ((n) % _NFDBITS))
19637#define FD_CLR(n,p) ((p)->__fds_bits[(n)/_NFDBITS] &= ~__fdset_mask(n))
19638#define FD_COPY(f,t) (void)(*(t) = *(f))
19639#define FD_ISSET(n,p) (((p)->__fds_bits[(n)/_NFDBITS] & __fdset_mask(n)) != 0)
19640#define FD_SET(n,p) ((p)->__fds_bits[(n)/_NFDBITS] |= __fdset_mask(n))
19641#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)
19642#define physadr physadr_t
19643#define quad quad_t
19644#define _IN_ADDR_T_DECLARED
19645#define _IN_PORT_T_DECLARED
19646#define __u_char_defined
19647#define __u_short_defined
19648#define __u_int_defined
19649#define __u_long_defined
19650#define _BSDTYPES_DEFINED
19651#define _BLKCNT_T_DECLARED
19652#define _BLKSIZE_T_DECLARED
19653#define __clock_t_defined
19654#define _CLOCK_T_DECLARED
19655#define __caddr_t_defined
19656#define _FSBLKCNT_T_DECLARED
19657#define _ID_T_DECLARED
19658#define _INO_T_DECLARED
19659#define _DEV_T_DECLARED
19660#define _UID_T_DECLARED
19661#define _GID_T_DECLARED
19662#define _PID_T_DECLARED
19663#define _KEY_T_DECLARED
19664#define _MODE_T_DECLARED
19665#define _NLINK_T_DECLARED
19666#define __clockid_t_defined
19667#define _CLOCKID_T_DECLARED
19668#define __timer_t_defined
19669#define _TIMER_T_DECLARED
19670#define _USECONDS_T_DECLARED
19671#define _SYS__PTHREADTYPES_H_
19672#define _SYS_CPUSET_H_
19673#define __CPU_SETSIZE 1024
19674#define __NCPUBITS (8 * sizeof (__cpu_mask))
19675#define __CPU_GROUPMAX (__CPU_SETSIZE / __NCPUBITS)
19676#define __CPUELT(cpu) ((cpu) / __NCPUBITS)
19677#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
19678#define CPU_ALLOC_SIZE(num) __cpuset_alloc_size (num)
19679#define CPU_ALLOC(num) __cpuset_alloc (num)
19680#define CPU_FREE(set) __cpuset_free (set)
19681#define CPU_ZERO_S(siz,set) __cpuset_zero_s (siz, set)
19682#define CPU_SET_S(cpu,siz,set) __cpuset_set_s (cpu, siz, set)
19683#define CPU_CLR_S(cpu,siz,set) __cpuset_clr_s (cpu, siz, set)
19684#define CPU_ISSET_S(cpu,siz,set) __cpuset_isset_s (cpu, siz, set)
19685#define CPU_COUNT_S(siz,set) __cpuset_count_s (siz, set)
19686#define CPU_AND_S(siz,dst,src1,src2) __cpuset_and_s (siz, dst, src1, src2)
19687#define CPU_OR_S(siz,dst,src1,src2) __cpuset_or_s (siz, dst, src1, src2)
19688#define CPU_XOR_S(siz,dst,src1,src2) __cpuset_xor_s (siz, dst, src1, src2)
19689#define CPU_EQUAL_S(siz,src1,src2) __cpuset_equal_s (siz, src1, src2)
19690#define CPU_ZERO(set) CPU_ZERO_S(sizeof (cpu_set_t), set)
19691#define CPU_SET(cpu,set) CPU_SET_S(cpu, sizeof (cpu_set_t), set)
19692#define CPU_CLR(cpu,set) CPU_CLR_S(cpu, sizeof (cpu_set_t), set)
19693#define CPU_ISSET(cpu,set) CPU_ISSET_S(cpu, sizeof (cpu_set_t), set)
19694#define CPU_COUNT(set) CPU_COUNT_S(sizeof (cpu_set_t), set)
19695#define CPU_AND(dst,src1,src2) CPU_AND_S(sizeof (cpu_set_t), dst, src1, src2)
19696#define CPU_OR(dst,src1,src2) CPU_OR_S(sizeof (cpu_set_t), dst, src1, src2)
19697#define CPU_XOR(dst,src1,src2) CPU_XOR_S(sizeof (cpu_set_t), dst, src1, src2)
19698#define CPU_EQUAL(src1,src2) CPU_EQUAL_S(sizeof (cpu_set_t), src1, src2)
19699#define CPU_SETSIZE __CPU_SETSIZE
19700#define _ENDIAN_H_
19701#define __LONG_LONG_PAIR(HI,LO) LO, HI
19702#define _BITS_BYTESWAP_H
19703#define htobe16(x) __bswap_16(x)
19704#define htobe32(x) __bswap_32(x)
19705#define htobe64(x) __bswap_64(x)
19706#define be16toh(x) __bswap_16(x)
19707#define be32toh(x) __bswap_32(x)
19708#define be64toh(x) __bswap_64(x)
19709#define htole16(x) (x)
19710#define htole32(x) (x)
19711#define htole64(x) (x)
19712#define le16toh(x) (x)
19713#define le32toh(x) (x)
19714#define le64toh(x) (x)
19715#define _WORDSIZE_H 1
19716#define __WORDSIZE 64
19717#define __timespec_t_defined
19718#define __timestruc_t_defined
19719#define __BIT_TYPES_DEFINED__ 1
19720#define __vm_offset_t_defined
19721#define __vm_size_t_defined
19722#define __vm_object_t_defined
19723#define __addr_t_defined
19724#define _SYS_SYSMACROS_H
19725#define major(dev) gnu_dev_major(dev)
19726#define minor(dev) gnu_dev_minor(dev)
19727#define makedev(maj,min) gnu_dev_makedev(maj, min)
19728#undef __need_inttypes
19729#define _SYS_STAT_H
19730#define _TIME_H_
19731#define __need_size_t
19732#define __need_NULL
19733#undef __need_ptrdiff_t
19734#undef __need_size_t
19735#undef __need_wchar_t
19736#undef NULL
19737#define NULL ((void *)0)
19738#undef __need_NULL
19739#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
19740#define _MACHTIME_H_
19741#define _CLOCKS_PER_SEC_ 1000
19742#define CLOCKS_PER_SEC _CLOCKS_PER_SEC_
19743#define CLK_TCK CLOCKS_PER_SEC
19744#define _SYS__LOCALE_H
19745#define tzname _tzname
19746#define _CYGWIN_TIME_H
19747#define TIMER_RELTIME 0
19748#define _SIGNAL_H_
19749#define _SYS_SIGNAL_H
19750#define _STDINT_H
19751#define _SYS__INTSUP_H
19752#define __STDINT_EXP(x) __ ##x ##__
19753#undef signed
19754#undef unsigned
19755#undef char
19756#undef short
19757#undef int
19758#undef __int20
19759#undef __int20__
19760#undef long
19761#define signed +0
19762#define unsigned +0
19763#define char +0
19764#define short +1
19765#define __int20 +2
19766#define __int20__ +2
19767#define int +2
19768#define long +4
19769#define _INTPTR_EQ_LONG
19770#define __INT8 "hh"
19771#define __INT16 "h"
19772#define __INT32
19773#define __INT64 "l"
19774#define __FAST8 "hh"
19775#define __FAST16 "l"
19776#define __FAST32 "l"
19777#define __FAST64 "l"
19778#define __LEAST8 "hh"
19779#define __LEAST16 "h"
19780#define __LEAST32
19781#define __LEAST64 "l"
19782#undef signed
19783#undef unsigned
19784#undef char
19785#undef short
19786#undef int
19787#undef long
19788#undef __int20
19789#undef __int20__
19790#define __int_least8_t_defined 1
19791#define __int_least16_t_defined 1
19792#define __int_least32_t_defined 1
19793#define __int_least64_t_defined 1
19794#define __int_fast8_t_defined 1
19795#define __int_fast16_t_defined 1
19796#define __int_fast32_t_defined 1
19797#define __int_fast64_t_defined 1
19798#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
19799#define INTPTR_MAX (__INTPTR_MAX__)
19800#define UINTPTR_MAX (__UINTPTR_MAX__)
19801#define INT8_MIN (-__INT8_MAX__ - 1)
19802#define INT8_MAX (__INT8_MAX__)
19803#define UINT8_MAX (__UINT8_MAX__)
19804#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
19805#define INT_LEAST8_MAX (__INT_LEAST8_MAX__)
19806#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)
19807#define INT16_MIN (-__INT16_MAX__ - 1)
19808#define INT16_MAX (__INT16_MAX__)
19809#define UINT16_MAX (__UINT16_MAX__)
19810#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
19811#define INT_LEAST16_MAX (__INT_LEAST16_MAX__)
19812#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)
19813#define INT32_MIN (-__INT32_MAX__ - 1)
19814#define INT32_MAX (__INT32_MAX__)
19815#define UINT32_MAX (__UINT32_MAX__)
19816#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
19817#define INT_LEAST32_MAX (__INT_LEAST32_MAX__)
19818#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)
19819#define INT64_MIN (-__INT64_MAX__ - 1)
19820#define INT64_MAX (__INT64_MAX__)
19821#define UINT64_MAX (__UINT64_MAX__)
19822#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
19823#define INT_LEAST64_MAX (__INT_LEAST64_MAX__)
19824#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)
19825#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
19826#define INT_FAST8_MAX (__INT_FAST8_MAX__)
19827#define UINT_FAST8_MAX (__UINT_FAST8_MAX__)
19828#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
19829#define INT_FAST16_MAX (__INT_FAST16_MAX__)
19830#define UINT_FAST16_MAX (__UINT_FAST16_MAX__)
19831#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
19832#define INT_FAST32_MAX (__INT_FAST32_MAX__)
19833#define UINT_FAST32_MAX (__UINT_FAST32_MAX__)
19834#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
19835#define INT_FAST64_MAX (__INT_FAST64_MAX__)
19836#define UINT_FAST64_MAX (__UINT_FAST64_MAX__)
19837#define INTMAX_MAX (__INTMAX_MAX__)
19838#define INTMAX_MIN (-INTMAX_MAX - 1)
19839#define UINTMAX_MAX (__UINTMAX_MAX__)
19840#define SIZE_MAX (__SIZE_MAX__)
19841#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
19842#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))
19843#define PTRDIFF_MAX (__PTRDIFF_MAX__)
19844#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
19845#define WCHAR_MIN (__WCHAR_MIN__)
19846#define WCHAR_MAX (__WCHAR_MAX__)
19847#define WINT_MAX (__WINT_MAX__)
19848#define WINT_MIN (__WINT_MIN__)
19849#define INT8_C(x) __INT8_C(x)
19850#define UINT8_C(x) __UINT8_C(x)
19851#define INT16_C(x) __INT16_C(x)
19852#define UINT16_C(x) __UINT16_C(x)
19853#define INT32_C(x) __INT32_C(x)
19854#define UINT32_C(x) __UINT32_C(x)
19855#define INT64_C(x) __INT64_C(x)
19856#define UINT64_C(x) __UINT64_C(x)
19857#define INTMAX_C(x) __INTMAX_C(x)
19858#define UINTMAX_C(x) __UINTMAX_C(x)
19859#define _GCC_WRAP_STDINT_H
19860#define _CYGWIN_SIGNAL_H
19861#define __COPY_CONTEXT_SIZE 816
19862#pragma pack(push,4)
19863#define __SI_PAD_SIZE 32
19864#pragma pack(pop)
19865#define SI_USER SI_USER
19866#define SI_ASYNCIO SI_ASYNCIO
19867#define SI_MESGQ SI_MESGQ
19868#define SI_TIMER SI_TIMER
19869#define SI_QUEUE SI_QUEUE
19870#define SI_KERNEL SI_KERNEL
19871#define ILL_ILLOPC ILL_ILLOPC
19872#define ILL_ILLOPN ILL_ILLOPN
19873#define ILL_ILLADR ILL_ILLADR
19874#define ILL_ILLTRP ILL_ILLTRP
19875#define ILL_PRVOPC ILL_PRVOPC
19876#define ILL_PRVREG ILL_PRVREG
19877#define ILL_COPROC ILL_COPROC
19878#define ILL_BADSTK ILL_BADSTK
19879#define FPE_INTDIV FPE_INTDIV
19880#define FPE_INTOVF FPE_INTOVF
19881#define FPE_FLTDIV FPE_FLTDIV
19882#define FPE_FLTOVF FPE_FLTOVF
19883#define FPE_FLTUND FPE_FLTUND
19884#define FPE_FLTRES FPE_FLTRES
19885#define FPE_FLTINV FPE_FLTINV
19886#define FPE_FLTSUB FPE_FLTSUB
19887#define SEGV_MAPERR SEGV_MAPERR
19888#define SEGV_ACCERR SEGV_ACCERR
19889#define BUS_ADRALN BUS_ADRALN
19890#define BUS_ADRERR BUS_ADRERR
19891#define BUS_OBJERR BUS_OBJERR
19892#define CLD_EXITED CLD_EXITED
19893#define CLD_KILLED CLD_KILLED
19894#define CLD_DUMPED CLD_DUMPED
19895#define CLD_TRAPPED CLD_TRAPPED
19896#define CLD_STOPPED CLD_STOPPED
19897#define CLD_CONTINUED CLD_CONTINUED
19898#define SIGEV_SIGNAL SIGEV_SIGNAL
19899#define SIGEV_NONE SIGEV_NONE
19900#define SIGEV_THREAD SIGEV_THREAD
19901#define SA_NOCLDSTOP 1
19902#define SA_SIGINFO 2
19903#define SA_RESTART 0x10000000
19904#define SA_ONSTACK 0x20000000
19905#define SA_NODEFER 0x40000000
19906#define SA_RESETHAND 0x80000000
19907#define SA_ONESHOT SA_RESETHAND
19908#define SA_NOMASK SA_NODEFER
19909#define _SA_INTERNAL_MASK 0xf000
19910#undef MINSIGSTKSZ
19911#define MINSIGSTKSZ 8192
19912#undef SIGSTKSZ
19913#define SIGSTKSZ 32768
19914#define SIGHUP 1
19915#define SIGINT 2
19916#define SIGQUIT 3
19917#define SIGILL 4
19918#define SIGTRAP 5
19919#define SIGABRT 6
19920#define SIGIOT SIGABRT
19921#define SIGEMT 7
19922#define SIGFPE 8
19923#define SIGKILL 9
19924#define SIGBUS 10
19925#define SIGSEGV 11
19926#define SIGSYS 12
19927#define SIGPIPE 13
19928#define SIGALRM 14
19929#define SIGTERM 15
19930#define SIGURG 16
19931#define SIGSTOP 17
19932#define SIGTSTP 18
19933#define SIGCONT 19
19934#define SIGCHLD 20
19935#define SIGCLD 20
19936#define SIGTTIN 21
19937#define SIGTTOU 22
19938#define SIGIO 23
19939#define SIGPOLL SIGIO
19940#define SIGXCPU 24
19941#define SIGXFSZ 25
19942#define SIGVTALRM 26
19943#define SIGPROF 27
19944#define SIGWINCH 28
19945#define SIGLOST 29
19946#define SIGPWR SIGLOST
19947#define SIGUSR1 30
19948#define SIGUSR2 31
19949#define _NSIG 65
19950#define NSIG _NSIG
19951#define SIGRTMIN 32
19952#define SIGRTMAX (_NSIG - 1)
19953#define SIG_HOLD ((_sig_func_ptr)2)
19954#define SS_ONSTACK 0x1
19955#define SS_DISABLE 0x2
19956#define SIG_SETMASK 0
19957#define SIG_BLOCK 1
19958#define SIG_UNBLOCK 2
19959#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("4294967295") - 1)
19960#define _SYS_UCONTEXT_H_
19961#define SIG_DFL ((_sig_func_ptr)0)
19962#define SIG_IGN ((_sig_func_ptr)1)
19963#define SIG_ERR ((_sig_func_ptr)-1)
19964#define CLOCK_ENABLED 1
19965#define CLOCK_DISABLED 0
19966#define CLOCK_ALLOWED 1
19967#define CLOCK_DISALLOWED 0
19968#define TIMER_ABSTIME 4
19969#define CLOCK_REALTIME_COARSE ((clockid_t) 0)
19970#define CLOCK_REALTIME ((clockid_t) 1)
19971#define CLOCK_PROCESS_CPUTIME_ID ((clockid_t) 2)
19972#define CLOCK_THREAD_CPUTIME_ID ((clockid_t) 3)
19973#define CLOCK_MONOTONIC ((clockid_t) 4)
19974#define CLOCK_MONOTONIC_RAW ((clockid_t) 5)
19975#define CLOCK_MONOTONIC_COARSE ((clockid_t) 6)
19976#define CLOCK_BOOTTIME ((clockid_t) 7)
19977#define CLOCK_REALTIME_ALARM ((clockid_t) 8)
19978#define CLOCK_BOOTTIME_ALARM ((clockid_t) 9)
19979#define _CYGWIN_STAT_H
19980#define st_atime st_atim.tv_sec
19981#define st_mtime st_mtim.tv_sec
19982#define st_ctime st_ctim.tv_sec
19983#define st_birthtime st_birthtim.tv_sec
19984#define S_TYPEISMQ(buf) ((void)(buf)->st_mode,0)
19985#define S_TYPEISSEM(buf) ((void)(buf)->st_mode,0)
19986#define S_TYPEISSHM(buf) ((void)(buf)->st_mode,0)
19987#define _IFMT 0170000
19988#define _IFDIR 0040000
19989#define _IFCHR 0020000
19990#define _IFBLK 0060000
19991#define _IFREG 0100000
19992#define _IFLNK 0120000
19993#define _IFSOCK 0140000
19994#define _IFIFO 0010000
19995#define S_BLKSIZE 1024
19996#define S_ISUID 0004000
19997#define S_ISGID 0002000
19998#define S_ISVTX 0001000
19999#define S_IREAD 0000400
20000#define S_IWRITE 0000200
20001#define S_IEXEC 0000100
20002#define S_ENFMT 0002000
20003#define S_IFMT _IFMT
20004#define S_IFDIR _IFDIR
20005#define S_IFCHR _IFCHR
20006#define S_IFBLK _IFBLK
20007#define S_IFREG _IFREG
20008#define S_IFLNK _IFLNK
20009#define S_IFSOCK _IFSOCK
20010#define S_IFIFO _IFIFO
20011#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
20012#define S_IRUSR 0000400
20013#define S_IWUSR 0000200
20014#define S_IXUSR 0000100
20015#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
20016#define S_IRGRP 0000040
20017#define S_IWGRP 0000020
20018#define S_IXGRP 0000010
20019#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
20020#define S_IROTH 0000004
20021#define S_IWOTH 0000002
20022#define S_IXOTH 0000001
20023#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
20024#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
20025#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
20026#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK)
20027#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR)
20028#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
20029#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)
20030#define S_ISREG(m) (((m)&_IFMT) == _IFREG)
20031#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK)
20032#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)
20033#define UTIME_NOW -2L
20034#define UTIME_OMIT -1L
20035#define _STDLIB_H_
20036#define __need_size_t
20037#define __need_wchar_t
20038#define __need_NULL
20039#undef __need_ptrdiff_t
20040#undef __need_size_t
20041#undef __need_wchar_t
20042#undef NULL
20043#define NULL ((void *)0)
20044#undef __need_NULL
20045#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20046#define _MACHSTDLIB_H_
20047#define _NEWLIB_ALLOCA_H
20048#undef alloca
20049#define alloca(size) __builtin_alloca(size)
20050#define _CYGWIN_STDLIB_H
20051#define _CYGWIN_WAIT_H
20052#define WAIT_ANY (pid_t)-1
20053#define WAIT_MYPGRP (pid_t)0
20054#define WNOHANG 1
20055#define WUNTRACED 2
20056#define WCONTINUED 8
20057#define __W_CONTINUED 0xffff
20058#define WIFEXITED(_w) (((_w) & 0xff) == 0)
20059#define WIFSIGNALED(_w) (((_w) & 0x7f) > 0 && (((_w) & 0x7f) < 0x7f))
20060#define WIFSTOPPED(_w) (((_w) & 0xff) == 0x7f)
20061#define WIFCONTINUED(_w) (((_w) & 0xffff) == __W_CONTINUED)
20062#define WEXITSTATUS(_w) (((_w) >> 8) & 0xff)
20063#define WTERMSIG(_w) ((_w) & 0x7f)
20064#define WSTOPSIG WEXITSTATUS
20065#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & 0x80))
20066#undef _malloc_r
20067#define _malloc_r(r,s) malloc (s)
20068#undef _free_r
20069#define _free_r(r,p) free (p)
20070#undef _realloc_r
20071#define _realloc_r(r,p,s) realloc (p, s)
20072#undef _calloc_r
20073#define _calloc_r(r,s1,s2) calloc (s1, s2);
20074#undef _memalign_r
20075#define _memalign_r(r,s1,s2) memalign (s1, s2);
20076#undef _mallinfo_r
20077#define _mallinfo_r(r) mallinfo ()
20078#undef _malloc_stats_r
20079#define _malloc_stats_r(r) malloc_stats ()
20080#undef _mallopt_r
20081#define _mallopt_r(i1,i2) mallopt (i1, i2)
20082#undef _malloc_usable_size_r
20083#define _malloc_usable_size_r(r,p) malloc_usable_size (p)
20084#undef _valloc_r
20085#define _valloc_r(r,s) valloc (s)
20086#undef _pvalloc_r
20087#define _pvalloc_r(r,s) pvalloc (s)
20088#undef _malloc_trim_r
20089#define _malloc_trim_r(r,s) malloc_trim (s)
20090#undef _mstats_r
20091#define _mstats_r(r,p) mstats (p)
20092#define __compar_fn_t_defined
20093#define EXIT_FAILURE 1
20094#define EXIT_SUCCESS 0
20095#define RAND_MAX __RAND_MAX
20096#define MB_CUR_MAX __locale_mb_cur_max()
20097#define strtodf strtof
20098#define _SSP_STDLIB_H_
20099#define _STRING_H_
20100#define __need_size_t
20101#define __need_NULL
20102#undef __need_ptrdiff_t
20103#undef __need_size_t
20104#undef __need_wchar_t
20105#undef NULL
20106#define NULL ((void *)0)
20107#undef __need_NULL
20108#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20109#define _STRINGS_H_
20110#define _SSP_STRINGS_H_
20111#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))
20112#define bzero(dst,len) ((__ssp_bos0(dst) != (size_t)-1) ? __builtin___memset_chk(dst, 0, len, __ssp_bos0(dst)) : __memset_ichk(dst, 0, len))
20113#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);}))
20114#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);}))
20115#define basename basename
20116#define _SSP_STRING_H_
20117#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))
20118#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))
20119#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)); }
20120#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)); }
20121#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)); }
20122#define memcpy(dst,src,len) __ssp_bos_check3(memcpy, dst, src, len)
20123#define memmove(dst,src,len) __ssp_bos_check3(memmove, dst, src, len)
20124#define mempcpy(dst,src,len) __ssp_bos_check3(mempcpy, dst, src, len)
20125#define memset(dst,val,len) __ssp_bos_check3(memset, dst, val, len)
20126#define stpcpy(dst,src) __ssp_bos_check2(stpcpy, dst, src)
20127#define stpncpy(dst,src,len) __ssp_bos_check3(stpncpy, dst, src, len)
20128#define strcpy(dst,src) __ssp_bos_check2(strcpy, dst, src)
20129#define strcat(dst,src) __ssp_bos_check2(strcat, dst, src)
20130#define strncpy(dst,src,len) __ssp_bos_check3(strncpy, dst, src, len)
20131#define strncat(dst,src,len) __ssp_bos_check3(strncat, dst, src, len)
20132#define _INTTYPES_H
20133#define __need_wchar_t
20134#undef __need_ptrdiff_t
20135#undef __need_size_t
20136#undef __need_wchar_t
20137#undef NULL
20138#define NULL ((void *)0)
20139#undef __need_NULL
20140#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20141#define __STRINGIFY(a) #a
20142#define __PRI8(x) __INT8 __STRINGIFY(x)
20143#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x)
20144#define __PRI8FAST(x) __FAST8 __STRINGIFY(x)
20145#define __SCN8(x) __INT8 __STRINGIFY(x)
20146#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x)
20147#define __SCN8FAST(x) __FAST8 __STRINGIFY(x)
20148#define PRId8 __PRI8(d)
20149#define PRIi8 __PRI8(i)
20150#define PRIo8 __PRI8(o)
20151#define PRIu8 __PRI8(u)
20152#define PRIx8 __PRI8(x)
20153#define PRIX8 __PRI8(X)
20154#define SCNd8 __SCN8(d)
20155#define SCNi8 __SCN8(i)
20156#define SCNo8 __SCN8(o)
20157#define SCNu8 __SCN8(u)
20158#define SCNx8 __SCN8(x)
20159#define PRIdLEAST8 __PRI8LEAST(d)
20160#define PRIiLEAST8 __PRI8LEAST(i)
20161#define PRIoLEAST8 __PRI8LEAST(o)
20162#define PRIuLEAST8 __PRI8LEAST(u)
20163#define PRIxLEAST8 __PRI8LEAST(x)
20164#define PRIXLEAST8 __PRI8LEAST(X)
20165#define SCNdLEAST8 __SCN8LEAST(d)
20166#define SCNiLEAST8 __SCN8LEAST(i)
20167#define SCNoLEAST8 __SCN8LEAST(o)
20168#define SCNuLEAST8 __SCN8LEAST(u)
20169#define SCNxLEAST8 __SCN8LEAST(x)
20170#define PRIdFAST8 __PRI8FAST(d)
20171#define PRIiFAST8 __PRI8FAST(i)
20172#define PRIoFAST8 __PRI8FAST(o)
20173#define PRIuFAST8 __PRI8FAST(u)
20174#define PRIxFAST8 __PRI8FAST(x)
20175#define PRIXFAST8 __PRI8FAST(X)
20176#define SCNdFAST8 __SCN8FAST(d)
20177#define SCNiFAST8 __SCN8FAST(i)
20178#define SCNoFAST8 __SCN8FAST(o)
20179#define SCNuFAST8 __SCN8FAST(u)
20180#define SCNxFAST8 __SCN8FAST(x)
20181#define __PRI16(x) __INT16 __STRINGIFY(x)
20182#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x)
20183#define __PRI16FAST(x) __FAST16 __STRINGIFY(x)
20184#define __SCN16(x) __INT16 __STRINGIFY(x)
20185#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x)
20186#define __SCN16FAST(x) __FAST16 __STRINGIFY(x)
20187#define PRId16 __PRI16(d)
20188#define PRIi16 __PRI16(i)
20189#define PRIo16 __PRI16(o)
20190#define PRIu16 __PRI16(u)
20191#define PRIx16 __PRI16(x)
20192#define PRIX16 __PRI16(X)
20193#define SCNd16 __SCN16(d)
20194#define SCNi16 __SCN16(i)
20195#define SCNo16 __SCN16(o)
20196#define SCNu16 __SCN16(u)
20197#define SCNx16 __SCN16(x)
20198#define PRIdLEAST16 __PRI16LEAST(d)
20199#define PRIiLEAST16 __PRI16LEAST(i)
20200#define PRIoLEAST16 __PRI16LEAST(o)
20201#define PRIuLEAST16 __PRI16LEAST(u)
20202#define PRIxLEAST16 __PRI16LEAST(x)
20203#define PRIXLEAST16 __PRI16LEAST(X)
20204#define SCNdLEAST16 __SCN16LEAST(d)
20205#define SCNiLEAST16 __SCN16LEAST(i)
20206#define SCNoLEAST16 __SCN16LEAST(o)
20207#define SCNuLEAST16 __SCN16LEAST(u)
20208#define SCNxLEAST16 __SCN16LEAST(x)
20209#define PRIdFAST16 __PRI16FAST(d)
20210#define PRIiFAST16 __PRI16FAST(i)
20211#define PRIoFAST16 __PRI16FAST(o)
20212#define PRIuFAST16 __PRI16FAST(u)
20213#define PRIxFAST16 __PRI16FAST(x)
20214#define PRIXFAST16 __PRI16FAST(X)
20215#define SCNdFAST16 __SCN16FAST(d)
20216#define SCNiFAST16 __SCN16FAST(i)
20217#define SCNoFAST16 __SCN16FAST(o)
20218#define SCNuFAST16 __SCN16FAST(u)
20219#define SCNxFAST16 __SCN16FAST(x)
20220#define __PRI32(x) __INT32 __STRINGIFY(x)
20221#define __SCN32(x) __INT32 __STRINGIFY(x)
20222#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x)
20223#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x)
20224#define __PRI32FAST(x) __FAST32 __STRINGIFY(x)
20225#define __SCN32FAST(x) __FAST32 __STRINGIFY(x)
20226#define PRId32 __PRI32(d)
20227#define PRIi32 __PRI32(i)
20228#define PRIo32 __PRI32(o)
20229#define PRIu32 __PRI32(u)
20230#define PRIx32 __PRI32(x)
20231#define PRIX32 __PRI32(X)
20232#define SCNd32 __SCN32(d)
20233#define SCNi32 __SCN32(i)
20234#define SCNo32 __SCN32(o)
20235#define SCNu32 __SCN32(u)
20236#define SCNx32 __SCN32(x)
20237#define PRIdLEAST32 __PRI32LEAST(d)
20238#define PRIiLEAST32 __PRI32LEAST(i)
20239#define PRIoLEAST32 __PRI32LEAST(o)
20240#define PRIuLEAST32 __PRI32LEAST(u)
20241#define PRIxLEAST32 __PRI32LEAST(x)
20242#define PRIXLEAST32 __PRI32LEAST(X)
20243#define SCNdLEAST32 __SCN32LEAST(d)
20244#define SCNiLEAST32 __SCN32LEAST(i)
20245#define SCNoLEAST32 __SCN32LEAST(o)
20246#define SCNuLEAST32 __SCN32LEAST(u)
20247#define SCNxLEAST32 __SCN32LEAST(x)
20248#define PRIdFAST32 __PRI32FAST(d)
20249#define PRIiFAST32 __PRI32FAST(i)
20250#define PRIoFAST32 __PRI32FAST(o)
20251#define PRIuFAST32 __PRI32FAST(u)
20252#define PRIxFAST32 __PRI32FAST(x)
20253#define PRIXFAST32 __PRI32FAST(X)
20254#define SCNdFAST32 __SCN32FAST(d)
20255#define SCNiFAST32 __SCN32FAST(i)
20256#define SCNoFAST32 __SCN32FAST(o)
20257#define SCNuFAST32 __SCN32FAST(u)
20258#define SCNxFAST32 __SCN32FAST(x)
20259#define __PRI64(x) __INT64 __STRINGIFY(x)
20260#define __SCN64(x) __INT64 __STRINGIFY(x)
20261#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x)
20262#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x)
20263#define __PRI64FAST(x) __FAST64 __STRINGIFY(x)
20264#define __SCN64FAST(x) __FAST64 __STRINGIFY(x)
20265#define PRId64 __PRI64(d)
20266#define PRIi64 __PRI64(i)
20267#define PRIo64 __PRI64(o)
20268#define PRIu64 __PRI64(u)
20269#define PRIx64 __PRI64(x)
20270#define PRIX64 __PRI64(X)
20271#define SCNd64 __SCN64(d)
20272#define SCNi64 __SCN64(i)
20273#define SCNo64 __SCN64(o)
20274#define SCNu64 __SCN64(u)
20275#define SCNx64 __SCN64(x)
20276#define PRIdLEAST64 __PRI64LEAST(d)
20277#define PRIiLEAST64 __PRI64LEAST(i)
20278#define PRIoLEAST64 __PRI64LEAST(o)
20279#define PRIuLEAST64 __PRI64LEAST(u)
20280#define PRIxLEAST64 __PRI64LEAST(x)
20281#define PRIXLEAST64 __PRI64LEAST(X)
20282#define SCNdLEAST64 __SCN64LEAST(d)
20283#define SCNiLEAST64 __SCN64LEAST(i)
20284#define SCNoLEAST64 __SCN64LEAST(o)
20285#define SCNuLEAST64 __SCN64LEAST(u)
20286#define SCNxLEAST64 __SCN64LEAST(x)
20287#define PRIdFAST64 __PRI64FAST(d)
20288#define PRIiFAST64 __PRI64FAST(i)
20289#define PRIoFAST64 __PRI64FAST(o)
20290#define PRIuFAST64 __PRI64FAST(u)
20291#define PRIxFAST64 __PRI64FAST(x)
20292#define PRIXFAST64 __PRI64FAST(X)
20293#define SCNdFAST64 __SCN64FAST(d)
20294#define SCNiFAST64 __SCN64FAST(i)
20295#define SCNoFAST64 __SCN64FAST(o)
20296#define SCNuFAST64 __SCN64FAST(u)
20297#define SCNxFAST64 __SCN64FAST(x)
20298#define __PRIMAX(x) __STRINGIFY(l ##x)
20299#define __SCNMAX(x) __STRINGIFY(l ##x)
20300#define PRIdMAX __PRIMAX(d)
20301#define PRIiMAX __PRIMAX(i)
20302#define PRIoMAX __PRIMAX(o)
20303#define PRIuMAX __PRIMAX(u)
20304#define PRIxMAX __PRIMAX(x)
20305#define PRIXMAX __PRIMAX(X)
20306#define SCNdMAX __SCNMAX(d)
20307#define SCNiMAX __SCNMAX(i)
20308#define SCNoMAX __SCNMAX(o)
20309#define SCNuMAX __SCNMAX(u)
20310#define SCNxMAX __SCNMAX(x)
20311#define __PRIPTR(x) __STRINGIFY(l ##x)
20312#define __SCNPTR(x) __STRINGIFY(l ##x)
20313#define PRIdPTR __PRIPTR(d)
20314#define PRIiPTR __PRIPTR(i)
20315#define PRIoPTR __PRIPTR(o)
20316#define PRIuPTR __PRIPTR(u)
20317#define PRIxPTR __PRIPTR(x)
20318#define PRIXPTR __PRIPTR(X)
20319#define SCNdPTR __SCNPTR(d)
20320#define SCNiPTR __SCNPTR(i)
20321#define SCNoPTR __SCNPTR(o)
20322#define SCNuPTR __SCNPTR(u)
20323#define SCNxPTR __SCNPTR(x)
20324#define _STDALIGN_H
20325#define alignas _Alignas
20326#define alignof _Alignof
20327#define __alignas_is_defined 1
20328#define __alignof_is_defined 1
20329#define _UNISTD_H_
20330#define _SYS_UNISTD_H
20331#define __need_size_t
20332#define __need_ptrdiff_t
20333#undef __need_ptrdiff_t
20334#undef __need_size_t
20335#undef __need_wchar_t
20336#undef NULL
20337#define NULL ((void *)0)
20338#undef __need_NULL
20339#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
20340#define F_ULOCK 0
20341#define F_LOCK 1
20342#define F_TLOCK 2
20343#define F_TEST 3
20344#define __UNISTD_GETOPT__
20345#define __GETOPT_H__
20346#undef __UNISTD_GETOPT__
20347#define F_OK 0
20348#define R_OK 4
20349#define W_OK 2
20350#define X_OK 1
20351#define SEEK_SET 0
20352#define SEEK_CUR 1
20353#define SEEK_END 2
20354#define STDIN_FILENO 0
20355#define STDOUT_FILENO 1
20356#define STDERR_FILENO 2
20357#define _SC_ARG_MAX 0
20358#define _SC_CHILD_MAX 1
20359#define _SC_CLK_TCK 2
20360#define _SC_NGROUPS_MAX 3
20361#define _SC_OPEN_MAX 4
20362#define _SC_JOB_CONTROL 5
20363#define _SC_SAVED_IDS 6
20364#define _SC_VERSION 7
20365#define _SC_PAGESIZE 8
20366#define _SC_PAGE_SIZE _SC_PAGESIZE
20367#define _SC_NPROCESSORS_CONF 9
20368#define _SC_NPROCESSORS_ONLN 10
20369#define _SC_PHYS_PAGES 11
20370#define _SC_AVPHYS_PAGES 12
20371#define _SC_MQ_OPEN_MAX 13
20372#define _SC_MQ_PRIO_MAX 14
20373#define _SC_RTSIG_MAX 15
20374#define _SC_SEM_NSEMS_MAX 16
20375#define _SC_SEM_VALUE_MAX 17
20376#define _SC_SIGQUEUE_MAX 18
20377#define _SC_TIMER_MAX 19
20378#define _SC_TZNAME_MAX 20
20379#define _SC_ASYNCHRONOUS_IO 21
20380#define _SC_FSYNC 22
20381#define _SC_MAPPED_FILES 23
20382#define _SC_MEMLOCK 24
20383#define _SC_MEMLOCK_RANGE 25
20384#define _SC_MEMORY_PROTECTION 26
20385#define _SC_MESSAGE_PASSING 27
20386#define _SC_PRIORITIZED_IO 28
20387#define _SC_REALTIME_SIGNALS 29
20388#define _SC_SEMAPHORES 30
20389#define _SC_SHARED_MEMORY_OBJECTS 31
20390#define _SC_SYNCHRONIZED_IO 32
20391#define _SC_TIMERS 33
20392#define _SC_AIO_LISTIO_MAX 34
20393#define _SC_AIO_MAX 35
20394#define _SC_AIO_PRIO_DELTA_MAX 36
20395#define _SC_DELAYTIMER_MAX 37
20396#define _SC_THREAD_KEYS_MAX 38
20397#define _SC_THREAD_STACK_MIN 39
20398#define _SC_THREAD_THREADS_MAX 40
20399#define _SC_TTY_NAME_MAX 41
20400#define _SC_THREADS 42
20401#define _SC_THREAD_ATTR_STACKADDR 43
20402#define _SC_THREAD_ATTR_STACKSIZE 44
20403#define _SC_THREAD_PRIORITY_SCHEDULING 45
20404#define _SC_THREAD_PRIO_INHERIT 46
20405#define _SC_THREAD_PRIO_PROTECT 47
20406#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
20407#define _SC_THREAD_PROCESS_SHARED 48
20408#define _SC_THREAD_SAFE_FUNCTIONS 49
20409#define _SC_GETGR_R_SIZE_MAX 50
20410#define _SC_GETPW_R_SIZE_MAX 51
20411#define _SC_LOGIN_NAME_MAX 52
20412#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
20413#define _SC_ADVISORY_INFO 54
20414#define _SC_ATEXIT_MAX 55
20415#define _SC_BARRIERS 56
20416#define _SC_BC_BASE_MAX 57
20417#define _SC_BC_DIM_MAX 58
20418#define _SC_BC_SCALE_MAX 59
20419#define _SC_BC_STRING_MAX 60
20420#define _SC_CLOCK_SELECTION 61
20421#define _SC_COLL_WEIGHTS_MAX 62
20422#define _SC_CPUTIME 63
20423#define _SC_EXPR_NEST_MAX 64
20424#define _SC_HOST_NAME_MAX 65
20425#define _SC_IOV_MAX 66
20426#define _SC_IPV6 67
20427#define _SC_LINE_MAX 68
20428#define _SC_MONOTONIC_CLOCK 69
20429#define _SC_RAW_SOCKETS 70
20430#define _SC_READER_WRITER_LOCKS 71
20431#define _SC_REGEXP 72
20432#define _SC_RE_DUP_MAX 73
20433#define _SC_SHELL 74
20434#define _SC_SPAWN 75
20435#define _SC_SPIN_LOCKS 76
20436#define _SC_SPORADIC_SERVER 77
20437#define _SC_SS_REPL_MAX 78
20438#define _SC_SYMLOOP_MAX 79
20439#define _SC_THREAD_CPUTIME 80
20440#define _SC_THREAD_SPORADIC_SERVER 81
20441#define _SC_TIMEOUTS 82
20442#define _SC_TRACE 83
20443#define _SC_TRACE_EVENT_FILTER 84
20444#define _SC_TRACE_EVENT_NAME_MAX 85
20445#define _SC_TRACE_INHERIT 86
20446#define _SC_TRACE_LOG 87
20447#define _SC_TRACE_NAME_MAX 88
20448#define _SC_TRACE_SYS_MAX 89
20449#define _SC_TRACE_USER_EVENT_MAX 90
20450#define _SC_TYPED_MEMORY_OBJECTS 91
20451#define _SC_V7_ILP32_OFF32 92
20452#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
20453#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
20454#define _SC_V7_ILP32_OFFBIG 93
20455#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
20456#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
20457#define _SC_V7_LP64_OFF64 94
20458#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
20459#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
20460#define _SC_V7_LPBIG_OFFBIG 95
20461#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
20462#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
20463#define _SC_XOPEN_CRYPT 96
20464#define _SC_XOPEN_ENH_I18N 97
20465#define _SC_XOPEN_LEGACY 98
20466#define _SC_XOPEN_REALTIME 99
20467#define _SC_STREAM_MAX 100
20468#define _SC_PRIORITY_SCHEDULING 101
20469#define _SC_XOPEN_REALTIME_THREADS 102
20470#define _SC_XOPEN_SHM 103
20471#define _SC_XOPEN_STREAMS 104
20472#define _SC_XOPEN_UNIX 105
20473#define _SC_XOPEN_VERSION 106
20474#define _SC_2_CHAR_TERM 107
20475#define _SC_2_C_BIND 108
20476#define _SC_2_C_DEV 109
20477#define _SC_2_FORT_DEV 110
20478#define _SC_2_FORT_RUN 111
20479#define _SC_2_LOCALEDEF 112
20480#define _SC_2_PBS 113
20481#define _SC_2_PBS_ACCOUNTING 114
20482#define _SC_2_PBS_CHECKPOINT 115
20483#define _SC_2_PBS_LOCATE 116
20484#define _SC_2_PBS_MESSAGE 117
20485#define _SC_2_PBS_TRACK 118
20486#define _SC_2_SW_DEV 119
20487#define _SC_2_UPE 120
20488#define _SC_2_VERSION 121
20489#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
20490#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
20491#define _SC_XOPEN_UUCP 124
20492#define _SC_LEVEL1_ICACHE_SIZE 125
20493#define _SC_LEVEL1_ICACHE_ASSOC 126
20494#define _SC_LEVEL1_ICACHE_LINESIZE 127
20495#define _SC_LEVEL1_DCACHE_SIZE 128
20496#define _SC_LEVEL1_DCACHE_ASSOC 129
20497#define _SC_LEVEL1_DCACHE_LINESIZE 130
20498#define _SC_LEVEL2_CACHE_SIZE 131
20499#define _SC_LEVEL2_CACHE_ASSOC 132
20500#define _SC_LEVEL2_CACHE_LINESIZE 133
20501#define _SC_LEVEL3_CACHE_SIZE 134
20502#define _SC_LEVEL3_CACHE_ASSOC 135
20503#define _SC_LEVEL3_CACHE_LINESIZE 136
20504#define _SC_LEVEL4_CACHE_SIZE 137
20505#define _SC_LEVEL4_CACHE_ASSOC 138
20506#define _SC_LEVEL4_CACHE_LINESIZE 139
20507#define _SC_POSIX_26_VERSION 140
20508#define _PC_LINK_MAX 0
20509#define _PC_MAX_CANON 1
20510#define _PC_MAX_INPUT 2
20511#define _PC_NAME_MAX 3
20512#define _PC_PATH_MAX 4
20513#define _PC_PIPE_BUF 5
20514#define _PC_CHOWN_RESTRICTED 6
20515#define _PC_NO_TRUNC 7
20516#define _PC_VDISABLE 8
20517#define _PC_ASYNC_IO 9
20518#define _PC_PRIO_IO 10
20519#define _PC_SYNC_IO 11
20520#define _PC_FILESIZEBITS 12
20521#define _PC_2_SYMLINKS 13
20522#define _PC_SYMLINK_MAX 14
20523#define _PC_ALLOC_SIZE_MIN 15
20524#define _PC_REC_INCR_XFER_SIZE 16
20525#define _PC_REC_MAX_XFER_SIZE 17
20526#define _PC_REC_MIN_XFER_SIZE 18
20527#define _PC_REC_XFER_ALIGN 19
20528#define _PC_TIMESTAMP_RESOLUTION 20
20529#define _PC_POSIX_PERMISSIONS 90
20530#define _PC_POSIX_SECURITY 91
20531#define _PC_CASE_INSENSITIVE 92
20532#define _CS_PATH 0
20533#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
20534#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
20535#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
20536#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
20537#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
20538#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
20539#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
20540#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
20541#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
20542#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
20543#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
20544#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
20545#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
20546#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
20547#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20548#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
20549#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
20550#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20551#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
20552#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
20553#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
20554#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20555#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
20556#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
20557#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20558#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
20559#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
20560#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20561#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
20562#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
20563#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
20564#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20565#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
20566#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
20567#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20568#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
20569#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
20570#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20571#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
20572#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
20573#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
20574#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20575#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
20576#define _CS_POSIX_V7_THREADS_CFLAGS 18
20577#define _CS_POSIX_V7_THREADS_LDFLAGS 19
20578#define _CS_V7_ENV 20
20579#define _CS_V6_ENV _CS_V7_ENV
20580#define _CS_LFS_CFLAGS 21
20581#define _CS_LFS_LDFLAGS 22
20582#define _CS_LFS_LIBS 23
20583#define _CS_LFS_LINTFLAGS 24
20584#define _SSP_UNISTD_H_
20585#define RBIMPL_DLLEXPORT_H
20586#undef RUBY_EXTERN
20587#define RUBY_EXTERN extern
20588#define MJIT_FUNC_EXPORTED RUBY_FUNC_EXPORTED
20589#define MJIT_SYMBOL_EXPORT_BEGIN RUBY_SYMBOL_EXPORT_BEGIN
20590#define MJIT_SYMBOL_EXPORT_END RUBY_SYMBOL_EXPORT_END
20591#define MJIT_STATIC static
20592#define RBIMPL_SYMBOL_EXPORT_BEGIN() RUBY_SYMBOL_EXPORT_BEGIN
20593#define RBIMPL_SYMBOL_EXPORT_END() RUBY_SYMBOL_EXPORT_END
20594#define RBIMPL_XMALLOC_H
20595#define RBIMPL_ATTR_ALLOC_SIZE_H
20596#define RBIMPL_HAS_ATTRIBUTE_H
20597#define RBIMPL_HAVE___HAS_ATTRIBUTE 1
20598#define RBIMPL_HAS_ATTRIBUTE(_) __has_attribute(_)
20599#define RBIMPL_ATTR_ALLOC_SIZE(tuple) __attribute__((__alloc_size__ tuple))
20600#define RBIMPL_ATTR_NODISCARD_H
20601#define RBIMPL_HAS_C_ATTRIBUTE_H
20602#define RBIMPL_HAS_C_ATTRIBUTE(_) __has_c_attribute(_)
20603#define RBIMPL_HAS_CPP_ATTRIBUTE_H
20604#define RBIMPL_HAS_CPP_ATTRIBUTE0(_) __has_cpp_attribute(_)
20605#define RBIMPL_HAS_CPP_ATTRIBUTE(_) 0
20606#define RBIMPL_ATTR_NODISCARD() [[nodiscard]]
20607#define RBIMPL_ATTR_NOEXCEPT_H
20608#define RBIMPL_HAS_FEATURE_H
20609#define RBIMPL_HAS_FEATURE(_) __has_feature(_)
20610#define RBIMPL_ATTR_NOEXCEPT(_)
20611#define RBIMPL_ATTR_RESTRICT_H
20612#define RBIMPL_ATTR_RESTRICT() __attribute__((__malloc__))
20613#define RBIMPL_ATTR_RETURNS_NONNULL_H
20614#define RBIMPL_ATTR_RETURNS_NONNULL() __attribute__((__returns_nonnull__))
20615#define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
20616#define xmalloc ruby_xmalloc
20617#define xmalloc2 ruby_xmalloc2
20618#define xcalloc ruby_xcalloc
20619#define xrealloc ruby_xrealloc
20620#define xrealloc2 ruby_xrealloc2
20621#define xfree ruby_xfree
20622#pragma GCC visibility push(default)
20623#pragma GCC visibility pop
20624#define RUBY_BACKWARD2_ASSUME_H
20625#define RBIMPL_ASSUME_H
20626#define RBIMPL_CAST_H
20627#define RBIMPL_HAS_WARNING_H
20628#define RBIMPL_HAS_WARNING(_) 0
20629#define RBIMPL_WARNING_PUSH_H
20630#define RBIMPL_WARNING_PRAGMA0(x) _Pragma(#x)
20631#define RBIMPL_WARNING_PRAGMA1(x) RBIMPL_WARNING_PRAGMA0(GCC diagnostic x)
20632#define RBIMPL_WARNING_PRAGMA2(x,y) RBIMPL_WARNING_PRAGMA1(x #y)
20633#define RBIMPL_WARNING_PUSH() RBIMPL_WARNING_PRAGMA1(push)
20634#define RBIMPL_WARNING_POP() RBIMPL_WARNING_PRAGMA1(pop)
20635#define RBIMPL_WARNING_ERROR(flag) RBIMPL_WARNING_PRAGMA2(error, flag)
20636#define RBIMPL_WARNING_IGNORED(flag) RBIMPL_WARNING_PRAGMA2(ignored, flag)
20637#define RBIMPL_CAST(expr) (expr)
20638#define RBIMPL_HAS_BUILTIN_H
20639#define RBIMPL_HAVE___HAS_BUILTIN 1
20640#define RBIMPL_HAS_BUILTIN(_) __has_builtin(_)
20641#define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()
20642#define RBIMPL_UNREACHABLE __builtin_unreachable
20643#define RBIMPL_ASSUME(_) (RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
20644#define ASSUME RBIMPL_ASSUME
20645#define UNREACHABLE RBIMPL_UNREACHABLE()
20646#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN
20647#define RB_LIKELY(x) (__builtin_expect(!!(x), 1))
20648#define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
20649#define RUBY_BACKWARD2_ATTRIBUTES_H
20650#define RBIMPL_ATTR_CONST_H
20651#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_H
20652#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE(_) (RBIMPL_HAS_DECLSPEC_ATTRIBUTE_ ## _)
20653#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_align RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20654#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_deprecated RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20655#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllexport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20656#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_dllimport RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20657#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_empty_bases RBIMPL_COMPILER_SINCE(MSVC,19, 0, 23918)
20658#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noalias RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20659#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noinline RBIMPL_COMPILER_SINCE(MSVC,13, 0, 0)
20660#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_noreturn RBIMPL_COMPILER_SINCE(MSVC,11, 0, 0)
20661#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow RBIMPL_COMPILER_SINCE(MSVC, 8, 0, 0)
20662#define RBIMPL_HAS_DECLSPEC_ATTRIBUTE_restrict RBIMPL_COMPILER_SINCE(MSVC,14, 0, 0)
20663#undef RBIMPL_HAS_DECLSPEC_ATTRIBUTE_nothrow
20664#define RBIMPL_ATTR_CONST() __attribute__((__const__))
20665#define RBIMPL_ATTR_CONST_UNLESS_DEBUG() RBIMPL_ATTR_CONST()
20666#define RBIMPL_ATTR_DEPRECATED_H
20667#define RBIMPL_HAS_EXTENSION_H
20668#define RBIMPL_HAS_EXTENSION(_) __has_extension(_)
20669#define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg))
20670#define RBIMPL_ATTR_DEPRECATED_EXT(msg)
20671#define RBIMPL_ATTR_ERROR_H
20672#define RBIMPL_ATTR_ERROR(msg) __attribute__((__error__ msg))
20673#define RBIMPL_ATTR_FORCEINLINE_H
20674#define RBIMPL_ATTR_FORCEINLINE() __attribute__((__always_inline__)) inline
20675#define RBIMPL_ATTR_FORMAT_H
20676#define RBIMPL_ATTR_FORMAT(x,y,z) __attribute__((__format__(x, y, z)))
20677#define RBIMPL_PRINTF_FORMAT __printf__
20678#define RBIMPL_ATTR_MAYBE_UNUSED_H
20679#define RBIMPL_ATTR_MAYBE_UNUSED() [[maybe_unused]]
20680#define RBIMPL_ATTR_NOINLINE_H
20681#define RBIMPL_ATTR_NOINLINE() __attribute__((__noinline__))
20682#define RBIMPL_ATTR_NONNULL_H
20683#define RBIMPL_ATTR_NONNULL(list) __attribute__((__nonnull__ list))
20684#define RBIMPL_NONNULL_ARG(arg) RBIMPL_ASSERT_NOTHING
20685#define RBIMPL_ATTR_NORETURN_H
20686#define RBIMPL_ATTR_NORETURN() __attribute__((__noreturn__))
20687#define RBIMPL_ATTR_PURE_H
20688#define RUBY_ASSERT_H
20689#define RBIMPL_RUBY_DEBUG 0
20690#define RBIMPL_NDEBUG 0
20691#undef RUBY_DEBUG
20692#undef RUBY_NDEBUG
20693#undef NDEBUG
20694#define RUBY_DEBUG 0
20695#define RUBY_NDEBUG 1
20696#define NDEBUG
20697#undef RBIMPL_NDEBUG
20698#undef RBIMPL_RUBY_DEBUG
20699#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)
20700#pragma GCC visibility push(default)
20701#pragma GCC visibility pop
20702#define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
20703#define RUBY_ASSERT_FAIL(mesg) rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
20704#define RUBY_ASSERT_MESG(expr,mesg) (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
20705#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
20706#define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
20707#define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
20708#define RUBY_ASSERT_MESG_WHEN(cond,expr,mesg) ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
20709#define RUBY_ASSERT_WHEN(cond,expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
20710#define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
20711#define RBIMPL_ATTR_PURE() __attribute__((__pure__))
20712#define RBIMPL_ATTR_PURE_UNLESS_DEBUG() RBIMPL_ATTR_PURE()
20713#define RBIMPL_ATTR_WARNING_H
20714#define RBIMPL_ATTR_WARNING(msg) __attribute__((__warning__ msg))
20715#undef CONSTFUNC
20716#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x
20717#undef PUREFUNC
20718#define PUREFUNC(x) RBIMPL_ATTR_PURE() x
20719#undef DEPRECATED
20720#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x
20721#undef DEPRECATED_BY
20722#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " #n)) x
20723#undef DEPRECATED_TYPE
20724#define DEPRECATED_TYPE(mesg,decl) _Pragma("message \"DEPRECATED_TYPE is deprecated\""); decl RBIMPL_ATTR_DEPRECATED(mseg)
20725#undef RUBY_CXX_DEPRECATED
20726#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))
20727#undef NOINLINE
20728#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x
20729#undef ERRORFUNC
20730#define ERRORFUNC(mesg,x) RBIMPL_ATTR_ERROR(mesg) x
20731#define HAVE_ATTRIBUTE_ERRORFUNC 1
20732#undef WARNINGFUNC
20733#define WARNINGFUNC(mesg,x) RBIMPL_ATTR_WARNING(mesg) x
20734#define HAVE_ATTRIBUTE_WARNINGFUNC 1
20735#undef COLDFUNC
20736#define PRINTF_ARGS(decl,string_index,first_to_check) RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) decl
20737#undef RUBY_ATTR_ALLOC_SIZE
20738#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE
20739#undef RUBY_ATTR_MALLOC
20740#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()
20741#undef RUBY_ATTR_RETURNS_NONNULL
20742#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()
20743#define RUBY_ALIAS_FUNCTION(prot,name,args) RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
20744#undef RUBY_FUNC_NONNULL
20745#define RUBY_FUNC_NONNULL(n,x) RBIMPL_ATTR_NONNULL(n) x
20746#undef NORETURN
20747#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
20748#define NORETURN_STYLE_NEW
20749#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
20750#undef RB_UNUSED_VAR
20751#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()
20752#define RUBY_BACKWARD2_BOOL_H
20753#define RBIMPL_STDBOOL_H
20754#define _STDBOOL_H
20755#define bool _Bool
20756#define true 1
20757#define false 0
20758#define __bool_true_false_are_defined 1
20759#define FALSE false
20760#define TRUE true
20761#define RUBY_BACKWARD2_LONG_LONG_H
20762#define HAVE_TRUE_LONG_LONG 1
20763#define LONG_LONG long long
20764#define RUBY_BACKWARD2_STDALIGN_H
20765#define RBIMPL_STDALIGN_H
20766#define RBIMPL_ALIGNAS(_) __attribute__((__aligned__(_)))
20767#define RBIMPL_ALIGNOF(T) RB_GNUC_EXTENSION(_Alignof(T))
20768#undef RUBY_ALIGNAS
20769#undef RUBY_ALIGNOF
20770#define RUBY_ALIGNAS RBIMPL_ALIGNAS
20771#define RUBY_ALIGNOF RBIMPL_ALIGNOF
20772#define RUBY_BACKWARD2_STDARG_H
20773#undef _
20774#define _(args) args
20775#undef __
20776#define __(args) args
20777#define ANYARGS
20778#define RBIMPL_DOSISH_H
20779#undef _WIN32
20780#define PATH_SEP ":"
20781#define PATH_SEP_CHAR PATH_SEP[0]
20782#define PATH_ENV "PATH"
20783#define CASEFOLD_FILESYSTEM 0
20784#define RUBY_MISSING_H 1
20785#define _MATH_H_
20786#define _M_LN2 0.693147180559945309417
20787#define HUGE_VAL (__builtin_huge_val())
20788#define HUGE_VALF (__builtin_huge_valf())
20789#define HUGE_VALL (__builtin_huge_vall())
20790#define INFINITY (__builtin_inff())
20791#define NAN (__builtin_nanf(""))
20792#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
20793#define __TMP_FLT_EVAL_METHOD
20794#undef FLT_EVAL_METHOD
20795#define FP_NAN 0
20796#define FP_INFINITE 1
20797#define FP_ZERO 2
20798#define FP_SUBNORMAL 3
20799#define FP_NORMAL 4
20800#define FP_ILOGB0 (-__INT_MAX__)
20801#define FP_ILOGBNAN __INT_MAX__
20802#define MATH_ERRNO 1
20803#define MATH_ERREXCEPT 2
20804#define _MATH_ERRHANDLING_ERRNO MATH_ERRNO
20805#define _MATH_ERRHANDLING_ERREXCEPT MATH_ERREXCEPT
20806#define math_errhandling (_MATH_ERRHANDLING_ERRNO | _MATH_ERRHANDLING_ERREXCEPT)
20807#define fpclassify(__x) (__builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x))
20808#define isfinite(__x) (__builtin_isfinite (__x))
20809#define isinf(__x) (__builtin_isinf_sign (__x))
20810#define isnan(__x) (__builtin_isnan (__x))
20811#define isnormal(__x) (__builtin_isnormal (__x))
20812#define signbit(__x) ((sizeof(__x) == sizeof(float)) ? __builtin_signbitf(__x) : (sizeof(__x) == sizeof(double)) ? __builtin_signbit (__x) : __builtin_signbitl(__x))
20813#define isgreater(__x,__y) (__builtin_isgreater (__x, __y))
20814#define isgreaterequal(__x,__y) (__builtin_isgreaterequal (__x, __y))
20815#define isless(__x,__y) (__builtin_isless (__x, __y))
20816#define islessequal(__x,__y) (__builtin_islessequal (__x, __y))
20817#define islessgreater(__x,__y) (__builtin_islessgreater (__x, __y))
20818#define isunordered(__x,__y) (__builtin_isunordered (__x, __y))
20819#define log2(x) (log (x) / _M_LN2)
20820#define signgam (*__signgam())
20821#define __signgam_r(ptr) _REENT_SIGNGAM(ptr)
20822#define MAXFLOAT 3.40282347e+38F
20823#define M_E 2.7182818284590452354
20824#define M_LOG2E 1.4426950408889634074
20825#define M_LOG10E 0.43429448190325182765
20826#define M_LN2 _M_LN2
20827#define M_LN10 2.30258509299404568402
20828#define M_PI 3.14159265358979323846
20829#define M_PI_2 1.57079632679489661923
20830#define M_PI_4 0.78539816339744830962
20831#define M_1_PI 0.31830988618379067154
20832#define M_2_PI 0.63661977236758134308
20833#define M_2_SQRTPI 1.12837916709551257390
20834#define M_SQRT2 1.41421356237309504880
20835#define M_SQRT1_2 0.70710678118654752440
20836#define M_TWOPI (M_PI * 2.0)
20837#define M_3PI_4 2.3561944901923448370E0
20838#define M_SQRTPI 1.77245385090551602792981
20839#define M_LN2LO 1.9082149292705877000E-10
20840#define M_LN2HI 6.9314718036912381649E-1
20841#define M_SQRT3 1.73205080756887719000
20842#define M_IVLN10 0.43429448190325182765
20843#define M_LOG2_E _M_LN2
20844#define M_INVLN2 1.4426950408889633870E0
20845#define _SYS_TIME_H_
20846#define DST_NONE 0
20847#define DST_USA 1
20848#define DST_AUST 2
20849#define DST_WET 3
20850#define DST_MET 4
20851#define DST_EET 5
20852#define DST_CAN 6
20853#define bintime_clear(a) ((a)->sec = (a)->frac = 0)
20854#define bintime_isset(a) ((a)->sec || (a)->frac)
20855#define bintime_cmp(a,b,cmp) (((a)->sec == (b)->sec) ? ((a)->frac cmp (b)->frac) : ((a)->sec cmp (b)->sec))
20856#define SBT_1S ((sbintime_t)1 << 32)
20857#define SBT_1M (SBT_1S * 60)
20858#define SBT_1MS (SBT_1S / 1000)
20859#define SBT_1US (SBT_1S / 1000000)
20860#define SBT_1NS (SBT_1S / 1000000000)
20861#define SBT_MAX 0x7fffffffffffffffLL
20862#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
20863#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
20864#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))
20865#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)
20866#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)
20867#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
20868#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
20869#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))
20870#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)
20871#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)
20872#define ITIMER_REAL 0
20873#define ITIMER_VIRTUAL 1
20874#define ITIMER_PROF 2
20875#define _IEEE_FP_H_
20876#define _FLOAT_H___
20877#undef FLT_RADIX
20878#define FLT_RADIX __FLT_RADIX__
20879#undef FLT_MANT_DIG
20880#undef DBL_MANT_DIG
20881#undef LDBL_MANT_DIG
20882#define FLT_MANT_DIG __FLT_MANT_DIG__
20883#define DBL_MANT_DIG __DBL_MANT_DIG__
20884#define LDBL_MANT_DIG __LDBL_MANT_DIG__
20885#undef FLT_DIG
20886#undef DBL_DIG
20887#undef LDBL_DIG
20888#define FLT_DIG __FLT_DIG__
20889#define DBL_DIG __DBL_DIG__
20890#define LDBL_DIG __LDBL_DIG__
20891#undef FLT_MIN_EXP
20892#undef DBL_MIN_EXP
20893#undef LDBL_MIN_EXP
20894#define FLT_MIN_EXP __FLT_MIN_EXP__
20895#define DBL_MIN_EXP __DBL_MIN_EXP__
20896#define LDBL_MIN_EXP __LDBL_MIN_EXP__
20897#undef FLT_MIN_10_EXP
20898#undef DBL_MIN_10_EXP
20899#undef LDBL_MIN_10_EXP
20900#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
20901#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
20902#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
20903#undef FLT_MAX_EXP
20904#undef DBL_MAX_EXP
20905#undef LDBL_MAX_EXP
20906#define FLT_MAX_EXP __FLT_MAX_EXP__
20907#define DBL_MAX_EXP __DBL_MAX_EXP__
20908#define LDBL_MAX_EXP __LDBL_MAX_EXP__
20909#undef FLT_MAX_10_EXP
20910#undef DBL_MAX_10_EXP
20911#undef LDBL_MAX_10_EXP
20912#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
20913#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
20914#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
20915#undef FLT_MAX
20916#undef DBL_MAX
20917#undef LDBL_MAX
20918#define FLT_MAX __FLT_MAX__
20919#define DBL_MAX __DBL_MAX__
20920#define LDBL_MAX __LDBL_MAX__
20921#undef FLT_EPSILON
20922#undef DBL_EPSILON
20923#undef LDBL_EPSILON
20924#define FLT_EPSILON __FLT_EPSILON__
20925#define DBL_EPSILON __DBL_EPSILON__
20926#define LDBL_EPSILON __LDBL_EPSILON__
20927#undef FLT_MIN
20928#undef DBL_MIN
20929#undef LDBL_MIN
20930#define FLT_MIN __FLT_MIN__
20931#define DBL_MIN __DBL_MIN__
20932#define LDBL_MIN __LDBL_MIN__
20933#undef FLT_ROUNDS
20934#define FLT_ROUNDS 1
20935#undef FLT_EVAL_METHOD
20936#define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__
20937#undef DECIMAL_DIG
20938#define DECIMAL_DIG __DECIMAL_DIG__
20939#undef FLT_DECIMAL_DIG
20940#undef DBL_DECIMAL_DIG
20941#undef LDBL_DECIMAL_DIG
20942#define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
20943#define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
20944#define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
20945#undef FLT_HAS_SUBNORM
20946#undef DBL_HAS_SUBNORM
20947#undef LDBL_HAS_SUBNORM
20948#define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
20949#define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
20950#define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
20951#undef FLT_TRUE_MIN
20952#undef DBL_TRUE_MIN
20953#undef LDBL_TRUE_MIN
20954#define FLT_TRUE_MIN __FLT_DENORM_MIN__
20955#define DBL_TRUE_MIN __DBL_DENORM_MIN__
20956#define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
20957#define CR_DECIMAL_DIG __UINTMAX_MAX__
20958#undef FLT32_MANT_DIG
20959#define FLT32_MANT_DIG __FLT32_MANT_DIG__
20960#undef FLT32_DIG
20961#define FLT32_DIG __FLT32_DIG__
20962#undef FLT32_MIN_EXP
20963#define FLT32_MIN_EXP __FLT32_MIN_EXP__
20964#undef FLT32_MIN_10_EXP
20965#define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__
20966#undef FLT32_MAX_EXP
20967#define FLT32_MAX_EXP __FLT32_MAX_EXP__
20968#undef FLT32_MAX_10_EXP
20969#define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__
20970#undef FLT32_MAX
20971#define FLT32_MAX __FLT32_MAX__
20972#undef FLT32_EPSILON
20973#define FLT32_EPSILON __FLT32_EPSILON__
20974#undef FLT32_MIN
20975#define FLT32_MIN __FLT32_MIN__
20976#undef FLT32_DECIMAL_DIG
20977#define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__
20978#undef FLT32_TRUE_MIN
20979#define FLT32_TRUE_MIN __FLT32_DENORM_MIN__
20980#undef FLT64_MANT_DIG
20981#define FLT64_MANT_DIG __FLT64_MANT_DIG__
20982#undef FLT64_DIG
20983#define FLT64_DIG __FLT64_DIG__
20984#undef FLT64_MIN_EXP
20985#define FLT64_MIN_EXP __FLT64_MIN_EXP__
20986#undef FLT64_MIN_10_EXP
20987#define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__
20988#undef FLT64_MAX_EXP
20989#define FLT64_MAX_EXP __FLT64_MAX_EXP__
20990#undef FLT64_MAX_10_EXP
20991#define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__
20992#undef FLT64_MAX
20993#define FLT64_MAX __FLT64_MAX__
20994#undef FLT64_EPSILON
20995#define FLT64_EPSILON __FLT64_EPSILON__
20996#undef FLT64_MIN
20997#define FLT64_MIN __FLT64_MIN__
20998#undef FLT64_DECIMAL_DIG
20999#define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__
21000#undef FLT64_TRUE_MIN
21001#define FLT64_TRUE_MIN __FLT64_DENORM_MIN__
21002#undef FLT128_MANT_DIG
21003#define FLT128_MANT_DIG __FLT128_MANT_DIG__
21004#undef FLT128_DIG
21005#define FLT128_DIG __FLT128_DIG__
21006#undef FLT128_MIN_EXP
21007#define FLT128_MIN_EXP __FLT128_MIN_EXP__
21008#undef FLT128_MIN_10_EXP
21009#define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__
21010#undef FLT128_MAX_EXP
21011#define FLT128_MAX_EXP __FLT128_MAX_EXP__
21012#undef FLT128_MAX_10_EXP
21013#define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__
21014#undef FLT128_MAX
21015#define FLT128_MAX __FLT128_MAX__
21016#undef FLT128_EPSILON
21017#define FLT128_EPSILON __FLT128_EPSILON__
21018#undef FLT128_MIN
21019#define FLT128_MIN __FLT128_MIN__
21020#undef FLT128_DECIMAL_DIG
21021#define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__
21022#undef FLT128_TRUE_MIN
21023#define FLT128_TRUE_MIN __FLT128_DENORM_MIN__
21024#undef FLT32X_MANT_DIG
21025#define FLT32X_MANT_DIG __FLT32X_MANT_DIG__
21026#undef FLT32X_DIG
21027#define FLT32X_DIG __FLT32X_DIG__
21028#undef FLT32X_MIN_EXP
21029#define FLT32X_MIN_EXP __FLT32X_MIN_EXP__
21030#undef FLT32X_MIN_10_EXP
21031#define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__
21032#undef FLT32X_MAX_EXP
21033#define FLT32X_MAX_EXP __FLT32X_MAX_EXP__
21034#undef FLT32X_MAX_10_EXP
21035#define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__
21036#undef FLT32X_MAX
21037#define FLT32X_MAX __FLT32X_MAX__
21038#undef FLT32X_EPSILON
21039#define FLT32X_EPSILON __FLT32X_EPSILON__
21040#undef FLT32X_MIN
21041#define FLT32X_MIN __FLT32X_MIN__
21042#undef FLT32X_DECIMAL_DIG
21043#define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__
21044#undef FLT32X_TRUE_MIN
21045#define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__
21046#undef FLT64X_MANT_DIG
21047#define FLT64X_MANT_DIG __FLT64X_MANT_DIG__
21048#undef FLT64X_DIG
21049#define FLT64X_DIG __FLT64X_DIG__
21050#undef FLT64X_MIN_EXP
21051#define FLT64X_MIN_EXP __FLT64X_MIN_EXP__
21052#undef FLT64X_MIN_10_EXP
21053#define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__
21054#undef FLT64X_MAX_EXP
21055#define FLT64X_MAX_EXP __FLT64X_MAX_EXP__
21056#undef FLT64X_MAX_10_EXP
21057#define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__
21058#undef FLT64X_MAX
21059#define FLT64X_MAX __FLT64X_MAX__
21060#undef FLT64X_EPSILON
21061#define FLT64X_EPSILON __FLT64X_EPSILON__
21062#undef FLT64X_MIN
21063#define FLT64X_MIN __FLT64X_MIN__
21064#undef FLT64X_DECIMAL_DIG
21065#define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__
21066#undef FLT64X_TRUE_MIN
21067#define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__
21068#undef DEC32_MANT_DIG
21069#undef DEC64_MANT_DIG
21070#undef DEC128_MANT_DIG
21071#define DEC32_MANT_DIG __DEC32_MANT_DIG__
21072#define DEC64_MANT_DIG __DEC64_MANT_DIG__
21073#define DEC128_MANT_DIG __DEC128_MANT_DIG__
21074#undef DEC32_MIN_EXP
21075#undef DEC64_MIN_EXP
21076#undef DEC128_MIN_EXP
21077#define DEC32_MIN_EXP __DEC32_MIN_EXP__
21078#define DEC64_MIN_EXP __DEC64_MIN_EXP__
21079#define DEC128_MIN_EXP __DEC128_MIN_EXP__
21080#undef DEC32_MAX_EXP
21081#undef DEC64_MAX_EXP
21082#undef DEC128_MAX_EXP
21083#define DEC32_MAX_EXP __DEC32_MAX_EXP__
21084#define DEC64_MAX_EXP __DEC64_MAX_EXP__
21085#define DEC128_MAX_EXP __DEC128_MAX_EXP__
21086#undef DEC32_MAX
21087#undef DEC64_MAX
21088#undef DEC128_MAX
21089#define DEC32_MAX __DEC32_MAX__
21090#define DEC64_MAX __DEC64_MAX__
21091#define DEC128_MAX __DEC128_MAX__
21092#undef DEC32_EPSILON
21093#undef DEC64_EPSILON
21094#undef DEC128_EPSILON
21095#define DEC32_EPSILON __DEC32_EPSILON__
21096#define DEC64_EPSILON __DEC64_EPSILON__
21097#define DEC128_EPSILON __DEC128_EPSILON__
21098#undef DEC32_MIN
21099#undef DEC64_MIN
21100#undef DEC128_MIN
21101#define DEC32_MIN __DEC32_MIN__
21102#define DEC64_MIN __DEC64_MIN__
21103#define DEC128_MIN __DEC128_MIN__
21104#undef DEC_EVAL_METHOD
21105#define DEC_EVAL_METHOD __DEC_EVAL_METHOD__
21106#undef DEC32_TRUE_MIN
21107#undef DEC64_TRUE_MIN
21108#undef DEC128_TRUE_MIN
21109#define DEC32_TRUE_MIN __DEC32_SUBNORMAL_MIN__
21110#define DEC64_TRUE_MIN __DEC64_SUBNORMAL_MIN__
21111#define DEC128_TRUE_MIN __DEC128_SUBNORMAL_MIN__
21112#define EXT_EXPBITS 15
21113#define EXT_FRACHBITS 32
21114#define EXT_FRACLBITS 32
21115#define __ieee_ext_field_type unsigned int
21116#define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1)
21117#define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1)
21118#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS)
21119#define FP_RN 0
21120#define FP_RM 1
21121#define FP_RP 2
21122#define FP_RZ 3
21123#define FP_X_INV 0x10
21124#define FP_X_DX 0x80
21125#define FP_X_OFL 0x04
21126#define FP_X_UFL 0x02
21127#define FP_X_IMP 0x01
21128#define FP_RDI_TOZ 0
21129#define FP_RDI_RD 1
21130#define __IEEE_DBL_EXPBIAS 1023
21131#define __IEEE_FLT_EXPBIAS 127
21132#define __IEEE_DBL_EXPLEN 11
21133#define __IEEE_FLT_EXPLEN 8
21134#define __IEEE_DBL_FRACLEN (64 - (__IEEE_DBL_EXPLEN + 1))
21135#define __IEEE_FLT_FRACLEN (32 - (__IEEE_FLT_EXPLEN + 1))
21136#define __IEEE_DBL_MAXPOWTWO ((double)(1L << 32 - 2) * (1L << (32-11) - 32 + 1))
21137#define __IEEE_FLT_MAXPOWTWO ((float)(1L << (32-8) - 1))
21138#define __IEEE_DBL_NAN_EXP 0x7ff
21139#define __IEEE_FLT_NAN_EXP 0xff
21140#pragma GCC visibility push(default)
21141#define HAVE_FINITE 1
21142#define finite(x) isfinite(x)
21143#pragma GCC visibility pop
21144#define RUBY
21145#define RB_GNUC_EXTENSION __extension__
21146#define RB_GNUC_EXTENSION_BLOCK(x) __extension__ ({ x; })
21147#define RUBY_MBCHAR_MAXSIZE INT_MAX
21148#define FLUSH_REGISTER_WINDOWS ((void)0)
21149#define RUBY_ABI_H
21150#define RBIMPL_ANYARGS_H
21151#define RBIMPL_ATTR_WEAKREF_H
21152#define RBIMPL_ATTR_WEAKREF(sym) __attribute__((__weakref__(#sym)))
21153#define RBIMPL_INTERN_CLASS_H
21154#define RBIMPL_VALUE_H
21155#define RBIMPL_STATIC_ASSERT_H
21156#undef assert
21157#define assert(__e) ((void)0)
21158#define static_assert _Static_assert
21159#define RBIMPL_STATIC_ASSERT0 __extension__ _Static_assert
21160#define RBIMPL_STATIC_ASSERT(name,expr) RBIMPL_STATIC_ASSERT0(expr, #name ": " #expr)
21161#define RUBY_BACKWARD2_LIMITS_H
21162#define _GCC_LIMITS_H_
21163#define _GCC_NEXT_LIMITS_H
21164#define _FEATURES_H
21165#define _CYGWIN_LIMITS_H__
21166#define __AIO_LISTIO_MAX 32
21167#define __AIO_MAX 8
21168#define __AIO_PRIO_DELTA_MAX 0
21169#define __ARG_MAX 32000
21170#define __ATEXIT_MAX 32
21171#define __CHILD_MAX 256
21172#define __DELAYTIMER_MAX __INT_MAX__
21173#define __HOST_NAME_MAX 255
21174#define __IOV_MAX 1024
21175#define __LOGIN_NAME_MAX 256
21176#define __MQ_OPEN_MAX 256
21177#define __MQ_PRIO_MAX INT_MAX
21178#define __OPEN_MAX 3200
21179#define __PAGESIZE 65536
21180#define __PTHREAD_DESTRUCTOR_ITERATIONS 4
21181#define __PTHREAD_KEYS_MAX 1024
21182#define __PTHREAD_STACK_MIN 65536
21183#define __RTSIG_MAX 33
21184#define __SEM_VALUE_MAX 1147483648
21185#define __SIGQUEUE_MAX 32
21186#define __STREAM_MAX 20
21187#define __SYMLOOP_MAX 10
21188#define __TIMER_MAX 32
21189#define __TTY_NAME_MAX 32
21190#define __FILESIZEBITS 64
21191#define __LINK_MAX 1024
21192#define __MAX_CANON 255
21193#define __MAX_INPUT 255
21194#define __NAME_MAX 255
21195#define __PATH_MAX 4096
21196#define __PIPE_BUF 4096
21197#define _LIMITS_H___
21198#define _MACH_MACHLIMITS_H_
21199#undef CHAR_BIT
21200#define CHAR_BIT __CHAR_BIT__
21201#undef LONG_BIT
21202#define LONG_BIT (__SIZEOF_LONG__ * __CHAR_BIT__)
21203#undef WORD_BIT
21204#define WORD_BIT (__SIZEOF_INT__ * __CHAR_BIT__)
21205#define MB_LEN_MAX 8
21206#undef SCHAR_MIN
21207#define SCHAR_MIN (-128)
21208#undef SCHAR_MAX
21209#define SCHAR_MAX 127
21210#undef UCHAR_MAX
21211#define UCHAR_MAX 255
21212#undef CHAR_MIN
21213#define CHAR_MIN (-128)
21214#undef CHAR_MAX
21215#define CHAR_MAX 127
21216#undef SHRT_MIN
21217#define SHRT_MIN (-32768)
21218#undef SHRT_MAX
21219#define SHRT_MAX 32767
21220#undef USHRT_MAX
21221#define USHRT_MAX 65535
21222#undef INT_MIN
21223#define INT_MIN (-INT_MAX-1)
21224#undef INT_MAX
21225#define INT_MAX __INT_MAX__
21226#undef UINT_MAX
21227#define UINT_MAX (INT_MAX * 2U + 1)
21228#undef LONG_MIN
21229#define LONG_MIN (-LONG_MAX-1L)
21230#undef LONG_MAX
21231#define LONG_MAX __LONG_MAX__
21232#undef ULONG_MAX
21233#define ULONG_MAX (LONG_MAX * 2UL + 1)
21234#undef LONG_LONG_MIN
21235#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
21236#undef LONG_LONG_MAX
21237#define LONG_LONG_MAX __LONG_LONG_MAX__
21238#undef ULONG_LONG_MAX
21239#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
21240#undef LLONG_MIN
21241#define LLONG_MIN (-LLONG_MAX-1)
21242#undef LLONG_MAX
21243#define LLONG_MAX __LONG_LONG_MAX__
21244#undef ULLONG_MAX
21245#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
21246#undef SSIZE_MAX
21247#define SSIZE_MAX (__LONG_MAX__)
21248#define AIO_LISTIO_MAX __AIO_LISTIO_MAX
21249#define AIO_MAX __AIO_MAX
21250#define AIO_PRIO_DELTA_MAX __AIO_PRIO_DELTA_MAX
21251#undef ARG_MAX
21252#define ARG_MAX __ARG_MAX
21253#undef ATEXIT_MAX
21254#define ATEXIT_MAX __ATEXIT_MAX
21255#undef CHILD_MAX
21256#define CHILD_MAX __CHILD_MAX
21257#undef DELAYTIMER_MAX
21258#define DELAYTIMER_MAX __DELAYTIMER_MAX
21259#undef HOST_NAME_MAX
21260#define HOST_NAME_MAX __HOST_NAME_MAX
21261#undef IOV_MAX
21262#define IOV_MAX __IOV_MAX
21263#undef LOGIN_NAME_MAX
21264#define LOGIN_NAME_MAX __LOGIN_NAME_MAX
21265#undef MQ_OPEN_MAX
21266#define MQ_OPEN_MAX __MQ_OPEN_MAX
21267#undef MQ_PRIO_MAX
21268#define MQ_PRIO_MAX __MQ_PRIO_MAX
21269#undef OPEN_MAX
21270#define OPEN_MAX __OPEN_MAX
21271#undef PAGESIZE
21272#define PAGESIZE __PAGESIZE
21273#undef PAGE_SIZE
21274#define PAGE_SIZE PAGESIZE
21275#undef PTHREAD_DESTRUCTOR_ITERATIONS
21276#define PTHREAD_DESTRUCTOR_ITERATIONS __PTHREAD_DESTRUCTOR_ITERATIONS
21277#undef PTHREAD_KEYS_MAX
21278#define PTHREAD_KEYS_MAX __PTHREAD_KEYS_MAX
21279#undef PTHREAD_STACK_MIN
21280#define PTHREAD_STACK_MIN __PTHREAD_STACK_MIN
21281#undef PTHREAD_THREADS_MAX
21282#undef RTSIG_MAX
21283#define RTSIG_MAX __RTSIG_MAX
21284#undef SEM_NSEMS_MAX
21285#undef SEM_VALUE_MAX
21286#define SEM_VALUE_MAX __SEM_VALUE_MAX
21287#undef SIGQUEUE_MAX
21288#define SIGQUEUE_MAX __SIGQUEUE_MAX
21289#undef SS_REPL_MAX
21290#undef STREAM_MAX
21291#define STREAM_MAX __STREAM_MAX
21292#undef SYMLOOP_MAX
21293#define SYMLOOP_MAX __SYMLOOP_MAX
21294#undef TIMER_MAX
21295#define TIMER_MAX __TIMER_MAX
21296#undef TRACE_EVENT_NAME_MAX
21297#undef TRACE_NAME_MAX
21298#undef TRACE_SYS_MAX
21299#undef TRACE_USER_EVENT_MAX
21300#undef TTY_NAME_MAX
21301#define TTY_NAME_MAX __TTY_NAME_MAX
21302#undef TZNAME_MAX
21303#undef FILESIZEBITS
21304#define FILESIZEBITS __FILESIZEBITS
21305#undef LINK_MAX
21306#define LINK_MAX __LINK_MAX
21307#undef MAX_CANON
21308#define MAX_CANON __MAX_CANON
21309#undef MAX_INPUT
21310#define MAX_INPUT __MAX_INPUT
21311#undef NAME_MAX
21312#define NAME_MAX __NAME_MAX
21313#undef PATH_MAX
21314#define PATH_MAX __PATH_MAX
21315#undef PIPE_BUF
21316#define PIPE_BUF __PIPE_BUF
21317#undef POSIX_ALLOC_SIZE_MIN
21318#undef POSIX_REC_INCR_XFER_SIZE
21319#undef POSIX_REC_MAX_XFER_SIZE
21320#undef POSIX_REC_MIN_XFER_SIZE
21321#undef POSIX_REC_XFER_ALIGN
21322#undef SYMLINK_MAX
21323#define SYMLINK_MAX (PATH_MAX - 1)
21324#undef BC_BASE_MAX
21325#define BC_BASE_MAX 99
21326#undef BC_DIM_MAX
21327#define BC_DIM_MAX 2048
21328#undef BC_SCALE_MAX
21329#define BC_SCALE_MAX 99
21330#undef BC_STRING_MAX
21331#define BC_STRING_MAX 1000
21332#undef CHARCLASS_NAME_MAX
21333#undef COLL_WEIGHTS_MAX
21334#undef EXPR_NEST_MAX
21335#define EXPR_NEST_MAX 32
21336#undef LINE_MAX
21337#define LINE_MAX 2048
21338#undef NGROUPS_MAX
21339#define NGROUPS_MAX 1024
21340#undef RE_DUP_MAX
21341#define RE_DUP_MAX 255
21342#define _POSIX_CLOCKRES_MIN 20000000
21343#define _POSIX_AIO_LISTIO_MAX 2
21344#define _POSIX_AIO_MAX 1
21345#define _POSIX_ARG_MAX 4096
21346#define _POSIX_CHILD_MAX 25
21347#define _POSIX_DELAYTIMER_MAX 32
21348#define _POSIX_HOST_NAME_MAX 255
21349#define _POSIX_LINK_MAX 8
21350#define _POSIX_LOGIN_NAME_MAX 9
21351#define _POSIX_MAX_CANON 255
21352#define _POSIX_MAX_INPUT 255
21353#define _POSIX_MQ_OPEN_MAX 8
21354#define _POSIX_MQ_PRIO_MAX 32
21355#define _POSIX_NAME_MAX 14
21356#define _POSIX_NGROUPS_MAX 8
21357#define _POSIX_OPEN_MAX 20
21358#define _POSIX_PATH_MAX 256
21359#define _POSIX_PIPE_BUF 512
21360#define _POSIX_RE_DUP_MAX 255
21361#define _POSIX_RTSIG_MAX 8
21362#define _POSIX_SEM_NSEMS_MAX 256
21363#define _POSIX_SEM_VALUE_MAX 32767
21364#define _POSIX_SIGQUEUE_MAX 32
21365#define _POSIX_SSIZE_MAX 32767
21366#define _POSIX_STREAM_MAX 8
21367#define _POSIX_SS_REPL_MAX 4
21368#define _POSIX_SYMLINK_MAX 255
21369#define _POSIX_SYMLOOP_MAX 8
21370#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
21371#define _POSIX_THREAD_KEYS_MAX 128
21372#define _POSIX_THREAD_THREADS_MAX 64
21373#define _POSIX_TIMER_MAX 32
21374#define _POSIX_TRACE_EVENT_NAME_MAX 30
21375#define _POSIX_TRACE_NAME_MAX 8
21376#define _POSIX_TRACE_SYS_MAX 8
21377#define _POSIX_TRACE_USER_EVENT_MAX 32
21378#define _POSIX_TTY_NAME_MAX 9
21379#define _POSIX_TZNAME_MAX 6
21380#define _POSIX2_BC_BASE_MAX 99
21381#define _POSIX2_BC_DIM_MAX 2048
21382#define _POSIX2_BC_SCALE_MAX 99
21383#define _POSIX2_BC_STRING_MAX 1000
21384#define _POSIX2_COLL_WEIGHTS_MAX 2
21385#define _POSIX2_EXPR_NEST_MAX 32
21386#define _POSIX2_LINE_MAX 2048
21387#define _POSIX2_RE_DUP_MAX 255
21388#define _XOPEN_IOV_MAX 16
21389#define _XOPEN_NAME_MAX 255
21390#define _XOPEN_PATH_MAX 1024
21391#define NL_ARGMAX 9
21392#define NL_LANGMAX 14
21393#define NL_MSGMAX 32767
21394#define NL_SETMAX 255
21395#define NL_TEXTMAX _POSIX2_LINE_MAX
21396#undef NZERO
21397#define NZERO 20
21398#undef _GCC_NEXT_LIMITS_H
21399#define SIGNED_VALUE long
21400#define SIZEOF_VALUE SIZEOF_LONG
21401#define PRI_VALUE_PREFIX "l"
21402#define RBIMPL_VALUE_NULL 0UL
21403#define RBIMPL_VALUE_ONE 1UL
21404#define RBIMPL_VALUE_FULL ULONG_MAX
21405#pragma GCC visibility push(default)
21406#pragma GCC visibility pop
21407#define RBIMPL_INTERN_VM_H
21408#pragma GCC visibility push(default)
21409#define HAVE_RB_DEFINE_ALLOC_FUNC 1
21410#pragma GCC visibility pop
21411#define RBIMPL_METHOD_H
21412#pragma GCC visibility push(default)
21413#pragma GCC visibility pop
21414#define RUBY_METHOD_FUNC(func) RBIMPL_CAST((VALUE (*)(ANYARGS))(func))
21415#define RBIMPL_ARITHMETIC_H
21416#define RBIMPL_ARITHMETIC_CHAR_H
21417#define RBIMPL_ARITHMETIC_INT_H
21418#define RBIMPL_ARITHMETIC_FIXNUM_H
21419#define FIXABLE RB_FIXABLE
21420#define FIXNUM_MAX RUBY_FIXNUM_MAX
21421#define FIXNUM_MIN RUBY_FIXNUM_MIN
21422#define NEGFIXABLE RB_NEGFIXABLE
21423#define POSFIXABLE RB_POSFIXABLE
21424#define RB_POSFIXABLE(_) ((_) < RUBY_FIXNUM_MAX + 1)
21425#define RB_NEGFIXABLE(_) ((_) >= RUBY_FIXNUM_MIN)
21426#define RB_FIXABLE(_) (RB_POSFIXABLE(_) && RB_NEGFIXABLE(_))
21427#define RUBY_FIXNUM_MAX (LONG_MAX / 2)
21428#define RUBY_FIXNUM_MIN (LONG_MIN / 2)
21429#define RBIMPL_ARITHMETIC_INTPTR_T_H
21430#define rb_int_new rb_int2inum
21431#define rb_uint_new rb_uint2inum
21432#pragma GCC visibility push(default)
21433#pragma GCC visibility pop
21434#define RBIMPL_ARITHMETIC_LONG_H
21435#define RBIMPL_ATTR_ARTIFICIAL_H
21436#define RBIMPL_ATTR_ARTIFICIAL() __attribute__((__artificial__))
21437#define RBIMPL_ATTR_CONSTEXPR_H
21438#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX11 0
21439#define RBIMPL_HAS_ATTR_CONSTEXPR_CXX14 0
21440#define RBIMPL_ATTR_CONSTEXPR(_)
21441#define RBIMPL_ATTR_CONSTEXPR_UNLESS_DEBUG(_) RBIMPL_ATTR_CONSTEXPR(_)
21442#define RBIMPL_SPECIAL_CONSTS_H
21443#define RBIMPL_ATTR_ENUM_EXTENSIBILITY_H
21444#define RBIMPL_ATTR_ENUM_EXTENSIBILITY(_)
21445#define USE_FLONUM 1
21446#define RTEST RB_TEST
21447#define FIXNUM_P RB_FIXNUM_P
21448#define IMMEDIATE_P RB_IMMEDIATE_P
21449#define NIL_P RB_NIL_P
21450#define SPECIAL_CONST_P RB_SPECIAL_CONST_P
21451#define STATIC_SYM_P RB_STATIC_SYM_P
21452#define Qfalse RUBY_Qfalse
21453#define Qnil RUBY_Qnil
21454#define Qtrue RUBY_Qtrue
21455#define Qundef RUBY_Qundef
21456#define FIXNUM_FLAG RUBY_FIXNUM_FLAG
21457#define FLONUM_FLAG RUBY_FLONUM_FLAG
21458#define FLONUM_MASK RUBY_FLONUM_MASK
21459#define FLONUM_P RB_FLONUM_P
21460#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK
21461#define SYMBOL_FLAG RUBY_SYMBOL_FLAG
21462#define RB_FIXNUM_P RB_FIXNUM_P
21463#define RB_FLONUM_P RB_FLONUM_P
21464#define RB_IMMEDIATE_P RB_IMMEDIATE_P
21465#define RB_NIL_P RB_NIL_P
21466#define RB_SPECIAL_CONST_P RB_SPECIAL_CONST_P
21467#define RB_STATIC_SYM_P RB_STATIC_SYM_P
21468#define RB_TEST RB_TEST
21469#define RB_UNDEF_P RB_UNDEF_P
21470#define RB_NIL_OR_UNDEF_P RB_NIL_OR_UNDEF_P
21471#define RUBY_Qfalse RBIMPL_CAST((VALUE)RUBY_Qfalse)
21472#define RUBY_Qtrue RBIMPL_CAST((VALUE)RUBY_Qtrue)
21473#define RUBY_Qnil RBIMPL_CAST((VALUE)RUBY_Qnil)
21474#define RUBY_Qundef RBIMPL_CAST((VALUE)RUBY_Qundef)
21475#define FIX2LONG RB_FIX2LONG
21476#define FIX2ULONG RB_FIX2ULONG
21477#define INT2FIX RB_INT2FIX
21478#define LONG2FIX RB_INT2FIX
21479#define LONG2NUM RB_LONG2NUM
21480#define NUM2LONG RB_NUM2LONG
21481#define NUM2ULONG RB_NUM2ULONG
21482#define RB_FIX2LONG rb_fix2long
21483#define RB_FIX2ULONG rb_fix2ulong
21484#define RB_LONG2FIX RB_INT2FIX
21485#define RB_LONG2NUM rb_long2num_inline
21486#define RB_NUM2LONG rb_num2long_inline
21487#define RB_NUM2ULONG rb_num2ulong_inline
21488#define RB_ULONG2NUM rb_ulong2num_inline
21489#define ULONG2NUM RB_ULONG2NUM
21490#define rb_fix_new RB_INT2FIX
21491#define rb_long2int rb_long2int_inline
21492#define RB_INT2FIX RB_INT2FIX
21493#pragma GCC visibility push(default)
21494#pragma GCC visibility pop
21495#undef INT2FIX
21496#define INT2FIX(i) __builtin_choose_expr( __builtin_constant_p(i), RBIMPL_CAST((VALUE)(i)) << 1 | RUBY_FIXNUM_FLAG, RB_INT2FIX(i))
21497#define RB_INT2NUM rb_int2num_inline
21498#define RB_NUM2INT rb_num2int_inline
21499#define RB_UINT2NUM rb_uint2num_inline
21500#define FIX2INT RB_FIX2INT
21501#define FIX2UINT RB_FIX2UINT
21502#define INT2NUM RB_INT2NUM
21503#define NUM2INT RB_NUM2INT
21504#define NUM2UINT RB_NUM2UINT
21505#define UINT2NUM RB_UINT2NUM
21506#define RB_FIX2INT RB_FIX2INT
21507#define RB_NUM2UINT RB_NUM2UINT
21508#define RB_FIX2UINT RB_FIX2UINT
21509#pragma GCC visibility push(default)
21510#pragma GCC visibility pop
21511#pragma GCC diagnostic push
21512#pragma GCC diagnostic ignored "-Wtype-limits"
21513#pragma GCC diagnostic pop
21514#define RBIMPL_RSTRING_H
21515#define RBIMPL_RBASIC_H
21516#define RBIMPL_ATTR_NOALIAS_H
21517#define RBIMPL_ATTR_NOALIAS()
21518#define RBASIC(obj) RBIMPL_CAST((struct RBasic *)(obj))
21519#define RBASIC_CLASS RBASIC_CLASS
21520#define RBIMPL_RVALUE_EMBED_LEN_MAX 3
21521#define RVALUE_EMBED_LEN_MAX RVALUE_EMBED_LEN_MAX
21522#define RBIMPL_EMBED_LEN_MAX_OF(T) RBIMPL_CAST((int)(sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]) / (sizeof(T))))
21523#pragma GCC visibility push(default)
21524#pragma GCC visibility pop
21525#define RBIMPL_FL_TYPE_H
21526#define RBIMPL_ATTR_FLAG_ENUM_H
21527#define RBIMPL_ATTR_FLAG_ENUM()
21528#define RBIMPL_VALUE_TYPE_H
21529#define RBIMPL_CONSTANT_P_H
21530#define RBIMPL_CONSTANT_P(expr) __builtin_constant_p(expr)
21531#define RBIMPL_ERROR_H
21532#define RB_IO_WAIT_READABLE RB_IO_WAIT_READABLE
21533#define RB_IO_WAIT_WRITABLE RB_IO_WAIT_WRITABLE
21534#pragma GCC visibility push(default)
21535#define ruby_verbose (*rb_ruby_verbose_ptr())
21536#define ruby_debug (*rb_ruby_debug_ptr())
21537#pragma GCC visibility pop
21538#define T_ARRAY RUBY_T_ARRAY
21539#define T_BIGNUM RUBY_T_BIGNUM
21540#define T_CLASS RUBY_T_CLASS
21541#define T_COMPLEX RUBY_T_COMPLEX
21542#define T_DATA RUBY_T_DATA
21543#define T_FALSE RUBY_T_FALSE
21544#define T_FILE RUBY_T_FILE
21545#define T_FIXNUM RUBY_T_FIXNUM
21546#define T_FLOAT RUBY_T_FLOAT
21547#define T_HASH RUBY_T_HASH
21548#define T_ICLASS RUBY_T_ICLASS
21549#define T_IMEMO RUBY_T_IMEMO
21550#define T_MASK RUBY_T_MASK
21551#define T_MATCH RUBY_T_MATCH
21552#define T_MODULE RUBY_T_MODULE
21553#define T_MOVED RUBY_T_MOVED
21554#define T_NIL RUBY_T_NIL
21555#define T_NODE RUBY_T_NODE
21556#define T_NONE RUBY_T_NONE
21557#define T_OBJECT RUBY_T_OBJECT
21558#define T_RATIONAL RUBY_T_RATIONAL
21559#define T_REGEXP RUBY_T_REGEXP
21560#define T_STRING RUBY_T_STRING
21561#define T_STRUCT RUBY_T_STRUCT
21562#define T_SYMBOL RUBY_T_SYMBOL
21563#define T_TRUE RUBY_T_TRUE
21564#define T_UNDEF RUBY_T_UNDEF
21565#define T_ZOMBIE RUBY_T_ZOMBIE
21566#define BUILTIN_TYPE RB_BUILTIN_TYPE
21567#define DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21568#define RB_INTEGER_TYPE_P rb_integer_type_p
21569#define SYMBOL_P RB_SYMBOL_P
21570#define rb_type_p RB_TYPE_P
21571#define RB_BUILTIN_TYPE RB_BUILTIN_TYPE
21572#define RB_DYNAMIC_SYM_P RB_DYNAMIC_SYM_P
21573#define RB_FLOAT_TYPE_P RB_FLOAT_TYPE_P
21574#define RB_SYMBOL_P RB_SYMBOL_P
21575#define RB_TYPE_P RB_TYPE_P
21576#define Check_Type Check_Type
21577#define RBIMPL_ASSERT_TYPE(v,t) RBIMPL_ASSERT_OR_ASSUME(RB_TYPE_P((v), (t)))
21578#define TYPE(_) RBIMPL_CAST((int)rb_type(_))
21579#pragma GCC visibility push(default)
21580#pragma GCC visibility pop
21581#define RBIMPL_HAVE_ENUM_ATTRIBUTE 1
21582#define RBIMPL_WIDER_ENUM 1
21583#define FL_SINGLETON RBIMPL_CAST((VALUE)RUBY_FL_SINGLETON)
21584#define FL_WB_PROTECTED RBIMPL_CAST((VALUE)RUBY_FL_WB_PROTECTED)
21585#define FL_PROMOTED0 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED0)
21586#define FL_PROMOTED1 RBIMPL_CAST((VALUE)RUBY_FL_PROMOTED1)
21587#define FL_FINALIZE RBIMPL_CAST((VALUE)RUBY_FL_FINALIZE)
21588#define FL_TAINT RBIMPL_CAST((VALUE)RUBY_FL_TAINT)
21589#define FL_SHAREABLE RBIMPL_CAST((VALUE)RUBY_FL_SHAREABLE)
21590#define FL_UNTRUSTED RBIMPL_CAST((VALUE)RUBY_FL_UNTRUSTED)
21591#define FL_SEEN_OBJ_ID RBIMPL_CAST((VALUE)RUBY_FL_SEEN_OBJ_ID)
21592#define FL_EXIVAR RBIMPL_CAST((VALUE)RUBY_FL_EXIVAR)
21593#define FL_FREEZE RBIMPL_CAST((VALUE)RUBY_FL_FREEZE)
21594#define FL_USHIFT RBIMPL_CAST((VALUE)RUBY_FL_USHIFT)
21595#define FL_USER0 RBIMPL_CAST((VALUE)RUBY_FL_USER0)
21596#define FL_USER1 RBIMPL_CAST((VALUE)RUBY_FL_USER1)
21597#define FL_USER2 RBIMPL_CAST((VALUE)RUBY_FL_USER2)
21598#define FL_USER3 RBIMPL_CAST((VALUE)RUBY_FL_USER3)
21599#define FL_USER4 RBIMPL_CAST((VALUE)RUBY_FL_USER4)
21600#define FL_USER5 RBIMPL_CAST((VALUE)RUBY_FL_USER5)
21601#define FL_USER6 RBIMPL_CAST((VALUE)RUBY_FL_USER6)
21602#define FL_USER7 RBIMPL_CAST((VALUE)RUBY_FL_USER7)
21603#define FL_USER8 RBIMPL_CAST((VALUE)RUBY_FL_USER8)
21604#define FL_USER9 RBIMPL_CAST((VALUE)RUBY_FL_USER9)
21605#define FL_USER10 RBIMPL_CAST((VALUE)RUBY_FL_USER10)
21606#define FL_USER11 RBIMPL_CAST((VALUE)RUBY_FL_USER11)
21607#define FL_USER12 RBIMPL_CAST((VALUE)RUBY_FL_USER12)
21608#define FL_USER13 RBIMPL_CAST((VALUE)RUBY_FL_USER13)
21609#define FL_USER14 RBIMPL_CAST((VALUE)RUBY_FL_USER14)
21610#define FL_USER15 RBIMPL_CAST((VALUE)RUBY_FL_USER15)
21611#define FL_USER16 RBIMPL_CAST((VALUE)RUBY_FL_USER16)
21612#define FL_USER17 RBIMPL_CAST((VALUE)RUBY_FL_USER17)
21613#define FL_USER18 RBIMPL_CAST((VALUE)RUBY_FL_USER18)
21614#define FL_USER19 RBIMPL_CAST((VALUE)(unsigned int)RUBY_FL_USER19)
21615#define ELTS_SHARED RUBY_ELTS_SHARED
21616#define RB_OBJ_FREEZE rb_obj_freeze_inline
21617#define RUBY_ELTS_SHARED RUBY_ELTS_SHARED
21618#define RB_FL_ABLE RB_FL_ABLE
21619#define RB_FL_ALL RB_FL_ALL
21620#define RB_FL_ALL_RAW RB_FL_ALL_RAW
21621#define RB_FL_ANY RB_FL_ANY
21622#define RB_FL_ANY_RAW RB_FL_ANY_RAW
21623#define RB_FL_REVERSE RB_FL_REVERSE
21624#define RB_FL_REVERSE_RAW RB_FL_REVERSE_RAW
21625#define RB_FL_SET RB_FL_SET
21626#define RB_FL_SET_RAW RB_FL_SET_RAW
21627#define RB_FL_TEST RB_FL_TEST
21628#define RB_FL_TEST_RAW RB_FL_TEST_RAW
21629#define RB_FL_UNSET RB_FL_UNSET
21630#define RB_FL_UNSET_RAW RB_FL_UNSET_RAW
21631#define RB_OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21632#define RB_OBJ_FROZEN RB_OBJ_FROZEN
21633#define RB_OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21634#define RB_OBJ_INFECT RB_OBJ_INFECT
21635#define RB_OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21636#define RB_OBJ_TAINT RB_OBJ_TAINT
21637#define RB_OBJ_TAINTABLE RB_OBJ_TAINTABLE
21638#define RB_OBJ_TAINTED RB_OBJ_TAINTED
21639#define RB_OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21640#define RB_OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21641#define RB_OBJ_UNTRUST RB_OBJ_TAINT
21642#define RB_OBJ_UNTRUSTED RB_OBJ_TAINTED
21643#define FL_ABLE RB_FL_ABLE
21644#define FL_ALL RB_FL_ALL
21645#define FL_ALL_RAW RB_FL_ALL_RAW
21646#define FL_ANY RB_FL_ANY
21647#define FL_ANY_RAW RB_FL_ANY_RAW
21648#define FL_REVERSE RB_FL_REVERSE
21649#define FL_REVERSE_RAW RB_FL_REVERSE_RAW
21650#define FL_SET RB_FL_SET
21651#define FL_SET_RAW RB_FL_SET_RAW
21652#define FL_TEST RB_FL_TEST
21653#define FL_TEST_RAW RB_FL_TEST_RAW
21654#define FL_UNSET RB_FL_UNSET
21655#define FL_UNSET_RAW RB_FL_UNSET_RAW
21656#define OBJ_FREEZE RB_OBJ_FREEZE
21657#define OBJ_FREEZE_RAW RB_OBJ_FREEZE_RAW
21658#define OBJ_FROZEN RB_OBJ_FROZEN
21659#define OBJ_FROZEN_RAW RB_OBJ_FROZEN_RAW
21660#define OBJ_INFECT RB_OBJ_INFECT
21661#define OBJ_INFECT_RAW RB_OBJ_INFECT_RAW
21662#define OBJ_TAINT RB_OBJ_TAINT
21663#define OBJ_TAINTABLE RB_OBJ_TAINTABLE
21664#define OBJ_TAINTED RB_OBJ_TAINTED
21665#define OBJ_TAINTED_RAW RB_OBJ_TAINTED_RAW
21666#define OBJ_TAINT_RAW RB_OBJ_TAINT_RAW
21667#define OBJ_UNTRUST RB_OBJ_UNTRUST
21668#define OBJ_UNTRUSTED RB_OBJ_UNTRUSTED
21669#define RBIMPL_FL_USER_N(n) RUBY_FL_USER ##n = (1<<(RUBY_FL_USHIFT+n))
21670#undef RBIMPL_FL_USER_N
21671#undef RBIMPL_WIDER_ENUM
21672#undef RBIMPL_HAVE_ENUM_ATTRIBUTE
21673#pragma GCC visibility push(default)
21674#pragma GCC visibility pop
21675#pragma GCC visibility push(default)
21676#pragma GCC visibility pop
21677#define RSTRING(obj) RBIMPL_CAST((struct RString *)(obj))
21678#define RSTRING_NOEMBED RSTRING_NOEMBED
21679#define RSTRING_FSTR RSTRING_FSTR
21680#define RSTRING_EMBED_LEN RSTRING_EMBED_LEN
21681#define RSTRING_LEN RSTRING_LEN
21682#define RSTRING_LENINT RSTRING_LENINT
21683#define RSTRING_PTR RSTRING_PTR
21684#define RSTRING_END RSTRING_END
21685#define StringValue(v) rb_string_value(&(v))
21686#define StringValuePtr(v) rb_string_value_ptr(&(v))
21687#define StringValueCStr(v) rb_string_value_cstr(&(v))
21688#define SafeStringValue(v) StringValue(v)
21689#define ExportStringValue(v) do { StringValue(v); (v) = rb_str_export(v); } while (0)
21690#pragma GCC visibility push(default)
21691#define Check_SafeStr(v) rb_check_safe_str(RBIMPL_CAST((VALUE)(v)))
21692#pragma GCC visibility pop
21693#pragma GCC diagnostic push
21694#pragma GCC diagnostic pop
21695#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; })
21696#define RB_NUM2CHR rb_num2char_inline
21697#define NUM2CHR RB_NUM2CHR
21698#define CHR2FIX RB_CHR2FIX
21699#define RB_CHR2FIX RB_CHR2FIX
21700#define RBIMPL_ARITHMETIC_DOUBLE_H
21701#define NUM2DBL rb_num2dbl
21702#define RFLOAT_VALUE rb_float_value
21703#define DBL2NUM rb_float_new
21704#pragma GCC visibility push(default)
21705#pragma GCC visibility pop
21706#define RBIMPL_ARITHMETIC_GID_T_H
21707#define RBIMPL_ARITHMETIC_LONG_LONG_H
21708#define RB_LL2NUM rb_ll2num_inline
21709#define RB_ULL2NUM rb_ull2num_inline
21710#define LL2NUM RB_LL2NUM
21711#define ULL2NUM RB_ULL2NUM
21712#define RB_NUM2LL rb_num2ll_inline
21713#define RB_NUM2ULL rb_num2ull_inline
21714#define NUM2LL RB_NUM2LL
21715#define NUM2ULL RB_NUM2ULL
21716#pragma GCC visibility push(default)
21717#pragma GCC visibility pop
21718#define RBIMPL_ARITHMETIC_MODE_T_H
21719#define RBIMPL_ARITHMETIC_OFF_T_H
21720#define RBIMPL_ARITHMETIC_PID_T_H
21721#define RBIMPL_ARITHMETIC_SHORT_H
21722#define RB_NUM2SHORT rb_num2short_inline
21723#define RB_NUM2USHORT rb_num2ushort
21724#define NUM2SHORT RB_NUM2SHORT
21725#define NUM2USHORT RB_NUM2USHORT
21726#define USHORT2NUM RB_INT2FIX
21727#define RB_FIX2SHORT rb_fix2short
21728#define FIX2SHORT RB_FIX2SHORT
21729#pragma GCC visibility push(default)
21730#pragma GCC visibility pop
21731#define RBIMPL_ARITHMETIC_SIZE_T_H
21732#define RB_SIZE2NUM RB_ULL2NUM
21733#define RB_SSIZE2NUM RB_LL2NUM
21734#define RB_NUM2SIZE RB_NUM2ULL
21735#define RB_NUM2SSIZE RB_NUM2LL
21736#define NUM2SIZET RB_NUM2SIZE
21737#define SIZET2NUM RB_SIZE2NUM
21738#define NUM2SSIZET RB_NUM2SSIZE
21739#define SSIZET2NUM RB_SSIZE2NUM
21740#define RBIMPL_ARITHMERIC_ST_DATA_T_H
21741#define RUBY_ST_H 1
21742#pragma GCC visibility push(default)
21743#define ST_DATA_T_DEFINED
21744#define MAX_ST_INDEX_VAL (~(st_index_t) 0)
21745#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
21746#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
21747#define ST_DATA_COMPATIBLE_P(type) __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
21748#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)
21749#define st_init_table rb_st_init_table
21750#define st_init_table_with_size rb_st_init_table_with_size
21751#define st_init_numtable rb_st_init_numtable
21752#define st_init_numtable_with_size rb_st_init_numtable_with_size
21753#define st_init_strtable rb_st_init_strtable
21754#define st_init_strtable_with_size rb_st_init_strtable_with_size
21755#define st_init_strcasetable rb_st_init_strcasetable
21756#define st_init_strcasetable_with_size rb_st_init_strcasetable_with_size
21757#define st_delete rb_st_delete
21758#define st_delete_safe rb_st_delete_safe
21759#define st_shift rb_st_shift
21760#define st_insert rb_st_insert
21761#define st_insert2 rb_st_insert2
21762#define st_lookup rb_st_lookup
21763#define st_get_key rb_st_get_key
21764#define st_update rb_st_update
21765#define st_foreach_with_replace rb_st_foreach_with_replace
21766#define st_foreach rb_st_foreach
21767#define st_foreach_check rb_st_foreach_check
21768#define st_keys rb_st_keys
21769#define st_keys_check rb_st_keys_check
21770#define st_values rb_st_values
21771#define st_values_check rb_st_values_check
21772#define st_add_direct rb_st_add_direct
21773#define st_free_table rb_st_free_table
21774#define st_cleanup_safe rb_st_cleanup_safe
21775#define st_clear rb_st_clear
21776#define st_copy rb_st_copy
21777#define st_numcmp rb_st_numcmp
21778#define st_numhash rb_st_numhash
21779#define st_locale_insensitive_strcasecmp rb_st_locale_insensitive_strcasecmp
21780#define st_locale_insensitive_strncasecmp rb_st_locale_insensitive_strncasecmp
21781#define st_strcasecmp rb_st_locale_insensitive_strcasecmp
21782#define st_strncasecmp rb_st_locale_insensitive_strncasecmp
21783#define st_memsize rb_st_memsize
21784#define st_hash rb_st_hash
21785#define st_hash_uint32 rb_st_hash_uint32
21786#define st_hash_uint rb_st_hash_uint
21787#define st_hash_end rb_st_hash_end
21788#define st_hash_start(h) ((st_index_t)(h))
21789#pragma GCC visibility pop
21790#define ST2FIX RB_ST2FIX
21791#define RB_ST2FIX RB_ST2FIX
21792#define RBIMPL_ARITHMETIC_UID_T_H
21793#define RBIMPL_CORE_H
21794#define RBIMPL_RARRAY_H
21795#define RBIMPL_RGENGC_H
21796#undef USE_RGENGC
21797#define USE_RGENGC 1
21798#define USE_RINCGC 1
21799#define USE_RGENGC_LOGGING_WB_UNPROTECT 0
21800#define RGENGC_WB_PROTECTED_ARRAY 1
21801#define RGENGC_WB_PROTECTED_HASH 1
21802#define RGENGC_WB_PROTECTED_STRUCT 1
21803#define RGENGC_WB_PROTECTED_STRING 1
21804#define RGENGC_WB_PROTECTED_OBJECT 1
21805#define RGENGC_WB_PROTECTED_REGEXP 1
21806#define RGENGC_WB_PROTECTED_CLASS 1
21807#define RGENGC_WB_PROTECTED_FLOAT 1
21808#define RGENGC_WB_PROTECTED_COMPLEX 1
21809#define RGENGC_WB_PROTECTED_RATIONAL 1
21810#define RGENGC_WB_PROTECTED_BIGNUM 1
21811#define RGENGC_WB_PROTECTED_NODE_CREF 1
21812#define RB_OBJ_WRITE(old,slot,young) RBIMPL_CAST(rb_obj_write((VALUE)(old), (VALUE *)(slot), (VALUE)(young), __FILE__, __LINE__))
21813#define RB_OBJ_WRITTEN(old,oldv,young) RBIMPL_CAST(rb_obj_written((VALUE)(old), (VALUE)(oldv), (VALUE)(young), __FILE__, __LINE__))
21814#define OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21815#define OBJ_PROMOTED RB_OBJ_PROMOTED
21816#define OBJ_WB_UNPROTECT RB_OBJ_WB_UNPROTECT
21817#define RB_OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__)
21818#define RB_OBJ_WB_UNPROTECT_FOR(type,obj) (RGENGC_WB_PROTECTED_ ##type ? OBJ_WB_UNPROTECT(obj) : obj)
21819#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging
21820#define RB_OBJ_PROMOTED_RAW RB_OBJ_PROMOTED_RAW
21821#define RB_OBJ_PROMOTED RB_OBJ_PROMOTED
21822#pragma GCC visibility push(default)
21823#pragma GCC visibility pop
21824#define USE_TRANSIENT_HEAP 1
21825#define RARRAY(obj) RBIMPL_CAST((struct RArray *)(obj))
21826#define RARRAY_EMBED_FLAG RARRAY_EMBED_FLAG
21827#define RARRAY_EMBED_LEN_MASK RARRAY_EMBED_LEN_MASK
21828#define RARRAY_EMBED_LEN_MAX RARRAY_EMBED_LEN_MAX
21829#define RARRAY_EMBED_LEN_SHIFT RARRAY_EMBED_LEN_SHIFT
21830#define RARRAY_TRANSIENT_FLAG RARRAY_TRANSIENT_FLAG
21831#define RARRAY_LEN rb_array_len
21832#define RARRAY_CONST_PTR rb_array_const_ptr
21833#define RARRAY_CONST_PTR_TRANSIENT rb_array_const_ptr_transient
21834#define FIX_CONST_VALUE_PTR(x) (x)
21835#define RARRAY_EMBED_LEN RARRAY_EMBED_LEN
21836#define RARRAY_LENINT RARRAY_LENINT
21837#define RARRAY_TRANSIENT_P RARRAY_TRANSIENT_P
21838#define RARRAY_ASET RARRAY_ASET
21839#define RARRAY_PTR RARRAY_PTR
21840#pragma GCC visibility push(default)
21841#pragma GCC visibility pop
21842#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)
21843#define RARRAY_PTR_USE_END(a) rb_array_ptr_use_end(a, 0)
21844#define RARRAY_PTR_USE(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(0, ary, ptr_name, expr)
21845#define RARRAY_PTR_USE_TRANSIENT(ary,ptr_name,expr) RBIMPL_RARRAY_STMT(1, ary, ptr_name, expr)
21846#define RARRAY_AREF(a,i) RARRAY_CONST_PTR_TRANSIENT(a)[i]
21847#define RBIMPL_RBIGNUM_H
21848#define RBIGNUM_SIGN rb_big_sign
21849#define RBIGNUM_POSITIVE_P RBIGNUM_POSITIVE_P
21850#define RBIGNUM_NEGATIVE_P RBIGNUM_NEGATIVE_P
21851#pragma GCC visibility push(default)
21852#pragma GCC visibility pop
21853#define RBIMPL_RCLASS_H
21854#define RMODULE_IS_REFINEMENT RMODULE_IS_REFINEMENT
21855#define RCLASS(obj) RBIMPL_CAST((struct RClass *)(obj))
21856#define RMODULE RCLASS
21857#define RCLASS_SUPER rb_class_get_superclass
21858#pragma GCC visibility push(default)
21859#pragma GCC visibility pop
21860#define RBIMPL_RDATA_H
21861#define RUBY_UNTYPED_DATA_WARNING 1
21862#define RBIMPL_DATA_FUNC(f) RBIMPL_CAST((void (*)(void *))(f))
21863#define RBIMPL_ATTRSET_UNTYPED_DATA_FUNC() RBIMPL_ATTR_WARNING(("untyped Data is unsafe; use TypedData instead")) RBIMPL_ATTR_DEPRECATED(("by TypedData"))
21864#define RBIMPL_MACRO_SELECT(x,y) x ## y
21865#define RUBY_MACRO_SELECT(x,y) RBIMPL_MACRO_SELECT(x, y)
21866#define RDATA(obj) RBIMPL_CAST((struct RData *)(obj))
21867#define DATA_PTR(obj) RDATA(obj)->data
21868#define RUBY_DEFAULT_FREE RBIMPL_DATA_FUNC(-1)
21869#define RUBY_NEVER_FREE RBIMPL_DATA_FUNC(0)
21870#define RUBY_UNTYPED_DATA_FUNC(f) f RBIMPL_ATTRSET_UNTYPED_DATA_FUNC()
21871#pragma GCC visibility push(default)
21872#pragma GCC visibility pop
21873#define Data_Wrap_Struct(klass,mark,free,sval) rb_data_object_wrap( (klass), (sval), RBIMPL_DATA_FUNC(mark), RBIMPL_DATA_FUNC(free))
21874#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))
21875#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; })
21876#define Data_Get_Struct(obj,type,sval) ((sval) = RBIMPL_CAST((type*)rb_data_object_get(obj)))
21877#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)))
21878#define rb_data_object_wrap_0 rb_data_object_wrap
21879#define rb_data_object_wrap_1 rb_data_object_wrap_warning
21880#define rb_data_object_wrap_2 rb_data_object_wrap_
21881#define rb_data_object_wrap RUBY_MACRO_SELECT(rb_data_object_wrap_2, RUBY_UNTYPED_DATA_WARNING)
21882#define rb_data_object_get_0 rb_data_object_get
21883#define rb_data_object_get_1 rb_data_object_get_warning
21884#define rb_data_object_get_2 rb_data_object_get_
21885#define rb_data_object_get RUBY_MACRO_SELECT(rb_data_object_get_2, RUBY_UNTYPED_DATA_WARNING)
21886#define rb_data_object_make_0 rb_data_object_make
21887#define rb_data_object_make_1 rb_data_object_make_warning
21888#define rb_data_object_make_2 rb_data_object_make_
21889#define rb_data_object_make RUBY_MACRO_SELECT(rb_data_object_make_2, RUBY_UNTYPED_DATA_WARNING)
21890#define RBIMPL_RFILE_H
21891#define RFILE(obj) RBIMPL_CAST((struct RFile *)(obj))
21892#define RBIMPL_RHASH_H
21893#define RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
21894#define RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
21895#define RHASH_IFNONE(h) rb_hash_ifnone(h)
21896#define RHASH_SIZE(h) rb_hash_size_num(h)
21897#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
21898#define RHASH_SET_IFNONE(h,ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)
21899#pragma GCC visibility push(default)
21900#pragma GCC visibility pop
21901#define RBIMPL_ROBJECT_H
21902#define ROBJECT(obj) RBIMPL_CAST((struct RObject *)(obj))
21903#define ROBJECT_EMBED_LEN_MAX ROBJECT_EMBED_LEN_MAX
21904#define ROBJECT_EMBED ROBJECT_EMBED
21905#define ROBJECT_IV_CAPACITY ROBJECT_IV_CAPACITY
21906#define ROBJECT_IVPTR ROBJECT_IVPTR
21907#define RBIMPL_RREGEXP_H
21908#define RREGEXP(obj) RBIMPL_CAST((struct RRegexp *)(obj))
21909#define RREGEXP_PTR(obj) (RREGEXP(obj)->ptr)
21910#define RREGEXP_SRC RREGEXP_SRC
21911#define RREGEXP_SRC_PTR RREGEXP_SRC_PTR
21912#define RREGEXP_SRC_LEN RREGEXP_SRC_LEN
21913#define RREGEXP_SRC_END RREGEXP_SRC_END
21914#define RBIMPL_RSTRUCT_H
21915#define RSTRUCT_PTR(st) rb_struct_ptr(st)
21916#define RSTRUCT_LEN RSTRUCT_LEN
21917#define RSTRUCT_SET RSTRUCT_SET
21918#define RSTRUCT_GET RSTRUCT_GET
21919#pragma GCC visibility push(default)
21920#pragma GCC visibility pop
21921#define RBIMPL_RTYPEDDATA_H
21922#define HAVE_TYPE_RB_DATA_TYPE_T 1
21923#define HAVE_RB_DATA_TYPE_T_FUNCTION 1
21924#define HAVE_RB_DATA_TYPE_T_PARENT 1
21925#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
21926#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
21927#define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
21928#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
21929#define Check_TypedStruct(v,t) rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
21930#define RTYPEDDATA_P RTYPEDDATA_P
21931#define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
21932#define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
21933#define RUBY_TYPED_FROZEN_SHAREABLE RUBY_TYPED_FROZEN_SHAREABLE
21934#define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
21935#define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
21936#pragma GCC visibility push(default)
21937#pragma GCC visibility pop
21938#define TypedData_Wrap_Struct(klass,data_type,sval) rb_data_typed_object_wrap((klass),(sval),(data_type))
21939#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))
21940#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; })
21941#define TypedData_Get_Struct(obj,type,data_type,sval) ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
21942#define RBIMPL_CTYPE_H
21943#define _CTYPE_H_
21944#define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a')
21945#define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A')
21946#define _U 01
21947#define _L 02
21948#define _N 04
21949#define _S 010
21950#define _P 020
21951#define _C 040
21952#define _X 0100
21953#define _B 0200
21954#define __CTYPE_PTR (__locale_ctype_ptr ())
21955#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)])
21956#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L))
21957#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U)
21958#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L)
21959#define isdigit(__c) (__ctype_lookup(__c)&_N)
21960#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N))
21961#define isspace(__c) (__ctype_lookup(__c)&_S)
21962#define ispunct(__c) (__ctype_lookup(__c)&_P)
21963#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N))
21964#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B))
21965#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N))
21966#define iscntrl(__c) (__ctype_lookup(__c)&_C)
21967#define isblank(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup(__x)&_B) || (int) (__x) == '\t';})
21968#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)])
21969#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L))
21970#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U)
21971#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L)
21972#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N)
21973#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N))
21974#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S)
21975#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P)
21976#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N))
21977#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B))
21978#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N))
21979#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C)
21980#define isblank_l(__c,__l) __extension__ ({ __typeof__ (__c) __x = (__c); (__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';})
21981#define isascii(__c) ((unsigned)(__c)<=0177)
21982#define toascii(__c) ((__c)&0177)
21983#define isascii_l(__c,__l) ((__l),(unsigned)(__c)<=0177)
21984#define toascii_l(__c,__l) ((__l),(__c)&0177)
21985#define toupper(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (toupper) (__x);})
21986#define tolower(__c) __extension__ ({ __typeof__ (__c) __x = (__c); (void) __CTYPE_PTR[__x]; (tolower) (__x);})
21987#define ISASCII rb_isascii
21988#define ISPRINT rb_isprint
21989#define ISGRAPH rb_isgraph
21990#define ISSPACE rb_isspace
21991#define ISUPPER rb_isupper
21992#define ISLOWER rb_islower
21993#define ISALNUM rb_isalnum
21994#define ISALPHA rb_isalpha
21995#define ISDIGIT rb_isdigit
21996#define ISXDIGIT rb_isxdigit
21997#define ISBLANK rb_isblank
21998#define ISCNTRL rb_iscntrl
21999#define ISPUNCT rb_ispunct
22000#define TOUPPER rb_toupper
22001#define TOLOWER rb_tolower
22002#define STRCASECMP st_locale_insensitive_strcasecmp
22003#define STRNCASECMP st_locale_insensitive_strncasecmp
22004#define STRTOUL ruby_strtoul
22005#pragma GCC visibility push(default)
22006#pragma GCC visibility pop
22007#define RBIMPL_EVAL_H
22008#pragma GCC visibility push(default)
22009#define rb_funcall2 rb_funcallv
22010#define rb_funcall3 rb_funcallv_public
22011#pragma GCC visibility pop
22012#define RBIMPL_EVENT_H
22013#define RUBY_EVENT_NONE 0x0000
22014#define RUBY_EVENT_LINE 0x0001
22015#define RUBY_EVENT_CLASS 0x0002
22016#define RUBY_EVENT_END 0x0004
22017#define RUBY_EVENT_CALL 0x0008
22018#define RUBY_EVENT_RETURN 0x0010
22019#define RUBY_EVENT_C_CALL 0x0020
22020#define RUBY_EVENT_C_RETURN 0x0040
22021#define RUBY_EVENT_RAISE 0x0080
22022#define RUBY_EVENT_ALL 0x00ff
22023#define RUBY_EVENT_B_CALL 0x0100
22024#define RUBY_EVENT_B_RETURN 0x0200
22025#define RUBY_EVENT_THREAD_BEGIN 0x0400
22026#define RUBY_EVENT_THREAD_END 0x0800
22027#define RUBY_EVENT_FIBER_SWITCH 0x1000
22028#define RUBY_EVENT_SCRIPT_COMPILED 0x2000
22029#define RUBY_EVENT_TRACEPOINT_ALL 0xffff
22030#define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000
22031#define RUBY_INTERNAL_EVENT_SWITCH 0x040000
22032#define RUBY_EVENT_SWITCH 0x040000
22033#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000
22034#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000
22035#define RUBY_INTERNAL_EVENT_GC_START 0x400000
22036#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000
22037#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000
22038#define RUBY_INTERNAL_EVENT_GC_ENTER 0x2000000
22039#define RUBY_INTERNAL_EVENT_GC_EXIT 0x4000000
22040#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x7f00000
22041#define RUBY_INTERNAL_EVENT_MASK 0xffff0000
22042#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1
22043#pragma GCC visibility push(default)
22044#pragma GCC visibility pop
22045#define RBIMPL_GC_H
22046#pragma GCC visibility push(default)
22047#pragma GCC visibility pop
22048#define RBIMPL_GLOB_H
22049#pragma GCC visibility push(default)
22050#pragma GCC visibility pop
22051#define RBIMPL_GLOBALS_H
22052#pragma GCC visibility push(default)
22053#define RUBY_INTEGER_UNIFICATION 1
22054#define CLASS_OF rb_class_of
22055#pragma GCC visibility pop
22056#define RBIMPL_INTERPRETER_H
22057#pragma GCC visibility push(default)
22058#define RUBY_INIT_STACK VALUE variable_in_this_stack_frame; ruby_init_stack(&variable_in_this_stack_frame);
22059#pragma GCC visibility pop
22060#define RBIMPL_ITERATOR_H
22061#pragma GCC visibility push(default)
22062#define RB_BLOCK_CALL_FUNC_STRICT 1
22063#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1
22064#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg,callback_arg) VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg
22065#pragma GCC visibility pop
22066#define RBIMPL_MEMORY_H
22067#define DSIZE_T uint128_t
22068#define RUBY_ALLOCV_LIMIT 1024
22069#define RB_GC_GUARD(v) (*__extension__ ({ volatile VALUE *rb_gc_guarded_ptr = &(v); __asm__("" : : "m"(rb_gc_guarded_ptr)); rb_gc_guarded_ptr; }))
22070#define RB_ALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xmalloc2((n), sizeof(type)))
22071#define RB_ALLOC(type) RBIMPL_CAST((type *)ruby_xmalloc(sizeof(type)))
22072#define RB_ZALLOC_N(type,n) RBIMPL_CAST((type *)ruby_xcalloc((n), sizeof(type)))
22073#define RB_ZALLOC(type) (RB_ZALLOC_N(type, 1))
22074#define RB_REALLOC_N(var,type,n) ((var) = RBIMPL_CAST((type *)ruby_xrealloc2((void *)(var), (n), sizeof(type))))
22075#define ALLOCA_N(type,n) RBIMPL_CAST((type *)alloca(rbimpl_size_mul_or_raise(sizeof(type), (n))))
22076#define RB_ALLOCV(v,n) ((n) < RUBY_ALLOCV_LIMIT ? ((v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n)))
22077#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))))
22078#define RB_ALLOCV_END(v) rb_free_tmp_buffer(&(v))
22079#define MEMZERO(p,type,n) memset((p), 0, rbimpl_size_mul_or_raise(sizeof(type), (n)))
22080#define MEMCPY(p1,p2,type,n) ruby_nonempty_memcpy((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22081#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22082#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), rbimpl_size_mul_or_raise(sizeof(type), (n)))
22083#define ALLOC_N RB_ALLOC_N
22084#define ALLOC RB_ALLOC
22085#define ZALLOC_N RB_ZALLOC_N
22086#define ZALLOC RB_ZALLOC
22087#define REALLOC_N RB_REALLOC_N
22088#define ALLOCV RB_ALLOCV
22089#define ALLOCV_N RB_ALLOCV_N
22090#define ALLOCV_END RB_ALLOCV_END
22091#pragma GCC visibility push(default)
22092#pragma GCC visibility pop
22093#pragma GCC visibility push(default)
22094#pragma GCC visibility pop
22095#define RBIMPL_MODULE_H
22096#pragma GCC visibility push(default)
22097#pragma GCC visibility pop
22098#define RBIMPL_NEWOBJ_H
22099#define RB_NEWOBJ(obj,type) type *(obj) = RBIMPL_CAST((type *)rb_newobj())
22100#define RB_NEWOBJ_OF(obj,type,klass,flags) type *(obj) = RBIMPL_CAST((type *)rb_newobj_of(klass, flags))
22101#define NEWOBJ RB_NEWOBJ
22102#define NEWOBJ_OF RB_NEWOBJ_OF
22103#define OBJSETUP rb_obj_setup
22104#define CLONESETUP rb_clone_setup
22105#define DUPSETUP rb_dup_setup
22106#pragma GCC visibility push(default)
22107#pragma GCC visibility pop
22108#define RBIMPL_SCAN_ARGS_H
22109#define RBIMPL_ATTR_DIAGNOSE_IF_H
22110#define RBIMPL_ATTR_DIAGNOSE_IF(_,__,___)
22111#define RBIMPL_INTERN_ARRAY_H
22112#pragma GCC visibility push(default)
22113#define rb_ary_tmp_new rb_ary_hidden_new
22114#define rb_ary_new2 rb_ary_new_capa
22115#define rb_ary_new3 rb_ary_new_from_args
22116#define rb_ary_new4 rb_ary_new_from_values
22117#pragma GCC visibility pop
22118#define RBIMPL_INTERN_ERROR_H
22119#define UNLIMITED_ARGUMENTS (-1)
22120#define rb_exc_new2 rb_exc_new_cstr
22121#define rb_exc_new3 rb_exc_new_str
22122#define rb_check_arity rb_check_arity
22123#pragma GCC visibility push(default)
22124#pragma GCC visibility pop
22125#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)
22126#define rb_check_frozen rb_check_frozen_inline
22127#define RBIMPL_INTERN_HASH_H
22128#pragma GCC visibility push(default)
22129#define st_foreach_safe rb_st_foreach_safe
22130#pragma GCC visibility pop
22131#define RBIMPL_INTERN_PROC_H
22132#pragma GCC visibility push(default)
22133#pragma GCC visibility pop
22134#define RB_SCAN_ARGS_PASS_CALLED_KEYWORDS 0
22135#define RB_SCAN_ARGS_KEYWORDS 1
22136#define RB_SCAN_ARGS_LAST_HASH_KEYWORDS 3
22137#define RB_NO_KEYWORDS 0
22138#define RB_PASS_KEYWORDS 1
22139#define RB_PASS_CALLED_KEYWORDS rb_keyword_given_p()
22140#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1
22141#pragma GCC visibility push(default)
22142#pragma GCC visibility pop
22143#define rb_scan_args_isdigit(c) (RBIMPL_CAST((unsigned char)((c)-'0'))<10)
22144#define rb_scan_args_count_end(fmt,ofs,vari) ((fmt)[ofs] ? -1 : (vari))
22145#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))
22146#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))
22147#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')))
22148#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))
22149#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'))
22150#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'))
22151#define rb_scan_args_count(fmt) rb_scan_args_count_lead(fmt, 0, 0)
22152#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)
22153#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)
22154#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)
22155#define rb_scan_args_next_param() vars[vari++]
22156#undef rb_scan_args_next_param
22157#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__)))
22158#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__)))
22159#define RBIMPL_SYMBOL_H
22160#define RB_ID2SYM rb_id2sym
22161#define RB_SYM2ID rb_sym2id
22162#define ID2SYM RB_ID2SYM
22163#define SYM2ID RB_SYM2ID
22164#define CONST_ID_CACHE RUBY_CONST_ID_CACHE
22165#define CONST_ID RUBY_CONST_ID
22166#define rb_intern_const rb_intern_const
22167#pragma GCC visibility push(default)
22168#pragma GCC visibility pop
22169#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; }
22170#define RUBY_CONST_ID(var,str) do { static ID rbimpl_id; (var) = rbimpl_intern_const(&rbimpl_id, (str)); } while (0)
22171#define rb_intern(str) (RBIMPL_CONSTANT_P(str) ? __extension__ ({ static ID rbimpl_id; rbimpl_intern_const(&rbimpl_id, (str)); }) : (rb_intern)(str))
22172#define RBIMPL_VARIABLE_H
22173#pragma GCC visibility push(default)
22174#pragma GCC visibility pop
22175#define RUBY_BACKWARD2_INTTYPES_H
22176#define PRI_INT_PREFIX ""
22177#define PRI_LONG_PREFIX "l"
22178#define PRI_SHORT_PREFIX "h"
22179#define PRI_64_PREFIX PRI_LONG_PREFIX
22180#define RUBY_PRI_VALUE_MARK "\v"
22181#define PRIdVALUE PRI_VALUE_PREFIX"d"
22182#define PRIoVALUE PRI_VALUE_PREFIX"o"
22183#define PRIuVALUE PRI_VALUE_PREFIX"u"
22184#define PRIxVALUE PRI_VALUE_PREFIX"x"
22185#define PRIXVALUE PRI_VALUE_PREFIX"X"
22186#define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
22187#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
22188#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
22189#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
22190#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
22191#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
22192#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
22193#define PRIdSIZE PRI_SIZE_PREFIX"d"
22194#define PRIiSIZE PRI_SIZE_PREFIX"i"
22195#define PRIoSIZE PRI_SIZE_PREFIX"o"
22196#define PRIuSIZE PRI_SIZE_PREFIX"u"
22197#define PRIxSIZE PRI_SIZE_PREFIX"x"
22198#define PRIXSIZE PRI_SIZE_PREFIX"X"
22199#pragma GCC visibility push(default)
22200#define USE_SYMBOL_AS_METHOD_NAME 1
22201#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
22202#define FilePathStringValue(v) ((v) = rb_get_path(v))
22203#define rb_varargs_argc_check_runtime(argc,vargc) (((argc) <= (vargc)) ? (argc) : (rb_fatal("argc(%d) exceeds actual arguments(%d)", argc, vargc), 0))
22204#define rb_varargs_argc_valid_p(argc,vargc) ((argc) == 0 ? (vargc) <= 1 : (argc) == (vargc))
22205#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))
22206#define RUBY_INTERN_H 1
22207#define RBIMPL_INTERN_BIGNUM_H
22208#pragma GCC visibility push(default)
22209#define rb_big2int(x) rb_big2long(x)
22210#define rb_big2uint(x) rb_big2ulong(x)
22211#define INTEGER_PACK_MSWORD_FIRST 0x01
22212#define INTEGER_PACK_LSWORD_FIRST 0x02
22213#define INTEGER_PACK_MSBYTE_FIRST 0x10
22214#define INTEGER_PACK_LSBYTE_FIRST 0x20
22215#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40
22216#define INTEGER_PACK_2COMP 0x80
22217#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400
22218#define INTEGER_PACK_FORCE_BIGNUM 0x100
22219#define INTEGER_PACK_NEGATIVE 0x200
22220#define INTEGER_PACK_LITTLE_ENDIAN (INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_LSBYTE_FIRST)
22221#define INTEGER_PACK_BIG_ENDIAN (INTEGER_PACK_MSWORD_FIRST | INTEGER_PACK_MSBYTE_FIRST)
22222#pragma GCC visibility pop
22223#define RBIMPL_INTERN_COMPAR_H
22224#pragma GCC visibility push(default)
22225#pragma GCC visibility pop
22226#define RBIMPL_INTERN_COMPLEX_H
22227#pragma GCC visibility push(default)
22228#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0))
22229#define rb_complex_raw2(x,y) rb_complex_raw((x), (y))
22230#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0))
22231#define rb_complex_new2(x,y) rb_complex_new((x), (y))
22232#define rb_complex_add rb_complex_plus
22233#define rb_complex_sub rb_complex_minus
22234#define rb_complex_nagate rb_complex_uminus
22235#define rb_Complex1(x) rb_Complex((x), INT2FIX(0))
22236#define rb_Complex2(x,y) rb_Complex((x), (y))
22237#pragma GCC visibility pop
22238#define RBIMPL_INTERN_CONT_H
22239#pragma GCC visibility push(default)
22240#pragma GCC visibility pop
22241#define RBIMPL_INTERN_DIR_H
22242#pragma GCC visibility push(default)
22243#pragma GCC visibility pop
22244#define RBIMPL_INTERN_ENUM_H
22245#pragma GCC visibility push(default)
22246#pragma GCC visibility pop
22247#define RBIMPL_INTERN_ENUMERATOR_H
22248#define RBIMPL_INTERN_EVAL_H
22249#pragma GCC visibility push(default)
22250#pragma GCC visibility pop
22251#pragma GCC visibility push(default)
22252#pragma GCC visibility pop
22253#define SIZED_ENUMERATOR(obj,argc,argv,size_fn) rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()), (argc), (argv), (size_fn))
22254#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))
22255#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)
22256#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)
22257#define RETURN_ENUMERATOR(obj,argc,argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)
22258#define RETURN_ENUMERATOR_KW(obj,argc,argv,kw_splat) RETURN_SIZED_ENUMERATOR_KW(obj, argc, argv, 0, kw_splat)
22259#define RBIMPL_INTERN_FILE_H
22260#pragma GCC visibility push(default)
22261#pragma GCC visibility pop
22262#define RBIMPL_INTERN_GC_H
22263#pragma GCC visibility push(default)
22264#pragma GCC visibility pop
22265#define RBIMPL_INTERN_IO_H
22266#pragma GCC visibility push(default)
22267#define rb_defout rb_stdout
22268#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd)
22269#pragma GCC visibility pop
22270#define RBIMPL_INTERN_LOAD_H
22271#pragma GCC visibility push(default)
22272#define RB_EXT_RACTOR_SAFE(f) rb_ext_ractor_safe(f)
22273#define HAVE_RB_EXT_RACTOR_SAFE 1
22274#pragma GCC visibility pop
22275#define RBIMPL_INTERN_MARSHAL_H
22276#pragma GCC visibility push(default)
22277#pragma GCC visibility pop
22278#define RBIMPL_INTERN_NUMERIC_H
22279#define RB_NUM_COERCE_FUNCS_NEED_OPID 1
22280#pragma GCC visibility push(default)
22281#pragma GCC visibility pop
22282#define RBIMPL_INTERN_OBJECT_H
22283#pragma GCC visibility push(default)
22284#define RB_OBJ_INIT_COPY(obj,orig) ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1))
22285#define OBJ_INIT_COPY(obj,orig) RB_OBJ_INIT_COPY(obj, orig)
22286#pragma GCC visibility pop
22287#define RBIMPL_INTERN_PARSE_H
22288#pragma GCC visibility push(default)
22289#pragma GCC visibility pop
22290#define RBIMPL_INTERN_PROCESS_H
22291#pragma GCC visibility push(default)
22292#pragma GCC visibility pop
22293#define RBIMPL_INTERN_RANDOM_H
22294#pragma GCC visibility push(default)
22295#pragma GCC visibility pop
22296#define RBIMPL_INTERN_RANGE_H
22297#pragma GCC visibility push(default)
22298#pragma GCC visibility pop
22299#define RBIMPL_INTERN_RATIONAL_H
22300#pragma GCC visibility push(default)
22301#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1))
22302#define rb_rational_raw2(x,y) rb_rational_raw((x), (y))
22303#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1))
22304#define rb_rational_new2(x,y) rb_rational_new((x), (y))
22305#define rb_Rational1(x) rb_Rational((x), INT2FIX(1))
22306#define rb_Rational2(x,y) rb_Rational((x), (y))
22307#pragma GCC visibility pop
22308#define RBIMPL_INTERN_RE_H
22309#pragma GCC visibility push(default)
22310#define rb_memcmp memcmp
22311#define HAVE_RB_REG_NEW_STR 1
22312#pragma GCC visibility pop
22313#define RBIMPL_INTERN_RUBY_H
22314#pragma GCC visibility push(default)
22315#define rb_argv rb_get_argv()
22316#pragma GCC visibility pop
22317#define RBIMPL_INTERN_SELECT_H
22318#define RBIMPL_INTERN_SELECT_LARGESIZE_H
22319#define rb_fd_ptr rb_fd_ptr
22320#define rb_fd_max rb_fd_max
22321#pragma GCC visibility push(default)
22322#pragma GCC visibility pop
22323#pragma GCC visibility push(default)
22324#pragma GCC visibility pop
22325#define RBIMPL_INTERN_SIGNAL_H
22326#pragma GCC visibility push(default)
22327#define posix_signal ruby_posix_signal
22328#pragma GCC visibility pop
22329#define RBIMPL_INTERN_SPRINTF_H
22330#pragma GCC visibility push(default)
22331#pragma GCC visibility pop
22332#define RBIMPL_INTERN_STRING_H
22333#pragma GCC visibility push(default)
22334#define rb_str_dup_frozen rb_str_new_frozen
22335#define rb_hash_uint32(h,i) st_hash_uint32((h), (i))
22336#define rb_hash_uint(h,i) st_hash_uint((h), (i))
22337#define rb_hash_end(h) st_hash_end(h)
22338#define rb_str_new(str,len) ((RBIMPL_CONSTANT_P(str) && RBIMPL_CONSTANT_P(len) ? rb_str_new_static : rb_str_new) ((str), (len)))
22339#define rb_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_new_cstr : rb_str_new_cstr) (str))
22340#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)))
22341#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)))
22342#define rb_usascii_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_usascii_str_new_cstr : rb_usascii_str_new_cstr) (str))
22343#define rb_utf8_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_utf8_str_new_cstr : rb_utf8_str_new_cstr) (str))
22344#define rb_external_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_external_str_new_cstr : rb_external_str_new_cstr) (str))
22345#define rb_locale_str_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_locale_str_new_cstr : rb_locale_str_new_cstr) (str))
22346#define rb_str_buf_new_cstr(str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_buf_new_cstr : rb_str_buf_new_cstr) (str))
22347#define rb_str_cat_cstr(buf,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_str_cat_cstr : rb_str_cat_cstr) ((buf), (str)))
22348#define rb_exc_new_cstr(exc,str) ((RBIMPL_CONSTANT_P(str) ? rbimpl_exc_new_cstr : rb_exc_new_cstr) ((exc), (str)))
22349#define rb_str_new2 rb_str_new_cstr
22350#define rb_str_new3 rb_str_new_shared
22351#define rb_str_new4 rb_str_new_frozen
22352#define rb_str_new5 rb_str_new_with_class
22353#define rb_str_buf_new2 rb_str_buf_new_cstr
22354#define rb_usascii_str_new2 rb_usascii_str_new_cstr
22355#define rb_str_buf_cat rb_str_cat
22356#define rb_str_buf_cat2 rb_str_cat_cstr
22357#define rb_str_cat2 rb_str_cat_cstr
22358#define rb_strlen_lit(str) (sizeof(str "") - 1)
22359#define rb_str_new_lit(str) rb_str_new_static((str), rb_strlen_lit(str))
22360#define rb_usascii_str_new_lit(str) rb_usascii_str_new_static((str), rb_strlen_lit(str))
22361#define rb_utf8_str_new_lit(str) rb_utf8_str_new_static((str), rb_strlen_lit(str))
22362#define rb_enc_str_new_lit(str,enc) rb_enc_str_new_static((str), rb_strlen_lit(str), (enc))
22363#define rb_str_new_literal(str) rb_str_new_lit(str)
22364#define rb_usascii_str_new_literal(str) rb_usascii_str_new_lit(str)
22365#define rb_utf8_str_new_literal(str) rb_utf8_str_new_lit(str)
22366#define rb_enc_str_new_literal(str,enc) rb_enc_str_new_lit(str, enc)
22367#pragma GCC visibility pop
22368#define RBIMPL_INTERN_STRUCT_H
22369#pragma GCC visibility push(default)
22370#pragma GCC visibility pop
22371#define RBIMPL_INTERN_THREAD_H
22372#pragma GCC visibility push(default)
22373#define RUBY_UBF_IO RBIMPL_CAST((rb_unblock_function_t *)-1)
22374#define RUBY_UBF_PROCESS RBIMPL_CAST((rb_unblock_function_t *)-1)
22375#pragma GCC visibility pop
22376#define RBIMPL_INTERN_TIME_H
22377#pragma GCC visibility push(default)
22378#pragma GCC visibility pop
22379#define RBIMPL_INTERN_VARIABLE_H
22380#pragma GCC visibility push(default)
22381#pragma GCC visibility pop
22382#define RUBY_VM 1
22383#define HAVE_NATIVETHREAD
22384#define InitVM(ext) {void InitVM_ ##ext(void);InitVM_ ##ext();}
22385#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); })
22386#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); })
22387#define RUBY_SUBST_H 1
22388#undef snprintf
22389#undef vsnprintf
22390#define snprintf ruby_snprintf
22391#define vsnprintf ruby_vsnprintf
22392#pragma GCC visibility pop
22393#define RUBY_VM_CORE_H
22394#define N_OR_RUBY_DEBUG(n) (((n) > 0) ? (n) : RUBY_DEBUG)
22395#define VM_CHECK_MODE N_OR_RUBY_DEBUG(0)
22396#define VMDEBUG 0
22397#define RUBY_TOPLEVEL_ASSERT_H
22398#undef assert
22399#define assert RUBY_ASSERT_NDEBUG
22400#define VM_ASSERT(expr) ((void)0)
22401#define VM_UNREACHABLE(func) UNREACHABLE
22402#define RUBY_DEBUG_THREAD_SCHEDULE()
22403#define RUBY_ASSERT_MUTEX_OWNED(mutex) VM_ASSERT(rb_mutex_owned_p(mutex))
22404#define RUBY_ASSERT_CRITICAL_SECTION_ENTER()
22405#define RUBY_ASSERT_CRITICAL_SECTION_LEAVE()
22406#define _SETJMP_H_
22407#define _JBTYPE long
22408#define _JBLEN 32
22409#define _SAVEMASK _JBLEN
22410#define _SIGMASK (_JBLEN+1)
22411#define _CYGWIN_WORKING_SIGSETJMP
22412#define __SIGMASK_FUNC pthread_sigmask
22413#define sigsetjmp(env,savemask) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((*_sjbuf)[_SAVEMASK] = savemask, __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)), setjmp (*_sjbuf)); })
22414#define siglongjmp(env,val) __extension__ ({ sigjmp_buf *_sjbuf = &(env); ((((*_sjbuf)[_SAVEMASK]) ? __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0) : 0), longjmp (*_sjbuf, val)); })
22415#define CCAN_LIST_H
22416#undef assert
22417#define assert(__e) ((void)0)
22418#define static_assert _Static_assert
22419#define CCAN_STR_H
22420#define stringify(expr) ccan_stringify_1(expr)
22421#define ccan_stringify(expr) ccan_stringify_1(expr)
22422#define ccan_stringify_1(expr) #expr
22423#define CCAN_CONTAINER_OF_H
22424#define CCAN_CHECK_TYPE_H
22425#define ccan_check_type(expr,type) ((typeof(expr) *)0 != (type *)0)
22426#define ccan_check_types_match(expr1,expr2) ((typeof(expr1) *)0 != (typeof(expr2) *)0)
22427#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))
22428#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))
22429#define ccan_container_off(containing_type,member) offsetof(containing_type, member)
22430#define ccan_container_of_var(member_ptr,container_var,member) ccan_container_of(member_ptr, typeof(*container_var), member)
22431#define ccan_container_off_var(var,member) ccan_container_off(typeof(*var), member)
22432#define CCAN_LIST_LOC __FILE__ ":" ccan_stringify(__LINE__)
22433#define ccan_list_debug(h,loc) ((void)loc, h)
22434#define ccan_list_debug_node(n,loc) ((void)loc, n)
22435#define CCAN_LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
22436#define CCAN_LIST_HEAD(name) struct ccan_list_head name = CCAN_LIST_HEAD_INIT(name)
22437#define ccan_list_add_after(h,p,n) ccan_list_add_after_(h, p, n, CCAN_LIST_LOC)
22438#define ccan_list_add(h,n) ccan_list_add_(h, n, CCAN_LIST_LOC)
22439#define ccan_list_add_before(h,p,n) ccan_list_add_before_(h, p, n, CCAN_LIST_LOC)
22440#define ccan_list_add_tail(h,n) ccan_list_add_tail_(h, n, CCAN_LIST_LOC)
22441#define ccan_list_empty(h) ccan_list_empty_(h, CCAN_LIST_LOC)
22442#define ccan_list_empty_nodebug(h) ccan_list_empty(h)
22443#define ccan_list_del(n) ccan_list_del_(n, CCAN_LIST_LOC)
22444#define ccan_list_del_init(n) ccan_list_del_init_(n, CCAN_LIST_LOC)
22445#define ccan_list_swap(o,n) ccan_list_swap_(o, n, CCAN_LIST_LOC)
22446#define ccan_list_entry(n,type,member) ccan_container_of(n, type, member)
22447#define ccan_list_top(h,type,member) ((type *)ccan_list_top_((h), ccan_list_off_(type, member)))
22448#define ccan_list_pop(h,type,member) ((type *)ccan_list_pop_((h), ccan_list_off_(type, member)))
22449#define ccan_list_tail(h,type,member) ((type *)ccan_list_tail_((h), ccan_list_off_(type, member)))
22450#define ccan_list_for_each(h,i,member) ccan_list_for_each_off(h, i, ccan_list_off_var_(i, member))
22451#define ccan_list_for_each_rev(h,i,member) ccan_list_for_each_rev_off(h, i, ccan_list_off_var_(i, member))
22452#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))
22453#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))
22454#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)))
22455#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)))
22456#define ccan_list_append_list(t,f) ccan_list_append_list_(t, f, __FILE__ ":" ccan_stringify(__LINE__))
22457#define ccan_list_prepend_list(t,f) ccan_list_prepend_list_(t, f, CCAN_LIST_LOC)
22458#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)))
22459#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)))
22460#define ccan_list_for_each_off(h,i,off) ccan_list_for_each_off_dir_((h),(i),(off),next)
22461#define ccan_list_for_each_rev_off(h,i,off) ccan_list_for_each_off_dir_((h),(i),(off),prev)
22462#define ccan_list_for_each_safe_off(h,i,nxt,off) ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
22463#define ccan_list_for_each_rev_safe_off(h,i,nxt,off) ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
22464#define ccan_list_entry_off(n,type,off) ((type *)ccan_list_node_from_off_((n), (off)))
22465#define ccan_list_head_off(h,type,off) ((type *)ccan_list_head_off((h), (off)))
22466#define ccan_list_tail_off(h,type,off) ((type *)ccan_list_tail_((h), (off)))
22467#define ccan_list_add_off(h,n,off) ccan_list_add((h), ccan_list_node_from_off_((n), (off)))
22468#define ccan_list_del_off(n,off) ccan_list_del(ccan_list_node_from_off_((n), (off)))
22469#define ccan_list_del_from_off(h,n,off) ccan_list_del_from(h, ccan_list_node_from_off_((n), (off)))
22470#define ccan_list_off_(type,member) (ccan_container_off(type, member) + ccan_check_type(((type *)0)->member, struct ccan_list_node))
22471#define ccan_list_off_var_(var,member) (ccan_container_off_var(var, member) + ccan_check_type(var->member, struct ccan_list_node))
22472#define ccan_list_typeof(var) typeof(var)
22473#define RUBY_ID_H
22474#define ID_STATIC_SYM RUBY_ID_STATIC_SYM
22475#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT
22476#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK
22477#define ID_LOCAL RUBY_ID_LOCAL
22478#define ID_INSTANCE RUBY_ID_INSTANCE
22479#define ID_GLOBAL RUBY_ID_GLOBAL
22480#define ID_ATTRSET RUBY_ID_ATTRSET
22481#define ID_CONST RUBY_ID_CONST
22482#define ID_CLASS RUBY_ID_CLASS
22483#define ID_JUNK RUBY_ID_JUNK
22484#define ID_INTERNAL RUBY_ID_INTERNAL
22485#define symIFUNC ID2SYM(idIFUNC)
22486#define symCFUNC ID2SYM(idCFUNC)
22487#define RUBY_TOKEN_DOT2 128
22488#define RUBY_TOKEN_DOT3 129
22489#define RUBY_TOKEN_BDOT2 130
22490#define RUBY_TOKEN_BDOT3 131
22491#define RUBY_TOKEN_UPLUS 132
22492#define RUBY_TOKEN_UMINUS 133
22493#define RUBY_TOKEN_POW 134
22494#define RUBY_TOKEN_CMP 135
22495#define RUBY_TOKEN_LSHFT 136
22496#define RUBY_TOKEN_RSHFT 137
22497#define RUBY_TOKEN_LEQ 138
22498#define RUBY_TOKEN_GEQ 139
22499#define RUBY_TOKEN_EQ 140
22500#define RUBY_TOKEN_EQQ 141
22501#define RUBY_TOKEN_NEQ 142
22502#define RUBY_TOKEN_MATCH 143
22503#define RUBY_TOKEN_NMATCH 144
22504#define RUBY_TOKEN_AREF 145
22505#define RUBY_TOKEN_ASET 146
22506#define RUBY_TOKEN_COLON2 147
22507#define RUBY_TOKEN_ANDOP 148
22508#define RUBY_TOKEN_OROP 149
22509#define RUBY_TOKEN_ANDDOT 150
22510#define RUBY_TOKEN(t) RUBY_TOKEN_ ##t
22511#define RUBY_TOKEN2ID_TYPE(tok,type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM)
22512#define TOKEN2LOCALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_LOCAL)
22513#define TOKEN2INSTANCEID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_INSTANCE)
22514#define TOKEN2GLOBALID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_GLOBAL)
22515#define TOKEN2CONSTID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CONST)
22516#define TOKEN2CLASSID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_CLASS)
22517#define TOKEN2ATTRSETID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_ATTRSET)
22518#define DEFINE_LOCALID_FROM_TOKEN(n) id ##n = TOKEN2LOCALID(t ##n)
22519#define DEFINE_INSTANCEID_FROM_TOKEN(n) id ##n = TOKEN2INSTANCEID(t ##n)
22520#define DEFINE_GLOBALID_FROM_TOKEN(n) id ##n = TOKEN2GLOBALID(t ##n)
22521#define DEFINE_CONSTID_FROM_TOKEN(n) id ##n = TOKEN2CONSTID(t ##n)
22522#define DEFINE_CLASSID_FROM_TOKEN(n) id ##n = TOKEN2CLASSID(t ##n)
22523#define DEFINE_ATTRSETID_FROM_TOKEN(n) id ##n = TOKEN2ATTRSETID(t ##n)
22524#define RUBY_INTERNAL_H 1
22525#define LIKELY(x) RB_LIKELY(x)
22526#define UNLIKELY(x) RB_UNLIKELY(x)
22527#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
22528#define roomof(x,y) (((x) + (y) - 1) / (y))
22529#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
22530#define ACCESS_ONCE(type,x) (*((volatile type *)&(x)))
22531#define UNDEF_P RB_UNDEF_P
22532#define NIL_OR_UNDEF_P RB_NIL_OR_UNDEF_P
22533#undef RARRAY_AREF
22534#undef RClass
22535#undef RCLASS_SUPER
22536#undef NEWOBJ_OF
22537#undef RB_NEWOBJ_OF
22538#undef RB_OBJ_WRITE
22539#undef RHASH_IFNONE
22540#undef RHASH_SIZE
22541#undef RHASH_TBL
22542#undef RHASH_EMPTY_P
22543#undef RSTRUCT_LEN
22544#undef RSTRUCT_PTR
22545#undef RSTRUCT_SET
22546#undef RSTRUCT_GET
22547#define rb_ary_new_from_args(...) rb_nonexistent_symbol(__VA_ARGS__)
22548#define rb_io_fptr_finalize(...) rb_nonexistent_symbol(__VA_ARGS__)
22549#define rb_fstring_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22550#define rb_sym_intern_ascii_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
22551#define rb_funcallv(...) rb_nonexistent_symbol(__VA_ARGS__)
22552#define rb_method_basic_definition_p(...) rb_nonexistent_symbol(__VA_ARGS__)
22553#pragma GCC visibility push(default)
22554#pragma GCC visibility pop
22555#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
22556#define rp_m(msg,obj) do { fputs((msg), stderr); rb_obj_info_dump((VALUE)(obj)); } while (0)
22557#define bp() ruby_debug_breakpoint()
22558#define RBOOL(v) ((v) ? Qtrue : Qfalse)
22559#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
22560#undef memcpy
22561#define memcpy ruby_nonempty_memcpy
22562#define INTERNAL_ARRAY_H
22563#define INTERNAL_STATIC_ASSERT_H
22564#define STATIC_ASSERT RBIMPL_STATIC_ASSERT
22565#define ARRAY_DEBUG (0+RUBY_DEBUG)
22566#define RARRAY_SHARED_FLAG ELTS_SHARED
22567#define RARRAY_SHARED_ROOT_FLAG FL_USER12
22568#define RARRAY_PTR_IN_USE_FLAG FL_USER14
22569#pragma GCC visibility push(default)
22570#pragma GCC visibility pop
22571#undef rb_ary_new_from_args
22572#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); })
22573#undef RARRAY_AREF
22574#define INTERNAL_BOP_H
22575#pragma GCC visibility push(default)
22576#pragma GCC visibility pop
22577#define INTEGER_REDEFINED_OP_FLAG (1 << 0)
22578#define FLOAT_REDEFINED_OP_FLAG (1 << 1)
22579#define STRING_REDEFINED_OP_FLAG (1 << 2)
22580#define ARRAY_REDEFINED_OP_FLAG (1 << 3)
22581#define HASH_REDEFINED_OP_FLAG (1 << 4)
22582#define SYMBOL_REDEFINED_OP_FLAG (1 << 6)
22583#define TIME_REDEFINED_OP_FLAG (1 << 7)
22584#define REGEXP_REDEFINED_OP_FLAG (1 << 8)
22585#define NIL_REDEFINED_OP_FLAG (1 << 9)
22586#define TRUE_REDEFINED_OP_FLAG (1 << 10)
22587#define FALSE_REDEFINED_OP_FLAG (1 << 11)
22588#define PROC_REDEFINED_OP_FLAG (1 << 12)
22589#define BASIC_OP_UNREDEFINED_P(op,klass) (LIKELY((ruby_vm_redefined_flag[(op)]&(klass)) == 0))
22590#define INTERNAL_SERIAL_H
22591#define SERIALT2NUM ULL2NUM
22592#define PRI_SERIALT_PREFIX PRI_LL_PREFIX
22593#define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
22594#define INTERNAL_VM_H
22595#undef rb_funcallv
22596#undef rb_method_basic_definition_p
22597#pragma GCC visibility push(default)
22598#pragma GCC visibility pop
22599#pragma GCC visibility push(default)
22600#pragma GCC visibility pop
22601#pragma GCC visibility push(default)
22602#pragma GCC visibility pop
22603#pragma GCC visibility push(default)
22604#pragma GCC visibility pop
22605#define RUBY_DTRACE_CREATE_HOOK(name,arg) RUBY_DTRACE_HOOK(name ##_CREATE, arg)
22606#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)
22607#define RUBY_METHOD_H 1
22608#define INTERNAL_IMEMO_H
22609#define INTERNAL_GC_H
22610#define INTERNAL_COMPILERS_H
22611#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
22612#define GCC_VERSION_SINCE(x,y,z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
22613#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))))))
22614#define MSC_VERSION_SINCE(_) RBIMPL_COMPILER_SINCE(MSVC, (_) / 100, (_) % 100, 0)
22615#define MSC_VERSION_BEFORE(_) RBIMPL_COMPILER_BEFORE(MSVC, (_) / 100, (_) % 100, 0)
22616#define __has_declspec_attribute(...) RBIMPL_HAS_DECLSPEC_ATTRIBUTE(__VA_ARGS__)
22617#define __has_warning(...) RBIMPL_HAS_WARNING(__VA_ARGS__)
22618#define RB_OBJ_BUILTIN_TYPE(obj) rb_obj_builtin_type(obj)
22619#define OBJ_BUILTIN_TYPE(obj) RB_OBJ_BUILTIN_TYPE(obj)
22620#define rb_obj_builtin_type(obj) __extension__({ VALUE arg_obj = (obj); RB_SPECIAL_CONST_P(arg_obj) ? -1 : (int)RB_BUILTIN_TYPE(arg_obj); })
22621#define FLEX_ARY_LEN
22622#define BITFIELD(type,name,size) type name : size
22623#define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
22624#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))
22625#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))
22626#define RB_NEWOBJ_OF(var,T,c,f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
22627#define RB_EC_NEWOBJ_OF(ec,var,T,c,f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
22628#define NEWOBJ_OF(var,T,c,f) RB_NEWOBJ_OF((var), T, (c), (f))
22629#define RVARGC_NEWOBJ_OF(var,T,c,f,s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
22630#define RB_OBJ_GC_FLAGS_MAX 6
22631#define INTERNAL_WARNINGS_H
22632#define COMPILER_WARNING_PUSH RBIMPL_WARNING_PUSH()
22633#define COMPILER_WARNING_POP RBIMPL_WARNING_POP()
22634#define COMPILER_WARNING_ERROR(flag) RBIMPL_WARNING_ERROR(flag)
22635#define COMPILER_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag)
22636#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; })
22637#define UNALIGNED_MEMBER_PTR(ptr,mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
22638#define RB_OBJ_WRITE(a,slot,b) rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), (VALUE)(b), __FILE__, __LINE__)
22639#define SIZE_POOL_COUNT 5
22640#define RCLASS_EXT_EMBEDDED (SIZE_POOL_COUNT > 1)
22641#pragma GCC visibility push(default)
22642#pragma GCC visibility pop
22643#pragma GCC visibility push(default)
22644#pragma GCC visibility pop
22645#define SIZED_REALLOC_N(x,y,z,w) REALLOC_N(x, y, z)
22646#define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
22647#define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
22648#define ruby_sized_xfree ruby_sized_xfree_inlined
22649#define IMEMO_DEBUG 0
22650#define IMEMO_MASK 0x0f
22651#define IMEMO_FL_USHIFT (FL_USHIFT + 4)
22652#define IMEMO_FL_USER0 FL_USER4
22653#define IMEMO_FL_USER1 FL_USER5
22654#define IMEMO_FL_USER2 FL_USER6
22655#define IMEMO_FL_USER3 FL_USER7
22656#define IMEMO_FL_USER4 FL_USER8
22657#define IMEMO_FL_USER5 FL_USER9
22658#define THROW_DATA_CONSUMED IMEMO_FL_USER0
22659#define THROW_DATA_P(err) imemo_throw_data_p((VALUE)err)
22660#define MEMO_CAST(m) ((struct MEMO *)(m))
22661#define MEMO_NEW(a,b,c) ((struct MEMO *)rb_imemo_new(imemo_memo, (VALUE)(a), (VALUE)(b), (VALUE)(c), 0))
22662#define MEMO_FOR(type,value) ((type *)RARRAY_PTR(value))
22663#define NEW_MEMO_FOR(type,value) ((value) = rb_ary_hidden_new_fill(type_roomof(type, VALUE)), MEMO_FOR(type, value))
22664#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))
22665#pragma GCC visibility push(default)
22666#pragma GCC visibility pop
22667#define IMEMO_TYPE_P(v,t) imemo_type_p((VALUE)v, t)
22668#pragma GCC diagnostic push
22669#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22670#pragma GCC diagnostic pop
22671#pragma GCC diagnostic push
22672#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
22673#pragma GCC diagnostic pop
22674#define END_OF_ENUMERATION(key)
22675#define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
22676#define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
22677#define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
22678#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags |= IMEMO_FL_USER3)
22679#define METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4)
22680#define METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4)
22681#define METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5)
22682#define METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5)
22683#define VM_METHOD_TYPE_MINIMUM_BITS 4
22684#define rb_iseq_t rb_iseq_t
22685#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
22686#define UNDEFINED_REFINED_METHOD_P(def) ((def)->type == VM_METHOD_TYPE_REFINED && UNDEFINED_METHOD_ENTRY_P((def)->body.refined.orig_me))
22687#pragma GCC visibility push(default)
22688#pragma GCC visibility pop
22689#define RUBY_NODE_H 1
22690#define RNODE(obj) ((struct RNode *)(obj))
22691#define NODE_FL_NEWLINE (((VALUE)1)<<7)
22692#define NODE_TYPESHIFT 8
22693#define NODE_TYPEMASK (((VALUE)0x7f)<<NODE_TYPESHIFT)
22694#define nd_type(n) ((int) (((n)->flags & NODE_TYPEMASK)>>NODE_TYPESHIFT))
22695#define nd_set_type(n,t) rb_node_set_type(n, t)
22696#define nd_init_type(n,t) (n)->flags=(((n)->flags&~NODE_TYPEMASK)|((((unsigned long)(t))<<NODE_TYPESHIFT)&NODE_TYPEMASK))
22697#define NODE_LSHIFT (NODE_TYPESHIFT+7)
22698#define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
22699#define nd_line(n) (int)(((SIGNED_VALUE)(n)->flags)>>NODE_LSHIFT)
22700#define nd_set_line(n,l) (n)->flags=(((n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
22701#define nd_first_column(n) ((int)((n)->nd_loc.beg_pos.column))
22702#define nd_set_first_column(n,v) ((n)->nd_loc.beg_pos.column = (v))
22703#define nd_first_lineno(n) ((int)((n)->nd_loc.beg_pos.lineno))
22704#define nd_set_first_lineno(n,v) ((n)->nd_loc.beg_pos.lineno = (v))
22705#define nd_first_loc(n) ((n)->nd_loc.beg_pos)
22706#define nd_set_first_loc(n,v) (nd_first_loc(n) = (v))
22707#define nd_last_column(n) ((int)((n)->nd_loc.end_pos.column))
22708#define nd_set_last_column(n,v) ((n)->nd_loc.end_pos.column = (v))
22709#define nd_last_lineno(n) ((int)((n)->nd_loc.end_pos.lineno))
22710#define nd_set_last_lineno(n,v) ((n)->nd_loc.end_pos.lineno = (v))
22711#define nd_last_loc(n) ((n)->nd_loc.end_pos)
22712#define nd_set_last_loc(n,v) (nd_last_loc(n) = (v))
22713#define nd_node_id(n) ((n)->node_id)
22714#define nd_set_node_id(n,id) ((n)->node_id = (id))
22715#define nd_head u1.node
22716#define nd_alen u2.argc
22717#define nd_next u3.node
22718#define nd_cond u1.node
22719#define nd_body u2.node
22720#define nd_else u3.node
22721#define nd_resq u2.node
22722#define nd_ensr u3.node
22723#define nd_1st u1.node
22724#define nd_2nd u2.node
22725#define nd_stts u1.node
22726#define nd_entry u3.id
22727#define nd_vid u1.id
22728#define nd_var u1.node
22729#define nd_iter u3.node
22730#define nd_value u2.node
22731#define nd_aid u3.id
22732#define nd_lit u1.value
22733#define nd_recv u1.node
22734#define nd_mid u2.id
22735#define nd_args u3.node
22736#define nd_ainfo u3.args
22737#define nd_defn u3.node
22738#define nd_cpath u1.node
22739#define nd_super u3.node
22740#define nd_beg u1.node
22741#define nd_end u2.node
22742#define nd_state u3.state
22743#define nd_nth u2.argc
22744#define nd_alias u1.id
22745#define nd_orig u2.id
22746#define nd_undef u2.node
22747#define nd_brace u2.argc
22748#define nd_pconst u1.node
22749#define nd_pkwargs u2.node
22750#define nd_pkwrestarg u3.node
22751#define nd_apinfo u3.apinfo
22752#define nd_fpinfo u3.fpinfo
22753#define nd_tbl u1.tbl
22754#define nd_pid u1.id
22755#define nd_plen u2.argc
22756#define nd_cflag u2.id
22757#define nd_cval u3.value
22758#define nd_rval u2.value
22759#define nd_tag u1.id
22760#define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
22761#define NEW_NODE_WITH_LOCALS(t,a1,a2,loc) node_newnode_with_locals(p, (t),(VALUE)(a1),(VALUE)(a2),loc)
22762#define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
22763#define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
22764#define NEW_SCOPE(a,b,loc) NEW_NODE_WITH_LOCALS(NODE_SCOPE,b,a,loc)
22765#define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
22766#define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
22767#define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
22768#define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
22769#define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
22770#define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc)
22771#define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
22772#define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc)
22773#define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
22774#define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
22775#define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc)
22776#define NEW_FOR_MASGN(v,loc) NEW_NODE(NODE_FOR_MASGN,v,0,0,loc)
22777#define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
22778#define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
22779#define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
22780#define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
22781#define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
22782#define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
22783#define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
22784#define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
22785#define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
22786#define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
22787#define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
22788#define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
22789#define NEW_LIST(a,loc) NEW_NODE(NODE_LIST,a,1,0,loc)
22790#define NEW_ZLIST(loc) NEW_NODE(NODE_ZLIST,0,0,0,loc)
22791#define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
22792#define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
22793#define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,v,loc)
22794#define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
22795#define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
22796#define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
22797#define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
22798#define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
22799#define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
22800#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)
22801#define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
22802#define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
22803#define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
22804#define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
22805#define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,v,loc)
22806#define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
22807#define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
22808#define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
22809#define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
22810#define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
22811#define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
22812#define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
22813#define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
22814#define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
22815#define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
22816#define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
22817#define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
22818#define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
22819#define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
22820#define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
22821#define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
22822#define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
22823#define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
22824#define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
22825#define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
22826#define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
22827#define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
22828#define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
22829#define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
22830#define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
22831#define NEW_KW_ARG(i,v,loc) NEW_NODE(NODE_KW_ARG,i,v,0,loc)
22832#define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
22833#define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
22834#define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
22835#define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
22836#define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
22837#define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
22838#define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
22839#define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
22840#define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
22841#define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
22842#define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
22843#define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
22844#define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
22845#define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
22846#define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
22847#define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,1,loc)
22848#define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
22849#define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
22850#define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
22851#define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
22852#define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
22853#define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
22854#define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
22855#define NEW_ERROR(loc) NEW_NODE(NODE_ERROR,0,0,0,loc)
22856#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
22857#define NODE_REQUIRED_KEYWORD_P(node) ((node)->nd_value == NODE_SPECIAL_REQUIRED_KEYWORD)
22858#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
22859#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
22860#define NODE_SPECIAL_EXCESSIVE_COMMA ((ID)1)
22861#define NODE_SPECIAL_NO_REST_KEYWORD ((NODE *)-1)
22862#pragma GCC visibility push(default)
22863#pragma GCC visibility pop
22864#define RUBY_ATOMIC_H
22865#define RUBY_ATOMIC_GENERIC_MACRO 1
22866#define RUBY_ATOMIC_FETCH_ADD(var,val) rbimpl_atomic_fetch_add(&(var), (val))
22867#define RUBY_ATOMIC_FETCH_SUB(var,val) rbimpl_atomic_fetch_sub(&(var), (val))
22868#define RUBY_ATOMIC_OR(var,val) rbimpl_atomic_or(&(var), (val))
22869#define RUBY_ATOMIC_EXCHANGE(var,val) rbimpl_atomic_exchange(&(var), (val))
22870#define RUBY_ATOMIC_CAS(var,oldval,newval) rbimpl_atomic_cas(&(var), (oldval), (newval))
22871#define RUBY_ATOMIC_SET(var,val) rbimpl_atomic_set(&(var), (val))
22872#define RUBY_ATOMIC_ADD(var,val) rbimpl_atomic_add(&(var), (val))
22873#define RUBY_ATOMIC_SUB(var,val) rbimpl_atomic_sub(&(var), (val))
22874#define RUBY_ATOMIC_INC(var) rbimpl_atomic_inc(&(var))
22875#define RUBY_ATOMIC_DEC(var) rbimpl_atomic_dec(&(var))
22876#define RUBY_ATOMIC_SIZE_INC(var) rbimpl_atomic_size_inc(&(var))
22877#define RUBY_ATOMIC_SIZE_DEC(var) rbimpl_atomic_size_dec(&(var))
22878#define RUBY_ATOMIC_SIZE_EXCHANGE(var,val) rbimpl_atomic_size_exchange(&(var), (val))
22879#define RUBY_ATOMIC_SIZE_CAS(var,oldval,newval) rbimpl_atomic_size_cas(&(var), (oldval), (newval))
22880#define RUBY_ATOMIC_SIZE_ADD(var,val) rbimpl_atomic_size_add(&(var), (val))
22881#define RUBY_ATOMIC_SIZE_SUB(var,val) rbimpl_atomic_size_sub(&(var), (val))
22882#define RUBY_ATOMIC_PTR_EXCHANGE(var,val) RBIMPL_CAST(rbimpl_atomic_ptr_exchange((void **)&(var), (void *)val))
22883#define RUBY_ATOMIC_PTR_CAS(var,oldval,newval) RBIMPL_CAST(rbimpl_atomic_ptr_cas((void **)&(var), (oldval), (newval)))
22884#define RUBY_ATOMIC_VALUE_EXCHANGE(var,val) rbimpl_atomic_value_exchange(&(var), (val))
22885#define RUBY_ATOMIC_VALUE_CAS(var,oldval,newval) rbimpl_atomic_value_cas(&(var), (oldval), (newval))
22886#define ATOMIC_ADD(var,val) RUBY_ATOMIC_ADD(var, val)
22887#define ATOMIC_CAS(var,oldval,newval) RUBY_ATOMIC_CAS(var, oldval, newval)
22888#define ATOMIC_DEC(var) RUBY_ATOMIC_DEC(var)
22889#define ATOMIC_EXCHANGE(var,val) RUBY_ATOMIC_EXCHANGE(var, val)
22890#define ATOMIC_FETCH_ADD(var,val) RUBY_ATOMIC_FETCH_ADD(var, val)
22891#define ATOMIC_FETCH_SUB(var,val) RUBY_ATOMIC_FETCH_SUB(var, val)
22892#define ATOMIC_INC(var) RUBY_ATOMIC_INC(var)
22893#define ATOMIC_OR(var,val) RUBY_ATOMIC_OR(var, val)
22894#define ATOMIC_PTR_CAS(var,oldval,newval) RUBY_ATOMIC_PTR_CAS(var, oldval, newval)
22895#define ATOMIC_PTR_EXCHANGE(var,val) RUBY_ATOMIC_PTR_EXCHANGE(var, val)
22896#define ATOMIC_SET(var,val) RUBY_ATOMIC_SET(var, val)
22897#define ATOMIC_SIZE_ADD(var,val) RUBY_ATOMIC_SIZE_ADD(var, val)
22898#define ATOMIC_SIZE_CAS(var,oldval,newval) RUBY_ATOMIC_SIZE_CAS(var, oldval, newval)
22899#define ATOMIC_SIZE_DEC(var) RUBY_ATOMIC_SIZE_DEC(var)
22900#define ATOMIC_SIZE_EXCHANGE(var,val) RUBY_ATOMIC_SIZE_EXCHANGE(var, val)
22901#define ATOMIC_SIZE_INC(var) RUBY_ATOMIC_SIZE_INC(var)
22902#define ATOMIC_SIZE_SUB(var,val) RUBY_ATOMIC_SIZE_SUB(var, val)
22903#define ATOMIC_SUB(var,val) RUBY_ATOMIC_SUB(var, val)
22904#define ATOMIC_VALUE_CAS(var,oldval,val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
22905#define ATOMIC_VALUE_EXCHANGE(var,val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
22906#define RUBY_VM_OPTS_H
22907#define OPT_TAILCALL_OPTIMIZATION 0
22908#define OPT_PEEPHOLE_OPTIMIZATION 1
22909#define OPT_SPECIALISED_INSTRUCTION 1
22910#define OPT_INLINE_CONST_CACHE 1
22911#define OPT_FROZEN_STRING_LITERAL 0
22912#define OPT_DEBUG_FROZEN_STRING_LITERAL 0
22913#define OPT_THREADED_CODE 0
22914#define OPT_DIRECT_THREADED_CODE (OPT_THREADED_CODE == 0)
22915#define OPT_TOKEN_THREADED_CODE (OPT_THREADED_CODE == 1)
22916#define OPT_CALL_THREADED_CODE (OPT_THREADED_CODE == 2)
22917#define OPT_CHECKED_RUN 1
22918#define OPT_INLINE_METHOD_CACHE 1
22919#define OPT_GLOBAL_METHOD_CACHE 1
22920#define OPT_BLOCKINLINING 0
22921#define OPT_IC_FOR_IVAR 1
22922#define OPT_OPERANDS_UNIFICATION 1
22923#define OPT_INSTRUCTIONS_UNIFICATION 0
22924#define OPT_UNIFY_ALL_COMBINATION 0
22925#define OPT_STACK_CACHING 0
22926#define OPT_SUPPORT_JOKE 0
22927#define OPT_SUPPORT_CALL_C_FUNCTION 0
22928#define VM_COLLECT_USAGE_DETAILS 0
22929#define RUBY_SHAPE_H
22930#define SIZEOF_SHAPE_T 4
22931#define SHAPE_IN_BASIC_FLAGS 1
22932#define MAX_IVARS (attr_index_t)(-1)
22933#define SHAPE_ID_NUM_BITS 32
22934#define SHAPE_MASK (((uintptr_t)1 << SHAPE_ID_NUM_BITS) - 1)
22935#define SHAPE_FLAG_MASK (((VALUE)-1) >> SHAPE_ID_NUM_BITS)
22936#define SHAPE_FLAG_SHIFT ((SIZEOF_VALUE * 8) - SHAPE_ID_NUM_BITS)
22937#define SHAPE_BITMAP_SIZE 16384
22938#define SHAPE_MAX_VARIATIONS 8
22939#define MAX_SHAPE_ID (SHAPE_MASK - 1)
22940#define INVALID_SHAPE_ID SHAPE_MASK
22941#define ROOT_SHAPE_ID 0x0
22942#define SPECIAL_CONST_SHAPE_ID (SIZE_POOL_COUNT * 2)
22943#define OBJ_TOO_COMPLEX_SHAPE_ID (SPECIAL_CONST_SHAPE_ID + 1)
22944#pragma GCC visibility push(default)
22945#pragma GCC visibility pop
22946#pragma GCC visibility push(default)
22947#pragma GCC visibility pop
22948#define RUBY_THREAD_NATIVE_H 1
22949#define _SCHED_H_
22950#define _SYS_SCHED_H_
22951#define SCHED_OTHER 3
22952#define SCHED_FIFO 1
22953#define SCHED_RR 2
22954#define _PTHREAD_H
22955#define PTHREAD_CANCEL_ASYNCHRONOUS 1
22956#define PTHREAD_CANCEL_ENABLE 0
22957#define PTHREAD_CANCEL_DEFERRED 0
22958#define PTHREAD_CANCEL_DISABLE 1
22959#define PTHREAD_CANCELED ((void *)-1)
22960#define PTHREAD_COND_INITIALIZER (pthread_cond_t)21
22961#define PTHREAD_CREATE_DETACHED 1
22962#define PTHREAD_CREATE_JOINABLE 0
22963#define PTHREAD_EXPLICIT_SCHED 1
22964#define PTHREAD_INHERIT_SCHED 0
22965#define PTHREAD_MUTEX_RECURSIVE 0
22966#define PTHREAD_MUTEX_ERRORCHECK 1
22967#define PTHREAD_MUTEX_NORMAL 2
22968#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
22969#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP (pthread_mutex_t)18
22970#define PTHREAD_NORMAL_MUTEX_INITIALIZER_NP (pthread_mutex_t)19
22971#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP (pthread_mutex_t)20
22972#define PTHREAD_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER_NP
22973#define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 }
22974#define PTHREAD_PROCESS_SHARED 1
22975#define PTHREAD_PROCESS_PRIVATE 0
22976#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)22
22977#define PTHREAD_SCOPE_PROCESS 0
22978#define PTHREAD_SCOPE_SYSTEM 1
22979#define PTHREAD_BARRIER_SERIAL_THREAD (-1)
22980#define pthread_cleanup_push(_fn,_arg) { __pthread_cleanup_handler __cleanup_handler = { _fn, _arg, NULL }; _pthread_cleanup_push( &__cleanup_handler );
22981#define pthread_cleanup_pop(_execute) _pthread_cleanup_pop( _execute ); }
22982#pragma GCC visibility push(default)
22983#pragma GCC visibility pop
22984#define VM_INSN_INFO_TABLE_IMPL 2
22985#define RUBY_NSIG NSIG
22986#define RUBY_SIGCHLD (SIGCLD)
22987#define SIGCHLD_LOSSY (0)
22988#define WAITPID_USE_SIGCHLD (RUBY_SIGCHLD || SIGCHLD_LOSSY)
22989#define USE_SIGALTSTACK
22990#define RB_ALTSTACK_INIT(var,altstack) var = rb_register_sigaltstack(altstack)
22991#define RB_ALTSTACK_FREE(var) free(var)
22992#define RB_ALTSTACK(var) var
22993#define RUBY_THREAD_PTHREAD_H
22994#define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
22995#define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
22996#undef except
22997#undef try
22998#undef leave
22999#undef finally
23000#define RB_THREAD_LOCAL_SPECIFIER _Thread_local
23001#pragma GCC visibility push(default)
23002#pragma GCC visibility pop
23003#define RUBY_VM_THREAD_MODEL 2
23004#define TAG_NONE RUBY_TAG_NONE
23005#define TAG_RETURN RUBY_TAG_RETURN
23006#define TAG_BREAK RUBY_TAG_BREAK
23007#define TAG_NEXT RUBY_TAG_NEXT
23008#define TAG_RETRY RUBY_TAG_RETRY
23009#define TAG_REDO RUBY_TAG_REDO
23010#define TAG_RAISE RUBY_TAG_RAISE
23011#define TAG_THROW RUBY_TAG_THROW
23012#define TAG_FATAL RUBY_TAG_FATAL
23013#define TAG_MASK RUBY_TAG_MASK
23014#define CoreDataFromValue(obj,type) (type*)DATA_PTR(obj)
23015#define GetCoreDataFromValue(obj,type,ptr) ((ptr) = CoreDataFromValue((obj), type))
23016#define PATHOBJ_PATH 0
23017#define PATHOBJ_REALPATH 1
23018#define ISEQ_IS_SIZE(body) (body->ic_size + body->ivc_size + body->ise_size + body->icvarc_size)
23019#define ISEQ_IS_IC_ENTRY(body,idx) (body->is_entries[(idx) + body->ise_size + body->icvarc_size + body->ivc_size].ic_cache);
23020#define ISEQ_BODY(iseq) ((iseq)->body)
23021#define EXTSTATIC 0
23022#define USE_LAZY_LOAD 0
23023#define GetVMPtr(obj,ptr) GetCoreDataFromValue((obj), rb_vm_t, (ptr))
23024#define VM_GLOBAL_CC_CACHE_TABLE_SIZE 1023
23025#define RUBY_VM_SIZE_ALIGN 4096
23026#define RUBY_VM_THREAD_VM_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
23027#define RUBY_VM_THREAD_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
23028#define RUBY_VM_THREAD_MACHINE_STACK_SIZE ( 128 * 1024 * sizeof(VALUE))
23029#define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
23030#define RUBY_VM_FIBER_VM_STACK_SIZE ( 16 * 1024 * sizeof(VALUE))
23031#define RUBY_VM_FIBER_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE))
23032#define RUBY_VM_FIBER_MACHINE_STACK_SIZE ( 64 * 1024 * sizeof(VALUE))
23033#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE))
23034#define VM_DEBUG_BP_CHECK 0
23035#define VM_DEBUG_VERIFY_METHOD_CACHE (VMDEBUG != 0)
23036#define rb_execution_context_t rb_execution_context_t
23037#define VM_CORE_H_EC_DEFINED 1
23038#define VM_DEFINECLASS_TYPE(x) ((rb_vm_defineclass_type_t)(x) & VM_DEFINECLASS_TYPE_MASK)
23039#define VM_DEFINECLASS_FLAG_SCOPED 0x08
23040#define VM_DEFINECLASS_FLAG_HAS_SUPERCLASS 0x10
23041#define VM_DEFINECLASS_SCOPED_P(x) ((x) & VM_DEFINECLASS_FLAG_SCOPED)
23042#define VM_DEFINECLASS_HAS_SUPERCLASS_P(x) ((x) & VM_DEFINECLASS_FLAG_HAS_SUPERCLASS)
23043#pragma GCC visibility push(default)
23044#pragma GCC visibility pop
23045#define GetProcPtr(obj,ptr) GetCoreDataFromValue((obj), rb_proc_t, (ptr))
23046#pragma GCC visibility push(default)
23047#pragma GCC visibility pop
23048#define GetBindingPtr(obj,ptr) GetCoreDataFromValue((obj), rb_binding_t, (ptr))
23049#define VM_CHECKMATCH_TYPE_MASK 0x03
23050#define VM_CHECKMATCH_ARRAY 0x04
23051#define VM_TAGGED_PTR_SET(p,tag) ((VALUE)(p) | (tag))
23052#define VM_TAGGED_PTR_REF(v,mask) ((void *)((v) & ~mask))
23053#define GC_GUARDED_PTR(p) VM_TAGGED_PTR_SET((p), 0x01)
23054#define GC_GUARDED_PTR_REF(p) VM_TAGGED_PTR_REF((p), 0x03)
23055#define GC_GUARDED_PTR_P(p) (((VALUE)(p)) & 0x01)
23056#define VM_ENV_DATA_SIZE ( 3)
23057#define VM_ENV_DATA_INDEX_ME_CREF (-2)
23058#define VM_ENV_DATA_INDEX_SPECVAL (-1)
23059#define VM_ENV_DATA_INDEX_FLAGS ( 0)
23060#define VM_ENV_DATA_INDEX_ENV ( 1)
23061#define VM_ENV_INDEX_LAST_LVAR (-VM_ENV_DATA_SIZE)
23062#define RUBYVM_CFUNC_FRAME_P(cfp) (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_CFUNC)
23063#define VM_GUARDED_PREV_EP(ep) GC_GUARDED_PTR(ep)
23064#define VM_BLOCK_HANDLER_NONE 0
23065#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
23066#define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
23067#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp,ecfp) ((void *)(ecfp) > (void *)(cfp))
23068#define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
23069#define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
23070#pragma GCC visibility push(default)
23071#pragma GCC visibility pop
23072#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)))
23073#define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]
23074#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)
23075#define CHECK_VM_STACK_OVERFLOW(cfp,margin) CHECK_VM_STACK_OVERFLOW0((cfp), (cfp)->sp, (margin))
23076#pragma GCC visibility push(default)
23077#pragma GCC visibility pop
23078#define GET_VM() rb_current_vm()
23079#define GET_RACTOR() rb_current_ractor()
23080#define GET_THREAD() rb_current_thread()
23081#define GET_EC() rb_current_execution_context(true)
23082#define RUBY_VM_SET_TIMER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TIMER_INTERRUPT_MASK)
23083#define RUBY_VM_SET_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, PENDING_INTERRUPT_MASK)
23084#define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
23085#define RUBY_VM_SET_TRAP_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TRAP_INTERRUPT_MASK)
23086#define RUBY_VM_SET_TERMINATE_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TERMINATE_INTERRUPT_MASK)
23087#define RUBY_VM_SET_VM_BARRIER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, VM_BARRIER_INTERRUPT_MASK)
23088#define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
23089#define RUBY_VM_CHECK_INTS(ec) rb_vm_check_ints(ec)
23090#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)
23091#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)
23092#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)
23093#pragma GCC visibility push(default)
23094#define RUBY_EVENT_COVERAGE_LINE 0x010000
23095#define RUBY_EVENT_COVERAGE_BRANCH 0x020000
23096#pragma GCC visibility pop
23097#define PASS_PASSED_BLOCK_HANDLER_EC(ec) pass_passed_block_handler(ec)
23098#define PASS_PASSED_BLOCK_HANDLER() pass_passed_block_handler(GET_EC())
23099#define ruby_setjmp(env) RUBY_SETJMP(env)
23100#define ruby_longjmp(env,val) RUBY_LONGJMP((env),(val))
23101#define __ERRNO_H__
23102#define __error_t_defined 1
23103#define _SYS_ERRNO_H_
23104#define errno (*__errno())
23105#define __errno_r(ptr) _REENT_ERRNO(ptr)
23106#define EPERM 1
23107#define ENOENT 2
23108#define ESRCH 3
23109#define EINTR 4
23110#define EIO 5
23111#define ENXIO 6
23112#define E2BIG 7
23113#define ENOEXEC 8
23114#define EBADF 9
23115#define ECHILD 10
23116#define EAGAIN 11
23117#define ENOMEM 12
23118#define EACCES 13
23119#define EFAULT 14
23120#define ENOTBLK 15
23121#define EBUSY 16
23122#define EEXIST 17
23123#define EXDEV 18
23124#define ENODEV 19
23125#define ENOTDIR 20
23126#define EISDIR 21
23127#define EINVAL 22
23128#define ENFILE 23
23129#define EMFILE 24
23130#define ENOTTY 25
23131#define ETXTBSY 26
23132#define EFBIG 27
23133#define ENOSPC 28
23134#define ESPIPE 29
23135#define EROFS 30
23136#define EMLINK 31
23137#define EPIPE 32
23138#define EDOM 33
23139#define ERANGE 34
23140#define ENOMSG 35
23141#define EIDRM 36
23142#define ECHRNG 37
23143#define EL2NSYNC 38
23144#define EL3HLT 39
23145#define EL3RST 40
23146#define ELNRNG 41
23147#define EUNATCH 42
23148#define ENOCSI 43
23149#define EL2HLT 44
23150#define EDEADLK 45
23151#define ENOLCK 46
23152#define EBADE 50
23153#define EBADR 51
23154#define EXFULL 52
23155#define ENOANO 53
23156#define EBADRQC 54
23157#define EBADSLT 55
23158#define EDEADLOCK 56
23159#define EBFONT 57
23160#define ENOSTR 60
23161#define ENODATA 61
23162#define ETIME 62
23163#define ENOSR 63
23164#define ENONET 64
23165#define ENOPKG 65
23166#define EREMOTE 66
23167#define ENOLINK 67
23168#define EADV 68
23169#define ESRMNT 69
23170#define ECOMM 70
23171#define EPROTO 71
23172#define EMULTIHOP 74
23173#define ELBIN 75
23174#define EDOTDOT 76
23175#define EBADMSG 77
23176#define EFTYPE 79
23177#define ENOTUNIQ 80
23178#define EBADFD 81
23179#define EREMCHG 82
23180#define ELIBACC 83
23181#define ELIBBAD 84
23182#define ELIBSCN 85
23183#define ELIBMAX 86
23184#define ELIBEXEC 87
23185#define ENOSYS 88
23186#define ENMFILE 89
23187#define ENOTEMPTY 90
23188#define ENAMETOOLONG 91
23189#define ELOOP 92
23190#define EOPNOTSUPP 95
23191#define EPFNOSUPPORT 96
23192#define ECONNRESET 104
23193#define ENOBUFS 105
23194#define EAFNOSUPPORT 106
23195#define EPROTOTYPE 107
23196#define ENOTSOCK 108
23197#define ENOPROTOOPT 109
23198#define ESHUTDOWN 110
23199#define ECONNREFUSED 111
23200#define EADDRINUSE 112
23201#define ECONNABORTED 113
23202#define ENETUNREACH 114
23203#define ENETDOWN 115
23204#define ETIMEDOUT 116
23205#define EHOSTDOWN 117
23206#define EHOSTUNREACH 118
23207#define EINPROGRESS 119
23208#define EALREADY 120
23209#define EDESTADDRREQ 121
23210#define EMSGSIZE 122
23211#define EPROTONOSUPPORT 123
23212#define ESOCKTNOSUPPORT 124
23213#define EADDRNOTAVAIL 125
23214#define ENETRESET 126
23215#define EISCONN 127
23216#define ENOTCONN 128
23217#define ETOOMANYREFS 129
23218#define EPROCLIM 130
23219#define EUSERS 131
23220#define EDQUOT 132
23221#define ESTALE 133
23222#define ENOTSUP 134
23223#define ENOMEDIUM 135
23224#define ENOSHARE 136
23225#define ECASECLASH 137
23226#define EILSEQ 138
23227#define EOVERFLOW 139
23228#define ECANCELED 140
23229#define ENOTRECOVERABLE 141
23230#define EOWNERDEAD 142
23231#define ESTRPIPE 143
23232#define EWOULDBLOCK EAGAIN
23233#define __ELASTERROR 2000
23234#define _SYS_PARAM_H
23235#define __need_NULL
23236#undef __need_ptrdiff_t
23237#undef __need_size_t
23238#undef __need_wchar_t
23239#undef NULL
23240#define NULL ((void *)0)
23241#undef __need_NULL
23242#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
23243#define NOFILE OPEN_MAX
23244#define NGROUPS NGROUPS_MAX
23245#define HZ 1000
23246#define MAXHOSTNAMELEN 128
23247#define MAXPATHLEN PATH_MAX
23248#define MAXSYMLINKS SYMLOOP_MAX
23249#define DEV_BSIZE 1024
23250#define NBBY 8
23251#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
23252#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
23253#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
23254#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
23255#define howmany(x,y) (((x)+((y)-1))/(y))
23256#define rounddown(x,y) (((x)/(y))*(y))
23257#define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
23258#define roundup2(x,y) (((x)+((y)-1))&(~((y)-1)))
23259#define powerof2(x) ((((x)-1)&(x))==0)
23260#define MIN(a,b) (((a)<(b))?(a):(b))
23261#define MAX(a,b) (((a)>(b))?(a):(b))
23262#define SAVE_ROOT_JMPBUF(th,stmt) do if (true) { stmt; } else if (th) { } while (0)
23263#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);
23264#define EC_POP_TAG() _ec->tag = _tag.prev; } while (0)
23265#define EC_TMPPOP_TAG() _ec->tag = _tag.prev
23266#define EC_REPUSH_TAG() (void)(_ec->tag = &_tag)
23267#define VAR_FROM_MEMORY(var) (var)
23268#define VAR_INITIALIZED(var) ((void)&(var))
23269#define VAR_NOCLOBBERED(var) var
23270#define EC_EXEC_TAG() (ruby_setjmp(_tag.buf) ? rb_ec_tag_state(VAR_FROM_MEMORY(_ec)) : (EC_REPUSH_TAG(), 0))
23271#define EC_JUMP_TAG(ec,st) rb_ec_tag_jump(ec, st)
23272#define INTERNAL_EXCEPTION_P(exc) FIXNUM_P(exc)
23273#define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1
23274#define CREF_FL_OMOD_SHARED IMEMO_FL_USER2
23275#define CREF_FL_SINGLETON IMEMO_FL_USER3
23276#pragma GCC diagnostic push
23277#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23278#pragma GCC diagnostic pop
23279#define rb_ec_raised_set(ec,f) ((ec)->raised_flag |= (f))
23280#define rb_ec_raised_reset(ec,f) ((ec)->raised_flag &= ~(f))
23281#define rb_ec_raised_p(ec,f) (((ec)->raised_flag & (f)) != 0)
23282#define rb_ec_raised_clear(ec) ((ec)->raised_flag = 0)
23283#define CharNext(p) rb_char_next(p)
23284#define RUBY_GC_H 1
23285#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
23286#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)
23287#define RUBY_MARK_FREE_DEBUG 0
23288#define RUBY_MARK_ENTER(msg)
23289#define RUBY_MARK_LEAVE(msg)
23290#define RUBY_FREE_ENTER(msg)
23291#define RUBY_FREE_LEAVE(msg)
23292#define RUBY_GC_INFO if(0)printf
23293#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} } while (0)
23294#define RUBY_MARK_UNLESS_NULL(ptr) do { VALUE markobj = (ptr); if (RTEST(markobj)) {rb_gc_mark(markobj);} } while (0)
23295#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
23296#define STACK_UPPER(x,a,b) (b)
23297#define STACK_GROW_DIR_DETECTION
23298#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
23299#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
23300#pragma GCC visibility push(default)
23301#pragma GCC visibility pop
23302#define INTERNAL_COMPILE_H
23303#pragma GCC visibility push(default)
23304#pragma GCC visibility pop
23305#define INTERNAL_CONT_H
23306#define RUBY_ISEQ_H 1
23307#define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
23308#define ISEQ_MINOR_VERSION ((unsigned int)ruby_api_version[1])
23309#define ISEQ_MBITS_SIZE sizeof(iseq_bits_t)
23310#define ISEQ_MBITS_BITLENGTH (ISEQ_MBITS_SIZE * CHAR_BIT)
23311#define ISEQ_MBITS_SET(buf,i) (buf[(i) / ISEQ_MBITS_BITLENGTH] |= ((iseq_bits_t)1 << ((i) % ISEQ_MBITS_BITLENGTH)))
23312#define ISEQ_MBITS_SET_P(buf,i) ((buf[(i) / ISEQ_MBITS_BITLENGTH] >> ((i) % ISEQ_MBITS_BITLENGTH)) & 0x1)
23313#define ISEQ_MBITS_BUFLEN(size) roomof(size, ISEQ_MBITS_BITLENGTH)
23314#define USE_ISEQ_NODE_ID 1
23315#define ISEQ_COVERAGE(iseq) ISEQ_BODY(iseq)->variable.coverage
23316#define ISEQ_COVERAGE_SET(iseq,cov) RB_OBJ_WRITE(iseq, &ISEQ_BODY(iseq)->variable.coverage, cov)
23317#define ISEQ_LINE_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
23318#define ISEQ_BRANCH_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_BRANCHES)
23319#define ISEQ_PC2BRANCHINDEX(iseq) ISEQ_BODY(iseq)->variable.pc2branchindex
23320#define ISEQ_PC2BRANCHINDEX_SET(iseq,h) RB_OBJ_WRITE(iseq, &ISEQ_BODY(iseq)->variable.pc2branchindex, h)
23321#define ISEQ_FLIP_CNT(iseq) ISEQ_BODY(iseq)->variable.flip_count
23322#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)
23323#define ISEQ_NOT_LOADED_YET IMEMO_FL_USER1
23324#define ISEQ_USE_COMPILE_DATA IMEMO_FL_USER2
23325#define ISEQ_TRANSLATED IMEMO_FL_USER3
23326#define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW(((VALUE)iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
23327#pragma GCC visibility push(default)
23328#define INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE (512)
23329#pragma GCC visibility pop
23330#define INTERNAL_ERROR_H
23331#define INTERNAL_STRING_H
23332#define RUBY_ENCODING_H 1
23333#define RUBY_INTERNAL_ENCODING_CODERANGE_H
23334#pragma GCC visibility push(default)
23335#define ENC_CODERANGE_MASK RUBY_ENC_CODERANGE_MASK
23336#define ENC_CODERANGE_UNKNOWN RUBY_ENC_CODERANGE_UNKNOWN
23337#define ENC_CODERANGE_7BIT RUBY_ENC_CODERANGE_7BIT
23338#define ENC_CODERANGE_VALID RUBY_ENC_CODERANGE_VALID
23339#define ENC_CODERANGE_BROKEN RUBY_ENC_CODERANGE_BROKEN
23340#define ENC_CODERANGE_CLEAN_P(cr) RB_ENC_CODERANGE_CLEAN_P(cr)
23341#define ENC_CODERANGE(obj) RB_ENC_CODERANGE(obj)
23342#define ENC_CODERANGE_ASCIIONLY(obj) RB_ENC_CODERANGE_ASCIIONLY(obj)
23343#define ENC_CODERANGE_SET(obj,cr) RB_ENC_CODERANGE_SET(obj,cr)
23344#define ENC_CODERANGE_CLEAR(obj) RB_ENC_CODERANGE_CLEAR(obj)
23345#define ENC_CODERANGE_AND(a,b) RB_ENC_CODERANGE_AND(a, b)
23346#define ENCODING_CODERANGE_SET(obj,encindex,cr) RB_ENCODING_CODERANGE_SET(obj, encindex, cr)
23347#define RB_ENC_CODERANGE RB_ENC_CODERANGE
23348#define RB_ENC_CODERANGE_AND RB_ENC_CODERANGE_AND
23349#define RB_ENC_CODERANGE_ASCIIONLY RB_ENC_CODERANGE_ASCIIONLY
23350#define RB_ENC_CODERANGE_CLEAN_P RB_ENC_CODERANGE_CLEAN_P
23351#define RB_ENC_CODERANGE_CLEAR RB_ENC_CODERANGE_CLEAR
23352#define RB_ENC_CODERANGE_SET RB_ENC_CODERANGE_SET
23353#pragma GCC visibility pop
23354#define RUBY_INTERNAL_ENCODING_CTYPE_H
23355#define ONIGMO_H
23356#define ONIGMO_VERSION_MAJOR 6
23357#define ONIGMO_VERSION_MINOR 1
23358#define ONIGMO_VERSION_TEENY 3
23359#define ONIG_EXTERN RUBY_EXTERN
23360#pragma GCC visibility push(default)
23361#define UChar OnigUChar
23362#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)
23363#define OnigCodePointMaskWidth 3
23364#define OnigCodePointMask ((1<<OnigCodePointMaskWidth)-1)
23365#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
23366#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)
23367#define OnigSpecialIndexShift 3
23368#define OnigSpecialIndexWidth 10
23369#define ONIGENC_CASE_UPCASE (1<<13)
23370#define ONIGENC_CASE_DOWNCASE (1<<14)
23371#define ONIGENC_CASE_TITLECASE (1<<15)
23372#define ONIGENC_CASE_SPECIAL_OFFSET 3
23373#define ONIGENC_CASE_UP_SPECIAL (1<<16)
23374#define ONIGENC_CASE_DOWN_SPECIAL (1<<17)
23375#define ONIGENC_CASE_MODIFIED (1<<18)
23376#define ONIGENC_CASE_FOLD (1<<19)
23377#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20)
23378#define ONIGENC_CASE_FOLD_LITHUANIAN (1<<21)
23379#define ONIGENC_CASE_ASCII_ONLY (1<<22)
23380#define ONIGENC_CASE_IS_TITLECASE (1<<23)
23381#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30)
23382#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
23383#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag
23384#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3
23385#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13
23386#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0])
23387#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1]
23388#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2]
23389#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)
23390#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)
23391#define ONIGENC_CODE_TO_MBC_MAXLEN 7
23392#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18
23393#define ONIGENC_CTYPE_NEWLINE 0
23394#define ONIGENC_CTYPE_ALPHA 1
23395#define ONIGENC_CTYPE_BLANK 2
23396#define ONIGENC_CTYPE_CNTRL 3
23397#define ONIGENC_CTYPE_DIGIT 4
23398#define ONIGENC_CTYPE_GRAPH 5
23399#define ONIGENC_CTYPE_LOWER 6
23400#define ONIGENC_CTYPE_PRINT 7
23401#define ONIGENC_CTYPE_PUNCT 8
23402#define ONIGENC_CTYPE_SPACE 9
23403#define ONIGENC_CTYPE_UPPER 10
23404#define ONIGENC_CTYPE_XDIGIT 11
23405#define ONIGENC_CTYPE_WORD 12
23406#define ONIGENC_CTYPE_ALNUM 13
23407#define ONIGENC_CTYPE_ASCII 14
23408#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII
23409#define ONIGENC_FLAG_NONE 0U
23410#define ONIGENC_FLAG_UNICODE 1U
23411#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e)
23412#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)
23413#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)
23414#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
23415#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)
23416#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
23417#define ONIGENC_IS_MBC_WORD(enc,s,end) ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
23418#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)
23419#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE)
23420#define ONIGENC_NAME(enc) ((enc)->name)
23421#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
23422#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) (enc)->is_allowed_reverse_match(s,end,enc)
23423#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) (enc)->left_adjust_char_head(start, s, end, enc)
23424#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
23425#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)
23426#define ONIGENC_STEP_BACK(enc,start,s,end,n) onigenc_step_back((enc),(start),(s),(end),(n))
23427#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n)
23428#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r))
23429#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r)
23430#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1)
23431#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1)
23432#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n))
23433#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1)
23434#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r))
23435#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc)
23436#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen(p,e,enc)
23437#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)
23438#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)
23439#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len)
23440#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc)
23441#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc)
23442#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc)
23443#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc)
23444#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) (enc)->property_name_to_ctype(enc,p,end)
23445#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc)
23446#define ONIGENC_IS_CODE_NEWLINE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
23447#define ONIGENC_IS_CODE_GRAPH(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
23448#define ONIGENC_IS_CODE_PRINT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
23449#define ONIGENC_IS_CODE_ALNUM(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
23450#define ONIGENC_IS_CODE_ALPHA(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
23451#define ONIGENC_IS_CODE_LOWER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
23452#define ONIGENC_IS_CODE_UPPER(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
23453#define ONIGENC_IS_CODE_CNTRL(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
23454#define ONIGENC_IS_CODE_PUNCT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
23455#define ONIGENC_IS_CODE_SPACE(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
23456#define ONIGENC_IS_CODE_BLANK(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
23457#define ONIGENC_IS_CODE_DIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
23458#define ONIGENC_IS_CODE_XDIGIT(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
23459#define ONIGENC_IS_CODE_WORD(enc,code) ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
23460#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
23461#define ONIG_NREGION 4
23462#define ONIG_MAX_CAPTURE_GROUP_NUM 32767
23463#define ONIG_MAX_BACKREF_NUM 1000
23464#define ONIG_MAX_REPEAT_NUM 100000
23465#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000
23466#define ONIG_MAX_ERROR_MESSAGE_LEN 90
23467#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE
23468#define ONIG_OPTION_NONE 0U
23469#define ONIG_OPTION_IGNORECASE 1U
23470#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
23471#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
23472#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE
23473#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)
23474#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)
23475#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)
23476#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)
23477#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
23478#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
23479#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
23480#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
23481#define ONIG_OPTION_NOTBOS (ONIG_OPTION_NOTEOL << 1)
23482#define ONIG_OPTION_NOTEOS (ONIG_OPTION_NOTBOS << 1)
23483#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_NOTEOS << 1)
23484#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
23485#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
23486#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
23487#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF
23488#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
23489#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
23490#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))
23491#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)
23492#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
23493#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)
23494#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)
23495#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)
23496#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)
23497#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
23498#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58)
23499#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG)
23500#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
23501#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
23502#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython)
23503#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
23504#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0)
23505#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1)
23506#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2)
23507#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3)
23508#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4)
23509#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5)
23510#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6)
23511#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7)
23512#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8)
23513#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9)
23514#define ONIG_SYN_OP_VBAR_ALT (1U<<10)
23515#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11)
23516#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12)
23517#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13)
23518#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14)
23519#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15)
23520#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16)
23521#define ONIG_SYN_OP_BRACKET_CC (1U<<17)
23522#define ONIG_SYN_OP_ESC_W_WORD (1U<<18)
23523#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19)
23524#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20)
23525#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21)
23526#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22)
23527#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23)
23528#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24)
23529#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25)
23530#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26)
23531#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27)
23532#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28)
23533#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29)
23534#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30)
23535#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31)
23536#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0)
23537#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1)
23538#define ONIG_SYN_OP2_OPTION_PERL (1U<<2)
23539#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3)
23540#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4)
23541#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5)
23542#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6)
23543#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7)
23544#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8)
23545#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9)
23546#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10)
23547#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11)
23548#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12)
23549#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13)
23550#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14)
23551#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15)
23552#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16)
23553#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17)
23554#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19)
23555#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20)
23556#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21)
23557#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22)
23558#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23)
23559#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24)
23560#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25)
23561#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26)
23562#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27)
23563#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28)
23564#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29)
23565#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30)
23566#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT (1U<<31)
23567#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31)
23568#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0)
23569#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1)
23570#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2)
23571#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3)
23572#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4)
23573#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5)
23574#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6)
23575#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7)
23576#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)
23577#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9)
23578#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)
23579#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP (1U<<11)
23580#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20)
23581#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21)
23582#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22)
23583#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23)
23584#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24)
23585#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25)
23586#define ONIG_SYN_WARN_CC_DUP (1U<<26)
23587#define ONIG_META_CHAR_ESCAPE 0
23588#define ONIG_META_CHAR_ANYCHAR 1
23589#define ONIG_META_CHAR_ANYTIME 2
23590#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3
23591#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4
23592#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5
23593#define ONIG_INEFFECTIVE_META_CHAR 0
23594#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)
23595#define ONIG_NORMAL 0
23596#define ONIG_MISMATCH -1
23597#define ONIG_NO_SUPPORT_CONFIG -2
23598#define ONIGERR_MEMORY -5
23599#define ONIGERR_TYPE_BUG -6
23600#define ONIGERR_PARSER_BUG -11
23601#define ONIGERR_STACK_BUG -12
23602#define ONIGERR_UNDEFINED_BYTECODE -13
23603#define ONIGERR_UNEXPECTED_BYTECODE -14
23604#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
23605#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16
23606#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21
23607#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
23608#define ONIGERR_INVALID_ARGUMENT -30
23609#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
23610#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
23611#define ONIGERR_EMPTY_CHAR_CLASS -102
23612#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103
23613#define ONIGERR_END_PATTERN_AT_ESCAPE -104
23614#define ONIGERR_END_PATTERN_AT_META -105
23615#define ONIGERR_END_PATTERN_AT_CONTROL -106
23616#define ONIGERR_META_CODE_SYNTAX -108
23617#define ONIGERR_CONTROL_CODE_SYNTAX -109
23618#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110
23619#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111
23620#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112
23621#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113
23622#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114
23623#define ONIGERR_NESTED_REPEAT_OPERATOR -115
23624#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116
23625#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117
23626#define ONIGERR_END_PATTERN_IN_GROUP -118
23627#define ONIGERR_UNDEFINED_GROUP_OPTION -119
23628#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121
23629#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122
23630#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123
23631#define ONIGERR_INVALID_CONDITION_PATTERN -124
23632#define ONIGERR_TOO_BIG_NUMBER -200
23633#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201
23634#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202
23635#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203
23636#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204
23637#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205
23638#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206
23639#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207
23640#define ONIGERR_INVALID_BACKREF -208
23641#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209
23642#define ONIGERR_TOO_MANY_CAPTURE_GROUPS -210
23643#define ONIGERR_TOO_SHORT_DIGITS -211
23644#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212
23645#define ONIGERR_EMPTY_GROUP_NAME -214
23646#define ONIGERR_INVALID_GROUP_NAME -215
23647#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216
23648#define ONIGERR_UNDEFINED_NAME_REFERENCE -217
23649#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218
23650#define ONIGERR_MULTIPLEX_DEFINED_NAME -219
23651#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220
23652#define ONIGERR_NEVER_ENDING_RECURSION -221
23653#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
23654#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
23655#define ONIGERR_INVALID_CODE_POINT_VALUE -400
23656#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
23657#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
23658#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402
23659#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403
23660#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
23661#define ONIG_IS_CAPTURE_HISTORY_GROUP(r,i) ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
23662#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1
23663#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2
23664#define ONIG_TRAVERSE_CALLBACK_AT_BOTH ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
23665#define ONIG_REGION_NOTPOS -1
23666#define ONIG_NULL_WARN onig_null_warn
23667#define ONIG_CHAR_TABLE_SIZE 256
23668#pragma GCC visibility pop
23669#define RUBY_INTERNAL_ENCODING_ENCODING_H
23670#define ONIGURUMA_H
23671#define ONIGURUMA
23672#define ONIGURUMA_VERSION_MAJOR ONIGMO_VERSION_MAJOR
23673#define ONIGURUMA_VERSION_MINOR ONIGMO_VERSION_MINOR
23674#define ONIGURUMA_VERSION_TEENY ONIGMO_VERSION_TEENY
23675#pragma GCC visibility push(default)
23676#define ENCODING_INLINE_MAX RUBY_ENCODING_INLINE_MAX
23677#define ENCODING_SHIFT RUBY_ENCODING_SHIFT
23678#define ENCODING_MASK RUBY_ENCODING_MASK
23679#define ENCODING_SET_INLINED(obj,i) RB_ENCODING_SET_INLINED(obj,i)
23680#define ENCODING_SET(obj,i) RB_ENCODING_SET(obj,i)
23681#define ENCODING_GET_INLINED(obj) RB_ENCODING_GET_INLINED(obj)
23682#define ENCODING_GET(obj) RB_ENCODING_GET(obj)
23683#define ENCODING_IS_ASCII8BIT(obj) RB_ENCODING_IS_ASCII8BIT(obj)
23684#define ENCODING_MAXNAMELEN RUBY_ENCODING_MAXNAMELEN
23685#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret)
23686#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret)
23687#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret)
23688#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret)
23689#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret)
23690#pragma GCC visibility pop
23691#define RB_ENCODING_GET RB_ENCODING_GET
23692#define RB_ENCODING_GET_INLINED RB_ENCODING_GET_INLINED
23693#define RB_ENCODING_IS_ASCII8BIT RB_ENCODING_IS_ASCII8BIT
23694#define RB_ENCODING_SET RB_ENCODING_SET
23695#define RB_ENCODING_SET_INLINED RB_ENCODING_SET_INLINED
23696#define rb_enc_asciicompat rb_enc_asciicompat
23697#define rb_enc_code_to_mbclen rb_enc_code_to_mbclen
23698#define rb_enc_codepoint rb_enc_codepoint
23699#define rb_enc_left_char_head rb_enc_left_char_head
23700#define rb_enc_mbc_to_codepoint rb_enc_mbc_to_codepoint
23701#define rb_enc_mbcput rb_enc_mbcput
23702#define rb_enc_mbmaxlen rb_enc_mbmaxlen
23703#define rb_enc_mbminlen rb_enc_mbminlen
23704#define rb_enc_name rb_enc_name
23705#define rb_enc_prev_char rb_enc_prev_char
23706#define rb_enc_right_char_head rb_enc_right_char_head
23707#define rb_enc_step_back rb_enc_step_back
23708#define rb_enc_str_asciicompat_p rb_enc_str_asciicompat_p
23709#pragma GCC visibility push(default)
23710#pragma GCC visibility pop
23711#define rb_enc_is_newline rb_enc_is_newline
23712#define rb_enc_isalnum rb_enc_isalnum
23713#define rb_enc_isalpha rb_enc_isalpha
23714#define rb_enc_isascii rb_enc_isascii
23715#define rb_enc_isctype rb_enc_isctype
23716#define rb_enc_isdigit rb_enc_isdigit
23717#define rb_enc_islower rb_enc_islower
23718#define rb_enc_isprint rb_enc_isprint
23719#define rb_enc_iscntrl rb_enc_iscntrl
23720#define rb_enc_ispunct rb_enc_ispunct
23721#define rb_enc_isspace rb_enc_isspace
23722#define rb_enc_isupper rb_enc_isupper
23723#define RUBY_INTERNAL_ENCODING_PATHNAME_H
23724#pragma GCC visibility push(default)
23725#pragma GCC visibility pop
23726#define RUBY_INTERNAL_ENCODING_RE_H
23727#pragma GCC visibility push(default)
23728#pragma GCC visibility pop
23729#define RUBY_INTERNAL_ENCODING_SPRINTF_H
23730#pragma GCC visibility push(default)
23731#pragma GCC visibility pop
23732#define RUBY_INTERNAL_ENCODING_STRING_H
23733#pragma GCC visibility push(default)
23734#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)))
23735#define rb_enc_str_new_cstr(str,enc) ((RBIMPL_CONSTANT_P(str) ? rbimpl_enc_str_new_cstr : rb_enc_str_new_cstr) ((str), (enc)))
23736#pragma GCC visibility pop
23737#define RUBY_INTERNAL_ENCODING_SYMBOL_H
23738#pragma GCC visibility push(default)
23739#pragma GCC visibility pop
23740#define RUBY_INTERNAL_ENCODING_TRANSCODE_H
23741#pragma GCC visibility push(default)
23742#define ECONV_ERROR_HANDLER_MASK RUBY_ECONV_ERROR_HANDLER_MASK
23743#define ECONV_INVALID_MASK RUBY_ECONV_INVALID_MASK
23744#define ECONV_INVALID_REPLACE RUBY_ECONV_INVALID_REPLACE
23745#define ECONV_UNDEF_MASK RUBY_ECONV_UNDEF_MASK
23746#define ECONV_UNDEF_REPLACE RUBY_ECONV_UNDEF_REPLACE
23747#define ECONV_UNDEF_HEX_CHARREF RUBY_ECONV_UNDEF_HEX_CHARREF
23748#define ECONV_DECORATOR_MASK RUBY_ECONV_DECORATOR_MASK
23749#define ECONV_NEWLINE_DECORATOR_MASK RUBY_ECONV_NEWLINE_DECORATOR_MASK
23750#define ECONV_NEWLINE_DECORATOR_READ_MASK RUBY_ECONV_NEWLINE_DECORATOR_READ_MASK
23751#define ECONV_NEWLINE_DECORATOR_WRITE_MASK RUBY_ECONV_NEWLINE_DECORATOR_WRITE_MASK
23752#define ECONV_UNIVERSAL_NEWLINE_DECORATOR RUBY_ECONV_UNIVERSAL_NEWLINE_DECORATOR
23753#define ECONV_CRLF_NEWLINE_DECORATOR RUBY_ECONV_CRLF_NEWLINE_DECORATOR
23754#define ECONV_CR_NEWLINE_DECORATOR RUBY_ECONV_CR_NEWLINE_DECORATOR
23755#define ECONV_LF_NEWLINE_DECORATOR RUBY_ECONV_LF_NEWLINE_DECORATOR
23756#define ECONV_XML_TEXT_DECORATOR RUBY_ECONV_XML_TEXT_DECORATOR
23757#define ECONV_XML_ATTR_CONTENT_DECORATOR RUBY_ECONV_XML_ATTR_CONTENT_DECORATOR
23758#define ECONV_STATEFUL_DECORATOR_MASK RUBY_ECONV_STATEFUL_DECORATOR_MASK
23759#define ECONV_XML_ATTR_QUOTE_DECORATOR RUBY_ECONV_XML_ATTR_QUOTE_DECORATOR
23760#define ECONV_DEFAULT_NEWLINE_DECORATOR RUBY_ECONV_DEFAULT_NEWLINE_DECORATOR
23761#define ECONV_PARTIAL_INPUT RUBY_ECONV_PARTIAL_INPUT
23762#define ECONV_AFTER_OUTPUT RUBY_ECONV_AFTER_OUTPUT
23763#pragma GCC visibility pop
23764#define STR_NOEMBED FL_USER1
23765#define STR_SHARED FL_USER2
23766#undef rb_fstring_cstr
23767#pragma GCC visibility push(default)
23768#pragma GCC visibility pop
23769#pragma GCC visibility push(default)
23770#pragma GCC visibility pop
23771#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
23772#define rb_fstring_literal(str) rb_fstring_lit(str)
23773#define rb_fstring_enc_lit(str,enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
23774#define rb_fstring_enc_literal(str,enc) rb_fstring_enc_lit(str, enc)
23775#define rb_fstring_cstr(str) (__builtin_constant_p(str) ? rb_fstring_new((str), (long)strlen(str)) : (rb_fstring_cstr)(str))
23776#undef Check_Type
23777#define rb_raise_static(e,m) rb_raise_cstr_i((e), rb_str_new_static((m), rb_strlen_lit(m)))
23778#define rb_sys_fail_path(path) rb_sys_fail_path_in(RUBY_FUNCTION_NAME_STRING, path)
23779#define rb_syserr_fail_path(err,path) rb_syserr_fail_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23780#define rb_syserr_new_path(err,path) rb_syserr_new_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
23781#define rb_warn_deprecated_to_remove_at(removal,...) rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
23782#define RUBY_VERSION_SINCE(major,minor) 0
23783#define RUBY_VERSION_BEFORE(major,minor) 0
23784#define RBIMPL_TODO0(x)
23785#define RBIMPL_TODO(message) RBIMPL_TODO0("TODO: " message)
23786#define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
23787#pragma GCC visibility push(default)
23788#pragma GCC visibility pop
23789#define INTERNAL_EVAL_H
23790#define id_signo ruby_static_id_signo
23791#define id_status ruby_static_id_status
23792#define INTERNAL_INITS_H
23793#define INTERNAL_OBJECT_H
23794#pragma GCC visibility push(default)
23795#pragma GCC visibility pop
23796#pragma GCC visibility push(default)
23797#pragma GCC visibility pop
23798#define INTERNAL_PARSE_H
23799#pragma GCC visibility push(default)
23800#pragma GCC visibility pop
23801#define INTERNAL_PROC_H
23802#pragma GCC visibility push(default)
23803#pragma GCC visibility pop
23804#define INTERNAL_RE_H
23805#pragma GCC visibility push(default)
23806#pragma GCC visibility pop
23807#define INTERNAL_SYMBOL_H
23808#undef rb_sym_intern_ascii_cstr
23809#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))
23810#define INTERNAL_THREAD_H
23811#define COVERAGE_INDEX_LINES 0
23812#define COVERAGE_INDEX_BRANCHES 1
23813#define COVERAGE_TARGET_LINES 1
23814#define COVERAGE_TARGET_BRANCHES 2
23815#define COVERAGE_TARGET_METHODS 4
23816#define COVERAGE_TARGET_ONESHOT_LINES 8
23817#define COVERAGE_TARGET_EVAL 16
23818#pragma GCC visibility push(default)
23819#pragma GCC visibility pop
23820#pragma GCC visibility push(default)
23821#pragma GCC visibility pop
23822#define INTERNAL_SANITIZERS_H
23823#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) NO_SANITIZE_ADDRESS(NOINLINE(x))
23824#undef NO_SANITIZE
23825#define NO_SANITIZE(x,y) COMPILER_WARNING_PUSH; COMPILER_WARNING_IGNORED(-Wattributes); __attribute__((__no_sanitize__(x))) y; COMPILER_WARNING_POP
23826#define __asan_poison_memory_region(x,y)
23827#define __asan_unpoison_memory_region(x,y)
23828#define __asan_region_is_poisoned(x,y) 0
23829#define __msan_allocated_memory(x,y) ((void)(x), (void)(y))
23830#define __msan_poison(x,y) ((void)(x), (void)(y))
23831#define __msan_unpoison(x,y) ((void)(x), (void)(y))
23832#define __msan_unpoison_string(x) ((void)(x))
23833#define VALGRIND_MAKE_MEM_DEFINED(p,n) 0
23834#define VALGRIND_MAKE_MEM_UNDEFINED(p,n) 0
23835#define INTERNAL_VARIABLE_H
23836#define CONSTANT_H
23837#define RUBY_ID_TABLE_H 1
23838#pragma GCC visibility push(default)
23839#pragma GCC visibility pop
23840#define RB_CONST_PRIVATE_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PRIVATE)
23841#define RB_CONST_PUBLIC_P(ce) (((ce)->flag & CONST_VISIBILITY_MASK) == CONST_PUBLIC)
23842#define RB_CONST_DEPRECATED_P(ce) ((ce)->flag & CONST_DEPRECATED)
23843#pragma GCC visibility push(default)
23844#pragma GCC visibility pop
23845#define ROBJECT_TRANSIENT_FLAG FL_USER2
23846#pragma GCC visibility push(default)
23847#pragma GCC visibility pop
23848#pragma GCC visibility push(default)
23849#pragma GCC visibility pop
23850#define RUBY_MJIT_H 1
23851#define RUBY_H 1
23852#define HAVE_RUBY_ATOMIC_H 1
23853#define HAVE_RUBY_DEBUG_H 1
23854#define HAVE_RUBY_DEFINES_H 1
23855#define HAVE_RUBY_ENCODING_H 1
23856#define HAVE_RUBY_FIBER_SCHEDULER_H 1
23857#define HAVE_RUBY_INTERN_H 1
23858#define HAVE_RUBY_IO_H 1
23859#define HAVE_RUBY_MEMORY_VIEW_H 1
23860#define HAVE_RUBY_MISSING_H 1
23861#define HAVE_RUBY_ONIGMO_H 1
23862#define HAVE_RUBY_ONIGURUMA_H 1
23863#define HAVE_RUBY_RACTOR_H 1
23864#define HAVE_RUBY_RANDOM_H 1
23865#define HAVE_RUBY_RE_H 1
23866#define HAVE_RUBY_REGEX_H 1
23867#define HAVE_RUBY_RUBY_H 1
23868#define HAVE_RUBY_ST_H 1
23869#define HAVE_RUBY_THREAD_H 1
23870#define HAVE_RUBY_THREAD_NATIVE_H 1
23871#define HAVE_RUBY_UTIL_H 1
23872#define HAVE_RUBY_VERSION_H 1
23873#define HAVE_RUBY_VM_H 1
23874#define MJIT_FUNC_STATE_P(jit_func) ((uintptr_t)(jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)
23875#pragma GCC visibility push(default)
23876#pragma GCC visibility pop
23877#define mjit_enabled true
23878#define YJIT_H 1
23879#define YJIT_STATS RUBY_DEBUG
23880#define RUBY_VM_H 1
23881#pragma GCC visibility push(default)
23882#pragma GCC visibility pop
23883#define RUBY_VM_CALLINFO_H
23884#define USE_DEBUG_COUNTER 0
23885#define RUBY_DEBUG_COUNTER_H 1
23886#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_ ##name,
23887#undef RB_DEBUG_COUNTER
23888#define RB_DEBUG_COUNTER_INC(type) ((void)0)
23889#define RB_DEBUG_COUNTER_INC_UNLESS(type,cond) (!!(cond))
23890#define RB_DEBUG_COUNTER_INC_IF(type,cond) (!!(cond))
23891#define RB_DEBUG_COUNTER_ADD(type,num) ((void)0)
23892#define RB_DEBUG_COUNTER_SETMAX(type,num) 0
23893#pragma GCC visibility push(default)
23894#pragma GCC visibility pop
23895#define INTERNAL_CLASS_H
23896#define RCLASS_EXT(c) ((rb_classext_t *)((char *)(c) + sizeof(struct RClass)))
23897#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
23898#define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
23899#define RCLASS_IVPTR(c) (RCLASS_EXT(c)->iv_ptr)
23900#define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl)
23901#define RCLASS_CC_TBL(c) (RCLASS_EXT(c)->cc_tbl)
23902#define RCLASS_CVC_TBL(c) (RCLASS_EXT(c)->cvc_tbl)
23903#define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_)
23904#define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class)
23905#define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
23906#define RCLASS_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->subclass_entry)
23907#define RCLASS_MODULE_SUBCLASS_ENTRY(c) (RCLASS_EXT(c)->module_subclass_entry)
23908#define RCLASS_ALLOCATOR(c) (RCLASS_EXT(c)->allocator)
23909#define RCLASS_SUBCLASSES(c) (RCLASS_EXT(c)->subclasses)
23910#define RCLASS_SUPERCLASS_DEPTH(c) (RCLASS_EXT(c)->superclass_depth)
23911#define RCLASS_SUPERCLASSES(c) (RCLASS_EXT(c)->superclasses)
23912#define RICLASS_IS_ORIGIN FL_USER0
23913#define RCLASS_CLONED FL_USER1
23914#define RCLASS_SUPERCLASSES_INCLUDE_SELF FL_USER2
23915#define RICLASS_ORIGIN_SHARED_MTBL FL_USER3
23916#pragma GCC visibility push(default)
23917#pragma GCC visibility pop
23918#pragma GCC diagnostic push
23919#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23920#pragma GCC diagnostic pop
23921#pragma GCC diagnostic push
23922#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23923#pragma GCC diagnostic pop
23924#pragma GCC diagnostic push
23925#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
23926#pragma GCC diagnostic pop
23927#define VM_CALL_ARGS_SPLAT (0x01 << VM_CALL_ARGS_SPLAT_bit)
23928#define VM_CALL_ARGS_BLOCKARG (0x01 << VM_CALL_ARGS_BLOCKARG_bit)
23929#define VM_CALL_FCALL (0x01 << VM_CALL_FCALL_bit)
23930#define VM_CALL_VCALL (0x01 << VM_CALL_VCALL_bit)
23931#define VM_CALL_ARGS_SIMPLE (0x01 << VM_CALL_ARGS_SIMPLE_bit)
23932#define VM_CALL_BLOCKISEQ (0x01 << VM_CALL_BLOCKISEQ_bit)
23933#define VM_CALL_KWARG (0x01 << VM_CALL_KWARG_bit)
23934#define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
23935#define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
23936#define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
23937#define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
23938#define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
23939#define VM_CALL_KW_SPLAT_MUT (0x01 << VM_CALL_KW_SPLAT_MUT_bit)
23940#define USE_EMBED_CI 1
23941#define CI_EMBED_TAG_bits 1
23942#define CI_EMBED_ARGC_bits 15
23943#define CI_EMBED_FLAG_bits 16
23944#define CI_EMBED_ID_bits 32
23945#define CI_EMBED_FLAG 0x01
23946#define CI_EMBED_ARGC_SHFT (CI_EMBED_TAG_bits)
23947#define CI_EMBED_ARGC_MASK ((((VALUE)1)<<CI_EMBED_ARGC_bits) - 1)
23948#define CI_EMBED_FLAG_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits)
23949#define CI_EMBED_FLAG_MASK ((((VALUE)1)<<CI_EMBED_FLAG_bits) - 1)
23950#define CI_EMBED_ID_SHFT (CI_EMBED_TAG_bits + CI_EMBED_ARGC_bits + CI_EMBED_FLAG_bits)
23951#define CI_EMBED_ID_MASK ((((VALUE)1)<<CI_EMBED_ID_bits) - 1)
23952#define vm_ci_new(mid,flag,argc,kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23953#define vm_ci_new_runtime(mid,flag,argc,kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
23954#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)
23955#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))
23956#define VM_CALLINFO_NOT_UNDER_GC IMEMO_FL_USER0
23957#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_, }
23958#define VM_CALLCACHE_UNMARKABLE FL_FREEZE
23959#define VM_CALLCACHE_ON_STACK FL_EXIVAR
23960#define vm_cc_empty() rb_vm_empty_cc()
23961#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, }
23962#define RUBY_DEBUG_H
23963#pragma GCC visibility push(default)
23964#define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
23965#define dp(v) ruby_debug_print_value(-1, 0, "", (v))
23966#define dpi(i) ruby_debug_print_id(-1, 0, "", (i))
23967#define dpn(n) ruby_debug_print_node(-1, 0, "", (n))
23968#pragma GCC visibility pop
23969#define USE_RUBY_DEBUG_LOG 0
23970#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())
23971#define _RUBY_DEBUG_LOG(...) ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__)
23972#define RUBY_DEBUG_LOG(...)
23973#define RUBY_DEBUG_LOG2(file,line,...)
23974#define RUBY_VM_EXEC_H
23975#define debugs
23976#define DEBUG_ENTER_INSN(insn)
23977#define DEBUG_END_INSN()
23978#define throwdebug if(0)ruby_debug_printf
23979#define USE_INSNS_COUNTER 0
23980#define LABEL(x) INSN_LABEL_ ##x
23981#define ELABEL(x) INSN_ELABEL_ ##x
23982#define LABEL_PTR(x) RB_GNUC_EXTENSION(&&LABEL(x))
23983#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));
23984#define INSN_DISPATCH_SIG(insn)
23985#define INSN_ENTRY(insn) LABEL(insn): INSN_ENTRY_SIG(insn);
23986#define TC_DISPATCH(insn) INSN_DISPATCH_SIG(insn); RB_GNUC_EXTENSION_BLOCK(goto *(void const *)GET_CURRENT_INSN()); ;
23987#define END_INSN(insn) DEBUG_END_INSN(); TC_DISPATCH(insn);
23988#define INSN_DISPATCH() TC_DISPATCH(__START__) {
23989#define END_INSNS_DISPATCH() rb_bug("unknown insn: %"PRIdVALUE, GET_CURRENT_INSN()); }
23990#define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
23991#define START_OF_ORIGINAL_INSN(x) if (0) goto start_of_ ##x; start_of_ ##x:
23992#define DISPATCH_ORIGINAL_INSN(x) goto start_of_ ##x;
23993#define VM_SP_CNT(ec,sp) ((sp) - (ec)->vm_stack)
23994#define THROW_EXCEPTION(exc) do { ec->errinfo = (VALUE)(exc); EC_JUMP_TAG(ec, ec->tag->state); } while (0)
23995#define SCREG(r) (reg_ ##r)
23996#define VM_DEBUG_STACKOVERFLOW 0
23997#define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp,margin)
23998#define INSN_LABEL2(insn,name) INSN_LABEL_ ## insn ## _ ## name
23999#define INSN_LABEL(x) INSN_LABEL2(NAME_OF_CURRENT_INSN, x)
24000#define RUBY_INSNHELPER_H
24001#pragma GCC visibility push(default)
24002#pragma GCC visibility pop
24003#define COLLECT_USAGE_INSN(insn)
24004#define COLLECT_USAGE_OPERAND(insn,n,op)
24005#define COLLECT_USAGE_REGISTER(reg,s)
24006#define PUSH(x) (SET_SV(x), INC_SP(1))
24007#define TOPN(n) (*(GET_SP()-(n)-1))
24008#define POPN(n) (DEC_SP(n))
24009#define POP() (DEC_SP(1))
24010#define STACK_ADDR_FROM_TOP(n) (GET_SP()-(n))
24011#define VM_REG_CFP (reg_cfp)
24012#define VM_REG_PC (VM_REG_CFP->pc)
24013#define VM_REG_SP (VM_REG_CFP->sp)
24014#define VM_REG_EP (VM_REG_CFP->ep)
24015#define RESTORE_REGS() do { VM_REG_CFP = ec->cfp; } while (0)
24016#define COLLECT_USAGE_REGISTER_HELPER(a,b,v) (v)
24017#define GET_PC() (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))
24018#define SET_PC(x) (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))
24019#define GET_CURRENT_INSN() (*GET_PC())
24020#define GET_OPERAND(n) (GET_PC()[(n)])
24021#define ADD_PC(n) (SET_PC(VM_REG_PC + (n)))
24022#define JUMP(dst) (SET_PC(VM_REG_PC + (dst)))
24023#define GET_CFP() (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))
24024#define GET_EP() (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))
24025#define SET_EP(x) (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))
24026#define GET_LEP() (VM_EP_LEP(GET_EP()))
24027#define GET_SP() (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))
24028#define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
24029#define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
24030#define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
24031#define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
24032#define GET_ISEQ() (GET_CFP()->iseq)
24033#define GET_PREV_EP(ep) ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))
24034#define GET_SELF() (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))
24035#define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
24036#define SETUP_CANARY(cond) if (cond) {} else {}
24037#define CHECK_CANARY(cond,insn) if (cond) {(void)(insn);}
24038#define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state)
24039#define INC_GLOBAL_CVAR_STATE() (++ruby_vm_global_cvar_state)
24040#define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
24041#define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
24042#define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
24043#define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
24044#define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
24045#define RUBY_RACTOR_H 1
24046#pragma GCC visibility push(default)
24047#define RB_RACTOR_LOCAL_STORAGE_TYPE_FREE (&rb_ractor_local_storage_type_free)
24048#pragma GCC visibility pop
24049#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)
24050#define RACTOR_CHECK_MODE (VM_CHECK_MODE || RUBY_DEBUG) && (SIZEOF_UINT64_T == SIZEOF_VALUE)
24051#pragma GCC visibility push(default)
24052#pragma GCC visibility pop
24053#define rb_ractor_set_current_ec(cr,ec) rb_ractor_set_current_ec_(cr, ec, __FILE__, __LINE__)
24054#define rb_ractor_confirm_belonging(obj) obj
24055#define RUBY_VM_SYNC_H
24056#define LOCATION_ARGS void
24057#define LOCATION_PARAMS
24058#define APPEND_LOCATION_ARGS
24059#define APPEND_LOCATION_PARAMS
24060#define RB_VM_LOCKED_P() rb_vm_locked_p()
24061#define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
24062#define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
24063#define RB_VM_LOCK_ENTER_CR_LEV(cr,levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
24064#define RB_VM_LOCK_LEAVE_CR_LEV(cr,levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
24065#define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
24066#define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
24067#define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
24068#define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
24069#define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
24070#define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
24071#define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
24072#define ASSERT_vm_locking()
24073#define ASSERT_vm_unlocking()
24074#define BUILTIN_H_INCLUDED
24075#define RB_BUILTIN_FUNCTION(_i,_name,_fname,_arity,_compiler) { .name = _i < 0 ? NULL : #_name, .func_ptr = (void *)_fname, .argc = _arity, .index = _i, .compiler = _compiler, }
24076#define _PROBES_H
24077#define DTRACE_PROBES_DISABLED 1
24078#define RUBY_DTRACE_METHOD_ENTRY_ENABLED() 0
24079#define RUBY_DTRACE_METHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
24080#define RUBY_DTRACE_METHOD_RETURN_ENABLED() 0
24081#define RUBY_DTRACE_METHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
24082#define RUBY_DTRACE_CMETHOD_ENTRY_ENABLED() 0
24083#define RUBY_DTRACE_CMETHOD_ENTRY(classname,methodname,filename,lineno) do {} while (0)
24084#define RUBY_DTRACE_CMETHOD_RETURN_ENABLED() 0
24085#define RUBY_DTRACE_CMETHOD_RETURN(classname,methodname,filename,lineno) do {} while (0)
24086#define RUBY_DTRACE_REQUIRE_ENTRY_ENABLED() 0
24087#define RUBY_DTRACE_REQUIRE_ENTRY(rquiredfile,filename,lineno) do {} while (0)
24088#define RUBY_DTRACE_REQUIRE_RETURN_ENABLED() 0
24089#define RUBY_DTRACE_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
24090#define RUBY_DTRACE_FIND_REQUIRE_ENTRY_ENABLED() 0
24091#define RUBY_DTRACE_FIND_REQUIRE_ENTRY(requiredfile,filename,lineno) do {} while (0)
24092#define RUBY_DTRACE_FIND_REQUIRE_RETURN_ENABLED() 0
24093#define RUBY_DTRACE_FIND_REQUIRE_RETURN(requiredfile,filename,lineno) do {} while (0)
24094#define RUBY_DTRACE_LOAD_ENTRY_ENABLED() 0
24095#define RUBY_DTRACE_LOAD_ENTRY(loadedfile,filename,lineno) do {} while (0)
24096#define RUBY_DTRACE_LOAD_RETURN_ENABLED() 0
24097#define RUBY_DTRACE_LOAD_RETURN(loadedfile,filename,lineno) do {} while (0)
24098#define RUBY_DTRACE_RAISE_ENABLED() 0
24099#define RUBY_DTRACE_RAISE(classname,filename,lineno) do {} while (0)
24100#define RUBY_DTRACE_OBJECT_CREATE_ENABLED() 0
24101#define RUBY_DTRACE_OBJECT_CREATE(classname,filename,lineno) do {} while (0)
24102#define RUBY_DTRACE_ARRAY_CREATE_ENABLED() 0
24103#define RUBY_DTRACE_ARRAY_CREATE(length,filename,lineno) do {} while (0)
24104#define RUBY_DTRACE_HASH_CREATE_ENABLED() 0
24105#define RUBY_DTRACE_HASH_CREATE(length,filename,lineno) do {} while (0)
24106#define RUBY_DTRACE_STRING_CREATE_ENABLED() 0
24107#define RUBY_DTRACE_STRING_CREATE(length,filename,lineno) do {} while (0)
24108#define RUBY_DTRACE_SYMBOL_CREATE_ENABLED() 0
24109#define RUBY_DTRACE_SYMBOL_CREATE(str,filename,lineno) do {} while (0)
24110#define RUBY_DTRACE_PARSE_BEGIN_ENABLED() 0
24111#define RUBY_DTRACE_PARSE_BEGIN(sourcefile,lineno) do {} while (0)
24112#define RUBY_DTRACE_PARSE_END_ENABLED() 0
24113#define RUBY_DTRACE_PARSE_END(sourcefile,lineno) do {} while (0)
24114#define RUBY_DTRACE_INSN_ENABLED() 0
24115#define RUBY_DTRACE_INSN(insns_name) do {} while (0)
24116#define RUBY_DTRACE_INSN_OPERAND_ENABLED() 0
24117#define RUBY_DTRACE_INSN_OPERAND(val,insns_name) do {} while (0)
24118#define RUBY_DTRACE_GC_MARK_BEGIN_ENABLED() 0
24119#define RUBY_DTRACE_GC_MARK_BEGIN() do {} while (0)
24120#define RUBY_DTRACE_GC_MARK_END_ENABLED() 0
24121#define RUBY_DTRACE_GC_MARK_END() do {} while (0)
24122#define RUBY_DTRACE_GC_SWEEP_BEGIN_ENABLED() 0
24123#define RUBY_DTRACE_GC_SWEEP_BEGIN() do {} while (0)
24124#define RUBY_DTRACE_GC_SWEEP_END_ENABLED() 0
24125#define RUBY_DTRACE_GC_SWEEP_END() do {} while (0)
24126#define RUBY_PROBES_HELPER_H
24127#pragma GCC visibility push(default)
24128#pragma GCC visibility pop
24129#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)
24130#define RUBY_DTRACE_METHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_ENTRY, ec, klass, id)
24131#define RUBY_DTRACE_METHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(METHOD_RETURN, ec, klass, id)
24132#define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_ENTRY, ec, klass, id)
24133#define RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec,klass,id) RUBY_DTRACE_METHOD_HOOK(CMETHOD_RETURN, ec, klass, id)
24134#pragma GCC diagnostic push
24135#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24136#pragma GCC diagnostic pop
24137#define INTERNAL_COMPAR_H
24138#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
24139#define CMP_OPTIMIZABLE(type) BASIC_OP_UNREDEFINED_P(BOP_CMP, type ##_REDEFINED_OP_FLAG)
24140#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))
24141#define INTERNAL_HASH_H
24142#define RHASH_AR_TABLE_MAX_SIZE SIZEOF_VALUE
24143#define RHASH_LEV_MASK (FL_USER13 | FL_USER14 | FL_USER15 | FL_USER16 | FL_USER17 | FL_USER18 | FL_USER19)
24144#define RHASH(obj) ((struct RHash *)(obj))
24145#pragma GCC visibility push(default)
24146#pragma GCC visibility pop
24147#pragma GCC visibility push(default)
24148#define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h, __FILE__, __LINE__)
24149#pragma GCC visibility pop
24150#define INTERNAL_NUMERIC_H
24151#define INTERNAL_BIGNUM_H
24152#define BDIGIT unsigned int
24153#define SIZEOF_BDIGIT SIZEOF_INT
24154#define BDIGIT_DBL unsigned LONG_LONG
24155#define BDIGIT_DBL_SIGNED LONG_LONG
24156#define PRI_BDIGIT_PREFIX ""
24157#define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
24158#define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
24159#define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
24160#define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
24161#define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
24162#define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
24163#define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
24164#define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
24165#define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
24166#define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
24167#define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
24168#define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
24169#define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
24170#define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
24171#define RBIGNUM(obj) ((struct RBignum *)(obj))
24172#define BIGNUM_SIGN_BIT FL_USER1
24173#define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
24174#define BIGNUM_EMBED_LEN_NUMBITS 3
24175#define BIGNUM_EMBED_LEN_MASK (~(~(VALUE)0U << BIGNUM_EMBED_LEN_NUMBITS) << BIGNUM_EMBED_LEN_SHIFT)
24176#define BIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
24177#define BIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*RBIMPL_RVALUE_EMBED_LEN_MAX/SIZEOF_ACTUAL_BDIGIT)
24178#pragma GCC visibility push(default)
24179#pragma GCC visibility pop
24180#pragma GCC visibility push(default)
24181#pragma GCC visibility pop
24182#define INTERNAL_BITS_H
24183#define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
24184#define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
24185#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))))
24186#define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
24187#define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
24188#define MUL_OVERFLOW_P(a,b) __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
24189#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)))
24190#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); })
24191#define MUL_OVERFLOW_LONG_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
24192#define MUL_OVERFLOW_LONG_P(a,b) MUL_OVERFLOW_P(a, b)
24193#define MUL_OVERFLOW_INT_P(a,b) MUL_OVERFLOW_P(a, b)
24194#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)))
24195#define swap16 ruby_swap16
24196#define swap32 ruby_swap32
24197#define swap64 ruby_swap64
24198#define INTERNAL_FIXNUM_H
24199#define DLONG int128_t
24200#define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
24201#define ROUND_TO(mode,even,up,down) ((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even : (mode) == RUBY_NUM_ROUND_HALF_UP ? up : down)
24202#define ROUND_FUNC(mode,name) ROUND_TO(mode, name ##_half_even, name ##_half_up, name ##_half_down)
24203#define ROUND_CALL(mode,name,args) ROUND_TO(mode, name ##_half_even args, name ##_half_up args, name ##_half_down args)
24204#define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP
24205#define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
24206#define roomof(x,y) (((x) + (y) - 1) / (y))
24207#define type_roomof(x,y) roomof(sizeof(x), sizeof(y))
24208#define RFLOAT(obj) ((struct RFloat *)(obj))
24209#define rb_float_value rb_float_value_inline
24210#define rb_float_new rb_float_new_inline
24211#pragma GCC visibility push(default)
24212#pragma GCC visibility pop
24213#pragma GCC visibility push(default)
24214#pragma GCC visibility pop
24215#define INTERNAL_RANDOM_H
24216#define INTERNAL_STRUCT_H
24217#define RSTRUCT(obj) ((struct RStruct *)(obj))
24218#define RSTRUCT_LEN internal_RSTRUCT_LEN
24219#define RSTRUCT_SET internal_RSTRUCT_SET
24220#define RSTRUCT_GET internal_RSTRUCT_GET
24221#pragma GCC diagnostic push
24222#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24223#pragma GCC diagnostic pop
24224#define RUBY_TOPLEVEL_VARIABLE_H
24225#define BIN(n) YARVINSN_ ##n
24226#define ASSERT_VM_INSTRUCTION_SIZE(array) STATIC_ASSERT(numberof_ ##array, numberof(array) == VM_INSTRUCTION_SIZE)
24227#define vm_check_canary(ec,sp)
24228#define vm_check_frame(a,b,c,d)
24229#define vm_push_frame_debug_counter_inc(ec,cfp,t)
24230#pragma GCC diagnostic push
24231#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24232#pragma GCC diagnostic pop
24233#pragma GCC diagnostic push
24234#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24235#pragma GCC diagnostic pop
24236#pragma GCC diagnostic push
24237#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24238#pragma GCC diagnostic pop
24239#pragma GCC diagnostic push
24240#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24241#pragma GCC diagnostic pop
24242#pragma GCC diagnostic push
24243#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24244#pragma GCC diagnostic pop
24245#define ractor_incidental_shareable_p(cond,val) (!(cond) || rb_ractor_shareable_p(val))
24246#define ractor_object_incidental_shareable_p(obj,val) ractor_incidental_shareable_p(rb_ractor_shareable_p(obj), val)
24247#define ATTR_INDEX_NOT_SET (attr_index_t)-1
24248#pragma GCC diagnostic push
24249#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24250#pragma GCC diagnostic pop
24251#pragma GCC diagnostic push
24252#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24253#pragma GCC diagnostic pop
24254#pragma GCC diagnostic push
24255#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24256#pragma GCC diagnostic pop
24257#pragma GCC diagnostic push
24258#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24259#pragma GCC diagnostic pop
24260#pragma GCC diagnostic push
24261#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24262#pragma GCC diagnostic pop
24263#pragma GCC diagnostic push
24264#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24265#pragma GCC diagnostic pop
24266#define EQ_UNREDEFINED_P(t) BASIC_OP_UNREDEFINED_P(BOP_EQ, t ##_REDEFINED_OP_FLAG)
24267#undef EQ_UNREDEFINED_P
24268#define CHECK_CMP_NAN(a,b)
24269#define KW_SPECIFIED_BITS_MAX (32-1)
24270#define USE_OPT_HIST 0
24271#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)))
24272#pragma GCC diagnostic push
24273#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24274#pragma GCC diagnostic pop
24275#pragma GCC diagnostic push
24276#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24277#pragma GCC diagnostic pop
24278#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; }
24279#pragma GCC diagnostic push
24280#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24281#pragma GCC diagnostic pop
24282#pragma GCC diagnostic push
24283#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24284#pragma GCC diagnostic pop
24285#define mexp_search_method vm_search_method_wrap
24286#define mexp_search_super vm_search_super_method
24287#define mexp_search_invokeblock vm_search_invokeblock
24288#define id_cmp idCmp
24289#undef id_cmp
24290#define IMEMO_CONST_CACHE_SHAREABLE IMEMO_FL_USER0
24291#pragma GCC diagnostic push
24292#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24293#pragma GCC diagnostic pop
24294#pragma GCC diagnostic push
24295#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24296#pragma GCC diagnostic pop
24297#pragma GCC diagnostic push
24298#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
24299#pragma GCC diagnostic pop
24300#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)
24301#undef VM_TRACE_HOOK
24302#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:1556
ruby_fl_type
The flags.
Definition fl_type.h:193
@ RUBY_FL_PROMOTED1
This flag has something to do with our garbage collector.
Definition fl_type.h:240
@ RUBY_FL_USER9
User-defined flag.
Definition fl_type.h:369
@ RUBY_FL_SINGLETON
This flag has something to do with an object's class.
Definition fl_type.h:430
@ RUBY_FL_USER8
User-defined flag.
Definition fl_type.h:368
@ RUBY_FL_USER11
User-defined flag.
Definition fl_type.h:371
@ RUBY_FL_USER5
User-defined flag.
Definition fl_type.h:365
@ RUBY_FL_TAINT
Definition fl_type.h:278
@ RUBY_FL_USER3
User-defined flag.
Definition fl_type.h:363
@ RUBY_FL_USER17
User-defined flag.
Definition fl_type.h:377
@ RUBY_FL_USER10
User-defined flag.
Definition fl_type.h:370
@ RUBY_FL_USER7
User-defined flag.
Definition fl_type.h:367
@ RUBY_FL_WB_PROTECTED
Definition fl_type.h:207
@ RUBY_FL_PROMOTED0
This flag has something to do with our garbage collector.
Definition fl_type.h:223
@ RUBY_FL_USER14
User-defined flag.
Definition fl_type.h:374
@ RUBY_FL_USER6
User-defined flag.
Definition fl_type.h:366
@ RUBY_FL_USER16
User-defined flag.
Definition fl_type.h:376
@ RUBY_FL_EXIVAR
This flag has something to do with instance variables.
Definition fl_type.h:345
@ RUBY_FL_UNTRUSTED
Definition fl_type.h:305
@ RUBY_FL_PROMOTED
This flag has something to do with our garbage collector.
Definition fl_type.h:257
@ RUBY_FL_USER0
User-defined flag.
Definition fl_type.h:360
@ RUBY_FL_FREEZE
This flag has something to do with data immutability.
Definition fl_type.h:356
@ RUBY_FL_USER15
User-defined flag.
Definition fl_type.h:375
@ RUBY_FL_SEEN_OBJ_ID
This flag has something to do with object IDs.
Definition fl_type.h:332
@ RUBY_FL_USER2
User-defined flag.
Definition fl_type.h:362
@ RUBY_FL_USER4
User-defined flag.
Definition fl_type.h:364
@ RUBY_FL_USER18
User-defined flag.
Definition fl_type.h:378
@ RUBY_FL_USER1
User-defined flag.
Definition fl_type.h:361
@ RUBY_FL_SHAREABLE
This flag has something to do with Ractor.
Definition fl_type.h:298
@ RUBY_FL_FINALIZE
This flag has something to do with finalisers.
Definition fl_type.h:271
@ RUBY_FL_USER19
User-defined flag.
Definition fl_type.h:380
@ RUBY_FL_USER13
User-defined flag.
Definition fl_type.h:373
@ RUBY_FL_USER12
User-defined flag.
Definition fl_type.h:372
VALUE rb_class_protected_instance_methods(int argc, const VALUE *argv, VALUE mod)
Identical to rb_class_instance_methods(), except it returns names of methods that are protected only.
Definition class.c:1819
void rb_include_module(VALUE klass, VALUE module)
Includes a module to a class.
Definition class.c:1090
VALUE rb_refinement_new(void)
Creates a new, anonymous refinement.
Definition class.c:985
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition class.c:888
VALUE rb_class_new(VALUE super)
Creates a new, anonymous class.
Definition class.c:325
VALUE rb_singleton_class_clone(VALUE obj)
Clones a singleton class.
Definition class.c:572
void rb_extend_object(VALUE obj, VALUE mod)
Extend the object with the module.
Definition eval.c:1689
void rb_prepend_module(VALUE klass, VALUE module)
Identical to rb_include_module(), except it "prepends" the passed module to the klass,...
Definition class.c:1345
VALUE rb_class_subclasses(VALUE klass)
Queries the class's direct descendants.
Definition class.c:1599
VALUE rb_singleton_class(VALUE obj)
Finds or creates the singleton class of the passed object.
Definition class.c:2201
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
Definition class.c:920
VALUE rb_class_attached_object(VALUE klass)
Returns the attached object for a singleton class.
Definition class.c:1622
VALUE rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj)
Identical to rb_class_instance_methods(), except it returns names of singleton methods instead of ins...
Definition class.c:1996
VALUE rb_module_new(void)
Creates a new, anonymous module.
Definition class.c:979
VALUE rb_class_instance_methods(int argc, const VALUE *argv, VALUE mod)
Generates an array of symbols, which are the list of method names defined in the passed class.
Definition class.c:1804
void rb_check_inheritable(VALUE super)
Asserts that the given class can derive a child class.
Definition class.c:310
VALUE rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod)
Identical to rb_class_instance_methods(), except it returns names of methods that are public only.
Definition class.c:1857
VALUE rb_define_module(const char *name)
Defines a top-level module.
Definition class.c:998
VALUE rb_define_module_id_under(VALUE outer, ID id)
Identical to rb_define_module_under(), except it takes the name in ID instead of C's string.
Definition class.c:1028
void rb_singleton_class_attached(VALUE klass, VALUE obj)
Attaches a singleton class to its corresponding object.
Definition class.c:637
void rb_freeze_singleton_class(VALUE klass)
This is an implementation detail of RB_OBJ_FREEZE().
Definition class.c:2167
VALUE rb_mod_included_modules(VALUE mod)
Queries the list of included modules.
Definition class.c:1417
VALUE rb_define_class_id_under(VALUE outer, ID id, VALUE super)
Identical to rb_define_class_under(), except it takes the name in ID instead of C's string.
Definition class.c:926
VALUE rb_mod_ancestors(VALUE mod)
Queries the module's ancestors.
Definition class.c:1485
VALUE rb_mod_include_p(VALUE child, VALUE parent)
Queries if the passed module is included by the module.
Definition class.c:1453
VALUE rb_class_private_instance_methods(int argc, const VALUE *argv, VALUE mod)
Identical to rb_class_instance_methods(), except it returns names of methods that are private only.
Definition class.c:1842
VALUE rb_mod_init_copy(VALUE clone, VALUE orig)
The comment that comes with this function says :nodoc:.
Definition class.c:463
VALUE rb_define_module_under(VALUE outer, const char *name)
Defines a module under the namespace of outer.
Definition class.c:1022
VALUE rb_define_module_id(ID id)
This is a very badly designed API that creates an anonymous module.
Definition class.c:992
VALUE rb_define_class_id(ID id, VALUE super)
This is a very badly designed API that creates an anonymous class.
Definition class.c:858
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
Definition class.c:2249
VALUE rb_extract_keywords(VALUE *orighash)
Splits a hash into two.
Definition class.c:2310
void rb_need_block(void)
Declares that the current method needs a block.
Definition eval.c:885
void rb_define_attr(VALUE klass, const char *name, int read, int write)
Defines public accessor method(s) for an attribute.
Definition class.c:2255
void rb_undef_method(VALUE klass, const char *name)
Defines an undef of a method.
Definition class.c:2073
int rb_keyword_given_p(void)
Determines if the current method is given a keyword argument.
Definition eval.c:877
int rb_block_given_p(void)
Determines if the current method is given a block.
Definition eval.c:864
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values)
Keyword argument deconstructor.
Definition class.c:2328
void ruby_stop(int ex)
Calls ruby_cleanup() and exits the process.
Definition eval.c:298
int ruby_exec_node(void *n)
Identical to ruby_run_node(), except it returns an opaque execution status.
Definition eval.c:334
int ruby_setup(void)
Initializes the VM and builtin libraries.
Definition eval.c:66
void ruby_finalize(void)
Runs the VM finalization processes.
Definition eval.c:172
void ruby_script(const char *name)
Sets the current script name to this value.
Definition ruby.c:2594
void ruby_set_argv(int argc, char **argv)
Sets argv that ruby understands.
Definition ruby.c:2709
void ruby_set_script_name(VALUE name)
Sets the current script name to this value.
Definition ruby.c:2607
int ruby_cleanup(int ex)
Destructs the VM.
Definition eval.c:180
size_t ruby_stack_length(VALUE **topnotch)
Queries what Ruby thinks is the machine stack.
Definition gc.c:6449
int ruby_stack_check(void)
Checks for stack overflow.
Definition gc.c:6489
void ruby_init_loadpath(void)
Sets up $LOAD_PATH.
Definition ruby.c:634
void * ruby_process_options(int argc, char **argv)
Identical to ruby_options(), except it raises ruby-level exceptions on failure.
Definition ruby.c:2724
void ruby_prog_init(void)
Defines built-in variables.
Definition ruby.c:2677
void ruby_sig_finalize(void)
Clear signal handlers.
Definition signal.c:1497
void ruby_incpush(const char *path)
Appends the given path to the end of the load path.
Definition ruby.c:469
void rb_notimplement(void)
Definition error.c:3191
void rb_mod_sys_fail(VALUE mod, const char *mesg)
Identical to rb_sys_fail(), except it takes additional module to extend the exception object before r...
Definition error.c:3327
rb_warning_category_t
Warning categories.
Definition error.h:43
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:2616
VALUE rb_string_value(volatile VALUE *ptr)
Identical to rb_str_to_str(), except it fills the passed pointer with the converted object.
Definition string.c:2500
VALUE rb_str_export(VALUE obj)
Identical to rb_str_to_str(), except it additionally converts the string into default external encodi...
Definition string.c:1301
char * rb_string_value_ptr(volatile VALUE *ptr)
Identical to rb_str_to_str(), except it returns the converted string's backend memory region.
Definition string.c:2511
VALUE rb_str_to_str(VALUE obj)
Identical to rb_check_string_type(), except it raises exceptions in case of conversion failures.
Definition string.c:1609
VALUE rb_struct_aset(VALUE st, VALUE k, VALUE v)
Resembles Struct#[]=.
Definition struct.c:1292
VALUE rb_struct_size(VALUE st)
Returns the number of struct members.
Definition struct.c:1545
VALUE rb_struct_aref(VALUE st, VALUE k)
Resembles Struct#[].
Definition struct.c:1254
short rb_num2short(VALUE num)
Converts an instance of rb_cNumeric into C's short.
Definition numeric.c:3340
unsigned short rb_num2ushort(VALUE num)
Converts an instance of rb_cNumeric into C's unsigned short.
Definition numeric.c:3358
short rb_fix2short(VALUE num)
Identical to rb_num2short().
Definition numeric.c:3349
unsigned short rb_fix2ushort(VALUE num)
Identical to rb_num2ushort().
Definition numeric.c:3368
static VALUE rb_special_const_p(VALUE obj)
Identical to RB_SPECIAL_CONST_P, except it returns a VALUE.
ruby_special_consts
special constants - i.e.
@ RUBY_SPECIAL_SHIFT
Least significant 8 bits are reserved.
@ RUBY_FIXNUM_FLAG
Flag to denote a fixnum.
@ RUBY_FLONUM_MASK
Bit mask detecting a flonum.
@ RUBY_FLONUM_FLAG
Flag to denote a flonum.
@ RUBY_SYMBOL_FLAG
Flag to denote a static symbol.
@ RUBY_IMMEDIATE_MASK
Bit mask detecting special consts.
Ruby's array.
Definition rarray.h:176
union RArray::@45 as
Array's specific fields.
struct RBasic basic
Basic part, including flags and class.
Definition rarray.h:179
Ruby's object's, base components.
Definition rbasic.h:64
const VALUE klass
Class of an object.
Definition rbasic.h:88
VALUE flags
Per-object flags.
Definition rbasic.h:77
Definition class.h:62
Definition rdata.h:124
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
Definition rdata.h:147
void * data
Pointer to the actual C level struct that you want to wrap.
Definition rdata.h:150
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
Definition rdata.h:138
struct RBasic basic
Basic part, including flags and class.
Definition rdata.h:127
Ruby's File and IO.
Definition rfile.h:35
struct RBasic basic
Basic part, including flags and class.
Definition rfile.h:38
struct rb_io_t * fptr
IO's specific fields.
Definition rfile.h:41
Ruby's ordinal objects.
Definition robject.h:94
struct RObject::@48::@49 heap
Object that use separated memory region for instance variables use this pattern.
struct RBasic basic
Basic part, including flags and class.
Definition robject.h:97
VALUE * ivptr
Pointer to a C array that holds instance variables.
Definition robject.h:108
struct rb_id_table * iv_index_tbl
This is a table that holds instance variable name to index mapping.
Definition robject.h:118
VALUE ary[ROBJECT_EMBED_LEN_MAX]
Embedded instance variables.
Definition robject.h:136
union RObject::@48 as
Object's specific fields.
Ruby's regular expression.
Definition rregexp.h:60
struct RBasic basic
Basic part, including flags and class.
Definition rregexp.h:63
const VALUE src
Source code of this expression.
Definition rregexp.h:74
struct re_pattern_buffer * ptr
The pattern buffer.
Definition rregexp.h:71
unsigned long usecnt
Reference count.
Definition rregexp.h:90
Ruby's String.
Definition rstring.h:231
union RString::@50 as
String's specific fields.
struct RString::@50::@51 heap
Strings that use separated memory region for contents use this pattern.
struct RBasic basic
Basic part, including flags and class.
Definition rstring.h:234
long len
Length of the string, not including terminating NUL character.
Definition rstring.h:250
char * ptr
Pointer to the contents of the string.
Definition rstring.h:258
"Typed" user data.
Definition rtypeddata.h:340
const rb_data_type_t * type
This field stores various information about how Ruby should handle a data.
Definition rtypeddata.h:350
VALUE typed_flag
This has to be always 1.
Definition rtypeddata.h:359
void * data
Pointer to the actual C level struct that you want to wrap.
Definition rtypeddata.h:362
struct RBasic basic
The part that all ruby objects have in common.
Definition rtypeddata.h:343
size_t(* dsize)(const void *)
This function is to query the size of the underlying memory regions.
Definition rtypeddata.h:230
RUBY_DATA_FUNC dfree
This function is called when the object is no longer used.
Definition rtypeddata.h:220
void * data
Type-specific static data.
Definition rtypeddata.h:286
void * reserved[1]
This field is reserved for future extension.
Definition rtypeddata.h:247
RUBY_DATA_FUNC dcompact
This function is called when the object is relocated.
Definition rtypeddata.h:241
struct rb_data_type_struct::@54 function
Function pointers.
RUBY_DATA_FUNC dmark
This function is called when the object is experiencing GC marks.
Definition rtypeddata.h:211
const char * wrap_struct_name
Name of structs of this kind.
Definition rtypeddata.h:197
VALUE flags
Type-specific behavioural characteristics.
Definition rtypeddata.h:299
const rb_data_type_t * parent
Parent of this class.
Definition rtypeddata.h:280
Ruby's IO, metadata and buffers.
Definition io.h:138
Definition st.c:133
Definition st.h:79
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40
uintptr_t ID
Type that represents a Ruby identifier such as a variable name.
Definition value.h:52
static enum ruby_value_type rb_type(VALUE obj)
Identical to RB_BUILTIN_TYPE(), except it can also accept special constants.
Definition value_type.h:224
static bool rb_integer_type_p(VALUE obj)
Queries if the object is an instance of rb_cInteger.
Definition value_type.h:203
ruby_value_type
C-level type of an object.
Definition value_type.h:112
@ RUBY_T_SYMBOL
Definition value_type.h:134
@ RUBY_T_MATCH
Definition value_type.h:127
@ RUBY_T_MODULE
Definition value_type.h:117
@ RUBY_T_ICLASS
Hidden classes known as IClasses.
Definition value_type.h:140
@ RUBY_T_MOVED
Definition value_type.h:142
@ RUBY_T_FIXNUM
Integers formerly known as Fixnums.
Definition value_type.h:135
@ RUBY_T_IMEMO
Definition value_type.h:138
@ RUBY_T_NODE
Definition value_type.h:139
@ RUBY_T_OBJECT
Definition value_type.h:115
@ RUBY_T_DATA
Definition value_type.h:126
@ RUBY_T_FALSE
Definition value_type.h:133
@ RUBY_T_UNDEF
Definition value_type.h:136
@ RUBY_T_COMPLEX
Definition value_type.h:128
@ RUBY_T_STRING
Definition value_type.h:119
@ RUBY_T_HASH
Definition value_type.h:122
@ RUBY_T_NIL
Definition value_type.h:131
@ RUBY_T_CLASS
Definition value_type.h:116
@ RUBY_T_ARRAY
Definition value_type.h:121
@ RUBY_T_MASK
Bitmask of ruby_value_type.
Definition value_type.h:144
@ RUBY_T_RATIONAL
Definition value_type.h:129
@ RUBY_T_ZOMBIE
Definition value_type.h:141
@ RUBY_T_BIGNUM
Definition value_type.h:124
@ RUBY_T_TRUE
Definition value_type.h:132
@ RUBY_T_FLOAT
Definition value_type.h:118
@ RUBY_T_STRUCT
Definition value_type.h:123
@ RUBY_T_NONE
Non-object (swept etc.)
Definition value_type.h:113
@ RUBY_T_REGEXP
Definition value_type.h:120
@ RUBY_T_FILE
Definition value_type.h:125