debase-ruby_core_source 0.10.17 → 0.10.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/addr2line.h +20 -0
  4. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/builtin.h +121 -0
  5. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ccan/build_assert/build_assert.h +40 -0
  6. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ccan/check_type/check_type.h +63 -0
  7. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ccan/container_of/container_of.h +142 -0
  8. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ccan/list/list.h +789 -0
  9. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ccan/str/str.h +17 -0
  10. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/constant.h +55 -0
  11. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/darray.h +179 -0
  12. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/debug_counter.h +468 -0
  13. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/dln.h +31 -0
  14. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/encindex.h +70 -0
  15. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/eval_intern.h +339 -0
  16. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/gc.h +147 -0
  17. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/hrtime.h +227 -0
  18. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/id.h +295 -0
  19. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/id_table.h +36 -0
  20. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/insns.inc +249 -0
  21. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/insns_info.inc +9061 -0
  22. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/array.h +163 -0
  23. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/bignum.h +246 -0
  24. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/bits.h +565 -0
  25. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/class.h +181 -0
  26. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/cmdlineopt.h +61 -0
  27. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/compar.h +49 -0
  28. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/compile.h +35 -0
  29. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/compilers.h +107 -0
  30. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/complex.h +29 -0
  31. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/cont.h +29 -0
  32. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/dir.h +16 -0
  33. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/enc.h +19 -0
  34. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/encoding.h +29 -0
  35. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/enum.h +18 -0
  36. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/enumerator.h +21 -0
  37. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/error.h +191 -0
  38. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/eval.h +32 -0
  39. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/file.h +38 -0
  40. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/fixnum.h +184 -0
  41. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/gc.h +191 -0
  42. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/hash.h +243 -0
  43. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/imemo.h +242 -0
  44. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/inits.h +50 -0
  45. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/io.h +38 -0
  46. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/load.h +18 -0
  47. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/loadpath.h +16 -0
  48. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/math.h +23 -0
  49. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/missing.h +18 -0
  50. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/numeric.h +275 -0
  51. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/object.h +61 -0
  52. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/parse.h +24 -0
  53. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/proc.h +32 -0
  54. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/process.h +137 -0
  55. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/ractor.h +6 -0
  56. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/random.h +16 -0
  57. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/range.h +40 -0
  58. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/rational.h +72 -0
  59. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/re.h +30 -0
  60. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/sanitizers.h +190 -0
  61. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/serial.h +23 -0
  62. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/signal.h +21 -0
  63. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/static_assert.h +16 -0
  64. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/string.h +147 -0
  65. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/struct.h +153 -0
  66. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/symbol.h +42 -0
  67. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/thread.h +55 -0
  68. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/time.h +34 -0
  69. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/transcode.h +20 -0
  70. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/util.h +27 -0
  71. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/variable.h +88 -0
  72. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/vm.h +134 -0
  73. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal/warnings.h +16 -0
  74. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/internal.h +113 -0
  75. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/iseq.h +329 -0
  76. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/known_errors.inc +791 -0
  77. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/method.h +254 -0
  78. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/mjit.h +132 -0
  79. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/mjit_compile_attr.inc +430 -0
  80. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/mjit_compiler.h +58 -0
  81. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/mjit_unit.h +29 -0
  82. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/node.h +511 -0
  83. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/node_name.inc +210 -0
  84. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/opt_sc.inc +109 -0
  85. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/optinsn.inc +128 -0
  86. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/optunifs.inc +43 -0
  87. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/parse.h +215 -0
  88. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/probes_helper.h +44 -0
  89. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ractor_core.h +343 -0
  90. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/regenc.h +254 -0
  91. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/regint.h +984 -0
  92. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/regparse.h +370 -0
  93. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/revision.h +5 -0
  94. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ruby_assert.h +14 -0
  95. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/ruby_atomic.h +23 -0
  96. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/shape.h +194 -0
  97. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/siphash.h +48 -0
  98. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/symbol.h +119 -0
  99. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/thread_none.h +20 -0
  100. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/thread_pthread.h +132 -0
  101. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/thread_win32.h +63 -0
  102. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/timev.h +57 -0
  103. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/transcode_data.h +138 -0
  104. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/transient_heap.h +65 -0
  105. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/variable.h +29 -0
  106. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/version.h +65 -0
  107. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm.inc +5476 -0
  108. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_call_iseq_optimized.inc +244 -0
  109. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_callinfo.h +550 -0
  110. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_core.h +2137 -0
  111. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_debug.h +122 -0
  112. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_exec.h +197 -0
  113. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_insnhelper.h +266 -0
  114. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_opts.h +73 -0
  115. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vm_sync.h +137 -0
  116. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/vmtc.inc +243 -0
  117. data/lib/debase/ruby_core_source/ruby-3.2.0-preview3/yjit.h +72 -0
  118. data/lib/debase/ruby_core_source/version.rb +1 -1
  119. metadata +118 -3
