debase-ruby_core_source 0.10.7 → 0.10.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +1 -1
  4. data/Rakefile +6 -3
  5. data/debase-ruby_core_source.gemspec +2 -1
  6. data/lib/debase/ruby_core_source.rb +0 -1
  7. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/addr2line.h +0 -0
  8. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/builtin.h +78 -0
  9. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/ccan/build_assert/build_assert.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/ccan/check_type/check_type.h +0 -0
  11. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/ccan/container_of/container_of.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/ccan/list/list.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/ccan/str/str.h +0 -0
  14. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/constant.h +0 -4
  15. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/debug_counter.h +21 -9
  16. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/dln.h +0 -0
  17. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/encindex.h +0 -0
  18. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/eval_intern.h +1 -3
  19. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/gc.h +2 -0
  20. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/hrtime.h +0 -0
  21. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/id.h +1 -3
  22. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/id_table.h +0 -0
  23. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/insns.inc +6 -2
  24. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/insns_info.inc +1471 -1888
  25. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/internal.h +106 -91
  26. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/iseq.h +5 -5
  27. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/known_errors.inc +0 -0
  28. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/method.h +1 -4
  29. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/mjit.h +3 -5
  30. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/mjit_compile.inc +768 -872
  31. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/node.h +4 -11
  32. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/node_name.inc +0 -2
  33. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/opt_sc.inc +109 -0
  34. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/optinsn.inc +0 -0
  35. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/optunifs.inc +43 -0
  36. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/parse.h +1 -1
  37. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/probes_helper.h +0 -0
  38. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/regenc.h +0 -0
  39. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/regint.h +0 -0
  40. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/regparse.h +0 -0
  41. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/revision.h +2 -0
  42. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/ruby_assert.h +0 -0
  43. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/ruby_atomic.h +0 -0
  44. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/siphash.h +0 -0
  45. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/symbol.h +0 -0
  46. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/thread_pthread.h +0 -0
  47. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/thread_win32.h +0 -0
  48. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/timev.h +0 -0
  49. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/transcode_data.h +0 -0
  50. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/transient_heap.h +0 -0
  51. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/variable.h +9 -0
  52. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/version.h +4 -4
  53. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vm.inc +604 -407
  54. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vm_call_iseq_optimized.inc +49 -49
  55. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vm_core.h +42 -29
  56. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vm_debug.h +0 -0
  57. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vm_exec.h +0 -0
  58. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vm_insnhelper.h +16 -4
  59. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vm_opts.h +2 -0
  60. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-2.7.0-p0}/vmtc.inc +6 -2
  61. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/addr2line.h +20 -0
  62. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/builtin.h +83 -0
  63. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/build_assert/build_assert.h +40 -0
  64. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/check_type/check_type.h +63 -0
  65. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/container_of/container_of.h +142 -0
  66. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/list/list.h +788 -0
  67. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/str/str.h +16 -0
  68. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/constant.h +55 -0
  69. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/debug_counter.h +457 -0
  70. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/dln.h +36 -0
  71. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/encindex.h +70 -0
  72. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/eval_intern.h +323 -0
  73. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/gc.h +140 -0
  74. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/hrtime.h +168 -0
  75. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/id.h +290 -0
  76. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/id_table.h +36 -0
  77. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/insns.inc +249 -0
  78. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/insns_info.inc +8983 -0
  79. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal.h +107 -0
  80. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/array.h +119 -0
  81. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bignum.h +246 -0
  82. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bits.h +566 -0
  83. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/class.h +174 -0
  84. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compar.h +50 -0
  85. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compile.h +32 -0
  86. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compilers.h +108 -0
  87. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/complex.h +29 -0
  88. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/cont.h +25 -0
  89. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/dir.h +17 -0
  90. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enc.h +20 -0
  91. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/encoding.h +28 -0
  92. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enum.h +19 -0
  93. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enumerator.h +22 -0
  94. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/error.h +124 -0
  95. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/eval.h +33 -0
  96. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/file.h +39 -0
  97. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/fixnum.h +185 -0
  98. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/gc.h +161 -0
  99. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/hash.h +241 -0
  100. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/imemo.h +243 -0
  101. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/inits.h +51 -0
  102. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/io.h +35 -0
  103. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/load.h +19 -0
  104. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/loadpath.h +17 -0
  105. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/math.h +24 -0
  106. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/missing.h +19 -0
  107. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/numeric.h +255 -0
  108. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/object.h +83 -0
  109. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/parse.h +23 -0
  110. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/proc.h +33 -0
  111. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/process.h +136 -0
  112. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/random.h +17 -0
  113. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/range.h +41 -0
  114. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/rational.h +71 -0
  115. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/re.h +29 -0
  116. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/sanitizers.h +191 -0
  117. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/scheduler.h +44 -0
  118. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/serial.h +24 -0
  119. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/signal.h +22 -0
  120. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/static_assert.h +17 -0
  121. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/string.h +140 -0
  122. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/struct.h +154 -0
  123. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/symbol.h +41 -0
  124. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/thread.h +54 -0
  125. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/time.h +35 -0
  126. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/transcode.h +21 -0
  127. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/util.h +31 -0
  128. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/variable.h +84 -0
  129. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/vm.h +136 -0
  130. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/warnings.h +17 -0
  131. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/iseq.h +305 -0
  132. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/known_errors.inc +791 -0
  133. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/method.h +245 -0
  134. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/mjit.h +220 -0
  135. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/mjit_compile.inc +8240 -0
  136. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/node.h +484 -0
  137. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/node_name.inc +210 -0
  138. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/opt_sc.inc +0 -0
  139. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/optinsn.inc +128 -0
  140. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/optunifs.inc +0 -0
  141. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/parse.h +211 -0
  142. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/probes_helper.h +44 -0
  143. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ractor_core.h +343 -0
  144. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/regenc.h +254 -0
  145. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/regint.h +938 -0
  146. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/regparse.h +370 -0
  147. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/revision.h +2 -0
  148. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_assert.h +15 -0
  149. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_atomic.h +23 -0
  150. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/siphash.h +48 -0
  151. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/symbol.h +119 -0
  152. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/thread_pthread.h +115 -0
  153. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/thread_win32.h +61 -0
  154. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/timev.h +57 -0
  155. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/transcode_data.h +138 -0
  156. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/transient_heap.h +65 -0
  157. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/variable.h +22 -0
  158. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/version.h +89 -0
  159. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm.inc +5355 -0
  160. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_call_iseq_optimized.inc +244 -0
  161. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_callinfo.h +456 -0
  162. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_core.h +2023 -0
  163. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_debug.h +116 -0
  164. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_exec.h +196 -0
  165. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_insnhelper.h +257 -0
  166. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_opts.h +73 -0
  167. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_sync.h +136 -0
  168. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vmtc.inc +243 -0
  169. data/lib/debase/ruby_core_source/version.rb +1 -1
  170. metadata +181 -57
  171. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/revision.h +0 -2
