debase-ruby_core_source 0.10.9 → 0.10.13

Sign up to get free protection for your applications and to get access to all the features.
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,136 @@
1
+ #ifndef INTERNAL_VM_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_VM_H
3
+ /**
4
+ * @file
5
+ * @author Ruby developers <ruby-core@ruby-lang.org>
6
+ * @copyright This file is a part of the programming language Ruby.
7
+ * Permission is hereby granted, to either redistribute and/or
8
+ * modify this file, provided that the conditions mentioned in the
9
+ * file COPYING are met. Consult the file for details.
10
+ * @brief Internal header for RubyVM.
11
+ */
12
+ #include "ruby/internal/stdbool.h" /* for bool */
13
+ #include "internal/serial.h" /* for rb_serial_t */
14
+ #include "internal/static_assert.h" /* for STATIC_ASSERT */
15
+ #include "ruby/ruby.h" /* for ID */
16
+ #include "ruby/st.h" /* for st_table */
17
+
18
+ #ifdef rb_funcallv
19
+ # undef rb_funcallv
20
+ #endif
21
+
22
+ #ifdef rb_method_basic_definition_p
23
+ # undef rb_method_basic_definition_p
24
+ #endif
25
+
26
+ struct rb_callable_method_entry_struct; /* in method.h */
27
+ struct rb_method_definition_struct; /* in method.h */
28
+ struct rb_execution_context_struct; /* in vm_core.h */
29
+ struct rb_control_frame_struct; /* in vm_core.h */
30
+ struct rb_callinfo; /* in vm_core.h */
31
+
32
+ enum method_missing_reason {
33
+ MISSING_NOENTRY = 0x00,
34
+ MISSING_PRIVATE = 0x01,
35
+ MISSING_PROTECTED = 0x02,
36
+ MISSING_FCALL = 0x04,
37
+ MISSING_VCALL = 0x08,
38
+ MISSING_SUPER = 0x10,
39
+ MISSING_MISSING = 0x20,
40
+ MISSING_NONE = 0x40
41
+ };
42
+
43
+ /* vm_insnhelper.h */
44
+ rb_serial_t rb_next_class_serial(void);
45
+
46
+ /* vm.c */
47
+ VALUE rb_obj_is_thread(VALUE obj);
48
+ void rb_vm_mark(void *ptr);
49
+ void rb_vm_each_stack_value(void *ptr, void (*cb)(VALUE, void*), void *ctx);
50
+ PUREFUNC(VALUE rb_vm_top_self(void));
51
+ void rb_vm_inc_const_missing_count(void);
52
+ const void **rb_vm_get_insns_address_table(void);
53
+ VALUE rb_source_location(int *pline);
54
+ const char *rb_source_location_cstr(int *pline);
55
+ MJIT_STATIC void rb_vm_pop_cfunc_frame(void);
56
+ int rb_vm_add_root_module(VALUE module);
57
+ void rb_vm_check_redefinition_by_prepend(VALUE klass);
58
+ int rb_vm_check_optimizable_mid(VALUE mid);
59
+ VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
60
+ MJIT_STATIC VALUE ruby_vm_special_exception_copy(VALUE);
61
+ PUREFUNC(st_table *rb_vm_fstring_table(void));
62
+
63
+ MJIT_SYMBOL_EXPORT_BEGIN
64
+ VALUE vm_exec(struct rb_execution_context_struct *, bool); /* used in JIT-ed code */
65
+ MJIT_SYMBOL_EXPORT_END
66
+
67
+ /* vm_eval.c */
68
+ VALUE rb_current_realfilepath(void);
69
+ VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
70
+ typedef void rb_check_funcall_hook(int, VALUE, ID, int, const VALUE *, VALUE);
71
+ VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv,
72
+ rb_check_funcall_hook *hook, VALUE arg);
73
+ VALUE rb_check_funcall_with_hook_kw(VALUE recv, ID mid, int argc, const VALUE *argv,
74
+ rb_check_funcall_hook *hook, VALUE arg, int kw_splat);
75
+ const char *rb_type_str(enum ruby_value_type type);
76
+ VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
77
+ VALUE rb_check_funcall_basic_kw(VALUE, ID, VALUE, int, const VALUE*, int);
78
+ VALUE rb_yield_1(VALUE val);
79
+ VALUE rb_yield_force_blockarg(VALUE values);
80
+ VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
81
+ rb_block_call_func_t bl_proc, int min_argc, int max_argc,
82
+ VALUE data2);
83
+
84
+ MJIT_SYMBOL_EXPORT_BEGIN
85
+ VALUE rb_vm_call0(struct rb_execution_context_struct *ec, VALUE recv, ID id, int argc, const VALUE *argv, const struct rb_callable_method_entry_struct *me, int kw_splat);
86
+ VALUE rb_vm_call_kw(struct rb_execution_context_struct *ec, VALUE recv, VALUE id, int argc, const VALUE *argv, const struct rb_callable_method_entry_struct *me, int kw_splat);
87
+ VALUE rb_make_no_method_exception(VALUE exc, VALUE format, VALUE obj, int argc, const VALUE *argv, int priv);
88
+ MJIT_SYMBOL_EXPORT_END
89
+
90
+ /* vm_insnhelper.c */
91
+ VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
92
+ VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
93
+
94
+ struct rb_iseq_struct;
95
+ MJIT_SYMBOL_EXPORT_BEGIN
96
+ const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass);
97
+ MJIT_SYMBOL_EXPORT_END
98
+
99
+ /* vm_method.c */
100
+ struct rb_execution_context_struct;
101
+ MJIT_SYMBOL_EXPORT_BEGIN
102
+ int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE klass, VALUE obj, ID id, int priv);
103
+ MJIT_SYMBOL_EXPORT_END
104
+
105
+ /* vm_dump.c */
106
+ void rb_print_backtrace(void);
107
+
108
+ /* vm_backtrace.c */
109
+ VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
110
+ VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval);
111
+ VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
112
+ VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
113
+ VALUE rb_make_backtrace(void);
114
+ void rb_backtrace_print_as_bugreport(void);
115
+ int rb_backtrace_p(VALUE obj);
116
+ VALUE rb_backtrace_to_str_ary(VALUE obj);
117
+ VALUE rb_backtrace_to_location_ary(VALUE obj);
118
+ void rb_backtrace_each(VALUE (*iter)(VALUE recv, VALUE str), VALUE output);
119
+
120
+ MJIT_SYMBOL_EXPORT_BEGIN
121
+ VALUE rb_ec_backtrace_object(const struct rb_execution_context_struct *ec);
122
+ void rb_backtrace_use_iseq_first_lineno_for_last_location(VALUE self);
123
+ MJIT_SYMBOL_EXPORT_END
124
+
125
+ #define RUBY_DTRACE_CREATE_HOOK(name, arg) \
126
+ RUBY_DTRACE_HOOK(name##_CREATE, arg)
127
+ #define RUBY_DTRACE_HOOK(name, arg) \
128
+ do { \
129
+ if (UNLIKELY(RUBY_DTRACE_##name##_ENABLED())) { \
130
+ int dtrace_line; \
131
+ const char *dtrace_file = rb_source_location_cstr(&dtrace_line); \
132
+ if (!dtrace_file) dtrace_file = ""; \
133
+ RUBY_DTRACE_##name(arg, dtrace_file, dtrace_line); \
134
+ } \
135
+ } while (0)
136
+ #endif /* INTERNAL_VM_H */
@@ -0,0 +1,17 @@
1
+ #ifndef INTERNAL_WARNINGS_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_WARNINGS_H
3
+ /**
4
+ * @file
5
+ * @author Ruby developers <ruby-core@ruby-lang.org>
6
+ * @copyright This file is a part of the programming language Ruby.
7
+ * Permission is hereby granted, to either redistribute and/or
8
+ * modify this file, provided that the conditions mentioned in the
9
+ * file COPYING are met. Consult the file for details.
10
+ * @brief Internal header to suppres / mandate warnings.
11
+ */
12
+ #include "ruby/internal/warning_push.h"
13
+ #define COMPILER_WARNING_PUSH RBIMPL_WARNING_PUSH()
14
+ #define COMPILER_WARNING_POP RBIMPL_WARNING_POP()
15
+ #define COMPILER_WARNING_ERROR(flag) RBIMPL_WARNING_ERROR(flag)
16
+ #define COMPILER_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag)
17
+ #endif /* INTERNAL_WARNINGS_H */
@@ -0,0 +1,107 @@
1
+ #ifndef RUBY_INTERNAL_H /*-*-C-*-vi:se ft=c:*/
2
+ #define RUBY_INTERNAL_H 1
3
+ /**
4
+ * @file
5
+ * @author $Author$
6
+ * @date Tue May 17 11:42:20 JST 2011
7
+ * @copyright Copyright (C) 2011 Yukihiro Matsumoto
8
+ * @copyright This file is a part of the programming language Ruby.
9
+ * Permission is hereby granted, to either redistribute and/or
10
+ * modify this file, provided that the conditions mentioned in the
11
+ * file COPYING are met. Consult the file for details.
12
+ */
13
+ #include "ruby/internal/config.h"
14
+
15
+ #ifdef __cplusplus
16
+ # error not for C++
17
+ #endif
18
+
19
+ #define LIKELY(x) RB_LIKELY(x)
20
+ #define UNLIKELY(x) RB_UNLIKELY(x)
21
+
22
+ #define numberof(array) ((int)(sizeof(array) / sizeof((array)[0])))
23
+ #define roomof(x, y) (((x) + (y) - 1) / (y))
24
+ #define type_roomof(x, y) roomof(sizeof(x), sizeof(y))
25
+
26
+ /* Prevent compiler from reordering access */
27
+ #define ACCESS_ONCE(type,x) (*((volatile type *)&(x)))
28
+
29
+ #include "ruby/ruby.h"
30
+
31
+ /* Following macros were formerly defined in this header but moved to somewhere
32
+ * else. In order to detect them we undef here. */
33
+
34
+ /* internal/array.h */
35
+ #undef RARRAY_AREF
36
+
37
+ /* internal/class.h */
38
+ #undef RClass
39
+ #undef RCLASS_SUPER
40
+
41
+ /* internal/gc.h */
42
+ #undef NEWOBJ_OF
43
+ #undef RB_NEWOBJ_OF
44
+ #undef RB_OBJ_WRITE
45
+
46
+ /* internal/hash.h */
47
+ #undef RHASH_IFNONE
48
+ #undef RHASH_SIZE
49
+ #undef RHASH_TBL
50
+ #undef RHASH_EMPTY_P
51
+
52
+ /* internal/object.h */
53
+ #undef ROBJECT_IV_INDEX_TBL
54
+
55
+ /* internal/struct.h */
56
+ #undef RSTRUCT_LEN
57
+ #undef RSTRUCT_PTR
58
+ #undef RSTRUCT_SET
59
+ #undef RSTRUCT_GET
60
+
61
+ /* Also, we keep the following macros here. They are expected to be
62
+ * overridden in each headers. */
63
+
64
+ /* internal/array.h */
65
+ #define rb_ary_new_from_args(...) rb_nonexistent_symbol(__VA_ARGS__)
66
+
67
+ /* internal/io.h */
68
+ #define rb_io_fptr_finalize(...) rb_nonexistent_symbol(__VA_ARGS__)
69
+
70
+ /* internal/string.h */
71
+ #define rb_fstring_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
72
+
73
+ /* internal/symbol.h */
74
+ #define rb_sym_intern_ascii_cstr(...) rb_nonexistent_symbol(__VA_ARGS__)
75
+
76
+ /* internal/vm.h */
77
+ #define rb_funcallv(...) rb_nonexistent_symbol(__VA_ARGS__)
78
+ #define rb_method_basic_definition_p(...) rb_nonexistent_symbol(__VA_ARGS__)
79
+
80
+
81
+ /* MRI debug support */
82
+
83
+ /* gc.c */
84
+ void rb_obj_info_dump(VALUE obj);
85
+ void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
86
+
87
+ /* debug.c */
88
+
89
+ RUBY_SYMBOL_EXPORT_BEGIN
90
+ void ruby_debug_breakpoint(void);
91
+ PRINTF_ARGS(void ruby_debug_printf(const char*, ...), 1, 2);
92
+ RUBY_SYMBOL_EXPORT_END
93
+
94
+ // show obj data structure without any side-effect
95
+ #define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
96
+
97
+ // same as rp, but add message header
98
+ #define rp_m(msg, obj) do { \
99
+ fprintf(stderr, "%s", (msg)); \
100
+ rb_obj_info_dump((VALUE)obj); \
101
+ } while (0)
102
+
103
+ // `ruby_debug_breakpoint()` does nothing,
104
+ // but breakpoint is set in run.gdb, so `make gdb` can stop here.
105
+ #define bp() ruby_debug_breakpoint()
106
+
107
+ #endif /* RUBY_INTERNAL_H */
@@ -1,3 +1,5 @@
1
+ #ifndef RUBY_ISEQ_H
2
+ #define RUBY_ISEQ_H 1
1
3
  /**********************************************************************
2
4
 
3
5
  iseq.h -
@@ -8,9 +10,8 @@
8
10
  Copyright (C) 2004-2008 Koichi Sasada
9
11
 
10
12
  **********************************************************************/
11
-
12
- #ifndef RUBY_ISEQ_H
13
- #define RUBY_ISEQ_H 1
13
+ #include "internal/gc.h"
14
+ #include "vm_core.h"
14
15
 
15
16
  RUBY_EXTERN const int ruby_api_version[];
16
17
  #define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
@@ -23,14 +24,6 @@ typedef struct rb_iseq_struct rb_iseq_t;
23
24
 
24
25
  extern const ID rb_iseq_shared_exc_local_tbl[];
25
26
 
26
- static inline size_t
27
- rb_call_info_kw_arg_bytes(int keyword_len)
28
- {
29
- return rb_size_mul_add_or_raise(
30
- keyword_len - 1, sizeof(VALUE), sizeof(struct rb_call_info_kw_arg),
31
- rb_eRuntimeError);
32
- }
33
-
34
27
  #define ISEQ_COVERAGE(iseq) iseq->body->variable.coverage
35
28
  #define ISEQ_COVERAGE_SET(iseq, cov) RB_OBJ_WRITE(iseq, &iseq->body->variable.coverage, cov)
36
29
  #define ISEQ_LINE_COVERAGE(iseq) RARRAY_AREF(ISEQ_COVERAGE(iseq), COVERAGE_INDEX_LINES)
@@ -87,7 +80,7 @@ ISEQ_ORIGINAL_ISEQ_ALLOC(const rb_iseq_t *iseq, long size)
87
80
  #define ISEQ_TRANSLATED IMEMO_FL_USER3
88
81
  #define ISEQ_MARKABLE_ISEQ IMEMO_FL_USER4
89
82
 
90
- #define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW((iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
83
+ #define ISEQ_EXECUTABLE_P(iseq) (FL_TEST_RAW(((VALUE)iseq), ISEQ_NOT_LOADED_YET | ISEQ_USE_COMPILE_DATA) == 0)
91
84
 
92
85
  struct iseq_compile_data {
93
86
  /* GC is needed */
@@ -112,10 +105,11 @@ struct iseq_compile_data {
112
105
  int last_line;
113
106
  int label_no;
114
107
  int node_level;
108
+ int isolated_depth;
115
109
  unsigned int ci_index;
116
- unsigned int ci_kw_index;
117
110
  const rb_compile_option_t *option;
118
111
  struct rb_id_table *ivar_cache_table;
112
+ const struct rb_builtin_function *builtin_function_table;
119
113
  #if OPT_SUPPORT_JOKE
120
114
  st_table *labels_table;
121
115
  #endif
@@ -155,6 +149,7 @@ iseq_imemo_alloc(void)
155
149
  VALUE rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt);
156
150
  void rb_ibf_load_iseq_complete(rb_iseq_t *iseq);
157
151
  const rb_iseq_t *rb_iseq_ibf_load(VALUE str);
152
+ const rb_iseq_t *rb_iseq_ibf_load_bytes(const char *cstr, size_t);
158
153
  VALUE rb_iseq_ibf_load_extra_data(VALUE str);
159
154
  void rb_iseq_init_trace(rb_iseq_t *iseq);
160
155
  int rb_iseq_add_local_tracepoint_recursively(const rb_iseq_t *iseq, rb_event_flag_t turnon_events, VALUE tpval, unsigned int target_line);
@@ -170,7 +165,6 @@ RUBY_SYMBOL_EXPORT_BEGIN
170
165
  /* compile.c */
171
166
  VALUE rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node);
172
167
  VALUE rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc);
