debase-ruby_core_source 3.2.1 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/addr2line.h +3 -1
  4. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/darray.h +246 -0
  5. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/debug_counter.h +7 -10
  6. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/eval_intern.h +3 -1
  7. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/id.h +44 -0
  8. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/insns_info.inc +128 -154
  9. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/array.h +9 -20
  10. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/bits.h +568 -0
  11. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/class.h +11 -2
  12. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/cmdlineopt.h +5 -1
  13. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compile.h +0 -1
  14. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/error.h +24 -2
  15. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/gc.h +29 -0
  16. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/hash.h +19 -44
  17. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/imemo.h +0 -1
  18. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/io.h +137 -0
  19. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/parse.h +108 -0
  20. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/process.h +0 -14
  21. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/range.h +2 -2
  22. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/re.h +1 -1
  23. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/ruby_parser.h +69 -0
  24. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/signal.h +4 -0
  25. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/string.h +15 -0
  26. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/struct.h +9 -34
  27. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/thread.h +14 -0
  28. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/variable.h +17 -35
  29. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/vm.h +9 -2
  30. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/iseq.h +4 -4
  31. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/method.h +8 -7
  32. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/node.h +128 -0
  33. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/node_name.inc +4 -2
  34. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/parse.h +19 -6
  35. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1/internal/bits.h → ruby-3.3.0-preview3/parser_bits.h} +4 -4
  36. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_node.h +32 -0
  37. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_st.h +162 -0
  38. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_value.h +106 -0
  39. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/prism_compile.h +18 -0
  40. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ractor_core.h +10 -4
  41. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regint.h +8 -0
  42. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regparse.h +2 -1
  43. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/revision.h +5 -0
  44. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/rubyparser.h +1403 -0
  45. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/shape.h +32 -22
  46. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/symbol.h +2 -3
  47. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_none.h +1 -0
  48. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_pthread.h +66 -28
  49. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_win32.h +1 -6
  50. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/variable.h +9 -2
  51. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/version.h +7 -3
  52. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm.inc +383 -497
  53. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_callinfo.h +54 -16
  54. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_core.h +92 -57
  55. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_exec.h +11 -10
  56. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_insnhelper.h +20 -23
  57. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_opts.h +0 -5
  58. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/yjit.h +12 -12
  59. data/lib/debase/ruby_core_source/version.rb +1 -1
  60. metadata +120 -115
  61. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/darray.h +0 -179
  62. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/internal/io.h +0 -38
  63. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/internal/parse.h +0 -25
  64. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/node.h +0 -514
  65. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/opt_sc.inc +0 -109
  66. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/revision.h +0 -5
  67. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/transient_heap.h +0 -65
  68. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/builtin.h +0 -0
  69. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/build_assert/build_assert.h +0 -0
  70. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/check_type/check_type.h +0 -0
  71. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/container_of/container_of.h +0 -0
  72. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/list/list.h +0 -0
  73. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/str/str.h +0 -0
  74. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/constant.h +0 -0
  75. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/dln.h +0 -0
  76. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/encindex.h +0 -0
  77. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/hrtime.h +0 -0
  78. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/id_table.h +0 -0
  79. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/insns.inc +0 -0
  80. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/basic_operators.h +0 -0
  81. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/bignum.h +0 -0
  82. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compar.h +0 -0
  83. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compilers.h +0 -0
  84. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/complex.h +0 -0
  85. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/cont.h +0 -0
  86. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/dir.h +0 -0
  87. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enc.h +0 -0
  88. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/encoding.h +0 -0
  89. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enum.h +0 -0
  90. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enumerator.h +0 -0
  91. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/eval.h +0 -0
  92. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/file.h +0 -0
  93. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/fixnum.h +0 -0
  94. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/inits.h +0 -0
  95. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/load.h +0 -0
  96. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/loadpath.h +0 -0
  97. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/math.h +0 -0
  98. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/missing.h +0 -0
  99. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/numeric.h +0 -0
  100. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/object.h +0 -0
  101. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/proc.h +0 -0
  102. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/ractor.h +0 -0
  103. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/random.h +0 -0
  104. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/rational.h +0 -0
  105. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/sanitizers.h +0 -0
  106. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/serial.h +0 -0
  107. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/static_assert.h +0 -0
  108. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/symbol.h +0 -0
  109. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/time.h +0 -0
  110. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/transcode.h +0 -0
  111. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/util.h +0 -0
  112. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/warnings.h +0 -0
  113. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal.h +0 -0
  114. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/known_errors.inc +0 -0
  115. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/optinsn.inc +0 -0
  116. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/optunifs.inc +0 -0
  117. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/probes_helper.h +0 -0
  118. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regenc.h +0 -0
  119. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/rjit.h +0 -0
  120. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/rjit_c.h +0 -0
  121. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ruby_assert.h +0 -0
  122. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ruby_atomic.h +0 -0
  123. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/siphash.h +0 -0
  124. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/timev.h +0 -0
  125. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/transcode_data.h +0 -0
  126. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_call_iseq_optimized.inc +0 -0
  127. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_debug.h +0 -0
  128. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_sync.h +0 -0
  129. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vmtc.inc +0 -0
