debase-ruby_core_source 0.10.2 → 0.10.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (339) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +6 -2
  4. data/Rakefile +6 -3
  5. data/debase-ruby_core_source.gemspec +2 -1
  6. data/lib/debase/ruby_core_source.rb +6 -5
  7. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/addr2line.h +0 -0
  8. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/build_assert/build_assert.h +0 -0
  9. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/check_type/check_type.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/container_of/container_of.h +0 -0
  11. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/list/list.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ccan/str/str.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/constant.h +1 -0
  14. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/debug_counter.h +0 -0
  15. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/dln.h +0 -0
  16. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/encindex.h +2 -0
  17. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/eval_intern.h +0 -0
  18. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/gc.h +0 -0
  19. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/id.h +0 -0
  20. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/id_table.h +0 -0
  21. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/insns.inc +2 -2
  22. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/insns_info.inc +157 -157
  23. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/internal.h +5 -4
  24. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/iseq.h +2 -2
  25. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/known_errors.inc +0 -0
  26. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/method.h +0 -0
  27. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/node.h +0 -0
  28. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/node_name.inc +0 -0
  29. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/opt_sc.inc +0 -0
  30. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/optinsn.inc +0 -0
  31. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/optunifs.inc +0 -0
  32. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/parse.h +0 -0
  33. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/probes_helper.h +0 -0
  34. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regenc.h +0 -0
  35. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regint.h +0 -0
  36. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/regparse.h +0 -0
  37. data/lib/debase/ruby_core_source/ruby-2.5.1-p57/revision.h +1 -0
  38. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ruby_assert.h +0 -0
  39. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/ruby_atomic.h +0 -0
  40. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/siphash.h +0 -0
  41. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/symbol.h +0 -0
  42. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/thread_pthread.h +0 -0
  43. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/thread_win32.h +0 -0
  44. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/timev.h +0 -0
  45. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/transcode_data.h +0 -0
  46. data/lib/debase/ruby_core_source/ruby-2.5.1-p57/version.h +73 -0
  47. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm.inc +13 -13
  48. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_call_iseq_optimized.inc +0 -0
  49. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_core.h +3 -4
  50. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.5.1-p57}/vm_debug.h +0 -0
  51. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_exec.h +0 -0
  52. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_insnhelper.h +0 -0
  53. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vm_opts.h +1 -2
  54. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.5.1-p57}/vmtc.inc +2 -2
  55. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/addr2line.h +1 -1
  56. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/build_assert/build_assert.h +0 -0
  57. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/check_type/check_type.h +0 -0
  58. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/container_of/container_of.h +0 -0
  59. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/list/list.h +20 -5
  60. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ccan/str/str.h +0 -0
  61. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/constant.h +1 -0
  62. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/debug_counter.h +283 -0
  63. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/dln.h +0 -0
  64. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/encindex.h +2 -0
  65. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/eval_intern.h +45 -53
  66. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/gc.h +2 -3
  67. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/hrtime.h +168 -0
  68. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/id.h +4 -2
  69. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/id_table.h +0 -0
  70. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/insns.inc +249 -0
  71. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/insns_info.inc +9374 -0
  72. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/internal.h +608 -100
  73. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/iseq.h +127 -91
  74. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/known_errors.inc +477 -432
  75. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/method.h +28 -15
  76. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/mjit.h +148 -0
  77. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/mjit_compile.inc +4224 -0
  78. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/node.h +449 -0
  79. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/node_name.inc +6 -18
  80. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/opt_sc.inc +109 -0
  81. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/optinsn.inc +128 -0
  82. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/optunifs.inc +43 -0
  83. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/parse.h +210 -0
  84. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/probes_helper.h +42 -0
  85. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regenc.h +1 -1
  86. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regint.h +0 -0
  87. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/regparse.h +1 -1
  88. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/revision.h +1 -0
  89. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ruby_assert.h +6 -0
  90. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/ruby_atomic.h +14 -3
  91. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/siphash.h +1 -1
  92. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/symbol.h +1 -1
  93. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/thread_pthread.h +75 -0
  94. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/thread_win32.h +0 -0
  95. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/timev.h +53 -0
  96. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/transcode_data.h +0 -0
  97. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/transient_heap.h +60 -0
  98. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/version.h +7 -7
  99. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm.inc +4502 -0
  100. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm_call_iseq_optimized.inc +213 -0
  101. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_core.h +385 -182
  102. data/lib/debase/ruby_core_source/{ruby-2.5.0-rc1 → ruby-2.6.0-p0}/vm_debug.h +0 -0
  103. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_exec.h +33 -13
  104. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vm_insnhelper.h +316 -0
  105. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.0-p0}/vm_opts.h +18 -5
  106. data/lib/debase/ruby_core_source/ruby-2.6.0-p0/vmtc.inc +243 -0
  107. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/addr2line.h +21 -0
  108. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/build_assert/build_assert.h +40 -0
  109. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/check_type/check_type.h +63 -0
  110. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/container_of/container_of.h +142 -0
  111. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/list/list.h +788 -0
  112. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ccan/str/str.h +16 -0
  113. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/constant.h +51 -0
  114. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/debug_counter.h +283 -0
  115. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/dln.h +51 -0
  116. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/encindex.h +69 -0
  117. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/eval_intern.h +333 -0
  118. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/gc.h +116 -0
  119. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/hrtime.h +168 -0
  120. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/id.h +252 -0
  121. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/id_table.h +31 -0
  122. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/insns.inc +249 -0
  123. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/insns_info.inc +9374 -0
  124. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/internal.h +2470 -0
  125. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/iseq.h +304 -0
  126. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/known_errors.inc +791 -0
  127. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/method.h +229 -0
  128. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/mjit.h +148 -0
  129. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/mjit_compile.inc +4226 -0
  130. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/node.h +449 -0
  131. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/node_name.inc +200 -0
  132. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/opt_sc.inc +109 -0
  133. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/optinsn.inc +128 -0
  134. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/optunifs.inc +43 -0
  135. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.5-p114}/parse.h +47 -31
  136. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/probes_helper.h +42 -0
  137. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regenc.h +254 -0
  138. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regint.h +938 -0
  139. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/regparse.h +370 -0
  140. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/revision.h +1 -0
  141. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ruby_assert.h +60 -0
  142. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/ruby_atomic.h +244 -0
  143. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/siphash.h +48 -0
  144. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/symbol.h +112 -0
  145. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/thread_pthread.h +75 -0
  146. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/thread_win32.h +36 -0
  147. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/timev.h +53 -0
  148. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/transcode_data.h +139 -0
  149. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/transient_heap.h +60 -0
  150. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.6.5-p114}/version.h +7 -7
  151. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm.inc +4504 -0
  152. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_call_iseq_optimized.inc +213 -0
  153. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_core.h +1910 -0
  154. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_debug.h +37 -0
  155. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_exec.h +202 -0
  156. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_insnhelper.h +316 -0
  157. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vm_opts.h +70 -0
  158. data/lib/debase/ruby_core_source/ruby-2.6.5-p114/vmtc.inc +243 -0
  159. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/addr2line.h +21 -0
  160. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/builtin.h +78 -0
  161. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/build_assert/build_assert.h +40 -0
  162. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/check_type/check_type.h +63 -0
  163. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/container_of/container_of.h +142 -0
  164. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/list/list.h +788 -0
  165. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ccan/str/str.h +16 -0
  166. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/constant.h +50 -0
  167. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/debug_counter.h +390 -0
  168. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/dln.h +51 -0
  169. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/encindex.h +69 -0
  170. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/eval_intern.h +312 -0
  171. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/gc.h +131 -0
  172. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/hrtime.h +168 -0
  173. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/id.h +290 -0
  174. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/id_table.h +34 -0
  175. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/insns.inc +253 -0
  176. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/insns_info.inc +9197 -0
  177. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/internal.h +2697 -0
  178. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/iseq.h +312 -0
  179. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/known_errors.inc +791 -0
  180. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/method.h +229 -0
  181. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/mjit.h +177 -0
  182. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/mjit_compile.inc +7779 -0
  183. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/node.h +476 -0
  184. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/node_name.inc +208 -0
  185. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/opt_sc.inc +109 -0
  186. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/optinsn.inc +128 -0
  187. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/optunifs.inc +43 -0
  188. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/parse.h +210 -0
  189. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/probes_helper.h +42 -0
  190. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regenc.h +254 -0
  191. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regint.h +938 -0
  192. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/regparse.h +370 -0
  193. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/revision.h +2 -0
  194. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ruby_assert.h +15 -0
  195. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/ruby_atomic.h +244 -0
  196. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/siphash.h +48 -0
  197. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/symbol.h +119 -0
  198. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/thread_pthread.h +75 -0
  199. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/thread_win32.h +36 -0
  200. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/timev.h +56 -0
  201. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/transcode_data.h +139 -0
  202. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/transient_heap.h +62 -0
  203. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/variable.h +9 -0
  204. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/version.h +77 -0
  205. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm.inc +5466 -0
  206. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_call_iseq_optimized.inc +237 -0
  207. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_core.h +1968 -0
  208. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_debug.h +34 -0
  209. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_exec.h +193 -0
  210. data/lib/debase/ruby_core_source/{ruby-2.5.0-preview1 → ruby-2.7.0-p0}/vm_insnhelper.h +81 -64
  211. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vm_opts.h +72 -0
  212. data/lib/debase/ruby_core_source/ruby-2.7.0-p0/vmtc.inc +247 -0
  213. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/addr2line.h +20 -0
  214. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/builtin.h +83 -0
  215. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/build_assert/build_assert.h +40 -0
  216. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/check_type/check_type.h +63 -0
  217. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/container_of/container_of.h +142 -0
  218. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/list/list.h +788 -0
  219. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ccan/str/str.h +16 -0
  220. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/constant.h +55 -0
  221. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/debug_counter.h +423 -0
  222. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/dln.h +36 -0
  223. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/encindex.h +70 -0
  224. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/eval_intern.h +312 -0
  225. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/gc.h +140 -0
  226. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/hrtime.h +168 -0
  227. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/id.h +290 -0
  228. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/id_table.h +36 -0
  229. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/insns.inc +249 -0
  230. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/insns_info.inc +8979 -0
  231. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal.h +107 -0
  232. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/array.h +114 -0
  233. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/bignum.h +246 -0
  234. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/bits.h +566 -0
  235. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/class.h +168 -0
  236. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compar.h +50 -0
  237. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compile.h +32 -0
  238. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/compilers.h +108 -0
  239. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/complex.h +29 -0
  240. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/cont.h +25 -0
  241. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/dir.h +17 -0
  242. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enc.h +20 -0
  243. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/encoding.h +28 -0
  244. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enum.h +19 -0
  245. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/enumerator.h +22 -0
  246. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/error.h +131 -0
  247. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/eval.h +33 -0
  248. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/file.h +39 -0
  249. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/fixnum.h +185 -0
  250. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/gc.h +154 -0
  251. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/hash.h +240 -0
  252. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/imemo.h +243 -0
  253. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/inits.h +51 -0
  254. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/io.h +35 -0
  255. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/load.h +19 -0
  256. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/loadpath.h +17 -0
  257. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/math.h +24 -0
  258. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/missing.h +19 -0
  259. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/mjit.h +29 -0
  260. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/numeric.h +252 -0
  261. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/object.h +83 -0
  262. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/parse.h +23 -0
  263. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/proc.h +32 -0
  264. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/process.h +136 -0
  265. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/random.h +17 -0
  266. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/range.h +37 -0
  267. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/rational.h +69 -0
  268. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/re.h +29 -0
  269. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/sanitizers.h +191 -0
  270. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/scheduler.h +35 -0
  271. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/serial.h +24 -0
  272. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/signal.h +22 -0
  273. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/static_assert.h +17 -0
  274. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/string.h +135 -0
  275. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/struct.h +154 -0
  276. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/symbol.h +41 -0
  277. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/thread.h +60 -0
  278. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/time.h +35 -0
  279. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/transcode.h +21 -0
  280. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/util.h +31 -0
  281. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/variable.h +83 -0
  282. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/vm.h +135 -0
  283. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/warnings.h +17 -0
  284. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/iseq.h +304 -0
  285. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/known_errors.inc +791 -0
  286. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/method.h +245 -0
  287. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/mjit.h +197 -0
  288. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/mjit_compile.inc +8082 -0
  289. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/node.h +484 -0
  290. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/node_name.inc +210 -0
  291. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/opt_sc.inc +109 -0
  292. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/optinsn.inc +128 -0
  293. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/optunifs.inc +43 -0
  294. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/parse.h +211 -0
  295. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/probes_helper.h +44 -0
  296. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor.h +271 -0
  297. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor_pub.h +50 -0
  298. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regenc.h +254 -0
  299. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regint.h +938 -0
  300. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/regparse.h +370 -0
  301. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/revision.h +2 -0
  302. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_assert.h +15 -0
  303. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_atomic.h +236 -0
  304. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/siphash.h +48 -0
  305. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/symbol.h +119 -0
  306. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/thread_pthread.h +106 -0
  307. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/thread_win32.h +66 -0
  308. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/timev.h +57 -0
  309. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/transcode_data.h +138 -0
  310. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/transient_heap.h +61 -0
  311. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/variable.h +21 -0
  312. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/version.h +89 -0
  313. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm.inc +5360 -0
  314. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_call_iseq_optimized.inc +244 -0
  315. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_callinfo.h +457 -0
  316. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_core.h +1952 -0
  317. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_debug.h +116 -0
  318. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_exec.h +196 -0
  319. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_insnhelper.h +260 -0
  320. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_opts.h +73 -0
  321. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vm_sync.h +97 -0
  322. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/vmtc.inc +243 -0
  323. data/lib/debase/ruby_core_source/version.rb +1 -1
  324. metadata +335 -102
  325. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/insns.inc +0 -118
  326. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/insns_info.inc +0 -827
  327. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/node.h +0 -523
  328. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/opt_sc.inc +0 -809
  329. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/optinsn.inc +0 -77
  330. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/optunifs.inc +0 -49
  331. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/probes_helper.h +0 -43
  332. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/revision.h +0 -1
  333. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vm.inc +0 -2935
  334. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vm_call_iseq_optimized.inc +0 -212
  335. data/lib/debase/ruby_core_source/ruby-2.5.0-preview1/vmtc.inc +0 -115
  336. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/debug_counter.h +0 -109
  337. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/revision.h +0 -1
  338. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/thread_pthread.h +0 -54
  339. data/lib/debase/ruby_core_source/ruby-2.5.0-rc1/timev.h +0 -42