173
- int rb_iseq_translate_threaded_code(rb_iseq_t *iseq);
174
168
  VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
175
169
  void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
176
170
  VALUE locals, VALUE args,
@@ -180,13 +174,12 @@ void rb_iseq_mark_insn_storage(struct iseq_compile_data_storage *arena);
180
174
  /* iseq.c */
181
175
  VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
182
176
  VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
183
- struct st_table *ruby_insn_make_insn_table(void);
184
177
  unsigned int rb_iseq_line_no(const rb_iseq_t *iseq, size_t pos);
185
178
  void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
186
179
  void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
187
- void rb_iseq_trace_on_all(void);
188
180
  void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
189
181
 
182
+ struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
190
183
  VALUE rb_iseqw_new(const rb_iseq_t *iseq);
191
184
  const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
192
185
 
@@ -298,11 +291,11 @@ enum defined_type {
298
291
  DEFINED_EXPR,
299
292
  DEFINED_IVAR2,
300
293
  DEFINED_REF,
301
- DEFINED_FUNC
294
+ DEFINED_FUNC,
295
+ DEFINED_CONST_FROM
302
296
  };
303
297
 
304
298
  VALUE rb_iseq_defined_string(enum defined_type type);
305
- void rb_iseq_make_compile_option(struct rb_compile_option_struct *option, VALUE opt);
306
299
 
