debase-ruby_core_source 0.10.9 → 0.10.13

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 (242) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -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/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/addr2line.h +2 -3
  7. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/builtin.h +17 -2
  8. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/build_assert/build_assert.h +0 -0
  9. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/check_type/check_type.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/container_of/container_of.h +0 -0
  11. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/list/list.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/ccan/str/str.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/constant.h +10 -5
  14. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/debug_counter.h +127 -48
  15. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/dln.h +3 -18
  16. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/encindex.h +3 -2
  17. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/eval_intern.h +16 -7
  18. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/gc.h +13 -2
  19. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/hrtime.h +0 -0
  20. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/id.h +0 -0
  21. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/id_table.h +2 -0
  22. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/insns.inc +0 -4
  23. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/insns_info.inc +323 -536
  24. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/array.h +119 -0
  25. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bignum.h +246 -0
  26. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bits.h +566 -0
  27. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/class.h +174 -0
  28. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compar.h +50 -0
  29. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compile.h +32 -0
  30. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compilers.h +108 -0
  31. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/complex.h +29 -0
  32. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/cont.h +25 -0
  33. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/dir.h +17 -0
  34. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enc.h +20 -0
  35. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/encoding.h +28 -0
  36. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enum.h +19 -0
  37. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enumerator.h +22 -0
  38. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/error.h +124 -0
  39. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/eval.h +33 -0
  40. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/file.h +39 -0
  41. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/fixnum.h +185 -0
  42. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/gc.h +161 -0
  43. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/hash.h +241 -0
  44. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/imemo.h +243 -0
  45. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/inits.h +51 -0
  46. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/io.h +35 -0
  47. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/load.h +19 -0
  48. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/loadpath.h +17 -0
  49. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/math.h +24 -0
  50. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/missing.h +19 -0
  51. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/numeric.h +255 -0
  52. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/object.h +83 -0
  53. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/parse.h +23 -0
  54. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/proc.h +33 -0
  55. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/process.h +136 -0
  56. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/random.h +17 -0
  57. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/range.h +41 -0
  58. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/rational.h +71 -0
  59. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/re.h +29 -0
  60. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/sanitizers.h +191 -0
  61. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/scheduler.h +44 -0
  62. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/serial.h +24 -0
  63. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/signal.h +22 -0
  64. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/static_assert.h +17 -0
  65. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/string.h +140 -0
  66. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/struct.h +154 -0
  67. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/symbol.h +41 -0
  68. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/thread.h +54 -0
  69. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/time.h +35 -0
  70. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/transcode.h +21 -0
  71. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/util.h +31 -0
  72. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/variable.h +84 -0
  73. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/vm.h +136 -0
  74. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/warnings.h +17 -0
  75. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal.h +107 -0
  76. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/iseq.h +11 -18
  77. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/known_errors.inc +0 -0
  78. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/method.h +21 -8
  79. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/mjit.h +89 -48
  80. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/mjit_compile.inc +2746 -2288
  81. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/node.h +32 -24
  82. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/node_name.inc +2 -2
  83. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/opt_sc.inc +0 -0
  84. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/optinsn.inc +0 -0
  85. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/optunifs.inc +0 -0
  86. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/parse.h +1 -0
  87. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/probes_helper.h +2 -0
  88. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ractor_core.h +343 -0
  89. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/regenc.h +0 -0
  90. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/regint.h +1 -1
  91. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/regparse.h +0 -0
  92. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/revision.h +2 -0
  93. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_assert.h +15 -0
  94. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_atomic.h +23 -0
  95. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/siphash.h +0 -0
  96. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/symbol.h +4 -4
  97. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/thread_pthread.h +45 -5
  98. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/thread_win32.h +28 -3
  99. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/timev.h +1 -0
  100. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/transcode_data.h +2 -3
  101. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/transient_heap.h +6 -3
  102. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/variable.h +22 -0
  103. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/version.h +23 -11
  104. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vm.inc +707 -671
  105. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vm_call_iseq_optimized.inc +93 -86
  106. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_callinfo.h +456 -0
  107. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/vm_core.h +262 -194
  108. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_debug.h +116 -0
  109. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/vm_exec.h +9 -6
  110. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.0.0-p0}/vm_insnhelper.h +28 -26
  111. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vm_opts.h +6 -5
  112. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_sync.h +136 -0
  113. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.0.0-p0}/vmtc.inc +0 -4
  114. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/addr2line.h +2 -3
  115. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/builtin.h +83 -0
  116. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/build_assert/build_assert.h +13 -13
  117. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/check_type/check_type.h +17 -17
  118. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/container_of/container_of.h +63 -63
  119. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/list/list.h +262 -262
  120. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/ccan/str/str.h +4 -4
  121. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/constant.h +10 -9
  122. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/darray.h +198 -0
  123. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/debug_counter.h +137 -48
  124. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/dln.h +3 -23
  125. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/encindex.h +3 -2
  126. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/eval_intern.h +34 -41
  127. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/gc.h +24 -11
  128. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/hrtime.h +9 -9
  129. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/id.h +4 -3
  130. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/id_table.h +3 -1
  131. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/insns.inc +6 -8
  132. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/insns_info.inc +1907 -2543
  133. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/array.h +113 -0
  134. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/bignum.h +246 -0
  135. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/bits.h +565 -0
  136. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/class.h +188 -0
  137. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/compar.h +49 -0
  138. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/compile.h +35 -0
  139. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/compilers.h +107 -0
  140. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/complex.h +29 -0
  141. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/cont.h +24 -0
  142. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/dir.h +16 -0
  143. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/enc.h +19 -0
  144. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/encoding.h +30 -0
  145. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/enum.h +18 -0
  146. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/enumerator.h +21 -0
  147. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/error.h +191 -0
  148. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/eval.h +32 -0
  149. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/file.h +38 -0
  150. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/fixnum.h +184 -0
  151. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/gc.h +175 -0
  152. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/hash.h +243 -0
  153. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/imemo.h +243 -0
  154. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/inits.h +50 -0
  155. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/io.h +38 -0
  156. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/load.h +18 -0
  157. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/loadpath.h +16 -0
  158. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/math.h +23 -0
  159. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/missing.h +18 -0
  160. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/numeric.h +271 -0
  161. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/object.h +83 -0
  162. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/parse.h +23 -0
  163. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/proc.h +32 -0
  164. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/process.h +137 -0
  165. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/random.h +16 -0
  166. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/range.h +40 -0
  167. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/rational.h +72 -0
  168. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/re.h +30 -0
  169. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/sanitizers.h +190 -0
  170. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/serial.h +23 -0
  171. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/signal.h +21 -0
  172. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/static_assert.h +16 -0
  173. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/string.h +141 -0
  174. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/struct.h +153 -0
  175. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/symbol.h +40 -0
  176. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/thread.h +53 -0
  177. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/time.h +34 -0
  178. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/transcode.h +20 -0
  179. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/util.h +27 -0
  180. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/variable.h +83 -0
  181. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/vm.h +132 -0
  182. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal/warnings.h +16 -0
  183. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/internal.h +109 -0
  184. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/iseq.h +44 -35
  185. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/known_errors.inc +0 -0
  186. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/method.h +21 -4
  187. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/mjit.h +231 -0
  188. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/mjit_compile.inc +3322 -2940
  189. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/node.h +39 -23
  190. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/node_name.inc +210 -0
  191. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/opt_sc.inc +0 -2
  192. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/optinsn.inc +7 -7
  193. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/optunifs.inc +1 -1
  194. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/parse.h +9 -5
  195. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/probes_helper.h +9 -7
  196. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/ractor_core.h +346 -0
  197. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/regenc.h +8 -8
  198. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/regint.h +16 -12
  199. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/regparse.h +2 -2
  200. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/revision.h +2 -0
  201. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/ruby_assert.h +14 -0
  202. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/ruby_atomic.h +23 -0
  203. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/siphash.h +0 -0
  204. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/symbol.h +14 -14
  205. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/thread_pthread.h +45 -5
  206. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/thread_win32.h +30 -5
  207. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/timev.h +1 -0
  208. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/transcode_data.h +49 -50
  209. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/transient_heap.h +6 -3
  210. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/variable.h +21 -0
  211. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/version.h +15 -4
  212. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/vm.inc +1033 -887
  213. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_call_iseq_optimized.inc +244 -0
  214. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_callinfo.h +454 -0
  215. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/vm_core.h +508 -362
  216. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_debug.h +119 -0
  217. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/vm_exec.h +22 -18
  218. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview3 → ruby-3.1.0-preview1}/vm_insnhelper.h +42 -32
  219. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/vm_opts.h +8 -5
  220. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/vm_sync.h +137 -0
  221. data/lib/debase/ruby_core_source/{ruby-2.7.0-preview2 → ruby-3.1.0-preview1}/vmtc.inc +6 -8
  222. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit.h +63 -0
  223. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_asm.h +392 -0
  224. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_codegen.h +19 -0
  225. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_core.h +302 -0
  226. data/lib/debase/ruby_core_source/ruby-3.1.0-preview1/yjit_iface.h +38 -0
  227. data/lib/debase/ruby_core_source/version.rb +1 -1
  228. data/lib/debase/ruby_core_source.rb +0 -2
  229. metadata +240 -110
  230. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/internal.h +0 -2682
  231. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/revision.h +0 -2
  232. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/ruby_assert.h +0 -15
  233. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/ruby_atomic.h +0 -244
  234. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/vm_call_iseq_optimized.inc +0 -237
  235. data/lib/debase/ruby_core_source/ruby-2.7.0-preview2/vm_debug.h +0 -34
  236. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/internal.h +0 -2657
  237. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/mjit.h +0 -175
  238. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/node_name.inc +0 -208
  239. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/revision.h +0 -2
  240. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/ruby_assert.h +0 -15
  241. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/ruby_atomic.h +0 -244
  242. data/lib/debase/ruby_core_source/ruby-2.7.0-preview3/vm_debug.h +0 -34
