debase-ruby_core_source 4.0.1 → 4.1.0.preview1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/addr2line.h +22 -0
  4. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/builtin.h +127 -0
  5. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/build_assert/build_assert.h +40 -0
  6. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/check_type/check_type.h +63 -0
  7. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/container_of/container_of.h +142 -0
  8. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/list/list.h +791 -0
  9. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/str/str.h +17 -0
  10. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/constant.h +53 -0
  11. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/darray.h +295 -0
  12. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/debug_counter.h +428 -0
  13. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/dln.h +33 -0
  14. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/encindex.h +70 -0
  15. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/eval_intern.h +356 -0
  16. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/hrtime.h +237 -0
  17. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/id.h +365 -0
  18. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/id_table.h +74 -0
  19. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/insns.inc +315 -0
  20. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/insns_info.inc +11637 -0
  21. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/array.h +158 -0
  22. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/basic_operators.h +67 -0
  23. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/bignum.h +249 -0
  24. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/bits.h +647 -0
  25. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/box.h +103 -0
  26. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/class.h +797 -0
  27. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/cmdlineopt.h +64 -0
  28. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/compar.h +30 -0
  29. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/compile.h +34 -0
  30. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/compilers.h +104 -0
  31. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/complex.h +29 -0
  32. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/concurrent_set.h +21 -0
  33. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/cont.h +33 -0
  34. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/coverage.h +51 -0
  35. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/dir.h +16 -0
  36. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/enc.h +19 -0
  37. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/encoding.h +40 -0
  38. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/enum.h +18 -0
  39. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/enumerator.h +21 -0
  40. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/error.h +287 -0
  41. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/eval.h +43 -0
  42. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/file.h +40 -0
  43. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/fixnum.h +185 -0
  44. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/gc.h +411 -0
  45. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/hash.h +220 -0
  46. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/imemo.h +302 -0
  47. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/inits.h +54 -0
  48. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/io.h +167 -0
  49. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/io_buffer.h +36 -0
  50. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/jit.h +23 -0
  51. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/load.h +20 -0
  52. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/loadpath.h +16 -0
  53. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/marshal.h +17 -0
  54. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/math.h +23 -0
  55. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/missing.h +19 -0
  56. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/numeric.h +326 -0
  57. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/object.h +88 -0
  58. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/objspace.h +24 -0
  59. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/parse.h +131 -0
  60. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/proc.h +34 -0
  61. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/process.h +124 -0
  62. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/ractor.h +9 -0
  63. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/random.h +17 -0
  64. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/range.h +46 -0
  65. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/rational.h +92 -0
  66. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/re.h +87 -0
  67. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/ruby_parser.h +109 -0
  68. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/sanitizers.h +346 -0
  69. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/scheduler.h +7 -0
  70. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/serial.h +23 -0
  71. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/set.h +20 -0
  72. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/set_table.h +77 -0
  73. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/signal.h +25 -0
  74. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/simd.h +18 -0
  75. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/st.h +32 -0
  76. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/static_assert.h +16 -0
  77. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/string.h +240 -0
  78. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/struct.h +120 -0
  79. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/symbol.h +46 -0
  80. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/thread.h +108 -0
  81. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/time.h +34 -0
  82. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/transcode.h +23 -0
  83. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/util.h +27 -0
  84. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/variable.h +81 -0
  85. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/vm.h +144 -0
  86. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/vm_map.h +95 -0
  87. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/warnings.h +16 -0
  88. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal.h +106 -0
  89. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/iseq.h +439 -0
  90. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/known_errors.inc +1419 -0
  91. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/method.h +279 -0
  92. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/node.h +122 -0
  93. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/node_name.inc +224 -0
  94. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/optinsn.inc +128 -0
  95. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/optunifs.inc +41 -0
  96. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parse.h +246 -0
  97. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_bits.h +647 -0
  98. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_node.h +32 -0
  99. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_st.h +161 -0
  100. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_value.h +116 -0
  101. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/arena.h +37 -0
  102. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/ast.h +10371 -0
  103. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/buffer.h +52 -0
  104. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/comments.h +43 -0
  105. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/accel.h +19 -0
  106. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/align.h +36 -0
  107. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/assume.h +25 -0
  108. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/exported.h +24 -0
  109. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/fallthrough.h +22 -0
  110. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/filesystem.h +32 -0
  111. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/flex_array.h +19 -0
  112. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/force_inline.h +21 -0
  113. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/format.h +25 -0
  114. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/inline.h +17 -0
  115. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/nodiscard.h +22 -0
  116. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/nonnull.h +18 -0
  117. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/unused.h +18 -0
  118. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/constant_pool.h +81 -0
  119. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/diagnostic.h +93 -0
  120. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/errors_format.h +53 -0
  121. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/excludes.h +29 -0
  122. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/extension.h +19 -0
  123. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/integer.h +41 -0
  124. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/allocator.h +68 -0
  125. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/allocator_debug.h +88 -0
  126. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/arena.h +108 -0
  127. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/bit.h +42 -0
  128. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/buffer.h +91 -0
  129. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/char.h +139 -0
  130. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/comments.h +20 -0
  131. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/constant_pool.h +152 -0
  132. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/diagnostic.h +389 -0
  133. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/encoding.h +242 -0
  134. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/integer.h +68 -0
  135. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/isinf.h +16 -0
  136. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/line_offset_list.h +34 -0
  137. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/list.h +62 -0
  138. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/magic_comments.h +23 -0
  139. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/memchr.h +15 -0
  140. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/node.h +32 -0
  141. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/options.h +224 -0
  142. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/parser.h +971 -0
  143. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/regexp.h +42 -0
  144. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/serialize.h +39 -0
  145. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/source.h +72 -0
  146. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/static_literals.h +100 -0
  147. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/stringy.h +35 -0
  148. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/strncasecmp.h +18 -0
  149. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/strpbrk.h +33 -0
  150. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/tokens.h +11 -0
  151. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/json.h +32 -0
  152. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/line_offset_list.h +61 -0
  153. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/magic_comments.h +35 -0
  154. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/node.h +94 -0
  155. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/options.h +335 -0
  156. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/parser.h +348 -0
  157. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/prettyprint.h +31 -0
  158. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/prism.h +131 -0
  159. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/serialize.h +115 -0
  160. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/source.h +155 -0
  161. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/stream.h +28 -0
  162. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/string_query.h +63 -0
  163. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/stringy.h +72 -0
  164. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/version.h +38 -0
  165. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism_compile.h +204 -0
  166. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism_xallocator.h +6 -0
  167. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/probes_helper.h +42 -0
  168. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ractor_core.h +421 -0
  169. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/regenc.h +261 -0
  170. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/regint.h +983 -0
  171. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/regparse.h +371 -0
  172. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/revision.h +5 -0
  173. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ruby_assert.h +14 -0
  174. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ruby_atomic.h +115 -0
  175. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/rubyparser.h +1389 -0
  176. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/shape.h +733 -0
  177. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/siphash.h +48 -0
  178. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/symbol.h +116 -0
  179. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_none.h +25 -0
  180. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_pthread.h +63 -0
  181. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_sched.h +271 -0
  182. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_win32.h +48 -0
  183. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/timev.h +58 -0
  184. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/transcode_data.h +138 -0
  185. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/variable.h +26 -0
  186. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/version.h +69 -0
  187. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm.inc +6457 -0
  188. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_call_iseq_optimized.inc +244 -0
  189. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_callinfo.h +688 -0
  190. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_core.h +2509 -0
  191. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_debug.h +124 -0
  192. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_exec.h +202 -0
  193. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_insnhelper.h +280 -0
  194. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_opts.h +65 -0
  195. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_sync.h +160 -0
  196. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vmtc.inc +302 -0
  197. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/yjit.h +87 -0
  198. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/zjit.h +221 -0
  199. data/lib/debase/ruby_core_source/version.rb +1 -1
  200. metadata +2930 -2724