307
300
  /* vm.c */
308
301
  VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
@@ -1,3 +1,5 @@
1
+ #ifndef RUBY_METHOD_H
2
+ #define RUBY_METHOD_H 1
1
3
  /**********************************************************************
2
4
 
3
5
  method.h -
@@ -8,10 +10,11 @@
8
10
  Copyright (C) 2009 Koichi Sasada
9
11
 
10
12
  **********************************************************************/
11
- #ifndef RUBY_METHOD_H
12
- #define RUBY_METHOD_H 1
13
13
 
14
14
  #include "internal.h"
15
+ #include "internal/imemo.h"
16
+ #include "internal/compilers.h"
17
+ #include "internal/static_assert.h"
15
18
 
16
19
  #ifndef END_OF_ENUMERATION
17
20
  # if defined(__GNUC__) &&! defined(__STRICT_ANSI__)
@@ -66,8 +69,13 @@ typedef struct rb_callable_method_entry_struct { /* same fields with rb_method_e
66
69
 
67
70
  #define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
68
71
  #define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
69
- #define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
70
- #define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags = (me)->flags | IMEMO_FL_USER3)
72
+ #define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
73
+ #define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags |= IMEMO_FL_USER3)
74
+ #define METHOD_ENTRY_CACHED(me) ((me)->flags & IMEMO_FL_USER4)
75
+ #define METHOD_ENTRY_CACHED_SET(me) ((me)->flags |= IMEMO_FL_USER4)
76
+ #define METHOD_ENTRY_INVALIDATED(me) ((me)->flags & IMEMO_FL_USER5)
77
+ #define METHOD_ENTRY_INVALIDATED_SET(me) ((me)->flags |= IMEMO_FL_USER5)
78
+ #define METHOD_ENTRY_CACHEABLE(me) !(METHOD_ENTRY_VISI(me) == METHOD_VISI_PROTECTED)
71
79
 
72
80
  static inline void
73
81
  METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
@@ -151,6 +159,7 @@ typedef struct rb_method_refined_struct {
151
159
  typedef struct rb_method_bmethod_struct {
152
160
  VALUE proc; /* should be marked */
153
161
  struct rb_hook_list_struct *hooks;
162
+ VALUE defined_ractor;
154
163
  } rb_method_bmethod_t;
