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,937 @@
1
+ /*
2
+ ** error.c - Exception class
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #include <errno.h>
8
+ #include <stdlib.h>
9
+ #include <mruby.h>
10
+ #include <mruby/array.h>
11
+ #include <mruby/irep.h>
12
+ #include <mruby/proc.h>
13
+ #include <mruby/string.h>
14
+ #include <mruby/variable.h>
15
+ #include <mruby/error.h>
16
+ #include <mruby/class.h>
17
+ #include <mruby/throw.h>
18
+ #include <mruby/internal.h>
19
+ #include <mruby/presym.h>
20
+
21
+ void
22
+ mrb_exc_mesg_set(mrb_state *mrb, struct RException *exc, mrb_value mesg)
23
+ {
24
+ if (!mrb_string_p(mesg)) {
25
+ mesg = mrb_obj_as_string(mrb, mesg);
26
+ }
27
+ exc->mesg = mrb_basic_ptr(mesg);
28
+ mrb_field_write_barrier_value(mrb, (struct RBasic*)exc, mesg);
29
+ }
30
+
31
+ mrb_value
32
+ mrb_exc_mesg_get(mrb_state *mrb, struct RException *exc)
33
+ {
34
+ if (exc->mesg == NULL) return mrb_nil_value();
35
+ return mrb_obj_value(exc->mesg);
36
+ }
37
+
38
+ MRB_API mrb_value
39
+ mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str)
40
+ {
41
+ mrb_ensure_string_type(mrb, str);
42
+
43
+ struct RException *e = MRB_OBJ_ALLOC(mrb, MRB_TT_EXCEPTION, c);
44
+ mrb_value exc = mrb_obj_value(e);
45
+ mrb_exc_mesg_set(mrb, e, str);
46
+ return exc;
47
+ }
48
+
49
+ MRB_API mrb_value
50
+ mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, mrb_int len)
51
+ {
52
+ return mrb_exc_new_str(mrb, c, mrb_str_new(mrb, ptr, len));
53
+ }
54
+
55
+ /*
56
+ * call-seq:
57
+ * Exception.new(msg = nil) -> exception
58
+ *
59
+ * Construct a new Exception object, optionally passing in
60
+ * a message.
61
+ */
62
+
63
+ static mrb_value
64
+ exc_initialize(mrb_state *mrb, mrb_value exc)
65
+ {
66
+ mrb_value mesg;
67
+
68
+ if (mrb_get_args(mrb, "|o", &mesg) == 1) {
69
+ mrb_exc_mesg_set(mrb, mrb_exc_ptr(exc), mesg);
70
+ }
71
+ return exc;
72
+ }
73
+
74
+ /*
75
+ * Document-method: exception
76
+ *
77
+ * call-seq:
78
+ * exc.exception(string) -> an_exception or exc
79
+ *
80
+ * With no argument, or if the argument is the same as the receiver,
81
+ * return the receiver. Otherwise, create a new
82
+ * exception object of the same class as the receiver, but with a
83
+ * message equal to `string`.
84
+ *
85
+ */
86
+
87
+ static mrb_value
88
+ exc_exception(mrb_state *mrb, mrb_value self)
89
+ {
90
+ mrb_value a;
91
+ mrb_int argc = mrb_get_args(mrb, "|o", &a);
92
+
93
+ if (argc == 0) return self;
94
+ if (mrb_obj_equal(mrb, self, a)) return self;
95
+
96
+ mrb_value exc = mrb_obj_clone(mrb, self);
97
+ mrb_exc_mesg_set(mrb, mrb_exc_ptr(exc), a);
98
+
99
+ return exc;
100
+ }
101
+
102
+ /*
103
+ * call-seq:
104
+ * exception.to_s -> string
105
+ *
106
+ * Returns exception's message (or the name of the exception if
107
+ * no message is set).
108
+ */
109
+
110
+ static mrb_value
111
+ exc_to_s(mrb_state *mrb, mrb_value exc)
112
+ {
113
+ mrb_value mesg = mrb_exc_mesg_get(mrb, mrb_exc_ptr(exc));
114
+
115
+ if (!mrb_string_p(mesg)) {
116
+ return mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc));
117
+ }
118
+ struct RObject *p = mrb_obj_ptr(mesg);
119
+ if (!p->c) {
120
+ p->c = mrb->string_class;
121
+ }
122
+ return mesg;
123
+ }
124
+
125
+ /*
126
+ * call-seq:
127
+ * exception.inspect -> string
128
+ *
129
+ * Returns this exception's filename, line number,
130
+ * message and class name.
131
+ * If filename or line number is not set,
132
+ * returns message and class name.
133
+ */
134
+
135
+ mrb_value
136
+ mrb_exc_inspect(mrb_state *mrb, mrb_value exc)
137
+ {
138
+ mrb_value cname = mrb_mod_to_s(mrb, mrb_obj_value(mrb_obj_class(mrb, exc)));
139
+ mrb_value mesg = mrb_exc_mesg_get(mrb, mrb_exc_ptr(exc)); /* string or nil */
140
+ return (mrb_nil_p(mesg)||RSTRING_LEN(mesg)==0) ? cname : mrb_format(mrb, "#<%v: %v>", cname, mesg);
141
+ }
142
+
143
+ mrb_value
144
+ mrb_exc_get_output(mrb_state *mrb, struct RObject *exc)
145
+ {
146
+ mrb_value cname = mrb_mod_to_s(mrb, mrb_obj_value(mrb_class_real(exc->c)));
147
+ mrb_value mesg = mrb_exc_mesg_get(mrb, (struct RException*)exc); /* string or nil */
148
+ return (mrb_nil_p(mesg)||RSTRING_LEN(mesg)==0) ? cname : mrb_format(mrb, "%v (%v)", mesg, cname);
149
+ }
150
+
151
+ void mrb_keep_backtrace(mrb_state *mrb, mrb_value exc);
152
+
153
+ static void
154
+ set_backtrace(mrb_state *mrb, mrb_value exc, mrb_value backtrace)
155
+ {
156
+ if (!mrb_array_p(backtrace)) {
157
+ type_err:
158
+ mrb_raise(mrb, E_TYPE_ERROR, "backtrace must be Array of String");
159
+ }
160
+ else {
161
+ const mrb_value *p = RARRAY_PTR(backtrace);
162
+ const mrb_value *pend = p + RARRAY_LEN(backtrace);
163
+
164
+ while (p < pend) {
165
+ if (!mrb_string_p(*p)) goto type_err;
166
+ p++;
167
+ }
168
+ }
169
+ mrb_exc_ptr(exc)->backtrace = mrb_basic_ptr(backtrace);
170
+ mrb_field_write_barrier_value(mrb, mrb_basic_ptr(exc), backtrace);
171
+ }
172
+
173
+ static mrb_value
174
+ exc_set_backtrace(mrb_state *mrb, mrb_value exc)
175
+ {
176
+ mrb_value backtrace = mrb_get_arg1(mrb);
177
+
178
+ set_backtrace(mrb, exc, backtrace);
179
+ return backtrace;
180
+ }
181
+
182
+ void
183
+ mrb_exc_set(mrb_state *mrb, mrb_value exc)
184
+ {
185
+ if (mrb_nil_p(exc)) {
186
+ mrb->exc = 0;
187
+ }
188
+ else {
189
+ mrb->exc = mrb_obj_ptr(exc);
190
+ if (mrb->gc.arena_idx > 0 &&
191
+ (struct RBasic*)mrb->exc == mrb->gc.arena[mrb->gc.arena_idx-1]) {
192
+ mrb->gc.arena_idx--;
193
+ }
194
+ if (!mrb->gc.out_of_memory && !mrb_frozen_p(mrb->exc)) {
195
+ mrb_keep_backtrace(mrb, exc);
196
+ }
197
+ }
198
+ }
199
+
200
+ static mrb_noreturn void
201
+ exc_throw(mrb_state *mrb, mrb_value exc)
202
+ {
203
+ if (!mrb->jmp) {
204
+ mrb_print_error(mrb);
205
+ abort();
206
+ }
207
+ MRB_THROW(mrb->jmp);
208
+ }
209
+
210
+ /*
211
+ * Raises the given exception object.
212
+ *
213
+ * This function sets the provided exception object as the current
214
+ * exception in the mruby state and then triggers the exception
215
+ * handling mechanism (longjmp).
216
+ *
217
+ * If the provided object is a 'break' object, it's handled specially.
218
+ * If it's not an exception object, a TypeError is raised.
219
+ *
220
+ * mrb: The mruby state.
221
+ * exc: The exception object to raise.
222
+ */
223
+ MRB_API mrb_noreturn void
224
+ mrb_exc_raise(mrb_state *mrb, mrb_value exc)
225
+ {
226
+ if (mrb_break_p(exc)) {
227
+ mrb->exc = mrb_obj_ptr(exc);
228
+ }
229
+ else {
230
+ if (mrb_type(exc) != MRB_TT_EXCEPTION) {
231
+ mrb_raise(mrb, E_TYPE_ERROR, "exception object expected");
232
+ }
233
+ mrb_exc_set(mrb, exc);
234
+ }
235
+ exc_throw(mrb, exc);
236
+ }
237
+
238
+ /*
239
+ * Creates a new exception of class `c` with the message `msg` and raises it.
240
+ *
241
+ * This is a convenience function that combines creating an exception
242
+ * from a C string and then raising it.
243
+ *
244
+ * mrb: The mruby state.
245
+ * c: The exception class to instantiate.
246
+ * msg: The C string message for the exception.
247
+ */
248
+ MRB_API mrb_noreturn void
249
+ mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg)
250
+ {
251
+ mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mrb_str_new_cstr(mrb, msg)));
252
+ }
253
+
254
+ /*
255
+ * Formats arguments according to a format string, similar to vsprintf.
256
+ * This function is the core of mruby's string formatting capabilities.
257
+ * It takes a format string and a va_list of arguments and returns a
258
+ * new mruby string with the formatted result.
259
+ *
260
+ * The format string supports various specifiers to control how arguments
261
+ * are converted to strings.
262
+ *
263
+ * Format Sequence Syntax:
264
+ * %[modifier]specifier
265
+ *
266
+ * Modifier:
267
+ * ! : Use the 'inspect' method for conversion instead of 'to_s'.
268
+ *
269
+ * Specifiers:
270
+ * c : char
271
+ * d : int (decimal)
272
+ * i : mrb_int (decimal)
273
+ * f : mrb_float
274
+ * l : char* and size_t (string with length)
275
+ * n : mrb_sym (symbol name)
276
+ * s : char* (NUL-terminated C string)
277
+ * t : mrb_value (type/class of the object)
278
+ * v,S: mrb_value (converted using to_s or inspect based on '!')
279
+ * C : struct RClass* (class name)
280
+ * T : mrb_value (real type/class of the object)
281
+ * Y : mrb_value (uses 'inspect' if true, false, or nil, otherwise same as 'T')
282
+ * % : Literal '%' character (no argument consumed)
283
+ *
284
+ * mrb: The mruby state.
285
+ * format: The format string.
286
+ * ap: The va_list of arguments.
287
+ *
288
+ * Returns a new mrb_value string containing the formatted output.
289
+ * Raises ArgumentError if the format string is malformed.
290
+ */
291
+ MRB_API mrb_value
292
+ mrb_vformat(mrb_state *mrb, const char *format, va_list ap)
293
+ {
294
+ const char *chars, *p = format, *b = format, *e;
295
+ char ch;
296
+ size_t len;
297
+ mrb_int i;
298
+ struct RClass *cls;
299
+ mrb_bool inspect = FALSE;
300
+ mrb_value result = mrb_str_new_capa(mrb, 128), obj, str;
301
+ int ai = mrb_gc_arena_save(mrb);
302
+
303
+ while (*p) {
304
+ const char c = *p++;
305
+ e = p;
306
+ if (c == '%') {
307
+ if (*p == '!') {
308
+ inspect = TRUE;
309
+ p++;
310
+ }
311
+ if (!*p) break;
312
+ switch (*p) {
313
+ case 'c':
314
+ ch = (char)va_arg(ap, int);
315
+ chars = &ch;
316
+ len = 1;
317
+ goto L_cat;
318
+ case 'd': case 'i':
319
+ #if MRB_INT_MAX < INT_MAX
320
+ i = (mrb_int)va_arg(ap, int);
321
+ #else
322
+ i = *p == 'd' ? (mrb_int)va_arg(ap, int) : va_arg(ap, mrb_int);
323
+ #endif
324
+ obj = mrb_int_value(mrb, i);
325
+ goto L_cat_obj;
326
+ #ifndef MRB_NO_FLOAT
327
+ case 'f':
328
+ obj = mrb_float_value(mrb, (mrb_float)va_arg(ap, double));
329
+ goto L_cat_obj;
330
+ #endif
331
+ case 'l':
332
+ chars = va_arg(ap, char*);
333
+ len = va_arg(ap, size_t);
334
+ L_cat:
335
+ if (inspect) {
336
+ obj = mrb_str_new(mrb, chars, len);
337
+ goto L_cat_obj;
338
+ }
339
+ L_cat_plain:
340
+ mrb_str_cat(mrb, result, b, e - b - 1);
341
+ mrb_str_cat(mrb, result, chars, len);
342
+ b = ++p;
343
+ mrb_gc_arena_restore(mrb, ai);
344
+ break;
345
+ case 'n':
346
+ #if UINT32_MAX < INT_MAX
347
+ obj = mrb_symbol_value((mrb_sym)va_arg(ap, int));
348
+ #else
349
+ obj = mrb_symbol_value(va_arg(ap, mrb_sym));
350
+ #endif
351
+ goto L_cat_obj;
352
+ case 's':
353
+ chars = va_arg(ap, char*);
354
+ if (chars == NULL) chars = "(null)";
355
+ len = strlen(chars);
356
+ goto L_cat;
357
+ case 't':
358
+ cls = mrb_class(mrb, va_arg(ap, mrb_value));
359
+ goto L_cat_class;
360
+ case 'v': case 'S':
361
+ obj = va_arg(ap, mrb_value);
362
+ L_cat_obj:
363
+ str = (inspect ? mrb_inspect : mrb_obj_as_string)(mrb, obj);
364
+ if (mrb_type(str) != MRB_TT_STRING) {
365
+ chars = "void (no string conversion)";
366
+ len = strlen(chars);
367
+ }
368
+ else {
369
+ chars = RSTRING_PTR(str);
370
+ len = RSTRING_LEN(str);
371
+ }
372
+ goto L_cat_plain;
373
+ case 'C':
374
+ cls = va_arg(ap, struct RClass*);
375
+ L_cat_class:
376
+ obj = mrb_obj_value(cls);
377
+ goto L_cat_obj;
378
+ case 'T':
379
+ obj = va_arg(ap, mrb_value);
380
+ L_cat_real_class_of:
381
+ cls = mrb_obj_class(mrb, obj);
382
+ goto L_cat_class;
383
+ case 'Y':
384
+ obj = va_arg(ap, mrb_value);
385
+ if (!mrb_test(obj) || mrb_true_p(obj)) {
386
+ inspect = TRUE;
387
+ goto L_cat_obj;
388
+ }
389
+ else {
390
+ goto L_cat_real_class_of;
391
+ }
392
+ case '%':
393
+ L_cat_current:
394
+ chars = p;
395
+ len = 1;
396
+ goto L_cat_plain;
397
+ default:
398
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "malformed format string - %%%c", *p);
399
+ }
400
+ }
401
+ else if (c == '\\') {
402
+ if (!*p) break;
403
+ goto L_cat_current;
404
+
405
+ }
406
+ }
407
+
408
+ mrb_str_cat(mrb, result, b, p - b);
409
+ return result;
410
+ }
411
+
412
+ /*
413
+ * Formats arguments according to a format string, similar to sprintf.
414
+ *
415
+ * This function takes a format string and a variable number of arguments,
416
+ * then calls mrb_vformat to perform the actual formatting.
417
+ * See mrb_vformat for details on the format string specifiers.
418
+ *
419
+ * mrb: The mruby state.
420
+ * format: The format string.
421
+ * ...: Variable arguments to be formatted.
422
+ *
423
+ * Returns a new mrb_value string containing the formatted output.
424
+ */
425
+ MRB_API mrb_value
426
+ mrb_format(mrb_state *mrb, const char *format, ...)
427
+ {
428
+ va_list ap;
429
+
430
+ va_start(ap, format);
431
+
432
+ mrb_value str = mrb_vformat(mrb, format, ap);
433
+ va_end(ap);
434
+
435
+ return str;
436
+ }
437
+
438
+ static mrb_value
439
+ error_va(mrb_state *mrb, struct RClass *c, const char *fmt, va_list ap)
440
+ {
441
+ return mrb_exc_new_str(mrb, c, mrb_vformat(mrb, fmt, ap));
442
+ }
443
+
444
+ /*
445
+ * Creates a new exception of class `c` with a formatted message and raises it.
446
+ *
447
+ * This function formats a message string using `fmt` and the subsequent
448
+ * variable arguments, then creates an exception of class `c` with this
449
+ * message, and finally raises the exception.
450
+ * See mrb_vformat for details on the format string specifiers.
451
+ *
452
+ * mrb: The mruby state.
453
+ * c: The exception class to instantiate.
454
+ * fmt: The format string for the exception message.
455
+ * ...: Variable arguments for the format string.
456
+ */
457
+ MRB_API mrb_noreturn void
458
+ mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
459
+ {
460
+ va_list ap;
461
+
462
+ va_start(ap, fmt);
463
+
464
+ mrb_value exc = error_va(mrb, c, fmt, ap);
465
+ va_end(ap);
466
+
467
+ mrb_exc_raise(mrb, exc);
468
+ }
469
+
470
+ /*
471
+ * Raises a NameError exception with a formatted message.
472
+ *
473
+ * This function creates a NameError exception. The message is generated
474
+ * from `fmt` and the variable arguments. The symbol `id` (e.g., the name
475
+ * of a missing constant or variable) is associated with the exception object
476
+ * via an instance variable named 'name'.
477
+ * See mrb_vformat for details on the format string specifiers.
478
+ *
479
+ * mrb: The mruby state.
480
+ * id: The symbol representing the name that caused the error.
481
+ * fmt: The format string for the exception message.
482
+ * ...: Variable arguments for the format string.
483
+ */
484
+ MRB_API mrb_noreturn void
485
+ mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
486
+ {
487
+ va_list ap;
488
+
489
+ va_start(ap, fmt);
490
+
491
+ mrb_value exc = error_va(mrb, E_NAME_ERROR, fmt, ap);
492
+ va_end(ap);
493
+ mrb_iv_set(mrb, exc, MRB_IVSYM(name), mrb_symbol_value(id));
494
+ mrb_exc_raise(mrb, exc);
495
+ }
496
+
497
+ /*
498
+ * Prints a warning message to stderr.
499
+ *
500
+ * The message is formatted using `fmt` and the subsequent variable arguments.
501
+ * The output is prefixed with "warning: " and followed by a newline.
502
+ * This function does nothing if MRB_NO_STDIO is defined.
503
+ * See mrb_vformat for details on the format string specifiers.
504
+ *
505
+ * mrb: The mruby state.
506
+ * fmt: The format string for the warning message.
507
+ * ...: Variable arguments for the format string.
508
+ */
509
+ MRB_API void
510
+ mrb_warn(mrb_state *mrb, const char *fmt, ...)
511
+ {
512
+ #ifndef MRB_NO_STDIO
513
+ va_list ap;
514
+
515
+ va_start(ap, fmt);
516
+
517
+ mrb_value str = mrb_vformat(mrb, fmt, ap);
518
+ fputs("warning: ", stderr);
519
+ fwrite(RSTRING_PTR(str), RSTRING_LEN(str), 1, stderr);
520
+ putc('\n', stderr);
521
+ va_end(ap);
522
+ #endif
523
+ }
524
+
525
+ /*
526
+ * Reports an internal mruby bug, prints a message to stderr, and terminates the program.
527
+ *
528
+ * This function is called when an unexpected internal error occurs within mruby.
529
+ * It prints the given message prefixed with "bug: " to stderr and then
530
+ * calls exit(EXIT_FAILURE).
531
+ * If MRB_NO_STDIO is defined, the message is not printed, but the program still exits.
532
+ *
533
+ * mrb: The mruby state (currently unused in the function body but part of the API).
534
+ * mesg: The C string message describing the bug.
535
+ */
536
+ MRB_API mrb_noreturn void
537
+ mrb_bug(mrb_state *mrb, const char *mesg)
538
+ {
539
+ #ifndef MRB_NO_STDIO
540
+ fputs("bug: ", stderr);
541
+ fputs(mesg, stderr);
542
+ fputs("\n", stderr);
543
+ #endif
544
+ exit(EXIT_FAILURE);
545
+ }
546
+
547
+ mrb_value
548
+ mrb_make_exception(mrb_state *mrb, mrb_value exc, mrb_value mesg)
549
+ {
550
+ mrb_int n = 1;
551
+
552
+ if (mrb_nil_p(mesg)) {
553
+ n = 0;
554
+ }
555
+ if (mrb_class_p(exc)) {
556
+ exc = mrb_funcall_argv(mrb, exc, MRB_SYM(new), n, &mesg);
557
+ }
558
+ else if (mrb_exception_p(exc)) {
559
+ if (n > 0) {
560
+ exc = mrb_obj_clone(mrb, exc);
561
+ mrb_exc_mesg_set(mrb, mrb_exc_ptr(exc), mesg);
562
+ }
563
+ }
564
+ else {
565
+ mrb_raise(mrb, E_TYPE_ERROR, "exception class/object expected");
566
+ }
567
+ if (mrb_type(exc) != MRB_TT_EXCEPTION) {
568
+ mrb_raise(mrb, E_EXCEPTION, "exception object expected");
569
+ }
570
+ return exc;
571
+ }
572
+
573
+ /*
574
+ * Raises a SystemCallError if available, otherwise a RuntimeError,
575
+ * based on the current `errno` value.
576
+ *
577
+ * If the SystemCallError class is defined, this function attempts to call
578
+ * its `_sys_fail` method with the current `errno` and an optional
579
+ * message. This typically results in a SystemCallError being raised.
580
+ *
581
+ * If SystemCallError is not defined, or if the call to `_sys_fail`
582
+ * itself fails (which shouldn't happen in normal circumstances but leads
583
+ * to mrb_raise), it falls back to raising a RuntimeError with the
584
+ * given message (or a default message if `mesg` is NULL, though the
585
+ * current implementation would pass NULL to mrb_raise which might be
586
+ * an issue).
587
+ *
588
+ * mrb: The mruby state.
589
+ * mesg: An optional C string message to append to the error. If NULL,
590
+ * a default message or no message might be used depending on the
591
+ * error path.
592
+ */
593
+ MRB_API mrb_noreturn void
594
+ mrb_sys_fail(mrb_state *mrb, const char *mesg)
595
+ {
596
+ if (mrb_class_defined_id(mrb, MRB_SYM(SystemCallError))) {
597
+ struct RClass *sce = mrb_class_get_id(mrb, MRB_SYM(SystemCallError));
598
+ mrb_int no = (mrb_int)errno;
599
+ if (mesg != NULL) {
600
+ mrb_funcall_id(mrb, mrb_obj_value(sce), MRB_SYM(_sys_fail), 2, mrb_fixnum_value(no), mrb_str_new_cstr(mrb, mesg));
601
+ }
602
+ else {
603
+ mrb_funcall_id(mrb, mrb_obj_value(sce), MRB_SYM(_sys_fail), 1, mrb_fixnum_value(no));
604
+ }
605
+ }
606
+
607
+ mrb_raise(mrb, E_RUNTIME_ERROR, mesg);
608
+ }
609
+
610
+ /*
611
+ * Raises a NoMethodError exception with a formatted message.
612
+ *
613
+ * This function creates a NoMethodError. The message is generated from
614
+ * `fmt` and the variable arguments. The symbol `id` (the name of the
615
+ * missing method) and `args` (the arguments passed to the method)
616
+ * are associated with the exception object via instance variables
617
+ * named 'name' and 'args', respectively.
618
+ * See mrb_vformat for details on the format string specifiers.
619
+ *
620
+ * mrb: The mruby state.
621
+ * id: The symbol representing the name of the undefined method.
622
+ * args: The arguments that were passed to the method call.
623
+ * fmt: The format string for the exception message.
624
+ * ...: Variable arguments for the format string.
625
+ */
626
+ MRB_API mrb_noreturn void
627
+ mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_value args, char const* fmt, ...)
628
+ {
629
+ va_list ap;
630
+
631
+ va_start(ap, fmt);
632
+
633
+ mrb_value exc = error_va(mrb, E_NOMETHOD_ERROR, fmt, ap);
634
+ va_end(ap);
635
+ mrb_iv_set(mrb, exc, MRB_IVSYM(name), mrb_symbol_value(id));
636
+ mrb_iv_set(mrb, exc, MRB_IVSYM(args), args);
637
+ mrb_exc_raise(mrb, exc);
638
+ }
639
+
640
+ static mrb_noreturn void
641
+ frozen_error(mrb_state *mrb, mrb_value v)
642
+ {
643
+ mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %T", v);
644
+ }
645
+
646
+ /*
647
+ * Raises a FrozenError for the given frozen object.
648
+ *
649
+ * This function is called when an attempt is made to modify an object
650
+ * that has been frozen. It constructs and raises a FrozenError,
651
+ * indicating the specific object that could not be modified.
652
+ *
653
+ * mrb: The mruby state.
654
+ * frozen_obj: A pointer to the RBasic structure of the frozen object.
655
+ */
656
+ MRB_API mrb_noreturn void
657
+ mrb_frozen_error(mrb_state *mrb, void *frozen_obj)
658
+ {
659
+ frozen_error(mrb, mrb_obj_value(frozen_obj));
660
+ }
661
+
662
+ /*
663
+ * Checks if the given object is frozen. If it is, raises a FrozenError.
664
+ *
665
+ * This utility function is used before attempting an operation that
666
+ * would modify an object, to ensure that the operation is allowed.
667
+ *
668
+ * mrb: The mruby state.
669
+ * o: A pointer to the RBasic structure of the object to check.
670
+ */
671
+ MRB_API void
672
+ mrb_check_frozen(mrb_state *mrb, void *o)
673
+ {
674
+ if (mrb_frozen_p((struct RBasic*)o)) {
675
+ mrb_frozen_error(mrb, o);
676
+ }
677
+ }
678
+
679
+ /*
680
+ * Checks if the given mrb_value refers to a frozen object.
681
+ * If it is frozen, or if it's an immediate value (which are implicitly
682
+ * unmodifiable in a way that would trigger a FrozenError for heap objects),
683
+ * this function raises a FrozenError.
684
+ *
685
+ * Note: The check `mrb_immediate_p(v)` combined with `frozen_error`
686
+ * might be misleading. Immediate values are not "frozen" in the same
687
+ * sense as heap objects. This function effectively raises a FrozenError
688
+ * if an attempt is made to modify an immediate value or a
689
+ * heap-allocated object that is explicitly frozen.
690
+ *
691
+ * mrb: The mruby state.
692
+ * v: The mrb_value to check.
693
+ */
694
+ MRB_API void
695
+ mrb_check_frozen_value(mrb_state *mrb, mrb_value v)
696
+ {
697
+ if (mrb_immediate_p(v) || mrb_frozen_p(mrb_basic_ptr(v))) {
698
+ frozen_error(mrb, v);
699
+ }
700
+ }
701
+
702
+ /*
703
+ * Raises an ArgumentError indicating a mismatch in the number of arguments.
704
+ *
705
+ * This function is used to report errors when a method receives an
706
+ * incorrect number of arguments. It formats a message specifying the
707
+ * number of arguments received (`argc`) and the expected number,
708
+ * which can be an exact number (`min` == `max`), a minimum (`max` < 0),
709
+ * or a range (`min` to `max`).
710
+ *
711
+ * mrb: The mruby state.
712
+ * argc: The number of arguments actually received.
713
+ * min: The minimum number of arguments expected.
714
+ * max: The maximum number of arguments expected. If negative, it means
715
+ * `min` or more arguments are expected.
716
+ */
717
+ MRB_API mrb_noreturn void
718
+ mrb_argnum_error(mrb_state *mrb, mrb_int argc, int min, int max)
719
+ {
720
+ #define FMT(exp) "wrong number of arguments (given %i, expected " exp ")"
721
+ if (min == max)
722
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d"), argc, min);
723
+ else if (max < 0)
724
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d+"), argc, min);
725
+ else
726
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d..%d"), argc, min, max);
727
+ #undef FMT
728
+ }
729
+
730
+ void mrb_core_init_printabort(mrb_state *mrb);
731
+
732
+ int
733
+ mrb_core_init_protect(mrb_state *mrb, void (*body)(mrb_state*, void*), void *opaque)
734
+ {
735
+ struct mrb_jmpbuf *prev_jmp = mrb->jmp;
736
+ struct mrb_jmpbuf c_jmp;
737
+ volatile int err = 1;
738
+
739
+ MRB_TRY(&c_jmp) {
740
+ mrb->jmp = &c_jmp;
741
+ body(mrb, opaque);
742
+ err = 0;
743
+ } MRB_CATCH(&c_jmp) {
744
+ /* Leave mrb->exc set for caller to inspect */
745
+ } MRB_END_EXC(&c_jmp);
746
+
747
+ mrb->jmp = prev_jmp;
748
+
749
+ return err;
750
+ }
751
+
752
+ mrb_noreturn void
753
+ mrb_core_init_abort(mrb_state *mrb)
754
+ {
755
+ mrb->exc = NULL;
756
+ exc_throw(mrb, mrb_nil_value());
757
+ }
758
+
759
+ void
760
+ mrb_protect_atexit(mrb_state *mrb)
761
+ {
762
+ if (mrb->atexit_stack_len > 0) {
763
+ if (mrb->c && mrb->c->ci) {
764
+ // Even if the call stack is incomplete due to some fault, atexit to be executed at the top level is desirable.
765
+ // Clean-up also makes it easier to collect unnecessary objects.
766
+ mrb_callinfo zero = { 0 };
767
+ struct mrb_context *c = mrb->c = mrb->root_c;
768
+ mrb_gc_arena_restore(mrb, 0);
769
+
770
+ if (c->ci == c->cibase) {
771
+ // Since there is no problem with the ci, the env object is detached normally.
772
+ struct REnv *e = mrb_vm_ci_env(c->ci);
773
+ *c->ci = zero;
774
+ c->ci->stack = c->stbase;
775
+ if (e) {
776
+ c->ci->u.env = NULL;
777
+ mrb_env_unshare(mrb, e, TRUE);
778
+ }
779
+ }
780
+ else {
781
+ // Any env objects on the ci that are in the process of being executed are destroyed.
782
+ do {
783
+ struct REnv *e = mrb_vm_ci_env(c->ci);
784
+ if (e) {
785
+ e->stack = NULL;
786
+ MRB_ENV_SET_LEN(e, 0);
787
+ MRB_ENV_SET_BIDX(e, 0);
788
+ MRB_ENV_CLOSE(e);
789
+ }
790
+ } while (c->ci-- > c->cibase);
791
+ c->ci = c->cibase;
792
+ *c->ci = zero;
793
+ c->ci->stack = c->stbase;
794
+ }
795
+ }
796
+
797
+ struct mrb_jmpbuf *prev_jmp = mrb->jmp;
798
+ struct mrb_jmpbuf c_jmp;
799
+ int i = mrb->atexit_stack_len;
800
+ while (i > 0) {
801
+ MRB_TRY(&c_jmp) {
802
+ mrb->jmp = &c_jmp;
803
+ do {
804
+ mrb->atexit_stack[--i](mrb);
805
+ mrb_gc_arena_restore(mrb, 0);
806
+ } while (i > 0);
807
+ mrb->jmp = prev_jmp;
808
+ } MRB_CATCH(&c_jmp) {
809
+ mrb->jmp = prev_jmp;
810
+ /* ignore atexit errors */
811
+ mrb_gc_arena_restore(mrb, 0);
812
+ } MRB_END_EXC(&c_jmp);
813
+ }
814
+ #ifndef MRB_FIXED_STATE_ATEXIT_STACK
815
+ mrb_free(mrb, mrb->atexit_stack);
816
+ #endif
817
+ }
818
+ }
819
+
820
+ mrb_noreturn void
821
+ mrb_raise_nomemory(mrb_state *mrb)
822
+ {
823
+ if (mrb->nomem_err) {
824
+ mrb_exc_raise(mrb, mrb_obj_value(mrb->nomem_err));
825
+ }
826
+ else {
827
+ mrb_core_init_abort(mrb);
828
+ }
829
+ }
830
+
831
+ /*
832
+ * Prints the current exception and its backtrace to stderr.
833
+ *
834
+ * If an exception is set in the mruby state (`mrb->exc`), this function
835
+ * attempts to print its details, including the class name, message,
836
+ * and backtrace.
837
+ * It takes precautions to handle potential errors during the backtrace
838
+ * printing itself, especially if called from a context without an active
839
+ * jump buffer (e.g., top-level error).
840
+ * This function does nothing if MRB_NO_STDIO is defined.
841
+ *
842
+ * mrb: The mruby state.
843
+ */
844
+ MRB_API void
845
+ mrb_print_error(mrb_state *mrb)
846
+ {
847
+ #ifndef MRB_NO_STDIO
848
+ if (!mrb) {
849
+ /* mrb_open() returned NULL - allocation failed */
850
+ fputs("Failed to allocate mrb_state\n", stderr);
851
+ return;
852
+ }
853
+ if (mrb->jmp == NULL) {
854
+ struct mrb_jmpbuf c_jmp;
855
+ MRB_TRY(&c_jmp) {
856
+ mrb->jmp = &c_jmp;
857
+ mrb_print_backtrace(mrb);
858
+ } MRB_CATCH(&c_jmp) {
859
+ /* ignore exception during print_backtrace() */
860
+ } MRB_END_EXC(&c_jmp);
861
+ mrb->jmp = NULL;
862
+ }
863
+ else {
864
+ mrb_print_backtrace(mrb);
865
+ }
866
+ #endif
867
+ }
868
+
869
+ /*
870
+ * Clears the current exception status in the mruby state.
871
+ *
872
+ * After this function is called, `mrb->exc` will be NULL, indicating
873
+ * that there is no pending exception.
874
+ *
875
+ * mrb: The mruby state.
876
+ */
877
+ MRB_API void
878
+ mrb_clear_error(mrb_state *mrb)
879
+ {
880
+ mrb->exc = NULL;
881
+ }
882
+
883
+ /* returns TRUE if error in the previous call; internally calls mrb_clear_error() */
884
+ MRB_API mrb_bool
885
+ mrb_check_error(mrb_state *mrb)
886
+ {
887
+ if (mrb->exc) {
888
+ mrb_clear_error(mrb);
889
+ return TRUE;
890
+ }
891
+ return FALSE;
892
+ }
893
+
894
+ /* ---------------------------*/
895
+ static const mrb_mt_entry exception_rom_entries[] = {
896
+ MRB_MT_ENTRY(exc_exception, MRB_SYM(exception), MRB_ARGS_OPT(1)),
897
+ MRB_MT_ENTRY(exc_initialize, MRB_SYM(initialize), MRB_ARGS_OPT(1) | MRB_MT_PRIVATE),
898
+ MRB_MT_ENTRY(exc_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()),
899
+ MRB_MT_ENTRY(exc_to_s, MRB_SYM(message), MRB_ARGS_NONE()),
900
+ MRB_MT_ENTRY(mrb_exc_inspect, MRB_SYM(inspect), MRB_ARGS_NONE()),
901
+ MRB_MT_ENTRY(mrb_exc_backtrace, MRB_SYM(backtrace), MRB_ARGS_NONE()),
902
+ MRB_MT_ENTRY(exc_set_backtrace, MRB_SYM(set_backtrace), MRB_ARGS_REQ(1)),
903
+ };
904
+
905
+ void
906
+ mrb_init_exception(mrb_state *mrb)
907
+ {
908
+ struct RClass *exception = mrb->eException_class = mrb_define_class_id(mrb, MRB_SYM(Exception), mrb->object_class); /* 15.2.22 */
909
+ MRB_SET_INSTANCE_TT(exception, MRB_TT_EXCEPTION);
910
+ mrb_define_class_method_id(mrb, exception, MRB_SYM(exception), mrb_instance_new, MRB_ARGS_OPT(1));
911
+ MRB_MT_INIT_ROM(mrb, exception, exception_rom_entries);
912
+
913
+ mrb->eStandardError_class = mrb_define_class_id(mrb, MRB_SYM(StandardError), mrb->eException_class); /* 15.2.23 */
914
+ mrb_define_class_id(mrb, MRB_SYM(ArgumentError), E_STANDARD_ERROR); /* 15.2.24 */
915
+ mrb_define_class_id(mrb, MRB_SYM(LocalJumpError), E_STANDARD_ERROR); /* 15.2.25 */
916
+ struct RClass *range_error = mrb_define_class_id(mrb, MRB_SYM(RangeError), E_STANDARD_ERROR); /* 15.2.26 */
917
+ mrb_define_class_id(mrb, MRB_SYM(FloatDomainError), range_error);
918
+ mrb_define_class_id(mrb, MRB_SYM(RegexpError), E_STANDARD_ERROR); /* 15.2.27 */
919
+ struct RClass *runtime_error = mrb_define_class_id(mrb, MRB_SYM(RuntimeError), E_STANDARD_ERROR); /* 15.2.28 */
920
+ mrb_define_class_id(mrb, MRB_SYM(FrozenError), runtime_error);
921
+ mrb_define_class_id(mrb, MRB_SYM(TypeError), E_STANDARD_ERROR); /* 15.2.29 */
922
+ mrb_define_class_id(mrb, MRB_SYM(ZeroDivisionError), E_STANDARD_ERROR); /* 15.2.30 */
923
+ struct RClass *script_error = mrb_define_class_id(mrb, MRB_SYM(ScriptError), exception); /* 15.2.37 */
924
+ mrb_define_class_id(mrb, MRB_SYM(NotImplementedError), script_error);
925
+ mrb_define_class_id(mrb, MRB_SYM(SyntaxError), script_error); /* 15.2.38 */
926
+ struct RClass *index_error = mrb_define_class_id(mrb, MRB_SYM(IndexError), E_STANDARD_ERROR); /* 15.2.33 */
927
+ mrb_define_class_id(mrb, MRB_SYM(KeyError), index_error);
928
+ mrb_define_class_id(mrb, MRB_SYM(NoMatchingPatternError), E_STANDARD_ERROR); /* pattern matching */
929
+ struct RClass *stack_error = mrb_define_class_id(mrb, MRB_SYM(SystemStackError), exception);
930
+ mrb->stack_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, stack_error, "stack level too deep"));
931
+
932
+ struct RClass *nomem_error = mrb_define_class_id(mrb, MRB_SYM(NoMemoryError), exception);
933
+ mrb->nomem_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "Out of memory"));
934
+ #ifdef MRB_GC_FIXED_ARENA
935
+ mrb->arena_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "arena overflow error"));
936
+ #endif
937
+ }