debase-ruby_core_source 0.10.16 → 0.10.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/addr2line.h +20 -0
  4. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/builtin.h +121 -0
  5. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/build_assert/build_assert.h +40 -0
  6. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/check_type/check_type.h +63 -0
  7. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/container_of/container_of.h +142 -0
  8. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/list/list.h +789 -0
  9. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ccan/str/str.h +17 -0
  10. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/constant.h +55 -0
  11. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/darray.h +179 -0
  12. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/debug_counter.h +469 -0
  13. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/dln.h +31 -0
  14. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/encindex.h +70 -0
  15. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/eval_intern.h +339 -0
  16. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/gc.h +143 -0
  17. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/hrtime.h +226 -0
  18. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/id.h +295 -0
  19. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/id_table.h +36 -0
  20. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/insns.inc +249 -0
  21. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/insns_info.inc +9061 -0
  22. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/array.h +162 -0
  23. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/bignum.h +246 -0
  24. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/bits.h +565 -0
  25. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/class.h +212 -0
  26. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/cmdlineopt.h +58 -0
  27. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/compar.h +49 -0
  28. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/compile.h +35 -0
  29. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/compilers.h +107 -0
  30. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/complex.h +29 -0
  31. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/cont.h +26 -0
  32. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/dir.h +16 -0
  33. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/enc.h +19 -0
  34. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/encoding.h +30 -0
  35. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/enum.h +18 -0
  36. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/enumerator.h +21 -0
  37. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/error.h +191 -0
  38. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/eval.h +32 -0
  39. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/file.h +38 -0
  40. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/fixnum.h +184 -0
  41. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/gc.h +188 -0
  42. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/hash.h +243 -0
  43. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/imemo.h +242 -0
  44. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/inits.h +50 -0
  45. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/io.h +38 -0
  46. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/load.h +18 -0
  47. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/loadpath.h +16 -0
  48. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/math.h +23 -0
  49. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/missing.h +18 -0
  50. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/numeric.h +271 -0
  51. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/object.h +83 -0
  52. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/parse.h +23 -0
  53. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/proc.h +32 -0
  54. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/process.h +137 -0
  55. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/ractor.h +6 -0
  56. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/random.h +16 -0
  57. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/range.h +40 -0
  58. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/rational.h +72 -0
  59. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/re.h +30 -0
  60. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/sanitizers.h +190 -0
  61. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/serial.h +23 -0
  62. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/signal.h +21 -0
  63. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/static_assert.h +16 -0
  64. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/string.h +146 -0
  65. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/struct.h +153 -0
  66. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/symbol.h +42 -0
  67. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/thread.h +54 -0
  68. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/time.h +34 -0
  69. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/transcode.h +20 -0
  70. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/util.h +27 -0
  71. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/variable.h +83 -0
  72. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/vm.h +134 -0
  73. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal/warnings.h +16 -0
  74. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/internal.h +113 -0
  75. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/iseq.h +328 -0
  76. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/known_errors.inc +791 -0
  77. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/method.h +253 -0
  78. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit.h +136 -0
  79. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit_compile_attr.inc +430 -0
  80. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit_compiler.h +58 -0
  81. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/mjit_unit.h +29 -0
  82. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/node.h +510 -0
  83. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/node_name.inc +208 -0
  84. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/opt_sc.inc +109 -0
  85. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/optinsn.inc +128 -0
  86. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/optunifs.inc +43 -0
  87. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/parse.h +214 -0
  88. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/probes_helper.h +44 -0
  89. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ractor_core.h +341 -0
  90. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/regenc.h +255 -0
  91. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/regint.h +957 -0
  92. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/regparse.h +370 -0
  93. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/revision.h +2 -0
  94. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ruby_assert.h +14 -0
  95. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/ruby_atomic.h +23 -0
  96. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/siphash.h +48 -0
  97. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/symbol.h +119 -0
  98. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/thread_none.h +20 -0
  99. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/thread_pthread.h +132 -0
  100. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/thread_win32.h +63 -0
  101. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/timev.h +57 -0
  102. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/transcode_data.h +138 -0
  103. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/transient_heap.h +65 -0
  104. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/variable.h +21 -0
  105. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/version.h +68 -0
  106. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm.inc +5476 -0
  107. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_call_iseq_optimized.inc +244 -0
  108. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_callinfo.h +522 -0
  109. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_core.h +2130 -0
  110. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_debug.h +122 -0
  111. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_exec.h +197 -0
  112. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_insnhelper.h +269 -0
  113. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_opts.h +73 -0
  114. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vm_sync.h +137 -0
  115. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/vmtc.inc +243 -0
  116. data/lib/debase/ruby_core_source/ruby-3.2.0-preview2/yjit.h +72 -0
  117. data/lib/debase/ruby_core_source/version.rb +1 -1
  118. metadata +116 -2