@@ -0,0 +1,213 @@
1
+ /* -*- c -*- */
2
+ #if 1 /* enable or disable this optimization */
3
+
4
+ /* DO NOT EDIT THIS FILE DIRECTLY
5
+ *
6
+ * This file is generated by tool/mk_call_iseq_optimized.rb
7
+ */
8
+
9
+ static VALUE
10
+ vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
11
+ {
12
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 0, 0);
13
+ }
14
+
15
+ static VALUE
16
+ vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
17
+ {
18
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 0, 1);
19
+ }
20
+
21
+ static VALUE
22
+ vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
23
+ {
24
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 0, 2);
25
+ }
26
+
27
+ static VALUE
28
+ vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
29
+ {
30
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 0, 3);
31
+ }
32
+
33
+ static VALUE
34
+ vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
35
+ {
36
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 0, 4);
37
+ }
38
+
39
+ static VALUE
40
+ vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
41
+ {
42
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 0, 5);
43
+ }
44
+
45
+ static VALUE
46
+ vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
47
+ {
48
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 1, 0);
49
+ }
50
+
51
+ static VALUE
52
+ vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
53
+ {
54
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 1, 1);
55
+ }
56
+
57
+ static VALUE
58
+ vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
59
+ {
60
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 1, 2);
61
+ }
62
+
63
+ static VALUE
64
+ vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
65
+ {
66
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 1, 3);
67
+ }
68
+
69
+ static VALUE
70
+ vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
71
+ {
72
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 1, 4);
73
+ }
74
+
75
+ static VALUE
76
+ vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
77
+ {
78
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 1, 5);
79
+ }
80
+
81
+ static VALUE
82
+ vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
83
+ {
84
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 2, 0);
85
+ }
86
+
87
+ static VALUE
88
+ vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
89
+ {
90
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 2, 1);
91
+ }
92
+
93
+ static VALUE
94
+ vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
95
+ {
96
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 2, 2);
97
+ }
98
+
99
+ static VALUE
100
+ vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
101
+ {
102
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 2, 3);
103
+ }
104
+
105
+ static VALUE
106
+ vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
107
+ {
108
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 2, 4);
109
+ }
110
+
111
+ static VALUE
112
+ vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
113
+ {
114
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 2, 5);
115
+ }
116
+
117
+ static VALUE
118
+ vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
119
+ {
120
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 3, 0);
121
+ }
122
+
123
+ static VALUE
124
+ vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
125
+ {
126
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 3, 1);
127
+ }
128
+
129
+ static VALUE
130
+ vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
131
+ {
132
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 3, 2);
133
+ }
134
+
135
+ static VALUE
136
+ vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
137
+ {
138
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 3, 3);
139
+ }
140
+
141
+ static VALUE
142
+ vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
143
+ {
144
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 3, 4);
145
+ }
146
+
147
+ static VALUE
148
+ vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc)
149
+ {
150
+ return vm_call_iseq_setup_normal(ec, cfp, calling, cc->me, 0, 3, 5);
151
+ }
152
+
153
+ /* vm_call_iseq_handlers[param][local] */
154
+ static const vm_call_handler vm_call_iseq_handlers[][6] = {
155
+ {vm_call_iseq_setup_normal_0start_0params_0locals,
156
+ vm_call_iseq_setup_normal_0start_0params_1locals,
157
+ vm_call_iseq_setup_normal_0start_0params_2locals,
158
+ vm_call_iseq_setup_normal_0start_0params_3locals,
159
+ vm_call_iseq_setup_normal_0start_0params_4locals,
160
+ vm_call_iseq_setup_normal_0start_0params_5locals},
161
+ {vm_call_iseq_setup_normal_0start_1params_0locals,
162
+ vm_call_iseq_setup_normal_0start_1params_1locals,
163
+ vm_call_iseq_setup_normal_0start_1params_2locals,
164
+ vm_call_iseq_setup_normal_0start_1params_3locals,
165
+ vm_call_iseq_setup_normal_0start_1params_4locals,
166
+ vm_call_iseq_setup_normal_0start_1params_5locals},
167
+ {vm_call_iseq_setup_normal_0start_2params_0locals,
168
+ vm_call_iseq_setup_normal_0start_2params_1locals,
169
+ vm_call_iseq_setup_normal_0start_2params_2locals,
170
+ vm_call_iseq_setup_normal_0start_2params_3locals,
171
+ vm_call_iseq_setup_normal_0start_2params_4locals,
172
+ vm_call_iseq_setup_normal_0start_2params_5locals},
173
+ {vm_call_iseq_setup_normal_0start_3params_0locals,
174
+ vm_call_iseq_setup_normal_0start_3params_1locals,
175
+ vm_call_iseq_setup_normal_0start_3params_2locals,
176
+ vm_call_iseq_setup_normal_0start_3params_3locals,
177
+ vm_call_iseq_setup_normal_0start_3params_4locals,
178
+ vm_call_iseq_setup_normal_0start_3params_5locals}
179
+ };
180
+
181
+ static inline vm_call_handler
182
+ vm_call_iseq_setup_func(const struct rb_call_info *ci, const int param_size, const int local_size)
183
+ {
184
+ if (UNLIKELY(ci->flag & VM_CALL_TAILCALL)) {
185
+ return &vm_call_iseq_setup_tailcall_0start;
186
+ }
187
+ else if (0) { /* to disable optimize */
188
+ return &vm_call_iseq_setup_normal_0start;
189
+ }
190
+ else {
191
+ if (param_size <= 3 &&
192
+ local_size <= 5) {
193
+ VM_ASSERT(local_size >= 0);
194
+ return vm_call_iseq_handlers[param_size][local_size];
195
+ }
196
+ return &vm_call_iseq_setup_normal_0start;
197
+ }
198
+ }
199
+
200
+ #else
201
+
202
+
203
+ static inline vm_call_handler
204
+ vm_call_iseq_setup_func(const struct rb_call_info *ci, struct rb_call_cache *cc)
205
+ {
206
+ if (UNLIKELY(ci->flag & VM_CALL_TAILCALL)) {
207
+ return &vm_call_iseq_setup_tailcall_0start;
208
+ }
209
+ else {
210
+ return &vm_call_iseq_setup_normal_0start;
211
+ }
212
+ }
213
+ #endif
@@ -2,7 +2,7 @@
2
2
 