@@ -841,12 +841,12 @@ enum ruby_rhash_flags {
841
841
  #define RHASH_AR_TABLE_SIZE_RAW(h) \
842
842
  ((unsigned int)((RBASIC(h)->flags & RHASH_AR_TABLE_SIZE_MASK) >> RHASH_AR_TABLE_SIZE_SHIFT))
843
843
 
844
- int rb_hash_ar_table_p(VALUE hash);
845
- struct ar_table_struct *rb_hash_ar_table(VALUE hash);
846
- st_table *rb_hash_st_table(VALUE hash);
847
844
  void rb_hash_st_table_set(VALUE hash, st_table *st);
848
845
 
849
846
  #if 0 /* for debug */
847
+ int rb_hash_ar_table_p(VALUE hash);
848
+ struct ar_table_struct *rb_hash_ar_table(VALUE hash);
849
+ st_table *rb_hash_st_table(VALUE hash);
850
850
  #define RHASH_AR_TABLE_P(hash) rb_hash_ar_table_p(hash)
851
851
  #define RHASH_AR_TABLE(h) rb_hash_ar_table(h)
852
852
  #define RHASH_ST_TABLE(h) rb_hash_st_table(h)
@@ -1004,19 +1004,25 @@ struct rb_subclass_entry {
1004
1004
  typedef unsigned LONG_LONG rb_serial_t;
1005
1005
  #define SERIALT2NUM ULL2NUM
1006
1006
  #define PRI_SERIALT_PREFIX PRI_LL_PREFIX
1007
+ #define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
1007
1008
  #elif defined(HAVE_UINT64_T)
1008
1009
  typedef uint64_t rb_serial_t;
1009
1010
  #define SERIALT2NUM SIZET2NUM
1010
1011
  #define PRI_SERIALT_PREFIX PRI_64_PREFIX
1012
+ #define SIZEOF_SERIAL_T SIZEOF_UINT64_T
1011
1013
  #else
1012
1014
  typedef unsigned long rb_serial_t;
1013
1015
  #define SERIALT2NUM ULONG2NUM
1014
1016
  #define PRI_SERIALT_PREFIX PRI_LONG_PREFIX
1017
+ #define SIZEOF_SERIAL_T SIZEOF_LONG
1015
1018
  #endif
1016
1019
 
1017
1020
  struct rb_classext_struct {
1018
1021
  struct st_table *iv_index_tbl;
1019
1022
  struct st_table *iv_tbl;
1023
+ #if SIZEOF_SERIAL_T == SIZEOF_VALUE /* otherwise m_tbl is in struct RClass */
1024
+ struct rb_id_table *m_tbl;
1025
+ #endif
1020
1026
  struct rb_id_table *const_tbl;
1021
1027
  struct rb_id_table *callable_m_tbl;
1022
1028
  rb_subclass_entry_t *subclasses;
@@ -1027,10 +1033,13 @@ struct rb_classext_struct {
1027
1033
  * included. Hopefully that makes sense.
1028
1034
  */
1029
1035
  rb_subclass_entry_t **module_subclasses;
1036
+ #if SIZEOF_SERIAL_T != SIZEOF_VALUE /* otherwise class_serial is in struct RClass */
1030
1037
  rb_serial_t class_serial;
1038
+ #endif
1031
1039
  const VALUE origin_;
1032
1040
  const VALUE refined_class;
1033
1041
  rb_alloc_func_t allocator;
1042
+ const VALUE includer;
1034
1043
  };
1035
1044
 
1036
1045
  typedef struct rb_classext_struct rb_classext_t;
@@ -1040,7 +1049,13 @@ struct RClass {
1040
1049
  struct RBasic basic;
1041
1050
  VALUE super;
1042
1051
  rb_classext_t *ptr;
1052
+ #if SIZEOF_SERIAL_T == SIZEOF_VALUE
1053
+ /* Class serial is as wide as VALUE. Place it here. */
1054
+ rb_serial_t class_serial;
1055
+ #else
1056
+ /* Class serial does not fit into struct RClass. Place m_tbl instead. */
1043
1057
  struct rb_id_table *m_tbl;
1058
+ #endif
1044
1059
  };
1045
1060
 
1046
1061
  void rb_class_subclass_add(VALUE super, VALUE klass);
@@ -1050,15 +1065,25 @@ int rb_singleton_class_internal_p(VALUE sklass);
1050
1065
  #define RCLASS_EXT(c) (RCLASS(c)->ptr)
1051
1066
  #define RCLASS_IV_TBL(c) (RCLASS_EXT(c)->iv_tbl)
1052
1067
  #define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
1053
- #define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
1068
+ #if SIZEOF_SERIAL_T == SIZEOF_VALUE
1069
+ # define RCLASS_M_TBL(c) (RCLASS_EXT(c)->m_tbl)
1070
+ #else
1071
+ # define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
1072
+ #endif
1054
1073
  #define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl)
1055
1074
  #define RCLASS_IV_INDEX_TBL(c) (RCLASS_EXT(c)->iv_index_tbl)
1056
1075
  #define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_)
1057
1076
  #define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class)
1058
- #define RCLASS_SERIAL(c) (RCLASS_EXT(c)->class_serial)
1077
+ #if SIZEOF_SERIAL_T == SIZEOF_VALUE
1078
+ # define RCLASS_SERIAL(c) (RCLASS(c)->class_serial)
1079
+ #else
1080
+ # define RCLASS_SERIAL(c) (RCLASS_EXT(c)->class_serial)
1081
+ #endif
1082
+ #define RCLASS_INCLUDER(c) (RCLASS_EXT(c)->includer)
1059
1083
 
1060
1084
  #define RCLASS_CLONED FL_USER6
1061
1085
  #define RICLASS_IS_ORIGIN FL_USER5
1086
+ #define RCLASS_REFINED_BY_ANY FL_USER7
1062
1087
 
1063
1088
  static inline void
1064
1089
  RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
@@ -1067,6 +1092,12 @@ RCLASS_SET_ORIGIN(VALUE klass, VALUE origin)
1067
1092
  if (klass != origin) FL_SET(origin, RICLASS_IS_ORIGIN);
1068
1093
  }
1069
1094
 
1095
+ static inline void
1096
+ RCLASS_SET_INCLUDER(VALUE iclass, VALUE klass)
1097
+ {
1098
+ RB_OBJ_WRITE(iclass, &RCLASS_INCLUDER(iclass), klass);
1099
+ }
1100
+
1070
1101
  #undef RCLASS_SUPER
1071
1102
  static inline VALUE
1072
1103
  RCLASS_SUPER(VALUE klass)
@@ -1206,7 +1237,6 @@ typedef struct rb_imemo_tmpbuf_struct {
1206
1237
  } rb_imemo_tmpbuf_t;
1207
1238
 
1208
1239
  #define rb_imemo_tmpbuf_auto_free_pointer() rb_imemo_new(imemo_tmpbuf, 0, 0, 0, 0)
1209
- VALUE rb_imemo_tmpbuf_auto_free_maybe_mark_buffer(void *buf, size_t cnt);
1210
1240
  rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
1211
1241
 
1212
1242
  #define RB_IMEMO_TMPBUF_PTR(v) \
@@ -1364,7 +1394,6 @@ void rb_ary_delete_same(VALUE, VALUE);
1364
1394
  VALUE rb_ary_tmp_new_fill(long capa);
1365
1395
  VALUE rb_ary_at(VALUE, VALUE);
1366
1396
  VALUE rb_ary_aref1(VALUE ary, VALUE i);
1367
- VALUE rb_ary_aref2(VALUE ary, VALUE b, VALUE e);
1368
1397
  size_t rb_ary_memsize(VALUE);
1369
1398
  VALUE rb_to_array_type(VALUE obj);
1370
1399
  VALUE rb_check_to_array(VALUE ary);
@@ -1425,7 +1454,6 @@ VALUE rb_big_even_p(VALUE);
1425
1454
  size_t rb_big_size(VALUE);
1426
1455
  VALUE rb_integer_float_cmp(VALUE x, VALUE y);
1427
1456
  VALUE rb_integer_float_eq(VALUE x, VALUE y);
1428
- VALUE rb_cstr_parse_inum(const char *str, ssize_t len, char **endp, int base);
1429
1457
  VALUE rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception);
1430
1458
  VALUE rb_big_comp(VALUE x);
1431
1459
  VALUE rb_big_aref(VALUE x, VALUE y);
@@ -1516,24 +1544,25 @@ extern VALUE rb_eEAGAIN;
1516
1544
  extern VALUE rb_eEWOULDBLOCK;
1517
1545
  extern VALUE rb_eEINPROGRESS;
1518
1546
  void rb_report_bug_valist(VALUE file, int line, const char *fmt, va_list args);
1519
- VALUE rb_check_backtrace(VALUE);
1520
1547
  NORETURN(void rb_async_bug_errno(const char *,int));
1521
1548
  const char *rb_builtin_type_name(int t);
1522
1549
  const char *rb_builtin_class_name(VALUE x);
1523
- PRINTF_ARGS(void rb_sys_warn(const char *fmt, ...), 1, 2);
1524
- PRINTF_ARGS(void rb_syserr_warn(int err, const char *fmt, ...), 2, 3);
1525
- PRINTF_ARGS(void rb_sys_warning(const char *fmt, ...), 1, 2);
1526
- PRINTF_ARGS(void rb_syserr_warning(int err, const char *fmt, ...), 2, 3);
1550
+ PRINTF_ARGS(void rb_warn_deprecated(const char *fmt, const char *suggest, ...), 1, 3);
1527
1551
  #ifdef RUBY_ENCODING_H
1528
1552
  VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
1529
1553
  PRINTF_ARGS(void rb_enc_warn(rb_encoding *enc, const char *fmt, ...), 2, 3);
1530
- PRINTF_ARGS(void rb_sys_enc_warn(rb_encoding *enc, const char *fmt, ...), 2, 3);
1531
- PRINTF_ARGS(void rb_syserr_enc_warn(int err, rb_encoding *enc, const char *fmt, ...), 3, 4);
1532
- PRINTF_ARGS(void rb_enc_warning(rb_encoding *enc, const char *fmt, ...), 2, 3);
1533
1554
  PRINTF_ARGS(void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...), 2, 3);