155
164
 
156
165
  enum method_optimized_type {
@@ -177,8 +186,11 @@ struct rb_method_definition_struct {
177
186
  } body;
178
187
 
179
188
  ID original_id;
189
+ uintptr_t method_serial;
180
190
  };
181
191
 
192
+ struct rb_id_table;
193
+
182
194
  typedef struct rb_method_definition_struct rb_method_definition_t;
183
195
  STATIC_ASSERT(sizeof_method_def, offsetof(rb_method_definition_t, body)==8);
184
196
 
@@ -202,7 +214,6 @@ const rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id, VA
202
214
  const rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id, VALUE *defined_class);
203
215
  const rb_method_entry_t *rb_resolve_refined_method(VALUE refinements, const rb_method_entry_t *me);
204
216
  RUBY_SYMBOL_EXPORT_BEGIN
205
- const rb_callable_method_entry_t *rb_resolve_refined_method_callable(VALUE refinements, const rb_callable_method_entry_t *me);
206
217
  const rb_method_entry_t *rb_resolve_me_location(const rb_method_entry_t *, VALUE[5]);
207
218
  RUBY_SYMBOL_EXPORT_END
208
219
 
@@ -215,18 +226,20 @@ int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2)
215
226
  st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
216
227
 
217
228
  VALUE rb_method_entry_location(const rb_method_entry_t *me);