3
3
  vm_core.h -
4
4
 
5
- $Author: naruse $
5
+ $Author: ko1 $
6
6
  created at: 04/01/01 19:41:38 JST
7
7
 
8
8
  Copyright (C) 2004-2007 Koichi Sasada
@@ -56,11 +56,20 @@
56
56
 
57
57
  #define RUBY_VM_THREAD_MODEL 2
58
58
 
59
+ /*
60
+ * implementation selector of get_insn_info algorithm
61
+ * 0: linear search
62
+ * 1: binary search
63
+ * 2: succinct bitvector
64
+ */
65
+ #ifndef VM_INSN_INFO_TABLE_IMPL
66
+ # define VM_INSN_INFO_TABLE_IMPL 2
67
+ #endif
68
+
59
69
  #include "ruby/ruby.h"
60
70
  #include "ruby/st.h"
61
71
 
62
72
  #include "node.h"
63
- #include "vm_debug.h"
64
73
  #include "vm_opts.h"
65
74
  #include "id.h"
66
75
  #include "method.h"
@@ -74,28 +83,43 @@
74
83
  #include "thread_pthread.h"
75
84
  #endif
76
85
 
77
- #ifndef ENABLE_VM_OBJSPACE
78
- #ifdef _WIN32
79
- /*
80
- * TODO: object space independent st_table.
81
- * socklist and conlist will be freed exit_handler(), after object
82
- * space destruction.
83
- */
84
- #define ENABLE_VM_OBJSPACE 0
85
- #else
86
- #define ENABLE_VM_OBJSPACE 1
87
- #endif
88
- #endif
89
-
90
86
  #include <setjmp.h>
91
87
  #include <signal.h>
92
88
 
93
- #ifndef NSIG
94
- # define NSIG (_SIGMAX + 1) /* For QNX */
89
+ #if defined(NSIG_MAX) /* POSIX issue 8 */
90
+ # undef NSIG
91
+ # define NSIG NSIG_MAX
92
+ #elif defined(_SIG_MAXSIG) /* FreeBSD */
93
+ # undef NSIG
94
+ # define NSIG _SIG_MAXSIG
95
+ #elif defined(_SIGMAX) /* QNX */
96
+ # define NSIG (_SIGMAX + 1)
97
+ #elif defined(NSIG) /* 99% of everything else */
98
+ # /* take it */
99
+ #else /* Last resort */
100
+ # define NSIG (sizeof(sigset_t) * CHAR_BIT + 1)
95
101
  #endif
96
102
 
97
103
  #define RUBY_NSIG NSIG
98
104
 
105
+ #if defined(SIGCLD)
106
+ # define RUBY_SIGCHLD (SIGCLD)
107
+ #elif defined(SIGCHLD)
108
+ # define RUBY_SIGCHLD (SIGCHLD)
109
+ #else
110
+ # define RUBY_SIGCHLD (0)
111
+ #endif
112
+
113
+ /* platforms with broken or non-existent SIGCHLD work by polling */
114
+ #if defined(__APPLE__)
115
+ # define SIGCHLD_LOSSY (1)
116
+ #else
117
+ # define SIGCHLD_LOSSY (0)
118
+ #endif
119
+
120
+ /* define to 0 to test old code path */
121
+ #define WAITPID_USE_SIGCHLD (RUBY_SIGCHLD || SIGCHLD_LOSSY)
122
+
99
123
  #ifdef HAVE_STDARG_PROTOTYPES
100
124
  #include <stdarg.h>
101
125
  #define va_init_list(a,b) va_start((a),(b))
@@ -105,7 +129,15 @@
105
129
  #endif
106
130
 
107
131
  #if defined(SIGSEGV) && defined(HAVE_SIGALTSTACK) && defined(SA_SIGINFO) && !defined(__NetBSD__)
108
- #define USE_SIGALTSTACK
132
+ # define USE_SIGALTSTACK
133
+ void *rb_register_sigaltstack(void);
134
+ # define RB_ALTSTACK_INIT(var) var = rb_register_sigaltstack()
135
+ # define RB_ALTSTACK_FREE(var) xfree(var)
136
+ # define RB_ALTSTACK(var) var
137
+ #else /* noop */
138
+ # define RB_ALTSTACK_INIT(var)
139
+ # define RB_ALTSTACK_FREE(var)
140
+ # define RB_ALTSTACK(var) (0)
109
141
  #endif
110
142
 
111
143
  /*****************/
@@ -132,10 +164,6 @@
132
164
  #endif
133
165
  #endif
134
166
 
135
- #ifdef __native_client__
136
- #undef OPT_DIRECT_THREADED_CODE
137
- #endif
138
-
139
167
  /* call threaded code */
140
168
  #if OPT_CALL_THREADED_CODE
141
169
  #if OPT_DIRECT_THREADED_CODE
@@ -146,7 +174,9 @@
146
174
  #endif /* OPT_STACK_CACHING */
147
175
  #endif /* OPT_CALL_THREADED_CODE */
148
176
 
177
+ void rb_vm_encoded_insn_data_table_init(void);
149
178
  typedef unsigned long rb_num_t;
179
+ typedef signed long rb_snum_t;
150
180
 