1534
1555
  PRINTF_ARGS(void rb_syserr_enc_warning(int err, rb_encoding *enc, const char *fmt, ...), 3, 4);
1535
1556
  #endif
1536
1557
 
1558
+ typedef enum {
1559
+ RB_WARN_CATEGORY_NONE,
1560
+ RB_WARN_CATEGORY_DEPRECATED,
1561
+ RB_WARN_CATEGORY_EXPERIMENTAL,
1562
+ } rb_warning_category_t;
1563
+ rb_warning_category_t rb_warning_category_from_name(VALUE category);
1564
+ bool rb_warning_category_enabled_p(rb_warning_category_t category);
1565
+
1537
1566
  #define rb_raise_cstr(etype, mesg) \
1538
1567
  rb_exc_raise(rb_exc_new_str(etype, rb_str_new_cstr(mesg)))
1539
1568
  #define rb_raise_static(etype, mesg) \
@@ -1548,10 +1577,6 @@ VALUE rb_nomethod_err_new(VALUE mesg, VALUE recv, VALUE method, VALUE args, int
1548
1577
  VALUE rb_key_err_new(VALUE mesg, VALUE recv, VALUE name);
1549
1578
  #define rb_key_err_raise(mesg, recv, name) \
1550
1579
  rb_exc_raise(rb_key_err_new(mesg, recv, name))
1551
- NORETURN(void ruby_deprecated_internal_feature(const char *));
1552
- #define DEPRECATED_INTERNAL_FEATURE(func) \
1553
- (ruby_deprecated_internal_feature(func), UNREACHABLE)
1554
- VALUE rb_warning_warn(VALUE mod, VALUE str);
1555
1580
  PRINTF_ARGS(VALUE rb_warning_string(const char *fmt, ...), 1, 2);
1556
1581
  NORETURN(void rb_vraise(VALUE, const char *, va_list));
1557
1582
 
@@ -1575,14 +1600,15 @@ extern const char ruby_null_device[];
1575
1600
  VALUE rb_home_dir_of(VALUE user, VALUE result);
1576
1601
  VALUE rb_default_home_dir(VALUE result);
1577
1602
  VALUE rb_realpath_internal(VALUE basedir, VALUE path, int strict);
1578
- VALUE rb_check_realpath(VALUE basedir, VALUE path);
1603
+ #ifdef RUBY_ENCODING_H
1604
+ VALUE rb_check_realpath(VALUE basedir, VALUE path, rb_encoding *origenc);
1605
+ #endif
1579
1606
  void rb_file_const(const char*, VALUE);
1580
1607
  int rb_file_load_ok(const char *);
1581
1608
  VALUE rb_file_expand_path_fast(VALUE, VALUE);
1582
1609
  VALUE rb_file_expand_path_internal(VALUE, VALUE, int, int, VALUE);
1583
- VALUE rb_get_path_check_to_string(VALUE, int);
1584
- VALUE rb_get_path_check_convert(VALUE, VALUE, int);
1585
- VALUE rb_get_path_check(VALUE, int);
1610
+ VALUE rb_get_path_check_to_string(VALUE);
1611
+ VALUE rb_get_path_check_convert(VALUE);
1586
1612
  void Init_File(void);
1587
1613
  int ruby_is_fd_loadable(int fd);
1588
1614
 
@@ -1606,7 +1632,7 @@ NORETURN(void rb_syserr_fail_path_in(const char *func_name, int err, VALUE path)
1606
1632
  extern VALUE *ruby_initial_gc_stress_ptr;
1607
1633
  extern int ruby_disable_gc;
1608
1634
  void Init_heap(void);
1609
- void *ruby_mimmalloc(size_t size);
1635
+ void *ruby_mimmalloc(size_t size) RUBY_ATTR_MALLOC;
1610
1636
  void ruby_mimfree(void *ptr);
1611
1637
  void rb_objspace_set_event_hook(const rb_event_flag_t event);
1612
1638
  #if USE_RGENGC
@@ -1614,7 +1640,7 @@ void rb_gc_writebarrier_remember(VALUE obj);
1614
1640
  #else
1615
1641
  #define rb_gc_writebarrier_remember(obj) 0
1616
1642
  #endif
1617
- void ruby_gc_set_params(int safe_level);
1643
+ void ruby_gc_set_params(void);
1618
1644
  void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
1619
1645
 
1620
1646
  #if defined(HAVE_MALLOC_USABLE_SIZE) || defined(HAVE_MALLOC_SIZE) || defined(_WIN32)
@@ -1624,8 +1650,8 @@ void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
1624
1650
  #define SIZED_REALLOC_N(var,type,n,old_n) REALLOC_N(var, type, n)
1625
1651
  #else
1626
1652
  RUBY_SYMBOL_EXPORT_BEGIN
1627
- void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_ALLOC_SIZE((2));
1628
- void *ruby_sized_xrealloc2(void *ptr, size_t new_count, size_t element_size, size_t old_count) RUBY_ATTR_ALLOC_SIZE((2, 3));
1653
+ void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
1654
+ 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));
1629
1655
  void ruby_sized_xfree(void *x, size_t size);