@@ -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,188 @@
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
+
18
+ struct rb_execution_context_struct; /* in vm_core.h */
19
+ struct rb_objspace; /* in vm_core.h */
20
+
21
+ #ifdef NEWOBJ_OF
22
+ # undef NEWOBJ_OF
23
+ # undef RB_NEWOBJ_OF
24
+ # undef RB_OBJ_WRITE
25
+ #endif
26
+
27
+ #define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX]))
28
+
29
+ #define RB_RVARGC_NEWOBJ_OF(var, T, c, f, s) \
30
+ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
31
+ rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED, s) : \
32
+ rb_wb_unprotected_newobj_of((c), (f), s))
33
+
34
+ #define RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, s) \
35
+ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
36
+ rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, s) : \
37
+ rb_wb_unprotected_newobj_of((c), (f), s))
38
+
39
+ /* optimized version of NEWOBJ() */
40
+ #define RB_NEWOBJ_OF(var, T, c, f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
41
+
42
+ #define RB_EC_NEWOBJ_OF(ec, var, T, c, f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
43
+
44
+ #define NEWOBJ_OF(var, T, c, f) RB_NEWOBJ_OF((var), T, (c), (f))
45
+ #define RVARGC_NEWOBJ_OF(var, T, c, f, s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
46
+ #define RB_OBJ_GC_FLAGS_MAX 6 /* used in ext/objspace */
47
+
48
+ #ifndef USE_UNALIGNED_MEMBER_ACCESS
49
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
50
+ #elif ! USE_UNALIGNED_MEMBER_ACCESS
51
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
52
+ #elif ! (__has_warning("-Waddress-of-packed-member") || GCC_VERSION_SINCE(9, 0, 0))
53
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
54
+ #else
55
+ # include "internal/warnings.h"
56
+ # define UNALIGNED_MEMBER_ACCESS(expr) __extension__({ \
57
+ COMPILER_WARNING_PUSH; \
58
+ COMPILER_WARNING_IGNORED(-Waddress-of-packed-member); \
59
+ __typeof__(expr) unaligned_member_access_result = (expr); \
60
+ COMPILER_WARNING_POP; \
61
+ unaligned_member_access_result; \
62
+ })
63
+ #endif
64
+
65
+ #define UNALIGNED_MEMBER_PTR(ptr, mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
66
+ #define RB_OBJ_WRITE(a, slot, b) \
67
+ rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), \
68
+ (VALUE)(b), __FILE__, __LINE__)
69
+
70
+ #if USE_RVARGC
71
+ # define SIZE_POOL_COUNT 5
72
+ #else
73
+ # define SIZE_POOL_COUNT 1
74
+ #endif
75
+
76
+ typedef struct ractor_newobj_size_pool_cache {
77
+ struct RVALUE *freelist;
78
+ struct heap_page *using_page;
79
+ } rb_ractor_newobj_size_pool_cache_t;
80
+
81
+ typedef struct ractor_newobj_cache {
82
+ size_t incremental_mark_step_allocated_slots;
83
+ rb_ractor_newobj_size_pool_cache_t size_pool_caches[SIZE_POOL_COUNT];
84
+ } rb_ractor_newobj_cache_t;
85
+
86
+ /* gc.c */
87
+ extern VALUE *ruby_initial_gc_stress_ptr;
88
+ extern int ruby_disable_gc;
89
+ RUBY_ATTR_MALLOC void *ruby_mimmalloc(size_t size);
90
+ void ruby_mimfree(void *ptr);
91
+ void rb_objspace_set_event_hook(const rb_event_flag_t event);
92
+ VALUE rb_objspace_gc_enable(struct rb_objspace *);
93
+ VALUE rb_objspace_gc_disable(struct rb_objspace *);
94
+ void ruby_gc_set_params(void);
95
+ void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
96
+ #if __has_attribute(alloc_align)
97
+ __attribute__((__alloc_align__(1)))
98
+ #endif
99
+ RUBY_ATTR_MALLOC void *rb_aligned_malloc(size_t, size_t) RUBY_ATTR_ALLOC_SIZE((2));
100
+ size_t rb_size_mul_or_raise(size_t, size_t, VALUE); /* used in compile.c */
101
+ size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE); /* used in iseq.h */
102
+ RUBY_ATTR_MALLOC void *rb_xmalloc_mul_add(size_t, size_t, size_t);
103
+ RUBY_ATTR_MALLOC void *rb_xcalloc_mul_add(size_t, size_t, size_t);
104
+ void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
105
+ RUBY_ATTR_MALLOC void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
106
+ RUBY_ATTR_MALLOC void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
107
+ 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));
108
+ 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));
109
+ static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
110
+ VALUE rb_class_allocate_instance(VALUE klass);
111
+ void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache);
112
+ size_t rb_gc_obj_slot_size(VALUE obj);
113
+ bool rb_gc_size_allocatable_p(size_t size);
114
+ int rb_objspace_garbage_object_p(VALUE obj);
115
+
116
+ RUBY_SYMBOL_EXPORT_BEGIN
117
+ /* gc.c (export) */
118
+ const char *rb_objspace_data_type_name(VALUE obj);
119
+ VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
120
+ VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
121
+ VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
122
+ size_t rb_obj_memsize_of(VALUE);
123
+ void rb_gc_verify_internal_consistency(void);
124
+ size_t rb_obj_gc_flags(VALUE, ID[], size_t);
125
+ void rb_gc_mark_values(long n, const VALUE *values);
126
+ void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
127
+ void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
128
+ 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));
129
+ void ruby_sized_xfree(void *x, size_t size);
130
+ RUBY_SYMBOL_EXPORT_END
131
+
132
+ MJIT_SYMBOL_EXPORT_BEGIN
133
+ int rb_ec_stack_check(struct rb_execution_context_struct *ec);
134
+ void rb_gc_writebarrier_remember(VALUE obj);
135
+ const char *rb_obj_info(VALUE obj);
136
+ MJIT_SYMBOL_EXPORT_END
137
+
138
+ #if defined(HAVE_MALLOC_USABLE_SIZE) || defined(HAVE_MALLOC_SIZE) || defined(_WIN32)
139
+
140
+ static inline void *
141
+ ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
142
+ {
143
+ return ruby_xrealloc(ptr, new_size);
144
+ }
145
+
146
+ static inline void *
147
+ ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
148
+ {
149
+ return ruby_xrealloc2(ptr, new_count, elemsiz);
150
+ }
151
+
152
+ static inline void
153
+ ruby_sized_xfree_inlined(void *ptr, size_t size)
154
+ {
155
+ ruby_xfree(ptr);
156
+ }
157
+
158
+ # define SIZED_REALLOC_N(x, y, z, w) REALLOC_N(x, y, z)
159
+
160
+ #else
161
+
162
+ static inline void *
163
+ ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
164
+ {
165
+ return ruby_sized_xrealloc(ptr, new_size, old_size);
166
+ }
167
+
168
+ static inline void *
169
+ ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
170
+ {
171
+ return ruby_sized_xrealloc2(ptr, new_count, elemsiz, old_count);
172
+ }
173
+
174
+ static inline void
175
+ ruby_sized_xfree_inlined(void *ptr, size_t size)
176
+ {
177
+ ruby_sized_xfree(ptr, size);
178
+ }
179
+
180
+ # define SIZED_REALLOC_N(v, T, m, n) \
181
+ ((v) = (T *)ruby_sized_xrealloc2((void *)(v), (m), sizeof(T), (n)))
182
+
183
+ #endif /* HAVE_MALLOC_USABLE_SIZE */
184
+
185
+ #define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
186
+ #define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
187
+ #define ruby_sized_xfree ruby_sized_xfree_inlined
188
+ #endif /* INTERNAL_GC_H */