@@ -0,0 +1,191 @@
1
+ #ifndef INTERNAL_ERROR_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_ERROR_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for Exception.
10
+ */
11
+ #include "ruby/internal/config.h"
12
+ #include <stdarg.h> /* for va_list */
13
+ #include "internal/string.h" /* for rb_fstring_cstr */
14
+ #include "ruby/internal/stdbool.h" /* for bool */
15
+ #include "ruby/encoding.h" /* for rb_encoding */
16
+ #include "ruby/intern.h" /* for rb_exc_raise */
17
+ #include "ruby/ruby.h" /* for enum ruby_value_type */
18
+
19
+ #ifdef Check_Type
20
+ # undef Check_Type /* in ruby/ruby.h */
21
+ #endif
22
+
23
+ #ifdef rb_raise_static
24
+ # undef rb_raise_static
25
+ # undef rb_sys_fail_path
26
+ # undef rb_syserr_fail_path
27
+ #endif
28
+
29
+ #define rb_raise_static(e, m) \
30
+ rb_raise_cstr_i((e), rb_str_new_static((m), rb_strlen_lit(m)))
31
+ #ifdef RUBY_FUNCTION_NAME_STRING
32
+ # define rb_sys_fail_path(path) rb_sys_fail_path_in(RUBY_FUNCTION_NAME_STRING, path)
33
+ # define rb_syserr_fail_path(err, path) rb_syserr_fail_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
34
+ # define rb_syserr_new_path(err, path) rb_syserr_new_path_in(RUBY_FUNCTION_NAME_STRING, (err), (path))
35
+ #else
36
+ # define rb_sys_fail_path(path) rb_sys_fail_str(path)
37
+ # define rb_syserr_fail_path(err, path) rb_syserr_fail_str((err), (path))
38
+ # define rb_syserr_new_path(err, path) rb_syserr_new_str((err), (path))
39
+ #endif
40
+
41
+ /* error.c */
42
+ extern long rb_backtrace_length_limit;
43
+ extern VALUE rb_eEAGAIN;
44
+ extern VALUE rb_eEWOULDBLOCK;
45
+ extern VALUE rb_eEINPROGRESS;
46
+ RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 0)
47
+ void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
48
+ NORETURN(void rb_async_bug_errno(const char *,int));
49
+ const char *rb_builtin_type_name(int t);
50
+ const char *rb_builtin_class_name(VALUE x);
51
+ PRINTF_ARGS(void rb_warn_deprecated(const char *fmt, const char *suggest, ...), 1, 3);
52
+ PRINTF_ARGS(void rb_warn_deprecated_to_remove(const char *removal, const char *fmt, const char *suggest, ...), 2, 4);
53
+ #if RUBY_DEBUG
54
+ # include "ruby/version.h"
55
+ # define RUBY_VERSION_SINCE(major, minor) (RUBY_API_VERSION_CODE >= (major * 10000) + (minor) * 100)
56
+ # define RUBY_VERSION_BEFORE(major, minor) (RUBY_API_VERSION_CODE < (major * 10000) + (minor) * 100)
57
+ # if defined(RBIMPL_WARNING_PRAGMA0)
58
+ # define RBIMPL_TODO0(x) RBIMPL_WARNING_PRAGMA0(message(x))
59
+ # elif RBIMPL_COMPILER_SINCE(MSVC, 12, 0, 0)
60
+ # define RBIMPL_TODO0(x) __pragma(message(x))
61
+ # endif
62
+
63
+ # if RBIMPL_HAS_ATTRIBUTE(diagnose_if) || defined(__OPTIMIZE__)
64
+
65
+ #define RUBY_VERSION_isdigit(c) ('0'<=(c)&&(c)<='9')
66
+ // upto 99
67
+ #define RUBY_VERSION__number_len(v, ofs) \
68
+ (!RUBY_VERSION_isdigit((v)[ofs]) ? \
69
+ 0 : !RUBY_VERSION_isdigit((v)[(ofs) + 1]) ? 1 : 2)
70
+ #define RUBY_VERSION__to_number(v, ofs) \
71
+ (!RUBY_VERSION_isdigit((v)[ofs]) ? \
72
+ 0 : !RUBY_VERSION_isdigit((v)[(ofs) + 1]) ? \
73
+ ((v)[ofs]-'0') : \
74
+ (((v)[ofs]-'0')*10+(v)[(ofs)+1]-'0'))
75
+
76
+ #define RUBY_VERSION_CODE_FROM_MAJOR_MINOR_STRING(v) \
77
+ (RUBY_VERSION__to_number(v, 0) * 10000 + \
78
+ ((v)[RUBY_VERSION__number_len(v, 0)] == '.' ? \
79
+ RUBY_VERSION__to_number(v, RUBY_VERSION__number_len(v, 0)+1) * 100 : 0))
80
+ #define RUBY_VERSION_STRING_SINCE(v) (RUBY_API_VERSION_CODE >= RUBY_VERSION_CODE_FROM_MAJOR_MINOR_STRING(v))
81
+ #define RUBY_VERSION_STRING_BEFORE(v) (RUBY_API_VERSION_CODE < RUBY_VERSION_CODE_FROM_MAJOR_MINOR_STRING(v))
82
+
83
+ # if RBIMPL_HAS_ATTRIBUTE(diagnose_if)
84
+ RBIMPL_ATTR_FORCEINLINE()
85
+ static void
86
+ rb_deprecated_method_to_be_removed(const char *removal)
87
+ RBIMPL_ATTR_DIAGNOSE_IF(!RUBY_VERSION_isdigit(removal[0]), "malformed version number", "error")
88
+ RBIMPL_ATTR_DIAGNOSE_IF(RUBY_VERSION_STRING_SINCE(removal), "deprecated method to be removed", "error")
89
+ {
90
+ }
91
+ # else
92
+ RBIMPL_ATTR_ERROR(("deprecated"))
93
+ void rb_deprecated_method_to_be_removed(const char *);
94
+ # define rb_deprecated_method_to_be_removed(removal) \
95
+ (sizeof(char[1-2*(!RUBY_VERSION_isdigit(removal[0]) || RUBY_VERSION_STRING_SINCE(removal))])!=1 ? \
96
+ rb_deprecated_method_to_be_removed(removal) : \
97
+ RBIMPL_ASSERT_NOTHING)
98
+ # endif
99
+ # define rb_warn_deprecated_to_remove_at(removal, ...) \
100
+ (rb_deprecated_method_to_be_removed(#removal), \
101
+ rb_warn_deprecated_to_remove(#removal, __VA_ARGS__))
102
+ # endif
103
+ #endif
104
+ #ifndef rb_warn_deprecated_to_remove_at
105
+ # define rb_warn_deprecated_to_remove_at(removal, ...) \
106
+ rb_warn_deprecated_to_remove(#removal, __VA_ARGS__)
107
+ #endif
108
+ #ifndef RUBY_VERSION_SINCE
109
+ # define RUBY_VERSION_SINCE(major, minor) 0
110
+ #endif
111
+ #ifndef RUBY_VERSION_BEFORE
112
+ # define RUBY_VERSION_BEFORE(major, minor) 0
113
+ #endif
114
+ #ifndef RBIMPL_TODO0
115
+ # define RBIMPL_TODO0(x)
116
+ #endif
117
+ #define RBIMPL_TODO(message) RBIMPL_TODO0("TODO: " message)
118
+ RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 6, 0)
119
+ VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
120
+ PRINTF_ARGS(void rb_enc_warn(rb_encoding *enc, const char *fmt, ...), 2, 3);
121
+ PRINTF_ARGS(void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...), 2, 3);
122
+ PRINTF_ARGS(void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...), 3, 4);
123
+ rb_warning_category_t rb_warning_category_from_name(VALUE category);
124
+ bool rb_warning_category_enabled_p(rb_warning_category_t category);
125
+ VALUE rb_name_err_new(VALUE mesg, VALUE recv, VALUE method);
126
+ VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int priv);
127
+ VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
128
+ PRINTF_ARGS(VALUE rb_warning_string(const char *fmt, ...), 1, 2);
129
+ RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0)
130
+ NORETURN(void rb_vraise(VALUE, const char *, va_list));
131
+ NORETURN(static inline void rb_raise_cstr(VALUE etype, const char *mesg));
132
+ NORETURN(static inline void rb_raise_cstr_i(VALUE etype, VALUE mesg));
133
+ NORETURN(static inline void rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name));
134
+ NORETURN(static inline void rb_name_err_raise(const char *mesg, VALUE recv, VALUE name));
135
+ NORETURN(static inline void rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name));
136
+ static inline void Check_Type(VALUE v, enum ruby_value_type t);
137
+ static inline bool rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type);
138
+ #define rb_typeddata_is_instance_of rb_typeddata_is_instance_of_inline
139
+
140
+ RUBY_SYMBOL_EXPORT_BEGIN
141
+ /* error.c (export) */
142
+ int rb_bug_reporter_add(void (*func)(FILE *, void *), void *data);
143
+ #ifdef RUBY_FUNCTION_NAME_STRING
144
+ NORETURN(void rb_sys_fail_path_in(const char *func_name, VALUE path));
145
+ NORETURN(void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path));
146
+ VALUE rb_syserr_new_path_in(const char *func_name, int n, VALUE path);
147
+ #endif
148
+ RUBY_SYMBOL_EXPORT_END
149
+
150
+ static inline void
151
+ rb_raise_cstr_i(VALUE etype, VALUE mesg)
152
+ {
153
+ VALUE exc = rb_exc_new_str(etype, mesg);
154
+ rb_exc_raise(exc);
155
+ }
156
+
157
+ static inline void
158
+ rb_raise_cstr(VALUE etype, const char *mesg)
159
+ {
160
+ VALUE str = rb_str_new_cstr(mesg);
161
+ rb_raise_cstr_i(etype, str);
162
+ }
163
+
164
+ static inline void
165
+ rb_name_err_raise_str(VALUE mesg, VALUE recv, VALUE name)
166
+ {
167
+ VALUE exc = rb_name_err_new(mesg, recv, name);
168
+ rb_exc_raise(exc);
169
+ }
170
+
171
+ static inline void
172
+ rb_name_err_raise(const char *mesg, VALUE recv, VALUE name)
173
+ {
174
+ VALUE str = rb_fstring_cstr(mesg);
175
+ rb_name_err_raise_str(str, recv, name);
176
+ }
177
+
178
+ static inline void
179
+ rb_key_err_raise(VALUE mesg, VALUE recv, VALUE name)
180
+ {
181
+ VALUE exc = rb_key_err_new(mesg, recv, name);
182
+ rb_exc_raise(exc);
183
+ }
184
+
185
+ static inline bool
186
+ rb_typeddata_is_instance_of_inline(VALUE obj, const rb_data_type_t *data_type)
187
+ {
188
+ return RB_TYPE_P(obj, T_DATA) && RTYPEDDATA_P(obj) && (RTYPEDDATA_TYPE(obj) == data_type);
189
+ }
190
+
191
+ #endif /* INTERNAL_ERROR_H */
@@ -0,0 +1,32 @@
1
+ #ifndef INTERNAL_EVAL_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_EVAL_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for the evaluator.
10
+ * @note There also is eval_intern.h, which is evaluator's internal
11
+ * header (related to this file, but not the same role).
12
+ */
13
+ #include "ruby/ruby.h" /* for ID */
14
+
15
+ #define id_signo ruby_static_id_signo
16
+ #define id_status ruby_static_id_status
17
+
18
+ /* eval.c */
19
+ extern ID ruby_static_id_signo;
20
+ extern ID ruby_static_id_status;
21
+ VALUE rb_refinement_module_get_refined_class(VALUE module);
22
+ void rb_class_modify_check(VALUE);
23
+ NORETURN(VALUE rb_f_raise(int argc, VALUE *argv));
24
+
25
+ /* eval_error.c */
26
+ VALUE rb_get_backtrace(VALUE info);
27
+
28
+ /* eval_jump.c */
29
+ void rb_call_end_proc(VALUE data);
30
+ void rb_mark_end_proc(void);
31
+
32
+ #endif /* INTERNAL_EVAL_H */
@@ -0,0 +1,38 @@
1
+ #ifndef INTERNAL_FILE_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_FILE_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for File.
10
+ */
11
+ #include "ruby/ruby.h" /* for VALUE */
12
+ #include "ruby/encoding.h" /* for rb_encodinng */
13
+
14
+ /* file.c */
15
+ extern const char ruby_null_device[];
16
+ VALUE rb_home_dir_of(VALUE user, VALUE result);
17
+ VALUE rb_default_home_dir(VALUE result);
18
+ VALUE rb_realpath_internal(VALUE basedir, VALUE path, int strict);
19
+ VALUE rb_check_realpath(VALUE basedir, VALUE path, rb_encoding *origenc);
20
+ void rb_file_const(const char*, VALUE);
21
+ int rb_file_load_ok(const char *);
22
+ VALUE rb_file_expand_path_fast(VALUE, VALUE);
23
+ VALUE rb_file_expand_path_internal(VALUE, VALUE, int, int, VALUE);
24
+ VALUE rb_get_path_check_to_string(VALUE);
25
+ VALUE rb_get_path_check_convert(VALUE);
26
+ int ruby_is_fd_loadable(int fd);
27
+
28
+ RUBY_SYMBOL_EXPORT_BEGIN
29
+ /* file.c (export) */
30
+ #ifdef HAVE_READLINK
31
+ VALUE rb_readlink(VALUE path, rb_encoding *enc);
32
+ #endif
33
+ #ifdef __APPLE__
34
+ VALUE rb_str_normalize_ospath(const char *ptr, long len);
35
+ #endif
36
+ RUBY_SYMBOL_EXPORT_END
37
+
38
+ #endif /* INTERNAL_FILE_H */
@@ -0,0 +1,184 @@
1
+ #ifndef INTERNAL_FIXNUM_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_FIXNUM_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for Fixnums.
10
+ */
11
+ #include "ruby/internal/config.h" /* for HAVE_LONG_LONG */
12
+ #include <limits.h> /* for CHAR_BIT */
13
+ #include "internal/compilers.h" /* for __has_builtin */
14
+ #include "ruby/internal/stdbool.h" /* for bool */
15
+ #include "ruby/intern.h" /* for rb_big_mul */
16
+ #include "ruby/ruby.h" /* for RB_FIXABLE */
17
+
18
+ #if HAVE_LONG_LONG && SIZEOF_LONG * 2 <= SIZEOF_LONG_LONG
19
+ # define DLONG LONG_LONG
20
+ # define DL2NUM(x) LL2NUM(x)
21
+ #elif defined(HAVE_INT128_T) && !(defined(__OpenBSD__) && defined(__mips64__))
22
+ # define DLONG int128_t
23
+ # define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
24
+ VALUE rb_int128t2big(int128_t n); /* in bignum.c */
25
+ #endif
26
+
27
+ static inline long rb_overflowed_fix_to_int(long x);
28
+ static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
29
+ static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
30
+ static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
31
+ static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
32
+ static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
33
+ static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
34
+ static inline bool FIXNUM_POSITIVE_P(VALUE num);
35
+ static inline bool FIXNUM_NEGATIVE_P(VALUE num);
36
+ static inline bool FIXNUM_ZERO_P(VALUE num);
37
+
38
+ static inline long
39
+ rb_overflowed_fix_to_int(long x)
40
+ {
41
+ return (long)((unsigned long)(x >> 1) ^ (1LU << (SIZEOF_LONG * CHAR_BIT - 1)));
42
+ }
43
+
44
+ static inline VALUE
45
+ rb_fix_plus_fix(VALUE x, VALUE y)
46
+ {
47
+ #if !__has_builtin(__builtin_add_overflow)
48
+ long lz = FIX2LONG(x) + FIX2LONG(y);
49
+ return LONG2NUM(lz);
50
+ #else
51
+ long lz;
52
+ /* NOTE
53
+ * (1) `LONG2FIX(FIX2LONG(x)+FIX2LONG(y))`
54
+ + = `((lx*2+1)/2 + (ly*2+1)/2)*2+1`
55
+ + = `lx*2 + ly*2 + 1`
56
+ + = `(lx*2+1) + (ly*2+1) - 1`
57
+ + = `x + y - 1`
58
+ * (2) Fixnum's LSB is always 1.
59
+ * It means you can always run `x - 1` without overflow.
60
+ * (3) Of course `z = x + (y-1)` may overflow.
61
+ * At that time true value is
62
+ * * positive: 0b0 1xxx...1, and z = 0b1xxx...1
63
+ * * negative: 0b1 0xxx...1, and z = 0b0xxx...1
64
+ * To convert this true value to long,
65
+ * (a) Use arithmetic shift
66
+ * * positive: 0b11xxx...
67
+ * * negative: 0b00xxx...
68
+ * (b) invert MSB
69
+ * * positive: 0b01xxx...
70
+ * * negative: 0b10xxx...
71
+ */
72
+ if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
73
+ return rb_int2big(rb_overflowed_fix_to_int(lz));
74
+ }
75
+ else {
76
+ return (VALUE)lz;
77
+ }
78
+ #endif
79
+ }
80
+
81
+ static inline VALUE
82
+ rb_fix_minus_fix(VALUE x, VALUE y)
83
+ {
84
+ #if !__has_builtin(__builtin_sub_overflow)
85
+ long lz = FIX2LONG(x) - FIX2LONG(y);
86
+ return LONG2NUM(lz);
87
+ #else
88
+ long lz;
89
+ if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
90
+ return rb_int2big(rb_overflowed_fix_to_int(lz));
91
+ }
92
+ else {
93
+ return (VALUE)lz;
94
+ }
95
+ #endif
96
+ }
97
+
98
+ /* arguments must be Fixnum */
99
+ static inline VALUE
100
+ rb_fix_mul_fix(VALUE x, VALUE y)
101
+ {
102
+ long lx = FIX2LONG(x);
103
+ long ly = FIX2LONG(y);
104
+ #ifdef DLONG
105
+ return DL2NUM((DLONG)lx * (DLONG)ly);
106
+ #else
107
+ if (MUL_OVERFLOW_FIXNUM_P(lx, ly)) {
108
+ return rb_big_mul(rb_int2big(lx), rb_int2big(ly));
109
+ }
110
+ else {
111
+ return LONG2FIX(lx * ly);
112
+ }
113
+ #endif
114
+ }
115
+
116
+ /*
117
+ * This behaves different from C99 for negative arguments.
118
+ * Note that div may overflow fixnum.
119
+ */
120
+ static inline void
121
+ rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
122
+ {
123
+ /* assume / and % comply C99.
124
+ * ldiv(3) won't be inlined by GCC and clang.
125
+ * I expect / and % are compiled as single idiv.
126
+ */
127
+ long x = FIX2LONG(a);
128
+ long y = FIX2LONG(b);
129
+ long div, mod;
130
+ if (x == FIXNUM_MIN && y == -1) {
131
+ if (divp) *divp = LONG2NUM(-FIXNUM_MIN);
132
+ if (modp) *modp = LONG2FIX(0);
133
+ return;
134
+ }
135
+ div = x / y;
136
+ mod = x % y;
137
+ if (y > 0 ? mod < 0 : mod > 0) {
138
+ mod += y;
139
+ div -= 1;
140
+ }
141
+ if (divp) *divp = LONG2FIX(div);
142
+ if (modp) *modp = LONG2FIX(mod);
143
+ }
144
+
145
+ /* div() for Ruby
146
+ * This behaves different from C99 for negative arguments.
147
+ */
148
+ static inline VALUE
149
+ rb_fix_div_fix(VALUE x, VALUE y)
150
+ {
151
+ VALUE div;
152
+ rb_fix_divmod_fix(x, y, &div, NULL);
153
+ return div;
154
+ }
155
+
156
+ /* mod() for Ruby
157
+ * This behaves different from C99 for negative arguments.
158
+ */
159
+ static inline VALUE
160
+ rb_fix_mod_fix(VALUE x, VALUE y)
161
+ {
162
+ VALUE mod;
163
+ rb_fix_divmod_fix(x, y, NULL, &mod);
164
+ return mod;
165
+ }
166
+
167
+ static inline bool
168
+ FIXNUM_POSITIVE_P(VALUE num)
169
+ {
170
+ return (SIGNED_VALUE)num > (SIGNED_VALUE)INT2FIX(0);
171
+ }
172
+
173
+ static inline bool
174
+ FIXNUM_NEGATIVE_P(VALUE num)
175
+ {
176
+ return (SIGNED_VALUE)num < 0;
177
+ }
178
+
179
+ static inline bool
180
+ FIXNUM_ZERO_P(VALUE num)
181
+ {
182
+ return num == INT2FIX(0);
183
+ }
184
+ #endif /* INTERNAL_FIXNUM_H */
@@ -0,0 +1,191 @@
1
+ #ifndef INTERNAL_GC_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_GC_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for GC.
10
+ */
11
+ #include "ruby/internal/config.h"
12
+
13
+ #include <stddef.h> /* for size_t */
14
+
15
+ #include "internal/compilers.h" /* for __has_attribute */
16
+ #include "ruby/ruby.h" /* for rb_event_flag_t */
17
+ #include "shape.h"
18
+
19
+ struct rb_execution_context_struct; /* in vm_core.h */
20
+ struct rb_objspace; /* in vm_core.h */
21
+
22
+ #ifdef NEWOBJ_OF
23
+ # undef NEWOBJ_OF
24
+ # undef RB_NEWOBJ_OF
25
+ # undef RB_OBJ_WRITE
26
+ #endif
27
+
28
+ #define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
29
+
30
+ #define RB_RVARGC_NEWOBJ_OF(var, T, c, f, s) \
31
+ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
32
+ rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED, s) : \
33
+ rb_wb_unprotected_newobj_of((c), (f), s))
34
+
35
+ #define RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, s) \
36
+ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
37
+ rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, s) : \
38
+ rb_wb_unprotected_newobj_of((c), (f), s))
39
+
40
+ /* optimized version of NEWOBJ() */
41
+ #define RB_NEWOBJ_OF(var, T, c, f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
42
+
43
+ #define RB_EC_NEWOBJ_OF(ec, var, T, c, f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
44
+
45
+ #define NEWOBJ_OF(var, T, c, f) RB_NEWOBJ_OF((var), T, (c), (f))
46
+ #define RVARGC_NEWOBJ_OF(var, T, c, f, s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
47
+ #define RB_OBJ_GC_FLAGS_MAX 6 /* used in ext/objspace */
48
+
49
+ #ifndef USE_UNALIGNED_MEMBER_ACCESS
50
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
51
+ #elif ! USE_UNALIGNED_MEMBER_ACCESS
52
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
53
+ #elif ! (__has_warning("-Waddress-of-packed-member") || GCC_VERSION_SINCE(9, 0, 0))
54
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
55
+ #else
56
+ # include "internal/warnings.h"
57
+ # define UNALIGNED_MEMBER_ACCESS(expr) __extension__({ \
58
+ COMPILER_WARNING_PUSH; \
59
+ COMPILER_WARNING_IGNORED(-Waddress-of-packed-member); \
60
+ __typeof__(expr) unaligned_member_access_result = (expr); \
61
+ COMPILER_WARNING_POP; \
62
+ unaligned_member_access_result; \
63
+ })
64
+ #endif
65
+
66
+ #define UNALIGNED_MEMBER_PTR(ptr, mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
67
+ #define RB_OBJ_WRITE(a, slot, b) \
68
+ rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), \
69
+ (VALUE)(b), __FILE__, __LINE__)
70
+
71
+ #if USE_RVARGC && SHAPE_IN_BASIC_FLAGS
72
+ # define SIZE_POOL_COUNT 5
73
+ #else
74
+ # define SIZE_POOL_COUNT 1
75
+ #endif
76
+
77
+ #define RCLASS_EXT_EMBEDDED (SIZE_POOL_COUNT > 1)
78
+
79
+ typedef struct ractor_newobj_size_pool_cache {
80
+ struct RVALUE *freelist;
81
+ struct heap_page *using_page;
82
+ } rb_ractor_newobj_size_pool_cache_t;
83
+
84
+ typedef struct ractor_newobj_cache {
85
+ size_t incremental_mark_step_allocated_slots;
86
+ rb_ractor_newobj_size_pool_cache_t size_pool_caches[SIZE_POOL_COUNT];
87
+ } rb_ractor_newobj_cache_t;
88
+
89
+ /* gc.c */
90
+ extern VALUE *ruby_initial_gc_stress_ptr;
91
+ extern int ruby_disable_gc;
92
+ RUBY_ATTR_MALLOC void *ruby_mimmalloc(size_t size);
93
+ void ruby_mimfree(void *ptr);
94
+ void rb_objspace_set_event_hook(const rb_event_flag_t event);
95
+ VALUE rb_objspace_gc_enable(struct rb_objspace *);
96
+ VALUE rb_objspace_gc_disable(struct rb_objspace *);
97
+ void ruby_gc_set_params(void);
98
+ void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
99
+ #if __has_attribute(alloc_align)
100
+ __attribute__((__alloc_align__(1)))
101
+ #endif
102
+ RUBY_ATTR_MALLOC void *rb_aligned_malloc(size_t, size_t) RUBY_ATTR_ALLOC_SIZE((2));
103
+ size_t rb_size_mul_or_raise(size_t, size_t, VALUE); /* used in compile.c */
104
+ size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE); /* used in iseq.h */
105
+ RUBY_ATTR_MALLOC void *rb_xmalloc_mul_add(size_t, size_t, size_t);
106
+ RUBY_ATTR_MALLOC void *rb_xcalloc_mul_add(size_t, size_t, size_t);
107
+ void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
108
+ RUBY_ATTR_MALLOC void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
109
+ RUBY_ATTR_MALLOC void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
110
+ static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
111
+ static inline void *ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2, 3));
112
+ static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
113
+ VALUE rb_class_allocate_instance(VALUE klass);
114
+ void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
115
+ size_t rb_gc_obj_slot_size(VALUE obj);
116
+ bool rb_gc_size_allocatable_p(size_t size);
117
+ int rb_objspace_garbage_object_p(VALUE obj);
118
+
119
+ RUBY_SYMBOL_EXPORT_BEGIN
120
+ /* gc.c (export) */
121
+ const char *rb_objspace_data_type_name(VALUE obj);
122
+ VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
123
+ VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
124
+ VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
125
+ size_t rb_obj_memsize_of(VALUE);
126
+ void rb_gc_verify_internal_consistency(void);
127
+ size_t rb_obj_gc_flags(VALUE, ID[], size_t);
128
+ void rb_gc_mark_values(long n, const VALUE *values);
129
+ void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
130
+ void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
131
+ void *ruby_sized_xrealloc2(void *ptr, size_t new_count, size_t element_size, size_t old_count) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2, 3));
132
+ void ruby_sized_xfree(void *x, size_t size);
133
+ RUBY_SYMBOL_EXPORT_END
134
+
135
+ MJIT_SYMBOL_EXPORT_BEGIN
136
+ int rb_ec_stack_check(struct rb_execution_context_struct *ec);
137
+ void rb_gc_writebarrier_remember(VALUE obj);
138
+ const char *rb_obj_info(VALUE obj);
139
+ MJIT_SYMBOL_EXPORT_END
140
+
141
+ #if defined(HAVE_MALLOC_USABLE_SIZE) || defined(HAVE_MALLOC_SIZE) || defined(_WIN32)
142
+
143
+ static inline void *
144
+ ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
145
+ {
146
+ return ruby_xrealloc(ptr, new_size);
147
+ }
148
+
149
+ static inline void *
150
+ ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
151
+ {
152
+ return ruby_xrealloc2(ptr, new_count, elemsiz);
153
+ }
154
+
155
+ static inline void
156
+ ruby_sized_xfree_inlined(void *ptr, size_t size)
157
+ {
158
+ ruby_xfree(ptr);
159
+ }
160
+
161
+ # define SIZED_REALLOC_N(x, y, z, w) REALLOC_N(x, y, z)
162
+
163
+ #else
164
+
165
+ static inline void *
166
+ ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
167
+ {
168
+ return ruby_sized_xrealloc(ptr, new_size, old_size);
169
+ }
170
+
171
+ static inline void *
172
+ ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
173
+ {
174
+ return ruby_sized_xrealloc2(ptr, new_count, elemsiz, old_count);
175
+ }
176
+
177
+ static inline void
178
+ ruby_sized_xfree_inlined(void *ptr, size_t size)
179
+ {
180
+ ruby_sized_xfree(ptr, size);
181
+ }
182
+
183
+ # define SIZED_REALLOC_N(v, T, m, n) \
184
+ ((v) = (T *)ruby_sized_xrealloc2((void *)(v), (m), sizeof(T), (n)))
185
+
186
+ #endif /* HAVE_MALLOC_USABLE_SIZE */
187
+
188
+ #define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
189
+ #define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
190
+ #define ruby_sized_xfree ruby_sized_xfree_inlined
191
+ #endif /* INTERNAL_GC_H */