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,998 @@
1
+ /*
2
+ ** dump.c - mruby binary dumper (mrbc binary format)
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #include <mruby.h>
8
+ #include <mruby/dump.h>
9
+ #include <mruby/string.h>
10
+ #include <mruby/irep.h>
11
+ #include <mruby/debug.h>
12
+ #include <string.h>
13
+
14
+ #ifndef MRB_NO_FLOAT
15
+ #include <mruby/endian.h>
16
+ #endif
17
+
18
+ static size_t get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep);
19
+
20
+ #if UINT32_MAX > SIZE_MAX
21
+ # error This code cannot be built on your environment.
22
+ #endif
23
+
24
+ static size_t
25
+ get_irep_header_size(mrb_state *mrb)
26
+ {
27
+ size_t size = 0;
28
+
29
+ size += sizeof(uint32_t) * 1;
30
+ size += sizeof(uint16_t) * 3;
31
+
32
+ return size;
33
+ }
34
+
35
+ /**
36
+ * Writes the header of an IREP (Intermediate Representation) record to the provided buffer.
37
+ * This header includes information like the record size, number of local variables,
38
+ * number of registers, and number of child IREPs.
39
+ *
40
+ * @param mrb The mruby state. (Primarily used for `get_irep_record_size_1`)
41
+ * @param irep Pointer to the IREP structure whose header is to be written.
42
+ * @param buf Pointer to the buffer where the header will be written.
43
+ * @return `ptrdiff_t` representing the number of bytes written to the buffer.
44
+ */
45
+ static ptrdiff_t
46
+ write_irep_header(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
47
+ {
48
+ uint8_t *cur = buf;
49
+
50
+ cur += uint32_to_bin((uint32_t)get_irep_record_size_1(mrb, irep), cur); /* record size */
51
+ cur += uint16_to_bin((uint16_t)irep->nlocals, cur); /* number of local variable */
52
+ cur += uint16_to_bin((uint16_t)irep->nregs, cur); /* number of register variable */
53
+ cur += uint16_to_bin((uint16_t)irep->rlen, cur); /* number of child irep */
54
+
55
+ return cur - buf;
56
+ }
57
+
58
+ static size_t
59
+ get_iseq_block_size(mrb_state *mrb, const mrb_irep *irep)
60
+ {
61
+ size_t size = 0;
62
+
63
+ size += sizeof(uint16_t); /* clen */
64
+ size += sizeof(uint32_t); /* ilen */
65
+ size += irep->ilen * sizeof(mrb_code); /* iseq(n) */
66
+ size += irep->clen * sizeof(struct mrb_irep_catch_handler);
67
+
68
+ return size;
69
+ }
70
+
71
+ /**
72
+ * Writes the instruction sequence (iseq) block of an IREP to the provided buffer.
73
+ * This block includes the number of catch handlers, the number of opcodes,
74
+ * and the instruction sequence itself along with catch handler data.
75
+ *
76
+ * @param mrb The mruby state (currently unused in the function body but good to document).
77
+ * @param irep Pointer to the IREP structure whose instruction sequence is to be written.
78
+ * @param buf Pointer to the buffer where the instruction sequence block will be written.
79
+ * @param flags Flags to control the dump process (currently unused in this specific function but part of its signature).
80
+ * @return `ptrdiff_t` representing the number of bytes written to the buffer.
81
+ */
82
+ static ptrdiff_t
83
+ write_iseq_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf, uint8_t flags)
84
+ {
85
+ uint8_t *cur = buf;
86
+ size_t seqlen = irep->ilen * sizeof(mrb_code) +
87
+ irep->clen * sizeof(struct mrb_irep_catch_handler);
88
+
89
+ cur += uint16_to_bin(irep->clen, cur); /* number of catch handlers */
90
+ cur += uint32_to_bin(irep->ilen, cur); /* number of opcode */
91
+ memcpy(cur, irep->iseq, seqlen);
92
+ cur += seqlen;
93
+
94
+ return cur - buf;
95
+ }
96
+
97
+ #ifndef MRB_NO_FLOAT
98
+ /**
99
+ * Dumps an `mrb_float` value into the provided buffer as a `double` in IEEE 754
100
+ * binary format, ensuring little-endian byte order. If the system is already
101
+ * little-endian, it uses `memcpy`. Otherwise, it manually reverses the bytes.
102
+ *
103
+ * @param mrb The mruby state (currently unused in the function body but good to document).
104
+ * @param buf Pointer to the buffer where the float data will be written.
105
+ * @param f The float value to be dumped.
106
+ */
107
+ static void
108
+ dump_float(mrb_state *mrb, uint8_t *buf, mrb_float f)
109
+ {
110
+ /* dump IEEE754 binary in little endian */
111
+ union {
112
+ double f;
113
+ char s[sizeof(double)];
114
+ } u = {(double)f};
115
+
116
+ if (littleendian) {
117
+ memcpy(buf, u.s, sizeof(double));
118
+ }
119
+ else {
120
+ for (size_t i=0; i<sizeof(double); i++) {
121
+ buf[i] = u.s[sizeof(double)-i-1];
122
+ }
123
+ }
124
+ }
125
+ #endif
126
+
127
+ /**
128
+ * Calculates the total size in bytes required to store the literal pool of an IREP.
129
+ * The pool can contain various data types like integers (32-bit or 64-bit),
130
+ * big integers, floats, and strings. The function iterates through each pool entry,
131
+ * determines its type and corresponding size, and accumulates the total.
132
+ *
133
+ * @param mrb The mruby state, used for memory allocation and garbage collection
134
+ * management (`mrb_gc_arena_save`/`restore`).
135
+ * @param irep Pointer to the IREP structure whose literal pool size is to be calculated.
136
+ * @return `size_t` representing the total calculated size of the pool block in bytes.
137
+ */
138
+ static size_t
139
+ get_pool_block_size(mrb_state *mrb, const mrb_irep *irep)
140
+ {
141
+ size_t size = sizeof(uint16_t); /* plen */
142
+ size += irep->plen * sizeof(uint8_t); /* len(n) */
143
+
144
+ for (int pool_no = 0; pool_no < irep->plen; pool_no++) {
145
+ int ai = mrb_gc_arena_save(mrb);
146
+
147
+ switch (irep->pool[pool_no].tt) {
148
+ case IREP_TT_INT64:
149
+ #if defined(MRB_64BIT) || defined(MRB_INT64)
150
+ {
151
+ int64_t i = irep->pool[pool_no].u.i64;
152
+
153
+ if (i < INT32_MIN || INT32_MAX < i)
154
+ size += 8;
155
+ else
156
+ size += 4;
157
+ }
158
+ break;
159
+ #else
160
+ /* fall through */
161
+ #endif
162
+ case IREP_TT_INT32:
163
+ size += 4; /* 32 bits = 4 bytes */
164
+ break;
165
+
166
+ case IREP_TT_BIGINT:
167
+ {
168
+ mrb_int len = (uint8_t)irep->pool[pool_no].u.str[0];
169
+ mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
170
+ size += (size_t)len+2;
171
+ }
172
+ break;
173
+
174
+ case IREP_TT_FLOAT:
175
+ #ifndef MRB_NO_FLOAT
176
+ {
177
+ size += sizeof(double);
178
+ }
179
+ #endif
180
+ break;
181
+
182
+ default: /* packed IREP_TT_STRING */
183
+ {
184
+ mrb_int len = irep->pool[pool_no].tt >> 2; /* unpack length */
185
+ mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
186
+ size += sizeof(uint16_t);
187
+ size += (size_t)len+1;
188
+ }
189
+ break;
190
+ }
191
+ mrb_gc_arena_restore(mrb, ai);
192
+ }
193
+
194
+ return size;
195
+ }
196
+
197
+ /**
198
+ * Writes the literal pool of an IREP to the provided buffer.
199
+ * It iterates through each entry in the pool, determines its type
200
+ * (integer, float, string, bigint), and writes the type identifier
201
+ * and a binary representation of the value to the buffer.
202
+ *
203
+ * @param mrb The mruby state, used for garbage collection management
204
+ * (`mrb_gc_arena_save`/`restore`) and potentially for `dump_float`.
205
+ * @param irep Pointer to the IREP structure whose literal pool is to be written.
206
+ * @param buf Pointer to the buffer where the literal pool data will be written.
207
+ * @return `ptrdiff_t` representing the number of bytes written to the buffer.
208
+ */
209
+ static ptrdiff_t
210
+ write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
211
+ {
212
+ uint8_t *cur = buf;
213
+ mrb_int len;
214
+ const char *ptr;
215
+
216
+ cur += uint16_to_bin(irep->plen, cur); /* number of pool */
217
+
218
+ for (int pool_no = 0; pool_no < irep->plen; pool_no++) {
219
+ int ai = mrb_gc_arena_save(mrb);
220
+
221
+ switch (irep->pool[pool_no].tt) {
222
+ case IREP_TT_INT64:
223
+ #if defined(MRB_64BIT) || defined(MRB_INT64)
224
+ {
225
+ int64_t i = irep->pool[pool_no].u.i64;
226
+ if (i < INT32_MIN || INT32_MAX < i) {
227
+ cur += uint8_to_bin(IREP_TT_INT64, cur); /* data type */
228
+ cur += uint32_to_bin((uint32_t)((i>>32) & 0xffffffff), cur); /* i64 hi */
229
+ cur += uint32_to_bin((uint32_t)((i ) & 0xffffffff), cur); /* i64 lo */
230
+ }
231
+ else {
232
+ cur += uint8_to_bin(IREP_TT_INT32, cur); /* data type */
233
+ cur += uint32_to_bin(irep->pool[pool_no].u.i32, cur); /* i32 */
234
+ }
235
+ }
236
+ break;
237
+ #endif
238
+ case IREP_TT_INT32:
239
+ cur += uint8_to_bin(IREP_TT_INT32, cur); /* data type */
240
+ cur += uint32_to_bin(irep->pool[pool_no].u.i32, cur); /* i32 */
241
+ break;
242
+
243
+ case IREP_TT_BIGINT:
244
+ cur += uint8_to_bin(IREP_TT_BIGINT, cur); /* data type */
245
+ len = (uint8_t)irep->pool[pool_no].u.str[0];
246
+ memcpy(cur, irep->pool[pool_no].u.str, (size_t)len+2);
247
+ cur += len+2;
248
+ break;
249
+
250
+ case IREP_TT_FLOAT:
251
+ cur += uint8_to_bin(IREP_TT_FLOAT, cur); /* data type */
252
+ #ifndef MRB_NO_FLOAT
253
+ {
254
+ dump_float(mrb, cur,irep->pool[pool_no].u.f);
255
+ cur += sizeof(double);
256
+ }
257
+ #else
258
+ cur += uint16_to_bin(0, cur); /* zero length */
259
+ #endif
260
+ break;
261
+
262
+ default: /* string */
263
+ cur += uint8_to_bin(IREP_TT_STR, cur); /* data type */
264
+ ptr = irep->pool[pool_no].u.str;
265
+ len = irep->pool[pool_no].tt>>2;
266
+ mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX);
267
+ cur += uint16_to_bin((uint16_t)len, cur); /* data length */
268
+ memcpy(cur, ptr, (size_t)len);
269
+ cur += len;
270
+ *cur++ = '\0';
271
+ break;
272
+ }
273
+ mrb_gc_arena_restore(mrb, ai);
274
+ }
275
+
276
+ return cur - buf;
277
+ }
278
+
279
+ /**
280
+ * Calculates the total size in bytes required to store the symbol block of an IREP.
281
+ * This includes the count of symbols and, for each symbol, its length and
282
+ * the string representation (including a null terminator).
283
+ *
284
+ * @param mrb The mruby state, used for `mrb_sym_name_len` to get symbol details.
285
+ * @param irep Pointer to the IREP structure whose symbol block size is to be calculated.
286
+ * @return `size_t` representing the total calculated size of the symbol block in bytes.
287
+ */
288
+ static size_t
289
+ get_syms_block_size(mrb_state *mrb, const mrb_irep *irep)
290
+ {
291
+ size_t size = sizeof(uint16_t); /* slen */
292
+
293
+ for (int sym_no = 0; sym_no < irep->slen; sym_no++) {
294
+ size += sizeof(uint16_t); /* snl(n) */
295
+ if (irep->syms[sym_no] != 0) {
296
+ mrb_int len;
297
+ mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
298
+ size += len + 1; /* sn(n) + null char */
299
+ }
300
+ }
301
+
302
+ return size;
303
+ }
304
+
305
+ /**
306
+ * Writes the symbol block of an IREP to the provided buffer.
307
+ * It first writes the number of symbols. Then, for each symbol, it writes the
308
+ * length of the symbol's string representation followed by the string itself
309
+ * and a null terminator. Handles null symbols by writing `MRB_DUMP_NULL_SYM_LEN`.
310
+ *
311
+ * @param mrb The mruby state, used for `mrb_sym_name_len` to get symbol details.
312
+ * @param irep Pointer to the IREP structure whose symbol block is to be written.
313
+ * @param buf Pointer to the buffer where the symbol block data will be written.
314
+ * @return `ptrdiff_t` representing the number of bytes written to the buffer.
315
+ */
316
+ static ptrdiff_t
317
+ write_syms_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
318
+ {
319
+ uint8_t *cur = buf;
320
+
321
+ cur += uint16_to_bin(irep->slen, cur); /* number of symbol */
322
+
323
+ for (int sym_no = 0; sym_no < irep->slen; sym_no++) {
324
+ if (irep->syms[sym_no] != 0) {
325
+ mrb_int len;
326
+ const char *name = mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
327
+
328
+ mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX);
329
+ cur += uint16_to_bin((uint16_t)len, cur); /* length of symbol name */
330
+ memcpy(cur, name, len); /* symbol name */
331
+ cur += (uint16_t)len;
332
+ *cur++ = '\0';
333
+ }
334
+ else {
335
+ cur += uint16_to_bin(MRB_DUMP_NULL_SYM_LEN, cur); /* length of symbol name */
336
+ }
337
+ }
338
+
339
+ return cur - buf;
340
+ }
341
+
342
+ static size_t
343
+ get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep)
344
+ {
345
+ size_t size = get_irep_header_size(mrb);
346
+ size += get_iseq_block_size(mrb, irep);
347
+ size += get_pool_block_size(mrb, irep);
348
+ size += get_syms_block_size(mrb, irep);
349
+ return size;
350
+ }
351
+
352
+ /**
353
+ * Recursively calculates the total size in bytes of an IREP record.
354
+ * This includes the size of the current IREP's own data (header, iseq, pool,
355
+ * symbols - obtained via `get_irep_record_size_1`) and the sizes of all
356
+ * its child IREPs (reps).
357
+ *
358
+ * @param mrb The mruby state, passed through to helper functions.
359
+ * @param irep Pointer to the IREP structure for which the record size is to be calculated.
360
+ * @return `size_t` representing the total calculated size of the IREP record and its children in bytes.
361
+ */
362
+ static size_t
363
+ get_irep_record_size(mrb_state *mrb, const mrb_irep *irep)
364
+ {
365
+ size_t size = get_irep_record_size_1(mrb, irep);
366
+
367
+ for (int irep_no = 0; irep_no < irep->rlen; irep_no++) {
368
+ size += get_irep_record_size(mrb, irep->reps[irep_no]);
369
+ }
370
+ return size;
371
+ }
372
+
373
+ static int
374
+ write_irep_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *irep_record_size, uint8_t flags)
375
+ {
376
+ uint8_t *src = bin;
377
+
378
+ if (irep == NULL) {
379
+ return MRB_DUMP_INVALID_IREP;
380
+ }
381
+
382
+ bin += write_irep_header(mrb, irep, bin);
383
+ bin += write_iseq_block(mrb, irep, bin, flags);
384
+ bin += write_pool_block(mrb, irep, bin);
385
+ bin += write_syms_block(mrb, irep, bin);
386
+
387
+ for (int i = 0; i < irep->rlen; i++) {
388
+ int result;
389
+ size_t rsize;
390
+
391
+ result = write_irep_record(mrb, irep->reps[i], bin, &rsize, flags);
392
+ if (result != MRB_DUMP_OK) {
393
+ return result;
394
+ }
395
+ bin += rsize;
396
+ }
397
+ *irep_record_size = bin - src;
398
+ return MRB_DUMP_OK;
399
+ }
400
+
401
+ static uint32_t
402
+ write_footer(mrb_state *mrb, uint8_t *bin)
403
+ {
404
+ struct rite_binary_footer footer;
405
+
406
+ memcpy(footer.section_ident, RITE_BINARY_EOF, sizeof(footer.section_ident));
407
+ uint32_to_bin(sizeof(struct rite_binary_footer), footer.section_size);
408
+ memcpy(bin, &footer, sizeof(struct rite_binary_footer));
409
+
410
+ return sizeof(struct rite_binary_footer);
411
+ }
412
+
413
+
414
+ static int
415
+ write_section_irep_header(mrb_state *mrb, size_t section_size, uint8_t *bin)
416
+ {
417
+ struct rite_section_irep_header *header = (struct rite_section_irep_header*)bin;
418
+
419
+ memcpy(header->section_ident, RITE_SECTION_IREP_IDENT, sizeof(header->section_ident));
420
+
421
+ mrb_assert_int_fit(size_t, section_size, uint32_t, UINT32_MAX);
422
+ uint32_to_bin((uint32_t)section_size, header->section_size);
423
+ memcpy(header->rite_version, RITE_VM_VER, sizeof(header->rite_version));
424
+
425
+ return MRB_DUMP_OK;
426
+ }
427
+
428
+ static int
429
+ write_section_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *len_p, uint8_t flags)
430
+ {
431
+ uint8_t *cur = bin;
432
+
433
+ if (mrb == NULL || bin == NULL) {
434
+ return MRB_DUMP_INVALID_ARGUMENT;
435
+ }
436
+
437
+ cur += sizeof(struct rite_section_irep_header);
438
+
439
+ size_t rsize = 0;
440
+ int result = write_irep_record(mrb, irep, cur, &rsize, flags);
441
+ if (result != MRB_DUMP_OK) {
442
+ return result;
443
+ }
444
+ mrb_assert(rsize == get_irep_record_size(mrb, irep));
445
+ *len_p = cur - bin + rsize;
446
+ write_section_irep_header(mrb, *len_p, bin);
447
+
448
+ return MRB_DUMP_OK;
449
+ }
450
+
451
+ static size_t
452
+ get_debug_record_size(mrb_state *mrb, const mrb_irep *irep)
453
+ {
454
+ size_t ret = sizeof(uint32_t); /* record size */
455
+ ret += sizeof(uint16_t); /* file count */
456
+
457
+ for (uint16_t f_idx = 0; f_idx < irep->debug_info->flen; f_idx++) {
458
+ mrb_irep_debug_info_file const* file = irep->debug_info->files[f_idx];
459
+
460
+ ret += sizeof(uint32_t); /* position */
461
+ ret += sizeof(uint16_t); /* filename index */
462
+
463
+ /* lines */
464
+ ret += sizeof(uint32_t); /* entry count */
465
+ ret += sizeof(uint8_t); /* line type */
466
+ switch (file->line_type) {
467
+ case mrb_debug_line_ary:
468
+ ret += sizeof(uint16_t) * (size_t)(file->line_entry_count);
469
+ break;
470
+
471
+ case mrb_debug_line_flat_map:
472
+ ret += (sizeof(uint32_t) + sizeof(uint16_t)) * (size_t)(file->line_entry_count);
473
+ break;
474
+
475
+ case mrb_debug_line_packed_map:
476
+ ret += (size_t)(file->line_entry_count);
477
+ break;
478
+
479
+ default: mrb_assert(0); break;
480
+ }
481
+ }
482
+ for (int i=0; i<irep->rlen; i++) {
483
+ ret += get_debug_record_size(mrb, irep->reps[i]);
484
+ }
485
+
486
+ return ret;
487
+ }
488
+
489
+ static int
490
+ find_filename_index(const mrb_sym *ary, int ary_len, mrb_sym s)
491
+ {
492
+ for (int i = 0; i < ary_len; i++) {
493
+ if (ary[i] == s) return i;
494
+ }
495
+ return -1;
496
+ }
497
+
498
+ static size_t
499
+ get_filename_table_size(mrb_state *mrb, const mrb_irep *irep, mrb_sym **fp, uint16_t *lp)
500
+ {
501
+ mrb_sym *filenames = *fp;
502
+ size_t size = 0;
503
+ const mrb_irep_debug_info *di = irep->debug_info;
504
+
505
+ mrb_assert(lp);
506
+ for (int i = 0; i < di->flen; i++) {
507
+ mrb_irep_debug_info_file *file = di->files[i];
508
+ if (find_filename_index(filenames, *lp, file->filename_sym) == -1) {
509
+ /* register filename */
510
+ *lp += 1;
511
+ *fp = filenames = (mrb_sym*)mrb_realloc(mrb, filenames, sizeof(mrb_sym) * (*lp));
512
+ filenames[*lp - 1] = file->filename_sym;
513
+
514
+ /* filename */
515
+ mrb_int filename_len;
516
+ mrb_sym_name_len(mrb, file->filename_sym, &filename_len);
517
+ size += sizeof(uint16_t) + (size_t)filename_len;
518
+ }
519
+ }
520
+ for (int i=0; i<irep->rlen; i++) {
521
+ size += get_filename_table_size(mrb, irep->reps[i], fp, lp);
522
+ }
523
+ return size;
524
+ }
525
+
526
+ static size_t
527
+ write_debug_record_1(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len)
528
+ {
529
+ uint8_t *cur;
530
+
531
+ cur = bin + sizeof(uint32_t); /* skip record size */
532
+ cur += uint16_to_bin(irep->debug_info->flen, cur); /* file count */
533
+
534
+ for (int f_idx = 0; f_idx < irep->debug_info->flen; f_idx++) {
535
+ int filename_idx;
536
+ const mrb_irep_debug_info_file *file = irep->debug_info->files[f_idx];
537
+
538
+ /* position */
539
+ cur += uint32_to_bin(file->start_pos, cur);
540
+
541
+ /* filename index */
542
+ filename_idx = find_filename_index(filenames, filenames_len,
543
+ file->filename_sym);
544
+ mrb_assert_int_fit(int, filename_idx, uint16_t, UINT16_MAX);
545
+ cur += uint16_to_bin((uint16_t)filename_idx, cur);
546
+
547
+ /* lines */
548
+ cur += uint32_to_bin(file->line_entry_count, cur);
549
+ cur += uint8_to_bin(file->line_type, cur);
550
+ switch (file->line_type) {
551
+ case mrb_debug_line_ary: {
552
+ uint32_t l;
553
+ for (l = 0; l < file->line_entry_count; l++) {
554
+ cur += uint16_to_bin(file->lines.ary[l], cur);
555
+ }
556
+ } break;
557
+
558
+ case mrb_debug_line_flat_map: {
559
+ uint32_t line;
560
+ for (line = 0; line < file->line_entry_count; line++) {
561
+ cur += uint32_to_bin(file->lines.flat_map[line].start_pos, cur);
562
+ cur += uint16_to_bin(file->lines.flat_map[line].line, cur);
563
+ }
564
+ } break;
565
+
566
+ case mrb_debug_line_packed_map: {
567
+ memcpy(cur, file->lines.packed_map, file->line_entry_count);
568
+ cur += file->line_entry_count;
569
+ } break;
570
+
571
+ default: mrb_assert(0); break;
572
+ }
573
+ }
574
+
575
+ ptrdiff_t ret = cur - bin;
576
+ mrb_assert_int_fit(ptrdiff_t, ret, uint32_t, UINT32_MAX);
577
+ uint32_to_bin((uint32_t)ret, bin);
578
+
579
+ mrb_assert_int_fit(ptrdiff_t, ret, size_t, SIZE_MAX);
580
+ return (size_t)ret;
581
+ }
582
+
583
+ static size_t
584
+ write_debug_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len)
585
+ {
586
+ size_t size = write_debug_record_1(mrb, irep, bin, filenames, filenames_len);
587
+
588
+ bin += size;
589
+ for (int irep_no = 0; irep_no < irep->rlen; irep_no++) {
590
+ size_t len = write_debug_record(mrb, irep->reps[irep_no], bin, filenames, filenames_len);
591
+ bin += len;
592
+ size += len;
593
+ }
594
+
595
+ mrb_assert(size == get_debug_record_size(mrb, irep));
596
+ return size;
597
+ }
598
+
599
+ static int
600
+ write_section_debug(mrb_state *mrb, const mrb_irep *irep, uint8_t *cur, mrb_sym const *filenames, uint16_t filenames_len)
601
+ {
602
+ const uint8_t *bin = cur;
603
+
604
+ if (mrb == NULL || cur == NULL) {
605
+ return MRB_DUMP_INVALID_ARGUMENT;
606
+ }
607
+
608
+ struct rite_section_debug_header *header = (struct rite_section_debug_header*)bin;
609
+ size_t section_size = sizeof(struct rite_section_debug_header);
610
+ cur += section_size;
611
+
612
+ /* filename table */
613
+ cur += uint16_to_bin(filenames_len, cur);
614
+ section_size += sizeof(uint16_t);
615
+ for (int i = 0; i < filenames_len; i++) {
616
+ mrb_int sym_len;
617
+ char const *sym = mrb_sym_name_len(mrb, filenames[i], &sym_len);
618
+
619
+ mrb_assert(sym);
620
+ cur += uint16_to_bin((uint16_t)sym_len, cur);
621
+ memcpy(cur, sym, sym_len);
622
+ cur += sym_len;
623
+ section_size += sizeof(uint16_t) + sym_len;
624
+ }
625
+
626
+ /* debug records */
627
+ size_t dlen = write_debug_record(mrb, irep, cur, filenames, filenames_len);
628
+ section_size += dlen;
629
+
630
+ memcpy(header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(header->section_ident));
631
+ mrb_assert(section_size <= INT32_MAX);
632
+ uint32_to_bin((uint32_t)section_size, header->section_size);
633
+
634
+ return MRB_DUMP_OK;
635
+ }
636
+
637
+ static void
638
+ create_lv_sym_table(mrb_state *mrb, const mrb_irep *irep, mrb_sym **syms, uint32_t *syms_len)
639
+ {
640
+ if (*syms == NULL) {
641
+ *syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * 1);
642
+ }
643
+
644
+ for (int i = 0; i + 1 < irep->nlocals; i++) {
645
+ mrb_sym const name = irep->lv[i];
646
+ if (name == 0) continue;
647
+ if (find_filename_index(*syms, *syms_len, name) != -1) continue;
648
+
649
+ (*syms_len)++;
650
+ *syms = (mrb_sym*)mrb_realloc(mrb, *syms, sizeof(mrb_sym) * (*syms_len));
651
+ (*syms)[*syms_len - 1] = name;
652
+ }
653
+
654
+ for (int i = 0; i < irep->rlen; i++) {
655
+ create_lv_sym_table(mrb, irep->reps[i], syms, syms_len);
656
+ }
657
+ }
658
+
659
+ static int
660
+ write_lv_sym_table(mrb_state *mrb, uint8_t **start, mrb_sym const *syms, uint32_t syms_len)
661
+ {
662
+ uint8_t *cur = *start;
663
+
664
+ cur += uint32_to_bin(syms_len, cur);
665
+
666
+ for (uint32_t i = 0; i < syms_len; i++) {
667
+ mrb_int str_len;
668
+ const char *str = mrb_sym_name_len(mrb, syms[i], &str_len);
669
+ cur += uint16_to_bin((uint16_t)str_len, cur);
670
+ memcpy(cur, str, str_len);
671
+ cur += str_len;
672
+ }
673
+
674
+ *start = cur;
675
+
676
+ return MRB_DUMP_OK;
677
+ }
678
+
679
+ static int
680
+ write_lv_record(mrb_state *mrb, const mrb_irep *irep, uint8_t **start, mrb_sym const *syms, uint32_t syms_len)
681
+ {
682
+ uint8_t *cur = *start;
683
+
684
+ for (int i = 0; i + 1 < irep->nlocals; i++) {
685
+ if (irep->lv[i] == 0) {
686
+ cur += uint16_to_bin(RITE_LV_NULL_MARK, cur);
687
+ }
688
+ else {
689
+ int const sym_idx = find_filename_index(syms, syms_len, irep->lv[i]);
690
+ mrb_assert(sym_idx != -1); /* local variable name must be in syms */
691
+
692
+ cur += uint16_to_bin(sym_idx, cur);
693
+ }
694
+ }
695
+
696
+ for (int i = 0; i < irep->rlen; i++) {
697
+ write_lv_record(mrb, irep->reps[i], &cur, syms, syms_len);
698
+ }
699
+
700
+ *start = cur;
701
+
702
+ return MRB_DUMP_OK;
703
+ }
704
+
705
+ static size_t
706
+ get_lv_record_size(mrb_state *mrb, const mrb_irep *irep)
707
+ {
708
+ size_t ret = sizeof(uint16_t) * (irep->nlocals - 1);
709
+
710
+ for (int i = 0; i < irep->rlen; i++) {
711
+ ret += get_lv_record_size(mrb, irep->reps[i]);
712
+ }
713
+
714
+ return ret;
715
+ }
716
+
717
+ static size_t
718
+ get_lv_section_size(mrb_state *mrb, const mrb_irep *irep, mrb_sym const *syms, uint32_t syms_len)
719
+ {
720
+ size_t ret = sizeof(uint32_t); /* syms_len */
721
+ ret += sizeof(uint16_t) * syms_len; /* symbol name lengths */
722
+ for (uint32_t i = 0; i < syms_len; i++) {
723
+ mrb_int str_len;
724
+ mrb_sym_name_len(mrb, syms[i], &str_len);
725
+ ret += str_len;
726
+ }
727
+
728
+ ret += get_lv_record_size(mrb, irep);
729
+
730
+ return ret;
731
+ }
732
+
733
+ static int
734
+ write_section_lv(mrb_state *mrb, const mrb_irep *irep, uint8_t *start, mrb_sym const *syms, uint32_t const syms_len)
735
+ {
736
+ uint8_t *cur = start;
737
+
738
+ if (mrb == NULL || cur == NULL) {
739
+ return MRB_DUMP_INVALID_ARGUMENT;
740
+ }
741
+
742
+ struct rite_section_lv_header *header = (struct rite_section_lv_header*)cur;
743
+ cur += sizeof(struct rite_section_lv_header);
744
+
745
+ int result = write_lv_sym_table(mrb, &cur, syms, syms_len);
746
+ if (result != MRB_DUMP_OK) {
747
+ return result;
748
+ }
749
+
750
+ result = write_lv_record(mrb, irep, &cur, syms, syms_len);
751
+ if (result != MRB_DUMP_OK) {
752
+ return result;
753
+ }
754
+
755
+ memcpy(header->section_ident, RITE_SECTION_LV_IDENT, sizeof(header->section_ident));
756
+
757
+ ptrdiff_t diff = cur - start;
758
+ mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
759
+ uint32_to_bin((uint32_t)diff, header->section_size);
760
+
761
+ return result;
762
+ }
763
+
764
+ static int
765
+ write_rite_binary_header(mrb_state *mrb, size_t binary_size, uint8_t *bin, uint8_t flags)
766
+ {
767
+ struct rite_binary_header *header = (struct rite_binary_header*)bin;
768
+
769
+ memcpy(header->binary_ident, RITE_BINARY_IDENT, sizeof(header->binary_ident));
770
+ memcpy(header->major_version, RITE_BINARY_MAJOR_VER, sizeof(header->major_version));
771
+ memcpy(header->minor_version, RITE_BINARY_MINOR_VER, sizeof(header->minor_version));
772
+ memcpy(header->compiler_name, RITE_COMPILER_NAME, sizeof(header->compiler_name));
773
+ memcpy(header->compiler_version, RITE_COMPILER_VERSION, sizeof(header->compiler_version));
774
+ mrb_assert(binary_size <= UINT32_MAX);
775
+ uint32_to_bin((uint32_t)binary_size, header->binary_size);
776
+
777
+ return MRB_DUMP_OK;
778
+ }
779
+
780
+ static mrb_bool
781
+ debug_info_defined_p(const mrb_irep *irep)
782
+ {
783
+ if (!irep->debug_info) return FALSE;
784
+ for (int i = 0; i < irep->rlen; i++) {
785
+ if (!debug_info_defined_p(irep->reps[i])) return FALSE;
786
+ }
787
+ return TRUE;
788
+ }
789
+
790
+ static mrb_bool
791
+ lv_defined_p(const mrb_irep *irep)
792
+ {
793
+ if (irep->lv) return TRUE;
794
+ for (int i = 0; i < irep->rlen; i++) {
795
+ if (lv_defined_p(irep->reps[i])) return TRUE;
796
+ }
797
+
798
+ return FALSE;
799
+ }
800
+
801
+ /**
802
+ * Dumps an IREP (Intermediate Representation) into a binary format.
803
+ *
804
+ * This function takes an IREP and converts it into a binary representation that can be
805
+ * stored or transmitted. The binary format includes sections for the IREP data,
806
+ * debug information (if specified by flags), and local variable information.
807
+ *
808
+ * @param mrb The mruby state.
809
+ * @param irep The IREP to dump.
810
+ * @param flags Flags to control the dump process (e.g., MRB_DUMP_DEBUG_INFO).
811
+ * @param bin A pointer to a buffer where the binary data will be stored.
812
+ * The buffer is allocated by this function and must be freed by the caller
813
+ * using mrb_free().
814
+ * @param bin_size A pointer to a variable where the size of the binary data will be stored.
815
+ *
816
+ * @return MRB_DUMP_OK on success, or an error code (e.g., MRB_DUMP_GENERAL_FAILURE,
817
+ * MRB_DUMP_INVALID_ARGUMENT) on failure.
818
+ */
819
+ int
820
+ mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size)
821
+ {
822
+ size_t section_lineno_size = 0, section_lv_size = 0;
823
+ uint8_t *cur = NULL;
824
+ mrb_bool const debug_info_defined = (flags & MRB_DUMP_DEBUG_INFO) ? debug_info_defined_p(irep) : FALSE;
825
+ mrb_bool lv_defined = (flags & MRB_DUMP_NO_LVAR) ? FALSE : lv_defined_p(irep);
826
+ mrb_sym *lv_syms = NULL; uint32_t lv_syms_len = 0;
827
+ mrb_sym *filenames = NULL; uint16_t filenames_len = 0;
828
+
829
+ if (mrb == NULL) {
830
+ *bin = NULL;
831
+ return MRB_DUMP_GENERAL_FAILURE;
832
+ }
833
+
834
+ size_t section_irep_size = sizeof(struct rite_section_irep_header);
835
+ section_irep_size += get_irep_record_size(mrb, irep);
836
+
837
+ /* DEBUG section size */
838
+ if (debug_info_defined) {
839
+ section_lineno_size += sizeof(struct rite_section_debug_header);
840
+ /* filename table size */
841
+ section_lineno_size += sizeof(uint16_t);
842
+ section_lineno_size += get_filename_table_size(mrb, irep, &filenames, &filenames_len);
843
+ section_lineno_size += get_debug_record_size(mrb, irep);
844
+ }
845
+
846
+ if (lv_defined) {
847
+ section_lv_size += sizeof(struct rite_section_lv_header);
848
+ create_lv_sym_table(mrb, irep, &lv_syms, &lv_syms_len);
849
+ section_lv_size += get_lv_section_size(mrb, irep, lv_syms, lv_syms_len);
850
+ }
851
+
852
+ size_t malloc_size = sizeof(struct rite_binary_header) +
853
+ section_irep_size + section_lineno_size + section_lv_size +
854
+ sizeof(struct rite_binary_footer);
855
+ cur = *bin = (uint8_t*)mrb_malloc(mrb, malloc_size);
856
+ cur += sizeof(struct rite_binary_header);
857
+
858
+ int result = write_section_irep(mrb, irep, cur, &section_irep_size, flags);
859
+ if (result != MRB_DUMP_OK) {
860
+ goto error_exit;
861
+ }
862
+ cur += section_irep_size;
863
+ *bin_size = sizeof(struct rite_binary_header) +
864
+ section_irep_size + section_lineno_size + section_lv_size +
865
+ sizeof(struct rite_binary_footer);
866
+
867
+ /* write DEBUG section */
868
+ if ((flags & MRB_DUMP_DEBUG_INFO) && debug_info_defined) {
869
+ result = write_section_debug(mrb, irep, cur, filenames, filenames_len);
870
+ if (result != MRB_DUMP_OK) {
871
+ goto error_exit;
872
+ }
873
+ cur += section_lineno_size;
874
+ }
875
+
876
+ if (lv_defined) {
877
+ result = write_section_lv(mrb, irep, cur, lv_syms, lv_syms_len);
878
+ if (result != MRB_DUMP_OK) {
879
+ goto error_exit;
880
+ }
881
+ cur += section_lv_size;
882
+ }
883
+
884
+ write_footer(mrb, cur);
885
+ write_rite_binary_header(mrb, *bin_size, *bin, flags);
886
+
887
+ error_exit:
888
+ if (result != MRB_DUMP_OK) {
889
+ mrb_free(mrb, *bin);
890
+ *bin = NULL;
891
+ }
892
+ mrb_free(mrb, lv_syms);
893
+ mrb_free(mrb, filenames);
894
+ return result;
895
+ }
896
+
897
+ #ifndef MRB_NO_STDIO
898
+
899
+ /**
900
+ * Dumps an IREP (Intermediate Representation) into a binary format and writes it to a file.
901
+ *
902
+ * This function first calls `mrb_dump_irep` to get the binary representation of the IREP,
903
+ * then writes the binary data to the specified file pointer.
904
+ *
905
+ * @param mrb The mruby state.
906
+ * @param irep The IREP to dump.
907
+ * @param flags Flags to control the dump process.
908
+ * @param fp The file pointer to write the binary data to.
909
+ *
910
+ * @return MRB_DUMP_OK on success, or an error code (e.g., MRB_DUMP_INVALID_ARGUMENT,
911
+ * MRB_DUMP_WRITE_FAULT) on failure.
912
+ */
913
+ int
914
+ mrb_dump_irep_binary(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE* fp)
915
+ {
916
+ uint8_t *bin = NULL;
917
+
918
+ if (fp == NULL) {
919
+ return MRB_DUMP_INVALID_ARGUMENT;
920
+ }
921
+
922
+ size_t bin_size;
923
+ int result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
924
+ if (result == MRB_DUMP_OK) {
925
+ if (fwrite(bin, sizeof(bin[0]), bin_size, fp) != bin_size) {
926
+ result = MRB_DUMP_WRITE_FAULT;
927
+ }
928
+ }
929
+
930
+ mrb_free(mrb, bin);
931
+ return result;
932
+ }
933
+
934
+ /**
935
+ * Dumps an IREP (Intermediate Representation) as a C source file.
936
+ *
937
+ * This function converts an IREP into a C source file. The generated file
938
+ * will contain a `uint8_t` array holding the binary representation of the IREP.
939
+ *
940
+ * @param mrb The mruby state.
941
+ * @param irep The IREP to dump.
942
+ * @param flags Flags to control the dump process (e.g., `MRB_DUMP_STATIC` to
943
+ * make the array static).
944
+ * @param fp The file pointer to write the C source code to.
945
+ * @param initname The name of the `uint8_t` array in the generated C code.
946
+ *
947
+ * @return MRB_DUMP_OK on success, or an error code (e.g.,
948
+ * `MRB_DUMP_INVALID_ARGUMENT`, `MRB_DUMP_WRITE_FAULT`) on failure.
949
+ */
950
+ int
951
+ mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname)
952
+ {
953
+ uint8_t *bin = NULL;
954
+
955
+ if (fp == NULL || initname == NULL || initname[0] == '\0') {
956
+ return MRB_DUMP_INVALID_ARGUMENT;
957
+ }
958
+ size_t bin_size, bin_idx = 0;
959
+ int result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
960
+ if (result == MRB_DUMP_OK) {
961
+ if (fprintf(fp, "#include <stdint.h>\n") < 0) { /* for uint8_t under at least Darwin */
962
+ mrb_free(mrb, bin);
963
+ return MRB_DUMP_WRITE_FAULT;
964
+ }
965
+ if (fprintf(fp,
966
+ "%s\n"
967
+ "const uint8_t %s[] = {",
968
+ (flags & MRB_DUMP_STATIC) ? "static"
969
+ : "#ifdef __cplusplus\n"
970
+ "extern\n"
971
+ "#endif",
972
+ initname) < 0) {
973
+ mrb_free(mrb, bin);
974
+ return MRB_DUMP_WRITE_FAULT;
975
+ }
976
+ while (bin_idx < bin_size) {
977
+ if (bin_idx % 16 == 0) {
978
+ if (fputs("\n", fp) == EOF) {
979
+ mrb_free(mrb, bin);
980
+ return MRB_DUMP_WRITE_FAULT;
981
+ }
982
+ }
983
+ if (fprintf(fp, "0x%02x,", bin[bin_idx++]) < 0) {
984
+ mrb_free(mrb, bin);
985
+ return MRB_DUMP_WRITE_FAULT;
986
+ }
987
+ }
988
+ if (fputs("\n};\n", fp) == EOF) {
989
+ mrb_free(mrb, bin);
990
+ return MRB_DUMP_WRITE_FAULT;
991
+ }
992
+ }
993
+
994
+ mrb_free(mrb, bin);
995
+ return result;
996
+ }
997
+
998
+ #endif /* MRB_NO_STDIO */