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,116 @@
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
+ void ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...);
91
+ void ruby_debug_log_print(unsigned int n);
92
+ bool ruby_debug_log_filter(const char *func_name);
93
+
94
+ // convenient macro to log even if the USE_RUBY_DEBUG_LOG macro is not specified.
95
+ // You can use this macro for temporary usage (you should not commit it).
96
+ #define _RUBY_DEBUG_LOG(fmt, ...) ruby_debug_log(__FILE__, __LINE__, __func__, fmt, __VA_ARGS__)
97
+
98
+ #if USE_RUBY_DEBUG_LOG
99
+
100
+ #define RUBY_DEBUG_LOG(fmt, ...) do { \
101
+ if (ruby_debug_log_mode && ruby_debug_log_filter(__func__)) \
102
+ ruby_debug_log(__FILE__, __LINE__, __func__, fmt, __VA_ARGS__); \
103
+ } while (0)
104
+
105
+ #define RUBY_DEBUG_LOG2(file, line, fmt, ...) do { \
106
+ if (ruby_debug_log_mode && ruby_debug_log_filter(__func__)) \
107
+ ruby_debug_log(file, line, __func__, fmt, __VA_ARGS__); \
108
+ } while (0)
109
+
110
+ #else
111
+ // do nothing
112
+ #define RUBY_DEBUG_LOG(fmt, ...)
113
+ #define RUBY_DEBUG_LOG2(file, line, fmt, ...)
114
+ #endif // USE_RUBY_DEBUG_LOG
115
+
116
+ #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;
@@ -41,6 +40,10 @@ typedef rb_iseq_t *ISEQ;
41
40
  #define throwdebug if(0)printf
42
41
  /* #define throwdebug printf */
43
42
 
43
+ #ifndef USE_INSNS_COUNTER
44
+ #define USE_INSNS_COUNTER 0
45
+ #endif
46
+
44
47
  /************************************************/
45
48
  #if defined(DISPATCH_XXX)
46
49
  error !
@@ -75,7 +78,8 @@ error !
75
78
  (reg_pc - reg_cfp->iseq->body->iseq_encoded), \
76
79
  (reg_cfp->pc - reg_cfp->iseq->body->iseq_encoded), \
77
80
  RSTRING_PTR(rb_iseq_path(reg_cfp->iseq)), \
78
- rb_iseq_line_no(reg_cfp->iseq, reg_pc - reg_cfp->iseq->body->iseq_encoded));
81
+ rb_iseq_line_no(reg_cfp->iseq, reg_pc - reg_cfp->iseq->body->iseq_encoded)); \
82
+ if (USE_INSNS_COUNTER) vm_insns_counter_count_insn(BIN(insn));
79
83
 
80
84
  #define INSN_DISPATCH_SIG(insn)
81
85
 
@@ -181,8 +185,7 @@ default: \
181
185
  #define VM_DEBUG_STACKOVERFLOW 0
182
186
 
183
187
  #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()
188
+ #define CHECK_VM_STACK_OVERFLOW_FOR_INSN CHECK_VM_STACK_OVERFLOW
186
189
  #else
187
190
  #define CHECK_VM_STACK_OVERFLOW_FOR_INSN(cfp, margin)
188
191
  #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,13 +11,9 @@
9
11
 
10
12
  **********************************************************************/
11
13
 
12
- #ifndef RUBY_INSNHELPER_H
13
- #define RUBY_INSNHELPER_H
14
-
15
14
  RUBY_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;
21
19
 
