pigeonhole-db 1.1.0

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 (1256) hide show
  1. checksums.yaml +7 -0
  2. data/Cargo.lock +899 -0
  3. data/Cargo.toml +45 -0
  4. data/LICENSE +21 -0
  5. data/README.md +22 -0
  6. data/extconf.rb +12 -0
  7. data/lib/pigeonhole/api.rb +615 -0
  8. data/lib/pigeonhole/index.rb +208 -0
  9. data/lib/pigeonhole/memory.rb +507 -0
  10. data/lib/pigeonhole/version.rb +6 -0
  11. data/lib/pigeonhole-db.rb +6 -0
  12. data/lib/pigeonhole.rb +47 -0
  13. data/sig/pigeonhole.rbs +1484 -0
  14. data/src/budget.rs +205 -0
  15. data/src/classes.rs +279 -0
  16. data/src/convert.rs +192 -0
  17. data/src/db.rs +685 -0
  18. data/src/error.rs +151 -0
  19. data/src/feed.rs +316 -0
  20. data/src/fork.rs +64 -0
  21. data/src/gvl.rs +112 -0
  22. data/src/index.rs +1157 -0
  23. data/src/lib.rs +534 -0
  24. data/src/memory.rs +2178 -0
  25. data/src/read.rs +312 -0
  26. data/src/table.rs +1161 -0
  27. data/src/vector.rs +262 -0
  28. data/src/walk.rs +406 -0
  29. data/vendor/bundle/ruby/3.4.0/bin/minitest +29 -0
  30. data/vendor/bundle/ruby/3.4.0/bin/rake +29 -0
  31. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler +29 -0
  32. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler-dock +29 -0
  33. data/vendor/bundle/ruby/3.4.0/bin/rb-sys-dock +29 -0
  34. data/vendor/bundle/ruby/3.4.0/bin/rbs +29 -0
  35. data/vendor/bundle/ruby/3.4.0/cache/drb-2.2.3.gem +0 -0
  36. data/vendor/bundle/ruby/3.4.0/cache/logger-1.7.0.gem +0 -0
  37. data/vendor/bundle/ruby/3.4.0/cache/minitest-6.0.6.gem +0 -0
  38. data/vendor/bundle/ruby/3.4.0/cache/prism-1.9.0.gem +0 -0
  39. data/vendor/bundle/ruby/3.4.0/cache/rake-13.4.2.gem +0 -0
  40. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-1.3.2.gem +0 -0
  41. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-dock-1.12.0.gem +0 -0
  42. data/vendor/bundle/ruby/3.4.0/cache/rb_sys-0.9.130.gem +0 -0
  43. data/vendor/bundle/ruby/3.4.0/cache/rbs-4.2.0.gem +0 -0
  44. data/vendor/bundle/ruby/3.4.0/cache/toml-rb-6.0.0.gem +0 -0
  45. data/vendor/bundle/ruby/3.4.0/cache/tsort-0.2.0.gem +0 -0
  46. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem.build_complete +0 -0
  47. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem_make.out +44 -0
  48. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/mkmf.log +74 -0
  49. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/prism/prism.so +0 -0
  50. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem.build_complete +0 -0
  51. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem_make.out +41 -0
  52. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/mkmf.log +102 -0
  53. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/rbs_extension.so +0 -0
  54. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/LICENSE.txt +22 -0
  55. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/drb.gemspec +42 -0
  56. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/acl.rb +239 -0
  57. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/drb.rb +1993 -0
  58. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/eq.rb +15 -0
  59. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extserv.rb +44 -0
  60. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extservm.rb +94 -0
  61. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/gw.rb +161 -0
  62. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/observer.rb +26 -0
  63. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/ssl.rb +354 -0
  64. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/timeridconv.rb +97 -0
  65. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/unix.rb +118 -0
  66. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/version.rb +3 -0
  67. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/weakidconv.rb +31 -0
  68. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb.rb +3 -0
  69. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/BSDL +22 -0
  70. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/COPYING +56 -0
  71. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/README.md +104 -0
  72. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/errors.rb +9 -0
  73. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/formatter.rb +36 -0
  74. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/log_device.rb +265 -0
  75. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/period.rb +47 -0
  76. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/severity.rb +38 -0
  77. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/version.rb +5 -0
  78. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger.rb +789 -0
  79. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/History.rdoc +1860 -0
  80. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Manifest.txt +41 -0
  81. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/README.rdoc +763 -0
  82. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Rakefile +89 -0
  83. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/bin/minitest +5 -0
  84. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/design_rationale.rb +54 -0
  85. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/hoe/minitest.rb +30 -0
  86. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/assertions.rb +821 -0
  87. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/autorun.rb +5 -0
  88. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/benchmark.rb +452 -0
  89. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/bisect.rb +304 -0
  90. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/complete.rb +56 -0
  91. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/compress.rb +94 -0
  92. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/error_on_warning.rb +11 -0
  93. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/expectations.rb +321 -0
  94. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/find_minimal_combination.rb +127 -0
  95. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/hell.rb +11 -0
  96. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/manual_plugins.rb +4 -0
  97. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/parallel.rb +72 -0
  98. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/path_expander.rb +432 -0
  99. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride.rb +4 -0
  100. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride_plugin.rb +135 -0
  101. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server.rb +49 -0
  102. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server_plugin.rb +88 -0
  103. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/spec.rb +324 -0
  104. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint.rb +105 -0
  105. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint_plugin.rb +39 -0
  106. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test.rb +232 -0
  107. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test_task.rb +331 -0
  108. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest.rb +1232 -0
  109. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/metametameta.rb +150 -0
  110. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_bisect.rb +249 -0
  111. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_find_minimal_combination.rb +138 -0
  112. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_assertions.rb +1729 -0
  113. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_benchmark.rb +151 -0
  114. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_reporter.rb +437 -0
  115. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_spec.rb +1095 -0
  116. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test.rb +1295 -0
  117. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test_task.rb +57 -0
  118. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_path_expander.rb +229 -0
  119. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_server.rb +146 -0
  120. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/BSDmakefile +58 -0
  121. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CHANGELOG.md +786 -0
  122. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CODE_OF_CONDUCT.md +76 -0
  123. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CONTRIBUTING.md +58 -0
  124. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/LICENSE.md +7 -0
  125. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/Makefile +116 -0
  126. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/README.md +143 -0
  127. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/config.yml +4739 -0
  128. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/build_system.md +119 -0
  129. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/configuration.md +68 -0
  130. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/cruby_compilation.md +27 -0
  131. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/design.md +53 -0
  132. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/encoding.md +121 -0
  133. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/fuzzing.md +88 -0
  134. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/heredocs.md +36 -0
  135. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/javascript.md +118 -0
  136. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/local_variable_depth.md +229 -0
  137. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/mapping.md +117 -0
  138. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parser_translation.md +24 -0
  139. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parsing_rules.md +22 -0
  140. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/releasing.md +75 -0
  141. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/relocation.md +34 -0
  142. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ripper_translation.md +63 -0
  143. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_api.md +45 -0
  144. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_parser_translation.md +19 -0
  145. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/serialization.md +233 -0
  146. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/testing.md +55 -0
  147. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/Makefile +273 -0
  148. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_node.c +6945 -0
  149. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_pack.c +276 -0
  150. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extconf.rb +127 -0
  151. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.c +1427 -0
  152. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.h +19 -0
  153. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/ast.h +8254 -0
  154. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/defines.h +260 -0
  155. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/diagnostic.h +458 -0
  156. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/encoding.h +283 -0
  157. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/node.h +129 -0
  158. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/options.h +488 -0
  159. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/pack.h +163 -0
  160. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/parser.h +936 -0
  161. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/prettyprint.h +34 -0
  162. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/regexp.h +43 -0
  163. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/static_literals.h +121 -0
  164. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +236 -0
  165. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_char.h +204 -0
  166. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +218 -0
  167. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +130 -0
  168. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_list.h +103 -0
  169. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +29 -0
  170. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +113 -0
  171. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_string.h +200 -0
  172. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +32 -0
  173. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +46 -0
  174. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/version.h +29 -0
  175. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism.h +408 -0
  176. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/compiler.rb +801 -0
  177. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +392 -0
  178. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +2210 -0
  179. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +4767 -0
  180. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dsl.rb +1003 -0
  181. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/ffi.rb +578 -0
  182. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +2393 -0
  183. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +911 -0
  184. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +772 -0
  185. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node.rb +19966 -0
  186. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node_ext.rb +511 -0
  187. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pack.rb +230 -0
  188. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +188 -0
  189. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +66 -0
  190. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +155 -0
  191. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result.rb +907 -0
  192. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pattern.rb +269 -0
  193. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +15 -0
  194. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +13 -0
  195. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +14 -0
  196. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +14 -0
  197. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +36 -0
  198. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
  199. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/reflection.rb +416 -0
  200. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/relocation.rb +505 -0
  201. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/serialize.rb +2400 -0
  202. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/string_query.rb +31 -0
  203. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +62 -0
  204. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +2234 -0
  205. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +820 -0
  206. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +376 -0
  207. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +26 -0
  208. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +36 -0
  209. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +53 -0
  210. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +135 -0
  211. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +126 -0
  212. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +5 -0
  213. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +3520 -0
  214. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +1964 -0
  215. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation.rb +18 -0
  216. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/visitor.rb +813 -0
  217. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism.rb +98 -0
  218. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/prism.gemspec +172 -0
  219. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +12 -0
  220. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +524 -0
  221. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +12 -0
  222. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node.rbi +8750 -0
  223. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +107 -0
  224. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +404 -0
  225. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +58 -0
  226. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +12 -0
  227. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +11 -0
  228. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +23 -0
  229. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +15 -0
  230. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +473 -0
  231. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism.rbi +63 -0
  232. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/compiler.rbs +9 -0
  233. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +19 -0
  234. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +6 -0
  235. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dsl.rbs +351 -0
  236. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +22 -0
  237. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +10 -0
  238. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +159 -0
  239. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node.rbs +4042 -0
  240. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +149 -0
  241. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pack.rbs +43 -0
  242. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +38 -0
  243. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +197 -0
  244. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pattern.rbs +13 -0
  245. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/reflection.rbs +50 -0
  246. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/relocation.rbs +185 -0
  247. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/serialize.rbs +8 -0
  248. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/string_query.rbs +11 -0
  249. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/visitor.rbs +169 -0
  250. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism.rbs +272 -0
  251. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/diagnostic.c +854 -0
  252. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/encoding.c +5340 -0
  253. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/node.c +8685 -0
  254. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/options.c +338 -0
  255. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/pack.c +509 -0
  256. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prettyprint.c +8957 -0
  257. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prism.c +22679 -0
  258. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/regexp.c +790 -0
  259. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/serialize.c +2274 -0
  260. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/static_literals.c +617 -0
  261. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/token_type.c +703 -0
  262. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_buffer.c +357 -0
  263. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_char.c +318 -0
  264. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +342 -0
  265. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_integer.c +670 -0
  266. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_list.c +49 -0
  267. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_memchr.c +35 -0
  268. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_newline_list.c +125 -0
  269. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_string.c +381 -0
  270. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +36 -0
  271. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +206 -0
  272. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/History.rdoc +2454 -0
  273. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
  274. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/README.rdoc +155 -0
  275. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
  276. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
  277. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
  278. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/a.c +6 -0
  279. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/b.c +6 -0
  280. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/main.c +11 -0
  281. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
  282. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
  283. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
  284. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rake.1 +156 -0
  285. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
  286. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
  287. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake +27 -0
  288. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
  289. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
  290. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
  291. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
  292. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
  293. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
  294. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
  295. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
  296. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
  297. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
  298. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
  299. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
  300. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
  301. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
  302. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
  303. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
  304. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
  305. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
  306. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
  307. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
  308. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
  309. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
  310. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
  311. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
  312. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
  313. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
  314. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
  315. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
  316. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
  317. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
  318. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  319. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
  320. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
  321. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
  322. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
  323. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
  324. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
  325. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
  326. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
  327. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
  328. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
  329. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
  330. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
  331. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake.rb +69 -0
  332. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/rake.gemspec +102 -0
  333. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Gemfile +8 -0
  334. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/History.md +708 -0
  335. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/LICENSE.txt +20 -0
  336. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/README.md +505 -0
  337. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Rakefile +15 -0
  338. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/appveyor.yml +22 -0
  339. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/bin/rake-compiler +24 -0
  340. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/cucumber.yml +4 -0
  341. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/compile.feature +79 -0
  342. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-compile.feature +23 -0
  343. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package-multi.feature +15 -0
  344. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package.feature +14 -0
  345. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-compile.feature +22 -0
  346. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-no-native-compile.feature +33 -0
  347. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-package.feature +24 -0
  348. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/package.feature +40 -0
  349. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/compilation.rb +70 -0
  350. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/cross_compilation.rb +27 -0
  351. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/execution.rb +52 -0
  352. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/folders.rb +32 -0
  353. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/gem.rb +46 -0
  354. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/java_compilation.rb +7 -0
  355. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/env.rb +10 -0
  356. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/file_template_helpers.rb +137 -0
  357. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/generator_helpers.rb +123 -0
  358. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/platform_extension_helpers.rb +27 -0
  359. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/baseextensiontask.rb +90 -0
  360. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/compiler_config.rb +38 -0
  361. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensioncompiler.rb +51 -0
  362. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensiontask.rb +621 -0
  363. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/javaextensiontask.rb +321 -0
  364. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bin/cross-ruby.rake +189 -0
  365. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bootstrap.rake +11 -0
  366. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/common.rake +10 -0
  367. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/cucumber.rake +23 -0
  368. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/gem.rake +15 -0
  369. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/rspec.rake +9 -0
  370. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
  371. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
  372. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
  373. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
  374. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
  375. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
  376. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
  377. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
  378. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
  379. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
  380. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
  381. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
  382. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
  383. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
  384. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
  385. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
  386. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
  387. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
  388. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
  389. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
  390. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
  391. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
  392. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
  393. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
  394. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
  395. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
  396. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
  397. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
  398. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
  399. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
  400. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
  401. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
  402. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
  403. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
  404. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
  405. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
  406. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
  407. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
  408. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
  409. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
  410. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
  411. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
  412. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
  413. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
  414. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
  415. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
  416. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
  417. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
  418. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
  419. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
  420. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
  421. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
  422. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
  423. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
  424. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
  425. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
  426. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-APACHE +190 -0
  427. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-MIT +21 -0
  428. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/README.md +42 -0
  429. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/certs/ianks.pem +21 -0
  430. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/exe/rb-sys-dock +495 -0
  431. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/config.rb +72 -0
  432. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/metadata.rb +158 -0
  433. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo.rb +9 -0
  434. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder/link_flag_converter.rb +37 -0
  435. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder.rb +370 -0
  436. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/error.rb +43 -0
  437. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/extensiontask.rb +188 -0
  438. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf/config.rb +75 -0
  439. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf.rb +413 -0
  440. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info/data.rb +10 -0
  441. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info.rb +82 -0
  442. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/util/logger.rb +73 -0
  443. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/version.rb +5 -0
  444. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys.rb +8 -0
  445. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/BSDL +22 -0
  446. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/CHANGELOG.md +2463 -0
  447. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/COPYING +56 -0
  448. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Dockerfile.jruby +53 -0
  449. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/README.md +240 -0
  450. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Rakefile +1213 -0
  451. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Steepfile +55 -0
  452. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/config.yml +920 -0
  453. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/array.rbs +4205 -0
  454. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/basic_object.rbs +376 -0
  455. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/binding.rbs +148 -0
  456. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/builtin.rbs +278 -0
  457. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/class.rbs +223 -0
  458. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/comparable.rbs +192 -0
  459. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/complex.rbs +812 -0
  460. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/constants.rbs +96 -0
  461. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/data.rbs +415 -0
  462. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/dir.rbs +993 -0
  463. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/encoding.rbs +1368 -0
  464. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerable.rbs +2506 -0
  465. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/arithmetic_sequence.rbs +70 -0
  466. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/product.rbs +92 -0
  467. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator.rbs +705 -0
  468. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/env.rbs +6 -0
  469. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errno.rbs +682 -0
  470. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errors.rbs +789 -0
  471. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/exception.rbs +485 -0
  472. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/false_class.rbs +82 -0
  473. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber.rbs +570 -0
  474. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber_error.rbs +11 -0
  475. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file.rbs +2045 -0
  476. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_constants.rbs +463 -0
  477. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_stat.rbs +534 -0
  478. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_test.rbs +331 -0
  479. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/float.rbs +1292 -0
  480. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/gc.rbs +788 -0
  481. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/global_variables.rbs +184 -0
  482. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/hash.rbs +2183 -0
  483. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/integer.rbs +1374 -0
  484. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/buffer.rbs +995 -0
  485. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/wait.rbs +48 -0
  486. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io.rbs +3473 -0
  487. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/kernel.rbs +3172 -0
  488. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/marshal.rbs +207 -0
  489. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/match_data.rbs +637 -0
  490. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/math.rbs +770 -0
  491. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/method.rbs +422 -0
  492. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/module.rbs +1856 -0
  493. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/nil_class.rbs +210 -0
  494. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/numeric.rbs +832 -0
  495. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object.rbs +108 -0
  496. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space/weak_key_map.rbs +166 -0
  497. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space.rbs +197 -0
  498. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/pathname.rbs +1312 -0
  499. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/proc.rbs +905 -0
  500. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/process.rbs +2316 -0
  501. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ractor.rbs +914 -0
  502. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/random.rbs +255 -0
  503. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/range.rbs +1209 -0
  504. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rational.rbs +502 -0
  505. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rb_config.rbs +88 -0
  506. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/ops.rbs +154 -0
  507. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/argf.rbs +1236 -0
  508. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/env_class.rbs +1214 -0
  509. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/main_class.rbs +123 -0
  510. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/random.rbs +186 -0
  511. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/refinement.rbs +59 -0
  512. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/regexp.rbs +1974 -0
  513. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby.rbs +53 -0
  514. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby_vm.rbs +809 -0
  515. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/basic_specification.rbs +6 -0
  516. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/config_file.rbs +38 -0
  517. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/dependency_installer.rbs +6 -0
  518. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/errors.rbs +112 -0
  519. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/installer.rbs +15 -0
  520. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/path_support.rbs +6 -0
  521. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/platform.rbs +7 -0
  522. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/request_set.rbs +49 -0
  523. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/requirement.rbs +138 -0
  524. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/rubygems.rbs +1108 -0
  525. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/source_list.rbs +15 -0
  526. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/specification.rbs +31 -0
  527. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/stream_ui.rbs +5 -0
  528. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/uninstaller.rbs +10 -0
  529. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/version.rbs +133 -0
  530. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/set.rbs +751 -0
  531. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/signal.rbs +110 -0
  532. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/string.rbs +5532 -0
  533. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/struct.rbs +668 -0
  534. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/symbol.rbs +482 -0
  535. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread.rbs +1821 -0
  536. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread_group.rbs +79 -0
  537. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/time.rbs +1793 -0
  538. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/trace_point.rbs +483 -0
  539. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/true_class.rbs +98 -0
  540. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/unbound_method.rbs +337 -0
  541. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/warning.rbs +87 -0
  542. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/CONTRIBUTING.md +107 -0
  543. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/aliases.md +79 -0
  544. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/architecture.md +110 -0
  545. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/collection.md +192 -0
  546. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/config.md +171 -0
  547. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/data_and_struct.md +86 -0
  548. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/encoding.md +56 -0
  549. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/gem.md +56 -0
  550. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/inline.md +634 -0
  551. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rbs_by_example.md +309 -0
  552. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/release.md +303 -0
  553. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/repo.md +125 -0
  554. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rust.md +96 -0
  555. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/sigs.md +167 -0
  556. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/stdlib.md +155 -0
  557. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/syntax.md +952 -0
  558. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/tools.md +17 -0
  559. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/type_fingerprint.md +21 -0
  560. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/wasm_serialization.md +80 -0
  561. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/exe/rbs +7 -0
  562. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/Makefile +273 -0
  563. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.c +1870 -0
  564. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.h +41 -0
  565. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.c +189 -0
  566. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.h +105 -0
  567. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/compat.h +10 -0
  568. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/extconf.rb +40 -0
  569. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.c +299 -0
  570. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.h +82 -0
  571. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/main.c +649 -0
  572. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_extension.h +16 -0
  573. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.c +9 -0
  574. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.h +24 -0
  575. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/goodcheck.yml +91 -0
  576. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/ast.h +1055 -0
  577. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/defines.h +104 -0
  578. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/lexer.h +208 -0
  579. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/location.h +40 -0
  580. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/parser.h +187 -0
  581. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/serialize.h +39 -0
  582. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/string.h +47 -0
  583. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_allocator.h +59 -0
  584. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_assert.h +20 -0
  585. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_buffer.h +83 -0
  586. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_constant_pool.h +155 -0
  587. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_encoding.h +282 -0
  588. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_unescape.h +24 -0
  589. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs.h +14 -0
  590. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ancestor_graph.rb +92 -0
  591. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/annotations.rb +199 -0
  592. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/formatter.rb +82 -0
  593. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  594. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_source.rb +131 -0
  595. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate.rb +8 -0
  596. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/annotation.rb +29 -0
  597. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/comment.rb +29 -0
  598. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/declarations.rb +472 -0
  599. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/directives.rb +49 -0
  600. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/members.rb +451 -0
  601. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/annotations.rb +451 -0
  602. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/comment_block.rb +247 -0
  603. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/declarations.rb +291 -0
  604. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  605. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  606. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/members.rb +762 -0
  607. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/type_param.rb +235 -0
  608. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/visitor.rb +137 -0
  609. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/buffer.rb +189 -0
  610. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/builtin_names.rb +58 -0
  611. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/colored_io.rb +48 -0
  612. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/diff.rb +84 -0
  613. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/validate.rb +294 -0
  614. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli.rb +1253 -0
  615. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/cleaner.rb +38 -0
  616. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile.rb +92 -0
  617. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  618. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config.rb +81 -0
  619. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/installer.rb +32 -0
  620. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/base.rb +14 -0
  621. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/git.rb +265 -0
  622. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/local.rb +81 -0
  623. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/rubygems.rb +48 -0
  624. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/stdlib.rb +50 -0
  625. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources.rb +38 -0
  626. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection.rb +16 -0
  627. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/constant.rb +28 -0
  628. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition.rb +415 -0
  629. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/ancestor_builder.rb +681 -0
  630. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/method_builder.rb +295 -0
  631. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder.rb +1057 -0
  632. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/diff.rb +131 -0
  633. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/class_entry.rb +81 -0
  634. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/module_entry.rb +91 -0
  635. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/use_map.rb +77 -0
  636. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment.rb +1028 -0
  637. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_loader.rb +167 -0
  638. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_walker.rb +155 -0
  639. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/errors.rb +634 -0
  640. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/factory.rb +18 -0
  641. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/file_finder.rb +28 -0
  642. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser/comment_association.rb +117 -0
  643. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser.rb +568 -0
  644. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/location_aux.rb +170 -0
  645. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/locator.rb +247 -0
  646. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/method_type.rb +145 -0
  647. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/namespace.rb +154 -0
  648. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/lex_result.rb +15 -0
  649. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/token.rb +23 -0
  650. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser_aux.rb +144 -0
  651. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/helpers.rb +164 -0
  652. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/node_usage.rb +99 -0
  653. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rb.rb +816 -0
  654. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rbi.rb +793 -0
  655. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/helpers.rb +59 -0
  656. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/reflection.rb +19 -0
  657. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/value_object_generator.rb +278 -0
  658. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime.rb +680 -0
  659. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/repository.rb +127 -0
  660. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/constant_resolver.rb +219 -0
  661. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/type_name_resolver.rb +167 -0
  662. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/rewriter.rb +70 -0
  663. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/sorter.rb +198 -0
  664. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/source.rb +99 -0
  665. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/substitution.rb +83 -0
  666. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/subtractor.rb +204 -0
  667. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/errors.rb +80 -0
  668. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/guaranteed.rb +30 -0
  669. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/hook.rb +212 -0
  670. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/observer.rb +19 -0
  671. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup.rb +84 -0
  672. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup_helper.rb +50 -0
  673. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/tester.rb +167 -0
  674. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/type_check.rb +457 -0
  675. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test.rb +112 -0
  676. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_dependency.rb +100 -0
  677. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_regularity.rb +126 -0
  678. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_name.rb +122 -0
  679. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/types.rb +1646 -0
  680. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/convertibles.rb +177 -0
  681. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/spy.rb +138 -0
  682. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/type_assertions.rb +383 -0
  683. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/with_aliases.rb +145 -0
  684. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test.rb +6 -0
  685. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/validator.rb +186 -0
  686. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/variance_calculator.rb +189 -0
  687. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/vendorer.rb +71 -0
  688. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/version.rb +5 -0
  689. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/deserializer.rb +213 -0
  690. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/location.rb +61 -0
  691. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/parser.rb +174 -0
  692. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/runtime.rb +211 -0
  693. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/serialization_schema.rb +111 -0
  694. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/writer.rb +424 -0
  695. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs.rb +117 -0
  696. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_extension.so +0 -0
  697. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_jars.rb +39 -0
  698. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc/discover.rb +20 -0
  699. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc_plugin/parser.rb +168 -0
  700. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/rbs.gemspec +77 -0
  701. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/annotation.json +14 -0
  702. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/comment.json +26 -0
  703. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/decls.json +326 -0
  704. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/function.json +98 -0
  705. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/location.json +56 -0
  706. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/members.json +266 -0
  707. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/methodType.json +50 -0
  708. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/typeParam.json +52 -0
  709. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/types.json +317 -0
  710. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_builder.rbs +163 -0
  711. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_graph.rbs +60 -0
  712. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/annotations.rbs +102 -0
  713. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/formatter.rbs +24 -0
  714. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_annotater.rbs +85 -0
  715. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_source.rbs +32 -0
  716. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotation.rbs +27 -0
  717. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/annotations.rbs +470 -0
  718. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/comment_block.rbs +127 -0
  719. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/declarations.rbs +158 -0
  720. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  721. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  722. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/members.rbs +198 -0
  723. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/buffer.rbs +108 -0
  724. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/builtin_names.rbs +44 -0
  725. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/colored_io.rbs +15 -0
  726. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/diff.rbs +15 -0
  727. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/validate.rbs +47 -0
  728. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli.rbs +89 -0
  729. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/cleaner.rbs +13 -0
  730. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile.rbs +74 -0
  731. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile_generator.rbs +68 -0
  732. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config.rbs +46 -0
  733. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/installer.rbs +17 -0
  734. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/sources.rbs +214 -0
  735. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection.rbs +4 -0
  736. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/comment.rbs +26 -0
  737. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/constant.rbs +21 -0
  738. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/declarations.rbs +274 -0
  739. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition.rbs +232 -0
  740. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition_builder.rbs +181 -0
  741. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/diff.rbs +28 -0
  742. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/directives.rbs +77 -0
  743. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/class_entry.rbs +56 -0
  744. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/module_entry.rbs +65 -0
  745. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment.rbs +286 -0
  746. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_loader.rbs +111 -0
  747. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_walker.rbs +65 -0
  748. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/errors.rbs +408 -0
  749. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/factory.rbs +5 -0
  750. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/file_finder.rbs +28 -0
  751. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser/comment_association.rbs +71 -0
  752. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser.rbs +126 -0
  753. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/location.rbs +135 -0
  754. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/locator.rbs +56 -0
  755. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/manifest.yaml +5 -0
  756. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/members.rbs +258 -0
  757. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_builder.rbs +89 -0
  758. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_types.rbs +58 -0
  759. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/namespace.rbs +161 -0
  760. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/parser.rbs +164 -0
  761. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/helpers.rbs +29 -0
  762. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/node_usage.rbs +20 -0
  763. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rb.rbs +96 -0
  764. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rbi.rbs +104 -0
  765. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/runtime.rbs +182 -0
  766. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rbs.rbs +21 -0
  767. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rdoc/rbs.rbs +67 -0
  768. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/repository.rbs +85 -0
  769. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/constant_resolver.rbs +92 -0
  770. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/context.rbs +34 -0
  771. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/type_name_resolver.rbs +61 -0
  772. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rewriter.rbs +45 -0
  773. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/bundler.rbs +38 -0
  774. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/enumerable.rbs +5 -0
  775. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/rubygems.rbs +19 -0
  776. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/sorter.rbs +41 -0
  777. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/source.rbs +48 -0
  778. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/substitution.rbs +48 -0
  779. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/subtractor.rbs +37 -0
  780. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/errors.rbs +52 -0
  781. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/guranteed.rbs +9 -0
  782. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/type_check.rbs +19 -0
  783. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test.rbs +82 -0
  784. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_dependency.rbs +53 -0
  785. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_regularity.rbs +98 -0
  786. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_param.rbs +115 -0
  787. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/typename.rbs +89 -0
  788. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/types.rbs +588 -0
  789. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/convertibles.rbs +154 -0
  790. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/spy.rbs +22 -0
  791. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/type_assertions.rbs +211 -0
  792. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/with_aliases.rbs +136 -0
  793. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/use_map.rbs +35 -0
  794. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/util.rbs +9 -0
  795. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/validator.rbs +63 -0
  796. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/variance_calculator.rbs +87 -0
  797. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/vendorer.rbs +51 -0
  798. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/version.rbs +3 -0
  799. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/visitor.rbs +47 -0
  800. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/deserializer.rbs +66 -0
  801. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/serialization_schema.rbs +13 -0
  802. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/writer.rbs +127 -0
  803. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/ast.c +1644 -0
  804. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.c +3223 -0
  805. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.re +187 -0
  806. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexstate.c +222 -0
  807. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/location.c +31 -0
  808. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/parser.c +4318 -0
  809. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/serialize.c +965 -0
  810. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/string.c +41 -0
  811. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_allocator.c +171 -0
  812. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_assert.c +19 -0
  813. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_buffer.c +54 -0
  814. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_constant_pool.c +268 -0
  815. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_encoding.c +21454 -0
  816. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_unescape.c +167 -0
  817. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/abbrev.rbs +66 -0
  818. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/array.rbs +26 -0
  819. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/base64/0/base64.rbs +355 -0
  820. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/benchmark/0/benchmark.rbs +452 -0
  821. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  822. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  823. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  824. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/core.rbs +911 -0
  825. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/manifest.yaml +4 -0
  826. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi-escape/0/escape.rbs +171 -0
  827. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/coverage/0/coverage.rbs +266 -0
  828. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/csv.rbs +3776 -0
  829. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/manifest.yaml +3 -0
  830. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date.rbs +1598 -0
  831. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date_time.rbs +617 -0
  832. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/time.rbs +26 -0
  833. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/dbm/0/dbm.rbs +421 -0
  834. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/delegator.rbs +188 -0
  835. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/kernel.rbs +47 -0
  836. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/simple_delegator.rbs +96 -0
  837. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  838. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/digest/0/digest.rbs +693 -0
  839. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/erb/0/erb.rbs +933 -0
  840. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/etc/0/etc.rbs +884 -0
  841. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/fileutils/0/fileutils.rbs +1753 -0
  842. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/find/0/find.rbs +49 -0
  843. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/forwardable/0/forwardable.rbs +271 -0
  844. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/io-console/0/io-console.rbs +414 -0
  845. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ipaddr/0/ipaddr.rbs +431 -0
  846. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/json/0/json.rbs +1963 -0
  847. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/kconv/0/kconv.rbs +166 -0
  848. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/formatter.rbs +45 -0
  849. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/log_device.rbs +100 -0
  850. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/logger.rbs +796 -0
  851. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/manifest.yaml +2 -0
  852. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/period.rbs +17 -0
  853. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/severity.rbs +34 -0
  854. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/kernel.rbs +42 -0
  855. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  856. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  857. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  858. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  859. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  860. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  861. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  862. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/compress.rbs +13 -0
  863. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  864. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  865. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  866. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/guard.rbs +64 -0
  867. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/mock.rbs +64 -0
  868. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  869. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  870. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  871. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  872. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  873. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  874. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  875. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  876. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  877. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/result.rbs +28 -0
  878. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  879. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/skip.rbs +6 -0
  880. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  881. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  882. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec.rbs +11 -0
  883. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  884. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  885. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  886. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test.rbs +69 -0
  887. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  888. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  889. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  890. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit.rbs +4 -0
  891. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest.rbs +115 -0
  892. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/monitor/0/monitor.rbs +363 -0
  893. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  894. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/manifest.yaml +3 -0
  895. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/net-http.rbs +5580 -0
  896. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/manifest.yaml +2 -0
  897. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  898. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/manifest.yaml +2 -0
  899. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  900. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/nkf/0/nkf.rbs +402 -0
  901. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/objspace/0/objspace.rbs +470 -0
  902. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/observable/0/observable.rbs +217 -0
  903. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/manifest.yaml +4 -0
  904. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/open-uri.rbs +433 -0
  905. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open3/0/open3.rbs +606 -0
  906. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/manifest.yaml +3 -0
  907. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/openssl.rbs +12237 -0
  908. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/optparse/0/optparse.rbs +1734 -0
  909. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pathname/0/pathname.rbs +36 -0
  910. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/manifest.yaml +2 -0
  911. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/pp.rbs +301 -0
  912. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  913. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pstore/0/pstore.rbs +608 -0
  914. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/core_ext.rbs +12 -0
  915. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/dbm.rbs +237 -0
  916. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/manifest.yaml +3 -0
  917. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/psych.rbs +455 -0
  918. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/store.rbs +57 -0
  919. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pty/0/pty.rbs +240 -0
  920. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  921. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/code_object.rbs +52 -0
  922. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/comment.rbs +61 -0
  923. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/context.rbs +153 -0
  924. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/markup.rbs +117 -0
  925. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/options.rbs +76 -0
  926. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/parser.rbs +56 -0
  927. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/rdoc.rbs +393 -0
  928. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/ri.rbs +17 -0
  929. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/store.rbs +48 -0
  930. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/top_level.rbs +97 -0
  931. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/manifest.yaml +3 -0
  932. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/resolv.rbs +1787 -0
  933. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ripper/0/ripper.rbs +1654 -0
  934. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/manifest.yaml +2 -0
  935. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/securerandom.rbs +49 -0
  936. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/shellwords/0/shellwords.rbs +229 -0
  937. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/singleton/0/singleton.rbs +137 -0
  938. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/addrinfo.rbs +666 -0
  939. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/basic_socket.rbs +590 -0
  940. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/constants.rbs +2295 -0
  941. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/ip_socket.rbs +94 -0
  942. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket.rbs +4170 -0
  943. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket_error.rbs +5 -0
  944. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_server.rbs +192 -0
  945. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_socket.rbs +87 -0
  946. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/udp_socket.rbs +133 -0
  947. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_server.rbs +169 -0
  948. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_socket.rbs +172 -0
  949. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/stringio/0/stringio.rbs +1682 -0
  950. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/strscan/0/string_scanner.rbs +1648 -0
  951. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/manifest.yaml +3 -0
  952. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/tempfile.rbs +483 -0
  953. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/time/0/time.rbs +434 -0
  954. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/timeout/0/timeout.rbs +132 -0
  955. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  956. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/cyclic.rbs +8 -0
  957. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/interfaces.rbs +20 -0
  958. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/tsort.rbs +410 -0
  959. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/common.rbs +621 -0
  960. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/file.rbs +118 -0
  961. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ftp.rbs +13 -0
  962. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/generic.rbs +1111 -0
  963. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/http.rbs +104 -0
  964. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/https.rbs +14 -0
  965. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldap.rbs +230 -0
  966. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldaps.rbs +14 -0
  967. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/mailto.rbs +92 -0
  968. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  969. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  970. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ws.rbs +13 -0
  971. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/wss.rbs +9 -0
  972. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/manifest.yaml +2 -0
  973. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/yaml.rbs +1 -0
  974. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/buf_error.rbs +10 -0
  975. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/data_error.rbs +10 -0
  976. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/deflate.rbs +211 -0
  977. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/error.rbs +20 -0
  978. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  979. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  980. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  981. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  982. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file.rbs +156 -0
  983. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_reader.rbs +293 -0
  984. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_writer.rbs +169 -0
  985. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/inflate.rbs +180 -0
  986. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/mem_error.rbs +10 -0
  987. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/need_dict.rbs +13 -0
  988. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_end.rbs +11 -0
  989. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_error.rbs +11 -0
  990. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/version_error.rbs +11 -0
  991. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zlib.rbs +449 -0
  992. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zstream.rbs +200 -0
  993. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/README.md +109 -0
  994. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/rbs_wasm.c +479 -0
  995. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/LICENSE +19 -0
  996. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/README.md +135 -0
  997. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/datetime.rb +54 -0
  998. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/dumper.rb +182 -0
  999. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/errors.rb +17 -0
  1000. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/inline_table.rb +18 -0
  1001. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/keyvalue.rb +45 -0
  1002. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/parser.rb +296 -0
  1003. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/string.rb +41 -0
  1004. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table.rb +34 -0
  1005. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table_array.rb +43 -0
  1006. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/version.rb +5 -0
  1007. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb.rb +90 -0
  1008. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Gemfile +4 -0
  1009. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/LICENSE.txt +22 -0
  1010. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/README.md +72 -0
  1011. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Rakefile +10 -0
  1012. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/console +14 -0
  1013. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/setup +8 -0
  1014. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb +455 -0
  1015. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/tsort.gemspec +29 -0
  1016. data/vendor/bundle/ruby/3.4.0/specifications/drb-2.2.3.gemspec +22 -0
  1017. data/vendor/bundle/ruby/3.4.0/specifications/logger-1.7.0.gemspec +22 -0
  1018. data/vendor/bundle/ruby/3.4.0/specifications/minitest-6.0.6.gemspec +35 -0
  1019. data/vendor/bundle/ruby/3.4.0/specifications/prism-1.9.0.gemspec +24 -0
  1020. data/vendor/bundle/ruby/3.4.0/specifications/rake-13.4.2.gemspec +26 -0
  1021. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-1.3.2.gemspec +33 -0
  1022. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
  1023. data/vendor/bundle/ruby/3.4.0/specifications/rb_sys-0.9.130.gemspec +29 -0
  1024. data/vendor/bundle/ruby/3.4.0/specifications/rbs-4.2.0.gemspec +33 -0
  1025. data/vendor/bundle/ruby/3.4.0/specifications/toml-rb-6.0.0.gemspec +27 -0
  1026. data/vendor/bundle/ruby/3.4.0/specifications/tsort-0.2.0.gemspec +23 -0
  1027. data/vendor/cache/Cargo.toml +21 -0
  1028. data/vendor/cache/LICENSE +21 -0
  1029. data/vendor/cache/README.md +5 -0
  1030. data/vendor/cache/src/hash.rs +85 -0
  1031. data/vendor/cache/src/lib.rs +751 -0
  1032. data/vendor/cache/src/loom_tests.rs +340 -0
  1033. data/vendor/cache/src/s3fifo.rs +648 -0
  1034. data/vendor/cache/src/sync.rs +25 -0
  1035. data/vendor/cache/src/tests.rs +260 -0
  1036. data/vendor/compaction/Cargo.toml +32 -0
  1037. data/vendor/compaction/LICENSE +21 -0
  1038. data/vendor/compaction/README.md +5 -0
  1039. data/vendor/compaction/src/blob.rs +478 -0
  1040. data/vendor/compaction/src/cursor.rs +700 -0
  1041. data/vendor/compaction/src/gc.rs +802 -0
  1042. data/vendor/compaction/src/job.rs +861 -0
  1043. data/vendor/compaction/src/lib.rs +102 -0
  1044. data/vendor/compaction/src/merge.rs +995 -0
  1045. data/vendor/compaction/src/picker.rs +681 -0
  1046. data/vendor/compaction/src/resolver.rs +1346 -0
  1047. data/vendor/engine/Cargo.toml +56 -0
  1048. data/vendor/engine/LICENSE +21 -0
  1049. data/vendor/engine/README.md +5 -0
  1050. data/vendor/engine/src/admission.rs +421 -0
  1051. data/vendor/engine/src/catalog.rs +1233 -0
  1052. data/vendor/engine/src/check.rs +1386 -0
  1053. data/vendor/engine/src/clock.rs +244 -0
  1054. data/vendor/engine/src/clock_loom.rs +482 -0
  1055. data/vendor/engine/src/close_gate.rs +325 -0
  1056. data/vendor/engine/src/compact.rs +1509 -0
  1057. data/vendor/engine/src/engine/hooks.rs +1654 -0
  1058. data/vendor/engine/src/engine/info.rs +229 -0
  1059. data/vendor/engine/src/engine.rs +6114 -0
  1060. data/vendor/engine/src/error.rs +490 -0
  1061. data/vendor/engine/src/feed.rs +960 -0
  1062. data/vendor/engine/src/feed_reader.rs +1600 -0
  1063. data/vendor/engine/src/flush.rs +839 -0
  1064. data/vendor/engine/src/flushed_roots.rs +158 -0
  1065. data/vendor/engine/src/flushed_through_loom.rs +77 -0
  1066. data/vendor/engine/src/health.rs +201 -0
  1067. data/vendor/engine/src/large.rs +372 -0
  1068. data/vendor/engine/src/large_settle.rs +201 -0
  1069. data/vendor/engine/src/lib.rs +112 -0
  1070. data/vendor/engine/src/load_slot.rs +324 -0
  1071. data/vendor/engine/src/maintenance.rs +935 -0
  1072. data/vendor/engine/src/manifest/flight.rs +563 -0
  1073. data/vendor/engine/src/manifest.rs +1516 -0
  1074. data/vendor/engine/src/nonblocking.rs +603 -0
  1075. data/vendor/engine/src/options.rs +334 -0
  1076. data/vendor/engine/src/position.rs +125 -0
  1077. data/vendor/engine/src/purge_guard.rs +220 -0
  1078. data/vendor/engine/src/read/keys.rs +1049 -0
  1079. data/vendor/engine/src/read/knn.rs +423 -0
  1080. data/vendor/engine/src/read/reduce.rs +2057 -0
  1081. data/vendor/engine/src/read/traverse.rs +1013 -0
  1082. data/vendor/engine/src/read.rs +2429 -0
  1083. data/vendor/engine/src/row_cache.rs +1101 -0
  1084. data/vendor/engine/src/shard/tablets.rs +3582 -0
  1085. data/vendor/engine/src/shard.rs +12215 -0
  1086. data/vendor/engine/src/snapshot.rs +1429 -0
  1087. data/vendor/engine/src/source.rs +1379 -0
  1088. data/vendor/engine/src/timer_state.rs +226 -0
  1089. data/vendor/engine/src/waker.rs +124 -0
  1090. data/vendor/engine/src/watermark_waiters.rs +674 -0
  1091. data/vendor/engine/src/write.rs +1321 -0
  1092. data/vendor/format/Cargo.toml +40 -0
  1093. data/vendor/format/LICENSE +21 -0
  1094. data/vendor/format/README.md +5 -0
  1095. data/vendor/format/src/blob.rs +101 -0
  1096. data/vendor/format/src/block.rs +1120 -0
  1097. data/vendor/format/src/bloom.rs +456 -0
  1098. data/vendor/format/src/buckets.rs +552 -0
  1099. data/vendor/format/src/bytes.rs +101 -0
  1100. data/vendor/format/src/checksum.rs +132 -0
  1101. data/vendor/format/src/compress.rs +196 -0
  1102. data/vendor/format/src/cursor.rs +110 -0
  1103. data/vendor/format/src/distance.rs +598 -0
  1104. data/vendor/format/src/error.rs +93 -0
  1105. data/vendor/format/src/exact.rs +602 -0
  1106. data/vendor/format/src/feed.rs +285 -0
  1107. data/vendor/format/src/filter.rs +157 -0
  1108. data/vendor/format/src/half.rs +182 -0
  1109. data/vendor/format/src/hash.rs +127 -0
  1110. data/vendor/format/src/hll.rs +500 -0
  1111. data/vendor/format/src/ids.rs +95 -0
  1112. data/vendor/format/src/key.rs +620 -0
  1113. data/vendor/format/src/kind_params.rs +101 -0
  1114. data/vendor/format/src/lib.rs +54 -0
  1115. data/vendor/format/src/manifest.rs +1287 -0
  1116. data/vendor/format/src/roaring.rs +865 -0
  1117. data/vendor/format/src/scan.rs +297 -0
  1118. data/vendor/format/src/shm.rs +805 -0
  1119. data/vendor/format/src/sst.rs +233 -0
  1120. data/vendor/format/src/superblock.rs +345 -0
  1121. data/vendor/format/src/value.rs +163 -0
  1122. data/vendor/format/src/varint.rs +87 -0
  1123. data/vendor/format/src/vector.rs +936 -0
  1124. data/vendor/format/src/version.rs +92 -0
  1125. data/vendor/format/src/wal.rs +999 -0
  1126. data/vendor/io/Cargo.toml +29 -0
  1127. data/vendor/io/LICENSE +21 -0
  1128. data/vendor/io/README.md +5 -0
  1129. data/vendor/io/src/async_poll.rs +44 -0
  1130. data/vendor/io/src/buf.rs +694 -0
  1131. data/vendor/io/src/completion.rs +444 -0
  1132. data/vendor/io/src/error.rs +110 -0
  1133. data/vendor/io/src/file.rs +206 -0
  1134. data/vendor/io/src/lib.rs +53 -0
  1135. data/vendor/io/src/nowait.rs +256 -0
  1136. data/vendor/io/src/os/mod.rs +149 -0
  1137. data/vendor/io/src/os/unix.rs +897 -0
  1138. data/vendor/io/src/os/windows.rs +552 -0
  1139. data/vendor/io/src/own.rs +257 -0
  1140. data/vendor/io/src/pread.rs +854 -0
  1141. data/vendor/io/src/ring_wake.rs +113 -0
  1142. data/vendor/io/src/shared.rs +410 -0
  1143. data/vendor/io/src/sim.rs +1545 -0
  1144. data/vendor/io/src/sys.rs +214 -0
  1145. data/vendor/io/src/uring.rs +1839 -0
  1146. data/vendor/io/src/vfs.rs +154 -0
  1147. data/vendor/memory/Cargo.toml +34 -0
  1148. data/vendor/memory/LICENSE +21 -0
  1149. data/vendor/memory/README.md +11 -0
  1150. data/vendor/memory/src/consolidate.rs +640 -0
  1151. data/vendor/memory/src/dedup.rs +231 -0
  1152. data/vendor/memory/src/error.rs +131 -0
  1153. data/vendor/memory/src/feed_loop.rs +572 -0
  1154. data/vendor/memory/src/forget.rs +724 -0
  1155. data/vendor/memory/src/hooks.rs +109 -0
  1156. data/vendor/memory/src/ivf.rs +204 -0
  1157. data/vendor/memory/src/layout.rs +340 -0
  1158. data/vendor/memory/src/lib.rs +61 -0
  1159. data/vendor/memory/src/recall.rs +1182 -0
  1160. data/vendor/memory/src/store.rs +1785 -0
  1161. data/vendor/memory/src/watch.rs +339 -0
  1162. data/vendor/memtable/Cargo.toml +24 -0
  1163. data/vendor/memtable/LICENSE +21 -0
  1164. data/vendor/memtable/README.md +5 -0
  1165. data/vendor/memtable/src/lib.rs +1658 -0
  1166. data/vendor/memtable/src/loom_tests.rs +274 -0
  1167. data/vendor/memtable/src/mem.rs +344 -0
  1168. data/vendor/memtable/src/tests.rs +1061 -0
  1169. data/vendor/pager/Cargo.toml +23 -0
  1170. data/vendor/pager/LICENSE +21 -0
  1171. data/vendor/pager/README.md +5 -0
  1172. data/vendor/pager/src/alloc.rs +1008 -0
  1173. data/vendor/pager/src/lib.rs +1710 -0
  1174. data/vendor/pigeonhole/Cargo.toml +42 -0
  1175. data/vendor/pigeonhole/LICENSE +21 -0
  1176. data/vendor/pigeonhole/README.md +99 -0
  1177. data/vendor/pigeonhole/src/cell.rs +829 -0
  1178. data/vendor/pigeonhole/src/check.rs +368 -0
  1179. data/vendor/pigeonhole/src/db.rs +2324 -0
  1180. data/vendor/pigeonhole/src/doc_support.rs +89 -0
  1181. data/vendor/pigeonhole/src/error.rs +257 -0
  1182. data/vendor/pigeonhole/src/feed.rs +696 -0
  1183. data/vendor/pigeonhole/src/info.rs +425 -0
  1184. data/vendor/pigeonhole/src/lib.rs +202 -0
  1185. data/vendor/pigeonhole/src/merge.rs +135 -0
  1186. data/vendor/pigeonhole/src/metrics.rs +476 -0
  1187. data/vendor/pigeonhole/src/nonblocking.rs +666 -0
  1188. data/vendor/pigeonhole/src/options.rs +2075 -0
  1189. data/vendor/pigeonhole/src/read/budget.rs +584 -0
  1190. data/vendor/pigeonhole/src/read.rs +2463 -0
  1191. data/vendor/pigeonhole/src/recovery.rs +876 -0
  1192. data/vendor/pigeonhole/src/retry.rs +358 -0
  1193. data/vendor/pigeonhole/src/set.rs +103 -0
  1194. data/vendor/pigeonhole/src/table.rs +861 -0
  1195. data/vendor/pigeonhole/src/vector.rs +351 -0
  1196. data/vendor/pigeonhole/src/write.rs +2815 -0
  1197. data/vendor/runtime/Cargo.toml +21 -0
  1198. data/vendor/runtime/LICENSE +21 -0
  1199. data/vendor/runtime/README.md +5 -0
  1200. data/vendor/runtime/src/completion.rs +629 -0
  1201. data/vendor/runtime/src/drivers.rs +1175 -0
  1202. data/vendor/runtime/src/lib.rs +1546 -0
  1203. data/vendor/runtime/src/pool.rs +992 -0
  1204. data/vendor/runtime/src/sched.rs +809 -0
  1205. data/vendor/runtime/src/signal.rs +532 -0
  1206. data/vendor/runtime/src/submit_gate.rs +144 -0
  1207. data/vendor/shm/Cargo.toml +24 -0
  1208. data/vendor/shm/LICENSE +21 -0
  1209. data/vendor/shm/README.md +5 -0
  1210. data/vendor/shm/src/lib.rs +427 -0
  1211. data/vendor/shm/src/lock.rs +153 -0
  1212. data/vendor/shm/src/region.rs +1609 -0
  1213. data/vendor/sst/Cargo.toml +26 -0
  1214. data/vendor/sst/LICENSE +21 -0
  1215. data/vendor/sst/README.md +5 -0
  1216. data/vendor/sst/src/blob.rs +380 -0
  1217. data/vendor/sst/src/iter.rs +803 -0
  1218. data/vendor/sst/src/lib.rs +695 -0
  1219. data/vendor/sst/src/reader.rs +814 -0
  1220. data/vendor/sst/src/writer.rs +596 -0
  1221. data/vendor/text/Cargo.toml +26 -0
  1222. data/vendor/text/LICENSE +21 -0
  1223. data/vendor/text/README.md +9 -0
  1224. data/vendor/text/src/error.rs +108 -0
  1225. data/vendor/text/src/fuzzy.rs +265 -0
  1226. data/vendor/text/src/highlight.rs +236 -0
  1227. data/vendor/text/src/index.rs +1152 -0
  1228. data/vendor/text/src/layout.rs +424 -0
  1229. data/vendor/text/src/lib.rs +75 -0
  1230. data/vendor/text/src/maxscore.rs +658 -0
  1231. data/vendor/text/src/query.rs +450 -0
  1232. data/vendor/text/src/search.rs +569 -0
  1233. data/vendor/text/src/sloppy.rs +460 -0
  1234. data/vendor/text/src/tokenizer.rs +163 -0
  1235. data/vendor/vector/Cargo.toml +28 -0
  1236. data/vendor/vector/LICENSE +21 -0
  1237. data/vendor/vector/README.md +9 -0
  1238. data/vendor/vector/src/error.rs +63 -0
  1239. data/vendor/vector/src/half.rs +167 -0
  1240. data/vendor/vector/src/hooks.rs +135 -0
  1241. data/vendor/vector/src/index.rs +2690 -0
  1242. data/vendor/vector/src/layout.rs +102 -0
  1243. data/vendor/vector/src/lib.rs +52 -0
  1244. data/vendor/vector/src/point.rs +500 -0
  1245. data/vendor/vector/src/rebalancer.rs +200 -0
  1246. data/vendor/vector/src/registry.rs +81 -0
  1247. data/vendor/wal/Cargo.toml +25 -0
  1248. data/vendor/wal/LICENSE +21 -0
  1249. data/vendor/wal/README.md +5 -0
  1250. data/vendor/wal/src/feed.rs +610 -0
  1251. data/vendor/wal/src/foreground.rs +122 -0
  1252. data/vendor/wal/src/lib.rs +458 -0
  1253. data/vendor/wal/src/mem.rs +166 -0
  1254. data/vendor/wal/src/recovery.rs +426 -0
  1255. data/vendor/wal/src/stream.rs +2382 -0
  1256. metadata +1310 -0
