debase-ruby_core_source 0.10.10 → 0.10.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -3
  3. data/debase-ruby_core_source.gemspec +4 -4
  4. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/addr2line.h +20 -0
  5. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/builtin.h +83 -0
  6. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/build_assert/build_assert.h +40 -0
  7. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/check_type/check_type.h +63 -0
  8. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/container_of/container_of.h +142 -0
  9. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/list/list.h +788 -0
  10. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ccan/str/str.h +16 -0
  11. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/constant.h +55 -0
  12. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/debug_counter.h +457 -0
  13. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/dln.h +36 -0
  14. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/encindex.h +70 -0
  15. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/eval_intern.h +323 -0
  16. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/gc.h +140 -0
  17. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/hrtime.h +168 -0
  18. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/id.h +290 -0
  19. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/id_table.h +36 -0
  20. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/insns.inc +249 -0
  21. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/insns_info.inc +8983 -0
  22. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/array.h +119 -0
  23. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bignum.h +246 -0
  24. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/bits.h +566 -0
  25. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/class.h +174 -0
  26. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compar.h +50 -0
  27. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compile.h +32 -0
  28. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/compilers.h +108 -0
  29. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/complex.h +29 -0
  30. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/cont.h +25 -0
  31. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/dir.h +17 -0
  32. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enc.h +20 -0
  33. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/encoding.h +28 -0
  34. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enum.h +19 -0
  35. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/enumerator.h +22 -0
  36. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/error.h +124 -0
  37. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/eval.h +33 -0
  38. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/file.h +39 -0
  39. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/fixnum.h +185 -0
  40. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/gc.h +161 -0
  41. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/hash.h +241 -0
  42. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/imemo.h +243 -0
  43. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/inits.h +51 -0
  44. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/io.h +35 -0
  45. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/load.h +19 -0
  46. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/loadpath.h +17 -0
  47. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/math.h +24 -0
  48. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/missing.h +19 -0
  49. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/numeric.h +255 -0
  50. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/object.h +83 -0
  51. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/parse.h +23 -0
  52. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/proc.h +33 -0
  53. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/process.h +136 -0
  54. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/random.h +17 -0
  55. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/range.h +41 -0
  56. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/rational.h +71 -0
  57. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/re.h +29 -0
  58. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/sanitizers.h +191 -0
  59. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/scheduler.h +44 -0
  60. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/serial.h +24 -0
  61. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/signal.h +22 -0
  62. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/static_assert.h +17 -0
  63. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/string.h +140 -0
  64. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/struct.h +154 -0
  65. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/symbol.h +41 -0
  66. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/thread.h +54 -0
  67. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/time.h +35 -0
  68. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/transcode.h +21 -0
  69. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/util.h +31 -0
  70. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/variable.h +84 -0
  71. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/vm.h +136 -0
  72. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal/warnings.h +17 -0
  73. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/internal.h +107 -0
  74. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/iseq.h +305 -0
  75. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/known_errors.inc +791 -0
  76. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/method.h +245 -0
  77. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/mjit.h +220 -0
  78. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/mjit_compile.inc +8240 -0
  79. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/node.h +484 -0
  80. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/node_name.inc +210 -0
  81. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/opt_sc.inc +109 -0
  82. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/optinsn.inc +128 -0
  83. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/optunifs.inc +43 -0
  84. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/parse.h +211 -0
  85. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/probes_helper.h +44 -0
  86. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ractor_core.h +343 -0
  87. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/regenc.h +254 -0
  88. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/regint.h +938 -0
  89. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/regparse.h +370 -0
  90. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/revision.h +2 -0
  91. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_assert.h +15 -0
  92. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_atomic.h +23 -0
  93. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/siphash.h +48 -0
  94. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/symbol.h +119 -0
  95. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/thread_pthread.h +115 -0
  96. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/thread_win32.h +61 -0
  97. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/timev.h +57 -0
  98. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/transcode_data.h +138 -0
  99. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/transient_heap.h +65 -0
  100. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/variable.h +22 -0
  101. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/version.h +89 -0
  102. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm.inc +5355 -0
  103. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_call_iseq_optimized.inc +244 -0
  104. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_callinfo.h +456 -0
  105. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_core.h +2023 -0
  106. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_debug.h +116 -0
  107. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_exec.h +196 -0
  108. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_insnhelper.h +257 -0
  109. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_opts.h +73 -0
  110. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vm_sync.h +136 -0
  111. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/vmtc.inc +243 -0
  112. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/addr2line.h +20 -0
  113. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/builtin.h +84 -0
  114. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ccan/build_assert/build_assert.h +40 -0
  115. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ccan/check_type/check_type.h +63 -0
  116. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ccan/container_of/container_of.h +142 -0
  117. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ccan/list/list.h +788 -0
  118. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ccan/str/str.h +16 -0
  119. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/constant.h +55 -0
  120. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/darray.h +198 -0
  121. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/debug_counter.h +469 -0
  122. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/dln.h +31 -0
  123. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/encindex.h +70 -0
  124. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/eval_intern.h +335 -0
  125. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/gc.h +141 -0
  126. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/hrtime.h +168 -0
  127. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/id.h +293 -0
  128. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/id_table.h +36 -0
  129. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/insns.inc +249 -0
  130. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/insns_info.inc +9063 -0
  131. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/array.h +113 -0
  132. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/bignum.h +246 -0
  133. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/bits.h +565 -0
  134. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/class.h +196 -0
  135. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/compar.h +49 -0
  136. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/compile.h +35 -0
  137. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/compilers.h +107 -0
  138. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/complex.h +29 -0
  139. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/cont.h +24 -0
  140. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/dir.h +16 -0
  141. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/enc.h +19 -0
  142. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/encoding.h +30 -0
  143. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/enum.h +18 -0
  144. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/enumerator.h +21 -0
  145. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/error.h +191 -0
  146. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/eval.h +32 -0
  147. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/file.h +38 -0
  148. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/fixnum.h +184 -0
  149. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/gc.h +186 -0
  150. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/hash.h +243 -0
  151. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/imemo.h +243 -0
  152. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/inits.h +50 -0
  153. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/io.h +38 -0
  154. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/load.h +18 -0
  155. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/loadpath.h +16 -0
  156. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/math.h +23 -0
  157. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/missing.h +18 -0
  158. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/numeric.h +271 -0
  159. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/object.h +83 -0
  160. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/parse.h +23 -0
  161. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/proc.h +32 -0
  162. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/process.h +137 -0
  163. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/random.h +16 -0
  164. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/range.h +40 -0
  165. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/rational.h +72 -0
  166. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/re.h +30 -0
  167. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/sanitizers.h +190 -0
  168. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/serial.h +23 -0
  169. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/signal.h +21 -0
  170. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/static_assert.h +16 -0
  171. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/string.h +141 -0
  172. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/struct.h +153 -0
  173. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/symbol.h +41 -0
  174. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/thread.h +53 -0
  175. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/time.h +34 -0
  176. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/transcode.h +20 -0
  177. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/util.h +27 -0
  178. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/variable.h +83 -0
  179. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/vm.h +133 -0
  180. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal/warnings.h +16 -0
  181. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/internal.h +109 -0
  182. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/iseq.h +322 -0
  183. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/known_errors.inc +791 -0
  184. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/method.h +253 -0
  185. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/mjit.h +231 -0
  186. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/mjit_compile.inc +8322 -0
  187. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/node.h +510 -0
  188. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/node_name.inc +208 -0
  189. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/opt_sc.inc +109 -0
  190. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/optinsn.inc +128 -0
  191. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/optunifs.inc +43 -0
  192. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/parse.h +214 -0
  193. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/probes_helper.h +44 -0
  194. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ractor_core.h +346 -0
  195. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/regenc.h +254 -0
  196. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/regint.h +942 -0
  197. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/regparse.h +370 -0
  198. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/revision.h +2 -0
  199. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ruby_assert.h +14 -0
  200. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/ruby_atomic.h +23 -0
  201. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/siphash.h +48 -0
  202. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/symbol.h +119 -0
  203. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/thread_pthread.h +115 -0
  204. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/thread_win32.h +61 -0
  205. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/timev.h +57 -0
  206. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/transcode_data.h +138 -0
  207. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/transient_heap.h +65 -0
  208. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/variable.h +21 -0
  209. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/version.h +88 -0
  210. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm.inc +5470 -0
  211. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_call_iseq_optimized.inc +244 -0
  212. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_callinfo.h +487 -0
  213. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_core.h +2107 -0
  214. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_debug.h +124 -0
  215. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_exec.h +197 -0
  216. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_insnhelper.h +265 -0
  217. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_opts.h +73 -0
  218. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vm_sync.h +137 -0
  219. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/vmtc.inc +243 -0
  220. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/yjit.h +73 -0
  221. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/yjit_asm.h +408 -0
  222. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/yjit_codegen.h +23 -0
  223. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/yjit_core.h +307 -0
  224. data/lib/debase/ruby_core_source/ruby-3.1.0-p0/yjit_iface.h +38 -0
  225. data/lib/debase/ruby_core_source/version.rb +1 -1
  226. metadata +235 -14
