enclave 0.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 (739) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +182 -0
  3. data/Rakefile +30 -0
  4. data/ext/enclave/enclave.c +390 -0
  5. data/ext/enclave/extconf.rb +33 -0
  6. data/ext/enclave/mruby/Makefile +63 -0
  7. data/ext/enclave/mruby/Rakefile +102 -0
  8. data/ext/enclave/mruby/benchmark/bm_ao_render.rb +309 -0
  9. data/ext/enclave/mruby/benchmark/bm_app_lc_fizzbuzz.rb +51 -0
  10. data/ext/enclave/mruby/benchmark/bm_fib.rb +6 -0
  11. data/ext/enclave/mruby/benchmark/bm_mandel_term.rb +34 -0
  12. data/ext/enclave/mruby/benchmark/bm_so_lists.rb +49 -0
  13. data/ext/enclave/mruby/benchmark/bm_so_mandelbrot.rb +65 -0
  14. data/ext/enclave/mruby/benchmark/vm_dispatch_bench.c +197 -0
  15. data/ext/enclave/mruby/benchmark/vm_optimization_bench.rb +513 -0
  16. data/ext/enclave/mruby/build/host/include/mrbconf.h +230 -0
  17. data/ext/enclave/mruby/build/host/include/mruby/array.h +303 -0
  18. data/ext/enclave/mruby/build/host/include/mruby/boxing_nan.h +169 -0
  19. data/ext/enclave/mruby/build/host/include/mruby/boxing_no.h +59 -0
  20. data/ext/enclave/mruby/build/host/include/mruby/boxing_word.h +248 -0
  21. data/ext/enclave/mruby/build/host/include/mruby/class.h +157 -0
  22. data/ext/enclave/mruby/build/host/include/mruby/common.h +127 -0
  23. data/ext/enclave/mruby/build/host/include/mruby/compile.h +187 -0
  24. data/ext/enclave/mruby/build/host/include/mruby/data.h +76 -0
  25. data/ext/enclave/mruby/build/host/include/mruby/debug.h +75 -0
  26. data/ext/enclave/mruby/build/host/include/mruby/dump.h +159 -0
  27. data/ext/enclave/mruby/build/host/include/mruby/endian.h +44 -0
  28. data/ext/enclave/mruby/build/host/include/mruby/error.h +168 -0
  29. data/ext/enclave/mruby/build/host/include/mruby/gc.h +77 -0
  30. data/ext/enclave/mruby/build/host/include/mruby/hash.h +234 -0
  31. data/ext/enclave/mruby/build/host/include/mruby/internal.h +278 -0
  32. data/ext/enclave/mruby/build/host/include/mruby/irep.h +142 -0
  33. data/ext/enclave/mruby/build/host/include/mruby/istruct.h +50 -0
  34. data/ext/enclave/mruby/build/host/include/mruby/khash.h +455 -0
  35. data/ext/enclave/mruby/build/host/include/mruby/mempool.h +19 -0
  36. data/ext/enclave/mruby/build/host/include/mruby/numeric.h +174 -0
  37. data/ext/enclave/mruby/build/host/include/mruby/object.h +44 -0
  38. data/ext/enclave/mruby/build/host/include/mruby/opcode.h +73 -0
  39. data/ext/enclave/mruby/build/host/include/mruby/ops.h +133 -0
  40. data/ext/enclave/mruby/build/host/include/mruby/presym/id.h +895 -0
  41. data/ext/enclave/mruby/build/host/include/mruby/presym/scanning.h +82 -0
  42. data/ext/enclave/mruby/build/host/include/mruby/presym/table.h +1787 -0
  43. data/ext/enclave/mruby/build/host/include/mruby/presym.h +65 -0
  44. data/ext/enclave/mruby/build/host/include/mruby/proc.h +184 -0
  45. data/ext/enclave/mruby/build/host/include/mruby/range.h +77 -0
  46. data/ext/enclave/mruby/build/host/include/mruby/re.h +16 -0
  47. data/ext/enclave/mruby/build/host/include/mruby/string.h +428 -0
  48. data/ext/enclave/mruby/build/host/include/mruby/throw.h +81 -0
  49. data/ext/enclave/mruby/build/host/include/mruby/value.h +471 -0
  50. data/ext/enclave/mruby/build/host/include/mruby/variable.h +108 -0
  51. data/ext/enclave/mruby/build/host/include/mruby/version.h +143 -0
  52. data/ext/enclave/mruby/build/host/include/mruby.h +1632 -0
  53. data/ext/enclave/mruby/build/host/mrbc/include/mruby/presym/id.h +281 -0
  54. data/ext/enclave/mruby/build/host/mrbc/include/mruby/presym/table.h +559 -0
  55. data/ext/enclave/mruby/build/host/mrbgems/gem_init.c +164 -0
  56. data/ext/enclave/mruby/build/host/mrbgems/mruby-array-ext/gem_init.c +650 -0
  57. data/ext/enclave/mruby/build/host/mrbgems/mruby-binding/gem_init.c +21 -0
  58. data/ext/enclave/mruby/build/host/mrbgems/mruby-catch/gem_init.c +86 -0
  59. data/ext/enclave/mruby/build/host/mrbgems/mruby-class-ext/gem_init.c +21 -0
  60. data/ext/enclave/mruby/build/host/mrbgems/mruby-compar-ext/gem_init.c +99 -0
  61. data/ext/enclave/mruby/build/host/mrbgems/mruby-complex/gem_init.c +362 -0
  62. data/ext/enclave/mruby/build/host/mrbgems/mruby-data/gem_init.c +21 -0
  63. data/ext/enclave/mruby/build/host/mrbgems/mruby-enum-chain/gem_init.c +229 -0
  64. data/ext/enclave/mruby/build/host/mrbgems/mruby-enum-ext/gem_init.c +1420 -0
  65. data/ext/enclave/mruby/build/host/mrbgems/mruby-enum-lazy/gem_init.c +602 -0
  66. data/ext/enclave/mruby/build/host/mrbgems/mruby-enumerator/gem_init.c +822 -0
  67. data/ext/enclave/mruby/build/host/mrbgems/mruby-eval/gem_init.c +21 -0
  68. data/ext/enclave/mruby/build/host/mrbgems/mruby-fiber/gem_init.c +21 -0
  69. data/ext/enclave/mruby/build/host/mrbgems/mruby-hash-ext/gem_init.c +591 -0
  70. data/ext/enclave/mruby/build/host/mrbgems/mruby-kernel-ext/gem_init.c +21 -0
  71. data/ext/enclave/mruby/build/host/mrbgems/mruby-math/gem_init.c +21 -0
  72. data/ext/enclave/mruby/build/host/mrbgems/mruby-metaprog/gem_init.c +21 -0
  73. data/ext/enclave/mruby/build/host/mrbgems/mruby-method/gem_init.c +153 -0
  74. data/ext/enclave/mruby/build/host/mrbgems/mruby-numeric-ext/gem_init.c +211 -0
  75. data/ext/enclave/mruby/build/host/mrbgems/mruby-object-ext/gem_init.c +94 -0
  76. data/ext/enclave/mruby/build/host/mrbgems/mruby-objectspace/gem_init.c +21 -0
  77. data/ext/enclave/mruby/build/host/mrbgems/mruby-pack/gem_init.c +21 -0
  78. data/ext/enclave/mruby/build/host/mrbgems/mruby-proc-binding/gem_init.c +21 -0
  79. data/ext/enclave/mruby/build/host/mrbgems/mruby-proc-ext/gem_init.c +237 -0
  80. data/ext/enclave/mruby/build/host/mrbgems/mruby-random/gem_init.c +21 -0
  81. data/ext/enclave/mruby/build/host/mrbgems/mruby-range-ext/gem_init.c +205 -0
  82. data/ext/enclave/mruby/build/host/mrbgems/mruby-rational/gem_init.c +147 -0
  83. data/ext/enclave/mruby/build/host/mrbgems/mruby-set/gem_init.c +487 -0
  84. data/ext/enclave/mruby/build/host/mrbgems/mruby-sprintf/gem_init.c +83 -0
  85. data/ext/enclave/mruby/build/host/mrbgems/mruby-string-ext/gem_init.c +220 -0
  86. data/ext/enclave/mruby/build/host/mrbgems/mruby-struct/gem_init.c +175 -0
  87. data/ext/enclave/mruby/build/host/mrbgems/mruby-symbol-ext/gem_init.c +153 -0
  88. data/ext/enclave/mruby/build/host/mrbgems/mruby-time/gem_init.c +21 -0
  89. data/ext/enclave/mruby/build/host/mrbgems/mruby-toplevel-ext/gem_init.c +78 -0
  90. data/ext/enclave/mruby/build/host/mrblib/mrblib.c +1758 -0
  91. data/ext/enclave/mruby/build_config/ArduinoDue.rb +72 -0
  92. data/ext/enclave/mruby/build_config/IntelEdison.rb +69 -0
  93. data/ext/enclave/mruby/build_config/IntelGalileo.rb +88 -0
  94. data/ext/enclave/mruby/build_config/RX630.rb +63 -0
  95. data/ext/enclave/mruby/build_config/android_arm64_v8a.rb +11 -0
  96. data/ext/enclave/mruby/build_config/android_armeabi_v7a_neon_hard.rb +13 -0
  97. data/ext/enclave/mruby/build_config/bench.rb +11 -0
  98. data/ext/enclave/mruby/build_config/boxing.rb +19 -0
  99. data/ext/enclave/mruby/build_config/chipKITMax32.rb +68 -0
  100. data/ext/enclave/mruby/build_config/ci/gcc-clang.rb +40 -0
  101. data/ext/enclave/mruby/build_config/ci/msvc.rb +20 -0
  102. data/ext/enclave/mruby/build_config/clang-asan.rb +11 -0
  103. data/ext/enclave/mruby/build_config/cosmopolitan.rb +86 -0
  104. data/ext/enclave/mruby/build_config/cross-32bit.rb +14 -0
  105. data/ext/enclave/mruby/build_config/cross-mingw-winetest.rb +90 -0
  106. data/ext/enclave/mruby/build_config/cross-mingw.rb +14 -0
  107. data/ext/enclave/mruby/build_config/default.rb +83 -0
  108. data/ext/enclave/mruby/build_config/dreamcast_shelf.rb +81 -0
  109. data/ext/enclave/mruby/build_config/emscripten-cxx.rb +12 -0
  110. data/ext/enclave/mruby/build_config/emscripten.rb +10 -0
  111. data/ext/enclave/mruby/build_config/gameboyadvance.rb +72 -0
  112. data/ext/enclave/mruby/build_config/helpers/wine_runner.rb +71 -0
  113. data/ext/enclave/mruby/build_config/host-cxx.rb +12 -0
  114. data/ext/enclave/mruby/build_config/host-debug.rb +20 -0
  115. data/ext/enclave/mruby/build_config/host-f32.rb +14 -0
  116. data/ext/enclave/mruby/build_config/host-gprof.rb +14 -0
  117. data/ext/enclave/mruby/build_config/host-m32.rb +15 -0
  118. data/ext/enclave/mruby/build_config/host-nofloat.rb +22 -0
  119. data/ext/enclave/mruby/build_config/host-shared.rb +36 -0
  120. data/ext/enclave/mruby/build_config/i586-pc-msdosdjgpp.rb +76 -0
  121. data/ext/enclave/mruby/build_config/luckfox_pico.rb +106 -0
  122. data/ext/enclave/mruby/build_config/milkv_duo.rb +106 -0
  123. data/ext/enclave/mruby/build_config/minimal.rb +4 -0
  124. data/ext/enclave/mruby/build_config/mrbc.rb +10 -0
  125. data/ext/enclave/mruby/build_config/nintendo_switch.rb +73 -0
  126. data/ext/enclave/mruby/build_config/nintendo_wii.rb +95 -0
  127. data/ext/enclave/mruby/build_config/no-float.rb +17 -0
  128. data/ext/enclave/mruby/build_config/playstationportable.rb +78 -0
  129. data/ext/enclave/mruby/build_config/serenity.rb +26 -0
  130. data/ext/enclave/mruby/build_config.rb +9 -0
  131. data/ext/enclave/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +5 -0
  132. data/ext/enclave/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +23 -0
  133. data/ext/enclave/mruby/examples/mrbgems/c_and_ruby_extension_example/test/example.rb +7 -0
  134. data/ext/enclave/mruby/examples/mrbgems/c_extension_example/src/example.c +23 -0
  135. data/ext/enclave/mruby/examples/mrbgems/c_extension_example/test/example.c +7 -0
  136. data/ext/enclave/mruby/examples/mrbgems/c_extension_example/test/example.rb +3 -0
  137. data/ext/enclave/mruby/examples/mrbgems/cdata_extension_example/src/example.c +77 -0
  138. data/ext/enclave/mruby/examples/mrbgems/cdata_extension_example/test/example.c +7 -0
  139. data/ext/enclave/mruby/examples/mrbgems/mruby-YOUR-bigint/core/bigint.c +70 -0
  140. data/ext/enclave/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +5 -0
  141. data/ext/enclave/mruby/examples/mrbgems/ruby_extension_example/test/example.rb +3 -0
  142. data/ext/enclave/mruby/include/mrbconf.h +230 -0
  143. data/ext/enclave/mruby/include/mruby/array.h +303 -0
  144. data/ext/enclave/mruby/include/mruby/boxing_nan.h +169 -0
  145. data/ext/enclave/mruby/include/mruby/boxing_no.h +59 -0
  146. data/ext/enclave/mruby/include/mruby/boxing_word.h +248 -0
  147. data/ext/enclave/mruby/include/mruby/class.h +157 -0
  148. data/ext/enclave/mruby/include/mruby/common.h +127 -0
  149. data/ext/enclave/mruby/include/mruby/compile.h +187 -0
  150. data/ext/enclave/mruby/include/mruby/data.h +76 -0
  151. data/ext/enclave/mruby/include/mruby/debug.h +75 -0
  152. data/ext/enclave/mruby/include/mruby/dump.h +159 -0
  153. data/ext/enclave/mruby/include/mruby/endian.h +44 -0
  154. data/ext/enclave/mruby/include/mruby/error.h +168 -0
  155. data/ext/enclave/mruby/include/mruby/gc.h +77 -0
  156. data/ext/enclave/mruby/include/mruby/hash.h +234 -0
  157. data/ext/enclave/mruby/include/mruby/internal.h +278 -0
  158. data/ext/enclave/mruby/include/mruby/irep.h +142 -0
  159. data/ext/enclave/mruby/include/mruby/istruct.h +50 -0
  160. data/ext/enclave/mruby/include/mruby/khash.h +455 -0
  161. data/ext/enclave/mruby/include/mruby/mempool.h +19 -0
  162. data/ext/enclave/mruby/include/mruby/numeric.h +174 -0
  163. data/ext/enclave/mruby/include/mruby/object.h +44 -0
  164. data/ext/enclave/mruby/include/mruby/opcode.h +73 -0
  165. data/ext/enclave/mruby/include/mruby/ops.h +133 -0
  166. data/ext/enclave/mruby/include/mruby/presym/scanning.h +82 -0
  167. data/ext/enclave/mruby/include/mruby/presym.h +65 -0
  168. data/ext/enclave/mruby/include/mruby/proc.h +184 -0
  169. data/ext/enclave/mruby/include/mruby/range.h +77 -0
  170. data/ext/enclave/mruby/include/mruby/re.h +16 -0
  171. data/ext/enclave/mruby/include/mruby/string.h +428 -0
  172. data/ext/enclave/mruby/include/mruby/throw.h +81 -0
  173. data/ext/enclave/mruby/include/mruby/value.h +471 -0
  174. data/ext/enclave/mruby/include/mruby/variable.h +108 -0
  175. data/ext/enclave/mruby/include/mruby/version.h +143 -0
  176. data/ext/enclave/mruby/include/mruby.h +1632 -0
  177. data/ext/enclave/mruby/lib/mruby/amalgam.rb +568 -0
  178. data/ext/enclave/mruby/lib/mruby/build/command.rb +383 -0
  179. data/ext/enclave/mruby/lib/mruby/build/load_gems.rb +383 -0
  180. data/ext/enclave/mruby/lib/mruby/build.rb +616 -0
  181. data/ext/enclave/mruby/lib/mruby/core_ext.rb +61 -0
  182. data/ext/enclave/mruby/lib/mruby/doc.rb +51 -0
  183. data/ext/enclave/mruby/lib/mruby/gem.rb +585 -0
  184. data/ext/enclave/mruby/lib/mruby/lockfile.rb +81 -0
  185. data/ext/enclave/mruby/lib/mruby/presym.rb +167 -0
  186. data/ext/enclave/mruby/lib/mruby/source.rb +32 -0
  187. data/ext/enclave/mruby/mrbgems/default-no-fpu.gembox +3 -0
  188. data/ext/enclave/mruby/mrbgems/default-no-stdio.gembox +4 -0
  189. data/ext/enclave/mruby/mrbgems/default.gembox +25 -0
  190. data/ext/enclave/mruby/mrbgems/full-core.gembox +6 -0
  191. data/ext/enclave/mruby/mrbgems/hal-posix-dir/mrbgem.rake +7 -0
  192. data/ext/enclave/mruby/mrbgems/hal-posix-dir/src/dir_hal.c +193 -0
  193. data/ext/enclave/mruby/mrbgems/hal-posix-io/mrbgem.rake +8 -0
  194. data/ext/enclave/mruby/mrbgems/hal-posix-io/src/io_hal.c +602 -0
  195. data/ext/enclave/mruby/mrbgems/hal-posix-socket/mrbgem.rake +8 -0
  196. data/ext/enclave/mruby/mrbgems/hal-posix-socket/src/socket_hal.c +158 -0
  197. data/ext/enclave/mruby/mrbgems/hal-posix-task/README.md +102 -0
  198. data/ext/enclave/mruby/mrbgems/hal-posix-task/mrbgem.rake +8 -0
  199. data/ext/enclave/mruby/mrbgems/hal-posix-task/src/task_hal.c +252 -0
  200. data/ext/enclave/mruby/mrbgems/hal-win-dir/mrbgem.rake +7 -0
  201. data/ext/enclave/mruby/mrbgems/hal-win-dir/src/dir_hal.c +249 -0
  202. data/ext/enclave/mruby/mrbgems/hal-win-io/mrbgem.rake +11 -0
  203. data/ext/enclave/mruby/mrbgems/hal-win-io/src/io_hal.c +646 -0
  204. data/ext/enclave/mruby/mrbgems/hal-win-socket/mrbgem.rake +12 -0
  205. data/ext/enclave/mruby/mrbgems/hal-win-socket/src/socket_hal.c +177 -0
  206. data/ext/enclave/mruby/mrbgems/hal-win-task/README.md +109 -0
  207. data/ext/enclave/mruby/mrbgems/hal-win-task/mrbgem.rake +11 -0
  208. data/ext/enclave/mruby/mrbgems/hal-win-task/src/task_hal.c +187 -0
  209. data/ext/enclave/mruby/mrbgems/math.gembox +12 -0
  210. data/ext/enclave/mruby/mrbgems/metaprog.gembox +21 -0
  211. data/ext/enclave/mruby/mrbgems/mruby-array-ext/README.md +87 -0
  212. data/ext/enclave/mruby/mrbgems/mruby-array-ext/mrbgem.rake +5 -0
  213. data/ext/enclave/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +784 -0
  214. data/ext/enclave/mruby/mrbgems/mruby-array-ext/src/array.c +1583 -0
  215. data/ext/enclave/mruby/mrbgems/mruby-array-ext/test/array.rb +849 -0
  216. data/ext/enclave/mruby/mrbgems/mruby-benchmark/README.md +257 -0
  217. data/ext/enclave/mruby/mrbgems/mruby-benchmark/mrbgem.rake +10 -0
  218. data/ext/enclave/mruby/mrbgems/mruby-benchmark/mrblib/benchmark.rb +131 -0
  219. data/ext/enclave/mruby/mrbgems/mruby-benchmark/test/benchmark.rb +244 -0
  220. data/ext/enclave/mruby/mrbgems/mruby-bigint/README-fgmp.md +154 -0
  221. data/ext/enclave/mruby/mrbgems/mruby-bigint/README.md +44 -0
  222. data/ext/enclave/mruby/mrbgems/mruby-bigint/core/bigint.c +6335 -0
  223. data/ext/enclave/mruby/mrbgems/mruby-bigint/core/bigint.h +117 -0
  224. data/ext/enclave/mruby/mrbgems/mruby-bigint/mrbgem.rake +10 -0
  225. data/ext/enclave/mruby/mrbgems/mruby-bigint/test/bigint.rb +157 -0
  226. data/ext/enclave/mruby/mrbgems/mruby-bin-config/README.md +46 -0
  227. data/ext/enclave/mruby/mrbgems/mruby-bin-config/mrbgem.rake +49 -0
  228. data/ext/enclave/mruby/mrbgems/mruby-bin-config/mruby-config +46 -0
  229. data/ext/enclave/mruby/mrbgems/mruby-bin-config/mruby-config.bat +92 -0
  230. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/README.md +63 -0
  231. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +283 -0
  232. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +703 -0
  233. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/mrbgem.rake +10 -0
  234. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +523 -0
  235. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.h +26 -0
  236. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c +238 -0
  237. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.h +14 -0
  238. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +88 -0
  239. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.h +13 -0
  240. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.c +34 -0
  241. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.h +14 -0
  242. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c +436 -0
  243. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c +509 -0
  244. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c +71 -0
  245. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c +64 -0
  246. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +768 -0
  247. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +159 -0
  248. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +24 -0
  249. data/ext/enclave/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h +19 -0
  250. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/README.md +94 -0
  251. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +58 -0
  252. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +7 -0
  253. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +808 -0
  254. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_buffer.c +1035 -0
  255. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_buffer.h +185 -0
  256. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_completion.c +797 -0
  257. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_completion.h +132 -0
  258. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_editor.c +1118 -0
  259. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_editor.h +153 -0
  260. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_highlight.c +516 -0
  261. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_highlight.h +95 -0
  262. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_history.c +185 -0
  263. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_history.h +76 -0
  264. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_term.c +491 -0
  265. data/ext/enclave/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb_term.h +137 -0
  266. data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/README.md +58 -0
  267. data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/bintest/mrbc.rb +30 -0
  268. data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +15 -0
  269. data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +362 -0
  270. data/ext/enclave/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/stub.c +104 -0
  271. data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/README.md +47 -0
  272. data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +178 -0
  273. data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +7 -0
  274. data/ext/enclave/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +380 -0
  275. data/ext/enclave/mruby/mrbgems/mruby-bin-strip/README.md +38 -0
  276. data/ext/enclave/mruby/mrbgems/mruby-bin-strip/bintest/mruby_strip.rb +73 -0
  277. data/ext/enclave/mruby/mrbgems/mruby-bin-strip/mrbgem.rake +7 -0
  278. data/ext/enclave/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby_strip.c +139 -0
  279. data/ext/enclave/mruby/mrbgems/mruby-binding/README.md +256 -0
  280. data/ext/enclave/mruby/mrbgems/mruby-binding/mrbgem.rake +7 -0
  281. data/ext/enclave/mruby/mrbgems/mruby-binding/src/binding.c +518 -0
  282. data/ext/enclave/mruby/mrbgems/mruby-binding/test/binding.c +14 -0
  283. data/ext/enclave/mruby/mrbgems/mruby-binding/test/binding.rb +64 -0
  284. data/ext/enclave/mruby/mrbgems/mruby-catch/README.md +94 -0
  285. data/ext/enclave/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
  286. data/ext/enclave/mruby/mrbgems/mruby-catch/mrblib/catch.rb +29 -0
  287. data/ext/enclave/mruby/mrbgems/mruby-catch/src/catch.c +149 -0
  288. data/ext/enclave/mruby/mrbgems/mruby-catch/test/catch.rb +86 -0
  289. data/ext/enclave/mruby/mrbgems/mruby-class-ext/README.md +81 -0
  290. data/ext/enclave/mruby/mrbgems/mruby-class-ext/mrbgem.rake +5 -0
  291. data/ext/enclave/mruby/mrbgems/mruby-class-ext/src/class.c +377 -0
  292. data/ext/enclave/mruby/mrbgems/mruby-class-ext/test/class.rb +46 -0
  293. data/ext/enclave/mruby/mrbgems/mruby-class-ext/test/module.rb +109 -0
  294. data/ext/enclave/mruby/mrbgems/mruby-cmath/README.md +45 -0
  295. data/ext/enclave/mruby/mrbgems/mruby-cmath/mrbgem.rake +8 -0
  296. data/ext/enclave/mruby/mrbgems/mruby-cmath/src/cmath.c +426 -0
  297. data/ext/enclave/mruby/mrbgems/mruby-cmath/test/cmath.rb +41 -0
  298. data/ext/enclave/mruby/mrbgems/mruby-compar-ext/README.md +65 -0
  299. data/ext/enclave/mruby/mrbgems/mruby-compar-ext/mrbgem.rake +5 -0
  300. data/ext/enclave/mruby/mrbgems/mruby-compar-ext/mrblib/compar.rb +75 -0
  301. data/ext/enclave/mruby/mrbgems/mruby-compar-ext/test/compar.rb +21 -0
  302. data/ext/enclave/mruby/mrbgems/mruby-compiler/README.md +28 -0
  303. data/ext/enclave/mruby/mrbgems/mruby-compiler/core/codegen.c +7316 -0
  304. data/ext/enclave/mruby/mrbgems/mruby-compiler/core/keywords +52 -0
  305. data/ext/enclave/mruby/mrbgems/mruby-compiler/core/lex.def +207 -0
  306. data/ext/enclave/mruby/mrbgems/mruby-compiler/core/node.h +784 -0
  307. data/ext/enclave/mruby/mrbgems/mruby-compiler/core/parse.y +8977 -0
  308. data/ext/enclave/mruby/mrbgems/mruby-compiler/core/y.tab.c +16136 -0
  309. data/ext/enclave/mruby/mrbgems/mruby-compiler/mrbgem.rake +42 -0
  310. data/ext/enclave/mruby/mrbgems/mruby-complex/README.md +55 -0
  311. data/ext/enclave/mruby/mrbgems/mruby-complex/mrbgem.rake +7 -0
  312. data/ext/enclave/mruby/mrbgems/mruby-complex/mrblib/complex.rb +259 -0
  313. data/ext/enclave/mruby/mrbgems/mruby-complex/src/complex.c +597 -0
  314. data/ext/enclave/mruby/mrbgems/mruby-complex/test/complex.rb +174 -0
  315. data/ext/enclave/mruby/mrbgems/mruby-data/README.md +126 -0
  316. data/ext/enclave/mruby/mrbgems/mruby-data/mrbgem.rake +5 -0
  317. data/ext/enclave/mruby/mrbgems/mruby-data/src/data.c +550 -0
  318. data/ext/enclave/mruby/mrbgems/mruby-data/test/data.rb +76 -0
  319. data/ext/enclave/mruby/mrbgems/mruby-dir/README.md +53 -0
  320. data/ext/enclave/mruby/mrbgems/mruby-dir/include/dir_hal.h +79 -0
  321. data/ext/enclave/mruby/mrbgems/mruby-dir/mrbgem.rake +35 -0
  322. data/ext/enclave/mruby/mrbgems/mruby-dir/mrblib/dir.rb +124 -0
  323. data/ext/enclave/mruby/mrbgems/mruby-dir/src/dir.c +493 -0
  324. data/ext/enclave/mruby/mrbgems/mruby-dir/test/dir.rb +138 -0
  325. data/ext/enclave/mruby/mrbgems/mruby-dir/test/dirtest.c +125 -0
  326. data/ext/enclave/mruby/mrbgems/mruby-encoding/README.md +96 -0
  327. data/ext/enclave/mruby/mrbgems/mruby-encoding/mrbgem.rake +8 -0
  328. data/ext/enclave/mruby/mrbgems/mruby-encoding/src/encoding.c +128 -0
  329. data/ext/enclave/mruby/mrbgems/mruby-encoding/test/numeric.rb +27 -0
  330. data/ext/enclave/mruby/mrbgems/mruby-encoding/test/string.rb +30 -0
  331. data/ext/enclave/mruby/mrbgems/mruby-enum-chain/README.md +80 -0
  332. data/ext/enclave/mruby/mrbgems/mruby-enum-chain/mrbgem.rake +6 -0
  333. data/ext/enclave/mruby/mrbgems/mruby-enum-chain/mrblib/chain.rb +149 -0
  334. data/ext/enclave/mruby/mrbgems/mruby-enum-chain/test/enum_chain.rb +108 -0
  335. data/ext/enclave/mruby/mrbgems/mruby-enum-ext/README.md +487 -0
  336. data/ext/enclave/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +5 -0
  337. data/ext/enclave/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +938 -0
  338. data/ext/enclave/mruby/mrbgems/mruby-enum-ext/test/enum.rb +223 -0
  339. data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/README.md +91 -0
  340. data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/mrbgem.rake +7 -0
  341. data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/mrblib/lazy.rb +363 -0
  342. data/ext/enclave/mruby/mrbgems/mruby-enum-lazy/test/lazy.rb +59 -0
  343. data/ext/enclave/mruby/mrbgems/mruby-enumerator/README.md +89 -0
  344. data/ext/enclave/mruby/mrbgems/mruby-enumerator/mrbgem.rake +6 -0
  345. data/ext/enclave/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +861 -0
  346. data/ext/enclave/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +664 -0
  347. data/ext/enclave/mruby/mrbgems/mruby-errno/README.md +83 -0
  348. data/ext/enclave/mruby/mrbgems/mruby-errno/mrbgem.rake +5 -0
  349. data/ext/enclave/mruby/mrbgems/mruby-errno/mrblib/errno.rb +50 -0
  350. data/ext/enclave/mruby/mrbgems/mruby-errno/src/errno.c +335 -0
  351. data/ext/enclave/mruby/mrbgems/mruby-errno/src/gen.rb +18 -0
  352. data/ext/enclave/mruby/mrbgems/mruby-errno/src/known_errors.def +156 -0
  353. data/ext/enclave/mruby/mrbgems/mruby-errno/src/known_errors_def.cstub +780 -0
  354. data/ext/enclave/mruby/mrbgems/mruby-errno/test/errno.rb +57 -0
  355. data/ext/enclave/mruby/mrbgems/mruby-error/README.md +103 -0
  356. data/ext/enclave/mruby/mrbgems/mruby-error/mrbgem.rake +5 -0
  357. data/ext/enclave/mruby/mrbgems/mruby-error/src/exception.c +143 -0
  358. data/ext/enclave/mruby/mrbgems/mruby-error/test/exception.c +60 -0
  359. data/ext/enclave/mruby/mrbgems/mruby-error/test/exception.rb +55 -0
  360. data/ext/enclave/mruby/mrbgems/mruby-eval/README.md +26 -0
  361. data/ext/enclave/mruby/mrbgems/mruby-eval/mrbgem.rake +10 -0
  362. data/ext/enclave/mruby/mrbgems/mruby-eval/src/eval.c +437 -0
  363. data/ext/enclave/mruby/mrbgems/mruby-eval/test/binding.rb +81 -0
  364. data/ext/enclave/mruby/mrbgems/mruby-eval/test/eval.rb +185 -0
  365. data/ext/enclave/mruby/mrbgems/mruby-exit/mrbgem.rake +5 -0
  366. data/ext/enclave/mruby/mrbgems/mruby-exit/src/mruby_exit.c +83 -0
  367. data/ext/enclave/mruby/mrbgems/mruby-fiber/mrbgem.rake +5 -0
  368. data/ext/enclave/mruby/mrbgems/mruby-fiber/src/fiber.c +575 -0
  369. data/ext/enclave/mruby/mrbgems/mruby-fiber/test/fiber.rb +210 -0
  370. data/ext/enclave/mruby/mrbgems/mruby-fiber/test/fiber2.rb +155 -0
  371. data/ext/enclave/mruby/mrbgems/mruby-fiber/test/fibertest.c +87 -0
  372. data/ext/enclave/mruby/mrbgems/mruby-hash-ext/README.md +392 -0
  373. data/ext/enclave/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +6 -0
  374. data/ext/enclave/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +408 -0
  375. data/ext/enclave/mruby/mrbgems/mruby-hash-ext/src/hash_ext.c +392 -0
  376. data/ext/enclave/mruby/mrbgems/mruby-hash-ext/test/hash.rb +317 -0
  377. data/ext/enclave/mruby/mrbgems/mruby-io/README.md +198 -0
  378. data/ext/enclave/mruby/mrbgems/mruby-io/include/io_hal.h +451 -0
  379. data/ext/enclave/mruby/mrbgems/mruby-io/include/mruby/io.h +76 -0
  380. data/ext/enclave/mruby/mrbgems/mruby-io/mrbgem.rake +34 -0
  381. data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/file.rb +109 -0
  382. data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/file_constants.rb +24 -0
  383. data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/io.rb +303 -0
  384. data/ext/enclave/mruby/mrbgems/mruby-io/mrblib/kernel.rb +175 -0
  385. data/ext/enclave/mruby/mrbgems/mruby-io/src/file.c +1192 -0
  386. data/ext/enclave/mruby/mrbgems/mruby-io/src/file_test.c +403 -0
  387. data/ext/enclave/mruby/mrbgems/mruby-io/src/io.c +2260 -0
  388. data/ext/enclave/mruby/mrbgems/mruby-io/src/mruby_io_gem.c +21 -0
  389. data/ext/enclave/mruby/mrbgems/mruby-io/test/file.rb +415 -0
  390. data/ext/enclave/mruby/mrbgems/mruby-io/test/file_test.rb +112 -0
  391. data/ext/enclave/mruby/mrbgems/mruby-io/test/io.rb +668 -0
  392. data/ext/enclave/mruby/mrbgems/mruby-io/test/mruby_io_test.c +293 -0
  393. data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/README.md +165 -0
  394. data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/mrbgem.rake +5 -0
  395. data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +316 -0
  396. data/ext/enclave/mruby/mrbgems/mruby-kernel-ext/test/kernel.rb +134 -0
  397. data/ext/enclave/mruby/mrbgems/mruby-math/README.md +77 -0
  398. data/ext/enclave/mruby/mrbgems/mruby-math/mrbgem.rake +5 -0
  399. data/ext/enclave/mruby/mrbgems/mruby-math/src/math.c +753 -0
  400. data/ext/enclave/mruby/mrbgems/mruby-math/test/math.rb +201 -0
  401. data/ext/enclave/mruby/mrbgems/mruby-metaprog/README.md +123 -0
  402. data/ext/enclave/mruby/mrbgems/mruby-metaprog/mrbgem.rake +5 -0
  403. data/ext/enclave/mruby/mrbgems/mruby-metaprog/src/metaprog.c +739 -0
  404. data/ext/enclave/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +465 -0
  405. data/ext/enclave/mruby/mrbgems/mruby-method/README.md +66 -0
  406. data/ext/enclave/mruby/mrbgems/mruby-method/mrbgem.rake +7 -0
  407. data/ext/enclave/mruby/mrbgems/mruby-method/mrblib/method.rb +73 -0
  408. data/ext/enclave/mruby/mrbgems/mruby-method/src/method.c +890 -0
  409. data/ext/enclave/mruby/mrbgems/mruby-method/test/method.rb +514 -0
  410. data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/README.md +78 -0
  411. data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +5 -0
  412. data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +125 -0
  413. data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +527 -0
  414. data/ext/enclave/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +137 -0
  415. data/ext/enclave/mruby/mrbgems/mruby-object-ext/README.md +144 -0
  416. data/ext/enclave/mruby/mrbgems/mruby-object-ext/mrbgem.rake +5 -0
  417. data/ext/enclave/mruby/mrbgems/mruby-object-ext/mrblib/object.rb +33 -0
  418. data/ext/enclave/mruby/mrbgems/mruby-object-ext/src/object.c +128 -0
  419. data/ext/enclave/mruby/mrbgems/mruby-object-ext/test/nil.rb +16 -0
  420. data/ext/enclave/mruby/mrbgems/mruby-object-ext/test/object.rb +67 -0
  421. data/ext/enclave/mruby/mrbgems/mruby-object-ext/test/object_ext.c +17 -0
  422. data/ext/enclave/mruby/mrbgems/mruby-objectspace/README.md +59 -0
  423. data/ext/enclave/mruby/mrbgems/mruby-objectspace/mrbgem.rake +5 -0
  424. data/ext/enclave/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +188 -0
  425. data/ext/enclave/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +60 -0
  426. data/ext/enclave/mruby/mrbgems/mruby-os-memsize/README.md +75 -0
  427. data/ext/enclave/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
  428. data/ext/enclave/mruby/mrbgems/mruby-os-memsize/src/memsize.c +271 -0
  429. data/ext/enclave/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
  430. data/ext/enclave/mruby/mrbgems/mruby-pack/README.md +140 -0
  431. data/ext/enclave/mruby/mrbgems/mruby-pack/mrbgem.rake +5 -0
  432. data/ext/enclave/mruby/mrbgems/mruby-pack/src/pack.c +2129 -0
  433. data/ext/enclave/mruby/mrbgems/mruby-pack/test/pack.rb +202 -0
  434. data/ext/enclave/mruby/mrbgems/mruby-proc-binding/README.md +140 -0
  435. data/ext/enclave/mruby/mrbgems/mruby-proc-binding/mrbgem.rake +10 -0
  436. data/ext/enclave/mruby/mrbgems/mruby-proc-binding/src/proc_binding.c +76 -0
  437. data/ext/enclave/mruby/mrbgems/mruby-proc-binding/test/proc_binding.c +14 -0
  438. data/ext/enclave/mruby/mrbgems/mruby-proc-binding/test/proc_binding.rb +22 -0
  439. data/ext/enclave/mruby/mrbgems/mruby-proc-ext/README.md +107 -0
  440. data/ext/enclave/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +5 -0
  441. data/ext/enclave/mruby/mrbgems/mruby-proc-ext/mrblib/proc.rb +130 -0
  442. data/ext/enclave/mruby/mrbgems/mruby-proc-ext/src/proc.c +267 -0
  443. data/ext/enclave/mruby/mrbgems/mruby-proc-ext/test/proc.c +62 -0
  444. data/ext/enclave/mruby/mrbgems/mruby-proc-ext/test/proc.rb +130 -0
  445. data/ext/enclave/mruby/mrbgems/mruby-random/README.md +272 -0
  446. data/ext/enclave/mruby/mrbgems/mruby-random/mrbgem.rake +5 -0
  447. data/ext/enclave/mruby/mrbgems/mruby-random/src/random.c +608 -0
  448. data/ext/enclave/mruby/mrbgems/mruby-random/test/random.rb +151 -0
  449. data/ext/enclave/mruby/mrbgems/mruby-range-ext/README.md +93 -0
  450. data/ext/enclave/mruby/mrbgems/mruby-range-ext/mrbgem.rake +5 -0
  451. data/ext/enclave/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +155 -0
  452. data/ext/enclave/mruby/mrbgems/mruby-range-ext/src/range.c +236 -0
  453. data/ext/enclave/mruby/mrbgems/mruby-range-ext/test/range.rb +211 -0
  454. data/ext/enclave/mruby/mrbgems/mruby-rational/README.md +61 -0
  455. data/ext/enclave/mruby/mrbgems/mruby-rational/mrbgem.rake +7 -0
  456. data/ext/enclave/mruby/mrbgems/mruby-rational/mrblib/rational.rb +66 -0
  457. data/ext/enclave/mruby/mrbgems/mruby-rational/src/rational.c +1269 -0
  458. data/ext/enclave/mruby/mrbgems/mruby-rational/test/rational.rb +316 -0
  459. data/ext/enclave/mruby/mrbgems/mruby-set/LICENSE +24 -0
  460. data/ext/enclave/mruby/mrbgems/mruby-set/README.md +260 -0
  461. data/ext/enclave/mruby/mrbgems/mruby-set/mrbgem.rake +9 -0
  462. data/ext/enclave/mruby/mrbgems/mruby-set/mrblib/set.rb +325 -0
  463. data/ext/enclave/mruby/mrbgems/mruby-set/mruby-set.gem +6 -0
  464. data/ext/enclave/mruby/mrbgems/mruby-set/src/set.c +1535 -0
  465. data/ext/enclave/mruby/mrbgems/mruby-set/test/set.rb +764 -0
  466. data/ext/enclave/mruby/mrbgems/mruby-sleep/README.md +29 -0
  467. data/ext/enclave/mruby/mrbgems/mruby-sleep/example/sleep.rb +2 -0
  468. data/ext/enclave/mruby/mrbgems/mruby-sleep/mrbgem.rake +5 -0
  469. data/ext/enclave/mruby/mrbgems/mruby-sleep/src/sleep.c +187 -0
  470. data/ext/enclave/mruby/mrbgems/mruby-sleep/test/sleep_test.rb +29 -0
  471. data/ext/enclave/mruby/mrbgems/mruby-socket/README.md +56 -0
  472. data/ext/enclave/mruby/mrbgems/mruby-socket/include/socket_hal.h +83 -0
  473. data/ext/enclave/mruby/mrbgems/mruby-socket/mrbgem.rake +37 -0
  474. data/ext/enclave/mruby/mrbgems/mruby-socket/mrblib/socket.rb +1131 -0
  475. data/ext/enclave/mruby/mrbgems/mruby-socket/src/const.cstub +480 -0
  476. data/ext/enclave/mruby/mrbgems/mruby-socket/src/const.def +172 -0
  477. data/ext/enclave/mruby/mrbgems/mruby-socket/src/gen.rb +17 -0
  478. data/ext/enclave/mruby/mrbgems/mruby-socket/src/socket.c +1374 -0
  479. data/ext/enclave/mruby/mrbgems/mruby-socket/test/addrinfo.rb +91 -0
  480. data/ext/enclave/mruby/mrbgems/mruby-socket/test/basicsocket.rb +17 -0
  481. data/ext/enclave/mruby/mrbgems/mruby-socket/test/ipsocket.rb +44 -0
  482. data/ext/enclave/mruby/mrbgems/mruby-socket/test/socket.rb +38 -0
  483. data/ext/enclave/mruby/mrbgems/mruby-socket/test/sockettest.c +84 -0
  484. data/ext/enclave/mruby/mrbgems/mruby-socket/test/tcpsocket.rb +4 -0
  485. data/ext/enclave/mruby/mrbgems/mruby-socket/test/udpsocket.rb +16 -0
  486. data/ext/enclave/mruby/mrbgems/mruby-socket/test/unix.rb +130 -0
  487. data/ext/enclave/mruby/mrbgems/mruby-sprintf/README.md +235 -0
  488. data/ext/enclave/mruby/mrbgems/mruby-sprintf/mrbgem.rake +5 -0
  489. data/ext/enclave/mruby/mrbgems/mruby-sprintf/mrblib/string.rb +24 -0
  490. data/ext/enclave/mruby/mrbgems/mruby-sprintf/src/sprintf.c +1195 -0
  491. data/ext/enclave/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +92 -0
  492. data/ext/enclave/mruby/mrbgems/mruby-strftime/README.md +140 -0
  493. data/ext/enclave/mruby/mrbgems/mruby-strftime/mrbgem.rake +7 -0
  494. data/ext/enclave/mruby/mrbgems/mruby-strftime/src/strftime.c +119 -0
  495. data/ext/enclave/mruby/mrbgems/mruby-strftime/test/strftime.rb +152 -0
  496. data/ext/enclave/mruby/mrbgems/mruby-string-ext/README.md +886 -0
  497. data/ext/enclave/mruby/mrbgems/mruby-string-ext/mrbgem.rake +5 -0
  498. data/ext/enclave/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +166 -0
  499. data/ext/enclave/mruby/mrbgems/mruby-string-ext/src/string.c +2290 -0
  500. data/ext/enclave/mruby/mrbgems/mruby-string-ext/test/numeric.rb +27 -0
  501. data/ext/enclave/mruby/mrbgems/mruby-string-ext/test/range.rb +26 -0
  502. data/ext/enclave/mruby/mrbgems/mruby-string-ext/test/string.rb +765 -0
  503. data/ext/enclave/mruby/mrbgems/mruby-struct/README.md +105 -0
  504. data/ext/enclave/mruby/mrbgems/mruby-struct/mrbgem.rake +5 -0
  505. data/ext/enclave/mruby/mrbgems/mruby-struct/mrblib/struct.rb +69 -0
  506. data/ext/enclave/mruby/mrbgems/mruby-struct/src/struct.c +812 -0
  507. data/ext/enclave/mruby/mrbgems/mruby-struct/test/struct.rb +303 -0
  508. data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/README.md +50 -0
  509. data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +5 -0
  510. data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +72 -0
  511. data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +79 -0
  512. data/ext/enclave/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +55 -0
  513. data/ext/enclave/mruby/mrbgems/mruby-task/README.md +770 -0
  514. data/ext/enclave/mruby/mrbgems/mruby-task/examples/inspection.rb +65 -0
  515. data/ext/enclave/mruby/mrbgems/mruby-task/examples/priority.rb +41 -0
  516. data/ext/enclave/mruby/mrbgems/mruby-task/examples/producer_consumer.rb +58 -0
  517. data/ext/enclave/mruby/mrbgems/mruby-task/examples/simple.rb +27 -0
  518. data/ext/enclave/mruby/mrbgems/mruby-task/examples/statistics.rb +59 -0
  519. data/ext/enclave/mruby/mrbgems/mruby-task/examples/suspend_resume.rb +47 -0
  520. data/ext/enclave/mruby/mrbgems/mruby-task/examples/task_pass.rb +21 -0
  521. data/ext/enclave/mruby/mrbgems/mruby-task/include/task.h +143 -0
  522. data/ext/enclave/mruby/mrbgems/mruby-task/include/task_hal.h +162 -0
  523. data/ext/enclave/mruby/mrbgems/mruby-task/mrbgem.rake +36 -0
  524. data/ext/enclave/mruby/mrbgems/mruby-task/src/task.c +1573 -0
  525. data/ext/enclave/mruby/mrbgems/mruby-task/test/task.rb +185 -0
  526. data/ext/enclave/mruby/mrbgems/mruby-test/README.md +7 -0
  527. data/ext/enclave/mruby/mrbgems/mruby-test/driver.c +315 -0
  528. data/ext/enclave/mruby/mrbgems/mruby-test/mrbgem.rake +173 -0
  529. data/ext/enclave/mruby/mrbgems/mruby-test/vformat.c +151 -0
  530. data/ext/enclave/mruby/mrbgems/mruby-test-inline-struct/mrbgem.rake +5 -0
  531. data/ext/enclave/mruby/mrbgems/mruby-test-inline-struct/test/inline.c +92 -0
  532. data/ext/enclave/mruby/mrbgems/mruby-test-inline-struct/test/inline.rb +118 -0
  533. data/ext/enclave/mruby/mrbgems/mruby-time/README.md +102 -0
  534. data/ext/enclave/mruby/mrbgems/mruby-time/include/mruby/time.h +27 -0
  535. data/ext/enclave/mruby/mrbgems/mruby-time/mrbgem.rake +5 -0
  536. data/ext/enclave/mruby/mrbgems/mruby-time/src/time.c +1739 -0
  537. data/ext/enclave/mruby/mrbgems/mruby-time/test/time.rb +313 -0
  538. data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/README.md +32 -0
  539. data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +5 -0
  540. data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb +24 -0
  541. data/ext/enclave/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +23 -0
  542. data/ext/enclave/mruby/mrbgems/stdlib-ext.gembox +21 -0
  543. data/ext/enclave/mruby/mrbgems/stdlib-io.gembox +15 -0
  544. data/ext/enclave/mruby/mrbgems/stdlib.gembox +63 -0
  545. data/ext/enclave/mruby/mrblib/10error.rb +23 -0
  546. data/ext/enclave/mruby/mrblib/array.rb +102 -0
  547. data/ext/enclave/mruby/mrblib/compar.rb +102 -0
  548. data/ext/enclave/mruby/mrblib/enum.rb +358 -0
  549. data/ext/enclave/mruby/mrblib/hash.rb +276 -0
  550. data/ext/enclave/mruby/mrblib/kernel.rb +45 -0
  551. data/ext/enclave/mruby/mrblib/numeric.rb +160 -0
  552. data/ext/enclave/mruby/mrblib/range.rb +98 -0
  553. data/ext/enclave/mruby/mrblib/string.rb +173 -0
  554. data/ext/enclave/mruby/mrblib/symbol.rb +8 -0
  555. data/ext/enclave/mruby/oss-fuzz/mruby_fuzzer.c +18 -0
  556. data/ext/enclave/mruby/oss-fuzz/proto_to_ruby.h +55 -0
  557. data/ext/enclave/mruby/src/allocf.c +37 -0
  558. data/ext/enclave/mruby/src/array.c +2302 -0
  559. data/ext/enclave/mruby/src/backtrace.c +294 -0
  560. data/ext/enclave/mruby/src/cdump.c +498 -0
  561. data/ext/enclave/mruby/src/class.c +4394 -0
  562. data/ext/enclave/mruby/src/codedump.c +693 -0
  563. data/ext/enclave/mruby/src/debug.c +290 -0
  564. data/ext/enclave/mruby/src/dump.c +998 -0
  565. data/ext/enclave/mruby/src/enum.c +30 -0
  566. data/ext/enclave/mruby/src/error.c +937 -0
  567. data/ext/enclave/mruby/src/etc.c +421 -0
  568. data/ext/enclave/mruby/src/fmt_fp.c +372 -0
  569. data/ext/enclave/mruby/src/gc.c +1610 -0
  570. data/ext/enclave/mruby/src/hash.c +2355 -0
  571. data/ext/enclave/mruby/src/init.c +50 -0
  572. data/ext/enclave/mruby/src/kernel.c +718 -0
  573. data/ext/enclave/mruby/src/load.c +760 -0
  574. data/ext/enclave/mruby/src/mempool.c +225 -0
  575. data/ext/enclave/mruby/src/numeric.c +2420 -0
  576. data/ext/enclave/mruby/src/numops.c +112 -0
  577. data/ext/enclave/mruby/src/object.c +883 -0
  578. data/ext/enclave/mruby/src/print.c +136 -0
  579. data/ext/enclave/mruby/src/proc.c +572 -0
  580. data/ext/enclave/mruby/src/range.c +597 -0
  581. data/ext/enclave/mruby/src/readfloat.c +228 -0
  582. data/ext/enclave/mruby/src/readint.c +27 -0
  583. data/ext/enclave/mruby/src/readnum.c +43 -0
  584. data/ext/enclave/mruby/src/state.c +247 -0
  585. data/ext/enclave/mruby/src/string.c +3577 -0
  586. data/ext/enclave/mruby/src/symbol.c +1023 -0
  587. data/ext/enclave/mruby/src/value_array.h +28 -0
  588. data/ext/enclave/mruby/src/variable.c +1475 -0
  589. data/ext/enclave/mruby/src/version.c +17 -0
  590. data/ext/enclave/mruby/src/vm.c +3696 -0
  591. data/ext/enclave/mruby/tasks/amalgam.rake +34 -0
  592. data/ext/enclave/mruby/tasks/benchmark.rake +93 -0
  593. data/ext/enclave/mruby/tasks/bin.rake +23 -0
  594. data/ext/enclave/mruby/tasks/core.rake +12 -0
  595. data/ext/enclave/mruby/tasks/doc.rake +118 -0
  596. data/ext/enclave/mruby/tasks/install.rake +40 -0
  597. data/ext/enclave/mruby/tasks/libmruby.rake +90 -0
  598. data/ext/enclave/mruby/tasks/mrbgems.rake +152 -0
  599. data/ext/enclave/mruby/tasks/mrblib.rake +29 -0
  600. data/ext/enclave/mruby/tasks/presym.rake +57 -0
  601. data/ext/enclave/mruby/tasks/test.rake +84 -0
  602. data/ext/enclave/mruby/tasks/toolchains/android.rake +228 -0
  603. data/ext/enclave/mruby/tasks/toolchains/clang.rake +8 -0
  604. data/ext/enclave/mruby/tasks/toolchains/emscripten.rake +57 -0
  605. data/ext/enclave/mruby/tasks/toolchains/gcc.rake +74 -0
  606. data/ext/enclave/mruby/tasks/toolchains/openwrt.rake +32 -0
  607. data/ext/enclave/mruby/tasks/toolchains/visualcpp.rake +48 -0
  608. data/ext/enclave/mruby/test/assert.rb +404 -0
  609. data/ext/enclave/mruby/test/bintest.rb +55 -0
  610. data/ext/enclave/mruby/test/t/argumenterror.rb +37 -0
  611. data/ext/enclave/mruby/test/t/array.rb +478 -0
  612. data/ext/enclave/mruby/test/t/basicobject.rb +10 -0
  613. data/ext/enclave/mruby/test/t/bs_block.rb +621 -0
  614. data/ext/enclave/mruby/test/t/bs_literal.rb +38 -0
  615. data/ext/enclave/mruby/test/t/class.rb +505 -0
  616. data/ext/enclave/mruby/test/t/codegen.rb +196 -0
  617. data/ext/enclave/mruby/test/t/comparable.rb +79 -0
  618. data/ext/enclave/mruby/test/t/ensure.rb +36 -0
  619. data/ext/enclave/mruby/test/t/enumerable.rb +134 -0
  620. data/ext/enclave/mruby/test/t/exception.rb +425 -0
  621. data/ext/enclave/mruby/test/t/false.rb +31 -0
  622. data/ext/enclave/mruby/test/t/float.rb +296 -0
  623. data/ext/enclave/mruby/test/t/gc.rb +45 -0
  624. data/ext/enclave/mruby/test/t/hash.rb +976 -0
  625. data/ext/enclave/mruby/test/t/indexerror.rb +6 -0
  626. data/ext/enclave/mruby/test/t/integer.rb +247 -0
  627. data/ext/enclave/mruby/test/t/iterations.rb +61 -0
  628. data/ext/enclave/mruby/test/t/kernel.rb +462 -0
  629. data/ext/enclave/mruby/test/t/lang.rb +74 -0
  630. data/ext/enclave/mruby/test/t/literals.rb +386 -0
  631. data/ext/enclave/mruby/test/t/localjumperror.rb +13 -0
  632. data/ext/enclave/mruby/test/t/methods.rb +138 -0
  633. data/ext/enclave/mruby/test/t/module.rb +931 -0
  634. data/ext/enclave/mruby/test/t/nameerror.rb +28 -0
  635. data/ext/enclave/mruby/test/t/nil.rb +39 -0
  636. data/ext/enclave/mruby/test/t/nomethoderror.rb +22 -0
  637. data/ext/enclave/mruby/test/t/numeric.rb +114 -0
  638. data/ext/enclave/mruby/test/t/object.rb +10 -0
  639. data/ext/enclave/mruby/test/t/proc.rb +198 -0
  640. data/ext/enclave/mruby/test/t/range.rb +194 -0
  641. data/ext/enclave/mruby/test/t/rangeerror.rb +6 -0
  642. data/ext/enclave/mruby/test/t/regexperror.rb +4 -0
  643. data/ext/enclave/mruby/test/t/runtimeerror.rb +6 -0
  644. data/ext/enclave/mruby/test/t/standarderror.rb +6 -0
  645. data/ext/enclave/mruby/test/t/string.rb +981 -0
  646. data/ext/enclave/mruby/test/t/superclass.rb +46 -0
  647. data/ext/enclave/mruby/test/t/symbol.rb +30 -0
  648. data/ext/enclave/mruby/test/t/syntax.rb +1296 -0
  649. data/ext/enclave/mruby/test/t/true.rb +31 -0
  650. data/ext/enclave/mruby/test/t/typeerror.rb +6 -0
  651. data/ext/enclave/mruby/test/t/unicode.rb +39 -0
  652. data/ext/enclave/mruby/test/t/vformat.rb +57 -0
  653. data/ext/enclave/mruby/tools/lrama/LEGAL.md +12 -0
  654. data/ext/enclave/mruby/tools/lrama/MIT +21 -0
  655. data/ext/enclave/mruby/tools/lrama/NEWS.md +696 -0
  656. data/ext/enclave/mruby/tools/lrama/exe/lrama +7 -0
  657. data/ext/enclave/mruby/tools/lrama/lib/lrama/bitmap.rb +34 -0
  658. data/ext/enclave/mruby/tools/lrama/lib/lrama/command.rb +68 -0
  659. data/ext/enclave/mruby/tools/lrama/lib/lrama/context.rb +499 -0
  660. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/derivation.rb +66 -0
  661. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/example.rb +129 -0
  662. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/path.rb +29 -0
  663. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/production_path.rb +19 -0
  664. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/start_path.rb +23 -0
  665. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/state_item.rb +8 -0
  666. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/transition_path.rb +19 -0
  667. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples/triple.rb +23 -0
  668. data/ext/enclave/mruby/tools/lrama/lib/lrama/counterexamples.rb +298 -0
  669. data/ext/enclave/mruby/tools/lrama/lib/lrama/diagnostics.rb +36 -0
  670. data/ext/enclave/mruby/tools/lrama/lib/lrama/digraph.rb +83 -0
  671. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/auxiliary.rb +9 -0
  672. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/binding.rb +67 -0
  673. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/destructor_code.rb +42 -0
  674. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/initial_action_code.rb +36 -0
  675. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/no_reference_code.rb +30 -0
  676. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/printer_code.rb +42 -0
  677. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code/rule_action.rb +92 -0
  678. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/code.rb +53 -0
  679. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/counter.rb +17 -0
  680. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/destructor.rb +11 -0
  681. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/error_token.rb +11 -0
  682. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb +62 -0
  683. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb +40 -0
  684. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb +24 -0
  685. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/parameterizing_rule.rb +5 -0
  686. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/percent_code.rb +14 -0
  687. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/precedence.rb +13 -0
  688. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/printer.rb +11 -0
  689. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/reference.rb +16 -0
  690. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/rule.rb +75 -0
  691. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/rule_builder.rb +255 -0
  692. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/stdlib.y +122 -0
  693. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/symbol.rb +105 -0
  694. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/symbols/resolver.rb +301 -0
  695. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/symbols.rb +3 -0
  696. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/type.rb +20 -0
  697. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar/union.rb +12 -0
  698. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar.rb +407 -0
  699. data/ext/enclave/mruby/tools/lrama/lib/lrama/grammar_validator.rb +37 -0
  700. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/grammar_file.rb +40 -0
  701. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/location.rb +115 -0
  702. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/char.rb +11 -0
  703. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/ident.rb +11 -0
  704. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/instantiate_rule.rb +30 -0
  705. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/tag.rb +16 -0
  706. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token/user_code.rb +83 -0
  707. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer/token.rb +70 -0
  708. data/ext/enclave/mruby/tools/lrama/lib/lrama/lexer.rb +191 -0
  709. data/ext/enclave/mruby/tools/lrama/lib/lrama/logger.rb +21 -0
  710. data/ext/enclave/mruby/tools/lrama/lib/lrama/option_parser.rb +169 -0
  711. data/ext/enclave/mruby/tools/lrama/lib/lrama/options.rb +28 -0
  712. data/ext/enclave/mruby/tools/lrama/lib/lrama/output.rb +459 -0
  713. data/ext/enclave/mruby/tools/lrama/lib/lrama/parser.rb +2144 -0
  714. data/ext/enclave/mruby/tools/lrama/lib/lrama/report/duration.rb +27 -0
  715. data/ext/enclave/mruby/tools/lrama/lib/lrama/report/profile.rb +16 -0
  716. data/ext/enclave/mruby/tools/lrama/lib/lrama/report.rb +4 -0
  717. data/ext/enclave/mruby/tools/lrama/lib/lrama/state/reduce.rb +37 -0
  718. data/ext/enclave/mruby/tools/lrama/lib/lrama/state/reduce_reduce_conflict.rb +11 -0
  719. data/ext/enclave/mruby/tools/lrama/lib/lrama/state/resolved_conflict.rb +31 -0
  720. data/ext/enclave/mruby/tools/lrama/lib/lrama/state/shift.rb +15 -0
  721. data/ext/enclave/mruby/tools/lrama/lib/lrama/state/shift_reduce_conflict.rb +11 -0
  722. data/ext/enclave/mruby/tools/lrama/lib/lrama/state.rb +433 -0
  723. data/ext/enclave/mruby/tools/lrama/lib/lrama/states/item.rb +91 -0
  724. data/ext/enclave/mruby/tools/lrama/lib/lrama/states.rb +595 -0
  725. data/ext/enclave/mruby/tools/lrama/lib/lrama/states_reporter.rb +362 -0
  726. data/ext/enclave/mruby/tools/lrama/lib/lrama/trace_reporter.rb +45 -0
  727. data/ext/enclave/mruby/tools/lrama/lib/lrama/version.rb +5 -0
  728. data/ext/enclave/mruby/tools/lrama/lib/lrama.rb +22 -0
  729. data/ext/enclave/mruby/tools/lrama/template/bison/_yacc.h +71 -0
  730. data/ext/enclave/mruby/tools/lrama/template/bison/yacc.c +2068 -0
  731. data/ext/enclave/mruby/tools/lrama/template/bison/yacc.h +40 -0
  732. data/ext/enclave/sandbox_build_config.rb +15 -0
  733. data/ext/enclave/sandbox_core.c +722 -0
  734. data/ext/enclave/sandbox_core.h +87 -0
  735. data/lib/enclave/result.rb +29 -0
  736. data/lib/enclave/tool.rb +38 -0
  737. data/lib/enclave/version.rb +3 -0
  738. data/lib/enclave.rb +73 -0
  739. metadata +819 -0