218
- VALUE rb_mod_method_location(VALUE mod, ID id);
219
- VALUE rb_obj_method_location(VALUE obj, ID id);
220
229
 
221
230
  void rb_free_method_entry(const rb_method_entry_t *me);
222
- void rb_sweep_method_entry(void *vm);
223
231
 
224
232
  const rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me);
225
233
  const rb_callable_method_entry_t *rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, ID called_id, VALUE defined_class);
226
234
  void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src);
227
235
 
236
+ void rb_method_table_insert(VALUE klass, struct rb_id_table *table, ID method_id, const rb_method_entry_t *me);
237
+
228
238
  void rb_scope_visibility_set(rb_method_visibility_t);
229
239
 
230
240
  VALUE rb_unnamed_parameters(int arity);
231
241
 
242
+ void rb_clear_method_cache(VALUE klass_or_module, ID mid);
243
+ void rb_clear_method_cache_all(void);
244
+
232
245
  #endif /* RUBY_METHOD_H */
@@ -1,3 +1,5 @@
1
+ #ifndef RUBY_MJIT_H
2
+ #define RUBY_MJIT_H 1
1
3
  /**********************************************************************
2
4
 
3
5
  mjit.h - Interface to MRI method JIT compiler for Ruby's main thread
@@ -6,13 +8,14 @@
6
8
 
7
9
  **********************************************************************/