@@ -94,7 +92,7 @@ enum vm_regan_acttype {
94
92
  #define SET_SP(x) (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
95
93
  #define INC_SP(x) (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
96
94
  #define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
97
- #define SET_SV(x) (*GET_SP() = (x))
95
+ #define SET_SV(x) (*GET_SP() = rb_ractor_confirm_belonging(x))
98
96
  /* set current stack value as x */
99
97
 
100
98
  /* instruction sequence C struct */
@@ -120,9 +118,13 @@ enum vm_regan_acttype {
120
118
  * because inline method cache does not care about receiver.
121
119
  */
122
120
 
123
- #define CC_SET_FASTPATH(cc, func, enabled) do { \
124
- if (LIKELY(enabled)) ((cc)->call = (func)); \
125
- } while (0)
121
+ static inline void
122
+ CC_SET_FASTPATH(const struct rb_callcache *cc, vm_call_handler func, bool enabled)
123
+ {
124
+ if (LIKELY(enabled)) {
125
+ vm_cc_call_set(cc, func);
126
+ }
127
+ }
126
128
 
127
129
  #define GET_BLOCK_HANDLER() (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
128
130
 
@@ -136,27 +138,27 @@ enum vm_regan_acttype {
136
138
  /**********************************************************/
137
139
 
138
140
  #if VM_CHECK_MODE > 0
139
- #define SETUP_CANARY() \
140
- VALUE *canary; \
141
- if (leaf) { \
141
+ #define SETUP_CANARY(cond) \
142
+ VALUE *canary = 0; \
143
+ if (cond) { \
142
144
  canary = GET_SP(); \
143
145
  SET_SV(vm_stack_canary); \
144
146
  } \
145
147
  else {\
146
148
  SET_SV(Qfalse); /* cleanup */ \
147
149
  }
148
- #define CHECK_CANARY() \
149
- if (leaf) { \
150
+ #define CHECK_CANARY(cond, insn) \
151
+ if (cond) { \
150
152
  if (*canary == vm_stack_canary) { \
151
153
  *canary = Qfalse; /* cleanup */ \
152
154
  } \
153
155
  else { \
154
- vm_canary_is_found_dead(INSN_ATTR(bin), *canary); \
156
+ vm_canary_is_found_dead(insn, *canary); \
155
157
  } \
156
158
  }
157
159
  #else
158
- #define SETUP_CANARY() /* void */
159
- #define CHECK_CANARY() /* void */
160
+ #define SETUP_CANARY(cond) if (cond) {} else {}
161
+ #define CHECK_CANARY(cond, insn) if (cond) {(void)(insn);}
160
162
  #endif
161
163
 
162
164
  /**********************************************************/
@@ -166,16 +168,15 @@ enum vm_regan_acttype {
166
168
  #ifndef MJIT_HEADER
167
169
  #define CALL_SIMPLE_METHOD() do { \
168
170
  rb_snum_t x = leaf ? INSN_ATTR(width) : 0; \
169
- rb_snum_t y = attr_width_opt_send_without_block(0, 0); \
171
+ rb_snum_t y = attr_width_opt_send_without_block(0); \
170
172
  rb_snum_t z = x - y; \
171
173
  ADD_PC(z); \
172
174
  DISPATCH_ORIGINAL_INSN(opt_send_without_block); \
173
175
  } while (0)
174
176
  #endif
175
177
 
178
+ #define PREV_CLASS_SERIAL() (ruby_vm_class_serial)
176
179
  #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
180
  #define GET_GLOBAL_CONSTANT_STATE() (ruby_vm_global_constant_state)
180
181
  #define INC_GLOBAL_CONSTANT_STATE() (++ruby_vm_global_constant_state)
181
182
 
@@ -238,18 +239,19 @@ THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
238
239
  }
239
240
  }
240
241
 
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))
242
+ #define IS_ARGS_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT)
243
+ #define IS_ARGS_KEYWORD(ci) (vm_ci_flag(ci) & VM_CALL_KWARG)
244
+ #define IS_ARGS_KW_SPLAT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT)
245
+ #define IS_ARGS_KW_OR_KW_SPLAT(ci) (vm_ci_flag(ci) & (VM_CALL_KWARG | VM_CALL_KW_SPLAT))
246
+ #define IS_ARGS_KW_SPLAT_MUT(ci) (vm_ci_flag(ci) & VM_CALL_KW_SPLAT_MUT)
245
247
 