1630
1656
  RUBY_SYMBOL_EXPORT_END
1631
1657
  #define SIZED_REALLOC_N(var,type,n,old_n) ((var)=(type*)ruby_sized_xrealloc2((void*)(var), (n), sizeof(type), (old_n)))
@@ -1646,7 +1672,6 @@ __attribute__((__alloc_align__(1)))
1646
1672
  #endif
1647
1673
  #endif
1648
1674
  void *rb_aligned_malloc(size_t, size_t) RUBY_ATTR_MALLOC RUBY_ATTR_ALLOC_SIZE((2));
1649
- void rb_aligned_free(void *);
1650
1675
 
1651
1676
  size_t rb_size_mul_or_raise(size_t, size_t, VALUE); /* used in compile.c */
1652
1677
  size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE); /* used in iseq.h */
@@ -1668,10 +1693,8 @@ VALUE rb_hash_new_with_size(st_index_t size);
1668
1693
  VALUE rb_hash_has_key(VALUE hash, VALUE key);
1669
1694
  VALUE rb_hash_default_value(VALUE hash, VALUE key);
1670
1695
  VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
1671
- long rb_objid_hash(st_index_t index);
1672
1696
  long rb_dbl_long_hash(double d);
1673
1697
  st_table *rb_init_identtable(void);