8
10
 
9
- #ifndef RUBY_MJIT_H
10
- #define RUBY_MJIT_H 1
11
+ #include "ruby/internal/config.h" // defines USE_MJIT
12
+ #include "ruby/internal/stdbool.h"
13
+ #include "vm_core.h"
11
14
 
12
- #include "ruby.h"
13
- #include "debug_counter.h"
15
+ # if USE_MJIT
14
16
 
15
- #if USE_MJIT
17
+ #include "debug_counter.h"
18
+ #include "ruby.h"
16
19
 
17
20
  // Special address values of a function generated from the
18
21
  // corresponding iseq by MJIT:
@@ -43,6 +46,8 @@ struct mjit_options {
43
46
  // Disable compiler optimization and add debug symbols. It can be
44
47
  // very slow.
45
48
  char debug;
49
+ // Add arbitrary cflags.
50
+ char* debug_flags;
46
51
  // If not 0, all ISeqs are synchronously compiled. For testing.
47
52
  unsigned int wait;
48
53
  // Number of calls to trigger JIT compilation. For testing.
@@ -57,12 +62,16 @@ struct mjit_options {
57
62
 
58
63
  // State of optimization switches
59
64
  struct rb_mjit_compile_info {
60
- // Disable getinstancevariable/setinstancevariable optimizations based on inline cache
65
+ // Disable getinstancevariable/setinstancevariable optimizations based on inline cache (T_OBJECT)
61
66
  bool disable_ivar_cache;
67
+ // Disable getinstancevariable/setinstancevariable optimizations based on inline cache (FL_EXIVAR)
68
+ bool disable_exivar_cache;
62
69
  // Disable send/opt_send_without_block optimizations based on inline cache
63
70
  bool disable_send_cache;
64
71
  // Disable method inlining
65
72
  bool disable_inlining;
73
+ // Disable opt_getinlinecache inlining
74
+ bool disable_const_cache;
66
75
  };
67
76
 
68
77
  typedef VALUE (*mjit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
@@ -74,13 +83,17 @@ RUBY_EXTERN bool mjit_call_p;
74
83
  extern void rb_mjit_add_iseq_to_process(const rb_iseq_t *iseq);
75
84
  extern VALUE rb_mjit_wait_call(rb_execution_context_t *ec, struct rb_iseq_constant_body *body);
76
85
  extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
77
- extern void rb_mjit_recompile_iseq(const rb_iseq_t *iseq);
86
+ extern void rb_mjit_before_vm_ic_update(void);
87
+ extern void rb_mjit_after_vm_ic_update(void);
88
+ extern void rb_mjit_recompile_send(const rb_iseq_t *iseq);
89
+ extern void rb_mjit_recompile_ivar(const rb_iseq_t *iseq);
90
+ extern void rb_mjit_recompile_exivar(const rb_iseq_t *iseq);
91
+ extern void rb_mjit_recompile_inlining(const rb_iseq_t *iseq);
92
+ extern void rb_mjit_recompile_const(const rb_iseq_t *iseq);
78
93
  RUBY_SYMBOL_EXPORT_END
79
94
 
80
- extern bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname);
81
- extern void mjit_init(struct mjit_options *opts);
82
- extern void mjit_postponed_job_register_start_hook(void);
83
- extern void mjit_postponed_job_register_finish_hook(void);
95
+ extern bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id);
96
+ extern void mjit_init(const struct mjit_options *opts);
84
97
  extern void mjit_gc_start_hook(void);
85
98
  extern void mjit_gc_exit_hook(void);
86
99
  extern void mjit_free_iseq(const rb_iseq_t *iseq);
@@ -90,6 +103,7 @@ extern struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec);
90
103
  extern void mjit_cont_free(struct mjit_cont *cont);