@@ -0,0 +1,119 @@
1
+ #ifndef RUBY_DEBUG_H
2
+ #define RUBY_DEBUG_H
3
+ /**********************************************************************
4
+
5
+ vm_debug.h - YARV Debug function interface
6
+
7
+ $Author$
8
+ created at: 04/08/25 02:33:49 JST
9
+
10
+ Copyright (C) 2004-2007 Koichi Sasada
11
+
12
+ **********************************************************************/
13
+
14
+ #include "ruby/ruby.h"
15
+ #include "node.h"
16
+
17
+ RUBY_SYMBOL_EXPORT_BEGIN
18
+
19
+ #define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
20
+ #define dp(v) ruby_debug_print_value(-1, 0, "", (v))
21
+ #define dpi(i) ruby_debug_print_id(-1, 0, "", (i))
22
+ #define dpn(n) ruby_debug_print_node(-1, 0, "", (n))
23
+
24
+ VALUE ruby_debug_print_value(int level, int debug_level, const char *header, VALUE v);
25
+ ID ruby_debug_print_id(int level, int debug_level, const char *header, ID id);
26
+ NODE *ruby_debug_print_node(int level, int debug_level, const char *header, const NODE *node);
27
+ int ruby_debug_print_indent(int level, int debug_level, int indent_level);
28
+ void ruby_debug_gc_check_func(void);
29
+ void ruby_set_debug_option(const char *str);
30
+
31
+ RUBY_SYMBOL_EXPORT_END
32
+
33
+ #if RUBY_DEVEL
34
+ #ifndef USE_RUBY_DEBUG_LOG
35
+ #define USE_RUBY_DEBUG_LOG 0
36
+ #endif
37
+ #else
38
+ // disable on !RUBY_DEVEL
39
+ #ifdef USE_RUBY_DEBUG_LOG
40
+ #undef USE_RUBY_DEBUG_LOG
41
+ #endif
42
+ #endif
43
+
44
+ /* RUBY_DEBUG_LOG: Logging debug information mechanism
45
+ *
46
+ * This feature provides a mechanism to store logging information
47
+ * to a file, stderr or memory space with simple macros.
48
+ *
49
+ * The following information will be stored.
50
+ * * (1) __FILE__, __LINE__ in C
51
+ * * (2) __FILE__, __LINE__ in Ruby
52
+ * * (3) __func__ in C (message title)
53
+ * * (4) given string with sprintf format
54
+ * * (5) Thread number (if multiple threads are running)
55
+ *
56
+ * This feature is enabled only USE_RUBY_DEBUG_LOG is enabled.
57
+ * Release version should not enable it.
58
+ *
59
+ * Running with the `RUBY_DEBUG_LOG` environment variable enables
60
+ * this feature.
61
+ *
62
+ * # logging into a file
63
+ * RUBY_DEBUG_LOG=/path/to/file STDERR
64
+ *
65
+ * # logging into STDERR
66
+ * RUBY_DEBUG_LOG=stderr
67
+ *
68
+ * # logging into memory space (check with a debugger)
69
+ * # It will help if the timing is important.
70
+ * RUBY_DEBUG_LOG=mem
71
+ *
72
+ * RUBY_DEBUG_LOG_FILTER environment variable can specify the filter string.
73
+ * If "(3) __func__ in C (message title)" contains the specified string, the
74
+ * information will be stored (example: RUBY_DEBUG_LOG_FILTER=str will enable
75
+ * only on str related information).
76
+ *
77
+ * In a MRI source code, you can use the following macros:
78
+ * * RUBY_DEBUG_LOG(fmt, ...): Above (1) to (4) will be logged.
79
+ * * RUBY_DEBUG_LOG2(file, line, fmt, ...):
80
+ * Same as RUBY_DEBUG_LOG(), but (1) will be replaced with given file, line.
81
+ */
82
+
83
+ extern enum ruby_debug_log_mode {
84
+ ruby_debug_log_disabled = 0x00,
85
+ ruby_debug_log_memory = 0x01,
86
+ ruby_debug_log_stderr = 0x02,
87
+ ruby_debug_log_file = 0x04,
88
+ } ruby_debug_log_mode;
89
+
90
+ RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 4, 5)
91
+ void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
92
+ void ruby_debug_log_print(unsigned int n);
93
+ bool ruby_debug_log_filter(const char *func_name);
94
+
95
+ // convenient macro to log even if the USE_RUBY_DEBUG_LOG macro is not specified.
96
+ // You can use this macro for temporary usage (you should not commit it).
97
+ #define _RUBY_DEBUG_LOG(...) ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__)
98
+
99
+ #if USE_RUBY_DEBUG_LOG
100
+ # define RUBY_DEBUG_LOG_ENABLED(func_name) \
101
+ (ruby_debug_log_mode && ruby_debug_log_filter(func_name))
102
+
103
+ #define RUBY_DEBUG_LOG(...) do { \
104
+ if (RUBY_DEBUG_LOG_ENABLED(RUBY_FUNCTION_NAME_STRING)) \
105
+ ruby_debug_log(__FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__); \
106
+ } while (0)
107
+
108
+ #define RUBY_DEBUG_LOG2(file, line, ...) do { \
109
+ if (RUBY_DEBUG_LOG_ENABLED(RUBY_FUNCTION_NAME_STRING)) \
110
+ ruby_debug_log(file, line, RUBY_FUNCTION_NAME_STRING, "" __VA_ARGS__); \
111
+ } while (0)
112
+
113
+ #else
114
+ // do nothing
115
+ #define RUBY_DEBUG_LOG(...)
116
+ #define RUBY_DEBUG_LOG2(file, line, ...)
117
+ #endif // USE_RUBY_DEBUG_LOG
118
+
119
+ #endif /* RUBY_DEBUG_H */
@@ -1,3 +1,5 @@
1
+ #ifndef RUBY_VM_EXEC_H
2
+ #define RUBY_VM_EXEC_H
1
3
  /**********************************************************************
2
4
 
3
5
  vm.h -
@@ -9,9 +11,6 @@
9
11
 
10
12
  **********************************************************************/