@@ -0,0 +1,1546 @@
1
+ //! Thread-per-core shard runtime for Pigeonhole.
2
+ //!
3
+ //! The runtime runs N shard loops. Each loop owns a [`ShardHandler`] (the engine's per-shard
4
+ //! state), drains its MPSC queue of messages, and runs cooperative background [`Task`]s in
5
+ //! short time slices that always yield to queued foreground work.
6
+ //!
7
+ //! Two embedding modes share every line of the loop:
8
+ //! - **Engine-owned:** [`Runtime::start`] spawns and pins one thread per shard.
9
+ //! - **Application-owned:** [`Runtime::application_owned`] returns one [`ShardDriver`] per
10
+ //! shard; the application calls [`ShardDriver::run_once`] from its own core threads. The
11
+ //! simulator uses this mode to run shards deterministically.
12
+ //! [`Runtime::application_owned_with_workers`] also returns background workers
13
+ //! ([`PoolDriver`], D284) the application drives the same way, so flush and compaction
14
+ //! leave the shards as engine-owned mode's compaction threads take them off.
15
+ //!
16
+ //! Messages are a type the engine defines (`H::Msg`), so the hot path has no boxing and no
17
+ //! virtual calls. Background tasks are boxed (`Box<dyn Task>`): they are few and long-lived.
18
+ //!
19
+ //! # Shared state
20
+ //! Shards share nothing mutable except their documented queues: each shard's message queue
21
+ //! (a lock-free `std::sync::mpsc` channel plus a closed flag and in-flight counter), its
22
+ //! idle/wake flag, and the background workers' pool (its queue and the tasks each worker
23
+ //! holds, D284). A
24
+ //! [`Notifier`]/[`Waiter`] pair shares one completion slot between two parties.
25
+ //!
26
+ //! # Example
27
+ //! ```
28
+ //! use std::sync::Arc;
29
+ //! use pigeonhole_io::pread::PreadVfs;
30
+ //! use pigeonhole_runtime::{
31
+ //! Notifier, Runtime, RuntimeConfig, ShardContext, ShardHandler, ShardId, completion,
32
+ //! };
33
+ //!
34
+ //! /// Each shard keeps a running sum and replies with it.
35
+ //! struct Adder(u64);
36
+ //!
37
+ //! impl ShardHandler for Adder {
38
+ //! type Msg = (u64, Notifier<u64>);
39
+ //! fn handle(&mut self, _ctx: &mut ShardContext<'_, Self::Msg>, (n, reply): Self::Msg) {
40
+ //! self.0 += n;
41
+ //! reply.notify(self.0);
42
+ //! }
43
+ //! fn end_batch(&mut self, _ctx: &mut ShardContext<'_, Self::Msg>) {}
44
+ //! }
45
+ //!
46
+ //! let mut config = RuntimeConfig::new(PreadVfs::new(1));
47
+ //! config.shards = 2;
48
+ //! config.pin_threads = false;
49
+ //! let rt = Runtime::start(config, vec![Adder(0), Adder(100)])?;
50
+ //! let (tx, rx) = completion();
51
+ //! rt.submitter(ShardId(1)).submit((5, tx))?;
52
+ //! assert_eq!(rx.wait(), Some(105));
53
+ //! let handlers = rt.shutdown()?;
54
+ //! assert_eq!(handlers[1].0, 105);
55
+ //! # Ok::<(), pigeonhole_runtime::Error>(())
56
+ //! ```
57
+ //!
58
+ //! Part of [Pigeonhole](https://github.com/CodingAnarchy/pigeonhole). See the crate README.
59
+ #![forbid(unsafe_code)]
60
+
61
+ mod completion;
62
+ mod drivers;
63
+ mod pool;
64
+ mod sched;
65
+ mod signal;
66
+ mod submit_gate;
67
+
68
+ use std::cell::Cell;
69
+ use std::fmt;
70
+ use std::sync::Arc;
71
+ use std::sync::mpsc::{self, Receiver, Sender};
72
+ use std::thread::{self, JoinHandle};
73
+ use std::time::Duration;
74
+
75
+ use pigeonhole_io::{Vfs, VfsRef};
76
+
77
+ pub use completion::{Notifier, Settle, SlotCache, Waiter, completion, completion_from};
78
+ pub use pool::{PoolDriver, WorkerPool};
79
+ pub use sched::{Task, TaskPoll, TaskWaker};
80
+
81
+ use pool::{Origin, Pool};
82
+ use sched::{Scheduler, Spawner};
83
+ use signal::{Signal, WakeTarget};
84
+
85
+ /// Most messages handled before `end_batch` runs, so a flooded queue still commits groups.
86
+ const MAX_BATCH: usize = 1024;
87
+
88
+ /// The most turns in a row that skip their background slices because a future of the
89
+ /// driving thread was woken (D237): the next turn runs them, so flush and compaction keep
90
+ /// at least one turn in `MAX_TURN_YIELDS + 1`.
91
+ const MAX_TURN_YIELDS: u32 = 8;
92
+
93
+ /// Result alias for this crate.
94
+ pub type Result<T, E = Error> = std::result::Result<T, E>;
95
+
96
+ /// Runtime errors.
97
+ #[derive(Debug)]
98
+ #[non_exhaustive]
99
+ pub enum Error {
100
+ /// The shard's queue is closed (shutdown).
101
+ Closed,
102
+ /// A thread could not be spawned or pinned.
103
+ Spawn(std::io::Error),
104
+ /// The configuration is not valid for the chosen mode; names the field.
105
+ InvalidConfig(&'static str),
106
+ }
107
+
108
+ impl fmt::Display for Error {
109
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
110
+ match self {
111
+ Error::Closed => f.write_str("shard queue is closed"),
112
+ Error::Spawn(e) => write!(f, "could not start runtime thread: {e}"),
113
+ Error::InvalidConfig(what) => write!(f, "invalid runtime configuration: {what}"),
114
+ }
115
+ }
116
+ }
117
+
118
+ impl std::error::Error for Error {
119
+ fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
120
+ match self {
121
+ Error::Closed | Error::InvalidConfig(_) => None,
122
+ Error::Spawn(e) => Some(e),
123
+ }
124
+ }
125
+ }
126
+
127
+ /// A shard's index, `0..shard_count`.
128
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
129
+ pub struct ShardId(pub u16);
130
+
131
+ /// Runtime configuration.
132
+ ///
133
+ /// ```
134
+ /// use std::time::Duration;
135
+ /// use pigeonhole_io::pread::PreadVfs;
136
+ /// use pigeonhole_runtime::RuntimeConfig;
137
+ ///
138
+ /// let mut config = RuntimeConfig::new(PreadVfs::new(1));
139
+ /// assert!(config.shards >= 1);
140
+ /// config.time_slice = Duration::from_micros(200);
141
+ /// ```
142
+ #[derive(Debug, Clone)]
143
+ #[non_exhaustive]
144
+ pub struct RuntimeConfig {
145
+ /// Number of shards (default: one per physical core, D220).
146
+ pub shards: usize,
147
+ /// Pin shard threads to CPUs (engine-owned mode).
148
+ pub pin_threads: bool,
149
+ /// Background workers for flush and compaction; 0 runs them on the shards. Engine-owned
150
+ /// mode starts a pinned thread per worker. Application-owned mode starts no threads
151
+ /// (decision D40): [`Runtime::application_owned_with_workers`] hands the workers to the
152
+ /// application to drive (D284), and [`Runtime::application_owned`] refuses a nonzero
153
+ /// value with [`Error::InvalidConfig`]. As with tasks on shards, tasks still queued or
154
+ /// running on engine-owned workers at shutdown are dropped unfinished.
155
+ pub compaction_threads: usize,
156
+ /// Engine-owned mode: the driver threads the shards run on (D289). Zero (the default)
157
+ /// gives each shard a thread of its own; `k` in `1..shards` runs the shards' turns on
158
+ /// `k` threads, shard `i` on thread `i % k`, each pinned like a shard thread. A larger
159
+ /// value means one per shard. Fewer threads, each busier, park less: a commit then
160
+ /// rarely waits for its shard's thread to be woken and scheduled (#760).
161
+ pub shard_threads: usize,
162
+ /// Engine-owned mode: size the driver threads to the load (D289 PR 2). Up to
163
+ /// `shard_threads` drivers (one per shard if 0) start, all pinned, and the shards move
164
+ /// between them: a light load runs on few, which park less, a heavy one on all. Off, the
165
+ /// shards stay on `shard_threads` drivers as started.
166
+ pub adaptive_drivers: bool,
167
+ /// Longest a background task runs before yielding.
168
+ pub time_slice: Duration,
169
+ /// Engine-owned mode: how long a shard thread that just handled a message keeps
170
+ /// polling its queue before it parks (D198). A message that arrives meanwhile is
171
+ /// handled without the producer waking the thread. Zero (the default) parks at once.
172
+ /// A window that finds nothing backs off: the thread skips the next 1, 2, 4, ... up to 32
173
+ /// windows, and an idle shard (no message since its last park) never polls.
174
+ pub idle_spin: Duration,
175
+ /// Engine-owned mode: the longest window a driver may poll for (#1176). Above
176
+ /// `idle_spin`, each driver sizes its window from its recent idle gaps: the longest, up
177
+ /// to this cap, whose expected poll per gap costs no more than `idle_spin`'s could. A
178
+ /// steady stream of messages then waits for a wake about as rarely as under the cap, and
179
+ /// a sparse one polls no longer per message than under `idle_spin`. Zero (the default),
180
+ /// or at most `idle_spin`: the window is `idle_spin`, fixed.
181
+ pub idle_spin_cap: Duration,
182
+ /// Clock source (simulated under test).
183
+ pub vfs: VfsRef,
184
+ }
185
+
186
+ impl RuntimeConfig {
187
+ /// Defaults: one shard per physical core (D220), pinned, no compaction threads, 500 µs
188
+ /// slices.
189
+ pub fn new(vfs: VfsRef) -> Self {
190
+ Self {
191
+ shards: pigeonhole_io::sys::default_shards(),
192
+ pin_threads: true,
193
+ compaction_threads: 0,
194
+ shard_threads: 0,
195
+ adaptive_drivers: false,
196
+ time_slice: Duration::from_micros(500),
197
+ idle_spin: Duration::ZERO,
198
+ idle_spin_cap: Duration::ZERO,
199
+ vfs,
200
+ }
201
+ }
202
+
203
+ fn slice_nanos(&self) -> u64 {
204
+ u64::try_from(self.time_slice.as_nanos())
205
+ .unwrap_or(u64::MAX)
206
+ .max(1)
207
+ }
208
+ }
209
+
210
+ /// The engine's per-shard state. One instance per shard, moved onto its thread.
211
+ ///
212
+ /// See the [crate example](crate#example).
213
+ pub trait ShardHandler: Send + 'static {
214
+ /// The message type submitted to this shard.
215
+ type Msg: Send + 'static;
216
+
217
+ /// Handles one foreground message. `ctx` gives access to other shards and background
218
+ /// spawning.
219
+ fn handle(&mut self, ctx: &mut ShardContext<'_, Self::Msg>, msg: Self::Msg);
220
+
221
+ /// Called after each drained batch of messages (the group-commit point: write the WAL
222
+ /// once, sync once, publish, wake committers).
223
+ fn end_batch(&mut self, ctx: &mut ShardContext<'_, Self::Msg>);
224
+ }
225
+
226
+ /// The handler's view of the runtime while it runs on its shard.
227
+ ///
228
+ /// ```
229
+ /// use pigeonhole_runtime::{ShardContext, ShardHandler, ShardId};
230
+ ///
231
+ /// /// Forwards every message to the next shard until its hop count runs out.
232
+ /// struct Relay;
233
+ ///
234
+ /// impl ShardHandler for Relay {
235
+ /// type Msg = u32;
236
+ /// fn handle(&mut self, ctx: &mut ShardContext<'_, u32>, hops: u32) {
237
+ /// if hops > 0 {
238
+ /// let next = ShardId(((ctx.shard().0 as usize + 1) % ctx.shard_count()) as u16);
239
+ /// let _ = ctx.submitter(next).submit(hops - 1);
240
+ /// }
241
+ /// }
242
+ /// fn end_batch(&mut self, _ctx: &mut ShardContext<'_, u32>) {}
243
+ /// }
244
+ /// ```
245
+ pub struct ShardContext<'a, M> {
246
+ shard: ShardId,
247
+ submitters: &'a [Submitter<M>],
248
+ spawner: &'a mut Spawner,
249
+ vfs: &'a dyn Vfs,
250
+ }
251
+
252
+ impl<M> fmt::Debug for ShardContext<'_, M> {
253
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
254
+ f.debug_struct("ShardContext")
255
+ .field("shard", &self.shard)
256
+ .field("shard_count", &self.submitters.len())
257
+ .finish_non_exhaustive()
258
+ }
259
+ }
260
+
261
+ impl<M: Send + 'static> ShardContext<'_, M> {
262
+ /// This shard.
263
+ pub fn shard(&self) -> ShardId {
264
+ self.shard
265
+ }
266
+
267
+ /// Number of shards.
268
+ pub fn shard_count(&self) -> usize {
269
+ self.submitters.len()
270
+ }
271
+
272
+ /// Submitter for another shard.
273
+ ///
274
+ /// # Panics
275
+ /// If `shard` is out of range.
276
+ pub fn submitter(&self, shard: ShardId) -> &Submitter<M> {
277
+ &self.submitters[usize::from(shard.0)]
278
+ }
279
+
280
+ /// Schedules a background task on this shard, or on the background workers if
281
+ /// configured (unless it does not [`offload`](Task::offload)).
282
+ pub fn spawn(&mut self, task: Box<dyn Task>) {
283
+ self.spawner.spawn(task);
284
+ }
285
+
286
+ /// Runs [`Task::reclaim`] on the tasks the background workers have handed back to this
287
+ /// shard and takes them in, now rather than at the start of the next turn (D284). A
288
+ /// closing engine calls it on its close message: the workers' close handed them back
289
+ /// before that message was sent, so everything the close took back is here.
290
+ pub fn take_back(&mut self) {
291
+ let now = self.vfs.monotonic_nanos();
292
+ self.spawner.take_back(now);
293
+ }
294
+
295
+ /// For a room wait on this shard (writers waiting for a flush to free memtable room,
296
+ /// D284): takes back this shard's commit-path tasks ([`Task::commit_path`]: flushes, the manifest pump, WAL spares) that an
297
+ /// application's background worker holds but has not run for 2 ms, to run here. Never
298
+ /// waits: a flush a worker is running stays there. Looks again by itself while one is
299
+ /// not yet that idle. Returns how many came back now; 0 without workers, and always on
300
+ /// engine-owned workers, which are always driven.
301
+ pub fn reclaim_room(&mut self) -> usize {
302
+ let now = self.vfs.monotonic_nanos();
303
+ self.spawner.reclaim_room(now)
304
+ }
305
+
306
+ /// Monotonic time in nanoseconds.
307
+ pub fn now_nanos(&self) -> u64 {
308
+ self.vfs.monotonic_nanos()
309
+ }
310
+ }
311
+
312
+ /// One shard's queue. Producers share it through [`Submitter`]s.
313
+ struct Inbox<M> {
314
+ shard: ShardId,
315
+ tx: Sender<M>,
316
+ /// Submits against shutdown (`submit_gate`).
317
+ gate: submit_gate::SubmitGate,
318
+ signal: Arc<Signal>,
319
+ }
320
+
321
+ impl<M> Inbox<M> {
322
+ fn close(&self) {
323
+ self.gate.close();
324
+ self.signal.force_wake();
325
+ }
326
+
327
+ fn is_closed(&self) -> bool {
328
+ self.gate.is_closed()
329
+ }
330
+ }
331
+
332
+ /// Sends messages to one shard's lock-free MPSC queue and wakes it. Cheap to clone.
333
+ ///
334
+ /// Messages from one submitter (or one thread) arrive in the order they were submitted.
335
+ /// See the [crate example](crate#example).
336
+ pub struct Submitter<M> {
337
+ inbox: Arc<Inbox<M>>,
338
+ }
339
+
340
+ impl<M> fmt::Debug for Submitter<M> {
341
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
342
+ f.debug_struct("Submitter")
343
+ .field("shard", &self.inbox.shard)
344
+ .finish_non_exhaustive()
345
+ }
346
+ }
347
+
348
+ impl<M> Clone for Submitter<M> {
349
+ fn clone(&self) -> Self {
350
+ Self {
351
+ inbox: Arc::clone(&self.inbox),
352
+ }
353
+ }
354
+ }
355
+
356
+ impl<M: Send + 'static> Submitter<M> {
357
+ /// `(parks, wakes)` of the target shard since the runtime started (ICR 0027): times its
358
+ /// engine-owned thread parked with nothing to do (after its idle spin), and submits or
359
+ /// notifications that found it announced asleep and woke it. An application-owned
360
+ /// shard's loop sleeps in the application, so only its wakes are counted. Relaxed: a
361
+ /// reading taken while the shard runs may lag it.
362
+ pub fn idle_counts(&self) -> (u64, u64) {
363
+ self.inbox.signal.idle_counts()
364
+ }
365
+
366
+ /// Nanoseconds the target shard's engine-owned thread has spent in its work turns since
367
+ /// the runtime started (D217, ICR 0033): handling messages and running its tasks, not
368
+ /// spinning (D198) or parked. Its rise over an interval, divided by the interval, is how
369
+ /// busy the shard was. An application-owned shard's loop is the application's, so
370
+ /// nothing is counted. Relaxed: a reading taken during a turn lags it.
371
+ pub fn busy_nanos(&self) -> u64 {
372
+ self.inbox.signal.busy_nanos()
373
+ }
374
+
375
+ /// Nanoseconds the compaction pool's threads have spent in slices of the tasks the
376
+ /// target shard spawned onto the pool (its flushes and compactions, D256), since the
377
+ /// runtime started. With `compaction_threads = 0` the shard runs those slices inside
378
+ /// its own turns and nothing is counted here. Relaxed, as [`Submitter::busy_nanos`].
379
+ pub fn pool_busy_nanos(&self) -> u64 {
380
+ self.inbox.signal.pool_busy_nanos()
381
+ }
382
+
383
+ /// Nanoseconds the target shard's engine-owned thread has spent in its spin before
384
+ /// parking (D198: polling for the next message after handling one), since the runtime
385
+ /// started (D256). Not part of [`Submitter::busy_nanos`]; the balancer adds the two.
386
+ /// Relaxed, as that one.
387
+ pub fn spin_nanos(&self) -> u64 {
388
+ self.inbox.signal.spin_nanos()
389
+ }
390
+
391
+ /// `(fallbacks, room)`: tasks of the target shard's that came back from the background
392
+ /// workers (D284) because no worker made a pass for 10 ms while they were queued
393
+ /// (workers configured but not driven), and commit-path tasks a room wait on the shard
394
+ /// took back from a worker that held them without running them. Relaxed.
395
+ pub fn background_take_backs(&self) -> (u64, u64) {
396
+ self.inbox.signal.take_back_counts()
397
+ }
398
+
399
+ /// Enqueues `msg`. Fails only after shutdown.
400
+ pub fn submit(&self, msg: M) -> Result<()> {
401
+ let inbox = &*self.inbox;
402
+ // Either shutdown sees us enter and waits for the send, or we see it closed and
403
+ // refuse (`submit_gate`).
404
+ if !inbox.gate.enter() {
405
+ return Err(Error::Closed);
406
+ }
407
+ let sent = inbox.tx.send(msg);
408
+ inbox.gate.leave();
409
+ sent.map_err(|_| Error::Closed)?;
410
+ inbox.signal.notify();
411
+ Ok(())
412
+ }
413
+ }
414
+
415
+ thread_local! {
416
+ static CURRENT_SHARD: Cell<Option<ShardId>> = const { Cell::new(None) };
417
+ }
418
+
419
+ /// Marks the calling thread as running `shard` until dropped.
420
+ struct EnterShard(Option<ShardId>);
421
+
422
+ impl EnterShard {
423
+ fn new(shard: ShardId) -> Self {
424
+ Self(CURRENT_SHARD.with(|c| c.replace(Some(shard))))
425
+ }
426
+ }
427
+
428
+ impl Drop for EnterShard {
429
+ fn drop(&mut self) {
430
+ CURRENT_SHARD.with(|c| c.set(self.0));
431
+ }
432
+ }
433
+
434
+ /// A small id for the calling thread, nonzero: cheaper to compare each turn than
435
+ /// `thread::current().id()`, which counts a reference.
436
+ fn thread_token() -> u64 {
437
+ thread_local! {
438
+ static TOKEN: std::cell::Cell<u64> = const { std::cell::Cell::new(0) };
439
+ }
440
+ static NEXT: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(1);
441
+ TOKEN.with(|t| match t.get() {
442
+ 0 => {
443
+ let v = NEXT.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
444
+ t.set(v);
445
+ v
446
+ }
447
+ v => v,
448
+ })
449
+ }
450
+
451
+ /// The shard loop, shared by both embedding modes.
452
+ struct ShardCore<H: ShardHandler> {
453
+ id: ShardId,
454
+ handler: H,
455
+ rx: Receiver<H::Msg>,
456
+ /// A message taken while checking for work before sleeping; handled first.
457
+ stash: Option<H::Msg>,
458
+ submitters: Arc<[Submitter<H::Msg>]>,
459
+ spawner: Spawner,
460
+ vfs: VfsRef,
461
+ time_slice: u64,
462
+ /// The clock when the loop last went idle with sleeping tasks: if it reads the same at
463
+ /// the next pass, the clock is not moving on its own and sleepers run early to notice.
464
+ idle_at: Option<u64>,
465
+ /// The thread ([`thread_token`]) last given its own I/O ring (`Vfs::attach_thread`, at
466
+ /// its first turn of this shard; 0: none yet), and whether it got one: a turn reaps only
467
+ /// then, so a backend without rings costs a turn nothing (#402). Per thread, not once: an
468
+ /// application may move a shard to another thread, which needs a ring of its own, or its
469
+ /// I/O would go to a ring no thread reaps (the #473 scaling hang).
470
+ attached: u64,
471
+ own_ring: bool,
472
+ /// Debug builds: whether the thread's ring still had I/O in flight when its last turn of
473
+ /// this shard ended, and whether `release` ran since. A shard that turns up on another
474
+ /// thread with I/O left behind unreleased is a bug (#492).
475
+ #[cfg(debug_assertions)]
476
+ left_io: bool,
477
+ #[cfg(debug_assertions)]
478
+ released: bool,
479
+ /// Polling the queue before parking (D198; engine-owned mode only).
480
+ spin: IdleSpin,
481
+ /// Messages handled and background slices run, in all (`ShardDriver::work_count`).
482
+ work_done: u64,
483
+ /// Turns in a row that ended before their background slices because a future of the
484
+ /// driving thread was woken (D237; application-owned mode only, at most
485
+ /// [`MAX_TURN_YIELDS`]).
486
+ yields: u32,
487
+ }
488
+
489
+ /// An engine-owned shard's poll of its queue before it parks (D198).
490
+ #[derive(Debug)]
491
+ struct IdleSpin {
492
+ window: Duration,
493
+ /// The adaptive window's cap (`RuntimeConfig::idle_spin_cap`); at most `window`: fixed.
494
+ cap: Duration,
495
+ /// A message was handled since the thread last parked or polled.
496
+ worked: bool,
497
+ /// Polls still to skip after one found nothing, and the backoff exponent.
498
+ skip: u32,
499
+ level: u32,
500
+ }
501
+
502
+ impl IdleSpin {
503
+ /// The most polls skipped after polls kept finding nothing.
504
+ const MAX_SKIP: u32 = 64;
505
+
506
+ fn new(window: Duration, cap: Duration) -> Self {
507
+ Self {
508
+ window,
509
+ cap,
510
+ worked: false,
511
+ skip: 0,
512
+ level: 0,
513
+ }
514
+ }
515
+
516
+ /// Whether to poll before parking now; consumes the "handled a message" mark.
517
+ fn due(&mut self) -> bool {
518
+ if self.window.is_zero() || !std::mem::take(&mut self.worked) {
519
+ return false;
520
+ }
521
+ if self.skip > 0 {
522
+ self.skip -= 1;
523
+ return false;
524
+ }
525
+ true
526
+ }
527
+
528
+ /// Records a poll's outcome: a hit resets the backoff, a miss doubles it.
529
+ fn record(&mut self, hit: bool) {
530
+ if hit {
531
+ self.level = 0;
532
+ } else {
533
+ self.level = (self.level + 1).min(Self::MAX_SKIP.trailing_zeros());
534
+ self.skip = 1 << (self.level - 1);
535
+ }
536
+ }
537
+ }
538
+
539
+ impl<H: ShardHandler> ShardCore<H> {
540
+ fn inbox(&self) -> &Inbox<H::Msg> {
541
+ &self.submitters[usize::from(self.id.0)].inbox
542
+ }
543
+
544
+ fn signal(&self) -> &Signal {
545
+ &self.inbox().signal
546
+ }
547
+
548
+ /// Splits `self` into the handler and its context.
549
+ fn parts(&mut self) -> (&mut H, ShardContext<'_, H::Msg>) {
550
+ let ctx = ShardContext {
551
+ shard: self.id,
552
+ submitters: &self.submitters,
553
+ spawner: &mut self.spawner,
554
+ vfs: &*self.vfs,
555
+ };
556
+ (&mut self.handler, ctx)
557
+ }
558
+
559
+ /// Handles up to [`MAX_BATCH`] queued messages, then calls `end_batch` if any ran.
560
+ fn drain(&mut self) -> usize {
561
+ let stash = self.stash.take();
562
+ let ShardCore {
563
+ id,
564
+ handler,
565
+ rx,
566
+ submitters,
567
+ spawner,
568
+ vfs,
569
+ ..
570
+ } = self;
571
+ let mut ctx = ShardContext {
572
+ shard: *id,
573
+ submitters,
574
+ spawner,
575
+ vfs: &**vfs,
576
+ };
577
+ let mut n = 0;
578
+ if let Some(msg) = stash {
579
+ handler.handle(&mut ctx, msg);
580
+ n += 1;
581
+ }
582
+ while n < MAX_BATCH {
583
+ match rx.try_recv() {
584
+ Ok(msg) => {
585
+ handler.handle(&mut ctx, msg);
586
+ n += 1;
587
+ }
588
+ Err(_) => break,
589
+ }
590
+ }
591
+ if n > 0 {
592
+ handler.end_batch(&mut ctx);
593
+ self.spin.worked = true;
594
+ self.work_done += n as u64;
595
+ }
596
+ n
597
+ }
598
+
599
+ fn run_once(&mut self, deadline: u64) -> bool {
600
+ let more = self.run_turn(deadline);
601
+ #[cfg(debug_assertions)]
602
+ {
603
+ self.left_io = self.own_ring && pigeonhole_io::own_io_in_flight();
604
+ }
605
+ more
606
+ }
607
+
608
+ /// Hands the shard over cleanly: drives it until the calling thread's ring has nothing
609
+ /// in flight, so nothing of the shard's waits on a ring only this thread may reap (#492,
610
+ /// ICR 0029). Without per-thread rings it returns at once.
611
+ fn release(&mut self) {
612
+ if !self.own_ring || self.attached != thread_token() {
613
+ return;
614
+ }
615
+ let slice = std::time::Duration::from_millis(1);
616
+ while pigeonhole_io::own_io_in_flight() {
617
+ pigeonhole_io::reap_own_io(Some(slice));
618
+ let deadline = self.vfs.monotonic_nanos().saturating_add(1_000_000);
619
+ self.run_turn(deadline);
620
+ }
621
+ #[cfg(debug_assertions)]
622
+ {
623
+ self.left_io = false;
624
+ self.released = true;
625
+ }
626
+ }
627
+
628
+ /// An engine-owned driver hands the shard to another with its own ring quiet (D289 PR
629
+ /// 2): nothing of the thread's is in flight, as after `release`.
630
+ fn mark_released(&mut self) {
631
+ #[cfg(debug_assertions)]
632
+ {
633
+ self.left_io = false;
634
+ self.released = true;
635
+ }
636
+ }
637
+
638
+ fn run_turn(&mut self, deadline: u64) -> bool {
639
+ let _shard = EnterShard::new(self.id);
640
+ self.signal().awake();
641
+ // A backend with a ring per driving thread (#402) gives each thread that runs this
642
+ // shard its own (a shard moved to another thread needs one there, #473); what
643
+ // completed on it resolves now, so the work it unblocks runs this turn. Without rings
644
+ // nothing depends on the thread: a turn pays the two branches it always did, and only
645
+ // a ring backend reads the thread token (#485's instruction ceilings).
646
+ if self.own_ring {
647
+ if self.attached != thread_token() {
648
+ #[cfg(debug_assertions)]
649
+ {
650
+ assert!(
651
+ !self.left_io || self.released,
652
+ "shard {} moved to another thread while its I/O was in flight on the \
653
+ old thread's ring: call release() on the old thread first (#492)",
654
+ self.id.0
655
+ );
656
+ self.released = false;
657
+ }
658
+ self.attach();
659
+ }
660
+ pigeonhole_io::reap_own_io(None);
661
+ } else if self.attached == 0 {
662
+ self.attach();
663
+ }
664
+ // Tasks back from the background workers first (D284): what they report on the
665
+ // way back is queued before anything this turn handles that a later reclaim (the
666
+ // engine's close) sent after them.
667
+ let start = self.vfs.monotonic_nanos();
668
+ if self.spawner.has_pool() {
669
+ self.spawner.take_back(start);
670
+ }
671
+ self.drain();
672
+ self.spawner.local.collect_woken();
673
+ if self.idle_at.take() == Some(start) && self.vfs.clock_is_simulated() {
674
+ // A simulated clock has not moved since the loop went idle: sleepers check for
675
+ // themselves (a real clock that reads the same only ticks coarsely, #263).
676
+ self.spawner.local.wake_sleepers();
677
+ }
678
+ self.spawner.local.wake_due(start);
679
+ if self.spawner.local.has_runnable() {
680
+ // D237: the drain woke a future the driving thread awaits (a commit it submitted
681
+ // settled): hand the thread back before the background slices, so it sees that
682
+ // now rather than at the deadline. The slices run next turn, and after
683
+ // `MAX_TURN_YIELDS` such turns in a row one runs them anyway. Only a
684
+ // `ShardDriver::waker` wakes this, so engine-owned threads never skip. Checked
685
+ // only when there are slices to skip: a turn without background work pays
686
+ // nothing (the D193 commit ceilings), and a wake left for a later turn costs
687
+ // that turn's slices at most.
688
+ if self.signal().take_turn_woken() && self.yields < MAX_TURN_YIELDS {
689
+ self.yields += 1;
690
+ return true;
691
+ }
692
+ self.yields = 0;
693
+ loop {
694
+ let now = self.vfs.monotonic_nanos();
695
+ if now >= deadline {
696
+ break;
697
+ }
698
+ self.spawner
699
+ .local
700
+ .run_one(now.saturating_add(self.time_slice).min(deadline));
701
+ self.work_done += 1;
702
+ // Foreground first: whatever queued during the slice runs before the next
703
+ // one.
704
+ self.drain();
705
+ self.spawner.local.collect_woken();
706
+ self.spawner.local.wake_due(self.vfs.monotonic_nanos());
707
+ if !self.spawner.local.has_runnable() {
708
+ break;
709
+ }
710
+ }
711
+ }
712
+ if self.spawner.local.has_runnable() {
713
+ return true;
714
+ }
715
+ let more = self.check_before_sleep();
716
+ if !more && self.next_deadline().is_some() {
717
+ self.idle_at = Some(self.vfs.monotonic_nanos());
718
+ }
719
+ more
720
+ }
721
+
722
+ /// Gives the calling thread its own I/O ring if the backend has them, once per thread.
723
+ #[cold]
724
+ fn attach(&mut self) {
725
+ self.attached = thread_token();
726
+ self.vfs.attach_thread();
727
+ self.own_ring = pigeonhole_io::own_io_waker().is_some();
728
+ }
729
+
730
+ /// The earliest deadline of a sleeping background task on this shard, or of its next
731
+ /// look at the background workers (D284).
732
+ fn next_deadline(&self) -> Option<u64> {
733
+ self.spawner.next_deadline()
734
+ }
735
+
736
+ /// Announces sleep, then re-checks for work. Returns whether work remains.
737
+ fn check_before_sleep(&mut self) -> bool {
738
+ self.signal().prepare_sleep();
739
+ if self.stash.is_none() {
740
+ self.stash = self.rx.try_recv().ok();
741
+ }
742
+ if self.stash.is_some() || self.signal().task_woken() || self.spawner.has_back() {
743
+ self.signal().awake();
744
+ return true;
745
+ }
746
+ false
747
+ }
748
+
749
+ /// An application thread's wait between turns (`ShardDriver::wait`, #553): until work
750
+ /// arrives, a woken task, this thread's own I/O completing, the next background
751
+ /// deadline, or `timeout`. It waits in the thread's ring while its own I/O is in flight
752
+ /// (only a reap completes that), and parks otherwise.
753
+ fn wait(&mut self, timeout: Duration) {
754
+ let now = self.vfs.monotonic_nanos();
755
+ let wait = self.next_deadline().map_or(timeout, |d| {
756
+ Duration::from_nanos(d.saturating_sub(now)).min(timeout)
757
+ });
758
+ if wait.is_zero() {
759
+ return;
760
+ }
761
+ let ring = self.own_ring && pigeonhole_io::own_io_in_flight();
762
+ let signal = &self.submitters[usize::from(self.id.0)].inbox.signal;
763
+ let (stash, rx, spawner) = (&mut self.stash, &self.rx, &self.spawner);
764
+ signal.sleep_unless(
765
+ || {
766
+ if stash.is_none() {
767
+ *stash = rx.try_recv().ok();
768
+ }
769
+ stash.is_some() || spawner.has_back()
770
+ },
771
+ || {
772
+ if ring {
773
+ pigeonhole_io::reap_own_io(Some(wait));
774
+ } else {
775
+ debug_assert!(
776
+ !pigeonhole_io::in_async_poll(),
777
+ "a shard wait parks inside an async poll (a lost wake, #1226)"
778
+ );
779
+ thread::park_timeout(wait);
780
+ }
781
+ },
782
+ );
783
+ }
784
+
785
+ /// Shutdown: wait out in-flight submits, then handle everything queued.
786
+ fn finish(&mut self) {
787
+ self.inbox().gate.wait_drained();
788
+ while self.drain() > 0 {}
789
+ }
790
+ }
791
+
792
+ /// Longest an idle shard thread waits on its own I/O ring before it looks again (a wake or a
793
+ /// completion ends the wait sooner).
794
+ const RING_IDLE_WAIT: std::time::Duration = std::time::Duration::from_millis(100);
795
+
796
+ /// Every shard's submitter, indexed by shard.
797
+ type Submitters<M> = Arc<[Submitter<M>]>;
798
+
799
+ /// Builds every shard's queue and loop state.
800
+ fn build<H: ShardHandler>(
801
+ config: &RuntimeConfig,
802
+ handlers: Vec<H>,
803
+ pool: Option<&Arc<Pool>>,
804
+ ) -> (Submitters<H::Msg>, Vec<ShardCore<H>>) {
805
+ let n = handlers.len();
806
+ assert_eq!(n, config.shards, "handlers.len() must equal config.shards");
807
+ assert!(
808
+ (1..=1 << 16).contains(&n),
809
+ "shard count must be in 1..=65536"
810
+ );
811
+ let mut rxs = Vec::with_capacity(n);
812
+ let submitters: Arc<[Submitter<H::Msg>]> = (0..n)
813
+ .map(|i| {
814
+ let (tx, rx) = mpsc::channel();
815
+ rxs.push(rx);
816
+ Submitter {
817
+ inbox: Arc::new(Inbox {
818
+ shard: ShardId(i as u16),
819
+ tx,
820
+ gate: submit_gate::SubmitGate::new(),
821
+ signal: Arc::new(Signal::new()),
822
+ }),
823
+ }
824
+ })
825
+ .collect();
826
+ let cores = handlers
827
+ .into_iter()
828
+ .zip(rxs)
829
+ .enumerate()
830
+ .map(|(i, (handler, rx))| ShardCore {
831
+ id: ShardId(i as u16),
832
+ handler,
833
+ rx,
834
+ stash: None,
835
+ spawner: Spawner::new(
836
+ Scheduler::new(Arc::clone(&submitters[i].inbox.signal)),
837
+ pool.cloned(),
838
+ Origin::new(Arc::clone(&submitters[i].inbox.signal)),
839
+ ),
840
+ submitters: Arc::clone(&submitters),
841
+ vfs: Arc::clone(&config.vfs),
842
+ time_slice: config.slice_nanos(),
843
+ idle_at: None,
844
+ work_done: 0,
845
+ yields: 0,
846
+ attached: 0,
847
+ #[cfg(debug_assertions)]
848
+ left_io: false,
849
+ #[cfg(debug_assertions)]
850
+ released: false,
851
+ own_ring: false,
852
+ spin: IdleSpin::new(config.idle_spin, config.idle_spin_cap),
853
+ })
854
+ .collect();
855
+ (submitters, cores)
856
+ }
857
+
858
+ /// How a runtime's threads were pinned (D235): see [`Runtime::pinning`].
859
+ #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
860
+ #[non_exhaustive]
861
+ pub struct Pinning {
862
+ /// Threads the runtime started: shards and compaction threads.
863
+ pub threads: usize,
864
+ /// Threads pinned to a CPU of their own.
865
+ pub pinned: usize,
866
+ /// Why threads the runtime asked to pin were planned no CPU: it pinned none, or, with
867
+ /// too few free CPUs for every thread, only the shards (D252).
868
+ pub unpinned: Option<pigeonhole_io::sys::Unpinned>,
869
+ /// Threads the OS refused to pin; they run unpinned.
870
+ pub failed: usize,
871
+ }
872
+
873
+ /// Spawns a named thread that pins itself to CPU id `cpu` if given, reports whether it is
874
+ /// pinned (a refused pin leaves it unpinned, never stops it), then runs `f`.
875
+ fn spawn_pinned<T: Send + 'static>(
876
+ name: String,
877
+ cpu: Option<usize>,
878
+ f: impl FnOnce() -> T + Send + 'static,
879
+ ) -> Result<(JoinHandle<T>, Receiver<bool>)> {
880
+ let (ack_tx, ack_rx) = mpsc::channel();
881
+ let handle = thread::Builder::new()
882
+ .name(name)
883
+ .spawn(move || {
884
+ let pinned = cpu.is_some_and(|c| pigeonhole_io::sys::pin_current_thread_to(c).is_ok());
885
+ let _ = ack_tx.send(pinned);
886
+ f()
887
+ })
888
+ .map_err(Error::Spawn)?;
889
+ Ok((handle, ack_rx))
890
+ }
891
+
892
+ /// Engine-owned mode: the runtime's own pinned shard threads.
893
+ ///
894
+ /// See the [crate example](crate#example). Dropping a `Runtime` shuts it down like
895
+ /// [`Runtime::shutdown`], discarding the handlers.
896
+ pub struct Runtime<H: ShardHandler> {
897
+ submitters: Arc<[Submitter<H::Msg>]>,
898
+ /// The driver threads, each returning the handlers of the shards it held (D289).
899
+ shards: Vec<JoinHandle<Vec<(ShardId, H)>>>,
900
+ /// Their shared state: the target, handoffs and the controller's counters.
901
+ drivers: Arc<drivers::Drivers<H>>,
902
+ /// The background workers' pool and their threads (engine-owned, D252, D284).
903
+ pool: Option<Arc<Pool>>,
904
+ workers: Vec<JoinHandle<()>>,
905
+ /// The CPUs this runtime's threads hold, released once they are joined (D235).
906
+ plan: Option<pigeonhole_io::sys::PinPlan>,
907
+ pinning: Pinning,
908
+ /// The CPUs the driver threads pinned themselves to, in driver order (ICR 0101).
909
+ driver_cpus: Vec<usize>,
910
+ }
911
+
912
+ impl<H: ShardHandler> fmt::Debug for Runtime<H> {
913
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
914
+ f.debug_struct("Runtime")
915
+ .field("shards", &self.submitters.len())
916
+ .field("compaction_threads", &self.workers.len())
917
+ .finish_non_exhaustive()
918
+ }
919
+ }
920
+
921
+ impl<H: ShardHandler> Runtime<H> {
922
+ /// Spawns one thread per handler (`handlers.len()` must equal `config.shards`).
923
+ ///
924
+ /// With `config.pin_threads`, each shard and compaction thread gets a CPU of its own from
925
+ /// the opening thread's affinity set, one per physical core first and then their SMT
926
+ /// siblings (D220, D235), skipping CPUs other runtimes in this process hold
927
+ /// ([`pigeonhole_io::sys::pin_plan`]). Where that plan refuses (no hard affinity on the
928
+ /// platform, a CPU quota narrower than the affinity set, too few free CPUs) or the OS
929
+ /// refuses a pin, threads run unpinned: pinning never fails the start. With too few free
930
+ /// CPUs for the compaction threads but enough for the shards, only the compaction
931
+ /// threads run unpinned (D252).
932
+ /// [`pinning`](Runtime::pinning) says what happened.
933
+ ///
934
+ /// # Panics
935
+ /// If `handlers.len() != config.shards` or the count is not in `1..=65536`.
936
+ pub fn start(config: RuntimeConfig, handlers: Vec<H>) -> Result<Self> {
937
+ let slice = config.slice_nanos();
938
+ let mut acks = Vec::new();
939
+ let (pool, drivers) = if config.compaction_threads > 0 {
940
+ let (pool, drivers) = Pool::new(
941
+ config.compaction_threads,
942
+ true,
943
+ Arc::clone(&config.vfs),
944
+ slice,
945
+ );
946
+ (Some(pool), drivers)
947
+ } else {
948
+ (None, Vec::new())
949
+ };
950
+ let (submitters, cores) = build(&config, handlers, pool.as_ref());
951
+ // The drivers started: the fixed count, or the controller's ceiling (it starts there,
952
+ // so a heavy load never starts short of threads, and shrinks a light one).
953
+ let k = match config.shard_threads {
954
+ 0 => config.shards,
955
+ k => k.min(config.shards),
956
+ };
957
+ let shared = Arc::new(drivers::Drivers::new(
958
+ k,
959
+ config.adaptive_drivers,
960
+ Arc::clone(&config.vfs),
961
+ Arc::clone(&submitters),
962
+ ));
963
+ let threads = k + config.compaction_threads;
964
+ let (plan, unpinned) = if config.pin_threads {
965
+ match pigeonhole_io::sys::pin_plan(threads) {
966
+ Ok(plan) => (Some(plan), None),
967
+ // Too few CPUs for the compaction threads too: pin the shard threads, which
968
+ // carry the commits, and leave the compaction threads unpinned (D252).
969
+ Err(why @ pigeonhole_io::sys::Unpinned::TooFewCpus)
970
+ if config.compaction_threads > 0 =>
971
+ {
972
+ (pigeonhole_io::sys::pin_plan(k).ok(), Some(why))
973
+ }
974
+ Err(why) => (None, Some(why)),
975
+ }
976
+ } else {
977
+ (None, None)
978
+ };
979
+ let cpu = |k: usize| plan.as_ref().and_then(|p| p.cpu(k));
980
+ let mut rt = Runtime {
981
+ submitters,
982
+ shards: Vec::with_capacity(k),
983
+ drivers: Arc::clone(&shared),
984
+ pool,
985
+ workers: Vec::new(),
986
+ plan: None,
987
+ driver_cpus: Vec::new(),
988
+ pinning: Pinning {
989
+ threads,
990
+ unpinned,
991
+ ..Pinning::default()
992
+ },
993
+ };
994
+ for (j, driver) in drivers.into_iter().enumerate() {
995
+ let vfs = Arc::clone(&config.vfs);
996
+ let (handle, ack) = spawn_pinned(
997
+ format!("pigeonhole-compaction-{j}"),
998
+ cpu(k + j),
999
+ move || pool::worker_main(driver, vfs),
1000
+ )?;
1001
+ rt.workers.push(handle);
1002
+ acks.push(ack);
1003
+ }
1004
+ let mut held: Vec<Vec<ShardCore<H>>> = (0..k).map(|_| Vec::new()).collect();
1005
+ for core in cores {
1006
+ held[drivers::Drivers::<H>::owner(core.id, k)].push(core);
1007
+ }
1008
+ for (d, cores) in held.into_iter().enumerate() {
1009
+ // A fixed thread per shard keeps the shard's name, as before D289; drivers whose
1010
+ // shards may move are named for themselves.
1011
+ let name = if k == config.shards && !config.adaptive_drivers {
1012
+ format!("pigeonhole-shard-{d}")
1013
+ } else {
1014
+ format!("pigeonhole-driver-{d}")
1015
+ };
1016
+ let shared = Arc::clone(&shared);
1017
+ let (handle, ack) =
1018
+ spawn_pinned(name, cpu(d), move || drivers::driver_main(shared, d, cores))?;
1019
+ rt.shards.push(handle);
1020
+ acks.push(ack);
1021
+ }
1022
+ let planned = plan.as_ref().map_or(0, pigeonhole_io::sys::PinPlan::len);
1023
+ // A thread that died before reporting surfaces its panic at shutdown. The compaction
1024
+ // threads' acks come first, then the drivers' in driver order.
1025
+ let first_driver = acks.len() - k;
1026
+ let mut pinned = 0;
1027
+ for (i, ack) in acks.into_iter().enumerate() {
1028
+ if ack.recv() == Ok(true) {
1029
+ pinned += 1;
1030
+ if let Some(c) = i.checked_sub(first_driver).and_then(cpu) {
1031
+ rt.driver_cpus.push(c);
1032
+ }
1033
+ }
1034
+ }
1035
+ rt.pinning.pinned = pinned;
1036
+ rt.pinning.failed = planned.saturating_sub(pinned);
1037
+ rt.plan = plan;
1038
+ Ok(rt)
1039
+ }
1040
+
1041
+ /// Application-owned mode: no threads; one driver per shard.
1042
+ ///
1043
+ /// The application owns every thread and background tasks run on the shards, so
1044
+ /// `config.pin_threads` is ignored and a nonzero `config.compaction_threads` fails with
1045
+ /// [`Error::InvalidConfig`] (decision D40) rather than being silently dropped: for
1046
+ /// background workers the application drives, use
1047
+ /// [`Runtime::application_owned_with_workers`] (D284).
1048
+ ///
1049
+ /// # Panics
1050
+ /// If `handlers.len() != config.shards` or the count is not in `1..=65536`.
1051
+ pub fn application_owned(
1052
+ config: RuntimeConfig,
1053
+ handlers: Vec<H>,
1054
+ ) -> Result<Vec<ShardDriver<H>>> {
1055
+ if config.compaction_threads != 0 {
1056
+ return Err(Error::InvalidConfig(
1057
+ "compaction_threads must be 0 in application-owned mode",
1058
+ ));
1059
+ }
1060
+ let (_, cores) = build(&config, handlers, None);
1061
+ Ok(shard_drivers(cores))
1062
+ }
1063
+
1064
+ /// Application-owned mode with background workers (D284): no threads; one driver per
1065
+ /// shard, and `config.compaction_threads` [`PoolDriver`]s the application drives from
1066
+ /// threads it owns, as engine-owned mode's compaction threads drive theirs. With 0 it is
1067
+ /// [`Runtime::application_owned`]. `config.pin_threads` is ignored.
1068
+ ///
1069
+ /// The returned [`WorkerPool`] closes the workers ([`WorkerPool::close`]), taking what
1070
+ /// they hold back to the shards: a closing engine calls it first, so its close never
1071
+ /// waits for the application to drive a worker.
1072
+ ///
1073
+ /// # Panics
1074
+ /// If `handlers.len() != config.shards` or the count is not in `1..=65536`.
1075
+ pub fn application_owned_with_workers(
1076
+ config: RuntimeConfig,
1077
+ handlers: Vec<H>,
1078
+ ) -> Result<AppOwned<H>> {
1079
+ let (pool, workers) = if config.compaction_threads > 0 {
1080
+ let (pool, workers) = Pool::new(
1081
+ config.compaction_threads,
1082
+ false,
1083
+ Arc::clone(&config.vfs),
1084
+ config.slice_nanos(),
1085
+ );
1086
+ (Some(pool), workers)
1087
+ } else {
1088
+ (None, Vec::new())
1089
+ };
1090
+ let (_, cores) = build(&config, handlers, pool.as_ref());
1091
+ Ok(AppOwned {
1092
+ shards: shard_drivers(cores),
1093
+ workers,
1094
+ pool: pool.map(WorkerPool),
1095
+ })
1096
+ }
1097
+
1098
+ /// Submitter for `shard`.
1099
+ ///
1100
+ /// # Panics
1101
+ /// If `shard` is out of range.
1102
+ pub fn submitter(&self, shard: ShardId) -> Submitter<H::Msg> {
1103
+ self.submitters[usize::from(shard.0)].clone()
1104
+ }
1105
+
1106
+ /// Number of shards.
1107
+ pub fn shard_count(&self) -> usize {
1108
+ self.submitters.len()
1109
+ }
1110
+
1111
+ /// Whether the calling thread is a shard thread, and which (inline-write fast path).
1112
+ ///
1113
+ /// True on engine-owned shard threads, and on an application thread while it is inside
1114
+ /// [`ShardDriver::run_once`] or [`ShardDriver::with_handler`].
1115
+ pub fn current_shard() -> Option<ShardId> {
1116
+ CURRENT_SHARD.with(Cell::get)
1117
+ }
1118
+
1119
+ /// Closes every queue, lets each loop finish its queued messages, and joins the threads.
1120
+ ///
1121
+ /// Returns the handlers in shard order. Unfinished background tasks are dropped. A
1122
+ /// message a shard sends to an already-closed shard during shutdown fails with
1123
+ /// [`Error::Closed`]. If a shard thread panicked, the panic resumes here.
1124
+ pub fn shutdown(mut self) -> Result<Vec<H>> {
1125
+ self.stop()
1126
+ }
1127
+
1128
+ /// How this runtime's threads were pinned (D235): how many it started, how many got a
1129
+ /// CPU of their own, and why none did when pinning was asked for and refused.
1130
+ pub fn pinning(&self) -> Pinning {
1131
+ self.pinning
1132
+ }
1133
+
1134
+ /// The CPUs the shard driver threads are pinned to, one per pinned driver, in driver
1135
+ /// order (D235, ICR 0101). Empty when none is pinned: `pin_threads` off, a platform or
1136
+ /// CPU set where pinning is unsafe, or every pin refused.
1137
+ pub fn pinned_driver_cpus(&self) -> &[usize] {
1138
+ &self.driver_cpus
1139
+ }
1140
+
1141
+ /// The driver threads the shards run on now (D289): the controller's choice with
1142
+ /// [`RuntimeConfig::adaptive_drivers`], else the count started.
1143
+ pub fn driver_target(&self) -> usize {
1144
+ self.drivers.target()
1145
+ }
1146
+
1147
+ /// Whether every shard runs on the driver [`driver_target`](Runtime::driver_target)
1148
+ /// puts it on (a shard moves only once its driver's ring is quiet).
1149
+ pub fn drivers_settled(&self) -> bool {
1150
+ self.drivers.settled()
1151
+ }
1152
+
1153
+ /// Fixes the driver target at `k`, or with `None` gives it back to the controller. For
1154
+ /// tests and benchmarks: moves shards as a resize would.
1155
+ #[doc(hidden)]
1156
+ pub fn force_driver_target(&self, k: Option<usize>) {
1157
+ self.drivers.force_target(k);
1158
+ }
1159
+
1160
+ /// Shards moved between drivers so far (D289 PR 2).
1161
+ #[doc(hidden)]
1162
+ pub fn driver_moves(&self) -> u64 {
1163
+ self.drivers.moves()
1164
+ }
1165
+
1166
+ /// The load controller's windows since the last call, one JSON object each (#1015). The
1167
+ /// first call starts the log; without the controller
1168
+ /// ([`RuntimeConfig::adaptive_drivers`]) it starts an observe-only one, which logs what
1169
+ /// it would decide but never resizes.
1170
+ #[doc(hidden)]
1171
+ pub fn driver_trace(&self) -> Vec<String> {
1172
+ self.drivers.trace()
1173
+ }
1174
+
1175
+ /// [`force_driver_target`](Runtime::force_driver_target) as a handle another thread can
1176
+ /// call (a test's churn of resizes under traffic).
1177
+ #[doc(hidden)]
1178
+ pub fn driver_control(&self) -> impl Fn(Option<usize>) + Send + Sync + 'static {
1179
+ let drivers = Arc::clone(&self.drivers);
1180
+ move |k| drivers.force_target(k)
1181
+ }
1182
+
1183
+ fn stop(&mut self) -> Result<Vec<H>> {
1184
+ // No more moves, and drivers holding no shard exit once the inboxes close.
1185
+ self.drivers.close();
1186
+ for s in self.submitters.iter() {
1187
+ s.inbox.close();
1188
+ }
1189
+ let mut handlers = Vec::with_capacity(self.submitters.len());
1190
+ let mut panic = None;
1191
+ for t in self.shards.drain(..) {
1192
+ match t.join() {
1193
+ Ok(hs) => handlers.extend(hs),
1194
+ Err(p) => panic = panic.or(Some(p)),
1195
+ }
1196
+ }
1197
+ handlers.sort_unstable_by_key(|&(id, _)| id.0);
1198
+ let handlers = handlers.into_iter().map(|(_, h)| h).collect();
1199
+ // Shards are gone, so nothing spawns onto the pool any more.
1200
+ if let Some(pool) = &self.pool {
1201
+ pool.close_builtin();
1202
+ }
1203
+ for t in self.workers.drain(..) {
1204
+ if let Err(p) = t.join() {
1205
+ panic = panic.or(Some(p));
1206
+ }
1207
+ }
1208
+ // Every thread is gone: its CPU is free for another runtime in this process.
1209
+ self.plan = None;
1210
+ if let Some(p) = panic {
1211
+ std::panic::resume_unwind(p);
1212
+ }
1213
+ Ok(handlers)
1214
+ }
1215
+ }
1216
+
1217
+ impl<H: ShardHandler> Drop for Runtime<H> {
1218
+ fn drop(&mut self) {
1219
+ if !self.shards.is_empty() || !self.workers.is_empty() {
1220
+ if thread::panicking() {
1221
+ // Close without joining: never double-panic.
1222
+ self.drivers.close();
1223
+ for s in self.submitters.iter() {
1224
+ s.inbox.close();
1225
+ }
1226
+ if let Some(pool) = &self.pool {
1227
+ pool.close_builtin();
1228
+ }
1229
+ } else {
1230
+ let _ = self.stop();
1231
+ }
1232
+ }
1233
+ }
1234
+ }
1235
+
1236
+ /// Wraps each shard's loop in its driver.
1237
+ fn shard_drivers<H: ShardHandler>(cores: Vec<ShardCore<H>>) -> Vec<ShardDriver<H>> {
1238
+ cores
1239
+ .into_iter()
1240
+ .map(|core| ShardDriver {
1241
+ _close: CloseOnDrop(core.submitters[usize::from(core.id.0)].clone()),
1242
+ core,
1243
+ wakes: Wakes::default(),
1244
+ })
1245
+ .collect()
1246
+ }
1247
+
1248
+ /// What [`Runtime::application_owned_with_workers`] hands the application (D284).
1249
+ #[derive(Debug)]
1250
+ #[non_exhaustive]
1251
+ pub struct AppOwned<H: ShardHandler> {
1252
+ /// One driver per shard, in shard order.
1253
+ pub shards: Vec<ShardDriver<H>>,
1254
+ /// The background workers, for threads the application owns.
1255
+ pub workers: Vec<PoolDriver>,
1256
+ /// Closes the workers (`None` without any).
1257
+ pub pool: Option<WorkerPool>,
1258
+ }
1259
+
1260
+ /// Application-owned mode: drives one shard from a thread the application owns.
1261
+ ///
1262
+ /// Call [`run_once`](ShardDriver::run_once) until it returns `false`, then wait for the
1263
+ /// wakeup registered with [`set_wakeup`](ShardDriver::set_wakeup) (which fires once per
1264
+ /// idle period, when work arrives) before calling it again.
1265
+ ///
1266
+ /// [`ShardDriver::shutdown`] closes the shard, handles every queued message and returns the
1267
+ /// handler, like [`Runtime::shutdown`]. Dropping the driver instead closes the shard and
1268
+ /// **discards** what is queued: queued messages are dropped unhandled (their [`Notifier`]s
1269
+ /// resolve waiters with `None`) and background tasks are dropped. Either way, later submits
1270
+ /// fail with [`Error::Closed`].
1271
+ ///
1272
+ /// ```
1273
+ /// use pigeonhole_io::sim::SimVfs;
1274
+ /// use pigeonhole_runtime::{Runtime, RuntimeConfig, ShardContext, ShardHandler, ShardId};
1275
+ ///
1276
+ /// struct Log(Vec<u32>);
1277
+ ///
1278
+ /// impl ShardHandler for Log {
1279
+ /// type Msg = u32;
1280
+ /// fn handle(&mut self, _ctx: &mut ShardContext<'_, u32>, msg: u32) {
1281
+ /// self.0.push(msg);
1282
+ /// }
1283
+ /// fn end_batch(&mut self, _ctx: &mut ShardContext<'_, u32>) {}
1284
+ /// }
1285
+ ///
1286
+ /// let mut config = RuntimeConfig::new(SimVfs::new(7));
1287
+ /// config.shards = 1;
1288
+ /// let mut drivers = Runtime::application_owned(config, vec![Log(Vec::new())])?;
1289
+ /// let shard = &mut drivers[0];
1290
+ /// shard.submitter(ShardId(0)).submit(1)?;
1291
+ /// shard.submitter(ShardId(0)).submit(2)?;
1292
+ /// assert!(!shard.run_once(u64::MAX)); // drained; no work remains
1293
+ /// // The application's own write, inline on its own core:
1294
+ /// shard.with_handler(|log, _ctx| log.0.push(3));
1295
+ /// assert_eq!(shard.with_handler(|log, _| log.0.clone()), [1, 2, 3]);
1296
+ /// # Ok::<(), pigeonhole_runtime::Error>(())
1297
+ /// ```
1298
+ pub struct ShardDriver<H: ShardHandler> {
1299
+ core: ShardCore<H>,
1300
+ _close: CloseOnDrop<H::Msg>,
1301
+ /// Who a wake reaches: the application's callback ([`ShardDriver::set_wakeup`]) and the
1302
+ /// thread in [`ShardDriver::wait`].
1303
+ wakes: Wakes,
1304
+ }
1305
+
1306
+ /// What a wake of an application-owned shard (or worker) calls, composed into one wake
1307
+ /// target.
1308
+ #[derive(Default)]
1309
+ pub(crate) struct Wakes {
1310
+ pub(crate) callback: Option<Arc<dyn Fn() + Send + Sync>>,
1311
+ /// The thread that last waited, and its ring's waker if it has a ring.
1312
+ pub(crate) waiter: Option<(thread::Thread, Option<pigeonhole_io::OwnIoWaker>)>,
1313
+ }
1314
+
1315
+ impl Wakes {
1316
+ /// The wake target: the callback, then the waiting thread (its ring's waker and an
1317
+ /// unpark: it waits in one or the other). Without a callback, the waiting thread is the
1318
+ /// engine-owned thread's own target, so a commit's wake costs no closure call.
1319
+ pub(crate) fn target(&self) -> WakeTarget {
1320
+ let callback = self.callback.clone();
1321
+ let waiter = self.waiter.clone();
1322
+ match (callback, waiter) {
1323
+ (None, None) => WakeTarget::None,
1324
+ (Some(cb), None) => WakeTarget::Callback(cb),
1325
+ (None, Some((thread, None))) => WakeTarget::Thread(thread),
1326
+ (None, Some((thread, Some(ring)))) => WakeTarget::ThreadRing(thread, ring),
1327
+ (Some(cb), Some((thread, ring))) => WakeTarget::Callback(Arc::new(move || {
1328
+ cb();
1329
+ if let Some(ring) = &ring {
1330
+ ring.wake();
1331
+ }
1332
+ thread.unpark();
1333
+ })),
1334
+ }
1335
+ }
1336
+ }
1337
+
1338
+ /// Ends a [`ShardDriver::wait`] (or [`PoolDriver::wait`]) from any thread.
1339
+ pub(crate) struct WaitWaker(pub(crate) Arc<Signal>);
1340
+
1341
+ impl std::task::Wake for WaitWaker {
1342
+ fn wake(self: Arc<Self>) {
1343
+ self.0.notify_app();
1344
+ }
1345
+
1346
+ fn wake_by_ref(self: &Arc<Self>) {
1347
+ self.0.notify_app();
1348
+ }
1349
+ }
1350
+
1351
+ /// Refuses further submits once the driver is gone (shut down or dropped).
1352
+ struct CloseOnDrop<M>(Submitter<M>);
1353
+
1354
+ impl<M> Drop for CloseOnDrop<M> {
1355
+ fn drop(&mut self) {
1356
+ self.0.inbox.gate.close();
1357
+ }
1358
+ }
1359
+
1360
+ impl<H: ShardHandler> fmt::Debug for ShardDriver<H> {
1361
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1362
+ f.debug_struct("ShardDriver")
1363
+ .field("shard", &self.core.id)
1364
+ .field("tasks", &self.core.spawner.local)
1365
+ .finish_non_exhaustive()
1366
+ }
1367
+ }
1368
+
1369
+ impl<H: ShardHandler> ShardDriver<H> {
1370
+ /// This shard.
1371
+ pub fn shard(&self) -> ShardId {
1372
+ self.core.id
1373
+ }
1374
+
1375
+ /// Submitter for any shard.
1376
+ ///
1377
+ /// # Panics
1378
+ /// If `shard` is out of range.
1379
+ pub fn submitter(&self, shard: ShardId) -> Submitter<H::Msg> {
1380
+ self.core.submitters[usize::from(shard.0)].clone()
1381
+ }
1382
+
1383
+ /// Drains queued messages, calls `end_batch`, then runs background tasks until
1384
+ /// `deadline_nanos`. Returns whether work remains.
1385
+ ///
1386
+ /// Between task slices (each at most `time_slice` long) it drains the queue again, so
1387
+ /// foreground messages never wait behind more than one slice.
1388
+ ///
1389
+ /// When a [`waker`](Self::waker) wake arrived since the last turn (typically a message
1390
+ /// this turn handled settled a future the calling thread awaits), it returns `true` right
1391
+ /// after the drain, before the background tasks, so the caller can poll that future now
1392
+ /// rather than at the deadline (D237). The tasks run on the next call; after eight such
1393
+ /// turns in a row, a turn runs them anyway. The wake still ends the next
1394
+ /// [`wait`](Self::wait) at once.
1395
+ ///
1396
+ /// Tasks sleeping until a deadline ([`TaskPoll::SleepUntil`]) are not work that remains:
1397
+ /// with only those left it returns `false`, and the application should call it again
1398
+ /// by [`next_deadline`](ShardDriver::next_deadline) even if no wakeup arrives.
1399
+ pub fn run_once(&mut self, deadline_nanos: u64) -> bool {
1400
+ self.core.run_once(deadline_nanos)
1401
+ }
1402
+
1403
+ /// How many messages this shard has handled and background slices it has run, in all.
1404
+ /// For tests that drive shards by hand: `run_once` returning `false` says no work
1405
+ /// *remains* on this shard, not that it did none, and a message it sent another shard is
1406
+ /// that shard's work. A pass in which every shard's `run_once` returned `false` and no
1407
+ /// shard's count moved handled nothing, so it sent nothing and left nothing queued.
1408
+ #[doc(hidden)]
1409
+ pub fn work_count(&self) -> u64 {
1410
+ self.core.work_done
1411
+ }
1412
+
1413
+ /// Before handing this shard to another thread: drives it until the calling thread's
1414
+ /// I/O ring has nothing in flight (#492, ICR 0029). A backend with a ring per driving
1415
+ /// thread (io_uring in application-owned mode) lets only that thread complete what was
1416
+ /// submitted to it, so a shard moved with I/O still there would wait on it for ever if
1417
+ /// this thread stopped running turns. Returns at once without such rings (the pread
1418
+ /// and synchronous backends), or on a thread that has not run this shard.
1419
+ pub fn release(&mut self) {
1420
+ self.core.release();
1421
+ }
1422
+
1423
+ /// The earliest deadline (VFS `monotonic_nanos`) of a background task sleeping on this
1424
+ /// shard, or `None`. After [`run_once`](ShardDriver::run_once) returns `false`, the
1425
+ /// application sleeps until the wakeup registered with
1426
+ /// [`set_wakeup`](ShardDriver::set_wakeup) fires or this deadline passes, whichever
1427
+ /// comes first.
1428
+ ///
1429
+ /// ```
1430
+ /// use pigeonhole_io::Vfs;
1431
+ /// use pigeonhole_io::sim::SimVfs;
1432
+ /// use pigeonhole_runtime::{
1433
+ /// Runtime, RuntimeConfig, ShardContext, ShardHandler, Task, TaskPoll, TaskWaker,
1434
+ /// };
1435
+ ///
1436
+ /// /// Fires once the clock reaches `at`.
1437
+ /// struct Alarm {
1438
+ /// vfs: SimVfsRef,
1439
+ /// at: u64,
1440
+ /// }
1441
+ /// type SimVfsRef = std::sync::Arc<SimVfs>;
1442
+ ///
1443
+ /// impl Task for Alarm {
1444
+ /// fn run(&mut self, _deadline: u64, _waker: &TaskWaker) -> TaskPoll {
1445
+ /// if self.vfs.monotonic_nanos() >= self.at {
1446
+ /// TaskPoll::Done
1447
+ /// } else {
1448
+ /// TaskPoll::SleepUntil(self.at)
1449
+ /// }
1450
+ /// }
1451
+ /// fn name(&self) -> &'static str {
1452
+ /// "alarm"
1453
+ /// }
1454
+ /// }
1455
+ ///
1456
+ /// struct Idle;
1457
+ /// impl ShardHandler for Idle {
1458
+ /// type Msg = ();
1459
+ /// fn handle(&mut self, _ctx: &mut ShardContext<'_, ()>, _msg: ()) {}
1460
+ /// fn end_batch(&mut self, _ctx: &mut ShardContext<'_, ()>) {}
1461
+ /// }
1462
+ ///
1463
+ /// let vfs = SimVfs::new(1);
1464
+ /// let mut config = RuntimeConfig::new(vfs.clone());
1465
+ /// config.shards = 1;
1466
+ /// let mut drivers = Runtime::application_owned(config, vec![Idle])?;
1467
+ /// let shard = &mut drivers[0];
1468
+ /// let at = vfs.monotonic_nanos() + 5_000;
1469
+ /// shard.with_handler(|_, ctx| ctx.spawn(Box::new(Alarm { vfs: vfs.clone(), at })));
1470
+ /// assert!(!shard.run_once(u64::MAX)); // only a sleeping task: idle
1471
+ /// assert_eq!(shard.next_deadline(), Some(at));
1472
+ /// vfs.advance(5_000);
1473
+ /// assert!(!shard.run_once(u64::MAX)); // due: it ran and finished
1474
+ /// assert_eq!(shard.next_deadline(), None);
1475
+ /// # Ok::<(), pigeonhole_runtime::Error>(())
1476
+ /// ```
1477
+ pub fn next_deadline(&self) -> Option<u64> {
1478
+ self.core.next_deadline()
1479
+ }
1480
+
1481
+ /// Runs `f` on this shard's handler inline (the application's own writes on its own
1482
+ /// core, without a queue hop).
1483
+ pub fn with_handler<R>(
1484
+ &mut self,
1485
+ f: impl FnOnce(&mut H, &mut ShardContext<'_, H::Msg>) -> R,
1486
+ ) -> R {
1487
+ let _shard = EnterShard::new(self.core.id);
1488
+ let (handler, mut ctx) = self.core.parts();
1489
+ f(handler, &mut ctx)
1490
+ }
1491
+
1492
+ /// Registers a waker the runtime calls when work arrives (for the application's event
1493
+ /// loop).
1494
+ ///
1495
+ /// It is called from the submitting thread, at most once per idle period (after
1496
+ /// [`run_once`](ShardDriver::run_once) returned `false`), so it should be cheap: set a
1497
+ /// flag, unpark a thread, or write an eventfd. It is also called once right away, since
1498
+ /// work may have arrived before it was registered.
1499
+ pub fn set_wakeup(&mut self, wake: Box<dyn Fn() + Send + Sync>) {
1500
+ let wake: Arc<dyn Fn() + Send + Sync> = Arc::from(wake);
1501
+ self.wakes.callback = Some(Arc::clone(&wake));
1502
+ self.core.signal().set_target(self.wakes.target());
1503
+ // A submit that found the shard idle before the target existed woke nobody; a
1504
+ // spurious wake is harmless, a lost one is not.
1505
+ wake();
1506
+ }
1507
+
1508
+ /// Waits until this shard has work again: a message arrives, a [`waker`](Self::waker)
1509
+ /// fires, the calling thread's own I/O completes, the next background deadline
1510
+ /// ([`next_deadline`](Self::next_deadline)) passes, or `timeout` passes (#553, ICR
1511
+ /// 0035). Call it after [`run_once`](Self::run_once) returns `false`, on the thread
1512
+ /// that runs the shard; a spurious return is possible, so loop on `run_once`. It needs no
1513
+ /// completion fd: with io_uring it waits in the thread's ring while its own I/O is in
1514
+ /// flight, and parks otherwise. It composes with [`set_wakeup`](Self::set_wakeup), whose
1515
+ /// callback still fires. A thread that drives several shards from one loop waits in its
1516
+ /// own event loop instead (the wakeup callbacks and the I/O completion fd).
1517
+ pub fn wait(&mut self, timeout: Duration) {
1518
+ let me = thread::current();
1519
+ if self.wakes.waiter.as_ref().map(|(t, _)| t.id()) != Some(me.id()) {
1520
+ self.wakes.waiter = Some((me, pigeonhole_io::own_io_waker()));
1521
+ self.core.signal().set_target(self.wakes.target());
1522
+ }
1523
+ self.core.wait(timeout);
1524
+ }
1525
+
1526
+ /// A waker that ends this shard's [`wait`](Self::wait) from any thread: for futures the
1527
+ /// driving thread polls itself (a commit's future, resolved on another shard's thread
1528
+ /// or by this shard during [`run_once`](Self::run_once)). Waking it when nobody waits
1529
+ /// only makes the next `wait` return at once, even if a turn ran in between (#592).
1530
+ pub fn waker(&self) -> std::task::Waker {
1531
+ std::task::Waker::from(Arc::new(WaitWaker(Arc::clone(&self.core.inbox().signal))))
1532
+ }
1533
+
1534
+ /// Closes the shard, waits for in-flight submits, handles every queued message (calling
1535
+ /// `end_batch` per batch) and returns the handler. Unfinished background tasks are
1536
+ /// dropped. Later submits fail with [`Error::Closed`].
1537
+ pub fn shutdown(self) -> H {
1538
+ let ShardDriver {
1539
+ mut core, _close, ..
1540
+ } = self;
1541
+ let _shard = EnterShard::new(core.id);
1542
+ core.inbox().gate.close();
1543
+ core.finish();
1544
+ core.handler
1545
+ }
1546
+ }