246
248
  /* If this returns true, an optimized function returned by `vm_call_iseq_setup_func`
247
249
  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)
250
+ static inline bool
251
+ vm_call_iseq_optimizable_p(const struct rb_callinfo *ci, const struct rb_callcache *cc)
250
252
  {
251
253
  return !IS_ARGS_SPLAT(ci) && !IS_ARGS_KEYWORD(ci) &&
252
- !(METHOD_ENTRY_VISI(cc->me) == METHOD_VISI_PROTECTED);
254
+ METHOD_ENTRY_CACHEABLE(vm_cc_cme(cc));
253
255
  }
254
256
 
255
257
  #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.
@@ -65,6 +62,10 @@
65
62
  #define OPT_SUPPORT_JOKE 0
66
63
  #endif
67
64
 
65
+ #ifndef OPT_SUPPORT_CALL_C_FUNCTION
66
+ #define OPT_SUPPORT_CALL_C_FUNCTION 0
67
+ #endif
68
+
68
69
  #ifndef VM_COLLECT_USAGE_DETAILS
69
70
  #define VM_COLLECT_USAGE_DETAILS 0
70
71
  #endif
@@ -0,0 +1,136 @@
1
+
2
+ #ifndef RUBY_VM_SYNC_H
3
+ #define RUBY_VM_SYNC_H
4
+
5
+ #include "vm_debug.h"
6
+ #include "debug_counter.h"
7
+
8
+ #if USE_RUBY_DEBUG_LOG
9
+ #define LOCATION_ARGS const char *file, int line
10
+ #define LOCATION_PARAMS file, line
11
+ #define APPEND_LOCATION_ARGS , const char *file, int line
12
+ #define APPEND_LOCATION_PARAMS , file, line
13
+ #else
14
+ #define LOCATION_ARGS void
15
+ #define LOCATION_PARAMS
16
+ #define APPEND_LOCATION_ARGS
17
+ #define APPEND_LOCATION_PARAMS
18
+ #endif
19
+
20
+ bool rb_vm_locked_p(void);
21
+ void rb_vm_lock_body(LOCATION_ARGS);
22
+ void rb_vm_unlock_body(LOCATION_ARGS);
23
+
24
+ struct rb_ractor_struct;
25
+ void rb_vm_lock_enter_body_cr(struct rb_ractor_struct *cr, unsigned int *lev APPEND_LOCATION_ARGS);
26
+ void rb_vm_lock_enter_body_nb(unsigned int *lev APPEND_LOCATION_ARGS);
27
+ void rb_vm_lock_enter_body(unsigned int *lev APPEND_LOCATION_ARGS);
28
+ void rb_vm_lock_leave_body(unsigned int *lev APPEND_LOCATION_ARGS);
29
+ void rb_vm_barrier(void);
30
+
31
+ #if RUBY_DEBUG
32
+ // GET_VM()
33
+ #include "vm_core.h"
34
+ #endif
35
+
36
+ RUBY_EXTERN struct rb_ractor_struct *ruby_single_main_ractor; // ractor.c
37
+
38
+ static inline bool
39
+ rb_multi_ractor_p(void)
40
+ {
41
+ if (LIKELY(ruby_single_main_ractor)) {
42
+ // 0 on boot time.
43
+ RUBY_ASSERT(GET_VM()->ractor.cnt <= 1);
44
+ return false;
45
+ }
46
+ else {
47
+ // multi-ractor mode can run ractor.cnt == 1
48
+ return true;
49
+ }
50
+ }
51
+
52
+ static inline void
53
+ rb_vm_lock(const char *file, int line)
54
+ {
55
+ RB_DEBUG_COUNTER_INC(vm_sync_lock);
56
+
57
+ if (rb_multi_ractor_p()) {
58
+ rb_vm_lock_body(LOCATION_PARAMS);
59
+ }
60
+ }
61
+
62
+ static inline void
63
+ rb_vm_unlock(const char *file, int line)
64
+ {
65
+ if (rb_multi_ractor_p()) {
66
+ rb_vm_unlock_body(LOCATION_PARAMS);
67
+ }
68
+ }
69
+
70
+ static inline void
71
+ rb_vm_lock_enter(unsigned int *lev, const char *file, int line)
72
+ {
73
+ RB_DEBUG_COUNTER_INC(vm_sync_lock_enter);
74
+
75
+ if (rb_multi_ractor_p()) {
76
+ rb_vm_lock_enter_body(lev APPEND_LOCATION_PARAMS);
77
+ }
78
+ }
79
+
80
+ static inline void
81
+ rb_vm_lock_enter_nb(unsigned int *lev, const char *file, int line)
82
+ {
83
+ RB_DEBUG_COUNTER_INC(vm_sync_lock_enter_nb);
84
+
85
+ if (rb_multi_ractor_p()) {
86
+ rb_vm_lock_enter_body_nb(lev APPEND_LOCATION_PARAMS);
87
+ }
88
+ }
89
+
90
+ static inline void
91
+ rb_vm_lock_leave(unsigned int *lev, const char *file, int line)
92
+ {
93
+ if (rb_multi_ractor_p()) {
94
+ rb_vm_lock_leave_body(lev APPEND_LOCATION_PARAMS);
95
+ }
96
+ }
97
+
98
+ static inline void
99
+ rb_vm_lock_enter_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
100
+ {
101
+ RB_DEBUG_COUNTER_INC(vm_sync_lock_enter_cr);
102
+ rb_vm_lock_enter_body_cr(cr, levp APPEND_LOCATION_PARAMS);
103
+ }
104
+
105
+ static inline void
106
+ rb_vm_lock_leave_cr(struct rb_ractor_struct *cr, unsigned int *levp, const char *file, int line)
107
+ {
108
+ rb_vm_lock_leave_body(levp APPEND_LOCATION_PARAMS);
109
+ }
110
+
111
+ #define RB_VM_LOCKED_P() rb_vm_locked_p()
112
+
113
+ #define RB_VM_LOCK() rb_vm_lock(__FILE__, __LINE__)
114
+ #define RB_VM_UNLOCK() rb_vm_unlock(__FILE__, __LINE__)
115
+
116
+ #define RB_VM_LOCK_ENTER_CR_LEV(cr, levp) rb_vm_lock_enter_cr(cr, levp, __FILE__, __LINE__)
117
+ #define RB_VM_LOCK_LEAVE_CR_LEV(cr, levp) rb_vm_lock_leave_cr(cr, levp, __FILE__, __LINE__)
118
+ #define RB_VM_LOCK_ENTER_LEV(levp) rb_vm_lock_enter(levp, __FILE__, __LINE__)
119
+ #define RB_VM_LOCK_LEAVE_LEV(levp) rb_vm_lock_leave(levp, __FILE__, __LINE__)
120
+
121
+ #define RB_VM_LOCK_ENTER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV(&_lev);
122
+ #define RB_VM_LOCK_LEAVE() RB_VM_LOCK_LEAVE_LEV(&_lev); }
123
+
124
+ #define RB_VM_LOCK_ENTER_LEV_NB(levp) rb_vm_lock_enter_nb(levp, __FILE__, __LINE__)
125
+ #define RB_VM_LOCK_ENTER_NO_BARRIER() { unsigned int _lev; RB_VM_LOCK_ENTER_LEV_NB(&_lev);
126
+ #define RB_VM_LOCK_LEAVE_NO_BARRIER() RB_VM_LOCK_LEAVE_LEV(&_lev); }
127
+
128
+ #if RUBY_DEBUG > 0
129
+ void ASSERT_vm_locking(void);
130
+ void ASSERT_vm_unlocking(void);
131
+ #else
132
+ #define ASSERT_vm_locking()
133
+ #define ASSERT_vm_unlocking()
134
+ #endif
135
+
136
+ #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),
@@ -129,7 +128,6 @@ static const void *const insns_address_table[] = {
129
128
  LABEL_PTR(opt_succ),
130
129
  LABEL_PTR(opt_not),
131
130
  LABEL_PTR(opt_regexpmatch2),
132
- LABEL_PTR(opt_call_c_function),
133
131
  LABEL_PTR(invokebuiltin),
134
132
  LABEL_PTR(opt_invokebuiltin_delegate),
135
133
  LABEL_PTR(opt_invokebuiltin_delegate_leave),
@@ -162,7 +160,6 @@ static const void *const insns_address_table[] = {
162
160
  LABEL_PTR(trace_putstring),
163
161
  LABEL_PTR(trace_concatstrings),
164
162
  LABEL_PTR(trace_tostring),
165
- LABEL_PTR(trace_freezestring),
166
163
  LABEL_PTR(trace_toregexp),
167
164
  LABEL_PTR(trace_intern),
168
165
  LABEL_PTR(trace_newarray),
@@ -232,7 +229,6 @@ static const void *const insns_address_table[] = {
232
229
  LABEL_PTR(trace_opt_succ),
233
230
  LABEL_PTR(trace_opt_not),
234
231
  LABEL_PTR(trace_opt_regexpmatch2),
235
- LABEL_PTR(trace_opt_call_c_function),
236
232
  LABEL_PTR(trace_invokebuiltin),
237
233
  LABEL_PTR(trace_opt_invokebuiltin_delegate),
238
234
  LABEL_PTR(trace_opt_invokebuiltin_delegate_leave),
@@ -1,3 +1,5 @@
1
+ #ifndef RUBY_ADDR2LINE_H
2
+ #define RUBY_ADDR2LINE_H
1
3
  /**********************************************************************
2
4
 
3
5
  addr2line.h -
@@ -8,9 +10,6 @@
8
10
 
9
11
  **********************************************************************/