11
13
 
12
- #ifndef RUBY_VM_EXEC_H
13
- #define RUBY_VM_EXEC_H
14
-
15
14
  typedef long OFFSET;
16
15
  typedef unsigned long lindex_t;
17
16
  typedef VALUE GENTRY;
@@ -38,8 +37,12 @@ typedef rb_iseq_t *ISEQ;
38
37
  #define DEBUG_END_INSN()
39
38
  #endif
40
39
 
41
- #define throwdebug if(0)printf
42
- /* #define throwdebug printf */
40
+ #define throwdebug if(0)ruby_debug_printf
41
+ /* #define throwdebug ruby_debug_printf */
42
+
43
+ #ifndef USE_INSNS_COUNTER
44
+ #define USE_INSNS_COUNTER 0
45
+ #endif
43
46
 
44
47
  /************************************************/
45
48
  #if defined(DISPATCH_XXX)
@@ -71,11 +74,14 @@ error !
71
74
  #define LABEL_PTR(x) RB_GNUC_EXTENSION(&&LABEL(x))
72
75
 
73
76
  #define INSN_ENTRY_SIG(insn) \
74
- if (0) fprintf(stderr, "exec: %s@(%"PRIdPTRDIFF", %"PRIdPTRDIFF")@%s:%u\n", #insn, \
75
- (reg_pc - reg_cfp->iseq->body->iseq_encoded), \
76
- (reg_cfp->pc - reg_cfp->iseq->body->iseq_encoded), \
77
- RSTRING_PTR(rb_iseq_path(reg_cfp->iseq)), \
78
- rb_iseq_line_no(reg_cfp->iseq, reg_pc - reg_cfp->iseq->body->iseq_encoded));
77
+ if (0) { \
78
+ ruby_debug_printf("exec: %s@(%"PRIdPTRDIFF", %"PRIdPTRDIFF")@%s:%u\n", #insn, \
79
+ (reg_pc - reg_cfp->iseq->body->iseq_encoded), \
80
+ (reg_cfp->pc - reg_cfp->iseq->body->iseq_encoded), \
81
+ RSTRING_PTR(rb_iseq_path(reg_cfp->iseq)), \
82
+ rb_iseq_line_no(reg_cfp->iseq, reg_pc - reg_cfp->iseq->body->iseq_encoded)); \
83
+ } \
84
+ if (USE_INSNS_COUNTER) vm_insns_counter_count_insn(BIN(insn));
79
85
 
