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,1023 @@
1
+ /*
2
+ ** symbol.c - Symbol class
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #include <string.h>
8
+ #include <mruby.h>
9
+ #include <mruby/string.h>
10
+ #include <mruby/dump.h>
11
+ #include <mruby/class.h>
12
+ #include <mruby/internal.h>
13
+ #include <mruby/presym.h>
14
+
15
+ #ifndef MRB_PRESYM_SCANNING
16
+ /* const uint16_t presym_length_table[] */
17
+ /* const char * const presym_name_table[] */
18
+ # include <mruby/presym/table.h>
19
+ #endif
20
+
21
+ static mrb_sym
22
+ presym_find(const char *name, size_t len)
23
+ {
24
+ if (presym_length_table[MRB_PRESYM_MAX-1] < len) return 0;
25
+
26
+ mrb_sym presym_size = MRB_PRESYM_MAX;
27
+ for (mrb_sym start = 0; presym_size != 0; presym_size/=2) {
28
+ mrb_sym idx = start+presym_size/2;
29
+ int cmp = (int)len-(int)presym_length_table[idx];
30
+ if (cmp == 0) {
31
+ cmp = memcmp(name, presym_name_table[idx], len);
32
+ if (cmp == 0) return idx+1;
33
+ }
34
+ if (0 < cmp) {
35
+ start = ++idx;
36
+ --presym_size;
37
+ }
38
+ }
39
+ return 0;
40
+ }
41
+
42
+ static const char*
43
+ presym_sym2name(mrb_sym sym, mrb_int *lenp)
44
+ {
45
+ if (sym > MRB_PRESYM_MAX) return NULL;
46
+ if (lenp) *lenp = presym_length_table[sym-1];
47
+ return presym_name_table[sym-1];
48
+ }
49
+
50
+ /* ------------------------------------------------------ */
51
+
52
+ /* LSB pointer tagging for literal flags */
53
+ #define SYMTBL_LITERAL_FLAG ((uintptr_t)1)
54
+
55
+ /* Extract clean pointer for memory operations */
56
+ static inline const char*
57
+ symtbl_get_ptr(const char *tagged_ptr)
58
+ {
59
+ return (const char*)((uintptr_t)tagged_ptr & ~SYMTBL_LITERAL_FLAG);
60
+ }
61
+
62
+ /* Check if symbol is literal by testing LSB */
63
+ static inline mrb_bool
64
+ symtbl_is_literal(const char *tagged_ptr)
65
+ {
66
+ return ((uintptr_t)tagged_ptr & SYMTBL_LITERAL_FLAG) != 0;
67
+ }
68
+
69
+ /* Create tagged pointer for literal string - with alignment verification */
70
+ static inline const char*
71
+ symtbl_tag_literal(const char *ptr)
72
+ {
73
+ mrb_assert(((uintptr_t)ptr & 1) == 0); /* Assert alignment */
74
+ return (const char*)((uintptr_t)ptr | SYMTBL_LITERAL_FLAG);
75
+ }
76
+
77
+ static void
78
+ sym_validate_len(mrb_state *mrb, size_t len)
79
+ {
80
+ if (len >= UINT16_MAX) {
81
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "symbol length too long");
82
+ }
83
+ }
84
+
85
+ /* Chunk-based string pool for heap-allocated symbol names */
86
+ #define MRB_SYM_POOL_CHUNK_SIZE 4096
87
+
88
+ struct sym_pool_chunk {
89
+ struct sym_pool_chunk *next;
90
+ size_t used;
91
+ char buf[]; /* flexible array */
92
+ };
93
+
94
+ static char*
95
+ sym_pool_alloc(mrb_state *mrb, size_t size)
96
+ {
97
+ /* round up to even size to keep pointers even-aligned (LSB tagging) */
98
+ size_t asize = (size + 1) & ~(size_t)1;
99
+ struct sym_pool_chunk *chunk = (struct sym_pool_chunk*)mrb->sym_pool;
100
+ if (chunk && chunk->used + asize <= MRB_SYM_POOL_CHUNK_SIZE) {
101
+ char *p = chunk->buf + chunk->used;
102
+ chunk->used += asize;
103
+ return p;
104
+ }
105
+ size_t csize = asize > MRB_SYM_POOL_CHUNK_SIZE ? asize : MRB_SYM_POOL_CHUNK_SIZE;
106
+ chunk = (struct sym_pool_chunk*)mrb_malloc(mrb,
107
+ offsetof(struct sym_pool_chunk, buf) + csize);
108
+ chunk->next = (struct sym_pool_chunk*)mrb->sym_pool;
109
+ chunk->used = asize;
110
+ mrb->sym_pool = (void*)chunk;
111
+ return chunk->buf;
112
+ }
113
+
114
+ /* Hash table for symbols (allocated on demand when symbols exceed threshold) */
115
+ struct mrb_sym_hash_table {
116
+ uint8_t *symlink; /* collision resolution chains */
117
+ mrb_sym buckets[256]; /* hash buckets */
118
+ };
119
+
120
+ #ifdef MRB_USE_ALL_SYMBOLS
121
+ # define SYMBOL_INLINE_P(sym) FALSE
122
+ # define sym_inline_pack(name, len) 0
123
+ # define sym_inline_unpack(sym, buf, lenp) NULL
124
+ #else
125
+ # define SYMBOL_INLINE_P(sym) ((sym) >= (1<<20))
126
+
127
+ static const char pack_table[] = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
128
+
129
+ static mrb_sym
130
+ sym_inline_pack(const char *name, size_t len)
131
+ {
132
+ const size_t pack_length_max = 4;
133
+ mrb_sym sym = 0;
134
+
135
+ if (len > pack_length_max) return 0; /* too long */
136
+ if (len == 0) return 0; /* empty string */
137
+ for (size_t i=0; i<len; i++) {
138
+ char c = name[i];
139
+ if (c == 0) return 0; /* NUL in name */
140
+ const char *p = strchr(pack_table, (int)c);
141
+ if (p == 0) return 0; /* non alnum char */
142
+
143
+ uint32_t bits = (uint32_t)(p - pack_table)+1;
144
+ sym |= bits<<(20-i*6);
145
+ }
146
+ mrb_assert(SYMBOL_INLINE_P(sym));
147
+ return sym;
148
+ }
149
+
150
+ static const char*
151
+ sym_inline_unpack(mrb_sym sym, char *buf, mrb_int *lenp)
152
+ {
153
+ const size_t pack_length_max = 4;
154
+ size_t i;
155
+
156
+ mrb_assert(SYMBOL_INLINE_P(sym));
157
+
158
+ for (i=0; i<pack_length_max; i++) {
159
+ uint32_t bits = sym>>(20-i*6) & 0x3f;
160
+ if (bits == 0) break;
161
+ buf[i] = pack_table[bits-1];
162
+ }
163
+ buf[i] = '\0';
164
+ if (lenp) *lenp = i;
165
+ return buf;
166
+ }
167
+ #endif
168
+
169
+ /* Check if using hash table mode */
170
+ static inline mrb_bool
171
+ using_hash_table(mrb_state *mrb)
172
+ {
173
+ return mrb->symhash != NULL;
174
+ }
175
+
176
+ static mrb_bool
177
+ sym_check(mrb_state *mrb, const char *name, size_t len, mrb_sym i)
178
+ {
179
+ const char *tagged_ptr = mrb->symtbl[i];
180
+ const char *symname = symtbl_get_ptr(tagged_ptr); /* Untag for access */
181
+ size_t symlen;
182
+
183
+ if (symtbl_is_literal(tagged_ptr)) {
184
+ symlen = strlen(symname);
185
+ }
186
+ else {
187
+ /* length in BER */
188
+ symlen = mrb_packed_int_decode((const uint8_t*)symname, (const uint8_t**)&symname);
189
+ }
190
+ if (len == symlen && memcmp(symname, name, len) == 0) {
191
+ return TRUE;
192
+ }
193
+ return FALSE;
194
+ }
195
+
196
+ static mrb_sym
197
+ find_symbol_linear(mrb_state *mrb, const char *name, size_t len)
198
+ {
199
+ mrb_sym i;
200
+
201
+ for (i = 1; i <= mrb->symidx; i++) {
202
+ if (sym_check(mrb, name, len, i)) {
203
+ return (i + MRB_PRESYM_MAX);
204
+ }
205
+ }
206
+ return 0;
207
+ }
208
+
209
+ static mrb_sym
210
+ find_symbol_hash(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp)
211
+ {
212
+ mrb_sym i;
213
+ uint8_t hash;
214
+ struct mrb_sym_hash_table *ht = mrb->symhash;
215
+
216
+ hash = mrb_byte_hash((const uint8_t*)name, len);
217
+ if (hashp) *hashp = hash;
218
+
219
+ i = ht->buckets[hash];
220
+ if (i == 0) return 0;
221
+ for (;;) {
222
+ if (sym_check(mrb, name, len, i)) {
223
+ return (i+MRB_PRESYM_MAX);
224
+ }
225
+ uint8_t diff = ht->symlink[i];
226
+ if (diff == 0xff) {
227
+ i -= 0xff;
228
+ while (i > 0) {
229
+ if (sym_check(mrb, name, len, i)) {
230
+ return (i+MRB_PRESYM_MAX);
231
+ }
232
+ i--;
233
+ }
234
+ return 0;
235
+ }
236
+ if (diff == 0) return 0;
237
+ i -= diff;
238
+ }
239
+ return 0;
240
+ }
241
+
242
+ static mrb_sym
243
+ find_symbol(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp)
244
+ {
245
+ mrb_sym i;
246
+
247
+ /* presym */
248
+ i = presym_find(name, len);
249
+ if (i > 0) return i;
250
+
251
+ /* inline symbol */
252
+ i = sym_inline_pack(name, len);
253
+ if (i > 0) return i;
254
+
255
+ if (using_hash_table(mrb)) {
256
+ /* Hash table mode - O(1) average case */
257
+ return find_symbol_hash(mrb, name, len, hashp);
258
+ }
259
+ else {
260
+ /* Linear mode - O(n) but fast for small n */
261
+ if (hashp) *hashp = mrb_byte_hash((const uint8_t*)name, len);
262
+ return find_symbol_linear(mrb, name, len);
263
+ }
264
+ }
265
+
266
+ static void
267
+ migrate_to_hash_table(mrb_state *mrb)
268
+ {
269
+ struct mrb_sym_hash_table *ht;
270
+ mrb_sym i;
271
+
272
+ mrb_assert(mrb->symhash == NULL);
273
+ mrb_assert(mrb->symidx >= MRB_SYMBOL_LINEAR_THRESHOLD);
274
+
275
+ /* Allocate hash table structure */
276
+ ht = (struct mrb_sym_hash_table*)mrb_calloc(mrb, 1, sizeof(struct mrb_sym_hash_table));
277
+ ht->symlink = (uint8_t*)mrb_calloc(mrb, mrb->symcapa, sizeof(uint8_t));
278
+
279
+ /* Rebuild hash table from existing linear data */
280
+ for (i = 1; i <= mrb->symidx; i++) {
281
+ const char *tagged_ptr = mrb->symtbl[i];
282
+ const char *name = symtbl_get_ptr(tagged_ptr);
283
+ size_t len;
284
+ uint8_t hash;
285
+
286
+ /* Get name and length from tagged pointer */
287
+ if (symtbl_is_literal(tagged_ptr)) {
288
+ len = strlen(name);
289
+ }
290
+ else {
291
+ /* This is a packed length string */
292
+ len = mrb_packed_int_decode((const uint8_t*)name, (const uint8_t**)&name);
293
+ }
294
+
295
+ hash = mrb_byte_hash((const uint8_t*)name, len);
296
+
297
+ /* Build collision chain */
298
+ if (ht->buckets[hash] != 0) {
299
+ mrb_sym diff = i - ht->buckets[hash];
300
+ ht->symlink[i] = (diff > 0xff) ? 0xff : (uint8_t)diff;
301
+ }
302
+ else {
303
+ ht->symlink[i] = 0;
304
+ }
305
+ ht->buckets[hash] = i;
306
+ }
307
+
308
+ mrb->symhash = ht;
309
+ }
310
+
311
+ static mrb_sym
312
+ sym_intern_common(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
313
+ {
314
+ mrb_sym sym;
315
+
316
+ sym = mrb->symidx + 1;
317
+ if (mrb->symcapa <= sym) {
318
+ size_t symcapa = mrb->symcapa;
319
+ if (symcapa == 0) symcapa = 100;
320
+ else symcapa = (size_t)(symcapa * 6 / 5);
321
+ mrb->symtbl = (const char**)mrb_realloc(mrb, (void*)mrb->symtbl, sizeof(char*)*symcapa);
322
+ if (using_hash_table(mrb)) {
323
+ struct mrb_sym_hash_table *ht = mrb->symhash;
324
+ ht->symlink = (uint8_t*)mrb_realloc(mrb, ht->symlink, symcapa);
325
+ }
326
+ mrb->symcapa = symcapa;
327
+ }
328
+
329
+ lit = lit || mrb_ro_data_p(name);
330
+ if (lit && name[len] == 0 && strlen(name) == len) {
331
+ if (((uintptr_t)name & 1) != 0) {
332
+ /* Fallback: unaligned literal, allocate heap copy */
333
+ goto heap_allocation;
334
+ }
335
+ mrb->symtbl[sym] = symtbl_tag_literal(name);
336
+ }
337
+ else {
338
+ heap_allocation:;
339
+ /* Always heap-allocate when not explicitly literal */
340
+ uint32_t ulen = (uint32_t)len;
341
+ size_t ilen = mrb_packed_int_len(ulen);
342
+ char *p = sym_pool_alloc(mrb, len+ilen+1);
343
+ mrb_packed_int_encode(ulen, (uint8_t*)p);
344
+ memcpy(p+ilen, name, len);
345
+ p[ilen+len] = 0;
346
+ mrb->symtbl[sym] = p; /* Untagged = heap */
347
+ }
348
+
349
+ mrb->symidx = sym;
350
+ return sym;
351
+ }
352
+
353
+ static mrb_sym
354
+ sym_intern_linear_mode(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
355
+ {
356
+ mrb_sym sym = sym_intern_common(mrb, name, len, lit);
357
+ return (sym+MRB_PRESYM_MAX);
358
+ }
359
+
360
+ static mrb_sym
361
+ sym_intern_hash_mode(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
362
+ {
363
+ mrb_sym sym = sym_intern_common(mrb, name, len, lit);
364
+ struct mrb_sym_hash_table *ht = mrb->symhash;
365
+ uint8_t hash = mrb_byte_hash((const uint8_t*)name, len);
366
+
367
+ if (ht->buckets[hash]) {
368
+ mrb_sym i = sym - ht->buckets[hash];
369
+ if (i > 0xff)
370
+ ht->symlink[sym] = 0xff;
371
+ else
372
+ ht->symlink[sym] = i;
373
+ }
374
+ else {
375
+ ht->symlink[sym] = 0;
376
+ }
377
+ ht->buckets[hash] = sym;
378
+
379
+ return (sym+MRB_PRESYM_MAX);
380
+ }
381
+
382
+ static mrb_sym
383
+ sym_intern(mrb_state *mrb, const char *name, size_t len, mrb_bool lit)
384
+ {
385
+ mrb_sym sym;
386
+
387
+ sym_validate_len(mrb, len);
388
+ sym = find_symbol(mrb, name, len, NULL);
389
+ if (sym > 0) return sym;
390
+
391
+ /* Check if we need to migrate to hash table */
392
+ if (!using_hash_table(mrb) && mrb->symidx >= MRB_SYMBOL_LINEAR_THRESHOLD) {
393
+ migrate_to_hash_table(mrb);
394
+ }
395
+
396
+ /* Add new symbol using current mode */
397
+ if (using_hash_table(mrb)) {
398
+ return sym_intern_hash_mode(mrb, name, len, lit);
399
+ }
400
+ else {
401
+ return sym_intern_linear_mode(mrb, name, len, lit);
402
+ }
403
+ }
404
+
405
+ /*
406
+ * Interns a string, creating a symbol from it if it doesn't already exist,
407
+ * or returning the existing symbol if it does.
408
+ *
409
+ * mrb: The mruby state.
410
+ * name: The string to intern.
411
+ * len: The length of the string.
412
+ *
413
+ * Returns the interned symbol.
414
+ */
415
+ MRB_API mrb_sym
416
+ mrb_intern(mrb_state *mrb, const char *name, size_t len)
417
+ {
418
+ return sym_intern(mrb, name, len, FALSE);
419
+ }
420
+
421
+ /*
422
+ * Interns a static string, creating a symbol from it.
423
+ * This function is similar to mrb_intern, but it assumes that the given
424
+ * string is static and will not be freed.
425
+ *
426
+ * mrb: The mruby state.
427
+ * name: The static string to intern.
428
+ * len: The length of the string.
429
+ *
430
+ * Returns the interned symbol.
431
+ */
432
+ MRB_API mrb_sym
433
+ mrb_intern_static(mrb_state *mrb, const char *name, size_t len)
434
+ {
435
+ return sym_intern(mrb, name, len, TRUE);
436
+ }
437
+
438
+ /*
439
+ * Interns a C string (null-terminated), creating a symbol from it.
440
+ * This function is a convenience wrapper around mrb_intern that
441
+ * automatically calculates the length of the string.
442
+ *
443
+ * mrb: The mruby state.
444
+ * name: The C string to intern.
445
+ *
446
+ * Returns the interned symbol.
447
+ */
448
+ MRB_API mrb_sym
449
+ mrb_intern_cstr(mrb_state *mrb, const char *name)
450
+ {
451
+ return mrb_intern(mrb, name, strlen(name));
452
+ }
453
+
454
+ /*
455
+ * Interns an mruby string value, creating a symbol from it.
456
+ *
457
+ * mrb: The mruby state.
458
+ * str: The mruby string value to intern.
459
+ *
460
+ * Returns the interned symbol.
461
+ */
462
+ MRB_API mrb_sym
463
+ mrb_intern_str(mrb_state *mrb, mrb_value str)
464
+ {
465
+ return mrb_intern(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
466
+ }
467
+
468
+ /*
469
+ * Checks if a symbol already exists for the given string.
470
+ *
471
+ * mrb: The mruby state.
472
+ * name: The string to check.
473
+ * len: The length of the string.
474
+ *
475
+ * Returns the symbol if it exists, otherwise 0.
476
+ */
477
+ MRB_API mrb_sym
478
+ mrb_intern_check(mrb_state *mrb, const char *name, size_t len)
479
+ {
480
+ mrb_sym sym;
481
+
482
+ sym_validate_len(mrb, len);
483
+ sym = find_symbol(mrb, name, len, NULL);
484
+ if (sym > 0) return sym;
485
+ return 0;
486
+ }
487
+
488
+ /*
489
+ * Checks if a symbol already exists for the given string.
490
+ *
491
+ * mrb: The mruby state.
492
+ * name: The string to check.
493
+ * len: The length of the string.
494
+ *
495
+ * Returns the symbol as an mrb_value if it exists, otherwise a nil value.
496
+ */
497
+ MRB_API mrb_value
498
+ mrb_check_intern(mrb_state *mrb, const char *name, size_t len)
499
+ {
500
+ mrb_sym sym = mrb_intern_check(mrb, name, len);
501
+ if (sym == 0) return mrb_nil_value();
502
+ return mrb_symbol_value(sym);
503
+ }
504
+
505
+ /*
506
+ * Checks if a symbol already exists for the given C string (null-terminated).
507
+ * This function is a convenience wrapper around mrb_intern_check that
508
+ * automatically calculates the length of the string.
509
+ *
510
+ * mrb: The mruby state.
511
+ * name: The C string to check.
512
+ *
513
+ * Returns the symbol if it exists, otherwise 0.
514
+ */
515
+ MRB_API mrb_sym
516
+ mrb_intern_check_cstr(mrb_state *mrb, const char *name)
517
+ {
518
+ return mrb_intern_check(mrb, name, strlen(name));
519
+ }
520
+
521
+ /*
522
+ * Checks if a symbol already exists for the given C string (null-terminated).
523
+ * This function is similar to mrb_intern_check_cstr, but returns the result
524
+ * as an mrb_value (either the symbol or nil).
525
+ *
526
+ * mrb: The mruby state.
527
+ * name: The C string to check.
528
+ *
529
+ * Returns the symbol as an mrb_value if it exists, otherwise a nil value.
530
+ */
531
+ MRB_API mrb_value
532
+ mrb_check_intern_cstr(mrb_state *mrb, const char *name)
533
+ {
534
+ mrb_sym sym = mrb_intern_check_cstr(mrb, name);
535
+ if (sym == 0) return mrb_nil_value();
536
+ return mrb_symbol_value(sym);
537
+ }
538
+
539
+ /*
540
+ * Checks if a symbol already exists for the given mruby string value.
541
+ *
542
+ * mrb: The mruby state.
543
+ * str: The mruby string value to check.
544
+ *
545
+ * Returns the symbol if it exists, otherwise 0.
546
+ */
547
+ MRB_API mrb_sym
548
+ mrb_intern_check_str(mrb_state *mrb, mrb_value str)
549
+ {
550
+ return mrb_intern_check(mrb, RSTRING_PTR(str), RSTRING_LEN(str));
551
+ }
552
+
553
+ /*
554
+ * Checks if a symbol already exists for the given mruby string value.
555
+ * This function is similar to mrb_intern_check_str, but returns the result
556
+ * as an mrb_value (either the symbol or nil).
557
+ *
558
+ * mrb: The mruby state.
559
+ * str: The mruby string value to check.
560
+ *
561
+ * Returns the symbol as an mrb_value if it exists, otherwise a nil value.
562
+ */
563
+ MRB_API mrb_value
564
+ mrb_check_intern_str(mrb_state *mrb, mrb_value str)
565
+ {
566
+ mrb_sym sym = mrb_intern_check_str(mrb, str);
567
+ if (sym == 0) return mrb_nil_value();
568
+ return mrb_symbol_value(sym);
569
+ }
570
+
571
+ static const char*
572
+ sym2name_len(mrb_state *mrb, mrb_sym sym, char *buf, mrb_int *lenp)
573
+ {
574
+ if (sym == 0) goto outofsym;
575
+ if (SYMBOL_INLINE_P(sym)) return sym_inline_unpack(sym, buf, lenp);
576
+
577
+ {
578
+ const char *name = presym_sym2name(sym, lenp);
579
+ if (name) return name;
580
+ }
581
+ sym -= MRB_PRESYM_MAX;
582
+
583
+ if (mrb->symidx < sym) {
584
+ outofsym:
585
+ if (lenp) *lenp = 0;
586
+ return NULL;
587
+ }
588
+
589
+ const char *tagged_ptr = mrb->symtbl[sym];
590
+ const char *symname = symtbl_get_ptr(tagged_ptr); /* Untag for access */
591
+
592
+ if (!symtbl_is_literal(tagged_ptr)) {
593
+ uint32_t len = mrb_packed_int_decode((const uint8_t*)symname, (const uint8_t**)&symname);
594
+ if (lenp) *lenp = (mrb_int)len;
595
+ }
596
+ else if (lenp) {
597
+ *lenp = (mrb_int)strlen(symname);
598
+ }
599
+ return symname;
600
+ }
601
+
602
+ /*
603
+ * Retrieves the name and length of a symbol.
604
+ *
605
+ * mrb: The mruby state.
606
+ * sym: The symbol to retrieve the name and length for.
607
+ * lenp: A pointer to an mrb_int where the length of the symbol name will be stored.
608
+ * This can be NULL if the length is not needed.
609
+ *
610
+ * Returns a pointer to the C string representing the symbol's name,
611
+ * or NULL if the symbol is invalid.
612
+ * For inline symbols, the name is copied to an internal buffer (mrb->symbuf)
613
+ * unless MRB_USE_ALL_SYMBOLS is defined.
614
+ */
615
+ MRB_API const char*
616
+ mrb_sym_name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp)
617
+ {
618
+ #ifdef MRB_USE_ALL_SYMBOLS
619
+ return sym2name_len(mrb, sym, NULL, lenp);
620
+ #else
621
+ return sym2name_len(mrb, sym, mrb->symbuf, lenp);
622
+ #endif
623
+ }
624
+
625
+ void
626
+ mrb_free_symtbl(mrb_state *mrb)
627
+ {
628
+ /* Free symbol string pool chunks */
629
+ struct sym_pool_chunk *chunk = (struct sym_pool_chunk*)mrb->sym_pool;
630
+ while (chunk) {
631
+ struct sym_pool_chunk *next = chunk->next;
632
+ mrb_free(mrb, chunk);
633
+ chunk = next;
634
+ }
635
+ mrb->sym_pool = NULL;
636
+
637
+ mrb_free(mrb, (void*)mrb->symtbl);
638
+
639
+ /* Free hash table if allocated */
640
+ if (mrb->symhash) {
641
+ mrb_free(mrb, mrb->symhash->symlink);
642
+ mrb_free(mrb, mrb->symhash);
643
+ mrb->symhash = NULL;
644
+ }
645
+ }
646
+
647
+ void
648
+ mrb_init_symtbl(mrb_state *mrb)
649
+ {
650
+ /* Initialize in linear mode - hash table allocated on demand */
651
+ mrb->symhash = NULL;
652
+ mrb->sym_pool = NULL;
653
+ }
654
+
655
+ /**********************************************************************
656
+ * Document-class: Symbol
657
+ *
658
+ * `Symbol` objects represent names and some strings
659
+ * inside the Ruby
660
+ * interpreter. They are generated using the `:name` and
661
+ * `:"string"` literals
662
+ * syntax, and by the various `to_sym` methods. The same
663
+ * `Symbol` object will be created for a given name or string
664
+ * for the duration of a program's execution, regardless of the context
665
+ * or meaning of that name. Thus if `Fred` is a constant in
666
+ * one context, a method in another, and a class in a third, the
667
+ * `Symbol` `:Fred` will be the same object in
668
+ * all three contexts.
669
+ *
670
+ * module One
671
+ * class Fred
672
+ * end
673
+ * $f1 = :Fred
674
+ * end
675
+ * module Two
676
+ * Fred = 1
677
+ * $f2 = :Fred
678
+ * end
679
+ * def Fred()
680
+ * end
681
+ * $f3 = :Fred
682
+ * $f1.object_id #=> 2514190
683
+ * $f2.object_id #=> 2514190
684
+ * $f3.object_id #=> 2514190
685
+ *
686
+ */
687
+
688
+ /* 15.2.11.3.2 */
689
+ /* 15.2.11.3.3 */
690
+ /*
691
+ * call-seq:
692
+ * sym.to_s -> string
693
+ *
694
+ * Returns the name or string corresponding to *sym*.
695
+ *
696
+ * :fred.to_s #=> "fred"
697
+ */
698
+ static mrb_value
699
+ sym_to_s(mrb_state *mrb, mrb_value sym)
700
+ {
701
+ return mrb_sym_str(mrb, mrb_symbol(sym));
702
+ }
703
+
704
+ /*
705
+ * call-seq:
706
+ * sym.name -> string
707
+ *
708
+ * Returns the name or string corresponding to *sym*. Unlike #to_s, the
709
+ * returned string is frozen.
710
+ *
711
+ * :fred.name #=> "fred"
712
+ * :fred.name.frozen? #=> true
713
+ */
714
+ static mrb_value
715
+ sym_name(mrb_state *mrb, mrb_value vsym)
716
+ {
717
+ mrb_sym sym = mrb_symbol(vsym);
718
+ mrb_int len;
719
+ const char *name = mrb_sym_name_len(mrb, sym, &len);
720
+
721
+ mrb_assert(name != NULL);
722
+ if (SYMBOL_INLINE_P(sym)) {
723
+ return mrb_str_new_frozen(mrb, name, len);
724
+ }
725
+ return mrb_str_new_static_frozen(mrb, name, len);
726
+ }
727
+
728
+ /* 15.2.11.3.4 */
729
+ /*
730
+ * Document-method: Symbol#to_sym
731
+ *
732
+ * call-seq:
733
+ * sym.to_sym -> sym
734
+ * sym.intern -> sym
735
+ *
736
+ * In general, `to_sym` returns the `Symbol` corresponding
737
+ * to an object. As *sym* is already a symbol, `self` is returned
738
+ * in this case.
739
+ */
740
+
741
+ /* 15.2.11.3.5(x) */
742
+ /*
743
+ * call-seq:
744
+ * sym.inspect -> string
745
+ *
746
+ * Returns the representation of *sym* as a symbol literal.
747
+ *
748
+ * :fred.inspect #=> ":fred"
749
+ */
750
+
751
+ #if __STDC__
752
+ # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
753
+ #else /* not __STDC__ */
754
+ /* As in Harbison and Steele. */
755
+ # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
756
+ #endif
757
+ #define is_identchar(c) (SIGN_EXTEND_CHAR(c)!=-1&&(ISALNUM(c) || (c) == '_'))
758
+
759
+ static mrb_bool
760
+ is_special_global_name(const char* m)
761
+ {
762
+ switch (*m) {
763
+ case '~': case '*': case '$': case '?': case '!': case '@':
764
+ case '/': case '\\': case ';': case ',': case '.': case '=':
765
+ case ':': case '<': case '>': case '\"':
766
+ case '&': case '`': case '\'': case '+':
767
+ case '0':
768
+ m++;
769
+ break;
770
+ case '-':
771
+ m++;
772
+ if (is_identchar(*m)) m += 1;
773
+ break;
774
+ default:
775
+ if (!ISDIGIT(*m)) return FALSE;
776
+ do m++; while (ISDIGIT(*m));
777
+ break;
778
+ }
779
+ return !*m;
780
+ }
781
+
782
+ static mrb_bool
783
+ symname_p(const char *name)
784
+ {
785
+ const char *m = name;
786
+ mrb_bool localid = FALSE;
787
+
788
+ if (!m) return FALSE;
789
+ switch (*m) {
790
+ case '\0':
791
+ return FALSE;
792
+
793
+ case '$':
794
+ if (is_special_global_name(++m)) return TRUE;
795
+ goto id;
796
+
797
+ case '@':
798
+ if (*++m == '@') ++m;
799
+ goto id;
800
+
801
+ case '<':
802
+ switch (*++m) {
803
+ case '<': ++m; break;
804
+ case '=': if (*++m == '>') m++; break;
805
+ default: break;
806
+ }
807
+ break;
808
+
809
+ case '>':
810
+ switch (*++m) {
811
+ case '>': case '=': ++m; break;
812
+ default: break;
813
+ }
814
+ break;
815
+
816
+ case '=':
817
+ switch (*++m) {
818
+ case '~': m++; break;
819
+ case '=': if (*++m == '=') m++; break;
820
+ default: return FALSE;
821
+ }
822
+ break;
823
+
824
+ case '*':
825
+ if (*++m == '*') m++;
826
+ break;
827
+ case '!':
828
+ switch (*++m) {
829
+ case '=': case '~': m++;
830
+ }
831
+ break;
832
+ case '+': case '-':
833
+ if (*++m == '@') m++;
834
+ break;
835
+ case '|':
836
+ if (*++m == '|') m++;
837
+ break;
838
+ case '&':
839
+ if (*++m == '&') m++;
840
+ break;
841
+
842
+ case '^': case '/': case '%': case '~': case '`':
843
+ m++;
844
+ break;
845
+
846
+ case '[':
847
+ if (*++m != ']') return FALSE;
848
+ if (*++m == '=') m++;
849
+ break;
850
+
851
+ default:
852
+ localid = !ISUPPER(*m);
853
+ id:
854
+ if (*m != '_' && !ISALPHA(*m)) return FALSE;
855
+ while (is_identchar(*m)) m += 1;
856
+ if (localid) {
857
+ switch (*m) {
858
+ case '!': case '?': case '=': m++;
859
+ default: break;
860
+ }
861
+ }
862
+ break;
863
+ }
864
+ return *m ? FALSE : TRUE;
865
+ }
866
+
867
+ static mrb_value
868
+ sym_inspect(mrb_state *mrb, mrb_value sym)
869
+ {
870
+ mrb_sym id = mrb_symbol(sym);
871
+ mrb_int len;
872
+ const char *name = mrb_sym_name_len(mrb, id, &len);
873
+ mrb_value str = mrb_str_new(mrb, NULL, len+1);
874
+ char *sp = RSTRING_PTR(str);
875
+
876
+ sp[0] = ':';
877
+ memcpy(sp+1, name, len);
878
+ mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX);
879
+ if (!symname_p(name) || strlen(name) != (size_t)len) {
880
+ str = mrb_str_inspect(mrb, str);
881
+ sp = RSTRING_PTR(str);
882
+ sp[0] = ':';
883
+ sp[1] = '"';
884
+ }
885
+ #ifdef MRB_UTF8_STRING
886
+ if (SYMBOL_INLINE_P(id)) RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
887
+ #endif
888
+ return str;
889
+ }
890
+
891
+ /*
892
+ * Converts a symbol to an mruby string value.
893
+ *
894
+ * mrb: The mruby state.
895
+ * sym: The symbol to convert.
896
+ *
897
+ * Returns the mruby string value corresponding to the symbol.
898
+ * If the symbol is an inline symbol, a new string is created.
899
+ * Otherwise, a static string (sharing the symbol's name buffer) is returned.
900
+ * Returns an undefined value if the symbol is invalid (though this should not happen).
901
+ */
902
+ MRB_API mrb_value
903
+ mrb_sym_str(mrb_state *mrb, mrb_sym sym)
904
+ {
905
+ mrb_int len;
906
+ const char *name = mrb_sym_name_len(mrb, sym, &len);
907
+
908
+ if (!name) return mrb_undef_value(); /* can't happen */
909
+ if (SYMBOL_INLINE_P(sym)) {
910
+ mrb_value str = mrb_str_new(mrb, name, len);
911
+ RSTR_SET_ASCII_FLAG(mrb_str_ptr(str));
912
+ return str;
913
+ }
914
+ return mrb_str_new_static(mrb, name, len);
915
+ }
916
+
917
+ static const char*
918
+ sym_cstr(mrb_state *mrb, mrb_sym sym, mrb_bool dump)
919
+ {
920
+ mrb_int len;
921
+ const char *name = mrb_sym_name_len(mrb, sym, &len);
922
+
923
+ if (!name) return NULL;
924
+ if (strlen(name) == (size_t)len && (!dump || symname_p(name))) {
925
+ return name;
926
+ }
927
+ else {
928
+ mrb_value str = mrb_str_new_static(mrb, name, len);
929
+ str = mrb_str_dump(mrb, str);
930
+ return RSTRING_PTR(str);
931
+ }
932
+ }
933
+
934
+ /*
935
+ * Retrieves the C string representation of a symbol's name.
936
+ *
937
+ * mrb: The mruby state.
938
+ * sym: The symbol to retrieve the name for.
939
+ *
940
+ * Returns a pointer to the C string representing the symbol's name.
941
+ * Returns NULL if the symbol is invalid.
942
+ * If the symbol's name contains null bytes or is not a valid identifier
943
+ * for direct use (based on internal checks in sym_cstr), this function
944
+ * might return a "dumped" (quoted and escaped) version of the name.
945
+ */
946
+ MRB_API const char*
947
+ mrb_sym_name(mrb_state *mrb, mrb_sym sym)
948
+ {
949
+ return sym_cstr(mrb, sym, FALSE);
950
+ }
951
+
952
+ /*
953
+ * Retrieves the C string representation of a symbol's name, suitable for dumping.
954
+ * This version is intended for producing a string that can be safely outputted,
955
+ * for example, in debugging or serialization contexts. It may quote or escape
956
+ * the symbol name if it's not a simple identifier.
957
+ *
958
+ * mrb: The mruby state.
959
+ * sym: The symbol to retrieve the dump name for.
960
+ *
961
+ * Returns a pointer to the C string representing the symbol's name for dumping.
962
+ * Returns NULL if the symbol is invalid.
963
+ */
964
+ MRB_API const char*
965
+ mrb_sym_dump(mrb_state *mrb, mrb_sym sym)
966
+ {
967
+ return sym_cstr(mrb, sym, TRUE);
968
+ }
969
+
970
+ #define lesser(a,b) (((a)>(b))?(b):(a))
971
+
972
+ static mrb_value
973
+ sym_cmp(mrb_state *mrb, mrb_value s1)
974
+ {
975
+ mrb_value s2 = mrb_get_arg1(mrb);
976
+ mrb_sym sym1, sym2;
977
+
978
+ if (!mrb_symbol_p(s2)) return mrb_nil_value();
979
+ sym1 = mrb_symbol(s1);
980
+ sym2 = mrb_symbol(s2);
981
+ if (sym1 == sym2) return mrb_fixnum_value(0);
982
+ else {
983
+ const char *p1, *p2;
984
+ int retval;
985
+ mrb_int len, len1, len2;
986
+ char buf1[8], buf2[8];
987
+
988
+ p1 = sym2name_len(mrb, sym1, buf1, &len1);
989
+ p2 = sym2name_len(mrb, sym2, buf2, &len2);
990
+ len = lesser(len1, len2);
991
+ retval = memcmp(p1, p2, len);
992
+ if (retval == 0) {
993
+ if (len1 == len2) return mrb_fixnum_value(0);
994
+ if (len1 > len2) return mrb_fixnum_value(1);
995
+ return mrb_fixnum_value(-1);
996
+ }
997
+ if (retval > 0) return mrb_fixnum_value(1);
998
+ return mrb_fixnum_value(-1);
999
+ }
1000
+ }
1001
+ #undef lesser
1002
+
1003
+ /* ---------------------------*/
1004
+ static const mrb_mt_entry symbol_rom_entries[] = {
1005
+ MRB_MT_ENTRY(sym_to_s, MRB_SYM(to_s), MRB_ARGS_NONE()), /* 15.2.11.3.3 */
1006
+ MRB_MT_ENTRY(sym_name, MRB_SYM(name), MRB_ARGS_NONE()),
1007
+ MRB_MT_ENTRY(mrb_obj_itself, MRB_SYM(to_sym), MRB_ARGS_NONE()), /* 15.2.11.3.4 */
1008
+ MRB_MT_ENTRY(sym_inspect, MRB_SYM(inspect), MRB_ARGS_NONE()), /* 15.2.11.3.5(x) */
1009
+ MRB_MT_ENTRY(sym_cmp, MRB_OPSYM(cmp), MRB_ARGS_REQ(1)),
1010
+ MRB_MT_ENTRY(mrb_obj_equal_m, MRB_OPSYM(eq), MRB_ARGS_REQ(1)),
1011
+ };
1012
+
1013
+ void
1014
+ mrb_init_symbol(mrb_state *mrb)
1015
+ {
1016
+ struct RClass *sym;
1017
+
1018
+ mrb->symbol_class = sym = mrb_define_class_id(mrb, MRB_SYM(Symbol), mrb->object_class); /* 15.2.11 */
1019
+ MRB_SET_INSTANCE_TT(sym, MRB_TT_SYMBOL);
1020
+ mrb_undef_class_method_id(mrb, sym, MRB_SYM(new));
1021
+
1022
+ MRB_MT_INIT_ROM(mrb, sym, symbol_rom_entries);
1023
+ }