1674
- st_table *rb_init_identtable_with_size(st_index_t size);
1675
1698
  VALUE rb_hash_compare_by_id_p(VALUE hash);
1676
1699
  VALUE rb_to_hash_type(VALUE obj);
1677
1700
  VALUE rb_hash_key_str(VALUE);
@@ -1694,9 +1717,7 @@ int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func fun
1694
1717
  void rb_call_inits(void);
1695
1718
 
1696
1719
  /* io.c */
1697
- const char *ruby_get_inplace_mode(void);
1698
1720
  void ruby_set_inplace_mode(const char *);
1699
- ssize_t rb_io_bufread(VALUE io, void *buf, size_t size);
1700
1721
  void rb_stdio_set_default_encoding(void);
1701
1722
  VALUE rb_io_flush_raw(VALUE, int);
1702
1723
  #ifdef RUBY_IO_H
@@ -1707,9 +1728,8 @@ void rb_io_fptr_finalize_internal(void *ptr);
1707
1728
  #define rb_io_fptr_finalize rb_io_fptr_finalize_internal
1708
1729
 
1709
1730
  /* load.c */
1710
- VALUE rb_get_load_path(void);
1711
1731
  VALUE rb_get_expanded_load_path(void);
1712
- int rb_require_internal(VALUE fname, int safe);
1732
+ int rb_require_internal(VALUE fname);
1713
1733
  NORETURN(void rb_load_fail(VALUE, const char*));