@@ -0,0 +1,33 @@
1
+ #ifndef INTERNAL_EVAL_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_EVAL_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 the evaluator.
11
+ * @note There also is eval_intern.h, which is evaluator's internal
12
+ * header (related to this file, but not the same role).
13
+ */
14
+ #include "ruby/ruby.h" /* for ID */
15
+
16
+ #define id_signo ruby_static_id_signo
17
+ #define id_status ruby_static_id_status
18
+
19
+ /* eval.c */
20
+ extern ID ruby_static_id_signo;
21
+ extern ID ruby_static_id_status;
22
+ VALUE rb_refinement_module_get_refined_class(VALUE module);
23
+ void rb_class_modify_check(VALUE);
24
+ NORETURN(VALUE rb_f_raise(int argc, VALUE *argv));
25
+
26
+ /* eval_error.c */
27
+ VALUE rb_get_backtrace(VALUE info);
28
+
29
+ /* eval_jump.c */
30
+ void rb_call_end_proc(VALUE data);
31
+ void rb_mark_end_proc(void);
32
+
33
+ #endif /* INTERNAL_EVAL_H */
@@ -0,0 +1,39 @@
1
+ #ifndef INTERNAL_FILE_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_FILE_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 File.
11
+ */
12
+ #include "ruby/ruby.h" /* for VALUE */
13
+ #include "ruby/encoding.h" /* for rb_encodinng */
14
+
15
+ /* file.c */
16
+ extern const char ruby_null_device[];
17
+ VALUE rb_home_dir_of(VALUE user, VALUE result);
18
+ VALUE rb_default_home_dir(VALUE result);
19
+ VALUE rb_realpath_internal(VALUE basedir, VALUE path, int strict);
20
+ VALUE rb_check_realpath(VALUE basedir, VALUE path, rb_encoding *origenc);
21
+ void rb_file_const(const char*, VALUE);
22
+ int rb_file_load_ok(const char *);
23
+ VALUE rb_file_expand_path_fast(VALUE, VALUE);
24
+ VALUE rb_file_expand_path_internal(VALUE, VALUE, int, int, VALUE);
25
+ VALUE rb_get_path_check_to_string(VALUE);
26
+ VALUE rb_get_path_check_convert(VALUE);
27
+ int ruby_is_fd_loadable(int fd);
28
+
29
+ RUBY_SYMBOL_EXPORT_BEGIN
30
+ /* file.c (export) */
31
+ #ifdef HAVE_READLINK
32
+ VALUE rb_readlink(VALUE path, rb_encoding *enc);
33
+ #endif
34
+ #ifdef __APPLE__
35
+ VALUE rb_str_normalize_ospath(const char *ptr, long len);
36
+ #endif
37
+ RUBY_SYMBOL_EXPORT_END
38
+
39
+ #endif /* INTERNAL_FILE_H */
@@ -0,0 +1,185 @@
1
+ #ifndef INTERNAL_FIXNUM_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_FIXNUM_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 Fixnums.
11
+ */
12
+ #include "ruby/internal/config.h" /* for HAVE_LONG_LONG */
13
+ #include <limits.h> /* for CHAR_BIT */
14
+ #include "internal/compilers.h" /* for __has_builtin */
15
+ #include "ruby/internal/stdbool.h" /* for bool */
16
+ #include "ruby/intern.h" /* for rb_big_mul */
17
+ #include "ruby/ruby.h" /* for RB_FIXABLE */
18
+
19
+ #if HAVE_LONG_LONG && SIZEOF_LONG * 2 <= SIZEOF_LONG_LONG
20
+ # define DLONG LONG_LONG
21
+ # define DL2NUM(x) LL2NUM(x)
22
+ #elif defined(HAVE_INT128_T)
23
+ # define DLONG int128_t
24
+ # define DL2NUM(x) (RB_FIXABLE(x) ? LONG2FIX(x) : rb_int128t2big(x))
25
+ VALUE rb_int128t2big(int128_t n); /* in bignum.c */
26
+ #endif
27
+
28
+ static inline long rb_overflowed_fix_to_int(long x);
29
+ static inline VALUE rb_fix_plus_fix(VALUE x, VALUE y);
30
+ static inline VALUE rb_fix_minus_fix(VALUE x, VALUE y);
31
+ static inline VALUE rb_fix_mul_fix(VALUE x, VALUE y);
32
+ static inline void rb_fix_divmod_fix(VALUE x, VALUE y, VALUE *divp, VALUE *modp);
33
+ static inline VALUE rb_fix_div_fix(VALUE x, VALUE y);
34
+ static inline VALUE rb_fix_mod_fix(VALUE x, VALUE y);
35
+ static inline bool FIXNUM_POSITIVE_P(VALUE num);
36
+ static inline bool FIXNUM_NEGATIVE_P(VALUE num);
37
+ static inline bool FIXNUM_ZERO_P(VALUE num);
38
+
39
+ static inline long
40
+ rb_overflowed_fix_to_int(long x)
41
+ {
42
+ return (long)((unsigned long)(x >> 1) ^ (1LU << (SIZEOF_LONG * CHAR_BIT - 1)));
43
+ }
44
+
45
+ static inline VALUE
46
+ rb_fix_plus_fix(VALUE x, VALUE y)
47
+ {
48
+ #if !__has_builtin(__builtin_add_overflow)
49
+ long lz = FIX2LONG(x) + FIX2LONG(y);
50
+ return LONG2NUM(lz);
51
+ #else
52
+ long lz;
53
+ /* NOTE
54
+ * (1) `LONG2FIX(FIX2LONG(x)+FIX2LONG(y))`
55
+ + = `((lx*2+1)/2 + (ly*2+1)/2)*2+1`
56
+ + = `lx*2 + ly*2 + 1`
57
+ + = `(lx*2+1) + (ly*2+1) - 1`
58
+ + = `x + y - 1`
59
+ * (2) Fixnum's LSB is always 1.
60
+ * It means you can always run `x - 1` without overflow.
61
+ * (3) Of course `z = x + (y-1)` may overflow.
62
+ * At that time true value is
63
+ * * positive: 0b0 1xxx...1, and z = 0b1xxx...1
64
+ * * negative: 0b1 0xxx...1, and z = 0b0xxx...1
65
+ * To convert this true value to long,
66
+ * (a) Use arithmetic shift
67
+ * * positive: 0b11xxx...
68
+ * * negative: 0b00xxx...
69
+ * (b) invert MSB
70
+ * * positive: 0b01xxx...
71
+ * * negative: 0b10xxx...
72
+ */
73
+ if (__builtin_add_overflow((long)x, (long)y-1, &lz)) {
74
+ return rb_int2big(rb_overflowed_fix_to_int(lz));
75
+ }
76
+ else {
77
+ return (VALUE)lz;
78
+ }
79
+ #endif
80
+ }
81
+
82
+ static inline VALUE
83
+ rb_fix_minus_fix(VALUE x, VALUE y)
84
+ {
85
+ #if !__has_builtin(__builtin_sub_overflow)
86
+ long lz = FIX2LONG(x) - FIX2LONG(y);
87
+ return LONG2NUM(lz);
88
+ #else
89
+ long lz;
90
+ if (__builtin_sub_overflow((long)x, (long)y-1, &lz)) {
91
+ return rb_int2big(rb_overflowed_fix_to_int(lz));
92
+ }
93
+ else {
94
+ return (VALUE)lz;
95
+ }
96
+ #endif
97
+ }
98
+
99
+ /* arguments must be Fixnum */
100
+ static inline VALUE
101
+ rb_fix_mul_fix(VALUE x, VALUE y)
102
+ {
103
+ long lx = FIX2LONG(x);
104
+ long ly = FIX2LONG(y);
105
+ #ifdef DLONG
106
+ return DL2NUM((DLONG)lx * (DLONG)ly);
107
+ #else
108
+ if (MUL_OVERFLOW_FIXNUM_P(lx, ly)) {
109
+ return rb_big_mul(rb_int2big(lx), rb_int2big(ly));
110
+ }
111
+ else {
112
+ return LONG2FIX(lx * ly);
113
+ }
114
+ #endif
115
+ }
116
+
117
+ /*
118
+ * This behaves different from C99 for negative arguments.
119
+ * Note that div may overflow fixnum.
120
+ */
121
+ static inline void
122
+ rb_fix_divmod_fix(VALUE a, VALUE b, VALUE *divp, VALUE *modp)
123
+ {
124
+ /* assume / and % comply C99.
125
+ * ldiv(3) won't be inlined by GCC and clang.
126
+ * I expect / and % are compiled as single idiv.
127
+ */
128
+ long x = FIX2LONG(a);
129
+ long y = FIX2LONG(b);
130
+ long div, mod;
131
+ if (x == FIXNUM_MIN && y == -1) {
132
+ if (divp) *divp = LONG2NUM(-FIXNUM_MIN);
133
+ if (modp) *modp = LONG2FIX(0);
134
+ return;
135
+ }
136
+ div = x / y;
137
+ mod = x % y;
138
+ if (y > 0 ? mod < 0 : mod > 0) {
139
+ mod += y;
140
+ div -= 1;
141
+ }
142
+ if (divp) *divp = LONG2FIX(div);
143
+ if (modp) *modp = LONG2FIX(mod);
144
+ }
145
+
146
+ /* div() for Ruby
147
+ * This behaves different from C99 for negative arguments.
148
+ */
149
+ static inline VALUE
150
+ rb_fix_div_fix(VALUE x, VALUE y)
151
+ {
152
+ VALUE div;
153
+ rb_fix_divmod_fix(x, y, &div, NULL);
154
+ return div;
155
+ }
156
+
157
+ /* mod() for Ruby
158
+ * This behaves different from C99 for negative arguments.
159
+ */
160
+ static inline VALUE
161
+ rb_fix_mod_fix(VALUE x, VALUE y)
162
+ {
163
+ VALUE mod;
164
+ rb_fix_divmod_fix(x, y, NULL, &mod);
165
+ return mod;
166
+ }
167
+
168
+ static inline bool
169
+ FIXNUM_POSITIVE_P(VALUE num)
170
+ {
171
+ return (SIGNED_VALUE)num > (SIGNED_VALUE)INT2FIX(0);
172
+ }
173
+
174
+ static inline bool
175
+ FIXNUM_NEGATIVE_P(VALUE num)
176
+ {
177
+ return (SIGNED_VALUE)num < 0;
178
+ }
179
+
180
+ static inline bool
181
+ FIXNUM_ZERO_P(VALUE num)
182
+ {
183
+ return num == INT2FIX(0);
184
+ }
185
+ #endif /* INTERNAL_FIXNUM_H */
@@ -0,0 +1,161 @@
1
+ #ifndef INTERNAL_GC_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_GC_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 GC.
11
+ */
12
+ #include "ruby/internal/config.h"
13
+
14
+ #include <stddef.h> /* for size_t */
15
+
16
+ #include "internal/compilers.h" /* for __has_attribute */
17
+ #include "ruby/ruby.h" /* for rb_event_flag_t */
18
+
19
+ struct rb_execution_context_struct; /* in vm_core.h */
20
+ struct rb_objspace; /* in vm_core.h */
21
+
22
+ #ifdef NEWOBJ_OF
23
+ # undef NEWOBJ_OF
24
+ # undef RB_NEWOBJ_OF
25
+ # undef RB_OBJ_WRITE
26
+ #endif
27
+
28
+ /* optimized version of NEWOBJ() */
29
+ #define RB_NEWOBJ_OF(var, T, c, f) \
30
+ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
31
+ rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED) : \
32
+ rb_wb_unprotected_newobj_of((c), (f)))
33
+
34
+ #define RB_EC_NEWOBJ_OF(ec, var, T, c, f) \
35
+ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
36
+ rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED) : \
37
+ rb_wb_unprotected_newobj_of((c), (f)))
38
+
39
+ #define NEWOBJ_OF(var, T, c, f) RB_NEWOBJ_OF((var), T, (c), (f))
40
+ #define RB_OBJ_GC_FLAGS_MAX 6 /* used in ext/objspace */
41
+
42
+ #ifndef USE_UNALIGNED_MEMBER_ACCESS
43
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
44
+ #elif ! USE_UNALIGNED_MEMBER_ACCESS
45
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
46
+ #elif ! (__has_warning("-Waddress-of-packed-member") || GCC_VERSION_SINCE(9, 0, 0))
47
+ # define UNALIGNED_MEMBER_ACCESS(expr) (expr)
48
+ #else
49
+ # include "internal/warnings.h"
50
+ # define UNALIGNED_MEMBER_ACCESS(expr) __extension__({ \
51
+ COMPILER_WARNING_PUSH; \
52
+ COMPILER_WARNING_IGNORED(-Waddress-of-packed-member); \
53
+ __typeof__(expr) unaligned_member_access_result = (expr); \
54
+ COMPILER_WARNING_POP; \
55
+ unaligned_member_access_result; \
56
+ })
57
+ #endif
58
+
59
+ #define UNALIGNED_MEMBER_PTR(ptr, mem) UNALIGNED_MEMBER_ACCESS(&(ptr)->mem)
60
+ #define RB_OBJ_WRITE(a, slot, b) \
61
+ rb_obj_write((VALUE)(a), UNALIGNED_MEMBER_ACCESS((VALUE *)(slot)), \
62
+ (VALUE)(b), __FILE__, __LINE__)
63
+
64
+ /* gc.c */
65
+ extern VALUE *ruby_initial_gc_stress_ptr;
66
+ extern int ruby_disable_gc;
67
+ RUBY_ATTR_MALLOC void *ruby_mimmalloc(size_t size);
68
+ void ruby_mimfree(void *ptr);
69
+ void rb_objspace_set_event_hook(const rb_event_flag_t event);
70
+ VALUE rb_objspace_gc_enable(struct rb_objspace *);
71
+ VALUE rb_objspace_gc_disable(struct rb_objspace *);
72
+ void ruby_gc_set_params(void);
73
+ void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
74
+ #if __has_attribute(alloc_align)
75
+ __attribute__((__alloc_align__(1)))
76
+ #endif
77
+ RUBY_ATTR_MALLOC void *rb_aligned_malloc(size_t, size_t) RUBY_ATTR_ALLOC_SIZE((2));
78
+ size_t rb_size_mul_or_raise(size_t, size_t, VALUE); /* used in compile.c */
79
+ size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE); /* used in iseq.h */
80
+ RUBY_ATTR_MALLOC void *rb_xmalloc_mul_add(size_t, size_t, size_t);
81
+ void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
82
+ RUBY_ATTR_MALLOC void *rb_xmalloc_mul_add_mul(size_t, size_t, size_t, size_t);
83
+ RUBY_ATTR_MALLOC void *rb_xcalloc_mul_add_mul(size_t, size_t, size_t, size_t);
84
+ static inline void *ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
85
+ static inline void *ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2, 3));
86
+ static inline void ruby_sized_xfree_inlined(void *ptr, size_t size);
87
+ VALUE rb_class_allocate_instance(VALUE klass);
88
+
89
+ RUBY_SYMBOL_EXPORT_BEGIN
90
+ /* gc.c (export) */
91
+ const char *rb_objspace_data_type_name(VALUE obj);
92
+ VALUE rb_wb_protected_newobj_of(VALUE, VALUE);
93
+ VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE);
94
+ VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags);
95
+ size_t rb_obj_memsize_of(VALUE);
96
+ void rb_gc_verify_internal_consistency(void);
97
+ size_t rb_obj_gc_flags(VALUE, ID[], size_t);
98
+ void rb_gc_mark_values(long n, const VALUE *values);
99
+ void rb_gc_mark_vm_stack_values(long n, const VALUE *values);
100
+ void *ruby_sized_xrealloc(void *ptr, size_t new_size, size_t old_size) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2));
101
+ void *ruby_sized_xrealloc2(void *ptr, size_t new_count, size_t element_size, size_t old_count) RUBY_ATTR_RETURNS_NONNULL RUBY_ATTR_ALLOC_SIZE((2, 3));
102
+ void ruby_sized_xfree(void *x, size_t size);
103
+ RUBY_SYMBOL_EXPORT_END
104
+
105
+ MJIT_SYMBOL_EXPORT_BEGIN
106
+ int rb_ec_stack_check(struct rb_execution_context_struct *ec);
107
+ void rb_gc_writebarrier_remember(VALUE obj);
108
+ const char *rb_obj_info(VALUE obj);
109
+ MJIT_SYMBOL_EXPORT_END
110
+
111
+ #if defined(HAVE_MALLOC_USABLE_SIZE) || defined(HAVE_MALLOC_SIZE) || defined(_WIN32)
112
+
113
+ static inline void *
114
+ ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
115
+ {
116
+ return ruby_xrealloc(ptr, new_size);
117
+ }
118
+
119
+ static inline void *
120
+ ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
121
+ {
122
+ return ruby_xrealloc2(ptr, new_count, elemsiz);
123
+ }
124
+
125
+ static inline void
126
+ ruby_sized_xfree_inlined(void *ptr, size_t size)
127
+ {
128
+ ruby_xfree(ptr);
129
+ }
130
+
131
+ # define SIZED_REALLOC_N(x, y, z, w) REALLOC_N(x, y, z)
132
+
133
+ #else
134
+
135
+ static inline void *
136
+ ruby_sized_xrealloc_inlined(void *ptr, size_t new_size, size_t old_size)
137
+ {
138
+ return ruby_sized_xrealloc(ptr, new_size, old_size);
139
+ }
140
+
141
+ static inline void *
142
+ ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, size_t elemsiz, size_t old_count)
143
+ {
144
+ return ruby_sized_xrealloc2(ptr, new_count, elemsiz, old_count);
145
+ }
146
+
147
+ static inline void
148
+ ruby_sized_xfree_inlined(void *ptr, size_t size)
149
+ {
150
+ ruby_sized_xfree(ptr, size);
151
+ }
152
+
153
+ # define SIZED_REALLOC_N(v, T, m, n) \
154
+ ((v) = (T *)ruby_sized_xrealloc2((void *)(v), (m), sizeof(T), (n)))
155
+
156
+ #endif /* HAVE_MALLOC_USABLE_SIZE */
157
+
158
+ #define ruby_sized_xrealloc ruby_sized_xrealloc_inlined
159
+ #define ruby_sized_xrealloc2 ruby_sized_xrealloc2_inlined
160
+ #define ruby_sized_xfree ruby_sized_xfree_inlined
161
+ #endif /* INTERNAL_GC_H */
@@ -0,0 +1,241 @@
1
+ #ifndef INTERNAL_HASH_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_HASH_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 Hash.
11
+ */
12
+ #include "ruby/internal/config.h"
13
+ #include <stddef.h> /* for size_t */
14
+ #include "ruby/internal/stdbool.h" /* for bool */
15
+ #include "ruby/ruby.h" /* for struct RBasic */
16
+ #include "ruby/st.h" /* for struct st_table */
17
+
18
+ #define RHASH_AR_TABLE_MAX_SIZE SIZEOF_VALUE
19
+
20
+ struct ar_table_struct;
21
+ typedef unsigned char ar_hint_t;
22
+
23
+ enum ruby_rhash_flags {
24
+ RHASH_PASS_AS_KEYWORDS = FL_USER1, /* FL 1 */
25
+ RHASH_PROC_DEFAULT = FL_USER2, /* FL 2 */
26
+ RHASH_ST_TABLE_FLAG = FL_USER3, /* FL 3 */
27
+ RHASH_AR_TABLE_SIZE_MASK = (FL_USER4|FL_USER5|FL_USER6|FL_USER7), /* FL 4..7 */
28
+ RHASH_AR_TABLE_SIZE_SHIFT = (FL_USHIFT+4),
29
+ RHASH_AR_TABLE_BOUND_MASK = (FL_USER8|FL_USER9|FL_USER10|FL_USER11), /* FL 8..11 */
30
+ RHASH_AR_TABLE_BOUND_SHIFT = (FL_USHIFT+8),
31
+
32
+ #if USE_TRANSIENT_HEAP
33
+ RHASH_TRANSIENT_FLAG = FL_USER12, /* FL 12 */
34
+ #endif
35
+
36
+ // we can not put it in "enum" because it can exceed "int" range.
37
+ #define RHASH_LEV_MASK (FL_USER13 | FL_USER14 | FL_USER15 | /* FL 13..19 */ \
38
+ FL_USER16 | FL_USER17 | FL_USER18 | FL_USER19)
39
+
40
+ RHASH_LEV_SHIFT = (FL_USHIFT + 13),
41
+ RHASH_LEV_MAX = 127, /* 7 bits */
42
+ };
43
+
44
+ struct RHash {
45
+ struct RBasic basic;
46
+ union {
47
+ st_table *st;
48
+ struct ar_table_struct *ar; /* possibly 0 */
49
+ } as;
50
+ const VALUE ifnone;
51
+ union {
52
+ ar_hint_t ary[RHASH_AR_TABLE_MAX_SIZE];
53
+ VALUE word;
54
+ } ar_hint;
55
+ };
56
+
57
+ #define RHASH(obj) ((struct RHash *)(obj))
58
+
59
+ #ifdef RHASH_IFNONE
60
+ # undef RHASH_IFNONE
61
+ #endif
62
+
63
+ #ifdef RHASH_SIZE
64
+ # undef RHASH_SIZE
65
+ #endif
66
+
67
+ #ifdef RHASH_EMPTY_P
68
+ # undef RHASH_EMPTY_P
69
+ #endif
70
+
71
+ /* hash.c */
72
+ void rb_hash_st_table_set(VALUE hash, st_table *st);
73
+ VALUE rb_hash_default_value(VALUE hash, VALUE key);
74
+ VALUE rb_hash_set_default_proc(VALUE hash, VALUE proc);
75
+ long rb_dbl_long_hash(double d);
76
+ st_table *rb_init_identtable(void);
77
+ VALUE rb_to_hash_type(VALUE obj);
78
+ VALUE rb_hash_key_str(VALUE);
79
+ VALUE rb_hash_values(VALUE hash);
80
+ VALUE rb_hash_rehash(VALUE hash);
81
+ int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val);
82
+ VALUE rb_hash_set_pair(VALUE hash, VALUE pair);
83
+ int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
84
+ int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
85
+ int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
86
+ extern st_table *rb_hash_st_table(VALUE hash);
87
+
88
+ static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
89
+ static inline VALUE RHASH_IFNONE(VALUE h);
90
+ static inline size_t RHASH_SIZE(VALUE h);
91
+ static inline bool RHASH_EMPTY_P(VALUE h);
92
+ static inline bool RHASH_AR_TABLE_P(VALUE h);
93
+ static inline bool RHASH_ST_TABLE_P(VALUE h);
94
+ static inline struct ar_table_struct *RHASH_AR_TABLE(VALUE h);
95
+ static inline st_table *RHASH_ST_TABLE(VALUE h);
96
+ static inline size_t RHASH_ST_SIZE(VALUE h);
97
+ static inline void RHASH_ST_CLEAR(VALUE h);
98
+ static inline bool RHASH_TRANSIENT_P(VALUE h);
99
+ static inline void RHASH_SET_TRANSIENT_FLAG(VALUE h);
100
+ static inline void RHASH_UNSET_TRANSIENT_FLAG(VALUE h);
101
+
102
+ RUBY_SYMBOL_EXPORT_BEGIN
103
+ /* hash.c (export) */
104
+ VALUE rb_hash_delete_entry(VALUE hash, VALUE key);
105
+ VALUE rb_ident_hash_new(void);
106
+ int rb_hash_stlike_foreach(VALUE hash, st_foreach_callback_func *func, st_data_t arg);
107
+ RUBY_SYMBOL_EXPORT_END
108
+
109
+ MJIT_SYMBOL_EXPORT_BEGIN
110
+ VALUE rb_hash_new_with_size(st_index_t size);
111
+ VALUE rb_hash_resurrect(VALUE hash);
112
+ int rb_hash_stlike_lookup(VALUE hash, st_data_t key, st_data_t *pval);
113
+ VALUE rb_hash_keys(VALUE hash);
114
+ VALUE rb_hash_has_key(VALUE hash, VALUE key);
115
+ VALUE rb_hash_compare_by_id_p(VALUE hash);
116
+
117
+ st_table *rb_hash_tbl_raw(VALUE hash, const char *file, int line);
118
+ #define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h, __FILE__, __LINE__)
119
+ MJIT_SYMBOL_EXPORT_END
120
+
121
+ #if 0 /* for debug */
122
+
123
+ static inline bool
124
+ RHASH_AR_TABLE_P(VALUE h)
125
+ {
126
+ extern int rb_hash_ar_table_p(VALUE hash);
127
+ return rb_hash_ar_table_p(h)
128
+ }
129
+
130
+ static inline struct ar_table_struct *
131
+ RHASH_AR_TABLE(VALUE h)
132
+ {
133
+ extern struct ar_table_struct *rb_hash_ar_table(VALUE hash);
134
+ return rb_hash_ar_table(h)
135
+ }
136
+
137
+ static inline st_table *
138
+ RHASH_ST_TABLE(VALUE h)
139
+ {
140
+ return rb_hash_st_table(h)
141
+ }
142
+
143
+ #else
144
+
145
+ static inline bool
146
+ RHASH_AR_TABLE_P(VALUE h)
147
+ {
148
+ return ! FL_TEST_RAW(h, RHASH_ST_TABLE_FLAG);
149
+ }
150
+
151
+ static inline struct ar_table_struct *
152
+ RHASH_AR_TABLE(VALUE h)
153
+ {
154
+ return RHASH(h)->as.ar;
155
+ }
156
+
157
+ static inline st_table *
158
+ RHASH_ST_TABLE(VALUE h)
159
+ {
160
+ return RHASH(h)->as.st;
161
+ }
162
+
163
+ #endif
164
+
165
+ static inline VALUE
166
+ RHASH_IFNONE(VALUE h)
167
+ {
168
+ return RHASH(h)->ifnone;
169
+ }
170
+
171
+ static inline size_t
172
+ RHASH_SIZE(VALUE h)
173
+ {
174
+ if (RHASH_AR_TABLE_P(h)) {
175
+ return RHASH_AR_TABLE_SIZE_RAW(h);
176
+ }
177
+ else {
178
+ return RHASH_ST_SIZE(h);
179
+ }
180
+ }
181
+
182
+ static inline bool
183
+ RHASH_EMPTY_P(VALUE h)
184
+ {
185
+ return RHASH_SIZE(h) == 0;
186
+ }
187
+
188
+ static inline bool
189
+ RHASH_ST_TABLE_P(VALUE h)
190
+ {
191
+ return ! RHASH_AR_TABLE_P(h);
192
+ }
193
+
194
+ static inline size_t
195
+ RHASH_ST_SIZE(VALUE h)
196
+ {
197
+ return RHASH_ST_TABLE(h)->num_entries;
198
+ }
199
+
200
+ static inline void
201
+ RHASH_ST_CLEAR(VALUE h)
202
+ {
203
+ FL_UNSET_RAW(h, RHASH_ST_TABLE_FLAG);
204
+ RHASH(h)->as.ar = NULL;
205
+ }
206
+
207
+ static inline unsigned
208
+ RHASH_AR_TABLE_SIZE_RAW(VALUE h)
209
+ {
210
+ VALUE ret = FL_TEST_RAW(h, RHASH_AR_TABLE_SIZE_MASK);
211
+ ret >>= RHASH_AR_TABLE_SIZE_SHIFT;
212
+ return (unsigned)ret;
213
+ }
214
+
215
+ static inline bool
216
+ RHASH_TRANSIENT_P(VALUE h)
217
+ {
218
+ #if USE_TRANSIENT_HEAP
219
+ return FL_TEST_RAW(h, RHASH_TRANSIENT_FLAG);
220
+ #else
221
+ return false;
222
+ #endif
223
+ }
224
+
225
+ static inline void
226
+ RHASH_SET_TRANSIENT_FLAG(VALUE h)
227
+ {
228
+ #if USE_TRANSIENT_HEAP
229
+ FL_SET_RAW(h, RHASH_TRANSIENT_FLAG);
230
+ #endif
231
+ }
232
+
233
+ static inline void
234
+ RHASH_UNSET_TRANSIENT_FLAG(VALUE h)
235
+ {
236
+ #if USE_TRANSIENT_HEAP
237
+ FL_UNSET_RAW(h, RHASH_TRANSIENT_FLAG);
238
+ #endif
239
+ }
240
+
241
+ #endif /* INTERNAL_HASH_H */