10
12
 
11
- #ifndef RUBY_ADDR2LINE_H
12
- #define RUBY_ADDR2LINE_H
13
-
14
13
  #if (defined(USE_ELF) || defined(HAVE_MACH_O_LOADER_H))
15
14
 
16
15
  void
@@ -0,0 +1,83 @@
1
+ #ifndef BUILTIN_H_INCLUDED
2
+ #define BUILTIN_H_INCLUDED
3
+
4
+ // invoke
5
+
6
+ struct rb_builtin_function {
7
+ // for invocation
8
+ const void * const func_ptr;
9
+ const int argc;
10
+
11
+ // for load
12
+ const int index;
13
+ const char * const name;
14
+
15
+ // for jit
16
+ void (*compiler)(FILE *, long, unsigned, bool);
17
+ };
18
+
19
+ #define RB_BUILTIN_FUNCTION(_i, _name, _fname, _arity, _compiler) {\
20
+ .name = #_name, \
21
+ .func_ptr = (void *)_fname, \
22
+ .argc = _arity, \
23
+ .index = _i, \
24
+ .compiler = _compiler, \
25
+ }
26
+
27
+ void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
28
+
29
+ #ifndef rb_execution_context_t
30
+ typedef struct rb_execution_context_struct rb_execution_context_t;
31
+ #define rb_execution_context_t rb_execution_context_t
32
+ #endif
33
+
34
+ /* The following code is generated by the following Ruby script:
35
+
36
+ 16.times{|i|
37
+ args = (i > 0 ? ', ' : '') + (0...i).map{"VALUE"}.join(', ')
38
+ puts "static inline void rb_builtin_function_check_arity#{i}(VALUE (*f)(rb_execution_context_t *ec, VALUE self#{args})){}"
39
+ }
40
+ */
41
+
42
+ static inline void rb_builtin_function_check_arity0(VALUE (*f)(rb_execution_context_t *ec, VALUE self)){}
43
+ static inline void rb_builtin_function_check_arity1(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE)){}
44
+ static inline void rb_builtin_function_check_arity2(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE)){}
45
+ static inline void rb_builtin_function_check_arity3(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE)){}
46
+ static inline void rb_builtin_function_check_arity4(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE)){}
47
+ static inline void rb_builtin_function_check_arity5(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE)){}
48
+ static inline void rb_builtin_function_check_arity6(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
49
+ static inline void rb_builtin_function_check_arity7(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
50
+ static inline void rb_builtin_function_check_arity8(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
51
+ static inline void rb_builtin_function_check_arity9(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
52
+ static inline void rb_builtin_function_check_arity10(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
53
+ static inline void rb_builtin_function_check_arity11(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
54
+ static inline void rb_builtin_function_check_arity12(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
55
+ static inline void rb_builtin_function_check_arity13(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
56
+ static inline void rb_builtin_function_check_arity14(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
57
+ static inline void rb_builtin_function_check_arity15(VALUE (*f)(rb_execution_context_t *ec, VALUE self, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)){}
58
+
59
+ VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
60
+
61
+ // __builtin_inline!
62
+
63
+ PUREFUNC(static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index));
64
+
65
+ static inline VALUE
66
+ rb_vm_lvar(rb_execution_context_t *ec, int index)
67
+ {
68
+ #if defined(VM_CORE_H_EC_DEFINED) && VM_CORE_H_EC_DEFINED
69
+ return ec->cfp->ep[index];
70
+ #else
71
+ return rb_vm_lvar_exposed(ec, index);
72
+ #endif
73
+ }
74
+
75
+ // dump/load
76
+
77
+ struct builtin_binary {
78
+ const char *feature; // feature name
79
+ const unsigned char *bin; // binary by ISeq#to_binary
80
+ size_t bin_size;
81
+ };
82
+
83
+ #endif // BUILTIN_H_INCLUDED
@@ -10,17 +10,17 @@
10
10
  * by the compiler. This can only be used within a function.
11
11
  *
12
12
  * Example:
13
- * #include <stddef.h>
14
- * ...
15
- * static char *foo_to_char(struct foo *foo)
16
- * {
17
- * // This code needs string to be at start of foo.
18
- * BUILD_ASSERT(offsetof(struct foo, string) == 0);
19
- * return (char *)foo;
20
- * }
13
+ * #include <stddef.h>
14
+ * ...
15
+ * static char *foo_to_char(struct foo *foo)
16
+ * {
17
+ * // This code needs string to be at start of foo.
18
+ * BUILD_ASSERT(offsetof(struct foo, string) == 0);
19
+ * return (char *)foo;
20
+ * }
21
21
  */
22
22
  #define BUILD_ASSERT(cond) \
23
- do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
23
+ do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
24
24
 
25
25
  /**
26
26
  * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
@@ -30,11 +30,11 @@
30
30
  * by the compiler. This can be used in an expression: its value is "0".
31
31
  *
32
32
  * Example:
33
- * #define foo_to_char(foo) \
34
- * ((char *)(foo) \
35
- * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
33
+ * #define foo_to_char(foo) \
34
+ * ((char *)(foo) \
35
+ * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
36
36
  */
37
37
  #define BUILD_ASSERT_OR_ZERO(cond) \
38
- (sizeof(char [1 - 2*!(cond)]) - 1)
38
+ (sizeof(char [1 - 2*!(cond)]) - 1)
39
39
 
40
40
  #endif /* CCAN_BUILD_ASSERT_H */
@@ -17,9 +17,9 @@
17
17
  * to compile if the sizes of the types are unequal (a less complete check).
18
18
  *
19
19
  * Example:
20
- * // They should always pass a 64-bit value to _set_some_value!
21
- * #define set_some_value(expr) \
22
- * _set_some_value((check_type((expr), uint64_t), (expr)))
20
+ * // They should always pass a 64-bit value to _set_some_value!
21
+ * #define set_some_value(expr) \
22
+ * _set_some_value((check_type((expr), uint64_t), (expr)))
23
23
  */
24
24
 
25
25
  /**
@@ -37,27 +37,27 @@
37
37
  * to compile if the sizes of the types are unequal (a less complete check).
38
38
  *
39
39
  * Example:
40
- * // Do subtraction to get to enclosing type, but make sure that
41
- * // pointer is of correct type for that member.
42
- * #define container_of(mbr_ptr, encl_type, mbr) \
43
- * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \
44
- * ((encl_type *) \
45
- * ((char *)(mbr_ptr) - offsetof(enclosing_type, mbr))))
40
+ * // Do subtraction to get to enclosing type, but make sure that
41
+ * // pointer is of correct type for that member.
42
+ * #define container_of(mbr_ptr, encl_type, mbr) \
43
+ * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \
44
+ * ((encl_type *) \
45
+ * ((char *)(mbr_ptr) - offsetof(enclosing_type, mbr))))
46
46
  */
47
47
  #if HAVE_TYPEOF
48
- #define check_type(expr, type) \
49
- ((typeof(expr) *)0 != (type *)0)
48
+ #define check_type(expr, type) \
49
+ ((typeof(expr) *)0 != (type *)0)
50
50
 
51
- #define check_types_match(expr1, expr2) \
52
- ((typeof(expr1) *)0 != (typeof(expr2) *)0)
51
+ #define check_types_match(expr1, expr2) \
52
+ ((typeof(expr1) *)0 != (typeof(expr2) *)0)
53
53
  #else
54
54
  #include "ccan/build_assert/build_assert.h"
55
55
  /* Without typeof, we can only test the sizes. */
56
- #define check_type(expr, type) \
57
- BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type))
56
+ #define check_type(expr, type) \
57
+ BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type))
58
58
 
59
- #define check_types_match(expr1, expr2) \
60
- BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2))
59
+ #define check_types_match(expr1, expr2) \
60
+ BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2))
61
61
  #endif /* HAVE_TYPEOF */
62
62
 
63
63
  #endif /* CCAN_CHECK_TYPE_H */