1714
1734
 
1715
1735
  /* loadpath.c */
@@ -1728,7 +1748,6 @@ VALUE rb_math_hypot(VALUE, VALUE);
1728
1748
  VALUE rb_math_log(int argc, const VALUE *argv);
1729
1749
  VALUE rb_math_sin(VALUE);
1730
1750
  VALUE rb_math_sinh(VALUE);
1731
- VALUE rb_math_sqrt(VALUE);
1732
1751
 
1733
1752
  /* mjit.c */
1734
1753
 
@@ -1782,7 +1801,6 @@ int ruby_float_step(VALUE from, VALUE to, VALUE step, int excl, int allow_endles
1782
1801
  double ruby_float_mod(double x, double y);
1783
1802
  int rb_num_negative_p(VALUE);
1784
1803
  VALUE rb_int_succ(VALUE num);
1785
- VALUE rb_int_pred(VALUE num);
1786
1804
  VALUE rb_int_uminus(VALUE num);
1787
1805
  VALUE rb_float_uminus(VALUE num);
1788
1806
  VALUE rb_int_plus(VALUE x, VALUE y);
@@ -1793,9 +1811,7 @@ VALUE rb_float_mul(VALUE x, VALUE y);
1793
1811
  VALUE rb_float_div(VALUE x, VALUE y);
1794
1812
  VALUE rb_int_idiv(VALUE x, VALUE y);
1795
1813
  VALUE rb_int_modulo(VALUE x, VALUE y);
1796
- VALUE rb_int_round(VALUE num, int ndigits, enum ruby_num_rounding_mode mode);
1797
1814
  VALUE rb_int2str(VALUE num, int base);
1798
- VALUE rb_dbl_hash(double d);
1799
1815
  VALUE rb_fix_plus(VALUE x, VALUE y);
1800
1816
  VALUE rb_fix_aref(VALUE fix, VALUE idx);
1801
1817
  VALUE rb_int_gt(VALUE x, VALUE y);
@@ -1973,7 +1989,6 @@ struct RBasicRaw {
1973
1989
  #ifndef USE_SYMBOL_GC
1974
1990
  #define USE_SYMBOL_GC 1
1975
1991
  #endif
1976
- VALUE rb_parser_get_yydebug(VALUE);
1977
1992
  VALUE rb_parser_set_yydebug(VALUE, VALUE);
1978
1993
  RUBY_SYMBOL_EXPORT_BEGIN
1979
1994
  VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
@@ -1981,23 +1996,12 @@ RUBY_SYMBOL_EXPORT_END
1981
1996
  void *rb_parser_load_file(VALUE parser, VALUE name);
1982
1997
  int rb_is_const_name(VALUE name);
1983
1998
  int rb_is_class_name(VALUE name);
1984
- int rb_is_global_name(VALUE name);
1985
1999
  int rb_is_instance_name(VALUE name);
1986
- int rb_is_attrset_name(VALUE name);
1987
2000
  int rb_is_local_name(VALUE name);
1988
- int rb_is_method_name(VALUE name);
1989
- int rb_is_junk_name(VALUE name);
1990
2001
  PUREFUNC(int rb_is_const_sym(VALUE sym));
1991
- PUREFUNC(int rb_is_class_sym(VALUE sym));
1992
- PUREFUNC(int rb_is_global_sym(VALUE sym));
1993
- PUREFUNC(int rb_is_instance_sym(VALUE sym));
1994
2002
  PUREFUNC(int rb_is_attrset_sym(VALUE sym));
1995
- PUREFUNC(int rb_is_local_sym(VALUE sym));
1996
- PUREFUNC(int rb_is_method_sym(VALUE sym));
1997
- PUREFUNC(int rb_is_junk_sym(VALUE sym));
1998
2003
  ID rb_make_internal_id(void);
1999
2004
  void rb_gc_free_dsymbol(VALUE);
2000
- ID rb_id_attrget(ID id);
2001
2005
 
2002
2006
  /* proc.c */
2003
2007
  VALUE rb_proc_location(VALUE self);
@@ -2130,14 +2134,6 @@ VALUE rb_fstring_cstr(const char *str);
2130
2134
  VALUE rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc);
2131
2135
  #define rb_fstring_enc_lit(str, enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
2132
2136
  #define rb_fstring_enc_literal(str, enc) rb_fstring_enc_lit(str, enc)
2133
- VALUE rb_fstring_enc_cstr(const char *ptr, rb_encoding *enc);
2134
- # ifdef HAVE_BUILTIN___BUILTIN_CONSTANT_P
2135
- # define rb_fstring_enc_cstr(str, enc) RB_GNUC_EXTENSION_BLOCK( \
2136
- (__builtin_constant_p(str)) ? \
2137
- rb_fstring_enc_new((str), (long)strlen(str), (enc)) : \
2138
- rb_fstring_enc_cstr(str, enc) \
2139
- )
2140
- # endif
2141
2137
  #endif