91
104
  extern void mjit_add_class_serial(rb_serial_t class_serial);
92
105
  extern void mjit_remove_class_serial(rb_serial_t class_serial);
106
+ extern void mjit_mark_cc_entries(const struct rb_iseq_constant_body *const body);
93
107
 
94
108
  // A threshold used to reject long iseqs from JITting as such iseqs
95
109
  // takes too much time to be compiled.
@@ -100,9 +114,42 @@ static inline int
100
114
  mjit_target_iseq_p(struct rb_iseq_constant_body *body)
101
115
  {
102
116
  return (body->type == ISEQ_TYPE_METHOD || body->type == ISEQ_TYPE_BLOCK)
117
+ && !body->builtin_inline_p
103
118
  && body->iseq_size < JIT_ISEQ_SIZE_THRESHOLD;
104
119
  }
105
120
 
121
+ # ifdef MJIT_HEADER
122
+ NOINLINE(static COLDFUNC VALUE mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body));
123
+ # else
124
+ static inline VALUE mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body);
125
+ # endif
126
+ static VALUE
127
+ mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
128
+ {
129
+ uintptr_t func_i = (uintptr_t)(body->jit_func);
130
+ ASSUME(func_i <= LAST_JIT_ISEQ_FUNC);
131
+ switch ((enum rb_mjit_iseq_func)func_i) {
132
+ case NOT_ADDED_JIT_ISEQ_FUNC:
133
+ RB_DEBUG_COUNTER_INC(mjit_exec_not_added);
134
+ if (body->total_calls == mjit_opts.min_calls && mjit_target_iseq_p(body)) {
135
+ rb_mjit_add_iseq_to_process(iseq);
136
+ if (UNLIKELY(mjit_opts.wait)) {
137
+ return rb_mjit_wait_call(ec, body);
138
+ }
139
+ }
140
+ break;
141
+ case NOT_READY_JIT_ISEQ_FUNC:
142
+ RB_DEBUG_COUNTER_INC(mjit_exec_not_ready);
143
+ break;
144
+ case NOT_COMPILED_JIT_ISEQ_FUNC:
145
+ RB_DEBUG_COUNTER_INC(mjit_exec_not_compiled);
146
+ break;
147
+ default: // to avoid warning with LAST_JIT_ISEQ_FUNC
148
+ break;
149
+ }
150
+ return Qundef;
151
+ }
152
+
106
153
  // Try to execute the current iseq in ec. Use JIT code if it is ready.
107
154
  // If it is not, add ISEQ to the compilation queue and return Qundef.
108
155
  static inline VALUE