@@ -0,0 +1,883 @@
1
+ /*
2
+ ** object.c - Object, NilClass, TrueClass, FalseClass class
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #include <mruby.h>
8
+ #include <mruby/class.h>
9
+ #include <mruby/numeric.h>
10
+ #include <mruby/string.h>
11
+ #include <mruby/class.h>
12
+ #include <mruby/internal.h>
13
+ #include <mruby/presym.h>
14
+
15
+ /*
16
+ * Checks if two mruby values, `v1` and `v2`, are identical.
17
+ * For most types, this is equivalent to pointer equality.
18
+ * For immediate values (integers, symbols, true, false, nil),
19
+ * it compares their actual values.
20
+ *
21
+ * Behavior under different boxing configurations:
22
+ * - MRB_NAN_BOXING: Compares the raw `uint64_t` values.
23
+ * - MRB_WORD_BOXING: Compares the raw `mrb_word` values.
24
+ * - MRB_NO_BOXING: Checks if types are equal. If so, performs
25
+ * type-specific comparisons (value for immediates, pointer for others).
26
+ */
27
+ MRB_API mrb_bool
28
+ mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2)
29
+ {
30
+ #if defined(MRB_NAN_BOXING)
31
+ return v1.u == v2.u;
32
+ #elif defined(MRB_WORD_BOXING)
33
+ return v1.w == v2.w;
34
+ #else /* MRB_NO_BOXING */
35
+ if (mrb_type(v1) != mrb_type(v2)) return FALSE;
36
+ switch (mrb_type(v1)) {
37
+ case MRB_TT_TRUE:
38
+ return TRUE;
39
+
40
+ case MRB_TT_FALSE:
41
+ return (mrb_fixnum(v1) == mrb_fixnum(v2));
42
+ case MRB_TT_INTEGER:
43
+ return (mrb_integer(v1) == mrb_integer(v2));
44
+ case MRB_TT_SYMBOL:
45
+ return (mrb_symbol(v1) == mrb_symbol(v2));
46
+
47
+ #ifndef MRB_NO_FLOAT
48
+ case MRB_TT_FLOAT:
49
+ return (mrb_float(v1) == mrb_float(v2));
50
+ #endif
51
+
52
+ default:
53
+ return (mrb_ptr(v1) == mrb_ptr(v2));
54
+ }
55
+ #endif
56
+ }
57
+
58
+ /*
59
+ * Checks if two mruby values, `v1` and `v2`, are equal.
60
+ * This function currently calls mrb_obj_eq to perform the comparison.
61
+ */
62
+ MRB_API mrb_bool
63
+ mrb_obj_equal(mrb_state *mrb, mrb_value v1, mrb_value v2)
64
+ {
65
+ return mrb_obj_eq(mrb, v1, v2);
66
+ }
67
+
68
+ /*
69
+ * Checks for equality between `obj1` and `obj2`.
70
+ *
71
+ * It first uses `mrb_obj_eq` for an identity check. If that fails,
72
+ * it handles cases like mixed integer/float comparisons.
73
+ * If `MRB_USE_BIGINT` is defined, it also considers comparisons
74
+ * involving BigInts against Integers, other BigInts, or Floats.
75
+ * Finally, if none of the above apply, it attempts to call the
76
+ * `==` operator (MRB_OPSYM(eq)) on `obj1` with `obj2` as an argument,
77
+ * unless `obj1`'s `==` method is the default `mrb_obj_equal_m`.
78
+ */
79
+ MRB_API mrb_bool
80
+ mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
81
+ {
82
+ if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
83
+ #ifndef MRB_NO_FLOAT
84
+ /* value mixing with integer and float */
85
+ else if (mrb_integer_p(obj1) && mrb_float_p(obj2)) {
86
+ if ((mrb_float)mrb_integer(obj1) == mrb_float(obj2))
87
+ return TRUE;
88
+ }
89
+ else if (mrb_float_p(obj1) && mrb_integer_p(obj2)) {
90
+ if (mrb_float(obj1) == (mrb_float)mrb_integer(obj2))
91
+ return TRUE;
92
+ }
93
+ #endif
94
+ #ifdef MRB_USE_BIGINT
95
+ else if (mrb_bigint_p(obj1) &&
96
+ (mrb_integer_p(obj2) || mrb_bigint_p(obj2) || mrb_float_p(obj2))) {
97
+ if (mrb_bint_cmp(mrb, obj1, obj2) == 0)
98
+ return TRUE;
99
+ }
100
+ #endif
101
+ else if (!mrb_func_basic_p(mrb, obj1, MRB_OPSYM(eq), mrb_obj_equal_m)) {
102
+ mrb_value result = mrb_funcall_argv(mrb, obj1, MRB_OPSYM(eq), 1, &obj2);
103
+ if (mrb_test(result)) return TRUE;
104
+ }
105
+ return FALSE;
106
+ }
107
+
108
+ /*
109
+ * Document-class: NilClass
110
+ *
111
+ * The class of the singleton object `nil`.
112
+ */
113
+
114
+ /* 15.2.4.3.4 */
115
+ /*
116
+ * call_seq:
117
+ * nil.nil? -> true
118
+ *
119
+ * Only the object *nil* responds `true` to `nil?`.
120
+ */
121
+
122
+ static mrb_value
123
+ mrb_true(mrb_state *mrb, mrb_value obj)
124
+ {
125
+ return mrb_true_value();
126
+ }
127
+
128
+ /* 15.2.4.3.5 */
129
+ /*
130
+ * call-seq:
131
+ * nil.to_s -> ""
132
+ *
133
+ * Always returns the empty string.
134
+ */
135
+
136
+ static mrb_value
137
+ nil_to_s(mrb_state *mrb, mrb_value obj)
138
+ {
139
+ mrb_value str = mrb_str_new_frozen(mrb, NULL, 0);
140
+ RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
141
+ return str;
142
+ }
143
+
144
+ static mrb_value
145
+ nil_inspect(mrb_state *mrb, mrb_value obj)
146
+ {
147
+ mrb_value str = mrb_str_new_lit_frozen(mrb, "nil");
148
+ RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
149
+ return str;
150
+ }
151
+
152
+ /***********************************************************************
153
+ * Document-class: TrueClass
154
+ *
155
+ * The global value `true` is the only instance of class
156
+ * `TrueClass` and represents a logically true value in
157
+ * boolean expressions. The class provides operators allowing
158
+ * `true` to be used in logical expressions.
159
+ */
160
+
161
+ /* 15.2.5.3.1 */
162
+ /*
163
+ * call-seq:
164
+ * true & obj -> true or false
165
+ *
166
+ * And---Returns `false` if *obj* is
167
+ * `nil` or `false`, `true` otherwise.
168
+ */
169
+
170
+ static mrb_value
171
+ true_and(mrb_state *mrb, mrb_value obj)
172
+ {
173
+ mrb_bool obj2;
174
+
175
+ mrb_get_args(mrb, "b", &obj2);
176
+
177
+ return mrb_bool_value(obj2);
178
+ }
179
+
180
+ /* 15.2.5.3.2 */
181
+ /*
182
+ * call-seq:
183
+ * true ^ obj -> !obj
184
+ *
185
+ * Exclusive Or---Returns `true` if *obj* is
186
+ * `nil` or `false`, `false`
187
+ * otherwise.
188
+ */
189
+
190
+ static mrb_value
191
+ true_xor(mrb_state *mrb, mrb_value obj)
192
+ {
193
+ mrb_bool obj2;
194
+
195
+ mrb_get_args(mrb, "b", &obj2);
196
+ return mrb_bool_value(!obj2);
197
+ }
198
+
199
+ /* 15.2.5.3.3 */
200
+ /*
201
+ * call-seq:
202
+ * true.to_s -> "true"
203
+ *
204
+ * The string representation of `true` is "true".
205
+ */
206
+
207
+ static mrb_value
208
+ true_to_s(mrb_state *mrb, mrb_value obj)
209
+ {
210
+ mrb_value str = mrb_str_new_lit_frozen(mrb, "true");
211
+ RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
212
+ return str;
213
+ }
214
+
215
+ /* 15.2.5.3.4 */
216
+ /*
217
+ * call-seq:
218
+ * true | obj -> true
219
+ *
220
+ * Or---Returns `true`. As *anObject* is an argument to
221
+ * a method call, it is always evaluated; there is no short-circuit
222
+ * evaluation in this case.
223
+ *
224
+ * true | puts("or")
225
+ * true || puts("logical or")
226
+ *
227
+ * <em>produces:</em>
228
+ *
229
+ * or
230
+ */
231
+
232
+ static mrb_value
233
+ true_or(mrb_state *mrb, mrb_value obj)
234
+ {
235
+ return mrb_true_value();
236
+ }
237
+
238
+ /*
239
+ * Document-class: FalseClass
240
+ *
241
+ * The global value `false` is the only instance of class
242
+ * `FalseClass` and represents a logically false value in
243
+ * boolean expressions. The class provides operators allowing
244
+ * `false` to participate correctly in logical expressions.
245
+ *
246
+ */
247
+
248
+ /* 15.2.4.3.1 */
249
+ /* 15.2.6.3.1 */
250
+ /*
251
+ * call-seq:
252
+ * false & obj -> false
253
+ * nil & obj -> false
254
+ *
255
+ * And---Returns `false`. *obj* is always
256
+ * evaluated as it is the argument to a method call---there is no
257
+ * short-circuit evaluation in this case.
258
+ */
259
+
260
+ static mrb_value
261
+ false_and(mrb_state *mrb, mrb_value obj)
262
+ {
263
+ return mrb_false_value();
264
+ }
265
+
266
+ /* 15.2.4.3.2 */
267
+ /* 15.2.6.3.2 */
268
+ /*
269
+ * call-seq:
270
+ * false ^ obj -> true or false
271
+ * nil ^ obj -> true or false
272
+ *
273
+ * Exclusive Or---If *obj* is `nil` or
274
+ * `false`, returns `false`; otherwise, returns
275
+ * `true`.
276
+ *
277
+ */
278
+
279
+ static mrb_value
280
+ false_xor(mrb_state *mrb, mrb_value obj)
281
+ {
282
+ mrb_bool obj2;
283
+
284
+ mrb_get_args(mrb, "b", &obj2);
285
+ return mrb_bool_value(obj2);
286
+ }
287
+
288
+ /* 15.2.4.3.3 */
289
+ /* 15.2.6.3.4 */
290
+ /*
291
+ * call-seq:
292
+ * false | obj -> true or false
293
+ * nil | obj -> true or false
294
+ *
295
+ * Or---Returns `false` if *obj* is
296
+ * `nil` or `false`; `true` otherwise.
297
+ */
298
+
299
+ static mrb_value
300
+ false_or(mrb_state *mrb, mrb_value obj)
301
+ {
302
+ mrb_bool obj2;
303
+
304
+ mrb_get_args(mrb, "b", &obj2);
305
+ return mrb_bool_value(obj2);
306
+ }
307
+
308
+ /* 15.2.6.3.3 */
309
+ /*
310
+ * call-seq:
311
+ * false.to_s -> "false"
312
+ *
313
+ * 'nuf said...
314
+ */
315
+
316
+ static mrb_value
317
+ false_to_s(mrb_state *mrb, mrb_value obj)
318
+ {
319
+ mrb_value str = mrb_str_new_lit_frozen(mrb, "false");
320
+ RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
321
+ return str;
322
+ }
323
+
324
+ /* ---------------------------*/
325
+ static const mrb_mt_entry nil_rom_entries[] = {
326
+ MRB_MT_ENTRY(false_and, MRB_OPSYM(and), MRB_ARGS_REQ(1)), /* 15.2.4.3.1 */
327
+ MRB_MT_ENTRY(false_or, MRB_OPSYM(or), MRB_ARGS_REQ(1)), /* 15.2.4.3.2 */
328
+ MRB_MT_ENTRY(false_xor, MRB_OPSYM(xor), MRB_ARGS_REQ(1)), /* 15.2.4.3.3 */
329
+ MRB_MT_ENTRY(mrb_true, MRB_SYM_Q(nil), MRB_ARGS_NONE()), /* 15.2.4.3.4 */
330
+ MRB_MT_ENTRY(nil_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.4.3.5 */
331
+ MRB_MT_ENTRY(nil_inspect, MRB_SYM(inspect), MRB_ARGS_NONE()),
332
+ };
333
+
334
+ static const mrb_mt_entry true_rom_entries[] = {
335
+ MRB_MT_ENTRY(true_and, MRB_OPSYM(and), MRB_ARGS_REQ(1)), /* 15.2.5.3.1 */
336
+ MRB_MT_ENTRY(true_or, MRB_OPSYM(or), MRB_ARGS_REQ(1)), /* 15.2.5.3.2 */
337
+ MRB_MT_ENTRY(true_xor, MRB_OPSYM(xor), MRB_ARGS_REQ(1)), /* 15.2.5.3.3 */
338
+ MRB_MT_ENTRY(true_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.5.3.4 */
339
+ MRB_MT_ENTRY(true_to_s, MRB_SYM(inspect), MRB_ARGS_NONE()),
340
+ };
341
+
342
+ static const mrb_mt_entry false_rom_entries[] = {
343
+ MRB_MT_ENTRY(false_and, MRB_OPSYM(and), MRB_ARGS_REQ(1)), /* 15.2.4.3.1 */
344
+ MRB_MT_ENTRY(false_or, MRB_OPSYM(or), MRB_ARGS_REQ(1)), /* 15.2.4.3.2 */
345
+ MRB_MT_ENTRY(false_xor, MRB_OPSYM(xor), MRB_ARGS_REQ(1)), /* 15.2.4.3.3 */
346
+ MRB_MT_ENTRY(false_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.6.3.4 */
347
+ MRB_MT_ENTRY(false_to_s, MRB_SYM(inspect), MRB_ARGS_NONE()),
348
+ };
349
+
350
+ void
351
+ mrb_init_object(mrb_state *mrb)
352
+ {
353
+ struct RClass *n;
354
+ struct RClass *t;
355
+ struct RClass *f;
356
+
357
+ mrb->nil_class = n = mrb_define_class_id(mrb, MRB_SYM(NilClass), mrb->object_class);
358
+ MRB_SET_INSTANCE_TT(n, MRB_TT_FALSE);
359
+ mrb_undef_class_method_id(mrb, n, MRB_SYM(new));
360
+ MRB_MT_INIT_ROM(mrb, n, nil_rom_entries);
361
+
362
+ mrb->true_class = t = mrb_define_class_id(mrb, MRB_SYM(TrueClass), mrb->object_class);
363
+ MRB_SET_INSTANCE_TT(t, MRB_TT_TRUE);
364
+ mrb_undef_class_method_id(mrb, t, MRB_SYM(new));
365
+ MRB_MT_INIT_ROM(mrb, t, true_rom_entries);
366
+
367
+ mrb->false_class = f = mrb_define_class_id(mrb, MRB_SYM(FalseClass), mrb->object_class);
368
+ MRB_SET_INSTANCE_TT(f, MRB_TT_FALSE);
369
+ mrb_undef_class_method_id(mrb, f, MRB_SYM(new));
370
+ MRB_MT_INIT_ROM(mrb, f, false_rom_entries);
371
+ }
372
+
373
+ static const char*
374
+ type_name(enum mrb_vtype t)
375
+ {
376
+ switch (t) {
377
+ #define MRB_VTYPE_NAME(tt, type, name) case tt: return name;
378
+ MRB_VTYPE_FOREACH(MRB_VTYPE_NAME)
379
+ #undef MRB_VTYPE_NAME
380
+ default: return NULL;
381
+ }
382
+ }
383
+
384
+ static mrb_value
385
+ convert_type(mrb_state *mrb, mrb_value val, const char *tname, mrb_sym method, mrb_bool raise)
386
+ {
387
+ if (!mrb_respond_to(mrb, val, method)) {
388
+ if (raise) {
389
+ if (tname) mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y into %s", val, tname);
390
+ mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y", val);
391
+ }
392
+ return mrb_nil_value();
393
+ }
394
+ return mrb_funcall_argv(mrb, val, method, 0, 0);
395
+ }
396
+
397
+ /*
398
+ * Attempts to convert the mruby value `val` to the specified `type`
399
+ * by calling the given `method` (a symbol) on `val`.
400
+ *
401
+ * It first checks if `val` is already of the target `type`. If not, it
402
+ * proceeds to call the conversion `method` on `val`.
403
+ *
404
+ * If the conversion method does not return a value of the target `type`,
405
+ * a `TypeError` is raised. However, as a special case, if the target
406
+ * `type` is `MRB_TT_STRING`, and the initial conversion fails to produce
407
+ * a string, this function will then attempt to call `mrb_any_to_s` on
408
+ * the original `val` as a fallback mechanism.
409
+ *
410
+ * Returns the converted value if successful.
411
+ */
412
+ MRB_API mrb_value
413
+ mrb_type_convert(mrb_state *mrb, mrb_value val, enum mrb_vtype type, mrb_sym method)
414
+ {
415
+ if (mrb_type(val) == type) return val;
416
+
417
+ const char *tname = type_name(type);
418
+ mrb_value v = convert_type(mrb, val, tname, method, TRUE);
419
+ if (mrb_type(v) != type) {
420
+ if (type == MRB_TT_STRING) return mrb_any_to_s(mrb, val);
421
+ mrb_raisef(mrb, E_TYPE_ERROR, "%v cannot be converted to %s by #%n", val, tname, method);
422
+ }
423
+ return v;
424
+ }
425
+
426
+ /*
427
+ * Attempts to convert the mruby value `val` to the specified `type`
428
+ * by calling the given `method` (a symbol) on `val`.
429
+ *
430
+ * This function first checks if `val` is already of the target `type`.
431
+ * An exception to this initial check is if the target `type` is
432
+ * `MRB_TT_CDATA` or `MRB_TT_ISTRUCT`; in these cases, the conversion
433
+ * attempt proceeds regardless of `val`'s current type.
434
+ *
435
+ * If `val` is not already of the target `type` (or if it's `MRB_TT_CDATA`
436
+ * or `MRB_TT_ISTRUCT`), the specified `method` is called on `val` to
437
+ * perform the conversion. Unlike `mrb_type_convert`, this function
438
+ * does *not* raise an error if the conversion fails or if the returned
439
+ * value is not of the target `type`.
440
+ *
441
+ * Returns the converted value if the conversion was successful and the
442
+ * resulting value is of the target `type`. Otherwise, it returns
443
+ * `mrb_nil_value()`.
444
+ */
445
+ MRB_API mrb_value
446
+ mrb_type_convert_check(mrb_state *mrb, mrb_value val, enum mrb_vtype type, mrb_sym method)
447
+ {
448
+ if (mrb_type(val) == type && type != MRB_TT_CDATA && type != MRB_TT_ISTRUCT) return val;
449
+ mrb_value v = convert_type(mrb, val, type_name(type), method, FALSE);
450
+ if (mrb_nil_p(v) || mrb_type(v) != type) return mrb_nil_value();
451
+ return v;
452
+ }
453
+
454
+ /*
455
+ * Checks if the mruby value `x` is of the specified type `t`.
456
+ *
457
+ * If the type of `x` does not match `t`, this function raises
458
+ * a `TypeError`. The error message provides details about the
459
+ * actual type of `x` and the expected type `t`.
460
+ */
461
+ MRB_API void
462
+ mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t)
463
+ {
464
+ enum mrb_vtype xt = mrb_type(x);
465
+ const char *tname, *ename;
466
+
467
+ if (t == xt) return;
468
+
469
+ tname = type_name(t);
470
+ if (mrb_nil_p(x)) {
471
+ ename = "nil";
472
+ }
473
+ else if (mrb_integer_p(x)) {
474
+ ename = "Integer";
475
+ }
476
+ else if (mrb_symbol_p(x)) {
477
+ ename = "Symbol";
478
+ }
479
+ else if (mrb_immediate_p(x)) {
480
+ ename = RSTRING_PTR(mrb_obj_as_string(mrb, x));
481
+ }
482
+ else {
483
+ ename = mrb_obj_classname(mrb, x);
484
+ }
485
+ if (tname) {
486
+ mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s)",
487
+ ename, tname);
488
+ }
489
+ mrb_raisef(mrb, E_TYPE_ERROR, "unknown type %d (%s given)", t, ename);
490
+ }
491
+
492
+ /* 15.3.1.3.46 */
493
+ /*
494
+ * call-seq:
495
+ * obj.to_s => string
496
+ *
497
+ * Returns a string representing *obj*. The default
498
+ * `to_s` prints the object's class and an encoding of the
499
+ * object id. As a special case, the top-level object that is the
500
+ * initial execution context of Ruby programs returns "main."
501
+ */
502
+
503
+ MRB_API mrb_value
504
+ mrb_any_to_s(mrb_state *mrb, mrb_value obj)
505
+ {
506
+ mrb_value str = mrb_str_new_capa(mrb, 20);
507
+ const char *cname = mrb_obj_classname(mrb, obj);
508
+
509
+ mrb_str_cat_lit(mrb, str, "#<");
510
+ mrb_str_cat_cstr(mrb, str, cname);
511
+ if (!mrb_immediate_p(obj)) {
512
+ mrb_str_cat_lit(mrb, str, ":");
513
+ mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_ptr(obj)));
514
+ }
515
+ mrb_str_cat_lit(mrb, str, ">");
516
+
517
+ return str;
518
+ }
519
+
520
+ /*
521
+ * call-seq:
522
+ * obj.is_a?(class) => true or false
523
+ * obj.kind_of?(class) => true or false
524
+ *
525
+ * Checks if the mruby object `obj` is an instance of class `c`,
526
+ * or an instance of a class that inherits from `c`, or an instance
527
+ * of a class that includes `c` if `c` is a module.
528
+ *
529
+ * This function traverses the class hierarchy of `obj` upwards.
530
+ * It returns `TRUE` if `c` is found in the ancestry. Otherwise,
531
+ * it returns `FALSE`.
532
+ *
533
+ * If `c` is not a class or module, a `TypeError` is raised.
534
+ *
535
+ * module M; end
536
+ * class A
537
+ * include M
538
+ * end
539
+ * class B < A; end
540
+ * class C < B; end
541
+ * b = B.new
542
+ * b.instance_of? A #=> false (mrb_obj_is_instance_of)
543
+ * b.instance_of? B #=> true (mrb_obj_is_instance_of)
544
+ * b.kind_of? A #=> true
545
+ * b.kind_of? B #=> true
546
+ * b.kind_of? C #=> false
547
+ * b.kind_of? M #=> true
548
+ */
549
+ MRB_API mrb_bool
550
+ mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c)
551
+ {
552
+ struct RClass *cl = mrb_class(mrb, obj);
553
+
554
+ switch (c->tt) {
555
+ case MRB_TT_MODULE:
556
+ case MRB_TT_CLASS:
557
+ case MRB_TT_ICLASS:
558
+ case MRB_TT_SCLASS:
559
+ break;
560
+
561
+ default:
562
+ mrb_raise(mrb, E_TYPE_ERROR, "class or module required");
563
+ }
564
+
565
+ MRB_CLASS_ORIGIN(c);
566
+ while (cl) {
567
+ if (cl == c || cl->mt == c->mt)
568
+ return TRUE;
569
+ cl = cl->super;
570
+ }
571
+ return FALSE;
572
+ }
573
+
574
+ #ifdef MRB_USE_RATIONAL
575
+ // provided by mruby-rational with MRB_USE_RATIONAL
576
+ mrb_value mrb_rational_to_i(mrb_state *mrb, mrb_value rat);
577
+ mrb_value mrb_rational_to_f(mrb_state *mrb, mrb_value rat);
578
+ #endif
579
+ #ifdef MRB_USE_COMPLEX
580
+ // provided by mruby-complex with MRB_USE_COMPLEX
581
+ mrb_value mrb_complex_to_f(mrb_state *mrb, mrb_value comp);
582
+ mrb_value mrb_complex_to_i(mrb_state *mrb, mrb_value comp);
583
+ #endif
584
+
585
+ /*
586
+ * Ensures that the given mruby value `val` is an Integer.
587
+ *
588
+ * If `val` is already an `MRB_TT_INTEGER`, it is returned directly.
589
+ *
590
+ * If `val` is an `MRB_TT_FLOAT` (and `MRB_NO_FLOAT` is not defined),
591
+ * it is converted to an integer using `mrb_float_to_integer`.
592
+ *
593
+ * The function also handles conversions from other numeric types if
594
+ * the respective modules are enabled:
595
+ * - `MRB_TT_BIGINT` (if `MRB_USE_BIGINT` is defined): `val` is returned as is,
596
+ * as BigInts are considered integers.
597
+ * - `MRB_TT_RATIONAL` (if `MRB_USE_RATIONAL` is defined): Converted using
598
+ * `mrb_rational_to_i`.
599
+ * - `MRB_TT_COMPLEX` (if `MRB_USE_COMPLEX` is defined): Converted using
600
+ * `mrb_complex_to_i` (typically if the imaginary part is zero).
601
+ *
602
+ * If `val` cannot be converted to an Integer (e.g., it's a String or Array,
603
+ * or a Complex with a non-zero imaginary part), a `TypeError` is raised.
604
+ *
605
+ * Returns the (potentially converted) integer value.
606
+ */
607
+ MRB_API mrb_value
608
+ mrb_ensure_integer_type(mrb_state *mrb, mrb_value val)
609
+ {
610
+ if (!mrb_integer_p(val)) {
611
+ #ifndef MRB_NO_FLOAT
612
+ if (mrb_float_p(val)) {
613
+ return mrb_float_to_integer(mrb, val);
614
+ }
615
+ else {
616
+ switch (mrb_type(val)) {
617
+ #ifdef MRB_USE_BIGINT
618
+ case MRB_TT_BIGINT:
619
+ return val;
620
+ #endif
621
+ #ifdef MRB_USE_RATIONAL
622
+ case MRB_TT_RATIONAL:
623
+ return mrb_rational_to_i(mrb, val);
624
+ #endif
625
+ #ifdef MRB_USE_COMPLEX
626
+ case MRB_TT_COMPLEX:
627
+ return mrb_complex_to_i(mrb, val);
628
+ #endif
629
+ default:
630
+ break;
631
+ }
632
+ }
633
+ #endif
634
+ mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Integer", val);
635
+ }
636
+ return val;
637
+ }
638
+
639
+ /*
640
+ * Ensures that the given mruby value `val` is a C `mrb_int` (fixed-size integer).
641
+ *
642
+ * This function first calls `mrb_ensure_integer_type` to convert `val`
643
+ * to a generic mruby Integer if it's not already. This step might result
644
+ * in `val` being a Fixnum or a BigInt (if `MRB_USE_BIGINT` is enabled).
645
+ *
646
+ * If `mrb_ensure_integer_type` returns a BigInt (and `MRB_USE_BIGINT`
647
+ * is defined), this function then attempts to convert the BigInt to a C
648
+ * `mrb_int` using `mrb_bint_as_int`. This conversion may involve truncation
649
+ * if the BigInt's value is outside the representable range of `mrb_int`,
650
+ * or it could raise an error (e.g., RangeError) depending on the
651
+ * `mrb_bint_as_int` implementation if the value is too large to truncate.
652
+ *
653
+ * If `val` is already a standard Integer (Fixnum) after the call to
654
+ * `mrb_ensure_integer_type`, it is returned directly as it fits `mrb_int`.
655
+ *
656
+ * Returns an `mrb_value` that represents a C `mrb_int`.
657
+ */
658
+ MRB_API mrb_value
659
+ mrb_ensure_int_type(mrb_state *mrb, mrb_value val)
660
+ {
661
+ val = mrb_ensure_integer_type(mrb, val);
662
+ #ifdef MRB_USE_BIGINT
663
+ if (mrb_bigint_p(val)) {
664
+ return mrb_int_value(mrb, mrb_bint_as_int(mrb, val));
665
+ }
666
+ #endif
667
+ return val;
668
+ }
669
+
670
+ #ifndef MRB_NO_FLOAT
671
+ /*
672
+ * Ensures that the given mruby value `val` is a Float.
673
+ *
674
+ * If `val` is `nil`, this function raises a `TypeError`.
675
+ *
676
+ * If `val` is an `MRB_TT_INTEGER`, it is converted to an `mrb_float`.
677
+ * If `val` is already an `MRB_TT_FLOAT`, it is returned directly.
678
+ *
679
+ * The function also handles conversions from other numeric types if the
680
+ * respective mruby modules are enabled:
681
+ * - `MRB_TT_RATIONAL` (if `MRB_USE_RATIONAL` is defined): Converted to Float
682
+ * using `mrb_rational_to_f`.
683
+ * - `MRB_TT_COMPLEX` (if `MRB_USE_COMPLEX` is defined): Converted to Float
684
+ * using `mrb_complex_to_f` (typically requires the imaginary part to be zero).
685
+ * - `MRB_TT_BIGINT` (if `MRB_USE_BIGINT` is defined): Converted to Float
686
+ * using `mrb_bint_as_float`.
687
+ *
688
+ * If `val` cannot be converted to a Float (e.g., it's a String, Array, or
689
+ * an incompatible Complex number), a `TypeError` is raised.
690
+ *
691
+ * Returns an `mrb_value` representing an `mrb_float`.
692
+ */
693
+ MRB_API mrb_value
694
+ mrb_ensure_float_type(mrb_state *mrb, mrb_value val)
695
+ {
696
+ if (mrb_nil_p(val)) {
697
+ mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Float");
698
+ }
699
+ switch (mrb_type(val)) {
700
+ case MRB_TT_INTEGER:
701
+ return mrb_float_value(mrb, (mrb_float)mrb_integer(val));
702
+
703
+ case MRB_TT_FLOAT:
704
+ return val;
705
+
706
+ #ifdef MRB_USE_RATIONAL
707
+ case MRB_TT_RATIONAL:
708
+ return mrb_rational_to_f(mrb, val);
709
+ #endif
710
+
711
+ #ifdef MRB_USE_COMPLEX
712
+ case MRB_TT_COMPLEX:
713
+ return mrb_complex_to_f(mrb, val);
714
+ #endif
715
+
716
+ #ifdef MRB_USE_BIGINT
717
+ case MRB_TT_BIGINT:
718
+ return mrb_float_value(mrb, mrb_bint_as_float(mrb, val));
719
+ #endif
720
+
721
+ default:
722
+ mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Float", val);
723
+ /* not reached */
724
+ return val;
725
+ }
726
+ }
727
+ #endif
728
+
729
+ /*
730
+ * Ensures that the given mruby value `str` is a String.
731
+ *
732
+ * If `str` is not of type `MRB_TT_STRING`, this function raises
733
+ * a `TypeError`.
734
+ * Otherwise, `str` itself is returned.
735
+ */
736
+ MRB_API mrb_value
737
+ mrb_ensure_string_type(mrb_state *mrb, mrb_value str)
738
+ {
739
+ if (!mrb_string_p(str)) {
740
+ mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to String", str);
741
+ }
742
+ return str;
743
+ }
744
+
745
+ /*
746
+ * Checks if the given mruby value `str` is a String.
747
+ *
748
+ * If `str` is of type `MRB_TT_STRING`, this function returns `str`.
749
+ * Otherwise (if `str` is not a String), it returns `mrb_nil_value()`
750
+ * without raising an error. This allows for type checking without
751
+ * forcing error handling.
752
+ */
753
+ MRB_API mrb_value
754
+ mrb_check_string_type(mrb_state *mrb, mrb_value str)
755
+ {
756
+ if (!mrb_string_p(str)) return mrb_nil_value();
757
+ return str;
758
+ }
759
+
760
+ /*
761
+ * Ensures that the given mruby value `ary` is an Array.
762
+ *
763
+ * If `ary` is not of type `MRB_TT_ARRAY`, this function raises
764
+ * a `TypeError`.
765
+ * Otherwise, `ary` itself is returned.
766
+ */
767
+ MRB_API mrb_value
768
+ mrb_ensure_array_type(mrb_state *mrb, mrb_value ary)
769
+ {
770
+ if (!mrb_array_p(ary)) {
771
+ mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Array", ary);
772
+ }
773
+ return ary;
774
+ }
775
+
776
+ /*
777
+ * Checks if the given mruby value `ary` is an Array.
778
+ *
779
+ * If `ary` is of type `MRB_TT_ARRAY`, this function returns `ary`.
780
+ * Otherwise (if `ary` is not an Array), it returns `mrb_nil_value()`
781
+ * without raising an error. This allows for type checking without
782
+ * forcing error handling.
783
+ */
784
+ MRB_API mrb_value
785
+ mrb_check_array_type(mrb_state *mrb, mrb_value ary)
786
+ {
787
+ if (!mrb_array_p(ary)) return mrb_nil_value();
788
+ return ary;
789
+ }
790
+
791
+ /*
792
+ * Ensures that the given mruby value `hash` is a Hash.
793
+ *
794
+ * If `hash` is not of type `MRB_TT_HASH`, this function raises
795
+ * a `TypeError`.
796
+ * Otherwise, `hash` itself is returned.
797
+ */
798
+ MRB_API mrb_value
799
+ mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash)
800
+ {
801
+ if (!mrb_hash_p(hash)) {
802
+ mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Hash", hash);
803
+ }
804
+ return hash;
805
+ }
806
+
807
+ /*
808
+ * Checks if the given mruby value `hash` is a Hash.
809
+ *
810
+ * If `hash` is of type `MRB_TT_HASH`, this function returns `hash`.
811
+ * Otherwise (if `hash` is not a Hash), it returns `mrb_nil_value()`
812
+ * without raising an error. This allows for type checking without
813
+ * forcing error handling.
814
+ */
815
+ MRB_API mrb_value
816
+ mrb_check_hash_type(mrb_state *mrb, mrb_value hash)
817
+ {
818
+ if (!mrb_hash_p(hash)) return mrb_nil_value();
819
+ return hash;
820
+ }
821
+
822
+ /*
823
+ * Returns a human-readable string representation of the mruby object `obj`.
824
+ *
825
+ * This function calls the `inspect` method (identified by `MRB_SYM(inspect)`)
826
+ * on the given `obj`. The `inspect` method is expected to return a string
827
+ * that is suitable for debugging and inspection.
828
+ *
829
+ * If the object's `inspect` method does not return a String value (e.g., it
830
+ * returns `nil` or another type, or if the class doesn't define `inspect`
831
+ * appropriately), this function falls back to calling `mrb_obj_as_string`.
832
+ * `mrb_obj_as_string` typically provides a basic string representation,
833
+ * such as "#<ClassName:0xPointer>" if `inspect` is unavailable or
834
+ * misbehaves by not returning a string.
835
+ *
836
+ * The function ultimately returns the resulting string `mrb_value`.
837
+ */
838
+ MRB_API mrb_value
839
+ mrb_inspect(mrb_state *mrb, mrb_value obj)
840
+ {
841
+ mrb_value v = mrb_funcall_argv(mrb, obj, MRB_SYM(inspect), 0, NULL);
842
+ if (!mrb_string_p(v)) {
843
+ v = mrb_obj_as_string(mrb, obj);
844
+ }
845
+ return v;
846
+ }
847
+
848
+ /*
849
+ * Checks if two mruby values, `obj1` and `obj2`, are equal using
850
+ * `eql?` semantics.
851
+ *
852
+ * This function first performs an identity check on `obj1` and `obj2`
853
+ * using `mrb_obj_eq`. If they are identical (i.e., the same object),
854
+ * it returns `TRUE` immediately.
855
+ *
856
+ * Otherwise, it calls the `eql?` method on `obj1`, passing `obj2` as
857
+ * an argument. The symbol for the `eql?` method is `MRB_SYM_Q(eql)`.
858
+ *
859
+ * The function returns `TRUE` if the `eql?` method call returns a truthy
860
+ * value (any value other than `false` or `nil`). Otherwise, it returns
861
+ * `FALSE`. This is determined by `mrb_test` on the result of the
862
+ * method call.
863
+ */
864
+ MRB_API mrb_bool
865
+ mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
866
+ {
867
+ if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
868
+ return mrb_test(mrb_funcall_argv(mrb, obj1, MRB_SYM_Q(eql), 1, &obj2));
869
+ }
870
+
871
+ /*
872
+ * Returns the receiver object itself.
873
+ *
874
+ * This function simply returns the mruby value `self` that it was passed.
875
+ * It corresponds to the `Object#itself` method in Ruby, which is useful
876
+ * in some functional programming patterns or for obtaining the object
877
+ * itself in a chain of method calls.
878
+ */
879
+ MRB_API mrb_value
880
+ mrb_obj_itself(mrb_state *mrb, mrb_value self)
881
+ {
882
+ return self;
883
+ }