2142
2138
  int rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p);
2143
2139
  int rb_str_symname_p(VALUE);
@@ -2190,15 +2186,6 @@ rb_str_eql_internal(const VALUE str1, const VALUE str2)
2190
2186
  /* symbol.c */
2191
2187
  #ifdef RUBY_ENCODING_H
2192
2188
  VALUE rb_sym_intern(const char *ptr, long len, rb_encoding *enc);
2193
- VALUE rb_sym_intern_cstr(const char *ptr, rb_encoding *enc);
2194
- #ifdef __GNUC__
2195
- #define rb_sym_intern_cstr(ptr, enc) __extension__ ( \
2196
- { \
2197
- (__builtin_constant_p(ptr)) ? \
2198
- rb_sym_intern((ptr), (long)strlen(ptr), (enc)) : \
2199
- rb_sym_intern_cstr((ptr), (enc)); \
2200
- })
2201
- #endif
2202
2189
  #endif
2203
2190
  VALUE rb_sym_intern_ascii(const char *ptr, long len);
2204
2191
  VALUE rb_sym_intern_ascii_cstr(const char *ptr);
@@ -2286,6 +2273,7 @@ NORETURN(VALUE rb_mod_const_missing(VALUE,VALUE));
2286
2273
  rb_gvar_getter_t *rb_gvar_getter_function_of(const struct rb_global_entry *);
2287
2274
  rb_gvar_setter_t *rb_gvar_setter_function_of(const struct rb_global_entry *);
2288
2275
  bool rb_gvar_is_traced(const struct rb_global_entry *);
2276
+ void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_);
2289
2277
 
2290
2278
  /* vm_insnhelper.h */
2291
2279
  rb_serial_t rb_next_class_serial(void);
@@ -2296,9 +2284,6 @@ void rb_vm_mark(void *ptr);
2296
2284
  void Init_BareVM(void);
2297
2285
  void Init_vm_objects(void);
2298
2286
  PUREFUNC(VALUE rb_vm_top_self(void));
2299
- void rb_thread_recycle_stack_release(VALUE *);
2300
- VALUE *rb_thread_recycle_stack(size_t);
2301
- void rb_vm_change_state(void);
2302
2287
  void rb_vm_inc_const_missing_count(void);
2303
2288
  const void **rb_vm_get_insns_address_table(void);
2304
2289
  VALUE rb_source_location(int *pline);
@@ -2306,6 +2291,7 @@ const char *rb_source_location_cstr(int *pline);
2306
2291
  MJIT_STATIC void rb_vm_pop_cfunc_frame(void);
2307
2292
  int rb_vm_add_root_module(ID id, VALUE module);
2308
2293
  void rb_vm_check_redefinition_by_prepend(VALUE klass);
2294
+ int rb_vm_check_optimizable_mid(VALUE mid);
2309
2295
  VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
2310
2296
  MJIT_STATIC VALUE ruby_vm_special_exception_copy(VALUE);
2311
2297
  PUREFUNC(st_table *rb_vm_fstring_table(void));
@@ -2326,7 +2312,6 @@ VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *a
2326
2312
  rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
2327
2313
  const char *rb_type_str(enum ruby_value_type type);
2328
2314
  VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
2329
- VALUE rb_check_funcall_default_kw(VALUE, ID, int, const VALUE *, VALUE, int);
2330
2315
  VALUE rb_yield_1(VALUE val);
2331
2316
  VALUE rb_yield_force_blockarg(VALUE values);
2332
2317
  VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
@@ -2356,47 +2341,77 @@ struct rb_method_definition_struct;
2356
2341
  struct rb_execution_context_struct;
2357
2342
  struct rb_control_frame_struct;
2358
2343
  struct rb_calling_info;