@@ -40,8 +40,6 @@ VALUE rb_ary_diff(VALUE ary1, VALUE ary2);
40
40
 
41
41
  static inline VALUE rb_ary_entry_internal(VALUE ary, long offset);
42
42
  static inline bool ARY_PTR_USING_P(VALUE ary);
43
- static inline void RARY_TRANSIENT_SET(VALUE ary);
44
- static inline void RARY_TRANSIENT_UNSET(VALUE ary);
45
43
 
46
44
  VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
47
45
  VALUE rb_check_to_array(VALUE ary);
@@ -56,7 +54,7 @@ static inline VALUE
56
54
  rb_ary_entry_internal(VALUE ary, long offset)
57
55
  {
58
56
  long len = RARRAY_LEN(ary);
59
- const VALUE *ptr = RARRAY_CONST_PTR_TRANSIENT(ary);
57
+ const VALUE *ptr = RARRAY_CONST_PTR(ary);
60
58
  if (len == 0) return Qnil;
61
59
  if (offset < 0) {
62
60
  offset += len;
@@ -118,22 +116,6 @@ ARY_SHARED_ROOT_REFCNT(VALUE ary)
118
116
  return RARRAY(ary)->as.heap.aux.capa;
119
117
  }
120
118
 
121
- static inline void
122
- RARY_TRANSIENT_SET(VALUE ary)
123
- {
124
- #if USE_TRANSIENT_HEAP
125
- FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG);
126
- #endif
127
- }
128
-
129
- static inline void
130
- RARY_TRANSIENT_UNSET(VALUE ary)
131
- {
132
- #if USE_TRANSIENT_HEAP
133
- FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG);
134
- #endif
135
- }
136
-
137
119
  #undef rb_ary_new_from_args
138
120
  #if RBIMPL_HAS_WARNING("-Wgnu-zero-variadic-macro-arguments")
139
121
  # /* Skip it; clang -pedantic doesn't like the following */
@@ -154,9 +136,16 @@ RBIMPL_ATTR_ARTIFICIAL()
154
136
  static inline VALUE
155
137
  RARRAY_AREF(VALUE ary, long i)
156
138
  {
139
+ VALUE val;
157
140
  RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY);
158
141
 
159
- return RARRAY_CONST_PTR_TRANSIENT(ary)[i];
142
+ RBIMPL_WARNING_PUSH();
143
+ #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ == 13
144
+ RBIMPL_WARNING_IGNORED(-Warray-bounds);
145
+ #endif
146
+ val = RARRAY_CONST_PTR(ary)[i];
147
+ RBIMPL_WARNING_POP();
148
+ return val;
160
149
  }
161
150
 
162
151
  #endif /* INTERNAL_ARRAY_H */