80
86
  #define INSN_DISPATCH_SIG(insn)
81
87
 
@@ -126,9 +132,6 @@ error !
126
132
 
127
133
  #define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__)
128
134
 
129
- #define START_OF_ORIGINAL_INSN(x) start_of_##x:
130
- #define DISPATCH_ORIGINAL_INSN(x) goto start_of_##x;
131
-
132
135
  /************************************************/
133
136
  #else /* no threaded code */
134
137
  /* most common method */
@@ -141,7 +144,7 @@ case BIN(insn):
141
144
  break;
142
145
 
143
146
  #define INSN_DISPATCH() \
144
- while (1) { \
147
+ while (1) { \
145
148
  switch (GET_CURRENT_INSN()) {
146
149
 
147
150
  #define END_INSNS_DISPATCH() \
@@ -153,9 +156,11 @@ default: \
153
156
 
154
157
  #define NEXT_INSN() goto first
155
158
 
156
- #define START_OF_ORIGINAL_INSN(x) start_of_##x:
157
- #define DISPATCH_ORIGINAL_INSN(x) goto start_of_##x;
159
+ #endif
158
160
 
161
+ #ifndef START_OF_ORIGINAL_INSN
162
+ #define START_OF_ORIGINAL_INSN(x) if (0) goto start_of_##x; start_of_##x:
163
+ #define DISPATCH_ORIGINAL_INSN(x) goto start_of_##x;
159
164
  #endif
160
165
 
161
166
  #define VM_SP_CNT(ec, sp) ((sp) - (ec)->vm_stack)
@@ -181,8 +186,7 @@ default: \
181
186
  #define VM_DEBUG_STACKOVERFLOW 0
182
187
 
183
188
  #if VM_DEBUG_STACKOVERFLOW
184
- #define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp, margin) \
185
- WHEN_VM_STACK_OVERFLOWED(cfp, (cfp)->sp, margin) vm_stack_overflow_for_insn()
189
+ #define CHECK_VM_STACK_OVERFLOW_FOR_INSN CHECK_VM_STACK_OVERFLOW
186
190
  #else
187
191
  #define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp, margin)
188
192
  #endif
@@ -1,3 +1,5 @@
1
+ #ifndef RUBY_INSNHELPER_H
2
+ #define RUBY_INSNHELPER_H
1
3
  /**********************************************************************
2
4
 
3
5
  insnhelper.h - helper macros to implement each instructions
@@ -9,27 +11,29 @@
9
11
 
10
12
  **********************************************************************/
11
13
 
12
- #ifndef RUBY_INSNHELPER_H
13
- #define RUBY_INSNHELPER_H
14
-
15
- RUBY_SYMBOL_EXPORT_BEGIN
14
+ MJIT_SYMBOL_EXPORT_BEGIN
16
15
 
17
16
  RUBY_EXTERN VALUE ruby_vm_const_missing_count;
18
- RUBY_EXTERN rb_serial_t ruby_vm_global_method_state;
19
17
  RUBY_EXTERN rb_serial_t ruby_vm_global_constant_state;
20
18
  RUBY_EXTERN rb_serial_t ruby_vm_class_serial;
19
+ RUBY_EXTERN rb_serial_t ruby_vm_global_cvar_state;
21
20
 
22
- RUBY_SYMBOL_EXPORT_END
21
+ MJIT_SYMBOL_EXPORT_END
23
22
 
24
23
  #if VM_COLLECT_USAGE_DETAILS
25
24
  #define COLLECT_USAGE_INSN(insn) vm_collect_usage_insn(insn)
26
25
  #define COLLECT_USAGE_OPERAND(insn, n, op) vm_collect_usage_operand((insn), (n), ((VALUE)(op)))
27
26
 
28
27
  #define COLLECT_USAGE_REGISTER(reg, s) vm_collect_usage_register((reg), (s))
28
+ #elif YJIT_STATS
29
+ /* for --yjit-stats */
30
+ #define COLLECT_USAGE_INSN(insn) rb_yjit_collect_vm_usage_insn(insn)
31
+ #define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
32
+ #define COLLECT_USAGE_REGISTER(reg, s) /* none */
29
33
  #else
30
- #define COLLECT_USAGE_INSN(insn) /* none */
31
- #define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
32
- #define COLLECT_USAGE_REGISTER(reg, s) /* none */
34
+ #define COLLECT_USAGE_INSN(insn) /* none */
35
+ #define COLLECT_USAGE_OPERAND(insn, n, op) /* none */
36
+ #define COLLECT_USAGE_REGISTER(reg, s) /* none */
33
37
  #endif
34
38
 
35
39
  /**********************************************************/
@@ -94,7 +98,7 @@ enum vm_regan_acttype {
94
98
  #define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
95
99
  #define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
96
100
  #define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
97
- #define SET_SV(x) (*GET_SP() = (x))
101
+ #define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
98
102
  /* set current stack value as x */
99
103
 
100
104
  /* instruction sequence C struct */
@@ -120,9 +124,13 @@ enum vm_regan_acttype {
120
124
  * because inline method cache does not care about receiver.
121
125
  */
122
126
 
123
- #define CC_SET_FASTPATH(cc, func, enabled) do { \
124
- if (LIKELY(enabled)) ((cc)->call = (func)); \
125
- } while (0)
127
+ static inline void
128
+ CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, bool enabled)
129
+ {
130
+ if (LIKELY(enabled)) {
131
+ vm_cc_call_set(cc, func);
132
+ }
133
+ }
126
134
 
127
135
  #define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
128
136
 
@@ -136,27 +144,27 @@ enum vm_regan_acttype {
136
144
  /**********************************************************/
137
145
 
138
146
  #if VM_CHECK_MODE > 0
139
- #define SETUP_CANARY() \
140
- VALUE *canary; \
141
- if (leaf) { \
147
+ #define SETUP_CANARY(cond) \
148
+ VALUE *canary = 0; \
149
+ if (cond) { \
142
150
  canary = GET_SP(); \
143
151
  SET_SV(vm_stack_canary); \
144
152
  } \
145
153
  else {\
146
154
  SET_SV(Qfalse); /* cleanup */ \
147
155
  }
148
- #define CHECK_CANARY() \
149
- if (leaf) { \
156
+ #define CHECK_CANARY(cond, insn) \
157
+ if (cond) { \
150
158
  if (*canary == vm_stack_canary) { \
151
159
  *canary = Qfalse; /* cleanup */ \
152
160
  } \
153
161
  else { \
154
- vm_canary_is_found_dead(INSN_ATTR(bin), *canary); \
162
+ rb_vm_canary_is_found_dead(insn, *canary); \
155
163
  } \
156
164
  }
157
165
  #else
158
- #define SETUP_CANARY() /* void */
159
- #define CHECK_CANARY() /* void */
166
+ #define SETUP_CANARY(cond) if (cond) {} else {}
167
+ #define CHECK_CANARY(cond, insn) if (cond) {(void)(insn);}
160
168
  #endif
161
169
 
162
170
  /**********************************************************/
@@ -173,11 +181,12 @@ enum vm_regan_acttype {
173
181
  } while (0)
174
182
  #endif
175
183
 
184
+ #define PREV_CLASS_SERIAL() (ruby_vm_class_serial)
176
185
  #define NEXT_CLASS_SERIAL() (++ruby_vm_class_serial)
177
- #define GET_GLOBAL_METHOD_STATE() (ruby_vm_global_method_state)
178
- #define INC_GLOBAL_METHOD_STATE() (++ruby_vm_global_method_state)
179
186
  #define GET_GLOBAL_CONSTANT_STATE() (ruby_vm_global_constant_state)
180
187
  #define INC_GLOBAL_CONSTANT_STATE() (++ruby_vm_global_constant_state)
188
+ #define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state)
189
+ #define INC_GLOBAL_CVAR_STATE() (++ruby_vm_global_cvar_state)
181
190
 
182
191
  static inline struct vm_throw_data *
183
192
  THROW_DATA_NEW(VALUE val, const rb_control_frame_t *cf, int st)
@@ -233,23 +242,24 @@ static inline void
233
242
  THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
234
243
  {
235
244
  if (THROW_DATA_P(obj) &&
236
- THROW_DATA_STATE(obj) == TAG_BREAK) {
237
- obj->flags |= THROW_DATA_CONSUMED;
245
+ THROW_DATA_STATE(obj) == TAG_BREAK) {
246
+ obj->flags |= THROW_DATA_CONSUMED;
238
247
  }
239
248
  }
240
249
 
241
- #define IS_ARGS_SPLAT(ci) ((ci)->flag & VM_CALL_ARGS_SPLAT)
242
- #define IS_ARGS_KEYWORD(ci) ((ci)->flag & VM_CALL_KWARG)
243
- #define IS_ARGS_KW_SPLAT(ci) ((ci)->flag & VM_CALL_KW_SPLAT)
244
- #define IS_ARGS_KW_OR_KW_SPLAT(ci) ((ci)->flag & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
250
+ #define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
251
+ #define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
252
+ #define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
253
+ #define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
254
+ #define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
245
255
 
246
256
  /* If this returns true, an optimized function returned by `vm_call_iseq_setup_func`
247
257
  can be used as a fastpath. */
248
- static bool
249
- vm_call_iseq_optimizable_p(const struct rb_call_info *ci, const struct rb_call_cache *cc)
258
+ static inline bool
259
+ vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
250
260
  {
251
261
  return !IS_ARGS_SPLAT(ci) && !IS_ARGS_KEYWORD(ci) &&
252
- !(METHOD_ENTRY_VISI(cc->me) == METHOD_VISI_PROTECTED);
262
+ METHOD_ENTRY_CACHEABLE(vm_cc_cme(cc));
253
263
  }
254
264
 
255
265
  #endif /* RUBY_INSNHELPER_H */
@@ -1,4 +1,5 @@
1
- /*-*-c-*-*/
1
+ #ifndef RUBY_VM_OPTS_H/*-*-c-*-*/
2
+ #define RUBY_VM_OPTS_H
2
3
  /**********************************************************************
3
4
 
4
5
  vm_opts.h - VM optimize option
@@ -9,10 +10,6 @@
9
10
 
10
11
  **********************************************************************/
11
12
 
12
-
13
- #ifndef RUBY_VM_OPTS_H
14
- #define RUBY_VM_OPTS_H
15
-
16
13
  /* Compile options.
17
14
  * You can change these options at runtime by VM::CompileOption.
18
15
  * Following definitions are default values.
@@ -61,7 +58,13 @@
61
58
  #define OPT_STACK_CACHING 0
62
59
 
63
60
  /* misc */
61
+ #ifndef OPT_SUPPORT_JOKE
64
62
  #define OPT_SUPPORT_JOKE 0
63
+ #endif
64
+
65
+ #ifndef OPT_SUPPORT_CALL_C_FUNCTION
66
+ #define OPT_SUPPORT_CALL_C_FUNCTION 0
67
+ #endif
65
68
 
66
69
  #ifndef VM_COLLECT_USAGE_DETAILS
67
70
  #define VM_COLLECT_USAGE_DETAILS 0
@@ -0,0 +1,137 @@
1
+ #ifndef RUBY_VM_SYNC_H
2
+ #define RUBY_VM_SYNC_H
3
+
4
+ #include "vm_debug.h"
5
+ #include "debug_counter.h"
6
+
7
+ #if USE_RUBY_DEBUG_LOG
8
+ #define LOCATION_ARGS const char *file, int line
9
+ #define LOCATION_PARAMS file, line
10
+ #define APPEND_LOCATION_ARGS , const char *file, int line
11
+ #define APPEND_LOCATION_PARAMS , file, line
12
+ #else
13
+ #define LOCATION_ARGS void
14
+ #define LOCATION_PARAMS
15
+ #define APPEND_LOCATION_ARGS
16
+ #define APPEND_LOCATION_PARAMS
17
+ #endif
18
+
19
+ bool rb_vm_locked_p(void);
20
+ void rb_vm_lock_body(LOCATION_ARGS);
21
+ void rb_vm_unlock_body(LOCATION_ARGS);
22
+
23
+ struct rb_ractor_struct;
24
+ void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev APPEND_LOCATION_ARGS);
25
+ void rb_vm_lock_enter_body_nb(unsigned int *lev APPEND_LOCATION_ARGS);
26
+ void rb_vm_lock_enter_body(unsigned int *lev APPEND_LOCATION_ARGS);
27
+ void rb_vm_lock_leave_body(unsigned int *lev APPEND_LOCATION_ARGS);
28
+ void rb_vm_barrier(void);
29
+
30
+ #if RUBY_DEBUG
31
+ // GET_VM()
32
+ #include "vm_core.h"
33
+ #endif
34
+
35
+ RUBY_EXTERN struct rb_ractor_struct *ruby_single_main_ractor; // ractor.c
36
+
37
+ static inline bool
38
+ rb_multi_ractor_p(void)
39
+ {
40
+ if (LIKELY(ruby_single_main_ractor)) {
41
+ // 0 on boot time.
42
+ RUBY_ASSERT(GET_VM()->ractor.cnt <= 1);
43
+ return false;
44
+ }
45
+ else {
46
+ // multi-ractor mode can run ractor.cnt == 1
47
+ return true;
48
+ }
49
+ }
50
+
51
+ static inline void
52
+ rb_vm_lock(const char *file, int line)
53
+ {
54
+ RB_DEBUG_COUNTER_INC(vm_sync_lock);
55
+
56
+ if (rb_multi_ractor_p()) {
57
+ rb_vm_lock_body(LOCATION_PARAMS);
58
+ }
59
+ }
60
+
61
+ static inline void
62
+ rb_vm_unlock(const char *file, int line)
63
+ {
64
+ if (rb_multi_ractor_p()) {
65
+ rb_vm_unlock_body(LOCATION_PARAMS);
66
+ }
67
+ }
68
+
69
+ static inline void
70
+ rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
71
+ {
72
+ RB_DEBUG_COUNTER_INC(vm_sync_lock_enter);
73
+
74
+ if (rb_multi_ractor_p()) {
75
+ rb_vm_lock_enter_body(lev APPEND_LOCATION_PARAMS);
76
+ }
77
+ }
78
+
79
+ static inline void
80
+ rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
81
+ {
82
+ RB_DEBUG_COUNTER_INC(vm_sync_lock_enter_nb);
83
+
84
+ if (rb_multi_ractor_p()) {
85
+ rb_vm_lock_enter_body_nb(lev APPEND_LOCATION_PARAMS);
86
+ }
87
+ }
88
+
89
+ static inline void
90
+ rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
91
+ {
92
+ if (rb_multi_ractor_p()) {
93
+ rb_vm_lock_leave_body(lev APPEND_LOCATION_PARAMS);
94
+ }
95
+ }
96
+
97
+ static inline void
98
+ rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
99
+ {
100
+ RB_DEBUG_COUNTER_INC(vm_sync_lock_enter_cr);
101
+ rb_vm_lock_enter_body_cr(cr, levp APPEND_LOCATION_PARAMS);
102
+ }
103
+
104
+ static inline void
105
+ rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
106
+ {
107
+ rb_vm_lock_leave_body(levp APPEND_LOCATION_PARAMS);
108
+ }
109
+
110
+ #define RB_VM_LOCKED_P() rb_vm_locked_p()
111
+
112
+ #define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
113
+ #define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
114
+
115
+ #define RB_VM_LOCK_ENTER_CR_LEV(cr, levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
116
+ #define RB_VM_LOCK_LEAVE_CR_LEV(cr, levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
117
+ #define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
118
+ #define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
119
+
120
+ #define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
121
+ #define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
122
+
123
+ #define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
124
+ #define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
125
+ #define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
126
+
127
+ #if RUBY_DEBUG > 0
128
+ void RUBY_ASSERT_vm_locking(void);
129
+ void RUBY_ASSERT_vm_unlocking(void);
130
+ #define ASSERT_vm_locking() RUBY_ASSERT_vm_locking()
131
+ #define ASSERT_vm_unlocking() RUBY_ASSERT_vm_unlocking()
132
+ #else
133
+ #define ASSERT_vm_locking()
134
+ #define ASSERT_vm_unlocking()
135
+ #endif
136
+
137
+ #endif // RUBY_VM_SYNC_H
@@ -59,7 +59,6 @@ static const void *const insns_address_table[] = {
59
59
  LABEL_PTR(putstring),
60
60
  LABEL_PTR(concatstrings),
61
61
  LABEL_PTR(tostring),
62
- LABEL_PTR(freezestring),
63
62
  LABEL_PTR(toregexp),
64
63
  LABEL_PTR(intern),
65
64
  LABEL_PTR(newarray),
@@ -75,7 +74,6 @@ static const void *const insns_address_table[] = {
75
74
  LABEL_PTR(dup),
76
75
  LABEL_PTR(dupn),
77
76
  LABEL_PTR(swap),
78
- LABEL_PTR(reverse),
79
77
  LABEL_PTR(topn),
80
78
  LABEL_PTR(setn),
81
79
  LABEL_PTR(adjuststack),
@@ -83,7 +81,6 @@ static const void *const insns_address_table[] = {
83
81
  LABEL_PTR(checkmatch),
84
82
  LABEL_PTR(checkkeyword),
85
83
  LABEL_PTR(checktype),
86
- LABEL_PTR(methodref),
87
84
  LABEL_PTR(defineclass),
88
85
  LABEL_PTR(definemethod),
89
86
  LABEL_PTR(definesmethod),
@@ -130,7 +127,9 @@ static const void *const insns_address_table[] = {
130
127
  LABEL_PTR(opt_succ),
131
128
  LABEL_PTR(opt_not),
132
129
  LABEL_PTR(opt_regexpmatch2),
133
- LABEL_PTR(opt_call_c_function),
130
+ LABEL_PTR(invokebuiltin),
131
+ LABEL_PTR(opt_invokebuiltin_delegate),
132
+ LABEL_PTR(opt_invokebuiltin_delegate_leave),
134
133
  LABEL_PTR(getlocal_WC_0),
135
134
  LABEL_PTR(getlocal_WC_1),
136
135
  LABEL_PTR(setlocal_WC_0),
@@ -160,7 +159,6 @@ static const void *const insns_address_table[] = {
160
159
  LABEL_PTR(trace_putstring),
161
160
  LABEL_PTR(trace_concatstrings),
162
161
  LABEL_PTR(trace_tostring),
163
- LABEL_PTR(trace_freezestring),
164
162
  LABEL_PTR(trace_toregexp),
165
163
  LABEL_PTR(trace_intern),
166
164
  LABEL_PTR(trace_newarray),
@@ -176,7 +174,6 @@ static const void *const insns_address_table[] = {
176
174
  LABEL_PTR(trace_dup),
177
175
  LABEL_PTR(trace_dupn),
178
176
  LABEL_PTR(trace_swap),
179
- LABEL_PTR(trace_reverse),
180
177
  LABEL_PTR(trace_topn),
181
178
  LABEL_PTR(trace_setn),
182
179
  LABEL_PTR(trace_adjuststack),
@@ -184,7 +181,6 @@ static const void *const insns_address_table[] = {
184
181
  LABEL_PTR(trace_checkmatch),
185
182
  LABEL_PTR(trace_checkkeyword),
186
183
  LABEL_PTR(trace_checktype),
187
- LABEL_PTR(trace_methodref),
188
184
  LABEL_PTR(trace_defineclass),
189
185
  LABEL_PTR(trace_definemethod),
190
186
  LABEL_PTR(trace_definesmethod),
@@ -231,7 +227,9 @@ static const void *const insns_address_table[] = {
231
227
  LABEL_PTR(trace_opt_succ),
232
228
  LABEL_PTR(trace_opt_not),
233
229
  LABEL_PTR(trace_opt_regexpmatch2),
234
- LABEL_PTR(trace_opt_call_c_function),
230
+ LABEL_PTR(trace_invokebuiltin),
231
+ LABEL_PTR(trace_opt_invokebuiltin_delegate),
232
+ LABEL_PTR(trace_opt_invokebuiltin_delegate_leave),
235
233
  LABEL_PTR(trace_getlocal_WC_0),
236
234
  LABEL_PTR(trace_getlocal_WC_1),
237
235
  LABEL_PTR(trace_setlocal_WC_0),
@@ -0,0 +1,63 @@
1
+ #ifndef YJIT_H
2
+ #define YJIT_H 1
3
+ //
4
+ // This file contains definitions YJIT exposes to the CRuby codebase
5
+ //
6
+
7
+ #include "ruby/internal/config.h"
8
+ #include "ruby_assert.h" // for RUBY_DEBUG
9
+ #include "vm_core.h"
10
+ #include "method.h"
11
+
12
+ // YJIT_STATS controls whether to support runtime counters in generated code
13
+ // and in the interpreter.
14
+ #ifndef YJIT_STATS
15
+ # define YJIT_STATS RUBY_DEBUG
16
+ #endif
17
+
18
+ struct rb_yjit_options {
19
+ // Enable compilation with YJIT
20
+ bool yjit_enabled;
21
+
22
+ // Size of the executable memory block to allocate in MiB
23
+ unsigned exec_mem_size;
24
+
25
+ // Number of method calls after which to start generating code
26
+ // Threshold==1 means compile on first execution
27
+ unsigned call_threshold;
28
+
29
+ // Generate versions greedily until the limit is hit
30
+ bool greedy_versioning;
31
+
32
+ // Maximum number of versions per block
33
+ // 1 means always create generic versions
34
+ unsigned max_versions;
35
+
36
+ // Capture and print out stats
37
+ bool gen_stats;
38
+
39
+ // Run backend tests
40
+ bool test_backend;
41
+ };
42
+
43
+ bool rb_yjit_enabled_p(void);
44
+ unsigned rb_yjit_call_threshold(void);
45
+
46
+ void rb_yjit_invalidate_all_method_lookup_assumptions(void);
47
+ void rb_yjit_method_lookup_change(VALUE klass, ID mid);
48
+ void rb_yjit_cme_invalidate(VALUE cme);
49
+ void rb_yjit_collect_vm_usage_insn(int insn);
50
+ void rb_yjit_collect_binding_alloc(void);
51
+ void rb_yjit_collect_binding_set(void);
52
+ bool rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec);
53
+ void rb_yjit_init(struct rb_yjit_options *options);
54
+ void rb_yjit_bop_redefined(VALUE klass, const rb_method_entry_t *me, enum ruby_basic_operators bop);
55
+ void rb_yjit_constant_state_changed(void);
56
+ void rb_yjit_iseq_mark(const struct rb_iseq_constant_body *body);
57
+ void rb_yjit_iseq_update_references(const struct rb_iseq_constant_body *body);
58
+ void rb_yjit_iseq_free(const struct rb_iseq_constant_body *body);
59
+ void rb_yjit_before_ractor_spawn(void);
60
+ void rb_yjit_constant_ic_update(const rb_iseq_t *iseq, IC ic);
61
+ void rb_yjit_tracing_invalidate_all(void);
62
+
63
+ #endif // #ifndef YJIT_H