2359
- struct rb_call_info;
2344
+ struct rb_call_data;
2345
+ /* I have several reasons to chose 64 here:
2346
+ *
2347
+ * - A cache line must be a power-of-two size.
2348
+ * - Setting this to anything less than or equal to 32 boosts nothing.
2349
+ * - I have never seen an architecture that has 128 byte L1 cache line.
2350
+ * - I know Intel Core and Sparc T4 at least uses 64.
2351
+ * - I know jemalloc internally has this exact same `#define CACHE_LINE 64`.
2352
+ * https://github.com/jemalloc/jemalloc/blob/dev/include/jemalloc/internal/jemalloc_internal_types.h
2353
+ */
2354
+ #define CACHELINE 64
2360
2355
  struct rb_call_cache {
2361
2356
  /* inline cache: keys */
2362
2357
  rb_serial_t method_state;
2363
- rb_serial_t class_serial;
2358
+ rb_serial_t class_serial[
2359
+ (CACHELINE
2360
+ - sizeof(rb_serial_t) /* method_state */
2361
+ - sizeof(struct rb_callable_method_entry_struct *) /* me */
2362
+ - sizeof(uintptr_t) /* method_serial */
2363
+ - sizeof(enum method_missing_reason) /* aux */
2364
+ - sizeof(VALUE (*)( /* call */
2365
+ struct rb_execution_context_struct *e,
2366
+ struct rb_control_frame_struct *,
2367
+ struct rb_calling_info *,
2368
+ const struct rb_call_data *)))
2369
+ / sizeof(rb_serial_t)
2370
+ ];
2364
2371
 
2365
2372
  /* inline cache: values */
2366
2373
  const struct rb_callable_method_entry_struct *me;
2367
- const struct rb_method_definition_struct *def;
2374
+ uintptr_t method_serial; /* me->def->method_serial */
2368
2375
 
2369
2376
  VALUE (*call)(struct rb_execution_context_struct *ec,
2370
2377
  struct rb_control_frame_struct *cfp,
2371
2378
  struct rb_calling_info *calling,
2372
- const struct rb_call_info *ci,
2373
- struct rb_call_cache *cc);
2379
+ struct rb_call_data *cd);
2374
2380
 
2375
2381
  union {
2376
2382
  unsigned int index; /* used by ivar */
2377
2383
  enum method_missing_reason method_missing_reason; /* used by method_missing */
2378
- int inc_sp; /* used by cfunc */
2379
2384
  } aux;
2380
2385
  };
2381
- struct rb_call_cache_and_mid {
2382
- struct rb_call_cache cc;
2386
+ STATIC_ASSERT(cachelined, sizeof(struct rb_call_cache) <= CACHELINE);
2387
+ struct rb_call_info {
2388
+ /* fixed at compile time */
2383
2389
  ID mid;
2390
+ unsigned int flag;
2391
+ int orig_argc;
2392
+ };
2393
+ struct rb_call_data {
2394
+ struct rb_call_cache cc;
2395
+ struct rb_call_info ci;
2384
2396
  };
2385
- VALUE rb_funcallv_with_cc(struct rb_call_cache_and_mid*, VALUE, ID, int, const VALUE*)
2386
- #if GCC_VERSION_SINCE(3, 3, 0) && defined(__OPTIMIZE__)
2387
- __attribute__((__visibility__("default"), __nonnull__(1)))
2397
+ RUBY_FUNC_EXPORTED
2398
+ RUBY_FUNC_NONNULL(1, VALUE rb_funcallv_with_cc(struct rb_call_data*, VALUE, ID, int, const VALUE*));
2399
+ RUBY_FUNC_EXPORTED
2400
+ RUBY_FUNC_NONNULL(1, bool rb_method_basic_definition_p_with_cc(struct rb_call_data *, VALUE, ID));
2401
+
2402
+ #ifdef __GNUC__
2388
2403
  # define rb_funcallv(recv, mid, argc, argv) \
2389
2404
  __extension__({ \
2390
- static struct rb_call_cache_and_mid \
2391
- rb_funcallv_opaque_cc = { {0, }, 0, }; \
2392
- rb_funcallv_with_cc(&rb_funcallv_opaque_cc, \
2393
- recv, mid, argc,argv); \
2405
+ static struct rb_call_data rb_funcallv_data; \
2406
+ rb_funcallv_with_cc(&rb_funcallv_data, recv, mid, argc, argv); \
2407
+ })
2408
+ # define rb_method_basic_definition_p(klass, mid) \
2409
+ __extension__({ \
2410
+ static struct rb_call_data rb_mbdp; \
2411
+ (klass == Qfalse) ? /* hidden object cannot be overridden */ true : \
2412
+ rb_method_basic_definition_p_with_cc(&rb_mbdp, klass, mid); \
2394
2413
  })
2395
2414
  #endif
2396
- ;
2397
-
2398
- /* miniprelude.c, prelude.c */
2399
- void Init_prelude(void);
2400
2415
 
2401
2416
  /* vm_backtrace.c */
2402
2417
  void Init_vm_backtrace(void);