@@ -0,0 +1,568 @@
1
+ #ifndef INTERNAL_BITS_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_BITS_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 bitwise integer algorithms.
10
+ * @see Henry S. Warren Jr., "Hacker's Delight" (2nd ed.), 2013.
11
+ * @see SEI CERT C Coding Standard INT32-C. "Ensure that operations on
12
+ * signed integers do not result in overflow"
13
+ * @see https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
14
+ * @see https://clang.llvm.org/docs/LanguageExtensions.html#builtin-rotateleft
15
+ * @see https://clang.llvm.org/docs/LanguageExtensions.html#builtin-rotateright
16
+ * @see https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/byteswap-uint64-byteswap-ulong-byteswap-ushort
17
+ * @see https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/rotl-rotl64-rotr-rotr64
18
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanforward-bitscanforward64
19
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanreverse-bitscanreverse64
20
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/lzcnt16-lzcnt-lzcnt64
21
+ * @see https://docs.microsoft.com/en-us/cpp/intrinsics/popcnt16-popcnt-popcnt64
22
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_lzcnt_u32
23
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tzcnt_u32
24
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rotl64
25
+ * @see https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rotr64
26
+ * @see https://stackoverflow.com/a/776523
27
+ */
28
+ #include "ruby/internal/config.h"
29
+ #include <limits.h> /* for CHAR_BITS */
30
+ #include <stdint.h> /* for uintptr_t */
31
+ #include "internal/compilers.h" /* for MSC_VERSION_SINCE */
32
+
33
+ #if MSC_VERSION_SINCE(1310)
34
+ # include <stdlib.h> /* for _byteswap_uint64 */
35
+ #endif
36
+
37
+ #if defined(HAVE_X86INTRIN_H)
38
+ # include <x86intrin.h> /* for _lzcnt_u64 */
39
+ #elif MSC_VERSION_SINCE(1310)
40
+ # include <intrin.h> /* for the following intrinsics */
41
+ #endif
42
+
43
+ #if defined(_MSC_VER) && defined(__AVX__)
44
+ # pragma intrinsic(__popcnt)
45
+ # pragma intrinsic(__popcnt64)
46
+ #endif
47
+
48
+ #if defined(_MSC_VER) && defined(__AVX2__)
49
+ # pragma intrinsic(__lzcnt)
50
+ # pragma intrinsic(__lzcnt64)
51
+ #endif
52
+
53
+ #if MSC_VERSION_SINCE(1310)
54
+ # pragma intrinsic(_rotl)
55
+ # pragma intrinsic(_rotr)
56
+ # ifdef _WIN64
57
+ # pragma intrinsic(_rotl64)
58
+ # pragma intrinsic(_rotr64)
59
+ # endif
60
+ #endif
61
+
62
+ #if MSC_VERSION_SINCE(1400)
63
+ # pragma intrinsic(_BitScanForward)
64
+ # pragma intrinsic(_BitScanReverse)
65
+ # ifdef _WIN64
66
+ # pragma intrinsic(_BitScanForward64)
67
+ # pragma intrinsic(_BitScanReverse64)
68
+ # endif
69
+ #endif
70
+
71
+ #include "ruby/ruby.h" /* for VALUE */
72
+ #include "internal/static_assert.h" /* for STATIC_ASSERT */
73
+
74
+ /* The most significant bit of the lower part of half-long integer.
75
+ * If sizeof(long) == 4, this is 0x8000.
76
+ * If sizeof(long) == 8, this is 0x80000000.
77
+ */
78
+ #define HALF_LONG_MSB ((SIGNED_VALUE)1<<((SIZEOF_LONG*CHAR_BIT-1)/2))
79
+
80
+ #define SIGNED_INTEGER_TYPE_P(T) (0 > ((T)0)-1)
81
+
82
+ #define SIGNED_INTEGER_MIN(T) \
83
+ ((sizeof(T) == sizeof(int8_t)) ? ((T)INT8_MIN) : \
84
+ ((sizeof(T) == sizeof(int16_t)) ? ((T)INT16_MIN) : \
85
+ ((sizeof(T) == sizeof(int32_t)) ? ((T)INT32_MIN) : \
86
+ ((sizeof(T) == sizeof(int64_t)) ? ((T)INT64_MIN) : \
87
+ 0))))
88
+
89
+ #define SIGNED_INTEGER_MAX(T) ((T)(SIGNED_INTEGER_MIN(T) ^ ((T)~(T)0)))
90
+
91
+ #define UNSIGNED_INTEGER_MAX(T) ((T)~(T)0)
92
+
93
+ #if __has_builtin(__builtin_mul_overflow_p)
94
+ # define MUL_OVERFLOW_P(a, b) \
95
+ __builtin_mul_overflow_p((a), (b), (__typeof__(a * b))0)
96
+ #elif __has_builtin(__builtin_mul_overflow)
97
+ # define MUL_OVERFLOW_P(a, b) \
98
+ __extension__ ({ __typeof__(a) c; __builtin_mul_overflow((a), (b), &c); })
99
+ #endif
100
+
101
+ #define MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, min, max) ( \
102
+ (a) == 0 ? 0 : \
103
+ (a) == -1 ? (b) < -(max) : \
104
+ (a) > 0 ? \
105
+ ((b) > 0 ? (max) / (a) < (b) : (min) / (a) > (b)) : \
106
+ ((b) > 0 ? (min) / (a) < (b) : (max) / (a) > (b)))
107
+
108
+ #if __has_builtin(__builtin_mul_overflow_p)
109
+ /* __builtin_mul_overflow_p can take bitfield */
110
+ /* and GCC permits bitfields for integers other than int */
111
+ # define MUL_OVERFLOW_FIXNUM_P(a, b) \
112
+ __extension__ ({ \
113
+ struct { long fixnum : sizeof(long) * CHAR_BIT - 1; } c = { 0 }; \
114
+ __builtin_mul_overflow_p((a), (b), c.fixnum); \
115
+ })
116
+ #else
117
+ # define MUL_OVERFLOW_FIXNUM_P(a, b) \
118
+ MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, FIXNUM_MIN, FIXNUM_MAX)
119
+ #endif
120
+
121
+ #if defined(MUL_OVERFLOW_P) && defined(USE___BUILTIN_MUL_OVERFLOW_LONG_LONG)
122
+ # define MUL_OVERFLOW_LONG_LONG_P(a, b) MUL_OVERFLOW_P(a, b)
123
+ #else
124
+ # define MUL_OVERFLOW_LONG_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LLONG_MIN, LLONG_MAX)
125
+ #endif
126
+
127
+ #ifdef MUL_OVERFLOW_P
128
+ # define MUL_OVERFLOW_LONG_P(a, b) MUL_OVERFLOW_P(a, b)
129
+ # define MUL_OVERFLOW_INT_P(a, b) MUL_OVERFLOW_P(a, b)
130
+ #else
131
+ # define MUL_OVERFLOW_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LONG_MIN, LONG_MAX)
132
+ # define MUL_OVERFLOW_INT_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, INT_MIN, INT_MAX)
133
+ #endif
134
+
135
+ #ifdef HAVE_UINT128_T
136
+ # define bit_length(x) \
137
+ (unsigned int) \
138
+ (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : \
139
+ sizeof(x) <= sizeof(int64_t) ? 64 - nlz_int64((uint64_t)(x)) : \
140
+ 128 - nlz_int128((uint128_t)(x)))
141
+ #else
142
+ # define bit_length(x) \
143
+ (unsigned int) \
144
+ (sizeof(x) <= sizeof(int32_t) ? 32 - nlz_int32((uint32_t)(x)) : \
145
+ 64 - nlz_int64((uint64_t)(x)))
146
+ #endif
147
+
148
+ #ifndef swap16
149
+ # define swap16 ruby_swap16
150
+ #endif
151
+
152
+ #ifndef swap32
153
+ # define swap32 ruby_swap32
154
+ #endif
155
+
156
+ #ifndef swap64
157
+ # define swap64 ruby_swap64
158
+ #endif
159
+
160
+ static inline uint16_t ruby_swap16(uint16_t);
161
+ static inline uint32_t ruby_swap32(uint32_t);
162
+ static inline uint64_t ruby_swap64(uint64_t);
163
+ static inline unsigned nlz_int(unsigned x);
164
+ static inline unsigned nlz_long(unsigned long x);
165
+ static inline unsigned nlz_long_long(unsigned long long x);
166
+ static inline unsigned nlz_intptr(uintptr_t x);
167
+ static inline unsigned nlz_int32(uint32_t x);
168
+ static inline unsigned nlz_int64(uint64_t x);
169
+ #ifdef HAVE_UINT128_T
170
+ static inline unsigned nlz_int128(uint128_t x);
171
+ #endif
172
+ static inline unsigned rb_popcount32(uint32_t x);
173
+ static inline unsigned rb_popcount64(uint64_t x);
174
+ static inline unsigned rb_popcount_intptr(uintptr_t x);
175
+ static inline int ntz_int32(uint32_t x);
176
+ static inline int ntz_int64(uint64_t x);
177
+ static inline int ntz_intptr(uintptr_t x);
178
+ static inline VALUE RUBY_BIT_ROTL(VALUE, int);
179
+ static inline VALUE RUBY_BIT_ROTR(VALUE, int);
180
+
181
+ static inline uint16_t
182
+ ruby_swap16(uint16_t x)
183
+ {
184
+ #if __has_builtin(__builtin_bswap16)
185
+ return __builtin_bswap16(x);
186
+
187
+ #elif MSC_VERSION_SINCE(1310)
188
+ return _byteswap_ushort(x);
189
+
190
+ #else
191
+ return (x << 8) | (x >> 8);
192
+
193
+ #endif
194
+ }
195
+
196
+ static inline uint32_t
197
+ ruby_swap32(uint32_t x)
198
+ {
199
+ #if __has_builtin(__builtin_bswap32)
200
+ return __builtin_bswap32(x);
201
+
202
+ #elif MSC_VERSION_SINCE(1310)
203
+ return _byteswap_ulong(x);
204
+
205
+ #else
206
+ x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16);
207
+ x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8);
208
+ return x;
209
+
210
+ #endif
211
+ }
212
+
213
+ static inline uint64_t
214
+ ruby_swap64(uint64_t x)
215
+ {
216
+ #if __has_builtin(__builtin_bswap64)
217
+ return __builtin_bswap64(x);
218
+
219
+ #elif MSC_VERSION_SINCE(1310)
220
+ return _byteswap_uint64(x);
221
+
222
+ #else
223
+ x = ((x & 0x00000000FFFFFFFFULL) << 32) | ((x & 0xFFFFFFFF00000000ULL) >> 32);
224
+ x = ((x & 0x0000FFFF0000FFFFULL) << 16) | ((x & 0xFFFF0000FFFF0000ULL) >> 16);
225
+ x = ((x & 0x00FF00FF00FF00FFULL) << 8) | ((x & 0xFF00FF00FF00FF00ULL) >> 8);
226
+ return x;
227
+
228
+ #endif
229
+ }
230
+
231
+ static inline unsigned int
232
+ nlz_int32(uint32_t x)
233
+ {
234
+ #if defined(_MSC_VER) && defined(__AVX2__)
235
+ /* Note: It seems there is no such thing like __LZCNT__ predefined in MSVC.
236
+ * AMD CPUs have had this instruction for decades (since K10) but for
237
+ * Intel, Haswell is the oldest one. We need to use __AVX2__ for maximum
238
+ * safety. */
239
+ return (unsigned int)__lzcnt(x);
240
+
241
+ #elif defined(__x86_64__) && defined(__LZCNT__)
242
+ return (unsigned int)_lzcnt_u32(x);
243
+
244
+ #elif MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */
245
+ unsigned long r;
246
+ return _BitScanReverse(&r, x) ? (31 - (int)r) : 32;
247
+
248
+ #elif __has_builtin(__builtin_clz)
249
+ STATIC_ASSERT(sizeof_int, sizeof(int) * CHAR_BIT == 32);
250
+ return x ? (unsigned int)__builtin_clz(x) : 32;
251
+
252
+ #else
253
+ uint32_t y;
254
+ unsigned n = 32;
255
+ y = x >> 16; if (y) {n -= 16; x = y;}
256
+ y = x >> 8; if (y) {n -= 8; x = y;}
257
+ y = x >> 4; if (y) {n -= 4; x = y;}
258
+ y = x >> 2; if (y) {n -= 2; x = y;}
259
+ y = x >> 1; if (y) {return n - 2;}
260
+ return (unsigned int)(n - x);
261
+ #endif
262
+ }
263
+
264
+ static inline unsigned int
265
+ nlz_int64(uint64_t x)
266
+ {
267
+ #if defined(_MSC_VER) && defined(__AVX2__)
268
+ return (unsigned int)__lzcnt64(x);
269
+
270
+ #elif defined(__x86_64__) && defined(__LZCNT__)
271
+ return (unsigned int)_lzcnt_u64(x);
272
+
273
+ #elif defined(_WIN64) && MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */
274
+ unsigned long r;
275
+ return _BitScanReverse64(&r, x) ? (63u - (unsigned int)r) : 64;
276
+
277
+ #elif __has_builtin(__builtin_clzl)
278
+ if (x == 0) {
279
+ return 64;
280
+ }
281
+ else if (sizeof(long) * CHAR_BIT == 64) {
282
+ return (unsigned int)__builtin_clzl((unsigned long)x);
283
+ }
284
+ else if (sizeof(long long) * CHAR_BIT == 64) {
285
+ return (unsigned int)__builtin_clzll((unsigned long long)x);
286
+ }
287
+ else {
288
+ /* :FIXME: Is there a way to make this branch a compile-time error? */
289
+ UNREACHABLE_RETURN(~0);
290
+ }
291
+
292
+ #else
293
+ uint64_t y;
294
+ unsigned int n = 64;
295
+ y = x >> 32; if (y) {n -= 32; x = y;}
296
+ y = x >> 16; if (y) {n -= 16; x = y;}
297
+ y = x >> 8; if (y) {n -= 8; x = y;}
298
+ y = x >> 4; if (y) {n -= 4; x = y;}
299
+ y = x >> 2; if (y) {n -= 2; x = y;}
300
+ y = x >> 1; if (y) {return n - 2;}
301
+ return (unsigned int)(n - x);
302
+
303
+ #endif
304
+ }
305
+
306
+ #ifdef HAVE_UINT128_T
307
+ static inline unsigned int
308
+ nlz_int128(uint128_t x)
309
+ {
310
+ uint64_t y = (uint64_t)(x >> 64);
311
+
312
+ if (x == 0) {
313
+ return 128;
314
+ }
315
+ else if (y == 0) {
316
+ return (unsigned int)nlz_int64(x) + 64;
317
+ }
318
+ else {
319
+ return (unsigned int)nlz_int64(y);
320
+ }
321
+ }
322
+ #endif
323
+
324
+ static inline unsigned int
325
+ nlz_int(unsigned int x)
326
+ {
327
+ if (sizeof(unsigned int) * CHAR_BIT == 32) {
328
+ return nlz_int32((uint32_t)x);
329
+ }
330
+ else if (sizeof(unsigned int) * CHAR_BIT == 64) {
331
+ return nlz_int64((uint64_t)x);
332
+ }
333
+ else {
334
+ UNREACHABLE_RETURN(~0);
335
+ }
336
+ }
337
+
338
+ static inline unsigned int
339
+ nlz_long(unsigned long x)
340
+ {
341
+ if (sizeof(unsigned long) * CHAR_BIT == 32) {
342
+ return nlz_int32((uint32_t)x);
343
+ }
344
+ else if (sizeof(unsigned long) * CHAR_BIT == 64) {
345
+ return nlz_int64((uint64_t)x);
346
+ }
347
+ else {
348
+ UNREACHABLE_RETURN(~0);
349
+ }
350
+ }
351
+
352
+ static inline unsigned int
353
+ nlz_long_long(unsigned long long x)
354
+ {
355
+ if (sizeof(unsigned long long) * CHAR_BIT == 64) {
356
+ return nlz_int64((uint64_t)x);
357
+ }
358
+ #ifdef HAVE_UINT128_T
359
+ else if (sizeof(unsigned long long) * CHAR_BIT == 128) {
360
+ return nlz_int128((uint128_t)x);
361
+ }
362
+ #endif
363
+ else {
364
+ UNREACHABLE_RETURN(~0);
365
+ }
366
+ }
367
+
368
+ static inline unsigned int
369
+ nlz_intptr(uintptr_t x)
370
+ {
371
+ if (sizeof(uintptr_t) == sizeof(unsigned int)) {
372
+ return nlz_int((unsigned int)x);
373
+ }
374
+ if (sizeof(uintptr_t) == sizeof(unsigned long)) {
375
+ return nlz_long((unsigned long)x);
376
+ }
377
+ if (sizeof(uintptr_t) == sizeof(unsigned long long)) {
378
+ return nlz_long_long((unsigned long long)x);
379
+ }
380
+ else {
381
+ UNREACHABLE_RETURN(~0);
382
+ }
383
+ }
384
+
385
+ static inline unsigned int
386
+ rb_popcount32(uint32_t x)
387
+ {
388
+ #if defined(_MSC_VER) && defined(__AVX__)
389
+ /* Note: CPUs since Nehalem and Barcelona have had this instruction so SSE
390
+ * 4.2 should suffice, but it seems there is no such thing like __SSE_4_2__
391
+ * predefined macro in MSVC. They do have __AVX__ so use it instead. */
392
+ return (unsigned int)__popcnt(x);
393
+
394
+ #elif __has_builtin(__builtin_popcount)
395
+ STATIC_ASSERT(sizeof_int, sizeof(int) * CHAR_BIT >= 32);
396
+ return (unsigned int)__builtin_popcount(x);
397
+
398
+ #else
399
+ x = (x & 0x55555555) + (x >> 1 & 0x55555555);
400
+ x = (x & 0x33333333) + (x >> 2 & 0x33333333);
401
+ x = (x & 0x07070707) + (x >> 4 & 0x07070707);
402
+ x = (x & 0x000f000f) + (x >> 8 & 0x000f000f);
403
+ x = (x & 0x0000001f) + (x >>16 & 0x0000001f);
404
+ return (unsigned int)x;
405
+
406
+ #endif
407
+ }
408
+
409
+ static inline unsigned int
410
+ rb_popcount64(uint64_t x)
411
+ {
412
+ #if defined(_MSC_VER) && defined(__AVX__)
413
+ return (unsigned int)__popcnt64(x);
414
+
415
+ #elif __has_builtin(__builtin_popcount)
416
+ if (sizeof(long) * CHAR_BIT == 64) {
417
+ return (unsigned int)__builtin_popcountl((unsigned long)x);
418
+ }
419
+ else if (sizeof(long long) * CHAR_BIT == 64) {
420
+ return (unsigned int)__builtin_popcountll((unsigned long long)x);
421
+ }
422
+ else {
423
+ /* :FIXME: Is there a way to make this branch a compile-time error? */
424
+ UNREACHABLE_RETURN(~0);
425
+ }
426
+
427
+ #else
428
+ x = (x & 0x5555555555555555) + (x >> 1 & 0x5555555555555555);
429
+ x = (x & 0x3333333333333333) + (x >> 2 & 0x3333333333333333);
430
+ x = (x & 0x0707070707070707) + (x >> 4 & 0x0707070707070707);
431
+ x = (x & 0x000f000f000f000f) + (x >> 8 & 0x000f000f000f000f);
432
+ x = (x & 0x0000001f0000001f) + (x >>16 & 0x0000001f0000001f);
433
+ x = (x & 0x000000000000003f) + (x >>32 & 0x000000000000003f);
434
+ return (unsigned int)x;
435
+
436
+ #endif
437
+ }
438
+
439
+ static inline unsigned int
440
+ rb_popcount_intptr(uintptr_t x)
441
+ {
442
+ if (sizeof(uintptr_t) * CHAR_BIT == 64) {
443
+ return rb_popcount64((uint64_t)x);
444
+ }
445
+ else if (sizeof(uintptr_t) * CHAR_BIT == 32) {
446
+ return rb_popcount32((uint32_t)x);
447
+ }
448
+ else {
449
+ UNREACHABLE_RETURN(~0);
450
+ }
451
+ }
452
+
453
+ static inline int
454
+ ntz_int32(uint32_t x)
455
+ {
456
+ #if defined(__x86_64__) && defined(__BMI__)
457
+ return (unsigned)_tzcnt_u32(x);
458
+
459
+ #elif MSC_VERSION_SINCE(1400)
460
+ /* :FIXME: Is there any way to issue TZCNT instead of BSF, apart from using
461
+ * assembly? Because issuing LZCNT seems possible (see nlz.h). */
462
+ unsigned long r;
463
+ return _BitScanForward(&r, x) ? (int)r : 32;
464
+
465
+ #elif __has_builtin(__builtin_ctz)
466
+ STATIC_ASSERT(sizeof_int, sizeof(int) * CHAR_BIT == 32);
467
+ return x ? (unsigned)__builtin_ctz(x) : 32;
468
+
469
+ #else
470
+ return rb_popcount32((~x) & (x-1));
471
+
472
+ #endif
473
+ }
474
+
475
+ static inline int
476
+ ntz_int64(uint64_t x)
477
+ {
478
+ #if defined(__x86_64__) && defined(__BMI__)
479
+ return (unsigned)_tzcnt_u64(x);
480
+
481
+ #elif defined(_WIN64) && MSC_VERSION_SINCE(1400)
482
+ unsigned long r;
483
+ return _BitScanForward64(&r, x) ? (int)r : 64;
484
+
485
+ #elif __has_builtin(__builtin_ctzl)
486
+ if (x == 0) {
487
+ return 64;
488
+ }
489
+ else if (sizeof(long) * CHAR_BIT == 64) {
490
+ return (unsigned)__builtin_ctzl((unsigned long)x);
491
+ }
492
+ else if (sizeof(long long) * CHAR_BIT == 64) {
493
+ return (unsigned)__builtin_ctzll((unsigned long long)x);
494
+ }
495
+ else {
496
+ /* :FIXME: Is there a way to make this branch a compile-time error? */
497
+ UNREACHABLE_RETURN(~0);
498
+ }
499
+
500
+ #else
501
+ return rb_popcount64((~x) & (x-1));
502
+
503
+ #endif
504
+ }
505
+
506
+ static inline int
507
+ ntz_intptr(uintptr_t x)
508
+ {
509
+ if (sizeof(uintptr_t) * CHAR_BIT == 64) {
510
+ return ntz_int64((uint64_t)x);
511
+ }
512
+ else if (sizeof(uintptr_t) * CHAR_BIT == 32) {
513
+ return ntz_int32((uint32_t)x);
514
+ }
515
+ else {
516
+ UNREACHABLE_RETURN(~0);
517
+ }
518
+ }
519
+
520
+ static inline VALUE
521
+ RUBY_BIT_ROTL(VALUE v, int n)
522
+ {
523
+ #if __has_builtin(__builtin_rotateleft32) && (SIZEOF_VALUE * CHAR_BIT == 32)
524
+ return __builtin_rotateleft32(v, n);
525
+
526
+ #elif __has_builtin(__builtin_rotateleft64) && (SIZEOF_VALUE * CHAR_BIT == 64)
527
+ return __builtin_rotateleft64(v, n);
528
+
529
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32)
530
+ return _rotl(v, n);
531
+
532
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64)
533
+ return _rotl64(v, n);
534
+
535
+ #elif defined(_lrotl) && (SIZEOF_VALUE == SIZEOF_LONG)
536
+ return _lrotl(v, n);
537
+
538
+ #else
539
+ const int m = (sizeof(VALUE) * CHAR_BIT) - 1;
540
+ return (v << (n & m)) | (v >> (-n & m));
541
+ #endif
542
+ }
543
+
544
+ static inline VALUE
545
+ RUBY_BIT_ROTR(VALUE v, int n)
546
+ {
547
+ #if __has_builtin(__builtin_rotateright32) && (SIZEOF_VALUE * CHAR_BIT == 32)
548
+ return __builtin_rotateright32(v, n);
549
+
550
+ #elif __has_builtin(__builtin_rotateright64) && (SIZEOF_VALUE * CHAR_BIT == 64)
551
+ return __builtin_rotateright64(v, n);
552
+
553
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32)
554
+ return _rotr(v, n);
555
+
556
+ #elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64)
557
+ return _rotr64(v, n);
558
+
559
+ #elif defined(_lrotr) && (SIZEOF_VALUE == SIZEOF_LONG)
560
+ return _lrotr(v, n);
561
+
562
+ #else
563
+ const int m = (sizeof(VALUE) * CHAR_BIT) - 1;
564
+ return (v << (-n & m)) | (v >> (n & m));
565
+ #endif
566
+ }
567
+
568
+ #endif /* INTERNAL_BITS_H */
@@ -17,6 +17,9 @@
17
17
  #include "ruby/intern.h" /* for rb_alloc_func_t */