@@ -0,0 +1,356 @@
1
+ #ifndef RUBY_EVAL_INTERN_H
2
+ #define RUBY_EVAL_INTERN_H
3
+
4
+ #include "ruby/ruby.h"
5
+ #include "vm_core.h"
6
+ #include "zjit.h"
7
+
8
+ static inline void
9
+ vm_passed_block_handler_set(rb_execution_context_t *ec, VALUE block_handler)
10
+ {
11
+ vm_block_handler_verify(block_handler);
12
+ ec->passed_block_handler = block_handler;
13
+ }
14
+
15
+ static inline void
16
+ pass_passed_block_handler(rb_execution_context_t *ec)
17
+ {
18
+ VALUE block_handler = rb_vm_frame_block_handler(ec->cfp);
19
+ vm_passed_block_handler_set(ec, block_handler);
20
+ VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_PASSED);
21
+ }
22
+
23
+ #define PASS_PASSED_BLOCK_HANDLER_EC(ec) pass_passed_block_handler(ec)
24
+ #define PASS_PASSED_BLOCK_HANDLER() pass_passed_block_handler(GET_EC())
25
+
26
+ #ifdef HAVE_STDLIB_H
27
+ #include <stdlib.h>
28
+ #endif
29
+ #ifndef EXIT_SUCCESS
30
+ #define EXIT_SUCCESS 0
31
+ #endif
32
+ #ifndef EXIT_FAILURE
33
+ #define EXIT_FAILURE 1
34
+ #endif
35
+
36
+ #include <stdio.h>
37
+ #if defined(__wasm__) && !defined(__EMSCRIPTEN__)
38
+ # include "wasm/setjmp.h"
39
+ #else
40
+ # include <setjmp.h>
41
+ #endif
42
+
43
+ #ifdef __APPLE__
44
+ # ifdef HAVE_CRT_EXTERNS_H
45
+ # include <crt_externs.h>
46
+ # else
47
+ # include "missing/crt_externs.h"
48
+ # endif
49
+ #endif
50
+
51
+ #ifndef HAVE_STRING_H
52
+ char *strrchr(const char *, const char);
53
+ #endif
54
+
55
+ #ifdef HAVE_UNISTD_H
56
+ #include <unistd.h>
57
+ #endif
58
+
59
+ #ifdef HAVE_NET_SOCKET_H
60
+ #include <net/socket.h>
61
+ #endif
62
+
63
+ #define ruby_setjmp(env) RUBY_SETJMP(env)
64
+ #define ruby_longjmp(env,val) RUBY_LONGJMP((env),(val))
65
+ #ifdef __CYGWIN__
66
+ # ifndef _setjmp
67
+ int _setjmp(jmp_buf);
68
+ # endif
69
+ # ifndef _longjmp
70
+ NORETURN(void _longjmp(jmp_buf, int));
71
+ # endif
72
+ #endif
73
+
74
+ #include <sys/types.h>
75
+ #include <signal.h>
76
+ #include <errno.h>
77
+
78
+ #ifdef HAVE_SYS_SELECT_H
79
+ #include <sys/select.h>
80
+ #endif
81
+
82
+ /*
83
+ Solaris sys/select.h switches select to select_large_fdset to support larger
84
+ file descriptors if FD_SETSIZE is larger than 1024 on 32bit environment.
85
+ But Ruby doesn't change FD_SETSIZE because fd_set is allocated dynamically.
86
+ So following definition is required to use select_large_fdset.
87
+ */
88
+ #ifdef HAVE_SELECT_LARGE_FDSET
89
+ #define select(n, r, w, e, t) select_large_fdset((n), (r), (w), (e), (t))
90
+ extern int select_large_fdset(int, fd_set *, fd_set *, fd_set *, struct timeval *);
91
+ #endif
92
+
93
+ #ifdef HAVE_SYS_PARAM_H
94
+ #include <sys/param.h>
95
+ #endif
96
+
97
+ #include <sys/stat.h>
98
+
99
+ #define EC_PUSH_TAG(ec) do { \
100
+ rb_execution_context_t * const _ec = (ec); \
101
+ struct rb_vm_tag _tag; \
102
+ _tag.state = TAG_NONE; \
103
+ _tag.tag = Qundef; \
104
+ _tag.prev = _ec->tag; \
105
+ _tag.lock_rec = rb_ec_vm_lock_rec(_ec); \
106
+ EC_SAVE_TAG_CFP(_tag, _ec); \
107
+ rb_vm_tag_jmpbuf_init(&_tag.buf); \
108
+
109
+ // Remember the CFP and whether it was already running in ZJIT as of
110
+ // EC_PUSH_TAG. When a C method does longjmp inside it, the target CFP may not
111
+ // be equal to the VM_FRAME_FLAG_FINISH frame. If its ZJIT frame predates this
112
+ // tag, its native stack survives the jump and should not be materialized.
113
+ #if USE_ZJIT
114
+ # define EC_SAVE_TAG_CFP(_tag, _ec) \
115
+ _tag.cfp = _ec->cfp; \
116
+ _tag.zjit_frame_active = CFP_ZJIT_FRAME_P(_ec->cfp)
117
+ #else
118
+ # define EC_SAVE_TAG_CFP(_tag, _ec)
119
+ #endif
120
+
121
+ #define EC_POP_TAG() \
122
+ _ec->tag = _tag.prev; \
123
+ rb_vm_tag_jmpbuf_deinit(&_tag.buf); \
124
+ } while (0)
125
+
126
+ #define EC_TMPPOP_TAG() \
127
+ _ec->tag = _tag.prev
128
+
129
+ #define EC_REPUSH_TAG() (void)(_ec->tag = &_tag)
130
+
131
+ #if defined __clang__
132
+ /* This macro prevents Clang from dumping core in EC_EXEC_TAG().
133
+ * (I confirmed Clang 4.0.1 and 5.0.0.)
134
+ */
135
+ # define VAR_FROM_MEMORY(var) __extension__(*(__typeof__(var) volatile *)&(var))
136
+ # define VAR_INITIALIZED(var) ((var) = VAR_FROM_MEMORY(var))
137
+ # define VAR_NOCLOBBERED(var) volatile var
138
+ #else
139
+ # define VAR_FROM_MEMORY(var) (var)
140
+ # define VAR_INITIALIZED(var) ((void)&(var))
141
+ # define VAR_NOCLOBBERED(var) var
142
+ #endif
143
+
144
+ static inline void
145
+ rb_ec_vm_lock_rec_check(const rb_execution_context_t *ec, unsigned int recorded_lock_rec)
146
+ {
147
+ unsigned int current_lock_rec = rb_ec_vm_lock_rec(ec);
148
+ if (current_lock_rec != recorded_lock_rec) {
149
+ rb_ec_vm_lock_rec_release(ec, recorded_lock_rec, current_lock_rec);
150
+ }
151
+ }
152
+
153
+ /* clear ec->tag->state, and return the value */
154
+ static inline int
155
+ rb_ec_tag_state(const rb_execution_context_t *ec)
156
+ {
157
+ struct rb_vm_tag *tag = ec->tag;
158
+ enum ruby_tag_type state = tag->state;
159
+ tag->state = TAG_NONE;
160
+ rb_ec_vm_lock_rec_check(ec, tag->lock_rec);
161
+ RBIMPL_ASSUME(state > TAG_NONE);
162
+ RBIMPL_ASSUME(state <= TAG_FATAL);
163
+ return state;
164
+ }
165
+
166
+ NORETURN(static inline void rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st));
167
+ static inline void
168
+ rb_ec_tag_jump(const rb_execution_context_t *ec, enum ruby_tag_type st)
169
+ {
170
+ RUBY_ASSERT(st > TAG_NONE && st <= TAG_FATAL, ": Invalid tag jump: %d", (int)st);
171
+ #if USE_ZJIT
172
+ rb_zjit_materialize_frames_for_longjmp(ec, ec->cfp);
173
+ #endif
174
+ ec->tag->state = st;
175
+ ruby_longjmp(RB_VM_TAG_JMPBUF_GET(ec->tag->buf), 1);
176
+ }
177
+
178
+ /*
179
+ setjmp() in assignment expression rhs is undefined behavior
180
+ [ISO/IEC 9899:1999] 7.13.1.1
181
+ */
182
+ #define EC_EXEC_TAG() \
183
+ (UNLIKELY(ruby_setjmp(RB_VM_TAG_JMPBUF_GET(_tag.buf))) ? rb_ec_tag_state(VAR_FROM_MEMORY(_ec)) : (EC_REPUSH_TAG(), 0))
184
+
185
+ #define EC_JUMP_TAG(ec, st) rb_ec_tag_jump(ec, st)
186
+
187
+ #define INTERNAL_EXCEPTION_P(exc) FIXNUM_P(exc)
188
+
189
+ /* CREF operators */
190
+
191
+ #define CREF_FL_PUSHED_BY_EVAL IMEMO_FL_USER1
192
+ #define CREF_FL_OMOD_SHARED IMEMO_FL_USER2
193
+ #define CREF_FL_SINGLETON IMEMO_FL_USER3
194
+ #define CREF_FL_DYNAMIC_CREF IMEMO_FL_USER4
195
+ #define CREF_FL_REFINED_PROC IMEMO_FL_USER5
196
+
197
+ static inline int CREF_SINGLETON(const rb_cref_t *cref);
198
+
199
+ static inline VALUE
200
+ CREF_CLASS(const rb_cref_t *cref)
201
+ {
202
+ if (CREF_SINGLETON(cref)) {
203
+ return CLASS_OF(cref->klass_or_self);
204
+ }
205
+ else {
206
+ return cref->klass_or_self;
207
+ }
208
+ }
209
+
210
+ static inline VALUE
211
+ CREF_CLASS_FOR_DEFINITION(const rb_cref_t *cref)
212
+ {
213
+ if (CREF_SINGLETON(cref)) {
214
+ return rb_singleton_class(cref->klass_or_self);
215
+ }
216
+ else {
217
+ return cref->klass_or_self;
218
+ }
219
+ }
220
+
221
+ static inline rb_cref_t *
222
+ CREF_NEXT(const rb_cref_t *cref)
223
+ {
224
+ return cref->next;
225
+ }
226
+
227
+ static inline const rb_scope_visibility_t *
228
+ CREF_SCOPE_VISI(const rb_cref_t *cref)
229
+ {
230
+ return &cref->scope_visi;
231
+ }
232
+
233
+ static inline VALUE
234
+ CREF_REFINEMENTS(const rb_cref_t *cref)
235
+ {
236
+ return cref->refinements;
237
+ }
238
+
239
+ static inline void
240
+ CREF_REFINEMENTS_SET(rb_cref_t *cref, VALUE refs)
241
+ {
242
+ RB_OBJ_WRITE(cref, &cref->refinements, refs);
243
+ }
244
+
245
+ static inline int
246
+ CREF_PUSHED_BY_EVAL(const rb_cref_t *cref)
247
+ {
248
+ return cref->flags & CREF_FL_PUSHED_BY_EVAL;
249
+ }
250
+
251
+ static inline void
252
+ CREF_PUSHED_BY_EVAL_SET(rb_cref_t *cref)
253
+ {
254
+ cref->flags |= CREF_FL_PUSHED_BY_EVAL;
255
+ }
256
+
257
+ static inline int
258
+ CREF_SINGLETON(const rb_cref_t *cref)
259
+ {
260
+ return cref->flags & CREF_FL_SINGLETON;
261
+ }
262
+
263
+ static inline void
264
+ CREF_SINGLETON_SET(rb_cref_t *cref)
265
+ {
266
+ cref->flags |= CREF_FL_SINGLETON;
267
+ }
268
+
269
+ static inline int
270
+ CREF_OMOD_SHARED(const rb_cref_t *cref)
271
+ {
272
+ return cref->flags & CREF_FL_OMOD_SHARED;
273
+ }
274
+
275
+ static inline void
276
+ CREF_OMOD_SHARED_SET(rb_cref_t *cref)
277
+ {
278
+ cref->flags |= CREF_FL_OMOD_SHARED;
279
+ }
280
+
281
+ static inline int
282
+ CREF_DYNAMIC(const rb_cref_t *cref)
283
+ {
284
+ return cref->flags & CREF_FL_DYNAMIC_CREF;
285
+ }
286
+
287
+ static inline void
288
+ CREF_DYNAMIC_SET(rb_cref_t *cref)
289
+ {
290
+ cref->flags |= CREF_FL_DYNAMIC_CREF;
291
+ }
292
+
293
+ static inline void
294
+ CREF_OMOD_SHARED_UNSET(rb_cref_t *cref)
295
+ {
296
+ cref->flags &= ~CREF_FL_OMOD_SHARED;
297
+ }
298
+
299
+ static inline int
300
+ CREF_REFINED_PROC(const rb_cref_t *cref)
301
+ {
302
+ return cref->flags & CREF_FL_REFINED_PROC;
303
+ }
304
+
305
+ static inline void
306
+ CREF_REFINED_PROC_SET(rb_cref_t *cref)
307
+ {
308
+ cref->flags |= CREF_FL_REFINED_PROC;
309
+ }
310
+
311
+ enum {
312
+ RAISED_EXCEPTION = 1,
313
+ RAISED_STACKOVERFLOW = 2,
314
+ RAISED_NOMEMORY = 4
315
+ };
316
+ #define rb_ec_raised_set(ec, f) ((ec)->raised_flag |= (f))
317
+ #define rb_ec_raised_reset(ec, f) ((ec)->raised_flag &= ~(f))
318
+ #define rb_ec_raised_p(ec, f) (((ec)->raised_flag & (f)) != 0)
319
+ #define rb_ec_raised_clear(ec) ((ec)->raised_flag = 0)
320
+ int rb_ec_set_raised(rb_execution_context_t *ec);
321
+ int rb_ec_reset_raised(rb_execution_context_t *ec);
322
+ int rb_ec_stack_check(rb_execution_context_t *ec);
323
+
324
+ VALUE rb_f_eval(int argc, const VALUE *argv, VALUE self);
325
+ VALUE rb_make_exception(int argc, const VALUE *argv);
326
+
327
+ NORETURN(void rb_method_name_error(VALUE, VALUE));
328
+
329
+ NORETURN(void rb_fiber_start(rb_fiber_t*));
330
+
331
+ NORETURN(void rb_print_undef(VALUE, ID, rb_method_visibility_t));
332
+ NORETURN(void rb_print_undef_str(VALUE, VALUE));
333
+ NORETURN(void rb_print_inaccessible(VALUE, ID, rb_method_visibility_t));
334
+ NORETURN(void rb_vm_localjump_error(const char *,VALUE, int));
335
+ NORETURN(void rb_vm_jump_tag_but_local_jump(enum ruby_tag_type));
336
+
337
+ VALUE rb_vm_make_jump_tag_but_local_jump(enum ruby_tag_type state, VALUE val);
338
+ rb_cref_t *rb_vm_cref(void);
339
+ rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void);
340
+ VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename);
341
+ VALUE rb_vm_call_cfunc_in_box(VALUE recv, VALUE (*func)(VALUE, VALUE), VALUE arg1, VALUE arg2, VALUE filename, const rb_box_t *box);
342
+ void rb_vm_frame_flag_set_box_require(const rb_execution_context_t *ec);
343
+ const rb_box_t *rb_vm_current_box(const rb_execution_context_t *ec);
344
+ const rb_box_t *rb_vm_caller_box(const rb_execution_context_t *ec);
345
+ const rb_box_t *rb_vm_loading_box(const rb_execution_context_t *ec);
346
+ void rb_vm_set_progname(VALUE filename);
347
+ VALUE rb_vm_cbase(void);
348
+
349
+ /* vm_backtrace.c */
350
+ #define RUBY_BACKTRACE_START 0
351
+ #define RUBY_ALL_BACKTRACE_LINES -1
352
+ VALUE rb_ec_backtrace_object(const rb_execution_context_t *ec);
353
+ VALUE rb_ec_backtrace_str_ary(const rb_execution_context_t *ec, long lev, long n);
354
+ VALUE rb_ec_backtrace_location_ary(const rb_execution_context_t *ec, long lev, long n, bool skip_internal);
355
+
356
+ #endif /* RUBY_EVAL_INTERN_H */
@@ -0,0 +1,237 @@
1
+ #ifndef RB_HRTIME_H
2
+ #define RB_HRTIME_H
3
+ #include "ruby/ruby.h"
4
+ #include <time.h>
5
+ #if defined(HAVE_SYS_TIME_H)
6
+ # include <sys/time.h>
7
+ #endif
8
+
9
+ #include "internal/compilers.h"
10
+
11
+ /*
12
+ * Hi-res monotonic clock. It is currently nsec resolution, which has over
13
+ * 500 years of range (with an unsigned 64-bit integer). Developers
14
+ * targeting small systems may try 32-bit and low-resolution (milliseconds).
15
+ *
16
+ * TBD: Is nsec even necessary? usec resolution seems enough for userspace
17
+ * and it'll be suitable for use with devices lasting over 500,000 years
18
+ * (maybe some devices designed for long-term space travel)
19
+ *
20
+ * Current API:
21
+ *
22
+ * * rb_hrtime_now - current clock value (monotonic if available)
23
+ * * rb_hrtime_mul - multiply with overflow check
24
+ * * rb_hrtime_add - add with overflow check
25
+ * * rb_timeval2hrtime - convert from timeval
26
+ * * rb_timespec2hrtime - convert from timespec
27
+ * * rb_msec2hrtime - convert from millisecond
28
+ * * rb_sec2hrtime - convert from time_t (seconds)
29
+ * * rb_hrtime2timeval - convert to timeval
30
+ * * rb_hrtime2timespec - convert to timespec
31
+ *
32
+ * Note: no conversion to milliseconds is provided here because different
33
+ * functions have different limits (e.g. epoll_wait vs w32_wait_events).
34
+ * So we provide RB_HRTIME_PER_MSEC and similar macros for implementing
35
+ * this for each use case.
36
+ */
37
+ #define RB_HRTIME_PER_USEC ((rb_hrtime_t)1000)
38
+ #define RB_HRTIME_PER_MSEC (RB_HRTIME_PER_USEC * (rb_hrtime_t)1000)
39
+ #define RB_HRTIME_PER_SEC (RB_HRTIME_PER_MSEC * (rb_hrtime_t)1000)
40
+ #define RB_HRTIME_MAX UINT64_MAX
41
+ #define RB_HRTIME_MIN ((rb_hrtime_t)0)
42
+
43
+ /*
44
+ * Lets try to support time travelers. Lets assume anybody with a time machine
45
+ * also has access to a modern gcc or clang with 128-bit int support
46
+ */
47
+ #ifdef MY_RUBY_BUILD_MAY_TIME_TRAVEL
48
+ typedef int128_t rb_hrtime_t;
49
+ #else
50
+ typedef uint64_t rb_hrtime_t;
51
+ #endif
52
+
53
+ /* thread.c */
54
+ /* returns the value of the monotonic clock (if available) */
55
+ rb_hrtime_t rb_hrtime_now(void);
56
+
57
+ /*
58
+ * multiply @a and @b with overflow check and return the
59
+ * (clamped to RB_HRTIME_MAX) result.
60
+ */
61
+ static inline rb_hrtime_t
62
+ rb_hrtime_mul(rb_hrtime_t a, rb_hrtime_t b)
63
+ {
64
+ rb_hrtime_t c;
65
+
66
+ #ifdef ckd_mul
67
+ if (ckd_mul(&c, a, b))
68
+ return RB_HRTIME_MAX;
69
+
70
+ #elif __has_builtin(__builtin_mul_overflow)
71
+ if (__builtin_mul_overflow(a, b, &c))
72
+ return RB_HRTIME_MAX;
73
+ #else
74
+ if (b != 0 && a > RB_HRTIME_MAX / b) /* overflow */
75
+ return RB_HRTIME_MAX;
76
+ c = a * b;
77
+ #endif
78
+ return c;
79
+ }
80
+
81
+ /*
82
+ * add @a and @b with overflow check and return the
83
+ * (clamped to RB_HRTIME_MAX) result.
84
+ */
85
+ static inline rb_hrtime_t
86
+ rb_hrtime_add(rb_hrtime_t a, rb_hrtime_t b)
87
+ {
88
+ rb_hrtime_t c;
89
+
90
+ #ifdef ckd_add
91
+ if (ckd_add(&c, a, b))
92
+ return RB_HRTIME_MAX;
93
+
94
+ #elif __has_builtin(__builtin_add_overflow)
95
+ if (__builtin_add_overflow(a, b, &c))
96
+ return RB_HRTIME_MAX;
97
+ #else
98
+ c = a + b;
99
+ if (c < a) /* overflow */
100
+ return RB_HRTIME_MAX;
101
+ #endif
102
+ return c;
103
+ }
104
+
105
+ static inline rb_hrtime_t
106
+ rb_hrtime_sub(rb_hrtime_t a, rb_hrtime_t b)
107
+ {
108
+ if (a < b) {
109
+ return RB_HRTIME_MIN;
110
+ }
111
+ return a - b;
112
+ }
113
+
114
+ /*
115
+ * convert a timeval struct to rb_hrtime_t, clamping at RB_HRTIME_MAX
116
+ */
117
+ static inline rb_hrtime_t
118
+ rb_timeval2hrtime(const struct timeval *tv)
119
+ {
120
+ rb_hrtime_t s = rb_hrtime_mul((rb_hrtime_t)tv->tv_sec, RB_HRTIME_PER_SEC);
121
+ rb_hrtime_t u = rb_hrtime_mul((rb_hrtime_t)tv->tv_usec, RB_HRTIME_PER_USEC);
122
+
123
+ return rb_hrtime_add(s, u);
124
+ }
125
+
126
+ /*
127
+ * convert a timespec struct to rb_hrtime_t, clamping at RB_HRTIME_MAX
128
+ */
129
+ static inline rb_hrtime_t
130
+ rb_timespec2hrtime(const struct timespec *ts)
131
+ {
132
+ rb_hrtime_t s = rb_hrtime_mul((rb_hrtime_t)ts->tv_sec, RB_HRTIME_PER_SEC);
133
+
134
+ return rb_hrtime_add(s, (rb_hrtime_t)ts->tv_nsec);
135
+ }
136
+
137
+ /*
138
+ * convert a millisecond value to rb_hrtime_t, clamping at RB_HRTIME_MAX
139
+ */
140
+ static inline rb_hrtime_t
141
+ rb_msec2hrtime(unsigned long msec)
142
+ {
143
+ return rb_hrtime_mul((rb_hrtime_t)msec, RB_HRTIME_PER_MSEC);
144
+ }
145
+
146
+ /*
147
+ * convert a time_t value to rb_hrtime_t, clamping at RB_HRTIME_MAX
148
+ * Negative values will be clamped at 0.
149
+ */
150
+ static inline rb_hrtime_t
151
+ rb_sec2hrtime(time_t sec)
152
+ {
153
+ if (sec <= 0) return 0;
154
+
155
+ return rb_hrtime_mul((rb_hrtime_t)sec, RB_HRTIME_PER_SEC);
156
+ }
157
+
158
+ /*
159
+ * convert a rb_hrtime_t value to a timespec, suitable for calling
160
+ * functions like ppoll(2) or kevent(2)
161
+ */
162
+ static inline struct timespec *
163
+ rb_hrtime2timespec(struct timespec *ts, const rb_hrtime_t *hrt)
164
+ {
165
+ if (hrt) {
166
+ ts->tv_sec = (time_t)(*hrt / RB_HRTIME_PER_SEC);
167
+ ts->tv_nsec = (int32_t)(*hrt % RB_HRTIME_PER_SEC);
168
+ return ts;
169
+ }
170
+ return 0;
171
+ }
172
+
173
+ /*
174
+ * convert a rb_hrtime_t value to a timeval, suitable for calling
175
+ * functions like select(2)
176
+ */
177
+ static inline struct timeval *
178
+ rb_hrtime2timeval(struct timeval *tv, const rb_hrtime_t *hrt)
179
+ {
180
+ if (hrt) {
181
+ tv->tv_sec = (time_t)(*hrt / RB_HRTIME_PER_SEC);
182
+ tv->tv_usec = (int32_t)((*hrt % RB_HRTIME_PER_SEC)/RB_HRTIME_PER_USEC);
183
+
184
+ return tv;
185
+ }
186
+ return 0;
187
+ }
188
+
189
+ #include "internal/warnings.h"
190
+ #include "internal/time.h"
191
+
192
+ /*
193
+ * Back when we used "struct timeval", not all platforms implemented
194
+ * tv_sec as time_t. Nowadays we use "struct timespec" and tv_sec
195
+ * seems to be implemented more consistently across platforms.
196
+ * At least other parts of our code hasn't had to deal with non-time_t
197
+ * tv_sec in timespec...
198
+ */
199
+ #define TIMESPEC_SEC_MAX TIMET_MAX
200
+ #define TIMESPEC_SEC_MIN TIMET_MIN
201
+
202
+ COMPILER_WARNING_PUSH
203
+ #if __has_warning("-Wimplicit-int-float-conversion")
204
+ COMPILER_WARNING_IGNORED(-Wimplicit-int-float-conversion)
205
+ #elif defined(_MSC_VER)
206
+ /* C4305: 'initializing': truncation from '__int64' to 'const double' */
207
+ COMPILER_WARNING_IGNORED(4305)
208
+ #endif
209
+ static const double TIMESPEC_SEC_MAX_as_double = TIMESPEC_SEC_MAX;
210
+ COMPILER_WARNING_POP
211
+
212
+ static inline rb_hrtime_t *
213
+ double2hrtime(rb_hrtime_t *hrt, double d)
214
+ {
215
+ /* assume timespec.tv_sec has same signedness as time_t */
216
+ const double TIMESPEC_SEC_MAX_PLUS_ONE = 2.0 * (TIMESPEC_SEC_MAX_as_double / 2.0 + 1.0);
217
+
218
+ if (TIMESPEC_SEC_MAX_PLUS_ONE <= d) {
219
+ *hrt = RB_HRTIME_MAX;
220
+ return NULL;
221
+ }
222
+ else if (d <= 0) {
223
+ *hrt = 0;
224
+ }
225
+ else {
226
+ *hrt = (rb_hrtime_t)(d * (double)RB_HRTIME_PER_SEC);
227
+ }
228
+ return hrt;
229
+ }
230
+
231
+ static inline double
232
+ hrtime2double(rb_hrtime_t hrt)
233
+ {
234
+ return (double)hrt / (double)RB_HRTIME_PER_SEC;
235
+ }
236
+
237
+ #endif /* RB_HRTIME_H */