@@ -110,8 +157,6 @@ mjit_exec(rb_execution_context_t *ec)
110
157
  {
111
158
  const rb_iseq_t *iseq;
112
159
  struct rb_iseq_constant_body *body;
113
- long unsigned total_calls;
114
- mjit_func_t func;
115
160
 
116
161
  if (!mjit_call_p)
117
162
  return Qundef;
@@ -119,53 +164,44 @@ mjit_exec(rb_execution_context_t *ec)
119
164
 
120
165
  iseq = ec->cfp->iseq;
121
166
  body = iseq->body;
122
- total_calls = ++body->total_calls;
167
+ body->total_calls++;
123
168
 
124
- func = body->jit_func;
125
- if (UNLIKELY((uintptr_t)func <= (uintptr_t)LAST_JIT_ISEQ_FUNC)) {
126
- # ifdef MJIT_HEADER
169
+ mjit_func_t func = body->jit_func;
170
+ if (UNLIKELY((uintptr_t)func <= LAST_JIT_ISEQ_FUNC)) {
171
+ # ifdef MJIT_HEADER
127
172
  RB_DEBUG_COUNTER_INC(mjit_frame_JT2VM);
128
- # else
173
+ # else
129
174
  RB_DEBUG_COUNTER_INC(mjit_frame_VM2VM);
130
- # endif
131
- switch ((enum rb_mjit_iseq_func)func) {
132
- case NOT_ADDED_JIT_ISEQ_FUNC:
133
- RB_DEBUG_COUNTER_INC(mjit_exec_not_added);
134
- if (total_calls == mjit_opts.min_calls && mjit_target_iseq_p(body)) {
135
- RB_DEBUG_COUNTER_INC(mjit_exec_not_added_add_iseq);
136
- rb_mjit_add_iseq_to_process(iseq);
137
- if (UNLIKELY(mjit_opts.wait)) {
138
- return rb_mjit_wait_call(ec, body);
139
- }
140
- }
141
- return Qundef;
142
- case NOT_READY_JIT_ISEQ_FUNC:
143
- RB_DEBUG_COUNTER_INC(mjit_exec_not_ready);
144
- return Qundef;
145
- case NOT_COMPILED_JIT_ISEQ_FUNC:
146
- RB_DEBUG_COUNTER_INC(mjit_exec_not_compiled);
147
- return Qundef;
148
- default: // to avoid warning with LAST_JIT_ISEQ_FUNC
149
- break;
150
- }
175
+ # endif
176
+ return mjit_exec_slowpath(ec, iseq, body);
151
177
  }
152
178
 
153
- # ifdef MJIT_HEADER
154
- RB_DEBUG_COUNTER_INC(mjit_frame_JT2JT);
155
- # else
156
- RB_DEBUG_COUNTER_INC(mjit_frame_VM2JT);
157
- # endif
179
+ # ifdef MJIT_HEADER
180
+ RB_DEBUG_COUNTER_INC(mjit_frame_JT2JT);
181
+ # else
182
+ RB_DEBUG_COUNTER_INC(mjit_frame_VM2JT);
183
+ # endif
158
184
  RB_DEBUG_COUNTER_INC(mjit_exec_call_func);
159
185
  return func(ec, ec->cfp);
160
186
  }
161
187
 
162
188
  void mjit_child_after_fork(void);
163
189
 
164
- #else // USE_MJIT
190
+ # ifdef MJIT_HEADER
191
+ #define mjit_enabled true
192
+ # else // MJIT_HEADER
193
+ extern bool mjit_enabled;
194
+ # endif // MJIT_HEADER
195
+ VALUE mjit_pause(bool wait_p);
196
+ VALUE mjit_resume(void);
197
+ void mjit_finish(bool close_handle_p);
198
+
199
+ # else // USE_MJIT
200
+
201
+ static inline void rb_mjit_before_vm_ic_update(void){}
202
+ static inline void rb_mjit_after_vm_ic_update(void){}
165
203
  static inline struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec){return NULL;}
166
204
  static inline void mjit_cont_free(struct mjit_cont *cont){}
167
- static inline void mjit_postponed_job_register_start_hook(void){}
168
- static inline void mjit_postponed_job_register_finish_hook(void){}
169
205
  static inline void mjit_gc_start_hook(void){}
170
206
  static inline void mjit_gc_exit_hook(void){}
171
207
  static inline void mjit_free_iseq(const rb_iseq_t *iseq){}
@@ -175,5 +211,10 @@ static inline void mjit_remove_class_serial(rb_serial_t class_serial){}
175
211
  static inline VALUE mjit_exec(rb_execution_context_t *ec) { return Qundef; /* unreachable */ }
176
212
  static inline void mjit_child_after_fork(void){}
177
213
 
178
- #endif // USE_MJIT
214
+ #define mjit_enabled false
215
+ static inline VALUE mjit_pause(bool wait_p){ return Qnil; } // unreachable
216
+ static inline VALUE mjit_resume(void){ return Qnil; } // unreachable
217
+ static inline void mjit_finish(bool close_handle_p){}
218
+
219
+ # endif // USE_MJIT
179
220
  #endif // RUBY_MJIT_H