18
18
  #include "ruby/ruby.h" /* for struct RBasic */
19
19
  #include "shape.h"
20
+ #include "ruby_assert.h"
21
+ #include "vm_core.h"
22
+ #include "method.h" /* for rb_cref_t */
20
23
 
21
24
  #ifdef RCLASS_SUPER
22
25
  # undef RCLASS_SUPER
@@ -32,6 +35,7 @@ typedef struct rb_subclass_entry rb_subclass_entry_t;
32
35
  struct rb_cvar_class_tbl_entry {
33
36
  uint32_t index;
34
37
  rb_serial_t global_cvar_state;
38
+ const rb_cref_t * cref;
35
39
  VALUE class_value;
36
40
  };
37
41
 
@@ -81,7 +85,12 @@ struct RClass {
81
85
  // Assert that classes can be embedded in size_pools[2] (which has 160B slot size)
82
86
  STATIC_ASSERT(sizeof_rb_classext_t, sizeof(struct RClass) + sizeof(rb_classext_t) <= 4 * RVALUE_SIZE);
83
87
 
84
- #define RCLASS_EXT(c) ((rb_classext_t *)((char *)(c) + sizeof(struct RClass)))
88
+ struct RClass_and_rb_classext_t {
89
+ struct RClass rclass;
90
+ rb_classext_t classext;
91
+ };
92
+
93
+ #define RCLASS_EXT(c) (&((struct RClass_and_rb_classext_t*)(c))->classext)
85
94
  #define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
86
95
  #define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
87
96
  #define RCLASS_IVPTR(c) (RCLASS_EXT(c)->iv_ptr)
@@ -143,7 +152,7 @@ static inline rb_alloc_func_t
143
152
  RCLASS_ALLOCATOR(VALUE klass)
144
153
  {
145
154
  if (FL_TEST_RAW(klass, FL_SINGLETON)) {
146
- return NULL;
155
+ return 0;
147
156
  }
148
157
  return RCLASS_EXT(klass)->as.class.allocator;
149
158
  }
@@ -23,11 +23,15 @@ typedef struct ruby_cmdline_options {
23
23
  ruby_features_t features;
24
24
  ruby_features_t warn;
25
25
  unsigned int dump;
26
+ long backtrace_length_limit;
26
27
  #if USE_RJIT
27
28
  struct rb_rjit_options rjit;
28
29
  #endif
29
30
 
30
- int sflag, xflag;
31
+ const char *crash_report;
32
+
33
+ signed int sflag: 2;
34
+ unsigned int xflag: 1;
31
35
  unsigned int warning: 1;
32
36
  unsigned int verbose: 1;
33
37
  unsigned int do_loop: 1;
@@ -17,7 +17,6 @@ struct rb_iseq_struct; /* in vm_core.h */
17
17
  /* compile.c */
18
18
  int rb_dvar_defined(ID, const struct rb_iseq_struct *);
19
19
  int rb_local_defined(ID, const struct rb_iseq_struct *);
20
- bool rb_insns_leaf_p(int i);
21
20
  int rb_insn_len(VALUE insn);
22
21
  const char *rb_insns_name(int i);
23
22
  VALUE rb_insns_name_array(void);