151
181
  enum ruby_tag_type {
152
182
  RUBY_TAG_NONE = 0x0,
@@ -174,7 +204,6 @@ enum ruby_tag_type {
174
204
 
175
205
  enum ruby_vm_throw_flags {
176
206
  VM_THROW_NO_ESCAPE_FLAG = 0x8000,
177
- VM_THROW_LEVEL_SHIFT = 16,
178
207
  VM_THROW_STATE_MASK = 0xff
179
208
  };
180
209
 
@@ -237,7 +266,8 @@ struct rb_calling_info {
237
266
  };
238
267
 
239
268
  struct rb_call_cache;
240
- typedef VALUE (*vm_call_handler)(struct rb_thread_struct *th, struct rb_control_frame_struct *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc);
269
+ struct rb_execution_context_struct;
270
+ typedef VALUE (*vm_call_handler)(struct rb_execution_context_struct *ec, struct rb_control_frame_struct *cfp, struct rb_calling_info *calling, const struct rb_call_info *ci, struct rb_call_cache *cc);
241
271
 
242
272
  struct rb_call_cache {
243
273
  /* inline cache: keys */
@@ -268,6 +298,8 @@ typedef struct rb_iseq_location_struct {
268
298
  VALUE base_label; /* String */
269
299
  VALUE label; /* String */
270
300
  VALUE first_lineno; /* TODO: may be unsigned short */
301
+ int node_id;
302
+ rb_code_location_t code_location;
271
303
  } rb_iseq_location_t;
272
304
 
273
305
  #define PATHOBJ_PATH 0
@@ -297,6 +329,9 @@ pathobj_realpath(VALUE pathobj)
297
329
  }
298
330
  }
299
331
 
332
+ /* Forward declarations */
333
+ struct rb_mjit_unit;
334
+
300
335
  struct rb_iseq_constant_body {
301
336
  enum iseq_type {
302
337
  ISEQ_TYPE_TOP,
@@ -307,7 +342,7 @@ struct rb_iseq_constant_body {
307
342
  ISEQ_TYPE_ENSURE,
308
343
  ISEQ_TYPE_EVAL,
309
344
  ISEQ_TYPE_MAIN,
310
- ISEQ_TYPE_DEFINED_GUARD
345
+ ISEQ_TYPE_PLAIN
311
346
  } type; /* instruction sequence type */
312
347
 
313
348
  unsigned int iseq_size;
@@ -386,7 +421,14 @@ struct rb_iseq_constant_body {
386
421
  rb_iseq_location_t location;
387
422
 
388
423
  /* insn info, must be freed */
389
- const struct iseq_line_info_entry *line_info_table;
424
+ struct iseq_insn_info {
425
+ const struct iseq_insn_info_entry *body;
426
+ unsigned int *positions;
427
+ unsigned int size;
428
+ #if VM_INSN_INFO_TABLE_IMPL == 2
429
+ struct succ_index_table *succ_index_table;
430
+ #endif
431
+ } insns_info;
390
432
 
391
433
  const ID *local_table; /* must free */
392
434
 
@@ -403,24 +445,38 @@ struct rb_iseq_constant_body {
403
445
  * So that:
404
446
  * struct rb_call_info_with_kwarg *cikw_entries = &body->ci_entries[ci_size];
405
447
  */
406
- struct rb_call_cache *cc_entries; /* size is ci_size = ci_kw_size */
448
+ struct rb_call_cache *cc_entries; /* size is ci_size + ci_kw_size */
407
449
 
408
- VALUE mark_ary; /* Array: includes operands which should be GC marked */
450
+ struct {
451
+ rb_snum_t flip_count;
452
+ VALUE coverage;
453
+ VALUE pc2branchindex;
454
+ VALUE *original_iseq;
455
+ } variable;
409
456
 
410
457
  unsigned int local_table_size;
411
458
  unsigned int is_size;
412
459
  unsigned int ci_size;
413
460
  unsigned int ci_kw_size;
414
- unsigned int line_info_size;
415
461
  unsigned int stack_max; /* for stack overflow check */
462
+
463
+ #if USE_MJIT
464
+ /* The following fields are MJIT related info. */
465
+ VALUE (*jit_func)(struct rb_execution_context_struct *,
466
+ struct rb_control_frame_struct *); /* function pointer for loaded native code */
467
+ long unsigned total_calls; /* number of total calls with `mjit_exec()` */
468
+ struct rb_mjit_unit *jit_unit;
469
+ #endif
470
+ char catch_except_p; /* If a frame of this ISeq may catch exception, set TRUE */
416
471
  };
417
472
 
418
473
  /* T_IMEMO/iseq */
419
474
  /* typedef rb_iseq_t is in method.h */
420
475
  struct rb_iseq_struct {
421
- VALUE flags;
422
- VALUE reserved1;
423
- struct rb_iseq_constant_body *body;
476
+ VALUE flags; /* 1 */
477
+ VALUE wrapper; /* 2 */
478
+
479
+ struct rb_iseq_constant_body *body; /* 3 */
424
480
 
425
481
  union { /* 4, 5 words */
426
482
  struct iseq_compile_data *compile_data; /* used at compile time */
@@ -429,6 +485,11 @@ struct rb_iseq_struct {
429
485
  VALUE obj;
430
486
  int index;
431
487
  } loader;
488
+
489
+ struct {
490
+ struct rb_hook_list_struct *local_hooks;
491
+ rb_event_flag_t global_trace_events;
492
+ } exec;
432
493
  } aux;
433
494
  };
434
495
 
@@ -451,6 +512,15 @@ rb_iseq_check(const rb_iseq_t *iseq)
451
512
  return iseq;
452
513
  }
453
514
 
515
+ static inline const rb_iseq_t *
516
+ def_iseq_ptr(rb_method_definition_t *def)
517
+ {
518
+ #if VM_CHECK_MODE > 0
519
+ if (def->type != VM_METHOD_TYPE_ISEQ) rb_bug("def_iseq_ptr: not iseq (%d)", def->type);
520
+ #endif
521
+ return rb_iseq_check(def->body.iseq.iseqptr);
522
+ }
523
+
454
524
  enum ruby_special_exceptions {
455
525
  ruby_error_reenter,
456
526
  ruby_error_nomemory,
@@ -486,6 +556,9 @@ enum ruby_basic_operators {
486
556
  BOP_UMINUS,
487
557
  BOP_MAX,
488
558
  BOP_MIN,
559
+ BOP_CALL,
560
+ BOP_AND,
561
+ BOP_OR,
489
562
 
490
563
  BOP_LAST_
491
564
  };
@@ -508,28 +581,39 @@ void rb_objspace_free(struct rb_objspace *);
508
581
  typedef struct rb_hook_list_struct {
509
582
  struct rb_event_hook_struct *hooks;
510
583
  rb_event_flag_t events;
511
- int need_clean;
584
+ unsigned int need_clean;
585
+ unsigned int running;
512
586
  } rb_hook_list_t;
513
587
 
514
588
  typedef struct rb_vm_struct {
515
589
  VALUE self;
516
590
 
517
591
  rb_global_vm_lock_t gvl;
518
- rb_nativethread_lock_t thread_destruct_lock;
519
592
 
520
593
  struct rb_thread_struct *main_thread;
521
- struct rb_thread_struct *running_thread;
522
594
 
595
+ /* persists across uncontended GVL release/acquire for time slice */
596
+ const struct rb_thread_struct *running_thread;
597
+
598
+ #ifdef USE_SIGALTSTACK
599
+ void *main_altstack;
600
+ #endif
601
+
602
+ rb_serial_t fork_gen;
603
+ rb_nativethread_lock_t waitpid_lock;
604
+ struct list_head waiting_pids; /* PID > 0: <=> struct waitpid_state */
605
+ struct list_head waiting_grps; /* PID <= 0: <=> struct waitpid_state */
523
606
  struct list_head waiting_fds; /* <=> struct waiting_fd */
524
607
  struct list_head living_threads;
525
- size_t living_thread_num;
526
608
  VALUE thgroup_default;
609
+ int living_thread_num;
527
610
 
528
611
  unsigned int running: 1;
529
612
  unsigned int thread_abort_on_exception: 1;
530
613
  unsigned int thread_report_on_exception: 1;
531
- int trace_running;
532
- volatile int sleeper;
614
+
615
+ unsigned int safe_level_: 1;
616
+ int sleeper;
533
617
 
534
618
  /* object management */
535
619
  VALUE mark_object_ary;
@@ -553,17 +637,21 @@ typedef struct rb_vm_struct {
553
637
  } trap_list;
554
638
 
555
639
  /* hook */
556
- rb_hook_list_t event_hooks;
640
+ rb_hook_list_t global_hooks;
557
641
 
558
642
  /* relation table of ensure - rollback for callcc */
559
643
  struct st_table *ensure_rollback_table;
560
644
 
561
- /* postponed_job */
645
+ /* postponed_job (async-signal-safe, NOT thread-safe) */
562
646
  struct rb_postponed_job_struct *postponed_job_buffer;
563
647
  int postponed_job_index;
564
648
 
565
649
  int src_encoding_index;
566
650
 
651
+ /* workqueue (thread-safe, NOT async-signal-safe) */
652
+ struct list_head workqueue; /* <=> rb_workqueue_job.jnode */
653
+ rb_nativethread_lock_t workqueue_lock;
654
+
567
655
  VALUE verbose, debug, orig_progname, progname;
568
656
  VALUE coverages;
569
657
  int coverage_mode;
@@ -600,7 +688,11 @@ typedef struct rb_vm_struct {
600
688
  #define RUBY_VM_FIBER_VM_STACK_SIZE ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */
601
689
  #define RUBY_VM_FIBER_VM_STACK_SIZE_MIN ( 2 * 1024 * sizeof(VALUE)) /* 8 KB or 16 KB */
602
690
  #define RUBY_VM_FIBER_MACHINE_STACK_SIZE ( 64 * 1024 * sizeof(VALUE)) /* 256 KB or 512 KB */
691
+ #if defined(__powerpc64__)
692
+ #define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 32 * 1024 * sizeof(VALUE)) /* 128 KB or 256 KB */
693
+ #else
603
694
  #define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */
695
+ #endif
604
696
 
605
697
  /* optimize insn */
606
698
  #define INTEGER_REDEFINED_OP_FLAG (1 << 0)
@@ -615,6 +707,7 @@ typedef struct rb_vm_struct {
615
707
  #define NIL_REDEFINED_OP_FLAG (1 << 9)
616
708
  #define TRUE_REDEFINED_OP_FLAG (1 << 10)
617
709
  #define FALSE_REDEFINED_OP_FLAG (1 << 11)
710
+ #define PROC_REDEFINED_OP_FLAG (1 << 12)
618
711
 
619
712
  #define BASIC_OP_UNREDEFINED_P(op, klass) (LIKELY((GET_VM()->redefined_flag[(op)]&(klass)) == 0))
620
713
 
@@ -666,9 +759,10 @@ typedef struct rb_control_frame_struct {
666
759
  VALUE self; /* cfp[3] / block[0] */
667
760
  const VALUE *ep; /* cfp[4] / block[1] */
668
761
  const void *block_code; /* cfp[5] / block[2] */ /* iseq or ifunc */
762
+ const VALUE *bp; /* cfp[6] */
669
763
 
670
764
  #if VM_DEBUG_BP_CHECK
671
- VALUE *bp_check; /* cfp[6] */
765
+ VALUE *bp_check; /* cfp[7] */
672
766
  #endif
673
767
  } rb_control_frame_t;
674
768
 
@@ -690,7 +784,7 @@ enum rb_thread_status {
690
784
  typedef RUBY_JMP_BUF rb_jmpbuf_t;
691
785
 
692
786
  /*
693
- the members which are written in TH_PUSH_TAG() should be placed at
787
+ the members which are written in EC_PUSH_TAG() should be placed at
694
788
  the beginning and the end, so that entire region is accessible.
695
789
  */
696
790
  struct rb_vm_tag {
@@ -745,11 +839,13 @@ typedef struct rb_execution_context_struct {
745
839
 
746
840
  struct rb_vm_tag *tag;
747
841
  struct rb_vm_protect_tag *protect_tag;
748
- int safe_level;
749
- int raised_flag;
750
842
 
751
- /* temporary place of errinfo */
752
- VALUE errinfo;
843
+ /* interrupt flags */
844
+ rb_atomic_t interrupt_flag;
845
+ rb_atomic_t interrupt_mask; /* size should match flag */
846
+
847
+ rb_fiber_t *fiber_ptr;
848
+ struct rb_thread_struct *thread_ptr;
753
849
 
754
850
  /* storage (ec (fiber) local) */
755
851
  st_table *local_storage;
@@ -760,13 +856,22 @@ typedef struct rb_execution_context_struct {
760
856
  const VALUE *root_lep;
761
857
  VALUE root_svar;
762
858
 
859
+ /* ensure & callcc */
860
+ rb_ensure_list_t *ensure_list;
861
+
763
862
  /* trace information */
764
863
  struct rb_trace_arg_struct *trace_arg;
765
864
 
766
- /* ensure & callcc */
767
- rb_ensure_list_t *ensure_list;
865
+ /* temporary places */
866
+ VALUE errinfo;
867
+ VALUE passed_block_handler; /* for rb_iterate */
768
868
 
769
- rb_fiber_t *fiber;
869
+ uint8_t raised_flag; /* only 3 bits needed */
870
+
871
+ /* n.b. only 7 bits needed, really: */
872
+ BITFIELD(enum method_missing_reason, method_missing_reason, 8);
873
+
874
+ VALUE private_const_reference;
770
875
 
771
876
  /* for GC */
772
877
  struct {
@@ -778,25 +883,21 @@ typedef struct rb_execution_context_struct {
778
883
  VALUE *register_stack_end;
779
884
  size_t register_stack_maxsize;
780
885
  #endif
781
- jmp_buf regs;
886
+ RUBY_ALIGNAS(SIZEOF_VALUE) jmp_buf regs;
782
887
  } machine;
783
888
  } rb_execution_context_t;
784
889
 
890
+ void rb_ec_set_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size);
891
+
785
892
  typedef struct rb_thread_struct {
786
893
  struct list_node vmlt_node;
787
894
  VALUE self;
788
895
  rb_vm_t *vm;
789
896
 
790
- rb_execution_context_t ec;
897
+ rb_execution_context_t *ec;
791
898
 
792
899
  VALUE last_status; /* $? */
793
900
 
794
- /* for rb_iterate */
795
- VALUE passed_block_handler;
796
-
797
- /* for bmethod */
798
- const rb_callable_method_entry_t *passed_bmethod_me;
799
-
800
901
  /* for cfunc */
801
902
  struct rb_calling_info *calling;
802
903
 
@@ -809,9 +910,14 @@ typedef struct rb_thread_struct {
809
910
  #ifdef NON_SCALAR_THREAD_ID
810
911
  rb_thread_id_string_t thread_id_string;
811
912
  #endif
812
- enum rb_thread_status status;
813
- int to_kill;
814
- int priority;
913
+ BITFIELD(enum rb_thread_status, status, 2);
914
+ /* bit flags */
915
+ unsigned int to_kill : 1;
916
+ unsigned int abort_on_exception: 1;
917
+ unsigned int report_on_exception: 1;
918
+ unsigned int pending_interrupt_queue_checked: 1;
919
+ int8_t priority; /* -3 .. 3 (RUBY_THREAD_PRIORITY_{MIN,MAX}) */
920
+ uint32_t running_time_us; /* 12500..800000 */
815
921
 
816
922
  native_thread_data_t native_thread_data;
817
923
  void *blocking_region_buffer;
@@ -827,10 +933,8 @@ typedef struct rb_thread_struct {
827
933
  /* async errinfo queue */
828
934
  VALUE pending_interrupt_queue;
829
935
  VALUE pending_interrupt_mask_stack;
830
- int pending_interrupt_queue_checked;
831
936
 
832
- rb_atomic_t interrupt_flag;
833
- unsigned long interrupt_mask;
937
+ /* interrupt management */
834
938
  rb_nativethread_lock_t interrupt_lock;
835
939
  struct rb_unblock_callback unblock;
836
940
  VALUE locking_mutex;
@@ -838,29 +942,33 @@ typedef struct rb_thread_struct {
838
942
 
839
943
  rb_thread_list_t *join_list;
840
944
 
841
- VALUE first_proc;
842
- VALUE first_args;
843
- VALUE (*first_func)(ANYARGS);
945
+ union {
946
+ struct {
947
+ VALUE proc;
948
+ VALUE args;
949
+ } proc;
950
+ struct {
951
+ VALUE (*func)(ANYARGS);
952
+ void *arg;
953
+ } func;
954
+ } invoke_arg;
955
+
956
+ enum {
957
+ thread_invoke_type_none = 0,
958
+ thread_invoke_type_proc,
959
+ thread_invoke_type_func
960
+ } invoke_type;
844
961
 
845
962
  /* statistics data for profiler */
846
963
  VALUE stat_insn_usage;
847
964
 
848
- /* tracer */
849
- rb_hook_list_t event_hooks;
850
-
851
965
  /* fiber */
852
966
  rb_fiber_t *root_fiber;
853
967
  rb_jmpbuf_t root_jmpbuf;
854
968
 
855
969
  /* misc */
856
- enum method_missing_reason method_missing_reason: 8;
857
- unsigned int abort_on_exception: 1;
858
- unsigned int report_on_exception: 1;
859
- #ifdef USE_SIGALTSTACK
860
- void *altstack;
861
- #endif
862
- uint32_t running_time_us; /* 12500..800000 */
863
970
  VALUE name;
971
+
864
972
  } rb_thread_t;
865
973
 
866
974
  typedef enum {
@@ -882,11 +990,13 @@ typedef enum {
882
990
  RUBY_SYMBOL_EXPORT_BEGIN
883
991
 
884
992
  /* node -> iseq */
885
- rb_iseq_t *rb_iseq_new (NODE *node, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum iseq_type);
886
- rb_iseq_t *rb_iseq_new_top (NODE *node, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
887
- rb_iseq_t *rb_iseq_new_main (NODE *node, VALUE path, VALUE realpath, const rb_iseq_t *parent);
888
- rb_iseq_t *rb_iseq_new_with_opt(NODE* node, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
993
+ rb_iseq_t *rb_iseq_new (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum iseq_type);
994
+ rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
995
+ rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent);
996
+ rb_iseq_t *rb_iseq_new_with_opt(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
889
997
  const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
998
+ rb_iseq_t *rb_iseq_new_ifunc(const struct vm_ifunc *ifunc, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno,
999
+ const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
890
1000
 
891
1001
  /* src -> iseq */
892
1002
  rb_iseq_t *rb_iseq_compile(VALUE src, VALUE file, VALUE line);
@@ -909,9 +1019,8 @@ RUBY_SYMBOL_EXPORT_END
909
1019
 
910
1020
  typedef struct {
911
1021
  const struct rb_block block;
912
- int8_t safe_level; /* 0..1 */
913
- int8_t is_from_method; /* bool */
914
- int8_t is_lambda; /* bool */
1022
+ unsigned int is_from_method: 1; /* bool */
1023
+ unsigned int is_lambda: 1; /* bool */
915
1024
  } rb_proc_t;
916
1025
 
917
1026
  typedef struct {
@@ -955,6 +1064,7 @@ enum vm_call_flag_bits {
955
1064
  VM_CALL_KW_SPLAT_bit, /* m(**opts) */
956
1065
  VM_CALL_TAILCALL_bit, /* located at tail position */
957
1066
  VM_CALL_SUPER_bit, /* super */
1067
+ VM_CALL_ZSUPER_bit, /* zsuper */
958
1068
  VM_CALL_OPT_SEND_bit, /* internal flag */
959
1069
  VM_CALL__END
960
1070
  };
@@ -969,6 +1079,7 @@ enum vm_call_flag_bits {
969
1079
  #define VM_CALL_KW_SPLAT (0x01 << VM_CALL_KW_SPLAT_bit)
970
1080
  #define VM_CALL_TAILCALL (0x01 << VM_CALL_TAILCALL_bit)
971
1081
  #define VM_CALL_SUPER (0x01 << VM_CALL_SUPER_bit)
1082
+ #define VM_CALL_ZSUPER (0x01 << VM_CALL_ZSUPER_bit)
972
1083
  #define VM_CALL_OPT_SEND (0x01 << VM_CALL_OPT_SEND_bit)
973
1084
 
974
1085
  enum vm_special_object_type {
@@ -987,6 +1098,7 @@ enum vm_svar_index {
987
1098
 
988
1099
  /* inline cache */
989
1100
  typedef struct iseq_inline_cache_entry *IC;
1101
+ typedef union iseq_inline_storage_entry *ISE;
990
1102
  typedef struct rb_call_info *CALL_INFO;
991
1103
  typedef struct rb_call_cache *CALL_CACHE;
992
1104
 
@@ -999,7 +1111,7 @@ typedef VALUE CDHASH;
999
1111
  #endif
1000
1112
 
1001
1113
  typedef rb_control_frame_t *
1002
- (FUNC_FASTCALL(*rb_insn_func_t))(rb_thread_t *, rb_control_frame_t *);
1114
+ (FUNC_FASTCALL(*rb_insn_func_t))(rb_execution_context_t *, rb_control_frame_t *);
1003
1115
 
1004
1116
  #define VM_TAGGED_PTR_SET(p, tag) ((VALUE)(p) | (tag))
1005
1117
  #define VM_TAGGED_PTR_REF(v, mask) ((void *)((v) & ~mask))
@@ -1015,7 +1127,7 @@ enum {
1015
1127
  * X : tag for GC marking (It seems as Fixnum)
1016
1128
  * EEE : 3 bits Env flags
1017
1129
  * FF..: 6 bits Frame flags
1018
- * MM..: 16 bits frame magic (to check frame corruption)
1130
+ * MM..: 15 bits frame magic (to check frame corruption)
1019
1131
  */
1020
1132
 
1021
1133
  /* frame types */
@@ -1026,10 +1138,10 @@ enum {
1026
1138
  VM_FRAME_MAGIC_CFUNC = 0x55550001,
1027
1139
  VM_FRAME_MAGIC_IFUNC = 0x66660001,
1028
1140
  VM_FRAME_MAGIC_EVAL = 0x77770001,
1029
- VM_FRAME_MAGIC_RESCUE = 0x88880001,
1030
- VM_FRAME_MAGIC_DUMMY = 0x99990001,
1141
+ VM_FRAME_MAGIC_RESCUE = 0x78880001,
1142
+ VM_FRAME_MAGIC_DUMMY = 0x79990001,
1031
1143
 
1032
- VM_FRAME_MAGIC_MASK = 0xffff0001,
1144
+ VM_FRAME_MAGIC_MASK = 0x7fff0001,
1033
1145
 
1034
1146
  /* frame flag */
1035
1147
  VM_FRAME_FLAG_PASSED = 0x0010,
@@ -1037,6 +1149,7 @@ enum {
1037
1149
  VM_FRAME_FLAG_BMETHOD = 0x0040,
1038
1150
  VM_FRAME_FLAG_CFRAME = 0x0080,
1039
1151
  VM_FRAME_FLAG_LAMBDA = 0x0100,
1152
+ VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
1040
1153
 
1041
1154
  /* env flag */
1042
1155
  VM_ENV_FLAG_LOCAL = 0x0002,
@@ -1050,7 +1163,6 @@ enum {
1050
1163
  #define VM_ENV_DATA_INDEX_SPECVAL (-1) /* ep[-1] */
1051
1164
  #define VM_ENV_DATA_INDEX_FLAGS ( 0) /* ep[ 0] */
1052
1165
  #define VM_ENV_DATA_INDEX_ENV ( 1) /* ep[ 1] */
1053
- #define VM_ENV_DATA_INDEX_ENV_PROC ( 2) /* ep[ 2] */
1054
1166
 
1055
1167
  #define VM_ENV_INDEX_LAST_LVAR (-VM_ENV_DATA_SIZE)
1056
1168
 
@@ -1189,16 +1301,6 @@ VM_ENV_ENVVAL_PTR(const VALUE *ep)
1189
1301
  return (const rb_env_t *)VM_ENV_ENVVAL(ep);
1190
1302
  }
1191
1303
 
1192
- static inline VALUE
1193
- VM_ENV_PROCVAL(const VALUE *ep)
1194
- {
1195
- VM_ASSERT(VM_ENV_ESCAPED_P(ep));
1196
- VM_ASSERT(VM_ENV_LOCAL_P(ep));
1197
- VM_ASSERT(VM_ENV_BLOCK_HANDLER(ep) != VM_BLOCK_HANDLER_NONE);
1198
-
1199
- return ep[VM_ENV_DATA_INDEX_ENV_PROC];
1200
- }
1201
-
1202
1304
  static inline const rb_env_t *
1203
1305
  vm_env_new(VALUE *env_ep, VALUE *env_body, unsigned int env_size, const rb_iseq_t *iseq)
1204
1306
  {
@@ -1237,12 +1339,21 @@ VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
1237
1339
 
1238
1340
  #define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
1239
1341
  #define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
1240
- #define RUBY_VM_END_CONTROL_FRAME(th) \
1241
- ((rb_control_frame_t *)((th)->ec.vm_stack + (th)->ec.vm_stack_size))
1342
+
1242
1343
  #define RUBY_VM_VALID_CONTROL_FRAME_P(cfp, ecfp) \
1243
1344
  ((void *)(ecfp) > (void *)(cfp))
1244
- #define RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(th, cfp) \
1245
- (!RUBY_VM_VALID_CONTROL_FRAME_P((cfp), RUBY_VM_END_CONTROL_FRAME(th)))
1345
+
1346
+ static inline const rb_control_frame_t *
1347
+ RUBY_VM_END_CONTROL_FRAME(const rb_execution_context_t *ec)
1348
+ {
1349
+ return (rb_control_frame_t *)(ec->vm_stack + ec->vm_stack_size);
1350
+ }
1351
+
1352
+ static inline int
1353
+ RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(const rb_execution_context_t *ec, const rb_control_frame_t *cfp)
1354
+ {
1355
+ return !RUBY_VM_VALID_CONTROL_FRAME_P(cfp, RUBY_VM_END_CONTROL_FRAME(ec));
1356
+ }
1246
1357
 
1247
1358
  static inline int
1248
1359
  VM_BH_ISEQ_BLOCK_P(VALUE block_handler)
@@ -1462,16 +1573,17 @@ VM_BH_FROM_PROC(VALUE procval)
1462
1573
 
1463
1574
  /* VM related object allocate functions */
1464
1575
  VALUE rb_thread_alloc(VALUE klass);
1465
- VALUE rb_proc_alloc(VALUE klass);
1466
1576
  VALUE rb_binding_alloc(VALUE klass);
1577
+ VALUE rb_proc_alloc(VALUE klass);
1578
+ VALUE rb_proc_dup(VALUE self);
1467
1579
 
1468
1580
  /* for debug */
1469
- extern void rb_vmdebug_stack_dump_raw(rb_thread_t *, rb_control_frame_t *);
1470
- extern void rb_vmdebug_debug_print_pre(rb_thread_t *th, rb_control_frame_t *cfp, const VALUE *_pc);
1471
- extern void rb_vmdebug_debug_print_post(rb_thread_t *th, rb_control_frame_t *cfp);
1581
+ extern void rb_vmdebug_stack_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
1582
+ extern void rb_vmdebug_debug_print_pre(const rb_execution_context_t *ec, const rb_control_frame_t *cfp, const VALUE *_pc);
1583
+ extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
1472
1584
 
1473
- #define SDR() rb_vmdebug_stack_dump_raw(GET_THREAD(), GET_THREAD()->ec.cfp)
1474
- #define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_THREAD(), (cfp))
1585
+ #define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
1586
+ #define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
1475
1587
  void rb_vm_bugreport(const void *);
1476
1588
  NORETURN(void rb_bug_context(const void *, const char *fmt, ...));
1477
1589
 
@@ -1486,30 +1598,46 @@ RUBY_SYMBOL_EXPORT_END
1486
1598
  VALUE rb_iseq_pathobj_new(VALUE path, VALUE realpath);
1487
1599
  void rb_iseq_pathobj_set(const rb_iseq_t *iseq, VALUE path, VALUE realpath);
1488
1600
 
1489
- int rb_thread_method_id_and_class(rb_thread_t *th, ID *idp, ID *called_idp, VALUE *klassp);
1601
+ int rb_ec_frame_method_id_and_class(const rb_execution_context_t *ec, ID *idp, ID *called_idp, VALUE *klassp);
1602
+ void rb_ec_setup_exception(const rb_execution_context_t *ec, VALUE mesg, VALUE cause);
1490
1603
 
1491
- VALUE rb_vm_invoke_proc(rb_thread_t *th, rb_proc_t *proc, int argc, const VALUE *argv, VALUE block_handler);
1492
- VALUE rb_vm_make_proc_lambda(rb_thread_t *th, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
1493
- VALUE rb_vm_make_proc(rb_thread_t *th, const struct rb_captured_block *captured, VALUE klass);
1494
- VALUE rb_vm_make_binding(rb_thread_t *th, const rb_control_frame_t *src_cfp);
1604
+ VALUE rb_vm_invoke_proc(rb_execution_context_t *ec, rb_proc_t *proc, int argc, const VALUE *argv, VALUE block_handler);
1605
+
1606
+ VALUE rb_vm_make_proc_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass, int8_t is_lambda);
1607
+ static inline VALUE
1608
+ rb_vm_make_proc(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
1609
+ {
1610
+ return rb_vm_make_proc_lambda(ec, captured, klass, 0);
1611
+ }
1612
+
1613
+ static inline VALUE
1614
+ rb_vm_make_lambda(const rb_execution_context_t *ec, const struct rb_captured_block *captured, VALUE klass)
1615
+ {
1616
+ return rb_vm_make_proc_lambda(ec, captured, klass, 1);
1617
+ }
1618
+
1619
+ VALUE rb_vm_make_binding(const rb_execution_context_t *ec, const rb_control_frame_t *src_cfp);
1495
1620
  VALUE rb_vm_env_local_variables(const rb_env_t *env);
1496
1621
  const rb_env_t *rb_vm_env_prev_env(const rb_env_t *env);
1497
1622
  const VALUE *rb_binding_add_dynavars(VALUE bindval, rb_binding_t *bind, int dyncount, const ID *dynvars);
1498
1623
  void rb_vm_inc_const_missing_count(void);
1499
1624
  void rb_vm_gvl_destroy(rb_vm_t *vm);
1500
- VALUE rb_vm_call(rb_thread_t *th, VALUE recv, VALUE id, int argc,
1625
+ VALUE rb_vm_call(rb_execution_context_t *ec, VALUE recv, VALUE id, int argc,
1501
1626
  const VALUE *argv, const rb_callable_method_entry_t *me);
1502
- void rb_vm_pop_frame(rb_thread_t *th);
1627
+ MJIT_STATIC void rb_vm_pop_frame(rb_execution_context_t *ec);
1503
1628
 
1504
1629
  void rb_thread_start_timer_thread(void);
1505
1630
  void rb_thread_stop_timer_thread(void);
1506
1631
  void rb_thread_reset_timer_thread(void);
1507
- void rb_thread_wakeup_timer_thread(void);
1632
+ void rb_thread_wakeup_timer_thread(int);
1508
1633
 
1509
1634
  static inline void
1510
1635
  rb_vm_living_threads_init(rb_vm_t *vm)
1511
1636
  {
1512
1637
  list_head_init(&vm->waiting_fds);
1638
+ list_head_init(&vm->waiting_pids);
1639
+ list_head_init(&vm->workqueue);
1640
+ list_head_init(&vm->waiting_grps);
1513
1641
  list_head_init(&vm->living_threads);
1514
1642
  vm->living_thread_num = 0;
1515
1643
  }
@@ -1529,14 +1657,15 @@ rb_vm_living_threads_remove(rb_vm_t *vm, rb_thread_t *th)
1529
1657
  }
1530
1658
 
1531
1659
  typedef int rb_backtrace_iter_func(void *, VALUE, int, VALUE);
1532
- rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_thread_t *th, const rb_control_frame_t *cfp);
1533
- rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_thread_t *th, const rb_control_frame_t *cfp);
1660
+ rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
1661
+ rb_control_frame_t *rb_vm_get_binding_creatable_next_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp);
1534
1662
  int rb_vm_get_sourceline(const rb_control_frame_t *);
1535
1663
  VALUE rb_name_err_mesg_new(VALUE mesg, VALUE recv, VALUE method);
1536
- void rb_vm_stack_to_heap(rb_thread_t *th);
1664
+ void rb_vm_stack_to_heap(rb_execution_context_t *ec);
1537
1665
  void ruby_thread_init_stack(rb_thread_t *th);
1538
1666
  int rb_vm_control_frame_id_and_class(const rb_control_frame_t *cfp, ID *idp, ID *called_idp, VALUE *klassp);
1539
- void rb_vm_rewind_cfp(rb_thread_t *th, rb_control_frame_t *cfp);
1667
+ void rb_vm_rewind_cfp(rb_execution_context_t *ec, rb_control_frame_t *cfp);
1668
+ MJIT_STATIC VALUE rb_vm_bh_to_procval(const rb_execution_context_t *ec, VALUE block_handler);
1540
1669
 
1541
1670
  void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE exception_class, VALUE mesg);
1542
1671
 
@@ -1545,11 +1674,9 @@ void rb_vm_register_special_exception_str(enum ruby_special_exceptions sp, VALUE
1545
1674
 
1546
1675
  void rb_gc_mark_machine_stack(const rb_execution_context_t *ec);
1547
1676
 
1548
- int rb_autoloading_value(VALUE mod, ID id, VALUE* value);
1549
-
1550
1677
  void rb_vm_rewrite_cref(rb_cref_t *node, VALUE old_klass, VALUE new_klass, rb_cref_t **new_cref_ptr);
1551
1678
 
1552
- const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
1679
+ MJIT_STATIC const rb_callable_method_entry_t *rb_vm_frame_method_entry(const rb_control_frame_t *cfp);
1553
1680
 
1554
1681
  #define sysstack_error GET_VM()->special_exceptions[ruby_error_sysstack]
1555
1682
 
@@ -1570,21 +1697,76 @@ VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, enum ruby_
1570
1697
  /* for thread */
1571
1698
 
1572
1699
  #if RUBY_VM_THREAD_MODEL == 2
1573
- extern rb_thread_t *ruby_current_thread;
1574
- extern rb_vm_t *ruby_current_vm;
1575
- extern rb_event_flag_t ruby_vm_event_flags;
1700
+ RUBY_SYMBOL_EXPORT_BEGIN
1576
1701
 
1577
- #define GET_VM() ruby_current_vm
1578
- #define GET_THREAD() ruby_current_thread
1702
+ RUBY_EXTERN rb_vm_t *ruby_current_vm_ptr;
1703
+ RUBY_EXTERN rb_execution_context_t *ruby_current_execution_context_ptr;
1704
+ RUBY_EXTERN rb_event_flag_t ruby_vm_event_flags;
1705
+ RUBY_EXTERN rb_event_flag_t ruby_vm_event_enabled_global_flags;
1706
+ RUBY_EXTERN unsigned int ruby_vm_event_local_num;
1579
1707
 
1580
- #define rb_thread_set_current_raw(th) (void)(ruby_current_thread = (th))
1581
- #define rb_thread_set_current(th) do { \
1582
- if ((th)->vm->running_thread != (th)) { \
1583
- (th)->running_time_us = 0; \
1584
- } \
1585
- rb_thread_set_current_raw(th); \
1586
- (th)->vm->running_thread = (th); \
1587
- } while (0)
1708
+ RUBY_SYMBOL_EXPORT_END
1709
+
1710
+ #define GET_VM() rb_current_vm()
1711
+ #define GET_THREAD() rb_current_thread()
1712
+ #define GET_EC() rb_current_execution_context()
1713
+
1714
+ static inline rb_thread_t *
1715
+ rb_ec_thread_ptr(const rb_execution_context_t *ec)
1716
+ {
1717
+ return ec->thread_ptr;
1718
+ }
1719
+
1720
+ static inline rb_vm_t *
1721
+ rb_ec_vm_ptr(const rb_execution_context_t *ec)
1722
+ {
1723
+ const rb_thread_t *th = rb_ec_thread_ptr(ec);
1724
+ if (th) {
1725
+ return th->vm;
1726
+ }
1727
+ else {
1728
+ return NULL;
1729
+ }
1730
+ }
1731
+
1732
+ static inline rb_execution_context_t *
1733
+ rb_current_execution_context(void)
1734
+ {
1735
+ return ruby_current_execution_context_ptr;
1736
+ }
1737
+
1738
+ static inline rb_thread_t *
1739
+ rb_current_thread(void)
1740
+ {
1741
+ const rb_execution_context_t *ec = GET_EC();
1742
+ return rb_ec_thread_ptr(ec);
1743
+ }
1744
+
1745
+ static inline rb_vm_t *
1746
+ rb_current_vm(void)
1747
+ {
1748
+ VM_ASSERT(ruby_current_vm_ptr == NULL ||
1749
+ ruby_current_execution_context_ptr == NULL ||
1750
+ rb_ec_thread_ptr(GET_EC()) == NULL ||
1751
+ rb_ec_vm_ptr(GET_EC()) == ruby_current_vm_ptr);
1752
+ return ruby_current_vm_ptr;
1753
+ }
1754
+
1755
+ static inline void
1756
+ rb_thread_set_current_raw(const rb_thread_t *th)
1757
+ {
1758
+ ruby_current_execution_context_ptr = th->ec;
1759
+ }
1760
+
1761
+ static inline void
1762
+ rb_thread_set_current(rb_thread_t *th)
1763
+ {
1764
+ if (th->vm->running_thread != th) {
1765
+ th->running_time_us = 0;
1766
+ }
1767
+ rb_thread_set_current_raw(th);
1768
+ th->vm->running_thread = th;
1769
+ }
1588
1770
 
1589
1771
  #else
1590
1772
  #error "unsupported thread model"
@@ -1597,42 +1779,46 @@ enum {
1597
1779
  TRAP_INTERRUPT_MASK = 0x08
1598
1780
  };
1599
1781
 
1600
- #define RUBY_VM_SET_TIMER_INTERRUPT(th) ATOMIC_OR((th)->interrupt_flag, TIMER_INTERRUPT_MASK)
1601
- #define RUBY_VM_SET_INTERRUPT(th) ATOMIC_OR((th)->interrupt_flag, PENDING_INTERRUPT_MASK)
1602
- #define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(th) ATOMIC_OR((th)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
1603
- #define RUBY_VM_SET_TRAP_INTERRUPT(th) ATOMIC_OR((th)->interrupt_flag, TRAP_INTERRUPT_MASK)
1604
- #define RUBY_VM_INTERRUPTED(th) ((th)->interrupt_flag & ~(th)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
1605
- #define RUBY_VM_INTERRUPTED_ANY(th) ((th)->interrupt_flag & ~(th)->interrupt_mask)
1782
+ #define RUBY_VM_SET_TIMER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TIMER_INTERRUPT_MASK)
1783
+ #define RUBY_VM_SET_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, PENDING_INTERRUPT_MASK)
1784
+ #define RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, POSTPONED_JOB_INTERRUPT_MASK)
1785
+ #define RUBY_VM_SET_TRAP_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, TRAP_INTERRUPT_MASK)
1786
+ #define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & \
1787
+ (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
1788
+ #define RUBY_VM_INTERRUPTED_ANY(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask)
1606
1789
 
1607
1790
  VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
1608
1791
  int rb_signal_buff_size(void);
1609
- void rb_signal_exec(rb_thread_t *th, int sig);
1792
+ int rb_signal_exec(rb_thread_t *th, int sig);
1610
1793
  void rb_threadptr_check_signal(rb_thread_t *mth);
1611
1794
  void rb_threadptr_signal_raise(rb_thread_t *th, int sig);
1612
1795
  void rb_threadptr_signal_exit(rb_thread_t *th);
1613
- void rb_threadptr_execute_interrupts(rb_thread_t *, int);
1796
+ int rb_threadptr_execute_interrupts(rb_thread_t *, int);
1614
1797
  void rb_threadptr_interrupt(rb_thread_t *th);
1615
1798
  void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
1616
1799
  void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
1617
1800
  void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
1618
- int rb_threadptr_pending_interrupt_active_p(rb_thread_t *th);
1619
- void rb_threadptr_error_print(rb_thread_t *volatile th, volatile VALUE errinfo);
1801
+ void rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo);
1620
1802
  void rb_execution_context_mark(const rb_execution_context_t *ec);
1803
+ void rb_fiber_close(rb_fiber_t *fib);
1804
+ void Init_native_thread(rb_thread_t *th);
1621
1805
 
1622
- #define RUBY_VM_CHECK_INTS(th) ruby_vm_check_ints(th)
1806
+ #define RUBY_VM_CHECK_INTS(ec) rb_vm_check_ints(ec)
1623
1807
  static inline void
1624
- ruby_vm_check_ints(rb_thread_t *th)
1808
+ rb_vm_check_ints(rb_execution_context_t *ec)
1625
1809
  {
1626
- if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(th))) {
1627
- rb_threadptr_execute_interrupts(th, 0);
1810
+ VM_ASSERT(ec == GET_EC());
1811
+ if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(ec))) {
1812
+ rb_threadptr_execute_interrupts(rb_ec_thread_ptr(ec), 0);
1628
1813
  }
1629
1814
  }
1630
1815
 
1631
1816
  /* tracer */
1817
+
1632
1818
  struct rb_trace_arg_struct {
1633
1819
  rb_event_flag_t event;
1634
- rb_thread_t *th;
1635
- rb_control_frame_t *cfp;
1820
+ rb_execution_context_t *ec;
1821
+ const rb_control_frame_t *cfp;
1636
1822
  VALUE self;
1637
1823
  ID id;
1638
1824
  ID called_id;
@@ -1646,50 +1832,67 @@ struct rb_trace_arg_struct {
1646
1832
  VALUE path;
1647
1833
  };
1648
1834
 
1649
- void rb_threadptr_exec_event_hooks(struct rb_trace_arg_struct *trace_arg);
1650
- void rb_threadptr_exec_event_hooks_and_pop_frame(struct rb_trace_arg_struct *trace_arg);
1835
+ void rb_hook_list_mark(rb_hook_list_t *hooks);
1836
+ void rb_hook_list_free(rb_hook_list_t *hooks);
1837
+ void rb_hook_list_connect_tracepoint(VALUE target, rb_hook_list_t *list, VALUE tpval, unsigned int target_line);
1838
+ void rb_hook_list_remove_tracepoint(rb_hook_list_t *list, VALUE tpval);
1839
+
1840
+ void rb_exec_event_hooks(struct rb_trace_arg_struct *trace_arg, rb_hook_list_t *hooks, int pop_p);
1651
1841
 
1652
- #define EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, pop_p_) do { \
1842
+ #define EXEC_EVENT_HOOK_ORIG(ec_, hooks_, flag_, self_, id_, called_id_, klass_, data_, pop_p_) do { \
1653
1843
  const rb_event_flag_t flag_arg_ = (flag_); \
1654
- if (UNLIKELY(ruby_vm_event_flags & (flag_arg_))) { \
1655
- /* defer evaluating the other arguments */ \
1656
- ruby_exec_event_hook_orig(th_, flag_arg_, self_, id_, called_id_, klass_, data_, pop_p_); \
1844
+ rb_hook_list_t *hooks_arg_ = (hooks_); \
1845
+ if (UNLIKELY((hooks_arg_)->events & (flag_arg_))) { \
1846
+ /* defer evaluating the other arguments */ \
1847
+ rb_exec_event_hook_orig(ec_, hooks_arg_, flag_arg_, self_, id_, called_id_, klass_, data_, pop_p_); \
1657
1848
  } \
1658
1849
  } while (0)
1659
1850
 
1660
1851
  static inline void
1661
- ruby_exec_event_hook_orig(rb_thread_t *const th, const rb_event_flag_t flag,
1662
- VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
1663
- {
1664
- if ((th->event_hooks.events | th->vm->event_hooks.events) & flag) {
1665
- struct rb_trace_arg_struct trace_arg;
1666
- trace_arg.event = flag;
1667
- trace_arg.th = th;
1668
- trace_arg.cfp = th->ec.cfp;
1669
- trace_arg.self = self;
1670
- trace_arg.id = id;
1671
- trace_arg.called_id = called_id;
1672
- trace_arg.klass = klass;
1673
- trace_arg.data = data;
1674
- trace_arg.path = Qundef;
1675
- trace_arg.klass_solved = 0;
1676
- if (pop_p) rb_threadptr_exec_event_hooks_and_pop_frame(&trace_arg);
1677
- else rb_threadptr_exec_event_hooks(&trace_arg);
1678
- }
1852
+ rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_event_flag_t flag,
1853
+ VALUE self, ID id, ID called_id, VALUE klass, VALUE data, int pop_p)
1854
+ {
1855
+ struct rb_trace_arg_struct trace_arg;
1856
+
1857
+ VM_ASSERT((hooks->events & flag) != 0);
1858
+
1859
+ trace_arg.event = flag;
1860
+ trace_arg.ec = ec;
1861
+ trace_arg.cfp = ec->cfp;
1862
+ trace_arg.self = self;
1863
+ trace_arg.id = id;
1864
+ trace_arg.called_id = called_id;
1865
+ trace_arg.klass = klass;
1866
+ trace_arg.data = data;
1867
+ trace_arg.path = Qundef;
1868
+ trace_arg.klass_solved = 0;
1869
+
1870
+ rb_exec_event_hooks(&trace_arg, hooks, pop_p);
1679
1871
  }
1680
1872
 
1681
- #define EXEC_EVENT_HOOK(th_, flag_, self_, id_, called_id_, klass_, data_) \
1682
- EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, 0)
1873
+ static inline rb_hook_list_t *
1874
+ rb_vm_global_hooks(const rb_execution_context_t *ec)
1875
+ {
1876
+ return &rb_ec_vm_ptr(ec)->global_hooks;
1877
+ }
1683
1878
 
1684
- #define EXEC_EVENT_HOOK_AND_POP_FRAME(th_, flag_, self_, id_, called_id_, klass_, data_) \
1685
- EXEC_EVENT_HOOK_ORIG(th_, flag_, self_, id_, called_id_, klass_, data_, 1)
1879
+ #define EXEC_EVENT_HOOK(ec_, flag_, self_, id_, called_id_, klass_, data_) \
1880
+ EXEC_EVENT_HOOK_ORIG(ec_, rb_vm_global_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 0)
1881
+
1882
+ #define EXEC_EVENT_HOOK_AND_POP_FRAME(ec_, flag_, self_, id_, called_id_, klass_, data_) \
1883
+ EXEC_EVENT_HOOK_ORIG(ec_, rb_vm_global_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 1)
1686
1884
 
1687
1885
  RUBY_SYMBOL_EXPORT_BEGIN
1688
1886
 
1689
1887
  int rb_thread_check_trap_pending(void);
1690
1888
 
1889
+ /* #define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000 */ /* from vm_core.h */
1890
+ #define RUBY_EVENT_COVERAGE_LINE 0x010000
1891
+ #define RUBY_EVENT_COVERAGE_BRANCH 0x020000
1892
+
1691
1893
  extern VALUE rb_get_coverages(void);
1692
- extern void rb_set_coverages(VALUE, int);
1894
+ extern void rb_set_coverages(VALUE, int, VALUE);
1895
+ extern void rb_clear_coverages(void);
1693
1896
  extern void rb_reset_coverages(void);
1694
1897
 
1695
1898
  void rb_postponed_job_flush(rb_vm_t *vm);